@pattern-stack/frontend-patterns 0.0.6 → 0.1.1
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/atoms/composed/index.d.ts +0 -1
- package/dist/atoms/composed/index.d.ts.map +1 -1
- package/dist/atoms/types/index.d.ts +0 -2
- package/dist/atoms/types/index.d.ts.map +1 -1
- package/dist/atoms/ui/ErrorBoundary.d.ts +1 -1
- package/dist/atoms/ui/button.d.ts +1 -1
- package/dist/atoms/utils/utils.d.ts +0 -2
- package/dist/atoms/utils/utils.d.ts.map +1 -1
- package/dist/features/auth/components/ProtectedRoute.d.ts +1 -1
- package/dist/frontend-patterns.css +1 -1
- package/dist/index.es.js +15 -403
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +14 -403
- package/dist/index.js.map +1 -1
- package/dist/molecules/layout/Sidebar.d.ts.map +1 -1
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +0 -2
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +1 -1
- package/dist/molecules/layout/index.d.ts +0 -3
- package/dist/molecules/layout/index.d.ts.map +1 -1
- package/dist/templates/factory.d.ts +1 -2
- package/dist/templates/factory.d.ts.map +1 -1
- package/dist/templates/index.d.ts.map +1 -1
- package/package.json +3 -7
- package/src/App.tsx +1 -11
- package/src/atoms/composed/index.ts +0 -1
- package/src/atoms/types/index.ts +1 -3
- package/src/atoms/utils/utils.ts +2 -4
- package/src/molecules/layout/Sidebar.tsx +23 -10
- package/src/molecules/layout/SidebarButton/SidebarButton.tsx +10 -32
- package/src/molecules/layout/index.ts +1 -4
- package/src/organisms/index.ts +1 -5
- package/src/pages/AdminShowcase/AdminDashboardShowcase.tsx +75 -77
- package/src/pages/AdminShowcase/index.tsx +1 -2
- package/src/pages/index.ts +1 -2
- package/src/templates/factory.tsx +7 -14
- package/src/templates/index.ts +0 -4
- package/dist/atoms/composed/SalesPanel/SalesPanel.d.ts +0 -19
- package/dist/atoms/composed/SalesPanel/SalesPanel.d.ts.map +0 -1
- package/dist/atoms/composed/SalesPanel/index.d.ts +0 -2
- package/dist/atoms/composed/SalesPanel/index.d.ts.map +0 -1
- package/dist/atoms/composed/SalesPanel/mockSalesData.d.ts +0 -63
- package/dist/atoms/composed/SalesPanel/mockSalesData.d.ts.map +0 -1
- package/dist/atoms/types/entity-config.d.ts +0 -117
- package/dist/atoms/types/entity-config.d.ts.map +0 -1
- package/dist/atoms/types/navigation.d.ts +0 -30
- package/dist/atoms/types/navigation.d.ts.map +0 -1
- package/dist/atoms/utils/icon-resolver.d.ts +0 -72
- package/dist/atoms/utils/icon-resolver.d.ts.map +0 -1
- package/dist/atoms/utils/metric-engine.d.ts +0 -30
- package/dist/atoms/utils/metric-engine.d.ts.map +0 -1
- package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts +0 -16
- package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts.map +0 -1
- package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts +0 -2
- package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts.map +0 -1
- package/dist/molecules/layout/NavigationContext.d.ts +0 -15
- package/dist/molecules/layout/NavigationContext.d.ts.map +0 -1
- package/src/__tests__/atoms/composed/databadge.test.tsx +0 -106
- package/src/__tests__/atoms/composed/statcard.test.tsx +0 -133
- package/src/__tests__/atoms/utils/icon-resolver.test.tsx +0 -140
- package/src/atoms/composed/SalesPanel/SalesPanel.tsx +0 -116
- package/src/atoms/composed/SalesPanel/index.ts +0 -1
- package/src/atoms/composed/SalesPanel/mockSalesData.ts +0 -151
- package/src/atoms/types/entity-config.ts +0 -127
- package/src/atoms/types/navigation.ts +0 -43
- package/src/atoms/utils/icon-resolver.tsx +0 -54
- package/src/atoms/utils/metric-engine.ts +0 -236
- package/src/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.tsx +0 -42
- package/src/molecules/layout/DashboardWithSidePanel/index.ts +0 -1
- package/src/molecules/layout/NavigationContext.tsx +0 -63
- package/src/organisms/entity/CategoryBreakdownPanel.tsx +0 -427
- package/src/organisms/entity/EntityListPanel.tsx +0 -339
- package/src/organisms/entity/MetricsOverviewPanel.tsx +0 -236
- package/src/organisms/entity/TrendAnalysisPanel.tsx +0 -337
- package/src/organisms/entity/index.ts +0 -4
- package/src/pages/AdminShowcase/SalesPerformanceDashboard.tsx +0 -158
- package/src/pages/EntityShowcase/EntityManagementShowcase.tsx +0 -137
- package/src/pages/EntityShowcase/EntityPerformanceShowcase.tsx +0 -117
- package/src/pages/EntityShowcase/index.ts +0 -2
- package/src/pages/EntityTemplateExample.tsx +0 -229
- package/src/pages/TestEntityTemplate.tsx +0 -40
- package/src/templates/entity/EntityManagementTemplate.tsx +0 -430
- package/src/templates/entity/EntityPerformanceDashboardTemplate.tsx +0 -277
- package/src/templates/entity/configs/financial-config.ts +0 -141
- package/src/templates/entity/configs/index.ts +0 -1
- package/src/templates/entity/index.ts +0 -3
- package/src/templates/financial/FinancialDashboardTemplate.tsx +0 -326
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/atoms/shared/config/constants.ts","../src/atoms/shared/config/environment.ts","../src/atoms/shared/config/dashboard-sizes.ts","../src/atoms/utils/tooltip-helpers.ts","../src/atoms/utils/metric-engine.ts","../src/atoms/utils/icon-resolver.tsx","../src/atoms/utils/utils.ts","../src/atoms/utils/animations.ts","../src/atoms/services/api/client.ts","../src/atoms/hooks/useApi.ts","../src/atoms/ui/ErrorBoundary.tsx","../src/atoms/composed/Tooltip/Tooltip.tsx","../src/atoms/ui/button.tsx","../src/atoms/ui/card.tsx","../src/atoms/ui/input.tsx","../src/atoms/ui/label.tsx","../src/atoms/ui/table.tsx","../src/atoms/ui/Badge.tsx","../src/atoms/ui/Select.tsx","../src/atoms/ui/Switch.tsx","../src/atoms/ui/Tabs.tsx","../src/atoms/ui/avatar.tsx","../src/atoms/ui/dropdown-menu.tsx","../src/atoms/ui/skeleton.tsx","../src/atoms/ui/spinner.tsx","../src/atoms/composed/DataBadge/DataBadge.tsx","../src/atoms/composed/SalesPanel/SalesPanel.tsx","../src/atoms/composed/StatCard/StatCard.tsx","../src/atoms/composed/DetailedCard/DetailedCard.tsx","../src/atoms/composed/EmptyState/EmptyState.tsx","../src/atoms/composed/ColorSwatch/ColorSwatch.tsx","../src/atoms/composed/IconBadge/IconBadge.tsx","../src/atoms/services/auth-service.ts","../src/features/auth/hooks/useAuth.tsx","../src/features/auth/components/LoginForm.tsx","../src/features/auth/components/ProtectedRoute.tsx","../src/features/auth/components/LogoutButton.tsx","../src/features/auth/hooks/usePermissions.ts","../src/atoms/composed/UserAvatar/UserAvatar.tsx","../src/atoms/composed/UserMenu/UserMenu.tsx","../src/atoms/composed/GlobalSearch/GlobalSearch.tsx","../src/atoms/composed/DataTable/DataTable.tsx","../src/atoms/composed/DateTimePicker/DateTimePicker.tsx","../src/atoms/composed/Chart/Chart.tsx","../src/atoms/composed/Accordion/Accordion.tsx","../src/atoms/composed/Modal/Modal.tsx","../src/atoms/composed/ProgressBar/ProgressBar.tsx","../src/atoms/composed/FileUpload/FileUpload.tsx","../src/atoms/composed/Alert/Alert.tsx","../src/atoms/composed/Toast/Toast.tsx","../src/atoms/composed/FormField/FormField.tsx","../src/atoms/composed/Breadcrumb/Breadcrumb.tsx","../src/atoms/composed/DarkModeToggle.tsx","../src/atoms/composed/PaletteSwitcher.tsx","../src/atoms/composed/StyleGuide.tsx","../src/molecules/layout/PageTemplate.tsx","../src/molecules/layout/ShowcaseSection.tsx","../src/molecules/layout/SidebarContext.tsx","../src/molecules/layout/NavigationContext.tsx","../src/molecules/layout/SidebarButton/SidebarButton.tsx","../src/molecules/layout/Sidebar.tsx","../src/molecules/layout/AppHeader/AppHeader.tsx","../src/molecules/layout/AppLayout.tsx","../src/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.tsx","../src/molecules/layout/SectionHeader/SectionHeader.tsx","../src/molecules/navigation/Pagination.tsx","../src/molecules/navigation/NavMenu.tsx","../src/molecules/forms/FormGroup.tsx","../src/molecules/forms/SearchInput.tsx","../src/templates/ComponentShowcaseTemplate.tsx","../src/templates/DashboardTemplate.tsx","../src/templates/AuthTemplate.tsx","../src/templates/DataTemplate.tsx","../src/templates/admin/AdminDashboardTemplate.tsx","../src/templates/admin/AdminCRUDTemplate.tsx","../src/templates/admin/AdminDetailTemplate.tsx","../src/templates/factory.tsx","../src/organisms/showcase/ComponentShowcasePage.tsx"],"sourcesContent":["export const APP_NAME = 'Design System Showcase';\n\nexport const API_ENDPOINTS = {\n HEALTH: '/health',\n} as const;\n\nexport const ROUTES = {\n HOME: '/',\n COMPONENTS: '/components',\n STYLE_GUIDE: '/style-guide',\n} as const;\n\nexport const UI_CONFIG = {\n DEFAULT_PAGE_SIZE: 20,\n DEBOUNCE_DELAY: 300,\n TOAST_DURATION: 5000,\n} as const;","export const env = {\n API_BASE_URL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080',\n OPENAPI_URL: import.meta.env.OPENAPI_URL || 'http://localhost:8080/openapi.json',\n NODE_ENV: import.meta.env.NODE_ENV || 'development',\n IS_DEVELOPMENT: import.meta.env.NODE_ENV === 'development',\n IS_PRODUCTION: import.meta.env.NODE_ENV === 'production',\n // Feature flags for development\n USE_MOCK_DATA: import.meta.env.VITE_USE_MOCK_DATA === 'true' || false,\n MOCK_API_DELAY: parseInt(import.meta.env.VITE_MOCK_API_DELAY || '500'),\n} as const;","// Dashboard component sizing constants\n// These provide standardized heights for consistent layouts\n\n/** \n * Dashboard chart heights in pixels\n * Use these constants instead of hardcoded values for consistent sizing\n */\nexport const DASHBOARD_CHART_HEIGHTS = {\n // Compact sizes for dense layouts\n compact: 180, // For small charts in grids\n small: 240, // Standard small chart size\n \n // Medium sizes for primary content\n medium: 320, // Most common dashboard chart size\n mediumLarge: 400, // For detailed primary charts\n \n // Large sizes for feature charts\n large: 480, // Full-featured charts with legends\n extraLarge: 600, // Hero charts and detailed analytics\n \n // Special purpose sizes\n sidebar: 200, // For sidebar/secondary charts\n mobile: 160, // Mobile-optimized height\n} as const;\n\n/** \n * Dashboard container heights (includes padding)\n * These account for padding, headers, and spacing\n */\nexport const DASHBOARD_CONTAINER_HEIGHTS = {\n // Chart containers (chart height + padding/headers)\n compactChart: DASHBOARD_CHART_HEIGHTS.compact + 80, // 260px\n smallChart: DASHBOARD_CHART_HEIGHTS.small + 80, // 320px \n mediumChart: DASHBOARD_CHART_HEIGHTS.medium + 80, // 400px\n mediumLargeChart: DASHBOARD_CHART_HEIGHTS.mediumLarge + 80, // 480px\n largeChart: DASHBOARD_CHART_HEIGHTS.large + 80, // 560px\n extraLargeChart: DASHBOARD_CHART_HEIGHTS.extraLarge + 80, // 680px\n \n // Sidebar and panel heights\n sidebarPanel: 280, // For alert panels, activity feeds\n sidebarChart: DASHBOARD_CHART_HEIGHTS.sidebar + 60, // 260px\n \n // Grid item heights\n statCard: 120, // For metric/stat cards\n miniChart: 180, // For sparkline charts\n} as const;\n\n/** \n * CSS height classes mapping to our size constants\n * Use these in className props for consistent styling\n */\nexport const DASHBOARD_HEIGHT_CLASSES = {\n // Chart heights\n 'chart-compact': `h-[${DASHBOARD_CHART_HEIGHTS.compact}px]`,\n 'chart-small': `h-[${DASHBOARD_CHART_HEIGHTS.small}px]`,\n 'chart-medium': `h-[${DASHBOARD_CHART_HEIGHTS.medium}px]`,\n 'chart-medium-large': `h-[${DASHBOARD_CHART_HEIGHTS.mediumLarge}px]`,\n 'chart-large': `h-[${DASHBOARD_CHART_HEIGHTS.large}px]`,\n 'chart-extra-large': `h-[${DASHBOARD_CHART_HEIGHTS.extraLarge}px]`,\n 'chart-sidebar': `h-[${DASHBOARD_CHART_HEIGHTS.sidebar}px]`,\n \n // Container heights\n 'container-compact-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.compactChart}px]`,\n 'container-small-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.smallChart}px]`,\n 'container-medium-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.mediumChart}px]`,\n 'container-medium-large-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.mediumLargeChart}px]`,\n 'container-large-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.largeChart}px]`,\n 'container-extra-large-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.extraLargeChart}px]`,\n \n // Panel heights\n 'sidebar-panel': `h-[${DASHBOARD_CONTAINER_HEIGHTS.sidebarPanel}px]`,\n 'sidebar-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.sidebarChart}px]`,\n 'stat-card': `h-[${DASHBOARD_CONTAINER_HEIGHTS.statCard}px]`,\n 'mini-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.miniChart}px]`,\n} as const;\n\n/** \n * Helper function to get chart height for Chart component\n */\nexport const getChartHeight = (size: keyof typeof DASHBOARD_CHART_HEIGHTS): number => {\n return DASHBOARD_CHART_HEIGHTS[size];\n};\n\n/** \n * Helper function to get container height class\n */\nexport const getContainerHeightClass = (size: keyof typeof DASHBOARD_HEIGHT_CLASSES): string => {\n return DASHBOARD_HEIGHT_CLASSES[size];\n};\n\n/**\n * Responsive height configurations for different screen sizes\n */\nexport const RESPONSIVE_CHART_HEIGHTS = {\n mobile: {\n primary: DASHBOARD_CHART_HEIGHTS.mobile,\n secondary: DASHBOARD_CHART_HEIGHTS.compact,\n },\n tablet: {\n primary: DASHBOARD_CHART_HEIGHTS.small,\n secondary: DASHBOARD_CHART_HEIGHTS.sidebar,\n },\n desktop: {\n primary: DASHBOARD_CHART_HEIGHTS.medium,\n secondary: DASHBOARD_CHART_HEIGHTS.small,\n },\n large: {\n primary: DASHBOARD_CHART_HEIGHTS.large,\n secondary: DASHBOARD_CHART_HEIGHTS.medium,\n },\n} as const;","import { useRef, useState, useEffect } from 'react';\n\n/**\n * Hook to detect if an element's text is truncated/overflowing\n * Useful for conditionally showing tooltips only when needed\n */\nexport const useTextOverflow = () => {\n const ref = useRef<HTMLElement>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n useEffect(() => {\n const checkOverflow = () => {\n const element = ref.current;\n if (!element) return;\n\n // Check if text is truncated\n const isOverflow = element.scrollWidth > element.clientWidth || \n element.scrollHeight > element.clientHeight;\n setIsOverflowing(isOverflow);\n };\n\n checkOverflow();\n \n // Re-check on resize\n window.addEventListener('resize', checkOverflow);\n \n // Use ResizeObserver if available for more accurate detection\n if (typeof ResizeObserver !== 'undefined') {\n const resizeObserver = new ResizeObserver(checkOverflow);\n if (ref.current) {\n resizeObserver.observe(ref.current);\n }\n return () => {\n resizeObserver.disconnect();\n window.removeEventListener('resize', checkOverflow);\n };\n }\n\n return () => window.removeEventListener('resize', checkOverflow);\n }, []);\n\n return { ref, isOverflowing };\n};\n\n/**\n * Formats large numbers with abbreviations\n * Useful for StatCard values with tooltips showing full numbers\n */\nexport const formatNumberWithTooltip = (value: number): { display: string; tooltip: string } => {\n const formatter = new Intl.NumberFormat('en-US');\n const fullNumber = formatter.format(value);\n\n if (value >= 1_000_000_000) {\n return {\n display: `${(value / 1_000_000_000).toFixed(1)}B`,\n tooltip: fullNumber\n };\n } else if (value >= 1_000_000) {\n return {\n display: `${(value / 1_000_000).toFixed(1)}M`,\n tooltip: fullNumber\n };\n } else if (value >= 10_000) {\n return {\n display: `${(value / 1_000).toFixed(1)}K`,\n tooltip: fullNumber\n };\n }\n\n return {\n display: fullNumber,\n tooltip: '' // No tooltip needed for small numbers\n };\n};\n\n/**\n * Standard tooltip content for common UI patterns\n */\nexport const tooltipContent = {\n // Icon button tooltips\n refresh: 'Refresh data',\n download: 'Download',\n upload: 'Upload file',\n edit: 'Edit',\n delete: 'Delete',\n view: 'View details',\n filter: 'Filter',\n search: 'Search',\n settings: 'Settings',\n help: 'Help',\n export: 'Export data',\n import: 'Import data',\n add: 'Add new',\n create: 'Create new',\n back: 'Go back',\n forward: 'Go forward',\n menu: 'Open menu',\n more: 'More options',\n copy: 'Copy',\n paste: 'Paste',\n share: 'Share',\n print: 'Print',\n \n // Status tooltips\n success: 'Operation completed successfully',\n warning: 'Requires attention',\n error: 'Error occurred',\n info: 'Information',\n pending: 'Pending',\n \n // Common actions\n save: 'Save changes',\n cancel: 'Cancel',\n close: 'Close',\n expand: 'Expand',\n collapse: 'Collapse',\n minimize: 'Minimize',\n maximize: 'Maximize',\n \n // Navigation\n previous: 'Previous',\n next: 'Next',\n first: 'Go to first',\n last: 'Go to last',\n home: 'Home',\n \n // Data operations\n sort: 'Sort',\n sortAsc: 'Sort ascending',\n sortDesc: 'Sort descending',\n clearSort: 'Clear sorting',\n clearFilters: 'Clear all filters',\n clearSearch: 'Clear search',\n \n // Authentication\n login: 'Sign in',\n logout: 'Sign out',\n profile: 'Profile',\n account: 'Account settings',\n};","import type { MetricConfig, MetricValue, EntityData, FormatConfig, TrendDataPoint } from '../types';\n\nexport class MetricCalculationEngine {\n static calculateMetric(\n config: MetricConfig,\n data: EntityData[],\n previousData?: EntityData[]\n ): MetricValue {\n const currentValue = this.aggregateValue(config, data);\n const previousValue = previousData ? this.aggregateValue(config, previousData) : undefined;\n \n const trend = this.calculateTrend(currentValue, previousValue);\n const formattedValue = this.formatValue(currentValue, config.format, config.type);\n \n const target = typeof config.target === 'function' \n ? config.target(data) \n : config.target;\n\n return {\n current: currentValue,\n previous: previousValue,\n trend,\n target,\n formattedValue\n };\n }\n\n private static aggregateValue(config: MetricConfig, data: EntityData[]): number {\n if (!data.length) return 0;\n\n const values = data\n .map(item => {\n const value = this.extractValue(item, config.key);\n return typeof value === 'number' ? value : 0;\n })\n .filter(value => !isNaN(value));\n\n if (!values.length) return 0;\n\n switch (config.aggregation || 'sum') {\n case 'sum':\n return values.reduce((sum, value) => sum + value, 0);\n case 'avg':\n return values.reduce((sum, value) => sum + value, 0) / values.length;\n case 'count':\n return values.length;\n case 'min':\n return Math.min(...values);\n case 'max':\n return Math.max(...values);\n default:\n return values.reduce((sum, value) => sum + value, 0);\n }\n }\n\n private static extractValue(item: EntityData, key: string): unknown {\n return key.split('.').reduce((obj: any, k: string) => obj?.[k], item);\n }\n\n private static calculateTrend(current: number, previous?: number): 'up' | 'down' | 'neutral' {\n if (previous === undefined || previous === 0) return 'neutral';\n \n const change = ((current - previous) / Math.abs(previous)) * 100;\n \n if (change > 1) return 'up';\n if (change < -1) return 'down';\n return 'neutral';\n }\n\n private static formatValue(value: number, format?: FormatConfig, type?: string): string {\n let formatted = value;\n\n if (format?.decimals !== undefined) {\n formatted = Number(value.toFixed(format.decimals));\n }\n\n let result = formatted.toString();\n\n if (format?.thousands !== false && Math.abs(formatted) >= 1000) {\n result = formatted.toLocaleString();\n }\n\n switch (type) {\n case 'currency':\n result = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: format?.decimals ?? 2,\n maximumFractionDigits: format?.decimals ?? 2\n }).format(formatted);\n break;\n case 'percentage':\n result = `${formatted.toFixed(format?.decimals ?? 1)}%`;\n break;\n case 'duration':\n result = this.formatDuration(formatted);\n break;\n case 'ratio':\n result = `${formatted.toFixed(format?.decimals ?? 2)}:1`;\n break;\n default:\n if (format?.prefix) result = format.prefix + result;\n if (format?.suffix) result = result + format.suffix;\n }\n\n return result;\n }\n\n private static formatDuration(minutes: number): string {\n const hours = Math.floor(minutes / 60);\n const mins = Math.floor(minutes % 60);\n \n if (hours > 0) {\n return `${hours}h ${mins}m`;\n }\n return `${mins}m`;\n }\n\n static calculateTrendData(\n config: MetricConfig,\n data: EntityData[],\n dateField: string = 'date',\n periods: number = 12\n ): TrendDataPoint[] {\n const groupedData = this.groupByPeriod(data, dateField);\n const sortedDates = Object.keys(groupedData).sort();\n \n return sortedDates.slice(-periods).map(date => ({\n date,\n value: this.aggregateValue(config, groupedData[date]),\n label: this.formatDateLabel(date)\n }));\n }\n\n private static groupByPeriod(data: EntityData[], dateField: string): Record<string, EntityData[]> {\n return data.reduce((groups, item) => {\n const date = this.extractValue(item, dateField);\n if (!date) return groups;\n \n const period = new Date(date as string | number | Date).toISOString().split('T')[0];\n \n if (!groups[period]) groups[period] = [];\n groups[period].push(item);\n \n return groups;\n }, {} as Record<string, EntityData[]>);\n }\n\n private static formatDateLabel(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', { \n month: 'short', \n day: 'numeric' \n });\n }\n\n static calculateCategoryBreakdown(\n data: EntityData[],\n categoryField: string,\n valueField: string,\n maxCategories: number = 8\n ) {\n const groups = data.reduce((acc, item) => {\n const category = String(this.extractValue(item, categoryField) || 'Unknown');\n const value = this.extractValue(item, valueField) || 0;\n \n if (!acc[category]) acc[category] = 0;\n acc[category] += typeof value === 'number' ? value : 0;\n \n return acc;\n }, {} as Record<string, number>);\n\n const total = Object.values(groups).reduce((sum, value) => sum + value, 0);\n \n let categories = Object.entries(groups)\n .map(([category, value]) => ({\n category,\n value,\n percentage: total > 0 ? (value / total) * 100 : 0\n }))\n .sort((a, b) => b.value - a.value);\n\n if (categories.length > maxCategories) {\n const topCategories = categories.slice(0, maxCategories - 1);\n const otherValue = categories.slice(maxCategories - 1)\n .reduce((sum, cat) => sum + cat.value, 0);\n \n topCategories.push({\n category: 'Other',\n value: otherValue,\n percentage: total > 0 ? (otherValue / total) * 100 : 0\n });\n \n categories = topCategories;\n }\n\n return categories;\n }\n\n static detectInsights(\n metrics: Record<string, MetricValue>,\n thresholds: Record<string, { warning: number; critical: number }> = {}\n ) {\n const insights = [];\n\n for (const [key, metric] of Object.entries(metrics)) {\n const threshold = thresholds[key];\n \n if (metric.target && metric.current < metric.target * 0.8) {\n insights.push({\n type: 'negative' as const,\n message: `${key} is significantly below target`,\n value: metric.current\n });\n }\n \n if (metric.trend === 'up' && metric.previous && metric.current > metric.previous * 1.2) {\n insights.push({\n type: 'positive' as const,\n message: `${key} showing strong growth`,\n value: metric.current\n });\n }\n \n if (threshold && metric.current >= threshold.critical) {\n insights.push({\n type: 'negative' as const,\n message: `${key} has reached critical threshold`,\n value: metric.current\n });\n }\n }\n\n return insights.slice(0, 5);\n }\n}","import {\n Palette, Menu, X, Shield, Users, BarChart3, Database, TrendingUp, Layout,\n Home, Settings, Bell, Search, Plus, Edit, Trash2, Eye, Download, Upload,\n Share, Lock, Unlock, Mail, Phone, Calendar, Clock, MapPin, Star, Heart,\n Bookmark, Tag, Flag, File, Folder, Image, Video, Music, ChevronRight,\n ChevronDown, ChevronLeft, ChevronUp, ArrowRight, ArrowLeft, ArrowUp,\n ArrowDown, Check, AlertCircle, Info, HelpCircle\n} from 'lucide-react'\nimport type { IconName } from '../types'\n\n// Map of icon names to Lucide React components\nexport const iconMap = {\n Palette, Menu, X, Shield, Users, BarChart3, Database, TrendingUp, Layout,\n Home, Settings, Bell, Search, Plus, Edit, Trash2, Eye, Download, Upload,\n Share, Lock, Unlock, Mail, Phone, Calendar, Clock, MapPin, Star, Heart,\n Bookmark, Tag, Flag, File, Folder, Image, Video, Music, ChevronRight,\n ChevronDown, ChevronLeft, ChevronUp, ArrowRight, ArrowLeft, ArrowUp,\n ArrowDown, Check, AlertCircle, Info, HelpCircle\n}\n\ninterface IconProps {\n name: IconName\n className?: string\n size?: number\n [key: string]: any // Allow any additional props to be passed through\n}\n\n/**\n * Resolves an icon name to the corresponding Lucide React component\n */\nexport const Icon = ({ name, className = \"w-5 h-5\", size, ...props }: IconProps) => {\n const IconComponent = iconMap[name]\n \n if (!IconComponent) {\n console.warn(`Icon \"${name}\" not found. Using default Menu icon.`)\n return <Menu className={className} size={size} {...props} />\n }\n \n return <IconComponent className={className} size={size} {...props} />\n}\n\n/**\n * Get the icon component directly for custom rendering\n */\nexport const getIcon = (name: IconName) => {\n return iconMap[name] || Menu\n}\n\n/**\n * Check if an icon name is valid\n */\nexport const isValidIcon = (name: string): name is IconName => {\n return name in iconMap\n}","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n// Re-export utilities\nexport * from './tooltip-helpers';\nexport * from './metric-engine';\nexport { Icon, getIcon, isValidIcon } from './icon-resolver';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Centralized animation variants system for consistent interactions across components.\n * \n * Based on analysis of successful patterns:\n * - DataBadge: scale + shadow effects work well (tactile feel)\n * - Tab hover: needs consistency in timing\n * - Overall: standardize timing and easing\n */\n\nexport const interactionVariants = cva(\n // Base transition classes applied to all interactive elements\n 'transition-all ease-out',\n {\n variants: {\n /**\n * Animation type based on component purpose and successful patterns\n */\n type: {\n /**\n * Subtle: minimal hover effects for navigation elements\n * Used for: secondary buttons, nav links, subtle interactive elements\n */\n subtle: 'duration-200 hover:bg-accent/50 hover:text-accent-foreground',\n \n /**\n * Tactile: badges, chips with satisfying scale + shadow feedback\n * Used for: DataBadge, chips, small interactive elements\n * PRESERVE: This pattern works well and should be maintained\n */\n tactile: 'duration-200 hover:scale-105 active:scale-95 shadow hover:shadow-md',\n \n /**\n * Card: cards and major content blocks with elevation\n * Used for: content cards, major clickable areas\n */\n card: 'duration-300 hover:shadow-lg hover:-translate-y-0.5',\n \n /**\n * Button: primary actions with clear feedback\n * Used for: primary buttons, call-to-action elements\n */\n button: 'duration-200 hover:scale-[1.02] active:scale-[0.98] hover:shadow-md',\n \n /**\n * Tab: header navigation tabs with tactile feedback\n * UPDATED: Removed scale and border changes to prevent layout jitter\n */\n tab: 'duration-200 hover:shadow-sm hover:bg-accent/30',\n },\n \n /**\n * Size affects the scale intensity for different component sizes\n */\n size: {\n sm: '', // Default scaling\n md: '', // Default scaling \n lg: 'hover:scale-[1.03] active:scale-[0.97]', // Reduced scaling for larger elements\n xl: 'hover:scale-[1.02] active:scale-[0.98]', // Minimal scaling for very large elements\n },\n \n /**\n * Timing variants for special cases\n */\n timing: {\n instant: 'duration-100',\n fast: 'duration-150', \n normal: 'duration-200',\n slow: 'duration-300',\n slower: 'duration-500',\n },\n \n /**\n * Disable animations for accessibility or performance\n */\n disabled: {\n true: 'transition-none',\n false: '',\n }\n },\n defaultVariants: {\n type: 'subtle',\n size: 'md',\n timing: 'normal',\n disabled: false,\n },\n }\n);\n\nexport type InteractionVariants = VariantProps<typeof interactionVariants>;\n\n/**\n * Helper function to get animation classes\n * @param variants - Animation variant configuration\n * @returns Tailwind classes for the animation\n */\nexport const getAnimationClasses = (variants?: InteractionVariants) => {\n return interactionVariants(variants);\n};\n\n/**\n * Predefined animation configurations for common use cases\n */\nexport const animationPresets = {\n // Preserve successful DataBadge pattern\n dataBadge: { type: 'tactile' as const, timing: 'normal' as const },\n \n // Improved tab pattern to match tactile feel\n tab: { type: 'tab' as const, timing: 'normal' as const },\n \n // Other common patterns\n button: { type: 'button' as const, timing: 'normal' as const },\n card: { type: 'card' as const, timing: 'slow' as const },\n subtle: { type: 'subtle' as const, timing: 'normal' as const },\n \n // Size-specific presets\n smallTactile: { type: 'tactile' as const, size: 'sm' as const },\n largeTactile: { type: 'tactile' as const, size: 'lg' as const },\n} as const;\n\n/**\n * Legacy class combinations for migration reference\n * These can be replaced with the new animation system\n */\nexport const legacyPatterns = {\n // Current DataBadge: 'hover:scale-105 active:scale-95 shadow hover:shadow'\n dataBadgeLegacy: 'transition-all hover:scale-105 active:scale-95 shadow hover:shadow',\n \n // Current TabsTrigger: 'hover:scale-105 active:scale-95 hover:shadow transition-all duration-150'\n tabTriggerLegacy: 'transition-all duration-150 hover:scale-105 active:scale-95 hover:shadow',\n \n // Current TabsList: 'hover:shadow-md transition-all duration-200'\n tabsListLegacy: 'transition-all duration-200 hover:shadow-md',\n} as const;","import axios, { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse } from 'axios';\n\nconst API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080';\n\nexport interface ApiClientConfig {\n baseURL?: string;\n timeout?: number;\n headers?: Record<string, string>;\n}\n\n// Global auth service reference - will be set by AuthProvider\nlet globalAuthService: any = null;\n\nexport function setGlobalAuthService(authService: any): void {\n globalAuthService = authService;\n}\n\nclass ApiClient {\n private instance: AxiosInstance;\n\n constructor(config: ApiClientConfig = {}) {\n this.instance = axios.create({\n baseURL: config.baseURL || API_BASE_URL,\n timeout: config.timeout || 10000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n });\n\n this.setupInterceptors();\n }\n\n private setupInterceptors() {\n // Request interceptor for auth tokens and auto-refresh\n this.instance.interceptors.request.use(\n async (config) => {\n // Add auth token if available\n if (globalAuthService) {\n const tokenData = globalAuthService.getTokenData();\n if (tokenData?.token) {\n // Check if token should be refreshed\n if (globalAuthService.shouldRefreshToken()) {\n try {\n await globalAuthService.refreshToken();\n // Get the updated token\n const newTokenData = globalAuthService.getTokenData();\n config.headers.Authorization = `Bearer ${newTokenData?.token}`;\n } catch {\n // Refresh failed, use existing token (will likely fail and trigger logout)\n config.headers.Authorization = `Bearer ${tokenData.token}`;\n }\n } else {\n config.headers.Authorization = `Bearer ${tokenData.token}`;\n }\n }\n } else {\n // Fallback to old method if no auth service\n const token = localStorage.getItem('auth_token');\n if (token) {\n config.headers.Authorization = `Bearer ${token}`;\n }\n }\n return config;\n },\n (error) => Promise.reject(error)\n );\n\n // Response interceptor for error handling\n this.instance.interceptors.response.use(\n (response) => response,\n async (error) => {\n if (error.response?.status === 401) {\n if (globalAuthService) {\n // Try to refresh token once\n const tokenData = globalAuthService.getTokenData();\n if (tokenData?.refreshToken && !error.config._retry) {\n error.config._retry = true;\n try {\n await globalAuthService.refreshToken();\n // Retry the original request with new token\n const newTokenData = globalAuthService.getTokenData();\n error.config.headers.Authorization = `Bearer ${newTokenData?.token}`;\n return this.instance.request(error.config);\n } catch {\n // Refresh failed, clear auth\n globalAuthService.clearAuth();\n window.location.reload();\n }\n } else {\n // No refresh token or retry failed, clear auth\n globalAuthService.clearAuth();\n window.location.reload();\n }\n } else {\n // Fallback to old method\n localStorage.removeItem('auth_token');\n localStorage.removeItem('auth_user');\n window.location.reload();\n }\n }\n return Promise.reject(error);\n }\n );\n }\n\n async get<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.get(url, config);\n return response.data;\n }\n\n async post<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.post(url, data, config);\n return response.data;\n }\n\n async put<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.put(url, data, config);\n return response.data;\n }\n\n async patch<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.patch(url, data, config);\n return response.data;\n }\n\n async delete<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.delete(url, config);\n return response.data;\n }\n}\n\nexport const apiClient = new ApiClient();\nexport default apiClient;","import { useMutation, useQuery, useQueryClient, type UseQueryOptions, type UseMutationOptions } from '@tanstack/react-query';\nimport { apiClient } from '../services/api/client';\n\n// Generic query hook\nexport function useApiQuery<T>(\n queryKey: (string | number)[],\n queryFn: () => Promise<T>,\n options?: Omit<UseQueryOptions<T>, 'queryKey' | 'queryFn'>\n) {\n return useQuery({\n queryKey,\n queryFn,\n ...options,\n });\n}\n\n// Generic mutation hook\nexport function useApiMutation<TData, TVariables = void>(\n mutationFn: (variables: TVariables) => Promise<TData>,\n options?: UseMutationOptions<TData, Error, TVariables>\n) {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn,\n onSuccess: (data, variables, context) => {\n // Invalidate queries on successful mutation\n queryClient.invalidateQueries();\n options?.onSuccess?.(data, variables, context);\n },\n ...options,\n });\n}\n\n// Example types for API hooks\ninterface ExampleData {\n id: string;\n name: string;\n description?: string;\n}\n\ninterface CreateExampleData {\n name: string;\n description?: string;\n}\n\ninterface UpdateExampleData {\n name?: string;\n description?: string;\n}\n\n// Specific API hooks - examples with proper typing\nexport function useGetExample(id: string) {\n return useApiQuery(\n ['example', id],\n () => apiClient.get<ExampleData>(`/api/example/${id}`),\n {\n enabled: !!id,\n }\n );\n}\n\nexport function useCreateExample() {\n return useApiMutation(\n (data: CreateExampleData) => apiClient.post<ExampleData>('/api/example', data)\n );\n}\n\nexport function useUpdateExample() {\n return useApiMutation(\n ({ id, data }: { id: string; data: UpdateExampleData }) => \n apiClient.put<ExampleData>(`/api/example/${id}`, data)\n );\n}\n\nexport function useDeleteExample() {\n return useApiMutation(\n (id: string) => apiClient.delete<void>(`/api/example/${id}`)\n );\n}","import { Component } from 'react';\nimport type { ErrorInfo, ReactNode } from 'react';\n\ninterface Props {\n children: ReactNode;\n fallback?: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n error?: Error;\n}\n\nexport class ErrorBoundary extends Component<Props, State> {\n public state: State = {\n hasError: false,\n };\n\n public static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error('ErrorBoundary caught an error:', error, errorInfo);\n }\n\n public render() {\n if (this.state.hasError) {\n if (this.props.fallback) {\n return this.props.fallback;\n }\n\n return (\n <div className=\"p-6 bg-destructive/10 border border-destructive/20 rounded-[--radius]\">\n <h3 className=\"text-destructive font-medium mb-2\">Something went wrong</h3>\n <p className=\"text-muted-foreground text-sm mb-4\">\n An unexpected error occurred. Please refresh the page or try again later.\n </p>\n <details className=\"text-xs text-destructive/80\">\n <summary className=\"cursor-pointer\">Error details</summary>\n <pre className=\"mt-2 whitespace-pre-wrap\">\n {this.state.error?.message}\n {'\\n'}\n {this.state.error?.stack}\n </pre>\n </details>\n <button\n onClick={() => window.location.reload()}\n className=\"mt-4 px-4 py-2 bg-destructive text-destructive-foreground rounded-[--radius] hover:bg-destructive/90 text-sm\"\n >\n Reload Page\n </button>\n </div>\n );\n }\n\n return this.props.children;\n }\n}","import React, { useState, useRef, useEffect } from 'react';\nimport { cn } from '../../utils/utils';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface TooltipProps {\n children: React.ReactNode;\n content: React.ReactNode;\n position?: 'top' | 'bottom' | 'left' | 'right';\n variant?: 'default' | 'info' | 'warning' | 'error';\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n delay?: number;\n offset?: number;\n trigger?: 'hover' | 'focus' | 'both';\n className?: string;\n contentClassName?: string;\n}\n\nexport const Tooltip = ({\n children,\n content,\n position = 'top',\n variant = 'default',\n size = 'md',\n disabled = false,\n delay = 300,\n offset = 8,\n trigger = 'both',\n className,\n contentClassName\n}: TooltipProps) => {\n const [isVisible, setIsVisible] = useState(false);\n const [actualPosition, setActualPosition] = useState(position);\n const triggerRef = useRef<HTMLDivElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const sizeClasses: Record<'sm' | 'md' | 'lg', string> = {\n sm: 'px-2 py-1 text-xs max-w-48',\n md: 'px-3 py-2 text-sm max-w-64',\n lg: 'px-4 py-3 text-base max-w-80',\n };\n\n const variantClasses: Record<'default' | 'info' | 'warning' | 'error', string> = {\n default: 'bg-card/95 text-card-foreground border-border/30',\n info: 'status-info text-card-foreground border-status-info/30',\n warning: 'status-warning text-card-foreground border-status-warning/30',\n error: 'status-error text-card-foreground border-status-error/30',\n };\n\n const positionClasses: Record<'top' | 'bottom' | 'left' | 'right', string> = {\n top: 'bottom-full left-1/2 transform -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 transform -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 transform -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 transform -translate-y-1/2 ml-2',\n };\n\n const arrowClasses: Record<'top' | 'bottom' | 'left' | 'right', string> = {\n top: 'top-full left-1/2 transform -translate-x-1/2 border-l-transparent border-r-transparent border-b-transparent',\n bottom: 'bottom-full left-1/2 transform -translate-x-1/2 border-l-transparent border-r-transparent border-t-transparent',\n left: 'left-full top-1/2 transform -translate-y-1/2 border-t-transparent border-b-transparent border-r-transparent',\n right: 'right-full top-1/2 transform -translate-y-1/2 border-t-transparent border-b-transparent border-l-transparent',\n };\n\n const showTooltip = () => {\n if (disabled) return;\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n \n timeoutRef.current = setTimeout(() => {\n setIsVisible(true);\n requestAnimationFrame(() => {\n checkAndAdjustPosition();\n });\n }, delay);\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n setIsVisible(false);\n };\n\n const checkAndAdjustPosition = () => {\n if (!triggerRef.current || !tooltipRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n let newPosition = position;\n\n // Check if tooltip goes outside viewport and adjust position\n switch (position) {\n case 'top':\n if (triggerRect.top - tooltipRect.height - offset < 0) {\n newPosition = 'bottom';\n }\n break;\n case 'bottom':\n if (triggerRect.bottom + tooltipRect.height + offset > viewport.height) {\n newPosition = 'top';\n }\n break;\n case 'left':\n if (triggerRect.left - tooltipRect.width - offset < 0) {\n newPosition = 'right';\n }\n break;\n case 'right':\n if (triggerRect.right + tooltipRect.width + offset > viewport.width) {\n newPosition = 'left';\n }\n break;\n }\n\n setActualPosition(newPosition);\n };\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const triggerProps = {\n ...(trigger === 'hover' || trigger === 'both' ? {\n onMouseEnter: showTooltip,\n onMouseLeave: hideTooltip,\n } : {}),\n ...(trigger === 'focus' || trigger === 'both' ? {\n onFocus: showTooltip,\n onBlur: hideTooltip,\n } : {}),\n };\n\n const tooltipBaseClasses = cn(\n 'absolute z-50 rounded-lg border backdrop-blur-sm shadow-lg pointer-events-none',\n 'animate-fade-in transition-all duration-200 ease-out',\n sizeClasses[size],\n variantClasses[variant],\n positionClasses[actualPosition],\n getAnimationClasses({\n ...animationPresets.subtle,\n timing: 'fast'\n }),\n contentClassName\n );\n\n const arrowBaseClasses = cn(\n 'absolute w-0 h-0 border-4',\n arrowClasses[actualPosition]\n );\n\n const getArrowColor = () => {\n switch (variant) {\n case 'info':\n return 'border-t-status-info';\n case 'warning':\n return 'border-t-status-warning';\n case 'error':\n return 'border-t-status-error';\n default:\n return 'border-t-card';\n }\n };\n\n return (\n <div className={cn(\"relative inline-block\", className)}>\n <div\n ref={triggerRef}\n {...triggerProps}\n className=\"cursor-help\"\n aria-describedby={isVisible ? 'tooltip' : undefined}\n data-component-name=\"TooltipTrigger\"\n >\n {children}\n </div>\n \n {isVisible && !disabled && (\n <div\n ref={tooltipRef}\n id=\"tooltip\"\n role=\"tooltip\"\n aria-hidden={!isVisible}\n className={tooltipBaseClasses}\n style={{\n marginTop: actualPosition === 'bottom' ? `${offset}px` : actualPosition === 'top' ? `-${offset}px` : '0',\n marginLeft: actualPosition === 'right' ? `${offset}px` : actualPosition === 'left' ? `-${offset}px` : '0',\n }}\n data-component-name=\"Tooltip\"\n >\n {content}\n \n {/* Arrow */}\n <div\n className={cn(\n arrowBaseClasses,\n getArrowColor()\n )}\n style={{\n borderTopColor: actualPosition === 'bottom' ? 'inherit' : 'transparent',\n borderBottomColor: actualPosition === 'top' ? 'inherit' : 'transparent',\n borderLeftColor: actualPosition === 'right' ? 'inherit' : 'transparent',\n borderRightColor: actualPosition === 'left' ? 'inherit' : 'transparent',\n }}\n />\n </div>\n )}\n </div>\n );\n};","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from '../utils/utils'\nimport { Tooltip } from '../composed/Tooltip'\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg text-sm font-medium ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 active:scale-[0.98]\",\n {\n variants: {\n variant: {\n default: \"bg-gradient-to-r from-primary to-primary/90 text-primary-foreground hover:from-primary/90 hover:to-primary/80 shadow-sm hover:shadow-md\",\n destructive:\n \"bg-gradient-to-r from-destructive to-destructive/90 text-destructive-foreground hover:from-destructive/90 hover:to-destructive/80 shadow-sm hover:shadow-md\",\n outline:\n \"border border-gray-300 bg-white hover:bg-gray-50 hover:border-primary/50 shadow-sm\",\n secondary:\n \"bg-gray-100 text-gray-900 hover:bg-gray-200 shadow-sm\",\n ghost: \"hover:bg-muted/80 hover:text-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-5 py-2\",\n sm: \"h-9 rounded-lg px-3 text-xs\",\n lg: \"h-12 rounded-lg px-8 text-base\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n /** Tooltip to show on hover (especially useful for icon-only buttons) */\n tooltip?: string\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, tooltip, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n \n const button = (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n\n // Show tooltip for icon-only buttons or when explicitly provided\n if (tooltip && !asChild) {\n return (\n <Tooltip content={tooltip} position=\"top\" size=\"sm\">\n {button}\n </Tooltip>\n )\n }\n\n return button\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }","import * as React from \"react\"\nimport { cn } from '../utils/utils'\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, category, style, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border border-border bg-card text-card-foreground shadow-sm hover:shadow-md\",\n category && [\n \"border-l-4 hover:border-border/80\",\n `card-category-${category}`\n ],\n className\n )}\n style={style}\n {...props}\n />\n );\n }\n);\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }","import * as React from \"react\"\nimport { cn } from '../utils/utils'\n\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded border border-border bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 transition-all\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from '../utils/utils'\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }","import * as React from \"react\"\nimport { cn } from '../utils/utils'\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b border-gray-100 transition-all duration-150 hover:bg-gray-50/50 data-[state=selected]:bg-gray-100\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-semibold text-gray-700 text-xs uppercase tracking-wider [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}","import React from 'react';\nimport { cn } from '../utils/utils';\n\ninterface BadgeProps {\n children: React.ReactNode;\n variant?: 'default' | 'secondary' | 'destructive' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nexport const Badge = ({ children, variant = 'default', size = 'md', className }: BadgeProps) => {\n const baseClasses = 'inline-flex items-center rounded-full font-medium transition-all duration-150';\n const sizeClasses = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-xs', \n lg: 'px-3 py-1.5 text-sm'\n };\n const variantClasses = {\n default: 'bg-primary/10 text-primary border border-primary/20 hover:bg-primary/20',\n secondary: 'bg-gray-100 text-gray-700 border border-gray-200 hover:bg-gray-200',\n destructive: 'bg-destructive/10 text-destructive border border-destructive/20 hover:bg-destructive/20',\n outline: 'border border-gray-300 text-gray-700 bg-white hover:bg-gray-50'\n };\n \n return (\n <span className={cn(baseClasses, sizeClasses[size], variantClasses[variant], className)}>\n {children}\n </span>\n );\n};","import React from 'react';\nimport { cn } from '../utils/utils';\n\ninterface SelectProps {\n children: React.ReactNode;\n onValueChange?: (value: string) => void;\n defaultValue?: string;\n value?: string;\n}\n\nexport const Select = ({ children }: SelectProps) => (\n <div className=\"relative\">{children}</div>\n);\n\ninterface SelectTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const SelectTrigger = ({ children, className }: SelectTriggerProps) => (\n <button className={cn(\"flex h-10 w-full items-center justify-between rounded-[--radius] border px-3 py-2 text-sm\", className)}>\n {children}\n </button>\n);\n\ninterface SelectValueProps {\n placeholder?: string;\n}\n\nexport const SelectValue = ({ placeholder }: SelectValueProps) => (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n);\n\ninterface SelectContentProps {\n children: React.ReactNode;\n}\n\nexport const SelectContent = ({ children }: SelectContentProps) => (\n <div className=\"absolute top-full left-0 z-50 w-full rounded-[--radius] border bg-popover shadow-[0_10px_15px_-3px_rgb(0_0_0_/_0.1),0_4px_6px_-4px_rgb(0_0_0_/_0.1)]\">\n {children}\n </div>\n);\n\ninterface SelectItemProps {\n children: React.ReactNode;\n value: string;\n}\n\nexport const SelectItem = ({ children }: SelectItemProps) => (\n <div className=\"relative flex w-full cursor-default select-none items-center rounded-[calc(var(--radius)-2px)] py-1.5 px-2 text-sm hover:bg-accent hover:text-accent-foreground\">\n {children}\n </div>\n);","import { cn } from '../utils/utils';\n\ninterface SwitchProps {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n className?: string;\n disabled?: boolean;\n}\n\nexport const Switch = ({ checked, onCheckedChange, className, disabled }: SwitchProps) => {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-1p-ignore\n data-lpignore=\"true\"\n className={cn(\n 'relative inline-flex h-6 w-11 items-center rounded-full transition-all duration-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n checked \n ? 'bg-category-1 shadow-sm' \n : 'bg-muted border-2 border-border shadow-inner',\n !disabled && 'hover:shadow-md',\n className\n )}\n onClick={() => !disabled && onCheckedChange?.(!checked)}\n disabled={disabled}\n >\n <span\n className={cn(\n 'inline-block h-4 w-4 transform rounded-full transition-all duration-200 shadow-md',\n 'ring-0 bg-background border border-border/20',\n checked \n ? 'translate-x-5 bg-white border-white/50' \n : 'translate-x-0.5 bg-background'\n )}\n />\n </button>\n );\n};","import React, { createContext, useContext, useState } from 'react';\nimport { cn } from '../utils/utils';\nimport { getAnimationClasses, animationPresets } from '../utils/animations';\n\ninterface TabsContextType {\n activeTab: string;\n setActiveTab: (tab: string) => void;\n}\n\nconst TabsContext = createContext<TabsContextType | null>(null);\n\ninterface TabsProps {\n children: React.ReactNode;\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n className?: string;\n}\n\nexport const Tabs = ({ children, defaultValue, value, onValueChange, className }: TabsProps) => {\n const [internalActiveTab, setInternalActiveTab] = useState(defaultValue || '');\n \n const activeTab = value !== undefined ? value : internalActiveTab;\n const setActiveTab = (tab: string) => {\n if (onValueChange) {\n onValueChange(tab);\n } else {\n setInternalActiveTab(tab);\n }\n };\n \n return (\n <TabsContext.Provider value={{ activeTab, setActiveTab }}>\n <div className={className}>{children}</div>\n </TabsContext.Provider>\n );\n};\n\ninterface TabsListProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const TabsList = ({ children, className }: TabsListProps) => (\n <div \n className={cn(\n 'h-auto min-h-10 items-center justify-center rounded-lg bg-card border border-border shadow-sm',\n 'flex flex-wrap gap-1 sm:gap-2 lg:gap-3 w-full lg:w-fit mx-auto mb-6 p-1',\n className\n )}\n data-component-name=\"TabsList\"\n >\n {children}\n </div>\n);\n\ninterface TabsTriggerProps {\n children: React.ReactNode;\n value: string;\n className?: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n 'data-category'?: string;\n}\n\nexport const TabsTrigger = ({ children, value, className, category, 'data-category': dataCategory }: TabsTriggerProps) => {\n // Use data-category if provided, otherwise fallback to category prop, then default to 1\n const effectiveCategory = dataCategory ? parseInt(dataCategory) as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 : category || 1;\n const context = useContext(TabsContext);\n const isActive = context?.activeTab === value;\n \n const activeStyles = isActive ? {\n backgroundColor: `hsl(var(--category-${effectiveCategory}) / 0.15)`,\n color: `hsl(var(--category-${effectiveCategory}))`,\n borderColor: `hsl(var(--category-${effectiveCategory}) / 0.3)`,\n boxShadow: 'var(--shadow-sm)'\n } : {};\n \n return (\n <button\n className={cn(\n 'w-auto flex-grow items-center justify-center whitespace-nowrap rounded-md px-1 sm:px-2 md:px-3 py-1 sm:py-2 text-sm font-medium',\n // Always have a border to prevent layout shifts\n 'border',\n isActive \n ? '' // Remove class-based styling when using inline styles\n : cn(\n 'text-muted-foreground hover:text-foreground border-transparent hover:bg-muted/80',\n getAnimationClasses(animationPresets.tab)\n ),\n className\n )}\n style={activeStyles}\n onClick={() => context?.setActiveTab(value)}\n data-component-name=\"TabsTrigger\"\n >\n {children}\n </button>\n );\n};\n\ninterface TabsContentProps {\n children: React.ReactNode;\n value: string;\n className?: string;\n}\n\nexport const TabsContent = ({ children, value, className }: TabsContentProps) => {\n const context = useContext(TabsContext);\n const isActive = context?.activeTab === value;\n \n if (!isActive) return null;\n \n return (\n <div className={cn('mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', className)}>\n {children}\n </div>\n );\n};","import * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from '../utils/utils'\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }","import * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from '../utils/utils'\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}","import { cn } from '../utils/utils'\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }","import React from 'react';\nimport { cn } from '../utils/utils';\nimport { Loader2 } from 'lucide-react';\n\ninterface SpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst sizeMap = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6', \n lg: 'w-8 h-8'\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({ \n size = 'md', \n className \n}) => {\n return (\n <Loader2 \n className={cn(\n 'animate-spin text-muted-foreground',\n sizeMap[size],\n className\n )} \n />\n );\n};\n\n// Alternative loading component for inline use\ninterface LoadingProps {\n text?: string;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nexport const Loading: React.FC<LoadingProps> = ({ \n text = 'Loading...', \n size = 'md', \n className \n}) => {\n return (\n <div className={cn('flex items-center gap-2 text-muted-foreground', className)}>\n <Spinner size={size} />\n <span className=\"text-sm\">{text}</span>\n </div>\n );\n};","import React from 'react';\nimport { cn, useTextOverflow } from '../../utils/utils';\nimport { Tooltip } from '../Tooltip';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface DataBadgeProps {\n children: React.ReactNode;\n variant?: 'category' | 'status';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n size?: 'sm' | 'md' | 'lg';\n interactive?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport const DataBadge = ({ \n children,\n variant = 'category',\n category = 1,\n status = 'neutral',\n size = 'md',\n interactive = false,\n onClick,\n className\n}: DataBadgeProps) => {\n const { ref, isOverflowing } = useTextOverflow();\n\n const sizeClasses: Record<'sm' | 'md' | 'lg', string> = {\n sm: 'px-2 py-0.5 text-xs h-5 min-w-[1.5rem] max-w-[150px]',\n md: 'px-2.5 py-1 text-sm h-7 min-w-[2rem] max-w-[200px]',\n lg: 'px-3 py-1.5 text-base h-9 min-w-[2.5rem] max-w-[250px]',\n };\n\n const baseClasses = cn(\n 'inline-flex items-center font-medium rounded-lg border truncate',\n sizeClasses[size],\n interactive && [\n 'cursor-pointer',\n getAnimationClasses({\n ...animationPresets.dataBadge,\n size: size === 'lg' ? 'lg' : size === 'sm' ? 'sm' : 'md'\n })\n ],\n className\n );\n\n const variantClasses = variant === 'category' \n ? `badge-category-${category}`\n : `status-${status}`;\n\n const badge = (\n <span \n ref={ref as React.RefObject<HTMLSpanElement>}\n className={cn(baseClasses, variantClasses, 'animate-fade-in')}\n onClick={onClick}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n onKeyDown={interactive ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n } : undefined}\n data-component-name=\"DataBadge\"\n >\n {children}\n </span>\n );\n\n // Show tooltip when text is truncated\n if (isOverflowing && typeof children === 'string') {\n return (\n <Tooltip content={children} position=\"top\" size=\"sm\">\n {badge}\n </Tooltip>\n );\n }\n\n return badge;\n};","import React from 'react';\nimport { DataBadge } from '../DataBadge';\nimport { Button } from '../../ui/button';\nimport { \n Target,\n ExternalLink\n} from 'lucide-react';\n\ninterface SalesPanelProps {\n sales: Array<{\n id: string;\n customer: string;\n product: string;\n amount: number;\n stage: string;\n salesperson: string;\n region: string;\n closeDate: string;\n dealSize: string;\n }>;\n onSaleClick?: (sale: any) => void;\n onClose?: () => void;\n}\n\nconst getStageStatus = (stage: string) => {\n switch (stage) {\n case 'Closed Won': return 'success';\n case 'Negotiation': return 'warning'; \n case 'Proposal Sent': return 'info';\n case 'Qualified': return 'info';\n case 'Discovery': return 'neutral';\n default: return 'neutral';\n }\n};\n\nexport const SalesPanel: React.FC<SalesPanelProps> = ({\n sales,\n onSaleClick,\n onClose\n}) => {\n const topDeals = sales.slice(0, 5); // Show only top 5 recent deals\n const totalValue = sales.reduce((sum, sale) => sum + sale.amount, 0);\n\n return (\n <div className=\"fixed right-0 top-16 h-[calc(100vh-4rem)] w-72 bg-background border-l border-border shadow-lg flex flex-col z-30\">\n {/* Header */}\n <div className=\"p-3 border-b border-border\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-medium flex items-center gap-2\">\n <Target className=\"w-4 h-4\" />\n Pipeline\n </h3>\n {onClose && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose}>\n ×\n </Button>\n )}\n </div>\n </div>\n\n {/* Quick Stats */}\n <div className=\"p-3 border-b border-border\">\n <div className=\"space-y-2\">\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-muted-foreground\">Total Value</span>\n <span className=\"font-semibold text-green-600\">${totalValue.toLocaleString()}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-muted-foreground\">Active Deals</span>\n <span className=\"font-semibold\">{sales.length}</span>\n </div>\n </div>\n </div>\n\n {/* Recent Deals */}\n <div className=\"flex-1 overflow-auto p-3\">\n <h4 className=\"text-sm font-medium mb-3\">Recent Opportunities</h4>\n <div className=\"space-y-2\">\n {topDeals.map((sale) => (\n <div \n key={sale.id}\n className=\"p-2 border border-border rounded-md hover:bg-muted/50 cursor-pointer transition-colors\"\n onClick={() => onSaleClick?.(sale)}\n >\n <div className=\"flex justify-between items-start mb-1\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{sale.customer}</p>\n <p className=\"text-xs text-muted-foreground truncate\">{sale.product}</p>\n </div>\n <div className=\"text-right ml-2\">\n <p className=\"text-sm font-semibold text-green-600\">\n ${sale.amount.toLocaleString()}\n </p>\n </div>\n </div>\n <div className=\"flex justify-between items-center\">\n <DataBadge variant=\"status\" status={getStageStatus(sale.stage)}>\n {sale.stage}\n </DataBadge>\n <span className=\"text-xs text-muted-foreground\">{sale.salesperson}</span>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"p-3 border-t border-border\">\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\">\n <ExternalLink className=\"w-4 h-4 mr-2\" />\n View All Deals\n </Button>\n </div>\n </div>\n );\n};","import React from 'react';\nimport { Card } from '../../ui/card';\nimport { Skeleton } from '../../ui/skeleton';\nimport { Tooltip } from '../Tooltip';\nimport { TrendingUp, TrendingDown, Minus, ArrowRight } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport type { ILoadable } from '../../types';\n\nexport interface StatCardProps extends ILoadable {\n title: string;\n value: string | number;\n subtitle?: string;\n trend?: {\n value: number;\n label?: string;\n };\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n icon?: React.ReactNode;\n onClick?: () => void;\n className?: string;\n /** Tooltip content for the value (useful for showing full numbers when abbreviated) */\n valueTooltip?: string;\n /** Tooltip content for the icon */\n iconTooltip?: string;\n}\n\nexport const StatCard = ({\n title,\n value,\n subtitle,\n trend,\n category,\n icon,\n onClick,\n className,\n valueTooltip,\n iconTooltip,\n isLoading = false\n}: StatCardProps) => {\n const getTrendIcon = () => {\n if (!trend) return null;\n \n if (trend.value > 0) {\n return <TrendingUp className=\"w-4 h-4\" />;\n } else if (trend.value < 0) {\n return <TrendingDown className=\"w-4 h-4\" />;\n }\n return <Minus className=\"w-4 h-4\" />;\n };\n\n const getTrendColor = () => {\n if (!trend) return '';\n \n if (trend.value > 0) return 'text-status-success';\n if (trend.value < 0) return 'text-status-error';\n return 'text-status-neutral';\n };\n\n // Loading state skeleton that matches StatCard dimensions\n if (isLoading) {\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden\",\n className\n )}\n category={category}\n data-component-name=\"StatCard\"\n >\n <div className=\"space-y-3 relative\">\n {/* Hidden content that defines exact dimensions */}\n <div className=\"flex items-center justify-between\">\n <div className=\"text-data-label font-medium\" style={{ visibility: 'hidden' }}>\n {title}\n </div>\n {icon && (\n <div className={cn(\n \"p-2 rounded-md flex items-center justify-center transition-colors\",\n category ? `bg-muted/50 text-category-${category}` : \"bg-muted/50 text-muted-foreground\"\n )} style={{ visibility: 'hidden' }}>\n {icon}\n </div>\n )}\n </div>\n\n <div className=\"space-y-1\">\n <div className={cn(\n \"text-3xl font-bold transition-all group-hover:scale-105\",\n category ? `text-category-${category}` : \"text-foreground\"\n )} style={{ visibility: 'hidden' }}>\n {value}\n </div>\n {subtitle && (\n <div className=\"text-data-meta\" style={{ visibility: 'hidden' }}>\n {subtitle}\n </div>\n )}\n </div>\n\n <div className=\"flex items-center justify-between\">\n {trend && (\n <div className={cn(\"flex items-center gap-1.5 text-sm\", \"text-muted-foreground\")} style={{ visibility: 'hidden' }}>\n {/* Render actual trend content hidden */}\n <span>{trend.value > 0 && '+'}{trend.value}%</span>\n {trend.label && <span>{trend.label}</span>}\n </div>\n )}\n {onClick && (\n <div style={{ visibility: 'hidden' }}>→</div>\n )}\n </div>\n\n {/* Skeleton overlay positioned absolutely */}\n <div className=\"absolute inset-0 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <Skeleton className=\"h-5 w-24\" />\n {icon && (\n <div className=\"p-2 rounded flex items-center justify-center bg-muted/50\">\n <Skeleton className=\"h-5 w-5\" />\n </div>\n )}\n </div>\n <div className=\"space-y-1\">\n <Skeleton className=\"h-9 w-20\" />\n {subtitle && <Skeleton className=\"h-4 w-32\" />}\n </div>\n <div className=\"flex items-center justify-between\">\n {trend && <Skeleton className=\"h-4 w-16\" />}\n {onClick && <Skeleton className=\"h-4 w-4 ml-auto\" />}\n </div>\n </div>\n </div>\n </Card>\n );\n }\n\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden transition-all animate-slide-up\",\n onClick && \"cursor-pointer hover:shadow-md hover:scale-105 active:scale-95\",\n category && `hover:shadow-category-${category}`,\n \"group\",\n className\n )}\n category={category} // Pass category directly to Card component\n data-component-name=\"StatCard\"\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n } : undefined}\n >\n <div className=\"space-y-3\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-foreground\" data-component-name=\"StatCard\">{title}</div>\n {icon && (\n <Tooltip \n content={iconTooltip} \n disabled={!iconTooltip}\n position=\"left\"\n size=\"sm\"\n >\n <div className={cn(\n \"p-2 rounded-md flex items-center justify-center transition-colors\",\n category ? `bg-muted/50 text-category-${category}` : \"bg-muted/50 text-muted-foreground\"\n )} data-component-name=\"StatCardIcon\">\n {icon}\n </div>\n </Tooltip>\n )}\n </div>\n\n {/* Value */}\n <div className=\"space-y-1\">\n <Tooltip \n content={valueTooltip} \n disabled={!valueTooltip}\n position=\"top\"\n size=\"sm\"\n >\n <div className={cn(\n \"text-3xl font-bold transition-all group-hover:scale-105\",\n category ? `text-category-${category}` : \"text-foreground\"\n )}>\n {value}\n </div>\n </Tooltip>\n {subtitle && (\n <div className=\"text-data-meta\">{subtitle}</div>\n )}\n </div>\n\n {/* Trend or Action */}\n <div className=\"flex items-center justify-between\">\n {trend && (\n <div className={cn(\"flex items-center gap-1.5 text-sm\", getTrendColor())}>\n {getTrendIcon()}\n <span className=\"font-medium\">\n {trend.value > 0 && '+'}{trend.value}%\n </span>\n {trend.label && (\n <span className=\"text-data-meta\">{trend.label}</span>\n )}\n </div>\n )}\n {onClick && (\n <ArrowRight className=\"w-4 h-4 text-muted-foreground ml-auto transition-transform group-hover:translate-x-1\" data-component-name=\"StatCardArrow\" />\n )}\n </div>\n </div>\n </Card>\n );\n};","import React from 'react';\nimport { Card } from '../../ui/card';\nimport { DataBadge } from '../DataBadge/DataBadge';\nimport { ArrowRight, TrendingUp, TrendingDown, Minus } from 'lucide-react';\nimport { cn } from '../../utils/utils';\n\nexport interface DetailedCardProps {\n title: string;\n subtitle?: string;\n description?: string;\n primaryMetric: {\n label: string;\n value: string | number;\n trend?: {\n value: number;\n label?: string;\n };\n };\n secondaryMetrics?: Array<{\n label: string;\n value: string | number;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n }>;\n tags?: Array<{\n label: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n }>;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n icon?: React.ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport const DetailedCard = ({\n title,\n subtitle,\n description,\n primaryMetric,\n secondaryMetrics = [],\n tags = [],\n category,\n icon,\n onClick,\n className\n}: DetailedCardProps) => {\n const getTrendIcon = (trendValue: number) => {\n if (trendValue > 0) {\n return <TrendingUp className=\"w-3 h-3\" />;\n } else if (trendValue < 0) {\n return <TrendingDown className=\"w-3 h-3\" />;\n }\n return <Minus className=\"w-3 h-3\" />;\n };\n\n const getTrendColor = (trendValue: number) => {\n if (trendValue > 0) return 'text-status-success';\n if (trendValue < 0) return 'text-status-error';\n return 'text-status-neutral';\n };\n\n // We don't need to create category classes manually - let the Card component handle it\n\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden transition-all animate-slide-up\",\n onClick && \"cursor-pointer hover:shadow-md hover:scale-[1.01] active:scale-[0.99]\",\n category && `hover:shadow-category-${category}`,\n \"group\",\n className\n )}\n category={category} // Pass category directly to Card component\n data-component-name=\"DetailedCard\"\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n } : undefined}\n >\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <h3 className=\"text-xl font-bold text-foreground truncate\">{title}</h3>\n {icon && (\n <div className={cn(\n \"p-3 rounded-lg flex items-center justify-center flex-shrink-0 transition-colors\",\n category ? `bg-category-${category}/8 text-category-${category}` : \"bg-muted/50 text-muted-foreground\"\n )}>\n <div className=\"scale-110\">\n {icon}\n </div>\n </div>\n )}\n </div>\n {subtitle && (\n <p className=\"text-data-meta text-sm\">{subtitle}</p>\n )}\n </div>\n {onClick && (\n <ArrowRight className=\"w-4 h-4 text-muted-foreground ml-2 flex-shrink-0 transition-transform group-hover:translate-x-1\" data-component-name=\"DetailedCardArrow\" />\n )}\n </div>\n\n {/* Description */}\n {description && (\n <p className=\"text-sm text-muted-foreground leading-relaxed\">{description}</p>\n )}\n\n {/* Primary Metric */}\n <div className=\"space-y-2\">\n <div className=\"text-data-label text-xs\">{primaryMetric.label}</div>\n <div className=\"flex items-baseline gap-3\">\n <span className={cn(\n \"text-2xl font-bold transition-all group-hover:scale-105\",\n category ? `text-category-${category}` : \"text-foreground\"\n )}>\n {primaryMetric.value}\n </span>\n {primaryMetric.trend && (\n <div className={cn(\n \"flex items-center gap-1 text-xs\",\n getTrendColor(primaryMetric.trend.value)\n )}>\n {getTrendIcon(primaryMetric.trend.value)}\n <span className=\"font-medium\">\n {primaryMetric.trend.value > 0 && '+'}{primaryMetric.trend.value}%\n </span>\n {primaryMetric.trend.label && (\n <span className=\"text-data-meta ml-1\">{primaryMetric.trend.label}</span>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Secondary Metrics */}\n {secondaryMetrics.length > 0 && (\n <div className=\"grid grid-cols-2 gap-3 py-2\">\n {secondaryMetrics.map((metric, index) => (\n <div key={index} className=\"space-y-1\">\n <div className=\"text-data-label text-xs\">{metric.label}</div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-foreground\">{metric.value}</span>\n {metric.status && (\n <DataBadge variant=\"status\" status={metric.status} size=\"sm\">\n {metric.status}\n </DataBadge>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Tags */}\n {tags.length > 0 && (\n <div className=\"flex flex-wrap gap-2 pt-2 border-t border-border\">\n {tags.map((tag, index) => (\n <DataBadge\n key={index}\n variant={tag.category ? 'category' : 'status'}\n category={tag.category}\n status={tag.status}\n size=\"sm\"\n >\n {tag.label}\n </DataBadge>\n ))}\n </div>\n )}\n </div>\n </Card>\n );\n};","import React from 'react';\nimport { Button } from '../../ui/button';\nimport { cn } from '../../utils/utils';\nimport { FileX, Search, AlertCircle, Database } from 'lucide-react';\n\nexport interface EmptyStateProps {\n variant?: 'no-data' | 'no-results' | 'error' | 'loading';\n title: string;\n description?: string;\n icon?: React.ReactNode;\n action?: {\n label: string;\n onClick: () => void;\n };\n secondaryAction?: {\n label: string;\n onClick: () => void;\n };\n className?: string;\n}\n\nconst defaultIcons = {\n 'no-data': <Database className=\"w-12 h-12\" />,\n 'no-results': <Search className=\"w-12 h-12\" />,\n 'error': <AlertCircle className=\"w-12 h-12\" />,\n 'loading': <FileX className=\"w-12 h-12\" />,\n};\n\nexport const EmptyState = ({\n variant = 'no-data',\n title,\n description,\n icon,\n action,\n secondaryAction,\n className\n}: EmptyStateProps) => {\n const displayIcon = icon || defaultIcons[variant];\n\n return (\n <div className={cn(\n \"flex flex-col items-center justify-center py-12 px-4 text-center\",\n className\n )}\n data-component-name=\"EmptyState\"\n data-variant={variant}\n >\n {/* Icon */}\n <div className={cn(\n \"mb-4 transition-all\",\n variant === 'no-data' && \"text-category-1 opacity-60\",\n variant === 'no-results' && \"text-category-2 opacity-60\",\n variant === 'error' && \"text-status-error opacity-60\",\n variant === 'loading' && \"text-category-3 opacity-60 animate-pulse\"\n )}\n data-component-name=\"EmptyStateIcon\"\n >\n {displayIcon}\n </div>\n\n {/* Title */}\n <h3 className=\"text-lg font-semibold text-foreground mb-2\" data-component-name=\"EmptyStateTitle\">\n {title}\n </h3>\n\n {/* Description */}\n {description && (\n <p className=\"text-muted-foreground max-w-md mb-6\" data-component-name=\"EmptyStateDescription\">\n {description}\n </p>\n )}\n\n {/* Actions */}\n {(action || secondaryAction) && (\n <div className=\"flex flex-col sm:flex-row gap-3\" data-component-name=\"EmptyStateActions\">\n {action && (\n <Button onClick={action.onClick}>\n {action.label}\n </Button>\n )}\n {secondaryAction && (\n <Button variant=\"outline\" onClick={secondaryAction.onClick}>\n {secondaryAction.label}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../utils/utils';\n\nexport interface ColorSwatchProps {\n /** CSS color value (hex, hsl, rgb, or CSS variable) */\n color: string;\n /** Display name for the color */\n name: string;\n /** Optional size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Optional label to show below the swatch */\n label?: string;\n /** Additional CSS classes */\n className?: string;\n /** Whether the swatch is interactive */\n interactive?: boolean;\n /** Click handler for interactive swatches */\n onClick?: () => void;\n}\n\nexport const ColorSwatch: React.FC<ColorSwatchProps> = ({\n color,\n name,\n size = 'md',\n label,\n className,\n interactive = false,\n onClick\n}) => {\n const sizeClasses = {\n sm: 'w-8 h-8',\n md: 'w-16 h-16', \n lg: 'w-24 h-24'\n };\n\n const labelSizes = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base'\n };\n\n return (\n <div \n className={cn(\n 'flex flex-col items-center space-y-2',\n interactive && 'cursor-pointer group',\n className\n )}\n data-component-name=\"ColorSwatch\"\n onClick={onClick}\n >\n <div\n className={cn(\n 'rounded border border-border/20 flex items-center justify-center text-white font-medium',\n sizeClasses[size],\n interactive && 'transition-all hover:scale-105 hover:shadow group-hover:border-border'\n )}\n style={{ backgroundColor: color }}\n title={`${name}: ${color}`}\n >\n {size === 'lg' && <span className=\"text-sm\">{name}</span>}\n </div>\n \n {label && (\n <div className={cn('text-center space-y-1', labelSizes[size])}>\n <div className=\"font-medium text-foreground\">{label}</div>\n <div className=\"text-muted-foreground font-mono text-xs\">{color}</div>\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../utils/utils';\nimport { Tooltip } from '../Tooltip';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface IconBadgeProps {\n children?: React.ReactNode;\n icon?: React.ReactNode;\n variant?: 'category' | 'status';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n size?: 'sm' | 'md' | 'lg';\n interactive?: boolean;\n onClick?: () => void;\n className?: string;\n /** Tooltip content to show on hover */\n tooltip?: string;\n}\n\nexport const IconBadge = ({ \n children,\n icon,\n variant = 'category',\n category = 1,\n status = 'neutral',\n size = 'md',\n interactive = false,\n onClick,\n className,\n tooltip\n}: IconBadgeProps) => {\n\n const sizeClasses: Record<'sm' | 'md' | 'lg', string> = {\n sm: 'w-8 h-8 text-xs rounded-lg',\n md: 'w-10 h-10 text-sm rounded-xl',\n lg: 'w-12 h-12 text-base rounded-xl',\n };\n\n const baseClasses = cn(\n 'inline-flex items-center justify-center font-bold shadow-md',\n sizeClasses[size],\n interactive && [\n 'cursor-pointer',\n getAnimationClasses({\n ...animationPresets.dataBadge,\n size: size === 'lg' ? 'lg' : size === 'sm' ? 'sm' : 'md'\n })\n ],\n className\n );\n\n // Generate gradient classes based on variant\n const gradientClasses = variant === 'category' \n ? `bg-gradient-to-br from-category-${category} to-category-${Math.min(category + 1, 8)}`\n : variant === 'status'\n ? `bg-gradient-to-br from-status-${status} to-status-${status}`\n : 'bg-gradient-to-br from-category-1 to-category-2';\n\n const badge = (\n <div \n className={cn(baseClasses, gradientClasses, 'animate-fade-in')}\n onClick={onClick}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n onKeyDown={interactive ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n } : undefined}\n data-component-name=\"IconBadge\"\n >\n {icon && (\n <span className=\"text-primary-foreground drop-shadow\">\n {icon}\n </span>\n )}\n {children && !icon && (\n <span className=\"text-primary-foreground font-bold\">\n {children}\n </span>\n )}\n </div>\n );\n\n if (tooltip) {\n return (\n <Tooltip content={tooltip} position=\"top\" size=\"sm\">\n {badge}\n </Tooltip>\n );\n }\n\n return badge;\n};","import { apiClient } from './api/client';\nimport type { \n AuthConfig, \n BaseUser, \n LoginCredentials, \n LoginResponse, \n RefreshResponse, \n TokenData \n} from '../types';\n\nexport class AuthService<T extends BaseUser = BaseUser> {\n private config: AuthConfig;\n private refreshPromise: Promise<void> | null = null;\n\n constructor(config: AuthConfig) {\n this.config = {\n tokenStorage: 'localStorage',\n tokenRefreshBuffer: 5, // 5 minutes before expiry\n autoRefresh: true,\n ...config\n };\n }\n\n private getStorageKey(key: string): string {\n return `auth_${key}`;\n }\n\n private setItem(key: string, value: string): void {\n const storageKey = this.getStorageKey(key);\n switch (this.config.tokenStorage) {\n case 'sessionStorage':\n sessionStorage.setItem(storageKey, value);\n break;\n case 'cookie':\n // Simple cookie implementation - for production use a proper cookie library\n document.cookie = `${storageKey}=${value}; path=/; secure; samesite=strict`;\n break;\n default:\n localStorage.setItem(storageKey, value);\n }\n }\n\n private getItem(key: string): string | null {\n const storageKey = this.getStorageKey(key);\n switch (this.config.tokenStorage) {\n case 'sessionStorage':\n return sessionStorage.getItem(storageKey);\n case 'cookie':\n // Simple cookie reading - for production use a proper cookie library\n const match = document.cookie.match(`(?:^|;)\\\\s*${storageKey}=([^;]*)`);\n return match ? decodeURIComponent(match[1]) : null;\n default:\n return localStorage.getItem(storageKey);\n }\n }\n\n private removeItem(key: string): void {\n const storageKey = this.getStorageKey(key);\n switch (this.config.tokenStorage) {\n case 'sessionStorage':\n sessionStorage.removeItem(storageKey);\n break;\n case 'cookie':\n document.cookie = `${storageKey}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`;\n break;\n default:\n localStorage.removeItem(storageKey);\n }\n }\n\n getTokenData(): TokenData | null {\n const token = this.getItem('token');\n const refreshToken = this.getItem('refresh_token');\n const expiresAt = this.getItem('expires_at');\n\n if (!token) return null;\n\n return {\n token,\n refreshToken: refreshToken || undefined,\n expiresAt: expiresAt ? parseInt(expiresAt, 10) : undefined\n };\n }\n\n private setTokenData(tokenData: TokenData): void {\n this.setItem('token', tokenData.token);\n if (tokenData.refreshToken) {\n this.setItem('refresh_token', tokenData.refreshToken);\n }\n if (tokenData.expiresAt) {\n this.setItem('expires_at', tokenData.expiresAt.toString());\n }\n }\n\n getStoredUser(): T | null {\n const userData = this.getItem('user');\n if (!userData) return null;\n\n try {\n return JSON.parse(userData) as T;\n } catch {\n this.clearAuth();\n return null;\n }\n }\n\n private setStoredUser(user: T): void {\n this.setItem('user', JSON.stringify(user));\n }\n\n clearAuth(): void {\n this.removeItem('token');\n this.removeItem('refresh_token');\n this.removeItem('expires_at');\n this.removeItem('user');\n }\n\n async login(credentials: LoginCredentials): Promise<T> {\n const response = await apiClient.post<LoginResponse<T>>(\n `${this.config.apiUrl}${this.config.endpoints.login}`,\n credentials\n );\n\n const { token, refreshToken, user, expiresIn } = response;\n \n // Calculate expiration time\n const expiresAt = expiresIn \n ? Date.now() + (expiresIn * 1000) \n : undefined;\n\n // Store tokens and user\n this.setTokenData({ token, refreshToken, expiresAt });\n this.setStoredUser(user);\n\n // Setup auto-refresh if enabled\n if (this.config.autoRefresh && expiresAt) {\n this.scheduleTokenRefresh(expiresAt);\n }\n\n return user;\n }\n\n async refreshToken(): Promise<void> {\n // Prevent multiple simultaneous refresh attempts\n if (this.refreshPromise) {\n return this.refreshPromise;\n }\n\n const tokenData = this.getTokenData();\n if (!tokenData?.refreshToken) {\n throw new Error('No refresh token available');\n }\n\n this.refreshPromise = this.performTokenRefresh(tokenData.refreshToken);\n \n try {\n await this.refreshPromise;\n } finally {\n this.refreshPromise = null;\n }\n }\n\n private async performTokenRefresh(refreshToken: string): Promise<void> {\n try {\n const response = await apiClient.post<RefreshResponse>(\n `${this.config.apiUrl}${this.config.endpoints.refresh}`,\n { refreshToken }\n );\n\n const { token, refreshToken: newRefreshToken, expiresIn } = response;\n \n const expiresAt = expiresIn \n ? Date.now() + (expiresIn * 1000) \n : undefined;\n\n // Update stored tokens\n this.setTokenData({ \n token, \n refreshToken: newRefreshToken || refreshToken, \n expiresAt \n });\n\n // Schedule next refresh\n if (this.config.autoRefresh && expiresAt) {\n this.scheduleTokenRefresh(expiresAt);\n }\n } catch (error) {\n // Refresh failed, clear auth\n this.clearAuth();\n throw error;\n }\n }\n\n private scheduleTokenRefresh(expiresAt: number): void {\n const bufferMs = (this.config.tokenRefreshBuffer || 5) * 60 * 1000;\n const refreshAt = expiresAt - bufferMs;\n const delay = Math.max(0, refreshAt - Date.now());\n\n setTimeout(() => {\n if (this.getTokenData()) {\n this.refreshToken().catch(() => {\n // Silent fail - user will need to re-login\n });\n }\n }, delay);\n }\n\n isTokenExpired(): boolean {\n const tokenData = this.getTokenData();\n if (!tokenData?.expiresAt) return false;\n \n return Date.now() >= tokenData.expiresAt;\n }\n\n shouldRefreshToken(): boolean {\n const tokenData = this.getTokenData();\n if (!tokenData?.expiresAt || !tokenData.refreshToken) return false;\n \n const bufferMs = (this.config.tokenRefreshBuffer || 5) * 60 * 1000;\n return Date.now() >= (tokenData.expiresAt - bufferMs);\n }\n\n async getCurrentUser(): Promise<T | null> {\n const tokenData = this.getTokenData();\n if (!tokenData?.token) return null;\n\n try {\n return await apiClient.get<T>(`${this.config.apiUrl}${this.config.endpoints.me}`);\n } catch {\n return null;\n }\n }\n\n async logout(): Promise<void> {\n const tokenData = this.getTokenData();\n \n // Call logout endpoint if available\n if (this.config.endpoints.logout && tokenData?.token) {\n try {\n await apiClient.post(`${this.config.apiUrl}${this.config.endpoints.logout}`);\n } catch {\n // Ignore logout endpoint errors\n }\n }\n\n this.clearAuth();\n }\n}","import { useState, useEffect, createContext, useContext, useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport { AuthService } from '../../../atoms/services/auth-service';\nimport { setGlobalAuthService } from '../../../atoms/services/api/client';\nimport type { \n AuthConfig, \n BaseUser, \n LoginCredentials, \n AuthContextType \n} from '../../../atoms/types';\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\nexport function useAuth<T extends BaseUser = BaseUser>(): AuthContextType<T> {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context as AuthContextType<T>;\n}\n\ninterface AuthProviderProps {\n children: ReactNode;\n config?: AuthConfig;\n}\n\nexport function AuthProvider<T extends BaseUser = BaseUser>({ \n children, \n config \n}: AuthProviderProps) {\n const [user, setUser] = useState<T | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [permissions, setPermissions] = useState<string[]>([]);\n\n // Create auth service with default config if none provided\n const authService = useMemo(() => {\n const defaultConfig: AuthConfig = {\n apiUrl: import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080',\n endpoints: {\n login: '/auth/login',\n register: '/auth/register',\n refresh: '/auth/refresh',\n me: '/auth/me',\n logout: '/auth/logout'\n },\n tokenStorage: 'localStorage',\n tokenRefreshBuffer: 5,\n autoRefresh: true,\n permissions: {\n enabled: false\n }\n };\n\n const mergedConfig = config ? { ...defaultConfig, ...config } : defaultConfig;\n const service = new AuthService<T>(mergedConfig);\n \n // Set global reference for API client\n setGlobalAuthService(service);\n \n return service;\n }, [config]);\n\n const isAuthenticated = !!user;\n\n useEffect(() => {\n // Check for existing auth on mount\n const initAuth = async () => {\n setIsLoading(true);\n \n try {\n // Check for stored user\n const storedUser = authService.getStoredUser();\n const tokenData = authService.getTokenData();\n \n if (storedUser && tokenData?.token) {\n if (authService.isTokenExpired()) {\n // Token expired, try to refresh\n if (tokenData.refreshToken) {\n try {\n await authService.refreshToken();\n setUser(storedUser);\n \n // Load fresh user data if possible\n try {\n const freshUser = await authService.getCurrentUser();\n if (freshUser) setUser(freshUser);\n } catch {\n // Keep stored user if fresh fetch fails\n }\n } catch {\n // Refresh failed, clear auth\n authService.clearAuth();\n }\n } else {\n // No refresh token, clear auth\n authService.clearAuth();\n }\n } else {\n // Token still valid\n setUser(storedUser);\n \n // Optionally validate with server\n try {\n const freshUser = await authService.getCurrentUser();\n if (freshUser) setUser(freshUser);\n } catch {\n // Keep stored user if validation fails\n }\n }\n }\n } catch (error) {\n console.error('Auth initialization error:', error);\n authService.clearAuth();\n } finally {\n setIsLoading(false);\n }\n };\n\n initAuth();\n }, [authService]);\n\n const login = async (credentials: LoginCredentials) => {\n setIsLoading(true);\n try {\n const user = await authService.login(credentials);\n setUser(user);\n \n // Extract permissions if user has roles/permissions\n if (config?.permissions?.enabled && 'permissions' in user) {\n setPermissions((user as any).permissions || []);\n }\n } catch (error) {\n throw error;\n } finally {\n setIsLoading(false);\n }\n };\n\n const logout = async () => {\n setIsLoading(true);\n try {\n await authService.logout();\n setUser(null);\n setPermissions([]);\n } catch (error) {\n console.error('Logout error:', error);\n // Clear local state anyway\n authService.clearAuth();\n setUser(null);\n setPermissions([]);\n } finally {\n setIsLoading(false);\n }\n };\n\n const refreshToken = async () => {\n await authService.refreshToken();\n };\n\n const hasPermission = (permission: string): boolean => {\n if (!config?.permissions?.enabled) return true;\n return permissions.includes(permission);\n };\n\n const hasRole = (role: string): boolean => {\n if (!config?.permissions?.enabled) return true;\n \n // Check if user has role property\n if (user && 'role' in user) {\n return (user as any).role === role;\n }\n \n // Check if user has roles array\n if (user && 'roles' in user) {\n return ((user as any).roles || []).includes(role);\n }\n \n // Fallback: check admin/user roles from config\n const { adminRoles = ['admin'], userRoles = ['user'] } = config.permissions || {};\n \n if (adminRoles.includes(role)) {\n return permissions.includes('admin') || permissions.includes('*');\n }\n \n if (userRoles.includes(role)) {\n return permissions.length > 0; // Any permissions = user role\n }\n \n return false;\n };\n\n const value: AuthContextType<T> = {\n user,\n isAuthenticated,\n isLoading,\n permissions,\n login,\n logout,\n refreshToken,\n hasPermission,\n hasRole,\n };\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}","import { useState } from 'react';\nimport { useAuth } from '../hooks/useAuth';\nimport { Button } from '../../../atoms/ui/button';\nimport { Input } from '../../../atoms/ui/input';\nimport { Label } from '../../../atoms/ui/label';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../../atoms/ui/card';\nimport { cn } from '../../../atoms/utils/utils';\nimport { Database, Shield, TrendingUp, Mail, Lock, Sparkles } from 'lucide-react';\n\nexport function LoginForm() {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [error, setError] = useState('');\n const { login, isLoading } = useAuth();\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n \n try {\n await login({ email, password });\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Login failed');\n }\n };\n\n return (\n <div className=\"min-h-screen relative overflow-hidden bg-gradient-to-br from-muted/20 via-background to-muted/40\">\n {/* Background Pattern */}\n <div className=\"absolute inset-0 bg-muted/5 opacity-5\" />\n \n {/* Floating Elements */}\n <div className=\"absolute top-20 left-20 w-32 h-32 bg-primary/10 rounded-full blur-xl animate-pulse\" />\n <div className=\"absolute top-40 right-32 w-24 h-24 bg-secondary/10 rounded-full blur-lg animate-pulse delay-1000\" />\n <div className=\"absolute bottom-40 left-32 w-40 h-40 bg-accent/10 rounded-full blur-2xl animate-pulse delay-500\" />\n \n <div className=\"min-h-screen flex items-center justify-center p-4 relative z-10\">\n <div className=\"w-full max-w-md space-y-8\">\n {/* Header */}\n <div className=\"text-center space-y-6 animate-slide-up\">\n <div className=\"flex justify-center\">\n <div className=\"relative\">\n <div className=\"w-16 h-16 bg-gradient-to-br from-primary to-secondary rounded flex items-center justify-center shadow\">\n <Database className=\"w-8 h-8 text-primary-foreground\" />\n </div>\n <div className=\"absolute -top-1 -right-1 w-6 h-6 bg-gradient-to-br from-accent to-accent-foreground rounded-full flex items-center justify-center\">\n <Sparkles className=\"w-3 h-3 text-accent-foreground\" />\n </div>\n </div>\n </div>\n \n <div className=\"space-y-2\">\n <h1 className=\"text-3xl font-bold bg-gradient-to-r from-foreground via-primary to-secondary bg-clip-text text-transparent\">\n Data Trust Navigator\n </h1>\n <p className=\"text-muted-foreground text-lg\">\n Explore, analyze, and trust your data ecosystem\n </p>\n </div>\n </div>\n\n {/* Login Card */}\n <Card className=\"card-container animate-slide-up border-0 shadow bg-background/80 backdrop-blur-sm\">\n <CardHeader className=\"text-center pb-4\">\n <CardTitle className=\"text-xl font-semibold\">Welcome Back</CardTitle>\n <CardDescription>\n Sign in to access your analytics dashboard\n </CardDescription>\n </CardHeader>\n \n <CardContent className=\"space-y-6\">\n <form onSubmit={handleSubmit} className=\"space-y-5\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\" className=\"text-data-label\">Email Address</Label>\n <div className=\"relative\">\n <Mail className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground w-4 h-4\" />\n <Input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n placeholder=\"Enter your email\"\n className=\"pl-10 h-11 transition-all duration-200 focus:ring-2 focus:ring-ring focus:border-ring\"\n />\n </div>\n </div>\n \n <div className=\"space-y-2\">\n <Label htmlFor=\"password\" className=\"text-data-label\">Password</Label>\n <div className=\"relative\">\n <Lock className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground w-4 h-4\" />\n <Input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n required\n placeholder=\"Enter your password\"\n className=\"pl-10 h-11 transition-all duration-200 focus:ring-2 focus:ring-ring focus:border-ring\"\n />\n </div>\n </div>\n \n {error && (\n <div className=\"bg-destructive/10 border border-destructive/20 text-destructive text-sm p-3 rounded animate-shake\">\n {error}\n </div>\n )}\n \n <Button \n type=\"submit\" \n className={cn(\n \"w-full h-11 bg-gradient-to-r from-primary to-secondary hover:from-primary/90 hover:to-secondary/90 text-primary-foreground font-medium transition-all duration-200 hover:shadow-lg hover:scale-[1.02] active:scale-[0.98]\"\n )}\n disabled={isLoading}\n >\n {isLoading ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"w-4 h-4 border-2 border-primary-foreground/30 border-t-primary-foreground rounded-full animate-spin\" />\n Signing in...\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n <Shield className=\"w-4 h-4\" />\n Sign In\n </div>\n )}\n </Button>\n </form>\n \n {/* Demo Notice */}\n <div className=\"bg-muted/50 border border-border rounded p-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-6 h-6 bg-primary rounded-full flex items-center justify-center flex-shrink-0 mt-0.5\">\n <TrendingUp className=\"w-3 h-3 text-primary-foreground\" />\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-foreground\">Demo Environment</p>\n <p className=\"text-xs text-muted-foreground\">\n Use any email and password to explore the analytics platform\n </p>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Features */}\n <div className=\"grid grid-cols-3 gap-4 animate-slide-up\">\n {[\n { icon: Database, label: 'Data Models', bgClass: 'bg-primary/10', textClass: 'text-primary' },\n { icon: Shield, label: 'Quality Tests', bgClass: 'bg-secondary/10', textClass: 'text-secondary-foreground' },\n { icon: TrendingUp, label: 'Analytics', bgClass: 'bg-accent/10', textClass: 'text-accent-foreground' }\n ].map((feature) => (\n <div key={feature.label} className=\"text-center space-y-2\">\n <div className={cn('w-10 h-10 rounded-lg flex items-center justify-center mx-auto', feature.bgClass)}>\n <feature.icon className={cn('w-5 h-5', feature.textClass)} />\n </div>\n <p className=\"text-xs text-muted-foreground font-medium\">{feature.label}</p>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}","import type { ReactNode } from 'react';\nimport { useAuth } from '../hooks/useAuth';\nimport { LoginForm } from './LoginForm';\n\ninterface ProtectedRouteProps {\n children: ReactNode;\n requirePermission?: string;\n requireRole?: string;\n fallback?: ReactNode;\n}\n\nexport function ProtectedRoute({ \n children, \n requirePermission, \n requireRole, \n fallback \n}: ProtectedRouteProps) {\n const { isAuthenticated, isLoading, hasPermission, hasRole } = useAuth();\n\n if (isLoading) {\n return (\n <div className=\"min-h-screen flex items-center justify-center\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary mx-auto\"></div>\n <p className=\"mt-2 text-muted-foreground\">Loading...</p>\n </div>\n </div>\n );\n }\n\n if (!isAuthenticated) {\n return <LoginForm />;\n }\n\n // Check permission if required\n if (requirePermission && !hasPermission(requirePermission)) {\n return fallback || (\n <div className=\"min-h-screen flex items-center justify-center\">\n <div className=\"text-center\">\n <h2 className=\"text-xl font-semibold text-destructive mb-2\">Access Denied</h2>\n <p className=\"text-muted-foreground\">You don't have permission to access this resource.</p>\n </div>\n </div>\n );\n }\n\n // Check role if required\n if (requireRole && !hasRole(requireRole)) {\n return fallback || (\n <div className=\"min-h-screen flex items-center justify-center\">\n <div className=\"text-center\">\n <h2 className=\"text-xl font-semibold text-destructive mb-2\">Access Denied</h2>\n <p className=\"text-muted-foreground\">Your role doesn't have access to this resource.</p>\n </div>\n </div>\n );\n }\n\n return <>{children}</>;\n}","import { useAuth } from '../hooks/useAuth';\nimport { Button } from '../../../atoms/ui/button';\n\nexport function LogoutButton() {\n const { logout, user } = useAuth();\n\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Welcome, {(user as any)?.name || user?.email}</span>\n <Button \n variant=\"outline\" \n size=\"sm\" \n onClick={logout}\n >\n Logout\n </Button>\n </div>\n );\n}","import { useAuth } from './useAuth';\nimport type { BaseUser } from '../../../atoms/types';\n\nexport function usePermissions<T extends BaseUser = BaseUser>() {\n const { hasPermission, hasRole, permissions, user } = useAuth<T>();\n\n const can = (permission: string): boolean => hasPermission(permission);\n \n const canAny = (permissions: string[]): boolean => \n permissions.some(permission => hasPermission(permission));\n \n const canAll = (permissions: string[]): boolean => \n permissions.every(permission => hasPermission(permission));\n\n const isRole = (role: string): boolean => hasRole(role);\n \n const isAnyRole = (roles: string[]): boolean => \n roles.some(role => hasRole(role));\n\n const isAdmin = (): boolean => hasRole('admin');\n \n const isUser = (): boolean => hasRole('user');\n\n return {\n can,\n canAny,\n canAll,\n isRole,\n isAnyRole,\n isAdmin,\n isUser,\n permissions,\n user\n };\n}","import React from 'react';\nimport { User, Settings, LogOut, UserCircle, Moon, Sun } from 'lucide-react';\nimport { \n Avatar, \n AvatarFallback, \n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n Button\n} from '../../ui';\nimport { useAuth } from '../../../features/auth';\nimport { cn } from '../../utils/utils';\n\ninterface UserAvatarProps {\n className?: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const UserAvatar: React.FC<UserAvatarProps> = ({ className, category = 1 }) => {\n const { user, logout } = useAuth();\n const [isDark, setIsDark] = React.useState(() => \n document.documentElement.classList.contains('dark')\n );\n\n const toggleDarkMode = () => {\n const newDarkMode = !isDark;\n setIsDark(newDarkMode);\n \n if (newDarkMode) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n };\n\n const userInitials = (user as any)?.name \n ? (user as any).name.split(' ').map((n: string) => n[0]).join('').toUpperCase().slice(0, 2)\n : user?.email?.[0]?.toUpperCase() || 'U';\n\n const avatarStyles = {\n background: `linear-gradient(135deg, hsl(var(--category-${category}) / 0.1), hsl(var(--category-${category}) / 0.2))`,\n borderColor: `hsl(var(--category-${category}) / 0.3)`,\n color: `hsl(var(--category-${category}))`\n };\n\n const handleLogout = () => {\n logout();\n };\n\n return (\n <div className={cn(\"flex items-center\", className)}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"relative h-9 w-9 rounded p-0 hover:bg-muted/30 transition-colors\">\n <Avatar className=\"h-9 w-9\">\n <AvatarFallback \n className=\"border font-medium text-sm\"\n style={avatarStyles}\n >\n <User className=\"w-4 h-4\" />\n </AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent \n className=\"w-56 bg-card/95 backdrop-blur-sm border-border/30\" \n align=\"end\" \n forceMount\n >\n {/* User Info */}\n <div className=\"flex items-center space-x-3 p-3\">\n <Avatar className=\"h-8 w-8\">\n <AvatarFallback \n className=\"border font-medium text-xs\"\n style={avatarStyles}\n >\n {userInitials}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col space-y-0.5\">\n <p className=\"text-sm font-medium leading-none text-foreground\">\n {(user as any)?.name || 'Design User'}\n </p>\n <p className=\"text-xs leading-none text-muted-foreground\">\n {user?.email || 'user@design.studio'}\n </p>\n </div>\n </div>\n \n <DropdownMenuSeparator />\n \n {/* Dark Mode Toggle */}\n <DropdownMenuItem \n className=\"cursor-pointer focus:bg-muted/50\"\n onClick={toggleDarkMode}\n >\n {isDark ? (\n <Sun className=\"mr-2 h-4 w-4\" />\n ) : (\n <Moon className=\"mr-2 h-4 w-4\" />\n )}\n <span>{isDark ? 'Light Mode' : 'Dark Mode'}</span>\n </DropdownMenuItem>\n \n <DropdownMenuSeparator />\n \n {/* Menu Items */}\n <DropdownMenuItem \n className=\"cursor-pointer focus:bg-muted/50\"\n onClick={() => alert('Profile coming soon!')}\n >\n <UserCircle className=\"mr-2 h-4 w-4\" />\n <span>Profile</span>\n </DropdownMenuItem>\n \n <DropdownMenuItem \n className=\"cursor-pointer focus:bg-muted/50\"\n onClick={() => alert('Settings coming soon!')}\n >\n <Settings className=\"mr-2 h-4 w-4\" />\n <span>Settings</span>\n </DropdownMenuItem>\n \n <DropdownMenuSeparator />\n \n <DropdownMenuItem \n className=\"cursor-pointer text-destructive focus:text-destructive focus:bg-destructive/10\"\n onClick={handleLogout}\n >\n <LogOut className=\"mr-2 h-4 w-4\" />\n <span>Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n};","import React from 'react';\nimport { UserAvatar } from '../UserAvatar';\nimport { cn } from '../../utils/utils';\n\ninterface UserMenuProps {\n className?: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const UserMenu: React.FC<UserMenuProps> = ({ className, category }) => {\n return (\n <div className={cn(\"flex items-center\", className)}>\n <UserAvatar category={category} />\n </div>\n );\n};","import React, { useState } from 'react';\nimport { Search } from 'lucide-react';\nimport { Input } from '../../ui/input';\nimport { cn } from '../../utils/utils';\n\ninterface GlobalSearchProps {\n className?: string;\n placeholder?: string;\n}\n\nexport const GlobalSearch: React.FC<GlobalSearchProps> = ({ \n className,\n placeholder = \"Search components, colors, patterns...\" \n}) => {\n const [searchValue, setSearchValue] = useState('');\n\n return (\n <div className={cn(\"relative\", className)}>\n <div className=\"absolute inset-y-0 left-0 flex items-center pl-4\">\n <Search className=\"w-5 h-5 text-muted-foreground\" />\n </div>\n <Input\n type=\"text\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={placeholder}\n className={cn(\n \"pl-12 pr-4 h-12 text-base\",\n \"bg-muted/30 border-border/40 rounded-xl\",\n \"focus:bg-card focus:border-category-1/30 focus:ring-category-1/20\",\n \"transition-all duration-200\",\n \"placeholder:text-muted-foreground/70\"\n )}\n />\n </div>\n );\n};","import React, { useState, useMemo } from 'react';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../../ui/table';\nimport { Input } from '../../ui/input';\nimport { Button } from '../../ui/button';\nimport { Skeleton } from '../../ui/skeleton';\nimport { DataBadge } from '../DataBadge';\nimport { cn, tooltipContent } from '../../utils/utils';\nimport type { IListLoadable } from '../../types';\nimport { \n ChevronDown, \n ChevronUp, \n ChevronsUpDown,\n Search,\n X\n} from 'lucide-react';\n\nexport interface Column<T> {\n key: string;\n header: string | React.ReactNode;\n cell?: (item: T) => React.ReactNode;\n sortable?: boolean;\n filterable?: boolean;\n width?: string;\n /** Auto-render badges for status/category columns */\n type?: 'status' | 'category' | 'default';\n}\n\ninterface DataTableProps<T> extends IListLoadable {\n data: T[];\n columns: Column<T>[];\n searchPlaceholder?: string;\n pageSize?: number;\n showPagination?: boolean;\n showSearch?: boolean;\n onRowClick?: (item: T) => void;\n emptyMessage?: string;\n className?: string;\n /** Enable hover effects on table rows */\n hover?: boolean;\n}\n\ntype SortDirection = 'asc' | 'desc' | null;\n\nexport function DataTable<T extends Record<string, unknown>>({\n data,\n columns,\n searchPlaceholder = \"Search...\",\n pageSize = 10,\n showPagination = true,\n showSearch = true,\n onRowClick,\n emptyMessage = \"No data available\",\n className = \"\",\n hover = false,\n isLoading = false,\n loadingItemCount = 5\n}: DataTableProps<T>) {\n const [searchTerm, setSearchTerm] = useState('');\n const [sortColumn, setSortColumn] = useState<string | null>(null);\n const [sortDirection, setSortDirection] = useState<SortDirection>(null);\n const [currentPage, setCurrentPage] = useState(1);\n\n // Filter data based on search term\n const filteredData = useMemo(() => {\n if (!searchTerm) return data;\n \n return data.filter(item => {\n const searchableColumns = columns.filter(col => col.filterable !== false);\n return searchableColumns.some(col => {\n const value = item[col.key];\n if (value === null || value === undefined) return false;\n return value.toString().toLowerCase().includes(searchTerm.toLowerCase());\n });\n });\n }, [data, searchTerm, columns]);\n\n // Sort data\n const sortedData = useMemo(() => {\n if (!sortColumn || !sortDirection) return filteredData;\n \n return [...filteredData].sort((a, b) => {\n const aVal = a[sortColumn];\n const bVal = b[sortColumn];\n \n if (aVal === null || aVal === undefined) return 1;\n if (bVal === null || bVal === undefined) return -1;\n \n const comparison = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;\n return sortDirection === 'asc' ? comparison : -comparison;\n });\n }, [filteredData, sortColumn, sortDirection]);\n\n // Paginate data\n const paginatedData = useMemo(() => {\n if (!showPagination) return sortedData;\n \n const start = (currentPage - 1) * pageSize;\n const end = start + pageSize;\n return sortedData.slice(start, end);\n }, [sortedData, currentPage, pageSize, showPagination]);\n\n const totalPages = Math.ceil(sortedData.length / pageSize);\n\n const handleSort = (columnKey: string) => {\n if (sortColumn === columnKey) {\n if (sortDirection === 'asc') {\n setSortDirection('desc');\n } else if (sortDirection === 'desc') {\n setSortDirection(null);\n setSortColumn(null);\n }\n } else {\n setSortColumn(columnKey);\n setSortDirection('asc');\n }\n };\n\n const getSortIcon = (columnKey: string) => {\n if (sortColumn !== columnKey) {\n return <ChevronsUpDown className=\"w-4 h-4 text-muted-foreground\" />;\n }\n if (sortDirection === 'asc') {\n return <ChevronUp className=\"w-4 h-4\" />;\n }\n return <ChevronDown className=\"w-4 h-4\" />;\n };\n\n // Smart cell renderer that auto-detects and renders badges\n const renderCell = (column: Column<T>, item: T) => {\n // If custom cell renderer is provided, use it\n if (column.cell) {\n return column.cell(item);\n }\n\n const value = item[column.key];\n \n // Auto-detect column type from key name if not specified\n const columnType = column.type || (\n column.key.toLowerCase().includes('status') ? 'status' :\n column.key.toLowerCase().includes('category') ? 'category' :\n 'default'\n );\n\n // Render badges for status and category columns\n if (columnType === 'status' && typeof value === 'string') {\n const status = value as 'success' | 'warning' | 'error' | 'info' | 'neutral';\n return (\n <DataBadge variant=\"status\" status={status} size=\"sm\">\n {value.toString()}\n </DataBadge>\n );\n }\n\n if (columnType === 'category') {\n // For category, try to map value to category number (1-8)\n const categoryMap: Record<string, number> = {\n 'Analytics': 1, 'Finance': 2, 'Product': 3, 'Sales': 4,\n 'Marketing': 5, 'Operations': 6, 'Engineering': 7, 'Data': 8\n };\n const categoryNum = typeof value === 'string' ? categoryMap[value] || 1 : 1;\n \n return (\n <DataBadge variant=\"category\" category={categoryNum as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8} size=\"sm\">\n {value?.toString()}\n </DataBadge>\n );\n }\n\n // Default rendering\n return value?.toString() || '-';\n };\n\n // Loading state skeleton that matches DataTable dimensions\n if (isLoading) {\n return (\n <div className={cn(\"space-y-4\", className)} data-component-name=\"DataTable\">\n {/* Search bar skeleton */}\n {showSearch && (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative flex-1 max-w-sm\">\n <Skeleton className=\"h-10 w-full\" />\n </div>\n </div>\n )}\n\n {/* Table skeleton */}\n <div className=\"rounded border overflow-hidden\">\n <Table>\n <TableHeader>\n <TableRow>\n {columns.map(column => (\n <TableHead key={column.key} style={{ width: column.width }}>\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-4 w-20\" />\n </div>\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {Array.from({ length: loadingItemCount }, (_, index) => (\n <TableRow key={index}>\n {columns.map(column => (\n <TableCell key={column.key}>\n <Skeleton className=\"h-4 w-full max-w-32\" />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination skeleton */}\n {showPagination && (\n <div className=\"flex items-center justify-between\">\n <Skeleton className=\"h-4 w-48\" />\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-8 w-20\" />\n <div className=\"flex items-center gap-1\">\n {Array.from({ length: 3 }, (_, i) => (\n <Skeleton key={i} className=\"h-8 w-8\" />\n ))}\n </div>\n <Skeleton className=\"h-8 w-16\" />\n </div>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={cn(\"space-y-4\", className)} data-component-name=\"DataTable\">\n {/* Search bar */}\n {showSearch && (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative flex-1 max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground w-4 h-4\" data-component-name=\"DataTableSearch\" />\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => {\n setSearchTerm(e.target.value);\n setCurrentPage(1);\n }}\n className=\"pl-10 pr-10\"\n />\n {searchTerm && (\n <Button\n onClick={() => {\n setSearchTerm('');\n setCurrentPage(1);\n }}\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-1 top-1/2 transform -translate-y-1/2 h-8 w-8\"\n tooltip={tooltipContent.clearSearch}\n >\n <X className=\"w-4 h-4\" data-component-name=\"DataTableClear\" />\n </Button>\n )}\n </div>\n {searchTerm && (\n <div className=\"text-muted-foreground text-sm\">\n {sortedData.length} result{sortedData.length !== 1 ? 's' : ''}\n </div>\n )}\n </div>\n )}\n\n {/* Table */}\n <div className=\"rounded border overflow-hidden\">\n <Table>\n <TableHeader>\n <TableRow>\n {columns.map(column => (\n <TableHead \n key={column.key}\n style={{ width: column.width }}\n className={column.sortable !== false && typeof column.header === 'string' ? 'cursor-pointer select-none' : ''}\n onClick={() => column.sortable !== false && typeof column.header === 'string' && handleSort(column.key)}\n >\n <div className=\"flex items-center gap-2\">\n {typeof column.header === 'string' ? (\n <>\n <span>{column.header}</span>\n {column.sortable !== false && getSortIcon(column.key)}\n </>\n ) : (\n column.header\n )}\n </div>\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {paginatedData.length === 0 ? (\n <TableRow>\n <TableCell \n colSpan={columns.length} \n className=\"text-center py-8 text-muted-foreground\"\n >\n {emptyMessage}\n </TableCell>\n </TableRow>\n ) : (\n paginatedData.map((item, index) => (\n <TableRow \n key={index}\n className={cn(\n onRowClick && 'cursor-pointer',\n (hover || onRowClick) && 'hover:bg-muted/50'\n )}\n onClick={() => onRowClick?.(item)}\n >\n {columns.map(column => (\n <TableCell key={column.key}>\n {renderCell(column, item)}\n </TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination */}\n {showPagination && totalPages > 1 && (\n <div className=\"flex items-center justify-between\">\n <div className=\"text-muted-foreground text-sm\">\n Showing {((currentPage - 1) * pageSize) + 1} to {Math.min(currentPage * pageSize, sortedData.length)} of {sortedData.length} entries\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n tooltip={tooltipContent.previous}\n >\n Previous\n </Button>\n <div className=\"flex items-center gap-1\">\n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\n let pageNum;\n if (totalPages <= 5) {\n pageNum = i + 1;\n } else if (currentPage <= 3) {\n pageNum = i + 1;\n } else if (currentPage >= totalPages - 2) {\n pageNum = totalPages - 4 + i;\n } else {\n pageNum = currentPage - 2 + i;\n }\n \n return (\n <Button\n key={pageNum}\n variant={currentPage === pageNum ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setCurrentPage(pageNum)}\n className=\"w-8 h-8\"\n >\n {pageNum}\n </Button>\n );\n })}\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n tooltip={tooltipContent.next}\n >\n Next\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}","import React, { useState, useRef, useEffect } from 'react';\nimport { Calendar, Clock, ChevronLeft, ChevronRight, X } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport { Input } from '../../ui/input';\nimport { Button } from '../../ui/button';\n\nexport interface DateTimePickerProps {\n /** Current selected date/time value */\n value?: Date;\n /** Callback when date/time changes */\n onChange?: (date: Date | null) => void;\n /** Picker mode */\n mode?: 'date' | 'time' | 'datetime';\n /** Visual variant */\n variant?: 'default' | 'compact' | 'inline';\n /** Date format for display */\n dateFormat?: 'MM/dd/yyyy' | 'dd/MM/yyyy' | 'yyyy-MM-dd';\n /** Time format */\n timeFormat?: '12h' | '24h';\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Enable date range selection */\n isRange?: boolean;\n /** Range values for range mode */\n rangeValue?: { start: Date | null; end: Date | null };\n /** Callback for range changes */\n onRangeChange?: (range: { start: Date | null; end: Date | null }) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Error state */\n error?: boolean;\n /** Clear button */\n clearable?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** ARIA label */\n 'aria-label'?: string;\n}\n\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n onChange,\n mode = 'datetime',\n variant = 'default',\n dateFormat = 'MM/dd/yyyy',\n timeFormat = '12h',\n minDate,\n maxDate,\n isRange = false,\n rangeValue,\n onRangeChange,\n placeholder,\n disabled = false,\n error = false,\n clearable = true,\n className,\n 'aria-label': ariaLabel,\n ...props\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(value || new Date());\n const [, setActiveInput] = useState<'start' | 'end' | null>(null);\n const [tempTime, setTempTime] = useState({\n hours: value?.getHours() || 0,\n minutes: value?.getMinutes() || 0\n });\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Close picker when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setActiveInput(null);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Format date for display\n const formatDate = (date: Date | null): string => {\n if (!date) return '';\n \n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n \n switch (dateFormat) {\n case 'dd/MM/yyyy':\n return `${day}/${month}/${year}`;\n case 'yyyy-MM-dd':\n return `${year}-${month}-${day}`;\n default:\n return `${month}/${day}/${year}`;\n }\n };\n\n // Format time for display\n const formatTime = (date: Date | null): string => {\n if (!date) return '';\n \n const hours = date.getHours();\n const minutes = date.getMinutes().toString().padStart(2, '0');\n \n if (timeFormat === '12h') {\n const displayHours = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const ampm = hours >= 12 ? 'PM' : 'AM';\n return `${displayHours}:${minutes} ${ampm}`;\n }\n \n return `${hours.toString().padStart(2, '0')}:${minutes}`;\n };\n\n // Format complete datetime\n const formatDateTime = (date: Date | null): string => {\n if (!date) return '';\n \n const datePart = mode === 'time' ? '' : formatDate(date);\n const timePart = mode === 'date' ? '' : formatTime(date);\n \n if (mode === 'datetime') {\n return `${datePart} ${timePart}`;\n }\n \n return datePart || timePart;\n };\n\n // Get display value for input\n const getDisplayValue = (): string => {\n if (isRange && rangeValue) {\n const start = rangeValue.start ? formatDateTime(rangeValue.start) : '';\n const end = rangeValue.end ? formatDateTime(rangeValue.end) : '';\n return start && end ? `${start} - ${end}` : start || end || '';\n }\n \n return formatDateTime(value || null);\n };\n\n // Generate calendar days\n const getCalendarDays = () => {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n \n const firstDay = new Date(year, month, 1);\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - firstDay.getDay());\n \n const days: Date[] = [];\n \n for (let i = 0; i < 42; i++) {\n const currentDate = new Date(startDate);\n currentDate.setDate(startDate.getDate() + i);\n days.push(currentDate);\n }\n \n return days;\n };\n\n // Handle date selection\n const handleDateSelect = (date: Date) => {\n if (disabled) return;\n \n // Check date constraints\n if (minDate && date < minDate) return;\n if (maxDate && date > maxDate) return;\n \n if (isRange && onRangeChange) {\n if (!rangeValue?.start || (rangeValue.start && rangeValue.end)) {\n // Start new range\n onRangeChange({ start: date, end: null });\n setActiveInput('end');\n } else if (rangeValue.start && !rangeValue.end) {\n // Complete range\n if (date >= rangeValue.start) {\n onRangeChange({ start: rangeValue.start, end: date });\n } else {\n onRangeChange({ start: date, end: rangeValue.start });\n }\n setActiveInput(null);\n if (mode === 'date') setIsOpen(false);\n }\n } else {\n // Single date selection\n const newDate = new Date(date);\n if (value && (mode === 'datetime' || mode === 'time')) {\n // Preserve time when selecting date\n newDate.setHours(value.getHours());\n newDate.setMinutes(value.getMinutes());\n }\n \n onChange?.(newDate);\n if (mode === 'date') setIsOpen(false);\n }\n };\n\n // Handle time change\n const handleTimeChange = (hours: number, minutes: number) => {\n if (disabled) return;\n \n const newDate = value ? new Date(value) : new Date();\n newDate.setHours(hours);\n newDate.setMinutes(minutes);\n \n setTempTime({ hours, minutes });\n onChange?.(newDate);\n };\n\n // Handle input click\n const handleInputClick = () => {\n if (!disabled) {\n setIsOpen(true);\n if (isRange) setActiveInput('start');\n }\n };\n\n // Handle clear\n const handleClear = () => {\n if (isRange && onRangeChange) {\n onRangeChange({ start: null, end: null });\n } else {\n onChange?.(null);\n }\n setIsOpen(false);\n };\n\n // Navigate calendar\n const navigateMonth = (direction: 'prev' | 'next') => {\n const newDate = new Date(viewDate);\n newDate.setMonth(viewDate.getMonth() + (direction === 'prev' ? -1 : 1));\n setViewDate(newDate);\n };\n\n // Check if date is selected\n const isDateSelected = (date: Date): boolean => {\n if (isRange && rangeValue) {\n return (rangeValue.start ? isSameDay(date, rangeValue.start) : false) ||\n (rangeValue.end ? isSameDay(date, rangeValue.end) : false);\n }\n return value ? isSameDay(date, value) : false;\n };\n\n // Check if date is in range\n const isDateInRange = (date: Date): boolean => {\n if (isRange && rangeValue?.start && rangeValue?.end) {\n return date >= rangeValue.start && date <= rangeValue.end;\n }\n return false;\n };\n\n // Utility function to check if dates are same day\n const isSameDay = (date1: Date, date2: Date): boolean => {\n return date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear();\n };\n\n // Check if date is today\n const isToday = (date: Date): boolean => {\n return isSameDay(date, new Date());\n };\n\n // Check if date is disabled\n const isDateDisabled = (date: Date): boolean => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const variantClasses = {\n default: 'h-10',\n compact: 'h-8 text-sm',\n inline: 'border-0 bg-transparent p-0'\n };\n\n const calendarDays = getCalendarDays();\n\n if (variant === 'inline') {\n return (\n <div \n className={cn('inline-block', className)}\n data-component-name=\"DateTimePicker\"\n ref={containerRef}\n >\n {/* Inline Calendar */}\n <div className=\"bg-card border border-border rounded p-4 shadow-category-1\">\n {(mode === 'date' || mode === 'datetime') && (\n <div className=\"space-y-4\">\n {/* Calendar Header */}\n <div className=\"flex items-center justify-between\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => navigateMonth('prev')}\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </Button>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {MONTHS[viewDate.getMonth()]} {viewDate.getFullYear()}\n </h3>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => navigateMonth('next')}\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n </div>\n\n {/* Calendar Grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {/* Weekday headers */}\n {WEEKDAYS.map(day => (\n <div key={day} className=\"text-xs font-medium text-muted-foreground text-center p-2\">\n {day}\n </div>\n ))}\n \n {/* Calendar days */}\n {calendarDays.map((date, index) => {\n const isCurrentMonth = date.getMonth() === viewDate.getMonth();\n const isSelected = isDateSelected(date);\n const isInRange = isDateInRange(date);\n const isTodayDate = isToday(date);\n const isDisabled = isDateDisabled(date);\n \n return (\n <button\n key={index}\n onClick={() => handleDateSelect(date)}\n disabled={disabled || isDisabled}\n className={cn(\n 'h-8 w-8 text-xs rounded transition-colors',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus:outline-none focus:ring-2 focus:ring-primary/20',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n !isCurrentMonth && 'text-muted-foreground/50',\n isSelected && 'bg-primary text-primary-foreground hover:bg-primary-hover',\n isInRange && !isSelected && 'bg-primary/20',\n isTodayDate && !isSelected && 'bg-accent text-accent-foreground font-semibold'\n )}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Time Picker for inline datetime/time mode */}\n {(mode === 'time' || mode === 'datetime') && (\n <div className={cn('space-y-3', mode === 'datetime' && 'border-t border-border pt-4 mt-4')}>\n <div className=\"flex items-center gap-2\">\n <Clock className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">Time</span>\n </div>\n \n <div className=\"flex items-center gap-2\">\n <select\n value={tempTime.hours}\n onChange={(e) => handleTimeChange(parseInt(e.target.value), tempTime.minutes)}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n {Array.from({ length: 24 }, (_, i) => (\n <option key={i} value={i}>\n {timeFormat === '12h' \n ? (i === 0 ? '12' : i > 12 ? i - 12 : i)\n : i.toString().padStart(2, '0')\n }\n </option>\n ))}\n </select>\n <span className=\"text-foreground\">:</span>\n <select\n value={tempTime.minutes}\n onChange={(e) => handleTimeChange(tempTime.hours, parseInt(e.target.value))}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n {Array.from({ length: 60 }, (_, i) => (\n <option key={i} value={i}>\n {i.toString().padStart(2, '0')}\n </option>\n ))}\n </select>\n {timeFormat === '12h' && (\n <select\n value={tempTime.hours >= 12 ? 'PM' : 'AM'}\n onChange={(e) => {\n const isPM = e.target.value === 'PM';\n const newHours = isPM \n ? (tempTime.hours % 12) + 12 \n : tempTime.hours % 12;\n handleTimeChange(newHours, tempTime.minutes);\n }}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div \n className={cn('relative', className)}\n data-component-name=\"DateTimePicker\"\n ref={containerRef}\n >\n {/* Input Field */}\n <div className=\"relative\">\n <Input\n ref={inputRef}\n value={getDisplayValue()}\n onClick={handleInputClick}\n placeholder={placeholder || `Select ${mode}...`}\n readOnly\n disabled={disabled}\n aria-label={ariaLabel}\n className={cn(\n variantClasses[variant],\n 'pr-20 cursor-pointer',\n error && 'border-status-error focus:border-status-error focus:ring-status-error/20',\n disabled && 'cursor-not-allowed'\n )}\n {...props}\n />\n \n {/* Input Icons */}\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-3 gap-1\">\n {clearable && getDisplayValue() && !disabled && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClear}\n className=\"h-6 w-6 p-0 hover:bg-muted\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n \n <div className=\"text-muted-foreground\">\n {mode === 'time' ? (\n <Clock className=\"w-4 h-4\" />\n ) : (\n <Calendar className=\"w-4 h-4\" />\n )}\n </div>\n </div>\n </div>\n\n {/* Dropdown Picker */}\n {isOpen && (\n <div className=\"absolute top-full left-0 z-50 mt-1 bg-card border border-border rounded shadow-category-1 p-4 min-w-[300px]\">\n {(mode === 'date' || mode === 'datetime') && (\n <div className=\"space-y-4\">\n {/* Calendar Header */}\n <div className=\"flex items-center justify-between\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => navigateMonth('prev')}\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </Button>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {MONTHS[viewDate.getMonth()]} {viewDate.getFullYear()}\n </h3>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => navigateMonth('next')}\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n </div>\n\n {/* Calendar Grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {/* Weekday headers */}\n {WEEKDAYS.map(day => (\n <div key={day} className=\"text-xs font-medium text-muted-foreground text-center p-2\">\n {day}\n </div>\n ))}\n \n {/* Calendar days */}\n {calendarDays.map((date, index) => {\n const isCurrentMonth = date.getMonth() === viewDate.getMonth();\n const isSelected = isDateSelected(date);\n const isInRange = isDateInRange(date);\n const isTodayDate = isToday(date);\n const isDisabled = isDateDisabled(date);\n \n return (\n <button\n key={index}\n onClick={() => handleDateSelect(date)}\n disabled={disabled || isDisabled}\n className={cn(\n 'h-8 w-8 text-xs rounded transition-colors',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus:outline-none focus:ring-2 focus:ring-primary/20',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n !isCurrentMonth && 'text-muted-foreground/50',\n isSelected && 'bg-primary text-primary-foreground hover:bg-primary-hover',\n isInRange && !isSelected && 'bg-primary/20',\n isTodayDate && !isSelected && 'bg-accent text-accent-foreground font-semibold'\n )}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Time Picker */}\n {(mode === 'time' || mode === 'datetime') && (\n <div className={cn('space-y-3', mode === 'datetime' && 'border-t border-border pt-4 mt-4')}>\n <div className=\"flex items-center gap-2\">\n <Clock className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">Time</span>\n </div>\n \n <div className=\"flex items-center gap-2\">\n <select\n value={tempTime.hours}\n onChange={(e) => handleTimeChange(parseInt(e.target.value), tempTime.minutes)}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n {Array.from({ length: 24 }, (_, i) => (\n <option key={i} value={i}>\n {timeFormat === '12h' \n ? (i === 0 ? '12' : i > 12 ? i - 12 : i)\n : i.toString().padStart(2, '0')\n }\n </option>\n ))}\n </select>\n <span className=\"text-foreground\">:</span>\n <select\n value={tempTime.minutes}\n onChange={(e) => handleTimeChange(tempTime.hours, parseInt(e.target.value))}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n {Array.from({ length: 60 }, (_, i) => (\n <option key={i} value={i}>\n {i.toString().padStart(2, '0')}\n </option>\n ))}\n </select>\n {timeFormat === '12h' && (\n <select\n value={tempTime.hours >= 12 ? 'PM' : 'AM'}\n onChange={(e) => {\n const isPM = e.target.value === 'PM';\n const newHours = isPM \n ? (tempTime.hours % 12) + 12 \n : tempTime.hours % 12;\n handleTimeChange(newHours, tempTime.minutes);\n }}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n )}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};","// WIP: Chart component - basic implementation for showcase\n// TODO: Rework chart implementations, improve styling, add more chart types\n// TODO: Consider external chart library integration for production use\n\nimport { Card } from '../../ui/card';\nimport { Skeleton } from '../../ui/skeleton';\nimport { DataBadge } from '../DataBadge';\nimport { cn } from '../../utils/utils';\nimport type { ILoadable } from '../../types';\nimport { DASHBOARD_CHART_HEIGHTS } from '../../shared/config/dashboard-sizes';\nimport { TrendingUp, TrendingDown, Minus, BarChart3, LineChart, AreaChart } from 'lucide-react';\n\nexport type ChartType = 'line' | 'bar' | 'area' | 'pie';\nexport type ChartVariant = 'default' | 'minimal' | 'detailed';\n\nexport interface ChartDataPoint {\n label: string;\n value: number;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n color?: string;\n}\n\nexport interface ChartProps extends ILoadable {\n title: string;\n subtitle?: string;\n data: ChartDataPoint[];\n type: ChartType;\n variant?: ChartVariant;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n showLegend?: boolean;\n showValues?: boolean;\n showTrend?: boolean;\n trend?: {\n value: number;\n label?: string;\n };\n /** Chart height - use standardized sizes from dashboard-sizes.ts */\n height?: number | keyof typeof DASHBOARD_CHART_HEIGHTS;\n onClick?: () => void;\n className?: string;\n /** Enable accessibility features like data table fallback */\n includeDataTable?: boolean;\n /** Custom color overrides for data points */\n colorOverrides?: string[];\n /** Don't render the outer Card wrapper (for embedded use) */\n noWrapper?: boolean;\n}\n\nexport const Chart = ({\n title,\n subtitle,\n data,\n type,\n variant = 'default',\n category,\n showLegend = true,\n showValues = false,\n showTrend = false,\n trend,\n height = 'medium',\n onClick,\n className,\n includeDataTable = true,\n colorOverrides,\n isLoading = false,\n noWrapper = false\n}: ChartProps) => {\n // Resolve height to numeric value\n const chartHeight = typeof height === 'string' ? DASHBOARD_CHART_HEIGHTS[height] : height;\n const getChartIcon = () => {\n switch (type) {\n case 'line': return <LineChart className=\"w-4 h-4\" />;\n case 'bar': return <BarChart3 className=\"w-4 h-4\" />;\n case 'area': return <AreaChart className=\"w-4 h-4\" />;\n default: return <BarChart3 className=\"w-4 h-4\" />;\n }\n };\n\n const getTrendIcon = () => {\n if (!trend) return null;\n \n if (trend.value > 0) {\n return <TrendingUp className=\"w-4 h-4\" />;\n } else if (trend.value < 0) {\n return <TrendingDown className=\"w-4 h-4\" />;\n }\n return <Minus className=\"w-4 h-4\" />;\n };\n\n const getTrendColor = () => {\n if (!trend) return '';\n \n if (trend.value > 0) return 'text-status-success';\n if (trend.value < 0) return 'text-status-error';\n return 'text-status-neutral';\n };\n\n const getDataPointColor = (index: number, point: ChartDataPoint) => {\n // Priority: custom color override > point category > point color > chart category > default category cycle\n if (colorOverrides && colorOverrides[index]) {\n return colorOverrides[index];\n }\n if (point.category) {\n return `hsl(var(--category-${point.category}))`;\n }\n if (point.color) {\n return point.color;\n }\n if (category) {\n return `hsl(var(--category-${category}))`;\n }\n // Default to cycling through categories\n const categoryNum = ((index % 8) + 1) as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n return `hsl(var(--category-${categoryNum}))`;\n };\n\n const maxValue = Math.max(...data.map(d => d.value));\n\n const renderBarChart = () => {\n return (\n <div className=\"space-y-3\" style={{ height: chartHeight }}>\n <div className=\"flex items-end justify-between h-full gap-2\">\n {data.map((point, index) => {\n const percentage = (point.value / maxValue) * 100;\n const color = getDataPointColor(index, point);\n \n return (\n <div key={index} className=\"flex flex-col items-center flex-1 h-full justify-end gap-2\">\n <div\n className=\"w-full rounded-t transition-all hover:opacity-80 relative group\"\n style={{\n height: `${percentage}%`,\n backgroundColor: color,\n minHeight: '4px'\n }}\n role=\"img\"\n aria-label={`${point.label}: ${point.value}`}\n >\n {showValues && (\n <div className=\"absolute -top-6 left-1/2 transform -translate-x-1/2 text-xs font-medium text-foreground whitespace-nowrap\">\n {point.value}\n </div>\n )}\n {/* Tooltip on hover */}\n <div className=\"absolute bottom-full left-1/2 transform -translate-x-1/2 mb-1 px-2 py-1 bg-popover text-popover-foreground text-xs rounded shadow-lg opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-10\">\n {point.label}: {point.value}\n </div>\n </div>\n <div className=\"text-xs text-muted-foreground text-center truncate w-full\">\n {point.label}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n };\n\n const renderLineChart = () => {\n const width = 300;\n const internalHeight = chartHeight - 40;\n const padding = 20;\n const chartWidth = width - (padding * 2);\n \n const points = data.map((point, index) => {\n const x = padding + (index / (data.length - 1)) * chartWidth;\n const y = internalHeight - ((point.value / maxValue) * (internalHeight - padding)) + padding;\n return { x, y, ...point };\n });\n\n const pathD = points.reduce((path, point, index) => {\n const command = index === 0 ? 'M' : 'L';\n return `${path} ${command} ${point.x} ${point.y}`;\n }, '');\n\n const areaPathD = `${pathD} L ${points[points.length - 1]?.x || 0} ${internalHeight} L ${padding} ${internalHeight} Z`;\n\n return (\n <div className=\"relative\" style={{ height: chartHeight }}>\n <svg width={width} height={chartHeight} className=\"w-full h-full\">\n {/* Grid lines */}\n <defs>\n <pattern id=\"grid\" width=\"20\" height=\"20\" patternUnits=\"userSpaceOnUse\">\n <path d=\"M 20 0 L 0 0 0 20\" fill=\"none\" stroke=\"hsl(var(--border))\" strokeWidth=\"0.5\" opacity=\"0.3\" />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill=\"url(#grid)\" />\n \n {/* Area fill for area chart */}\n {type === 'area' && (\n <path\n d={areaPathD}\n fill={category ? `hsl(var(--category-${category}))` : 'hsl(var(--category-1))'}\n fillOpacity=\"0.1\"\n />\n )}\n \n {/* Line */}\n <path\n d={pathD}\n fill=\"none\"\n stroke={category ? `hsl(var(--category-${category}))` : 'hsl(var(--category-1))'}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n \n {/* Data points */}\n {points.map((point, index) => (\n <g key={index}>\n <circle\n cx={point.x}\n cy={point.y}\n r=\"4\"\n fill={getDataPointColor(index, point)}\n stroke=\"hsl(var(--background))\"\n strokeWidth=\"2\"\n className=\"hover:r-6 transition-all cursor-pointer\"\n />\n {showValues && (\n <text\n x={point.x}\n y={point.y - 10}\n textAnchor=\"middle\"\n className=\"text-xs fill-foreground font-medium\"\n >\n {point.value}\n </text>\n )}\n </g>\n ))}\n </svg>\n \n {/* X-axis labels */}\n <div className=\"absolute bottom-0 left-0 right-0 flex justify-between px-5\">\n {data.map((point, index) => (\n <div key={index} className=\"text-xs text-muted-foreground text-center\">\n {point.label}\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n\n const renderChart = () => {\n switch (type) {\n case 'line':\n case 'area':\n return renderLineChart();\n case 'bar':\n return renderBarChart();\n default:\n return renderBarChart();\n }\n };\n\n // Loading state skeleton\n if (isLoading) {\n const loadingContent = (\n <div className={cn(\"space-y-4\", noWrapper && className)}>\n {/* Header skeleton */}\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-1\">\n <Skeleton className=\"h-5 w-32\" />\n {subtitle && <Skeleton className=\"h-4 w-24\" />}\n </div>\n <Skeleton className=\"h-8 w-8\" />\n </div>\n \n {/* Chart skeleton */}\n <div className=\"space-y-2\" style={{ height: chartHeight }}>\n <Skeleton className=\"h-full w-full\" />\n </div>\n \n {/* Legend skeleton */}\n {showLegend && variant !== 'minimal' && (\n <div className=\"space-y-2 pt-2 border-t border-border\">\n {Array.from({ length: Math.min(data.length || 3, 4) }, (_, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <Skeleton className=\"h-3 w-3\" />\n <Skeleton className=\"h-4 w-20\" />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n\n if (noWrapper) {\n return loadingContent;\n }\n\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden\",\n className\n )}\n category={category}\n data-component-name=\"Chart\"\n >\n {loadingContent}\n </Card>\n );\n }\n\n const chartContent = (\n <div className={cn(\"space-y-4\", noWrapper && className)}>\n {/* Header */}\n {variant !== 'minimal' && (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-lg font-semibold text-foreground\">{title}</h3>\n <div className={cn(\n \"p-2 rounded-md flex items-center justify-center transition-colors\",\n category ? `bg-category-${category}/8 text-category-${category}` : \"bg-muted/50 text-muted-foreground\"\n )}>\n {getChartIcon()}\n </div>\n </div>\n {subtitle && (\n <p className=\"text-sm text-muted-foreground mt-1\">{subtitle}</p>\n )}\n </div>\n {showTrend && trend && (\n <div className={cn(\"flex items-center gap-1.5 text-sm\", getTrendColor())}>\n {getTrendIcon()}\n <span className=\"font-medium\">\n {trend.value > 0 && '+'}{trend.value}%\n </span>\n {trend.label && (\n <span className=\"text-muted-foreground\">{trend.label}</span>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Chart */}\n <div className=\"relative\">\n {renderChart()}\n </div>\n\n {/* Legend */}\n {showLegend && variant !== 'minimal' && (\n <div className=\"flex flex-wrap gap-3 pt-2 border-t border-border\">\n {data.map((point, index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-sm flex-shrink-0\"\n style={{ backgroundColor: getDataPointColor(index, point) }}\n />\n <span className=\"text-sm text-foreground\">{point.label}</span>\n {point.category && (\n <DataBadge variant=\"category\" category={point.category} size=\"sm\">\n {`Cat ${point.category}`}\n </DataBadge>\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* Accessibility: Data table fallback */}\n {includeDataTable && !noWrapper && (\n <details className=\"mt-4\">\n <summary className=\"text-sm text-muted-foreground cursor-pointer hover:text-foreground transition-colors\">\n View data table (accessible)\n </summary>\n <div className=\"mt-2 border border-border rounded overflow-hidden\">\n <table className=\"w-full text-sm\">\n <thead className=\"bg-muted/50\">\n <tr>\n <th className=\"text-left p-2 border-b border-border\">Label</th>\n <th className=\"text-right p-2 border-b border-border\">Value</th>\n </tr>\n </thead>\n <tbody>\n {data.map((point, index) => (\n <tr key={index} className=\"border-b border-border last:border-b-0\">\n <td className=\"p-2 font-medium\">{point.label}</td>\n <td className=\"p-2 text-right\">{point.value}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </details>\n )}\n </div>\n );\n\n if (noWrapper) {\n return chartContent;\n }\n\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden transition-all animate-slide-up\",\n onClick && \"cursor-pointer hover:shadow-md hover:scale-[1.01] active:scale-[0.99]\",\n category && `hover:shadow-category-${category}`,\n \"group\",\n className\n )}\n category={category}\n data-component-name=\"Chart\"\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n } : undefined}\n >\n {chartContent}\n </Card>\n );\n};","import React, { useState, useRef, useEffect } from 'react';\nimport { cn } from '../../utils/utils';\nimport { getAnimationClasses } from '../../utils/animations';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\n\nexport interface AccordionItem {\n id: string;\n title: string;\n content: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\nexport interface AccordionProps {\n items: AccordionItem[];\n variant?: 'default' | 'bordered' | 'filled';\n allowMultiple?: boolean;\n defaultOpen?: string | string[];\n collapsible?: boolean;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n className?: string;\n onItemToggle?: (itemId: string, isOpen: boolean) => void;\n}\n\nexport const Accordion = ({\n items,\n variant = 'default',\n allowMultiple = false,\n defaultOpen = [],\n collapsible = true,\n category,\n className,\n onItemToggle\n}: AccordionProps) => {\n // Initialize openItems state based on defaultOpen\n const [openItems, setOpenItems] = useState<Set<string>>(() => {\n if (Array.isArray(defaultOpen)) {\n return new Set(defaultOpen);\n } else if (defaultOpen) {\n return new Set([defaultOpen]);\n }\n return new Set();\n });\n\n const handleItemToggle = (itemId: string) => {\n const isCurrentlyOpen = openItems.has(itemId);\n \n if (!allowMultiple) {\n // Single mode: close others, toggle current\n if (isCurrentlyOpen && collapsible) {\n setOpenItems(new Set());\n onItemToggle?.(itemId, false);\n } else if (!isCurrentlyOpen) {\n setOpenItems(new Set([itemId]));\n onItemToggle?.(itemId, true);\n }\n } else {\n // Multiple mode: toggle current\n const newOpenItems = new Set(openItems);\n if (isCurrentlyOpen && collapsible) {\n newOpenItems.delete(itemId);\n onItemToggle?.(itemId, false);\n } else if (!isCurrentlyOpen) {\n newOpenItems.add(itemId);\n onItemToggle?.(itemId, true);\n }\n setOpenItems(newOpenItems);\n }\n };\n\n const getVariantClasses = () => {\n switch (variant) {\n case 'bordered':\n return 'border border-border rounded-lg overflow-hidden';\n case 'filled':\n return 'bg-muted/30 rounded-lg overflow-hidden';\n default:\n return 'space-y-2';\n }\n };\n\n const getItemClasses = (isOpen: boolean) => {\n const baseClasses = variant === 'default' \n ? 'border border-border rounded-lg overflow-hidden'\n : variant === 'bordered'\n ? 'border-b border-border last:border-b-0'\n : '';\n\n return cn(\n baseClasses,\n isOpen && category && variant !== 'filled' && `shadow-category-${category}/20 shadow-lg`,\n 'transition-all duration-200'\n );\n };\n\n const getHeaderClasses = (item: AccordionItem, isOpen: boolean) => {\n return cn(\n 'w-full flex items-center justify-between p-4 text-left',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'transition-all duration-200',\n getAnimationClasses({ type: 'subtle', timing: 'normal' }),\n \n // Variant-specific styling\n variant === 'filled' && 'bg-muted/50',\n variant === 'default' && 'bg-card hover:bg-muted/30',\n variant === 'bordered' && 'bg-card hover:bg-muted/30',\n \n // Category coloring when open\n isOpen && category && `bg-category-${category}/5 border-category-${category}/20`,\n \n // Disabled state\n item.disabled && 'opacity-50 cursor-not-allowed',\n !item.disabled && 'cursor-pointer',\n \n // Focus and hover states\n !item.disabled && 'hover:bg-accent/20',\n \n 'group'\n );\n };\n\n const getIconClasses = (isOpen: boolean) => {\n return cn(\n 'w-4 h-4 transition-transform duration-200 flex-shrink-0',\n isOpen ? 'rotate-90' : 'rotate-0',\n category ? `text-category-${category}` : 'text-muted-foreground',\n 'group-hover:scale-110'\n );\n };\n\n return (\n <div \n className={cn(\n getVariantClasses(),\n className\n )}\n data-component-name=\"Accordion\"\n data-variant={variant}\n role=\"tablist\"\n >\n {items.map((item) => {\n const isOpen = openItems.has(item.id);\n \n return (\n <AccordionItem\n key={item.id}\n item={item}\n isOpen={isOpen}\n onToggle={() => handleItemToggle(item.id)}\n variant={variant}\n category={category}\n itemClasses={getItemClasses(isOpen)}\n headerClasses={getHeaderClasses(item, isOpen)}\n iconClasses={getIconClasses(isOpen)}\n />\n );\n })}\n </div>\n );\n};\n\n// Separate AccordionItem component for better performance and cleaner code\ninterface AccordionItemComponentProps {\n item: AccordionItem;\n isOpen: boolean;\n onToggle: () => void;\n variant: 'default' | 'bordered' | 'filled';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n itemClasses: string;\n headerClasses: string;\n iconClasses: string;\n}\n\nconst AccordionItem = ({\n item,\n isOpen,\n onToggle,\n variant,\n category,\n itemClasses,\n headerClasses,\n iconClasses\n}: AccordionItemComponentProps) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n if (contentRef.current) {\n if (isOpen) {\n setContentHeight(contentRef.current.scrollHeight);\n } else {\n setContentHeight(0);\n }\n }\n }, [isOpen, item.content]);\n\n return (\n <div className={itemClasses}>\n {/* Header */}\n <button\n className={headerClasses}\n onClick={onToggle}\n disabled={item.disabled}\n aria-expanded={isOpen}\n aria-controls={`accordion-content-${item.id}`}\n id={`accordion-header-${item.id}`}\n role=\"tab\"\n data-component-name=\"AccordionHeader\"\n >\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {/* Custom icon or default chevron */}\n {item.icon ? (\n <div className={cn(\n 'flex-shrink-0',\n category ? `text-category-${category}` : 'text-muted-foreground'\n )}>\n {item.icon}\n </div>\n ) : (\n <ChevronRight className={iconClasses} />\n )}\n \n {/* Title */}\n <span className={cn(\n 'font-medium text-sm truncate',\n isOpen && category ? `text-category-${category}` : 'text-foreground',\n 'group-hover:text-foreground transition-colors duration-200'\n )}>\n {item.title}\n </span>\n </div>\n\n {/* Collapse indicator */}\n <ChevronDown \n className={cn(\n 'w-4 h-4 transition-transform duration-200 flex-shrink-0 ml-2',\n isOpen ? 'rotate-180' : 'rotate-0',\n category && isOpen ? `text-category-${category}` : 'text-muted-foreground',\n 'group-hover:scale-110'\n )}\n data-component-name=\"AccordionChevron\"\n />\n </button>\n\n {/* Content */}\n <div\n style={{\n height: contentHeight,\n overflow: 'hidden',\n transition: 'height 250ms cubic-bezier(0.4, 0, 0.2, 1)'\n }}\n aria-labelledby={`accordion-header-${item.id}`}\n id={`accordion-content-${item.id}`}\n role=\"tabpanel\"\n data-component-name=\"AccordionContent\"\n >\n <div \n ref={contentRef}\n className={cn(\n 'p-4 pt-0',\n variant === 'filled' && 'bg-background/50',\n isOpen && category && variant !== 'filled' && `bg-category-${category}/2`,\n 'text-muted-foreground text-sm leading-relaxed'\n )}\n >\n {item.content}\n </div>\n </div>\n </div>\n );\n};","import React, { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from '../../ui/button';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/utils';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'default' | 'destructive' | 'success';\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n showCloseButton?: boolean;\n footer?: React.ReactNode;\n className?: string;\n overlayClassName?: string;\n contentClassName?: string;\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg', \n xl: 'max-w-xl'\n};\n\nconst variantClasses = {\n default: 'border-border',\n destructive: 'border-l-4 border-l-status-error',\n success: 'border-l-4 border-l-status-success'\n};\n\nexport const Modal = ({\n isOpen,\n onClose,\n title,\n children,\n size = 'md',\n variant = 'default',\n closeOnBackdrop = true,\n closeOnEscape = true,\n showCloseButton = true,\n footer,\n className,\n overlayClassName,\n contentClassName\n}: ModalProps) => {\n const modalRef = useRef<HTMLDivElement>(null);\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n // Handle escape key\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, closeOnEscape, onClose]);\n\n // Handle focus management\n useEffect(() => {\n if (!isOpen) return;\n\n // Store the currently focused element\n previousActiveElement.current = document.activeElement as HTMLElement;\n\n // Focus the modal\n if (modalRef.current) {\n modalRef.current.focus();\n }\n\n // Restore focus when modal closes\n return () => {\n if (previousActiveElement.current) {\n previousActiveElement.current.focus();\n }\n };\n }, [isOpen]);\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [isOpen]);\n\n // Handle backdrop click\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (closeOnBackdrop && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n // Trap focus within modal\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Tab') {\n const focusableElements = modalRef.current?.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n \n if (!focusableElements?.length) return;\n\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n e.preventDefault();\n lastElement.focus();\n }\n } else {\n if (document.activeElement === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n }\n };\n\n if (!isOpen) return null;\n\n return createPortal(\n <div\n className={cn(\n \"fixed inset-0 z-50 flex items-center justify-center p-4\",\n \"bg-black/50 backdrop-blur-sm\",\n \"animate-in fade-in-0 duration-200\",\n overlayClassName\n )}\n onClick={handleBackdropClick}\n data-component-name=\"ModalOverlay\"\n >\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? \"modal-title\" : undefined}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n className={cn(\n \"relative w-full max-h-[90vh] overflow-hidden\",\n \"bg-card border rounded-lg shadow-lg\",\n \"animate-in zoom-in-95 duration-200\",\n sizeClasses[size],\n variantClasses[variant],\n className\n )}\n data-component-name=\"Modal\"\n data-variant={variant}\n data-size={size}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between p-6 border-b border-border\">\n {title && (\n <h2 \n id=\"modal-title\"\n className={cn(\n \"text-lg font-semibold text-foreground\",\n variant === 'destructive' && \"text-status-error\",\n variant === 'success' && \"text-status-success\"\n )}\n data-component-name=\"ModalTitle\"\n >\n {title}\n </h2>\n )}\n {showCloseButton && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onClose}\n className=\"h-8 w-8 rounded hover:bg-muted/80\"\n aria-label=\"Close modal\"\n data-component-name=\"ModalCloseButton\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n )}\n\n {/* Content */}\n <div \n className={cn(\n \"p-6 overflow-y-auto\",\n (!title && !showCloseButton) && \"pt-6\",\n !footer && \"pb-6\",\n contentClassName\n )}\n data-component-name=\"ModalContent\"\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div \n className=\"flex items-center justify-end gap-3 p-6 pt-0 border-t border-border\"\n data-component-name=\"ModalFooter\"\n >\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};","import React from 'react';\nimport { cn } from '../../utils/utils';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface ProgressBarProps {\n /** Progress value (0-100) */\n value: number;\n /** Maximum value */\n max?: number;\n /** Status-based coloring */\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n /** Category-based coloring */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show percentage label */\n showLabel?: boolean;\n /** Custom label */\n label?: string;\n /** Progress bar variant */\n variant?: 'default' | 'striped' | 'animated';\n /** Additional CSS classes */\n className?: string;\n /** Accessible label */\n 'aria-label'?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n value,\n max = 100,\n status,\n category,\n size = 'md',\n showLabel = false,\n label,\n variant = 'default',\n className,\n 'aria-label': ariaLabel\n}) => {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n \n const sizeClasses = {\n sm: 'h-2',\n md: 'h-3',\n lg: 'h-4'\n };\n\n const trackClasses = 'w-full bg-muted rounded-full overflow-hidden';\n \n const getBarClasses = () => {\n let baseClasses = 'h-full transition-all duration-500 ease-out';\n \n // Color classes\n if (status) {\n baseClasses += ` bg-status-${status}`;\n } else if (category) {\n baseClasses += ` bg-category-${category}`;\n } else {\n baseClasses += ' bg-primary';\n }\n \n // Variant classes\n if (variant === 'striped') {\n baseClasses += ' bg-gradient-to-r from-current via-current/80 to-current';\n baseClasses += ' bg-[length:1rem_1rem]';\n baseClasses += ' bg-repeat-x';\n }\n \n if (variant === 'animated') {\n baseClasses += ' bg-gradient-to-r from-current via-current/60 to-current';\n baseClasses += ' bg-[length:2rem_100%]';\n baseClasses += ' animate-pulse';\n }\n \n return baseClasses;\n };\n\n const displayLabel = label || (showLabel ? `${Math.round(percentage)}%` : undefined);\n\n return (\n <div\n className={cn('w-full', className)}\n data-component-name=\"ProgressBar\"\n >\n {displayLabel && (\n <div className=\"flex justify-between items-center mb-2 text-sm\">\n <span className=\"text-foreground font-medium\">\n {displayLabel}\n </span>\n {showLabel && !label && (\n <span className=\"text-muted-foreground\">\n {value}/{max}\n </span>\n )}\n </div>\n )}\n \n <div\n className={cn(trackClasses, sizeClasses[size])}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={ariaLabel || `Progress: ${percentage.toFixed(1)}%`}\n >\n <div\n className={cn(\n getBarClasses(),\n getAnimationClasses(animationPresets.subtle)\n )}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n};","import React, { useState, useRef, useCallback, useId } from 'react';\nimport { Upload, X, File, Image, AlertCircle, CheckCircle, Loader2 } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport { Button } from '../../ui/button';\nimport { ProgressBar } from '../ProgressBar';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface FileUploadFile {\n id: string;\n file: File;\n name: string;\n size: number;\n type: string;\n progress?: number;\n status: 'pending' | 'uploading' | 'success' | 'error';\n error?: string;\n preview?: string;\n}\n\nexport interface FileUploadProps {\n /** Accept specific file types */\n accept?: string;\n /** Allow multiple file selection */\n multiple?: boolean;\n /** Maximum file size in bytes */\n maxSize?: number;\n /** Maximum number of files */\n maxFiles?: number;\n /** Visual variant */\n variant?: 'default' | 'compact' | 'large';\n /** Disabled state */\n disabled?: boolean;\n /** Show file previews for images */\n showPreview?: boolean;\n /** Upload function */\n onUpload?: (files: FileUploadFile[]) => Promise<void>;\n /** File change handler */\n onChange?: (files: FileUploadFile[]) => void;\n /** File remove handler */\n onRemove?: (fileId: string) => void;\n /** Custom upload text */\n uploadText?: string;\n /** Custom drag text */\n dragText?: string;\n /** Additional CSS classes */\n className?: string;\n /** Error state */\n error?: string;\n /** Loading state */\n loading?: boolean;\n}\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n};\n\nconst isImageFile = (file: File): boolean => {\n return file.type.startsWith('image/');\n};\n\nconst createFilePreview = (file: File): Promise<string> => {\n return new Promise((resolve) => {\n if (!isImageFile(file)) {\n resolve('');\n return;\n }\n \n const reader = new FileReader();\n reader.onload = (e) => resolve(e.target?.result as string || '');\n reader.readAsDataURL(file);\n });\n};\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n accept,\n multiple = false,\n maxSize = 10 * 1024 * 1024, // 10MB default\n maxFiles = multiple ? 10 : 1,\n variant = 'default',\n disabled = false,\n showPreview = true,\n onUpload,\n onChange,\n onRemove,\n uploadText = 'Choose files or drag and drop',\n dragText = 'Drop files here',\n className,\n error,\n loading = false\n}) => {\n const [files, setFiles] = useState<FileUploadFile[]>([]);\n const [isDragActive, setIsDragActive] = useState(false);\n const [, setDragCounter] = useState(0);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const dropZoneId = useId();\n\n const validateFile = (file: File): string | null => {\n if (maxSize && file.size > maxSize) {\n return `File size exceeds ${formatFileSize(maxSize)}`;\n }\n \n if (accept) {\n const acceptedTypes = accept.split(',').map(type => type.trim().toLowerCase());\n const fileType = file.type.toLowerCase();\n const fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\n \n const isValidType = acceptedTypes.some(acceptedType => {\n if (acceptedType.startsWith('.')) {\n return fileExtension === acceptedType;\n }\n if (acceptedType.includes('/*')) {\n const baseType = acceptedType.split('/')[0];\n return fileType.startsWith(baseType + '/');\n }\n return fileType === acceptedType;\n });\n \n if (!isValidType) {\n return `File type not accepted. Accepted types: ${accept}`;\n }\n }\n \n return null;\n };\n\n const processFiles = useCallback(async (fileList: FileList) => {\n const newFiles: FileUploadFile[] = [];\n \n // Check max files limit\n if (files.length + fileList.length > maxFiles) {\n return;\n }\n \n for (let i = 0; i < fileList.length; i++) {\n const file = fileList[i];\n const validationError = validateFile(file);\n \n // Check for duplicates\n const isDuplicate = files.some(existingFile => \n existingFile.name === file.name && existingFile.size === file.size\n );\n \n if (isDuplicate) continue;\n \n const fileUpload: FileUploadFile = {\n id: `${Date.now()}-${i}`,\n file,\n name: file.name,\n size: file.size,\n type: file.type,\n status: validationError ? 'error' : 'pending',\n error: validationError || undefined\n };\n \n // Create preview for images\n if (showPreview && isImageFile(file) && !validationError) {\n try {\n fileUpload.preview = await createFilePreview(file);\n } catch {\n // Ignore preview errors\n }\n }\n \n newFiles.push(fileUpload);\n }\n \n const updatedFiles = [...files, ...newFiles];\n setFiles(updatedFiles);\n onChange?.(updatedFiles);\n }, [files, maxFiles, maxSize, accept, showPreview, onChange, validateFile]);\n\n const removeFile = useCallback((fileId: string) => {\n const updatedFiles = files.filter(file => file.id !== fileId);\n setFiles(updatedFiles);\n onRemove?.(fileId);\n onChange?.(updatedFiles);\n }, [files, onRemove, onChange]);\n\n const handleFileSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const fileList = e.target.files;\n if (fileList && fileList.length > 0) {\n processFiles(fileList);\n }\n // Reset input value to allow same file selection\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }, [processFiles]);\n\n const handleDragEnter = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragCounter(prev => prev + 1);\n if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\n setIsDragActive(true);\n }\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragCounter(prev => {\n const newCount = prev - 1;\n if (newCount === 0) {\n setIsDragActive(false);\n }\n return newCount;\n });\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(false);\n setDragCounter(0);\n \n const droppedFiles = e.dataTransfer.files;\n if (droppedFiles && droppedFiles.length > 0) {\n processFiles(droppedFiles);\n }\n }, [processFiles]);\n\n const handleUpload = async () => {\n if (!onUpload) return;\n \n const validFiles = files.filter(file => file.status !== 'error');\n if (validFiles.length === 0) return;\n \n // Set all valid files to uploading\n const uploadingFiles = files.map(file => \n file.status === 'error' ? file : { ...file, status: 'uploading' as const, progress: 0 }\n );\n setFiles(uploadingFiles);\n \n try {\n await onUpload(validFiles);\n \n // Mark as success\n const successFiles = files.map(file => \n file.status === 'error' ? file : { ...file, status: 'success' as const, progress: 100 }\n );\n setFiles(successFiles);\n } catch (uploadError) {\n // Mark as error\n const errorFiles = files.map(file => \n file.status === 'uploading' ? { \n ...file, \n status: 'error' as const, \n error: uploadError instanceof Error ? uploadError.message : 'Upload failed' \n } : file\n );\n setFiles(errorFiles);\n }\n };\n\n const variantClasses = {\n default: 'p-8',\n compact: 'p-4',\n large: 'p-12'\n };\n\n const iconSizes = {\n default: 'w-8 h-8',\n compact: 'w-6 h-6',\n large: 'w-12 h-12'\n };\n\n const textSizes = {\n default: 'text-base',\n compact: 'text-sm',\n large: 'text-lg'\n };\n\n const getFileIcon = (file: FileUploadFile) => {\n if (isImageFile(file.file)) {\n return <Image className=\"w-4 h-4\" />;\n }\n return <File className=\"w-4 h-4\" />;\n };\n\n const getStatusIcon = (file: FileUploadFile) => {\n switch (file.status) {\n case 'uploading':\n return <Loader2 className=\"w-4 h-4 animate-spin text-category-1\" />;\n case 'success':\n return <CheckCircle className=\"w-4 h-4 text-status-success\" />;\n case 'error':\n return <AlertCircle className=\"w-4 h-4 text-status-error\" />;\n default:\n return null;\n }\n };\n\n return (\n <div className={cn(\"space-y-4\", className)} data-component-name=\"FileUpload\">\n {/* Drop zone */}\n <div\n className={cn(\n 'border-2 border-dashed rounded-lg transition-all duration-200 cursor-pointer',\n 'flex flex-col items-center justify-center text-center',\n variantClasses[variant],\n disabled ? \n 'border-border/50 bg-muted/30 cursor-not-allowed' :\n isDragActive ?\n 'border-category-1 bg-category-1/5 scale-[1.02]' :\n error ?\n 'border-status-error bg-status-error/5 hover:border-status-error/70' :\n 'border-border hover:border-category-1/50 hover:bg-muted/30',\n getAnimationClasses(animationPresets.subtle)\n )}\n onDragEnter={!disabled ? handleDragEnter : undefined}\n onDragLeave={!disabled ? handleDragLeave : undefined}\n onDragOver={!disabled ? handleDragOver : undefined}\n onDrop={!disabled ? handleDrop : undefined}\n onClick={() => !disabled && fileInputRef.current?.click()}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label=\"File upload area\"\n aria-describedby={`${dropZoneId}-description`}\n onKeyDown={(e) => {\n if (!disabled && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n fileInputRef.current?.click();\n }\n }}\n data-component-name=\"FileUploadDropZone\"\n >\n <Upload className={cn(\n iconSizes[variant],\n disabled ? 'text-muted-foreground' : \n isDragActive ? 'text-category-1' : \n error ? 'text-status-error' : 'text-muted-foreground'\n )} />\n \n <div className=\"mt-4 space-y-1\">\n <p className={cn(\n textSizes[variant],\n 'font-medium',\n disabled ? 'text-muted-foreground' : \n isDragActive ? 'text-category-1' : \n error ? 'text-status-error' : 'text-foreground'\n )}>\n {isDragActive ? dragText : uploadText}\n </p>\n \n <p className=\"text-xs text-muted-foreground\" id={`${dropZoneId}-description`}>\n {accept && `Accepted types: ${accept}`}\n {maxSize && ` • Max size: ${formatFileSize(maxSize)}`}\n {multiple && ` • Max files: ${maxFiles}`}\n </p>\n </div>\n\n {error && (\n <div className=\"mt-2 text-xs text-status-error font-medium\">\n {error}\n </div>\n )}\n </div>\n\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleFileSelect}\n className=\"hidden\"\n disabled={disabled}\n aria-label=\"File input\"\n />\n\n {/* File list */}\n {files.length > 0 && (\n <div className=\"space-y-2\" data-component-name=\"FileUploadList\">\n {files.map((file) => (\n <div\n key={file.id}\n className={cn(\n 'flex items-center gap-3 p-3 rounded-lg border bg-card',\n file.status === 'error' && 'border-status-error/30 bg-status-error/5'\n )}\n data-component-name=\"FileUploadItem\"\n >\n {/* File preview or icon */}\n <div className=\"flex-shrink-0\">\n {file.preview ? (\n <img\n src={file.preview}\n alt={file.name}\n className=\"w-10 h-10 object-cover rounded border\"\n />\n ) : (\n <div className=\"w-10 h-10 flex items-center justify-center bg-muted rounded border\">\n {getFileIcon(file)}\n </div>\n )}\n </div>\n\n {/* File info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-foreground truncate\">\n {file.name}\n </p>\n {getStatusIcon(file)}\n </div>\n \n <div className=\"flex items-center gap-2 mt-1\">\n <p className=\"text-xs text-muted-foreground\">\n {formatFileSize(file.size)}\n </p>\n \n {file.status === 'uploading' && file.progress !== undefined && (\n <div className=\"flex-1 max-w-24\">\n <ProgressBar value={file.progress || 0} size=\"sm\" />\n </div>\n )}\n </div>\n\n {file.error && (\n <p className=\"text-xs text-status-error mt-1\">\n {file.error}\n </p>\n )}\n </div>\n\n {/* Remove button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n removeFile(file.id);\n }}\n className=\"flex-shrink-0 h-8 w-8 p-0 hover:bg-destructive/10 hover:text-destructive\"\n aria-label={`Remove ${file.name}`}\n >\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n ))}\n </div>\n )}\n\n {/* Upload button */}\n {files.length > 0 && onUpload && (\n <div className=\"flex items-center gap-2\">\n <Button\n onClick={handleUpload}\n disabled={loading || files.every(f => f.status === 'error') || files.some(f => f.status === 'uploading')}\n className=\"flex items-center gap-2\"\n >\n {loading && <Loader2 className=\"w-4 h-4 animate-spin\" />}\n Upload {files.filter(f => f.status !== 'error').length} file{files.filter(f => f.status !== 'error').length !== 1 ? 's' : ''}\n </Button>\n \n <Button\n variant=\"outline\"\n onClick={() => setFiles([])}\n disabled={loading || files.some(f => f.status === 'uploading')}\n >\n Clear all\n </Button>\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { X, AlertCircle, CheckCircle, AlertTriangle, Info } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport { Button } from '../../ui/button';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface AlertProps {\n /** Alert content */\n children: React.ReactNode;\n /** Alert status type */\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n /** Alert title */\n title?: string;\n /** Whether alert can be dismissed */\n dismissible?: boolean;\n /** Dismiss handler */\n onDismiss?: () => void;\n /** Visual variant */\n variant?: 'filled' | 'outlined' | 'soft';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS classes */\n className?: string;\n /** Custom icon */\n icon?: React.ReactNode;\n /** Hide default icon */\n hideIcon?: boolean;\n}\n\nconst statusIcons = {\n success: CheckCircle,\n warning: AlertTriangle,\n error: AlertCircle,\n info: Info,\n neutral: Info\n};\n\nexport const Alert: React.FC<AlertProps> = ({\n children,\n status = 'neutral',\n title,\n dismissible = false,\n onDismiss,\n variant = 'soft',\n size = 'md',\n className,\n icon,\n hideIcon = false\n}) => {\n const IconComponent = statusIcons[status];\n const displayIcon = icon || (!hideIcon && <IconComponent className=\"w-5 h-5\" />);\n\n const sizeClasses = {\n sm: 'p-3 text-sm',\n md: 'p-4 text-sm',\n lg: 'p-6 text-base'\n };\n\n const variantClasses = {\n filled: {\n success: 'bg-status-success text-white border-status-success',\n warning: 'bg-status-warning text-white border-status-warning',\n error: 'bg-status-error text-white border-status-error',\n info: 'bg-status-info text-white border-status-info',\n neutral: 'bg-muted text-foreground border-border'\n },\n outlined: {\n success: 'bg-background text-status-success border-status-success',\n warning: 'bg-background text-status-warning border-status-warning',\n error: 'bg-background text-status-error border-status-error',\n info: 'bg-background text-status-info border-status-info',\n neutral: 'bg-background text-foreground border-border'\n },\n soft: {\n success: 'bg-status-success/10 text-status-success border-status-success/20',\n warning: 'bg-status-warning/10 text-status-warning border-status-warning/20',\n error: 'bg-status-error/10 text-status-error border-status-error/20',\n info: 'bg-status-info/10 text-status-info border-status-info/20',\n neutral: 'bg-muted/50 text-foreground border-border/50'\n }\n };\n\n return (\n <div\n className={cn(\n 'rounded-lg border flex items-start gap-3 relative',\n 'transition-all duration-200',\n sizeClasses[size],\n variantClasses[variant][status],\n getAnimationClasses(animationPresets.subtle),\n className\n )}\n role=\"alert\"\n data-component-name=\"Alert\"\n >\n {/* Icon */}\n {displayIcon && (\n <div className=\"flex-shrink-0 mt-0.5\">\n {displayIcon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h4 className=\"font-semibold mb-1\">\n {title}\n </h4>\n )}\n <div className=\"text-current\">\n {children}\n </div>\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDismiss}\n className={cn(\n 'flex-shrink-0 h-auto p-1 -mt-1 -mr-1',\n 'hover:bg-current/10 text-current'\n )}\n aria-label=\"Dismiss alert\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n </div>\n );\n};","import React, { useEffect, useState, useCallback } from 'react';\nimport { X, CheckCircle, AlertTriangle, AlertCircle, Info } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport { Button } from '../../ui/button';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface ToastProps {\n /** Toast content */\n children: React.ReactNode;\n /** Toast status type */\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n /** Toast title */\n title?: string;\n /** Auto-dismiss duration in milliseconds */\n duration?: number;\n /** Whether toast can be dismissed */\n dismissible?: boolean;\n /** Dismiss handler */\n onDismiss?: () => void;\n /** Toast position */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n /** Custom icon */\n icon?: React.ReactNode;\n /** Hide default icon */\n hideIcon?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Show progress bar for auto-dismiss */\n showProgress?: boolean;\n}\n\nconst statusIcons = {\n success: CheckCircle,\n warning: AlertTriangle,\n error: AlertCircle,\n info: Info,\n neutral: Info\n};\n\nexport const Toast: React.FC<ToastProps> = ({\n children,\n status = 'neutral',\n title,\n duration = 0, // 0 means no auto-dismiss\n dismissible = true,\n onDismiss,\n position = 'top-right',\n icon,\n hideIcon = false,\n className,\n showProgress = false\n}) => {\n const [isVisible, setIsVisible] = useState(true);\n const [progress, setProgress] = useState(100);\n\n const IconComponent = statusIcons[status];\n const displayIcon = icon || (!hideIcon && <IconComponent className=\"w-5 h-5\" />);\n\n const handleDismiss = useCallback(() => {\n setIsVisible(false);\n setTimeout(() => onDismiss?.(), 300); // Wait for exit animation\n }, [onDismiss]);\n\n useEffect(() => {\n if (duration > 0) {\n const dismissTimer = setTimeout(handleDismiss, duration);\n \n if (showProgress) {\n const progressInterval = setInterval(() => {\n setProgress(prev => {\n const decrement = 100 / (duration / 50); // Update every 50ms\n return Math.max(prev - decrement, 0);\n });\n }, 50);\n \n return () => {\n clearTimeout(dismissTimer);\n clearInterval(progressInterval);\n };\n }\n \n return () => clearTimeout(dismissTimer);\n }\n }, [duration, showProgress, handleDismiss]);\n\n const positionClasses = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2'\n };\n\n const statusClasses = {\n success: 'bg-background text-status-success border-status-success/30 shadow-status-success/10',\n warning: 'bg-background text-status-warning border-status-warning/30 shadow-status-warning/10',\n error: 'bg-background text-status-error border-status-error/30 shadow-status-error/10',\n info: 'bg-background text-status-info border-status-info/30 shadow-status-info/10',\n neutral: 'bg-background text-foreground border-border shadow-muted/20'\n };\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'fixed z-50 w-full max-w-sm',\n positionClasses[position]\n )}\n >\n <div\n className={cn(\n 'rounded-lg border p-4 shadow-lg backdrop-blur-sm',\n 'flex items-start gap-3 relative overflow-hidden',\n statusClasses[status],\n getAnimationClasses(animationPresets.card),\n className\n )}\n role=\"alert\"\n data-component-name=\"Toast\"\n >\n {/* Icon */}\n {displayIcon && (\n <div className=\"flex-shrink-0 mt-0.5\">\n {displayIcon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h4 className=\"font-semibold mb-1 text-sm\">\n {title}\n </h4>\n )}\n <div className=\"text-sm text-current\">\n {children}\n </div>\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleDismiss}\n className={cn(\n 'flex-shrink-0 h-auto p-1 -mt-1 -mr-1',\n 'hover:bg-current/10 text-current'\n )}\n aria-label=\"Dismiss notification\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n\n {/* Progress bar */}\n {showProgress && duration > 0 && (\n <div className=\"absolute bottom-0 left-0 right-0 h-1 bg-current/10\">\n <div\n className=\"h-full bg-current/30 transition-all duration-50 ease-linear\"\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\n// Toast container component for managing multiple toasts\nexport interface ToastContainerProps {\n /** Toast notifications */\n toasts: Array<ToastProps & { id: string }>;\n /** Container position */\n position?: ToastProps['position'];\n /** Maximum number of visible toasts */\n maxToasts?: number;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n toasts,\n position = 'top-right',\n maxToasts = 5,\n className\n}) => {\n const visibleToasts = toasts.slice(0, maxToasts);\n\n const positionClasses = {\n 'top-right': 'top-4 right-4 flex-col',\n 'top-left': 'top-4 left-4 flex-col',\n 'bottom-right': 'bottom-4 right-4 flex-col-reverse',\n 'bottom-left': 'bottom-4 left-4 flex-col-reverse',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 flex-col',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 flex-col-reverse'\n };\n\n return (\n <div\n className={cn(\n 'fixed z-50 flex gap-2 pointer-events-none',\n positionClasses[position],\n className\n )}\n data-component-name=\"ToastContainer\"\n >\n {visibleToasts.map(({ id, ...toastProps }) => (\n <div key={id} className=\"pointer-events-auto\">\n <Toast {...toastProps} position={position} />\n </div>\n ))}\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../utils/utils';\nimport { Label } from '../../ui/label';\n\nexport interface FormFieldProps {\n /** Field label */\n label?: string;\n /** Field description/help text */\n description?: string;\n /** Error message */\n error?: string;\n /** Whether field is required */\n required?: boolean;\n /** Field content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** HTML for attribute for label */\n htmlFor?: string;\n /** Field layout */\n layout?: 'vertical' | 'horizontal';\n /** Label width for horizontal layout */\n labelWidth?: string;\n}\n\nexport const FormField: React.FC<FormFieldProps> = ({\n label,\n description,\n error,\n required = false,\n children,\n className,\n htmlFor,\n layout = 'vertical',\n labelWidth = '120px'\n}) => {\n const isHorizontal = layout === 'horizontal';\n\n return (\n <div\n className={cn(\n 'space-y-2',\n isHorizontal && 'flex items-start gap-4',\n className\n )}\n data-component-name=\"FormField\"\n >\n {/* Label section */}\n {label && (\n <div\n className={cn(\n isHorizontal && 'flex-shrink-0',\n isHorizontal && 'pt-2' // Align with input top padding\n )}\n style={isHorizontal ? { width: labelWidth } : undefined}\n >\n <Label\n htmlFor={htmlFor}\n className={cn(\n 'text-sm font-medium text-foreground',\n required && \"after:content-['*'] after:ml-0.5 after:text-status-error\"\n )}\n >\n {label}\n </Label>\n </div>\n )}\n\n {/* Field content section */}\n <div className={cn(isHorizontal && 'flex-1 min-w-0')}>\n {/* Field input */}\n <div className=\"relative\">\n {children}\n </div>\n\n {/* Description */}\n {description && !error && (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {description}\n </p>\n )}\n\n {/* Error message */}\n {error && (\n <p className=\"mt-1 text-xs text-status-error font-medium\">\n {error}\n </p>\n )}\n </div>\n </div>\n );\n};","import React from 'react';\nimport { ChevronRight, Home } from 'lucide-react';\nimport { cn } from '../../utils/utils';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n active?: boolean;\n}\n\ninterface BreadcrumbProps {\n items: BreadcrumbItem[];\n showHome?: boolean;\n homeHref?: string;\n className?: string;\n separator?: React.ReactNode;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n showHome = true,\n homeHref = '/',\n className,\n separator = <ChevronRight className=\"w-4 h-4\" />,\n category = 1\n}) => {\n const allItems = showHome \n ? [{ label: 'Home', href: homeHref, icon: <Home className=\"w-4 h-4\" />, active: false }, ...items]\n : items;\n\n return (\n <nav \n className={cn('flex items-center space-x-1 text-sm', className)}\n aria-label=\"Breadcrumb\"\n data-component-name=\"Breadcrumb\"\n >\n <ol className=\"flex items-center space-x-1\">\n {allItems.map((item, index) => {\n const isLast = index === allItems.length - 1;\n const isActive = item.active || isLast;\n \n return (\n <li key={index} className=\"flex items-center space-x-1\">\n {item.href && !isActive ? (\n <a\n href={item.href}\n className={cn(\n 'flex items-center space-x-1 hover:text-foreground transition-colors',\n `text-category-${category}/70 hover:text-category-${category}`,\n 'hover:underline'\n )}\n >\n {'icon' in item && item.icon}\n <span>{item.label}</span>\n </a>\n ) : (\n <span\n className={cn(\n 'flex items-center space-x-1',\n isActive \n ? `text-category-${category} font-medium` \n : 'text-muted-foreground'\n )}\n aria-current={isActive ? 'page' : undefined}\n >\n {'icon' in item && item.icon}\n <span>{item.label}</span>\n </span>\n )}\n \n {!isLast && (\n <span className=\"text-muted-foreground ml-1\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};","import { useEffect, useState } from 'react';\nimport { Moon, Sun } from 'lucide-react';\nimport { cn } from '../utils/utils';\n\nexport const DarkModeToggle = ({ className }: { className?: string }) => {\n const [isDark, setIsDark] = useState(false);\n\n useEffect(() => {\n // Check for saved preference or system preference\n const savedTheme = localStorage.getItem('theme');\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n \n if (savedTheme === 'dark' || (!savedTheme && prefersDark)) {\n setIsDark(true);\n document.documentElement.classList.add('dark');\n } else {\n setIsDark(false);\n document.documentElement.classList.remove('dark');\n }\n }, []);\n\n const toggleDarkMode = () => {\n if (isDark) {\n document.documentElement.classList.remove('dark');\n localStorage.setItem('theme', 'light');\n setIsDark(false);\n } else {\n document.documentElement.classList.add('dark');\n localStorage.setItem('theme', 'dark');\n setIsDark(true);\n }\n };\n\n return (\n <button\n onClick={toggleDarkMode}\n className={cn(\n \"relative inline-flex h-10 w-20 items-center justify-center rounded-full\",\n \"bg-muted dark:bg-muted\",\n \"transition-all\",\n \"hover:bg-muted/80 dark:hover:bg-muted/80\",\n \"focus:outline-none focus:ring-2 focus:ring-primary\",\n className\n )}\n data-component-name=\"DarkModeToggle\"\n data-state={isDark ? 'dark' : 'light'}\n aria-label=\"Toggle dark mode\"\n >\n <span\n className={cn(\n \"absolute left-1 inline-flex h-8 w-8 items-center justify-center rounded-full\",\n \"bg-background dark:bg-background\",\n \"shadow transition-transform\",\n isDark && \"translate-x-10\"\n )}\n data-component-name=\"DarkModeToggleThumb\"\n >\n {isDark ? (\n <Moon className=\"h-4 w-4 text-category-4\" data-component-name=\"DarkModeToggleIcon\" />\n ) : (\n <Sun className=\"h-4 w-4 text-category-3\" data-component-name=\"DarkModeToggleIcon\" />\n )}\n </span>\n </button>\n );\n};","import { useState, useEffect, useCallback } from 'react';\nimport { Card } from '../ui/card';\nimport { Button } from '../ui/button';\nimport { Badge } from '../ui/Badge';\nimport { cn } from '../utils/utils';\nimport { \n Palette, \n Sun, \n Moon, \n Waves, \n Zap, \n TreePine, \n Sparkles, \n Sunset, \n Square,\n Building2\n} from 'lucide-react';\n\ninterface ColorPalette {\n id: string;\n name: string;\n description: string;\n className: string;\n icon: React.ReactNode;\n category: 'vibrant' | 'natural' | 'professional' | 'mystical';\n preview: {\n primary: string;\n secondary: string;\n accent: string;\n background: string;\n };\n}\n\nconst colorPalettes: ColorPalette[] = [\n {\n id: 'default',\n name: 'Default',\n description: 'Clean, professional design system',\n className: '',\n icon: <Square className=\"w-4 h-4\" />,\n category: 'professional',\n preview: {\n primary: 'hsl(222.2 47.4% 11.2%)',\n secondary: 'hsl(210 40% 96%)',\n accent: 'hsl(210 40% 96%)',\n background: 'hsl(0 0% 100%)'\n }\n },\n {\n id: 'ocean-depth',\n name: 'Ocean Depth',\n description: 'Deep blues with vibrant cyan and coral accents',\n className: 'palette-ocean-depth',\n icon: <Waves className=\"w-4 h-4\" />,\n category: 'vibrant',\n preview: {\n primary: 'hsl(195 100% 65%)',\n secondary: 'hsl(220 20% 25%)',\n accent: 'hsl(280 100% 70%)',\n background: 'hsl(220 26% 14%)'\n }\n },\n {\n id: 'neon-cyber',\n name: 'Neon Cyber',\n description: 'Vibrant cyberpunk aesthetics with electric colors',\n className: 'palette-neon-cyber',\n icon: <Zap className=\"w-4 h-4\" />,\n category: 'vibrant',\n preview: {\n primary: 'hsl(320 100% 70%)',\n secondary: 'hsl(260 20% 18%)',\n accent: 'hsl(180 100% 70%)',\n background: 'hsl(260 15% 8%)'\n }\n },\n {\n id: 'earth-tones',\n name: 'Earth Tones',\n description: 'Warm, organic colors inspired by nature',\n className: 'palette-earth-tones',\n icon: <TreePine className=\"w-4 h-4\" />,\n category: 'natural',\n preview: {\n primary: 'hsl(25 70% 45%)',\n secondary: 'hsl(35 20% 88%)',\n accent: 'hsl(200 60% 55%)',\n background: 'hsl(35 25% 96%)'\n }\n },\n {\n id: 'aurora',\n name: 'Aurora Borealis',\n description: 'Mystical greens and blues like the northern lights',\n className: 'palette-aurora',\n icon: <Sparkles className=\"w-4 h-4\" />,\n category: 'mystical',\n preview: {\n primary: 'hsl(160 80% 65%)',\n secondary: 'hsl(220 20% 20%)',\n accent: 'hsl(280 90% 75%)',\n background: 'hsl(220 30% 8%)'\n }\n },\n {\n id: 'sunset',\n name: 'Sunset Gradient',\n description: 'Warm oranges, pinks, and purples',\n className: 'palette-sunset',\n icon: <Sunset className=\"w-4 h-4\" />,\n category: 'natural',\n preview: {\n primary: 'hsl(25 85% 60%)',\n secondary: 'hsl(15 25% 88%)',\n accent: 'hsl(320 85% 65%)',\n background: 'hsl(15 30% 95%)'\n }\n },\n {\n id: 'monochrome',\n name: 'Monochrome Elite',\n description: 'Sophisticated grayscale with blue accents',\n className: 'palette-monochrome',\n icon: <Square className=\"w-4 h-4\" />,\n category: 'professional',\n preview: {\n primary: 'hsl(240 100% 50%)',\n secondary: 'hsl(0 0% 90%)',\n accent: 'hsl(240 100% 50%)',\n background: 'hsl(0 0% 98%)'\n }\n },\n {\n id: 'corporate-elite',\n name: 'Corporate Elite',\n description: 'Executive boardroom sophistication with navy and gold',\n className: 'palette-corporate-elite',\n icon: <Building2 className=\"w-4 h-4\" />,\n category: 'professional',\n preview: {\n primary: 'hsl(224 65% 25%)',\n secondary: 'hsl(220 10% 88%)',\n accent: 'hsl(45 85% 55%)',\n background: 'hsl(220 15% 97%)'\n }\n }\n];\n\nconst categoryColors = {\n vibrant: 'bg-category-1',\n natural: 'bg-category-6', \n professional: 'bg-category-4',\n mystical: 'bg-category-5'\n};\n\ninterface PaletteSwitcherProps {\n className?: string;\n onPaletteChange?: (paletteId: string) => void;\n}\n\nexport const PaletteSwitcher = ({ \n className,\n onPaletteChange \n}: PaletteSwitcherProps) => {\n const [activePalette, setActivePalette] = useState('default');\n const [isDarkMode, setIsDarkMode] = useState(false);\n\n // Define applyPalette function with useCallback to prevent recreation on each render\n const applyPalette = useCallback((paletteId: string) => {\n const palette = colorPalettes.find(p => p.id === paletteId);\n if (!palette) return;\n\n // Remove all existing palette classes\n colorPalettes.forEach(p => {\n if (p.className) {\n document.documentElement.classList.remove(p.className);\n }\n });\n\n // Apply new palette class\n if (palette.className) {\n document.documentElement.classList.add(palette.className);\n }\n\n // Save to localStorage\n localStorage.setItem('selected-palette', paletteId);\n \n // Notify parent component\n onPaletteChange?.(paletteId);\n }, [onPaletteChange]);\n\n // Load saved palette from localStorage\n useEffect(() => {\n const saved = localStorage.getItem('selected-palette');\n const savedDark = localStorage.getItem('dark-mode') === 'true';\n \n if (saved && colorPalettes.find(p => p.id === saved)) {\n setActivePalette(saved);\n applyPalette(saved);\n }\n \n setIsDarkMode(savedDark);\n if (savedDark) {\n document.documentElement.classList.add('dark');\n }\n }, [applyPalette]);\n\n const handlePaletteChange = (paletteId: string) => {\n setActivePalette(paletteId);\n applyPalette(paletteId);\n };\n\n const toggleDarkMode = () => {\n const newDarkMode = !isDarkMode;\n setIsDarkMode(newDarkMode);\n \n if (newDarkMode) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n \n localStorage.setItem('dark-mode', newDarkMode.toString());\n };\n\n const groupedPalettes = colorPalettes.reduce((groups, palette) => {\n const category = palette.category;\n if (!groups[category]) {\n groups[category] = [];\n }\n groups[category].push(palette);\n return groups;\n }, {} as Record<string, ColorPalette[]>);\n\n return (\n <div className={cn(\"space-y-6\", className)} data-component-name=\"PaletteSwitcher\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Palette className=\"w-5 h-5 text-primary\" data-component-name=\"PaletteSwitcherIcon\" />\n <h3 className=\"text-lg font-semibold\">Color Palettes</h3>\n </div>\n \n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={toggleDarkMode}\n className=\"flex items-center gap-2\"\n >\n {isDarkMode ? <Sun className=\"w-4 h-4\" /> : <Moon className=\"w-4 h-4\" />}\n {isDarkMode ? 'Light' : 'Dark'}\n </Button>\n </div>\n\n {/* Active Palette Info */}\n <Card className=\"p-4\" data-component-name=\"CategoryColorPreview\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 rounded bg-primary/10 text-primary\">\n {colorPalettes.find(p => p.id === activePalette)?.icon}\n </div>\n <div className=\"flex-1\">\n <h4 className=\"font-medium\">\n {colorPalettes.find(p => p.id === activePalette)?.name}\n </h4>\n <p className=\"text-sm text-muted-foreground\">\n {colorPalettes.find(p => p.id === activePalette)?.description}\n </p>\n </div>\n <Badge \n variant=\"secondary\"\n className={cn(\n \"text-xs\",\n categoryColors[colorPalettes.find(p => p.id === activePalette)?.category || 'professional']\n )}\n >\n {colorPalettes.find(p => p.id === activePalette)?.category}\n </Badge>\n </div>\n </Card>\n\n {/* Palette Grid by Category */}\n <div className=\"space-y-6\">\n {Object.entries(groupedPalettes).map(([category, palettes]) => (\n <div key={category}>\n <h4 className=\"text-sm font-medium text-muted-foreground uppercase tracking-wide mb-3\">\n {category}\n </h4>\n \n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n {palettes.map((palette) => (\n <Card\n key={palette.id}\n className={cn(\n \"p-4 cursor-pointer transition-all hover:shadow\",\n activePalette === palette.id && \"ring-2 ring-primary bg-primary/5\"\n )}\n onClick={() => handlePaletteChange(palette.id)}\n data-component-name=\"PaletteCard\"\n data-active={activePalette === palette.id}\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 rounded bg-muted text-muted-foreground\">\n {palette.icon}\n </div>\n \n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">{palette.name}</div>\n <div className=\"text-sm text-muted-foreground truncate\">\n {palette.description}\n </div>\n </div>\n \n {/* Color Preview */}\n <div className=\"flex gap-1\">\n <div \n className=\"w-3 h-3 rounded-full border border-border\"\n style={{ backgroundColor: palette.preview.primary }}\n data-component-name=\"PaletteColorPreview\"\n />\n <div \n className=\"w-3 h-3 rounded-full border border-border\"\n style={{ backgroundColor: palette.preview.accent }}\n data-component-name=\"PaletteColorPreview\"\n />\n <div \n className=\"w-3 h-3 rounded-full border border-border\"\n style={{ backgroundColor: palette.preview.secondary }}\n data-component-name=\"PaletteColorPreview\"\n />\n </div>\n </div>\n </Card>\n ))}\n </div>\n </div>\n ))}\n </div>\n\n {/* Category Color Preview */}\n <Card className=\"p-4\" data-component-name=\"CategoryColorPreview\">\n <h4 className=\"text-sm font-medium mb-3\">Category Colors Preview</h4>\n <div className=\"grid grid-cols-4 md:grid-cols-8 gap-2\">\n {[1, 2, 3, 4, 5, 6, 7, 8].map(num => (\n <div key={num} className=\"text-center\">\n <div \n className={cn(\n \"w-8 h-8 rounded mx-auto mb-1 border border-border\",\n `bg-category-${num}`\n )}\n data-component-name=\"ColorSwatch\"\n data-category={num}\n />\n <div className=\"text-xs text-muted-foreground\">{num}</div>\n </div>\n ))}\n </div>\n </Card>\n\n {/* Status Colors Preview */}\n <Card className=\"p-4\" data-component-name=\"StatusColorPreview\">\n <h4 className=\"text-sm font-medium mb-3\">Status Colors Preview</h4>\n <div className=\"grid grid-cols-5 gap-2\">\n {[\n { name: 'Success', class: 'bg-status-success' },\n { name: 'Warning', class: 'bg-status-warning' },\n { name: 'Error', class: 'bg-status-error' },\n { name: 'Info', class: 'bg-status-info' },\n { name: 'Neutral', class: 'bg-status-neutral' }\n ].map(status => (\n <div key={status.name} className=\"text-center\">\n <div \n className={cn(\n \"w-8 h-8 rounded mx-auto mb-1 border border-border\",\n status.class\n )}\n data-component-name=\"StatusSwatch\"\n data-status={status.name.toLowerCase()}\n />\n <div className=\"text-xs text-muted-foreground\">{status.name}</div>\n </div>\n ))}\n </div>\n </Card>\n </div>\n );\n};\n","import React from 'react';\nimport { Card } from '../ui/card';\nimport { DataTable, type Column } from './DataTable/DataTable';\nimport { StatCard } from './StatCard/StatCard';\nimport { DataBadge } from './DataBadge/DataBadge';\nimport { EmptyState } from './EmptyState/EmptyState';\nimport { cn } from '../utils/utils';\nimport { Users, DollarSign, ShoppingCart, TrendingUp } from 'lucide-react';\n\nexport const StyleGuide: React.FC = () => {\n return (\n <div className=\"p-8 space-y-8 max-w-6xl mx-auto\">\n <div>\n <h1 className=\"text-3xl font-bold mb-2\">Data Interface Style Guide</h1>\n <p className=\"text-muted-foreground\">Comprehensive design system for data applications</p>\n </div>\n\n {/* Color System */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Color System</h2>\n <p className=\"text-muted-foreground mb-8\">\n Our comprehensive color palette designed for data visualization and interface design.\n </p>\n \n {/* Category Colors */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Data Categories (8 colors)</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Distinct, accessible colors for data categorization and visualization.\n </p>\n <div className=\"grid grid-cols-4 gap-4\">\n {[\n { num: 1, color: 'hsl(220 70% 50%)', name: 'Blue' },\n { num: 2, color: 'hsl(160 60% 45%)', name: 'Teal' },\n { num: 3, color: 'hsl(30 80% 55%)', name: 'Orange' },\n { num: 4, color: 'hsl(280 65% 60%)', name: 'Purple' },\n { num: 5, color: 'hsl(340 75% 55%)', name: 'Pink' },\n { num: 6, color: 'hsl(120 50% 45%)', name: 'Green' },\n { num: 7, color: 'hsl(45 85% 60%)', name: 'Yellow' },\n { num: 8, color: 'hsl(15 75% 50%)', name: 'Red' },\n ].map(({ num, color }) => (\n <div key={num} className=\"space-y-2\">\n <div \n className=\"h-16 rounded flex items-center justify-center text-white font-semibold\"\n style={{ backgroundColor: color }}\n >\n Category {num}\n </div>\n <div \n className=\"px-3 py-1 rounded text-sm\"\n style={{ \n backgroundColor: color.replace(')', ' / 0.1)'),\n color: color,\n border: `1px solid ${color.replace(')', ' / 0.2)')}`\n }}\n >\n Badge {num}\n </div>\n <div className=\"text-xs text-center font-mono\">bg-category-{num}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Status Colors */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Status Colors</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Semantic colors for communicating state and feedback.\n </p>\n <div className=\"grid grid-cols-5 gap-4\">\n {[\n { status: 'success', color: 'hsl(142 76% 36%)' },\n { status: 'warning', color: 'hsl(45 93% 47%)' },\n { status: 'error', color: 'hsl(0 84% 60%)' },\n { status: 'info', color: 'hsl(217 91% 60%)' },\n { status: 'neutral', color: 'hsl(215 16% 47%)' },\n ].map(({ status, color }) => (\n <div key={status} className=\"space-y-2\">\n <div \n className=\"h-16 rounded flex items-center justify-center text-white font-semibold capitalize\"\n style={{ backgroundColor: color }}\n >\n {status}\n </div>\n <div \n className=\"px-3 py-1 rounded-pill text-sm capitalize\"\n style={{ \n backgroundColor: color.replace(')', ' / 0.1)'),\n color: color,\n border: `1px solid ${color.replace(')', ' / 0.2)')}`\n }}\n >\n {status}\n </div>\n <div className=\"text-xs text-center font-mono\">bg-status-{status}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Standard Gray Scale */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Standard Gray Scale</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Tailwind-compatible gray scale (50-950) for consistent neutral colors.\n </p>\n <div className=\"grid grid-cols-6 gap-2\">\n {[\n { shade: 50, color: 'hsl(210 20% 98%)' },\n { shade: 100, color: 'hsl(214 15% 91%)' },\n { shade: 200, color: 'hsl(213 27% 84%)' },\n { shade: 300, color: 'hsl(215 25% 77%)' },\n { shade: 400, color: 'hsl(215 20% 65%)' },\n { shade: 500, color: 'hsl(215 16% 47%)' },\n { shade: 600, color: 'hsl(215 19% 35%)' },\n { shade: 700, color: 'hsl(215 25% 27%)' },\n { shade: 800, color: 'hsl(217 33% 17%)' },\n { shade: 900, color: 'hsl(222 47% 11%)' },\n { shade: 950, color: 'hsl(224 71% 4%)' },\n ].map(({ shade, color }) => (\n <div key={shade} className=\"space-y-1\">\n <div \n className=\"h-12 rounded border flex items-center justify-center text-xs font-mono\"\n style={{ \n backgroundColor: color, \n color: shade >= 500 ? 'white' : 'black',\n borderColor: 'hsl(214.3 31.8% 91.4%)'\n }}\n >\n {shade}\n </div>\n <div className=\"text-xs text-center font-mono\">gray-{shade}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Additional Semantic Colors */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Additional Semantic Colors</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Extended semantic palette for specific use cases and contexts.\n </p>\n <div className=\"grid grid-cols-5 gap-4\">\n {[\n { name: 'danger', color: 'hsl(0 84% 60%)' },\n { name: 'positive', color: 'hsl(142 76% 36%)' },\n { name: 'negative', color: 'hsl(0 84% 60%)' },\n { name: 'pending', color: 'hsl(45 93% 47%)' },\n { name: 'disabled', color: 'hsl(215 16% 47%)' },\n ].map(({ name, color }) => (\n <div key={name} className=\"space-y-2\">\n <div \n className=\"h-16 rounded flex items-center justify-center text-white font-semibold capitalize\"\n style={{ backgroundColor: color }}\n >\n {name}\n </div>\n <div className=\"text-xs text-center font-mono\">bg-{name}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Interactive State Colors */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Interactive State Colors</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Hover, active, and disabled states for interactive elements.\n </p>\n <div className=\"grid grid-cols-3 gap-4\">\n {[\n { name: 'Primary States', states: [\n { label: 'Default', color: 'hsl(222.2 47.4% 11.2%)', textColor: 'hsl(210 40% 98%)' },\n { label: 'Hover', color: 'hsl(222.2 47.4% 15%)', textColor: 'white' },\n { label: 'Active', color: 'hsl(222.2 47.4% 8%)', textColor: 'white' },\n ]},\n { name: 'Secondary States', states: [\n { label: 'Default', color: 'hsl(210 40% 96%)', textColor: 'hsl(222.2 84% 4.9%)' },\n { label: 'Hover', color: 'hsl(210 40% 92%)', textColor: 'hsl(222.2 84% 4.9%)' },\n { label: 'Active', color: 'hsl(210 40% 88%)', textColor: 'hsl(222.2 84% 4.9%)' },\n ]},\n { name: 'Destructive States', states: [\n { label: 'Default', color: 'hsl(0 84.2% 60.2%)', textColor: 'hsl(210 40% 98%)' },\n { label: 'Hover', color: 'hsl(0 84.2% 65%)', textColor: 'white' },\n { label: 'Active', color: 'hsl(0 84.2% 55%)', textColor: 'white' },\n ]},\n ].map(({ name, states }) => (\n <div key={name} className=\"space-y-3\">\n <h4 className=\"text-sm font-medium\">{name}</h4>\n <div className=\"space-y-2\">\n {states.map(({ label, color, textColor }) => (\n <div key={label} className=\"space-y-1\">\n <div \n className=\"h-12 rounded flex items-center justify-center text-sm font-medium\"\n style={{ backgroundColor: color, color: textColor }}\n >\n {label}\n </div>\n <div className=\"text-xs text-center font-mono\">bg-{name.toLowerCase().split(' ')[0]}-{label.toLowerCase()}</div>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Extended Gray Scale */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Extended Gray Scale (Custom)</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Custom gray values (25-925) for fine-grained neutral color control.\n </p>\n <div className=\"grid grid-cols-6 gap-2\">\n {[\n { shade: 25, color: 'hsl(210 20% 98%)' },\n { shade: 75, color: 'hsl(214 15% 91%)' },\n { shade: 150, color: 'hsl(213 27% 84%)' },\n { shade: 250, color: 'hsl(215 25% 77%)' },\n { shade: 350, color: 'hsl(215 20% 65%)' },\n { shade: 450, color: 'hsl(215 16% 47%)' },\n { shade: 550, color: 'hsl(215 19% 35%)' },\n { shade: 650, color: 'hsl(215 25% 27%)' },\n { shade: 750, color: 'hsl(217 33% 17%)' },\n { shade: 850, color: 'hsl(222 47% 11%)' },\n { shade: 925, color: 'hsl(224 71% 4%)' },\n ].map(({ shade, color }) => (\n <div key={shade} className=\"space-y-1\">\n <div \n className=\"h-12 rounded border flex items-center justify-center text-xs font-mono\"\n style={{ \n backgroundColor: color, \n color: shade >= 450 ? 'white' : 'black',\n borderColor: 'hsl(214.3 31.8% 91.4%)'\n }}\n >\n {shade}\n </div>\n <div className=\"text-xs text-center font-mono\">gray-{shade}</div>\n </div>\n ))}\n </div>\n </div>\n </section>\n\n {/* Radius System */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Border Radius System</h2>\n <div className=\"space-y-6\">\n {/* Regular Border Radius */}\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Standard Border Radius</h3>\n <div className=\"grid grid-cols-4 gap-4\">\n {[\n { name: 'xs', class: 'rounded-xs', description: '2px' },\n { name: 'sm', class: 'rounded-sm', description: '4px' },\n { name: 'default', class: 'rounded', description: '8px' },\n { name: 'md', class: 'rounded-md', description: '10px' },\n { name: 'lg', class: 'rounded-lg', description: '12px' },\n { name: 'xl', class: 'rounded-xl', description: '16px' },\n { name: '2xl', class: 'rounded-2xl', description: '20px' },\n { name: '3xl', class: 'rounded-3xl', description: '24px' },\n ].map((radius) => (\n <div key={radius.name} className=\"text-center\">\n <div \n className={cn(\"h-16 w-full mb-2 flex items-center justify-center text-white font-medium\", radius.class)}\n style={{ backgroundColor: 'hsl(220 70% 50%)' }}\n >\n {radius.name}\n </div>\n <div className=\"text-sm font-mono\">{radius.class}</div>\n <div className=\"text-xs text-muted-foreground\">{radius.description}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Pill Shapes */}\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Pill Shapes (Fully Rounded)</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-4\">\n <div \n className=\"px-6 py-3 rounded-pill text-white font-medium\"\n style={{ backgroundColor: 'hsl(220 70% 50%)' }}\n >\n Button Pill\n </div>\n <div className=\"text-sm font-mono\">rounded-pill</div>\n <div className=\"text-sm text-muted-foreground\">Perfect for buttons and badges</div>\n </div>\n <div className=\"flex items-center gap-4\">\n <div \n className=\"px-4 py-2 rounded-pill text-sm\"\n style={{ \n backgroundColor: 'hsl(220 70% 50% / 0.1)',\n color: 'hsl(220 70% 50%)',\n border: '1px solid hsl(220 70% 50% / 0.2)'\n }}\n >\n Badge Pill\n </div>\n <div className=\"text-sm font-mono\">rounded-pill</div>\n <div className=\"text-sm text-muted-foreground\">Great for status indicators</div>\n </div>\n <div className=\"flex items-center gap-4\">\n <div \n className=\"w-8 h-8 rounded-pill flex items-center justify-center text-white font-medium\"\n style={{ backgroundColor: 'hsl(220 70% 50%)' }}\n >\n A\n </div>\n <div className=\"text-sm font-mono\">rounded-pill</div>\n <div className=\"text-sm text-muted-foreground\">Avatar or icon containers</div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* Spacing System */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Spacing System</h2>\n <div className=\"space-y-4\">\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Card Layouts</h3>\n <div className=\"space-y-4\">\n \n {/* Standard Card */}\n <Card className=\"card-container\">\n <h4 className=\"text-data-label\">Standard Card</h4>\n <p className=\"text-data-value\">Uses var(--card-padding) for consistent spacing</p>\n <p className=\"text-data-meta\">Perfect for primary content containers</p>\n </Card>\n\n {/* Nested Card */}\n <Card className=\"card-container\">\n <h4 className=\"text-data-label\">Parent Card</h4>\n <p className=\"text-data-value mb-4\">Contains nested elements with proper spacing</p>\n \n <div className=\"card-nested\">\n <h5 className=\"text-data-label\">Nested Card</h5>\n <p className=\"text-data-value\">Automatically offset by var(--nested-offset)</p>\n <p className=\"text-data-meta\">Edges align perfectly with parent</p>\n </div>\n </Card>\n\n {/* Flush Cards */}\n <Card className=\"card-container\">\n <h4 className=\"text-data-label mb-4\">List with Flush Cards</h4>\n {['Item 1', 'Item 2', 'Item 3'].map((item, i) => (\n <div key={i} className=\"card-flush border\">\n <div className=\"text-data-value\">{item}</div>\n <div className=\"text-data-meta\">Flush cards for seamless lists</div>\n </div>\n ))}\n </Card>\n </div>\n </div>\n\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Edge Alignment</h3>\n <Card className=\"card-container\">\n <h4 className=\"text-data-label\">Edge Alignment Demo</h4>\n <div className=\"edge-align-both bg-muted p-4 rounded text-center\">\n <div className=\"text-data-value\">Edge Aligned Content</div>\n <div className=\"text-data-meta\">Extends to card edges using edge-align-both</div>\n </div>\n </Card>\n </div>\n </div>\n </section>\n\n {/* Typography */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Typography System</h2>\n <p className=\"text-muted-foreground mb-8\">\n Specialized typography classes designed for data interfaces and information hierarchy.\n </p>\n \n <div className=\"space-y-6\">\n {/* Data Typography Hierarchy */}\n <Card className=\"card-container\">\n <h3 className=\"text-lg font-medium mb-4\">Data Typography Hierarchy</h3>\n <div className=\"space-y-4\">\n <div>\n <div className=\"text-data-label\">Label Text</div>\n <div className=\"text-data-value\">Primary Value</div>\n <div className=\"text-data-meta\">Supporting metadata information</div>\n </div>\n <div className=\"text-sm text-muted-foreground\">\n Perfect for displaying data relationships with clear visual hierarchy.\n </div>\n </div>\n </Card>\n\n {/* Typography Scale */}\n <Card className=\"card-container\">\n <h3 className=\"text-lg font-medium mb-4\">Data Typography Scale</h3>\n \n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <div className=\"text-data-xs mb-1\">Data XS</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-xs</div>\n <div className=\"text-xs text-muted-foreground mt-1\">12px • For fine details</div>\n </div>\n <div>\n <div className=\"text-data-sm mb-1\">Data SM</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-sm</div>\n <div className=\"text-xs text-muted-foreground mt-1\">14px • Metadata</div>\n </div>\n <div>\n <div className=\"text-data-base mb-1\">Data Base</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-base</div>\n <div className=\"text-xs text-muted-foreground mt-1\">16px • Body text</div>\n </div>\n <div>\n <div className=\"text-data-lg mb-1\">Data LG</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-lg</div>\n <div className=\"text-xs text-muted-foreground mt-1\">18px • Emphasis</div>\n </div>\n <div>\n <div className=\"text-data-xl mb-1\">Data XL</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-xl</div>\n <div className=\"text-xs text-muted-foreground mt-1\">20px • Headings</div>\n </div>\n </div>\n </Card>\n </div>\n </section>\n\n {/* Stat Cards */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Stat Cards</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n <StatCard\n title=\"Total Users\"\n value=\"1,234\"\n subtitle=\"Active accounts\"\n trend={{ value: 12.5, label: \"vs last month\" }}\n category={1}\n icon={<Users className=\"w-5 h-5\" />}\n onClick={() => console.log('Navigate to users')}\n />\n <StatCard\n title=\"Revenue\"\n value=\"$45,231\"\n subtitle=\"Monthly recurring\"\n trend={{ value: -3.2, label: \"vs last month\" }}\n category={2}\n icon={<DollarSign className=\"w-5 h-5\" />}\n />\n <StatCard\n title=\"Orders\"\n value=\"89\"\n subtitle=\"This week\"\n trend={{ value: 0, label: \"vs last week\" }}\n category={3}\n icon={<ShoppingCart className=\"w-5 h-5\" />}\n />\n <StatCard\n title=\"Growth Rate\"\n value=\"23.1%\"\n subtitle=\"Year over year\"\n trend={{ value: 8.7, label: \"vs last year\" }}\n category={4}\n icon={<TrendingUp className=\"w-5 h-5\" />}\n />\n </div>\n </section>\n\n {/* Data Badges */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Data Badges</h2>\n <Card className=\"card-container space-y-6\">\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Category Badges</h3>\n <div className=\"flex flex-wrap gap-2\">\n <DataBadge variant=\"category\" category={1}>User</DataBadge>\n <DataBadge variant=\"category\" category={2}>Admin</DataBadge>\n <DataBadge variant=\"category\" category={3}>Manager</DataBadge>\n <DataBadge variant=\"category\" category={4}>Guest</DataBadge>\n <DataBadge variant=\"category\" category={5}>VIP</DataBadge>\n </div>\n </div>\n \n <div>\n <h3 className=\"text-lg font-medium mb-3\">Status Badges</h3>\n <div className=\"flex flex-wrap gap-2\">\n <DataBadge variant=\"status\" status=\"success\">Active</DataBadge>\n <DataBadge variant=\"status\" status=\"warning\">Pending</DataBadge>\n <DataBadge variant=\"status\" status=\"error\">Inactive</DataBadge>\n <DataBadge variant=\"status\" status=\"info\">Processing</DataBadge>\n <DataBadge variant=\"status\" status=\"neutral\">Unknown</DataBadge>\n </div>\n </div>\n\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Interactive Badges</h3>\n <div className=\"flex flex-wrap gap-2\">\n <DataBadge variant=\"category\" category={1} interactive onClick={() => alert('Category clicked!')}>\n Clickable\n </DataBadge>\n <DataBadge variant=\"status\" status=\"success\" size=\"lg\" interactive>\n Large Badge\n </DataBadge>\n <DataBadge variant=\"category\" category={3} size=\"sm\">\n Small Badge\n </DataBadge>\n </div>\n </div>\n </Card>\n </section>\n\n {/* Empty States */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Empty States</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <Card className=\"card-container\">\n <EmptyState\n variant=\"no-data\"\n title=\"No users found\"\n description=\"Get started by inviting your first team member to the workspace.\"\n action={{\n label: \"Invite User\",\n onClick: () => console.log('Invite user')\n }}\n secondaryAction={{\n label: \"Learn More\",\n onClick: () => console.log('Learn more')\n }}\n />\n </Card>\n \n <Card className=\"card-container\">\n <EmptyState\n variant=\"no-results\"\n title=\"No search results\"\n description=\"Try adjusting your search terms or clearing the current filters.\"\n action={{\n label: \"Clear Filters\",\n onClick: () => console.log('Clear filters')\n }}\n />\n </Card>\n </div>\n </section>\n\n {/* Data Table Component */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Data Table Component</h2>\n <Card className=\"card-container\">\n <DataTableExample />\n </Card>\n </section>\n\n {/* Usage Examples */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Real-World Examples</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n \n {/* Data Table Card */}\n <Card className=\"card-container\">\n <div className=\"text-data-label\">User Analytics</div>\n <div className=\"space-y-3 mt-4\">\n {[\n { label: 'Active Users', value: '1,234', status: 'success', category: 1, categoryClass: 'bg-category-1', statusClass: 'status-success' },\n { label: 'New Signups', value: '89', status: 'info', category: 2, categoryClass: 'bg-category-2', statusClass: 'status-info' },\n { label: 'Churn Rate', value: '2.3%', status: 'warning', category: 3, categoryClass: 'bg-category-3', statusClass: 'status-warning' },\n ].map((item, i) => (\n <div key={i} className=\"flex items-center justify-between p-3 bg-muted/30 rounded\">\n <div className=\"flex items-center gap-3\">\n <div className={cn(\"w-3 h-3 rounded-full\", item.categoryClass)}></div>\n <div className=\"text-data-value\">{item.label}</div>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"text-data-value\">{item.value}</div>\n <div className={cn(\"px-2 py-1 rounded-pill text-xs\", item.statusClass)}>\n {item.status}\n </div>\n </div>\n </div>\n ))}\n </div>\n </Card>\n\n {/* Status Dashboard */}\n <Card className=\"card-container\">\n <div className=\"text-data-label\">System Status</div>\n <div className=\"grid grid-cols-2 gap-card-gap mt-4\">\n {[\n { service: 'API', status: 'success', uptime: '99.9%', statusClass: 'status-success' },\n { service: 'Database', status: 'success', uptime: '99.8%', statusClass: 'status-success' },\n { service: 'Cache', status: 'warning', uptime: '98.2%', statusClass: 'status-warning' },\n { service: 'CDN', status: 'error', uptime: '97.1%', statusClass: 'status-error' },\n ].map((item, i) => (\n <div key={i} className=\"card-nested\">\n <div className=\"text-data-label\">{item.service}</div>\n <div className=\"text-data-value\">{item.uptime}</div>\n <div className={cn(\"px-2 py-1 rounded-pill text-xs mt-2 inline-block\", item.statusClass)}>\n {item.status}\n </div>\n </div>\n ))}\n </div>\n </Card>\n </div>\n </section>\n </div>\n );\n};\n\n// DataTable Example Component\nconst DataTableExample = () => {\n // Sample data\n const sampleData = [\n { id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin', status: 'active', category: 1 },\n { id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'User', status: 'active', category: 2 },\n { id: 3, name: 'Bob Johnson', email: 'bob@example.com', role: 'Manager', status: 'inactive', category: 3 },\n { id: 4, name: 'Alice Brown', email: 'alice@example.com', role: 'User', status: 'pending', category: 4 },\n { id: 5, name: 'Charlie Wilson', email: 'charlie@example.com', role: 'Admin', status: 'active', category: 1 },\n { id: 6, name: 'Diana Evans', email: 'diana@example.com', role: 'Manager', status: 'active', category: 2 },\n { id: 7, name: 'Frank Miller', email: 'frank@example.com', role: 'User', status: 'inactive', category: 3 },\n { id: 8, name: 'Grace Lee', email: 'grace@example.com', role: 'Admin', status: 'active', category: 4 },\n { id: 9, name: 'Henry Taylor', email: 'henry@example.com', role: 'User', status: 'pending', category: 1 },\n { id: 10, name: 'Iris Clark', email: 'iris@example.com', role: 'Manager', status: 'active', category: 2 },\n { id: 11, name: 'Jack Davis', email: 'jack@example.com', role: 'User', status: 'active', category: 3 },\n { id: 12, name: 'Kate Moore', email: 'kate@example.com', role: 'Admin', status: 'inactive', category: 4 },\n ];\n\n // Column definitions\n const columns: Column<typeof sampleData[0]>[] = [\n {\n key: 'name',\n header: 'Name',\n sortable: true,\n filterable: true,\n },\n {\n key: 'email',\n header: 'Email',\n sortable: true,\n filterable: true,\n },\n {\n key: 'role',\n header: 'Role',\n sortable: true,\n filterable: true,\n cell: (item) => (\n <DataBadge variant=\"category\" category={item.category as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8}>\n {item.role}\n </DataBadge>\n ),\n },\n {\n key: 'status',\n header: 'Status',\n sortable: true,\n filterable: true,\n cell: (item) => {\n const statusType = {\n active: 'success',\n inactive: 'neutral',\n pending: 'warning',\n }[item.status] || 'neutral';\n \n return (\n <DataBadge variant=\"status\" status={statusType as 'success' | 'warning' | 'error' | 'info' | 'neutral'}>\n {item.status}\n </DataBadge>\n );\n },\n },\n ];\n\n return (\n <div className=\"space-y-4\">\n <div>\n <h3 className=\"text-lg font-medium mb-2\">Advanced Data Table</h3>\n <p className=\"text-data-meta mb-4\">\n Features: sorting, filtering, pagination, custom cell rendering\n </p>\n </div>\n \n <DataTable\n data={sampleData}\n columns={columns}\n pageSize={5}\n searchPlaceholder=\"Search users...\"\n onRowClick={(item) => console.log('Clicked:', item)}\n />\n \n <div className=\"mt-6 p-4 bg-muted/30 rounded\">\n <h4 className=\"text-data-label mb-2\">Usage Example</h4>\n <pre className=\"text-xs overflow-x-auto\">\n{`<DataTable\n data={users}\n columns={[\n { key: 'name', header: 'Name', sortable: true },\n { key: 'email', header: 'Email', sortable: true },\n { \n key: 'status', \n header: 'Status',\n cell: (item) => <StatusBadge status={item.status} />\n }\n ]}\n pageSize={10}\n onRowClick={(user) => navigate(\\`/users/\\${user.id}\\`)}\n/>`}\n </pre>\n </div>\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../atoms/utils/utils';\nimport { getAnimationClasses } from '../../atoms/utils/animations';\n\nexport interface PageTemplateProps {\n /** Main page title */\n title: string;\n /** Optional subtitle/description */\n subtitle?: string;\n /** Optional icon element to display with title */\n icon?: React.ReactNode;\n /** Optional action buttons/controls for the header */\n actions?: React.ReactNode;\n /** Page content */\n children: React.ReactNode;\n /** Additional CSS classes for the container */\n className?: string;\n /** Whether to apply animation to the page content */\n animated?: boolean;\n}\n\nexport const PageTemplate: React.FC<PageTemplateProps> = ({\n title,\n subtitle,\n icon,\n actions,\n children,\n className,\n animated = true\n}) => {\n return (\n <div \n className={cn(\n 'min-h-screen bg-background',\n animated && getAnimationClasses({ type: 'subtle', timing: 'slow' }),\n className\n )}\n data-component-name=\"PageTemplate\"\n >\n {/* Page Header */}\n <header className=\"border-b border-border bg-card/50 backdrop-blur-sm sticky top-0 z-10\">\n <div className=\"container mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex items-center justify-between py-6 sm:py-8\">\n <div className=\"flex items-center space-x-4 min-w-0 flex-1\">\n {icon && (\n <div className=\"flex-shrink-0 w-8 h-8 sm:w-10 sm:h-10 flex items-center justify-center rounded bg-primary/10 text-primary\">\n {icon}\n </div>\n )}\n \n <div className=\"min-w-0 flex-1\">\n <h1 className=\"text-2xl sm:text-3xl lg:text-4xl font-bold text-foreground tracking-tight\">\n {title}\n </h1>\n {subtitle && (\n <p className=\"mt-2 text-base sm:text-lg text-muted-foreground max-w-3xl\">\n {subtitle}\n </p>\n )}\n </div>\n </div>\n \n {actions && (\n <div className=\"flex-shrink-0 ml-4\">\n <div className=\"flex items-center space-x-3\">\n {actions}\n </div>\n </div>\n )}\n </div>\n </div>\n </header>\n\n {/* Page Content */}\n <main className=\"container mx-auto px-4 sm:px-6 lg:px-8 py-6 sm:py-8 lg:py-12\">\n <div \n className={cn(\n 'space-y-8',\n animated && 'animate-fade-in'\n )}\n >\n {children}\n </div>\n </main>\n </div>\n );\n};","import React from 'react';\nimport { DataBadge } from '../../atoms/composed/DataBadge';\nimport { cn } from '../../atoms/utils/utils';\n\ninterface ShowcaseSectionProps {\n /** Section title */\n title: string;\n /** Section description */\n description: string;\n /** Badge configuration */\n badge: {\n text: string;\n variant?: 'status' | 'category';\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n size?: 'sm' | 'md' | 'lg';\n };\n /** Section content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const ShowcaseSection: React.FC<ShowcaseSectionProps> = ({\n title,\n description,\n badge,\n children,\n className\n}) => {\n return (\n <div className={cn('space-y-6', className)} data-component-name=\"ShowcaseSection\">\n {/* Title with inline badge */}\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-medium flex items-center gap-2\">\n {title}\n <DataBadge \n variant={badge.variant || 'status'}\n status={badge.status || 'neutral'}\n category={badge.category}\n size={badge.size || 'sm'}\n >\n {badge.text}\n </DataBadge>\n </h3>\n <p className=\"text-sm text-muted-foreground\">\n {description}\n </p>\n </div>\n\n {/* Content */}\n <div>\n {children}\n </div>\n </div>\n );\n};","import React, { createContext, useContext, useState, type ReactNode } from 'react';\n\ninterface SidebarContextType {\n isExpanded: boolean;\n setIsExpanded: (expanded: boolean) => void;\n toggleSidebar: () => void;\n}\n\nconst SidebarContext = createContext<SidebarContextType | undefined>(undefined);\n\nexport const SidebarProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const toggleSidebar = () => {\n setIsExpanded(prev => !prev);\n };\n\n return (\n <SidebarContext.Provider value={{ isExpanded, setIsExpanded, toggleSidebar }}>\n {children}\n </SidebarContext.Provider>\n );\n};\n\nexport const useSidebar = () => {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider');\n }\n return context;\n};","import React, { createContext, useContext, type ReactNode } from 'react'\nimport type { NavigationConfig, NavigationItem } from '../../atoms/types'\n\ninterface NavigationContextType {\n navigation: NavigationConfig\n setNavigation: (config: NavigationConfig) => void\n}\n\nconst NavigationContext = createContext<NavigationContextType | undefined>(undefined)\n\ninterface NavigationProviderProps {\n children: ReactNode\n initialNavigation?: NavigationConfig\n}\n\n// Default showcase navigation for backwards compatibility\nconst defaultShowcaseNavigation: NavigationItem[] = [\n { value: 'showcase', label: 'Showcase', icon: 'Palette', path: '/showcase', category: 5 },\n { value: 'admin-dashboard', label: 'Admin Dashboard', icon: 'Shield', path: '/admin/dashboard', category: 2 },\n { value: 'admin-users', label: 'User Management', icon: 'Users', path: '/admin/users', category: 3 },\n { value: 'admin-sales', label: 'Sales Dashboard', icon: 'TrendingUp', path: '/admin/sales', category: 4 },\n { value: 'entity-performance', label: 'Performance Dashboard', icon: 'BarChart3', path: '/entity/performance', category: 6 },\n { value: 'entity-management', label: 'Entity Management', icon: 'Database', path: '/entity/management', category: 7 },\n { value: 'entity-template', label: 'Template Example', icon: 'Layout', path: '/entity/template-example', category: 1 }\n]\n\nexport const NavigationProvider = ({ children, initialNavigation }: NavigationProviderProps) => {\n const [navigation, setNavigation] = React.useState<NavigationConfig>(\n initialNavigation || {\n items: defaultShowcaseNavigation,\n showDefaultNavigation: true,\n defaultExpanded: true\n }\n )\n\n return (\n <NavigationContext.Provider value={{ navigation, setNavigation }}>\n {children}\n </NavigationContext.Provider>\n )\n}\n\nexport const useNavigation = () => {\n const context = useContext(NavigationContext)\n if (context === undefined) {\n throw new Error('useNavigation must be used within a NavigationProvider')\n }\n return context\n}\n\n// Helper to get navigation items with fallback\nexport const getNavigationItems = (config: NavigationConfig): NavigationItem[] => {\n if (config.items.length > 0) {\n return config.items\n }\n \n // Fallback to showcase navigation if no items provided\n if (config.showDefaultNavigation !== false) {\n return defaultShowcaseNavigation\n }\n \n return []\n}","import React from 'react';\nimport { cn } from '../../../atoms/utils/utils';\nimport { Button } from '../../../atoms/ui/button';\n\ninterface SidebarButtonProps {\n icon: React.ReactNode;\n label: string;\n active?: boolean;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n expanded?: boolean;\n onClick?: () => void;\n className?: string;\n badge?: string | number;\n disabled?: boolean;\n}\n\nexport const SidebarButton: React.FC<SidebarButtonProps> = ({\n icon,\n label,\n active = false,\n category = 1,\n expanded = false,\n onClick,\n className,\n badge,\n disabled = false\n}) => {\n return (\n <Button\n variant={active ? \"secondary\" : \"ghost\"}\n onClick={onClick}\n disabled={disabled}\n tooltip={!expanded ? label : undefined}\n className={cn(\n \"relative w-full justify-start gap-3 h-12\",\n \"transition-all duration-200 ease-in-out\",\n \n // Active state with category colors\n active && [\n `bg-category-${category}/15 hover:bg-category-${category}/25`,\n `border-category-${category}/30`,\n `text-category-${category}`,\n \"shadow-sm\"\n ],\n \n // Non-active hover effects\n !active && [\n \"hover:bg-muted/80\",\n `hover:text-category-${category}`,\n \"hover:shadow-sm\"\n ],\n \n // Collapsed state - ensure proper centering\n !expanded && \"justify-center px-2\",\n expanded && \"px-3\",\n \n className\n )}\n >\n {/* Icon Container - Always square */}\n <div className={cn(\n \"flex items-center justify-center w-6 h-6 flex-shrink-0\",\n \"transition-colors duration-200\",\n active ? `text-category-${category}` : \"text-muted-foreground group-hover:text-foreground\"\n )}>\n {React.isValidElement(icon) \n ? React.cloneElement(icon as React.ReactElement<{ className?: string }>, { className: \"w-5 h-5\" })\n : icon\n }\n </div>\n \n {/* Label - only show when expanded */}\n {expanded && (\n <>\n <span className={cn(\n \"text-sm font-medium flex-1 text-left\",\n active ? `text-category-${category}` : \"text-foreground\"\n )}>\n {label}\n </span>\n \n {/* Badge or Active indicator */}\n {badge ? (\n <span className={cn(\n \"px-2 py-0.5 text-xs font-medium rounded-full flex-shrink-0\",\n \"bg-primary/10 text-primary\"\n )}>\n {badge}\n </span>\n ) : active && (\n <div className={cn(\n \"w-2 h-2 rounded-full flex-shrink-0\",\n `bg-category-${category}`\n )} />\n )}\n </>\n )}\n \n {/* Collapsed indicators */}\n {!expanded && (badge || active) && (\n <div className=\"absolute -top-1 -right-1\">\n {badge ? (\n <span className={cn(\n \"px-1.5 py-0.5 text-xs font-bold rounded-full\",\n \"bg-primary text-primary-foreground\",\n \"ring-2 ring-background\"\n )}>\n {badge}\n </span>\n ) : active && (\n <div className={cn(\n \"w-2.5 h-2.5 rounded-full\",\n `bg-category-${category}`,\n \"ring-2 ring-background\"\n )} />\n )}\n </div>\n )}\n </Button>\n );\n};","import { useLocation, useNavigate, useSearchParams } from 'react-router-dom';\nimport { cn, Icon } from '../../atoms/utils/utils';\nimport { useSidebar } from './SidebarContext';\nimport { useNavigation, getNavigationItems } from './NavigationContext';\nimport { SidebarButton } from './SidebarButton';\nimport { Menu, X } from 'lucide-react';\nimport type { NavigationItem } from '../../atoms/types';\n\ninterface SidebarProps {\n className?: string;\n}\n\nexport const Sidebar = ({ className }: SidebarProps) => {\n const { isExpanded, toggleSidebar } = useSidebar();\n const { navigation } = useNavigation();\n const location = useLocation();\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n\n // Get navigation items from context\n const items: NavigationItem[] = getNavigationItems(navigation);\n\n const handleNavigation = (path: string) => {\n if (path.includes('?')) {\n // Handle query parameters by parsing the URL\n const [basePath, query] = path.split('?');\n const searchParams = new URLSearchParams(query);\n navigate({ pathname: basePath, search: searchParams.toString() });\n } else {\n navigate(path);\n }\n };\n\n return (\n <aside \n className={cn(\n \"fixed left-0 top-16 flex flex-col bg-background border-r border-border z-40\",\n \"transition-all duration-300 ease-in-out\",\n \"h-[calc(100vh-4rem)]\", // Full height minus header (4rem = 64px)\n !isExpanded ? \"w-16\" : \"w-64\",\n className\n )}\n data-component-name=\"Sidebar\"\n data-collapsed={!isExpanded}\n >\n {/* Toggle Button */}\n <div className=\"flex justify-center p-3 pt-4\">\n <button\n onClick={toggleSidebar}\n className={cn(\n \"w-7 h-7 rounded-md\",\n \"bg-muted/50 text-muted-foreground\",\n \"flex items-center justify-center\",\n \"hover:bg-muted hover:text-foreground\",\n \"active:scale-95\",\n \"transition-all duration-150 ease-out\"\n )}\n data-component-name=\"SidebarToggle\"\n title={!isExpanded ? \"Expand sidebar\" : \"Collapse sidebar\"}\n >\n {!isExpanded ? <Menu className=\"w-3.5 h-3.5\" /> : <X className=\"w-3.5 h-3.5\" />}\n </button>\n </div>\n\n\n {/* Navigation Items */}\n <nav className=\"flex-1 p-3 space-y-2\" data-component-name=\"SidebarNav\">\n {items.map((item) => {\n // Check if item path has query parameters\n const [itemBasePath, itemQuery] = item.path.split('?');\n const currentPath = location.pathname;\n \n let isActive;\n if (itemQuery) {\n // For items with query parameters, check both path and query\n const itemParams = new URLSearchParams(itemQuery);\n const tabParam = itemParams.get('tab');\n const currentTab = searchParams.get('tab');\n isActive = currentPath === itemBasePath && currentTab === tabParam;\n } else {\n // For simple paths, check exact match\n isActive = currentPath === item.path;\n }\n \n return (\n <SidebarButton\n key={item.value}\n icon={<Icon name={item.icon} className=\"w-5 h-5\" />}\n label={item.label}\n active={isActive}\n category={item.category}\n expanded={isExpanded}\n onClick={() => handleNavigation(item.path)}\n badge={item.badge}\n disabled={item.disabled}\n />\n );\n })}\n </nav>\n\n {/* Footer */}\n <div \n className={cn(\n \"p-4 border-t border-border\",\n !isExpanded && \"px-3\"\n )}\n data-component-name=\"SidebarFooter\"\n >\n <div className=\"relative\">\n {/* Collapsed footer */}\n <div className={cn(\n \"text-xs text-muted-foreground text-center\",\n \"absolute inset-0 transition-opacity duration-200 ease-out\",\n !isExpanded ? \"opacity-100\" : \"opacity-0\"\n )}>\n v1.0\n </div>\n \n {/* Expanded footer */}\n <div className={cn(\n \"text-xs text-muted-foreground whitespace-nowrap\",\n \"transition-opacity duration-200 ease-out\",\n isExpanded ? \"opacity-100\" : \"opacity-0\"\n )}>\n AloeVera v1.0\n </div>\n </div>\n </div>\n </aside>\n );\n};","import React from 'react';\nimport { GlobalSearch, UserMenu } from '../../../atoms/composed';\nimport { cn } from '../../../atoms/utils/utils';\n\ninterface AppHeaderProps {\n className?: string;\n}\n\nexport const AppHeader: React.FC<AppHeaderProps> = ({ className }) => {\n return (\n <header className={cn(\n \"fixed top-0 left-0 right-0 z-50\",\n \"bg-card/95 backdrop-blur-sm border-b border-border\",\n \"supports-[backdrop-filter]:bg-card/95\",\n className\n )}>\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n <div className=\"flex h-16 items-center justify-between\">\n {/* App Title */}\n <div className=\"flex items-center\">\n <h1 className=\"text-xl font-bold text-foreground\">\n Data Trust Navigator\n </h1>\n </div>\n \n {/* Centered Global Search */}\n <div className=\"flex-1 max-w-2xl mx-8\">\n <GlobalSearch \n className=\"w-full\" \n placeholder=\"Search models, tests, jobs, and components...\"\n />\n </div>\n \n {/* User Menu */}\n <div className=\"flex items-center space-x-4\">\n <UserMenu category={8} />\n </div>\n </div>\n </div>\n </header>\n );\n};","import { Outlet } from 'react-router-dom';\nimport { Sidebar } from './Sidebar';\nimport { AppHeader } from './AppHeader';\nimport { useSidebar } from './SidebarContext';\nimport { cn } from '../../atoms/utils/utils';\n\nexport const AppLayout = () => {\n const { isExpanded } = useSidebar();\n \n return (\n <div className=\"min-h-screen bg-background\">\n {/* Header spans full width */}\n <AppHeader />\n \n {/* Sidebar positioned fixed */}\n <Sidebar />\n \n {/* Main content with proper spacing for fixed sidebar */}\n <main \n className={cn(\n \"pt-16 min-h-screen transition-all duration-300 ease-in-out\",\n isExpanded ? 'ml-64' : 'ml-16'\n )}\n >\n <Outlet />\n </main>\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../../atoms/utils/utils';\n\ninterface DashboardWithSidePanelProps {\n /** Main dashboard content */\n children: React.ReactNode;\n /** Side panel component to display */\n sidePanel?: React.ReactNode;\n /** Whether to show the side panel */\n showSidePanel?: boolean;\n /** Side panel width in Tailwind units (e.g., 72, 80) */\n sidePanelWidth?: number;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const DashboardWithSidePanel: React.FC<DashboardWithSidePanelProps> = ({\n children,\n sidePanel,\n showSidePanel = false,\n sidePanelWidth = 72,\n className\n}) => {\n const marginClass = `pr-${sidePanelWidth}`;\n\n return (\n <div className={cn('relative h-full', className)}>\n {/* Main Dashboard Content */}\n <div \n className={cn(\n 'transition-all duration-300',\n showSidePanel ? marginClass : ''\n )}\n >\n {children}\n </div>\n\n {/* Side Panel */}\n {showSidePanel && sidePanel}\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../../atoms/utils/utils';\nimport { DataBadge } from '../../../atoms/composed/DataBadge';\n\nexport interface SectionHeaderProps {\n /** Main heading text */\n title: string;\n /** Optional description text */\n description?: string;\n /** Optional subtitle text */\n subtitle?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS classes */\n className?: string;\n /** Optional icon element */\n icon?: React.ReactNode;\n /** Optional badge configuration */\n badge?: {\n text: string;\n variant?: 'category' | 'status';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n };\n}\n\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n description,\n subtitle,\n size = 'md',\n className,\n icon,\n badge\n}) => {\n const titleSizes = {\n sm: 'text-lg',\n md: 'text-xl', \n lg: 'text-2xl'\n };\n\n const spacingSizes = {\n sm: 'space-y-1',\n md: 'space-y-2',\n lg: 'space-y-3'\n };\n\n return (\n <div \n className={cn(\n 'text-center',\n spacingSizes[size],\n className\n )}\n data-component-name=\"SectionHeader\"\n >\n <div className=\"flex items-center justify-center gap-3\">\n {icon}\n <h3 className={cn('font-semibold text-foreground', titleSizes[size])}>\n {title}\n </h3>\n {badge && (\n <DataBadge\n variant={badge.variant || 'status'}\n status={badge.status}\n category={badge.category}\n size=\"sm\"\n >\n {badge.text}\n </DataBadge>\n )}\n </div>\n \n {subtitle && (\n <p className=\"text-muted-foreground text-sm font-medium\">\n {subtitle}\n </p>\n )}\n \n {description && (\n <p className=\"text-muted-foreground text-sm max-w-2xl mx-auto\">\n {description}\n </p>\n )}\n </div>\n );\n};","import React from 'react';\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { Button } from '../../atoms/ui/button';\nimport { cn } from '../../atoms/utils/utils';\n\ninterface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n showFirstLast?: boolean;\n maxVisiblePages?: number;\n className?: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n showFirstLast = true,\n maxVisiblePages = 7,\n className,\n category = 1,\n size = 'md'\n}) => {\n const getVisiblePages = () => {\n if (totalPages <= maxVisiblePages) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const halfVisible = Math.floor(maxVisiblePages / 2);\n let start = Math.max(1, currentPage - halfVisible);\n const end = Math.min(totalPages, start + maxVisiblePages - 1);\n\n if (end - start + 1 < maxVisiblePages) {\n start = Math.max(1, end - maxVisiblePages + 1);\n }\n\n const pages = [];\n \n // Add first page if not in range\n if (start > 1) {\n pages.push(1);\n if (start > 2) {\n pages.push('ellipsis-start');\n }\n }\n \n // Add visible range\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n \n // Add last page if not in range\n if (end < totalPages) {\n if (end < totalPages - 1) {\n pages.push('ellipsis-end');\n }\n pages.push(totalPages);\n }\n \n return pages;\n };\n\n const buttonSizes = {\n sm: 'h-8 w-8 text-xs',\n md: 'h-9 w-9 text-sm',\n lg: 'h-10 w-10 text-sm'\n };\n\n const visiblePages = getVisiblePages();\n\n return (\n <nav \n className={cn('flex items-center space-x-1', className)}\n aria-label=\"Pagination\"\n data-component-name=\"Pagination\"\n >\n {/* First page button */}\n {showFirstLast && currentPage > 1 && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(1)}\n className={cn(buttonSizes[size])}\n aria-label=\"Go to first page\"\n >\n ««\n </Button>\n )}\n\n {/* Previous page button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(Math.max(1, currentPage - 1))}\n disabled={currentPage === 1}\n className={cn(buttonSizes[size])}\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </Button>\n\n {/* Page number buttons */}\n {visiblePages.map((page, index) => {\n if (typeof page === 'string') {\n return (\n <span\n key={index}\n className={cn(\n 'flex items-center justify-center text-muted-foreground',\n buttonSizes[size]\n )}\n >\n <MoreHorizontal className=\"w-4 h-4\" />\n </span>\n );\n }\n\n const isActive = page === currentPage;\n \n return (\n <Button\n key={page}\n variant={isActive ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => onPageChange(page)}\n className={cn(\n buttonSizes[size],\n isActive && [\n `bg-category-${category}/15 hover:bg-category-${category}/25`,\n `border-category-${category}/30`,\n `text-category-${category}`,\n 'shadow-sm'\n ]\n )}\n aria-label={`Go to page ${page}`}\n aria-current={isActive ? 'page' : undefined}\n >\n {page}\n </Button>\n );\n })}\n\n {/* Next page button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(Math.min(totalPages, currentPage + 1))}\n disabled={currentPage === totalPages}\n className={cn(buttonSizes[size])}\n aria-label=\"Go to next page\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n\n {/* Last page button */}\n {showFirstLast && currentPage < totalPages && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(totalPages)}\n className={cn(buttonSizes[size])}\n aria-label=\"Go to last page\"\n >\n »»\n </Button>\n )}\n </nav>\n );\n};","import React, { useState, useRef, useEffect } from 'react';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '../../atoms/utils/utils';\nimport { getAnimationClasses, animationPresets } from '../../atoms/utils/animations';\n\nexport interface NavMenuItem {\n id: string;\n label: string;\n href?: string;\n icon?: React.ReactNode;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n children?: NavMenuItem[];\n disabled?: boolean;\n}\n\ninterface NavMenuProps {\n items: NavMenuItem[];\n orientation?: 'horizontal' | 'vertical';\n className?: string;\n defaultCategory?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n onItemClick?: (item: NavMenuItem) => void;\n}\n\nexport const NavMenu: React.FC<NavMenuProps> = ({\n items,\n orientation = 'horizontal',\n className,\n defaultCategory = 1,\n onItemClick\n}) => {\n const [openMenus, setOpenMenus] = useState<Set<string>>(new Set());\n const timeoutRef = useRef<Record<string, NodeJS.Timeout>>({});\n\n const toggleMenu = (itemId: string) => {\n setOpenMenus(prev => {\n const newSet = new Set(prev);\n if (newSet.has(itemId)) {\n newSet.delete(itemId);\n } else {\n newSet.add(itemId);\n }\n return newSet;\n });\n };\n\n const handleMouseEnter = (itemId: string) => {\n if (orientation === 'horizontal') {\n // Clear any pending close timeout\n if (timeoutRef.current[itemId]) {\n clearTimeout(timeoutRef.current[itemId]);\n delete timeoutRef.current[itemId];\n }\n \n setOpenMenus(prev => new Set(prev).add(itemId));\n }\n };\n\n const handleMouseLeave = (itemId: string) => {\n if (orientation === 'horizontal') {\n // Delay closing to allow for mouse movement to submenu\n timeoutRef.current[itemId] = setTimeout(() => {\n setOpenMenus(prev => {\n const newSet = new Set(prev);\n newSet.delete(itemId);\n return newSet;\n });\n delete timeoutRef.current[itemId];\n }, 150);\n }\n };\n\n const handleItemClick = (item: NavMenuItem, event?: React.MouseEvent) => {\n if (item.disabled) {\n event?.preventDefault();\n return;\n }\n\n if (item.children && item.children.length > 0) {\n event?.preventDefault();\n toggleMenu(item.id);\n } else {\n onItemClick?.(item);\n }\n };\n\n useEffect(() => {\n const timeouts = timeoutRef.current;\n return () => {\n // Cleanup timeouts\n Object.values(timeouts).forEach(timeout => clearTimeout(timeout));\n };\n }, []);\n\n const renderMenuItem = (item: NavMenuItem, level = 0) => {\n const hasChildren = item.children && item.children.length > 0;\n const isOpen = openMenus.has(item.id);\n const category = item.category || defaultCategory;\n\n const itemContent = (\n <div\n className={cn(\n 'flex items-center gap-2 px-3 py-2 rounded-md transition-all duration-200',\n 'hover:bg-muted/50 cursor-pointer select-none',\n item.disabled && 'opacity-50 cursor-not-allowed',\n !item.disabled && [\n `hover:text-category-${category}`,\n `hover:bg-category-${category}/5`,\n getAnimationClasses(animationPresets.subtle)\n ],\n orientation === 'horizontal' && level === 0 && 'px-4 py-3'\n )}\n onClick={(e) => handleItemClick(item, e)}\n >\n {item.icon && (\n <span className=\"flex-shrink-0\">\n {item.icon}\n </span>\n )}\n \n <span className=\"flex-1 text-sm font-medium\">\n {item.label}\n </span>\n \n {hasChildren && (\n <span className=\"flex-shrink-0 transition-transform duration-200\">\n {orientation === 'horizontal' ? (\n <ChevronDown className={cn(\n 'w-4 h-4 transition-transform duration-200',\n isOpen && 'rotate-180'\n )} />\n ) : (\n <ChevronRight className={cn(\n 'w-4 h-4 transition-transform duration-200',\n isOpen && 'rotate-90'\n )} />\n )}\n </span>\n )}\n </div>\n );\n\n return (\n <div\n key={item.id}\n className=\"relative\"\n onMouseEnter={() => handleMouseEnter(item.id)}\n onMouseLeave={() => handleMouseLeave(item.id)}\n >\n {item.href && !hasChildren ? (\n <a href={item.href} className=\"block\">\n {itemContent}\n </a>\n ) : (\n itemContent\n )}\n\n {/* Submenu */}\n {hasChildren && isOpen && (\n <div\n className={cn(\n 'bg-popover border border-border rounded-md shadow-lg py-1 min-w-48',\n 'z-50',\n orientation === 'horizontal' \n ? 'absolute top-full left-0 mt-1'\n : 'ml-4 mt-1',\n getAnimationClasses(animationPresets.card)\n )}\n >\n {item.children!.map(child => renderMenuItem(child, level + 1))}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <nav\n className={cn(\n 'flex',\n orientation === 'horizontal' ? 'flex-row space-x-1' : 'flex-col space-y-1',\n className\n )}\n data-component-name=\"NavMenu\"\n >\n {items.map(item => renderMenuItem(item))}\n </nav>\n );\n};","import React from 'react';\nimport { cn } from '../../atoms/utils/utils';\n\nexport interface FormGroupProps {\n /** Group title */\n title?: string;\n /** Group description */\n description?: string;\n /** Group content */\n children: React.ReactNode;\n /** Visual variant */\n variant?: 'default' | 'card' | 'section';\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const FormGroup: React.FC<FormGroupProps> = ({\n title,\n description,\n children,\n variant = 'default',\n className,\n category\n}) => {\n const variantClasses = {\n default: 'space-y-4',\n card: 'space-y-4 p-6 bg-card border border-border rounded-lg',\n section: 'space-y-6 pb-6 border-b border-border last:border-b-0 last:pb-0'\n };\n\n const titleClasses = {\n default: 'text-lg font-semibold text-foreground',\n card: 'text-lg font-semibold text-foreground',\n section: 'text-xl font-semibold text-foreground'\n };\n\n return (\n <div\n className={cn(\n variantClasses[variant],\n category && variant === 'card' && `border-category-${category}/20`,\n className\n )}\n data-component-name=\"FormGroup\"\n >\n {/* Header */}\n {(title || description) && (\n <div className=\"space-y-1\">\n {title && (\n <h3 \n className={cn(\n titleClasses[variant],\n category && `text-category-${category}`\n )}\n >\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"space-y-4\">\n {children}\n </div>\n </div>\n );\n};","import React, { useState, useRef, useEffect } from 'react';\nimport { Search, X, Loader2 } from 'lucide-react';\nimport { cn } from '../../atoms/utils/utils';\nimport { Input } from '../../atoms/ui/input';\nimport { Button } from '../../atoms/ui/button';\nimport { getAnimationClasses, animationPresets } from '../../atoms/utils/animations';\n\nexport interface SearchResult {\n id: string;\n label: string;\n description?: string;\n category?: string;\n icon?: React.ReactNode;\n}\n\nexport interface SearchInputProps {\n /** Search placeholder text */\n placeholder?: string;\n /** Current search value */\n value?: string;\n /** Value change handler */\n onChange?: (value: string) => void;\n /** Search results */\n results?: SearchResult[];\n /** Loading state */\n loading?: boolean;\n /** Result selection handler */\n onSelect?: (result: SearchResult) => void;\n /** Search debounce delay in ms */\n debounceMs?: number;\n /** Whether to show clear button */\n clearable?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Maximum results to show */\n maxResults?: number;\n /** No results message */\n noResultsText?: string;\n}\n\nexport const SearchInput: React.FC<SearchInputProps> = ({\n placeholder = 'Search...',\n value = '',\n onChange,\n results = [],\n loading = false,\n onSelect,\n debounceMs = 300,\n clearable = true,\n className,\n category = 1,\n maxResults = 10,\n noResultsText = 'No results found'\n}) => {\n const [internalValue, setInternalValue] = useState(value);\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n \n const inputRef = useRef<HTMLInputElement>(null);\n const resultsRef = useRef<HTMLDivElement>(null);\n const debounceRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n const displayResults = results.slice(0, maxResults);\n const showResults = isOpen && (displayResults.length > 0 || (internalValue && !loading));\n\n // Debounced search\n useEffect(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n debounceRef.current = setTimeout(() => {\n if (onChange) onChange(internalValue);\n }, debounceMs);\n\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n };\n }, [internalValue, onChange, debounceMs]);\n\n // Sync external value\n useEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n // Keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!showResults) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setHighlightedIndex(prev => \n prev < displayResults.length - 1 ? prev + 1 : prev\n );\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex(prev => prev > 0 ? prev - 1 : prev);\n break;\n case 'Enter':\n e.preventDefault();\n if (highlightedIndex >= 0 && displayResults[highlightedIndex]) {\n handleSelect(displayResults[highlightedIndex]);\n }\n break;\n case 'Escape':\n setIsOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.blur();\n break;\n }\n };\n\n const handleSelect = (result: SearchResult) => {\n onSelect?.(result);\n setIsOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.blur();\n };\n\n const handleClear = () => {\n setInternalValue('');\n onChange?.('');\n setIsOpen(false);\n inputRef.current?.focus();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n setIsOpen(true);\n setHighlightedIndex(-1);\n };\n\n const handleFocus = () => {\n if (internalValue) {\n setIsOpen(true);\n }\n };\n\n const handleBlur = () => {\n // Delay closing to allow for result clicks\n setTimeout(() => {\n if (!resultsRef.current?.contains(document.activeElement)) {\n setIsOpen(false);\n setHighlightedIndex(-1);\n }\n }, 150);\n };\n\n return (\n <div className={cn('relative w-full', className)} data-component-name=\"SearchInput\">\n {/* Input container */}\n <div className=\"relative\">\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {loading ? (\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n ) : (\n <Search className=\"w-4 h-4\" />\n )}\n </div>\n \n <Input\n ref={inputRef}\n type=\"text\"\n value={internalValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n className={cn(\n 'pl-10',\n clearable && internalValue && 'pr-10',\n showResults && `ring-2 ring-category-${category}/20`\n )}\n />\n \n {clearable && internalValue && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClear}\n className=\"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7 p-0 hover:bg-muted\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n </div>\n\n {/* Results dropdown */}\n {showResults && (\n <div\n ref={resultsRef}\n className={cn(\n 'absolute top-full left-0 right-0 z-50 mt-1',\n 'bg-popover border border-border rounded-md shadow-lg',\n 'max-h-64 overflow-y-auto',\n getAnimationClasses(animationPresets.card)\n )}\n >\n {displayResults.length > 0 ? (\n <div className=\"py-1\">\n {displayResults.map((result, index) => (\n <button\n key={result.id}\n type=\"button\"\n onClick={() => handleSelect(result)}\n className={cn(\n 'w-full text-left px-3 py-2 text-sm',\n 'hover:bg-muted/50 focus:bg-muted/50',\n 'transition-colors duration-150',\n index === highlightedIndex && [\n `bg-category-${category}/10`,\n `text-category-${category}`\n ]\n )}\n >\n <div className=\"flex items-center gap-2\">\n {result.icon && (\n <span className=\"flex-shrink-0 text-muted-foreground\">\n {result.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">\n {result.label}\n </div>\n {result.description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {result.description}\n </div>\n )}\n </div>\n {result.category && (\n <span className=\"text-xs text-muted-foreground\">\n {result.category}\n </span>\n )}\n </div>\n </button>\n ))}\n </div>\n ) : internalValue && !loading ? (\n <div className=\"px-3 py-2 text-sm text-muted-foreground\">\n {noResultsText}\n </div>\n ) : null}\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { Card } from '../atoms/ui/card';\nimport { ShowcaseSection } from '../molecules/layout';\n\ninterface PrimaryComponentSection {\n title: string;\n description: string;\n badge: {\n text: string;\n variant?: 'status' | 'category';\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n size?: 'sm' | 'md' | 'lg';\n };\n children: React.ReactNode;\n}\n\ninterface ComposedExampleSection {\n title: string;\n description: string;\n badge?: {\n text: string;\n variant?: 'status' | 'category';\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n size?: 'sm' | 'md' | 'lg';\n };\n children: React.ReactNode;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\ninterface ComponentShowcaseTemplateProps {\n /** Category for overall theming */\n category: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Page title */\n title: string;\n /** Page description */\n description: string;\n /** Primary component section - core component with basic variants */\n primaryComponent: PrimaryComponentSection;\n /** Optional composed examples - complex usage patterns and real-world scenarios */\n composedExamples?: {\n title: string;\n description: string;\n sections: ComposedExampleSection[];\n };\n /** Optional ephemeral examples - inline customized components */\n ephemeralExamples?: {\n title: string;\n description: string;\n sections: ComposedExampleSection[];\n };\n /** Additional content that doesn't fit the primary/composed pattern */\n additionalSections?: React.ReactNode;\n}\n\nexport const ComponentShowcaseTemplate: React.FC<ComponentShowcaseTemplateProps> = ({\n category,\n title,\n description,\n primaryComponent,\n composedExamples,\n ephemeralExamples,\n additionalSections\n}) => {\n return (\n <div className=\"space-y-8\">\n {/* Page Header */}\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">{title}</h2>\n <p className=\"text-muted-foreground\">{description}</p>\n </div>\n\n {/* Primary Component Section */}\n <Card className=\"p-6\" category={category}>\n <ShowcaseSection\n title={primaryComponent.title}\n description={primaryComponent.description}\n badge={primaryComponent.badge}\n >\n {primaryComponent.children}\n </ShowcaseSection>\n </Card>\n\n {/* Composed Examples Section */}\n {composedExamples && (\n <div className=\"space-y-6\">\n {/* Composed Examples Header */}\n <div className=\"space-y-2 mt-12 mb-8\">\n <h3 className=\"text-xl font-bold text-foreground\">{composedExamples.title}</h3>\n <p className=\"text-muted-foreground\">{composedExamples.description}</p>\n </div>\n\n {/* Composed Example Sections */}\n <div className=\"grid gap-6\">\n {composedExamples.sections.map((section, index) => (\n <Card \n key={index} \n className=\"p-6\" \n category={section.category || category}\n >\n {section.badge ? (\n <ShowcaseSection\n title={section.title}\n description={section.description}\n badge={section.badge}\n >\n {section.children}\n </ShowcaseSection>\n ) : (\n <div className=\"space-y-6\">\n <div className=\"space-y-4\">\n <h4 className=\"text-lg font-medium\">{section.title}</h4>\n <p className=\"text-sm text-muted-foreground\">{section.description}</p>\n </div>\n <div>{section.children}</div>\n </div>\n )}\n </Card>\n ))}\n </div>\n </div>\n )}\n\n {/* Ephemeral Examples Section */}\n {ephemeralExamples && (\n <div className=\"space-y-6\">\n {/* Ephemeral Examples Header */}\n <div className=\"space-y-2 mt-12 mb-8\">\n <h3 className=\"text-xl font-bold text-foreground\">{ephemeralExamples.title}</h3>\n <p className=\"text-muted-foreground\">{ephemeralExamples.description}</p>\n </div>\n\n {/* Ephemeral Example Sections */}\n <div className=\"grid gap-6\">\n {ephemeralExamples.sections.map((section, index) => (\n <Card \n key={index} \n className=\"p-6\" \n category={section.category || category}\n >\n {section.badge ? (\n <ShowcaseSection\n title={section.title}\n description={section.description}\n badge={section.badge}\n >\n {section.children}\n </ShowcaseSection>\n ) : (\n <div className=\"space-y-6\">\n <div className=\"space-y-4\">\n <h4 className=\"text-lg font-medium\">{section.title}</h4>\n <p className=\"text-sm text-muted-foreground\">{section.description}</p>\n </div>\n <div>{section.children}</div>\n </div>\n )}\n </Card>\n ))}\n </div>\n </div>\n )}\n\n {/* Additional Sections */}\n {additionalSections && (\n <div className=\"space-y-6\">\n {additionalSections}\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../atoms/utils/utils';\nimport { SectionHeader } from '../molecules/layout/SectionHeader';\nimport { Card } from '../atoms/ui/card';\n\nexport interface DashboardTemplateProps {\n /** Page title */\n title: string;\n /** Page description */\n description?: string;\n /** Header actions */\n actions?: React.ReactNode;\n /** Main content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Whether to show breadcrumbs */\n showBreadcrumbs?: boolean;\n /** Breadcrumb items */\n breadcrumbs?: Array<{ label: string; href?: string }>;\n /** Page subtitle */\n subtitle?: string;\n}\n\nexport const DashboardTemplate: React.FC<DashboardTemplateProps> = ({\n title,\n description,\n actions,\n children,\n className,\n category = 1,\n showBreadcrumbs = false,\n breadcrumbs = [],\n subtitle\n}) => {\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"flex-shrink-0 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\">\n <div className=\"container mx-auto px-6 py-6\">\n {/* Breadcrumbs */}\n {showBreadcrumbs && breadcrumbs.length > 0 && (\n <nav className=\"mb-4\">\n <ol className=\"flex items-center space-x-2 text-sm\">\n {breadcrumbs.map((crumb, index) => {\n const isLast = index === breadcrumbs.length - 1;\n return (\n <li key={index} className=\"flex items-center\">\n {crumb.href && !isLast ? (\n <a\n href={crumb.href}\n className={cn(\n 'text-muted-foreground hover:text-foreground transition-colors',\n `hover:text-category-${category}`\n )}\n >\n {crumb.label}\n </a>\n ) : (\n <span className={isLast ? `text-category-${category} font-medium` : 'text-muted-foreground'}>\n {crumb.label}\n </span>\n )}\n {!isLast && (\n <span className=\"mx-2 text-muted-foreground\">/</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n )}\n\n {/* Page Header */}\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n <SectionHeader\n title={title}\n description={description}\n subtitle={subtitle}\n size=\"lg\"\n className=\"text-left\"\n />\n </div>\n \n {actions && (\n <div className=\"ml-6 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"container mx-auto px-6 py-6\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n\n/**\n * Dashboard Grid Layout Component\n * Provides standardized grid layouts for dashboard content\n */\nexport interface DashboardGridProps {\n /** Grid columns configuration */\n columns?: 1 | 2 | 3 | 4;\n /** Gap between grid items */\n gap?: 'sm' | 'md' | 'lg';\n /** Grid content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const DashboardGrid: React.FC<DashboardGridProps> = ({\n columns = 3,\n gap = 'md',\n children,\n className\n}) => {\n const columnClasses = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 lg:grid-cols-2',\n 3: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'\n };\n\n const gapClasses = {\n sm: 'gap-4',\n md: 'gap-6',\n lg: 'gap-8'\n };\n\n return (\n <div\n className={cn(\n 'grid',\n columnClasses[columns],\n gapClasses[gap],\n className\n )}\n data-component-name=\"DashboardGrid\"\n >\n {children}\n </div>\n );\n};\n\n/**\n * Dashboard Card Component\n * Standardized card component for dashboard content\n */\nexport interface DashboardCardProps {\n /** Card title */\n title?: string;\n /** Card description */\n description?: string;\n /** Card content */\n children: React.ReactNode;\n /** Card actions */\n actions?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Card padding */\n padding?: 'sm' | 'md' | 'lg';\n}\n\nexport const DashboardCard: React.FC<DashboardCardProps> = ({\n title,\n description,\n children,\n actions,\n className,\n category,\n padding = 'md'\n}) => {\n const paddingClasses = {\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8'\n };\n\n return (\n <Card \n className={cn(paddingClasses[padding], className)}\n category={category}\n >\n {/* Card Header */}\n {(title || description || actions) && (\n <div className=\"mb-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h3 className={cn(\n 'text-lg font-semibold text-foreground mb-1',\n category && `text-category-${category}`\n )}>\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n \n {actions && (\n <div className=\"ml-4 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Card Content */}\n <div>\n {children}\n </div>\n </Card>\n );\n};","import React from 'react';\nimport { cn } from '../atoms/utils/utils';\nimport { Card } from '../atoms/ui/card';\nimport { SectionHeader } from '../molecules/layout/SectionHeader';\n\nexport interface AuthTemplateProps {\n /** Page title */\n title: string;\n /** Page subtitle */\n subtitle?: string;\n /** Auth form content */\n children: React.ReactNode;\n /** Footer content (e.g., links to other auth pages) */\n footer?: React.ReactNode;\n /** Logo or brand element */\n logo?: React.ReactNode;\n /** Background pattern or image */\n backgroundPattern?: 'gradient' | 'grid' | 'dots' | 'waves';\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Card width variant */\n width?: 'sm' | 'md' | 'lg';\n}\n\nexport const AuthTemplate: React.FC<AuthTemplateProps> = ({\n title,\n subtitle,\n children,\n footer,\n logo,\n backgroundPattern = 'gradient',\n className,\n category = 1,\n width = 'md'\n}) => {\n const backgroundPatterns = {\n gradient: 'bg-gradient-to-br from-background via-muted/20 to-background',\n grid: 'bg-background bg-[size:2rem_2rem] bg-[image:radial-gradient(circle,var(--muted)_1px,transparent_1px)]',\n dots: 'bg-background bg-[size:1rem_1rem] bg-[image:radial-gradient(circle,var(--muted)_1px,transparent_1px)]',\n waves: 'bg-background bg-[size:4rem_2rem] bg-[image:repeating-linear-gradient(45deg,transparent,transparent_1rem,var(--muted/20)_1rem,var(--muted/20)_2rem)]'\n };\n\n const widthClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg'\n };\n\n return (\n <div\n className={cn(\n 'min-h-screen flex items-center justify-center p-4',\n backgroundPatterns[backgroundPattern],\n className\n )}\n data-component-name=\"AuthTemplate\"\n >\n <div className={cn('w-full', widthClasses[width])}>\n <Card \n className=\"p-8 backdrop-blur-sm bg-background/95\"\n category={category}\n >\n {/* Logo */}\n {logo && (\n <div className=\"flex justify-center mb-8\">\n {logo}\n </div>\n )}\n\n {/* Header */}\n <div className=\"text-center mb-8\">\n <SectionHeader\n title={title}\n subtitle={subtitle}\n size=\"lg\"\n className=\"text-center\"\n />\n </div>\n\n {/* Form Content */}\n <div className=\"space-y-6\">\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div className=\"mt-8 pt-6 border-t border-border text-center\">\n {footer}\n </div>\n )}\n </Card>\n </div>\n </div>\n );\n};\n\n/**\n * Auth Form Field Component\n * Standardized form field for auth forms\n */\nexport interface AuthFormFieldProps {\n /** Field label */\n label: string;\n /** Field input */\n children: React.ReactNode;\n /** Error message */\n error?: string;\n /** Whether field is required */\n required?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const AuthFormField: React.FC<AuthFormFieldProps> = ({\n label,\n children,\n error,\n required = false,\n className\n}) => {\n return (\n <div className={cn('space-y-2', className)}>\n <label className={cn(\n 'text-sm font-medium text-foreground block',\n required && \"after:content-['*'] after:ml-0.5 after:text-status-error\"\n )}>\n {label}\n </label>\n \n <div className=\"relative\">\n {children}\n </div>\n \n {error && (\n <p className=\"text-xs text-status-error font-medium\">\n {error}\n </p>\n )}\n </div>\n );\n};\n\n/**\n * Auth Link Component\n * Standardized link for auth pages\n */\nexport interface AuthLinkProps {\n /** Link text */\n children: React.ReactNode;\n /** Link destination */\n href: string;\n /** Link variant */\n variant?: 'primary' | 'secondary';\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const AuthLink: React.FC<AuthLinkProps> = ({\n children,\n href,\n variant = 'primary',\n className,\n category = 1\n}) => {\n const variantClasses = {\n primary: `text-category-${category} hover:text-category-${category}/80 font-medium`,\n secondary: 'text-muted-foreground hover:text-foreground'\n };\n\n return (\n <a\n href={href}\n className={cn(\n 'text-sm transition-colors hover:underline',\n variantClasses[variant],\n className\n )}\n >\n {children}\n </a>\n );\n};\n\n/**\n * Auth Divider Component\n * Visual divider for auth forms (e.g., \"or continue with\")\n */\nexport interface AuthDividerProps {\n /** Divider text */\n children?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const AuthDivider: React.FC<AuthDividerProps> = ({\n children = 'or',\n className\n}) => {\n return (\n <div className={cn('relative flex items-center', className)}>\n <div className=\"flex-1 border-t border-border\" />\n {children && (\n <div className=\"px-4\">\n <span className=\"text-xs text-muted-foreground uppercase tracking-wide font-medium\">\n {children}\n </span>\n </div>\n )}\n <div className=\"flex-1 border-t border-border\" />\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../atoms/utils/utils';\nimport { SectionHeader } from '../molecules/layout/SectionHeader';\nimport { DataTable, type Column } from '../atoms/composed/DataTable';\nimport { SearchInput, type SearchResult } from '../molecules/forms/SearchInput';\nimport { Pagination } from '../molecules/navigation/Pagination';\nimport { Card } from '../atoms/ui/card';\nimport { Button } from '../atoms/ui/button';\nimport { Plus, Download, Filter } from 'lucide-react';\n\nexport interface DataTemplateProps {\n /** Page title */\n title: string;\n /** Page description */\n description?: string;\n /** Search functionality */\n searchConfig?: {\n placeholder?: string;\n value?: string;\n onChange?: (value: string) => void;\n results?: SearchResult[];\n };\n /** Filter functionality */\n filterConfig?: {\n onFilter?: () => void;\n filterCount?: number;\n };\n /** Data table configuration */\n tableConfig: {\n data: Record<string, unknown>[];\n columns: Column<Record<string, unknown>>[];\n loading?: boolean;\n onRowClick?: (item: Record<string, unknown>) => void;\n };\n /** Pagination configuration */\n paginationConfig?: {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n };\n /** Action buttons */\n actions?: {\n primary?: {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n };\n secondary?: Array<{\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n }>;\n };\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Empty state content */\n emptyState?: React.ReactNode;\n}\n\nexport const DataTemplate: React.FC<DataTemplateProps> = ({\n title,\n description,\n searchConfig,\n filterConfig,\n tableConfig,\n paginationConfig,\n actions,\n className,\n category = 1,\n emptyState\n}) => {\n const hasData = tableConfig.data && tableConfig.data.length > 0;\n const showControls = searchConfig || filterConfig || actions;\n\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"flex-shrink-0 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n <SectionHeader\n title={title}\n description={description}\n size=\"lg\"\n className=\"text-left\"\n />\n </div>\n \n {actions?.primary && (\n <div className=\"ml-6 flex-shrink-0\">\n <Button\n onClick={actions.primary.onClick}\n className={cn(\n `bg-category-${category} hover:bg-category-${category}/90`,\n 'text-white'\n )}\n >\n {actions.primary.icon || <Plus className=\"w-4 h-4 mr-2\" />}\n {actions.primary.label}\n </Button>\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Controls Section */}\n {showControls && (\n <div className=\"flex-shrink-0 border-b border-border bg-muted/30\">\n <div className=\"container mx-auto px-6 py-4\">\n <div className=\"flex items-center gap-4\">\n {/* Search */}\n {searchConfig && (\n <div className=\"flex-1 max-w-md\">\n <SearchInput\n placeholder={searchConfig.placeholder}\n value={searchConfig.value}\n onChange={searchConfig.onChange}\n results={searchConfig.results}\n category={category}\n />\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n {/* Filter Button */}\n {filterConfig && (\n <Button\n variant=\"outline\"\n onClick={filterConfig.onFilter}\n className=\"relative\"\n >\n <Filter className=\"w-4 h-4 mr-2\" />\n Filters\n {filterConfig.filterCount && filterConfig.filterCount > 0 && (\n <span className={cn(\n 'absolute -top-2 -right-2 w-5 h-5 rounded-full text-xs font-bold',\n 'flex items-center justify-center text-white',\n `bg-category-${category}`\n )}>\n {filterConfig.filterCount}\n </span>\n )}\n </Button>\n )}\n\n {/* Secondary Actions */}\n {actions?.secondary?.map((action, index) => (\n <Button\n key={index}\n variant=\"outline\"\n onClick={action.onClick}\n >\n {action.icon || <Download className=\"w-4 h-4 mr-2\" />}\n {action.label}\n </Button>\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"container mx-auto px-6 py-6\">\n {hasData ? (\n <div className=\"space-y-6\">\n {/* Data Table */}\n <Card category={category}>\n <DataTable\n data={tableConfig.data}\n columns={tableConfig.columns}\n isLoading={tableConfig.loading}\n onRowClick={tableConfig.onRowClick}\n hover={true}\n />\n </Card>\n\n {/* Pagination */}\n {paginationConfig && paginationConfig.totalPages > 1 && (\n <div className=\"flex justify-center\">\n <Pagination\n currentPage={paginationConfig.currentPage}\n totalPages={paginationConfig.totalPages}\n onPageChange={paginationConfig.onPageChange}\n category={category}\n />\n </div>\n )}\n </div>\n ) : (\n <div className=\"flex items-center justify-center min-h-96\">\n {emptyState || (\n <div className=\"text-center space-y-4\">\n <div className=\"text-muted-foreground text-lg\">\n No data available\n </div>\n <p className=\"text-sm text-muted-foreground max-w-md\">\n {actions?.primary ? (\n <>Get started by creating your first {title.toLowerCase()}.</>\n ) : (\n <>There's no data to display at the moment.</>\n )}\n </p>\n {actions?.primary && (\n <Button\n onClick={actions.primary.onClick}\n className={cn(\n `bg-category-${category} hover:bg-category-${category}/90`,\n 'text-white'\n )}\n >\n {actions.primary.icon || <Plus className=\"w-4 h-4 mr-2\" />}\n {actions.primary.label}\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\n/**\n * Data Detail Template\n * Template for displaying detailed information about a single data item\n */\nexport interface DataDetailTemplateProps {\n /** Page title */\n title: string;\n /** Page subtitle */\n subtitle?: string;\n /** Back navigation */\n onBack?: () => void;\n /** Detail content */\n children: React.ReactNode;\n /** Action buttons */\n actions?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Sidebar content */\n sidebar?: React.ReactNode;\n}\n\nexport const DataDetailTemplate: React.FC<DataDetailTemplateProps> = ({\n title,\n subtitle,\n onBack,\n children,\n actions,\n className,\n sidebar\n}) => {\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header */}\n <div className=\"flex-shrink-0 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n {onBack && (\n <Button\n variant=\"ghost\"\n onClick={onBack}\n className=\"mb-4 -ml-3\"\n >\n ← Back\n </Button>\n )}\n <SectionHeader\n title={title}\n subtitle={subtitle}\n size=\"lg\"\n className=\"text-left\"\n />\n </div>\n \n {actions && (\n <div className=\"ml-6 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className={cn(\n 'grid gap-6',\n sidebar ? 'grid-cols-1 lg:grid-cols-3' : 'grid-cols-1'\n )}>\n {/* Main Content */}\n <div className={sidebar ? 'lg:col-span-2' : 'col-span-1'}>\n {children}\n </div>\n\n {/* Sidebar */}\n {sidebar && (\n <div className=\"lg:col-span-1\">\n {sidebar}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../atoms/utils/utils';\nimport { StatCard } from '../../atoms/composed/StatCard';\nimport { Chart } from '../../atoms/composed/Chart';\nimport { Card } from '../../atoms/ui/card';\nimport { DashboardGrid } from '../DashboardTemplate';\nimport { DataBadge } from '../../atoms/composed/DataBadge';\nimport { IconBadge } from '../../atoms/composed/IconBadge';\nimport { Button } from '../../atoms/ui/button';\nimport { getContainerHeightClass } from '../../atoms/shared/config/dashboard-sizes';\nimport { Activity, AlertTriangle, TrendingUp, Users, Settings, RefreshCw } from 'lucide-react';\n\nexport interface MetricCard {\n /** Metric title */\n title: string;\n /** Main value to display */\n value: string | number;\n /** Change percentage */\n change?: number;\n /** Change period description */\n changePeriod?: string;\n /** Metric category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Custom icon */\n icon?: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n}\n\nexport interface ChartConfig {\n /** Chart title */\n title: string;\n /** Chart type */\n type: 'line' | 'bar' | 'pie' | 'area';\n /** Chart data */\n data: Array<{ label: string; value: number; category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 }>;\n /** Chart configuration */\n config?: Record<string, unknown>;\n /** Chart category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport interface ActivityItem {\n /** Activity ID */\n id: string;\n /** Activity type */\n type: 'user' | 'system' | 'security' | 'content' | 'error';\n /** Activity message */\n message: string;\n /** Activity timestamp */\n timestamp: Date;\n /** User who performed the activity */\n user?: string;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface AlertItem {\n /** Alert ID */\n id: string;\n /** Alert severity */\n severity: 'low' | 'medium' | 'high' | 'critical';\n /** Alert title */\n title: string;\n /** Alert description */\n description: string;\n /** Alert timestamp */\n timestamp: Date;\n /** Whether alert is resolved */\n resolved?: boolean;\n /** Action to resolve alert */\n onResolve?: () => void;\n}\n\nexport interface AdminDashboardTemplateProps {\n /** Dashboard title */\n title?: string;\n /** Dashboard description */\n description?: string;\n /** Key metrics to display */\n metrics: MetricCard[];\n /** Charts configuration */\n charts?: ChartConfig[];\n /** Recent activities */\n activities?: ActivityItem[];\n /** System alerts */\n alerts?: AlertItem[];\n /** Additional actions in header */\n actions?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Whether data is loading */\n isLoading?: boolean;\n /** Refresh handler */\n onRefresh?: () => void;\n /** Last updated timestamp */\n lastUpdated?: Date;\n}\n\nexport const AdminDashboardTemplate: React.FC<AdminDashboardTemplateProps> = ({\n title = \"Admin Dashboard\",\n description = \"System overview and key metrics\",\n metrics,\n charts = [],\n activities = [],\n alerts = [],\n actions,\n className,\n isLoading = false,\n onRefresh,\n lastUpdated\n}) => {\n const unreadAlerts = alerts.filter(alert => !alert.resolved);\n const criticalAlerts = unreadAlerts.filter(alert => alert.severity === 'critical');\n\n const getActivityIcon = (type: ActivityItem['type']) => {\n switch (type) {\n case 'user': return <Users className=\"w-4 h-4\" />;\n case 'system': return <Settings className=\"w-4 h-4\" />;\n case 'security': return <AlertTriangle className=\"w-4 h-4\" />;\n case 'content': return <Activity className=\"w-4 h-4\" />;\n case 'error': return <AlertTriangle className=\"w-4 h-4\" />;\n default: return <Activity className=\"w-4 h-4\" />;\n }\n };\n\n const getActivityColor = (type: ActivityItem['type']) => {\n switch (type) {\n case 'user': return 'text-category-1';\n case 'system': return 'text-category-2';\n case 'security': return 'text-category-3';\n case 'content': return 'text-category-5';\n case 'error': return 'text-category-8';\n default: return 'text-muted-foreground';\n }\n };\n\n const getAlertSeverityCategory = (severity: AlertItem['severity']): 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 => {\n switch (severity) {\n case 'low': return 6;\n case 'medium': return 7;\n case 'high': return 3;\n case 'critical': return 8;\n default: return 2;\n }\n };\n\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"bg-gradient-to-br from-muted/50 via-muted/30 to-background border-b border-border/50\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center space-x-4\">\n <IconBadge \n variant=\"category\" \n category={1} \n size=\"lg\" \n icon={<Activity className=\"w-5 h-5\" />}\n tooltip=\"Dashboard Activity Overview\"\n />\n <div>\n <h1 className=\"text-4xl font-bold text-foreground\">{title}</h1>\n <p className=\"text-lg text-muted-foreground mt-2\">{description}</p>\n </div>\n </div>\n \n <div className=\"ml-6 flex-shrink-0\">\n {/* Action buttons */}\n <div className=\"flex items-center gap-2 mb-2\">\n {onRefresh && (\n <Button\n variant=\"outline\"\n onClick={onRefresh}\n disabled={isLoading}\n tooltip={isLoading ? \"Refreshing...\" : \"Refresh data\"}\n >\n <RefreshCw className={cn(\"w-4 h-4 mr-2\", isLoading && \"animate-spin\")} />\n Refresh\n </Button>\n )}\n {actions}\n </div>\n \n {/* Status indicators positioned under buttons */}\n <div className=\"flex items-center gap-4 justify-end\">\n {criticalAlerts.length > 0 && (\n <DataBadge \n variant=\"status\"\n status=\"error\"\n size=\"sm\"\n >\n <AlertTriangle className=\"w-3 h-3 mr-1\" />\n {criticalAlerts.length} Critical Alert{criticalAlerts.length !== 1 ? 's' : ''}\n </DataBadge>\n )}\n \n {lastUpdated && (\n <span className=\"text-sm text-muted-foreground\">\n Last updated: {lastUpdated.toLocaleTimeString()}\n </span>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8 space-y-8\">\n \n {/* Key Metrics Grid */}\n <DashboardGrid columns={4} gap=\"md\">\n {metrics.map((metric, index) => (\n <StatCard\n key={index}\n title={metric.title}\n value={metric.value}\n trend={metric.change ? { value: metric.change, label: metric.changePeriod } : undefined}\n category={metric.category || 1}\n icon={metric.icon || <TrendingUp className=\"w-5 h-5\" />}\n onClick={metric.onClick}\n className=\"cursor-pointer transition-shadow\"\n />\n ))}\n </DashboardGrid>\n\n {/* Charts and Activities Row */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n \n {/* Charts Section */}\n <div className=\"lg:col-span-2 space-y-6\">\n {charts.map((chart, index) => (\n <Card key={index} className=\"p-6 overflow-hidden\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-foreground\">\n {chart.title}\n </h3>\n </div>\n <div className={getContainerHeightClass('container-small-chart')}>\n <Chart\n title={chart.title}\n type={chart.type}\n data={chart.data}\n category={chart.category}\n height=\"small\"\n variant=\"minimal\"\n noWrapper={true}\n />\n </div>\n </Card>\n ))}\n </div>\n\n {/* Right Sidebar */}\n <div className=\"space-y-6\">\n \n {/* System Alerts */}\n {unreadAlerts.length > 0 && (\n <Card className=\"p-4\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-foreground flex items-center\">\n <AlertTriangle className=\"w-5 h-5 mr-2 text-category-8\" />\n System Alerts\n </h3>\n </div>\n <div className=\"space-y-3\">\n {unreadAlerts.slice(0, 5).map((alert) => (\n <div \n key={alert.id}\n className=\"flex items-start space-x-3 p-3 rounded-md border border-border\"\n >\n <DataBadge \n variant=\"category\" \n category={getAlertSeverityCategory(alert.severity)}\n size=\"sm\"\n className=\"mt-0.5\"\n >\n {alert.severity}\n </DataBadge>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground\">\n {alert.title}\n </p>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {alert.description}\n </p>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {alert.timestamp.toLocaleString()}\n </p>\n {alert.onResolve && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"mt-2\"\n onClick={alert.onResolve}\n >\n Resolve\n </Button>\n )}\n </div>\n </div>\n ))}\n </div>\n </Card>\n )}\n\n {/* Recent Activity */}\n <Card className=\"p-4\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-foreground flex items-center\">\n <Activity className=\"w-5 h-5 mr-2 text-category-2\" />\n Recent Activity\n </h3>\n </div>\n <div className=\"space-y-3\">\n {activities.slice(0, 8).map((activity) => (\n <div key={activity.id} className=\"flex items-start space-x-3\">\n <div className={cn(\n \"mt-1 flex-shrink-0\",\n getActivityColor(activity.type)\n )}>\n {getActivityIcon(activity.type)}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-foreground\">\n {activity.message}\n </p>\n <div className=\"flex items-center gap-2 mt-1\">\n {activity.user && (\n <span className=\"text-xs text-muted-foreground\">\n by {activity.user}\n </span>\n )}\n <span className=\"text-xs text-muted-foreground\">\n {activity.timestamp.toLocaleString()}\n </span>\n </div>\n </div>\n </div>\n ))}\n </div>\n </Card>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};","import React, { useState } from 'react';\nimport { cn } from '../../atoms/utils/utils';\nimport { IconBadge } from '../../atoms/composed';\nimport { DataTable, type Column } from '../../atoms/composed/DataTable';\nimport { DataBadge } from '../../atoms/composed/DataBadge';\nimport { Card } from '../../atoms/ui/card';\nimport { Button } from '../../atoms/ui/button';\nimport { Modal } from '../../atoms/composed/Modal';\nimport { FormField } from '../../atoms/composed/FormField';\nimport { EmptyState } from '../../atoms/composed/EmptyState';\nimport { \n Plus, \n Download, \n Filter, \n Edit, \n Trash2, \n Eye, \n Upload,\n RefreshCw\n} from 'lucide-react';\n\nexport interface ResourceSchema {\n /** Field definitions for the resource */\n fields: ResourceField[];\n /** Primary key field name */\n primaryKey: string;\n /** Display name for single resource */\n displayName: string;\n /** Display name for multiple resources */\n displayNamePlural: string;\n}\n\nexport interface ResourceField {\n /** Field name/key */\n name: string;\n /** Display label */\n label: string;\n /** Field type */\n type: 'text' | 'email' | 'number' | 'boolean' | 'date' | 'select' | 'textarea' | 'file';\n /** Whether field is required */\n required?: boolean;\n /** Field validation rules */\n validation?: Record<string, unknown>;\n /** Options for select fields */\n options?: Array<{ value: string; label: string }>;\n /** Whether field is searchable */\n searchable?: boolean;\n /** Whether field should be shown in table */\n showInTable?: boolean;\n /** Column width for table display */\n width?: number;\n /** Custom render function for table cells */\n render?: (value: unknown, item: Record<string, unknown>) => React.ReactNode;\n}\n\nexport interface CRUDPermissions {\n /** Can view resources */\n view: boolean;\n /** Can create new resources */\n create: boolean;\n /** Can edit existing resources */\n edit: boolean;\n /** Can delete resources */\n delete: boolean;\n /** Can export data */\n export: boolean;\n /** Can import data */\n import: boolean;\n /** Can bulk edit */\n bulkEdit: boolean;\n}\n\nexport interface CRUDActions {\n /** Create new resource */\n onCreate?: (data: Record<string, unknown>) => Promise<void>;\n /** Update existing resource */\n onUpdate?: (id: string, data: Record<string, unknown>) => Promise<void>;\n /** Delete resource */\n onDelete?: (id: string) => Promise<void>;\n /** Bulk delete resources */\n onBulkDelete?: (ids: string[]) => Promise<void>;\n /** Export data */\n onExport?: (format: 'csv' | 'xlsx' | 'json') => Promise<void>;\n /** Import data */\n onImport?: (file: File) => Promise<void>;\n /** Refresh data */\n onRefresh?: () => Promise<void>;\n}\n\nexport interface AdminCRUDTemplateProps {\n /** Resource schema definition */\n schema: ResourceSchema;\n /** Current data */\n data: Record<string, unknown>[];\n /** User permissions */\n permissions: CRUDPermissions;\n /** CRUD action handlers */\n actions: CRUDActions;\n /** Whether data is loading */\n isLoading?: boolean;\n /** Filter configuration */\n filterConfig?: {\n activeFilters?: Array<{ key: string; label: string; value: string }>;\n onFilter?: () => void;\n onClearFilters?: () => void;\n };\n /** Additional custom actions */\n customActions?: Array<{\n label: string;\n icon?: React.ReactNode;\n onClick: () => void;\n variant?: 'default' | 'outline' | 'destructive';\n }>;\n /** Additional CSS classes */\n className?: string;\n /** Category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Custom empty state */\n emptyState?: React.ReactNode;\n}\n\nexport const AdminCRUDTemplate: React.FC<AdminCRUDTemplateProps> = ({\n schema,\n data,\n permissions,\n actions,\n isLoading = false,\n filterConfig,\n customActions = [],\n className,\n category = 1,\n emptyState\n}) => {\n const [selectedItems, setSelectedItems] = useState<string[]>([]);\n const [showCreateModal, setShowCreateModal] = useState(false);\n const [showEditModal, setShowEditModal] = useState(false);\n const [editingItem, setEditingItem] = useState<Record<string, unknown> | null>(null);\n const [formData, setFormData] = useState<Record<string, unknown>>({});\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n\n const hasData = data && data.length > 0;\n const hasSelection = selectedItems.length > 0;\n const activeFilterCount = filterConfig?.activeFilters?.length || 0;\n\n // Generate table columns from schema\n const columns: Column<Record<string, unknown>>[] = [\n // Selection column\n {\n key: 'select',\n header: (\n <input\n type=\"checkbox\"\n checked={selectedItems.length > 0 && selectedItems.length === data.length}\n onChange={(e) => {\n if (e.target.checked) {\n setSelectedItems(data.map(item => String(item[schema.primaryKey])));\n } else {\n setSelectedItems([]);\n }\n }}\n className=\"rounded border-input\"\n />\n ),\n cell: (item) => (\n <input\n type=\"checkbox\"\n checked={selectedItems.includes(String(item[schema.primaryKey]))}\n onChange={(e) => {\n const id = String(item[schema.primaryKey]);\n if (e.target.checked) {\n setSelectedItems(prev => [...prev, id]);\n } else {\n setSelectedItems(prev => prev.filter(existingId => existingId !== id));\n }\n }}\n className=\"rounded border-input\"\n />\n ),\n sortable: false,\n width: '50px',\n },\n // Data columns\n ...schema.fields\n .filter(field => field.showInTable !== false)\n .map(field => {\n // Determine column type for automatic badge rendering\n let columnType: 'status' | 'category' | 'default' = 'default';\n if (field.type === 'boolean' || field.name.toLowerCase().includes('status')) {\n columnType = 'status';\n } else if (field.name.toLowerCase().includes('category')) {\n columnType = 'category';\n }\n\n return {\n key: field.name,\n header: field.label,\n type: columnType,\n cell: field.render ? (item: Record<string, unknown>) => field.render!(item[field.name], item) : undefined,\n sortable: true,\n width: field.width ? `${field.width}px` : undefined,\n };\n }),\n // Actions column\n {\n key: 'actions',\n header: 'Actions',\n cell: (item) => (\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleView(item);\n }}\n tooltip=\"View details\"\n >\n <Eye className=\"w-4 h-4\" />\n </Button>\n {permissions.edit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleEdit(item);\n }}\n tooltip=\"Edit\"\n >\n <Edit className=\"w-4 h-4\" />\n </Button>\n )}\n {permissions.delete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(String(item[schema.primaryKey]));\n }}\n tooltip=\"Delete\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </Button>\n )}\n </div>\n ),\n sortable: false,\n width: '120px',\n },\n ];\n\n const handleCreate = () => {\n setFormData({});\n setShowCreateModal(true);\n };\n\n const handleEdit = (item: Record<string, unknown>) => {\n setEditingItem(item);\n setFormData(item);\n setShowEditModal(true);\n };\n\n const handleView = (item: Record<string, unknown>) => {\n // Navigate to detail view - this would be handled by the parent component\n console.log('View item:', item);\n };\n\n const handleDelete = (id: string) => {\n setDeletingId(id);\n setShowDeleteConfirm(true);\n };\n\n const handleBulkDelete = () => {\n if (actions.onBulkDelete) {\n actions.onBulkDelete(selectedItems);\n setSelectedItems([]);\n }\n };\n\n const confirmDelete = async () => {\n if (deletingId && actions.onDelete) {\n await actions.onDelete(deletingId);\n setShowDeleteConfirm(false);\n setDeletingId(null);\n }\n };\n\n const handleSubmit = async (isEdit: boolean) => {\n try {\n if (isEdit && editingItem && actions.onUpdate) {\n await actions.onUpdate(String(editingItem[schema.primaryKey]), formData);\n setShowEditModal(false);\n } else if (!isEdit && actions.onCreate) {\n await actions.onCreate(formData);\n setShowCreateModal(false);\n }\n setFormData({});\n setEditingItem(null);\n } catch (error) {\n console.error('Form submission error:', error);\n }\n };\n\n const renderFormField = (field: ResourceField) => {\n const value = formData[field.name];\n \n return (\n <FormField\n key={field.name}\n label={field.label}\n required={field.required}\n error={undefined} // Add validation error handling here\n >\n {field.type === 'select' ? (\n <select\n value={String(value || '')}\n onChange={(e) => setFormData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className=\"w-full px-3 py-2 border border-input rounded-md\"\n >\n <option value=\"\">Select {field.label}</option>\n {field.options?.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n ) : field.type === 'textarea' ? (\n <textarea\n value={String(value || '')}\n onChange={(e) => setFormData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className=\"w-full px-3 py-2 border border-input rounded-md\"\n rows={3}\n />\n ) : field.type === 'boolean' ? (\n <input\n type=\"checkbox\"\n checked={Boolean(value)}\n onChange={(e) => setFormData(prev => ({ ...prev, [field.name]: e.target.checked }))}\n className=\"rounded border-input\"\n />\n ) : (\n <input\n type={field.type === 'email' ? 'email' : field.type === 'number' ? 'number' : field.type === 'date' ? 'date' : 'text'}\n value={String(value || '')}\n onChange={(e) => setFormData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className=\"w-full px-3 py-2 border border-input rounded-md\"\n />\n )}\n </FormField>\n );\n };\n\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"bg-gradient-to-br from-muted/50 via-muted/30 to-background border-b border-border/50\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-4\">\n <IconBadge \n variant=\"category\" \n category={category} \n size=\"lg\" \n icon={<Plus className=\"w-5 h-5\" />}\n />\n <div>\n <h1 className=\"text-4xl font-bold text-foreground\">{schema.displayNamePlural}</h1>\n <p className=\"text-lg text-muted-foreground mt-2\">\n Manage {schema.displayNamePlural.toLowerCase()} with comprehensive CRUD operations\n </p>\n </div>\n </div>\n \n <div className=\"flex items-center gap-2\">\n {actions.onRefresh && (\n <Button\n variant=\"outline\"\n onClick={actions.onRefresh}\n disabled={isLoading}\n >\n <RefreshCw className={cn(\"w-4 h-4 mr-2\", isLoading && \"animate-spin\")} />\n Refresh\n </Button>\n )}\n \n {permissions.create && (\n <Button\n onClick={handleCreate}\n variant=\"default\"\n >\n <Plus className=\"w-4 h-4 mr-2\" />\n Create {schema.displayName}\n </Button>\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Controls Section */}\n <div className=\"flex-shrink-0 border-b border-border bg-muted/30\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-4\">\n <div className=\"flex items-center justify-between\">\n {/* Left side - Filters */}\n <div className=\"flex items-center gap-4\">\n {filterConfig && (\n <Button\n variant=\"outline\"\n onClick={filterConfig.onFilter}\n className=\"relative\"\n >\n <Filter className=\"w-4 h-4 mr-2\" />\n Filters\n {activeFilterCount > 0 && (\n <span className=\"absolute -top-2 -right-2 min-w-5 h-5 rounded-full text-xs bg-destructive text-destructive-foreground flex items-center justify-center\">\n {activeFilterCount}\n </span>\n )}\n </Button>\n )}\n\n {/* Active Filters */}\n {filterConfig?.activeFilters && filterConfig.activeFilters.length > 0 && (\n <div className=\"flex items-center gap-2\">\n {filterConfig.activeFilters.map((filter, index) => (\n <DataBadge key={index} variant=\"category\" category={category} size=\"sm\">\n {filter.label}: {filter.value}\n </DataBadge>\n ))}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={filterConfig.onClearFilters}\n >\n Clear all\n </Button>\n </div>\n )}\n </div>\n\n {/* Right side - Actions */}\n <div className=\"flex items-center gap-2\">\n {/* Bulk actions */}\n {hasSelection && (\n <div className=\"flex items-center gap-2 mr-4\">\n <span className=\"text-sm text-muted-foreground\">\n {selectedItems.length} selected\n </span>\n {permissions.delete && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleBulkDelete}\n >\n <Trash2 className=\"w-4 h-4 mr-2\" />\n Delete\n </Button>\n )}\n </div>\n )}\n\n {/* Export/Import */}\n {permissions.export && (\n <Button\n variant=\"outline\"\n onClick={() => actions.onExport?.('csv')}\n >\n <Download className=\"w-4 h-4 mr-2\" />\n Export\n </Button>\n )}\n\n {permissions.import && (\n <Button\n variant=\"outline\"\n onClick={() => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.csv,.xlsx,.json';\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file && actions.onImport) {\n actions.onImport(file);\n }\n };\n input.click();\n }}\n >\n <Upload className=\"w-4 h-4 mr-2\" />\n Import\n </Button>\n )}\n\n {/* Custom Actions */}\n {customActions.map((action, index) => (\n <Button\n key={index}\n variant={action.variant || 'outline'}\n onClick={action.onClick}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8\">\n {hasData ? (\n <Card className=\"p-6\" category={category}>\n <DataTable\n data={data}\n columns={columns}\n searchPlaceholder={`Search ${schema.displayNamePlural.toLowerCase()}...`}\n isLoading={isLoading}\n hover={true}\n showSearch={true}\n showPagination={true}\n pageSize={10}\n onRowClick={permissions.view ? handleView : undefined}\n />\n </Card>\n ) : (\n <div className=\"flex items-center justify-center min-h-96\">\n {emptyState || (\n <EmptyState\n title={`No ${schema.displayNamePlural.toLowerCase()} found`}\n description={`Get started by creating your first ${schema.displayName.toLowerCase()}.`}\n action={\n permissions.create ? {\n label: `Create ${schema.displayName}`,\n onClick: handleCreate\n } : undefined\n }\n />\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Create Modal */}\n <Modal\n isOpen={showCreateModal}\n onClose={() => setShowCreateModal(false)}\n title={`Create ${schema.displayName}`}\n size=\"lg\"\n >\n <div className=\"space-y-4\">\n {schema.fields.map(renderFormField)}\n \n <div className=\"flex justify-end gap-2 pt-4\">\n <Button\n variant=\"outline\"\n onClick={() => setShowCreateModal(false)}\n >\n Cancel\n </Button>\n <Button\n onClick={() => handleSubmit(false)}\n variant=\"default\"\n >\n Create\n </Button>\n </div>\n </div>\n </Modal>\n\n {/* Edit Modal */}\n <Modal\n isOpen={showEditModal}\n onClose={() => setShowEditModal(false)}\n title={`Edit ${schema.displayName}`}\n size=\"lg\"\n >\n <div className=\"space-y-4\">\n {schema.fields.map(renderFormField)}\n \n <div className=\"flex justify-end gap-2 pt-4\">\n <Button\n variant=\"outline\"\n onClick={() => setShowEditModal(false)}\n >\n Cancel\n </Button>\n <Button\n onClick={() => handleSubmit(true)}\n variant=\"default\"\n >\n Update\n </Button>\n </div>\n </div>\n </Modal>\n\n {/* Delete Confirmation Modal */}\n <Modal\n isOpen={showDeleteConfirm}\n onClose={() => setShowDeleteConfirm(false)}\n title=\"Confirm Delete\"\n size=\"sm\"\n >\n <div className=\"space-y-4\">\n <p>Are you sure you want to delete this {schema.displayName.toLowerCase()}? This action cannot be undone.</p>\n \n <div className=\"flex justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => setShowDeleteConfirm(false)}\n >\n Cancel\n </Button>\n <Button\n variant=\"destructive\"\n onClick={confirmDelete}\n >\n Delete\n </Button>\n </div>\n </div>\n </Modal>\n </div>\n );\n};","import React, { useState } from 'react';\nimport { cn } from '../../atoms/utils/utils';\nimport { SectionHeader } from '../../molecules/layout/SectionHeader';\nimport { Card } from '../../atoms/ui/card';\nimport { Button } from '../../atoms/ui/button';\nimport { DataBadge } from '../../atoms/composed/DataBadge';\nimport { UserAvatar } from '../../atoms/composed/UserAvatar';\nimport { DataTable, type Column } from '../../atoms/composed/DataTable';\nimport { \n ArrowLeft, \n Edit, \n Copy, \n ExternalLink,\n History,\n Activity,\n FileText,\n Save,\n X\n} from 'lucide-react';\n\nexport interface TabConfig {\n /** Tab ID */\n id: string;\n /** Tab label */\n label: string;\n /** Tab icon */\n icon?: React.ReactNode;\n /** Tab content */\n content: React.ReactNode;\n /** Whether tab is disabled */\n disabled?: boolean;\n /** Badge text for tab */\n badge?: string | number;\n}\n\nexport interface ActionConfig {\n /** Action ID */\n id: string;\n /** Action label */\n label: string;\n /** Action icon */\n icon?: React.ReactNode;\n /** Action variant */\n variant?: 'default' | 'outline' | 'destructive' | 'secondary';\n /** Action handler */\n onClick: () => void;\n /** Whether action is disabled */\n disabled?: boolean;\n /** Action permission required */\n permission?: string;\n}\n\nexport interface FieldSection {\n /** Section title */\n title: string;\n /** Section description */\n description?: string;\n /** Section fields */\n fields: DetailField[];\n /** Section category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Whether section is collapsible */\n collapsible?: boolean;\n /** Whether section is initially collapsed */\n defaultCollapsed?: boolean;\n}\n\nexport interface DetailField {\n /** Field key */\n key: string;\n /** Field label */\n label: string;\n /** Field type for rendering */\n type?: 'text' | 'email' | 'phone' | 'url' | 'date' | 'datetime' | 'boolean' | 'badge' | 'avatar' | 'json' | 'custom';\n /** Custom render function */\n render?: (value: unknown, data: Record<string, unknown>) => React.ReactNode;\n /** Whether field is editable inline */\n editable?: boolean;\n /** Field validation for editing */\n validation?: Record<string, unknown>;\n /** Copy to clipboard button */\n copyable?: boolean;\n}\n\nexport interface RelatedData {\n /** Related data title */\n title: string;\n /** Related data description */\n description?: string;\n /** Related data items */\n data: Record<string, unknown>[];\n /** Columns for related data table */\n columns: Column<Record<string, unknown>>[];\n /** Actions for related data */\n actions?: ActionConfig[];\n /** Whether to show pagination */\n showPagination?: boolean;\n /** Category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport interface AuditEntry {\n /** Entry ID */\n id: string;\n /** Action performed */\n action: string;\n /** User who performed action */\n user: string;\n /** Timestamp */\n timestamp: Date;\n /** Fields changed */\n changes?: Array<{\n field: string;\n oldValue?: unknown;\n newValue?: unknown;\n }>;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface AdminDetailTemplateProps {\n /** Resource title */\n title: string;\n /** Resource subtitle */\n subtitle?: string;\n /** Resource type */\n resourceType: string;\n /** Main resource data */\n data: Record<string, unknown>;\n /** Field sections to display */\n sections: FieldSection[];\n /** Tab configuration */\n tabs?: TabConfig[];\n /** Available actions */\n actions?: ActionConfig[];\n /** Related data sections */\n relatedData?: RelatedData[];\n /** Audit trail */\n auditTrail?: AuditEntry[];\n /** Back navigation handler */\n onBack?: () => void;\n /** Data update handler */\n onUpdate?: (field: string, value: unknown) => Promise<void>;\n /** Whether data is loading */\n isLoading?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Custom sidebar content */\n sidebar?: React.ReactNode;\n /** Whether to show audit trail */\n showAuditTrail?: boolean;\n}\n\nexport const AdminDetailTemplate: React.FC<AdminDetailTemplateProps> = ({\n title,\n subtitle,\n resourceType,\n data,\n sections,\n tabs = [],\n actions = [],\n relatedData = [],\n auditTrail = [],\n onBack,\n onUpdate,\n isLoading = false,\n className,\n category = 1,\n sidebar,\n showAuditTrail = true\n}) => {\n const [activeTab, setActiveTab] = useState(tabs[0]?.id || 'overview');\n const [editingField, setEditingField] = useState<string | null>(null);\n const [editValue, setEditValue] = useState<unknown>('');\n\n const handleEdit = (field: DetailField, currentValue: unknown) => {\n setEditingField(field.key);\n setEditValue(currentValue);\n };\n\n const handleSaveEdit = async () => {\n if (editingField && onUpdate) {\n try {\n await onUpdate(editingField, editValue);\n setEditingField(null);\n setEditValue('');\n } catch (error) {\n console.error('Update failed:', error);\n }\n }\n };\n\n const handleCancelEdit = () => {\n setEditingField(null);\n setEditValue('');\n };\n\n const copyToClipboard = (value: string) => {\n navigator.clipboard.writeText(value);\n // You could show a toast notification here\n };\n\n const renderFieldValue = (field: DetailField, value: unknown) => {\n // If currently editing this field\n if (editingField === field.key) {\n return (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={String(editValue)}\n onChange={(e) => setEditValue(e.target.value)}\n className=\"flex-1 px-2 py-1 text-sm border border-input rounded\"\n autoFocus\n />\n <Button size=\"sm\" onClick={handleSaveEdit}>\n <Save className=\"w-3 h-3\" />\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={handleCancelEdit}>\n <X className=\"w-3 h-3\" />\n </Button>\n </div>\n );\n }\n\n // Custom render function\n if (field.render) {\n return field.render(value, data);\n }\n\n // Default rendering based on type\n const stringValue = String(value || '');\n let displayValue: React.ReactNode;\n \n switch (field.type) {\n case 'email':\n displayValue = value ? (\n <a href={`mailto:${stringValue}`} className=\"text-category-1 hover:underline\">\n {stringValue}\n </a>\n ) : '';\n break;\n case 'phone':\n displayValue = value ? (\n <a href={`tel:${stringValue}`} className=\"text-category-2 hover:underline\">\n {stringValue}\n </a>\n ) : '';\n break;\n case 'url':\n displayValue = value ? (\n <a href={stringValue} target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-category-3 hover:underline inline-flex items-center\">\n {stringValue} <ExternalLink className=\"w-3 h-3 ml-1\" />\n </a>\n ) : '';\n break;\n case 'date':\n displayValue = value ? new Date(stringValue).toLocaleDateString() : '';\n break;\n case 'datetime':\n displayValue = value ? new Date(stringValue).toLocaleString() : '';\n break;\n case 'boolean':\n displayValue = (\n <DataBadge \n variant=\"status\" \n status={value ? 'success' : 'neutral'}\n size=\"sm\"\n >\n {value ? 'Yes' : 'No'}\n </DataBadge>\n );\n break;\n case 'badge':\n displayValue = <DataBadge variant=\"category\" category={1} size=\"sm\">{stringValue}</DataBadge>;\n break;\n case 'avatar':\n displayValue = <UserAvatar />;\n break;\n case 'json':\n displayValue = (\n <pre className=\"text-xs bg-muted p-2 rounded-md overflow-auto max-w-md\">\n {JSON.stringify(value, null, 2)}\n </pre>\n );\n break;\n default:\n displayValue = stringValue;\n break;\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <span>{displayValue as React.ReactNode}</span>\n {field.copyable && value != null && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => copyToClipboard(stringValue)}\n className=\"h-6 w-6 p-0\"\n >\n <Copy className=\"w-3 h-3\" />\n </Button>\n )}\n {field.editable && onUpdate && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => handleEdit(field, value)}\n className=\"h-6 w-6 p-0\"\n >\n <Edit className=\"w-3 h-3\" />\n </Button>\n )}\n </div>\n );\n };\n\n const renderSection = (section: FieldSection) => (\n <Card key={section.title} className=\"p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-foreground\">{section.title}</h3>\n {section.description && (\n <p className=\"text-sm text-muted-foreground mt-1\">{section.description}</p>\n )}\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {section.fields.map((field) => (\n <div key={field.key} className=\"space-y-1\">\n <label className=\"text-sm font-medium text-muted-foreground\">\n {field.label}\n </label>\n <div className=\"text-sm text-foreground\">\n {renderFieldValue(field, data[field.key])}\n </div>\n </div>\n ))}\n </div>\n </Card>\n );\n\n const renderAuditTrail = () => (\n <Card className=\"p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold flex items-center\">\n <History className=\"w-5 h-5 mr-2\" />\n Audit Trail\n </h3>\n </div>\n <div className=\"space-y-4\">\n {auditTrail.map((entry) => (\n <div key={entry.id} className=\"flex items-start space-x-3 pb-4 border-b border-border last:border-b-0\">\n <div className=\"w-8 h-8 rounded-full bg-muted flex items-center justify-center flex-shrink-0\">\n <Activity className=\"w-4 h-4 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-medium text-foreground\">\n {entry.action}\n </p>\n <span className=\"text-xs text-muted-foreground\">\n {entry.timestamp.toLocaleString()}\n </span>\n </div>\n <p className=\"text-xs text-muted-foreground mt-1\">\n by {entry.user}\n </p>\n {entry.changes && entry.changes.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n {entry.changes.map((change, index) => (\n <div key={index} className=\"text-xs bg-muted p-2 rounded-md\">\n <span className=\"font-medium\">{change.field}:</span>{' '}\n <span className=\"text-category-8\">{String(change.oldValue || 'null')}</span>{' '}\n →{' '}\n <span className=\"text-category-2\">{String(change.newValue || 'null')}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n </Card>\n );\n\n const renderRelatedData = (related: RelatedData) => (\n <Card key={related.title} className=\"p-6\">\n <div className=\"mb-4 flex items-center justify-between\">\n <div>\n <h3 className=\"text-lg font-semibold\">{related.title}</h3>\n {related.description && (\n <p className=\"text-sm text-muted-foreground mt-1\">{related.description}</p>\n )}\n </div>\n {related.actions && related.actions.length > 0 && (\n <div className=\"flex gap-2\">\n {related.actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant || 'outline'}\n size=\"sm\"\n onClick={action.onClick}\n disabled={action.disabled}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n <DataTable\n data={related.data}\n columns={related.columns}\n isLoading={isLoading}\n hover\n />\n </Card>\n );\n\n // Build tabs\n const allTabs = [\n {\n id: 'overview',\n label: 'Overview',\n icon: <FileText className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-6\">\n {sections.map(renderSection)}\n </div>\n ),\n },\n ...tabs,\n ...(relatedData.length > 0 ? [{\n id: 'related',\n label: 'Related Data',\n icon: <Activity className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-6\">\n {relatedData.map(renderRelatedData)}\n </div>\n ),\n }] : []),\n ...(showAuditTrail && auditTrail.length > 0 ? [{\n id: 'audit',\n label: 'Audit Trail',\n icon: <History className=\"w-4 h-4\" />,\n badge: auditTrail.length,\n content: renderAuditTrail(),\n }] : []),\n ];\n\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"flex-shrink-0 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n {onBack && (\n <Button\n variant=\"ghost\"\n onClick={onBack}\n className=\"mb-4 -ml-3\"\n >\n <ArrowLeft className=\"w-4 h-4 mr-2\" />\n Back to {resourceType}\n </Button>\n )}\n <SectionHeader\n title={title}\n subtitle={subtitle}\n size=\"lg\"\n className=\"text-left\"\n />\n </div>\n \n {actions.length > 0 && (\n <div className=\"ml-6 flex-shrink-0 flex items-center gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant || 'outline'}\n onClick={action.onClick}\n disabled={action.disabled}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className={cn(\n 'grid gap-6',\n sidebar ? 'grid-cols-1 lg:grid-cols-4' : 'grid-cols-1'\n )}>\n \n {/* Main Content */}\n <div className={sidebar ? 'lg:col-span-3' : 'col-span-1'}>\n {allTabs.length > 1 ? (\n <div className=\"space-y-6\">\n {/* Tab Navigation */}\n <div className=\"border-b border-border\">\n <nav className=\"-mb-px flex space-x-8\">\n {allTabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'py-2 px-1 border-b-2 font-medium text-sm whitespace-nowrap',\n activeTab === tab.id\n ? `border-category-${category} text-category-${category}`\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border'\n )}\n >\n <div className=\"flex items-center gap-2\">\n {tab.icon}\n {tab.label}\n {tab.badge && (\n <span className={cn(\n 'ml-2 inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium',\n `bg-category-${category}/20 text-category-${category}`\n )}>\n {tab.badge}\n </span>\n )}\n </div>\n </button>\n ))}\n </nav>\n </div>\n\n {/* Tab Content */}\n <div>\n {allTabs.find(tab => tab.id === activeTab)?.content}\n </div>\n </div>\n ) : (\n allTabs[0]?.content\n )}\n </div>\n\n {/* Sidebar */}\n {sidebar && (\n <div className=\"lg:col-span-1\">\n {sidebar}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};","import React from 'react'\nimport type { ReactNode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { BrowserRouter, Routes, Route } from 'react-router-dom'\nimport { AuthProvider } from '../features/auth'\nimport { SidebarProvider, NavigationProvider } from '../molecules/layout'\nimport { AppLayout } from '../molecules/layout'\nimport { DashboardTemplate } from './DashboardTemplate'\nimport type { AuthConfig, NavigationConfig } from '../atoms/types'\n\n// App configuration interface\nexport interface AppConfig {\n title: string\n description?: string\n version?: string\n enableAuth?: boolean\n enableQuery?: boolean\n enableTheming?: boolean\n enableRouting?: boolean\n apiUrl?: string\n apiTimeout?: number\n theme?: string\n darkMode?: boolean\n auth?: AuthConfig\n navigation?: NavigationConfig\n customProviders?: React.ComponentType<{ children: ReactNode }>[]\n}\n\n// App instance interface\nexport interface AppInstance {\n render: () => ReactNode\n addRoutes: (path: string, component: ReactNode) => void\n mount: (elementId?: string) => void\n}\n\n// Main app factory function\nexport function createReactApp(config: AppConfig | string): AppInstance {\n // Handle simple string config\n const appConfig: AppConfig = typeof config === 'string' \n ? { title: config }\n : config\n\n // Set defaults\n const {\n title,\n description = `${title} Application`,\n version = '1.0.0',\n enableAuth = true,\n enableQuery = true,\n enableRouting = true,\n auth,\n navigation,\n customProviders = []\n } = appConfig\n\n // Initialize query client\n const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n refetchOnWindowFocus: false,\n staleTime: 5 * 60 * 1000, // 5 minutes\n },\n },\n })\n\n // Store routes\n const routes: Array<{ path: string; component: ReactNode }> = []\n\n // Default home page\n const DefaultHome = () => (\n <DashboardTemplate title={title} description={description}>\n <div className=\"flex flex-col items-center justify-center min-h-[400px] text-center\">\n <h1 className=\"text-4xl font-bold text-gray-900 mb-4\">🌿 {title}</h1>\n <p className=\"text-lg text-gray-600 mb-6\">{description}</p>\n <div className=\"space-y-2 text-sm text-gray-500\">\n <p>✅ Template integration successful</p>\n <p>🔧 Version: {version}</p>\n <p>🚀 Ready for development</p>\n </div>\n </div>\n </DashboardTemplate>\n )\n\n // Build provider tree\n const createProviderTree = (children: ReactNode): ReactNode => {\n let tree = children\n\n // Wrap with custom providers (in reverse order)\n customProviders.reverse().forEach((Provider) => {\n tree = <Provider key={Provider.name}>{tree}</Provider>\n })\n\n // Wrap with layout providers\n if (enableRouting) {\n tree = (\n <NavigationProvider initialNavigation={navigation}>\n <SidebarProvider>\n {tree}\n </SidebarProvider>\n </NavigationProvider>\n )\n }\n\n // Wrap with auth provider\n if (enableAuth) {\n tree = <AuthProvider config={auth}>{tree}</AuthProvider>\n }\n\n // Wrap with query provider\n if (enableQuery) {\n tree = (\n <QueryClientProvider client={queryClient}>\n {tree}\n {import.meta.env.DEV && (\n import('@tanstack/react-query-devtools').then(({ ReactQueryDevtools }) => (\n <ReactQueryDevtools initialIsOpen={false} />\n ))\n )}\n </QueryClientProvider>\n )\n }\n\n // Wrap with router\n if (enableRouting) {\n tree = <BrowserRouter>{tree}</BrowserRouter>\n }\n\n return tree\n }\n\n // Create app instance\n const appInstance: AppInstance = {\n addRoutes(path: string, component: ReactNode) {\n routes.push({ path, component })\n },\n\n render() {\n const AppContent = () => (\n <Routes>\n <Route path=\"/\" element={<AppLayout />}>\n <Route index element={<DefaultHome />} />\n {routes.map(({ path, component }, index) => (\n <Route key={index} path={path} element={component} />\n ))}\n </Route>\n </Routes>\n )\n\n return createProviderTree(<AppContent />)\n },\n\n mount(elementId = 'root') {\n const element = document.getElementById(elementId)\n if (!element) {\n throw new Error(`Element with id \"${elementId}\" not found`)\n }\n\n const root = createRoot(element)\n root.render(\n <React.StrictMode>\n {this.render()}\n </React.StrictMode>\n )\n }\n }\n\n return appInstance\n}\n\n// Convenience function for simple apps\nexport function createSimpleApp(title: string): AppInstance {\n return createReactApp({ title })\n}\n\n","import React, { useState } from 'react';\nimport { Card } from '../../atoms/ui/card';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../../atoms/ui/Tabs';\nimport { DataBadge, StatCard, DetailedCard, DataTable, EmptyState, ColorSwatch, IconBadge, Accordion, ToastContainer, FileUpload, DateTimePicker, Chart } from '../../atoms/composed';\nimport { Badge } from '../../atoms/ui/Badge';\nimport { Switch } from '../../atoms/ui/Switch';\nimport { ShowcaseSection } from '../../molecules/layout';\nimport { Pagination, NavMenu } from '../../molecules/navigation';\nimport { FormGroup, SearchInput } from '../../molecules/forms';\nimport { Alert, ProgressBar, FormField, Breadcrumb } from '../../atoms/composed';\nimport { Input } from '../../atoms/ui/input';\nimport { Label } from '../../atoms/ui/label';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../atoms/ui/table';\nimport { Spinner } from '../../atoms/ui/spinner';\nimport { Skeleton } from '../../atoms/ui/skeleton';\nimport { Button } from '../../atoms/ui/button';\nimport { \n Database, \n TrendingUp, \n Users, \n Activity,\n CheckCircle,\n AlertTriangle,\n XCircle,\n Info,\n Clock,\n Layers,\n Palette,\n Grid3X3,\n Home,\n Settings,\n FileText,\n ChevronRight\n} from 'lucide-react';\n\ninterface SampleDataItem extends Record<string, unknown> {\n id: number;\n name: string;\n status: 'success' | 'warning' | 'error';\n category: string;\n runs: number;\n}\n\nexport const ComponentShowcasePage: React.FC = () => {\n const [activeSection, setActiveSection] = useState('badges');\n const [showCode, setShowCode] = useState(false);\n const [toasts, setToasts] = useState<Array<{ id: string; status: 'success' | 'warning' | 'error' | 'info'; title: string; message: string }>>([]);\n const [selectedDate, setSelectedDate] = useState<Date | undefined>(undefined);\n const [dateRange, setDateRange] = useState<{ start: Date | undefined; end: Date | undefined }>({ start: undefined, end: undefined });\n\n // Sample data for DataTable\n const sampleData: SampleDataItem[] = [\n { id: 1, name: 'Customer Analysis', status: 'success', category: 'Analytics', runs: 24 },\n { id: 2, name: 'Revenue Model', status: 'warning', category: 'Finance', runs: 18 },\n { id: 3, name: 'User Behavior', status: 'error', category: 'Product', runs: 31 },\n { id: 4, name: 'Sales Forecast', status: 'success', category: 'Sales', runs: 12 }\n ];\n\n const tableColumns = [\n { key: 'name', header: 'Model Name' },\n { key: 'status', header: 'Status', type: 'status' as const },\n { key: 'category', header: 'Category', type: 'category' as const },\n { key: 'runs', header: 'Runs' }\n ];\n\n return (\n <div className=\"min-h-screen bg-background\">\n {/* Hero Section */}\n <div className=\"bg-gradient-to-br from-category-1/5 via-category-2/5 to-category-3/5 border-b border-border/50\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-4\">\n <IconBadge \n variant=\"category\" \n category={1} \n size=\"lg\" \n icon={<Grid3X3 className=\"w-6 h-6\" />}\n />\n <div>\n <h1 className=\"text-4xl font-bold text-foreground\">Component Showcase</h1>\n <p className=\"text-lg text-muted-foreground mt-2\">\n Explore our comprehensive design system and component library built for data analytics interfaces\n </p>\n </div>\n </div>\n \n <div className=\"flex items-center space-x-3\">\n <div className=\"flex items-center gap-3 bg-card/80 backdrop-blur-sm border border-border/50 rounded px-3 py-2\">\n <Layers className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">Show Code</span>\n <Switch\n checked={showCode}\n onCheckedChange={setShowCode}\n />\n </div>\n </div>\n </div>\n \n {/* Quick Stats */}\n <div className=\"mt-8 grid grid-cols-1 md:grid-cols-4 gap-4\">\n <StatCard\n title=\"Components\"\n value=\"20+\"\n subtitle=\"Design system components\"\n category={1}\n icon={<Database className=\"w-4 h-4\" />}\n />\n <StatCard\n title=\"Colors\"\n value=\"20+\"\n subtitle=\"System colors & variants\"\n category={2}\n icon={<Palette className=\"w-4 h-4\" />}\n />\n <StatCard\n title=\"Variants\"\n value=\"50+\"\n subtitle=\"Component variations\"\n category={3}\n icon={<CheckCircle className=\"w-4 h-4\" />}\n />\n <StatCard\n title=\"Interactive\"\n value=\"100%\"\n subtitle=\"Fully interactive components\"\n category={4}\n icon={<Activity className=\"w-4 h-4\" />}\n />\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8\">\n <div className=\"space-y-8\">\n\n {/* Navigation */}\n <Tabs value={activeSection} onValueChange={setActiveSection} className=\"w-full\">\n {\n <TabsList className=\"grid w-full grid-cols-10 lg:w-fit lg:mx-auto mb-8\">\n <TabsTrigger value=\"badges\" category={1}>Badges</TabsTrigger>\n <TabsTrigger value=\"cards\" category={2}>Cards</TabsTrigger>\n <TabsTrigger value=\"tables\" category={3}>Data</TabsTrigger>\n <TabsTrigger value=\"forms\" category={4}>Forms</TabsTrigger>\n <TabsTrigger value=\"navigation\" category={5}>Navigation</TabsTrigger>\n <TabsTrigger value=\"feedback\" category={6}>Feedback</TabsTrigger>\n <TabsTrigger value=\"states\" category={7}>States</TabsTrigger>\n <TabsTrigger value=\"palettes\" category={8}>Palettes</TabsTrigger>\n <TabsTrigger value=\"typography\" category={1}>Typography</TabsTrigger>\n <TabsTrigger value=\"debug\" category={2}>Debug</TabsTrigger>\n </TabsList>\n }\n\n {/* Badges Section */}\n <TabsContent value=\"badges\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Badge Components</h2>\n <p className=\"text-muted-foreground\">\n From base UI badges to semantic data badges with design tokens and theming.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Badge Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Badge Component\"\n description=\"Foundation UI badge with default variants and sizes\"\n badge={{ text: \"UI Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Variants</h4>\n <div className=\"flex flex-wrap gap-2\">\n <Badge variant=\"default\">Default</Badge>\n <Badge variant=\"secondary\">Secondary</Badge>\n <Badge variant=\"destructive\">Destructive</Badge>\n <Badge variant=\"outline\">Outline</Badge>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Sizes</h4>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge size=\"sm\">Small</Badge>\n <Badge size=\"md\">Medium</Badge>\n <Badge size=\"lg\">Large</Badge>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-3 p-3 bg-muted/50 rounded text-sm font-mono\">\n <code>{`<Badge variant=\"default\">Default</Badge>\n<Badge variant=\"secondary\">Secondary</Badge>`}</code>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DataBadge - Category */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"DataBadge with Category Theming\"\n description=\"Extended badge component using design tokens for data categorization\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Category Colors (Design Tokens)</h4>\n <div className=\"flex flex-wrap gap-2\">\n {[1, 2, 3, 4, 5, 6, 7, 8].map(category => (\n <DataBadge key={category} variant=\"category\" category={category as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8}>\n Category {category}\n </DataBadge>\n ))}\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Sizes & Interactive States</h4>\n <div className=\"flex flex-wrap items-center gap-2\">\n <DataBadge variant=\"category\" category={1} size=\"sm\">Small</DataBadge>\n <DataBadge variant=\"category\" category={2} size=\"md\">Medium</DataBadge>\n <DataBadge variant=\"category\" category={3} size=\"lg\">Large</DataBadge>\n <DataBadge variant=\"category\" category={4} interactive onClick={() => alert('Interactive badge clicked!')}>\n Interactive (Click me)\n </DataBadge>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-3 p-3 bg-muted/50 rounded text-sm font-mono\">\n <code>{`<DataBadge variant=\"category\" category={1}>\n Category 1\n</DataBadge>`}</code>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DataBadge - Status */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"DataBadge with Status Theming\"\n description=\"Semantic status indicators using design system colors\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Status Variants (Semantic Colors)</h4>\n <div className=\"flex flex-wrap gap-2\">\n <DataBadge variant=\"status\" status=\"success\">\n <CheckCircle className=\"w-3 h-3 mr-1\" />\n Success\n </DataBadge>\n <DataBadge variant=\"status\" status=\"warning\">\n <AlertTriangle className=\"w-3 h-3 mr-1\" />\n Warning\n </DataBadge>\n <DataBadge variant=\"status\" status=\"error\">\n <XCircle className=\"w-3 h-3 mr-1\" />\n Error\n </DataBadge>\n <DataBadge variant=\"status\" status=\"info\">\n <Info className=\"w-3 h-3 mr-1\" />\n Info\n </DataBadge>\n <DataBadge variant=\"status\" status=\"neutral\">\n <Clock className=\"w-3 h-3 mr-1\" />\n Neutral\n </DataBadge>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<DataBadge variant=\"status\" status=\"success\">Success</DataBadge>\n<DataBadge variant=\"status\" status=\"warning\">Warning</DataBadge>\n<DataBadge variant=\"status\" status=\"error\">Error</DataBadge>\n<DataBadge variant=\"status\" status=\"info\">Info</DataBadge>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Token Usage Example */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Design Token Usage\"\n description=\"How components leverage design tokens for consistent theming\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">CSS Variables Applied</h4>\n <div className=\"space-y-2 text-xs font-mono\">\n <div className=\"p-2 bg-category-1/10 text-category-1 rounded border border-category-1/20\">\n --category-1: {getComputedStyle(document.documentElement).getPropertyValue('--category-1') || '217 91% 60%'}\n </div>\n <div className=\"p-2 bg-status-success/10 text-status-success rounded border border-status-success/20\">\n --status-success: {getComputedStyle(document.documentElement).getPropertyValue('--status-success') || '142 76% 36%'}\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Component Classes</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>.badge-category-1</code> uses <code>var(--category-1)</code>\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>.status-success</code> uses <code>var(--status-success)</code>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Cards Section */}\n <TabsContent value=\"cards\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Card Components</h2>\n <p className=\"text-muted-foreground\">\n From base cards to specialized data visualization cards with metrics and analytics.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Card Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Card Component\"\n description=\"Foundation card with optional category theming\"\n badge={{ text: \"UI Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-3 gap-4\">\n <Card className=\"p-4\">\n <h4 className=\"font-medium mb-2\">Basic Card</h4>\n <p className=\"text-sm text-muted-foreground\">Standard card with default styling</p>\n </Card>\n \n <Card className=\"p-4\" category={2}>\n <h4 className=\"font-medium mb-2\">Category Card</h4>\n <p className=\"text-sm text-muted-foreground\">Card with category color accent</p>\n </Card>\n \n <Card className=\"p-4\" category={4}>\n <h4 className=\"font-medium mb-2\">Themed Card</h4>\n <p className=\"text-sm text-muted-foreground\">Using design token theming</p>\n </Card>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>\n {`<Card category={2}>Card with category theming</Card>`}\n </code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* StatCard Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"StatCard Component\"\n description=\"Specialized card for displaying key metrics with trends\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-4\">\n <StatCard\n title=\"Total Models\"\n value=\"1,234\"\n subtitle=\"Active dbt models\"\n category={1}\n icon={<Database className=\"w-5 h-5\" />}\n trend={{ value: 12.5, label: \"vs last month\" }}\n />\n <StatCard\n title=\"Success Rate\"\n value=\"99.2%\"\n subtitle=\"Test pass rate\"\n category={2}\n icon={<CheckCircle className=\"w-5 h-5\" />}\n trend={{ value: 2.1, label: \"vs last week\" }}\n />\n <StatCard\n title=\"Active Users\"\n value=\"567\"\n subtitle=\"Monthly active users\"\n category={3}\n icon={<Users className=\"w-5 h-5\" />}\n trend={{ value: -3.2, label: \"vs last month\" }}\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<StatCard\n title=\"Total Models\"\n value=\"1,234\"\n subtitle=\"Active dbt models\"\n category={1}\n icon={<Database />}\n trend={{ value: 12.5, label: \"vs last month\" }}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DetailedCard Component */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"DetailedCard Component\"\n description=\"Rich information card with multiple metrics and interactive elements\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 3 }}\n >\n <DetailedCard\n title=\"Customer Analytics Model\"\n subtitle=\"Production Model\"\n description=\"Advanced analytics model for customer behavior tracking and segmentation.\"\n category={1}\n icon={<Database className=\"w-5 h-5\" />}\n primaryMetric={{\n label: \"Success Rate\",\n value: \"98.7%\",\n trend: { value: 5.2, label: \"vs last week\" }\n }}\n secondaryMetrics={[\n { label: \"Daily Runs\", value: \"24\", status: \"success\" },\n { label: \"Avg Runtime\", value: \"2.4min\", status: \"info\" },\n { label: \"Data Quality\", value: \"95%\", status: \"warning\" },\n { label: \"Test Coverage\", value: \"87%\", status: \"success\" }\n ]}\n tags={[\n { label: \"Production\", status: \"success\" },\n { label: \"Analytics\", category: 1 },\n { label: \"Customer Data\", category: 3 }\n ]}\n onClick={() => alert('Model details clicked!')}\n />\n </ShowcaseSection>\n </Card>\n\n {/* Card Design Tokens */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Card Theming & Composition\"\n description=\"How cards leverage design tokens and compose with other components\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Component Hierarchy</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded flex items-center gap-2\">\n <span className=\"font-mono\">Card</span>\n <span className=\"text-muted-foreground\">→ Base container</span>\n </div>\n <div className=\"p-2 bg-muted rounded flex items-center gap-2 ml-4\">\n <span className=\"font-mono\">StatCard</span>\n <span className=\"text-muted-foreground\">→ Metrics display</span>\n </div>\n <div className=\"p-2 bg-muted rounded flex items-center gap-2 ml-4\">\n <span className=\"font-mono\">DetailedCard</span>\n <span className=\"text-muted-foreground\">→ Rich content</span>\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Composed Elements</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n Uses <code>DataBadge</code> for tags\n </div>\n <div className=\"p-2 bg-muted rounded\">\n Uses <code>IconBadge</code> for icons\n </div>\n <div className=\"p-2 bg-muted rounded\">\n Category theming via CSS variables\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Tables Section */}\n <TabsContent value=\"tables\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Data Visualization</h2>\n <p className=\"text-muted-foreground\">\n Tables and charts for displaying and visualizing data with sorting, filtering, and interactive features.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Table Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Table Component\"\n description=\"Foundation table components with semantic HTML structure\"\n badge={{ text: \"UI Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Category</TableHead>\n <TableHead className=\"text-right\">Value</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell>Customer Analytics</TableCell>\n <TableCell>Active</TableCell>\n <TableCell>Analytics</TableCell>\n <TableCell className=\"text-right\">1,234</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>Revenue Model</TableCell>\n <TableCell>Pending</TableCell>\n <TableCell>Finance</TableCell>\n <TableCell className=\"text-right\">567</TableCell>\n </TableRow>\n </TableBody>\n </Table>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell>Data</TableCell>\n </TableRow>\n </TableBody>\n</Table>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DataTable Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"DataTable Component\"\n description=\"Feature-rich table with search, sorting, hover states, and click handlers\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 2 }}\n >\n <DataTable\n data={sampleData}\n columns={tableColumns}\n searchPlaceholder=\"Search models...\"\n onRowClick={(item) => alert(`Clicked: ${item.name}`)}\n hover={true}\n />\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<DataTable\n data={sampleData}\n columns={[\n { key: 'name', header: 'Model Name' },\n { key: 'status', header: 'Status', type: 'status' },\n { key: 'category', header: 'Category', type: 'category' }\n ]}\n searchPlaceholder=\"Search models...\"\n onRowClick={(item) => alert(item.name)}\n hover={true}\n/>`}</code>\n </pre>\n </div>\n )}\n </ShowcaseSection>\n </Card>\n\n {/* Table Features */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Table Features & Composition\"\n description=\"How DataTable composes UI elements and leverages the design system\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Integrated Components</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>Input</code> for search functionality\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>DataBadge</code> for status/category cells\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>Button</code> for actions\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Features</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n ✓ Client-side search/filter\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Hover row highlighting\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Click handlers\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Type-aware cell rendering\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Chart Component */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Chart Component\"\n description=\"Data visualization charts with multiple types, interactive features, and accessibility support\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n {/* Bar Chart */}\n <Chart\n title=\"Monthly Revenue\"\n subtitle=\"Revenue by month\"\n type=\"bar\"\n category={1}\n height=\"medium\"\n data={[\n { label: 'Jan', value: 4200 },\n { label: 'Feb', value: 5300 },\n { label: 'Mar', value: 6100 },\n { label: 'Apr', value: 5900 },\n { label: 'May', value: 7200 },\n { label: 'Jun', value: 8100 }\n ]}\n showValues\n showTrend\n trend={{ value: 12.5, label: \"vs last period\" }}\n onClick={() => alert('Chart clicked!')}\n />\n \n {/* Line Chart */}\n <Chart\n title=\"User Growth\"\n subtitle=\"Active users over time\"\n type=\"line\"\n category={2}\n height=\"medium\"\n data={[\n { label: 'Week 1', value: 120 },\n { label: 'Week 2', value: 145 },\n { label: 'Week 3', value: 139 },\n { label: 'Week 4', value: 167 },\n { label: 'Week 5', value: 185 },\n { label: 'Week 6', value: 201 }\n ]}\n showTrend\n trend={{ value: 8.3, label: \"growth\" }}\n />\n </div>\n \n <div className=\"grid md:grid-cols-2 gap-6\">\n {/* Area Chart */}\n <Chart\n title=\"System Load\"\n subtitle=\"CPU usage over time\"\n type=\"area\"\n category={4}\n data={[\n { label: '00:00', value: 45 },\n { label: '04:00', value: 32 },\n { label: '08:00', value: 67 },\n { label: '12:00', value: 78 },\n { label: '16:00', value: 82 },\n { label: '20:00', value: 54 }\n ]}\n height=\"compact\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Chart Variants</h4>\n <div className=\"grid md:grid-cols-3 gap-4\">\n <Chart\n title=\"Minimal Chart\"\n type=\"bar\"\n variant=\"minimal\"\n category={5}\n data={[\n { label: 'A', value: 20 },\n { label: 'B', value: 35 },\n { label: 'C', value: 45 },\n { label: 'D', value: 30 }\n ]}\n height=\"sidebar\"\n />\n \n <Chart\n title=\"Loading State\"\n type=\"line\"\n category={6}\n data={[]}\n isLoading\n height=\"sidebar\"\n />\n \n <Chart\n title=\"Custom Colors\"\n type=\"bar\"\n category={7}\n data={[\n { label: 'Q1', value: 100 },\n { label: 'Q2', value: 150 },\n { label: 'Q3', value: 120 },\n { label: 'Q4', value: 180 }\n ]}\n colorOverrides={['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4']}\n height=\"sidebar\"\n />\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Chart\n title=\"Monthly Revenue\"\n type=\"bar\"\n category={1}\n data={chartData}\n showValues\n showTrend\n trend={{ value: 12.5, label: \"vs last period\" }}\n onClick={() => handleChartClick()}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n </div>\n </TabsContent>\n\n {/* Forms Section */}\n <TabsContent value=\"forms\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Form Components</h2>\n <p className=\"text-muted-foreground\">\n From base form inputs to complete form patterns with validation and organization.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Form Elements */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Form Elements\"\n description=\"Foundation form components with labels and inputs\"\n badge={{ text: \"UI Components\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4 max-w-md\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"basic-input\">Basic Label</Label>\n <Input id=\"basic-input\" placeholder=\"Enter text...\" />\n </div>\n \n <div className=\"space-y-2\">\n <Label htmlFor=\"email-input\">Email Address</Label>\n <Input id=\"email-input\" type=\"email\" placeholder=\"email@example.com\" />\n </div>\n \n <div className=\"space-y-2\">\n <Label htmlFor=\"password-input\">Password</Label>\n <Input id=\"password-input\" type=\"password\" placeholder=\"Enter password\" />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Label htmlFor=\"input\">Label</Label>\n<Input id=\"input\" placeholder=\"Enter text...\" />`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* FormField Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"FormField Component\"\n description=\"Enhanced form field with label, description, and error states\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-6 max-w-md\">\n <FormField\n label=\"Username\"\n description=\"This will be your display name\"\n required\n htmlFor=\"username\"\n >\n <Input id=\"username\" placeholder=\"johndoe\" />\n </FormField>\n \n <FormField\n label=\"Email\"\n description=\"We'll never share your email\"\n error=\"Please enter a valid email address\"\n required\n htmlFor=\"email\"\n >\n <Input id=\"email\" type=\"email\" placeholder=\"email@example.com\" />\n </FormField>\n \n <FormField\n label=\"Bio\"\n layout=\"horizontal\"\n htmlFor=\"bio\"\n >\n <Input id=\"bio\" placeholder=\"Tell us about yourself\" />\n </FormField>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<FormField\n label=\"Email\"\n description=\"We'll never share your email\"\n error={errors.email}\n required\n>\n <Input type=\"email\" />\n</FormField>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* FormGroup Component */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"FormGroup Component\"\n description=\"Organize related form fields into logical sections\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-6\">\n <FormGroup\n title=\"Personal Information\"\n description=\"Basic details about your account\"\n variant=\"card\"\n category={6}\n >\n <FormField label=\"First Name\" required htmlFor=\"firstName\">\n <Input id=\"firstName\" placeholder=\"John\" />\n </FormField>\n <FormField label=\"Last Name\" required htmlFor=\"lastName\">\n <Input id=\"lastName\" placeholder=\"Doe\" />\n </FormField>\n <FormField label=\"Email\" required htmlFor=\"groupEmail\">\n <Input id=\"groupEmail\" type=\"email\" placeholder=\"john@example.com\" />\n </FormField>\n </FormGroup>\n \n <FormGroup\n title=\"Preferences\"\n description=\"Customize your experience\"\n variant=\"section\"\n >\n <FormField label=\"Language\" htmlFor=\"language\">\n <Input id=\"language\" placeholder=\"English\" />\n </FormField>\n <FormField label=\"Timezone\" htmlFor=\"timezone\">\n <Input id=\"timezone\" placeholder=\"UTC-5\" />\n </FormField>\n </FormGroup>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* SearchInput Component */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"SearchInput Component\"\n description=\"Advanced search with autocomplete and keyboard navigation\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-6\">\n <div className=\"max-w-md\">\n <h4 className=\"text-sm font-medium mb-3\">With Results</h4>\n <SearchInput\n placeholder=\"Search users...\"\n results={[\n { id: '1', label: 'John Doe', description: 'john@example.com', category: 'User', icon: <Users className=\"w-4 h-4\" /> },\n { id: '2', label: 'Jane Smith', description: 'jane@example.com', category: 'Admin', icon: <Users className=\"w-4 h-4\" /> },\n { id: '3', label: 'Analytics Dashboard', description: 'View analytics', category: 'Page', icon: <Database className=\"w-4 h-4\" /> }\n ]}\n category={7}\n onSelect={(result) => alert(`Selected: ${result.label}`)}\n />\n </div>\n \n <div className=\"max-w-md\">\n <h4 className=\"text-sm font-medium mb-3\">Simple Search</h4>\n <SearchInput\n placeholder=\"Search anything...\"\n clearable={false}\n category={2}\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<SearchInput\n placeholder=\"Search users...\"\n results={searchResults}\n category={7}\n onSelect={(result) => handleSelect(result)}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* FileUpload Component */}\n <Card className=\"p-6\" category={5}>\n <ShowcaseSection\n title=\"FileUpload Component\"\n description=\"Advanced file upload with drag-and-drop, previews, validation, and progress tracking\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 5 }}\n >\n <div className=\"space-y-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Default File Upload</h4>\n <FileUpload\n accept=\"image/*,.pdf,.doc,.docx\"\n multiple\n maxSize={5 * 1024 * 1024}\n maxFiles={5}\n onChange={(files) => console.log('Files:', files)}\n onUpload={async (files) => {\n console.log('Uploading:', files);\n // Simulate upload\n await new Promise(resolve => setTimeout(resolve, 2000));\n }}\n />\n </div>\n \n <div className=\"grid md:grid-cols-2 gap-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Compact Variant</h4>\n <FileUpload\n variant=\"compact\"\n accept=\".csv,.xlsx\"\n maxSize={1 * 1024 * 1024}\n uploadText=\"Upload spreadsheet\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Large Variant</h4>\n <FileUpload\n variant=\"large\"\n accept=\"image/*\"\n showPreview\n uploadText=\"Drop images here\"\n dragText=\"Release to upload\"\n />\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<FileUpload\n accept=\"image/*,.pdf\"\n multiple\n maxSize={5 * 1024 * 1024}\n showPreview\n onUpload={async (files) => {\n await uploadFiles(files);\n }}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DateTimePicker Component */}\n <Card className=\"p-6\" category={6}>\n <ShowcaseSection\n title=\"DateTimePicker Component\"\n description=\"Flexible date and time selection with multiple modes, formats, and range support\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 6 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Date Picker</h4>\n <DateTimePicker\n mode=\"date\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n placeholder=\"Select date\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Time Picker</h4>\n <DateTimePicker\n mode=\"time\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n placeholder=\"Select time\"\n timeFormat=\"12h\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">DateTime Picker</h4>\n <DateTimePicker\n mode=\"datetime\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n placeholder=\"Select date and time\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Date Range</h4>\n <DateTimePicker\n mode=\"date\"\n isRange\n rangeValue={{ start: dateRange.start || null, end: dateRange.end || null }}\n onRangeChange={(range) => setDateRange({ start: range.start || undefined, end: range.end || undefined })}\n placeholder=\"Select date range\"\n />\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Inline Calendar</h4>\n <div className=\"flex justify-center\">\n <DateTimePicker\n mode=\"date\"\n variant=\"inline\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n />\n </div>\n </div>\n \n <div className=\"grid md:grid-cols-3 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Compact Variant</h4>\n <DateTimePicker\n variant=\"compact\"\n mode=\"date\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">With Min/Max</h4>\n <DateTimePicker\n mode=\"date\"\n minDate={new Date()}\n maxDate={new Date(Date.now() + 30 * 24 * 60 * 60 * 1000)}\n placeholder=\"Next 30 days\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Error State</h4>\n <DateTimePicker\n mode=\"date\"\n error\n placeholder=\"Invalid date\"\n />\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<DateTimePicker\n mode=\"datetime\"\n value={selectedDate}\n onChange={setSelectedDate}\n minDate={new Date()}\n timeFormat=\"12h\"\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Form Architecture */}\n <Card className=\"p-6\" category={7}>\n <ShowcaseSection\n title=\"Form Composition & Validation\"\n description=\"How form components compose and integrate\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 7 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Component Layers</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>Input/Label</code> → Base elements\n </div>\n <div className=\"p-2 bg-muted rounded ml-4\">\n <code>FormField</code> → Field wrapper\n </div>\n <div className=\"p-2 bg-muted rounded ml-8\">\n <code>FormGroup</code> → Section organizer\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Features</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n ✓ Built-in validation states\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Required field indicators\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Horizontal/vertical layouts\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Category theming support\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n </div>\n </TabsContent>\n\n {/* Navigation Section */}\n <TabsContent value=\"navigation\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Navigation Components</h2>\n <p className=\"text-muted-foreground\">\n Navigation patterns for breadcrumbs, menus, and pagination.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Breadcrumb Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Breadcrumb Component\"\n description=\"Navigation breadcrumbs with home icon and separators\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <Breadcrumb\n items={[\n { label: 'Dashboard', href: '/dashboard' },\n { label: 'Projects', href: '/projects' },\n { label: 'Analytics', active: true }\n ]}\n category={2}\n />\n \n <Breadcrumb\n items={[\n { label: 'Settings', href: '/settings' },\n { label: 'Users', href: '/users' },\n { label: 'Edit Profile', active: true }\n ]}\n showHome={false}\n separator={<ChevronRight className=\"w-3 h-3\" />}\n category={5}\n />\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Breadcrumb\n items={[\n { label: 'Dashboard', href: '/dashboard' },\n { label: 'Projects', href: '/projects' },\n { label: 'Analytics', active: true }\n ]}\n category={2}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Pagination Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"Pagination Component\"\n description=\"Page navigation with first/last controls and ellipsis\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Full Pagination</h4>\n <Pagination\n currentPage={5}\n totalPages={12}\n onPageChange={(page) => console.log('Page:', page)}\n category={3}\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Simple Pagination</h4>\n <Pagination\n currentPage={1}\n totalPages={3}\n onPageChange={(page) => console.log('Page:', page)}\n showFirstLast={false}\n category={6}\n size=\"sm\"\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Pagination\n currentPage={5}\n totalPages={12}\n onPageChange={(page) => setPage(page)}\n category={3}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* NavMenu Component */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"NavMenu Component\"\n description=\"Navigation menus with horizontal and vertical orientations\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-8\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Horizontal Menu</h4>\n <NavMenu\n items={[\n { id: 'home', label: 'Home', href: '/home', icon: <Home className=\"w-4 h-4\" />, category: 1 },\n { id: 'projects', label: 'Projects', href: '/projects', icon: <FileText className=\"w-4 h-4\" />, category: 2 },\n { id: 'settings', label: 'Settings', href: '/settings', icon: <Settings className=\"w-4 h-4\" />, category: 3 }\n ]}\n orientation=\"horizontal\"\n defaultCategory={4}\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Vertical Menu</h4>\n <div className=\"max-w-64\">\n <NavMenu\n items={[\n { id: 'dashboard', label: 'Dashboard', href: '/dashboard', icon: <Database className=\"w-4 h-4\" />, category: 1 },\n { id: 'analytics', label: 'Analytics', href: '/analytics', icon: <TrendingUp className=\"w-4 h-4\" />, category: 2 },\n { id: 'users', label: 'Users', href: '/users', icon: <Users className=\"w-4 h-4\" />, category: 3 }\n ]}\n orientation=\"vertical\"\n defaultCategory={4}\n />\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Accordion Component */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Accordion Component\"\n description=\"Collapsible content sections with smooth animations and keyboard navigation\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-8\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Default Accordion</h4>\n <Accordion\n items={[\n {\n id: 'section1',\n title: 'Getting Started',\n icon: <Home className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-2\">\n <p>Welcome to our platform! This section covers the basics of getting started.</p>\n <ul className=\"list-disc list-inside space-y-1 text-sm\">\n <li>Create your account</li>\n <li>Set up your profile</li>\n <li>Explore the dashboard</li>\n </ul>\n </div>\n )\n },\n {\n id: 'section2',\n title: 'API Documentation',\n icon: <FileText className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-2\">\n <p>Complete API reference and integration guides.</p>\n <div className=\"grid grid-cols-2 gap-2 text-sm\">\n <div className=\"p-2 bg-muted/30 rounded\">Authentication</div>\n <div className=\"p-2 bg-muted/30 rounded\">Endpoints</div>\n <div className=\"p-2 bg-muted/30 rounded\">Examples</div>\n <div className=\"p-2 bg-muted/30 rounded\">SDKs</div>\n </div>\n </div>\n )\n },\n {\n id: 'section3',\n title: 'Advanced Features',\n icon: <Settings className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-2\">\n <p>Explore advanced functionality and customization options.</p>\n <p className=\"text-sm\">Advanced features include custom integrations, webhooks, and enterprise-level analytics.</p>\n </div>\n )\n }\n ]}\n category={4}\n defaultOpen=\"section1\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Multiple Open (Bordered Variant)</h4>\n <Accordion\n items={[\n {\n id: 'faq1',\n title: 'How do I reset my password?',\n content: 'You can reset your password by clicking the \"Forgot Password\" link on the login page.'\n },\n {\n id: 'faq2',\n title: 'What are the subscription plans?',\n content: (\n <div className=\"space-y-2\">\n <p>We offer three subscription tiers:</p>\n <div className=\"space-y-1 text-sm\">\n <div>• <strong>Starter</strong>: $9/month - Basic features</div>\n <div>• <strong>Pro</strong>: $29/month - Advanced features</div>\n <div>• <strong>Enterprise</strong>: Custom pricing - Full suite</div>\n </div>\n </div>\n )\n },\n {\n id: 'faq3',\n title: 'How can I contact support?',\n content: 'You can reach our support team via email at support@example.com or through the in-app chat.'\n }\n ]}\n variant=\"bordered\"\n allowMultiple={true}\n category={5}\n defaultOpen={['faq1', 'faq2']}\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Filled Variant with Categories</h4>\n <Accordion\n items={[\n {\n id: 'analytics',\n title: 'Analytics & Reporting',\n icon: <TrendingUp className=\"w-4 h-4\" />,\n content: 'Comprehensive analytics dashboard with real-time metrics, custom reports, and data export capabilities.'\n },\n {\n id: 'users',\n title: 'User Management',\n icon: <Users className=\"w-4 h-4\" />,\n content: 'Manage user accounts, permissions, roles, and access controls across your organization.'\n },\n {\n id: 'database',\n title: 'Data Integration',\n icon: <Database className=\"w-4 h-4\" />,\n content: 'Connect multiple data sources, set up automated pipelines, and manage data transformations.'\n }\n ]}\n variant=\"filled\"\n category={6}\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Accordion\n items={[\n {\n id: 'section1',\n title: 'Getting Started',\n icon: <Home className=\"w-4 h-4\" />,\n content: 'Welcome to our platform!'\n },\n {\n id: 'section2',\n title: 'API Documentation',\n content: 'Complete API reference...'\n }\n ]}\n category={4}\n defaultOpen=\"section1\"\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Feedback Section */}\n <TabsContent value=\"feedback\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Feedback Components</h2>\n <p className=\"text-muted-foreground\">\n User feedback patterns including alerts, progress indicators, and notifications.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Alert Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Alert Component\"\n description=\"Status-based alerts with dismissible options\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <Alert status=\"success\" title=\"Success!\" dismissible>\n Your changes have been saved successfully.\n </Alert>\n \n <Alert status=\"warning\" title=\"Warning\" variant=\"outlined\">\n Please review your settings before continuing.\n </Alert>\n \n <Alert status=\"error\" dismissible>\n There was an error processing your request. Please try again.\n </Alert>\n \n <Alert status=\"info\" variant=\"filled\" hideIcon>\n This is an informational message with no icon.\n </Alert>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Alert status=\"success\" title=\"Success!\" dismissible>\n Your changes have been saved successfully.\n</Alert>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* ProgressBar Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"ProgressBar Component\"\n description=\"Progress indicators with status colors and animations\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-6\">\n <ProgressBar\n value={75}\n status=\"success\"\n showLabel\n label=\"Upload Progress\"\n />\n \n <ProgressBar\n value={45}\n category={3}\n showLabel\n size=\"lg\"\n />\n \n <ProgressBar\n value={90}\n status=\"warning\"\n variant=\"striped\"\n size=\"sm\"\n />\n \n <ProgressBar\n value={60}\n category={6}\n variant=\"animated\"\n showLabel\n />\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<ProgressBar\n value={75}\n status=\"success\"\n showLabel\n label=\"Upload Progress\"\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Toast Component */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Toast Component\"\n description=\"Non-intrusive notifications with auto-dismiss, progress indicators, and multiple positions\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Toast Types</h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n const id = Date.now().toString();\n setToasts([...toasts, { id, status: 'success', title: 'Success!', message: 'Model saved successfully.' }]);\n setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);\n }}\n >\n Success Toast\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n const id = Date.now().toString();\n setToasts([...toasts, { id, status: 'warning', title: 'Warning', message: 'Model runtime exceeded threshold.' }]);\n setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);\n }}\n >\n Warning Toast\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n const id = Date.now().toString();\n setToasts([...toasts, { id, status: 'error', title: 'Error', message: 'Failed to connect to database.' }]);\n setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);\n }}\n >\n Error Toast\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n const id = Date.now().toString();\n setToasts([...toasts, { id, status: 'info', title: 'Info', message: 'New update available.' }]);\n setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);\n }}\n >\n Info Toast\n </Button>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Features</h4>\n <ul className=\"text-sm text-muted-foreground space-y-1\">\n <li>• Auto-dismiss with configurable duration</li>\n <li>• Progress indicator for timed dismissal</li>\n <li>• Multiple positioning options</li>\n <li>• Dismissible with close button</li>\n <li>• Status-based theming</li>\n </ul>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Toast\n status=\"success\"\n title=\"Success!\"\n duration={5000}\n showProgress\n onDismiss={() => handleDismiss()}\n>\n Model saved successfully.\n</Toast>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Feedback Composition */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Feedback System Architecture\"\n description=\"How feedback components integrate with the design system\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Status Theming</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-status-success/10 text-status-success rounded\">\n Success states use <code>--status-success</code>\n </div>\n <div className=\"p-2 bg-status-warning/10 text-status-warning rounded\">\n Warning states use <code>--status-warning</code>\n </div>\n <div className=\"p-2 bg-status-error/10 text-status-error rounded\">\n Error states use <code>--status-error</code>\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Toast Notifications</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <p className=\"font-medium mb-1\">Toast component features:</p>\n <ul className=\"list-disc list-inside space-y-1 text-muted-foreground\">\n <li>Auto-dismiss timer</li>\n <li>Progress indicator</li>\n <li>Stacking behavior</li>\n <li>Status-based styling</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n </div>\n </TabsContent>\n\n {/* States Section */}\n <TabsContent value=\"states\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">State Components</h2>\n <p className=\"text-muted-foreground\">\n Loading states, empty states, and error states for better user experience.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Loading States */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Loading States\"\n description=\"Base loading indicators and skeleton components\"\n badge={{ text: \"UI Components\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-4\">\n <Spinner size=\"sm\" />\n <Spinner size=\"md\" />\n <Spinner size=\"lg\" />\n <span className=\"text-sm text-muted-foreground\">Spinner component</span>\n </div>\n \n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n <span className=\"text-sm text-muted-foreground\">Skeleton loader</span>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Spinner size=\"md\" />\n<Skeleton className=\"h-4 w-full\" />`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* EmptyState Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"EmptyState Component\"\n description=\"Informative empty states with actions for different scenarios\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"grid md:grid-cols-2 gap-6\">\n <EmptyState\n variant=\"no-data\"\n title=\"No models found\"\n description=\"Get started by creating your first dbt model.\"\n action={{\n label: \"Create Model\",\n onClick: () => alert('Create model!')\n }}\n />\n \n <EmptyState\n variant=\"no-results\"\n title=\"No search results\"\n description=\"Try adjusting your search terms.\"\n action={{\n label: \"Clear Filters\",\n onClick: () => alert('Clear filters!')\n }}\n secondaryAction={{\n label: \"Browse All\",\n onClick: () => alert('Browse all!')\n }}\n />\n \n <EmptyState\n variant=\"error\"\n title=\"Connection failed\"\n description=\"Unable to connect to the database.\"\n action={{\n label: \"Retry\",\n onClick: () => alert('Retry!')\n }}\n />\n \n <EmptyState\n variant=\"loading\"\n title=\"Loading data\"\n description=\"Please wait while we fetch your data.\"\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<EmptyState\n variant=\"no-data\"\n title=\"No models found\"\n description=\"Get started by creating your first model.\"\n action={{\n label: \"Create Model\",\n onClick: () => createModel()\n }}\n/>`}</code>\n </pre>\n </div>\n )}\n </ShowcaseSection>\n </Card>\n\n {/* State Architecture */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"State Management Architecture\"\n description=\"How state components compose and provide user feedback\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">State Types</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>loading</code> → Data fetching\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>no-data</code> → Empty initial state\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>no-results</code> → Search/filter empty\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>error</code> → Operation failed\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Components Used</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n Uses <code>Button</code> for actions\n </div>\n <div className=\"p-2 bg-muted rounded\">\n Uses <code>Card</code> for container\n </div>\n <div className=\"p-2 bg-muted rounded\">\n SVG illustrations for visual interest\n </div>\n <div className=\"p-2 bg-muted rounded\">\n Consistent typography hierarchy\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n\n {/* Typography Section */}\n <TabsContent value=\"typography\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Typography System</h2>\n <p className=\"text-muted-foreground\">\n From base typography to data-focused patterns optimized for analytics interfaces.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Typography */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Typography\"\n description=\"Foundation type scale for headings, body text, and UI elements\"\n badge={{ text: \"UI Typography\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Headings</h4>\n <div className=\"space-y-3\">\n <h1 className=\"text-4xl font-bold\">Heading 1 - 36px Bold</h1>\n <h2 className=\"text-3xl font-semibold\">Heading 2 - 30px Semibold</h2>\n <h3 className=\"text-2xl font-semibold\">Heading 3 - 24px Semibold</h3>\n <h4 className=\"text-xl font-medium\">Heading 4 - 20px Medium</h4>\n <h5 className=\"text-lg font-medium\">Heading 5 - 18px Medium</h5>\n <h6 className=\"text-base font-medium\">Heading 6 - 16px Medium</h6>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Body Text</h4>\n <div className=\"space-y-3\">\n <p className=\"text-lg\">Large body text for emphasis - 18px regular</p>\n <p className=\"text-base\">Base body text for content - 16px regular</p>\n <p className=\"text-sm\">Small body text for secondary content - 14px regular</p>\n <p className=\"text-xs\">Extra small text for metadata - 12px regular</p>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>\n {`<h1 className=\"text-4xl font-bold\">Heading</h1>\n<p className=\"text-base\">Body text</p>`}\n </code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Data Typography */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"Data Typography Patterns\"\n description=\"Specialized typography for data presentation and analytics\"\n badge={{ text: \"Business Patterns\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Data Display</h4>\n <div className=\"space-y-4\">\n <Card className=\"p-4 bg-background\">\n <div className=\"text-data-label mb-1\">METRIC LABEL</div>\n <div className=\"text-data-value\">1,234.56</div>\n <div className=\"text-data-meta\">+12.3% from last period</div>\n </Card>\n \n <Card className=\"p-4 bg-background\">\n <div className=\"text-data-label mb-1\">STATUS</div>\n <div className=\"text-data-value text-status-success\">Healthy</div>\n <div className=\"text-data-meta\">All systems operational</div>\n </Card>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Table Typography</h4>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"text-data-label\">COLUMN</TableHead>\n <TableHead className=\"text-data-label text-right\">VALUE</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell className=\"text-data-value\">Row Item</TableCell>\n <TableCell className=\"text-data-value text-right\">123</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"text-data-meta\">Metadata</TableCell>\n <TableCell className=\"text-data-meta text-right\">Info</TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<div className=\"text-data-label\">METRIC LABEL</div>\n<div className=\"text-data-value\">1,234.56</div>\n<div className=\"text-data-meta\">+12.3% from last period</div>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Typography Utilities */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Typography Utilities\"\n description=\"Utility classes for text styling and layout\"\n badge={{ text: \"Utilities\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Text Colors</h4>\n <div className=\"space-y-2\">\n <p className=\"text-foreground\">text-foreground - Primary text</p>\n <p className=\"text-muted-foreground\">text-muted-foreground - Secondary text</p>\n <p className=\"text-primary\">text-primary - Brand color</p>\n <p className=\"text-status-success\">text-status-success - Success state</p>\n <p className=\"text-status-error\">text-status-error - Error state</p>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Font Weights</h4>\n <div className=\"space-y-2\">\n <p className=\"font-thin\">font-thin - 100</p>\n <p className=\"font-light\">font-light - 300</p>\n <p className=\"font-normal\">font-normal - 400</p>\n <p className=\"font-medium\">font-medium - 500</p>\n <p className=\"font-semibold\">font-semibold - 600</p>\n <p className=\"font-bold\">font-bold - 700</p>\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Text Alignment & Spacing</h4>\n <div className=\"grid md:grid-cols-3 gap-4\">\n <Card className=\"p-4 text-left\" category={1}>\n <p className=\"font-medium\">Left Aligned</p>\n <p className=\"text-sm text-muted-foreground\">text-left</p>\n </Card>\n <Card className=\"p-4 text-center\" category={2}>\n <p className=\"font-medium\">Center Aligned</p>\n <p className=\"text-sm text-muted-foreground\">text-center</p>\n </Card>\n <Card className=\"p-4 text-right\" category={3}>\n <p className=\"font-medium\">Right Aligned</p>\n <p className=\"text-sm text-muted-foreground\">text-right</p>\n </Card>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Typography in Components */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Typography in Context\"\n description=\"How typography works within component compositions\"\n badge={{ text: \"Integration\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n <StatCard\n title=\"Typography in StatCard\"\n value=\"99.9%\"\n subtitle=\"Uses data typography patterns\"\n category={1}\n icon={<Database className=\"w-5 h-5\" />}\n trend={{ value: 2.3, label: \"improvement\" }}\n />\n \n <Card className=\"p-4\" category={2}>\n <div className=\"flex items-start justify-between mb-2\">\n <h3 className=\"text-lg font-semibold\">Card Title</h3>\n <DataBadge variant=\"category\" category={2} size=\"sm\">Active</DataBadge>\n </div>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Card description using muted foreground color for secondary text.\n </p>\n <div className=\"flex items-center gap-4\">\n <div>\n <div className=\"text-data-label\">STATUS</div>\n <div className=\"text-data-value\">Online</div>\n </div>\n <div>\n <div className=\"text-data-label\">UPTIME</div>\n <div className=\"text-data-value\">99.9%</div>\n </div>\n </div>\n </Card>\n </div>\n \n <Alert status=\"info\" title=\"Typography Best Practices\">\n <ul className=\"list-disc list-inside space-y-1 text-sm\">\n <li>Use <code className=\"text-xs bg-muted px-1 rounded\">text-data-label</code> for metric labels</li>\n <li>Use <code className=\"text-xs bg-muted px-1 rounded\">text-data-value</code> for prominent values</li>\n <li>Use <code className=\"text-xs bg-muted px-1 rounded\">text-muted-foreground</code> for secondary text</li>\n <li>Maintain consistent hierarchy with font sizes and weights</li>\n </ul>\n </Alert>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Typography Architecture */}\n <Card className=\"p-6\" category={5}>\n <ShowcaseSection\n title=\"Typography System Architecture\"\n description=\"Design tokens and CSS variables powering the typography system\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 5 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Type Scale</h4>\n <div className=\"space-y-2 text-xs font-mono\">\n <div className=\"p-2 bg-muted rounded\">\n --font-size-xs: 0.75rem (12px)\n </div>\n <div className=\"p-2 bg-muted rounded\">\n --font-size-sm: 0.875rem (14px)\n </div>\n <div className=\"p-2 bg-muted rounded\">\n --font-size-base: 1rem (16px)\n </div>\n <div className=\"p-2 bg-muted rounded\">\n --font-size-lg: 1.125rem (18px)\n </div>\n <div className=\"p-2 bg-muted rounded\">\n --font-size-xl: 1.25rem (20px)\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Data Typography Classes</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>.text-data-label</code> → Uppercase, smaller, medium weight\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>.text-data-value</code> → Larger, semibold, high contrast\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>.text-data-meta</code> → Smaller, muted color\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>.text-data-*</code> → Sized variants (xs, sm, base, lg, xl)\n </div>\n </div>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <h5 className=\"font-medium mb-2\">Usage Guidelines</h5>\n <ul className=\"text-sm space-y-1 text-muted-foreground\">\n <li>• Use base typography for general UI text</li>\n <li>• Use data typography for metrics, values, and data presentation</li>\n <li>• Maintain consistent hierarchy within components</li>\n <li>• Leverage color utilities for semantic meaning</li>\n </ul>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Palettes Section */}\n <TabsContent value=\"palettes\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Color System & Palettes</h2>\n <p className=\"text-muted-foreground\">\n Complete color system including individual color swatches and predefined palette combinations for data visualization and interface design.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Category Colors - Individual Swatches */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Category Colors\"\n description=\"Primary colors for categorizing different types of data, models, and content sections.\"\n badge={{ text: \"Data Classification\", variant: \"category\", category: 1 }}\n >\n <div className=\"grid grid-cols-4 md:grid-cols-8 gap-4\">\n {[\n { num: 1, name: 'Blue', usage: 'Primary data' },\n { num: 2, name: 'Teal', usage: 'Models' },\n { num: 3, name: 'Orange', usage: 'Tests' },\n { num: 4, name: 'Purple', usage: 'Sources' },\n { num: 5, name: 'Pink', usage: 'Analytics' },\n { num: 6, name: 'Green', usage: 'Jobs' },\n { num: 7, name: 'Yellow', usage: 'Documentation' },\n { num: 8, name: 'Red', usage: 'Issues' }\n ].map(category => (\n <ColorSwatch\n key={category.num}\n color={`hsl(var(--category-${category.num}))`}\n name={category.name}\n label={category.usage}\n interactive\n />\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Category Palette - Combined */}\n <Card className=\"p-6\" category={6}>\n <ShowcaseSection\n title=\"Category Palette\"\n description=\"Complete 8-color palette for data categorization with excellent contrast and accessibility.\"\n badge={{ text: \"8 Colors\", variant: \"category\", category: 6 }}\n >\n <div className=\"flex gap-1 rounded overflow-hidden border border-border\">\n {[1, 2, 3, 4, 5, 6, 7, 8].map(num => (\n <div \n key={num}\n className=\"flex-1 h-24 group relative cursor-pointer\"\n style={{ backgroundColor: `hsl(var(--category-${num}))` }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/10 flex items-center justify-center\">\n <span className=\"text-white font-medium opacity-0 group-hover:opacity-100 transition-opacity\">\n {num}\n </span>\n </div>\n </div>\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Status Colors - Individual Swatches */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"Status Colors\"\n description=\"Semantic colors for indicating status, health, and operational states across the system.\"\n badge={{ text: \"System States\", variant: \"status\", status: \"success\" }}\n >\n <div className=\"grid grid-cols-5 gap-4\">\n {[\n { name: 'Success', usage: 'Completed', cssVar: '--status-success' },\n { name: 'Warning', usage: 'Attention', cssVar: '--status-warning' },\n { name: 'Error', usage: 'Failed', cssVar: '--status-error' },\n { name: 'Info', usage: 'Information', cssVar: '--status-info' },\n { name: 'Neutral', usage: 'Pending', cssVar: '--status-neutral' }\n ].map(color => (\n <ColorSwatch\n key={color.name}\n color={`hsl(var(${color.cssVar}))`}\n name={color.name}\n label={color.usage}\n interactive\n />\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Status Palette - Combined */}\n <Card className=\"p-6\" category={7}>\n <ShowcaseSection\n title=\"Status Palette\"\n description=\"Semantic color palette for system states and operational indicators.\"\n badge={{ text: \"5 States\", variant: \"status\", status: \"info\" }}\n >\n <div className=\"flex gap-1 rounded overflow-hidden border border-border\">\n {[\n { name: 'Success', var: '--status-success' },\n { name: 'Warning', var: '--status-warning' },\n { name: 'Error', var: '--status-error' },\n { name: 'Info', var: '--status-info' },\n { name: 'Neutral', var: '--status-neutral' }\n ].map(status => (\n <div \n key={status.name}\n className=\"flex-1 h-24 group relative cursor-pointer\"\n style={{ backgroundColor: `hsl(var(${status.var}))` }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/10 flex items-center justify-center\">\n <span className=\"text-white font-medium text-xs opacity-0 group-hover:opacity-100 transition-opacity\">\n {status.name}\n </span>\n </div>\n </div>\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Extended Grays - Individual Swatches */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Extended Grays\"\n description=\"Comprehensive gray scale for backgrounds, borders, text, and subtle UI elements.\"\n badge={{ text: \"Neutrals\", variant: \"status\", status: \"neutral\" }}\n >\n <div className=\"grid grid-cols-6 md:grid-cols-11 gap-2\">\n {[25, 75, 150, 250, 350, 450, 550, 650, 750, 850, 925].map(shade => (\n <ColorSwatch\n key={shade}\n color={`hsl(var(--gray-${shade}))`}\n name={shade.toString()}\n size=\"sm\"\n interactive\n />\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Gray Palette - Combined */}\n <Card className=\"p-6\" category={8}>\n <ShowcaseSection\n title=\"Extended Gray Palette\"\n description=\"Comprehensive neutral palette for backgrounds, borders, and subtle interface elements.\"\n badge={{ text: \"11 Shades\", variant: \"status\", status: \"neutral\" }}\n >\n <div className=\"flex gap-1 rounded overflow-hidden border border-border\">\n {[25, 75, 150, 250, 350, 450, 550, 650, 750, 850, 925].map(shade => (\n <div \n key={shade}\n className=\"flex-1 h-24 group relative cursor-pointer\"\n style={{ backgroundColor: `hsl(var(--gray-${shade}))` }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/10 flex items-center justify-center\">\n <span className=\"text-white font-medium text-xs opacity-0 group-hover:opacity-100 transition-opacity\">\n {shade}\n </span>\n </div>\n </div>\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* UI System Colors - Individual Swatches */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"UI System Colors\"\n description=\"Core UI colors for backgrounds, surfaces, borders, and interactive elements.\"\n badge={{ text: \"Interface\", variant: \"category\", category: 4 }}\n >\n <div className=\"grid grid-cols-3 md:grid-cols-6 gap-4\">\n {[\n { name: 'Background', cssVar: '--background', usage: 'Page background' },\n { name: 'Foreground', cssVar: '--foreground', usage: 'Primary text' },\n { name: 'Card', cssVar: '--card', usage: 'Card backgrounds' },\n { name: 'Border', cssVar: '--border', usage: 'Dividers' },\n { name: 'Primary', cssVar: '--primary', usage: 'Brand color' },\n { name: 'Secondary', cssVar: '--secondary', usage: 'Secondary actions' }\n ].map(color => (\n <ColorSwatch\n key={color.name}\n color={`hsl(var(${color.cssVar}))`}\n name={color.name}\n label={color.usage}\n size=\"lg\"\n interactive\n />\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Debug Section */}\n <TabsContent value=\"debug\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Debug Tools</h2>\n <p className=\"text-muted-foreground\">\n Development utilities for testing, debugging, and validating the design system.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Color Variables Debug */}\n <Card className=\"p-6\" category={8}>\n <h3 className=\"text-lg font-medium mb-4 flex items-center gap-2\">\n CSS Variables\n <DataBadge variant=\"category\" category={8} size=\"sm\">Debug</DataBadge>\n </h3>\n <p className=\"text-sm text-muted-foreground mb-6\">\n Live CSS custom property values currently applied to the system.\n </p>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm font-mono\">\n {[\n '--category-1', '--category-2', '--category-3', '--category-4',\n '--status-success', '--status-warning', '--status-error', '--status-info',\n '--background', '--foreground', '--border', '--primary'\n ].map(variable => (\n <Card key={variable} className=\"p-3\">\n <div className=\"text-xs text-muted-foreground mb-1\">{variable}</div>\n <div \n className=\"w-full h-8 rounded border border-border\"\n style={{ backgroundColor: `hsl(var(${variable}))` }}\n />\n </Card>\n ))}\n </div>\n </Card>\n\n {/* Component States */}\n <Card className=\"p-6\" category={5}>\n <h3 className=\"text-lg font-medium mb-4 flex items-center gap-2\">\n Component States\n <DataBadge variant=\"status\" status=\"info\" size=\"sm\">Interactive</DataBadge>\n </h3>\n <p className=\"text-sm text-muted-foreground mb-6\">\n Test different states and interactions of design system components.\n </p>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map(category => (\n <Card key={category} category={category as 1 | 2 | 3 | 4} className=\"p-4\">\n <h4 className=\"font-medium mb-2\">Category {category}</h4>\n <DataBadge variant=\"category\" category={category as 1 | 2 | 3 | 4} size=\"sm\">\n Test Badge\n </DataBadge>\n <div className=\"mt-3 space-y-2\">\n <div className=\"text-xs text-muted-foreground\">\n Color: hsl(var(--category-{category}))\n </div>\n <div className=\"text-xs text-muted-foreground\">\n Background: hsl(var(--category-{category}) / 0.02)\n </div>\n </div>\n </Card>\n ))}\n </div>\n </Card>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </div>\n\n {/* Toast Container */}\n <ToastContainer\n toasts={toasts.map(t => ({\n id: t.id,\n status: t.status,\n title: t.title,\n children: t.message,\n duration: 5000,\n showProgress: true,\n onDismiss: () => setToasts(prev => prev.filter(toast => toast.id !== t.id))\n }))}\n position=\"top-right\"\n />\n\n {/* Footer */}\n <footer className=\"bg-card/30 backdrop-blur-sm border-t border-border/50\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-4\">\n <IconBadge \n variant=\"category\" \n category={1} \n size=\"sm\"\n >\n DT\n </IconBadge>\n <div>\n <p className=\"text-sm font-medium text-foreground\">Data Trust Navigator</p>\n <p className=\"text-xs text-muted-foreground\">Design System Showcase • Built with Atomic Architecture</p>\n </div>\n </div>\n \n <div className=\"flex items-center space-x-4\">\n <DataBadge variant=\"category\" category={1} size=\"sm\">Design System</DataBadge>\n <DataBadge variant=\"status\" status=\"success\" size=\"sm\">v1.0</DataBadge>\n </div>\n </div>\n </div>\n </footer>\n </div>\n );\n};"],"names":["sizeClasses","variantClasses","user","permissions","React","statusIcons","searchParams","alert","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/atoms/shared/config/constants.ts","../src/atoms/shared/config/environment.ts","../src/atoms/shared/config/dashboard-sizes.ts","../src/atoms/utils/tooltip-helpers.ts","../src/atoms/utils/utils.ts","../src/atoms/utils/animations.ts","../src/atoms/services/api/client.ts","../src/atoms/hooks/useApi.ts","../src/atoms/ui/ErrorBoundary.tsx","../src/atoms/composed/Tooltip/Tooltip.tsx","../src/atoms/ui/button.tsx","../src/atoms/ui/card.tsx","../src/atoms/ui/input.tsx","../src/atoms/ui/label.tsx","../src/atoms/ui/table.tsx","../src/atoms/ui/Badge.tsx","../src/atoms/ui/Select.tsx","../src/atoms/ui/Switch.tsx","../src/atoms/ui/Tabs.tsx","../src/atoms/ui/avatar.tsx","../src/atoms/ui/dropdown-menu.tsx","../src/atoms/ui/skeleton.tsx","../src/atoms/ui/spinner.tsx","../src/atoms/composed/DataBadge/DataBadge.tsx","../src/atoms/composed/StatCard/StatCard.tsx","../src/atoms/composed/DetailedCard/DetailedCard.tsx","../src/atoms/composed/EmptyState/EmptyState.tsx","../src/atoms/composed/ColorSwatch/ColorSwatch.tsx","../src/atoms/composed/IconBadge/IconBadge.tsx","../src/atoms/services/auth-service.ts","../src/features/auth/hooks/useAuth.tsx","../src/features/auth/components/LoginForm.tsx","../src/features/auth/components/ProtectedRoute.tsx","../src/features/auth/components/LogoutButton.tsx","../src/features/auth/hooks/usePermissions.ts","../src/atoms/composed/UserAvatar/UserAvatar.tsx","../src/atoms/composed/UserMenu/UserMenu.tsx","../src/atoms/composed/GlobalSearch/GlobalSearch.tsx","../src/atoms/composed/DataTable/DataTable.tsx","../src/atoms/composed/DateTimePicker/DateTimePicker.tsx","../src/atoms/composed/Chart/Chart.tsx","../src/atoms/composed/Accordion/Accordion.tsx","../src/atoms/composed/Modal/Modal.tsx","../src/atoms/composed/ProgressBar/ProgressBar.tsx","../src/atoms/composed/FileUpload/FileUpload.tsx","../src/atoms/composed/Alert/Alert.tsx","../src/atoms/composed/Toast/Toast.tsx","../src/atoms/composed/FormField/FormField.tsx","../src/atoms/composed/Breadcrumb/Breadcrumb.tsx","../src/atoms/composed/DarkModeToggle.tsx","../src/atoms/composed/PaletteSwitcher.tsx","../src/atoms/composed/StyleGuide.tsx","../src/molecules/layout/PageTemplate.tsx","../src/molecules/layout/ShowcaseSection.tsx","../src/molecules/layout/SidebarContext.tsx","../src/molecules/layout/SidebarButton/SidebarButton.tsx","../src/molecules/layout/Sidebar.tsx","../src/molecules/layout/AppHeader/AppHeader.tsx","../src/molecules/layout/AppLayout.tsx","../src/molecules/layout/SectionHeader/SectionHeader.tsx","../src/molecules/navigation/Pagination.tsx","../src/molecules/navigation/NavMenu.tsx","../src/molecules/forms/FormGroup.tsx","../src/molecules/forms/SearchInput.tsx","../src/templates/ComponentShowcaseTemplate.tsx","../src/templates/DashboardTemplate.tsx","../src/templates/AuthTemplate.tsx","../src/templates/DataTemplate.tsx","../src/templates/admin/AdminDashboardTemplate.tsx","../src/templates/admin/AdminCRUDTemplate.tsx","../src/templates/admin/AdminDetailTemplate.tsx","../src/templates/factory.tsx","../src/organisms/showcase/ComponentShowcasePage.tsx"],"sourcesContent":["export const APP_NAME = 'Design System Showcase';\n\nexport const API_ENDPOINTS = {\n HEALTH: '/health',\n} as const;\n\nexport const ROUTES = {\n HOME: '/',\n COMPONENTS: '/components',\n STYLE_GUIDE: '/style-guide',\n} as const;\n\nexport const UI_CONFIG = {\n DEFAULT_PAGE_SIZE: 20,\n DEBOUNCE_DELAY: 300,\n TOAST_DURATION: 5000,\n} as const;","export const env = {\n API_BASE_URL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080',\n OPENAPI_URL: import.meta.env.OPENAPI_URL || 'http://localhost:8080/openapi.json',\n NODE_ENV: import.meta.env.NODE_ENV || 'development',\n IS_DEVELOPMENT: import.meta.env.NODE_ENV === 'development',\n IS_PRODUCTION: import.meta.env.NODE_ENV === 'production',\n // Feature flags for development\n USE_MOCK_DATA: import.meta.env.VITE_USE_MOCK_DATA === 'true' || false,\n MOCK_API_DELAY: parseInt(import.meta.env.VITE_MOCK_API_DELAY || '500'),\n} as const;","// Dashboard component sizing constants\n// These provide standardized heights for consistent layouts\n\n/** \n * Dashboard chart heights in pixels\n * Use these constants instead of hardcoded values for consistent sizing\n */\nexport const DASHBOARD_CHART_HEIGHTS = {\n // Compact sizes for dense layouts\n compact: 180, // For small charts in grids\n small: 240, // Standard small chart size\n \n // Medium sizes for primary content\n medium: 320, // Most common dashboard chart size\n mediumLarge: 400, // For detailed primary charts\n \n // Large sizes for feature charts\n large: 480, // Full-featured charts with legends\n extraLarge: 600, // Hero charts and detailed analytics\n \n // Special purpose sizes\n sidebar: 200, // For sidebar/secondary charts\n mobile: 160, // Mobile-optimized height\n} as const;\n\n/** \n * Dashboard container heights (includes padding)\n * These account for padding, headers, and spacing\n */\nexport const DASHBOARD_CONTAINER_HEIGHTS = {\n // Chart containers (chart height + padding/headers)\n compactChart: DASHBOARD_CHART_HEIGHTS.compact + 80, // 260px\n smallChart: DASHBOARD_CHART_HEIGHTS.small + 80, // 320px \n mediumChart: DASHBOARD_CHART_HEIGHTS.medium + 80, // 400px\n mediumLargeChart: DASHBOARD_CHART_HEIGHTS.mediumLarge + 80, // 480px\n largeChart: DASHBOARD_CHART_HEIGHTS.large + 80, // 560px\n extraLargeChart: DASHBOARD_CHART_HEIGHTS.extraLarge + 80, // 680px\n \n // Sidebar and panel heights\n sidebarPanel: 280, // For alert panels, activity feeds\n sidebarChart: DASHBOARD_CHART_HEIGHTS.sidebar + 60, // 260px\n \n // Grid item heights\n statCard: 120, // For metric/stat cards\n miniChart: 180, // For sparkline charts\n} as const;\n\n/** \n * CSS height classes mapping to our size constants\n * Use these in className props for consistent styling\n */\nexport const DASHBOARD_HEIGHT_CLASSES = {\n // Chart heights\n 'chart-compact': `h-[${DASHBOARD_CHART_HEIGHTS.compact}px]`,\n 'chart-small': `h-[${DASHBOARD_CHART_HEIGHTS.small}px]`,\n 'chart-medium': `h-[${DASHBOARD_CHART_HEIGHTS.medium}px]`,\n 'chart-medium-large': `h-[${DASHBOARD_CHART_HEIGHTS.mediumLarge}px]`,\n 'chart-large': `h-[${DASHBOARD_CHART_HEIGHTS.large}px]`,\n 'chart-extra-large': `h-[${DASHBOARD_CHART_HEIGHTS.extraLarge}px]`,\n 'chart-sidebar': `h-[${DASHBOARD_CHART_HEIGHTS.sidebar}px]`,\n \n // Container heights\n 'container-compact-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.compactChart}px]`,\n 'container-small-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.smallChart}px]`,\n 'container-medium-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.mediumChart}px]`,\n 'container-medium-large-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.mediumLargeChart}px]`,\n 'container-large-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.largeChart}px]`,\n 'container-extra-large-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.extraLargeChart}px]`,\n \n // Panel heights\n 'sidebar-panel': `h-[${DASHBOARD_CONTAINER_HEIGHTS.sidebarPanel}px]`,\n 'sidebar-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.sidebarChart}px]`,\n 'stat-card': `h-[${DASHBOARD_CONTAINER_HEIGHTS.statCard}px]`,\n 'mini-chart': `h-[${DASHBOARD_CONTAINER_HEIGHTS.miniChart}px]`,\n} as const;\n\n/** \n * Helper function to get chart height for Chart component\n */\nexport const getChartHeight = (size: keyof typeof DASHBOARD_CHART_HEIGHTS): number => {\n return DASHBOARD_CHART_HEIGHTS[size];\n};\n\n/** \n * Helper function to get container height class\n */\nexport const getContainerHeightClass = (size: keyof typeof DASHBOARD_HEIGHT_CLASSES): string => {\n return DASHBOARD_HEIGHT_CLASSES[size];\n};\n\n/**\n * Responsive height configurations for different screen sizes\n */\nexport const RESPONSIVE_CHART_HEIGHTS = {\n mobile: {\n primary: DASHBOARD_CHART_HEIGHTS.mobile,\n secondary: DASHBOARD_CHART_HEIGHTS.compact,\n },\n tablet: {\n primary: DASHBOARD_CHART_HEIGHTS.small,\n secondary: DASHBOARD_CHART_HEIGHTS.sidebar,\n },\n desktop: {\n primary: DASHBOARD_CHART_HEIGHTS.medium,\n secondary: DASHBOARD_CHART_HEIGHTS.small,\n },\n large: {\n primary: DASHBOARD_CHART_HEIGHTS.large,\n secondary: DASHBOARD_CHART_HEIGHTS.medium,\n },\n} as const;","import { useRef, useState, useEffect } from 'react';\n\n/**\n * Hook to detect if an element's text is truncated/overflowing\n * Useful for conditionally showing tooltips only when needed\n */\nexport const useTextOverflow = () => {\n const ref = useRef<HTMLElement>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n useEffect(() => {\n const checkOverflow = () => {\n const element = ref.current;\n if (!element) return;\n\n // Check if text is truncated\n const isOverflow = element.scrollWidth > element.clientWidth || \n element.scrollHeight > element.clientHeight;\n setIsOverflowing(isOverflow);\n };\n\n checkOverflow();\n \n // Re-check on resize\n window.addEventListener('resize', checkOverflow);\n \n // Use ResizeObserver if available for more accurate detection\n if (typeof ResizeObserver !== 'undefined') {\n const resizeObserver = new ResizeObserver(checkOverflow);\n if (ref.current) {\n resizeObserver.observe(ref.current);\n }\n return () => {\n resizeObserver.disconnect();\n window.removeEventListener('resize', checkOverflow);\n };\n }\n\n return () => window.removeEventListener('resize', checkOverflow);\n }, []);\n\n return { ref, isOverflowing };\n};\n\n/**\n * Formats large numbers with abbreviations\n * Useful for StatCard values with tooltips showing full numbers\n */\nexport const formatNumberWithTooltip = (value: number): { display: string; tooltip: string } => {\n const formatter = new Intl.NumberFormat('en-US');\n const fullNumber = formatter.format(value);\n\n if (value >= 1_000_000_000) {\n return {\n display: `${(value / 1_000_000_000).toFixed(1)}B`,\n tooltip: fullNumber\n };\n } else if (value >= 1_000_000) {\n return {\n display: `${(value / 1_000_000).toFixed(1)}M`,\n tooltip: fullNumber\n };\n } else if (value >= 10_000) {\n return {\n display: `${(value / 1_000).toFixed(1)}K`,\n tooltip: fullNumber\n };\n }\n\n return {\n display: fullNumber,\n tooltip: '' // No tooltip needed for small numbers\n };\n};\n\n/**\n * Standard tooltip content for common UI patterns\n */\nexport const tooltipContent = {\n // Icon button tooltips\n refresh: 'Refresh data',\n download: 'Download',\n upload: 'Upload file',\n edit: 'Edit',\n delete: 'Delete',\n view: 'View details',\n filter: 'Filter',\n search: 'Search',\n settings: 'Settings',\n help: 'Help',\n export: 'Export data',\n import: 'Import data',\n add: 'Add new',\n create: 'Create new',\n back: 'Go back',\n forward: 'Go forward',\n menu: 'Open menu',\n more: 'More options',\n copy: 'Copy',\n paste: 'Paste',\n share: 'Share',\n print: 'Print',\n \n // Status tooltips\n success: 'Operation completed successfully',\n warning: 'Requires attention',\n error: 'Error occurred',\n info: 'Information',\n pending: 'Pending',\n \n // Common actions\n save: 'Save changes',\n cancel: 'Cancel',\n close: 'Close',\n expand: 'Expand',\n collapse: 'Collapse',\n minimize: 'Minimize',\n maximize: 'Maximize',\n \n // Navigation\n previous: 'Previous',\n next: 'Next',\n first: 'Go to first',\n last: 'Go to last',\n home: 'Home',\n \n // Data operations\n sort: 'Sort',\n sortAsc: 'Sort ascending',\n sortDesc: 'Sort descending',\n clearSort: 'Clear sorting',\n clearFilters: 'Clear all filters',\n clearSearch: 'Clear search',\n \n // Authentication\n login: 'Sign in',\n logout: 'Sign out',\n profile: 'Profile',\n account: 'Account settings',\n};","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n// Re-export tooltip helpers\nexport * from './tooltip-helpers';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Centralized animation variants system for consistent interactions across components.\n * \n * Based on analysis of successful patterns:\n * - DataBadge: scale + shadow effects work well (tactile feel)\n * - Tab hover: needs consistency in timing\n * - Overall: standardize timing and easing\n */\n\nexport const interactionVariants = cva(\n // Base transition classes applied to all interactive elements\n 'transition-all ease-out',\n {\n variants: {\n /**\n * Animation type based on component purpose and successful patterns\n */\n type: {\n /**\n * Subtle: minimal hover effects for navigation elements\n * Used for: secondary buttons, nav links, subtle interactive elements\n */\n subtle: 'duration-200 hover:bg-accent/50 hover:text-accent-foreground',\n \n /**\n * Tactile: badges, chips with satisfying scale + shadow feedback\n * Used for: DataBadge, chips, small interactive elements\n * PRESERVE: This pattern works well and should be maintained\n */\n tactile: 'duration-200 hover:scale-105 active:scale-95 shadow hover:shadow-md',\n \n /**\n * Card: cards and major content blocks with elevation\n * Used for: content cards, major clickable areas\n */\n card: 'duration-300 hover:shadow-lg hover:-translate-y-0.5',\n \n /**\n * Button: primary actions with clear feedback\n * Used for: primary buttons, call-to-action elements\n */\n button: 'duration-200 hover:scale-[1.02] active:scale-[0.98] hover:shadow-md',\n \n /**\n * Tab: header navigation tabs with tactile feedback\n * UPDATED: Removed scale and border changes to prevent layout jitter\n */\n tab: 'duration-200 hover:shadow-sm hover:bg-accent/30',\n },\n \n /**\n * Size affects the scale intensity for different component sizes\n */\n size: {\n sm: '', // Default scaling\n md: '', // Default scaling \n lg: 'hover:scale-[1.03] active:scale-[0.97]', // Reduced scaling for larger elements\n xl: 'hover:scale-[1.02] active:scale-[0.98]', // Minimal scaling for very large elements\n },\n \n /**\n * Timing variants for special cases\n */\n timing: {\n instant: 'duration-100',\n fast: 'duration-150', \n normal: 'duration-200',\n slow: 'duration-300',\n slower: 'duration-500',\n },\n \n /**\n * Disable animations for accessibility or performance\n */\n disabled: {\n true: 'transition-none',\n false: '',\n }\n },\n defaultVariants: {\n type: 'subtle',\n size: 'md',\n timing: 'normal',\n disabled: false,\n },\n }\n);\n\nexport type InteractionVariants = VariantProps<typeof interactionVariants>;\n\n/**\n * Helper function to get animation classes\n * @param variants - Animation variant configuration\n * @returns Tailwind classes for the animation\n */\nexport const getAnimationClasses = (variants?: InteractionVariants) => {\n return interactionVariants(variants);\n};\n\n/**\n * Predefined animation configurations for common use cases\n */\nexport const animationPresets = {\n // Preserve successful DataBadge pattern\n dataBadge: { type: 'tactile' as const, timing: 'normal' as const },\n \n // Improved tab pattern to match tactile feel\n tab: { type: 'tab' as const, timing: 'normal' as const },\n \n // Other common patterns\n button: { type: 'button' as const, timing: 'normal' as const },\n card: { type: 'card' as const, timing: 'slow' as const },\n subtle: { type: 'subtle' as const, timing: 'normal' as const },\n \n // Size-specific presets\n smallTactile: { type: 'tactile' as const, size: 'sm' as const },\n largeTactile: { type: 'tactile' as const, size: 'lg' as const },\n} as const;\n\n/**\n * Legacy class combinations for migration reference\n * These can be replaced with the new animation system\n */\nexport const legacyPatterns = {\n // Current DataBadge: 'hover:scale-105 active:scale-95 shadow hover:shadow'\n dataBadgeLegacy: 'transition-all hover:scale-105 active:scale-95 shadow hover:shadow',\n \n // Current TabsTrigger: 'hover:scale-105 active:scale-95 hover:shadow transition-all duration-150'\n tabTriggerLegacy: 'transition-all duration-150 hover:scale-105 active:scale-95 hover:shadow',\n \n // Current TabsList: 'hover:shadow-md transition-all duration-200'\n tabsListLegacy: 'transition-all duration-200 hover:shadow-md',\n} as const;","import axios, { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse } from 'axios';\n\nconst API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080';\n\nexport interface ApiClientConfig {\n baseURL?: string;\n timeout?: number;\n headers?: Record<string, string>;\n}\n\n// Global auth service reference - will be set by AuthProvider\nlet globalAuthService: any = null;\n\nexport function setGlobalAuthService(authService: any): void {\n globalAuthService = authService;\n}\n\nclass ApiClient {\n private instance: AxiosInstance;\n\n constructor(config: ApiClientConfig = {}) {\n this.instance = axios.create({\n baseURL: config.baseURL || API_BASE_URL,\n timeout: config.timeout || 10000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n });\n\n this.setupInterceptors();\n }\n\n private setupInterceptors() {\n // Request interceptor for auth tokens and auto-refresh\n this.instance.interceptors.request.use(\n async (config) => {\n // Add auth token if available\n if (globalAuthService) {\n const tokenData = globalAuthService.getTokenData();\n if (tokenData?.token) {\n // Check if token should be refreshed\n if (globalAuthService.shouldRefreshToken()) {\n try {\n await globalAuthService.refreshToken();\n // Get the updated token\n const newTokenData = globalAuthService.getTokenData();\n config.headers.Authorization = `Bearer ${newTokenData?.token}`;\n } catch {\n // Refresh failed, use existing token (will likely fail and trigger logout)\n config.headers.Authorization = `Bearer ${tokenData.token}`;\n }\n } else {\n config.headers.Authorization = `Bearer ${tokenData.token}`;\n }\n }\n } else {\n // Fallback to old method if no auth service\n const token = localStorage.getItem('auth_token');\n if (token) {\n config.headers.Authorization = `Bearer ${token}`;\n }\n }\n return config;\n },\n (error) => Promise.reject(error)\n );\n\n // Response interceptor for error handling\n this.instance.interceptors.response.use(\n (response) => response,\n async (error) => {\n if (error.response?.status === 401) {\n if (globalAuthService) {\n // Try to refresh token once\n const tokenData = globalAuthService.getTokenData();\n if (tokenData?.refreshToken && !error.config._retry) {\n error.config._retry = true;\n try {\n await globalAuthService.refreshToken();\n // Retry the original request with new token\n const newTokenData = globalAuthService.getTokenData();\n error.config.headers.Authorization = `Bearer ${newTokenData?.token}`;\n return this.instance.request(error.config);\n } catch {\n // Refresh failed, clear auth\n globalAuthService.clearAuth();\n window.location.reload();\n }\n } else {\n // No refresh token or retry failed, clear auth\n globalAuthService.clearAuth();\n window.location.reload();\n }\n } else {\n // Fallback to old method\n localStorage.removeItem('auth_token');\n localStorage.removeItem('auth_user');\n window.location.reload();\n }\n }\n return Promise.reject(error);\n }\n );\n }\n\n async get<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.get(url, config);\n return response.data;\n }\n\n async post<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.post(url, data, config);\n return response.data;\n }\n\n async put<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.put(url, data, config);\n return response.data;\n }\n\n async patch<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.patch(url, data, config);\n return response.data;\n }\n\n async delete<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n const response: AxiosResponse<T> = await this.instance.delete(url, config);\n return response.data;\n }\n}\n\nexport const apiClient = new ApiClient();\nexport default apiClient;","import { useMutation, useQuery, useQueryClient, type UseQueryOptions, type UseMutationOptions } from '@tanstack/react-query';\nimport { apiClient } from '../services/api/client';\n\n// Generic query hook\nexport function useApiQuery<T>(\n queryKey: (string | number)[],\n queryFn: () => Promise<T>,\n options?: Omit<UseQueryOptions<T>, 'queryKey' | 'queryFn'>\n) {\n return useQuery({\n queryKey,\n queryFn,\n ...options,\n });\n}\n\n// Generic mutation hook\nexport function useApiMutation<TData, TVariables = void>(\n mutationFn: (variables: TVariables) => Promise<TData>,\n options?: UseMutationOptions<TData, Error, TVariables>\n) {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn,\n onSuccess: (data, variables, context) => {\n // Invalidate queries on successful mutation\n queryClient.invalidateQueries();\n options?.onSuccess?.(data, variables, context);\n },\n ...options,\n });\n}\n\n// Example types for API hooks\ninterface ExampleData {\n id: string;\n name: string;\n description?: string;\n}\n\ninterface CreateExampleData {\n name: string;\n description?: string;\n}\n\ninterface UpdateExampleData {\n name?: string;\n description?: string;\n}\n\n// Specific API hooks - examples with proper typing\nexport function useGetExample(id: string) {\n return useApiQuery(\n ['example', id],\n () => apiClient.get<ExampleData>(`/api/example/${id}`),\n {\n enabled: !!id,\n }\n );\n}\n\nexport function useCreateExample() {\n return useApiMutation(\n (data: CreateExampleData) => apiClient.post<ExampleData>('/api/example', data)\n );\n}\n\nexport function useUpdateExample() {\n return useApiMutation(\n ({ id, data }: { id: string; data: UpdateExampleData }) => \n apiClient.put<ExampleData>(`/api/example/${id}`, data)\n );\n}\n\nexport function useDeleteExample() {\n return useApiMutation(\n (id: string) => apiClient.delete<void>(`/api/example/${id}`)\n );\n}","import { Component } from 'react';\nimport type { ErrorInfo, ReactNode } from 'react';\n\ninterface Props {\n children: ReactNode;\n fallback?: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n error?: Error;\n}\n\nexport class ErrorBoundary extends Component<Props, State> {\n public state: State = {\n hasError: false,\n };\n\n public static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error('ErrorBoundary caught an error:', error, errorInfo);\n }\n\n public render() {\n if (this.state.hasError) {\n if (this.props.fallback) {\n return this.props.fallback;\n }\n\n return (\n <div className=\"p-6 bg-destructive/10 border border-destructive/20 rounded-[--radius]\">\n <h3 className=\"text-destructive font-medium mb-2\">Something went wrong</h3>\n <p className=\"text-muted-foreground text-sm mb-4\">\n An unexpected error occurred. Please refresh the page or try again later.\n </p>\n <details className=\"text-xs text-destructive/80\">\n <summary className=\"cursor-pointer\">Error details</summary>\n <pre className=\"mt-2 whitespace-pre-wrap\">\n {this.state.error?.message}\n {'\\n'}\n {this.state.error?.stack}\n </pre>\n </details>\n <button\n onClick={() => window.location.reload()}\n className=\"mt-4 px-4 py-2 bg-destructive text-destructive-foreground rounded-[--radius] hover:bg-destructive/90 text-sm\"\n >\n Reload Page\n </button>\n </div>\n );\n }\n\n return this.props.children;\n }\n}","import React, { useState, useRef, useEffect } from 'react';\nimport { cn } from '../../utils/utils';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface TooltipProps {\n children: React.ReactNode;\n content: React.ReactNode;\n position?: 'top' | 'bottom' | 'left' | 'right';\n variant?: 'default' | 'info' | 'warning' | 'error';\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n delay?: number;\n offset?: number;\n trigger?: 'hover' | 'focus' | 'both';\n className?: string;\n contentClassName?: string;\n}\n\nexport const Tooltip = ({\n children,\n content,\n position = 'top',\n variant = 'default',\n size = 'md',\n disabled = false,\n delay = 300,\n offset = 8,\n trigger = 'both',\n className,\n contentClassName\n}: TooltipProps) => {\n const [isVisible, setIsVisible] = useState(false);\n const [actualPosition, setActualPosition] = useState(position);\n const triggerRef = useRef<HTMLDivElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const sizeClasses: Record<'sm' | 'md' | 'lg', string> = {\n sm: 'px-2 py-1 text-xs max-w-48',\n md: 'px-3 py-2 text-sm max-w-64',\n lg: 'px-4 py-3 text-base max-w-80',\n };\n\n const variantClasses: Record<'default' | 'info' | 'warning' | 'error', string> = {\n default: 'bg-card/95 text-card-foreground border-border/30',\n info: 'status-info text-card-foreground border-status-info/30',\n warning: 'status-warning text-card-foreground border-status-warning/30',\n error: 'status-error text-card-foreground border-status-error/30',\n };\n\n const positionClasses: Record<'top' | 'bottom' | 'left' | 'right', string> = {\n top: 'bottom-full left-1/2 transform -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 transform -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 transform -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 transform -translate-y-1/2 ml-2',\n };\n\n const arrowClasses: Record<'top' | 'bottom' | 'left' | 'right', string> = {\n top: 'top-full left-1/2 transform -translate-x-1/2 border-l-transparent border-r-transparent border-b-transparent',\n bottom: 'bottom-full left-1/2 transform -translate-x-1/2 border-l-transparent border-r-transparent border-t-transparent',\n left: 'left-full top-1/2 transform -translate-y-1/2 border-t-transparent border-b-transparent border-r-transparent',\n right: 'right-full top-1/2 transform -translate-y-1/2 border-t-transparent border-b-transparent border-l-transparent',\n };\n\n const showTooltip = () => {\n if (disabled) return;\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n \n timeoutRef.current = setTimeout(() => {\n setIsVisible(true);\n requestAnimationFrame(() => {\n checkAndAdjustPosition();\n });\n }, delay);\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n setIsVisible(false);\n };\n\n const checkAndAdjustPosition = () => {\n if (!triggerRef.current || !tooltipRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n let newPosition = position;\n\n // Check if tooltip goes outside viewport and adjust position\n switch (position) {\n case 'top':\n if (triggerRect.top - tooltipRect.height - offset < 0) {\n newPosition = 'bottom';\n }\n break;\n case 'bottom':\n if (triggerRect.bottom + tooltipRect.height + offset > viewport.height) {\n newPosition = 'top';\n }\n break;\n case 'left':\n if (triggerRect.left - tooltipRect.width - offset < 0) {\n newPosition = 'right';\n }\n break;\n case 'right':\n if (triggerRect.right + tooltipRect.width + offset > viewport.width) {\n newPosition = 'left';\n }\n break;\n }\n\n setActualPosition(newPosition);\n };\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const triggerProps = {\n ...(trigger === 'hover' || trigger === 'both' ? {\n onMouseEnter: showTooltip,\n onMouseLeave: hideTooltip,\n } : {}),\n ...(trigger === 'focus' || trigger === 'both' ? {\n onFocus: showTooltip,\n onBlur: hideTooltip,\n } : {}),\n };\n\n const tooltipBaseClasses = cn(\n 'absolute z-50 rounded-lg border backdrop-blur-sm shadow-lg pointer-events-none',\n 'animate-fade-in transition-all duration-200 ease-out',\n sizeClasses[size],\n variantClasses[variant],\n positionClasses[actualPosition],\n getAnimationClasses({\n ...animationPresets.subtle,\n timing: 'fast'\n }),\n contentClassName\n );\n\n const arrowBaseClasses = cn(\n 'absolute w-0 h-0 border-4',\n arrowClasses[actualPosition]\n );\n\n const getArrowColor = () => {\n switch (variant) {\n case 'info':\n return 'border-t-status-info';\n case 'warning':\n return 'border-t-status-warning';\n case 'error':\n return 'border-t-status-error';\n default:\n return 'border-t-card';\n }\n };\n\n return (\n <div className={cn(\"relative inline-block\", className)}>\n <div\n ref={triggerRef}\n {...triggerProps}\n className=\"cursor-help\"\n aria-describedby={isVisible ? 'tooltip' : undefined}\n data-component-name=\"TooltipTrigger\"\n >\n {children}\n </div>\n \n {isVisible && !disabled && (\n <div\n ref={tooltipRef}\n id=\"tooltip\"\n role=\"tooltip\"\n aria-hidden={!isVisible}\n className={tooltipBaseClasses}\n style={{\n marginTop: actualPosition === 'bottom' ? `${offset}px` : actualPosition === 'top' ? `-${offset}px` : '0',\n marginLeft: actualPosition === 'right' ? `${offset}px` : actualPosition === 'left' ? `-${offset}px` : '0',\n }}\n data-component-name=\"Tooltip\"\n >\n {content}\n \n {/* Arrow */}\n <div\n className={cn(\n arrowBaseClasses,\n getArrowColor()\n )}\n style={{\n borderTopColor: actualPosition === 'bottom' ? 'inherit' : 'transparent',\n borderBottomColor: actualPosition === 'top' ? 'inherit' : 'transparent',\n borderLeftColor: actualPosition === 'right' ? 'inherit' : 'transparent',\n borderRightColor: actualPosition === 'left' ? 'inherit' : 'transparent',\n }}\n />\n </div>\n )}\n </div>\n );\n};","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from '../utils/utils'\nimport { Tooltip } from '../composed/Tooltip'\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg text-sm font-medium ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 active:scale-[0.98]\",\n {\n variants: {\n variant: {\n default: \"bg-gradient-to-r from-primary to-primary/90 text-primary-foreground hover:from-primary/90 hover:to-primary/80 shadow-sm hover:shadow-md\",\n destructive:\n \"bg-gradient-to-r from-destructive to-destructive/90 text-destructive-foreground hover:from-destructive/90 hover:to-destructive/80 shadow-sm hover:shadow-md\",\n outline:\n \"border border-gray-300 bg-white hover:bg-gray-50 hover:border-primary/50 shadow-sm\",\n secondary:\n \"bg-gray-100 text-gray-900 hover:bg-gray-200 shadow-sm\",\n ghost: \"hover:bg-muted/80 hover:text-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-5 py-2\",\n sm: \"h-9 rounded-lg px-3 text-xs\",\n lg: \"h-12 rounded-lg px-8 text-base\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n /** Tooltip to show on hover (especially useful for icon-only buttons) */\n tooltip?: string\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, tooltip, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n \n const button = (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n\n // Show tooltip for icon-only buttons or when explicitly provided\n if (tooltip && !asChild) {\n return (\n <Tooltip content={tooltip} position=\"top\" size=\"sm\">\n {button}\n </Tooltip>\n )\n }\n\n return button\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }","import * as React from \"react\"\nimport { cn } from '../utils/utils'\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, category, style, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border border-border bg-card text-card-foreground shadow-sm hover:shadow-md\",\n category && [\n \"border-l-4 hover:border-border/80\",\n `card-category-${category}`\n ],\n className\n )}\n style={style}\n {...props}\n />\n );\n }\n);\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }","import * as React from \"react\"\nimport { cn } from '../utils/utils'\n\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded border border-border bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 transition-all\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from '../utils/utils'\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }","import * as React from \"react\"\nimport { cn } from '../utils/utils'\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b border-gray-100 transition-all duration-150 hover:bg-gray-50/50 data-[state=selected]:bg-gray-100\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-semibold text-gray-700 text-xs uppercase tracking-wider [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}","import React from 'react';\nimport { cn } from '../utils/utils';\n\ninterface BadgeProps {\n children: React.ReactNode;\n variant?: 'default' | 'secondary' | 'destructive' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nexport const Badge = ({ children, variant = 'default', size = 'md', className }: BadgeProps) => {\n const baseClasses = 'inline-flex items-center rounded-full font-medium transition-all duration-150';\n const sizeClasses = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-xs', \n lg: 'px-3 py-1.5 text-sm'\n };\n const variantClasses = {\n default: 'bg-primary/10 text-primary border border-primary/20 hover:bg-primary/20',\n secondary: 'bg-gray-100 text-gray-700 border border-gray-200 hover:bg-gray-200',\n destructive: 'bg-destructive/10 text-destructive border border-destructive/20 hover:bg-destructive/20',\n outline: 'border border-gray-300 text-gray-700 bg-white hover:bg-gray-50'\n };\n \n return (\n <span className={cn(baseClasses, sizeClasses[size], variantClasses[variant], className)}>\n {children}\n </span>\n );\n};","import React from 'react';\nimport { cn } from '../utils/utils';\n\ninterface SelectProps {\n children: React.ReactNode;\n onValueChange?: (value: string) => void;\n defaultValue?: string;\n value?: string;\n}\n\nexport const Select = ({ children }: SelectProps) => (\n <div className=\"relative\">{children}</div>\n);\n\ninterface SelectTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const SelectTrigger = ({ children, className }: SelectTriggerProps) => (\n <button className={cn(\"flex h-10 w-full items-center justify-between rounded-[--radius] border px-3 py-2 text-sm\", className)}>\n {children}\n </button>\n);\n\ninterface SelectValueProps {\n placeholder?: string;\n}\n\nexport const SelectValue = ({ placeholder }: SelectValueProps) => (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n);\n\ninterface SelectContentProps {\n children: React.ReactNode;\n}\n\nexport const SelectContent = ({ children }: SelectContentProps) => (\n <div className=\"absolute top-full left-0 z-50 w-full rounded-[--radius] border bg-popover shadow-[0_10px_15px_-3px_rgb(0_0_0_/_0.1),0_4px_6px_-4px_rgb(0_0_0_/_0.1)]\">\n {children}\n </div>\n);\n\ninterface SelectItemProps {\n children: React.ReactNode;\n value: string;\n}\n\nexport const SelectItem = ({ children }: SelectItemProps) => (\n <div className=\"relative flex w-full cursor-default select-none items-center rounded-[calc(var(--radius)-2px)] py-1.5 px-2 text-sm hover:bg-accent hover:text-accent-foreground\">\n {children}\n </div>\n);","import { cn } from '../utils/utils';\n\ninterface SwitchProps {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n className?: string;\n disabled?: boolean;\n}\n\nexport const Switch = ({ checked, onCheckedChange, className, disabled }: SwitchProps) => {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-1p-ignore\n data-lpignore=\"true\"\n className={cn(\n 'relative inline-flex h-6 w-11 items-center rounded-full transition-all duration-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n checked \n ? 'bg-category-1 shadow-sm' \n : 'bg-muted border-2 border-border shadow-inner',\n !disabled && 'hover:shadow-md',\n className\n )}\n onClick={() => !disabled && onCheckedChange?.(!checked)}\n disabled={disabled}\n >\n <span\n className={cn(\n 'inline-block h-4 w-4 transform rounded-full transition-all duration-200 shadow-md',\n 'ring-0 bg-background border border-border/20',\n checked \n ? 'translate-x-5 bg-white border-white/50' \n : 'translate-x-0.5 bg-background'\n )}\n />\n </button>\n );\n};","import React, { createContext, useContext, useState } from 'react';\nimport { cn } from '../utils/utils';\nimport { getAnimationClasses, animationPresets } from '../utils/animations';\n\ninterface TabsContextType {\n activeTab: string;\n setActiveTab: (tab: string) => void;\n}\n\nconst TabsContext = createContext<TabsContextType | null>(null);\n\ninterface TabsProps {\n children: React.ReactNode;\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n className?: string;\n}\n\nexport const Tabs = ({ children, defaultValue, value, onValueChange, className }: TabsProps) => {\n const [internalActiveTab, setInternalActiveTab] = useState(defaultValue || '');\n \n const activeTab = value !== undefined ? value : internalActiveTab;\n const setActiveTab = (tab: string) => {\n if (onValueChange) {\n onValueChange(tab);\n } else {\n setInternalActiveTab(tab);\n }\n };\n \n return (\n <TabsContext.Provider value={{ activeTab, setActiveTab }}>\n <div className={className}>{children}</div>\n </TabsContext.Provider>\n );\n};\n\ninterface TabsListProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const TabsList = ({ children, className }: TabsListProps) => (\n <div \n className={cn(\n 'h-auto min-h-10 items-center justify-center rounded-lg bg-card border border-border shadow-sm',\n 'flex flex-wrap gap-1 sm:gap-2 lg:gap-3 w-full lg:w-fit mx-auto mb-6 p-1',\n className\n )}\n data-component-name=\"TabsList\"\n >\n {children}\n </div>\n);\n\ninterface TabsTriggerProps {\n children: React.ReactNode;\n value: string;\n className?: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n 'data-category'?: string;\n}\n\nexport const TabsTrigger = ({ children, value, className, category, 'data-category': dataCategory }: TabsTriggerProps) => {\n // Use data-category if provided, otherwise fallback to category prop, then default to 1\n const effectiveCategory = dataCategory ? parseInt(dataCategory) as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 : category || 1;\n const context = useContext(TabsContext);\n const isActive = context?.activeTab === value;\n \n const activeStyles = isActive ? {\n backgroundColor: `hsl(var(--category-${effectiveCategory}) / 0.15)`,\n color: `hsl(var(--category-${effectiveCategory}))`,\n borderColor: `hsl(var(--category-${effectiveCategory}) / 0.3)`,\n boxShadow: 'var(--shadow-sm)'\n } : {};\n \n return (\n <button\n className={cn(\n 'w-auto flex-grow items-center justify-center whitespace-nowrap rounded-md px-1 sm:px-2 md:px-3 py-1 sm:py-2 text-sm font-medium',\n // Always have a border to prevent layout shifts\n 'border',\n isActive \n ? '' // Remove class-based styling when using inline styles\n : cn(\n 'text-muted-foreground hover:text-foreground border-transparent hover:bg-muted/80',\n getAnimationClasses(animationPresets.tab)\n ),\n className\n )}\n style={activeStyles}\n onClick={() => context?.setActiveTab(value)}\n data-component-name=\"TabsTrigger\"\n >\n {children}\n </button>\n );\n};\n\ninterface TabsContentProps {\n children: React.ReactNode;\n value: string;\n className?: string;\n}\n\nexport const TabsContent = ({ children, value, className }: TabsContentProps) => {\n const context = useContext(TabsContext);\n const isActive = context?.activeTab === value;\n \n if (!isActive) return null;\n \n return (\n <div className={cn('mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', className)}>\n {children}\n </div>\n );\n};","import * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from '../utils/utils'\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }","import * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from '../utils/utils'\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}","import { cn } from '../utils/utils'\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }","import React from 'react';\nimport { cn } from '../utils/utils';\nimport { Loader2 } from 'lucide-react';\n\ninterface SpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst sizeMap = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6', \n lg: 'w-8 h-8'\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({ \n size = 'md', \n className \n}) => {\n return (\n <Loader2 \n className={cn(\n 'animate-spin text-muted-foreground',\n sizeMap[size],\n className\n )} \n />\n );\n};\n\n// Alternative loading component for inline use\ninterface LoadingProps {\n text?: string;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nexport const Loading: React.FC<LoadingProps> = ({ \n text = 'Loading...', \n size = 'md', \n className \n}) => {\n return (\n <div className={cn('flex items-center gap-2 text-muted-foreground', className)}>\n <Spinner size={size} />\n <span className=\"text-sm\">{text}</span>\n </div>\n );\n};","import React from 'react';\nimport { cn, useTextOverflow } from '../../utils/utils';\nimport { Tooltip } from '../Tooltip';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface DataBadgeProps {\n children: React.ReactNode;\n variant?: 'category' | 'status';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n size?: 'sm' | 'md' | 'lg';\n interactive?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport const DataBadge = ({ \n children,\n variant = 'category',\n category = 1,\n status = 'neutral',\n size = 'md',\n interactive = false,\n onClick,\n className\n}: DataBadgeProps) => {\n const { ref, isOverflowing } = useTextOverflow();\n\n const sizeClasses: Record<'sm' | 'md' | 'lg', string> = {\n sm: 'px-2 py-0.5 text-xs h-5 min-w-[1.5rem] max-w-[150px]',\n md: 'px-2.5 py-1 text-sm h-7 min-w-[2rem] max-w-[200px]',\n lg: 'px-3 py-1.5 text-base h-9 min-w-[2.5rem] max-w-[250px]',\n };\n\n const baseClasses = cn(\n 'inline-flex items-center font-medium rounded-lg border truncate',\n sizeClasses[size],\n interactive && [\n 'cursor-pointer',\n getAnimationClasses({\n ...animationPresets.dataBadge,\n size: size === 'lg' ? 'lg' : size === 'sm' ? 'sm' : 'md'\n })\n ],\n className\n );\n\n const variantClasses = variant === 'category' \n ? `badge-category-${category}`\n : `status-${status}`;\n\n const badge = (\n <span \n ref={ref as React.RefObject<HTMLSpanElement>}\n className={cn(baseClasses, variantClasses, 'animate-fade-in')}\n onClick={onClick}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n onKeyDown={interactive ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n } : undefined}\n data-component-name=\"DataBadge\"\n >\n {children}\n </span>\n );\n\n // Show tooltip when text is truncated\n if (isOverflowing && typeof children === 'string') {\n return (\n <Tooltip content={children} position=\"top\" size=\"sm\">\n {badge}\n </Tooltip>\n );\n }\n\n return badge;\n};","import React from 'react';\nimport { Card } from '../../ui/card';\nimport { Skeleton } from '../../ui/skeleton';\nimport { Tooltip } from '../Tooltip';\nimport { TrendingUp, TrendingDown, Minus, ArrowRight } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport type { ILoadable } from '../../types';\n\nexport interface StatCardProps extends ILoadable {\n title: string;\n value: string | number;\n subtitle?: string;\n trend?: {\n value: number;\n label?: string;\n };\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n icon?: React.ReactNode;\n onClick?: () => void;\n className?: string;\n /** Tooltip content for the value (useful for showing full numbers when abbreviated) */\n valueTooltip?: string;\n /** Tooltip content for the icon */\n iconTooltip?: string;\n}\n\nexport const StatCard = ({\n title,\n value,\n subtitle,\n trend,\n category,\n icon,\n onClick,\n className,\n valueTooltip,\n iconTooltip,\n isLoading = false\n}: StatCardProps) => {\n const getTrendIcon = () => {\n if (!trend) return null;\n \n if (trend.value > 0) {\n return <TrendingUp className=\"w-4 h-4\" />;\n } else if (trend.value < 0) {\n return <TrendingDown className=\"w-4 h-4\" />;\n }\n return <Minus className=\"w-4 h-4\" />;\n };\n\n const getTrendColor = () => {\n if (!trend) return '';\n \n if (trend.value > 0) return 'text-status-success';\n if (trend.value < 0) return 'text-status-error';\n return 'text-status-neutral';\n };\n\n // Loading state skeleton that matches StatCard dimensions\n if (isLoading) {\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden\",\n className\n )}\n category={category}\n data-component-name=\"StatCard\"\n >\n <div className=\"space-y-3 relative\">\n {/* Hidden content that defines exact dimensions */}\n <div className=\"flex items-center justify-between\">\n <div className=\"text-data-label font-medium\" style={{ visibility: 'hidden' }}>\n {title}\n </div>\n {icon && (\n <div className={cn(\n \"p-2 rounded-md flex items-center justify-center transition-colors\",\n category ? `bg-muted/50 text-category-${category}` : \"bg-muted/50 text-muted-foreground\"\n )} style={{ visibility: 'hidden' }}>\n {icon}\n </div>\n )}\n </div>\n\n <div className=\"space-y-1\">\n <div className={cn(\n \"text-3xl font-bold transition-all group-hover:scale-105\",\n category ? `text-category-${category}` : \"text-foreground\"\n )} style={{ visibility: 'hidden' }}>\n {value}\n </div>\n {subtitle && (\n <div className=\"text-data-meta\" style={{ visibility: 'hidden' }}>\n {subtitle}\n </div>\n )}\n </div>\n\n <div className=\"flex items-center justify-between\">\n {trend && (\n <div className={cn(\"flex items-center gap-1.5 text-sm\", \"text-muted-foreground\")} style={{ visibility: 'hidden' }}>\n {/* Render actual trend content hidden */}\n <span>{trend.value > 0 && '+'}{trend.value}%</span>\n {trend.label && <span>{trend.label}</span>}\n </div>\n )}\n {onClick && (\n <div style={{ visibility: 'hidden' }}>→</div>\n )}\n </div>\n\n {/* Skeleton overlay positioned absolutely */}\n <div className=\"absolute inset-0 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <Skeleton className=\"h-5 w-24\" />\n {icon && (\n <div className=\"p-2 rounded flex items-center justify-center bg-muted/50\">\n <Skeleton className=\"h-5 w-5\" />\n </div>\n )}\n </div>\n <div className=\"space-y-1\">\n <Skeleton className=\"h-9 w-20\" />\n {subtitle && <Skeleton className=\"h-4 w-32\" />}\n </div>\n <div className=\"flex items-center justify-between\">\n {trend && <Skeleton className=\"h-4 w-16\" />}\n {onClick && <Skeleton className=\"h-4 w-4 ml-auto\" />}\n </div>\n </div>\n </div>\n </Card>\n );\n }\n\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden transition-all animate-slide-up\",\n onClick && \"cursor-pointer hover:shadow-md hover:scale-105 active:scale-95\",\n category && `hover:shadow-category-${category}`,\n \"group\",\n className\n )}\n category={category} // Pass category directly to Card component\n data-component-name=\"StatCard\"\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n } : undefined}\n >\n <div className=\"space-y-3\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-foreground\" data-component-name=\"StatCard\">{title}</div>\n {icon && (\n <Tooltip \n content={iconTooltip} \n disabled={!iconTooltip}\n position=\"left\"\n size=\"sm\"\n >\n <div className={cn(\n \"p-2 rounded-md flex items-center justify-center transition-colors\",\n category ? `bg-muted/50 text-category-${category}` : \"bg-muted/50 text-muted-foreground\"\n )} data-component-name=\"StatCardIcon\">\n {icon}\n </div>\n </Tooltip>\n )}\n </div>\n\n {/* Value */}\n <div className=\"space-y-1\">\n <Tooltip \n content={valueTooltip} \n disabled={!valueTooltip}\n position=\"top\"\n size=\"sm\"\n >\n <div className={cn(\n \"text-3xl font-bold transition-all group-hover:scale-105\",\n category ? `text-category-${category}` : \"text-foreground\"\n )}>\n {value}\n </div>\n </Tooltip>\n {subtitle && (\n <div className=\"text-data-meta\">{subtitle}</div>\n )}\n </div>\n\n {/* Trend or Action */}\n <div className=\"flex items-center justify-between\">\n {trend && (\n <div className={cn(\"flex items-center gap-1.5 text-sm\", getTrendColor())}>\n {getTrendIcon()}\n <span className=\"font-medium\">\n {trend.value > 0 && '+'}{trend.value}%\n </span>\n {trend.label && (\n <span className=\"text-data-meta\">{trend.label}</span>\n )}\n </div>\n )}\n {onClick && (\n <ArrowRight className=\"w-4 h-4 text-muted-foreground ml-auto transition-transform group-hover:translate-x-1\" data-component-name=\"StatCardArrow\" />\n )}\n </div>\n </div>\n </Card>\n );\n};","import React from 'react';\nimport { Card } from '../../ui/card';\nimport { DataBadge } from '../DataBadge/DataBadge';\nimport { ArrowRight, TrendingUp, TrendingDown, Minus } from 'lucide-react';\nimport { cn } from '../../utils/utils';\n\nexport interface DetailedCardProps {\n title: string;\n subtitle?: string;\n description?: string;\n primaryMetric: {\n label: string;\n value: string | number;\n trend?: {\n value: number;\n label?: string;\n };\n };\n secondaryMetrics?: Array<{\n label: string;\n value: string | number;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n }>;\n tags?: Array<{\n label: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n }>;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n icon?: React.ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport const DetailedCard = ({\n title,\n subtitle,\n description,\n primaryMetric,\n secondaryMetrics = [],\n tags = [],\n category,\n icon,\n onClick,\n className\n}: DetailedCardProps) => {\n const getTrendIcon = (trendValue: number) => {\n if (trendValue > 0) {\n return <TrendingUp className=\"w-3 h-3\" />;\n } else if (trendValue < 0) {\n return <TrendingDown className=\"w-3 h-3\" />;\n }\n return <Minus className=\"w-3 h-3\" />;\n };\n\n const getTrendColor = (trendValue: number) => {\n if (trendValue > 0) return 'text-status-success';\n if (trendValue < 0) return 'text-status-error';\n return 'text-status-neutral';\n };\n\n // We don't need to create category classes manually - let the Card component handle it\n\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden transition-all animate-slide-up\",\n onClick && \"cursor-pointer hover:shadow-md hover:scale-[1.01] active:scale-[0.99]\",\n category && `hover:shadow-category-${category}`,\n \"group\",\n className\n )}\n category={category} // Pass category directly to Card component\n data-component-name=\"DetailedCard\"\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n } : undefined}\n >\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <h3 className=\"text-xl font-bold text-foreground truncate\">{title}</h3>\n {icon && (\n <div className={cn(\n \"p-3 rounded-lg flex items-center justify-center flex-shrink-0 transition-colors\",\n category ? `bg-category-${category}/8 text-category-${category}` : \"bg-muted/50 text-muted-foreground\"\n )}>\n <div className=\"scale-110\">\n {icon}\n </div>\n </div>\n )}\n </div>\n {subtitle && (\n <p className=\"text-data-meta text-sm\">{subtitle}</p>\n )}\n </div>\n {onClick && (\n <ArrowRight className=\"w-4 h-4 text-muted-foreground ml-2 flex-shrink-0 transition-transform group-hover:translate-x-1\" data-component-name=\"DetailedCardArrow\" />\n )}\n </div>\n\n {/* Description */}\n {description && (\n <p className=\"text-sm text-muted-foreground leading-relaxed\">{description}</p>\n )}\n\n {/* Primary Metric */}\n <div className=\"space-y-2\">\n <div className=\"text-data-label text-xs\">{primaryMetric.label}</div>\n <div className=\"flex items-baseline gap-3\">\n <span className={cn(\n \"text-2xl font-bold transition-all group-hover:scale-105\",\n category ? `text-category-${category}` : \"text-foreground\"\n )}>\n {primaryMetric.value}\n </span>\n {primaryMetric.trend && (\n <div className={cn(\n \"flex items-center gap-1 text-xs\",\n getTrendColor(primaryMetric.trend.value)\n )}>\n {getTrendIcon(primaryMetric.trend.value)}\n <span className=\"font-medium\">\n {primaryMetric.trend.value > 0 && '+'}{primaryMetric.trend.value}%\n </span>\n {primaryMetric.trend.label && (\n <span className=\"text-data-meta ml-1\">{primaryMetric.trend.label}</span>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Secondary Metrics */}\n {secondaryMetrics.length > 0 && (\n <div className=\"grid grid-cols-2 gap-3 py-2\">\n {secondaryMetrics.map((metric, index) => (\n <div key={index} className=\"space-y-1\">\n <div className=\"text-data-label text-xs\">{metric.label}</div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-foreground\">{metric.value}</span>\n {metric.status && (\n <DataBadge variant=\"status\" status={metric.status} size=\"sm\">\n {metric.status}\n </DataBadge>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Tags */}\n {tags.length > 0 && (\n <div className=\"flex flex-wrap gap-2 pt-2 border-t border-border\">\n {tags.map((tag, index) => (\n <DataBadge\n key={index}\n variant={tag.category ? 'category' : 'status'}\n category={tag.category}\n status={tag.status}\n size=\"sm\"\n >\n {tag.label}\n </DataBadge>\n ))}\n </div>\n )}\n </div>\n </Card>\n );\n};","import React from 'react';\nimport { Button } from '../../ui/button';\nimport { cn } from '../../utils/utils';\nimport { FileX, Search, AlertCircle, Database } from 'lucide-react';\n\nexport interface EmptyStateProps {\n variant?: 'no-data' | 'no-results' | 'error' | 'loading';\n title: string;\n description?: string;\n icon?: React.ReactNode;\n action?: {\n label: string;\n onClick: () => void;\n };\n secondaryAction?: {\n label: string;\n onClick: () => void;\n };\n className?: string;\n}\n\nconst defaultIcons = {\n 'no-data': <Database className=\"w-12 h-12\" />,\n 'no-results': <Search className=\"w-12 h-12\" />,\n 'error': <AlertCircle className=\"w-12 h-12\" />,\n 'loading': <FileX className=\"w-12 h-12\" />,\n};\n\nexport const EmptyState = ({\n variant = 'no-data',\n title,\n description,\n icon,\n action,\n secondaryAction,\n className\n}: EmptyStateProps) => {\n const displayIcon = icon || defaultIcons[variant];\n\n return (\n <div className={cn(\n \"flex flex-col items-center justify-center py-12 px-4 text-center\",\n className\n )}\n data-component-name=\"EmptyState\"\n data-variant={variant}\n >\n {/* Icon */}\n <div className={cn(\n \"mb-4 transition-all\",\n variant === 'no-data' && \"text-category-1 opacity-60\",\n variant === 'no-results' && \"text-category-2 opacity-60\",\n variant === 'error' && \"text-status-error opacity-60\",\n variant === 'loading' && \"text-category-3 opacity-60 animate-pulse\"\n )}\n data-component-name=\"EmptyStateIcon\"\n >\n {displayIcon}\n </div>\n\n {/* Title */}\n <h3 className=\"text-lg font-semibold text-foreground mb-2\" data-component-name=\"EmptyStateTitle\">\n {title}\n </h3>\n\n {/* Description */}\n {description && (\n <p className=\"text-muted-foreground max-w-md mb-6\" data-component-name=\"EmptyStateDescription\">\n {description}\n </p>\n )}\n\n {/* Actions */}\n {(action || secondaryAction) && (\n <div className=\"flex flex-col sm:flex-row gap-3\" data-component-name=\"EmptyStateActions\">\n {action && (\n <Button onClick={action.onClick}>\n {action.label}\n </Button>\n )}\n {secondaryAction && (\n <Button variant=\"outline\" onClick={secondaryAction.onClick}>\n {secondaryAction.label}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../utils/utils';\n\nexport interface ColorSwatchProps {\n /** CSS color value (hex, hsl, rgb, or CSS variable) */\n color: string;\n /** Display name for the color */\n name: string;\n /** Optional size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Optional label to show below the swatch */\n label?: string;\n /** Additional CSS classes */\n className?: string;\n /** Whether the swatch is interactive */\n interactive?: boolean;\n /** Click handler for interactive swatches */\n onClick?: () => void;\n}\n\nexport const ColorSwatch: React.FC<ColorSwatchProps> = ({\n color,\n name,\n size = 'md',\n label,\n className,\n interactive = false,\n onClick\n}) => {\n const sizeClasses = {\n sm: 'w-8 h-8',\n md: 'w-16 h-16', \n lg: 'w-24 h-24'\n };\n\n const labelSizes = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base'\n };\n\n return (\n <div \n className={cn(\n 'flex flex-col items-center space-y-2',\n interactive && 'cursor-pointer group',\n className\n )}\n data-component-name=\"ColorSwatch\"\n onClick={onClick}\n >\n <div\n className={cn(\n 'rounded border border-border/20 flex items-center justify-center text-white font-medium',\n sizeClasses[size],\n interactive && 'transition-all hover:scale-105 hover:shadow group-hover:border-border'\n )}\n style={{ backgroundColor: color }}\n title={`${name}: ${color}`}\n >\n {size === 'lg' && <span className=\"text-sm\">{name}</span>}\n </div>\n \n {label && (\n <div className={cn('text-center space-y-1', labelSizes[size])}>\n <div className=\"font-medium text-foreground\">{label}</div>\n <div className=\"text-muted-foreground font-mono text-xs\">{color}</div>\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../utils/utils';\nimport { Tooltip } from '../Tooltip';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface IconBadgeProps {\n children?: React.ReactNode;\n icon?: React.ReactNode;\n variant?: 'category' | 'status';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n size?: 'sm' | 'md' | 'lg';\n interactive?: boolean;\n onClick?: () => void;\n className?: string;\n /** Tooltip content to show on hover */\n tooltip?: string;\n}\n\nexport const IconBadge = ({ \n children,\n icon,\n variant = 'category',\n category = 1,\n status = 'neutral',\n size = 'md',\n interactive = false,\n onClick,\n className,\n tooltip\n}: IconBadgeProps) => {\n\n const sizeClasses: Record<'sm' | 'md' | 'lg', string> = {\n sm: 'w-8 h-8 text-xs rounded-lg',\n md: 'w-10 h-10 text-sm rounded-xl',\n lg: 'w-12 h-12 text-base rounded-xl',\n };\n\n const baseClasses = cn(\n 'inline-flex items-center justify-center font-bold shadow-md',\n sizeClasses[size],\n interactive && [\n 'cursor-pointer',\n getAnimationClasses({\n ...animationPresets.dataBadge,\n size: size === 'lg' ? 'lg' : size === 'sm' ? 'sm' : 'md'\n })\n ],\n className\n );\n\n // Generate gradient classes based on variant\n const gradientClasses = variant === 'category' \n ? `bg-gradient-to-br from-category-${category} to-category-${Math.min(category + 1, 8)}`\n : variant === 'status'\n ? `bg-gradient-to-br from-status-${status} to-status-${status}`\n : 'bg-gradient-to-br from-category-1 to-category-2';\n\n const badge = (\n <div \n className={cn(baseClasses, gradientClasses, 'animate-fade-in')}\n onClick={onClick}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n onKeyDown={interactive ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n } : undefined}\n data-component-name=\"IconBadge\"\n >\n {icon && (\n <span className=\"text-primary-foreground drop-shadow\">\n {icon}\n </span>\n )}\n {children && !icon && (\n <span className=\"text-primary-foreground font-bold\">\n {children}\n </span>\n )}\n </div>\n );\n\n if (tooltip) {\n return (\n <Tooltip content={tooltip} position=\"top\" size=\"sm\">\n {badge}\n </Tooltip>\n );\n }\n\n return badge;\n};","import { apiClient } from './api/client';\nimport type { \n AuthConfig, \n BaseUser, \n LoginCredentials, \n LoginResponse, \n RefreshResponse, \n TokenData \n} from '../types';\n\nexport class AuthService<T extends BaseUser = BaseUser> {\n private config: AuthConfig;\n private refreshPromise: Promise<void> | null = null;\n\n constructor(config: AuthConfig) {\n this.config = {\n tokenStorage: 'localStorage',\n tokenRefreshBuffer: 5, // 5 minutes before expiry\n autoRefresh: true,\n ...config\n };\n }\n\n private getStorageKey(key: string): string {\n return `auth_${key}`;\n }\n\n private setItem(key: string, value: string): void {\n const storageKey = this.getStorageKey(key);\n switch (this.config.tokenStorage) {\n case 'sessionStorage':\n sessionStorage.setItem(storageKey, value);\n break;\n case 'cookie':\n // Simple cookie implementation - for production use a proper cookie library\n document.cookie = `${storageKey}=${value}; path=/; secure; samesite=strict`;\n break;\n default:\n localStorage.setItem(storageKey, value);\n }\n }\n\n private getItem(key: string): string | null {\n const storageKey = this.getStorageKey(key);\n switch (this.config.tokenStorage) {\n case 'sessionStorage':\n return sessionStorage.getItem(storageKey);\n case 'cookie':\n // Simple cookie reading - for production use a proper cookie library\n const match = document.cookie.match(`(?:^|;)\\\\s*${storageKey}=([^;]*)`);\n return match ? decodeURIComponent(match[1]) : null;\n default:\n return localStorage.getItem(storageKey);\n }\n }\n\n private removeItem(key: string): void {\n const storageKey = this.getStorageKey(key);\n switch (this.config.tokenStorage) {\n case 'sessionStorage':\n sessionStorage.removeItem(storageKey);\n break;\n case 'cookie':\n document.cookie = `${storageKey}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`;\n break;\n default:\n localStorage.removeItem(storageKey);\n }\n }\n\n getTokenData(): TokenData | null {\n const token = this.getItem('token');\n const refreshToken = this.getItem('refresh_token');\n const expiresAt = this.getItem('expires_at');\n\n if (!token) return null;\n\n return {\n token,\n refreshToken: refreshToken || undefined,\n expiresAt: expiresAt ? parseInt(expiresAt, 10) : undefined\n };\n }\n\n private setTokenData(tokenData: TokenData): void {\n this.setItem('token', tokenData.token);\n if (tokenData.refreshToken) {\n this.setItem('refresh_token', tokenData.refreshToken);\n }\n if (tokenData.expiresAt) {\n this.setItem('expires_at', tokenData.expiresAt.toString());\n }\n }\n\n getStoredUser(): T | null {\n const userData = this.getItem('user');\n if (!userData) return null;\n\n try {\n return JSON.parse(userData) as T;\n } catch {\n this.clearAuth();\n return null;\n }\n }\n\n private setStoredUser(user: T): void {\n this.setItem('user', JSON.stringify(user));\n }\n\n clearAuth(): void {\n this.removeItem('token');\n this.removeItem('refresh_token');\n this.removeItem('expires_at');\n this.removeItem('user');\n }\n\n async login(credentials: LoginCredentials): Promise<T> {\n const response = await apiClient.post<LoginResponse<T>>(\n `${this.config.apiUrl}${this.config.endpoints.login}`,\n credentials\n );\n\n const { token, refreshToken, user, expiresIn } = response;\n \n // Calculate expiration time\n const expiresAt = expiresIn \n ? Date.now() + (expiresIn * 1000) \n : undefined;\n\n // Store tokens and user\n this.setTokenData({ token, refreshToken, expiresAt });\n this.setStoredUser(user);\n\n // Setup auto-refresh if enabled\n if (this.config.autoRefresh && expiresAt) {\n this.scheduleTokenRefresh(expiresAt);\n }\n\n return user;\n }\n\n async refreshToken(): Promise<void> {\n // Prevent multiple simultaneous refresh attempts\n if (this.refreshPromise) {\n return this.refreshPromise;\n }\n\n const tokenData = this.getTokenData();\n if (!tokenData?.refreshToken) {\n throw new Error('No refresh token available');\n }\n\n this.refreshPromise = this.performTokenRefresh(tokenData.refreshToken);\n \n try {\n await this.refreshPromise;\n } finally {\n this.refreshPromise = null;\n }\n }\n\n private async performTokenRefresh(refreshToken: string): Promise<void> {\n try {\n const response = await apiClient.post<RefreshResponse>(\n `${this.config.apiUrl}${this.config.endpoints.refresh}`,\n { refreshToken }\n );\n\n const { token, refreshToken: newRefreshToken, expiresIn } = response;\n \n const expiresAt = expiresIn \n ? Date.now() + (expiresIn * 1000) \n : undefined;\n\n // Update stored tokens\n this.setTokenData({ \n token, \n refreshToken: newRefreshToken || refreshToken, \n expiresAt \n });\n\n // Schedule next refresh\n if (this.config.autoRefresh && expiresAt) {\n this.scheduleTokenRefresh(expiresAt);\n }\n } catch (error) {\n // Refresh failed, clear auth\n this.clearAuth();\n throw error;\n }\n }\n\n private scheduleTokenRefresh(expiresAt: number): void {\n const bufferMs = (this.config.tokenRefreshBuffer || 5) * 60 * 1000;\n const refreshAt = expiresAt - bufferMs;\n const delay = Math.max(0, refreshAt - Date.now());\n\n setTimeout(() => {\n if (this.getTokenData()) {\n this.refreshToken().catch(() => {\n // Silent fail - user will need to re-login\n });\n }\n }, delay);\n }\n\n isTokenExpired(): boolean {\n const tokenData = this.getTokenData();\n if (!tokenData?.expiresAt) return false;\n \n return Date.now() >= tokenData.expiresAt;\n }\n\n shouldRefreshToken(): boolean {\n const tokenData = this.getTokenData();\n if (!tokenData?.expiresAt || !tokenData.refreshToken) return false;\n \n const bufferMs = (this.config.tokenRefreshBuffer || 5) * 60 * 1000;\n return Date.now() >= (tokenData.expiresAt - bufferMs);\n }\n\n async getCurrentUser(): Promise<T | null> {\n const tokenData = this.getTokenData();\n if (!tokenData?.token) return null;\n\n try {\n return await apiClient.get<T>(`${this.config.apiUrl}${this.config.endpoints.me}`);\n } catch {\n return null;\n }\n }\n\n async logout(): Promise<void> {\n const tokenData = this.getTokenData();\n \n // Call logout endpoint if available\n if (this.config.endpoints.logout && tokenData?.token) {\n try {\n await apiClient.post(`${this.config.apiUrl}${this.config.endpoints.logout}`);\n } catch {\n // Ignore logout endpoint errors\n }\n }\n\n this.clearAuth();\n }\n}","import { useState, useEffect, createContext, useContext, useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport { AuthService } from '../../../atoms/services/auth-service';\nimport { setGlobalAuthService } from '../../../atoms/services/api/client';\nimport type { \n AuthConfig, \n BaseUser, \n LoginCredentials, \n AuthContextType \n} from '../../../atoms/types';\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\nexport function useAuth<T extends BaseUser = BaseUser>(): AuthContextType<T> {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context as AuthContextType<T>;\n}\n\ninterface AuthProviderProps {\n children: ReactNode;\n config?: AuthConfig;\n}\n\nexport function AuthProvider<T extends BaseUser = BaseUser>({ \n children, \n config \n}: AuthProviderProps) {\n const [user, setUser] = useState<T | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [permissions, setPermissions] = useState<string[]>([]);\n\n // Create auth service with default config if none provided\n const authService = useMemo(() => {\n const defaultConfig: AuthConfig = {\n apiUrl: import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080',\n endpoints: {\n login: '/auth/login',\n register: '/auth/register',\n refresh: '/auth/refresh',\n me: '/auth/me',\n logout: '/auth/logout'\n },\n tokenStorage: 'localStorage',\n tokenRefreshBuffer: 5,\n autoRefresh: true,\n permissions: {\n enabled: false\n }\n };\n\n const mergedConfig = config ? { ...defaultConfig, ...config } : defaultConfig;\n const service = new AuthService<T>(mergedConfig);\n \n // Set global reference for API client\n setGlobalAuthService(service);\n \n return service;\n }, [config]);\n\n const isAuthenticated = !!user;\n\n useEffect(() => {\n // Check for existing auth on mount\n const initAuth = async () => {\n setIsLoading(true);\n \n try {\n // Check for stored user\n const storedUser = authService.getStoredUser();\n const tokenData = authService.getTokenData();\n \n if (storedUser && tokenData?.token) {\n if (authService.isTokenExpired()) {\n // Token expired, try to refresh\n if (tokenData.refreshToken) {\n try {\n await authService.refreshToken();\n setUser(storedUser);\n \n // Load fresh user data if possible\n try {\n const freshUser = await authService.getCurrentUser();\n if (freshUser) setUser(freshUser);\n } catch {\n // Keep stored user if fresh fetch fails\n }\n } catch {\n // Refresh failed, clear auth\n authService.clearAuth();\n }\n } else {\n // No refresh token, clear auth\n authService.clearAuth();\n }\n } else {\n // Token still valid\n setUser(storedUser);\n \n // Optionally validate with server\n try {\n const freshUser = await authService.getCurrentUser();\n if (freshUser) setUser(freshUser);\n } catch {\n // Keep stored user if validation fails\n }\n }\n }\n } catch (error) {\n console.error('Auth initialization error:', error);\n authService.clearAuth();\n } finally {\n setIsLoading(false);\n }\n };\n\n initAuth();\n }, [authService]);\n\n const login = async (credentials: LoginCredentials) => {\n setIsLoading(true);\n try {\n const user = await authService.login(credentials);\n setUser(user);\n \n // Extract permissions if user has roles/permissions\n if (config?.permissions?.enabled && 'permissions' in user) {\n setPermissions((user as any).permissions || []);\n }\n } catch (error) {\n throw error;\n } finally {\n setIsLoading(false);\n }\n };\n\n const logout = async () => {\n setIsLoading(true);\n try {\n await authService.logout();\n setUser(null);\n setPermissions([]);\n } catch (error) {\n console.error('Logout error:', error);\n // Clear local state anyway\n authService.clearAuth();\n setUser(null);\n setPermissions([]);\n } finally {\n setIsLoading(false);\n }\n };\n\n const refreshToken = async () => {\n await authService.refreshToken();\n };\n\n const hasPermission = (permission: string): boolean => {\n if (!config?.permissions?.enabled) return true;\n return permissions.includes(permission);\n };\n\n const hasRole = (role: string): boolean => {\n if (!config?.permissions?.enabled) return true;\n \n // Check if user has role property\n if (user && 'role' in user) {\n return (user as any).role === role;\n }\n \n // Check if user has roles array\n if (user && 'roles' in user) {\n return ((user as any).roles || []).includes(role);\n }\n \n // Fallback: check admin/user roles from config\n const { adminRoles = ['admin'], userRoles = ['user'] } = config.permissions || {};\n \n if (adminRoles.includes(role)) {\n return permissions.includes('admin') || permissions.includes('*');\n }\n \n if (userRoles.includes(role)) {\n return permissions.length > 0; // Any permissions = user role\n }\n \n return false;\n };\n\n const value: AuthContextType<T> = {\n user,\n isAuthenticated,\n isLoading,\n permissions,\n login,\n logout,\n refreshToken,\n hasPermission,\n hasRole,\n };\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}","import { useState } from 'react';\nimport { useAuth } from '../hooks/useAuth';\nimport { Button } from '../../../atoms/ui/button';\nimport { Input } from '../../../atoms/ui/input';\nimport { Label } from '../../../atoms/ui/label';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../../atoms/ui/card';\nimport { cn } from '../../../atoms/utils/utils';\nimport { Database, Shield, TrendingUp, Mail, Lock, Sparkles } from 'lucide-react';\n\nexport function LoginForm() {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [error, setError] = useState('');\n const { login, isLoading } = useAuth();\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n \n try {\n await login({ email, password });\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Login failed');\n }\n };\n\n return (\n <div className=\"min-h-screen relative overflow-hidden bg-gradient-to-br from-muted/20 via-background to-muted/40\">\n {/* Background Pattern */}\n <div className=\"absolute inset-0 bg-muted/5 opacity-5\" />\n \n {/* Floating Elements */}\n <div className=\"absolute top-20 left-20 w-32 h-32 bg-primary/10 rounded-full blur-xl animate-pulse\" />\n <div className=\"absolute top-40 right-32 w-24 h-24 bg-secondary/10 rounded-full blur-lg animate-pulse delay-1000\" />\n <div className=\"absolute bottom-40 left-32 w-40 h-40 bg-accent/10 rounded-full blur-2xl animate-pulse delay-500\" />\n \n <div className=\"min-h-screen flex items-center justify-center p-4 relative z-10\">\n <div className=\"w-full max-w-md space-y-8\">\n {/* Header */}\n <div className=\"text-center space-y-6 animate-slide-up\">\n <div className=\"flex justify-center\">\n <div className=\"relative\">\n <div className=\"w-16 h-16 bg-gradient-to-br from-primary to-secondary rounded flex items-center justify-center shadow\">\n <Database className=\"w-8 h-8 text-primary-foreground\" />\n </div>\n <div className=\"absolute -top-1 -right-1 w-6 h-6 bg-gradient-to-br from-accent to-accent-foreground rounded-full flex items-center justify-center\">\n <Sparkles className=\"w-3 h-3 text-accent-foreground\" />\n </div>\n </div>\n </div>\n \n <div className=\"space-y-2\">\n <h1 className=\"text-3xl font-bold bg-gradient-to-r from-foreground via-primary to-secondary bg-clip-text text-transparent\">\n Data Trust Navigator\n </h1>\n <p className=\"text-muted-foreground text-lg\">\n Explore, analyze, and trust your data ecosystem\n </p>\n </div>\n </div>\n\n {/* Login Card */}\n <Card className=\"card-container animate-slide-up border-0 shadow bg-background/80 backdrop-blur-sm\">\n <CardHeader className=\"text-center pb-4\">\n <CardTitle className=\"text-xl font-semibold\">Welcome Back</CardTitle>\n <CardDescription>\n Sign in to access your analytics dashboard\n </CardDescription>\n </CardHeader>\n \n <CardContent className=\"space-y-6\">\n <form onSubmit={handleSubmit} className=\"space-y-5\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\" className=\"text-data-label\">Email Address</Label>\n <div className=\"relative\">\n <Mail className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground w-4 h-4\" />\n <Input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n placeholder=\"Enter your email\"\n className=\"pl-10 h-11 transition-all duration-200 focus:ring-2 focus:ring-ring focus:border-ring\"\n />\n </div>\n </div>\n \n <div className=\"space-y-2\">\n <Label htmlFor=\"password\" className=\"text-data-label\">Password</Label>\n <div className=\"relative\">\n <Lock className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground w-4 h-4\" />\n <Input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n required\n placeholder=\"Enter your password\"\n className=\"pl-10 h-11 transition-all duration-200 focus:ring-2 focus:ring-ring focus:border-ring\"\n />\n </div>\n </div>\n \n {error && (\n <div className=\"bg-destructive/10 border border-destructive/20 text-destructive text-sm p-3 rounded animate-shake\">\n {error}\n </div>\n )}\n \n <Button \n type=\"submit\" \n className={cn(\n \"w-full h-11 bg-gradient-to-r from-primary to-secondary hover:from-primary/90 hover:to-secondary/90 text-primary-foreground font-medium transition-all duration-200 hover:shadow-lg hover:scale-[1.02] active:scale-[0.98]\"\n )}\n disabled={isLoading}\n >\n {isLoading ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"w-4 h-4 border-2 border-primary-foreground/30 border-t-primary-foreground rounded-full animate-spin\" />\n Signing in...\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n <Shield className=\"w-4 h-4\" />\n Sign In\n </div>\n )}\n </Button>\n </form>\n \n {/* Demo Notice */}\n <div className=\"bg-muted/50 border border-border rounded p-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-6 h-6 bg-primary rounded-full flex items-center justify-center flex-shrink-0 mt-0.5\">\n <TrendingUp className=\"w-3 h-3 text-primary-foreground\" />\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-foreground\">Demo Environment</p>\n <p className=\"text-xs text-muted-foreground\">\n Use any email and password to explore the analytics platform\n </p>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Features */}\n <div className=\"grid grid-cols-3 gap-4 animate-slide-up\">\n {[\n { icon: Database, label: 'Data Models', bgClass: 'bg-primary/10', textClass: 'text-primary' },\n { icon: Shield, label: 'Quality Tests', bgClass: 'bg-secondary/10', textClass: 'text-secondary-foreground' },\n { icon: TrendingUp, label: 'Analytics', bgClass: 'bg-accent/10', textClass: 'text-accent-foreground' }\n ].map((feature) => (\n <div key={feature.label} className=\"text-center space-y-2\">\n <div className={cn('w-10 h-10 rounded-lg flex items-center justify-center mx-auto', feature.bgClass)}>\n <feature.icon className={cn('w-5 h-5', feature.textClass)} />\n </div>\n <p className=\"text-xs text-muted-foreground font-medium\">{feature.label}</p>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}","import type { ReactNode } from 'react';\nimport { useAuth } from '../hooks/useAuth';\nimport { LoginForm } from './LoginForm';\n\ninterface ProtectedRouteProps {\n children: ReactNode;\n requirePermission?: string;\n requireRole?: string;\n fallback?: ReactNode;\n}\n\nexport function ProtectedRoute({ \n children, \n requirePermission, \n requireRole, \n fallback \n}: ProtectedRouteProps) {\n const { isAuthenticated, isLoading, hasPermission, hasRole } = useAuth();\n\n if (isLoading) {\n return (\n <div className=\"min-h-screen flex items-center justify-center\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary mx-auto\"></div>\n <p className=\"mt-2 text-muted-foreground\">Loading...</p>\n </div>\n </div>\n );\n }\n\n if (!isAuthenticated) {\n return <LoginForm />;\n }\n\n // Check permission if required\n if (requirePermission && !hasPermission(requirePermission)) {\n return fallback || (\n <div className=\"min-h-screen flex items-center justify-center\">\n <div className=\"text-center\">\n <h2 className=\"text-xl font-semibold text-destructive mb-2\">Access Denied</h2>\n <p className=\"text-muted-foreground\">You don't have permission to access this resource.</p>\n </div>\n </div>\n );\n }\n\n // Check role if required\n if (requireRole && !hasRole(requireRole)) {\n return fallback || (\n <div className=\"min-h-screen flex items-center justify-center\">\n <div className=\"text-center\">\n <h2 className=\"text-xl font-semibold text-destructive mb-2\">Access Denied</h2>\n <p className=\"text-muted-foreground\">Your role doesn't have access to this resource.</p>\n </div>\n </div>\n );\n }\n\n return <>{children}</>;\n}","import { useAuth } from '../hooks/useAuth';\nimport { Button } from '../../../atoms/ui/button';\n\nexport function LogoutButton() {\n const { logout, user } = useAuth();\n\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Welcome, {(user as any)?.name || user?.email}</span>\n <Button \n variant=\"outline\" \n size=\"sm\" \n onClick={logout}\n >\n Logout\n </Button>\n </div>\n );\n}","import { useAuth } from './useAuth';\nimport type { BaseUser } from '../../../atoms/types';\n\nexport function usePermissions<T extends BaseUser = BaseUser>() {\n const { hasPermission, hasRole, permissions, user } = useAuth<T>();\n\n const can = (permission: string): boolean => hasPermission(permission);\n \n const canAny = (permissions: string[]): boolean => \n permissions.some(permission => hasPermission(permission));\n \n const canAll = (permissions: string[]): boolean => \n permissions.every(permission => hasPermission(permission));\n\n const isRole = (role: string): boolean => hasRole(role);\n \n const isAnyRole = (roles: string[]): boolean => \n roles.some(role => hasRole(role));\n\n const isAdmin = (): boolean => hasRole('admin');\n \n const isUser = (): boolean => hasRole('user');\n\n return {\n can,\n canAny,\n canAll,\n isRole,\n isAnyRole,\n isAdmin,\n isUser,\n permissions,\n user\n };\n}","import React from 'react';\nimport { User, Settings, LogOut, UserCircle, Moon, Sun } from 'lucide-react';\nimport { \n Avatar, \n AvatarFallback, \n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n Button\n} from '../../ui';\nimport { useAuth } from '../../../features/auth';\nimport { cn } from '../../utils/utils';\n\ninterface UserAvatarProps {\n className?: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const UserAvatar: React.FC<UserAvatarProps> = ({ className, category = 1 }) => {\n const { user, logout } = useAuth();\n const [isDark, setIsDark] = React.useState(() => \n document.documentElement.classList.contains('dark')\n );\n\n const toggleDarkMode = () => {\n const newDarkMode = !isDark;\n setIsDark(newDarkMode);\n \n if (newDarkMode) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n };\n\n const userInitials = (user as any)?.name \n ? (user as any).name.split(' ').map((n: string) => n[0]).join('').toUpperCase().slice(0, 2)\n : user?.email?.[0]?.toUpperCase() || 'U';\n\n const avatarStyles = {\n background: `linear-gradient(135deg, hsl(var(--category-${category}) / 0.1), hsl(var(--category-${category}) / 0.2))`,\n borderColor: `hsl(var(--category-${category}) / 0.3)`,\n color: `hsl(var(--category-${category}))`\n };\n\n const handleLogout = () => {\n logout();\n };\n\n return (\n <div className={cn(\"flex items-center\", className)}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"relative h-9 w-9 rounded p-0 hover:bg-muted/30 transition-colors\">\n <Avatar className=\"h-9 w-9\">\n <AvatarFallback \n className=\"border font-medium text-sm\"\n style={avatarStyles}\n >\n <User className=\"w-4 h-4\" />\n </AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent \n className=\"w-56 bg-card/95 backdrop-blur-sm border-border/30\" \n align=\"end\" \n forceMount\n >\n {/* User Info */}\n <div className=\"flex items-center space-x-3 p-3\">\n <Avatar className=\"h-8 w-8\">\n <AvatarFallback \n className=\"border font-medium text-xs\"\n style={avatarStyles}\n >\n {userInitials}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col space-y-0.5\">\n <p className=\"text-sm font-medium leading-none text-foreground\">\n {(user as any)?.name || 'Design User'}\n </p>\n <p className=\"text-xs leading-none text-muted-foreground\">\n {user?.email || 'user@design.studio'}\n </p>\n </div>\n </div>\n \n <DropdownMenuSeparator />\n \n {/* Dark Mode Toggle */}\n <DropdownMenuItem \n className=\"cursor-pointer focus:bg-muted/50\"\n onClick={toggleDarkMode}\n >\n {isDark ? (\n <Sun className=\"mr-2 h-4 w-4\" />\n ) : (\n <Moon className=\"mr-2 h-4 w-4\" />\n )}\n <span>{isDark ? 'Light Mode' : 'Dark Mode'}</span>\n </DropdownMenuItem>\n \n <DropdownMenuSeparator />\n \n {/* Menu Items */}\n <DropdownMenuItem \n className=\"cursor-pointer focus:bg-muted/50\"\n onClick={() => alert('Profile coming soon!')}\n >\n <UserCircle className=\"mr-2 h-4 w-4\" />\n <span>Profile</span>\n </DropdownMenuItem>\n \n <DropdownMenuItem \n className=\"cursor-pointer focus:bg-muted/50\"\n onClick={() => alert('Settings coming soon!')}\n >\n <Settings className=\"mr-2 h-4 w-4\" />\n <span>Settings</span>\n </DropdownMenuItem>\n \n <DropdownMenuSeparator />\n \n <DropdownMenuItem \n className=\"cursor-pointer text-destructive focus:text-destructive focus:bg-destructive/10\"\n onClick={handleLogout}\n >\n <LogOut className=\"mr-2 h-4 w-4\" />\n <span>Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n};","import React from 'react';\nimport { UserAvatar } from '../UserAvatar';\nimport { cn } from '../../utils/utils';\n\ninterface UserMenuProps {\n className?: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const UserMenu: React.FC<UserMenuProps> = ({ className, category }) => {\n return (\n <div className={cn(\"flex items-center\", className)}>\n <UserAvatar category={category} />\n </div>\n );\n};","import React, { useState } from 'react';\nimport { Search } from 'lucide-react';\nimport { Input } from '../../ui/input';\nimport { cn } from '../../utils/utils';\n\ninterface GlobalSearchProps {\n className?: string;\n placeholder?: string;\n}\n\nexport const GlobalSearch: React.FC<GlobalSearchProps> = ({ \n className,\n placeholder = \"Search components, colors, patterns...\" \n}) => {\n const [searchValue, setSearchValue] = useState('');\n\n return (\n <div className={cn(\"relative\", className)}>\n <div className=\"absolute inset-y-0 left-0 flex items-center pl-4\">\n <Search className=\"w-5 h-5 text-muted-foreground\" />\n </div>\n <Input\n type=\"text\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={placeholder}\n className={cn(\n \"pl-12 pr-4 h-12 text-base\",\n \"bg-muted/30 border-border/40 rounded-xl\",\n \"focus:bg-card focus:border-category-1/30 focus:ring-category-1/20\",\n \"transition-all duration-200\",\n \"placeholder:text-muted-foreground/70\"\n )}\n />\n </div>\n );\n};","import React, { useState, useMemo } from 'react';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../../ui/table';\nimport { Input } from '../../ui/input';\nimport { Button } from '../../ui/button';\nimport { Skeleton } from '../../ui/skeleton';\nimport { DataBadge } from '../DataBadge';\nimport { cn, tooltipContent } from '../../utils/utils';\nimport type { IListLoadable } from '../../types';\nimport { \n ChevronDown, \n ChevronUp, \n ChevronsUpDown,\n Search,\n X\n} from 'lucide-react';\n\nexport interface Column<T> {\n key: string;\n header: string | React.ReactNode;\n cell?: (item: T) => React.ReactNode;\n sortable?: boolean;\n filterable?: boolean;\n width?: string;\n /** Auto-render badges for status/category columns */\n type?: 'status' | 'category' | 'default';\n}\n\ninterface DataTableProps<T> extends IListLoadable {\n data: T[];\n columns: Column<T>[];\n searchPlaceholder?: string;\n pageSize?: number;\n showPagination?: boolean;\n showSearch?: boolean;\n onRowClick?: (item: T) => void;\n emptyMessage?: string;\n className?: string;\n /** Enable hover effects on table rows */\n hover?: boolean;\n}\n\ntype SortDirection = 'asc' | 'desc' | null;\n\nexport function DataTable<T extends Record<string, unknown>>({\n data,\n columns,\n searchPlaceholder = \"Search...\",\n pageSize = 10,\n showPagination = true,\n showSearch = true,\n onRowClick,\n emptyMessage = \"No data available\",\n className = \"\",\n hover = false,\n isLoading = false,\n loadingItemCount = 5\n}: DataTableProps<T>) {\n const [searchTerm, setSearchTerm] = useState('');\n const [sortColumn, setSortColumn] = useState<string | null>(null);\n const [sortDirection, setSortDirection] = useState<SortDirection>(null);\n const [currentPage, setCurrentPage] = useState(1);\n\n // Filter data based on search term\n const filteredData = useMemo(() => {\n if (!searchTerm) return data;\n \n return data.filter(item => {\n const searchableColumns = columns.filter(col => col.filterable !== false);\n return searchableColumns.some(col => {\n const value = item[col.key];\n if (value === null || value === undefined) return false;\n return value.toString().toLowerCase().includes(searchTerm.toLowerCase());\n });\n });\n }, [data, searchTerm, columns]);\n\n // Sort data\n const sortedData = useMemo(() => {\n if (!sortColumn || !sortDirection) return filteredData;\n \n return [...filteredData].sort((a, b) => {\n const aVal = a[sortColumn];\n const bVal = b[sortColumn];\n \n if (aVal === null || aVal === undefined) return 1;\n if (bVal === null || bVal === undefined) return -1;\n \n const comparison = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;\n return sortDirection === 'asc' ? comparison : -comparison;\n });\n }, [filteredData, sortColumn, sortDirection]);\n\n // Paginate data\n const paginatedData = useMemo(() => {\n if (!showPagination) return sortedData;\n \n const start = (currentPage - 1) * pageSize;\n const end = start + pageSize;\n return sortedData.slice(start, end);\n }, [sortedData, currentPage, pageSize, showPagination]);\n\n const totalPages = Math.ceil(sortedData.length / pageSize);\n\n const handleSort = (columnKey: string) => {\n if (sortColumn === columnKey) {\n if (sortDirection === 'asc') {\n setSortDirection('desc');\n } else if (sortDirection === 'desc') {\n setSortDirection(null);\n setSortColumn(null);\n }\n } else {\n setSortColumn(columnKey);\n setSortDirection('asc');\n }\n };\n\n const getSortIcon = (columnKey: string) => {\n if (sortColumn !== columnKey) {\n return <ChevronsUpDown className=\"w-4 h-4 text-muted-foreground\" />;\n }\n if (sortDirection === 'asc') {\n return <ChevronUp className=\"w-4 h-4\" />;\n }\n return <ChevronDown className=\"w-4 h-4\" />;\n };\n\n // Smart cell renderer that auto-detects and renders badges\n const renderCell = (column: Column<T>, item: T) => {\n // If custom cell renderer is provided, use it\n if (column.cell) {\n return column.cell(item);\n }\n\n const value = item[column.key];\n \n // Auto-detect column type from key name if not specified\n const columnType = column.type || (\n column.key.toLowerCase().includes('status') ? 'status' :\n column.key.toLowerCase().includes('category') ? 'category' :\n 'default'\n );\n\n // Render badges for status and category columns\n if (columnType === 'status' && typeof value === 'string') {\n const status = value as 'success' | 'warning' | 'error' | 'info' | 'neutral';\n return (\n <DataBadge variant=\"status\" status={status} size=\"sm\">\n {value.toString()}\n </DataBadge>\n );\n }\n\n if (columnType === 'category') {\n // For category, try to map value to category number (1-8)\n const categoryMap: Record<string, number> = {\n 'Analytics': 1, 'Finance': 2, 'Product': 3, 'Sales': 4,\n 'Marketing': 5, 'Operations': 6, 'Engineering': 7, 'Data': 8\n };\n const categoryNum = typeof value === 'string' ? categoryMap[value] || 1 : 1;\n \n return (\n <DataBadge variant=\"category\" category={categoryNum as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8} size=\"sm\">\n {value?.toString()}\n </DataBadge>\n );\n }\n\n // Default rendering\n return value?.toString() || '-';\n };\n\n // Loading state skeleton that matches DataTable dimensions\n if (isLoading) {\n return (\n <div className={cn(\"space-y-4\", className)} data-component-name=\"DataTable\">\n {/* Search bar skeleton */}\n {showSearch && (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative flex-1 max-w-sm\">\n <Skeleton className=\"h-10 w-full\" />\n </div>\n </div>\n )}\n\n {/* Table skeleton */}\n <div className=\"rounded border overflow-hidden\">\n <Table>\n <TableHeader>\n <TableRow>\n {columns.map(column => (\n <TableHead key={column.key} style={{ width: column.width }}>\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-4 w-20\" />\n </div>\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {Array.from({ length: loadingItemCount }, (_, index) => (\n <TableRow key={index}>\n {columns.map(column => (\n <TableCell key={column.key}>\n <Skeleton className=\"h-4 w-full max-w-32\" />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination skeleton */}\n {showPagination && (\n <div className=\"flex items-center justify-between\">\n <Skeleton className=\"h-4 w-48\" />\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-8 w-20\" />\n <div className=\"flex items-center gap-1\">\n {Array.from({ length: 3 }, (_, i) => (\n <Skeleton key={i} className=\"h-8 w-8\" />\n ))}\n </div>\n <Skeleton className=\"h-8 w-16\" />\n </div>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={cn(\"space-y-4\", className)} data-component-name=\"DataTable\">\n {/* Search bar */}\n {showSearch && (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative flex-1 max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground w-4 h-4\" data-component-name=\"DataTableSearch\" />\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => {\n setSearchTerm(e.target.value);\n setCurrentPage(1);\n }}\n className=\"pl-10 pr-10\"\n />\n {searchTerm && (\n <Button\n onClick={() => {\n setSearchTerm('');\n setCurrentPage(1);\n }}\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-1 top-1/2 transform -translate-y-1/2 h-8 w-8\"\n tooltip={tooltipContent.clearSearch}\n >\n <X className=\"w-4 h-4\" data-component-name=\"DataTableClear\" />\n </Button>\n )}\n </div>\n {searchTerm && (\n <div className=\"text-muted-foreground text-sm\">\n {sortedData.length} result{sortedData.length !== 1 ? 's' : ''}\n </div>\n )}\n </div>\n )}\n\n {/* Table */}\n <div className=\"rounded border overflow-hidden\">\n <Table>\n <TableHeader>\n <TableRow>\n {columns.map(column => (\n <TableHead \n key={column.key}\n style={{ width: column.width }}\n className={column.sortable !== false && typeof column.header === 'string' ? 'cursor-pointer select-none' : ''}\n onClick={() => column.sortable !== false && typeof column.header === 'string' && handleSort(column.key)}\n >\n <div className=\"flex items-center gap-2\">\n {typeof column.header === 'string' ? (\n <>\n <span>{column.header}</span>\n {column.sortable !== false && getSortIcon(column.key)}\n </>\n ) : (\n column.header\n )}\n </div>\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {paginatedData.length === 0 ? (\n <TableRow>\n <TableCell \n colSpan={columns.length} \n className=\"text-center py-8 text-muted-foreground\"\n >\n {emptyMessage}\n </TableCell>\n </TableRow>\n ) : (\n paginatedData.map((item, index) => (\n <TableRow \n key={index}\n className={cn(\n onRowClick && 'cursor-pointer',\n (hover || onRowClick) && 'hover:bg-muted/50'\n )}\n onClick={() => onRowClick?.(item)}\n >\n {columns.map(column => (\n <TableCell key={column.key}>\n {renderCell(column, item)}\n </TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination */}\n {showPagination && totalPages > 1 && (\n <div className=\"flex items-center justify-between\">\n <div className=\"text-muted-foreground text-sm\">\n Showing {((currentPage - 1) * pageSize) + 1} to {Math.min(currentPage * pageSize, sortedData.length)} of {sortedData.length} entries\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n tooltip={tooltipContent.previous}\n >\n Previous\n </Button>\n <div className=\"flex items-center gap-1\">\n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\n let pageNum;\n if (totalPages <= 5) {\n pageNum = i + 1;\n } else if (currentPage <= 3) {\n pageNum = i + 1;\n } else if (currentPage >= totalPages - 2) {\n pageNum = totalPages - 4 + i;\n } else {\n pageNum = currentPage - 2 + i;\n }\n \n return (\n <Button\n key={pageNum}\n variant={currentPage === pageNum ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setCurrentPage(pageNum)}\n className=\"w-8 h-8\"\n >\n {pageNum}\n </Button>\n );\n })}\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n tooltip={tooltipContent.next}\n >\n Next\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}","import React, { useState, useRef, useEffect } from 'react';\nimport { Calendar, Clock, ChevronLeft, ChevronRight, X } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport { Input } from '../../ui/input';\nimport { Button } from '../../ui/button';\n\nexport interface DateTimePickerProps {\n /** Current selected date/time value */\n value?: Date;\n /** Callback when date/time changes */\n onChange?: (date: Date | null) => void;\n /** Picker mode */\n mode?: 'date' | 'time' | 'datetime';\n /** Visual variant */\n variant?: 'default' | 'compact' | 'inline';\n /** Date format for display */\n dateFormat?: 'MM/dd/yyyy' | 'dd/MM/yyyy' | 'yyyy-MM-dd';\n /** Time format */\n timeFormat?: '12h' | '24h';\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Enable date range selection */\n isRange?: boolean;\n /** Range values for range mode */\n rangeValue?: { start: Date | null; end: Date | null };\n /** Callback for range changes */\n onRangeChange?: (range: { start: Date | null; end: Date | null }) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Error state */\n error?: boolean;\n /** Clear button */\n clearable?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** ARIA label */\n 'aria-label'?: string;\n}\n\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n onChange,\n mode = 'datetime',\n variant = 'default',\n dateFormat = 'MM/dd/yyyy',\n timeFormat = '12h',\n minDate,\n maxDate,\n isRange = false,\n rangeValue,\n onRangeChange,\n placeholder,\n disabled = false,\n error = false,\n clearable = true,\n className,\n 'aria-label': ariaLabel,\n ...props\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(value || new Date());\n const [, setActiveInput] = useState<'start' | 'end' | null>(null);\n const [tempTime, setTempTime] = useState({\n hours: value?.getHours() || 0,\n minutes: value?.getMinutes() || 0\n });\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Close picker when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setActiveInput(null);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Format date for display\n const formatDate = (date: Date | null): string => {\n if (!date) return '';\n \n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n \n switch (dateFormat) {\n case 'dd/MM/yyyy':\n return `${day}/${month}/${year}`;\n case 'yyyy-MM-dd':\n return `${year}-${month}-${day}`;\n default:\n return `${month}/${day}/${year}`;\n }\n };\n\n // Format time for display\n const formatTime = (date: Date | null): string => {\n if (!date) return '';\n \n const hours = date.getHours();\n const minutes = date.getMinutes().toString().padStart(2, '0');\n \n if (timeFormat === '12h') {\n const displayHours = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const ampm = hours >= 12 ? 'PM' : 'AM';\n return `${displayHours}:${minutes} ${ampm}`;\n }\n \n return `${hours.toString().padStart(2, '0')}:${minutes}`;\n };\n\n // Format complete datetime\n const formatDateTime = (date: Date | null): string => {\n if (!date) return '';\n \n const datePart = mode === 'time' ? '' : formatDate(date);\n const timePart = mode === 'date' ? '' : formatTime(date);\n \n if (mode === 'datetime') {\n return `${datePart} ${timePart}`;\n }\n \n return datePart || timePart;\n };\n\n // Get display value for input\n const getDisplayValue = (): string => {\n if (isRange && rangeValue) {\n const start = rangeValue.start ? formatDateTime(rangeValue.start) : '';\n const end = rangeValue.end ? formatDateTime(rangeValue.end) : '';\n return start && end ? `${start} - ${end}` : start || end || '';\n }\n \n return formatDateTime(value || null);\n };\n\n // Generate calendar days\n const getCalendarDays = () => {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n \n const firstDay = new Date(year, month, 1);\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - firstDay.getDay());\n \n const days: Date[] = [];\n \n for (let i = 0; i < 42; i++) {\n const currentDate = new Date(startDate);\n currentDate.setDate(startDate.getDate() + i);\n days.push(currentDate);\n }\n \n return days;\n };\n\n // Handle date selection\n const handleDateSelect = (date: Date) => {\n if (disabled) return;\n \n // Check date constraints\n if (minDate && date < minDate) return;\n if (maxDate && date > maxDate) return;\n \n if (isRange && onRangeChange) {\n if (!rangeValue?.start || (rangeValue.start && rangeValue.end)) {\n // Start new range\n onRangeChange({ start: date, end: null });\n setActiveInput('end');\n } else if (rangeValue.start && !rangeValue.end) {\n // Complete range\n if (date >= rangeValue.start) {\n onRangeChange({ start: rangeValue.start, end: date });\n } else {\n onRangeChange({ start: date, end: rangeValue.start });\n }\n setActiveInput(null);\n if (mode === 'date') setIsOpen(false);\n }\n } else {\n // Single date selection\n const newDate = new Date(date);\n if (value && (mode === 'datetime' || mode === 'time')) {\n // Preserve time when selecting date\n newDate.setHours(value.getHours());\n newDate.setMinutes(value.getMinutes());\n }\n \n onChange?.(newDate);\n if (mode === 'date') setIsOpen(false);\n }\n };\n\n // Handle time change\n const handleTimeChange = (hours: number, minutes: number) => {\n if (disabled) return;\n \n const newDate = value ? new Date(value) : new Date();\n newDate.setHours(hours);\n newDate.setMinutes(minutes);\n \n setTempTime({ hours, minutes });\n onChange?.(newDate);\n };\n\n // Handle input click\n const handleInputClick = () => {\n if (!disabled) {\n setIsOpen(true);\n if (isRange) setActiveInput('start');\n }\n };\n\n // Handle clear\n const handleClear = () => {\n if (isRange && onRangeChange) {\n onRangeChange({ start: null, end: null });\n } else {\n onChange?.(null);\n }\n setIsOpen(false);\n };\n\n // Navigate calendar\n const navigateMonth = (direction: 'prev' | 'next') => {\n const newDate = new Date(viewDate);\n newDate.setMonth(viewDate.getMonth() + (direction === 'prev' ? -1 : 1));\n setViewDate(newDate);\n };\n\n // Check if date is selected\n const isDateSelected = (date: Date): boolean => {\n if (isRange && rangeValue) {\n return (rangeValue.start ? isSameDay(date, rangeValue.start) : false) ||\n (rangeValue.end ? isSameDay(date, rangeValue.end) : false);\n }\n return value ? isSameDay(date, value) : false;\n };\n\n // Check if date is in range\n const isDateInRange = (date: Date): boolean => {\n if (isRange && rangeValue?.start && rangeValue?.end) {\n return date >= rangeValue.start && date <= rangeValue.end;\n }\n return false;\n };\n\n // Utility function to check if dates are same day\n const isSameDay = (date1: Date, date2: Date): boolean => {\n return date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear();\n };\n\n // Check if date is today\n const isToday = (date: Date): boolean => {\n return isSameDay(date, new Date());\n };\n\n // Check if date is disabled\n const isDateDisabled = (date: Date): boolean => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n const variantClasses = {\n default: 'h-10',\n compact: 'h-8 text-sm',\n inline: 'border-0 bg-transparent p-0'\n };\n\n const calendarDays = getCalendarDays();\n\n if (variant === 'inline') {\n return (\n <div \n className={cn('inline-block', className)}\n data-component-name=\"DateTimePicker\"\n ref={containerRef}\n >\n {/* Inline Calendar */}\n <div className=\"bg-card border border-border rounded p-4 shadow-category-1\">\n {(mode === 'date' || mode === 'datetime') && (\n <div className=\"space-y-4\">\n {/* Calendar Header */}\n <div className=\"flex items-center justify-between\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => navigateMonth('prev')}\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </Button>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {MONTHS[viewDate.getMonth()]} {viewDate.getFullYear()}\n </h3>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => navigateMonth('next')}\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n </div>\n\n {/* Calendar Grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {/* Weekday headers */}\n {WEEKDAYS.map(day => (\n <div key={day} className=\"text-xs font-medium text-muted-foreground text-center p-2\">\n {day}\n </div>\n ))}\n \n {/* Calendar days */}\n {calendarDays.map((date, index) => {\n const isCurrentMonth = date.getMonth() === viewDate.getMonth();\n const isSelected = isDateSelected(date);\n const isInRange = isDateInRange(date);\n const isTodayDate = isToday(date);\n const isDisabled = isDateDisabled(date);\n \n return (\n <button\n key={index}\n onClick={() => handleDateSelect(date)}\n disabled={disabled || isDisabled}\n className={cn(\n 'h-8 w-8 text-xs rounded transition-colors',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus:outline-none focus:ring-2 focus:ring-primary/20',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n !isCurrentMonth && 'text-muted-foreground/50',\n isSelected && 'bg-primary text-primary-foreground hover:bg-primary-hover',\n isInRange && !isSelected && 'bg-primary/20',\n isTodayDate && !isSelected && 'bg-accent text-accent-foreground font-semibold'\n )}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Time Picker for inline datetime/time mode */}\n {(mode === 'time' || mode === 'datetime') && (\n <div className={cn('space-y-3', mode === 'datetime' && 'border-t border-border pt-4 mt-4')}>\n <div className=\"flex items-center gap-2\">\n <Clock className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">Time</span>\n </div>\n \n <div className=\"flex items-center gap-2\">\n <select\n value={tempTime.hours}\n onChange={(e) => handleTimeChange(parseInt(e.target.value), tempTime.minutes)}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n {Array.from({ length: 24 }, (_, i) => (\n <option key={i} value={i}>\n {timeFormat === '12h' \n ? (i === 0 ? '12' : i > 12 ? i - 12 : i)\n : i.toString().padStart(2, '0')\n }\n </option>\n ))}\n </select>\n <span className=\"text-foreground\">:</span>\n <select\n value={tempTime.minutes}\n onChange={(e) => handleTimeChange(tempTime.hours, parseInt(e.target.value))}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n {Array.from({ length: 60 }, (_, i) => (\n <option key={i} value={i}>\n {i.toString().padStart(2, '0')}\n </option>\n ))}\n </select>\n {timeFormat === '12h' && (\n <select\n value={tempTime.hours >= 12 ? 'PM' : 'AM'}\n onChange={(e) => {\n const isPM = e.target.value === 'PM';\n const newHours = isPM \n ? (tempTime.hours % 12) + 12 \n : tempTime.hours % 12;\n handleTimeChange(newHours, tempTime.minutes);\n }}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div \n className={cn('relative', className)}\n data-component-name=\"DateTimePicker\"\n ref={containerRef}\n >\n {/* Input Field */}\n <div className=\"relative\">\n <Input\n ref={inputRef}\n value={getDisplayValue()}\n onClick={handleInputClick}\n placeholder={placeholder || `Select ${mode}...`}\n readOnly\n disabled={disabled}\n aria-label={ariaLabel}\n className={cn(\n variantClasses[variant],\n 'pr-20 cursor-pointer',\n error && 'border-status-error focus:border-status-error focus:ring-status-error/20',\n disabled && 'cursor-not-allowed'\n )}\n {...props}\n />\n \n {/* Input Icons */}\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-3 gap-1\">\n {clearable && getDisplayValue() && !disabled && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClear}\n className=\"h-6 w-6 p-0 hover:bg-muted\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n \n <div className=\"text-muted-foreground\">\n {mode === 'time' ? (\n <Clock className=\"w-4 h-4\" />\n ) : (\n <Calendar className=\"w-4 h-4\" />\n )}\n </div>\n </div>\n </div>\n\n {/* Dropdown Picker */}\n {isOpen && (\n <div className=\"absolute top-full left-0 z-50 mt-1 bg-card border border-border rounded shadow-category-1 p-4 min-w-[300px]\">\n {(mode === 'date' || mode === 'datetime') && (\n <div className=\"space-y-4\">\n {/* Calendar Header */}\n <div className=\"flex items-center justify-between\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => navigateMonth('prev')}\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </Button>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {MONTHS[viewDate.getMonth()]} {viewDate.getFullYear()}\n </h3>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => navigateMonth('next')}\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n </div>\n\n {/* Calendar Grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {/* Weekday headers */}\n {WEEKDAYS.map(day => (\n <div key={day} className=\"text-xs font-medium text-muted-foreground text-center p-2\">\n {day}\n </div>\n ))}\n \n {/* Calendar days */}\n {calendarDays.map((date, index) => {\n const isCurrentMonth = date.getMonth() === viewDate.getMonth();\n const isSelected = isDateSelected(date);\n const isInRange = isDateInRange(date);\n const isTodayDate = isToday(date);\n const isDisabled = isDateDisabled(date);\n \n return (\n <button\n key={index}\n onClick={() => handleDateSelect(date)}\n disabled={disabled || isDisabled}\n className={cn(\n 'h-8 w-8 text-xs rounded transition-colors',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus:outline-none focus:ring-2 focus:ring-primary/20',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n !isCurrentMonth && 'text-muted-foreground/50',\n isSelected && 'bg-primary text-primary-foreground hover:bg-primary-hover',\n isInRange && !isSelected && 'bg-primary/20',\n isTodayDate && !isSelected && 'bg-accent text-accent-foreground font-semibold'\n )}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Time Picker */}\n {(mode === 'time' || mode === 'datetime') && (\n <div className={cn('space-y-3', mode === 'datetime' && 'border-t border-border pt-4 mt-4')}>\n <div className=\"flex items-center gap-2\">\n <Clock className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">Time</span>\n </div>\n \n <div className=\"flex items-center gap-2\">\n <select\n value={tempTime.hours}\n onChange={(e) => handleTimeChange(parseInt(e.target.value), tempTime.minutes)}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n {Array.from({ length: 24 }, (_, i) => (\n <option key={i} value={i}>\n {timeFormat === '12h' \n ? (i === 0 ? '12' : i > 12 ? i - 12 : i)\n : i.toString().padStart(2, '0')\n }\n </option>\n ))}\n </select>\n <span className=\"text-foreground\">:</span>\n <select\n value={tempTime.minutes}\n onChange={(e) => handleTimeChange(tempTime.hours, parseInt(e.target.value))}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n {Array.from({ length: 60 }, (_, i) => (\n <option key={i} value={i}>\n {i.toString().padStart(2, '0')}\n </option>\n ))}\n </select>\n {timeFormat === '12h' && (\n <select\n value={tempTime.hours >= 12 ? 'PM' : 'AM'}\n onChange={(e) => {\n const isPM = e.target.value === 'PM';\n const newHours = isPM \n ? (tempTime.hours % 12) + 12 \n : tempTime.hours % 12;\n handleTimeChange(newHours, tempTime.minutes);\n }}\n disabled={disabled}\n className=\"px-2 py-1 text-sm border border-border rounded bg-background text-foreground\"\n >\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n )}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};","// WIP: Chart component - basic implementation for showcase\n// TODO: Rework chart implementations, improve styling, add more chart types\n// TODO: Consider external chart library integration for production use\n\nimport { Card } from '../../ui/card';\nimport { Skeleton } from '../../ui/skeleton';\nimport { DataBadge } from '../DataBadge';\nimport { cn } from '../../utils/utils';\nimport type { ILoadable } from '../../types';\nimport { DASHBOARD_CHART_HEIGHTS } from '../../shared/config/dashboard-sizes';\nimport { TrendingUp, TrendingDown, Minus, BarChart3, LineChart, AreaChart } from 'lucide-react';\n\nexport type ChartType = 'line' | 'bar' | 'area' | 'pie';\nexport type ChartVariant = 'default' | 'minimal' | 'detailed';\n\nexport interface ChartDataPoint {\n label: string;\n value: number;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n color?: string;\n}\n\nexport interface ChartProps extends ILoadable {\n title: string;\n subtitle?: string;\n data: ChartDataPoint[];\n type: ChartType;\n variant?: ChartVariant;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n showLegend?: boolean;\n showValues?: boolean;\n showTrend?: boolean;\n trend?: {\n value: number;\n label?: string;\n };\n /** Chart height - use standardized sizes from dashboard-sizes.ts */\n height?: number | keyof typeof DASHBOARD_CHART_HEIGHTS;\n onClick?: () => void;\n className?: string;\n /** Enable accessibility features like data table fallback */\n includeDataTable?: boolean;\n /** Custom color overrides for data points */\n colorOverrides?: string[];\n /** Don't render the outer Card wrapper (for embedded use) */\n noWrapper?: boolean;\n}\n\nexport const Chart = ({\n title,\n subtitle,\n data,\n type,\n variant = 'default',\n category,\n showLegend = true,\n showValues = false,\n showTrend = false,\n trend,\n height = 'medium',\n onClick,\n className,\n includeDataTable = true,\n colorOverrides,\n isLoading = false,\n noWrapper = false\n}: ChartProps) => {\n // Resolve height to numeric value\n const chartHeight = typeof height === 'string' ? DASHBOARD_CHART_HEIGHTS[height] : height;\n const getChartIcon = () => {\n switch (type) {\n case 'line': return <LineChart className=\"w-4 h-4\" />;\n case 'bar': return <BarChart3 className=\"w-4 h-4\" />;\n case 'area': return <AreaChart className=\"w-4 h-4\" />;\n default: return <BarChart3 className=\"w-4 h-4\" />;\n }\n };\n\n const getTrendIcon = () => {\n if (!trend) return null;\n \n if (trend.value > 0) {\n return <TrendingUp className=\"w-4 h-4\" />;\n } else if (trend.value < 0) {\n return <TrendingDown className=\"w-4 h-4\" />;\n }\n return <Minus className=\"w-4 h-4\" />;\n };\n\n const getTrendColor = () => {\n if (!trend) return '';\n \n if (trend.value > 0) return 'text-status-success';\n if (trend.value < 0) return 'text-status-error';\n return 'text-status-neutral';\n };\n\n const getDataPointColor = (index: number, point: ChartDataPoint) => {\n // Priority: custom color override > point category > point color > chart category > default category cycle\n if (colorOverrides && colorOverrides[index]) {\n return colorOverrides[index];\n }\n if (point.category) {\n return `hsl(var(--category-${point.category}))`;\n }\n if (point.color) {\n return point.color;\n }\n if (category) {\n return `hsl(var(--category-${category}))`;\n }\n // Default to cycling through categories\n const categoryNum = ((index % 8) + 1) as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n return `hsl(var(--category-${categoryNum}))`;\n };\n\n const maxValue = Math.max(...data.map(d => d.value));\n\n const renderBarChart = () => {\n return (\n <div className=\"space-y-3\" style={{ height: chartHeight }}>\n <div className=\"flex items-end justify-between h-full gap-2\">\n {data.map((point, index) => {\n const percentage = (point.value / maxValue) * 100;\n const color = getDataPointColor(index, point);\n \n return (\n <div key={index} className=\"flex flex-col items-center flex-1 h-full justify-end gap-2\">\n <div\n className=\"w-full rounded-t transition-all hover:opacity-80 relative group\"\n style={{\n height: `${percentage}%`,\n backgroundColor: color,\n minHeight: '4px'\n }}\n role=\"img\"\n aria-label={`${point.label}: ${point.value}`}\n >\n {showValues && (\n <div className=\"absolute -top-6 left-1/2 transform -translate-x-1/2 text-xs font-medium text-foreground whitespace-nowrap\">\n {point.value}\n </div>\n )}\n {/* Tooltip on hover */}\n <div className=\"absolute bottom-full left-1/2 transform -translate-x-1/2 mb-1 px-2 py-1 bg-popover text-popover-foreground text-xs rounded shadow-lg opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-10\">\n {point.label}: {point.value}\n </div>\n </div>\n <div className=\"text-xs text-muted-foreground text-center truncate w-full\">\n {point.label}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n };\n\n const renderLineChart = () => {\n const width = 300;\n const internalHeight = chartHeight - 40;\n const padding = 20;\n const chartWidth = width - (padding * 2);\n \n const points = data.map((point, index) => {\n const x = padding + (index / (data.length - 1)) * chartWidth;\n const y = internalHeight - ((point.value / maxValue) * (internalHeight - padding)) + padding;\n return { x, y, ...point };\n });\n\n const pathD = points.reduce((path, point, index) => {\n const command = index === 0 ? 'M' : 'L';\n return `${path} ${command} ${point.x} ${point.y}`;\n }, '');\n\n const areaPathD = `${pathD} L ${points[points.length - 1]?.x || 0} ${internalHeight} L ${padding} ${internalHeight} Z`;\n\n return (\n <div className=\"relative\" style={{ height: chartHeight }}>\n <svg width={width} height={chartHeight} className=\"w-full h-full\">\n {/* Grid lines */}\n <defs>\n <pattern id=\"grid\" width=\"20\" height=\"20\" patternUnits=\"userSpaceOnUse\">\n <path d=\"M 20 0 L 0 0 0 20\" fill=\"none\" stroke=\"hsl(var(--border))\" strokeWidth=\"0.5\" opacity=\"0.3\" />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill=\"url(#grid)\" />\n \n {/* Area fill for area chart */}\n {type === 'area' && (\n <path\n d={areaPathD}\n fill={category ? `hsl(var(--category-${category}))` : 'hsl(var(--category-1))'}\n fillOpacity=\"0.1\"\n />\n )}\n \n {/* Line */}\n <path\n d={pathD}\n fill=\"none\"\n stroke={category ? `hsl(var(--category-${category}))` : 'hsl(var(--category-1))'}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n \n {/* Data points */}\n {points.map((point, index) => (\n <g key={index}>\n <circle\n cx={point.x}\n cy={point.y}\n r=\"4\"\n fill={getDataPointColor(index, point)}\n stroke=\"hsl(var(--background))\"\n strokeWidth=\"2\"\n className=\"hover:r-6 transition-all cursor-pointer\"\n />\n {showValues && (\n <text\n x={point.x}\n y={point.y - 10}\n textAnchor=\"middle\"\n className=\"text-xs fill-foreground font-medium\"\n >\n {point.value}\n </text>\n )}\n </g>\n ))}\n </svg>\n \n {/* X-axis labels */}\n <div className=\"absolute bottom-0 left-0 right-0 flex justify-between px-5\">\n {data.map((point, index) => (\n <div key={index} className=\"text-xs text-muted-foreground text-center\">\n {point.label}\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n\n const renderChart = () => {\n switch (type) {\n case 'line':\n case 'area':\n return renderLineChart();\n case 'bar':\n return renderBarChart();\n default:\n return renderBarChart();\n }\n };\n\n // Loading state skeleton\n if (isLoading) {\n const loadingContent = (\n <div className={cn(\"space-y-4\", noWrapper && className)}>\n {/* Header skeleton */}\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-1\">\n <Skeleton className=\"h-5 w-32\" />\n {subtitle && <Skeleton className=\"h-4 w-24\" />}\n </div>\n <Skeleton className=\"h-8 w-8\" />\n </div>\n \n {/* Chart skeleton */}\n <div className=\"space-y-2\" style={{ height: chartHeight }}>\n <Skeleton className=\"h-full w-full\" />\n </div>\n \n {/* Legend skeleton */}\n {showLegend && variant !== 'minimal' && (\n <div className=\"space-y-2 pt-2 border-t border-border\">\n {Array.from({ length: Math.min(data.length || 3, 4) }, (_, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <Skeleton className=\"h-3 w-3\" />\n <Skeleton className=\"h-4 w-20\" />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n\n if (noWrapper) {\n return loadingContent;\n }\n\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden\",\n className\n )}\n category={category}\n data-component-name=\"Chart\"\n >\n {loadingContent}\n </Card>\n );\n }\n\n const chartContent = (\n <div className={cn(\"space-y-4\", noWrapper && className)}>\n {/* Header */}\n {variant !== 'minimal' && (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-lg font-semibold text-foreground\">{title}</h3>\n <div className={cn(\n \"p-2 rounded-md flex items-center justify-center transition-colors\",\n category ? `bg-category-${category}/8 text-category-${category}` : \"bg-muted/50 text-muted-foreground\"\n )}>\n {getChartIcon()}\n </div>\n </div>\n {subtitle && (\n <p className=\"text-sm text-muted-foreground mt-1\">{subtitle}</p>\n )}\n </div>\n {showTrend && trend && (\n <div className={cn(\"flex items-center gap-1.5 text-sm\", getTrendColor())}>\n {getTrendIcon()}\n <span className=\"font-medium\">\n {trend.value > 0 && '+'}{trend.value}%\n </span>\n {trend.label && (\n <span className=\"text-muted-foreground\">{trend.label}</span>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Chart */}\n <div className=\"relative\">\n {renderChart()}\n </div>\n\n {/* Legend */}\n {showLegend && variant !== 'minimal' && (\n <div className=\"flex flex-wrap gap-3 pt-2 border-t border-border\">\n {data.map((point, index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-sm flex-shrink-0\"\n style={{ backgroundColor: getDataPointColor(index, point) }}\n />\n <span className=\"text-sm text-foreground\">{point.label}</span>\n {point.category && (\n <DataBadge variant=\"category\" category={point.category} size=\"sm\">\n {`Cat ${point.category}`}\n </DataBadge>\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* Accessibility: Data table fallback */}\n {includeDataTable && !noWrapper && (\n <details className=\"mt-4\">\n <summary className=\"text-sm text-muted-foreground cursor-pointer hover:text-foreground transition-colors\">\n View data table (accessible)\n </summary>\n <div className=\"mt-2 border border-border rounded overflow-hidden\">\n <table className=\"w-full text-sm\">\n <thead className=\"bg-muted/50\">\n <tr>\n <th className=\"text-left p-2 border-b border-border\">Label</th>\n <th className=\"text-right p-2 border-b border-border\">Value</th>\n </tr>\n </thead>\n <tbody>\n {data.map((point, index) => (\n <tr key={index} className=\"border-b border-border last:border-b-0\">\n <td className=\"p-2 font-medium\">{point.label}</td>\n <td className=\"p-2 text-right\">{point.value}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </details>\n )}\n </div>\n );\n\n if (noWrapper) {\n return chartContent;\n }\n\n return (\n <Card \n className={cn(\n \"card-container relative overflow-hidden transition-all animate-slide-up\",\n onClick && \"cursor-pointer hover:shadow-md hover:scale-[1.01] active:scale-[0.99]\",\n category && `hover:shadow-category-${category}`,\n \"group\",\n className\n )}\n category={category}\n data-component-name=\"Chart\"\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n } : undefined}\n >\n {chartContent}\n </Card>\n );\n};","import React, { useState, useRef, useEffect } from 'react';\nimport { cn } from '../../utils/utils';\nimport { getAnimationClasses } from '../../utils/animations';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\n\nexport interface AccordionItem {\n id: string;\n title: string;\n content: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\nexport interface AccordionProps {\n items: AccordionItem[];\n variant?: 'default' | 'bordered' | 'filled';\n allowMultiple?: boolean;\n defaultOpen?: string | string[];\n collapsible?: boolean;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n className?: string;\n onItemToggle?: (itemId: string, isOpen: boolean) => void;\n}\n\nexport const Accordion = ({\n items,\n variant = 'default',\n allowMultiple = false,\n defaultOpen = [],\n collapsible = true,\n category,\n className,\n onItemToggle\n}: AccordionProps) => {\n // Initialize openItems state based on defaultOpen\n const [openItems, setOpenItems] = useState<Set<string>>(() => {\n if (Array.isArray(defaultOpen)) {\n return new Set(defaultOpen);\n } else if (defaultOpen) {\n return new Set([defaultOpen]);\n }\n return new Set();\n });\n\n const handleItemToggle = (itemId: string) => {\n const isCurrentlyOpen = openItems.has(itemId);\n \n if (!allowMultiple) {\n // Single mode: close others, toggle current\n if (isCurrentlyOpen && collapsible) {\n setOpenItems(new Set());\n onItemToggle?.(itemId, false);\n } else if (!isCurrentlyOpen) {\n setOpenItems(new Set([itemId]));\n onItemToggle?.(itemId, true);\n }\n } else {\n // Multiple mode: toggle current\n const newOpenItems = new Set(openItems);\n if (isCurrentlyOpen && collapsible) {\n newOpenItems.delete(itemId);\n onItemToggle?.(itemId, false);\n } else if (!isCurrentlyOpen) {\n newOpenItems.add(itemId);\n onItemToggle?.(itemId, true);\n }\n setOpenItems(newOpenItems);\n }\n };\n\n const getVariantClasses = () => {\n switch (variant) {\n case 'bordered':\n return 'border border-border rounded-lg overflow-hidden';\n case 'filled':\n return 'bg-muted/30 rounded-lg overflow-hidden';\n default:\n return 'space-y-2';\n }\n };\n\n const getItemClasses = (isOpen: boolean) => {\n const baseClasses = variant === 'default' \n ? 'border border-border rounded-lg overflow-hidden'\n : variant === 'bordered'\n ? 'border-b border-border last:border-b-0'\n : '';\n\n return cn(\n baseClasses,\n isOpen && category && variant !== 'filled' && `shadow-category-${category}/20 shadow-lg`,\n 'transition-all duration-200'\n );\n };\n\n const getHeaderClasses = (item: AccordionItem, isOpen: boolean) => {\n return cn(\n 'w-full flex items-center justify-between p-4 text-left',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'transition-all duration-200',\n getAnimationClasses({ type: 'subtle', timing: 'normal' }),\n \n // Variant-specific styling\n variant === 'filled' && 'bg-muted/50',\n variant === 'default' && 'bg-card hover:bg-muted/30',\n variant === 'bordered' && 'bg-card hover:bg-muted/30',\n \n // Category coloring when open\n isOpen && category && `bg-category-${category}/5 border-category-${category}/20`,\n \n // Disabled state\n item.disabled && 'opacity-50 cursor-not-allowed',\n !item.disabled && 'cursor-pointer',\n \n // Focus and hover states\n !item.disabled && 'hover:bg-accent/20',\n \n 'group'\n );\n };\n\n const getIconClasses = (isOpen: boolean) => {\n return cn(\n 'w-4 h-4 transition-transform duration-200 flex-shrink-0',\n isOpen ? 'rotate-90' : 'rotate-0',\n category ? `text-category-${category}` : 'text-muted-foreground',\n 'group-hover:scale-110'\n );\n };\n\n return (\n <div \n className={cn(\n getVariantClasses(),\n className\n )}\n data-component-name=\"Accordion\"\n data-variant={variant}\n role=\"tablist\"\n >\n {items.map((item) => {\n const isOpen = openItems.has(item.id);\n \n return (\n <AccordionItem\n key={item.id}\n item={item}\n isOpen={isOpen}\n onToggle={() => handleItemToggle(item.id)}\n variant={variant}\n category={category}\n itemClasses={getItemClasses(isOpen)}\n headerClasses={getHeaderClasses(item, isOpen)}\n iconClasses={getIconClasses(isOpen)}\n />\n );\n })}\n </div>\n );\n};\n\n// Separate AccordionItem component for better performance and cleaner code\ninterface AccordionItemComponentProps {\n item: AccordionItem;\n isOpen: boolean;\n onToggle: () => void;\n variant: 'default' | 'bordered' | 'filled';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n itemClasses: string;\n headerClasses: string;\n iconClasses: string;\n}\n\nconst AccordionItem = ({\n item,\n isOpen,\n onToggle,\n variant,\n category,\n itemClasses,\n headerClasses,\n iconClasses\n}: AccordionItemComponentProps) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n if (contentRef.current) {\n if (isOpen) {\n setContentHeight(contentRef.current.scrollHeight);\n } else {\n setContentHeight(0);\n }\n }\n }, [isOpen, item.content]);\n\n return (\n <div className={itemClasses}>\n {/* Header */}\n <button\n className={headerClasses}\n onClick={onToggle}\n disabled={item.disabled}\n aria-expanded={isOpen}\n aria-controls={`accordion-content-${item.id}`}\n id={`accordion-header-${item.id}`}\n role=\"tab\"\n data-component-name=\"AccordionHeader\"\n >\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {/* Custom icon or default chevron */}\n {item.icon ? (\n <div className={cn(\n 'flex-shrink-0',\n category ? `text-category-${category}` : 'text-muted-foreground'\n )}>\n {item.icon}\n </div>\n ) : (\n <ChevronRight className={iconClasses} />\n )}\n \n {/* Title */}\n <span className={cn(\n 'font-medium text-sm truncate',\n isOpen && category ? `text-category-${category}` : 'text-foreground',\n 'group-hover:text-foreground transition-colors duration-200'\n )}>\n {item.title}\n </span>\n </div>\n\n {/* Collapse indicator */}\n <ChevronDown \n className={cn(\n 'w-4 h-4 transition-transform duration-200 flex-shrink-0 ml-2',\n isOpen ? 'rotate-180' : 'rotate-0',\n category && isOpen ? `text-category-${category}` : 'text-muted-foreground',\n 'group-hover:scale-110'\n )}\n data-component-name=\"AccordionChevron\"\n />\n </button>\n\n {/* Content */}\n <div\n style={{\n height: contentHeight,\n overflow: 'hidden',\n transition: 'height 250ms cubic-bezier(0.4, 0, 0.2, 1)'\n }}\n aria-labelledby={`accordion-header-${item.id}`}\n id={`accordion-content-${item.id}`}\n role=\"tabpanel\"\n data-component-name=\"AccordionContent\"\n >\n <div \n ref={contentRef}\n className={cn(\n 'p-4 pt-0',\n variant === 'filled' && 'bg-background/50',\n isOpen && category && variant !== 'filled' && `bg-category-${category}/2`,\n 'text-muted-foreground text-sm leading-relaxed'\n )}\n >\n {item.content}\n </div>\n </div>\n </div>\n );\n};","import React, { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from '../../ui/button';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/utils';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'default' | 'destructive' | 'success';\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n showCloseButton?: boolean;\n footer?: React.ReactNode;\n className?: string;\n overlayClassName?: string;\n contentClassName?: string;\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg', \n xl: 'max-w-xl'\n};\n\nconst variantClasses = {\n default: 'border-border',\n destructive: 'border-l-4 border-l-status-error',\n success: 'border-l-4 border-l-status-success'\n};\n\nexport const Modal = ({\n isOpen,\n onClose,\n title,\n children,\n size = 'md',\n variant = 'default',\n closeOnBackdrop = true,\n closeOnEscape = true,\n showCloseButton = true,\n footer,\n className,\n overlayClassName,\n contentClassName\n}: ModalProps) => {\n const modalRef = useRef<HTMLDivElement>(null);\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n // Handle escape key\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, closeOnEscape, onClose]);\n\n // Handle focus management\n useEffect(() => {\n if (!isOpen) return;\n\n // Store the currently focused element\n previousActiveElement.current = document.activeElement as HTMLElement;\n\n // Focus the modal\n if (modalRef.current) {\n modalRef.current.focus();\n }\n\n // Restore focus when modal closes\n return () => {\n if (previousActiveElement.current) {\n previousActiveElement.current.focus();\n }\n };\n }, [isOpen]);\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [isOpen]);\n\n // Handle backdrop click\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (closeOnBackdrop && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n // Trap focus within modal\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Tab') {\n const focusableElements = modalRef.current?.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n \n if (!focusableElements?.length) return;\n\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n e.preventDefault();\n lastElement.focus();\n }\n } else {\n if (document.activeElement === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n }\n };\n\n if (!isOpen) return null;\n\n return createPortal(\n <div\n className={cn(\n \"fixed inset-0 z-50 flex items-center justify-center p-4\",\n \"bg-black/50 backdrop-blur-sm\",\n \"animate-in fade-in-0 duration-200\",\n overlayClassName\n )}\n onClick={handleBackdropClick}\n data-component-name=\"ModalOverlay\"\n >\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? \"modal-title\" : undefined}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n className={cn(\n \"relative w-full max-h-[90vh] overflow-hidden\",\n \"bg-card border rounded-lg shadow-lg\",\n \"animate-in zoom-in-95 duration-200\",\n sizeClasses[size],\n variantClasses[variant],\n className\n )}\n data-component-name=\"Modal\"\n data-variant={variant}\n data-size={size}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between p-6 border-b border-border\">\n {title && (\n <h2 \n id=\"modal-title\"\n className={cn(\n \"text-lg font-semibold text-foreground\",\n variant === 'destructive' && \"text-status-error\",\n variant === 'success' && \"text-status-success\"\n )}\n data-component-name=\"ModalTitle\"\n >\n {title}\n </h2>\n )}\n {showCloseButton && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onClose}\n className=\"h-8 w-8 rounded hover:bg-muted/80\"\n aria-label=\"Close modal\"\n data-component-name=\"ModalCloseButton\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n )}\n\n {/* Content */}\n <div \n className={cn(\n \"p-6 overflow-y-auto\",\n (!title && !showCloseButton) && \"pt-6\",\n !footer && \"pb-6\",\n contentClassName\n )}\n data-component-name=\"ModalContent\"\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div \n className=\"flex items-center justify-end gap-3 p-6 pt-0 border-t border-border\"\n data-component-name=\"ModalFooter\"\n >\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};","import React from 'react';\nimport { cn } from '../../utils/utils';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface ProgressBarProps {\n /** Progress value (0-100) */\n value: number;\n /** Maximum value */\n max?: number;\n /** Status-based coloring */\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n /** Category-based coloring */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show percentage label */\n showLabel?: boolean;\n /** Custom label */\n label?: string;\n /** Progress bar variant */\n variant?: 'default' | 'striped' | 'animated';\n /** Additional CSS classes */\n className?: string;\n /** Accessible label */\n 'aria-label'?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n value,\n max = 100,\n status,\n category,\n size = 'md',\n showLabel = false,\n label,\n variant = 'default',\n className,\n 'aria-label': ariaLabel\n}) => {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n \n const sizeClasses = {\n sm: 'h-2',\n md: 'h-3',\n lg: 'h-4'\n };\n\n const trackClasses = 'w-full bg-muted rounded-full overflow-hidden';\n \n const getBarClasses = () => {\n let baseClasses = 'h-full transition-all duration-500 ease-out';\n \n // Color classes\n if (status) {\n baseClasses += ` bg-status-${status}`;\n } else if (category) {\n baseClasses += ` bg-category-${category}`;\n } else {\n baseClasses += ' bg-primary';\n }\n \n // Variant classes\n if (variant === 'striped') {\n baseClasses += ' bg-gradient-to-r from-current via-current/80 to-current';\n baseClasses += ' bg-[length:1rem_1rem]';\n baseClasses += ' bg-repeat-x';\n }\n \n if (variant === 'animated') {\n baseClasses += ' bg-gradient-to-r from-current via-current/60 to-current';\n baseClasses += ' bg-[length:2rem_100%]';\n baseClasses += ' animate-pulse';\n }\n \n return baseClasses;\n };\n\n const displayLabel = label || (showLabel ? `${Math.round(percentage)}%` : undefined);\n\n return (\n <div\n className={cn('w-full', className)}\n data-component-name=\"ProgressBar\"\n >\n {displayLabel && (\n <div className=\"flex justify-between items-center mb-2 text-sm\">\n <span className=\"text-foreground font-medium\">\n {displayLabel}\n </span>\n {showLabel && !label && (\n <span className=\"text-muted-foreground\">\n {value}/{max}\n </span>\n )}\n </div>\n )}\n \n <div\n className={cn(trackClasses, sizeClasses[size])}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={ariaLabel || `Progress: ${percentage.toFixed(1)}%`}\n >\n <div\n className={cn(\n getBarClasses(),\n getAnimationClasses(animationPresets.subtle)\n )}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n};","import React, { useState, useRef, useCallback, useId } from 'react';\nimport { Upload, X, File, Image, AlertCircle, CheckCircle, Loader2 } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport { Button } from '../../ui/button';\nimport { ProgressBar } from '../ProgressBar';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface FileUploadFile {\n id: string;\n file: File;\n name: string;\n size: number;\n type: string;\n progress?: number;\n status: 'pending' | 'uploading' | 'success' | 'error';\n error?: string;\n preview?: string;\n}\n\nexport interface FileUploadProps {\n /** Accept specific file types */\n accept?: string;\n /** Allow multiple file selection */\n multiple?: boolean;\n /** Maximum file size in bytes */\n maxSize?: number;\n /** Maximum number of files */\n maxFiles?: number;\n /** Visual variant */\n variant?: 'default' | 'compact' | 'large';\n /** Disabled state */\n disabled?: boolean;\n /** Show file previews for images */\n showPreview?: boolean;\n /** Upload function */\n onUpload?: (files: FileUploadFile[]) => Promise<void>;\n /** File change handler */\n onChange?: (files: FileUploadFile[]) => void;\n /** File remove handler */\n onRemove?: (fileId: string) => void;\n /** Custom upload text */\n uploadText?: string;\n /** Custom drag text */\n dragText?: string;\n /** Additional CSS classes */\n className?: string;\n /** Error state */\n error?: string;\n /** Loading state */\n loading?: boolean;\n}\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n};\n\nconst isImageFile = (file: File): boolean => {\n return file.type.startsWith('image/');\n};\n\nconst createFilePreview = (file: File): Promise<string> => {\n return new Promise((resolve) => {\n if (!isImageFile(file)) {\n resolve('');\n return;\n }\n \n const reader = new FileReader();\n reader.onload = (e) => resolve(e.target?.result as string || '');\n reader.readAsDataURL(file);\n });\n};\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n accept,\n multiple = false,\n maxSize = 10 * 1024 * 1024, // 10MB default\n maxFiles = multiple ? 10 : 1,\n variant = 'default',\n disabled = false,\n showPreview = true,\n onUpload,\n onChange,\n onRemove,\n uploadText = 'Choose files or drag and drop',\n dragText = 'Drop files here',\n className,\n error,\n loading = false\n}) => {\n const [files, setFiles] = useState<FileUploadFile[]>([]);\n const [isDragActive, setIsDragActive] = useState(false);\n const [, setDragCounter] = useState(0);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const dropZoneId = useId();\n\n const validateFile = (file: File): string | null => {\n if (maxSize && file.size > maxSize) {\n return `File size exceeds ${formatFileSize(maxSize)}`;\n }\n \n if (accept) {\n const acceptedTypes = accept.split(',').map(type => type.trim().toLowerCase());\n const fileType = file.type.toLowerCase();\n const fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\n \n const isValidType = acceptedTypes.some(acceptedType => {\n if (acceptedType.startsWith('.')) {\n return fileExtension === acceptedType;\n }\n if (acceptedType.includes('/*')) {\n const baseType = acceptedType.split('/')[0];\n return fileType.startsWith(baseType + '/');\n }\n return fileType === acceptedType;\n });\n \n if (!isValidType) {\n return `File type not accepted. Accepted types: ${accept}`;\n }\n }\n \n return null;\n };\n\n const processFiles = useCallback(async (fileList: FileList) => {\n const newFiles: FileUploadFile[] = [];\n \n // Check max files limit\n if (files.length + fileList.length > maxFiles) {\n return;\n }\n \n for (let i = 0; i < fileList.length; i++) {\n const file = fileList[i];\n const validationError = validateFile(file);\n \n // Check for duplicates\n const isDuplicate = files.some(existingFile => \n existingFile.name === file.name && existingFile.size === file.size\n );\n \n if (isDuplicate) continue;\n \n const fileUpload: FileUploadFile = {\n id: `${Date.now()}-${i}`,\n file,\n name: file.name,\n size: file.size,\n type: file.type,\n status: validationError ? 'error' : 'pending',\n error: validationError || undefined\n };\n \n // Create preview for images\n if (showPreview && isImageFile(file) && !validationError) {\n try {\n fileUpload.preview = await createFilePreview(file);\n } catch {\n // Ignore preview errors\n }\n }\n \n newFiles.push(fileUpload);\n }\n \n const updatedFiles = [...files, ...newFiles];\n setFiles(updatedFiles);\n onChange?.(updatedFiles);\n }, [files, maxFiles, maxSize, accept, showPreview, onChange, validateFile]);\n\n const removeFile = useCallback((fileId: string) => {\n const updatedFiles = files.filter(file => file.id !== fileId);\n setFiles(updatedFiles);\n onRemove?.(fileId);\n onChange?.(updatedFiles);\n }, [files, onRemove, onChange]);\n\n const handleFileSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const fileList = e.target.files;\n if (fileList && fileList.length > 0) {\n processFiles(fileList);\n }\n // Reset input value to allow same file selection\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }, [processFiles]);\n\n const handleDragEnter = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragCounter(prev => prev + 1);\n if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\n setIsDragActive(true);\n }\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragCounter(prev => {\n const newCount = prev - 1;\n if (newCount === 0) {\n setIsDragActive(false);\n }\n return newCount;\n });\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(false);\n setDragCounter(0);\n \n const droppedFiles = e.dataTransfer.files;\n if (droppedFiles && droppedFiles.length > 0) {\n processFiles(droppedFiles);\n }\n }, [processFiles]);\n\n const handleUpload = async () => {\n if (!onUpload) return;\n \n const validFiles = files.filter(file => file.status !== 'error');\n if (validFiles.length === 0) return;\n \n // Set all valid files to uploading\n const uploadingFiles = files.map(file => \n file.status === 'error' ? file : { ...file, status: 'uploading' as const, progress: 0 }\n );\n setFiles(uploadingFiles);\n \n try {\n await onUpload(validFiles);\n \n // Mark as success\n const successFiles = files.map(file => \n file.status === 'error' ? file : { ...file, status: 'success' as const, progress: 100 }\n );\n setFiles(successFiles);\n } catch (uploadError) {\n // Mark as error\n const errorFiles = files.map(file => \n file.status === 'uploading' ? { \n ...file, \n status: 'error' as const, \n error: uploadError instanceof Error ? uploadError.message : 'Upload failed' \n } : file\n );\n setFiles(errorFiles);\n }\n };\n\n const variantClasses = {\n default: 'p-8',\n compact: 'p-4',\n large: 'p-12'\n };\n\n const iconSizes = {\n default: 'w-8 h-8',\n compact: 'w-6 h-6',\n large: 'w-12 h-12'\n };\n\n const textSizes = {\n default: 'text-base',\n compact: 'text-sm',\n large: 'text-lg'\n };\n\n const getFileIcon = (file: FileUploadFile) => {\n if (isImageFile(file.file)) {\n return <Image className=\"w-4 h-4\" />;\n }\n return <File className=\"w-4 h-4\" />;\n };\n\n const getStatusIcon = (file: FileUploadFile) => {\n switch (file.status) {\n case 'uploading':\n return <Loader2 className=\"w-4 h-4 animate-spin text-category-1\" />;\n case 'success':\n return <CheckCircle className=\"w-4 h-4 text-status-success\" />;\n case 'error':\n return <AlertCircle className=\"w-4 h-4 text-status-error\" />;\n default:\n return null;\n }\n };\n\n return (\n <div className={cn(\"space-y-4\", className)} data-component-name=\"FileUpload\">\n {/* Drop zone */}\n <div\n className={cn(\n 'border-2 border-dashed rounded-lg transition-all duration-200 cursor-pointer',\n 'flex flex-col items-center justify-center text-center',\n variantClasses[variant],\n disabled ? \n 'border-border/50 bg-muted/30 cursor-not-allowed' :\n isDragActive ?\n 'border-category-1 bg-category-1/5 scale-[1.02]' :\n error ?\n 'border-status-error bg-status-error/5 hover:border-status-error/70' :\n 'border-border hover:border-category-1/50 hover:bg-muted/30',\n getAnimationClasses(animationPresets.subtle)\n )}\n onDragEnter={!disabled ? handleDragEnter : undefined}\n onDragLeave={!disabled ? handleDragLeave : undefined}\n onDragOver={!disabled ? handleDragOver : undefined}\n onDrop={!disabled ? handleDrop : undefined}\n onClick={() => !disabled && fileInputRef.current?.click()}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label=\"File upload area\"\n aria-describedby={`${dropZoneId}-description`}\n onKeyDown={(e) => {\n if (!disabled && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n fileInputRef.current?.click();\n }\n }}\n data-component-name=\"FileUploadDropZone\"\n >\n <Upload className={cn(\n iconSizes[variant],\n disabled ? 'text-muted-foreground' : \n isDragActive ? 'text-category-1' : \n error ? 'text-status-error' : 'text-muted-foreground'\n )} />\n \n <div className=\"mt-4 space-y-1\">\n <p className={cn(\n textSizes[variant],\n 'font-medium',\n disabled ? 'text-muted-foreground' : \n isDragActive ? 'text-category-1' : \n error ? 'text-status-error' : 'text-foreground'\n )}>\n {isDragActive ? dragText : uploadText}\n </p>\n \n <p className=\"text-xs text-muted-foreground\" id={`${dropZoneId}-description`}>\n {accept && `Accepted types: ${accept}`}\n {maxSize && ` • Max size: ${formatFileSize(maxSize)}`}\n {multiple && ` • Max files: ${maxFiles}`}\n </p>\n </div>\n\n {error && (\n <div className=\"mt-2 text-xs text-status-error font-medium\">\n {error}\n </div>\n )}\n </div>\n\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleFileSelect}\n className=\"hidden\"\n disabled={disabled}\n aria-label=\"File input\"\n />\n\n {/* File list */}\n {files.length > 0 && (\n <div className=\"space-y-2\" data-component-name=\"FileUploadList\">\n {files.map((file) => (\n <div\n key={file.id}\n className={cn(\n 'flex items-center gap-3 p-3 rounded-lg border bg-card',\n file.status === 'error' && 'border-status-error/30 bg-status-error/5'\n )}\n data-component-name=\"FileUploadItem\"\n >\n {/* File preview or icon */}\n <div className=\"flex-shrink-0\">\n {file.preview ? (\n <img\n src={file.preview}\n alt={file.name}\n className=\"w-10 h-10 object-cover rounded border\"\n />\n ) : (\n <div className=\"w-10 h-10 flex items-center justify-center bg-muted rounded border\">\n {getFileIcon(file)}\n </div>\n )}\n </div>\n\n {/* File info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-foreground truncate\">\n {file.name}\n </p>\n {getStatusIcon(file)}\n </div>\n \n <div className=\"flex items-center gap-2 mt-1\">\n <p className=\"text-xs text-muted-foreground\">\n {formatFileSize(file.size)}\n </p>\n \n {file.status === 'uploading' && file.progress !== undefined && (\n <div className=\"flex-1 max-w-24\">\n <ProgressBar value={file.progress || 0} size=\"sm\" />\n </div>\n )}\n </div>\n\n {file.error && (\n <p className=\"text-xs text-status-error mt-1\">\n {file.error}\n </p>\n )}\n </div>\n\n {/* Remove button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n removeFile(file.id);\n }}\n className=\"flex-shrink-0 h-8 w-8 p-0 hover:bg-destructive/10 hover:text-destructive\"\n aria-label={`Remove ${file.name}`}\n >\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n ))}\n </div>\n )}\n\n {/* Upload button */}\n {files.length > 0 && onUpload && (\n <div className=\"flex items-center gap-2\">\n <Button\n onClick={handleUpload}\n disabled={loading || files.every(f => f.status === 'error') || files.some(f => f.status === 'uploading')}\n className=\"flex items-center gap-2\"\n >\n {loading && <Loader2 className=\"w-4 h-4 animate-spin\" />}\n Upload {files.filter(f => f.status !== 'error').length} file{files.filter(f => f.status !== 'error').length !== 1 ? 's' : ''}\n </Button>\n \n <Button\n variant=\"outline\"\n onClick={() => setFiles([])}\n disabled={loading || files.some(f => f.status === 'uploading')}\n >\n Clear all\n </Button>\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { X, AlertCircle, CheckCircle, AlertTriangle, Info } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport { Button } from '../../ui/button';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface AlertProps {\n /** Alert content */\n children: React.ReactNode;\n /** Alert status type */\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n /** Alert title */\n title?: string;\n /** Whether alert can be dismissed */\n dismissible?: boolean;\n /** Dismiss handler */\n onDismiss?: () => void;\n /** Visual variant */\n variant?: 'filled' | 'outlined' | 'soft';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS classes */\n className?: string;\n /** Custom icon */\n icon?: React.ReactNode;\n /** Hide default icon */\n hideIcon?: boolean;\n}\n\nconst statusIcons = {\n success: CheckCircle,\n warning: AlertTriangle,\n error: AlertCircle,\n info: Info,\n neutral: Info\n};\n\nexport const Alert: React.FC<AlertProps> = ({\n children,\n status = 'neutral',\n title,\n dismissible = false,\n onDismiss,\n variant = 'soft',\n size = 'md',\n className,\n icon,\n hideIcon = false\n}) => {\n const IconComponent = statusIcons[status];\n const displayIcon = icon || (!hideIcon && <IconComponent className=\"w-5 h-5\" />);\n\n const sizeClasses = {\n sm: 'p-3 text-sm',\n md: 'p-4 text-sm',\n lg: 'p-6 text-base'\n };\n\n const variantClasses = {\n filled: {\n success: 'bg-status-success text-white border-status-success',\n warning: 'bg-status-warning text-white border-status-warning',\n error: 'bg-status-error text-white border-status-error',\n info: 'bg-status-info text-white border-status-info',\n neutral: 'bg-muted text-foreground border-border'\n },\n outlined: {\n success: 'bg-background text-status-success border-status-success',\n warning: 'bg-background text-status-warning border-status-warning',\n error: 'bg-background text-status-error border-status-error',\n info: 'bg-background text-status-info border-status-info',\n neutral: 'bg-background text-foreground border-border'\n },\n soft: {\n success: 'bg-status-success/10 text-status-success border-status-success/20',\n warning: 'bg-status-warning/10 text-status-warning border-status-warning/20',\n error: 'bg-status-error/10 text-status-error border-status-error/20',\n info: 'bg-status-info/10 text-status-info border-status-info/20',\n neutral: 'bg-muted/50 text-foreground border-border/50'\n }\n };\n\n return (\n <div\n className={cn(\n 'rounded-lg border flex items-start gap-3 relative',\n 'transition-all duration-200',\n sizeClasses[size],\n variantClasses[variant][status],\n getAnimationClasses(animationPresets.subtle),\n className\n )}\n role=\"alert\"\n data-component-name=\"Alert\"\n >\n {/* Icon */}\n {displayIcon && (\n <div className=\"flex-shrink-0 mt-0.5\">\n {displayIcon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h4 className=\"font-semibold mb-1\">\n {title}\n </h4>\n )}\n <div className=\"text-current\">\n {children}\n </div>\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDismiss}\n className={cn(\n 'flex-shrink-0 h-auto p-1 -mt-1 -mr-1',\n 'hover:bg-current/10 text-current'\n )}\n aria-label=\"Dismiss alert\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n </div>\n );\n};","import React, { useEffect, useState, useCallback } from 'react';\nimport { X, CheckCircle, AlertTriangle, AlertCircle, Info } from 'lucide-react';\nimport { cn } from '../../utils/utils';\nimport { Button } from '../../ui/button';\nimport { getAnimationClasses, animationPresets } from '../../utils/animations';\n\nexport interface ToastProps {\n /** Toast content */\n children: React.ReactNode;\n /** Toast status type */\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n /** Toast title */\n title?: string;\n /** Auto-dismiss duration in milliseconds */\n duration?: number;\n /** Whether toast can be dismissed */\n dismissible?: boolean;\n /** Dismiss handler */\n onDismiss?: () => void;\n /** Toast position */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n /** Custom icon */\n icon?: React.ReactNode;\n /** Hide default icon */\n hideIcon?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Show progress bar for auto-dismiss */\n showProgress?: boolean;\n}\n\nconst statusIcons = {\n success: CheckCircle,\n warning: AlertTriangle,\n error: AlertCircle,\n info: Info,\n neutral: Info\n};\n\nexport const Toast: React.FC<ToastProps> = ({\n children,\n status = 'neutral',\n title,\n duration = 0, // 0 means no auto-dismiss\n dismissible = true,\n onDismiss,\n position = 'top-right',\n icon,\n hideIcon = false,\n className,\n showProgress = false\n}) => {\n const [isVisible, setIsVisible] = useState(true);\n const [progress, setProgress] = useState(100);\n\n const IconComponent = statusIcons[status];\n const displayIcon = icon || (!hideIcon && <IconComponent className=\"w-5 h-5\" />);\n\n const handleDismiss = useCallback(() => {\n setIsVisible(false);\n setTimeout(() => onDismiss?.(), 300); // Wait for exit animation\n }, [onDismiss]);\n\n useEffect(() => {\n if (duration > 0) {\n const dismissTimer = setTimeout(handleDismiss, duration);\n \n if (showProgress) {\n const progressInterval = setInterval(() => {\n setProgress(prev => {\n const decrement = 100 / (duration / 50); // Update every 50ms\n return Math.max(prev - decrement, 0);\n });\n }, 50);\n \n return () => {\n clearTimeout(dismissTimer);\n clearInterval(progressInterval);\n };\n }\n \n return () => clearTimeout(dismissTimer);\n }\n }, [duration, showProgress, handleDismiss]);\n\n const positionClasses = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2'\n };\n\n const statusClasses = {\n success: 'bg-background text-status-success border-status-success/30 shadow-status-success/10',\n warning: 'bg-background text-status-warning border-status-warning/30 shadow-status-warning/10',\n error: 'bg-background text-status-error border-status-error/30 shadow-status-error/10',\n info: 'bg-background text-status-info border-status-info/30 shadow-status-info/10',\n neutral: 'bg-background text-foreground border-border shadow-muted/20'\n };\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'fixed z-50 w-full max-w-sm',\n positionClasses[position]\n )}\n >\n <div\n className={cn(\n 'rounded-lg border p-4 shadow-lg backdrop-blur-sm',\n 'flex items-start gap-3 relative overflow-hidden',\n statusClasses[status],\n getAnimationClasses(animationPresets.card),\n className\n )}\n role=\"alert\"\n data-component-name=\"Toast\"\n >\n {/* Icon */}\n {displayIcon && (\n <div className=\"flex-shrink-0 mt-0.5\">\n {displayIcon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h4 className=\"font-semibold mb-1 text-sm\">\n {title}\n </h4>\n )}\n <div className=\"text-sm text-current\">\n {children}\n </div>\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleDismiss}\n className={cn(\n 'flex-shrink-0 h-auto p-1 -mt-1 -mr-1',\n 'hover:bg-current/10 text-current'\n )}\n aria-label=\"Dismiss notification\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n\n {/* Progress bar */}\n {showProgress && duration > 0 && (\n <div className=\"absolute bottom-0 left-0 right-0 h-1 bg-current/10\">\n <div\n className=\"h-full bg-current/30 transition-all duration-50 ease-linear\"\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\n// Toast container component for managing multiple toasts\nexport interface ToastContainerProps {\n /** Toast notifications */\n toasts: Array<ToastProps & { id: string }>;\n /** Container position */\n position?: ToastProps['position'];\n /** Maximum number of visible toasts */\n maxToasts?: number;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n toasts,\n position = 'top-right',\n maxToasts = 5,\n className\n}) => {\n const visibleToasts = toasts.slice(0, maxToasts);\n\n const positionClasses = {\n 'top-right': 'top-4 right-4 flex-col',\n 'top-left': 'top-4 left-4 flex-col',\n 'bottom-right': 'bottom-4 right-4 flex-col-reverse',\n 'bottom-left': 'bottom-4 left-4 flex-col-reverse',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 flex-col',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 flex-col-reverse'\n };\n\n return (\n <div\n className={cn(\n 'fixed z-50 flex gap-2 pointer-events-none',\n positionClasses[position],\n className\n )}\n data-component-name=\"ToastContainer\"\n >\n {visibleToasts.map(({ id, ...toastProps }) => (\n <div key={id} className=\"pointer-events-auto\">\n <Toast {...toastProps} position={position} />\n </div>\n ))}\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../utils/utils';\nimport { Label } from '../../ui/label';\n\nexport interface FormFieldProps {\n /** Field label */\n label?: string;\n /** Field description/help text */\n description?: string;\n /** Error message */\n error?: string;\n /** Whether field is required */\n required?: boolean;\n /** Field content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** HTML for attribute for label */\n htmlFor?: string;\n /** Field layout */\n layout?: 'vertical' | 'horizontal';\n /** Label width for horizontal layout */\n labelWidth?: string;\n}\n\nexport const FormField: React.FC<FormFieldProps> = ({\n label,\n description,\n error,\n required = false,\n children,\n className,\n htmlFor,\n layout = 'vertical',\n labelWidth = '120px'\n}) => {\n const isHorizontal = layout === 'horizontal';\n\n return (\n <div\n className={cn(\n 'space-y-2',\n isHorizontal && 'flex items-start gap-4',\n className\n )}\n data-component-name=\"FormField\"\n >\n {/* Label section */}\n {label && (\n <div\n className={cn(\n isHorizontal && 'flex-shrink-0',\n isHorizontal && 'pt-2' // Align with input top padding\n )}\n style={isHorizontal ? { width: labelWidth } : undefined}\n >\n <Label\n htmlFor={htmlFor}\n className={cn(\n 'text-sm font-medium text-foreground',\n required && \"after:content-['*'] after:ml-0.5 after:text-status-error\"\n )}\n >\n {label}\n </Label>\n </div>\n )}\n\n {/* Field content section */}\n <div className={cn(isHorizontal && 'flex-1 min-w-0')}>\n {/* Field input */}\n <div className=\"relative\">\n {children}\n </div>\n\n {/* Description */}\n {description && !error && (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {description}\n </p>\n )}\n\n {/* Error message */}\n {error && (\n <p className=\"mt-1 text-xs text-status-error font-medium\">\n {error}\n </p>\n )}\n </div>\n </div>\n );\n};","import React from 'react';\nimport { ChevronRight, Home } from 'lucide-react';\nimport { cn } from '../../utils/utils';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n active?: boolean;\n}\n\ninterface BreadcrumbProps {\n items: BreadcrumbItem[];\n showHome?: boolean;\n homeHref?: string;\n className?: string;\n separator?: React.ReactNode;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n showHome = true,\n homeHref = '/',\n className,\n separator = <ChevronRight className=\"w-4 h-4\" />,\n category = 1\n}) => {\n const allItems = showHome \n ? [{ label: 'Home', href: homeHref, icon: <Home className=\"w-4 h-4\" />, active: false }, ...items]\n : items;\n\n return (\n <nav \n className={cn('flex items-center space-x-1 text-sm', className)}\n aria-label=\"Breadcrumb\"\n data-component-name=\"Breadcrumb\"\n >\n <ol className=\"flex items-center space-x-1\">\n {allItems.map((item, index) => {\n const isLast = index === allItems.length - 1;\n const isActive = item.active || isLast;\n \n return (\n <li key={index} className=\"flex items-center space-x-1\">\n {item.href && !isActive ? (\n <a\n href={item.href}\n className={cn(\n 'flex items-center space-x-1 hover:text-foreground transition-colors',\n `text-category-${category}/70 hover:text-category-${category}`,\n 'hover:underline'\n )}\n >\n {'icon' in item && item.icon}\n <span>{item.label}</span>\n </a>\n ) : (\n <span\n className={cn(\n 'flex items-center space-x-1',\n isActive \n ? `text-category-${category} font-medium` \n : 'text-muted-foreground'\n )}\n aria-current={isActive ? 'page' : undefined}\n >\n {'icon' in item && item.icon}\n <span>{item.label}</span>\n </span>\n )}\n \n {!isLast && (\n <span className=\"text-muted-foreground ml-1\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};","import { useEffect, useState } from 'react';\nimport { Moon, Sun } from 'lucide-react';\nimport { cn } from '../utils/utils';\n\nexport const DarkModeToggle = ({ className }: { className?: string }) => {\n const [isDark, setIsDark] = useState(false);\n\n useEffect(() => {\n // Check for saved preference or system preference\n const savedTheme = localStorage.getItem('theme');\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n \n if (savedTheme === 'dark' || (!savedTheme && prefersDark)) {\n setIsDark(true);\n document.documentElement.classList.add('dark');\n } else {\n setIsDark(false);\n document.documentElement.classList.remove('dark');\n }\n }, []);\n\n const toggleDarkMode = () => {\n if (isDark) {\n document.documentElement.classList.remove('dark');\n localStorage.setItem('theme', 'light');\n setIsDark(false);\n } else {\n document.documentElement.classList.add('dark');\n localStorage.setItem('theme', 'dark');\n setIsDark(true);\n }\n };\n\n return (\n <button\n onClick={toggleDarkMode}\n className={cn(\n \"relative inline-flex h-10 w-20 items-center justify-center rounded-full\",\n \"bg-muted dark:bg-muted\",\n \"transition-all\",\n \"hover:bg-muted/80 dark:hover:bg-muted/80\",\n \"focus:outline-none focus:ring-2 focus:ring-primary\",\n className\n )}\n data-component-name=\"DarkModeToggle\"\n data-state={isDark ? 'dark' : 'light'}\n aria-label=\"Toggle dark mode\"\n >\n <span\n className={cn(\n \"absolute left-1 inline-flex h-8 w-8 items-center justify-center rounded-full\",\n \"bg-background dark:bg-background\",\n \"shadow transition-transform\",\n isDark && \"translate-x-10\"\n )}\n data-component-name=\"DarkModeToggleThumb\"\n >\n {isDark ? (\n <Moon className=\"h-4 w-4 text-category-4\" data-component-name=\"DarkModeToggleIcon\" />\n ) : (\n <Sun className=\"h-4 w-4 text-category-3\" data-component-name=\"DarkModeToggleIcon\" />\n )}\n </span>\n </button>\n );\n};","import { useState, useEffect, useCallback } from 'react';\nimport { Card } from '../ui/card';\nimport { Button } from '../ui/button';\nimport { Badge } from '../ui/Badge';\nimport { cn } from '../utils/utils';\nimport { \n Palette, \n Sun, \n Moon, \n Waves, \n Zap, \n TreePine, \n Sparkles, \n Sunset, \n Square,\n Building2\n} from 'lucide-react';\n\ninterface ColorPalette {\n id: string;\n name: string;\n description: string;\n className: string;\n icon: React.ReactNode;\n category: 'vibrant' | 'natural' | 'professional' | 'mystical';\n preview: {\n primary: string;\n secondary: string;\n accent: string;\n background: string;\n };\n}\n\nconst colorPalettes: ColorPalette[] = [\n {\n id: 'default',\n name: 'Default',\n description: 'Clean, professional design system',\n className: '',\n icon: <Square className=\"w-4 h-4\" />,\n category: 'professional',\n preview: {\n primary: 'hsl(222.2 47.4% 11.2%)',\n secondary: 'hsl(210 40% 96%)',\n accent: 'hsl(210 40% 96%)',\n background: 'hsl(0 0% 100%)'\n }\n },\n {\n id: 'ocean-depth',\n name: 'Ocean Depth',\n description: 'Deep blues with vibrant cyan and coral accents',\n className: 'palette-ocean-depth',\n icon: <Waves className=\"w-4 h-4\" />,\n category: 'vibrant',\n preview: {\n primary: 'hsl(195 100% 65%)',\n secondary: 'hsl(220 20% 25%)',\n accent: 'hsl(280 100% 70%)',\n background: 'hsl(220 26% 14%)'\n }\n },\n {\n id: 'neon-cyber',\n name: 'Neon Cyber',\n description: 'Vibrant cyberpunk aesthetics with electric colors',\n className: 'palette-neon-cyber',\n icon: <Zap className=\"w-4 h-4\" />,\n category: 'vibrant',\n preview: {\n primary: 'hsl(320 100% 70%)',\n secondary: 'hsl(260 20% 18%)',\n accent: 'hsl(180 100% 70%)',\n background: 'hsl(260 15% 8%)'\n }\n },\n {\n id: 'earth-tones',\n name: 'Earth Tones',\n description: 'Warm, organic colors inspired by nature',\n className: 'palette-earth-tones',\n icon: <TreePine className=\"w-4 h-4\" />,\n category: 'natural',\n preview: {\n primary: 'hsl(25 70% 45%)',\n secondary: 'hsl(35 20% 88%)',\n accent: 'hsl(200 60% 55%)',\n background: 'hsl(35 25% 96%)'\n }\n },\n {\n id: 'aurora',\n name: 'Aurora Borealis',\n description: 'Mystical greens and blues like the northern lights',\n className: 'palette-aurora',\n icon: <Sparkles className=\"w-4 h-4\" />,\n category: 'mystical',\n preview: {\n primary: 'hsl(160 80% 65%)',\n secondary: 'hsl(220 20% 20%)',\n accent: 'hsl(280 90% 75%)',\n background: 'hsl(220 30% 8%)'\n }\n },\n {\n id: 'sunset',\n name: 'Sunset Gradient',\n description: 'Warm oranges, pinks, and purples',\n className: 'palette-sunset',\n icon: <Sunset className=\"w-4 h-4\" />,\n category: 'natural',\n preview: {\n primary: 'hsl(25 85% 60%)',\n secondary: 'hsl(15 25% 88%)',\n accent: 'hsl(320 85% 65%)',\n background: 'hsl(15 30% 95%)'\n }\n },\n {\n id: 'monochrome',\n name: 'Monochrome Elite',\n description: 'Sophisticated grayscale with blue accents',\n className: 'palette-monochrome',\n icon: <Square className=\"w-4 h-4\" />,\n category: 'professional',\n preview: {\n primary: 'hsl(240 100% 50%)',\n secondary: 'hsl(0 0% 90%)',\n accent: 'hsl(240 100% 50%)',\n background: 'hsl(0 0% 98%)'\n }\n },\n {\n id: 'corporate-elite',\n name: 'Corporate Elite',\n description: 'Executive boardroom sophistication with navy and gold',\n className: 'palette-corporate-elite',\n icon: <Building2 className=\"w-4 h-4\" />,\n category: 'professional',\n preview: {\n primary: 'hsl(224 65% 25%)',\n secondary: 'hsl(220 10% 88%)',\n accent: 'hsl(45 85% 55%)',\n background: 'hsl(220 15% 97%)'\n }\n }\n];\n\nconst categoryColors = {\n vibrant: 'bg-category-1',\n natural: 'bg-category-6', \n professional: 'bg-category-4',\n mystical: 'bg-category-5'\n};\n\ninterface PaletteSwitcherProps {\n className?: string;\n onPaletteChange?: (paletteId: string) => void;\n}\n\nexport const PaletteSwitcher = ({ \n className,\n onPaletteChange \n}: PaletteSwitcherProps) => {\n const [activePalette, setActivePalette] = useState('default');\n const [isDarkMode, setIsDarkMode] = useState(false);\n\n // Define applyPalette function with useCallback to prevent recreation on each render\n const applyPalette = useCallback((paletteId: string) => {\n const palette = colorPalettes.find(p => p.id === paletteId);\n if (!palette) return;\n\n // Remove all existing palette classes\n colorPalettes.forEach(p => {\n if (p.className) {\n document.documentElement.classList.remove(p.className);\n }\n });\n\n // Apply new palette class\n if (palette.className) {\n document.documentElement.classList.add(palette.className);\n }\n\n // Save to localStorage\n localStorage.setItem('selected-palette', paletteId);\n \n // Notify parent component\n onPaletteChange?.(paletteId);\n }, [onPaletteChange]);\n\n // Load saved palette from localStorage\n useEffect(() => {\n const saved = localStorage.getItem('selected-palette');\n const savedDark = localStorage.getItem('dark-mode') === 'true';\n \n if (saved && colorPalettes.find(p => p.id === saved)) {\n setActivePalette(saved);\n applyPalette(saved);\n }\n \n setIsDarkMode(savedDark);\n if (savedDark) {\n document.documentElement.classList.add('dark');\n }\n }, [applyPalette]);\n\n const handlePaletteChange = (paletteId: string) => {\n setActivePalette(paletteId);\n applyPalette(paletteId);\n };\n\n const toggleDarkMode = () => {\n const newDarkMode = !isDarkMode;\n setIsDarkMode(newDarkMode);\n \n if (newDarkMode) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n \n localStorage.setItem('dark-mode', newDarkMode.toString());\n };\n\n const groupedPalettes = colorPalettes.reduce((groups, palette) => {\n const category = palette.category;\n if (!groups[category]) {\n groups[category] = [];\n }\n groups[category].push(palette);\n return groups;\n }, {} as Record<string, ColorPalette[]>);\n\n return (\n <div className={cn(\"space-y-6\", className)} data-component-name=\"PaletteSwitcher\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Palette className=\"w-5 h-5 text-primary\" data-component-name=\"PaletteSwitcherIcon\" />\n <h3 className=\"text-lg font-semibold\">Color Palettes</h3>\n </div>\n \n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={toggleDarkMode}\n className=\"flex items-center gap-2\"\n >\n {isDarkMode ? <Sun className=\"w-4 h-4\" /> : <Moon className=\"w-4 h-4\" />}\n {isDarkMode ? 'Light' : 'Dark'}\n </Button>\n </div>\n\n {/* Active Palette Info */}\n <Card className=\"p-4\" data-component-name=\"CategoryColorPreview\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 rounded bg-primary/10 text-primary\">\n {colorPalettes.find(p => p.id === activePalette)?.icon}\n </div>\n <div className=\"flex-1\">\n <h4 className=\"font-medium\">\n {colorPalettes.find(p => p.id === activePalette)?.name}\n </h4>\n <p className=\"text-sm text-muted-foreground\">\n {colorPalettes.find(p => p.id === activePalette)?.description}\n </p>\n </div>\n <Badge \n variant=\"secondary\"\n className={cn(\n \"text-xs\",\n categoryColors[colorPalettes.find(p => p.id === activePalette)?.category || 'professional']\n )}\n >\n {colorPalettes.find(p => p.id === activePalette)?.category}\n </Badge>\n </div>\n </Card>\n\n {/* Palette Grid by Category */}\n <div className=\"space-y-6\">\n {Object.entries(groupedPalettes).map(([category, palettes]) => (\n <div key={category}>\n <h4 className=\"text-sm font-medium text-muted-foreground uppercase tracking-wide mb-3\">\n {category}\n </h4>\n \n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n {palettes.map((palette) => (\n <Card\n key={palette.id}\n className={cn(\n \"p-4 cursor-pointer transition-all hover:shadow\",\n activePalette === palette.id && \"ring-2 ring-primary bg-primary/5\"\n )}\n onClick={() => handlePaletteChange(palette.id)}\n data-component-name=\"PaletteCard\"\n data-active={activePalette === palette.id}\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 rounded bg-muted text-muted-foreground\">\n {palette.icon}\n </div>\n \n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">{palette.name}</div>\n <div className=\"text-sm text-muted-foreground truncate\">\n {palette.description}\n </div>\n </div>\n \n {/* Color Preview */}\n <div className=\"flex gap-1\">\n <div \n className=\"w-3 h-3 rounded-full border border-border\"\n style={{ backgroundColor: palette.preview.primary }}\n data-component-name=\"PaletteColorPreview\"\n />\n <div \n className=\"w-3 h-3 rounded-full border border-border\"\n style={{ backgroundColor: palette.preview.accent }}\n data-component-name=\"PaletteColorPreview\"\n />\n <div \n className=\"w-3 h-3 rounded-full border border-border\"\n style={{ backgroundColor: palette.preview.secondary }}\n data-component-name=\"PaletteColorPreview\"\n />\n </div>\n </div>\n </Card>\n ))}\n </div>\n </div>\n ))}\n </div>\n\n {/* Category Color Preview */}\n <Card className=\"p-4\" data-component-name=\"CategoryColorPreview\">\n <h4 className=\"text-sm font-medium mb-3\">Category Colors Preview</h4>\n <div className=\"grid grid-cols-4 md:grid-cols-8 gap-2\">\n {[1, 2, 3, 4, 5, 6, 7, 8].map(num => (\n <div key={num} className=\"text-center\">\n <div \n className={cn(\n \"w-8 h-8 rounded mx-auto mb-1 border border-border\",\n `bg-category-${num}`\n )}\n data-component-name=\"ColorSwatch\"\n data-category={num}\n />\n <div className=\"text-xs text-muted-foreground\">{num}</div>\n </div>\n ))}\n </div>\n </Card>\n\n {/* Status Colors Preview */}\n <Card className=\"p-4\" data-component-name=\"StatusColorPreview\">\n <h4 className=\"text-sm font-medium mb-3\">Status Colors Preview</h4>\n <div className=\"grid grid-cols-5 gap-2\">\n {[\n { name: 'Success', class: 'bg-status-success' },\n { name: 'Warning', class: 'bg-status-warning' },\n { name: 'Error', class: 'bg-status-error' },\n { name: 'Info', class: 'bg-status-info' },\n { name: 'Neutral', class: 'bg-status-neutral' }\n ].map(status => (\n <div key={status.name} className=\"text-center\">\n <div \n className={cn(\n \"w-8 h-8 rounded mx-auto mb-1 border border-border\",\n status.class\n )}\n data-component-name=\"StatusSwatch\"\n data-status={status.name.toLowerCase()}\n />\n <div className=\"text-xs text-muted-foreground\">{status.name}</div>\n </div>\n ))}\n </div>\n </Card>\n </div>\n );\n};\n","import React from 'react';\nimport { Card } from '../ui/card';\nimport { DataTable, type Column } from './DataTable/DataTable';\nimport { StatCard } from './StatCard/StatCard';\nimport { DataBadge } from './DataBadge/DataBadge';\nimport { EmptyState } from './EmptyState/EmptyState';\nimport { cn } from '../utils/utils';\nimport { Users, DollarSign, ShoppingCart, TrendingUp } from 'lucide-react';\n\nexport const StyleGuide: React.FC = () => {\n return (\n <div className=\"p-8 space-y-8 max-w-6xl mx-auto\">\n <div>\n <h1 className=\"text-3xl font-bold mb-2\">Data Interface Style Guide</h1>\n <p className=\"text-muted-foreground\">Comprehensive design system for data applications</p>\n </div>\n\n {/* Color System */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Color System</h2>\n <p className=\"text-muted-foreground mb-8\">\n Our comprehensive color palette designed for data visualization and interface design.\n </p>\n \n {/* Category Colors */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Data Categories (8 colors)</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Distinct, accessible colors for data categorization and visualization.\n </p>\n <div className=\"grid grid-cols-4 gap-4\">\n {[\n { num: 1, color: 'hsl(220 70% 50%)', name: 'Blue' },\n { num: 2, color: 'hsl(160 60% 45%)', name: 'Teal' },\n { num: 3, color: 'hsl(30 80% 55%)', name: 'Orange' },\n { num: 4, color: 'hsl(280 65% 60%)', name: 'Purple' },\n { num: 5, color: 'hsl(340 75% 55%)', name: 'Pink' },\n { num: 6, color: 'hsl(120 50% 45%)', name: 'Green' },\n { num: 7, color: 'hsl(45 85% 60%)', name: 'Yellow' },\n { num: 8, color: 'hsl(15 75% 50%)', name: 'Red' },\n ].map(({ num, color }) => (\n <div key={num} className=\"space-y-2\">\n <div \n className=\"h-16 rounded flex items-center justify-center text-white font-semibold\"\n style={{ backgroundColor: color }}\n >\n Category {num}\n </div>\n <div \n className=\"px-3 py-1 rounded text-sm\"\n style={{ \n backgroundColor: color.replace(')', ' / 0.1)'),\n color: color,\n border: `1px solid ${color.replace(')', ' / 0.2)')}`\n }}\n >\n Badge {num}\n </div>\n <div className=\"text-xs text-center font-mono\">bg-category-{num}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Status Colors */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Status Colors</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Semantic colors for communicating state and feedback.\n </p>\n <div className=\"grid grid-cols-5 gap-4\">\n {[\n { status: 'success', color: 'hsl(142 76% 36%)' },\n { status: 'warning', color: 'hsl(45 93% 47%)' },\n { status: 'error', color: 'hsl(0 84% 60%)' },\n { status: 'info', color: 'hsl(217 91% 60%)' },\n { status: 'neutral', color: 'hsl(215 16% 47%)' },\n ].map(({ status, color }) => (\n <div key={status} className=\"space-y-2\">\n <div \n className=\"h-16 rounded flex items-center justify-center text-white font-semibold capitalize\"\n style={{ backgroundColor: color }}\n >\n {status}\n </div>\n <div \n className=\"px-3 py-1 rounded-pill text-sm capitalize\"\n style={{ \n backgroundColor: color.replace(')', ' / 0.1)'),\n color: color,\n border: `1px solid ${color.replace(')', ' / 0.2)')}`\n }}\n >\n {status}\n </div>\n <div className=\"text-xs text-center font-mono\">bg-status-{status}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Standard Gray Scale */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Standard Gray Scale</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Tailwind-compatible gray scale (50-950) for consistent neutral colors.\n </p>\n <div className=\"grid grid-cols-6 gap-2\">\n {[\n { shade: 50, color: 'hsl(210 20% 98%)' },\n { shade: 100, color: 'hsl(214 15% 91%)' },\n { shade: 200, color: 'hsl(213 27% 84%)' },\n { shade: 300, color: 'hsl(215 25% 77%)' },\n { shade: 400, color: 'hsl(215 20% 65%)' },\n { shade: 500, color: 'hsl(215 16% 47%)' },\n { shade: 600, color: 'hsl(215 19% 35%)' },\n { shade: 700, color: 'hsl(215 25% 27%)' },\n { shade: 800, color: 'hsl(217 33% 17%)' },\n { shade: 900, color: 'hsl(222 47% 11%)' },\n { shade: 950, color: 'hsl(224 71% 4%)' },\n ].map(({ shade, color }) => (\n <div key={shade} className=\"space-y-1\">\n <div \n className=\"h-12 rounded border flex items-center justify-center text-xs font-mono\"\n style={{ \n backgroundColor: color, \n color: shade >= 500 ? 'white' : 'black',\n borderColor: 'hsl(214.3 31.8% 91.4%)'\n }}\n >\n {shade}\n </div>\n <div className=\"text-xs text-center font-mono\">gray-{shade}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Additional Semantic Colors */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Additional Semantic Colors</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Extended semantic palette for specific use cases and contexts.\n </p>\n <div className=\"grid grid-cols-5 gap-4\">\n {[\n { name: 'danger', color: 'hsl(0 84% 60%)' },\n { name: 'positive', color: 'hsl(142 76% 36%)' },\n { name: 'negative', color: 'hsl(0 84% 60%)' },\n { name: 'pending', color: 'hsl(45 93% 47%)' },\n { name: 'disabled', color: 'hsl(215 16% 47%)' },\n ].map(({ name, color }) => (\n <div key={name} className=\"space-y-2\">\n <div \n className=\"h-16 rounded flex items-center justify-center text-white font-semibold capitalize\"\n style={{ backgroundColor: color }}\n >\n {name}\n </div>\n <div className=\"text-xs text-center font-mono\">bg-{name}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Interactive State Colors */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Interactive State Colors</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Hover, active, and disabled states for interactive elements.\n </p>\n <div className=\"grid grid-cols-3 gap-4\">\n {[\n { name: 'Primary States', states: [\n { label: 'Default', color: 'hsl(222.2 47.4% 11.2%)', textColor: 'hsl(210 40% 98%)' },\n { label: 'Hover', color: 'hsl(222.2 47.4% 15%)', textColor: 'white' },\n { label: 'Active', color: 'hsl(222.2 47.4% 8%)', textColor: 'white' },\n ]},\n { name: 'Secondary States', states: [\n { label: 'Default', color: 'hsl(210 40% 96%)', textColor: 'hsl(222.2 84% 4.9%)' },\n { label: 'Hover', color: 'hsl(210 40% 92%)', textColor: 'hsl(222.2 84% 4.9%)' },\n { label: 'Active', color: 'hsl(210 40% 88%)', textColor: 'hsl(222.2 84% 4.9%)' },\n ]},\n { name: 'Destructive States', states: [\n { label: 'Default', color: 'hsl(0 84.2% 60.2%)', textColor: 'hsl(210 40% 98%)' },\n { label: 'Hover', color: 'hsl(0 84.2% 65%)', textColor: 'white' },\n { label: 'Active', color: 'hsl(0 84.2% 55%)', textColor: 'white' },\n ]},\n ].map(({ name, states }) => (\n <div key={name} className=\"space-y-3\">\n <h4 className=\"text-sm font-medium\">{name}</h4>\n <div className=\"space-y-2\">\n {states.map(({ label, color, textColor }) => (\n <div key={label} className=\"space-y-1\">\n <div \n className=\"h-12 rounded flex items-center justify-center text-sm font-medium\"\n style={{ backgroundColor: color, color: textColor }}\n >\n {label}\n </div>\n <div className=\"text-xs text-center font-mono\">bg-{name.toLowerCase().split(' ')[0]}-{label.toLowerCase()}</div>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Extended Gray Scale */}\n <div className=\"mb-8\">\n <h3 className=\"text-lg font-medium mb-3\">Extended Gray Scale (Custom)</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Custom gray values (25-925) for fine-grained neutral color control.\n </p>\n <div className=\"grid grid-cols-6 gap-2\">\n {[\n { shade: 25, color: 'hsl(210 20% 98%)' },\n { shade: 75, color: 'hsl(214 15% 91%)' },\n { shade: 150, color: 'hsl(213 27% 84%)' },\n { shade: 250, color: 'hsl(215 25% 77%)' },\n { shade: 350, color: 'hsl(215 20% 65%)' },\n { shade: 450, color: 'hsl(215 16% 47%)' },\n { shade: 550, color: 'hsl(215 19% 35%)' },\n { shade: 650, color: 'hsl(215 25% 27%)' },\n { shade: 750, color: 'hsl(217 33% 17%)' },\n { shade: 850, color: 'hsl(222 47% 11%)' },\n { shade: 925, color: 'hsl(224 71% 4%)' },\n ].map(({ shade, color }) => (\n <div key={shade} className=\"space-y-1\">\n <div \n className=\"h-12 rounded border flex items-center justify-center text-xs font-mono\"\n style={{ \n backgroundColor: color, \n color: shade >= 450 ? 'white' : 'black',\n borderColor: 'hsl(214.3 31.8% 91.4%)'\n }}\n >\n {shade}\n </div>\n <div className=\"text-xs text-center font-mono\">gray-{shade}</div>\n </div>\n ))}\n </div>\n </div>\n </section>\n\n {/* Radius System */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Border Radius System</h2>\n <div className=\"space-y-6\">\n {/* Regular Border Radius */}\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Standard Border Radius</h3>\n <div className=\"grid grid-cols-4 gap-4\">\n {[\n { name: 'xs', class: 'rounded-xs', description: '2px' },\n { name: 'sm', class: 'rounded-sm', description: '4px' },\n { name: 'default', class: 'rounded', description: '8px' },\n { name: 'md', class: 'rounded-md', description: '10px' },\n { name: 'lg', class: 'rounded-lg', description: '12px' },\n { name: 'xl', class: 'rounded-xl', description: '16px' },\n { name: '2xl', class: 'rounded-2xl', description: '20px' },\n { name: '3xl', class: 'rounded-3xl', description: '24px' },\n ].map((radius) => (\n <div key={radius.name} className=\"text-center\">\n <div \n className={cn(\"h-16 w-full mb-2 flex items-center justify-center text-white font-medium\", radius.class)}\n style={{ backgroundColor: 'hsl(220 70% 50%)' }}\n >\n {radius.name}\n </div>\n <div className=\"text-sm font-mono\">{radius.class}</div>\n <div className=\"text-xs text-muted-foreground\">{radius.description}</div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Pill Shapes */}\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Pill Shapes (Fully Rounded)</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-4\">\n <div \n className=\"px-6 py-3 rounded-pill text-white font-medium\"\n style={{ backgroundColor: 'hsl(220 70% 50%)' }}\n >\n Button Pill\n </div>\n <div className=\"text-sm font-mono\">rounded-pill</div>\n <div className=\"text-sm text-muted-foreground\">Perfect for buttons and badges</div>\n </div>\n <div className=\"flex items-center gap-4\">\n <div \n className=\"px-4 py-2 rounded-pill text-sm\"\n style={{ \n backgroundColor: 'hsl(220 70% 50% / 0.1)',\n color: 'hsl(220 70% 50%)',\n border: '1px solid hsl(220 70% 50% / 0.2)'\n }}\n >\n Badge Pill\n </div>\n <div className=\"text-sm font-mono\">rounded-pill</div>\n <div className=\"text-sm text-muted-foreground\">Great for status indicators</div>\n </div>\n <div className=\"flex items-center gap-4\">\n <div \n className=\"w-8 h-8 rounded-pill flex items-center justify-center text-white font-medium\"\n style={{ backgroundColor: 'hsl(220 70% 50%)' }}\n >\n A\n </div>\n <div className=\"text-sm font-mono\">rounded-pill</div>\n <div className=\"text-sm text-muted-foreground\">Avatar or icon containers</div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* Spacing System */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Spacing System</h2>\n <div className=\"space-y-4\">\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Card Layouts</h3>\n <div className=\"space-y-4\">\n \n {/* Standard Card */}\n <Card className=\"card-container\">\n <h4 className=\"text-data-label\">Standard Card</h4>\n <p className=\"text-data-value\">Uses var(--card-padding) for consistent spacing</p>\n <p className=\"text-data-meta\">Perfect for primary content containers</p>\n </Card>\n\n {/* Nested Card */}\n <Card className=\"card-container\">\n <h4 className=\"text-data-label\">Parent Card</h4>\n <p className=\"text-data-value mb-4\">Contains nested elements with proper spacing</p>\n \n <div className=\"card-nested\">\n <h5 className=\"text-data-label\">Nested Card</h5>\n <p className=\"text-data-value\">Automatically offset by var(--nested-offset)</p>\n <p className=\"text-data-meta\">Edges align perfectly with parent</p>\n </div>\n </Card>\n\n {/* Flush Cards */}\n <Card className=\"card-container\">\n <h4 className=\"text-data-label mb-4\">List with Flush Cards</h4>\n {['Item 1', 'Item 2', 'Item 3'].map((item, i) => (\n <div key={i} className=\"card-flush border\">\n <div className=\"text-data-value\">{item}</div>\n <div className=\"text-data-meta\">Flush cards for seamless lists</div>\n </div>\n ))}\n </Card>\n </div>\n </div>\n\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Edge Alignment</h3>\n <Card className=\"card-container\">\n <h4 className=\"text-data-label\">Edge Alignment Demo</h4>\n <div className=\"edge-align-both bg-muted p-4 rounded text-center\">\n <div className=\"text-data-value\">Edge Aligned Content</div>\n <div className=\"text-data-meta\">Extends to card edges using edge-align-both</div>\n </div>\n </Card>\n </div>\n </div>\n </section>\n\n {/* Typography */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Typography System</h2>\n <p className=\"text-muted-foreground mb-8\">\n Specialized typography classes designed for data interfaces and information hierarchy.\n </p>\n \n <div className=\"space-y-6\">\n {/* Data Typography Hierarchy */}\n <Card className=\"card-container\">\n <h3 className=\"text-lg font-medium mb-4\">Data Typography Hierarchy</h3>\n <div className=\"space-y-4\">\n <div>\n <div className=\"text-data-label\">Label Text</div>\n <div className=\"text-data-value\">Primary Value</div>\n <div className=\"text-data-meta\">Supporting metadata information</div>\n </div>\n <div className=\"text-sm text-muted-foreground\">\n Perfect for displaying data relationships with clear visual hierarchy.\n </div>\n </div>\n </Card>\n\n {/* Typography Scale */}\n <Card className=\"card-container\">\n <h3 className=\"text-lg font-medium mb-4\">Data Typography Scale</h3>\n \n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <div className=\"text-data-xs mb-1\">Data XS</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-xs</div>\n <div className=\"text-xs text-muted-foreground mt-1\">12px • For fine details</div>\n </div>\n <div>\n <div className=\"text-data-sm mb-1\">Data SM</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-sm</div>\n <div className=\"text-xs text-muted-foreground mt-1\">14px • Metadata</div>\n </div>\n <div>\n <div className=\"text-data-base mb-1\">Data Base</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-base</div>\n <div className=\"text-xs text-muted-foreground mt-1\">16px • Body text</div>\n </div>\n <div>\n <div className=\"text-data-lg mb-1\">Data LG</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-lg</div>\n <div className=\"text-xs text-muted-foreground mt-1\">18px • Emphasis</div>\n </div>\n <div>\n <div className=\"text-data-xl mb-1\">Data XL</div>\n <div className=\"text-xs font-mono bg-muted p-2 rounded\">text-data-xl</div>\n <div className=\"text-xs text-muted-foreground mt-1\">20px • Headings</div>\n </div>\n </div>\n </Card>\n </div>\n </section>\n\n {/* Stat Cards */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Stat Cards</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n <StatCard\n title=\"Total Users\"\n value=\"1,234\"\n subtitle=\"Active accounts\"\n trend={{ value: 12.5, label: \"vs last month\" }}\n category={1}\n icon={<Users className=\"w-5 h-5\" />}\n onClick={() => console.log('Navigate to users')}\n />\n <StatCard\n title=\"Revenue\"\n value=\"$45,231\"\n subtitle=\"Monthly recurring\"\n trend={{ value: -3.2, label: \"vs last month\" }}\n category={2}\n icon={<DollarSign className=\"w-5 h-5\" />}\n />\n <StatCard\n title=\"Orders\"\n value=\"89\"\n subtitle=\"This week\"\n trend={{ value: 0, label: \"vs last week\" }}\n category={3}\n icon={<ShoppingCart className=\"w-5 h-5\" />}\n />\n <StatCard\n title=\"Growth Rate\"\n value=\"23.1%\"\n subtitle=\"Year over year\"\n trend={{ value: 8.7, label: \"vs last year\" }}\n category={4}\n icon={<TrendingUp className=\"w-5 h-5\" />}\n />\n </div>\n </section>\n\n {/* Data Badges */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Data Badges</h2>\n <Card className=\"card-container space-y-6\">\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Category Badges</h3>\n <div className=\"flex flex-wrap gap-2\">\n <DataBadge variant=\"category\" category={1}>User</DataBadge>\n <DataBadge variant=\"category\" category={2}>Admin</DataBadge>\n <DataBadge variant=\"category\" category={3}>Manager</DataBadge>\n <DataBadge variant=\"category\" category={4}>Guest</DataBadge>\n <DataBadge variant=\"category\" category={5}>VIP</DataBadge>\n </div>\n </div>\n \n <div>\n <h3 className=\"text-lg font-medium mb-3\">Status Badges</h3>\n <div className=\"flex flex-wrap gap-2\">\n <DataBadge variant=\"status\" status=\"success\">Active</DataBadge>\n <DataBadge variant=\"status\" status=\"warning\">Pending</DataBadge>\n <DataBadge variant=\"status\" status=\"error\">Inactive</DataBadge>\n <DataBadge variant=\"status\" status=\"info\">Processing</DataBadge>\n <DataBadge variant=\"status\" status=\"neutral\">Unknown</DataBadge>\n </div>\n </div>\n\n <div>\n <h3 className=\"text-lg font-medium mb-3\">Interactive Badges</h3>\n <div className=\"flex flex-wrap gap-2\">\n <DataBadge variant=\"category\" category={1} interactive onClick={() => alert('Category clicked!')}>\n Clickable\n </DataBadge>\n <DataBadge variant=\"status\" status=\"success\" size=\"lg\" interactive>\n Large Badge\n </DataBadge>\n <DataBadge variant=\"category\" category={3} size=\"sm\">\n Small Badge\n </DataBadge>\n </div>\n </div>\n </Card>\n </section>\n\n {/* Empty States */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Empty States</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <Card className=\"card-container\">\n <EmptyState\n variant=\"no-data\"\n title=\"No users found\"\n description=\"Get started by inviting your first team member to the workspace.\"\n action={{\n label: \"Invite User\",\n onClick: () => console.log('Invite user')\n }}\n secondaryAction={{\n label: \"Learn More\",\n onClick: () => console.log('Learn more')\n }}\n />\n </Card>\n \n <Card className=\"card-container\">\n <EmptyState\n variant=\"no-results\"\n title=\"No search results\"\n description=\"Try adjusting your search terms or clearing the current filters.\"\n action={{\n label: \"Clear Filters\",\n onClick: () => console.log('Clear filters')\n }}\n />\n </Card>\n </div>\n </section>\n\n {/* Data Table Component */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Data Table Component</h2>\n <Card className=\"card-container\">\n <DataTableExample />\n </Card>\n </section>\n\n {/* Usage Examples */}\n <section>\n <h2 className=\"text-2xl font-semibold mb-4\">Real-World Examples</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n \n {/* Data Table Card */}\n <Card className=\"card-container\">\n <div className=\"text-data-label\">User Analytics</div>\n <div className=\"space-y-3 mt-4\">\n {[\n { label: 'Active Users', value: '1,234', status: 'success', category: 1, categoryClass: 'bg-category-1', statusClass: 'status-success' },\n { label: 'New Signups', value: '89', status: 'info', category: 2, categoryClass: 'bg-category-2', statusClass: 'status-info' },\n { label: 'Churn Rate', value: '2.3%', status: 'warning', category: 3, categoryClass: 'bg-category-3', statusClass: 'status-warning' },\n ].map((item, i) => (\n <div key={i} className=\"flex items-center justify-between p-3 bg-muted/30 rounded\">\n <div className=\"flex items-center gap-3\">\n <div className={cn(\"w-3 h-3 rounded-full\", item.categoryClass)}></div>\n <div className=\"text-data-value\">{item.label}</div>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"text-data-value\">{item.value}</div>\n <div className={cn(\"px-2 py-1 rounded-pill text-xs\", item.statusClass)}>\n {item.status}\n </div>\n </div>\n </div>\n ))}\n </div>\n </Card>\n\n {/* Status Dashboard */}\n <Card className=\"card-container\">\n <div className=\"text-data-label\">System Status</div>\n <div className=\"grid grid-cols-2 gap-card-gap mt-4\">\n {[\n { service: 'API', status: 'success', uptime: '99.9%', statusClass: 'status-success' },\n { service: 'Database', status: 'success', uptime: '99.8%', statusClass: 'status-success' },\n { service: 'Cache', status: 'warning', uptime: '98.2%', statusClass: 'status-warning' },\n { service: 'CDN', status: 'error', uptime: '97.1%', statusClass: 'status-error' },\n ].map((item, i) => (\n <div key={i} className=\"card-nested\">\n <div className=\"text-data-label\">{item.service}</div>\n <div className=\"text-data-value\">{item.uptime}</div>\n <div className={cn(\"px-2 py-1 rounded-pill text-xs mt-2 inline-block\", item.statusClass)}>\n {item.status}\n </div>\n </div>\n ))}\n </div>\n </Card>\n </div>\n </section>\n </div>\n );\n};\n\n// DataTable Example Component\nconst DataTableExample = () => {\n // Sample data\n const sampleData = [\n { id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin', status: 'active', category: 1 },\n { id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'User', status: 'active', category: 2 },\n { id: 3, name: 'Bob Johnson', email: 'bob@example.com', role: 'Manager', status: 'inactive', category: 3 },\n { id: 4, name: 'Alice Brown', email: 'alice@example.com', role: 'User', status: 'pending', category: 4 },\n { id: 5, name: 'Charlie Wilson', email: 'charlie@example.com', role: 'Admin', status: 'active', category: 1 },\n { id: 6, name: 'Diana Evans', email: 'diana@example.com', role: 'Manager', status: 'active', category: 2 },\n { id: 7, name: 'Frank Miller', email: 'frank@example.com', role: 'User', status: 'inactive', category: 3 },\n { id: 8, name: 'Grace Lee', email: 'grace@example.com', role: 'Admin', status: 'active', category: 4 },\n { id: 9, name: 'Henry Taylor', email: 'henry@example.com', role: 'User', status: 'pending', category: 1 },\n { id: 10, name: 'Iris Clark', email: 'iris@example.com', role: 'Manager', status: 'active', category: 2 },\n { id: 11, name: 'Jack Davis', email: 'jack@example.com', role: 'User', status: 'active', category: 3 },\n { id: 12, name: 'Kate Moore', email: 'kate@example.com', role: 'Admin', status: 'inactive', category: 4 },\n ];\n\n // Column definitions\n const columns: Column<typeof sampleData[0]>[] = [\n {\n key: 'name',\n header: 'Name',\n sortable: true,\n filterable: true,\n },\n {\n key: 'email',\n header: 'Email',\n sortable: true,\n filterable: true,\n },\n {\n key: 'role',\n header: 'Role',\n sortable: true,\n filterable: true,\n cell: (item) => (\n <DataBadge variant=\"category\" category={item.category as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8}>\n {item.role}\n </DataBadge>\n ),\n },\n {\n key: 'status',\n header: 'Status',\n sortable: true,\n filterable: true,\n cell: (item) => {\n const statusType = {\n active: 'success',\n inactive: 'neutral',\n pending: 'warning',\n }[item.status] || 'neutral';\n \n return (\n <DataBadge variant=\"status\" status={statusType as 'success' | 'warning' | 'error' | 'info' | 'neutral'}>\n {item.status}\n </DataBadge>\n );\n },\n },\n ];\n\n return (\n <div className=\"space-y-4\">\n <div>\n <h3 className=\"text-lg font-medium mb-2\">Advanced Data Table</h3>\n <p className=\"text-data-meta mb-4\">\n Features: sorting, filtering, pagination, custom cell rendering\n </p>\n </div>\n \n <DataTable\n data={sampleData}\n columns={columns}\n pageSize={5}\n searchPlaceholder=\"Search users...\"\n onRowClick={(item) => console.log('Clicked:', item)}\n />\n \n <div className=\"mt-6 p-4 bg-muted/30 rounded\">\n <h4 className=\"text-data-label mb-2\">Usage Example</h4>\n <pre className=\"text-xs overflow-x-auto\">\n{`<DataTable\n data={users}\n columns={[\n { key: 'name', header: 'Name', sortable: true },\n { key: 'email', header: 'Email', sortable: true },\n { \n key: 'status', \n header: 'Status',\n cell: (item) => <StatusBadge status={item.status} />\n }\n ]}\n pageSize={10}\n onRowClick={(user) => navigate(\\`/users/\\${user.id}\\`)}\n/>`}\n </pre>\n </div>\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../atoms/utils/utils';\nimport { getAnimationClasses } from '../../atoms/utils/animations';\n\nexport interface PageTemplateProps {\n /** Main page title */\n title: string;\n /** Optional subtitle/description */\n subtitle?: string;\n /** Optional icon element to display with title */\n icon?: React.ReactNode;\n /** Optional action buttons/controls for the header */\n actions?: React.ReactNode;\n /** Page content */\n children: React.ReactNode;\n /** Additional CSS classes for the container */\n className?: string;\n /** Whether to apply animation to the page content */\n animated?: boolean;\n}\n\nexport const PageTemplate: React.FC<PageTemplateProps> = ({\n title,\n subtitle,\n icon,\n actions,\n children,\n className,\n animated = true\n}) => {\n return (\n <div \n className={cn(\n 'min-h-screen bg-background',\n animated && getAnimationClasses({ type: 'subtle', timing: 'slow' }),\n className\n )}\n data-component-name=\"PageTemplate\"\n >\n {/* Page Header */}\n <header className=\"border-b border-border bg-card/50 backdrop-blur-sm sticky top-0 z-10\">\n <div className=\"container mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex items-center justify-between py-6 sm:py-8\">\n <div className=\"flex items-center space-x-4 min-w-0 flex-1\">\n {icon && (\n <div className=\"flex-shrink-0 w-8 h-8 sm:w-10 sm:h-10 flex items-center justify-center rounded bg-primary/10 text-primary\">\n {icon}\n </div>\n )}\n \n <div className=\"min-w-0 flex-1\">\n <h1 className=\"text-2xl sm:text-3xl lg:text-4xl font-bold text-foreground tracking-tight\">\n {title}\n </h1>\n {subtitle && (\n <p className=\"mt-2 text-base sm:text-lg text-muted-foreground max-w-3xl\">\n {subtitle}\n </p>\n )}\n </div>\n </div>\n \n {actions && (\n <div className=\"flex-shrink-0 ml-4\">\n <div className=\"flex items-center space-x-3\">\n {actions}\n </div>\n </div>\n )}\n </div>\n </div>\n </header>\n\n {/* Page Content */}\n <main className=\"container mx-auto px-4 sm:px-6 lg:px-8 py-6 sm:py-8 lg:py-12\">\n <div \n className={cn(\n 'space-y-8',\n animated && 'animate-fade-in'\n )}\n >\n {children}\n </div>\n </main>\n </div>\n );\n};","import React from 'react';\nimport { DataBadge } from '../../atoms/composed/DataBadge';\nimport { cn } from '../../atoms/utils/utils';\n\ninterface ShowcaseSectionProps {\n /** Section title */\n title: string;\n /** Section description */\n description: string;\n /** Badge configuration */\n badge: {\n text: string;\n variant?: 'status' | 'category';\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n size?: 'sm' | 'md' | 'lg';\n };\n /** Section content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const ShowcaseSection: React.FC<ShowcaseSectionProps> = ({\n title,\n description,\n badge,\n children,\n className\n}) => {\n return (\n <div className={cn('space-y-6', className)} data-component-name=\"ShowcaseSection\">\n {/* Title with inline badge */}\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-medium flex items-center gap-2\">\n {title}\n <DataBadge \n variant={badge.variant || 'status'}\n status={badge.status || 'neutral'}\n category={badge.category}\n size={badge.size || 'sm'}\n >\n {badge.text}\n </DataBadge>\n </h3>\n <p className=\"text-sm text-muted-foreground\">\n {description}\n </p>\n </div>\n\n {/* Content */}\n <div>\n {children}\n </div>\n </div>\n );\n};","import React, { createContext, useContext, useState, type ReactNode } from 'react';\n\ninterface SidebarContextType {\n isExpanded: boolean;\n setIsExpanded: (expanded: boolean) => void;\n toggleSidebar: () => void;\n}\n\nconst SidebarContext = createContext<SidebarContextType | undefined>(undefined);\n\nexport const SidebarProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const toggleSidebar = () => {\n setIsExpanded(prev => !prev);\n };\n\n return (\n <SidebarContext.Provider value={{ isExpanded, setIsExpanded, toggleSidebar }}>\n {children}\n </SidebarContext.Provider>\n );\n};\n\nexport const useSidebar = () => {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider');\n }\n return context;\n};","import React from 'react';\nimport { cn } from '../../../atoms/utils/utils';\nimport { Button } from '../../../atoms/ui/button';\n\ninterface SidebarButtonProps {\n icon: React.ReactNode;\n label: string;\n active?: boolean;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n expanded?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport const SidebarButton: React.FC<SidebarButtonProps> = ({\n icon,\n label,\n active = false,\n category = 1,\n expanded = false,\n onClick,\n className\n}) => {\n return (\n <Button\n variant={active ? \"secondary\" : \"ghost\"}\n onClick={onClick}\n tooltip={!expanded ? label : undefined}\n className={cn(\n \"relative w-full justify-start gap-3 h-12\",\n \"transition-all duration-200 ease-in-out\",\n \n // Active state with category colors\n active && [\n `bg-category-${category}/15 hover:bg-category-${category}/25`,\n `border-category-${category}/30`,\n `text-category-${category}`,\n \"shadow-sm\"\n ],\n \n // Non-active hover effects\n !active && [\n \"hover:bg-muted/80\",\n `hover:text-category-${category}`,\n \"hover:shadow-sm\"\n ],\n \n // Collapsed state - ensure proper centering\n !expanded && \"justify-center px-2\",\n expanded && \"px-3\",\n \n className\n )}\n >\n {/* Icon Container - Always square */}\n <div className={cn(\n \"flex items-center justify-center w-6 h-6 flex-shrink-0\",\n \"transition-colors duration-200\",\n active ? `text-category-${category}` : \"text-muted-foreground group-hover:text-foreground\"\n )}>\n {React.isValidElement(icon) \n ? React.cloneElement(icon as React.ReactElement<{ className?: string }>, { className: \"w-5 h-5\" })\n : icon\n }\n </div>\n \n {/* Label - only show when expanded */}\n {expanded && (\n <>\n <span className={cn(\n \"text-sm font-medium flex-1 text-left\",\n active ? `text-category-${category}` : \"text-foreground\"\n )}>\n {label}\n </span>\n \n {/* Active indicator dot */}\n {active && (\n <div className={cn(\n \"w-2 h-2 rounded-full flex-shrink-0\",\n `bg-category-${category}`\n )} />\n )}\n </>\n )}\n \n {/* Collapsed active indicator */}\n {!expanded && active && (\n <div className=\"absolute -top-1 -right-1\">\n <div className={cn(\n \"w-2.5 h-2.5 rounded-full\",\n `bg-category-${category}`,\n \"ring-2 ring-background\"\n )} />\n </div>\n )}\n </Button>\n );\n};","import React from 'react';\nimport { useLocation, useNavigate, useSearchParams } from 'react-router-dom';\nimport { cn } from '../../atoms/utils/utils';\nimport { useSidebar } from './SidebarContext';\nimport { SidebarButton } from './SidebarButton';\nimport { \n Palette,\n Menu,\n X,\n Shield,\n Users\n} from 'lucide-react';\n\ninterface SidebarItem {\n value: string;\n label: string;\n icon: React.ReactNode;\n path: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\ninterface SidebarProps {\n className?: string;\n}\n\nexport const Sidebar = ({ className }: SidebarProps) => {\n const { isExpanded, toggleSidebar } = useSidebar();\n const location = useLocation();\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n\n const items: SidebarItem[] = [\n { value: 'showcase', label: 'Showcase', icon: <Palette className=\"w-5 h-5\" />, path: '/showcase', category: 5 },\n { value: 'admin-dashboard', label: 'Admin Dashboard', icon: <Shield className=\"w-5 h-5\" />, path: '/admin/dashboard', category: 2 },\n { value: 'admin-users', label: 'User Management', icon: <Users className=\"w-5 h-5\" />, path: '/admin/users', category: 3 }\n ];\n\n const handleNavigation = (path: string) => {\n if (path.includes('?')) {\n // Handle query parameters by parsing the URL\n const [basePath, query] = path.split('?');\n const searchParams = new URLSearchParams(query);\n navigate({ pathname: basePath, search: searchParams.toString() });\n } else {\n navigate(path);\n }\n };\n\n return (\n <aside \n className={cn(\n \"fixed left-0 top-16 flex flex-col bg-background border-r border-border z-40\",\n \"transition-all duration-300 ease-in-out\",\n \"h-[calc(100vh-4rem)]\", // Full height minus header (4rem = 64px)\n !isExpanded ? \"w-16\" : \"w-64\",\n className\n )}\n data-component-name=\"Sidebar\"\n data-collapsed={!isExpanded}\n >\n {/* Toggle Button */}\n <div className=\"flex justify-center p-3 pt-4\">\n <button\n onClick={toggleSidebar}\n className={cn(\n \"w-7 h-7 rounded-md\",\n \"bg-muted/50 text-muted-foreground\",\n \"flex items-center justify-center\",\n \"hover:bg-muted hover:text-foreground\",\n \"active:scale-95\",\n \"transition-all duration-150 ease-out\"\n )}\n data-component-name=\"SidebarToggle\"\n title={!isExpanded ? \"Expand sidebar\" : \"Collapse sidebar\"}\n >\n {!isExpanded ? <Menu className=\"w-3.5 h-3.5\" /> : <X className=\"w-3.5 h-3.5\" />}\n </button>\n </div>\n\n\n {/* Navigation Items */}\n <nav className=\"flex-1 p-3 space-y-2\" data-component-name=\"SidebarNav\">\n {items.map((item) => {\n // Check if item path has query parameters\n const [itemBasePath, itemQuery] = item.path.split('?');\n const currentPath = location.pathname;\n \n let isActive;\n if (itemQuery) {\n // For items with query parameters, check both path and query\n const itemParams = new URLSearchParams(itemQuery);\n const tabParam = itemParams.get('tab');\n const currentTab = searchParams.get('tab');\n isActive = currentPath === itemBasePath && currentTab === tabParam;\n } else {\n // For simple paths, check exact match\n isActive = currentPath === item.path;\n }\n \n return (\n <SidebarButton\n key={item.value}\n icon={item.icon}\n label={item.label}\n active={isActive}\n category={item.category}\n expanded={isExpanded}\n onClick={() => handleNavigation(item.path)}\n />\n );\n })}\n </nav>\n\n {/* Footer */}\n <div \n className={cn(\n \"p-4 border-t border-border\",\n !isExpanded && \"px-3\"\n )}\n data-component-name=\"SidebarFooter\"\n >\n <div className=\"relative\">\n {/* Collapsed footer */}\n <div className={cn(\n \"text-xs text-muted-foreground text-center\",\n \"absolute inset-0 transition-opacity duration-200 ease-out\",\n !isExpanded ? \"opacity-100\" : \"opacity-0\"\n )}>\n v1.0\n </div>\n \n {/* Expanded footer */}\n <div className={cn(\n \"text-xs text-muted-foreground whitespace-nowrap\",\n \"transition-opacity duration-200 ease-out\",\n isExpanded ? \"opacity-100\" : \"opacity-0\"\n )}>\n AloeVera v1.0\n </div>\n </div>\n </div>\n </aside>\n );\n};","import React from 'react';\nimport { GlobalSearch, UserMenu } from '../../../atoms/composed';\nimport { cn } from '../../../atoms/utils/utils';\n\ninterface AppHeaderProps {\n className?: string;\n}\n\nexport const AppHeader: React.FC<AppHeaderProps> = ({ className }) => {\n return (\n <header className={cn(\n \"fixed top-0 left-0 right-0 z-50\",\n \"bg-card/95 backdrop-blur-sm border-b border-border\",\n \"supports-[backdrop-filter]:bg-card/95\",\n className\n )}>\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n <div className=\"flex h-16 items-center justify-between\">\n {/* App Title */}\n <div className=\"flex items-center\">\n <h1 className=\"text-xl font-bold text-foreground\">\n Data Trust Navigator\n </h1>\n </div>\n \n {/* Centered Global Search */}\n <div className=\"flex-1 max-w-2xl mx-8\">\n <GlobalSearch \n className=\"w-full\" \n placeholder=\"Search models, tests, jobs, and components...\"\n />\n </div>\n \n {/* User Menu */}\n <div className=\"flex items-center space-x-4\">\n <UserMenu category={8} />\n </div>\n </div>\n </div>\n </header>\n );\n};","import { Outlet } from 'react-router-dom';\nimport { Sidebar } from './Sidebar';\nimport { AppHeader } from './AppHeader';\nimport { useSidebar } from './SidebarContext';\nimport { cn } from '../../atoms/utils/utils';\n\nexport const AppLayout = () => {\n const { isExpanded } = useSidebar();\n \n return (\n <div className=\"min-h-screen bg-background\">\n {/* Header spans full width */}\n <AppHeader />\n \n {/* Sidebar positioned fixed */}\n <Sidebar />\n \n {/* Main content with proper spacing for fixed sidebar */}\n <main \n className={cn(\n \"pt-16 min-h-screen transition-all duration-300 ease-in-out\",\n isExpanded ? 'ml-64' : 'ml-16'\n )}\n >\n <Outlet />\n </main>\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../../atoms/utils/utils';\nimport { DataBadge } from '../../../atoms/composed/DataBadge';\n\nexport interface SectionHeaderProps {\n /** Main heading text */\n title: string;\n /** Optional description text */\n description?: string;\n /** Optional subtitle text */\n subtitle?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS classes */\n className?: string;\n /** Optional icon element */\n icon?: React.ReactNode;\n /** Optional badge configuration */\n badge?: {\n text: string;\n variant?: 'category' | 'status';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n };\n}\n\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n description,\n subtitle,\n size = 'md',\n className,\n icon,\n badge\n}) => {\n const titleSizes = {\n sm: 'text-lg',\n md: 'text-xl', \n lg: 'text-2xl'\n };\n\n const spacingSizes = {\n sm: 'space-y-1',\n md: 'space-y-2',\n lg: 'space-y-3'\n };\n\n return (\n <div \n className={cn(\n 'text-center',\n spacingSizes[size],\n className\n )}\n data-component-name=\"SectionHeader\"\n >\n <div className=\"flex items-center justify-center gap-3\">\n {icon}\n <h3 className={cn('font-semibold text-foreground', titleSizes[size])}>\n {title}\n </h3>\n {badge && (\n <DataBadge\n variant={badge.variant || 'status'}\n status={badge.status}\n category={badge.category}\n size=\"sm\"\n >\n {badge.text}\n </DataBadge>\n )}\n </div>\n \n {subtitle && (\n <p className=\"text-muted-foreground text-sm font-medium\">\n {subtitle}\n </p>\n )}\n \n {description && (\n <p className=\"text-muted-foreground text-sm max-w-2xl mx-auto\">\n {description}\n </p>\n )}\n </div>\n );\n};","import React from 'react';\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { Button } from '../../atoms/ui/button';\nimport { cn } from '../../atoms/utils/utils';\n\ninterface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n showFirstLast?: boolean;\n maxVisiblePages?: number;\n className?: string;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n showFirstLast = true,\n maxVisiblePages = 7,\n className,\n category = 1,\n size = 'md'\n}) => {\n const getVisiblePages = () => {\n if (totalPages <= maxVisiblePages) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const halfVisible = Math.floor(maxVisiblePages / 2);\n let start = Math.max(1, currentPage - halfVisible);\n const end = Math.min(totalPages, start + maxVisiblePages - 1);\n\n if (end - start + 1 < maxVisiblePages) {\n start = Math.max(1, end - maxVisiblePages + 1);\n }\n\n const pages = [];\n \n // Add first page if not in range\n if (start > 1) {\n pages.push(1);\n if (start > 2) {\n pages.push('ellipsis-start');\n }\n }\n \n // Add visible range\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n \n // Add last page if not in range\n if (end < totalPages) {\n if (end < totalPages - 1) {\n pages.push('ellipsis-end');\n }\n pages.push(totalPages);\n }\n \n return pages;\n };\n\n const buttonSizes = {\n sm: 'h-8 w-8 text-xs',\n md: 'h-9 w-9 text-sm',\n lg: 'h-10 w-10 text-sm'\n };\n\n const visiblePages = getVisiblePages();\n\n return (\n <nav \n className={cn('flex items-center space-x-1', className)}\n aria-label=\"Pagination\"\n data-component-name=\"Pagination\"\n >\n {/* First page button */}\n {showFirstLast && currentPage > 1 && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(1)}\n className={cn(buttonSizes[size])}\n aria-label=\"Go to first page\"\n >\n ««\n </Button>\n )}\n\n {/* Previous page button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(Math.max(1, currentPage - 1))}\n disabled={currentPage === 1}\n className={cn(buttonSizes[size])}\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </Button>\n\n {/* Page number buttons */}\n {visiblePages.map((page, index) => {\n if (typeof page === 'string') {\n return (\n <span\n key={index}\n className={cn(\n 'flex items-center justify-center text-muted-foreground',\n buttonSizes[size]\n )}\n >\n <MoreHorizontal className=\"w-4 h-4\" />\n </span>\n );\n }\n\n const isActive = page === currentPage;\n \n return (\n <Button\n key={page}\n variant={isActive ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => onPageChange(page)}\n className={cn(\n buttonSizes[size],\n isActive && [\n `bg-category-${category}/15 hover:bg-category-${category}/25`,\n `border-category-${category}/30`,\n `text-category-${category}`,\n 'shadow-sm'\n ]\n )}\n aria-label={`Go to page ${page}`}\n aria-current={isActive ? 'page' : undefined}\n >\n {page}\n </Button>\n );\n })}\n\n {/* Next page button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(Math.min(totalPages, currentPage + 1))}\n disabled={currentPage === totalPages}\n className={cn(buttonSizes[size])}\n aria-label=\"Go to next page\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n\n {/* Last page button */}\n {showFirstLast && currentPage < totalPages && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(totalPages)}\n className={cn(buttonSizes[size])}\n aria-label=\"Go to last page\"\n >\n »»\n </Button>\n )}\n </nav>\n );\n};","import React, { useState, useRef, useEffect } from 'react';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '../../atoms/utils/utils';\nimport { getAnimationClasses, animationPresets } from '../../atoms/utils/animations';\n\nexport interface NavMenuItem {\n id: string;\n label: string;\n href?: string;\n icon?: React.ReactNode;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n children?: NavMenuItem[];\n disabled?: boolean;\n}\n\ninterface NavMenuProps {\n items: NavMenuItem[];\n orientation?: 'horizontal' | 'vertical';\n className?: string;\n defaultCategory?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n onItemClick?: (item: NavMenuItem) => void;\n}\n\nexport const NavMenu: React.FC<NavMenuProps> = ({\n items,\n orientation = 'horizontal',\n className,\n defaultCategory = 1,\n onItemClick\n}) => {\n const [openMenus, setOpenMenus] = useState<Set<string>>(new Set());\n const timeoutRef = useRef<Record<string, NodeJS.Timeout>>({});\n\n const toggleMenu = (itemId: string) => {\n setOpenMenus(prev => {\n const newSet = new Set(prev);\n if (newSet.has(itemId)) {\n newSet.delete(itemId);\n } else {\n newSet.add(itemId);\n }\n return newSet;\n });\n };\n\n const handleMouseEnter = (itemId: string) => {\n if (orientation === 'horizontal') {\n // Clear any pending close timeout\n if (timeoutRef.current[itemId]) {\n clearTimeout(timeoutRef.current[itemId]);\n delete timeoutRef.current[itemId];\n }\n \n setOpenMenus(prev => new Set(prev).add(itemId));\n }\n };\n\n const handleMouseLeave = (itemId: string) => {\n if (orientation === 'horizontal') {\n // Delay closing to allow for mouse movement to submenu\n timeoutRef.current[itemId] = setTimeout(() => {\n setOpenMenus(prev => {\n const newSet = new Set(prev);\n newSet.delete(itemId);\n return newSet;\n });\n delete timeoutRef.current[itemId];\n }, 150);\n }\n };\n\n const handleItemClick = (item: NavMenuItem, event?: React.MouseEvent) => {\n if (item.disabled) {\n event?.preventDefault();\n return;\n }\n\n if (item.children && item.children.length > 0) {\n event?.preventDefault();\n toggleMenu(item.id);\n } else {\n onItemClick?.(item);\n }\n };\n\n useEffect(() => {\n const timeouts = timeoutRef.current;\n return () => {\n // Cleanup timeouts\n Object.values(timeouts).forEach(timeout => clearTimeout(timeout));\n };\n }, []);\n\n const renderMenuItem = (item: NavMenuItem, level = 0) => {\n const hasChildren = item.children && item.children.length > 0;\n const isOpen = openMenus.has(item.id);\n const category = item.category || defaultCategory;\n\n const itemContent = (\n <div\n className={cn(\n 'flex items-center gap-2 px-3 py-2 rounded-md transition-all duration-200',\n 'hover:bg-muted/50 cursor-pointer select-none',\n item.disabled && 'opacity-50 cursor-not-allowed',\n !item.disabled && [\n `hover:text-category-${category}`,\n `hover:bg-category-${category}/5`,\n getAnimationClasses(animationPresets.subtle)\n ],\n orientation === 'horizontal' && level === 0 && 'px-4 py-3'\n )}\n onClick={(e) => handleItemClick(item, e)}\n >\n {item.icon && (\n <span className=\"flex-shrink-0\">\n {item.icon}\n </span>\n )}\n \n <span className=\"flex-1 text-sm font-medium\">\n {item.label}\n </span>\n \n {hasChildren && (\n <span className=\"flex-shrink-0 transition-transform duration-200\">\n {orientation === 'horizontal' ? (\n <ChevronDown className={cn(\n 'w-4 h-4 transition-transform duration-200',\n isOpen && 'rotate-180'\n )} />\n ) : (\n <ChevronRight className={cn(\n 'w-4 h-4 transition-transform duration-200',\n isOpen && 'rotate-90'\n )} />\n )}\n </span>\n )}\n </div>\n );\n\n return (\n <div\n key={item.id}\n className=\"relative\"\n onMouseEnter={() => handleMouseEnter(item.id)}\n onMouseLeave={() => handleMouseLeave(item.id)}\n >\n {item.href && !hasChildren ? (\n <a href={item.href} className=\"block\">\n {itemContent}\n </a>\n ) : (\n itemContent\n )}\n\n {/* Submenu */}\n {hasChildren && isOpen && (\n <div\n className={cn(\n 'bg-popover border border-border rounded-md shadow-lg py-1 min-w-48',\n 'z-50',\n orientation === 'horizontal' \n ? 'absolute top-full left-0 mt-1'\n : 'ml-4 mt-1',\n getAnimationClasses(animationPresets.card)\n )}\n >\n {item.children!.map(child => renderMenuItem(child, level + 1))}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <nav\n className={cn(\n 'flex',\n orientation === 'horizontal' ? 'flex-row space-x-1' : 'flex-col space-y-1',\n className\n )}\n data-component-name=\"NavMenu\"\n >\n {items.map(item => renderMenuItem(item))}\n </nav>\n );\n};","import React from 'react';\nimport { cn } from '../../atoms/utils/utils';\n\nexport interface FormGroupProps {\n /** Group title */\n title?: string;\n /** Group description */\n description?: string;\n /** Group content */\n children: React.ReactNode;\n /** Visual variant */\n variant?: 'default' | 'card' | 'section';\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const FormGroup: React.FC<FormGroupProps> = ({\n title,\n description,\n children,\n variant = 'default',\n className,\n category\n}) => {\n const variantClasses = {\n default: 'space-y-4',\n card: 'space-y-4 p-6 bg-card border border-border rounded-lg',\n section: 'space-y-6 pb-6 border-b border-border last:border-b-0 last:pb-0'\n };\n\n const titleClasses = {\n default: 'text-lg font-semibold text-foreground',\n card: 'text-lg font-semibold text-foreground',\n section: 'text-xl font-semibold text-foreground'\n };\n\n return (\n <div\n className={cn(\n variantClasses[variant],\n category && variant === 'card' && `border-category-${category}/20`,\n className\n )}\n data-component-name=\"FormGroup\"\n >\n {/* Header */}\n {(title || description) && (\n <div className=\"space-y-1\">\n {title && (\n <h3 \n className={cn(\n titleClasses[variant],\n category && `text-category-${category}`\n )}\n >\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"space-y-4\">\n {children}\n </div>\n </div>\n );\n};","import React, { useState, useRef, useEffect } from 'react';\nimport { Search, X, Loader2 } from 'lucide-react';\nimport { cn } from '../../atoms/utils/utils';\nimport { Input } from '../../atoms/ui/input';\nimport { Button } from '../../atoms/ui/button';\nimport { getAnimationClasses, animationPresets } from '../../atoms/utils/animations';\n\nexport interface SearchResult {\n id: string;\n label: string;\n description?: string;\n category?: string;\n icon?: React.ReactNode;\n}\n\nexport interface SearchInputProps {\n /** Search placeholder text */\n placeholder?: string;\n /** Current search value */\n value?: string;\n /** Value change handler */\n onChange?: (value: string) => void;\n /** Search results */\n results?: SearchResult[];\n /** Loading state */\n loading?: boolean;\n /** Result selection handler */\n onSelect?: (result: SearchResult) => void;\n /** Search debounce delay in ms */\n debounceMs?: number;\n /** Whether to show clear button */\n clearable?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Maximum results to show */\n maxResults?: number;\n /** No results message */\n noResultsText?: string;\n}\n\nexport const SearchInput: React.FC<SearchInputProps> = ({\n placeholder = 'Search...',\n value = '',\n onChange,\n results = [],\n loading = false,\n onSelect,\n debounceMs = 300,\n clearable = true,\n className,\n category = 1,\n maxResults = 10,\n noResultsText = 'No results found'\n}) => {\n const [internalValue, setInternalValue] = useState(value);\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n \n const inputRef = useRef<HTMLInputElement>(null);\n const resultsRef = useRef<HTMLDivElement>(null);\n const debounceRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n const displayResults = results.slice(0, maxResults);\n const showResults = isOpen && (displayResults.length > 0 || (internalValue && !loading));\n\n // Debounced search\n useEffect(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n debounceRef.current = setTimeout(() => {\n if (onChange) onChange(internalValue);\n }, debounceMs);\n\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n };\n }, [internalValue, onChange, debounceMs]);\n\n // Sync external value\n useEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n // Keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!showResults) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setHighlightedIndex(prev => \n prev < displayResults.length - 1 ? prev + 1 : prev\n );\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex(prev => prev > 0 ? prev - 1 : prev);\n break;\n case 'Enter':\n e.preventDefault();\n if (highlightedIndex >= 0 && displayResults[highlightedIndex]) {\n handleSelect(displayResults[highlightedIndex]);\n }\n break;\n case 'Escape':\n setIsOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.blur();\n break;\n }\n };\n\n const handleSelect = (result: SearchResult) => {\n onSelect?.(result);\n setIsOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.blur();\n };\n\n const handleClear = () => {\n setInternalValue('');\n onChange?.('');\n setIsOpen(false);\n inputRef.current?.focus();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n setIsOpen(true);\n setHighlightedIndex(-1);\n };\n\n const handleFocus = () => {\n if (internalValue) {\n setIsOpen(true);\n }\n };\n\n const handleBlur = () => {\n // Delay closing to allow for result clicks\n setTimeout(() => {\n if (!resultsRef.current?.contains(document.activeElement)) {\n setIsOpen(false);\n setHighlightedIndex(-1);\n }\n }, 150);\n };\n\n return (\n <div className={cn('relative w-full', className)} data-component-name=\"SearchInput\">\n {/* Input container */}\n <div className=\"relative\">\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {loading ? (\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n ) : (\n <Search className=\"w-4 h-4\" />\n )}\n </div>\n \n <Input\n ref={inputRef}\n type=\"text\"\n value={internalValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n className={cn(\n 'pl-10',\n clearable && internalValue && 'pr-10',\n showResults && `ring-2 ring-category-${category}/20`\n )}\n />\n \n {clearable && internalValue && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClear}\n className=\"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7 p-0 hover:bg-muted\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n </div>\n\n {/* Results dropdown */}\n {showResults && (\n <div\n ref={resultsRef}\n className={cn(\n 'absolute top-full left-0 right-0 z-50 mt-1',\n 'bg-popover border border-border rounded-md shadow-lg',\n 'max-h-64 overflow-y-auto',\n getAnimationClasses(animationPresets.card)\n )}\n >\n {displayResults.length > 0 ? (\n <div className=\"py-1\">\n {displayResults.map((result, index) => (\n <button\n key={result.id}\n type=\"button\"\n onClick={() => handleSelect(result)}\n className={cn(\n 'w-full text-left px-3 py-2 text-sm',\n 'hover:bg-muted/50 focus:bg-muted/50',\n 'transition-colors duration-150',\n index === highlightedIndex && [\n `bg-category-${category}/10`,\n `text-category-${category}`\n ]\n )}\n >\n <div className=\"flex items-center gap-2\">\n {result.icon && (\n <span className=\"flex-shrink-0 text-muted-foreground\">\n {result.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">\n {result.label}\n </div>\n {result.description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {result.description}\n </div>\n )}\n </div>\n {result.category && (\n <span className=\"text-xs text-muted-foreground\">\n {result.category}\n </span>\n )}\n </div>\n </button>\n ))}\n </div>\n ) : internalValue && !loading ? (\n <div className=\"px-3 py-2 text-sm text-muted-foreground\">\n {noResultsText}\n </div>\n ) : null}\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { Card } from '../atoms/ui/card';\nimport { ShowcaseSection } from '../molecules/layout';\n\ninterface PrimaryComponentSection {\n title: string;\n description: string;\n badge: {\n text: string;\n variant?: 'status' | 'category';\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n size?: 'sm' | 'md' | 'lg';\n };\n children: React.ReactNode;\n}\n\ninterface ComposedExampleSection {\n title: string;\n description: string;\n badge?: {\n text: string;\n variant?: 'status' | 'category';\n status?: 'success' | 'warning' | 'error' | 'info' | 'neutral';\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n size?: 'sm' | 'md' | 'lg';\n };\n children: React.ReactNode;\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\ninterface ComponentShowcaseTemplateProps {\n /** Category for overall theming */\n category: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Page title */\n title: string;\n /** Page description */\n description: string;\n /** Primary component section - core component with basic variants */\n primaryComponent: PrimaryComponentSection;\n /** Optional composed examples - complex usage patterns and real-world scenarios */\n composedExamples?: {\n title: string;\n description: string;\n sections: ComposedExampleSection[];\n };\n /** Optional ephemeral examples - inline customized components */\n ephemeralExamples?: {\n title: string;\n description: string;\n sections: ComposedExampleSection[];\n };\n /** Additional content that doesn't fit the primary/composed pattern */\n additionalSections?: React.ReactNode;\n}\n\nexport const ComponentShowcaseTemplate: React.FC<ComponentShowcaseTemplateProps> = ({\n category,\n title,\n description,\n primaryComponent,\n composedExamples,\n ephemeralExamples,\n additionalSections\n}) => {\n return (\n <div className=\"space-y-8\">\n {/* Page Header */}\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">{title}</h2>\n <p className=\"text-muted-foreground\">{description}</p>\n </div>\n\n {/* Primary Component Section */}\n <Card className=\"p-6\" category={category}>\n <ShowcaseSection\n title={primaryComponent.title}\n description={primaryComponent.description}\n badge={primaryComponent.badge}\n >\n {primaryComponent.children}\n </ShowcaseSection>\n </Card>\n\n {/* Composed Examples Section */}\n {composedExamples && (\n <div className=\"space-y-6\">\n {/* Composed Examples Header */}\n <div className=\"space-y-2 mt-12 mb-8\">\n <h3 className=\"text-xl font-bold text-foreground\">{composedExamples.title}</h3>\n <p className=\"text-muted-foreground\">{composedExamples.description}</p>\n </div>\n\n {/* Composed Example Sections */}\n <div className=\"grid gap-6\">\n {composedExamples.sections.map((section, index) => (\n <Card \n key={index} \n className=\"p-6\" \n category={section.category || category}\n >\n {section.badge ? (\n <ShowcaseSection\n title={section.title}\n description={section.description}\n badge={section.badge}\n >\n {section.children}\n </ShowcaseSection>\n ) : (\n <div className=\"space-y-6\">\n <div className=\"space-y-4\">\n <h4 className=\"text-lg font-medium\">{section.title}</h4>\n <p className=\"text-sm text-muted-foreground\">{section.description}</p>\n </div>\n <div>{section.children}</div>\n </div>\n )}\n </Card>\n ))}\n </div>\n </div>\n )}\n\n {/* Ephemeral Examples Section */}\n {ephemeralExamples && (\n <div className=\"space-y-6\">\n {/* Ephemeral Examples Header */}\n <div className=\"space-y-2 mt-12 mb-8\">\n <h3 className=\"text-xl font-bold text-foreground\">{ephemeralExamples.title}</h3>\n <p className=\"text-muted-foreground\">{ephemeralExamples.description}</p>\n </div>\n\n {/* Ephemeral Example Sections */}\n <div className=\"grid gap-6\">\n {ephemeralExamples.sections.map((section, index) => (\n <Card \n key={index} \n className=\"p-6\" \n category={section.category || category}\n >\n {section.badge ? (\n <ShowcaseSection\n title={section.title}\n description={section.description}\n badge={section.badge}\n >\n {section.children}\n </ShowcaseSection>\n ) : (\n <div className=\"space-y-6\">\n <div className=\"space-y-4\">\n <h4 className=\"text-lg font-medium\">{section.title}</h4>\n <p className=\"text-sm text-muted-foreground\">{section.description}</p>\n </div>\n <div>{section.children}</div>\n </div>\n )}\n </Card>\n ))}\n </div>\n </div>\n )}\n\n {/* Additional Sections */}\n {additionalSections && (\n <div className=\"space-y-6\">\n {additionalSections}\n </div>\n )}\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../atoms/utils/utils';\nimport { SectionHeader } from '../molecules/layout/SectionHeader';\nimport { Card } from '../atoms/ui/card';\n\nexport interface DashboardTemplateProps {\n /** Page title */\n title: string;\n /** Page description */\n description?: string;\n /** Header actions */\n actions?: React.ReactNode;\n /** Main content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Whether to show breadcrumbs */\n showBreadcrumbs?: boolean;\n /** Breadcrumb items */\n breadcrumbs?: Array<{ label: string; href?: string }>;\n /** Page subtitle */\n subtitle?: string;\n}\n\nexport const DashboardTemplate: React.FC<DashboardTemplateProps> = ({\n title,\n description,\n actions,\n children,\n className,\n category = 1,\n showBreadcrumbs = false,\n breadcrumbs = [],\n subtitle\n}) => {\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"flex-shrink-0 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\">\n <div className=\"container mx-auto px-6 py-6\">\n {/* Breadcrumbs */}\n {showBreadcrumbs && breadcrumbs.length > 0 && (\n <nav className=\"mb-4\">\n <ol className=\"flex items-center space-x-2 text-sm\">\n {breadcrumbs.map((crumb, index) => {\n const isLast = index === breadcrumbs.length - 1;\n return (\n <li key={index} className=\"flex items-center\">\n {crumb.href && !isLast ? (\n <a\n href={crumb.href}\n className={cn(\n 'text-muted-foreground hover:text-foreground transition-colors',\n `hover:text-category-${category}`\n )}\n >\n {crumb.label}\n </a>\n ) : (\n <span className={isLast ? `text-category-${category} font-medium` : 'text-muted-foreground'}>\n {crumb.label}\n </span>\n )}\n {!isLast && (\n <span className=\"mx-2 text-muted-foreground\">/</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n )}\n\n {/* Page Header */}\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n <SectionHeader\n title={title}\n description={description}\n subtitle={subtitle}\n size=\"lg\"\n className=\"text-left\"\n />\n </div>\n \n {actions && (\n <div className=\"ml-6 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"container mx-auto px-6 py-6\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n\n/**\n * Dashboard Grid Layout Component\n * Provides standardized grid layouts for dashboard content\n */\nexport interface DashboardGridProps {\n /** Grid columns configuration */\n columns?: 1 | 2 | 3 | 4;\n /** Gap between grid items */\n gap?: 'sm' | 'md' | 'lg';\n /** Grid content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const DashboardGrid: React.FC<DashboardGridProps> = ({\n columns = 3,\n gap = 'md',\n children,\n className\n}) => {\n const columnClasses = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 lg:grid-cols-2',\n 3: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'\n };\n\n const gapClasses = {\n sm: 'gap-4',\n md: 'gap-6',\n lg: 'gap-8'\n };\n\n return (\n <div\n className={cn(\n 'grid',\n columnClasses[columns],\n gapClasses[gap],\n className\n )}\n data-component-name=\"DashboardGrid\"\n >\n {children}\n </div>\n );\n};\n\n/**\n * Dashboard Card Component\n * Standardized card component for dashboard content\n */\nexport interface DashboardCardProps {\n /** Card title */\n title?: string;\n /** Card description */\n description?: string;\n /** Card content */\n children: React.ReactNode;\n /** Card actions */\n actions?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Card padding */\n padding?: 'sm' | 'md' | 'lg';\n}\n\nexport const DashboardCard: React.FC<DashboardCardProps> = ({\n title,\n description,\n children,\n actions,\n className,\n category,\n padding = 'md'\n}) => {\n const paddingClasses = {\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8'\n };\n\n return (\n <Card \n className={cn(paddingClasses[padding], className)}\n category={category}\n >\n {/* Card Header */}\n {(title || description || actions) && (\n <div className=\"mb-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h3 className={cn(\n 'text-lg font-semibold text-foreground mb-1',\n category && `text-category-${category}`\n )}>\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n \n {actions && (\n <div className=\"ml-4 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Card Content */}\n <div>\n {children}\n </div>\n </Card>\n );\n};","import React from 'react';\nimport { cn } from '../atoms/utils/utils';\nimport { Card } from '../atoms/ui/card';\nimport { SectionHeader } from '../molecules/layout/SectionHeader';\n\nexport interface AuthTemplateProps {\n /** Page title */\n title: string;\n /** Page subtitle */\n subtitle?: string;\n /** Auth form content */\n children: React.ReactNode;\n /** Footer content (e.g., links to other auth pages) */\n footer?: React.ReactNode;\n /** Logo or brand element */\n logo?: React.ReactNode;\n /** Background pattern or image */\n backgroundPattern?: 'gradient' | 'grid' | 'dots' | 'waves';\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Card width variant */\n width?: 'sm' | 'md' | 'lg';\n}\n\nexport const AuthTemplate: React.FC<AuthTemplateProps> = ({\n title,\n subtitle,\n children,\n footer,\n logo,\n backgroundPattern = 'gradient',\n className,\n category = 1,\n width = 'md'\n}) => {\n const backgroundPatterns = {\n gradient: 'bg-gradient-to-br from-background via-muted/20 to-background',\n grid: 'bg-background bg-[size:2rem_2rem] bg-[image:radial-gradient(circle,var(--muted)_1px,transparent_1px)]',\n dots: 'bg-background bg-[size:1rem_1rem] bg-[image:radial-gradient(circle,var(--muted)_1px,transparent_1px)]',\n waves: 'bg-background bg-[size:4rem_2rem] bg-[image:repeating-linear-gradient(45deg,transparent,transparent_1rem,var(--muted/20)_1rem,var(--muted/20)_2rem)]'\n };\n\n const widthClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg'\n };\n\n return (\n <div\n className={cn(\n 'min-h-screen flex items-center justify-center p-4',\n backgroundPatterns[backgroundPattern],\n className\n )}\n data-component-name=\"AuthTemplate\"\n >\n <div className={cn('w-full', widthClasses[width])}>\n <Card \n className=\"p-8 backdrop-blur-sm bg-background/95\"\n category={category}\n >\n {/* Logo */}\n {logo && (\n <div className=\"flex justify-center mb-8\">\n {logo}\n </div>\n )}\n\n {/* Header */}\n <div className=\"text-center mb-8\">\n <SectionHeader\n title={title}\n subtitle={subtitle}\n size=\"lg\"\n className=\"text-center\"\n />\n </div>\n\n {/* Form Content */}\n <div className=\"space-y-6\">\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div className=\"mt-8 pt-6 border-t border-border text-center\">\n {footer}\n </div>\n )}\n </Card>\n </div>\n </div>\n );\n};\n\n/**\n * Auth Form Field Component\n * Standardized form field for auth forms\n */\nexport interface AuthFormFieldProps {\n /** Field label */\n label: string;\n /** Field input */\n children: React.ReactNode;\n /** Error message */\n error?: string;\n /** Whether field is required */\n required?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const AuthFormField: React.FC<AuthFormFieldProps> = ({\n label,\n children,\n error,\n required = false,\n className\n}) => {\n return (\n <div className={cn('space-y-2', className)}>\n <label className={cn(\n 'text-sm font-medium text-foreground block',\n required && \"after:content-['*'] after:ml-0.5 after:text-status-error\"\n )}>\n {label}\n </label>\n \n <div className=\"relative\">\n {children}\n </div>\n \n {error && (\n <p className=\"text-xs text-status-error font-medium\">\n {error}\n </p>\n )}\n </div>\n );\n};\n\n/**\n * Auth Link Component\n * Standardized link for auth pages\n */\nexport interface AuthLinkProps {\n /** Link text */\n children: React.ReactNode;\n /** Link destination */\n href: string;\n /** Link variant */\n variant?: 'primary' | 'secondary';\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport const AuthLink: React.FC<AuthLinkProps> = ({\n children,\n href,\n variant = 'primary',\n className,\n category = 1\n}) => {\n const variantClasses = {\n primary: `text-category-${category} hover:text-category-${category}/80 font-medium`,\n secondary: 'text-muted-foreground hover:text-foreground'\n };\n\n return (\n <a\n href={href}\n className={cn(\n 'text-sm transition-colors hover:underline',\n variantClasses[variant],\n className\n )}\n >\n {children}\n </a>\n );\n};\n\n/**\n * Auth Divider Component\n * Visual divider for auth forms (e.g., \"or continue with\")\n */\nexport interface AuthDividerProps {\n /** Divider text */\n children?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const AuthDivider: React.FC<AuthDividerProps> = ({\n children = 'or',\n className\n}) => {\n return (\n <div className={cn('relative flex items-center', className)}>\n <div className=\"flex-1 border-t border-border\" />\n {children && (\n <div className=\"px-4\">\n <span className=\"text-xs text-muted-foreground uppercase tracking-wide font-medium\">\n {children}\n </span>\n </div>\n )}\n <div className=\"flex-1 border-t border-border\" />\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../atoms/utils/utils';\nimport { SectionHeader } from '../molecules/layout/SectionHeader';\nimport { DataTable, type Column } from '../atoms/composed/DataTable';\nimport { SearchInput, type SearchResult } from '../molecules/forms/SearchInput';\nimport { Pagination } from '../molecules/navigation/Pagination';\nimport { Card } from '../atoms/ui/card';\nimport { Button } from '../atoms/ui/button';\nimport { Plus, Download, Filter } from 'lucide-react';\n\nexport interface DataTemplateProps {\n /** Page title */\n title: string;\n /** Page description */\n description?: string;\n /** Search functionality */\n searchConfig?: {\n placeholder?: string;\n value?: string;\n onChange?: (value: string) => void;\n results?: SearchResult[];\n };\n /** Filter functionality */\n filterConfig?: {\n onFilter?: () => void;\n filterCount?: number;\n };\n /** Data table configuration */\n tableConfig: {\n data: Record<string, unknown>[];\n columns: Column<Record<string, unknown>>[];\n loading?: boolean;\n onRowClick?: (item: Record<string, unknown>) => void;\n };\n /** Pagination configuration */\n paginationConfig?: {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n };\n /** Action buttons */\n actions?: {\n primary?: {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n };\n secondary?: Array<{\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n }>;\n };\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Empty state content */\n emptyState?: React.ReactNode;\n}\n\nexport const DataTemplate: React.FC<DataTemplateProps> = ({\n title,\n description,\n searchConfig,\n filterConfig,\n tableConfig,\n paginationConfig,\n actions,\n className,\n category = 1,\n emptyState\n}) => {\n const hasData = tableConfig.data && tableConfig.data.length > 0;\n const showControls = searchConfig || filterConfig || actions;\n\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"flex-shrink-0 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n <SectionHeader\n title={title}\n description={description}\n size=\"lg\"\n className=\"text-left\"\n />\n </div>\n \n {actions?.primary && (\n <div className=\"ml-6 flex-shrink-0\">\n <Button\n onClick={actions.primary.onClick}\n className={cn(\n `bg-category-${category} hover:bg-category-${category}/90`,\n 'text-white'\n )}\n >\n {actions.primary.icon || <Plus className=\"w-4 h-4 mr-2\" />}\n {actions.primary.label}\n </Button>\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Controls Section */}\n {showControls && (\n <div className=\"flex-shrink-0 border-b border-border bg-muted/30\">\n <div className=\"container mx-auto px-6 py-4\">\n <div className=\"flex items-center gap-4\">\n {/* Search */}\n {searchConfig && (\n <div className=\"flex-1 max-w-md\">\n <SearchInput\n placeholder={searchConfig.placeholder}\n value={searchConfig.value}\n onChange={searchConfig.onChange}\n results={searchConfig.results}\n category={category}\n />\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n {/* Filter Button */}\n {filterConfig && (\n <Button\n variant=\"outline\"\n onClick={filterConfig.onFilter}\n className=\"relative\"\n >\n <Filter className=\"w-4 h-4 mr-2\" />\n Filters\n {filterConfig.filterCount && filterConfig.filterCount > 0 && (\n <span className={cn(\n 'absolute -top-2 -right-2 w-5 h-5 rounded-full text-xs font-bold',\n 'flex items-center justify-center text-white',\n `bg-category-${category}`\n )}>\n {filterConfig.filterCount}\n </span>\n )}\n </Button>\n )}\n\n {/* Secondary Actions */}\n {actions?.secondary?.map((action, index) => (\n <Button\n key={index}\n variant=\"outline\"\n onClick={action.onClick}\n >\n {action.icon || <Download className=\"w-4 h-4 mr-2\" />}\n {action.label}\n </Button>\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"container mx-auto px-6 py-6\">\n {hasData ? (\n <div className=\"space-y-6\">\n {/* Data Table */}\n <Card category={category}>\n <DataTable\n data={tableConfig.data}\n columns={tableConfig.columns}\n isLoading={tableConfig.loading}\n onRowClick={tableConfig.onRowClick}\n hover={true}\n />\n </Card>\n\n {/* Pagination */}\n {paginationConfig && paginationConfig.totalPages > 1 && (\n <div className=\"flex justify-center\">\n <Pagination\n currentPage={paginationConfig.currentPage}\n totalPages={paginationConfig.totalPages}\n onPageChange={paginationConfig.onPageChange}\n category={category}\n />\n </div>\n )}\n </div>\n ) : (\n <div className=\"flex items-center justify-center min-h-96\">\n {emptyState || (\n <div className=\"text-center space-y-4\">\n <div className=\"text-muted-foreground text-lg\">\n No data available\n </div>\n <p className=\"text-sm text-muted-foreground max-w-md\">\n {actions?.primary ? (\n <>Get started by creating your first {title.toLowerCase()}.</>\n ) : (\n <>There's no data to display at the moment.</>\n )}\n </p>\n {actions?.primary && (\n <Button\n onClick={actions.primary.onClick}\n className={cn(\n `bg-category-${category} hover:bg-category-${category}/90`,\n 'text-white'\n )}\n >\n {actions.primary.icon || <Plus className=\"w-4 h-4 mr-2\" />}\n {actions.primary.label}\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\n/**\n * Data Detail Template\n * Template for displaying detailed information about a single data item\n */\nexport interface DataDetailTemplateProps {\n /** Page title */\n title: string;\n /** Page subtitle */\n subtitle?: string;\n /** Back navigation */\n onBack?: () => void;\n /** Detail content */\n children: React.ReactNode;\n /** Action buttons */\n actions?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Category-based styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Sidebar content */\n sidebar?: React.ReactNode;\n}\n\nexport const DataDetailTemplate: React.FC<DataDetailTemplateProps> = ({\n title,\n subtitle,\n onBack,\n children,\n actions,\n className,\n sidebar\n}) => {\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header */}\n <div className=\"flex-shrink-0 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n {onBack && (\n <Button\n variant=\"ghost\"\n onClick={onBack}\n className=\"mb-4 -ml-3\"\n >\n ← Back\n </Button>\n )}\n <SectionHeader\n title={title}\n subtitle={subtitle}\n size=\"lg\"\n className=\"text-left\"\n />\n </div>\n \n {actions && (\n <div className=\"ml-6 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className={cn(\n 'grid gap-6',\n sidebar ? 'grid-cols-1 lg:grid-cols-3' : 'grid-cols-1'\n )}>\n {/* Main Content */}\n <div className={sidebar ? 'lg:col-span-2' : 'col-span-1'}>\n {children}\n </div>\n\n {/* Sidebar */}\n {sidebar && (\n <div className=\"lg:col-span-1\">\n {sidebar}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};","import React from 'react';\nimport { cn } from '../../atoms/utils/utils';\nimport { StatCard } from '../../atoms/composed/StatCard';\nimport { Chart } from '../../atoms/composed/Chart';\nimport { Card } from '../../atoms/ui/card';\nimport { DashboardGrid } from '../DashboardTemplate';\nimport { DataBadge } from '../../atoms/composed/DataBadge';\nimport { IconBadge } from '../../atoms/composed/IconBadge';\nimport { Button } from '../../atoms/ui/button';\nimport { getContainerHeightClass } from '../../atoms/shared/config/dashboard-sizes';\nimport { Activity, AlertTriangle, TrendingUp, Users, Settings, RefreshCw } from 'lucide-react';\n\nexport interface MetricCard {\n /** Metric title */\n title: string;\n /** Main value to display */\n value: string | number;\n /** Change percentage */\n change?: number;\n /** Change period description */\n changePeriod?: string;\n /** Metric category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Custom icon */\n icon?: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n}\n\nexport interface ChartConfig {\n /** Chart title */\n title: string;\n /** Chart type */\n type: 'line' | 'bar' | 'pie' | 'area';\n /** Chart data */\n data: Array<{ label: string; value: number; category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 }>;\n /** Chart configuration */\n config?: Record<string, unknown>;\n /** Chart category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport interface ActivityItem {\n /** Activity ID */\n id: string;\n /** Activity type */\n type: 'user' | 'system' | 'security' | 'content' | 'error';\n /** Activity message */\n message: string;\n /** Activity timestamp */\n timestamp: Date;\n /** User who performed the activity */\n user?: string;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface AlertItem {\n /** Alert ID */\n id: string;\n /** Alert severity */\n severity: 'low' | 'medium' | 'high' | 'critical';\n /** Alert title */\n title: string;\n /** Alert description */\n description: string;\n /** Alert timestamp */\n timestamp: Date;\n /** Whether alert is resolved */\n resolved?: boolean;\n /** Action to resolve alert */\n onResolve?: () => void;\n}\n\nexport interface AdminDashboardTemplateProps {\n /** Dashboard title */\n title?: string;\n /** Dashboard description */\n description?: string;\n /** Key metrics to display */\n metrics: MetricCard[];\n /** Charts configuration */\n charts?: ChartConfig[];\n /** Recent activities */\n activities?: ActivityItem[];\n /** System alerts */\n alerts?: AlertItem[];\n /** Additional actions in header */\n actions?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Whether data is loading */\n isLoading?: boolean;\n /** Refresh handler */\n onRefresh?: () => void;\n /** Last updated timestamp */\n lastUpdated?: Date;\n}\n\nexport const AdminDashboardTemplate: React.FC<AdminDashboardTemplateProps> = ({\n title = \"Admin Dashboard\",\n description = \"System overview and key metrics\",\n metrics,\n charts = [],\n activities = [],\n alerts = [],\n actions,\n className,\n isLoading = false,\n onRefresh,\n lastUpdated\n}) => {\n const unreadAlerts = alerts.filter(alert => !alert.resolved);\n const criticalAlerts = unreadAlerts.filter(alert => alert.severity === 'critical');\n\n const getActivityIcon = (type: ActivityItem['type']) => {\n switch (type) {\n case 'user': return <Users className=\"w-4 h-4\" />;\n case 'system': return <Settings className=\"w-4 h-4\" />;\n case 'security': return <AlertTriangle className=\"w-4 h-4\" />;\n case 'content': return <Activity className=\"w-4 h-4\" />;\n case 'error': return <AlertTriangle className=\"w-4 h-4\" />;\n default: return <Activity className=\"w-4 h-4\" />;\n }\n };\n\n const getActivityColor = (type: ActivityItem['type']) => {\n switch (type) {\n case 'user': return 'text-category-1';\n case 'system': return 'text-category-2';\n case 'security': return 'text-category-3';\n case 'content': return 'text-category-5';\n case 'error': return 'text-category-8';\n default: return 'text-muted-foreground';\n }\n };\n\n const getAlertSeverityCategory = (severity: AlertItem['severity']): 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 => {\n switch (severity) {\n case 'low': return 6;\n case 'medium': return 7;\n case 'high': return 3;\n case 'critical': return 8;\n default: return 2;\n }\n };\n\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"bg-gradient-to-br from-muted/50 via-muted/30 to-background border-b border-border/50\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center space-x-4\">\n <IconBadge \n variant=\"category\" \n category={1} \n size=\"lg\" \n icon={<Activity className=\"w-5 h-5\" />}\n tooltip=\"Dashboard Activity Overview\"\n />\n <div>\n <h1 className=\"text-4xl font-bold text-foreground\">{title}</h1>\n <p className=\"text-lg text-muted-foreground mt-2\">{description}</p>\n </div>\n </div>\n \n <div className=\"ml-6 flex-shrink-0\">\n {/* Action buttons */}\n <div className=\"flex items-center gap-2 mb-2\">\n {onRefresh && (\n <Button\n variant=\"outline\"\n onClick={onRefresh}\n disabled={isLoading}\n tooltip={isLoading ? \"Refreshing...\" : \"Refresh data\"}\n >\n <RefreshCw className={cn(\"w-4 h-4 mr-2\", isLoading && \"animate-spin\")} />\n Refresh\n </Button>\n )}\n {actions}\n </div>\n \n {/* Status indicators positioned under buttons */}\n <div className=\"flex items-center gap-4 justify-end\">\n {criticalAlerts.length > 0 && (\n <DataBadge \n variant=\"status\"\n status=\"error\"\n size=\"sm\"\n >\n <AlertTriangle className=\"w-3 h-3 mr-1\" />\n {criticalAlerts.length} Critical Alert{criticalAlerts.length !== 1 ? 's' : ''}\n </DataBadge>\n )}\n \n {lastUpdated && (\n <span className=\"text-sm text-muted-foreground\">\n Last updated: {lastUpdated.toLocaleTimeString()}\n </span>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8 space-y-8\">\n \n {/* Key Metrics Grid */}\n <DashboardGrid columns={4} gap=\"md\">\n {metrics.map((metric, index) => (\n <StatCard\n key={index}\n title={metric.title}\n value={metric.value}\n trend={metric.change ? { value: metric.change, label: metric.changePeriod } : undefined}\n category={metric.category || 1}\n icon={metric.icon || <TrendingUp className=\"w-5 h-5\" />}\n onClick={metric.onClick}\n className=\"cursor-pointer transition-shadow\"\n />\n ))}\n </DashboardGrid>\n\n {/* Charts and Activities Row */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n \n {/* Charts Section */}\n <div className=\"lg:col-span-2 space-y-6\">\n {charts.map((chart, index) => (\n <Card key={index} className=\"p-6 overflow-hidden\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-foreground\">\n {chart.title}\n </h3>\n </div>\n <div className={getContainerHeightClass('container-small-chart')}>\n <Chart\n title={chart.title}\n type={chart.type}\n data={chart.data}\n category={chart.category}\n height=\"small\"\n variant=\"minimal\"\n noWrapper={true}\n />\n </div>\n </Card>\n ))}\n </div>\n\n {/* Right Sidebar */}\n <div className=\"space-y-6\">\n \n {/* System Alerts */}\n {unreadAlerts.length > 0 && (\n <Card className=\"p-4\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-foreground flex items-center\">\n <AlertTriangle className=\"w-5 h-5 mr-2 text-category-8\" />\n System Alerts\n </h3>\n </div>\n <div className=\"space-y-3\">\n {unreadAlerts.slice(0, 5).map((alert) => (\n <div \n key={alert.id}\n className=\"flex items-start space-x-3 p-3 rounded-md border border-border\"\n >\n <DataBadge \n variant=\"category\" \n category={getAlertSeverityCategory(alert.severity)}\n size=\"sm\"\n className=\"mt-0.5\"\n >\n {alert.severity}\n </DataBadge>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground\">\n {alert.title}\n </p>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {alert.description}\n </p>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {alert.timestamp.toLocaleString()}\n </p>\n {alert.onResolve && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"mt-2\"\n onClick={alert.onResolve}\n >\n Resolve\n </Button>\n )}\n </div>\n </div>\n ))}\n </div>\n </Card>\n )}\n\n {/* Recent Activity */}\n <Card className=\"p-4\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-foreground flex items-center\">\n <Activity className=\"w-5 h-5 mr-2 text-category-2\" />\n Recent Activity\n </h3>\n </div>\n <div className=\"space-y-3\">\n {activities.slice(0, 8).map((activity) => (\n <div key={activity.id} className=\"flex items-start space-x-3\">\n <div className={cn(\n \"mt-1 flex-shrink-0\",\n getActivityColor(activity.type)\n )}>\n {getActivityIcon(activity.type)}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-foreground\">\n {activity.message}\n </p>\n <div className=\"flex items-center gap-2 mt-1\">\n {activity.user && (\n <span className=\"text-xs text-muted-foreground\">\n by {activity.user}\n </span>\n )}\n <span className=\"text-xs text-muted-foreground\">\n {activity.timestamp.toLocaleString()}\n </span>\n </div>\n </div>\n </div>\n ))}\n </div>\n </Card>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};","import React, { useState } from 'react';\nimport { cn } from '../../atoms/utils/utils';\nimport { IconBadge } from '../../atoms/composed';\nimport { DataTable, type Column } from '../../atoms/composed/DataTable';\nimport { DataBadge } from '../../atoms/composed/DataBadge';\nimport { Card } from '../../atoms/ui/card';\nimport { Button } from '../../atoms/ui/button';\nimport { Modal } from '../../atoms/composed/Modal';\nimport { FormField } from '../../atoms/composed/FormField';\nimport { EmptyState } from '../../atoms/composed/EmptyState';\nimport { \n Plus, \n Download, \n Filter, \n Edit, \n Trash2, \n Eye, \n Upload,\n RefreshCw\n} from 'lucide-react';\n\nexport interface ResourceSchema {\n /** Field definitions for the resource */\n fields: ResourceField[];\n /** Primary key field name */\n primaryKey: string;\n /** Display name for single resource */\n displayName: string;\n /** Display name for multiple resources */\n displayNamePlural: string;\n}\n\nexport interface ResourceField {\n /** Field name/key */\n name: string;\n /** Display label */\n label: string;\n /** Field type */\n type: 'text' | 'email' | 'number' | 'boolean' | 'date' | 'select' | 'textarea' | 'file';\n /** Whether field is required */\n required?: boolean;\n /** Field validation rules */\n validation?: Record<string, unknown>;\n /** Options for select fields */\n options?: Array<{ value: string; label: string }>;\n /** Whether field is searchable */\n searchable?: boolean;\n /** Whether field should be shown in table */\n showInTable?: boolean;\n /** Column width for table display */\n width?: number;\n /** Custom render function for table cells */\n render?: (value: unknown, item: Record<string, unknown>) => React.ReactNode;\n}\n\nexport interface CRUDPermissions {\n /** Can view resources */\n view: boolean;\n /** Can create new resources */\n create: boolean;\n /** Can edit existing resources */\n edit: boolean;\n /** Can delete resources */\n delete: boolean;\n /** Can export data */\n export: boolean;\n /** Can import data */\n import: boolean;\n /** Can bulk edit */\n bulkEdit: boolean;\n}\n\nexport interface CRUDActions {\n /** Create new resource */\n onCreate?: (data: Record<string, unknown>) => Promise<void>;\n /** Update existing resource */\n onUpdate?: (id: string, data: Record<string, unknown>) => Promise<void>;\n /** Delete resource */\n onDelete?: (id: string) => Promise<void>;\n /** Bulk delete resources */\n onBulkDelete?: (ids: string[]) => Promise<void>;\n /** Export data */\n onExport?: (format: 'csv' | 'xlsx' | 'json') => Promise<void>;\n /** Import data */\n onImport?: (file: File) => Promise<void>;\n /** Refresh data */\n onRefresh?: () => Promise<void>;\n}\n\nexport interface AdminCRUDTemplateProps {\n /** Resource schema definition */\n schema: ResourceSchema;\n /** Current data */\n data: Record<string, unknown>[];\n /** User permissions */\n permissions: CRUDPermissions;\n /** CRUD action handlers */\n actions: CRUDActions;\n /** Whether data is loading */\n isLoading?: boolean;\n /** Filter configuration */\n filterConfig?: {\n activeFilters?: Array<{ key: string; label: string; value: string }>;\n onFilter?: () => void;\n onClearFilters?: () => void;\n };\n /** Additional custom actions */\n customActions?: Array<{\n label: string;\n icon?: React.ReactNode;\n onClick: () => void;\n variant?: 'default' | 'outline' | 'destructive';\n }>;\n /** Additional CSS classes */\n className?: string;\n /** Category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Custom empty state */\n emptyState?: React.ReactNode;\n}\n\nexport const AdminCRUDTemplate: React.FC<AdminCRUDTemplateProps> = ({\n schema,\n data,\n permissions,\n actions,\n isLoading = false,\n filterConfig,\n customActions = [],\n className,\n category = 1,\n emptyState\n}) => {\n const [selectedItems, setSelectedItems] = useState<string[]>([]);\n const [showCreateModal, setShowCreateModal] = useState(false);\n const [showEditModal, setShowEditModal] = useState(false);\n const [editingItem, setEditingItem] = useState<Record<string, unknown> | null>(null);\n const [formData, setFormData] = useState<Record<string, unknown>>({});\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n\n const hasData = data && data.length > 0;\n const hasSelection = selectedItems.length > 0;\n const activeFilterCount = filterConfig?.activeFilters?.length || 0;\n\n // Generate table columns from schema\n const columns: Column<Record<string, unknown>>[] = [\n // Selection column\n {\n key: 'select',\n header: (\n <input\n type=\"checkbox\"\n checked={selectedItems.length > 0 && selectedItems.length === data.length}\n onChange={(e) => {\n if (e.target.checked) {\n setSelectedItems(data.map(item => String(item[schema.primaryKey])));\n } else {\n setSelectedItems([]);\n }\n }}\n className=\"rounded border-input\"\n />\n ),\n cell: (item) => (\n <input\n type=\"checkbox\"\n checked={selectedItems.includes(String(item[schema.primaryKey]))}\n onChange={(e) => {\n const id = String(item[schema.primaryKey]);\n if (e.target.checked) {\n setSelectedItems(prev => [...prev, id]);\n } else {\n setSelectedItems(prev => prev.filter(existingId => existingId !== id));\n }\n }}\n className=\"rounded border-input\"\n />\n ),\n sortable: false,\n width: '50px',\n },\n // Data columns\n ...schema.fields\n .filter(field => field.showInTable !== false)\n .map(field => {\n // Determine column type for automatic badge rendering\n let columnType: 'status' | 'category' | 'default' = 'default';\n if (field.type === 'boolean' || field.name.toLowerCase().includes('status')) {\n columnType = 'status';\n } else if (field.name.toLowerCase().includes('category')) {\n columnType = 'category';\n }\n\n return {\n key: field.name,\n header: field.label,\n type: columnType,\n cell: field.render ? (item: Record<string, unknown>) => field.render!(item[field.name], item) : undefined,\n sortable: true,\n width: field.width ? `${field.width}px` : undefined,\n };\n }),\n // Actions column\n {\n key: 'actions',\n header: 'Actions',\n cell: (item) => (\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleView(item);\n }}\n tooltip=\"View details\"\n >\n <Eye className=\"w-4 h-4\" />\n </Button>\n {permissions.edit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleEdit(item);\n }}\n tooltip=\"Edit\"\n >\n <Edit className=\"w-4 h-4\" />\n </Button>\n )}\n {permissions.delete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(String(item[schema.primaryKey]));\n }}\n tooltip=\"Delete\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </Button>\n )}\n </div>\n ),\n sortable: false,\n width: '120px',\n },\n ];\n\n const handleCreate = () => {\n setFormData({});\n setShowCreateModal(true);\n };\n\n const handleEdit = (item: Record<string, unknown>) => {\n setEditingItem(item);\n setFormData(item);\n setShowEditModal(true);\n };\n\n const handleView = (item: Record<string, unknown>) => {\n // Navigate to detail view - this would be handled by the parent component\n console.log('View item:', item);\n };\n\n const handleDelete = (id: string) => {\n setDeletingId(id);\n setShowDeleteConfirm(true);\n };\n\n const handleBulkDelete = () => {\n if (actions.onBulkDelete) {\n actions.onBulkDelete(selectedItems);\n setSelectedItems([]);\n }\n };\n\n const confirmDelete = async () => {\n if (deletingId && actions.onDelete) {\n await actions.onDelete(deletingId);\n setShowDeleteConfirm(false);\n setDeletingId(null);\n }\n };\n\n const handleSubmit = async (isEdit: boolean) => {\n try {\n if (isEdit && editingItem && actions.onUpdate) {\n await actions.onUpdate(String(editingItem[schema.primaryKey]), formData);\n setShowEditModal(false);\n } else if (!isEdit && actions.onCreate) {\n await actions.onCreate(formData);\n setShowCreateModal(false);\n }\n setFormData({});\n setEditingItem(null);\n } catch (error) {\n console.error('Form submission error:', error);\n }\n };\n\n const renderFormField = (field: ResourceField) => {\n const value = formData[field.name];\n \n return (\n <FormField\n key={field.name}\n label={field.label}\n required={field.required}\n error={undefined} // Add validation error handling here\n >\n {field.type === 'select' ? (\n <select\n value={String(value || '')}\n onChange={(e) => setFormData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className=\"w-full px-3 py-2 border border-input rounded-md\"\n >\n <option value=\"\">Select {field.label}</option>\n {field.options?.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n ) : field.type === 'textarea' ? (\n <textarea\n value={String(value || '')}\n onChange={(e) => setFormData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className=\"w-full px-3 py-2 border border-input rounded-md\"\n rows={3}\n />\n ) : field.type === 'boolean' ? (\n <input\n type=\"checkbox\"\n checked={Boolean(value)}\n onChange={(e) => setFormData(prev => ({ ...prev, [field.name]: e.target.checked }))}\n className=\"rounded border-input\"\n />\n ) : (\n <input\n type={field.type === 'email' ? 'email' : field.type === 'number' ? 'number' : field.type === 'date' ? 'date' : 'text'}\n value={String(value || '')}\n onChange={(e) => setFormData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className=\"w-full px-3 py-2 border border-input rounded-md\"\n />\n )}\n </FormField>\n );\n };\n\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"bg-gradient-to-br from-muted/50 via-muted/30 to-background border-b border-border/50\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-4\">\n <IconBadge \n variant=\"category\" \n category={category} \n size=\"lg\" \n icon={<Plus className=\"w-5 h-5\" />}\n />\n <div>\n <h1 className=\"text-4xl font-bold text-foreground\">{schema.displayNamePlural}</h1>\n <p className=\"text-lg text-muted-foreground mt-2\">\n Manage {schema.displayNamePlural.toLowerCase()} with comprehensive CRUD operations\n </p>\n </div>\n </div>\n \n <div className=\"flex items-center gap-2\">\n {actions.onRefresh && (\n <Button\n variant=\"outline\"\n onClick={actions.onRefresh}\n disabled={isLoading}\n >\n <RefreshCw className={cn(\"w-4 h-4 mr-2\", isLoading && \"animate-spin\")} />\n Refresh\n </Button>\n )}\n \n {permissions.create && (\n <Button\n onClick={handleCreate}\n variant=\"default\"\n >\n <Plus className=\"w-4 h-4 mr-2\" />\n Create {schema.displayName}\n </Button>\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Controls Section */}\n <div className=\"flex-shrink-0 border-b border-border bg-muted/30\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-4\">\n <div className=\"flex items-center justify-between\">\n {/* Left side - Filters */}\n <div className=\"flex items-center gap-4\">\n {filterConfig && (\n <Button\n variant=\"outline\"\n onClick={filterConfig.onFilter}\n className=\"relative\"\n >\n <Filter className=\"w-4 h-4 mr-2\" />\n Filters\n {activeFilterCount > 0 && (\n <span className=\"absolute -top-2 -right-2 min-w-5 h-5 rounded-full text-xs bg-destructive text-destructive-foreground flex items-center justify-center\">\n {activeFilterCount}\n </span>\n )}\n </Button>\n )}\n\n {/* Active Filters */}\n {filterConfig?.activeFilters && filterConfig.activeFilters.length > 0 && (\n <div className=\"flex items-center gap-2\">\n {filterConfig.activeFilters.map((filter, index) => (\n <DataBadge key={index} variant=\"category\" category={category} size=\"sm\">\n {filter.label}: {filter.value}\n </DataBadge>\n ))}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={filterConfig.onClearFilters}\n >\n Clear all\n </Button>\n </div>\n )}\n </div>\n\n {/* Right side - Actions */}\n <div className=\"flex items-center gap-2\">\n {/* Bulk actions */}\n {hasSelection && (\n <div className=\"flex items-center gap-2 mr-4\">\n <span className=\"text-sm text-muted-foreground\">\n {selectedItems.length} selected\n </span>\n {permissions.delete && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleBulkDelete}\n >\n <Trash2 className=\"w-4 h-4 mr-2\" />\n Delete\n </Button>\n )}\n </div>\n )}\n\n {/* Export/Import */}\n {permissions.export && (\n <Button\n variant=\"outline\"\n onClick={() => actions.onExport?.('csv')}\n >\n <Download className=\"w-4 h-4 mr-2\" />\n Export\n </Button>\n )}\n\n {permissions.import && (\n <Button\n variant=\"outline\"\n onClick={() => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.csv,.xlsx,.json';\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file && actions.onImport) {\n actions.onImport(file);\n }\n };\n input.click();\n }}\n >\n <Upload className=\"w-4 h-4 mr-2\" />\n Import\n </Button>\n )}\n\n {/* Custom Actions */}\n {customActions.map((action, index) => (\n <Button\n key={index}\n variant={action.variant || 'outline'}\n onClick={action.onClick}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8\">\n {hasData ? (\n <Card className=\"p-6\" category={category}>\n <DataTable\n data={data}\n columns={columns}\n searchPlaceholder={`Search ${schema.displayNamePlural.toLowerCase()}...`}\n isLoading={isLoading}\n hover={true}\n showSearch={true}\n showPagination={true}\n pageSize={10}\n onRowClick={permissions.view ? handleView : undefined}\n />\n </Card>\n ) : (\n <div className=\"flex items-center justify-center min-h-96\">\n {emptyState || (\n <EmptyState\n title={`No ${schema.displayNamePlural.toLowerCase()} found`}\n description={`Get started by creating your first ${schema.displayName.toLowerCase()}.`}\n action={\n permissions.create ? {\n label: `Create ${schema.displayName}`,\n onClick: handleCreate\n } : undefined\n }\n />\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Create Modal */}\n <Modal\n isOpen={showCreateModal}\n onClose={() => setShowCreateModal(false)}\n title={`Create ${schema.displayName}`}\n size=\"lg\"\n >\n <div className=\"space-y-4\">\n {schema.fields.map(renderFormField)}\n \n <div className=\"flex justify-end gap-2 pt-4\">\n <Button\n variant=\"outline\"\n onClick={() => setShowCreateModal(false)}\n >\n Cancel\n </Button>\n <Button\n onClick={() => handleSubmit(false)}\n variant=\"default\"\n >\n Create\n </Button>\n </div>\n </div>\n </Modal>\n\n {/* Edit Modal */}\n <Modal\n isOpen={showEditModal}\n onClose={() => setShowEditModal(false)}\n title={`Edit ${schema.displayName}`}\n size=\"lg\"\n >\n <div className=\"space-y-4\">\n {schema.fields.map(renderFormField)}\n \n <div className=\"flex justify-end gap-2 pt-4\">\n <Button\n variant=\"outline\"\n onClick={() => setShowEditModal(false)}\n >\n Cancel\n </Button>\n <Button\n onClick={() => handleSubmit(true)}\n variant=\"default\"\n >\n Update\n </Button>\n </div>\n </div>\n </Modal>\n\n {/* Delete Confirmation Modal */}\n <Modal\n isOpen={showDeleteConfirm}\n onClose={() => setShowDeleteConfirm(false)}\n title=\"Confirm Delete\"\n size=\"sm\"\n >\n <div className=\"space-y-4\">\n <p>Are you sure you want to delete this {schema.displayName.toLowerCase()}? This action cannot be undone.</p>\n \n <div className=\"flex justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => setShowDeleteConfirm(false)}\n >\n Cancel\n </Button>\n <Button\n variant=\"destructive\"\n onClick={confirmDelete}\n >\n Delete\n </Button>\n </div>\n </div>\n </Modal>\n </div>\n );\n};","import React, { useState } from 'react';\nimport { cn } from '../../atoms/utils/utils';\nimport { SectionHeader } from '../../molecules/layout/SectionHeader';\nimport { Card } from '../../atoms/ui/card';\nimport { Button } from '../../atoms/ui/button';\nimport { DataBadge } from '../../atoms/composed/DataBadge';\nimport { UserAvatar } from '../../atoms/composed/UserAvatar';\nimport { DataTable, type Column } from '../../atoms/composed/DataTable';\nimport { \n ArrowLeft, \n Edit, \n Copy, \n ExternalLink,\n History,\n Activity,\n FileText,\n Save,\n X\n} from 'lucide-react';\n\nexport interface TabConfig {\n /** Tab ID */\n id: string;\n /** Tab label */\n label: string;\n /** Tab icon */\n icon?: React.ReactNode;\n /** Tab content */\n content: React.ReactNode;\n /** Whether tab is disabled */\n disabled?: boolean;\n /** Badge text for tab */\n badge?: string | number;\n}\n\nexport interface ActionConfig {\n /** Action ID */\n id: string;\n /** Action label */\n label: string;\n /** Action icon */\n icon?: React.ReactNode;\n /** Action variant */\n variant?: 'default' | 'outline' | 'destructive' | 'secondary';\n /** Action handler */\n onClick: () => void;\n /** Whether action is disabled */\n disabled?: boolean;\n /** Action permission required */\n permission?: string;\n}\n\nexport interface FieldSection {\n /** Section title */\n title: string;\n /** Section description */\n description?: string;\n /** Section fields */\n fields: DetailField[];\n /** Section category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Whether section is collapsible */\n collapsible?: boolean;\n /** Whether section is initially collapsed */\n defaultCollapsed?: boolean;\n}\n\nexport interface DetailField {\n /** Field key */\n key: string;\n /** Field label */\n label: string;\n /** Field type for rendering */\n type?: 'text' | 'email' | 'phone' | 'url' | 'date' | 'datetime' | 'boolean' | 'badge' | 'avatar' | 'json' | 'custom';\n /** Custom render function */\n render?: (value: unknown, data: Record<string, unknown>) => React.ReactNode;\n /** Whether field is editable inline */\n editable?: boolean;\n /** Field validation for editing */\n validation?: Record<string, unknown>;\n /** Copy to clipboard button */\n copyable?: boolean;\n}\n\nexport interface RelatedData {\n /** Related data title */\n title: string;\n /** Related data description */\n description?: string;\n /** Related data items */\n data: Record<string, unknown>[];\n /** Columns for related data table */\n columns: Column<Record<string, unknown>>[];\n /** Actions for related data */\n actions?: ActionConfig[];\n /** Whether to show pagination */\n showPagination?: boolean;\n /** Category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n}\n\nexport interface AuditEntry {\n /** Entry ID */\n id: string;\n /** Action performed */\n action: string;\n /** User who performed action */\n user: string;\n /** Timestamp */\n timestamp: Date;\n /** Fields changed */\n changes?: Array<{\n field: string;\n oldValue?: unknown;\n newValue?: unknown;\n }>;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface AdminDetailTemplateProps {\n /** Resource title */\n title: string;\n /** Resource subtitle */\n subtitle?: string;\n /** Resource type */\n resourceType: string;\n /** Main resource data */\n data: Record<string, unknown>;\n /** Field sections to display */\n sections: FieldSection[];\n /** Tab configuration */\n tabs?: TabConfig[];\n /** Available actions */\n actions?: ActionConfig[];\n /** Related data sections */\n relatedData?: RelatedData[];\n /** Audit trail */\n auditTrail?: AuditEntry[];\n /** Back navigation handler */\n onBack?: () => void;\n /** Data update handler */\n onUpdate?: (field: string, value: unknown) => Promise<void>;\n /** Whether data is loading */\n isLoading?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Category for styling */\n category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Custom sidebar content */\n sidebar?: React.ReactNode;\n /** Whether to show audit trail */\n showAuditTrail?: boolean;\n}\n\nexport const AdminDetailTemplate: React.FC<AdminDetailTemplateProps> = ({\n title,\n subtitle,\n resourceType,\n data,\n sections,\n tabs = [],\n actions = [],\n relatedData = [],\n auditTrail = [],\n onBack,\n onUpdate,\n isLoading = false,\n className,\n category = 1,\n sidebar,\n showAuditTrail = true\n}) => {\n const [activeTab, setActiveTab] = useState(tabs[0]?.id || 'overview');\n const [editingField, setEditingField] = useState<string | null>(null);\n const [editValue, setEditValue] = useState<unknown>('');\n\n const handleEdit = (field: DetailField, currentValue: unknown) => {\n setEditingField(field.key);\n setEditValue(currentValue);\n };\n\n const handleSaveEdit = async () => {\n if (editingField && onUpdate) {\n try {\n await onUpdate(editingField, editValue);\n setEditingField(null);\n setEditValue('');\n } catch (error) {\n console.error('Update failed:', error);\n }\n }\n };\n\n const handleCancelEdit = () => {\n setEditingField(null);\n setEditValue('');\n };\n\n const copyToClipboard = (value: string) => {\n navigator.clipboard.writeText(value);\n // You could show a toast notification here\n };\n\n const renderFieldValue = (field: DetailField, value: unknown) => {\n // If currently editing this field\n if (editingField === field.key) {\n return (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={String(editValue)}\n onChange={(e) => setEditValue(e.target.value)}\n className=\"flex-1 px-2 py-1 text-sm border border-input rounded\"\n autoFocus\n />\n <Button size=\"sm\" onClick={handleSaveEdit}>\n <Save className=\"w-3 h-3\" />\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={handleCancelEdit}>\n <X className=\"w-3 h-3\" />\n </Button>\n </div>\n );\n }\n\n // Custom render function\n if (field.render) {\n return field.render(value, data);\n }\n\n // Default rendering based on type\n const stringValue = String(value || '');\n let displayValue: React.ReactNode;\n \n switch (field.type) {\n case 'email':\n displayValue = value ? (\n <a href={`mailto:${stringValue}`} className=\"text-category-1 hover:underline\">\n {stringValue}\n </a>\n ) : '';\n break;\n case 'phone':\n displayValue = value ? (\n <a href={`tel:${stringValue}`} className=\"text-category-2 hover:underline\">\n {stringValue}\n </a>\n ) : '';\n break;\n case 'url':\n displayValue = value ? (\n <a href={stringValue} target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-category-3 hover:underline inline-flex items-center\">\n {stringValue} <ExternalLink className=\"w-3 h-3 ml-1\" />\n </a>\n ) : '';\n break;\n case 'date':\n displayValue = value ? new Date(stringValue).toLocaleDateString() : '';\n break;\n case 'datetime':\n displayValue = value ? new Date(stringValue).toLocaleString() : '';\n break;\n case 'boolean':\n displayValue = (\n <DataBadge \n variant=\"status\" \n status={value ? 'success' : 'neutral'}\n size=\"sm\"\n >\n {value ? 'Yes' : 'No'}\n </DataBadge>\n );\n break;\n case 'badge':\n displayValue = <DataBadge variant=\"category\" category={1} size=\"sm\">{stringValue}</DataBadge>;\n break;\n case 'avatar':\n displayValue = <UserAvatar />;\n break;\n case 'json':\n displayValue = (\n <pre className=\"text-xs bg-muted p-2 rounded-md overflow-auto max-w-md\">\n {JSON.stringify(value, null, 2)}\n </pre>\n );\n break;\n default:\n displayValue = stringValue;\n break;\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <span>{displayValue as React.ReactNode}</span>\n {field.copyable && value != null && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => copyToClipboard(stringValue)}\n className=\"h-6 w-6 p-0\"\n >\n <Copy className=\"w-3 h-3\" />\n </Button>\n )}\n {field.editable && onUpdate && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => handleEdit(field, value)}\n className=\"h-6 w-6 p-0\"\n >\n <Edit className=\"w-3 h-3\" />\n </Button>\n )}\n </div>\n );\n };\n\n const renderSection = (section: FieldSection) => (\n <Card key={section.title} className=\"p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-foreground\">{section.title}</h3>\n {section.description && (\n <p className=\"text-sm text-muted-foreground mt-1\">{section.description}</p>\n )}\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {section.fields.map((field) => (\n <div key={field.key} className=\"space-y-1\">\n <label className=\"text-sm font-medium text-muted-foreground\">\n {field.label}\n </label>\n <div className=\"text-sm text-foreground\">\n {renderFieldValue(field, data[field.key])}\n </div>\n </div>\n ))}\n </div>\n </Card>\n );\n\n const renderAuditTrail = () => (\n <Card className=\"p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold flex items-center\">\n <History className=\"w-5 h-5 mr-2\" />\n Audit Trail\n </h3>\n </div>\n <div className=\"space-y-4\">\n {auditTrail.map((entry) => (\n <div key={entry.id} className=\"flex items-start space-x-3 pb-4 border-b border-border last:border-b-0\">\n <div className=\"w-8 h-8 rounded-full bg-muted flex items-center justify-center flex-shrink-0\">\n <Activity className=\"w-4 h-4 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-medium text-foreground\">\n {entry.action}\n </p>\n <span className=\"text-xs text-muted-foreground\">\n {entry.timestamp.toLocaleString()}\n </span>\n </div>\n <p className=\"text-xs text-muted-foreground mt-1\">\n by {entry.user}\n </p>\n {entry.changes && entry.changes.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n {entry.changes.map((change, index) => (\n <div key={index} className=\"text-xs bg-muted p-2 rounded-md\">\n <span className=\"font-medium\">{change.field}:</span>{' '}\n <span className=\"text-category-8\">{String(change.oldValue || 'null')}</span>{' '}\n →{' '}\n <span className=\"text-category-2\">{String(change.newValue || 'null')}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n </Card>\n );\n\n const renderRelatedData = (related: RelatedData) => (\n <Card key={related.title} className=\"p-6\">\n <div className=\"mb-4 flex items-center justify-between\">\n <div>\n <h3 className=\"text-lg font-semibold\">{related.title}</h3>\n {related.description && (\n <p className=\"text-sm text-muted-foreground mt-1\">{related.description}</p>\n )}\n </div>\n {related.actions && related.actions.length > 0 && (\n <div className=\"flex gap-2\">\n {related.actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant || 'outline'}\n size=\"sm\"\n onClick={action.onClick}\n disabled={action.disabled}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n <DataTable\n data={related.data}\n columns={related.columns}\n isLoading={isLoading}\n hover\n />\n </Card>\n );\n\n // Build tabs\n const allTabs = [\n {\n id: 'overview',\n label: 'Overview',\n icon: <FileText className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-6\">\n {sections.map(renderSection)}\n </div>\n ),\n },\n ...tabs,\n ...(relatedData.length > 0 ? [{\n id: 'related',\n label: 'Related Data',\n icon: <Activity className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-6\">\n {relatedData.map(renderRelatedData)}\n </div>\n ),\n }] : []),\n ...(showAuditTrail && auditTrail.length > 0 ? [{\n id: 'audit',\n label: 'Audit Trail',\n icon: <History className=\"w-4 h-4\" />,\n badge: auditTrail.length,\n content: renderAuditTrail(),\n }] : []),\n ];\n\n return (\n <div className={cn('flex flex-col min-h-0 flex-1', className)}>\n {/* Header Section */}\n <div className=\"flex-shrink-0 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n {onBack && (\n <Button\n variant=\"ghost\"\n onClick={onBack}\n className=\"mb-4 -ml-3\"\n >\n <ArrowLeft className=\"w-4 h-4 mr-2\" />\n Back to {resourceType}\n </Button>\n )}\n <SectionHeader\n title={title}\n subtitle={subtitle}\n size=\"lg\"\n className=\"text-left\"\n />\n </div>\n \n {actions.length > 0 && (\n <div className=\"ml-6 flex-shrink-0 flex items-center gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant || 'outline'}\n onClick={action.onClick}\n disabled={action.disabled}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"flex-1 min-h-0 overflow-auto\">\n <div className=\"container mx-auto px-6 py-6\">\n <div className={cn(\n 'grid gap-6',\n sidebar ? 'grid-cols-1 lg:grid-cols-4' : 'grid-cols-1'\n )}>\n \n {/* Main Content */}\n <div className={sidebar ? 'lg:col-span-3' : 'col-span-1'}>\n {allTabs.length > 1 ? (\n <div className=\"space-y-6\">\n {/* Tab Navigation */}\n <div className=\"border-b border-border\">\n <nav className=\"-mb-px flex space-x-8\">\n {allTabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'py-2 px-1 border-b-2 font-medium text-sm whitespace-nowrap',\n activeTab === tab.id\n ? `border-category-${category} text-category-${category}`\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border'\n )}\n >\n <div className=\"flex items-center gap-2\">\n {tab.icon}\n {tab.label}\n {tab.badge && (\n <span className={cn(\n 'ml-2 inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium',\n `bg-category-${category}/20 text-category-${category}`\n )}>\n {tab.badge}\n </span>\n )}\n </div>\n </button>\n ))}\n </nav>\n </div>\n\n {/* Tab Content */}\n <div>\n {allTabs.find(tab => tab.id === activeTab)?.content}\n </div>\n </div>\n ) : (\n allTabs[0]?.content\n )}\n </div>\n\n {/* Sidebar */}\n {sidebar && (\n <div className=\"lg:col-span-1\">\n {sidebar}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};","import React from 'react'\nimport type { ReactNode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\nimport { BrowserRouter, Routes, Route } from 'react-router-dom'\nimport { AuthProvider } from '../features/auth'\nimport { SidebarProvider } from '../molecules/layout'\nimport { AppLayout } from '../molecules/layout'\nimport { DashboardTemplate } from './DashboardTemplate'\nimport type { AuthConfig } from '../atoms/types'\n\n// App configuration interface\nexport interface AppConfig {\n title: string\n description?: string\n version?: string\n enableAuth?: boolean\n enableQuery?: boolean\n enableTheming?: boolean\n enableRouting?: boolean\n apiUrl?: string\n apiTimeout?: number\n theme?: string\n darkMode?: boolean\n auth?: AuthConfig\n customProviders?: React.ComponentType<{ children: ReactNode }>[]\n}\n\n// App instance interface\nexport interface AppInstance {\n render: () => ReactNode\n addRoutes: (path: string, component: ReactNode) => void\n mount: (elementId?: string) => void\n}\n\n// Main app factory function\nexport function createReactApp(config: AppConfig | string): AppInstance {\n // Handle simple string config\n const appConfig: AppConfig = typeof config === 'string' \n ? { title: config }\n : config\n\n // Set defaults\n const {\n title,\n description = `${title} Application`,\n version = '1.0.0',\n enableAuth = true,\n enableQuery = true,\n enableRouting = true,\n auth,\n customProviders = []\n } = appConfig\n\n // Initialize query client\n const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n refetchOnWindowFocus: false,\n staleTime: 5 * 60 * 1000, // 5 minutes\n },\n },\n })\n\n // Store routes\n const routes: Array<{ path: string; component: ReactNode }> = []\n\n // Default home page\n const DefaultHome = () => (\n <DashboardTemplate title={title} description={description}>\n <div className=\"flex flex-col items-center justify-center min-h-[400px] text-center\">\n <h1 className=\"text-4xl font-bold text-gray-900 mb-4\">🌿 {title}</h1>\n <p className=\"text-lg text-gray-600 mb-6\">{description}</p>\n <div className=\"space-y-2 text-sm text-gray-500\">\n <p>✅ Template integration successful</p>\n <p>🔧 Version: {version}</p>\n <p>🚀 Ready for development</p>\n </div>\n </div>\n </DashboardTemplate>\n )\n\n // Build provider tree\n const createProviderTree = (children: ReactNode): ReactNode => {\n let tree = children\n\n // Wrap with custom providers (in reverse order)\n customProviders.reverse().forEach((Provider) => {\n tree = <Provider key={Provider.name}>{tree}</Provider>\n })\n\n // Wrap with layout providers\n if (enableRouting) {\n tree = (\n <SidebarProvider>\n {tree}\n </SidebarProvider>\n )\n }\n\n // Wrap with auth provider\n if (enableAuth) {\n tree = <AuthProvider config={auth}>{tree}</AuthProvider>\n }\n\n // Wrap with query provider\n if (enableQuery) {\n tree = (\n <QueryClientProvider client={queryClient}>\n {tree}\n {import.meta.env.DEV && <ReactQueryDevtools initialIsOpen={false} />}\n </QueryClientProvider>\n )\n }\n\n // Wrap with router\n if (enableRouting) {\n tree = <BrowserRouter>{tree}</BrowserRouter>\n }\n\n return tree\n }\n\n // Create app instance\n const appInstance: AppInstance = {\n addRoutes(path: string, component: ReactNode) {\n routes.push({ path, component })\n },\n\n render() {\n const AppContent = () => (\n <Routes>\n <Route path=\"/\" element={<AppLayout />}>\n <Route index element={<DefaultHome />} />\n {routes.map(({ path, component }, index) => (\n <Route key={index} path={path} element={component} />\n ))}\n </Route>\n </Routes>\n )\n\n return createProviderTree(<AppContent />)\n },\n\n mount(elementId = 'root') {\n const element = document.getElementById(elementId)\n if (!element) {\n throw new Error(`Element with id \"${elementId}\" not found`)\n }\n\n const root = createRoot(element)\n root.render(\n <React.StrictMode>\n {this.render()}\n </React.StrictMode>\n )\n }\n }\n\n return appInstance\n}\n\n// Convenience function for simple apps\nexport function createSimpleApp(title: string): AppInstance {\n return createReactApp({ title })\n}\n\n","import React, { useState } from 'react';\nimport { Card } from '../../atoms/ui/card';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../../atoms/ui/Tabs';\nimport { DataBadge, StatCard, DetailedCard, DataTable, EmptyState, ColorSwatch, IconBadge, Accordion, ToastContainer, FileUpload, DateTimePicker, Chart } from '../../atoms/composed';\nimport { Badge } from '../../atoms/ui/Badge';\nimport { Switch } from '../../atoms/ui/Switch';\nimport { ShowcaseSection } from '../../molecules/layout';\nimport { Pagination, NavMenu } from '../../molecules/navigation';\nimport { FormGroup, SearchInput } from '../../molecules/forms';\nimport { Alert, ProgressBar, FormField, Breadcrumb } from '../../atoms/composed';\nimport { Input } from '../../atoms/ui/input';\nimport { Label } from '../../atoms/ui/label';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../atoms/ui/table';\nimport { Spinner } from '../../atoms/ui/spinner';\nimport { Skeleton } from '../../atoms/ui/skeleton';\nimport { Button } from '../../atoms/ui/button';\nimport { \n Database, \n TrendingUp, \n Users, \n Activity,\n CheckCircle,\n AlertTriangle,\n XCircle,\n Info,\n Clock,\n Layers,\n Palette,\n Grid3X3,\n Home,\n Settings,\n FileText,\n ChevronRight\n} from 'lucide-react';\n\ninterface SampleDataItem extends Record<string, unknown> {\n id: number;\n name: string;\n status: 'success' | 'warning' | 'error';\n category: string;\n runs: number;\n}\n\nexport const ComponentShowcasePage: React.FC = () => {\n const [activeSection, setActiveSection] = useState('badges');\n const [showCode, setShowCode] = useState(false);\n const [toasts, setToasts] = useState<Array<{ id: string; status: 'success' | 'warning' | 'error' | 'info'; title: string; message: string }>>([]);\n const [selectedDate, setSelectedDate] = useState<Date | undefined>(undefined);\n const [dateRange, setDateRange] = useState<{ start: Date | undefined; end: Date | undefined }>({ start: undefined, end: undefined });\n\n // Sample data for DataTable\n const sampleData: SampleDataItem[] = [\n { id: 1, name: 'Customer Analysis', status: 'success', category: 'Analytics', runs: 24 },\n { id: 2, name: 'Revenue Model', status: 'warning', category: 'Finance', runs: 18 },\n { id: 3, name: 'User Behavior', status: 'error', category: 'Product', runs: 31 },\n { id: 4, name: 'Sales Forecast', status: 'success', category: 'Sales', runs: 12 }\n ];\n\n const tableColumns = [\n { key: 'name', header: 'Model Name' },\n { key: 'status', header: 'Status', type: 'status' as const },\n { key: 'category', header: 'Category', type: 'category' as const },\n { key: 'runs', header: 'Runs' }\n ];\n\n return (\n <div className=\"min-h-screen bg-background\">\n {/* Hero Section */}\n <div className=\"bg-gradient-to-br from-category-1/5 via-category-2/5 to-category-3/5 border-b border-border/50\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-4\">\n <IconBadge \n variant=\"category\" \n category={1} \n size=\"lg\" \n icon={<Grid3X3 className=\"w-6 h-6\" />}\n />\n <div>\n <h1 className=\"text-4xl font-bold text-foreground\">Component Showcase</h1>\n <p className=\"text-lg text-muted-foreground mt-2\">\n Explore our comprehensive design system and component library built for data analytics interfaces\n </p>\n </div>\n </div>\n \n <div className=\"flex items-center space-x-3\">\n <div className=\"flex items-center gap-3 bg-card/80 backdrop-blur-sm border border-border/50 rounded px-3 py-2\">\n <Layers className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">Show Code</span>\n <Switch\n checked={showCode}\n onCheckedChange={setShowCode}\n />\n </div>\n </div>\n </div>\n \n {/* Quick Stats */}\n <div className=\"mt-8 grid grid-cols-1 md:grid-cols-4 gap-4\">\n <StatCard\n title=\"Components\"\n value=\"20+\"\n subtitle=\"Design system components\"\n category={1}\n icon={<Database className=\"w-4 h-4\" />}\n />\n <StatCard\n title=\"Colors\"\n value=\"20+\"\n subtitle=\"System colors & variants\"\n category={2}\n icon={<Palette className=\"w-4 h-4\" />}\n />\n <StatCard\n title=\"Variants\"\n value=\"50+\"\n subtitle=\"Component variations\"\n category={3}\n icon={<CheckCircle className=\"w-4 h-4\" />}\n />\n <StatCard\n title=\"Interactive\"\n value=\"100%\"\n subtitle=\"Fully interactive components\"\n category={4}\n icon={<Activity className=\"w-4 h-4\" />}\n />\n </div>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8\">\n <div className=\"space-y-8\">\n\n {/* Navigation */}\n <Tabs value={activeSection} onValueChange={setActiveSection} className=\"w-full\">\n {\n <TabsList className=\"grid w-full grid-cols-10 lg:w-fit lg:mx-auto mb-8\">\n <TabsTrigger value=\"badges\" category={1}>Badges</TabsTrigger>\n <TabsTrigger value=\"cards\" category={2}>Cards</TabsTrigger>\n <TabsTrigger value=\"tables\" category={3}>Data</TabsTrigger>\n <TabsTrigger value=\"forms\" category={4}>Forms</TabsTrigger>\n <TabsTrigger value=\"navigation\" category={5}>Navigation</TabsTrigger>\n <TabsTrigger value=\"feedback\" category={6}>Feedback</TabsTrigger>\n <TabsTrigger value=\"states\" category={7}>States</TabsTrigger>\n <TabsTrigger value=\"palettes\" category={8}>Palettes</TabsTrigger>\n <TabsTrigger value=\"typography\" category={1}>Typography</TabsTrigger>\n <TabsTrigger value=\"debug\" category={2}>Debug</TabsTrigger>\n </TabsList>\n }\n\n {/* Badges Section */}\n <TabsContent value=\"badges\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Badge Components</h2>\n <p className=\"text-muted-foreground\">\n From base UI badges to semantic data badges with design tokens and theming.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Badge Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Badge Component\"\n description=\"Foundation UI badge with default variants and sizes\"\n badge={{ text: \"UI Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Variants</h4>\n <div className=\"flex flex-wrap gap-2\">\n <Badge variant=\"default\">Default</Badge>\n <Badge variant=\"secondary\">Secondary</Badge>\n <Badge variant=\"destructive\">Destructive</Badge>\n <Badge variant=\"outline\">Outline</Badge>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Sizes</h4>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge size=\"sm\">Small</Badge>\n <Badge size=\"md\">Medium</Badge>\n <Badge size=\"lg\">Large</Badge>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-3 p-3 bg-muted/50 rounded text-sm font-mono\">\n <code>{`<Badge variant=\"default\">Default</Badge>\n<Badge variant=\"secondary\">Secondary</Badge>`}</code>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DataBadge - Category */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"DataBadge with Category Theming\"\n description=\"Extended badge component using design tokens for data categorization\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Category Colors (Design Tokens)</h4>\n <div className=\"flex flex-wrap gap-2\">\n {[1, 2, 3, 4, 5, 6, 7, 8].map(category => (\n <DataBadge key={category} variant=\"category\" category={category as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8}>\n Category {category}\n </DataBadge>\n ))}\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Sizes & Interactive States</h4>\n <div className=\"flex flex-wrap items-center gap-2\">\n <DataBadge variant=\"category\" category={1} size=\"sm\">Small</DataBadge>\n <DataBadge variant=\"category\" category={2} size=\"md\">Medium</DataBadge>\n <DataBadge variant=\"category\" category={3} size=\"lg\">Large</DataBadge>\n <DataBadge variant=\"category\" category={4} interactive onClick={() => alert('Interactive badge clicked!')}>\n Interactive (Click me)\n </DataBadge>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-3 p-3 bg-muted/50 rounded text-sm font-mono\">\n <code>{`<DataBadge variant=\"category\" category={1}>\n Category 1\n</DataBadge>`}</code>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DataBadge - Status */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"DataBadge with Status Theming\"\n description=\"Semantic status indicators using design system colors\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Status Variants (Semantic Colors)</h4>\n <div className=\"flex flex-wrap gap-2\">\n <DataBadge variant=\"status\" status=\"success\">\n <CheckCircle className=\"w-3 h-3 mr-1\" />\n Success\n </DataBadge>\n <DataBadge variant=\"status\" status=\"warning\">\n <AlertTriangle className=\"w-3 h-3 mr-1\" />\n Warning\n </DataBadge>\n <DataBadge variant=\"status\" status=\"error\">\n <XCircle className=\"w-3 h-3 mr-1\" />\n Error\n </DataBadge>\n <DataBadge variant=\"status\" status=\"info\">\n <Info className=\"w-3 h-3 mr-1\" />\n Info\n </DataBadge>\n <DataBadge variant=\"status\" status=\"neutral\">\n <Clock className=\"w-3 h-3 mr-1\" />\n Neutral\n </DataBadge>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<DataBadge variant=\"status\" status=\"success\">Success</DataBadge>\n<DataBadge variant=\"status\" status=\"warning\">Warning</DataBadge>\n<DataBadge variant=\"status\" status=\"error\">Error</DataBadge>\n<DataBadge variant=\"status\" status=\"info\">Info</DataBadge>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Token Usage Example */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Design Token Usage\"\n description=\"How components leverage design tokens for consistent theming\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">CSS Variables Applied</h4>\n <div className=\"space-y-2 text-xs font-mono\">\n <div className=\"p-2 bg-category-1/10 text-category-1 rounded border border-category-1/20\">\n --category-1: {getComputedStyle(document.documentElement).getPropertyValue('--category-1') || '217 91% 60%'}\n </div>\n <div className=\"p-2 bg-status-success/10 text-status-success rounded border border-status-success/20\">\n --status-success: {getComputedStyle(document.documentElement).getPropertyValue('--status-success') || '142 76% 36%'}\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Component Classes</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>.badge-category-1</code> uses <code>var(--category-1)</code>\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>.status-success</code> uses <code>var(--status-success)</code>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Cards Section */}\n <TabsContent value=\"cards\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Card Components</h2>\n <p className=\"text-muted-foreground\">\n From base cards to specialized data visualization cards with metrics and analytics.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Card Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Card Component\"\n description=\"Foundation card with optional category theming\"\n badge={{ text: \"UI Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-3 gap-4\">\n <Card className=\"p-4\">\n <h4 className=\"font-medium mb-2\">Basic Card</h4>\n <p className=\"text-sm text-muted-foreground\">Standard card with default styling</p>\n </Card>\n \n <Card className=\"p-4\" category={2}>\n <h4 className=\"font-medium mb-2\">Category Card</h4>\n <p className=\"text-sm text-muted-foreground\">Card with category color accent</p>\n </Card>\n \n <Card className=\"p-4\" category={4}>\n <h4 className=\"font-medium mb-2\">Themed Card</h4>\n <p className=\"text-sm text-muted-foreground\">Using design token theming</p>\n </Card>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>\n {`<Card category={2}>Card with category theming</Card>`}\n </code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* StatCard Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"StatCard Component\"\n description=\"Specialized card for displaying key metrics with trends\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 lg:grid-cols-3 gap-4\">\n <StatCard\n title=\"Total Models\"\n value=\"1,234\"\n subtitle=\"Active dbt models\"\n category={1}\n icon={<Database className=\"w-5 h-5\" />}\n trend={{ value: 12.5, label: \"vs last month\" }}\n />\n <StatCard\n title=\"Success Rate\"\n value=\"99.2%\"\n subtitle=\"Test pass rate\"\n category={2}\n icon={<CheckCircle className=\"w-5 h-5\" />}\n trend={{ value: 2.1, label: \"vs last week\" }}\n />\n <StatCard\n title=\"Active Users\"\n value=\"567\"\n subtitle=\"Monthly active users\"\n category={3}\n icon={<Users className=\"w-5 h-5\" />}\n trend={{ value: -3.2, label: \"vs last month\" }}\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<StatCard\n title=\"Total Models\"\n value=\"1,234\"\n subtitle=\"Active dbt models\"\n category={1}\n icon={<Database />}\n trend={{ value: 12.5, label: \"vs last month\" }}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DetailedCard Component */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"DetailedCard Component\"\n description=\"Rich information card with multiple metrics and interactive elements\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 3 }}\n >\n <DetailedCard\n title=\"Customer Analytics Model\"\n subtitle=\"Production Model\"\n description=\"Advanced analytics model for customer behavior tracking and segmentation.\"\n category={1}\n icon={<Database className=\"w-5 h-5\" />}\n primaryMetric={{\n label: \"Success Rate\",\n value: \"98.7%\",\n trend: { value: 5.2, label: \"vs last week\" }\n }}\n secondaryMetrics={[\n { label: \"Daily Runs\", value: \"24\", status: \"success\" },\n { label: \"Avg Runtime\", value: \"2.4min\", status: \"info\" },\n { label: \"Data Quality\", value: \"95%\", status: \"warning\" },\n { label: \"Test Coverage\", value: \"87%\", status: \"success\" }\n ]}\n tags={[\n { label: \"Production\", status: \"success\" },\n { label: \"Analytics\", category: 1 },\n { label: \"Customer Data\", category: 3 }\n ]}\n onClick={() => alert('Model details clicked!')}\n />\n </ShowcaseSection>\n </Card>\n\n {/* Card Design Tokens */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Card Theming & Composition\"\n description=\"How cards leverage design tokens and compose with other components\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Component Hierarchy</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded flex items-center gap-2\">\n <span className=\"font-mono\">Card</span>\n <span className=\"text-muted-foreground\">→ Base container</span>\n </div>\n <div className=\"p-2 bg-muted rounded flex items-center gap-2 ml-4\">\n <span className=\"font-mono\">StatCard</span>\n <span className=\"text-muted-foreground\">→ Metrics display</span>\n </div>\n <div className=\"p-2 bg-muted rounded flex items-center gap-2 ml-4\">\n <span className=\"font-mono\">DetailedCard</span>\n <span className=\"text-muted-foreground\">→ Rich content</span>\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Composed Elements</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n Uses <code>DataBadge</code> for tags\n </div>\n <div className=\"p-2 bg-muted rounded\">\n Uses <code>IconBadge</code> for icons\n </div>\n <div className=\"p-2 bg-muted rounded\">\n Category theming via CSS variables\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Tables Section */}\n <TabsContent value=\"tables\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Data Visualization</h2>\n <p className=\"text-muted-foreground\">\n Tables and charts for displaying and visualizing data with sorting, filtering, and interactive features.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Table Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Table Component\"\n description=\"Foundation table components with semantic HTML structure\"\n badge={{ text: \"UI Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Category</TableHead>\n <TableHead className=\"text-right\">Value</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell>Customer Analytics</TableCell>\n <TableCell>Active</TableCell>\n <TableCell>Analytics</TableCell>\n <TableCell className=\"text-right\">1,234</TableCell>\n </TableRow>\n <TableRow>\n <TableCell>Revenue Model</TableCell>\n <TableCell>Pending</TableCell>\n <TableCell>Finance</TableCell>\n <TableCell className=\"text-right\">567</TableCell>\n </TableRow>\n </TableBody>\n </Table>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell>Data</TableCell>\n </TableRow>\n </TableBody>\n</Table>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DataTable Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"DataTable Component\"\n description=\"Feature-rich table with search, sorting, hover states, and click handlers\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 2 }}\n >\n <DataTable\n data={sampleData}\n columns={tableColumns}\n searchPlaceholder=\"Search models...\"\n onRowClick={(item) => alert(`Clicked: ${item.name}`)}\n hover={true}\n />\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<DataTable\n data={sampleData}\n columns={[\n { key: 'name', header: 'Model Name' },\n { key: 'status', header: 'Status', type: 'status' },\n { key: 'category', header: 'Category', type: 'category' }\n ]}\n searchPlaceholder=\"Search models...\"\n onRowClick={(item) => alert(item.name)}\n hover={true}\n/>`}</code>\n </pre>\n </div>\n )}\n </ShowcaseSection>\n </Card>\n\n {/* Table Features */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Table Features & Composition\"\n description=\"How DataTable composes UI elements and leverages the design system\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Integrated Components</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>Input</code> for search functionality\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>DataBadge</code> for status/category cells\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>Button</code> for actions\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Features</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n ✓ Client-side search/filter\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Hover row highlighting\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Click handlers\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Type-aware cell rendering\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Chart Component */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Chart Component\"\n description=\"Data visualization charts with multiple types, interactive features, and accessibility support\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n {/* Bar Chart */}\n <Chart\n title=\"Monthly Revenue\"\n subtitle=\"Revenue by month\"\n type=\"bar\"\n category={1}\n height=\"medium\"\n data={[\n { label: 'Jan', value: 4200 },\n { label: 'Feb', value: 5300 },\n { label: 'Mar', value: 6100 },\n { label: 'Apr', value: 5900 },\n { label: 'May', value: 7200 },\n { label: 'Jun', value: 8100 }\n ]}\n showValues\n showTrend\n trend={{ value: 12.5, label: \"vs last period\" }}\n onClick={() => alert('Chart clicked!')}\n />\n \n {/* Line Chart */}\n <Chart\n title=\"User Growth\"\n subtitle=\"Active users over time\"\n type=\"line\"\n category={2}\n height=\"medium\"\n data={[\n { label: 'Week 1', value: 120 },\n { label: 'Week 2', value: 145 },\n { label: 'Week 3', value: 139 },\n { label: 'Week 4', value: 167 },\n { label: 'Week 5', value: 185 },\n { label: 'Week 6', value: 201 }\n ]}\n showTrend\n trend={{ value: 8.3, label: \"growth\" }}\n />\n </div>\n \n <div className=\"grid md:grid-cols-2 gap-6\">\n {/* Area Chart */}\n <Chart\n title=\"System Load\"\n subtitle=\"CPU usage over time\"\n type=\"area\"\n category={4}\n data={[\n { label: '00:00', value: 45 },\n { label: '04:00', value: 32 },\n { label: '08:00', value: 67 },\n { label: '12:00', value: 78 },\n { label: '16:00', value: 82 },\n { label: '20:00', value: 54 }\n ]}\n height=\"compact\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Chart Variants</h4>\n <div className=\"grid md:grid-cols-3 gap-4\">\n <Chart\n title=\"Minimal Chart\"\n type=\"bar\"\n variant=\"minimal\"\n category={5}\n data={[\n { label: 'A', value: 20 },\n { label: 'B', value: 35 },\n { label: 'C', value: 45 },\n { label: 'D', value: 30 }\n ]}\n height=\"sidebar\"\n />\n \n <Chart\n title=\"Loading State\"\n type=\"line\"\n category={6}\n data={[]}\n isLoading\n height=\"sidebar\"\n />\n \n <Chart\n title=\"Custom Colors\"\n type=\"bar\"\n category={7}\n data={[\n { label: 'Q1', value: 100 },\n { label: 'Q2', value: 150 },\n { label: 'Q3', value: 120 },\n { label: 'Q4', value: 180 }\n ]}\n colorOverrides={['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4']}\n height=\"sidebar\"\n />\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Chart\n title=\"Monthly Revenue\"\n type=\"bar\"\n category={1}\n data={chartData}\n showValues\n showTrend\n trend={{ value: 12.5, label: \"vs last period\" }}\n onClick={() => handleChartClick()}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n </div>\n </TabsContent>\n\n {/* Forms Section */}\n <TabsContent value=\"forms\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Form Components</h2>\n <p className=\"text-muted-foreground\">\n From base form inputs to complete form patterns with validation and organization.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Form Elements */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Form Elements\"\n description=\"Foundation form components with labels and inputs\"\n badge={{ text: \"UI Components\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4 max-w-md\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"basic-input\">Basic Label</Label>\n <Input id=\"basic-input\" placeholder=\"Enter text...\" />\n </div>\n \n <div className=\"space-y-2\">\n <Label htmlFor=\"email-input\">Email Address</Label>\n <Input id=\"email-input\" type=\"email\" placeholder=\"email@example.com\" />\n </div>\n \n <div className=\"space-y-2\">\n <Label htmlFor=\"password-input\">Password</Label>\n <Input id=\"password-input\" type=\"password\" placeholder=\"Enter password\" />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Label htmlFor=\"input\">Label</Label>\n<Input id=\"input\" placeholder=\"Enter text...\" />`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* FormField Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"FormField Component\"\n description=\"Enhanced form field with label, description, and error states\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-6 max-w-md\">\n <FormField\n label=\"Username\"\n description=\"This will be your display name\"\n required\n htmlFor=\"username\"\n >\n <Input id=\"username\" placeholder=\"johndoe\" />\n </FormField>\n \n <FormField\n label=\"Email\"\n description=\"We'll never share your email\"\n error=\"Please enter a valid email address\"\n required\n htmlFor=\"email\"\n >\n <Input id=\"email\" type=\"email\" placeholder=\"email@example.com\" />\n </FormField>\n \n <FormField\n label=\"Bio\"\n layout=\"horizontal\"\n htmlFor=\"bio\"\n >\n <Input id=\"bio\" placeholder=\"Tell us about yourself\" />\n </FormField>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<FormField\n label=\"Email\"\n description=\"We'll never share your email\"\n error={errors.email}\n required\n>\n <Input type=\"email\" />\n</FormField>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* FormGroup Component */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"FormGroup Component\"\n description=\"Organize related form fields into logical sections\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-6\">\n <FormGroup\n title=\"Personal Information\"\n description=\"Basic details about your account\"\n variant=\"card\"\n category={6}\n >\n <FormField label=\"First Name\" required htmlFor=\"firstName\">\n <Input id=\"firstName\" placeholder=\"John\" />\n </FormField>\n <FormField label=\"Last Name\" required htmlFor=\"lastName\">\n <Input id=\"lastName\" placeholder=\"Doe\" />\n </FormField>\n <FormField label=\"Email\" required htmlFor=\"groupEmail\">\n <Input id=\"groupEmail\" type=\"email\" placeholder=\"john@example.com\" />\n </FormField>\n </FormGroup>\n \n <FormGroup\n title=\"Preferences\"\n description=\"Customize your experience\"\n variant=\"section\"\n >\n <FormField label=\"Language\" htmlFor=\"language\">\n <Input id=\"language\" placeholder=\"English\" />\n </FormField>\n <FormField label=\"Timezone\" htmlFor=\"timezone\">\n <Input id=\"timezone\" placeholder=\"UTC-5\" />\n </FormField>\n </FormGroup>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* SearchInput Component */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"SearchInput Component\"\n description=\"Advanced search with autocomplete and keyboard navigation\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-6\">\n <div className=\"max-w-md\">\n <h4 className=\"text-sm font-medium mb-3\">With Results</h4>\n <SearchInput\n placeholder=\"Search users...\"\n results={[\n { id: '1', label: 'John Doe', description: 'john@example.com', category: 'User', icon: <Users className=\"w-4 h-4\" /> },\n { id: '2', label: 'Jane Smith', description: 'jane@example.com', category: 'Admin', icon: <Users className=\"w-4 h-4\" /> },\n { id: '3', label: 'Analytics Dashboard', description: 'View analytics', category: 'Page', icon: <Database className=\"w-4 h-4\" /> }\n ]}\n category={7}\n onSelect={(result) => alert(`Selected: ${result.label}`)}\n />\n </div>\n \n <div className=\"max-w-md\">\n <h4 className=\"text-sm font-medium mb-3\">Simple Search</h4>\n <SearchInput\n placeholder=\"Search anything...\"\n clearable={false}\n category={2}\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<SearchInput\n placeholder=\"Search users...\"\n results={searchResults}\n category={7}\n onSelect={(result) => handleSelect(result)}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* FileUpload Component */}\n <Card className=\"p-6\" category={5}>\n <ShowcaseSection\n title=\"FileUpload Component\"\n description=\"Advanced file upload with drag-and-drop, previews, validation, and progress tracking\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 5 }}\n >\n <div className=\"space-y-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Default File Upload</h4>\n <FileUpload\n accept=\"image/*,.pdf,.doc,.docx\"\n multiple\n maxSize={5 * 1024 * 1024}\n maxFiles={5}\n onChange={(files) => console.log('Files:', files)}\n onUpload={async (files) => {\n console.log('Uploading:', files);\n // Simulate upload\n await new Promise(resolve => setTimeout(resolve, 2000));\n }}\n />\n </div>\n \n <div className=\"grid md:grid-cols-2 gap-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Compact Variant</h4>\n <FileUpload\n variant=\"compact\"\n accept=\".csv,.xlsx\"\n maxSize={1 * 1024 * 1024}\n uploadText=\"Upload spreadsheet\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Large Variant</h4>\n <FileUpload\n variant=\"large\"\n accept=\"image/*\"\n showPreview\n uploadText=\"Drop images here\"\n dragText=\"Release to upload\"\n />\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<FileUpload\n accept=\"image/*,.pdf\"\n multiple\n maxSize={5 * 1024 * 1024}\n showPreview\n onUpload={async (files) => {\n await uploadFiles(files);\n }}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* DateTimePicker Component */}\n <Card className=\"p-6\" category={6}>\n <ShowcaseSection\n title=\"DateTimePicker Component\"\n description=\"Flexible date and time selection with multiple modes, formats, and range support\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 6 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Date Picker</h4>\n <DateTimePicker\n mode=\"date\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n placeholder=\"Select date\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Time Picker</h4>\n <DateTimePicker\n mode=\"time\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n placeholder=\"Select time\"\n timeFormat=\"12h\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">DateTime Picker</h4>\n <DateTimePicker\n mode=\"datetime\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n placeholder=\"Select date and time\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Date Range</h4>\n <DateTimePicker\n mode=\"date\"\n isRange\n rangeValue={{ start: dateRange.start || null, end: dateRange.end || null }}\n onRangeChange={(range) => setDateRange({ start: range.start || undefined, end: range.end || undefined })}\n placeholder=\"Select date range\"\n />\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Inline Calendar</h4>\n <div className=\"flex justify-center\">\n <DateTimePicker\n mode=\"date\"\n variant=\"inline\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n />\n </div>\n </div>\n \n <div className=\"grid md:grid-cols-3 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Compact Variant</h4>\n <DateTimePicker\n variant=\"compact\"\n mode=\"date\"\n value={selectedDate}\n onChange={(date) => setSelectedDate(date || undefined)}\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">With Min/Max</h4>\n <DateTimePicker\n mode=\"date\"\n minDate={new Date()}\n maxDate={new Date(Date.now() + 30 * 24 * 60 * 60 * 1000)}\n placeholder=\"Next 30 days\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Error State</h4>\n <DateTimePicker\n mode=\"date\"\n error\n placeholder=\"Invalid date\"\n />\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<DateTimePicker\n mode=\"datetime\"\n value={selectedDate}\n onChange={setSelectedDate}\n minDate={new Date()}\n timeFormat=\"12h\"\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Form Architecture */}\n <Card className=\"p-6\" category={7}>\n <ShowcaseSection\n title=\"Form Composition & Validation\"\n description=\"How form components compose and integrate\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 7 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Component Layers</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>Input/Label</code> → Base elements\n </div>\n <div className=\"p-2 bg-muted rounded ml-4\">\n <code>FormField</code> → Field wrapper\n </div>\n <div className=\"p-2 bg-muted rounded ml-8\">\n <code>FormGroup</code> → Section organizer\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Features</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n ✓ Built-in validation states\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Required field indicators\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Horizontal/vertical layouts\n </div>\n <div className=\"p-2 bg-muted rounded\">\n ✓ Category theming support\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n </div>\n </TabsContent>\n\n {/* Navigation Section */}\n <TabsContent value=\"navigation\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Navigation Components</h2>\n <p className=\"text-muted-foreground\">\n Navigation patterns for breadcrumbs, menus, and pagination.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Breadcrumb Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Breadcrumb Component\"\n description=\"Navigation breadcrumbs with home icon and separators\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <Breadcrumb\n items={[\n { label: 'Dashboard', href: '/dashboard' },\n { label: 'Projects', href: '/projects' },\n { label: 'Analytics', active: true }\n ]}\n category={2}\n />\n \n <Breadcrumb\n items={[\n { label: 'Settings', href: '/settings' },\n { label: 'Users', href: '/users' },\n { label: 'Edit Profile', active: true }\n ]}\n showHome={false}\n separator={<ChevronRight className=\"w-3 h-3\" />}\n category={5}\n />\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Breadcrumb\n items={[\n { label: 'Dashboard', href: '/dashboard' },\n { label: 'Projects', href: '/projects' },\n { label: 'Analytics', active: true }\n ]}\n category={2}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Pagination Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"Pagination Component\"\n description=\"Page navigation with first/last controls and ellipsis\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Full Pagination</h4>\n <Pagination\n currentPage={5}\n totalPages={12}\n onPageChange={(page) => console.log('Page:', page)}\n category={3}\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Simple Pagination</h4>\n <Pagination\n currentPage={1}\n totalPages={3}\n onPageChange={(page) => console.log('Page:', page)}\n showFirstLast={false}\n category={6}\n size=\"sm\"\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Pagination\n currentPage={5}\n totalPages={12}\n onPageChange={(page) => setPage(page)}\n category={3}\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* NavMenu Component */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"NavMenu Component\"\n description=\"Navigation menus with horizontal and vertical orientations\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-8\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Horizontal Menu</h4>\n <NavMenu\n items={[\n { id: 'home', label: 'Home', href: '/home', icon: <Home className=\"w-4 h-4\" />, category: 1 },\n { id: 'projects', label: 'Projects', href: '/projects', icon: <FileText className=\"w-4 h-4\" />, category: 2 },\n { id: 'settings', label: 'Settings', href: '/settings', icon: <Settings className=\"w-4 h-4\" />, category: 3 }\n ]}\n orientation=\"horizontal\"\n defaultCategory={4}\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Vertical Menu</h4>\n <div className=\"max-w-64\">\n <NavMenu\n items={[\n { id: 'dashboard', label: 'Dashboard', href: '/dashboard', icon: <Database className=\"w-4 h-4\" />, category: 1 },\n { id: 'analytics', label: 'Analytics', href: '/analytics', icon: <TrendingUp className=\"w-4 h-4\" />, category: 2 },\n { id: 'users', label: 'Users', href: '/users', icon: <Users className=\"w-4 h-4\" />, category: 3 }\n ]}\n orientation=\"vertical\"\n defaultCategory={4}\n />\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Accordion Component */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Accordion Component\"\n description=\"Collapsible content sections with smooth animations and keyboard navigation\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-8\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Default Accordion</h4>\n <Accordion\n items={[\n {\n id: 'section1',\n title: 'Getting Started',\n icon: <Home className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-2\">\n <p>Welcome to our platform! This section covers the basics of getting started.</p>\n <ul className=\"list-disc list-inside space-y-1 text-sm\">\n <li>Create your account</li>\n <li>Set up your profile</li>\n <li>Explore the dashboard</li>\n </ul>\n </div>\n )\n },\n {\n id: 'section2',\n title: 'API Documentation',\n icon: <FileText className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-2\">\n <p>Complete API reference and integration guides.</p>\n <div className=\"grid grid-cols-2 gap-2 text-sm\">\n <div className=\"p-2 bg-muted/30 rounded\">Authentication</div>\n <div className=\"p-2 bg-muted/30 rounded\">Endpoints</div>\n <div className=\"p-2 bg-muted/30 rounded\">Examples</div>\n <div className=\"p-2 bg-muted/30 rounded\">SDKs</div>\n </div>\n </div>\n )\n },\n {\n id: 'section3',\n title: 'Advanced Features',\n icon: <Settings className=\"w-4 h-4\" />,\n content: (\n <div className=\"space-y-2\">\n <p>Explore advanced functionality and customization options.</p>\n <p className=\"text-sm\">Advanced features include custom integrations, webhooks, and enterprise-level analytics.</p>\n </div>\n )\n }\n ]}\n category={4}\n defaultOpen=\"section1\"\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Multiple Open (Bordered Variant)</h4>\n <Accordion\n items={[\n {\n id: 'faq1',\n title: 'How do I reset my password?',\n content: 'You can reset your password by clicking the \"Forgot Password\" link on the login page.'\n },\n {\n id: 'faq2',\n title: 'What are the subscription plans?',\n content: (\n <div className=\"space-y-2\">\n <p>We offer three subscription tiers:</p>\n <div className=\"space-y-1 text-sm\">\n <div>• <strong>Starter</strong>: $9/month - Basic features</div>\n <div>• <strong>Pro</strong>: $29/month - Advanced features</div>\n <div>• <strong>Enterprise</strong>: Custom pricing - Full suite</div>\n </div>\n </div>\n )\n },\n {\n id: 'faq3',\n title: 'How can I contact support?',\n content: 'You can reach our support team via email at support@example.com or through the in-app chat.'\n }\n ]}\n variant=\"bordered\"\n allowMultiple={true}\n category={5}\n defaultOpen={['faq1', 'faq2']}\n />\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Filled Variant with Categories</h4>\n <Accordion\n items={[\n {\n id: 'analytics',\n title: 'Analytics & Reporting',\n icon: <TrendingUp className=\"w-4 h-4\" />,\n content: 'Comprehensive analytics dashboard with real-time metrics, custom reports, and data export capabilities.'\n },\n {\n id: 'users',\n title: 'User Management',\n icon: <Users className=\"w-4 h-4\" />,\n content: 'Manage user accounts, permissions, roles, and access controls across your organization.'\n },\n {\n id: 'database',\n title: 'Data Integration',\n icon: <Database className=\"w-4 h-4\" />,\n content: 'Connect multiple data sources, set up automated pipelines, and manage data transformations.'\n }\n ]}\n variant=\"filled\"\n category={6}\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Accordion\n items={[\n {\n id: 'section1',\n title: 'Getting Started',\n icon: <Home className=\"w-4 h-4\" />,\n content: 'Welcome to our platform!'\n },\n {\n id: 'section2',\n title: 'API Documentation',\n content: 'Complete API reference...'\n }\n ]}\n category={4}\n defaultOpen=\"section1\"\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Feedback Section */}\n <TabsContent value=\"feedback\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Feedback Components</h2>\n <p className=\"text-muted-foreground\">\n User feedback patterns including alerts, progress indicators, and notifications.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Alert Component */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Alert Component\"\n description=\"Status-based alerts with dismissible options\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <Alert status=\"success\" title=\"Success!\" dismissible>\n Your changes have been saved successfully.\n </Alert>\n \n <Alert status=\"warning\" title=\"Warning\" variant=\"outlined\">\n Please review your settings before continuing.\n </Alert>\n \n <Alert status=\"error\" dismissible>\n There was an error processing your request. Please try again.\n </Alert>\n \n <Alert status=\"info\" variant=\"filled\" hideIcon>\n This is an informational message with no icon.\n </Alert>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Alert status=\"success\" title=\"Success!\" dismissible>\n Your changes have been saved successfully.\n</Alert>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* ProgressBar Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"ProgressBar Component\"\n description=\"Progress indicators with status colors and animations\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-6\">\n <ProgressBar\n value={75}\n status=\"success\"\n showLabel\n label=\"Upload Progress\"\n />\n \n <ProgressBar\n value={45}\n category={3}\n showLabel\n size=\"lg\"\n />\n \n <ProgressBar\n value={90}\n status=\"warning\"\n variant=\"striped\"\n size=\"sm\"\n />\n \n <ProgressBar\n value={60}\n category={6}\n variant=\"animated\"\n showLabel\n />\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<ProgressBar\n value={75}\n status=\"success\"\n showLabel\n label=\"Upload Progress\"\n/>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Toast Component */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Toast Component\"\n description=\"Non-intrusive notifications with auto-dismiss, progress indicators, and multiple positions\"\n badge={{ text: \"Molecule Component\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Toast Types</h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n const id = Date.now().toString();\n setToasts([...toasts, { id, status: 'success', title: 'Success!', message: 'Model saved successfully.' }]);\n setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);\n }}\n >\n Success Toast\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n const id = Date.now().toString();\n setToasts([...toasts, { id, status: 'warning', title: 'Warning', message: 'Model runtime exceeded threshold.' }]);\n setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);\n }}\n >\n Warning Toast\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n const id = Date.now().toString();\n setToasts([...toasts, { id, status: 'error', title: 'Error', message: 'Failed to connect to database.' }]);\n setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);\n }}\n >\n Error Toast\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n const id = Date.now().toString();\n setToasts([...toasts, { id, status: 'info', title: 'Info', message: 'New update available.' }]);\n setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);\n }}\n >\n Info Toast\n </Button>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Features</h4>\n <ul className=\"text-sm text-muted-foreground space-y-1\">\n <li>• Auto-dismiss with configurable duration</li>\n <li>• Progress indicator for timed dismissal</li>\n <li>• Multiple positioning options</li>\n <li>• Dismissible with close button</li>\n <li>• Status-based theming</li>\n </ul>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Toast\n status=\"success\"\n title=\"Success!\"\n duration={5000}\n showProgress\n onDismiss={() => handleDismiss()}\n>\n Model saved successfully.\n</Toast>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Feedback Composition */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Feedback System Architecture\"\n description=\"How feedback components integrate with the design system\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Status Theming</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-status-success/10 text-status-success rounded\">\n Success states use <code>--status-success</code>\n </div>\n <div className=\"p-2 bg-status-warning/10 text-status-warning rounded\">\n Warning states use <code>--status-warning</code>\n </div>\n <div className=\"p-2 bg-status-error/10 text-status-error rounded\">\n Error states use <code>--status-error</code>\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Toast Notifications</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <p className=\"font-medium mb-1\">Toast component features:</p>\n <ul className=\"list-disc list-inside space-y-1 text-muted-foreground\">\n <li>Auto-dismiss timer</li>\n <li>Progress indicator</li>\n <li>Stacking behavior</li>\n <li>Status-based styling</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n </div>\n </TabsContent>\n\n {/* States Section */}\n <TabsContent value=\"states\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">State Components</h2>\n <p className=\"text-muted-foreground\">\n Loading states, empty states, and error states for better user experience.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Loading States */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Loading States\"\n description=\"Base loading indicators and skeleton components\"\n badge={{ text: \"UI Components\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-4\">\n <Spinner size=\"sm\" />\n <Spinner size=\"md\" />\n <Spinner size=\"lg\" />\n <span className=\"text-sm text-muted-foreground\">Spinner component</span>\n </div>\n \n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n <span className=\"text-sm text-muted-foreground\">Skeleton loader</span>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<Spinner size=\"md\" />\n<Skeleton className=\"h-4 w-full\" />`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* EmptyState Component */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"EmptyState Component\"\n description=\"Informative empty states with actions for different scenarios\"\n badge={{ text: \"Business Component\", variant: \"category\", category: 2 }}\n >\n <div className=\"grid md:grid-cols-2 gap-6\">\n <EmptyState\n variant=\"no-data\"\n title=\"No models found\"\n description=\"Get started by creating your first dbt model.\"\n action={{\n label: \"Create Model\",\n onClick: () => alert('Create model!')\n }}\n />\n \n <EmptyState\n variant=\"no-results\"\n title=\"No search results\"\n description=\"Try adjusting your search terms.\"\n action={{\n label: \"Clear Filters\",\n onClick: () => alert('Clear filters!')\n }}\n secondaryAction={{\n label: \"Browse All\",\n onClick: () => alert('Browse all!')\n }}\n />\n \n <EmptyState\n variant=\"error\"\n title=\"Connection failed\"\n description=\"Unable to connect to the database.\"\n action={{\n label: \"Retry\",\n onClick: () => alert('Retry!')\n }}\n />\n \n <EmptyState\n variant=\"loading\"\n title=\"Loading data\"\n description=\"Please wait while we fetch your data.\"\n />\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<EmptyState\n variant=\"no-data\"\n title=\"No models found\"\n description=\"Get started by creating your first model.\"\n action={{\n label: \"Create Model\",\n onClick: () => createModel()\n }}\n/>`}</code>\n </pre>\n </div>\n )}\n </ShowcaseSection>\n </Card>\n\n {/* State Architecture */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"State Management Architecture\"\n description=\"How state components compose and provide user feedback\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">State Types</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>loading</code> → Data fetching\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>no-data</code> → Empty initial state\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>no-results</code> → Search/filter empty\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>error</code> → Operation failed\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Components Used</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n Uses <code>Button</code> for actions\n </div>\n <div className=\"p-2 bg-muted rounded\">\n Uses <code>Card</code> for container\n </div>\n <div className=\"p-2 bg-muted rounded\">\n SVG illustrations for visual interest\n </div>\n <div className=\"p-2 bg-muted rounded\">\n Consistent typography hierarchy\n </div>\n </div>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n\n {/* Typography Section */}\n <TabsContent value=\"typography\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Typography System</h2>\n <p className=\"text-muted-foreground\">\n From base typography to data-focused patterns optimized for analytics interfaces.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Base Typography */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Base Typography\"\n description=\"Foundation type scale for headings, body text, and UI elements\"\n badge={{ text: \"UI Typography\", variant: \"category\", category: 1 }}\n >\n <div className=\"space-y-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Headings</h4>\n <div className=\"space-y-3\">\n <h1 className=\"text-4xl font-bold\">Heading 1 - 36px Bold</h1>\n <h2 className=\"text-3xl font-semibold\">Heading 2 - 30px Semibold</h2>\n <h3 className=\"text-2xl font-semibold\">Heading 3 - 24px Semibold</h3>\n <h4 className=\"text-xl font-medium\">Heading 4 - 20px Medium</h4>\n <h5 className=\"text-lg font-medium\">Heading 5 - 18px Medium</h5>\n <h6 className=\"text-base font-medium\">Heading 6 - 16px Medium</h6>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Body Text</h4>\n <div className=\"space-y-3\">\n <p className=\"text-lg\">Large body text for emphasis - 18px regular</p>\n <p className=\"text-base\">Base body text for content - 16px regular</p>\n <p className=\"text-sm\">Small body text for secondary content - 14px regular</p>\n <p className=\"text-xs\">Extra small text for metadata - 12px regular</p>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>\n {`<h1 className=\"text-4xl font-bold\">Heading</h1>\n<p className=\"text-base\">Body text</p>`}\n </code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Data Typography */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"Data Typography Patterns\"\n description=\"Specialized typography for data presentation and analytics\"\n badge={{ text: \"Business Patterns\", variant: \"category\", category: 2 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Data Display</h4>\n <div className=\"space-y-4\">\n <Card className=\"p-4 bg-background\">\n <div className=\"text-data-label mb-1\">METRIC LABEL</div>\n <div className=\"text-data-value\">1,234.56</div>\n <div className=\"text-data-meta\">+12.3% from last period</div>\n </Card>\n \n <Card className=\"p-4 bg-background\">\n <div className=\"text-data-label mb-1\">STATUS</div>\n <div className=\"text-data-value text-status-success\">Healthy</div>\n <div className=\"text-data-meta\">All systems operational</div>\n </Card>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Table Typography</h4>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"text-data-label\">COLUMN</TableHead>\n <TableHead className=\"text-data-label text-right\">VALUE</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow>\n <TableCell className=\"text-data-value\">Row Item</TableCell>\n <TableCell className=\"text-data-value text-right\">123</TableCell>\n </TableRow>\n <TableRow>\n <TableCell className=\"text-data-meta\">Metadata</TableCell>\n <TableCell className=\"text-data-meta text-right\">Info</TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <pre className=\"text-sm font-mono text-foreground overflow-x-auto\">\n <code>{`<div className=\"text-data-label\">METRIC LABEL</div>\n<div className=\"text-data-value\">1,234.56</div>\n<div className=\"text-data-meta\">+12.3% from last period</div>`}</code>\n </pre>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Typography Utilities */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Typography Utilities\"\n description=\"Utility classes for text styling and layout\"\n badge={{ text: \"Utilities\", variant: \"category\", category: 3 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n <div>\n <h4 className=\"text-sm font-medium mb-4\">Text Colors</h4>\n <div className=\"space-y-2\">\n <p className=\"text-foreground\">text-foreground - Primary text</p>\n <p className=\"text-muted-foreground\">text-muted-foreground - Secondary text</p>\n <p className=\"text-primary\">text-primary - Brand color</p>\n <p className=\"text-status-success\">text-status-success - Success state</p>\n <p className=\"text-status-error\">text-status-error - Error state</p>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Font Weights</h4>\n <div className=\"space-y-2\">\n <p className=\"font-thin\">font-thin - 100</p>\n <p className=\"font-light\">font-light - 300</p>\n <p className=\"font-normal\">font-normal - 400</p>\n <p className=\"font-medium\">font-medium - 500</p>\n <p className=\"font-semibold\">font-semibold - 600</p>\n <p className=\"font-bold\">font-bold - 700</p>\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-4\">Text Alignment & Spacing</h4>\n <div className=\"grid md:grid-cols-3 gap-4\">\n <Card className=\"p-4 text-left\" category={1}>\n <p className=\"font-medium\">Left Aligned</p>\n <p className=\"text-sm text-muted-foreground\">text-left</p>\n </Card>\n <Card className=\"p-4 text-center\" category={2}>\n <p className=\"font-medium\">Center Aligned</p>\n <p className=\"text-sm text-muted-foreground\">text-center</p>\n </Card>\n <Card className=\"p-4 text-right\" category={3}>\n <p className=\"font-medium\">Right Aligned</p>\n <p className=\"text-sm text-muted-foreground\">text-right</p>\n </Card>\n </div>\n </div>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Typography in Components */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"Typography in Context\"\n description=\"How typography works within component compositions\"\n badge={{ text: \"Integration\", variant: \"category\", category: 4 }}\n >\n <div className=\"space-y-6\">\n <div className=\"grid md:grid-cols-2 gap-6\">\n <StatCard\n title=\"Typography in StatCard\"\n value=\"99.9%\"\n subtitle=\"Uses data typography patterns\"\n category={1}\n icon={<Database className=\"w-5 h-5\" />}\n trend={{ value: 2.3, label: \"improvement\" }}\n />\n \n <Card className=\"p-4\" category={2}>\n <div className=\"flex items-start justify-between mb-2\">\n <h3 className=\"text-lg font-semibold\">Card Title</h3>\n <DataBadge variant=\"category\" category={2} size=\"sm\">Active</DataBadge>\n </div>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Card description using muted foreground color for secondary text.\n </p>\n <div className=\"flex items-center gap-4\">\n <div>\n <div className=\"text-data-label\">STATUS</div>\n <div className=\"text-data-value\">Online</div>\n </div>\n <div>\n <div className=\"text-data-label\">UPTIME</div>\n <div className=\"text-data-value\">99.9%</div>\n </div>\n </div>\n </Card>\n </div>\n \n <Alert status=\"info\" title=\"Typography Best Practices\">\n <ul className=\"list-disc list-inside space-y-1 text-sm\">\n <li>Use <code className=\"text-xs bg-muted px-1 rounded\">text-data-label</code> for metric labels</li>\n <li>Use <code className=\"text-xs bg-muted px-1 rounded\">text-data-value</code> for prominent values</li>\n <li>Use <code className=\"text-xs bg-muted px-1 rounded\">text-muted-foreground</code> for secondary text</li>\n <li>Maintain consistent hierarchy with font sizes and weights</li>\n </ul>\n </Alert>\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Typography Architecture */}\n <Card className=\"p-6\" category={5}>\n <ShowcaseSection\n title=\"Typography System Architecture\"\n description=\"Design tokens and CSS variables powering the typography system\"\n badge={{ text: \"Architecture\", variant: \"category\", category: 5 }}\n >\n <div className=\"space-y-4\">\n <div className=\"grid md:grid-cols-2 gap-4\">\n <div>\n <h4 className=\"text-sm font-medium mb-3\">Type Scale</h4>\n <div className=\"space-y-2 text-xs font-mono\">\n <div className=\"p-2 bg-muted rounded\">\n --font-size-xs: 0.75rem (12px)\n </div>\n <div className=\"p-2 bg-muted rounded\">\n --font-size-sm: 0.875rem (14px)\n </div>\n <div className=\"p-2 bg-muted rounded\">\n --font-size-base: 1rem (16px)\n </div>\n <div className=\"p-2 bg-muted rounded\">\n --font-size-lg: 1.125rem (18px)\n </div>\n <div className=\"p-2 bg-muted rounded\">\n --font-size-xl: 1.25rem (20px)\n </div>\n </div>\n </div>\n \n <div>\n <h4 className=\"text-sm font-medium mb-3\">Data Typography Classes</h4>\n <div className=\"space-y-2 text-xs\">\n <div className=\"p-2 bg-muted rounded\">\n <code>.text-data-label</code> → Uppercase, smaller, medium weight\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>.text-data-value</code> → Larger, semibold, high contrast\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>.text-data-meta</code> → Smaller, muted color\n </div>\n <div className=\"p-2 bg-muted rounded\">\n <code>.text-data-*</code> → Sized variants (xs, sm, base, lg, xl)\n </div>\n </div>\n </div>\n </div>\n \n {showCode && (\n <div className=\"mt-4 p-4 bg-muted border border-border rounded-md\">\n <h5 className=\"font-medium mb-2\">Usage Guidelines</h5>\n <ul className=\"text-sm space-y-1 text-muted-foreground\">\n <li>• Use base typography for general UI text</li>\n <li>• Use data typography for metrics, values, and data presentation</li>\n <li>• Maintain consistent hierarchy within components</li>\n <li>• Leverage color utilities for semantic meaning</li>\n </ul>\n </div>\n )}\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Palettes Section */}\n <TabsContent value=\"palettes\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Color System & Palettes</h2>\n <p className=\"text-muted-foreground\">\n Complete color system including individual color swatches and predefined palette combinations for data visualization and interface design.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Category Colors - Individual Swatches */}\n <Card className=\"p-6\" category={1}>\n <ShowcaseSection\n title=\"Category Colors\"\n description=\"Primary colors for categorizing different types of data, models, and content sections.\"\n badge={{ text: \"Data Classification\", variant: \"category\", category: 1 }}\n >\n <div className=\"grid grid-cols-4 md:grid-cols-8 gap-4\">\n {[\n { num: 1, name: 'Blue', usage: 'Primary data' },\n { num: 2, name: 'Teal', usage: 'Models' },\n { num: 3, name: 'Orange', usage: 'Tests' },\n { num: 4, name: 'Purple', usage: 'Sources' },\n { num: 5, name: 'Pink', usage: 'Analytics' },\n { num: 6, name: 'Green', usage: 'Jobs' },\n { num: 7, name: 'Yellow', usage: 'Documentation' },\n { num: 8, name: 'Red', usage: 'Issues' }\n ].map(category => (\n <ColorSwatch\n key={category.num}\n color={`hsl(var(--category-${category.num}))`}\n name={category.name}\n label={category.usage}\n interactive\n />\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Category Palette - Combined */}\n <Card className=\"p-6\" category={6}>\n <ShowcaseSection\n title=\"Category Palette\"\n description=\"Complete 8-color palette for data categorization with excellent contrast and accessibility.\"\n badge={{ text: \"8 Colors\", variant: \"category\", category: 6 }}\n >\n <div className=\"flex gap-1 rounded overflow-hidden border border-border\">\n {[1, 2, 3, 4, 5, 6, 7, 8].map(num => (\n <div \n key={num}\n className=\"flex-1 h-24 group relative cursor-pointer\"\n style={{ backgroundColor: `hsl(var(--category-${num}))` }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/10 flex items-center justify-center\">\n <span className=\"text-white font-medium opacity-0 group-hover:opacity-100 transition-opacity\">\n {num}\n </span>\n </div>\n </div>\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Status Colors - Individual Swatches */}\n <Card className=\"p-6\" category={2}>\n <ShowcaseSection\n title=\"Status Colors\"\n description=\"Semantic colors for indicating status, health, and operational states across the system.\"\n badge={{ text: \"System States\", variant: \"status\", status: \"success\" }}\n >\n <div className=\"grid grid-cols-5 gap-4\">\n {[\n { name: 'Success', usage: 'Completed', cssVar: '--status-success' },\n { name: 'Warning', usage: 'Attention', cssVar: '--status-warning' },\n { name: 'Error', usage: 'Failed', cssVar: '--status-error' },\n { name: 'Info', usage: 'Information', cssVar: '--status-info' },\n { name: 'Neutral', usage: 'Pending', cssVar: '--status-neutral' }\n ].map(color => (\n <ColorSwatch\n key={color.name}\n color={`hsl(var(${color.cssVar}))`}\n name={color.name}\n label={color.usage}\n interactive\n />\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Status Palette - Combined */}\n <Card className=\"p-6\" category={7}>\n <ShowcaseSection\n title=\"Status Palette\"\n description=\"Semantic color palette for system states and operational indicators.\"\n badge={{ text: \"5 States\", variant: \"status\", status: \"info\" }}\n >\n <div className=\"flex gap-1 rounded overflow-hidden border border-border\">\n {[\n { name: 'Success', var: '--status-success' },\n { name: 'Warning', var: '--status-warning' },\n { name: 'Error', var: '--status-error' },\n { name: 'Info', var: '--status-info' },\n { name: 'Neutral', var: '--status-neutral' }\n ].map(status => (\n <div \n key={status.name}\n className=\"flex-1 h-24 group relative cursor-pointer\"\n style={{ backgroundColor: `hsl(var(${status.var}))` }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/10 flex items-center justify-center\">\n <span className=\"text-white font-medium text-xs opacity-0 group-hover:opacity-100 transition-opacity\">\n {status.name}\n </span>\n </div>\n </div>\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Extended Grays - Individual Swatches */}\n <Card className=\"p-6\" category={3}>\n <ShowcaseSection\n title=\"Extended Grays\"\n description=\"Comprehensive gray scale for backgrounds, borders, text, and subtle UI elements.\"\n badge={{ text: \"Neutrals\", variant: \"status\", status: \"neutral\" }}\n >\n <div className=\"grid grid-cols-6 md:grid-cols-11 gap-2\">\n {[25, 75, 150, 250, 350, 450, 550, 650, 750, 850, 925].map(shade => (\n <ColorSwatch\n key={shade}\n color={`hsl(var(--gray-${shade}))`}\n name={shade.toString()}\n size=\"sm\"\n interactive\n />\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* Gray Palette - Combined */}\n <Card className=\"p-6\" category={8}>\n <ShowcaseSection\n title=\"Extended Gray Palette\"\n description=\"Comprehensive neutral palette for backgrounds, borders, and subtle interface elements.\"\n badge={{ text: \"11 Shades\", variant: \"status\", status: \"neutral\" }}\n >\n <div className=\"flex gap-1 rounded overflow-hidden border border-border\">\n {[25, 75, 150, 250, 350, 450, 550, 650, 750, 850, 925].map(shade => (\n <div \n key={shade}\n className=\"flex-1 h-24 group relative cursor-pointer\"\n style={{ backgroundColor: `hsl(var(--gray-${shade}))` }}\n >\n <div className=\"absolute inset-0 bg-black/0 group-hover:bg-black/10 flex items-center justify-center\">\n <span className=\"text-white font-medium text-xs opacity-0 group-hover:opacity-100 transition-opacity\">\n {shade}\n </span>\n </div>\n </div>\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n\n {/* UI System Colors - Individual Swatches */}\n <Card className=\"p-6\" category={4}>\n <ShowcaseSection\n title=\"UI System Colors\"\n description=\"Core UI colors for backgrounds, surfaces, borders, and interactive elements.\"\n badge={{ text: \"Interface\", variant: \"category\", category: 4 }}\n >\n <div className=\"grid grid-cols-3 md:grid-cols-6 gap-4\">\n {[\n { name: 'Background', cssVar: '--background', usage: 'Page background' },\n { name: 'Foreground', cssVar: '--foreground', usage: 'Primary text' },\n { name: 'Card', cssVar: '--card', usage: 'Card backgrounds' },\n { name: 'Border', cssVar: '--border', usage: 'Dividers' },\n { name: 'Primary', cssVar: '--primary', usage: 'Brand color' },\n { name: 'Secondary', cssVar: '--secondary', usage: 'Secondary actions' }\n ].map(color => (\n <ColorSwatch\n key={color.name}\n color={`hsl(var(${color.cssVar}))`}\n name={color.name}\n label={color.usage}\n size=\"lg\"\n interactive\n />\n ))}\n </div>\n </ShowcaseSection>\n </Card>\n </div>\n </TabsContent>\n\n {/* Debug Section */}\n <TabsContent value=\"debug\" className=\"space-y-6\">\n <div className=\"space-y-2 mb-8\">\n <h2 className=\"text-2xl font-bold text-foreground\">Debug Tools</h2>\n <p className=\"text-muted-foreground\">\n Development utilities for testing, debugging, and validating the design system.\n </p>\n </div>\n\n <div className=\"grid gap-6\">\n {/* Color Variables Debug */}\n <Card className=\"p-6\" category={8}>\n <h3 className=\"text-lg font-medium mb-4 flex items-center gap-2\">\n CSS Variables\n <DataBadge variant=\"category\" category={8} size=\"sm\">Debug</DataBadge>\n </h3>\n <p className=\"text-sm text-muted-foreground mb-6\">\n Live CSS custom property values currently applied to the system.\n </p>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm font-mono\">\n {[\n '--category-1', '--category-2', '--category-3', '--category-4',\n '--status-success', '--status-warning', '--status-error', '--status-info',\n '--background', '--foreground', '--border', '--primary'\n ].map(variable => (\n <Card key={variable} className=\"p-3\">\n <div className=\"text-xs text-muted-foreground mb-1\">{variable}</div>\n <div \n className=\"w-full h-8 rounded border border-border\"\n style={{ backgroundColor: `hsl(var(${variable}))` }}\n />\n </Card>\n ))}\n </div>\n </Card>\n\n {/* Component States */}\n <Card className=\"p-6\" category={5}>\n <h3 className=\"text-lg font-medium mb-4 flex items-center gap-2\">\n Component States\n <DataBadge variant=\"status\" status=\"info\" size=\"sm\">Interactive</DataBadge>\n </h3>\n <p className=\"text-sm text-muted-foreground mb-6\">\n Test different states and interactions of design system components.\n </p>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map(category => (\n <Card key={category} category={category as 1 | 2 | 3 | 4} className=\"p-4\">\n <h4 className=\"font-medium mb-2\">Category {category}</h4>\n <DataBadge variant=\"category\" category={category as 1 | 2 | 3 | 4} size=\"sm\">\n Test Badge\n </DataBadge>\n <div className=\"mt-3 space-y-2\">\n <div className=\"text-xs text-muted-foreground\">\n Color: hsl(var(--category-{category}))\n </div>\n <div className=\"text-xs text-muted-foreground\">\n Background: hsl(var(--category-{category}) / 0.02)\n </div>\n </div>\n </Card>\n ))}\n </div>\n </Card>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </div>\n\n {/* Toast Container */}\n <ToastContainer\n toasts={toasts.map(t => ({\n id: t.id,\n status: t.status,\n title: t.title,\n children: t.message,\n duration: 5000,\n showProgress: true,\n onDismiss: () => setToasts(prev => prev.filter(toast => toast.id !== t.id))\n }))}\n position=\"top-right\"\n />\n\n {/* Footer */}\n <footer className=\"bg-card/30 backdrop-blur-sm border-t border-border/50\">\n <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-4\">\n <IconBadge \n variant=\"category\" \n category={1} \n size=\"sm\"\n >\n DT\n </IconBadge>\n <div>\n <p className=\"text-sm font-medium text-foreground\">Data Trust Navigator</p>\n <p className=\"text-xs text-muted-foreground\">Design System Showcase • Built with Atomic Architecture</p>\n </div>\n </div>\n \n <div className=\"flex items-center space-x-4\">\n <DataBadge variant=\"category\" category={1} size=\"sm\">Design System</DataBadge>\n <DataBadge variant=\"status\" status=\"success\" size=\"sm\">v1.0</DataBadge>\n </div>\n </div>\n </div>\n </footer>\n </div>\n );\n};"],"names":["sizeClasses","variantClasses","user","permissions","React","statusIcons","searchParams","alert","_a"],"mappings":"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"}
|