@amogads/ui 1.1.5 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1154 -1469
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1071 -1397
- package/dist/index.mjs.map +1 -1
- package/dist/pages.js +2070 -2205
- package/dist/pages.js.map +1 -1
- package/dist/pages.mjs +1378 -1512
- package/dist/pages.mjs.map +1 -1
- package/dist/server.js +6 -3
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +6 -3
- package/dist/server.mjs.map +1 -1
- package/dist/services.js +6 -1
- package/dist/services.js.map +1 -1
- package/dist/services.mjs +6 -1
- package/dist/services.mjs.map +1 -1
- package/dist/stores.js +1 -0
- package/dist/stores.js.map +1 -1
- package/dist/stores.mjs +1 -0
- package/dist/stores.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/design-system/index.ts","../src/design-system/tokens/index.ts","../src/design-system/components/ui/accordion.tsx","../src/lib/utils.ts","../src/design-system/components/ui/alert-dialog.tsx","../src/design-system/components/ui/alert.tsx","../src/design-system/components/ui/aspect-ratio.tsx","../src/design-system/components/ui/avatar.tsx","../src/design-system/components/ui/badge.tsx","../src/design-system/components/ui/breadcrumb.tsx","../src/design-system/components/ui/button.tsx","../src/design-system/components/ui/button-group.tsx","../src/design-system/components/ui/calendar.tsx","../src/design-system/components/ui/card.tsx","../src/design-system/components/ui/carousel.tsx","../src/design-system/components/ui/chart.tsx","../src/design-system/components/ui/chart-demos.tsx","../src/design-system/components/ui/checkbox.tsx","../src/design-system/components/ui/collapsible.tsx","../src/design-system/components/ui/command.tsx","../src/design-system/components/ui/context-menu.tsx","../src/design-system/components/ui/date-picker.tsx","../src/design-system/components/ui/dialog.tsx","../src/design-system/components/ui/drawer.tsx","../src/design-system/components/ui/dropdown-menu.tsx","../src/design-system/components/ui/empty.tsx","../src/design-system/components/ui/field.tsx","../src/design-system/components/ui/form.tsx","../src/design-system/components/ui/hover-card.tsx","../src/design-system/components/ui/input.tsx","../src/design-system/components/ui/input-group.tsx","../src/design-system/components/ui/input-otp.tsx","../src/design-system/components/ui/item.tsx","../src/design-system/components/ui/kbd.tsx","../src/design-system/components/ui/label.tsx","../src/design-system/components/ui/menubar.tsx","../src/design-system/components/ui/navigation-menu.tsx","../src/design-system/components/ui/pagination.tsx","../src/design-system/components/ui/popover.tsx","../src/design-system/components/ui/progress.tsx","../src/design-system/components/ui/radio-group.tsx","../src/design-system/components/ui/resizable.tsx","../src/design-system/components/ui/scroll-area.tsx","../src/design-system/components/ui/select.tsx","../src/design-system/components/ui/separator.tsx","../src/design-system/components/ui/sheet.tsx","../src/design-system/components/ui/sidebar.tsx","../src/hooks/use-mobile.tsx","../src/design-system/components/ui/skeleton.tsx","../src/design-system/components/ui/slider.tsx","../src/design-system/components/ui/sonner.tsx","../src/design-system/components/ui/spinner.tsx","../src/design-system/components/ui/switch.tsx","../src/design-system/components/ui/table.tsx","../src/design-system/components/ui/tabs.tsx","../src/design-system/components/ui/textarea.tsx","../src/design-system/components/ui/toggle.tsx","../src/design-system/components/ui/toggle-group.tsx","../src/design-system/components/ui/tooltip.tsx","../src/design-system/components/business/page-header.tsx","../src/design-system/components/business/data-table.tsx","../src/design-system/components/business/status-badge.tsx","../src/design-system/components/business/filter-bar.tsx","../src/design-system/components/business/form-section.tsx","../src/design-system/components/business/metric-card.tsx","../src/design-system/components/business/confirm-dialog.tsx","../src/design-system/components/business/password-input.tsx","../src/lib/client.ts","../src/stores/auth-store.ts","../src/lib/cookies.ts","../src/design-system/components/business/sign-out-dialog.tsx","../src/design-system/components/business/theme-switch.tsx","../src/context/theme-provider.tsx","../src/design-system/components/business/theme-selector.tsx","../src/context/color-theme-provider.tsx","../src/design-system/components/business/select-dropdown.tsx","../src/design-system/components/business/long-text.tsx","../src/design-system/components/business/search.tsx","../src/context/search-provider.tsx","../src/components/command-menu.tsx","../src/components/layout/data/sidebar-data.ts","../src/design-system/components/business/stats-01.tsx","../src/design-system/components/business/date-picker.tsx","../src/design-system/components/business/qr-code-display.tsx","../src/design-system/components/chat/chat-bubble.tsx","../src/design-system/components/chat/chat-input.tsx","../src/design-system/components/chat/chat-header.tsx","../src/design-system/components/chat/typing-indicator.tsx","../src/design-system/components/chat/chat-empty-state.tsx","../src/design-system/components/chat/chat-card-item.tsx","../src/design-system/components/chat/chat-message-list.tsx","../src/design-system/components/chat/chat-sidebar.tsx","../src/design-system/components/chat/contact-manager.tsx","../src/design-system/components/chat/group-manager.tsx","../src/design-system/components/ai-chat/ai-model-selector.tsx","../src/design-system/components/ai-chat/ai-tool-selector.tsx","../src/design-system/components/ai-chat/ai-chat-input.tsx","../src/design-system/components/ai-chat/ai-message-bubble.tsx","../src/design-system/components/ai-chat/ai-message-list.tsx","../src/design-system/components/ai-chat/ai-prompt-suggestions.tsx","../src/design-system/components/ai-chat/ai-chat-header.tsx","../src/design-system/components/files/file-card-item.tsx","../src/design-system/components/files/folder-tree-item.tsx","../src/design-system/components/files/storage-stat-card.tsx","../src/design-system/components/files/user-file-cards-view.tsx","../src/features/Message/components/chat/header-actions.tsx","../src/design-system/components/files/file-upload-form.tsx","../src/design-system/templates/list-template.tsx","../src/design-system/templates/detail-template.tsx","../src/design-system/templates/form-template.tsx","../src/design-system/templates/wizard-template.tsx","../src/design-system/templates/dashboard-template.tsx","../src/design-system/templates/workspace-template.tsx","../src/design-system/templates/app-header.tsx","../src/components/layout/header.tsx","../src/components/search.tsx","../src/stores/notification-store.ts","../src/lib/supabase/client.ts","../src/design-system/templates/data/sidebar-data.ts","../src/design-system/templates/app-logo.tsx","../src/context/layout-provider.tsx","../src/design-system/templates/nav-group.tsx","../src/design-system/templates/team-switcher.tsx","../src/design-system/templates/nav-user.tsx","../src/hooks/use-dialog-state.tsx","../src/components/config-drawer.tsx","../src/assets/custom/icon-theme-dark.tsx","../src/assets/custom/icon-theme-light.tsx","../src/assets/custom/icon-theme-system.tsx","../src/design-system/templates/app-sidebar.tsx","../src/design-system/templates/app-title.tsx","../src/design-system/templates/authenticated-layout.tsx","../src/components/layout/app-sidebar.tsx","../src/components/layout/nav-group.tsx","../src/components/layout/nav-user.tsx","../src/components/skip-to-main.tsx","../src/features/errors/not-found-error.tsx","../src/design-system/templates/header.tsx","../src/design-system/templates/main.tsx","../src/design-system/templates/sidebar-search.tsx","../src/design-system/templates/top-nav.tsx"],"sourcesContent":["/**\r\n * Amoga Design System — Central Barrel Export\r\n *\r\n * Single source of truth for all reusable tokens, core UI primitives,\r\n * business components, and page templates.\r\n */\r\n\r\n// ── Design Tokens ────────────────────────────────────────────────────────────\r\nexport * from './tokens'\r\n\r\n// ── Core UI Components (shadcn/ui primitives) ────────────────────────────────\r\nexport * from './components/ui/accordion'\r\nexport * from './components/ui/alert-dialog'\r\nexport * from './components/ui/alert'\r\nexport * from './components/ui/aspect-ratio'\r\nexport * from './components/ui/avatar'\r\nexport * from './components/ui/badge'\r\nexport * from './components/ui/breadcrumb'\r\nexport * from './components/ui/button'\r\nexport * from './components/ui/button-group'\r\nexport * from './components/ui/calendar'\r\nexport * from './components/ui/card'\r\nexport * from './components/ui/carousel'\r\nexport * from './components/ui/chart'\r\nexport * from './components/ui/chart-demos'\r\n\r\nexport * from './components/ui/checkbox'\r\nexport * from './components/ui/collapsible'\r\nexport * from './components/ui/command'\r\nexport * from './components/ui/context-menu'\r\nexport * from './components/ui/date-picker'\r\nexport * from './components/ui/dialog'\r\nexport * from './components/ui/drawer'\r\nexport * from './components/ui/dropdown-menu'\r\nexport * from './components/ui/empty'\r\nexport * from './components/ui/field'\r\nexport * from './components/ui/form'\r\nexport * from './components/ui/hover-card'\r\nexport * from './components/ui/input'\r\nexport * from './components/ui/input-group'\r\nexport * from './components/ui/input-otp'\r\nexport * from './components/ui/item'\r\nexport * from './components/ui/kbd'\r\nexport * from './components/ui/label'\r\nexport * from './components/ui/menubar'\r\nexport * from './components/ui/navigation-menu'\r\nexport * from './components/ui/pagination'\r\nexport * from './components/ui/popover'\r\nexport * from './components/ui/progress'\r\nexport * from './components/ui/radio-group'\r\nexport * from './components/ui/resizable'\r\nexport * from './components/ui/scroll-area'\r\nexport * from './components/ui/select'\r\nexport * from './components/ui/separator'\r\nexport * from './components/ui/sheet'\r\nexport * from './components/ui/sidebar'\r\nexport * from './components/ui/skeleton'\r\nexport * from './components/ui/slider'\r\nexport * from './components/ui/sonner'\r\nexport * from './components/ui/spinner'\r\nexport * from './components/ui/switch'\r\nexport * from './components/ui/table'\r\nexport * from './components/ui/tabs'\r\nexport * from './components/ui/textarea'\r\nexport * from './components/ui/toggle'\r\nexport * from './components/ui/toggle-group'\r\nexport * from './components/ui/tooltip'\r\n\r\n\r\n// ── Reusable Business Components ─────────────────────────────────────────────\r\nexport { PageHeader, type PageHeaderProps } from './components/business/page-header'\r\nexport { DataTable, type DataTableProps, type ColumnDef } from './components/business/data-table'\r\nexport { StatusBadge, statusBadgeVariants, type StatusBadgeProps } from './components/business/status-badge'\r\nexport { FilterBar, type FilterBarProps, type ActiveFilter } from './components/business/filter-bar'\r\nexport { FormSection, type FormSectionProps } from './components/business/form-section'\r\nexport { MetricCard, type MetricCardProps } from './components/business/metric-card'\r\nexport { ConfirmDialog } from './components/business/confirm-dialog'\r\nexport { PasswordInput } from './components/business/password-input'\r\nexport { SignOutDialog } from './components/business/sign-out-dialog'\r\nexport { ThemeSwitch } from './components/business/theme-switch'\r\nexport { ThemeSelector } from './components/business/theme-selector'\r\nexport { SelectDropdown } from './components/business/select-dropdown'\r\nexport { LongText } from './components/business/long-text'\r\nexport { Search } from './components/business/search'\r\nexport { Stats01 } from './components/business/stats-01'\r\nexport { DatePicker } from './components/business/date-picker'\r\nexport { QrCodeDisplay, QRCodeDisplay, downloadQrCode, type QrCodeDisplayProps, type QRCodeDisplayProps } from './components/business/qr-code-display'\r\n\r\n\r\n\r\n// ── Chat & Realtime Components ──────────────────────────────────────────────\r\nexport * from './components/chat'\r\n\r\n// ── AI Assistant & Multi-Model Chat ─────────────────────────────────────────\r\nexport * from './components/ai-chat'\r\n\r\n// ── Files & Document Management ─────────────────────────────────────────────\r\nexport * from './components/files'\r\n\r\n\r\n// ── Reusable Page Templates ──────────────────────────────────────────────────\r\nexport { ListTemplate, type ListTemplateProps } from './templates/list-template'\r\nexport { DetailTemplate, type DetailTemplateProps } from './templates/detail-template'\r\nexport { FormTemplate, type FormTemplateProps } from './templates/form-template'\r\nexport { WizardTemplate, type WizardTemplateProps, type WizardStep } from './templates/wizard-template'\r\nexport { DashboardTemplate, type DashboardTemplateProps } from './templates/dashboard-template'\r\nexport { WorkspaceTemplate, type WorkspaceTemplateProps } from './templates/workspace-template'\r\nexport { AppHeader } from './templates/app-header'\r\nexport { AppLogo } from './templates/app-logo'\r\nexport { AppSidebar } from './templates/app-sidebar'\r\nexport { AppTitle } from './templates/app-title'\r\nexport { AuthenticatedLayout } from './templates/authenticated-layout'\r\nexport { Header } from './templates/header'\r\nexport { Main } from './templates/main'\r\nexport { NavGroup } from './templates/nav-group'\r\nexport { NavUser } from './templates/nav-user'\r\nexport { SidebarSearch } from './templates/sidebar-search'\r\nexport { TeamSwitcher } from './templates/team-switcher'\r\nexport { TopNav } from './templates/top-nav'\r\nexport { sidebarData } from './templates/data/sidebar-data'\r\nexport type { SidebarData, NavItem, NavGroup as NavGroupType } from './templates/types'\r\n\r\n","/**\n * Amoga Design System — Tokens Module\n *\n * Exposes design token constants and metadata for TypeScript usage.\n */\n\nexport const SEMANTIC_TOKENS = {\n background: 'var(--background)',\n foreground: 'var(--foreground)',\n card: 'var(--card)',\n cardForeground: 'var(--card-foreground)',\n popover: 'var(--popover)',\n popoverForeground: 'var(--popover-foreground)',\n primary: 'var(--primary)',\n primaryForeground: 'var(--primary-foreground)',\n secondary: 'var(--secondary)',\n secondaryForeground: 'var(--secondary-foreground)',\n muted: 'var(--muted)',\n mutedForeground: 'var(--muted-foreground)',\n accent: 'var(--accent)',\n accentForeground: 'var(--accent-foreground)',\n destructive: 'var(--destructive)',\n destructiveForeground: 'var(--destructive-foreground)',\n success: 'var(--success)',\n successForeground: 'var(--success-foreground)',\n warning: 'var(--warning)',\n warningForeground: 'var(--warning-foreground)',\n info: 'var(--info)',\n infoForeground: 'var(--info-foreground)',\n border: 'var(--border)',\n input: 'var(--input)',\n ring: 'var(--ring)',\n radius: 'var(--radius)',\n radiusSm: 'var(--radius-sm)',\n radiusMd: 'var(--radius-md)',\n radiusLg: 'var(--radius-lg)',\n radiusXl: 'var(--radius-xl)',\n} as const\n\nexport const CHART_TOKENS = {\n chart1: 'var(--chart-1)',\n chart2: 'var(--chart-2)',\n chart3: 'var(--chart-3)',\n chart4: 'var(--chart-4)',\n chart5: 'var(--chart-5)',\n} as const\n\nexport const SIDEBAR_TOKENS = {\n sidebar: 'var(--sidebar)',\n sidebarForeground: 'var(--sidebar-foreground)',\n sidebarPrimary: 'var(--sidebar-primary)',\n sidebarPrimaryForeground: 'var(--sidebar-primary-foreground)',\n sidebarAccent: 'var(--sidebar-accent)',\n sidebarAccentForeground: 'var(--sidebar-accent-foreground)',\n sidebarBorder: 'var(--sidebar-border)',\n sidebarRing: 'var(--sidebar-ring)',\n} as const\n","import * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Accordion({\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\r\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\r\n}\r\n\r\nfunction AccordionItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\r\n return (\r\n <AccordionPrimitive.Item\r\n data-slot=\"accordion-item\"\r\n className={cn(\"border-b last:border-b-0\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AccordionTrigger({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\r\n return (\r\n <AccordionPrimitive.Header className=\"flex\">\r\n <AccordionPrimitive.Trigger\r\n data-slot=\"accordion-trigger\"\r\n className={cn(\r\n \"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronDownIcon className=\"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200\" />\r\n </AccordionPrimitive.Trigger>\r\n </AccordionPrimitive.Header>\r\n )\r\n}\r\n\r\nfunction AccordionContent({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\r\n return (\r\n <AccordionPrimitive.Content\r\n data-slot=\"accordion-content\"\r\n className=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\r\n {...props}\r\n >\r\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\r\n </AccordionPrimitive.Content>\r\n )\r\n}\r\n\r\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\r\n","import { type ClassValue, clsx } from 'clsx'\r\nimport { twMerge } from 'tailwind-merge'\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n\r\nexport function sleep(ms: number = 1000) {\r\n return new Promise((resolve) => setTimeout(resolve, ms))\r\n}\r\n\r\n/** Normalize post-login redirect to an in-app path for TanStack Router. */\r\nexport function getRedirectPath(redirectTo?: string): string {\r\n if (!redirectTo) return '/'\r\n\r\n try {\r\n if (redirectTo.startsWith('http://') || redirectTo.startsWith('https://')) {\r\n const url = new URL(redirectTo)\r\n return `${url.pathname}${url.search}${url.hash}` || '/'\r\n }\r\n } catch {\r\n // Fall through to treat redirectTo as a relative path.\r\n }\r\n\r\n return redirectTo.startsWith('/') ? redirectTo : `/${redirectTo}`\r\n}\r\n\r\n/**\r\n * Generates page numbers for pagination with ellipsis\r\n * @param currentPage - Current page number (1-based)\r\n * @param totalPages - Total number of pages\r\n * @returns Array of page numbers and ellipsis strings\r\n *\r\n * Examples:\r\n * - Small dataset (≤5 pages): [1, 2, 3, 4, 5]\r\n * - Near beginning: [1, 2, 3, 4, '...', 10]\r\n * - In middle: [1, '...', 4, 5, 6, '...', 10]\r\n * - Near end: [1, '...', 7, 8, 9, 10]\r\n */\r\nexport function getPageNumbers(currentPage: number, totalPages: number) {\r\n const maxVisiblePages = 5 // Maximum number of page buttons to show\r\n const rangeWithDots = []\r\n\r\n if (totalPages <= maxVisiblePages) {\r\n // If total pages is 5 or less, show all pages\r\n for (let i = 1; i <= totalPages; i++) {\r\n rangeWithDots.push(i)\r\n }\r\n } else {\r\n // Always show first page\r\n rangeWithDots.push(1)\r\n\r\n if (currentPage <= 3) {\r\n // Near the beginning: [1] [2] [3] [4] ... [10]\r\n for (let i = 2; i <= 4; i++) {\r\n rangeWithDots.push(i)\r\n }\r\n rangeWithDots.push('...', totalPages)\r\n } else if (currentPage >= totalPages - 2) {\r\n // Near the end: [1] ... [7] [8] [9] [10]\r\n rangeWithDots.push('...')\r\n for (let i = totalPages - 3; i <= totalPages; i++) {\r\n rangeWithDots.push(i)\r\n }\r\n } else {\r\n // In the middle: [1] ... [4] [5] [6] ... [10]\r\n rangeWithDots.push('...')\r\n for (let i = currentPage - 1; i <= currentPage + 1; i++) {\r\n rangeWithDots.push(i)\r\n }\r\n rangeWithDots.push('...', totalPages)\r\n }\r\n }\r\n\r\n return rangeWithDots\r\n}\r\n\r\n/**\r\n * Initials from a display name: first character of the first word + first\r\n * character of the last word. One word only: first two characters. Empty: `?`.\r\n */\r\nexport function getDisplayNameInitials(displayName: string): string {\r\n const parts = displayName.trim().split(/\\s+/).filter(Boolean)\r\n if (parts.length === 0) return '?'\r\n if (parts.length === 1) {\r\n return parts[0].slice(0, 2).toUpperCase()\r\n }\r\n const first = parts[0][0] ?? ''\r\n const last = parts[parts.length - 1]?.[0] ?? ''\r\n return (first + last).toUpperCase()\r\n}\r\n","import * as React from \"react\"\r\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button } from \"@/components/ui/button\"\r\n\r\nfunction AlertDialog({\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\r\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\r\n}\r\n\r\nfunction AlertDialogTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\r\n return (\r\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\r\n )\r\n}\r\n\r\nfunction AlertDialogPortal({\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\r\n return (\r\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\r\n )\r\n}\r\n\r\nfunction AlertDialogOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\r\n return (\r\n <AlertDialogPrimitive.Overlay\r\n data-slot=\"alert-dialog-overlay\"\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogContent({\r\n className,\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\r\n size?: \"default\" | \"sm\"\r\n}) {\r\n return (\r\n <AlertDialogPortal>\r\n <AlertDialogOverlay />\r\n <AlertDialogPrimitive.Content\r\n data-slot=\"alert-dialog-content\"\r\n data-size={size}\r\n className={cn(\r\n \"group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </AlertDialogPortal>\r\n )\r\n}\r\n\r\nfunction AlertDialogHeader({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-header\"\r\n className={cn(\r\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogFooter({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-footer\"\r\n className={cn(\r\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\r\n return (\r\n <AlertDialogPrimitive.Title\r\n data-slot=\"alert-dialog-title\"\r\n className={cn(\r\n \"text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\r\n return (\r\n <AlertDialogPrimitive.Description\r\n data-slot=\"alert-dialog-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogMedia({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-media\"\r\n className={cn(\r\n \"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogAction({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\r\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\r\n return (\r\n <Button variant={variant} size={size} asChild>\r\n <AlertDialogPrimitive.Action\r\n data-slot=\"alert-dialog-action\"\r\n className={cn(className)}\r\n {...props}\r\n />\r\n </Button>\r\n )\r\n}\r\n\r\nfunction AlertDialogCancel({\r\n className,\r\n variant = \"outline\",\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\r\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\r\n return (\r\n <Button variant={variant} size={size} asChild>\r\n <AlertDialogPrimitive.Cancel\r\n data-slot=\"alert-dialog-cancel\"\r\n className={cn(className)}\r\n {...props}\r\n />\r\n </Button>\r\n )\r\n}\r\n\r\nexport {\r\n AlertDialog,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogMedia,\r\n AlertDialogOverlay,\r\n AlertDialogPortal,\r\n AlertDialogTitle,\r\n AlertDialogTrigger,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst alertVariants = cva(\r\n \"relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-card text-card-foreground\",\r\n destructive:\r\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Alert({\r\n className,\r\n variant,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\r\n return (\r\n <div\r\n data-slot=\"alert\"\r\n role=\"alert\"\r\n className={cn(alertVariants({ variant }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-title\"\r\n className={cn(\r\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-description\"\r\n className={cn(\r\n \"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Alert, AlertTitle, AlertDescription }\r\n","\"use client\"\r\n\r\nimport { AspectRatio as AspectRatioPrimitive } from \"radix-ui\"\r\n\r\nfunction AspectRatio({\r\n ...props\r\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\r\n return <AspectRatioPrimitive.Root data-slot=\"aspect-ratio\" {...props} />\r\n}\r\n\r\nexport { AspectRatio }\r\n","import * as React from \"react\"\r\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Avatar({\r\n className,\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\r\n size?: \"default\" | \"sm\" | \"lg\"\r\n}) {\r\n return (\r\n <AvatarPrimitive.Root\r\n data-slot=\"avatar\"\r\n data-size={size}\r\n className={cn(\r\n \"group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarImage({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\r\n return (\r\n <AvatarPrimitive.Image\r\n data-slot=\"avatar-image\"\r\n className={cn(\"aspect-square size-full\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarFallback({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\r\n return (\r\n <AvatarPrimitive.Fallback\r\n data-slot=\"avatar-fallback\"\r\n className={cn(\r\n \"flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"avatar-badge\"\r\n className={cn(\r\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none\",\r\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\r\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\r\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"avatar-group\"\r\n className={cn(\r\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarGroupCount({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"avatar-group-count\"\r\n className={cn(\r\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Avatar,\r\n AvatarImage,\r\n AvatarFallback,\r\n AvatarBadge,\r\n AvatarGroup,\r\n AvatarGroupCount,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst badgeVariants = cva(\r\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\r\n destructive:\r\n \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\r\n outline:\r\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\r\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\r\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Badge({\r\n className,\r\n variant = \"default\",\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"span\"> &\r\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\r\n const Comp = asChild ? Slot.Root : \"span\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"badge\"\r\n data-variant={variant}\r\n className={cn(badgeVariants({ variant }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Badge, badgeVariants }\r\n","import * as React from \"react\"\r\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\r\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\r\n}\r\n\r\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\r\n return (\r\n <ol\r\n data-slot=\"breadcrumb-list\"\r\n className={cn(\r\n \"flex flex-wrap items-center gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\r\n return (\r\n <li\r\n data-slot=\"breadcrumb-item\"\r\n className={cn(\"inline-flex items-center gap-1.5\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction BreadcrumbLink({\r\n asChild,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"a\"> & {\r\n asChild?: boolean\r\n}) {\r\n const Comp = asChild ? Slot.Root : \"a\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"breadcrumb-link\"\r\n className={cn(\"transition-colors hover:text-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"breadcrumb-page\"\r\n role=\"link\"\r\n aria-disabled=\"true\"\r\n aria-current=\"page\"\r\n className={cn(\"font-normal text-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction BreadcrumbSeparator({\r\n children,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"li\">) {\r\n return (\r\n <li\r\n data-slot=\"breadcrumb-separator\"\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n className={cn(\"[&>svg]:size-3.5\", className)}\r\n {...props}\r\n >\r\n {children ?? <ChevronRight />}\r\n </li>\r\n )\r\n}\r\n\r\nfunction BreadcrumbEllipsis({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"breadcrumb-ellipsis\"\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n className={cn(\"flex size-9 items-center justify-center\", className)}\r\n {...props}\r\n >\r\n <MoreHorizontal className=\"size-4\" />\r\n <span className=\"sr-only\">More</span>\r\n </span>\r\n )\r\n}\r\n\r\nexport {\r\n Breadcrumb,\r\n BreadcrumbList,\r\n BreadcrumbItem,\r\n BreadcrumbLink,\r\n BreadcrumbPage,\r\n BreadcrumbSeparator,\r\n BreadcrumbEllipsis,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\r\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\r\n \"icon-sm\": \"size-8\",\r\n \"icon-lg\": \"size-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? Slot.Root : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n data-variant={variant}\r\n data-size={size}\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Separator } from \"@/components/ui/separator\"\r\n\r\nconst buttonGroupVariants = cva(\r\n \"flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\r\n {\r\n variants: {\r\n orientation: {\r\n horizontal:\r\n \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\",\r\n vertical:\r\n \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\r\n },\r\n },\r\n defaultVariants: {\r\n orientation: \"horizontal\",\r\n },\r\n }\r\n)\r\n\r\nfunction ButtonGroup({\r\n className,\r\n orientation,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\r\n return (\r\n <div\r\n role=\"group\"\r\n data-slot=\"button-group\"\r\n data-orientation={orientation}\r\n className={cn(buttonGroupVariants({ orientation }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ButtonGroupText({\r\n className,\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n asChild?: boolean\r\n}) {\r\n const Comp = asChild ? Slot.Root : \"div\"\r\n\r\n return (\r\n <Comp\r\n className={cn(\r\n \"flex items-center gap-2 rounded-md border bg-muted px-4 text-sm font-medium shadow-xs [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ButtonGroupSeparator({\r\n className,\r\n orientation = \"vertical\",\r\n ...props\r\n}: React.ComponentProps<typeof Separator>) {\r\n return (\r\n <Separator\r\n data-slot=\"button-group-separator\"\r\n orientation={orientation}\r\n className={cn(\r\n \"relative m-0! self-stretch bg-input data-[orientation=vertical]:h-auto\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n ButtonGroup,\r\n ButtonGroupSeparator,\r\n ButtonGroupText,\r\n buttonGroupVariants,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport {\r\n ChevronDownIcon,\r\n ChevronLeftIcon,\r\n ChevronRightIcon,\r\n} from \"lucide-react\"\r\nimport {\r\n DayPicker,\r\n getDefaultClassNames,\r\n type DayButton,\r\n} from \"react-day-picker\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button, buttonVariants } from \"@/components/ui/button\"\r\n\r\nfunction Calendar({\r\n className,\r\n classNames,\r\n showOutsideDays = true,\r\n captionLayout = \"label\",\r\n buttonVariant = \"ghost\",\r\n formatters,\r\n components,\r\n ...props\r\n}: React.ComponentProps<typeof DayPicker> & {\r\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\r\n}) {\r\n const defaultClassNames = getDefaultClassNames()\r\n\r\n return (\r\n <DayPicker\r\n showOutsideDays={showOutsideDays}\r\n className={cn(\r\n \"group/calendar bg-background p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\r\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\r\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\r\n className\r\n )}\r\n captionLayout={captionLayout}\r\n formatters={{\r\n formatMonthDropdown: (date) =>\r\n date.toLocaleString(\"default\", { month: \"short\" }),\r\n ...formatters,\r\n }}\r\n classNames={{\r\n root: cn(\"w-fit\", defaultClassNames.root),\r\n months: cn(\r\n \"relative flex flex-col gap-4 md:flex-row\",\r\n defaultClassNames.months\r\n ),\r\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\r\n nav: cn(\r\n \"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\r\n defaultClassNames.nav\r\n ),\r\n button_previous: cn(\r\n buttonVariants({ variant: buttonVariant }),\r\n \"size-(--cell-size) p-0 select-none aria-disabled:opacity-50\",\r\n defaultClassNames.button_previous\r\n ),\r\n button_next: cn(\r\n buttonVariants({ variant: buttonVariant }),\r\n \"size-(--cell-size) p-0 select-none aria-disabled:opacity-50\",\r\n defaultClassNames.button_next\r\n ),\r\n month_caption: cn(\r\n \"flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)\",\r\n defaultClassNames.month_caption\r\n ),\r\n dropdowns: cn(\r\n \"flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium\",\r\n defaultClassNames.dropdowns\r\n ),\r\n dropdown_root: cn(\r\n \"relative rounded-md border border-input shadow-xs has-focus:border-ring has-focus:ring-[3px] has-focus:ring-ring/50\",\r\n defaultClassNames.dropdown_root\r\n ),\r\n dropdown: cn(\r\n \"absolute inset-0 bg-popover opacity-0\",\r\n defaultClassNames.dropdown\r\n ),\r\n caption_label: cn(\r\n \"font-medium select-none\",\r\n captionLayout === \"label\"\r\n ? \"text-sm\"\r\n : \"flex h-8 items-center gap-1 rounded-md pr-1 pl-2 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground\",\r\n defaultClassNames.caption_label\r\n ),\r\n month_grid: cn(\"w-full border-collapse\", defaultClassNames.month_grid),\r\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\r\n weekday: cn(\r\n \"flex-1 rounded-md text-[0.8rem] font-normal text-muted-foreground select-none\",\r\n defaultClassNames.weekday\r\n ),\r\n week: cn(\"mt-2 flex w-full\", defaultClassNames.week),\r\n week_number_header: cn(\r\n \"w-(--cell-size) select-none\",\r\n defaultClassNames.week_number_header\r\n ),\r\n week_number: cn(\r\n \"text-[0.8rem] text-muted-foreground select-none\",\r\n defaultClassNames.week_number\r\n ),\r\n day: cn(\r\n \"group/day relative aspect-square h-full w-full p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-md\",\r\n props.showWeekNumber\r\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\r\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\r\n defaultClassNames.day\r\n ),\r\n range_start: cn(\r\n \"rounded-l-md bg-accent\",\r\n defaultClassNames.range_start\r\n ),\r\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\r\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\r\n today: cn(\r\n \"rounded-md bg-accent text-accent-foreground data-[selected=true]:rounded-none\",\r\n defaultClassNames.today\r\n ),\r\n outside: cn(\r\n \"text-muted-foreground aria-selected:text-muted-foreground\",\r\n defaultClassNames.outside\r\n ),\r\n disabled: cn(\r\n \"text-muted-foreground opacity-50\",\r\n defaultClassNames.disabled\r\n ),\r\n hidden: cn(\"invisible\", defaultClassNames.hidden),\r\n ...classNames,\r\n }}\r\n components={{\r\n Root: ({ className, rootRef, ...props }) => {\r\n return (\r\n <div\r\n data-slot=\"calendar\"\r\n ref={rootRef}\r\n className={cn(className)}\r\n {...props}\r\n />\r\n )\r\n },\r\n Chevron: ({ className, orientation, ...props }) => {\r\n if (orientation === \"left\") {\r\n return (\r\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\r\n )\r\n }\r\n\r\n if (orientation === \"right\") {\r\n return (\r\n <ChevronRightIcon\r\n className={cn(\"size-4\", className)}\r\n {...props}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\r\n )\r\n },\r\n DayButton: CalendarDayButton,\r\n WeekNumber: ({ children, ...props }) => {\r\n return (\r\n <td {...props}>\r\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\r\n {children}\r\n </div>\r\n </td>\r\n )\r\n },\r\n ...components,\r\n }}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CalendarDayButton({\r\n className,\r\n day,\r\n modifiers,\r\n ...props\r\n}: React.ComponentProps<typeof DayButton>) {\r\n const defaultClassNames = getDefaultClassNames()\r\n\r\n const ref = React.useRef<HTMLButtonElement>(null)\r\n React.useEffect(() => {\r\n if (modifiers.focused) ref.current?.focus()\r\n }, [modifiers.focused])\r\n\r\n return (\r\n <Button\r\n ref={ref}\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n data-day={day.date.toLocaleDateString()}\r\n data-selected-single={\r\n modifiers.selected &&\r\n !modifiers.range_start &&\r\n !modifiers.range_end &&\r\n !modifiers.range_middle\r\n }\r\n data-range-start={modifiers.range_start}\r\n data-range-end={modifiers.range_end}\r\n data-range-middle={modifiers.range_middle}\r\n className={cn(\r\n \"flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-accent-foreground [&>span]:text-xs [&>span]:opacity-70\",\r\n defaultClassNames.day,\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Calendar, CalendarDayButton }\r\n","import * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card\"\r\n className={cn(\r\n \"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-header\"\r\n className={cn(\r\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-title\"\r\n className={cn(\"leading-none font-semibold\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-action\"\r\n className={cn(\r\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-content\"\r\n className={cn(\"px-6\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-footer\"\r\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Card,\r\n CardHeader,\r\n CardFooter,\r\n CardTitle,\r\n CardAction,\r\n CardDescription,\r\n CardContent,\r\n}\r\n","'use client'\n\nimport * as React from \"react\"\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from \"embla-carousel-react\"\r\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button } from \"@/components/ui/button\"\r\n\r\ntype CarouselApi = UseEmblaCarouselType[1]\r\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\r\ntype CarouselOptions = UseCarouselParameters[0]\r\ntype CarouselPlugin = UseCarouselParameters[1]\r\n\r\ntype CarouselProps = {\r\n opts?: CarouselOptions\r\n plugins?: CarouselPlugin\r\n orientation?: \"horizontal\" | \"vertical\"\r\n setApi?: (api: CarouselApi) => void\r\n}\r\n\r\ntype CarouselContextProps = {\r\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\r\n api: ReturnType<typeof useEmblaCarousel>[1]\r\n scrollPrev: () => void\r\n scrollNext: () => void\r\n canScrollPrev: boolean\r\n canScrollNext: boolean\r\n} & CarouselProps\r\n\r\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\r\n\r\nfunction useCarousel() {\r\n const context = React.useContext(CarouselContext)\r\n\r\n if (!context) {\r\n throw new Error(\"useCarousel must be used within a <Carousel />\")\r\n }\r\n\r\n return context\r\n}\r\n\r\nfunction Carousel({\r\n orientation = \"horizontal\",\r\n opts,\r\n setApi,\r\n plugins,\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & CarouselProps) {\r\n const [carouselRef, api] = useEmblaCarousel(\r\n {\r\n ...opts,\r\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\r\n },\r\n plugins\r\n )\r\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\r\n const [canScrollNext, setCanScrollNext] = React.useState(false)\r\n\r\n const onSelect = React.useCallback((api: CarouselApi) => {\r\n if (!api) return\r\n setCanScrollPrev(api.canScrollPrev())\r\n setCanScrollNext(api.canScrollNext())\r\n }, [])\r\n\r\n const scrollPrev = React.useCallback(() => {\r\n api?.scrollPrev()\r\n }, [api])\r\n\r\n const scrollNext = React.useCallback(() => {\r\n api?.scrollNext()\r\n }, [api])\r\n\r\n const handleKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"ArrowLeft\") {\r\n event.preventDefault()\r\n scrollPrev()\r\n } else if (event.key === \"ArrowRight\") {\r\n event.preventDefault()\r\n scrollNext()\r\n }\r\n },\r\n [scrollPrev, scrollNext]\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!api || !setApi) return\r\n setApi(api)\r\n }, [api, setApi])\r\n\r\n React.useEffect(() => {\r\n if (!api) return\r\n onSelect(api)\r\n api.on(\"reInit\", onSelect)\r\n api.on(\"select\", onSelect)\r\n\r\n return () => {\r\n api?.off(\"select\", onSelect)\r\n }\r\n }, [api, onSelect])\r\n\r\n return (\r\n <CarouselContext.Provider\r\n value={{\r\n carouselRef,\r\n api: api,\r\n opts,\r\n orientation:\r\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\r\n scrollPrev,\r\n scrollNext,\r\n canScrollPrev,\r\n canScrollNext,\r\n }}\r\n >\r\n <div\r\n onKeyDownCapture={handleKeyDown}\r\n className={cn(\"relative\", className)}\r\n role=\"region\"\r\n aria-roledescription=\"carousel\"\r\n data-slot=\"carousel\"\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </CarouselContext.Provider>\r\n )\r\n}\r\n\r\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const { carouselRef, orientation } = useCarousel()\r\n\r\n return (\r\n <div\r\n ref={carouselRef}\r\n className=\"overflow-hidden\"\r\n data-slot=\"carousel-content\"\r\n >\r\n <div\r\n className={cn(\r\n \"flex\",\r\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const { orientation } = useCarousel()\r\n\r\n return (\r\n <div\r\n role=\"group\"\r\n aria-roledescription=\"slide\"\r\n data-slot=\"carousel-item\"\r\n className={cn(\r\n \"min-w-0 shrink-0 grow-0 basis-full\",\r\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CarouselPrevious({\r\n className,\r\n variant = \"outline\",\r\n size = \"icon\",\r\n ...props\r\n}: React.ComponentProps<typeof Button>) {\r\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\r\n\r\n return (\r\n <Button\r\n data-slot=\"carousel-previous\"\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n \"absolute size-8 rounded-full\",\r\n orientation === \"horizontal\"\r\n ? \"top-1/2 -left-12 -translate-y-1/2\"\r\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\r\n className\r\n )}\r\n disabled={!canScrollPrev}\r\n onClick={scrollPrev}\r\n {...props}\r\n >\r\n <ArrowLeft />\r\n <span className=\"sr-only\">Previous slide</span>\r\n </Button>\r\n )\r\n}\r\n\r\nfunction CarouselNext({\r\n className,\r\n variant = \"outline\",\r\n size = \"icon\",\r\n ...props\r\n}: React.ComponentProps<typeof Button>) {\r\n const { orientation, scrollNext, canScrollNext } = useCarousel()\r\n\r\n return (\r\n <Button\r\n data-slot=\"carousel-next\"\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n \"absolute size-8 rounded-full\",\r\n orientation === \"horizontal\"\r\n ? \"top-1/2 -right-12 -translate-y-1/2\"\r\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\r\n className\r\n )}\r\n disabled={!canScrollNext}\r\n onClick={scrollNext}\r\n {...props}\r\n >\r\n <ArrowRight />\r\n <span className=\"sr-only\">Next slide</span>\r\n </Button>\r\n )\r\n}\r\n\r\nexport {\r\n type CarouselApi,\r\n Carousel,\r\n CarouselContent,\r\n CarouselItem,\r\n CarouselPrevious,\r\n CarouselNext,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as RechartsPrimitive from \"recharts\"\r\nimport type { TooltipValueType } from \"recharts\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\n// Format: { THEME_NAME: CSS_SELECTOR }\r\nconst THEMES = { light: \"\", dark: \".dark\" } as const\r\n\r\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const\r\ntype TooltipNameType = number | string\r\n\r\nexport type ChartConfig = Record<\r\n string,\r\n {\r\n label?: React.ReactNode\r\n icon?: React.ComponentType\r\n } & (\r\n | { color?: string; theme?: never }\r\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\r\n )\r\n>\r\n\r\ntype ChartContextProps = {\r\n config: ChartConfig\r\n}\r\n\r\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\r\n\r\nfunction useChart() {\r\n const context = React.useContext(ChartContext)\r\n\r\n if (!context) {\r\n throw new Error(\"useChart must be used within a <ChartContainer />\")\r\n }\r\n\r\n return context\r\n}\r\n\r\nfunction ChartContainer({\r\n id,\r\n className,\r\n children,\r\n config,\r\n initialDimension = INITIAL_DIMENSION,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n config: ChartConfig\r\n children: React.ComponentProps<\r\n typeof RechartsPrimitive.ResponsiveContainer\r\n >[\"children\"]\r\n initialDimension?: {\r\n width: number\r\n height: number\r\n }\r\n}) {\r\n const uniqueId = React.useId()\r\n const chartId = `chart-${id ?? uniqueId.replace(/:/g, \"\")}`\r\n\r\n return (\r\n <ChartContext.Provider value={{ config }}>\r\n <div\r\n data-slot=\"chart\"\r\n data-chart={chartId}\r\n className={cn(\r\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChartStyle id={chartId} config={config} />\r\n <RechartsPrimitive.ResponsiveContainer\r\n initialDimension={initialDimension}\r\n >\r\n {children}\r\n </RechartsPrimitive.ResponsiveContainer>\r\n </div>\r\n </ChartContext.Provider>\r\n )\r\n}\r\n\r\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\r\n const colorConfig = Object.entries(config).filter(\r\n ([, config]) => config.theme ?? config.color\r\n )\r\n\r\n if (!colorConfig.length) {\r\n return null\r\n }\r\n\r\n return (\r\n <style\r\n dangerouslySetInnerHTML={{\r\n __html: Object.entries(THEMES)\r\n .map(\r\n ([theme, prefix]) => `\r\n${prefix} [data-chart=${id}] {\r\n${colorConfig\r\n .map(([key, itemConfig]) => {\r\n const color =\r\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ??\r\n itemConfig.color\r\n return color ? ` --color-${key}: ${color};` : null\r\n })\r\n .join(\"\\n\")}\r\n}\r\n`\r\n )\r\n .join(\"\\n\"),\r\n }}\r\n />\r\n )\r\n}\r\n\r\nconst ChartTooltip = RechartsPrimitive.Tooltip\r\n\r\nfunction ChartTooltipContent({\r\n active,\r\n payload,\r\n className,\r\n indicator = \"dot\",\r\n hideLabel = false,\r\n hideIndicator = false,\r\n label,\r\n labelFormatter,\r\n labelClassName,\r\n formatter,\r\n color,\r\n nameKey,\r\n labelKey,\r\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\r\n React.ComponentProps<\"div\"> & {\r\n hideLabel?: boolean\r\n hideIndicator?: boolean\r\n indicator?: \"line\" | \"dot\" | \"dashed\"\r\n nameKey?: string\r\n labelKey?: string\r\n } & Omit<\r\n RechartsPrimitive.DefaultTooltipContentProps<\r\n TooltipValueType,\r\n TooltipNameType\r\n >,\r\n \"accessibilityLayer\"\r\n >) {\r\n const { config } = useChart()\r\n\r\n const tooltipLabel = React.useMemo(() => {\r\n if (hideLabel || !payload?.length) {\r\n return null\r\n }\r\n\r\n const [item] = payload\r\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? \"value\"}`\r\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\r\n const value =\r\n !labelKey && typeof label === \"string\"\r\n ? (config[label]?.label ?? label)\r\n : itemConfig?.label\r\n\r\n if (labelFormatter) {\r\n return (\r\n <div className={cn(\"font-medium\", labelClassName)}>\r\n {labelFormatter(value, payload)}\r\n </div>\r\n )\r\n }\r\n\r\n if (!value) {\r\n return null\r\n }\r\n\r\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\r\n }, [\r\n label,\r\n labelFormatter,\r\n payload,\r\n hideLabel,\r\n labelClassName,\r\n config,\r\n labelKey,\r\n ])\r\n\r\n if (!active || !payload?.length) {\r\n return null\r\n }\r\n\r\n const nestLabel = payload.length === 1 && indicator !== \"dot\"\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\r\n className\r\n )}\r\n >\r\n {!nestLabel ? tooltipLabel : null}\r\n <div className=\"grid gap-1.5\">\r\n {payload\r\n .filter((item) => item.type !== \"none\")\r\n .map((item, index) => {\r\n const key = `${nameKey ?? item.name ?? item.dataKey ?? \"value\"}`\r\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\r\n const indicatorColor = color ?? item.payload?.fill ?? item.color\r\n\r\n return (\r\n <div\r\n key={index}\r\n className={cn(\r\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\r\n indicator === \"dot\" && \"items-center\"\r\n )}\r\n >\r\n {formatter && item?.value !== undefined && item.name ? (\r\n formatter(item.value, item.name, item, index, item.payload)\r\n ) : (\r\n <>\r\n {itemConfig?.icon ? (\r\n <itemConfig.icon />\r\n ) : (\r\n !hideIndicator && (\r\n <div\r\n className={cn(\r\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\r\n {\r\n \"h-2.5 w-2.5\": indicator === \"dot\",\r\n \"w-1\": indicator === \"line\",\r\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\r\n indicator === \"dashed\",\r\n \"my-0.5\": nestLabel && indicator === \"dashed\",\r\n }\r\n )}\r\n style={\r\n {\r\n \"--color-bg\": indicatorColor,\r\n \"--color-border\": indicatorColor,\r\n } as React.CSSProperties\r\n }\r\n />\r\n )\r\n )}\r\n <div\r\n className={cn(\r\n \"flex flex-1 justify-between leading-none\",\r\n nestLabel ? \"items-end\" : \"items-center\"\r\n )}\r\n >\r\n <div className=\"grid gap-1.5\">\r\n {nestLabel ? tooltipLabel : null}\r\n <span className=\"text-muted-foreground\">\r\n {itemConfig?.label ?? item.name}\r\n </span>\r\n </div>\r\n {item.value != null && (\r\n <span className=\"font-mono font-medium text-foreground tabular-nums\">\r\n {typeof item.value === \"number\"\r\n ? item.value.toLocaleString()\r\n : String(item.value)}\r\n </span>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nconst ChartLegend = RechartsPrimitive.Legend\r\n\r\nfunction ChartLegendContent({\r\n className,\r\n hideIcon = false,\r\n payload,\r\n verticalAlign = \"bottom\",\r\n nameKey,\r\n}: React.ComponentProps<\"div\"> & {\r\n hideIcon?: boolean\r\n nameKey?: string\r\n} & RechartsPrimitive.DefaultLegendContentProps) {\r\n const { config } = useChart()\r\n\r\n if (!payload?.length) {\r\n return null\r\n }\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex items-center justify-center gap-4\",\r\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\r\n className\r\n )}\r\n >\r\n {payload\r\n .filter((item) => item.type !== \"none\")\r\n .map((item, index) => {\r\n const key = `${nameKey ?? item.dataKey ?? \"value\"}`\r\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\r\n\r\n return (\r\n <div\r\n key={index}\r\n className={cn(\r\n \"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\"\r\n )}\r\n >\r\n {itemConfig?.icon && !hideIcon ? (\r\n <itemConfig.icon />\r\n ) : (\r\n <div\r\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\r\n style={{\r\n backgroundColor: item.color,\r\n }}\r\n />\r\n )}\r\n {itemConfig?.label}\r\n </div>\r\n )\r\n })}\r\n </div>\r\n )\r\n}\r\n\r\n// Helper to extract item config from a payload.\r\nfunction getPayloadConfigFromPayload(\r\n config: ChartConfig,\r\n payload: unknown,\r\n key: string\r\n) {\r\n if (typeof payload !== \"object\" || payload === null) {\r\n return undefined\r\n }\r\n\r\n const payloadPayload =\r\n \"payload\" in payload &&\r\n typeof payload.payload === \"object\" &&\r\n payload.payload !== null\r\n ? payload.payload\r\n : undefined\r\n\r\n let configLabelKey: string = key\r\n\r\n if (\r\n key in payload &&\r\n typeof payload[key as keyof typeof payload] === \"string\"\r\n ) {\r\n configLabelKey = payload[key as keyof typeof payload] as string\r\n } else if (\r\n payloadPayload &&\r\n key in payloadPayload &&\r\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\r\n ) {\r\n configLabelKey = payloadPayload[\r\n key as keyof typeof payloadPayload\r\n ] as string\r\n }\r\n\r\n return configLabelKey in config ? config[configLabelKey] : config[key]\r\n}\r\n\r\nexport {\r\n ChartContainer,\r\n ChartTooltip,\r\n ChartTooltipContent,\r\n ChartLegend,\r\n ChartLegendContent,\r\n ChartStyle,\r\n}\r\n","import * as React from \"react\"\r\nimport { Area, AreaChart, Bar, BarChart, CartesianGrid, Line, LineChart, Pie, PieChart, XAxis, YAxis } from \"recharts\"\r\nimport { ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from \"@/components/ui/chart\"\r\n\r\n// Sample data for demos\r\nconst areaData = [\r\n { month: \"Jan\", desktop: 186, mobile: 80 },\r\n { month: \"Feb\", desktop: 305, mobile: 200 },\r\n { month: \"Mar\", desktop: 237, mobile: 120 },\r\n { month: \"Apr\", desktop: 73, mobile: 190 },\r\n { month: \"May\", desktop: 209, mobile: 130 },\r\n { month: \"Jun\", desktop: 214, mobile: 140 },\r\n]\r\n\r\nconst barData = [\r\n { month: \"Jan\", desktop: 186, mobile: 80 },\r\n { month: \"Feb\", desktop: 305, mobile: 200 },\r\n { month: \"Mar\", desktop: 237, mobile: 120 },\r\n { month: \"Apr\", desktop: 73, mobile: 190 },\r\n { month: \"May\", desktop: 209, mobile: 130 },\r\n { month: \"Jun\", desktop: 214, mobile: 140 },\r\n]\r\n\r\nconst lineData = [\r\n { month: \"Jan\", desktop: 186, mobile: 80 },\r\n { month: \"Feb\", desktop: 305, mobile: 200 },\r\n { month: \"Mar\", desktop: 237, mobile: 120 },\r\n { month: \"Apr\", desktop: 73, mobile: 190 },\r\n { month: \"May\", desktop: 209, mobile: 130 },\r\n { month: \"Jun\", desktop: 214, mobile: 140 },\r\n]\r\n\r\nconst pieData = [\r\n { browser: \"chrome\", visitors: 275, fill: \"var(--color-chrome)\" },\r\n { browser: \"safari\", visitors: 200, fill: \"var(--color-safari)\" },\r\n { browser: \"firefox\", visitors: 187, fill: \"var(--color-firefox)\" },\r\n { browser: \"edge\", visitors: 173, fill: \"var(--color-edge)\" },\r\n { browser: \"other\", visitors: 90, fill: \"var(--color-other)\" },\r\n]\r\n\r\nconst chartConfig = {\r\n desktop: {\r\n label: \"Desktop\",\r\n color: \"hsl(var(--chart-1))\",\r\n },\r\n mobile: {\r\n label: \"Mobile\",\r\n color: \"hsl(var(--chart-2))\",\r\n },\r\n} satisfies ChartConfig\r\n\r\nconst pieChartConfig = {\r\n visitors: { label: \"Visitors\" },\r\n chrome: { label: \"Chrome\", color: \"hsl(var(--chart-1))\" },\r\n safari: { label: \"Safari\", color: \"hsl(var(--chart-2))\" },\r\n firefox: { label: \"Firefox\", color: \"hsl(var(--chart-3))\" },\r\n edge: { label: \"Edge\", color: \"hsl(var(--chart-4))\" },\r\n other: { label: \"Other\", color: \"hsl(var(--chart-5))\" },\r\n} satisfies ChartConfig\r\n\r\nexport function AreaChartDemo({ className }: { className?: string }) {\r\n return (\r\n <ChartContainer config={chartConfig} className={className}>\r\n <AreaChart\r\n accessibilityLayer\r\n data={areaData}\r\n margin={{ left: 12, right: 12 }}\r\n >\r\n <CartesianGrid vertical={false} />\r\n <XAxis\r\n dataKey=\"month\"\r\n tickLine={false}\r\n axisLine={false}\r\n tickMargin={8}\r\n tickFormatter={(value) => value.slice(0, 3)}\r\n />\r\n <ChartTooltip cursor={false} content={<ChartTooltipContent />} />\r\n <Area\r\n dataKey=\"desktop\"\r\n type=\"natural\"\r\n fill=\"var(--color-desktop)\"\r\n fillOpacity={0.4}\r\n stroke=\"var(--color-desktop)\"\r\n stackId=\"a\"\r\n />\r\n <Area\r\n dataKey=\"mobile\"\r\n type=\"natural\"\r\n fill=\"var(--color-mobile)\"\r\n fillOpacity={0.4}\r\n stroke=\"var(--color-mobile)\"\r\n stackId=\"a\"\r\n />\r\n </AreaChart>\r\n </ChartContainer>\r\n )\r\n}\r\n\r\nexport function BarChartDemo({ className }: { className?: string }) {\r\n return (\r\n <ChartContainer config={chartConfig} className={className}>\r\n <BarChart accessibilityLayer data={barData}>\r\n <CartesianGrid vertical={false} />\r\n <XAxis\r\n dataKey=\"month\"\r\n tickLine={false}\r\n tickMargin={10}\r\n axisLine={false}\r\n tickFormatter={(value) => value.slice(0, 3)}\r\n />\r\n <ChartTooltip cursor={false} content={<ChartTooltipContent indicator=\"dashed\" />} />\r\n <Bar dataKey=\"desktop\" fill=\"var(--color-desktop)\" radius={4} />\r\n <Bar dataKey=\"mobile\" fill=\"var(--color-mobile)\" radius={4} />\r\n </BarChart>\r\n </ChartContainer>\r\n )\r\n}\r\n\r\nexport function LineChartDemo({ className }: { className?: string }) {\r\n return (\r\n <ChartContainer config={chartConfig} className={className}>\r\n <LineChart\r\n accessibilityLayer\r\n data={lineData}\r\n margin={{ left: 12, right: 12 }}\r\n >\r\n <CartesianGrid vertical={false} />\r\n <XAxis\r\n dataKey=\"month\"\r\n tickLine={false}\r\n axisLine={false}\r\n tickMargin={8}\r\n tickFormatter={(value) => value.slice(0, 3)}\r\n />\r\n <ChartTooltip cursor={false} content={<ChartTooltipContent />} />\r\n <Line\r\n dataKey=\"desktop\"\r\n type=\"monotone\"\r\n stroke=\"var(--color-desktop)\"\r\n strokeWidth={2}\r\n dot={false}\r\n />\r\n <Line\r\n dataKey=\"mobile\"\r\n type=\"monotone\"\r\n stroke=\"var(--color-mobile)\"\r\n strokeWidth={2}\r\n dot={false}\r\n />\r\n </LineChart>\r\n </ChartContainer>\r\n )\r\n}\r\n\r\nexport function PieChartDemo({ className }: { className?: string }) {\r\n return (\r\n <ChartContainer config={pieChartConfig} className={className}>\r\n <PieChart>\r\n <ChartTooltip cursor={false} content={<ChartTooltipContent hideLabel />} />\r\n <Pie\r\n data={pieData}\r\n dataKey=\"visitors\"\r\n nameKey=\"browser\"\r\n innerRadius={60}\r\n strokeWidth={5}\r\n />\r\n </PieChart>\r\n </ChartContainer>\r\n )\r\n}\r\n","import * as React from \"react\"\r\nimport { CheckIcon } from \"lucide-react\"\r\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Checkbox({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\r\n return (\r\n <CheckboxPrimitive.Root\r\n data-slot=\"checkbox\"\r\n className={cn(\r\n \"peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <CheckboxPrimitive.Indicator\r\n data-slot=\"checkbox-indicator\"\r\n className=\"grid place-content-center text-current transition-none\"\r\n >\r\n <CheckIcon className=\"size-3.5\" />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Checkbox }\r\n","\"use client\"\r\n\r\nimport { Collapsible as CollapsiblePrimitive } from \"radix-ui\"\r\n\r\nfunction Collapsible({\r\n ...props\r\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\r\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\r\n}\r\n\r\nfunction CollapsibleTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\r\n return (\r\n <CollapsiblePrimitive.CollapsibleTrigger\r\n data-slot=\"collapsible-trigger\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CollapsibleContent({\r\n ...props\r\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\r\n return (\r\n <CollapsiblePrimitive.CollapsibleContent\r\n data-slot=\"collapsible-content\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\r\n","import * as React from \"react\"\r\nimport { Command as CommandPrimitive } from \"cmdk\"\r\nimport { SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogDescription,\r\n DialogHeader,\r\n DialogTitle,\r\n} from \"@/components/ui/dialog\"\r\n\r\nfunction Command({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive>) {\r\n return (\r\n <CommandPrimitive\r\n data-slot=\"command\"\r\n className={cn(\r\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandDialog({\r\n title = \"Command Palette\",\r\n description = \"Search for a command to run...\",\r\n children,\r\n className,\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof Dialog> & {\r\n title?: string\r\n description?: string\r\n className?: string\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <Dialog {...props}>\r\n <DialogHeader className=\"sr-only\">\r\n <DialogTitle>{title}</DialogTitle>\r\n <DialogDescription>{description}</DialogDescription>\r\n </DialogHeader>\r\n <DialogContent\r\n className={cn(\"overflow-hidden p-0\", className)}\r\n showCloseButton={showCloseButton}\r\n >\r\n <Command className=\"**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\r\n {children}\r\n </Command>\r\n </DialogContent>\r\n </Dialog>\r\n )\r\n}\r\n\r\nfunction CommandInput({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\r\n return (\r\n <div\r\n data-slot=\"command-input-wrapper\"\r\n className=\"flex h-9 items-center gap-2 border-b px-3\"\r\n >\r\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\r\n <CommandPrimitive.Input\r\n data-slot=\"command-input\"\r\n className={cn(\r\n \"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction CommandList({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\r\n return (\r\n <CommandPrimitive.List\r\n data-slot=\"command-list\"\r\n className={cn(\r\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandEmpty({\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\r\n return (\r\n <CommandPrimitive.Empty\r\n data-slot=\"command-empty\"\r\n className=\"py-6 text-center text-sm\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandGroup({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\r\n return (\r\n <CommandPrimitive.Group\r\n data-slot=\"command-group\"\r\n className={cn(\r\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\r\n return (\r\n <CommandPrimitive.Separator\r\n data-slot=\"command-separator\"\r\n className={cn(\"-mx-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\r\n return (\r\n <CommandPrimitive.Item\r\n data-slot=\"command-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"command-shortcut\"\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Command,\r\n CommandDialog,\r\n CommandInput,\r\n CommandList,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandItem,\r\n CommandShortcut,\r\n CommandSeparator,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\r\nimport { ContextMenu as ContextMenuPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction ContextMenu({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\r\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\r\n}\r\n\r\nfunction ContextMenuTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\r\n return (\r\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\r\n )\r\n}\r\n\r\nfunction ContextMenuGroup({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\r\n return (\r\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\r\n )\r\n}\r\n\r\nfunction ContextMenuPortal({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\r\n return (\r\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\r\n )\r\n}\r\n\r\nfunction ContextMenuSub({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\r\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\r\n}\r\n\r\nfunction ContextMenuRadioGroup({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\r\n return (\r\n <ContextMenuPrimitive.RadioGroup\r\n data-slot=\"context-menu-radio-group\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuSubTrigger({\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <ContextMenuPrimitive.SubTrigger\r\n data-slot=\"context-menu-sub-trigger\"\r\n data-inset={inset}\r\n className={cn(\r\n \"flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon className=\"ml-auto\" />\r\n </ContextMenuPrimitive.SubTrigger>\r\n )\r\n}\r\n\r\nfunction ContextMenuSubContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\r\n return (\r\n <ContextMenuPrimitive.SubContent\r\n data-slot=\"context-menu-sub-content\"\r\n className={cn(\r\n \"z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\r\n return (\r\n <ContextMenuPrimitive.Portal>\r\n <ContextMenuPrimitive.Content\r\n data-slot=\"context-menu-content\"\r\n className={cn(\r\n \"z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </ContextMenuPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction ContextMenuItem({\r\n className,\r\n inset,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\r\n inset?: boolean\r\n variant?: \"default\" | \"destructive\"\r\n}) {\r\n return (\r\n <ContextMenuPrimitive.Item\r\n data-slot=\"context-menu-item\"\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\r\n return (\r\n <ContextMenuPrimitive.CheckboxItem\r\n data-slot=\"context-menu-checkbox-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <ContextMenuPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </ContextMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </ContextMenuPrimitive.CheckboxItem>\r\n )\r\n}\r\n\r\nfunction ContextMenuRadioItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\r\n return (\r\n <ContextMenuPrimitive.RadioItem\r\n data-slot=\"context-menu-radio-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <ContextMenuPrimitive.ItemIndicator>\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </ContextMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </ContextMenuPrimitive.RadioItem>\r\n )\r\n}\r\n\r\nfunction ContextMenuLabel({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <ContextMenuPrimitive.Label\r\n data-slot=\"context-menu-label\"\r\n data-inset={inset}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-medium text-foreground data-[inset]:pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\r\n return (\r\n <ContextMenuPrimitive.Separator\r\n data-slot=\"context-menu-separator\"\r\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"context-menu-shortcut\"\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n ContextMenu,\r\n ContextMenuTrigger,\r\n ContextMenuContent,\r\n ContextMenuItem,\r\n ContextMenuCheckboxItem,\r\n ContextMenuRadioItem,\r\n ContextMenuLabel,\r\n ContextMenuSeparator,\r\n ContextMenuShortcut,\r\n ContextMenuGroup,\r\n ContextMenuPortal,\r\n ContextMenuSub,\r\n ContextMenuSubContent,\r\n ContextMenuSubTrigger,\r\n ContextMenuRadioGroup,\r\n}\r\n","\"use client\";\r\nimport { format } from \"date-fns\";\r\nimport { Calendar as CalendarIcon } from \"lucide-react\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { Calendar } from \"@/components/ui/calendar\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { forwardRef } from \"react\";\r\n\r\nexport const DatePicker = forwardRef<\r\n HTMLDivElement,\r\n {\r\n date?: Date;\r\n setDate: (date?: Date) => void;\r\n }\r\n>(function DatePickerCmp({ date, setDate }, ref) {\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant={\"outline\"}\r\n className={cn(\r\n \"w-full justify-start text-left font-normal\",\r\n !date && \"text-muted-foreground\",\r\n )}\r\n >\r\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\r\n {date ? format(date, \"PPP\") : <span>Pick a date</span>}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" ref={ref}>\r\n <Calendar\r\n mode=\"single\"\r\n selected={date}\r\n onSelect={setDate}\r\n />\r\n\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n});\r\n","import * as React from \"react\"\r\nimport { XIcon } from \"lucide-react\"\r\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button } from \"@/components/ui/button\"\r\n\r\nfunction Dialog({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\r\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\r\n}\r\n\r\nfunction DialogTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\r\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\r\n}\r\n\r\nfunction DialogPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\r\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\r\n}\r\n\r\nfunction DialogClose({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\r\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\r\n}\r\n\r\nfunction DialogOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\r\n return (\r\n <DialogPrimitive.Overlay\r\n data-slot=\"dialog-overlay\"\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DialogContent({\r\n className,\r\n children,\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <DialogPortal data-slot=\"dialog-portal\">\r\n <DialogOverlay />\r\n <DialogPrimitive.Content\r\n data-slot=\"dialog-content\"\r\n className={cn(\r\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <DialogPrimitive.Close\r\n data-slot=\"dialog-close\"\r\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\r\n >\r\n <XIcon />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogPrimitive.Close>\r\n )}\r\n </DialogPrimitive.Content>\r\n </DialogPortal>\r\n )\r\n}\r\n\r\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"dialog-header\"\r\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DialogFooter({\r\n className,\r\n showCloseButton = false,\r\n children,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <div\r\n data-slot=\"dialog-footer\"\r\n className={cn(\r\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <DialogPrimitive.Close asChild>\r\n <Button variant=\"outline\">Close</Button>\r\n </DialogPrimitive.Close>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction DialogTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\r\n return (\r\n <DialogPrimitive.Title\r\n data-slot=\"dialog-title\"\r\n className={cn(\"text-lg leading-none font-semibold\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DialogDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\r\n return (\r\n <DialogPrimitive.Description\r\n data-slot=\"dialog-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Dialog,\r\n DialogClose,\r\n DialogContent,\r\n DialogDescription,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogOverlay,\r\n DialogPortal,\r\n DialogTitle,\r\n DialogTrigger,\r\n}\r\n","import * as React from \"react\"\r\nimport { Drawer as DrawerPrimitive } from \"vaul\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Drawer({\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\r\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\r\n}\r\n\r\nfunction DrawerTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\r\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\r\n}\r\n\r\nfunction DrawerPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\r\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\r\n}\r\n\r\nfunction DrawerClose({\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\r\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\r\n}\r\n\r\nfunction DrawerOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\r\n return (\r\n <DrawerPrimitive.Overlay\r\n data-slot=\"drawer-overlay\"\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DrawerContent({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\r\n return (\r\n <DrawerPortal data-slot=\"drawer-portal\">\r\n <DrawerOverlay />\r\n <DrawerPrimitive.Content\r\n data-slot=\"drawer-content\"\r\n className={cn(\r\n \"group/drawer-content fixed z-50 flex h-auto flex-col bg-background\",\r\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\r\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\r\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\r\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\r\n {children}\r\n </DrawerPrimitive.Content>\r\n </DrawerPortal>\r\n )\r\n}\r\n\r\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"drawer-header\"\r\n className={cn(\r\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"drawer-footer\"\r\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DrawerTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\r\n return (\r\n <DrawerPrimitive.Title\r\n data-slot=\"drawer-title\"\r\n className={cn(\"font-semibold text-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DrawerDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\r\n return (\r\n <DrawerPrimitive.Description\r\n data-slot=\"drawer-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Drawer,\r\n DrawerPortal,\r\n DrawerOverlay,\r\n DrawerTrigger,\r\n DrawerClose,\r\n DrawerContent,\r\n DrawerHeader,\r\n DrawerFooter,\r\n DrawerTitle,\r\n DrawerDescription,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\r\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction DropdownMenu({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\r\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\r\n}\r\n\r\nfunction DropdownMenuPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\r\n return (\r\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\r\n )\r\n}\r\n\r\nfunction DropdownMenuTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\r\n return (\r\n <DropdownMenuPrimitive.Trigger\r\n data-slot=\"dropdown-menu-trigger\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuContent({\r\n className,\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\r\n return (\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n data-slot=\"dropdown-menu-content\"\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction DropdownMenuGroup({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\r\n return (\r\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\r\n )\r\n}\r\n\r\nfunction DropdownMenuItem({\r\n className,\r\n inset,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n variant?: \"default\" | \"destructive\"\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.Item\r\n data-slot=\"dropdown-menu-item\"\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\r\n return (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n data-slot=\"dropdown-menu-checkbox-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n )\r\n}\r\n\r\nfunction DropdownMenuRadioGroup({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\r\n return (\r\n <DropdownMenuPrimitive.RadioGroup\r\n data-slot=\"dropdown-menu-radio-group\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuRadioItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\r\n return (\r\n <DropdownMenuPrimitive.RadioItem\r\n data-slot=\"dropdown-menu-radio-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n )\r\n}\r\n\r\nfunction DropdownMenuLabel({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.Label\r\n data-slot=\"dropdown-menu-label\"\r\n data-inset={inset}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\r\n return (\r\n <DropdownMenuPrimitive.Separator\r\n data-slot=\"dropdown-menu-separator\"\r\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"dropdown-menu-shortcut\"\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuSub({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\r\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\r\n}\r\n\r\nfunction DropdownMenuSubTrigger({\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.SubTrigger\r\n data-slot=\"dropdown-menu-sub-trigger\"\r\n data-inset={inset}\r\n className={cn(\r\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon className=\"ml-auto size-4\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n )\r\n}\r\n\r\nfunction DropdownMenuSubContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\r\n return (\r\n <DropdownMenuPrimitive.SubContent\r\n data-slot=\"dropdown-menu-sub-content\"\r\n className={cn(\r\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuPortal,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuGroup,\r\n DropdownMenuLabel,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioGroup,\r\n DropdownMenuRadioItem,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuSub,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuSubContent,\r\n}\r\n","import { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"empty\"\r\n className={cn(\r\n \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"empty-header\"\r\n className={cn(\r\n \"flex max-w-sm flex-col items-center gap-2 text-center\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst emptyMediaVariants = cva(\r\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n icon: \"flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction EmptyMedia({\r\n className,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\r\n return (\r\n <div\r\n data-slot=\"empty-icon\"\r\n data-variant={variant}\r\n className={cn(emptyMediaVariants({ variant, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"empty-title\"\r\n className={cn(\"text-lg font-medium tracking-tight\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\r\n return (\r\n <div\r\n data-slot=\"empty-description\"\r\n className={cn(\r\n \"text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"empty-content\"\r\n className={cn(\r\n \"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Empty,\r\n EmptyHeader,\r\n EmptyTitle,\r\n EmptyDescription,\r\n EmptyContent,\r\n EmptyMedia,\r\n}\r\n","\"use client\"\r\n\r\nimport { useMemo } from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Label } from \"@/components/ui/label\"\r\nimport { Separator } from \"@/components/ui/separator\"\r\n\r\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\r\n return (\r\n <fieldset\r\n data-slot=\"field-set\"\r\n className={cn(\r\n \"flex flex-col gap-6\",\r\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldLegend({\r\n className,\r\n variant = \"legend\",\r\n ...props\r\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\r\n return (\r\n <legend\r\n data-slot=\"field-legend\"\r\n data-variant={variant}\r\n className={cn(\r\n \"mb-3 font-medium\",\r\n \"data-[variant=legend]:text-base\",\r\n \"data-[variant=label]:text-sm\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"field-group\"\r\n className={cn(\r\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst fieldVariants = cva(\r\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\r\n {\r\n variants: {\r\n orientation: {\r\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\r\n horizontal: [\r\n \"flex-row items-center\",\r\n \"[&>[data-slot=field-label]]:flex-auto\",\r\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\r\n ],\r\n responsive: [\r\n \"flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto\",\r\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\r\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\r\n ],\r\n },\r\n },\r\n defaultVariants: {\r\n orientation: \"vertical\",\r\n },\r\n }\r\n)\r\n\r\nfunction Field({\r\n className,\r\n orientation = \"vertical\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\r\n return (\r\n <div\r\n role=\"group\"\r\n data-slot=\"field\"\r\n data-orientation={orientation}\r\n className={cn(fieldVariants({ orientation }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"field-content\"\r\n className={cn(\r\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldLabel({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof Label>) {\r\n return (\r\n <Label\r\n data-slot=\"field-label\"\r\n className={cn(\r\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\r\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\r\n \"has-data-[state=checked]:border-primary has-data-[state=checked]:bg-primary/5 dark:has-data-[state=checked]:bg-primary/10\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"field-label\"\r\n className={cn(\r\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\r\n return (\r\n <p\r\n data-slot=\"field-description\"\r\n className={cn(\r\n \"text-sm leading-normal font-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance\",\r\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\r\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldSeparator({\r\n children,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n children?: React.ReactNode\r\n}) {\r\n return (\r\n <div\r\n data-slot=\"field-separator\"\r\n data-content={!!children}\r\n className={cn(\r\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <Separator className=\"absolute inset-0 top-1/2\" />\r\n {children && (\r\n <span\r\n className=\"relative mx-auto block w-fit bg-background px-2 text-muted-foreground\"\r\n data-slot=\"field-separator-content\"\r\n >\r\n {children}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction FieldError({\r\n className,\r\n children,\r\n errors,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n errors?: Array<{ message?: string } | undefined>\r\n}) {\r\n const content = useMemo(() => {\r\n if (children) {\r\n return children\r\n }\r\n\r\n if (!errors?.length) {\r\n return null\r\n }\r\n\r\n const uniqueErrors = [\r\n ...new Map(errors.map((error) => [error?.message, error])).values(),\r\n ]\r\n\r\n if (uniqueErrors?.length == 1) {\r\n return uniqueErrors[0]?.message\r\n }\r\n\r\n return (\r\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\r\n {uniqueErrors.map(\r\n (error, index) =>\r\n error?.message && <li key={index}>{error.message}</li>\r\n )}\r\n </ul>\r\n )\r\n }, [children, errors])\r\n\r\n if (!content) {\r\n return null\r\n }\r\n\r\n return (\r\n <div\r\n role=\"alert\"\r\n data-slot=\"field-error\"\r\n className={cn(\"text-sm font-normal text-destructive\", className)}\r\n {...props}\r\n >\r\n {content}\r\n </div>\r\n )\r\n}\r\n\r\nexport {\r\n Field,\r\n FieldLabel,\r\n FieldDescription,\r\n FieldError,\r\n FieldGroup,\r\n FieldLegend,\r\n FieldSeparator,\r\n FieldSet,\r\n FieldContent,\r\n FieldTitle,\r\n}\r\n","'use client'\r\n\r\nimport * as React from \"react\"\r\nimport type { Label as LabelPrimitive } from \"radix-ui\"\r\nimport { Slot } from \"radix-ui\"\r\nimport {\r\n Controller,\r\n FormProvider,\r\n useFormContext,\r\n useFormState,\r\n type ControllerProps,\r\n type FieldPath,\r\n type FieldValues,\r\n} from \"react-hook-form\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Label } from \"@/components/ui/label\"\r\n\r\nconst Form = FormProvider\r\n\r\ntype FormFieldContextValue<\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n> = {\r\n name: TName\r\n}\r\n\r\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\r\n {} as FormFieldContextValue\r\n)\r\n\r\nconst FormField = <\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n>({\r\n ...props\r\n}: ControllerProps<TFieldValues, TName>) => {\r\n return (\r\n <FormFieldContext.Provider value={{ name: props.name }}>\r\n <Controller {...props} />\r\n </FormFieldContext.Provider>\r\n )\r\n}\r\n\r\nconst useFormField = () => {\r\n const fieldContext = React.useContext(FormFieldContext)\r\n const itemContext = React.useContext(FormItemContext)\r\n const { getFieldState } = useFormContext()\r\n const formState = useFormState({ name: fieldContext.name })\r\n const fieldState = getFieldState(fieldContext.name, formState)\r\n\r\n if (!fieldContext) {\r\n throw new Error(\"useFormField should be used within <FormField>\")\r\n }\r\n\r\n const { id } = itemContext\r\n\r\n return {\r\n id,\r\n name: fieldContext.name,\r\n formItemId: `${id}-form-item`,\r\n formDescriptionId: `${id}-form-item-description`,\r\n formMessageId: `${id}-form-item-message`,\r\n ...fieldState,\r\n }\r\n}\r\n\r\ntype FormItemContextValue = {\r\n id: string\r\n}\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue>(\r\n {} as FormItemContextValue\r\n)\r\n\r\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const id = React.useId()\r\n\r\n return (\r\n <FormItemContext.Provider value={{ id }}>\r\n <div\r\n data-slot=\"form-item\"\r\n className={cn(\"grid gap-2\", className)}\r\n {...props}\r\n />\r\n </FormItemContext.Provider>\r\n )\r\n}\r\n\r\nfunction FormLabel({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\r\n const { error, formItemId } = useFormField()\r\n\r\n return (\r\n <Label\r\n data-slot=\"form-label\"\r\n data-error={!!error}\r\n className={cn(\"data-[error=true]:text-destructive\", className)}\r\n htmlFor={formItemId}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot.Root>) {\r\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\r\n\r\n return (\r\n <Slot.Root\r\n data-slot=\"form-control\"\r\n id={formItemId}\r\n aria-describedby={\r\n !error\r\n ? `${formDescriptionId}`\r\n : `${formDescriptionId} ${formMessageId}`\r\n }\r\n aria-invalid={!!error}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\r\n const { formDescriptionId } = useFormField()\r\n\r\n return (\r\n <p\r\n data-slot=\"form-description\"\r\n id={formDescriptionId}\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\r\n const { error, formMessageId } = useFormField()\r\n const body = error ? String(error?.message ?? \"\") : props.children\r\n\r\n if (!body) {\r\n return null\r\n }\r\n\r\n return (\r\n <p\r\n data-slot=\"form-message\"\r\n id={formMessageId}\r\n className={cn(\"text-sm text-destructive\", className)}\r\n {...props}\r\n >\r\n {body}\r\n </p>\r\n )\r\n}\r\n\r\nexport {\r\n useFormField,\r\n Form,\r\n FormItem,\r\n FormLabel,\r\n FormControl,\r\n FormDescription,\r\n FormMessage,\r\n FormField,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { HoverCard as HoverCardPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction HoverCard({\r\n ...props\r\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\r\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\r\n}\r\n\r\nfunction HoverCardTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\r\n return (\r\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\r\n )\r\n}\r\n\r\nfunction HoverCardContent({\r\n className,\r\n align = \"center\",\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\r\n return (\r\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\r\n <HoverCardPrimitive.Content\r\n data-slot=\"hover-card-content\"\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </HoverCardPrimitive.Portal>\r\n )\r\n}\r\n\r\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\r\n","import * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\r\n return (\r\n <input\r\n type={type}\r\n data-slot=\"input\"\r\n className={cn(\r\n \"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\r\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\r\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Input }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button } from \"@/components/ui/button\"\r\nimport { Input } from \"@/components/ui/input\"\r\nimport { Textarea } from \"@/components/ui/textarea\"\r\n\r\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"input-group\"\r\n role=\"group\"\r\n className={cn(\r\n \"group/input-group relative flex w-full items-center rounded-md border border-input shadow-xs transition-[color,box-shadow] outline-none dark:bg-input/30\",\r\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\r\n\r\n // Variants based on alignment.\r\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\r\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\r\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\r\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\r\n\r\n // Focus state.\r\n \"has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50\",\r\n\r\n // Error state.\r\n \"has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\r\n\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst inputGroupAddonVariants = cva(\r\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\r\n {\r\n variants: {\r\n align: {\r\n \"inline-start\":\r\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\r\n \"inline-end\":\r\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\r\n \"block-start\":\r\n \"order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3\",\r\n \"block-end\":\r\n \"order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3\",\r\n },\r\n },\r\n defaultVariants: {\r\n align: \"inline-start\",\r\n },\r\n }\r\n)\r\n\r\nfunction InputGroupAddon({\r\n className,\r\n align = \"inline-start\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\r\n return (\r\n <div\r\n role=\"group\"\r\n data-slot=\"input-group-addon\"\r\n data-align={align}\r\n className={cn(inputGroupAddonVariants({ align }), className)}\r\n onClick={(e) => {\r\n if ((e.target as HTMLElement).closest(\"button\")) {\r\n return\r\n }\r\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\r\n }}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst inputGroupButtonVariants = cva(\r\n \"flex items-center gap-2 text-sm shadow-none\",\r\n {\r\n variants: {\r\n size: {\r\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\r\n sm: \"h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5\",\r\n \"icon-xs\":\r\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\r\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"xs\",\r\n },\r\n }\r\n)\r\n\r\nfunction InputGroupButton({\r\n className,\r\n type = \"button\",\r\n variant = \"ghost\",\r\n size = \"xs\",\r\n ...props\r\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\r\n VariantProps<typeof inputGroupButtonVariants>) {\r\n return (\r\n <Button\r\n type={type}\r\n data-size={size}\r\n variant={variant}\r\n className={cn(inputGroupButtonVariants({ size }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n className={cn(\r\n \"flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputGroupInput({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"input\">) {\r\n return (\r\n <Input\r\n data-slot=\"input-group-control\"\r\n className={cn(\r\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputGroupTextarea({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"textarea\">) {\r\n return (\r\n <Textarea\r\n data-slot=\"input-group-control\"\r\n className={cn(\r\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n InputGroup,\r\n InputGroupAddon,\r\n InputGroupButton,\r\n InputGroupText,\r\n InputGroupInput,\r\n InputGroupTextarea,\r\n}\r\n","'use client'\n\nimport * as React from \"react\"\r\nimport { OTPInput, OTPInputContext } from \"input-otp\"\r\nimport { MinusIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction InputOTP({\r\n className,\r\n containerClassName,\r\n ...props\r\n}: React.ComponentProps<typeof OTPInput> & {\r\n containerClassName?: string\r\n}) {\r\n return (\r\n <OTPInput\r\n data-slot=\"input-otp\"\r\n containerClassName={cn(\r\n \"flex items-center gap-2 has-disabled:opacity-50\",\r\n containerClassName\r\n )}\r\n className={cn(\"disabled:cursor-not-allowed\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"input-otp-group\"\r\n className={cn(\"flex items-center\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputOTPSlot({\r\n index,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n index: number\r\n}) {\r\n const inputOTPContext = React.useContext(OTPInputContext)\r\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\r\n\r\n return (\r\n <div\r\n data-slot=\"input-otp-slot\"\r\n data-active={isActive}\r\n className={cn(\r\n \"relative flex h-9 w-9 items-center justify-center border-y border-r border-input text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {char}\r\n {hasFakeCaret && (\r\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\r\n <div className=\"h-4 w-px animate-caret-blink bg-foreground duration-1000\" />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\r\n <MinusIcon />\r\n </div>\r\n )\r\n}\r\n\r\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Separator } from \"@/components/ui/separator\"\r\n\r\nfunction ItemGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n role=\"list\"\r\n data-slot=\"item-group\"\r\n className={cn(\"group/item-group flex flex-col\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof Separator>) {\r\n return (\r\n <Separator\r\n data-slot=\"item-separator\"\r\n orientation=\"horizontal\"\r\n className={cn(\"my-0\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst itemVariants = cva(\r\n \"group/item flex flex-wrap items-center rounded-md border border-transparent text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-accent/50\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n outline: \"border-border\",\r\n muted: \"bg-muted/50\",\r\n },\r\n size: {\r\n default: \"gap-4 p-4\",\r\n sm: \"gap-2.5 px-4 py-3\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Item({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"div\"> &\r\n VariantProps<typeof itemVariants> & { asChild?: boolean }) {\r\n const Comp = asChild ? Slot.Root : \"div\"\r\n return (\r\n <Comp\r\n data-slot=\"item\"\r\n data-variant={variant}\r\n data-size={size}\r\n className={cn(itemVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst itemMediaVariants = cva(\r\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n icon: \"size-8 rounded-sm border bg-muted [&_svg:not([class*='size-'])]:size-4\",\r\n image:\r\n \"size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction ItemMedia({\r\n className,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof itemMediaVariants>) {\r\n return (\r\n <div\r\n data-slot=\"item-media\"\r\n data-variant={variant}\r\n className={cn(itemMediaVariants({ variant, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-content\"\r\n className={cn(\r\n \"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-title\"\r\n className={cn(\r\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemDescription({ className, ...props }: React.ComponentProps<\"p\">) {\r\n return (\r\n <p\r\n data-slot=\"item-description\"\r\n className={cn(\r\n \"line-clamp-2 text-sm leading-normal font-normal text-balance text-muted-foreground\",\r\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemActions({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-actions\"\r\n className={cn(\"flex items-center gap-2\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-header\"\r\n className={cn(\r\n \"flex basis-full items-center justify-between gap-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemFooter({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-footer\"\r\n className={cn(\r\n \"flex basis-full items-center justify-between gap-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Item,\r\n ItemMedia,\r\n ItemContent,\r\n ItemActions,\r\n ItemGroup,\r\n ItemSeparator,\r\n ItemTitle,\r\n ItemDescription,\r\n ItemHeader,\r\n ItemFooter,\r\n}\r\n","import { cn } from \"@/lib/utils\"\r\n\r\nfunction Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\r\n return (\r\n <kbd\r\n data-slot=\"kbd\"\r\n className={cn(\r\n \"pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none\",\r\n \"[&_svg:not([class*='size-'])]:size-3\",\r\n \"[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction KbdGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <kbd\r\n data-slot=\"kbd-group\"\r\n className={cn(\"inline-flex items-center gap-1\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Kbd, KbdGroup }\r\n","import * as React from \"react\"\r\nimport { Label as LabelPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Label({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\r\n return (\r\n <LabelPrimitive.Root\r\n data-slot=\"label\"\r\n className={cn(\r\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Label }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\r\nimport { Menubar as MenubarPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Menubar({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\r\n return (\r\n <MenubarPrimitive.Root\r\n data-slot=\"menubar\"\r\n className={cn(\r\n \"flex h-9 items-center gap-1 rounded-md border bg-background p-1 shadow-xs\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarMenu({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\r\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\r\n}\r\n\r\nfunction MenubarGroup({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\r\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\r\n}\r\n\r\nfunction MenubarPortal({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\r\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\r\n}\r\n\r\nfunction MenubarRadioGroup({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\r\n return (\r\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\r\n )\r\n}\r\n\r\nfunction MenubarTrigger({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\r\n return (\r\n <MenubarPrimitive.Trigger\r\n data-slot=\"menubar-trigger\"\r\n className={cn(\r\n \"flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarContent({\r\n className,\r\n align = \"start\",\r\n alignOffset = -4,\r\n sideOffset = 8,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\r\n return (\r\n <MenubarPortal>\r\n <MenubarPrimitive.Content\r\n data-slot=\"menubar-content\"\r\n align={align}\r\n alignOffset={alignOffset}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </MenubarPortal>\r\n )\r\n}\r\n\r\nfunction MenubarItem({\r\n className,\r\n inset,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\r\n inset?: boolean\r\n variant?: \"default\" | \"destructive\"\r\n}) {\r\n return (\r\n <MenubarPrimitive.Item\r\n data-slot=\"menubar-item\"\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\r\n return (\r\n <MenubarPrimitive.CheckboxItem\r\n data-slot=\"menubar-checkbox-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <MenubarPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </MenubarPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </MenubarPrimitive.CheckboxItem>\r\n )\r\n}\r\n\r\nfunction MenubarRadioItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\r\n return (\r\n <MenubarPrimitive.RadioItem\r\n data-slot=\"menubar-radio-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <MenubarPrimitive.ItemIndicator>\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </MenubarPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </MenubarPrimitive.RadioItem>\r\n )\r\n}\r\n\r\nfunction MenubarLabel({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <MenubarPrimitive.Label\r\n data-slot=\"menubar-label\"\r\n data-inset={inset}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\r\n return (\r\n <MenubarPrimitive.Separator\r\n data-slot=\"menubar-separator\"\r\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"menubar-shortcut\"\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarSub({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\r\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\r\n}\r\n\r\nfunction MenubarSubTrigger({\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <MenubarPrimitive.SubTrigger\r\n data-slot=\"menubar-sub-trigger\"\r\n data-inset={inset}\r\n className={cn(\r\n \"flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\r\n </MenubarPrimitive.SubTrigger>\r\n )\r\n}\r\n\r\nfunction MenubarSubContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\r\n return (\r\n <MenubarPrimitive.SubContent\r\n data-slot=\"menubar-sub-content\"\r\n className={cn(\r\n \"z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Menubar,\r\n MenubarPortal,\r\n MenubarMenu,\r\n MenubarTrigger,\r\n MenubarContent,\r\n MenubarGroup,\r\n MenubarSeparator,\r\n MenubarLabel,\r\n MenubarItem,\r\n MenubarShortcut,\r\n MenubarCheckboxItem,\r\n MenubarRadioGroup,\r\n MenubarRadioItem,\r\n MenubarSub,\r\n MenubarSubTrigger,\r\n MenubarSubContent,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva } from \"class-variance-authority\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\nimport { NavigationMenu as NavigationMenuPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction NavigationMenu({\r\n className,\r\n children,\r\n viewport = true,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\r\n viewport?: boolean\r\n}) {\r\n return (\r\n <NavigationMenuPrimitive.Root\r\n data-slot=\"navigation-menu\"\r\n data-viewport={viewport}\r\n className={cn(\r\n \"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {viewport && <NavigationMenuViewport />}\r\n </NavigationMenuPrimitive.Root>\r\n )\r\n}\r\n\r\nfunction NavigationMenuList({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\r\n return (\r\n <NavigationMenuPrimitive.List\r\n data-slot=\"navigation-menu-list\"\r\n className={cn(\r\n \"group flex flex-1 list-none items-center justify-center gap-1\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction NavigationMenuItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\r\n return (\r\n <NavigationMenuPrimitive.Item\r\n data-slot=\"navigation-menu-item\"\r\n className={cn(\"relative\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst navigationMenuTriggerStyle = cva(\r\n \"group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-[color,box-shadow] outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=open]:bg-accent/50 data-[state=open]:text-accent-foreground data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent\"\r\n)\r\n\r\nfunction NavigationMenuTrigger({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\r\n return (\r\n <NavigationMenuPrimitive.Trigger\r\n data-slot=\"navigation-menu-trigger\"\r\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\r\n {...props}\r\n >\r\n {children}{\" \"}\r\n <ChevronDownIcon\r\n className=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\r\n aria-hidden=\"true\"\r\n />\r\n </NavigationMenuPrimitive.Trigger>\r\n )\r\n}\r\n\r\nfunction NavigationMenuContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\r\n return (\r\n <NavigationMenuPrimitive.Content\r\n data-slot=\"navigation-menu-content\"\r\n className={cn(\r\n \"top-0 left-0 w-full p-2 pr-2.5 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out md:absolute md:w-auto\",\r\n \"group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction NavigationMenuViewport({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\r\n return (\r\n <div\r\n className={cn(\r\n \"absolute top-full left-0 isolate z-50 flex justify-center\"\r\n )}\r\n >\r\n <NavigationMenuPrimitive.Viewport\r\n data-slot=\"navigation-menu-viewport\"\r\n className={cn(\r\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction NavigationMenuLink({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\r\n return (\r\n <NavigationMenuPrimitive.Link\r\n data-slot=\"navigation-menu-link\"\r\n className={cn(\r\n \"flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground data-[active=true]:hover:bg-accent data-[active=true]:focus:bg-accent [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction NavigationMenuIndicator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\r\n return (\r\n <NavigationMenuPrimitive.Indicator\r\n data-slot=\"navigation-menu-indicator\"\r\n className={cn(\r\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\r\n </NavigationMenuPrimitive.Indicator>\r\n )\r\n}\r\n\r\nexport {\r\n NavigationMenu,\r\n NavigationMenuList,\r\n NavigationMenuItem,\r\n NavigationMenuContent,\r\n NavigationMenuTrigger,\r\n NavigationMenuLink,\r\n NavigationMenuIndicator,\r\n NavigationMenuViewport,\r\n navigationMenuTriggerStyle,\r\n}\r\n","import * as React from \"react\"\r\nimport {\r\n ChevronLeftIcon,\r\n ChevronRightIcon,\r\n MoreHorizontalIcon,\r\n} from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { buttonVariants, type Button } from \"@/components/ui/button\"\r\n\r\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\r\n return (\r\n <nav\r\n role=\"navigation\"\r\n aria-label=\"pagination\"\r\n data-slot=\"pagination\"\r\n className={cn(\"mx-auto flex w-full justify-center\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PaginationContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"ul\">) {\r\n return (\r\n <ul\r\n data-slot=\"pagination-content\"\r\n className={cn(\"flex flex-row items-center gap-1\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\r\n return <li data-slot=\"pagination-item\" {...props} />\r\n}\r\n\r\ntype PaginationLinkProps = {\r\n isActive?: boolean\r\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\r\n React.ComponentProps<\"a\">\r\n\r\nfunction PaginationLink({\r\n className,\r\n isActive,\r\n size = \"icon\",\r\n ...props\r\n}: PaginationLinkProps) {\r\n return (\r\n <a\r\n aria-current={isActive ? \"page\" : undefined}\r\n data-slot=\"pagination-link\"\r\n data-active={isActive}\r\n className={cn(\r\n buttonVariants({\r\n variant: isActive ? \"outline\" : \"ghost\",\r\n size,\r\n }),\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PaginationPrevious({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PaginationLink>) {\r\n return (\r\n <PaginationLink\r\n aria-label=\"Go to previous page\"\r\n size=\"default\"\r\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\r\n {...props}\r\n >\r\n <ChevronLeftIcon />\r\n <span className=\"hidden sm:block\">Previous</span>\r\n </PaginationLink>\r\n )\r\n}\r\n\r\nfunction PaginationNext({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PaginationLink>) {\r\n return (\r\n <PaginationLink\r\n aria-label=\"Go to next page\"\r\n size=\"default\"\r\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\r\n {...props}\r\n >\r\n <span className=\"hidden sm:block\">Next</span>\r\n <ChevronRightIcon />\r\n </PaginationLink>\r\n )\r\n}\r\n\r\nfunction PaginationEllipsis({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n aria-hidden\r\n data-slot=\"pagination-ellipsis\"\r\n className={cn(\"flex size-9 items-center justify-center\", className)}\r\n {...props}\r\n >\r\n <MoreHorizontalIcon className=\"size-4\" />\r\n <span className=\"sr-only\">More pages</span>\r\n </span>\r\n )\r\n}\r\n\r\nexport {\r\n Pagination,\r\n PaginationContent,\r\n PaginationLink,\r\n PaginationItem,\r\n PaginationPrevious,\r\n PaginationNext,\r\n PaginationEllipsis,\r\n}\r\n","import * as React from \"react\"\r\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Popover({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\r\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\r\n}\r\n\r\nfunction PopoverTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\r\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\r\n}\r\n\r\nfunction PopoverContent({\r\n className,\r\n align = \"center\",\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\r\n return (\r\n <PopoverPrimitive.Portal>\r\n <PopoverPrimitive.Content\r\n data-slot=\"popover-content\"\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </PopoverPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction PopoverAnchor({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\r\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\r\n}\r\n\r\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"popover-header\"\r\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\r\n return (\r\n <div\r\n data-slot=\"popover-title\"\r\n className={cn(\"font-medium\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PopoverDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"p\">) {\r\n return (\r\n <p\r\n data-slot=\"popover-description\"\r\n className={cn(\"text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Popover,\r\n PopoverTrigger,\r\n PopoverContent,\r\n PopoverAnchor,\r\n PopoverHeader,\r\n PopoverTitle,\r\n PopoverDescription,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Progress as ProgressPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Progress({\r\n className,\r\n value,\r\n ...props\r\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\r\n return (\r\n <ProgressPrimitive.Root\r\n data-slot=\"progress\"\r\n className={cn(\r\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ProgressPrimitive.Indicator\r\n data-slot=\"progress-indicator\"\r\n className=\"h-full w-full flex-1 bg-primary transition-all\"\r\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\r\n />\r\n </ProgressPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Progress }\r\n","import * as React from \"react\"\r\nimport { CircleIcon } from \"lucide-react\"\r\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction RadioGroup({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\r\n return (\r\n <RadioGroupPrimitive.Root\r\n data-slot=\"radio-group\"\r\n className={cn(\"grid gap-3\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction RadioGroupItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\r\n return (\r\n <RadioGroupPrimitive.Item\r\n data-slot=\"radio-group-item\"\r\n className={cn(\r\n \"aspect-square size-4 shrink-0 rounded-full border border-input text-primary shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <RadioGroupPrimitive.Indicator\r\n data-slot=\"radio-group-indicator\"\r\n className=\"relative flex items-center justify-center\"\r\n >\r\n <CircleIcon className=\"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-primary\" />\r\n </RadioGroupPrimitive.Indicator>\r\n </RadioGroupPrimitive.Item>\r\n )\r\n}\r\n\r\nexport { RadioGroup, RadioGroupItem }\r\n","\"use client\"\r\n\r\nimport { GripVerticalIcon } from \"lucide-react\"\r\nimport * as ResizablePrimitive from \"react-resizable-panels\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction ResizablePanelGroup({\r\n className,\r\n direction,\r\n ...props\r\n}: (ResizablePrimitive.GroupProps | any) & { direction?: 'horizontal' | 'vertical' }) {\r\n return (\r\n <ResizablePrimitive.Group\r\n data-slot=\"resizable-panel-group\"\r\n orientation={props.orientation || direction}\r\n className={cn(\r\n \"flex h-full w-full aria-[orientation=vertical]:flex-col\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\r\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\r\n}\r\n\r\nfunction ResizableHandle({\r\n withHandle,\r\n className,\r\n ...props\r\n}: ResizablePrimitive.SeparatorProps & {\r\n withHandle?: boolean\r\n}) {\r\n return (\r\n <ResizablePrimitive.Separator\r\n data-slot=\"resizable-handle\"\r\n className={cn(\r\n \"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {withHandle && (\r\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border\">\r\n <GripVerticalIcon className=\"size-2.5\" />\r\n </div>\r\n )}\r\n </ResizablePrimitive.Separator>\r\n )\r\n}\r\n\r\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup }\r\n","import * as React from \"react\"\r\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction ScrollArea({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\r\n return (\r\n <ScrollAreaPrimitive.Root\r\n data-slot=\"scroll-area\"\r\n className={cn(\"relative\", className)}\r\n {...props}\r\n >\r\n <ScrollAreaPrimitive.Viewport\r\n data-slot=\"scroll-area-viewport\"\r\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1\"\r\n >\r\n {children}\r\n </ScrollAreaPrimitive.Viewport>\r\n <ScrollBar />\r\n <ScrollAreaPrimitive.Corner />\r\n </ScrollAreaPrimitive.Root>\r\n )\r\n}\r\n\r\nfunction ScrollBar({\r\n className,\r\n orientation = \"vertical\",\r\n ...props\r\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\r\n return (\r\n <ScrollAreaPrimitive.ScrollAreaScrollbar\r\n data-slot=\"scroll-area-scrollbar\"\r\n orientation={orientation}\r\n className={cn(\r\n \"flex touch-none p-px transition-colors select-none\",\r\n orientation === \"vertical\" &&\r\n \"h-full w-2.5 border-l border-l-transparent\",\r\n orientation === \"horizontal\" &&\r\n \"h-2.5 flex-col border-t border-t-transparent\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ScrollAreaPrimitive.ScrollAreaThumb\r\n data-slot=\"scroll-area-thumb\"\r\n className=\"relative flex-1 rounded-full bg-border\"\r\n />\r\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\r\n )\r\n}\r\n\r\nexport { ScrollArea, ScrollBar }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\r\nimport { Select as SelectPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Select({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\r\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\r\n}\r\n\r\nfunction SelectGroup({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\r\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\r\n}\r\n\r\nfunction SelectValue({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\r\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\r\n}\r\n\r\nfunction SelectTrigger({\r\n className,\r\n size = \"default\",\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\r\n size?: \"sm\" | \"default\"\r\n}) {\r\n return (\r\n <SelectPrimitive.Trigger\r\n data-slot=\"select-trigger\"\r\n data-size={size}\r\n className={cn(\r\n \"flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <SelectPrimitive.Icon asChild>\r\n <ChevronDownIcon className=\"size-4 opacity-50\" />\r\n </SelectPrimitive.Icon>\r\n </SelectPrimitive.Trigger>\r\n )\r\n}\r\n\r\nfunction SelectContent({\r\n className,\r\n children,\r\n position = \"item-aligned\",\r\n align = \"center\",\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\r\n return (\r\n <SelectPrimitive.Portal>\r\n <SelectPrimitive.Content\r\n data-slot=\"select-content\"\r\n className={cn(\r\n \"relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n position === \"popper\" &&\r\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\r\n className\r\n )}\r\n position={position}\r\n align={align}\r\n {...props}\r\n >\r\n <SelectScrollUpButton />\r\n <SelectPrimitive.Viewport\r\n className={cn(\r\n \"p-1\",\r\n position === \"popper\" &&\r\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\r\n )}\r\n >\r\n {children}\r\n </SelectPrimitive.Viewport>\r\n <SelectScrollDownButton />\r\n </SelectPrimitive.Content>\r\n </SelectPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction SelectLabel({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\r\n return (\r\n <SelectPrimitive.Label\r\n data-slot=\"select-label\"\r\n className={cn(\"px-2 py-1.5 text-xs text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SelectItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\r\n return (\r\n <SelectPrimitive.Item\r\n data-slot=\"select-item\"\r\n className={cn(\r\n \"relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span\r\n data-slot=\"select-item-indicator\"\r\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\r\n >\r\n <SelectPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </SelectPrimitive.ItemIndicator>\r\n </span>\r\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\r\n </SelectPrimitive.Item>\r\n )\r\n}\r\n\r\nfunction SelectSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\r\n return (\r\n <SelectPrimitive.Separator\r\n data-slot=\"select-separator\"\r\n className={cn(\"pointer-events-none -mx-1 my-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SelectScrollUpButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\r\n return (\r\n <SelectPrimitive.ScrollUpButton\r\n data-slot=\"select-scroll-up-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronUpIcon className=\"size-4\" />\r\n </SelectPrimitive.ScrollUpButton>\r\n )\r\n}\r\n\r\nfunction SelectScrollDownButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\r\n return (\r\n <SelectPrimitive.ScrollDownButton\r\n data-slot=\"select-scroll-down-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronDownIcon className=\"size-4\" />\r\n </SelectPrimitive.ScrollDownButton>\r\n )\r\n}\r\n\r\nexport {\r\n Select,\r\n SelectContent,\r\n SelectGroup,\r\n SelectItem,\r\n SelectLabel,\r\n SelectScrollDownButton,\r\n SelectScrollUpButton,\r\n SelectSeparator,\r\n SelectTrigger,\r\n SelectValue,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Separator({\r\n className,\r\n orientation = \"horizontal\",\r\n decorative = true,\r\n ...props\r\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\r\n return (\r\n <SeparatorPrimitive.Root\r\n data-slot=\"separator\"\r\n decorative={decorative}\r\n orientation={orientation}\r\n className={cn(\r\n \"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Separator }\r\n","import * as React from \"react\"\r\nimport { XIcon } from \"lucide-react\"\r\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\r\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\r\n}\r\n\r\nfunction SheetTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\r\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\r\n}\r\n\r\nfunction SheetClose({\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\r\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\r\n}\r\n\r\nfunction SheetPortal({\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\r\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\r\n}\r\n\r\nfunction SheetOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\r\n return (\r\n <SheetPrimitive.Overlay\r\n data-slot=\"sheet-overlay\"\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SheetContent({\r\n className,\r\n children,\r\n side = \"right\",\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <SheetPortal>\r\n <SheetOverlay />\r\n <SheetPrimitive.Content\r\n data-slot=\"sheet-content\"\r\n className={cn(\r\n \"fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500\",\r\n side === \"right\" &&\r\n \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\r\n side === \"left\" &&\r\n \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\r\n side === \"top\" &&\r\n \"inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\r\n side === \"bottom\" &&\r\n \"inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <SheetPrimitive.Close className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary\">\r\n <XIcon className=\"size-4\" />\r\n <span className=\"sr-only\">Close</span>\r\n </SheetPrimitive.Close>\r\n )}\r\n </SheetPrimitive.Content>\r\n </SheetPortal>\r\n )\r\n}\r\n\r\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"sheet-header\"\r\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"sheet-footer\"\r\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SheetTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\r\n return (\r\n <SheetPrimitive.Title\r\n data-slot=\"sheet-title\"\r\n className={cn(\"font-semibold text-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SheetDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\r\n return (\r\n <SheetPrimitive.Description\r\n data-slot=\"sheet-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Sheet,\r\n SheetTrigger,\r\n SheetClose,\r\n SheetPortal,\r\n SheetOverlay,\r\n SheetContent,\r\n SheetHeader,\r\n SheetFooter,\r\n SheetTitle,\r\n SheetDescription,\r\n}\r\n\r\n","'use client'\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeftIcon } from \"lucide-react\"\nimport { Slot } from \"radix-ui\"\n\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Separator } from \"@/components/ui/separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/ui/sheet\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"13rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"15rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n return {\n state: \"expanded\" as const,\n open: true,\n setOpen: () => {},\n openMobile: false,\n setOpenMobile: () => {},\n isMobile: false,\n toggleSidebar: () => {},\n }\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n React.useEffect(() => {\n const handleCustomToggle = (e: Event) => {\n const customEvent = e as CustomEvent<{ open?: boolean }>\n if (customEvent.detail && typeof customEvent.detail.open === 'boolean') {\n if (isMobile) {\n setOpenMobile(customEvent.detail.open)\n } else {\n setOpen(customEvent.detail.open)\n }\n } else {\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"amoga:toggle-sidebar\", handleCustomToggle)\n return () => window.removeEventListener(\"amoga:toggle-sidebar\", handleCustomToggle)\n }, [isMobile, setOpenMobile, setOpen, toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer hidden text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"relative flex w-full flex-1 flex-col bg-background\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background shadow-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"div\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"a\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","'use client'\n\nimport * as React from \"react\"\r\n\r\nconst MOBILE_BREAKPOINT = 768\r\n\r\nexport function useIsMobile() {\r\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\r\n\r\n React.useEffect(() => {\r\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\r\n const onChange = () => {\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\r\n }\r\n mql.addEventListener(\"change\", onChange)\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\r\n return () => mql.removeEventListener(\"change\", onChange)\r\n }, [])\r\n\r\n return !!isMobile\r\n}\r\n","import { cn } from \"@/lib/utils\"\r\n\r\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"skeleton\"\r\n className={cn(\"animate-pulse rounded-md bg-accent\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Skeleton }\r\n","'use client'\n\nimport * as React from \"react\"\r\nimport { Slider as SliderPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Slider({\r\n className,\r\n defaultValue,\r\n value,\r\n min = 0,\r\n max = 100,\r\n ...props\r\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\r\n const _values = React.useMemo(\r\n () =>\r\n Array.isArray(value)\r\n ? value\r\n : Array.isArray(defaultValue)\r\n ? defaultValue\r\n : [min, max],\r\n [value, defaultValue, min, max]\r\n )\r\n\r\n return (\r\n <SliderPrimitive.Root\r\n data-slot=\"slider\"\r\n defaultValue={defaultValue}\r\n value={value}\r\n min={min}\r\n max={max}\r\n className={cn(\r\n \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <SliderPrimitive.Track\r\n data-slot=\"slider-track\"\r\n className={cn(\r\n \"relative grow overflow-hidden rounded-full bg-muted data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\r\n )}\r\n >\r\n <SliderPrimitive.Range\r\n data-slot=\"slider-range\"\r\n className={cn(\r\n \"absolute bg-primary data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\r\n )}\r\n />\r\n </SliderPrimitive.Track>\r\n {Array.from({ length: _values.length }, (_, index) => (\r\n <SliderPrimitive.Thumb\r\n data-slot=\"slider-thumb\"\r\n key={index}\r\n className=\"block size-4 shrink-0 rounded-full border border-primary bg-white shadow-sm ring-ring/50 transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\r\n />\r\n ))}\r\n </SliderPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Slider }\r\n","\"use client\"\r\n\r\nimport {\r\n CircleCheckIcon,\r\n InfoIcon,\r\n Loader2Icon,\r\n OctagonXIcon,\r\n TriangleAlertIcon,\r\n} from \"lucide-react\"\r\nimport { useTheme } from \"next-themes\"\r\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\r\n\r\nconst Toaster = ({ ...props }: ToasterProps) => {\r\n const { theme = \"system\" } = useTheme()\r\n\r\n return (\r\n <Sonner\r\n theme={theme as ToasterProps[\"theme\"]}\r\n className=\"toaster group\"\r\n closeButton={true}\r\n toastOptions={{\r\n classNames: {\r\n closeButton:\r\n '!left-auto !right-2.5 !top-2.5 !transform-none !bg-transparent !border-none !shadow-none text-muted-foreground hover:text-foreground transition-colors cursor-pointer p-0.5 rounded-xs hover:bg-muted/50',\r\n },\r\n }}\r\n icons={{\r\n success: <CircleCheckIcon className=\"size-4\" />,\r\n info: <InfoIcon className=\"size-4\" />,\r\n warning: <TriangleAlertIcon className=\"size-4\" />,\r\n error: <OctagonXIcon className=\"size-4\" />,\r\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\r\n }}\r\n style={\r\n {\r\n \"--normal-bg\": \"var(--popover)\",\r\n \"--normal-text\": \"var(--popover-foreground)\",\r\n \"--normal-border\": \"var(--border)\",\r\n \"--border-radius\": \"var(--radius)\",\r\n } as React.CSSProperties\r\n }\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Toaster, Sonner, type ToasterProps }\r\n","import { Loader2Icon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\r\n return (\r\n <Loader2Icon\r\n role=\"status\"\r\n aria-label=\"Loading\"\r\n className={cn(\"size-4 animate-spin\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Spinner }\r\n","import * as React from \"react\"\r\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Switch({\r\n className,\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\r\n size?: \"sm\" | \"default\"\r\n}) {\r\n return (\r\n <SwitchPrimitive.Root\r\n data-slot=\"switch\"\r\n data-size={size}\r\n className={cn(\r\n \"peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <SwitchPrimitive.Thumb\r\n data-slot=\"switch-thumb\"\r\n className={cn(\r\n \"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground\"\r\n )}\r\n />\r\n </SwitchPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Switch }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\r\n return (\r\n <div\r\n data-slot=\"table-container\"\r\n className=\"relative w-full overflow-x-auto\"\r\n >\r\n <table\r\n data-slot=\"table\"\r\n className={cn(\"w-full caption-bottom text-sm\", className)}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\r\n return (\r\n <thead\r\n data-slot=\"table-header\"\r\n className={cn(\"[&_tr]:border-b\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\r\n return (\r\n <tbody\r\n data-slot=\"table-body\"\r\n className={cn(\"[&_tr:last-child]:border-0\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\r\n return (\r\n <tfoot\r\n data-slot=\"table-footer\"\r\n className={cn(\r\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\r\n return (\r\n <tr\r\n data-slot=\"table-row\"\r\n className={cn(\r\n \"border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\r\n return (\r\n <th\r\n data-slot=\"table-head\"\r\n className={cn(\r\n \"h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\r\n return (\r\n <td\r\n data-slot=\"table-cell\"\r\n className={cn(\r\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableCaption({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"caption\">) {\r\n return (\r\n <caption\r\n data-slot=\"table-caption\"\r\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Table,\r\n TableHeader,\r\n TableBody,\r\n TableFooter,\r\n TableHead,\r\n TableRow,\r\n TableCell,\r\n TableCaption,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Tabs as TabsPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Tabs({\r\n className,\r\n orientation = \"horizontal\",\r\n ...props\r\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\r\n return (\r\n <TabsPrimitive.Root\r\n data-slot=\"tabs\"\r\n data-orientation={orientation}\r\n orientation={orientation}\r\n className={cn(\r\n \"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst tabsListVariants = cva(\r\n \"group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-muted\",\r\n line: \"gap-1 bg-transparent\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction TabsList({\r\n className,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof TabsPrimitive.List> &\r\n VariantProps<typeof tabsListVariants>) {\r\n return (\r\n <TabsPrimitive.List\r\n data-slot=\"tabs-list\"\r\n data-variant={variant}\r\n className={cn(tabsListVariants({ variant }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TabsTrigger({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\r\n return (\r\n <TabsPrimitive.Trigger\r\n data-slot=\"tabs-trigger\"\r\n className={cn(\r\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent\",\r\n \"data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground\",\r\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TabsContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\r\n return (\r\n <TabsPrimitive.Content\r\n data-slot=\"tabs-content\"\r\n className={cn(\"flex-1 outline-none\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\r\n","import * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\r\n return (\r\n <textarea\r\n data-slot=\"textarea\"\r\n className={cn(\r\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Textarea }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Toggle as TogglePrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst toggleVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n outline:\r\n \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\r\n },\r\n size: {\r\n default: \"h-9 min-w-9 px-2\",\r\n sm: \"h-8 min-w-8 px-1.5\",\r\n lg: \"h-10 min-w-10 px-2.5\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Toggle({\r\n className,\r\n variant,\r\n size,\r\n ...props\r\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\r\n VariantProps<typeof toggleVariants>) {\r\n return (\r\n <TogglePrimitive.Root\r\n data-slot=\"toggle\"\r\n className={cn(toggleVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Toggle, toggleVariants }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\nimport { ToggleGroup as ToggleGroupPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { toggleVariants } from \"@/components/ui/toggle\"\r\n\r\nconst ToggleGroupContext = React.createContext<\r\n VariantProps<typeof toggleVariants> & {\r\n spacing?: number\r\n }\r\n>({\r\n size: \"default\",\r\n variant: \"default\",\r\n spacing: 0,\r\n})\r\n\r\nfunction ToggleGroup({\r\n className,\r\n variant,\r\n size,\r\n spacing = 0,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\r\n VariantProps<typeof toggleVariants> & {\r\n spacing?: number\r\n }) {\r\n return (\r\n <ToggleGroupPrimitive.Root\r\n data-slot=\"toggle-group\"\r\n data-variant={variant}\r\n data-size={size}\r\n data-spacing={spacing}\r\n style={{ \"--gap\": spacing } as React.CSSProperties}\r\n className={cn(\r\n \"group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ToggleGroupContext.Provider value={{ variant, size, spacing }}>\r\n {children}\r\n </ToggleGroupContext.Provider>\r\n </ToggleGroupPrimitive.Root>\r\n )\r\n}\r\n\r\nfunction ToggleGroupItem({\r\n className,\r\n children,\r\n variant,\r\n size,\r\n ...props\r\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\r\n VariantProps<typeof toggleVariants>) {\r\n const context = React.useContext(ToggleGroupContext)\r\n\r\n return (\r\n <ToggleGroupPrimitive.Item\r\n data-slot=\"toggle-group-item\"\r\n data-variant={context.variant || variant}\r\n data-size={context.size || size}\r\n data-spacing={context.spacing}\r\n className={cn(\r\n toggleVariants({\r\n variant: context.variant || variant,\r\n size: context.size || size,\r\n }),\r\n \"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10\",\r\n \"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </ToggleGroupPrimitive.Item>\r\n )\r\n}\r\n\r\nexport { ToggleGroup, ToggleGroupItem }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction TooltipProvider({\r\n delayDuration = 0,\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\r\n return (\r\n <TooltipPrimitive.Provider\r\n data-slot=\"tooltip-provider\"\r\n delayDuration={delayDuration}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction Tooltip({\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\r\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\r\n}\r\n\r\nfunction TooltipTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\r\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\r\n}\r\n\r\nfunction TooltipContent({\r\n className,\r\n sideOffset = 0,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\r\n return (\r\n <TooltipPrimitive.Portal>\r\n <TooltipPrimitive.Content\r\n data-slot=\"tooltip-content\"\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\r\n </TooltipPrimitive.Content>\r\n </TooltipPrimitive.Portal>\r\n )\r\n}\r\n\r\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\r\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../../lib/utils'\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n actions?: React.ReactNode\n}\n\n\nexport function PageHeader({\n title,\n description,\n badge,\n breadcrumbs,\n actions,\n className,\n children,\n ...props\n}: PageHeaderProps) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-4 pb-4 md:pb-6',\n className\n )}\n {...props}\n >\n {breadcrumbs && <div className='text-sm text-muted-foreground'>{breadcrumbs}</div>}\n <div className='flex flex-col gap-4 md:flex-row md:items-center md:justify-between'>\n <div className='space-y-1.5'>\n <div className='flex items-center gap-2.5'>\n <h1 className='text-2xl font-bold tracking-tight text-foreground sm:text-3xl'>\n {title}\n </h1>\n {badge && <div>{badge}</div>}\n </div>\n {description && (\n <p className='text-sm text-muted-foreground sm:text-base'>\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div className='flex flex-wrap items-center gap-2 md:self-center'>\n {actions}\n </div>\n )}\n </div>\n {children}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../ui/table'\nimport { Skeleton } from '../ui/skeleton'\nimport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyMedia,\n} from '../ui/empty'\nimport { Button } from '../ui/button'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '../../../lib/utils'\n\nexport interface ColumnDef<T> {\n key: string\n header: React.ReactNode\n cell?: (row: T, index: number) => React.ReactNode\n className?: string\n headerClassName?: string\n}\n\nexport interface DataTableProps<T> {\n columns: ColumnDef<T>[]\n data: T[]\n isLoading?: boolean\n loadingRowCount?: number\n emptyTitle?: string\n emptyDescription?: string\n emptyIcon?: React.ReactNode\n onRowClick?: (row: T) => void\n keyExtractor?: (row: T, index: number) => string | number\n pagination?: {\n pageIndex: number\n pageSize: number\n totalCount: number\n onPageChange: (page: number) => void\n }\n className?: string\n}\n\nexport function DataTable<T>({\n columns,\n data,\n isLoading = false,\n loadingRowCount = 5,\n emptyTitle = 'No data found',\n emptyDescription = 'There are no records matching your criteria.',\n emptyIcon,\n onRowClick,\n keyExtractor,\n pagination,\n className,\n}: DataTableProps<T>) {\n const totalPages = pagination\n ? Math.max(1, Math.ceil(pagination.totalCount / pagination.pageSize))\n : 1\n\n return (\n <div className={cn('space-y-4', className)}>\n <div className='rounded-md border bg-card'>\n <Table>\n <TableHeader>\n <TableRow>\n {columns.map((col) => (\n <TableHead key={col.key} className={col.headerClassName}>\n {col.header}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {isLoading ? (\n Array.from({ length: loadingRowCount }).map((_, rIdx) => (\n <TableRow key={`loading-${rIdx}`}>\n {columns.map((col) => (\n <TableCell key={`loading-${rIdx}-${col.key}`} className={col.className}>\n <Skeleton className='h-5 w-full max-w-[160px]' />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : data.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columns.length} className='h-48 text-center'>\n <Empty className='py-6'>\n <EmptyHeader>\n {emptyIcon && <EmptyMedia>{emptyIcon}</EmptyMedia>}\n <EmptyTitle>{emptyTitle}</EmptyTitle>\n <EmptyDescription>{emptyDescription}</EmptyDescription>\n </EmptyHeader>\n </Empty>\n </TableCell>\n </TableRow>\n ) : (\n data.map((row, rIdx) => {\n const key = keyExtractor ? keyExtractor(row, rIdx) : rIdx\n return (\n <TableRow\n key={key}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={cn(\n onRowClick && 'cursor-pointer hover:bg-muted/50 transition-colors'\n )}\n >\n {columns.map((col) => (\n <TableCell key={`${key}-${col.key}`} className={col.className}>\n {col.cell\n ? col.cell(row, rIdx)\n : ((row as Record<string, unknown>)[col.key] as React.ReactNode) ?? '—'}\n </TableCell>\n ))}\n </TableRow>\n )\n })\n )}\n </TableBody>\n </Table>\n </div>\n\n {pagination && (\n <div className='flex items-center justify-between px-2 text-sm text-muted-foreground'>\n <div>\n Showing{' '}\n <span className='font-medium text-foreground'>\n {data.length > 0 ? pagination.pageIndex * pagination.pageSize + 1 : 0}\n </span>{' '}\n to{' '}\n <span className='font-medium text-foreground'>\n {Math.min(\n (pagination.pageIndex + 1) * pagination.pageSize,\n pagination.totalCount\n )}\n </span>{' '}\n of{' '}\n <span className='font-medium text-foreground'>\n {pagination.totalCount}\n </span>{' '}\n results\n </div>\n <div className='flex items-center gap-2'>\n <Button\n variant='outline'\n size='sm'\n disabled={pagination.pageIndex <= 0 || isLoading}\n onClick={() => pagination.onPageChange(pagination.pageIndex - 1)}\n >\n <ChevronLeft className='mr-1 h-4 w-4' />\n Previous\n </Button>\n <span className='text-xs'>\n Page {pagination.pageIndex + 1} of {totalPages}\n </span>\n <Button\n variant='outline'\n size='sm'\n disabled={pagination.pageIndex + 1 >= totalPages || isLoading}\n onClick={() => pagination.onPageChange(pagination.pageIndex + 1)}\n >\n Next\n <ChevronRight className='ml-1 h-4 w-4' />\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../../lib/utils'\n\nexport const statusBadgeVariants = cva(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n status: {\n default: 'bg-primary/10 text-primary border border-primary/20',\n secondary: 'bg-secondary text-secondary-foreground border border-border',\n success: 'bg-emerald-500/15 text-emerald-700 dark:text-emerald-400 border border-emerald-500/30',\n warning: 'bg-amber-500/15 text-amber-700 dark:text-amber-400 border border-amber-500/30',\n info: 'bg-sky-500/15 text-sky-700 dark:text-sky-400 border border-sky-500/30',\n destructive: 'bg-destructive/15 text-destructive border border-destructive/30',\n outline: 'text-foreground border border-border bg-transparent',\n },\n size: {\n sm: 'px-2 py-0.25 text-[11px]',\n default: 'px-2.5 py-0.5 text-xs',\n lg: 'px-3 py-1 text-sm',\n },\n },\n defaultVariants: {\n status: 'default',\n size: 'default',\n },\n }\n)\n\nconst dotColorMap: Record<string, string> = {\n default: 'bg-primary',\n secondary: 'bg-secondary-foreground',\n success: 'bg-emerald-500',\n warning: 'bg-amber-500',\n info: 'bg-sky-500',\n destructive: 'bg-destructive',\n outline: 'bg-foreground',\n}\n\nexport interface StatusBadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof statusBadgeVariants> {\n dot?: boolean\n pulse?: boolean\n icon?: React.ReactNode\n}\n\nexport function StatusBadge({\n status = 'default',\n size = 'default',\n dot = false,\n pulse = false,\n icon,\n className,\n children,\n ...props\n}: StatusBadgeProps) {\n const activeStatus = status || 'default'\n return (\n <div\n className={cn(statusBadgeVariants({ status, size }), className)}\n {...props}\n >\n {dot && (\n <span className='relative flex h-2 w-2'>\n {pulse && (\n <span\n className={cn(\n 'absolute inline-flex h-full w-full animate-ping rounded-full opacity-75',\n dotColorMap[activeStatus] || 'bg-primary'\n )}\n />\n )}\n <span\n className={cn(\n 'relative inline-flex h-2 w-2 rounded-full',\n dotColorMap[activeStatus] || 'bg-primary'\n )}\n />\n </span>\n )}\n {icon && <span className='shrink-0'>{icon}</span>}\n <span>{children}</span>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Input } from '../ui/input'\nimport { Button } from '../ui/button'\nimport { Badge } from '../ui/badge'\nimport { Search as SearchIcon, X } from 'lucide-react'\nimport { cn } from '../../../lib/utils'\n\nexport interface ActiveFilter {\n key: string\n label: string\n value: string\n onRemove: () => void\n}\n\nexport interface FilterBarProps {\n searchPlaceholder?: string\n searchValue?: string\n onSearchChange?: (value: string) => void\n filters?: React.ReactNode\n activeFilters?: ActiveFilter[]\n onClearAll?: () => void\n actions?: React.ReactNode\n className?: string\n}\n\nexport function FilterBar({\n searchPlaceholder = 'Search...',\n searchValue,\n onSearchChange,\n filters,\n activeFilters = [],\n onClearAll,\n actions,\n className,\n}: FilterBarProps) {\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n <div className='flex flex-col gap-2.5 sm:flex-row sm:items-center sm:justify-between'>\n <div className='flex flex-1 flex-wrap items-center gap-2'>\n {onSearchChange && (\n <div className='relative w-full sm:w-64 md:w-80'>\n <SearchIcon className='absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground' />\n <Input\n placeholder={searchPlaceholder}\n value={searchValue ?? ''}\n onChange={(e) => onSearchChange(e.target.value)}\n className='pl-8'\n />\n </div>\n )}\n {filters}\n </div>\n {actions && (\n <div className='flex items-center gap-2 shrink-0'>\n {actions}\n </div>\n )}\n </div>\n\n {activeFilters.length > 0 && (\n <div className='flex flex-wrap items-center gap-2 pt-1'>\n <span className='text-xs font-medium text-muted-foreground'>\n Active filters:\n </span>\n {activeFilters.map((filter) => (\n <Badge\n key={filter.key}\n variant='secondary'\n className='gap-1 pr-1 text-xs'\n >\n <span>{filter.label}:</span>\n <span className='font-normal text-foreground'>{filter.value}</span>\n <button\n type='button'\n onClick={filter.onRemove}\n className='rounded-full p-0.5 hover:bg-muted-foreground/20'\n aria-label={`Remove filter ${filter.label}`}\n >\n <X className='h-3 w-3' />\n </button>\n </Badge>\n ))}\n {onClearAll && (\n <Button\n variant='ghost'\n size='sm'\n onClick={onClearAll}\n className='h-6 px-2 text-xs text-muted-foreground hover:text-foreground'\n >\n Clear all\n </Button>\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Separator } from '../ui/separator'\nimport { cn } from '../../../lib/utils'\n\nexport interface FormSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n actions?: React.ReactNode\n separator?: boolean\n columns?: 1 | 2 | 3 | 4\n}\n\n\nexport function FormSection({\n title,\n description,\n actions,\n separator = true,\n columns = 1,\n className,\n children,\n ...props\n}: FormSectionProps) {\n const gridColsClass = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 md:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n }[columns]\n\n return (\n <div className={cn('space-y-4 py-2', className)} {...props}>\n <div className='flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between'>\n <div>\n <h2 className='text-base font-semibold text-foreground sm:text-lg'>\n {title}\n </h2>\n {description && (\n <p className='text-xs text-muted-foreground sm:text-sm'>\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div className='flex items-center gap-2 pt-2 sm:pt-0'>\n {actions}\n </div>\n )}\n </div>\n\n {separator && <Separator />}\n\n <div className={cn('grid gap-4 sm:gap-6', gridColsClass)}>\n {children}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Card, CardContent, CardHeader, CardTitle } from '../ui/card'\nimport { ArrowDownRight, ArrowUpRight, Minus } from 'lucide-react'\nimport { cn } from '../../../lib/utils'\n\nexport interface MetricCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string\n value: string | number\n description?: string\n icon?: React.ComponentType<{ className?: string }> | React.ReactNode\n change?: {\n value: string | number\n trend?: 'up' | 'down' | 'neutral'\n label?: string\n }\n footer?: React.ReactNode\n}\n\nexport function MetricCard({\n title,\n value,\n description,\n icon: Icon,\n change,\n footer,\n className,\n ...props\n}: MetricCardProps) {\n const trendColor = change?.trend === 'up'\n ? 'text-emerald-600 dark:text-emerald-400'\n : change?.trend === 'down'\n ? 'text-rose-600 dark:text-rose-400'\n : 'text-muted-foreground'\n\n return (\n <Card className={cn('overflow-hidden shadow-xs transition-shadow hover:shadow-md', className)} {...props}>\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium text-muted-foreground'>\n {title}\n </CardTitle>\n {Icon && (\n <div className='rounded-md bg-muted p-2 text-muted-foreground'>\n {typeof Icon === 'function' ? <Icon className='h-4 w-4' /> : Icon}\n </div>\n )}\n </CardHeader>\n <CardContent className='space-y-1.5'>\n <div className='text-2xl font-bold tracking-tight text-foreground'>\n {value}\n </div>\n {(change || description) && (\n <div className='flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground'>\n {change && (\n <span className={cn('inline-flex items-center font-medium', trendColor)}>\n {change.trend === 'up' && <ArrowUpRight className='mr-0.5 h-3.5 w-3.5' />}\n {change.trend === 'down' && <ArrowDownRight className='mr-0.5 h-3.5 w-3.5' />}\n {change.trend === 'neutral' && <Minus className='mr-0.5 h-3.5 w-3.5' />}\n {change.value}\n </span>\n )}\n {change?.label && <span>{change.label}</span>}\n {!change && description && <span>{description}</span>}\n </div>\n )}\n {footer && <div className='pt-2'>{footer}</div>}\n </CardContent>\n </Card>\n )\n}\n","import { cn } from '../../../lib/utils'\r\nimport {\r\n AlertDialog,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogTitle,\r\n} from '../ui/alert-dialog'\r\nimport { Button } from '../ui/button'\r\n\r\ntype ConfirmDialogProps = {\r\n open: boolean\r\n onOpenChange: (open: boolean) => void\r\n title: React.ReactNode\r\n disabled?: boolean\r\n desc: React.JSX.Element | string\r\n cancelBtnText?: string\r\n confirmText?: React.ReactNode\r\n destructive?: boolean\r\n isLoading?: boolean\r\n className?: string\r\n children?: React.ReactNode\r\n} & (\r\n | { form: string; handleConfirm?: undefined }\r\n | { form?: undefined; handleConfirm: () => void }\r\n)\r\n\r\nexport function ConfirmDialog(props: ConfirmDialogProps) {\r\n const {\r\n title,\r\n desc,\r\n children,\r\n className,\r\n confirmText,\r\n cancelBtnText,\r\n destructive,\r\n isLoading,\r\n disabled = false,\r\n form,\r\n handleConfirm,\r\n ...actions\r\n } = props\r\n return (\r\n <AlertDialog {...actions}>\r\n <AlertDialogContent className={cn(className && className)}>\r\n <AlertDialogHeader className='text-start'>\r\n <AlertDialogTitle>{title}</AlertDialogTitle>\r\n <AlertDialogDescription asChild>\r\n <div>{desc}</div>\r\n </AlertDialogDescription>\r\n </AlertDialogHeader>\r\n {children}\r\n <AlertDialogFooter>\r\n <AlertDialogCancel disabled={isLoading}>\r\n {cancelBtnText ?? 'Cancel'}\r\n </AlertDialogCancel>\r\n <Button\r\n type={form ? 'submit' : 'button'}\r\n form={form}\r\n onClick={handleConfirm}\r\n variant={destructive ? 'destructive' : 'default'}\r\n disabled={disabled || isLoading}\r\n >\r\n {confirmText ?? 'Continue'}\r\n </Button>\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n )\r\n}\r\n","'use client'\n\nimport * as React from 'react'\r\nimport { Eye, EyeOff } from 'lucide-react'\r\nimport { cn } from '../../../lib/utils'\r\nimport { Button } from '../ui/button'\r\n\r\ntype PasswordInputProps = Omit<\r\n React.InputHTMLAttributes<HTMLInputElement>,\r\n 'type'\r\n> & {\r\n ref?: React.Ref<HTMLInputElement>\r\n}\r\n\r\nexport function PasswordInput({\r\n className,\r\n disabled,\r\n ref,\r\n ...props\r\n}: PasswordInputProps) {\r\n const [showPassword, setShowPassword] = React.useState(false)\r\n\r\n return (\r\n <div className={cn('relative rounded-md', className)}>\r\n <input\r\n type={showPassword ? 'text' : 'password'}\r\n className='flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50'\r\n ref={ref}\r\n disabled={disabled}\r\n {...props}\r\n />\r\n <Button\r\n type='button'\r\n size='icon'\r\n variant='ghost'\r\n disabled={disabled}\r\n className='absolute inset-e-1 top-1/2 h-6 w-6 -translate-y-1/2 rounded-md text-muted-foreground'\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n >\r\n {showPassword ? <Eye size={18} /> : <EyeOff size={18} />}\r\n <span className='sr-only'>\r\n {showPassword ? 'Hide password' : 'Show password'}\r\n </span>\r\n </Button>\r\n </div>\r\n )\r\n}\r\n","import { createBrowserClient } from '@supabase/ssr'\r\n\r\nlet clientSingleton: ReturnType<typeof createBrowserClient> | null = null\r\n\r\nexport function createClient() {\r\n if (typeof window === 'undefined') {\r\n return createBrowserClient(\r\n process.env.NEXT_PUBLIC_SUPABASE_URL!,\r\n process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!\r\n )\r\n }\r\n\r\n if (!clientSingleton) {\r\n clientSingleton = createBrowserClient(\r\n process.env.NEXT_PUBLIC_SUPABASE_URL!,\r\n process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!\r\n )\r\n }\r\n return clientSingleton;\r\n}\r\n","import { create } from 'zustand'\r\nimport { getCookie, setCookie, removeCookie } from '@/lib/cookies'\r\n\r\nconst ACCESS_TOKEN = 'thisisjustarandomstring'\r\nconst USER_DATA = 'auth_user_data'\r\n\r\ninterface AuthUser {\r\n id: string // 👈 ADD THIS - the auth.uid() from Supabase\r\n accountNo: string\r\n email: string\r\n name?: string\r\n picture?: string\r\n role: string[]\r\n exp: number\r\n}\r\n\r\ninterface AuthState {\r\n auth: {\r\n user: AuthUser | null\r\n setUser: (user: AuthUser | null) => void\r\n accessToken: string\r\n setAccessToken: (accessToken: string) => void\r\n resetAccessToken: () => void\r\n reset: () => void\r\n }\r\n}\r\n\r\nexport const useAuthStore = create<AuthState>()((set) => {\r\n const cookieState = getCookie(ACCESS_TOKEN)\r\n let initToken = ''\r\n if (cookieState) {\r\n try {\r\n initToken = JSON.parse(cookieState)\r\n } catch {\r\n removeCookie(ACCESS_TOKEN)\r\n }\r\n }\r\n\r\n const userCookie = getCookie(USER_DATA)\r\n let initUser: AuthUser | null = null\r\n if (userCookie) {\r\n try {\r\n const parsed = JSON.parse(decodeURIComponent(userCookie))\r\n if (parsed.exp && parsed.exp > Date.now()) {\r\n initUser = parsed\r\n } else {\r\n removeCookie(ACCESS_TOKEN)\r\n removeCookie(USER_DATA)\r\n }\r\n } catch {\r\n initUser = null\r\n removeCookie(USER_DATA)\r\n }\r\n }\r\n\r\n return {\r\n auth: {\r\n user: initUser,\r\n setUser: (user) =>\r\n set((state) => {\r\n if (user) {\r\n setCookie(USER_DATA, encodeURIComponent(JSON.stringify(user)))\r\n } else {\r\n removeCookie(USER_DATA)\r\n }\r\n return { ...state, auth: { ...state.auth, user } }\r\n }),\r\n accessToken: initUser ? initToken : '',\r\n setAccessToken: (accessToken) =>\r\n set((state) => {\r\n setCookie(ACCESS_TOKEN, JSON.stringify(accessToken))\r\n return { ...state, auth: { ...state.auth, accessToken } }\r\n }),\r\n resetAccessToken: () =>\r\n set((state) => {\r\n removeCookie(ACCESS_TOKEN)\r\n return { ...state, auth: { ...state.auth, accessToken: '' } }\r\n }),\r\n reset: () =>\r\n set((state) => {\r\n removeCookie(ACCESS_TOKEN)\r\n removeCookie(USER_DATA)\r\n return {\r\n ...state,\r\n auth: { ...state.auth, user: null, accessToken: '' },\r\n }\r\n }),\r\n },\r\n }\r\n})","/**\r\n * Cookie utility functions using manual document.cookie approach\r\n * Replaces js-cookie dependency for better consistency\r\n */\r\n\r\nconst DEFAULT_MAX_AGE = 60 * 60 * 24 * 7 // 7 days\r\n\r\n/**\r\n * Get a cookie value by name\r\n */\r\nexport function getCookie(name: string): string | undefined {\r\n if (typeof document === 'undefined') return undefined\r\n\r\n const value = `; ${document.cookie}`\r\n const parts = value.split(`; ${name}=`)\r\n if (parts.length === 2) {\r\n const cookieValue = parts.pop()?.split(';').shift()\r\n return cookieValue\r\n }\r\n return undefined\r\n}\r\n\r\n/**\r\n * Set a cookie with name, value, and optional max age\r\n */\r\nexport function setCookie(\r\n name: string,\r\n value: string,\r\n maxAge: number = DEFAULT_MAX_AGE\r\n): void {\r\n if (typeof document === 'undefined') return\r\n\r\n document.cookie = `${name}=${value}; path=/; max-age=${maxAge}`\r\n}\r\n\r\n/**\r\n * Remove a cookie by setting its max age to 0\r\n */\r\nexport function removeCookie(name: string): void {\r\n if (typeof document === 'undefined') return\r\n\r\n document.cookie = `${name}=; path=/; max-age=0`\r\n}\r\n","'use client'\n\nimport { ConfirmDialog } from '@/components/confirm-dialog'\nimport { createClient } from '../../../lib/client'\nimport { useAuthStore } from '../../../stores/auth-store'\nimport { signOut as nextAuthSignOut } from 'next-auth/react'\n\ninterface SignOutDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\nexport function SignOutDialog({ open, onOpenChange }: SignOutDialogProps) {\n const handleSignOut = async () => {\n try {\n useAuthStore.getState().auth.reset()\n } catch (err) {\n // ignore\n }\n\n try {\n await nextAuthSignOut({ redirect: false })\n } catch (err) {\n // ignore\n }\n\n try {\n const supabase = createClient()\n await supabase.auth.signOut({ scope: 'global' }).catch(() => {})\n } catch (err) {\n // ignore\n }\n\n try {\n if (typeof window !== 'undefined') {\n localStorage.clear()\n sessionStorage.clear()\n }\n } catch (e) {\n // ignore\n }\n\n // Direct window location navigation to server-side logout route.\n // Purges session cookies on response and redirects instantly to /sign-in (zero blank screen).\n window.location.href = '/api/auth/mobile-logout'\n }\n\n return (\n <ConfirmDialog\n open={open}\n onOpenChange={onOpenChange}\n title='Sign out'\n desc='Are you sure you want to sign out? You will need to sign in again to access your account.'\n confirmText='Sign out'\n destructive\n handleConfirm={handleSignOut}\n className='sm:max-w-sm'\n />\n )\n}\n","'use client'\r\n\r\nimport { useEffect } from 'react'\r\nimport { Check, Moon, Sun } from 'lucide-react'\r\nimport { cn } from '../../../lib/utils'\r\nimport { useTheme } from '../../../context/theme-provider'\r\nimport { Button } from '../ui/button'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '../ui/dropdown-menu'\r\n\r\nexport function ThemeSwitch() {\r\n const { theme, resolvedTheme, setTheme } = useTheme()\r\n\r\n /* Update theme-color meta tag\r\n * when theme is updated */\r\n useEffect(() => {\r\n const themeColor = resolvedTheme === 'dark' ? '#020817' : '#fff'\r\n const metaThemeColor = document.querySelector(\"meta[name='theme-color']\")\r\n if (metaThemeColor) metaThemeColor.setAttribute('content', themeColor)\r\n }, [resolvedTheme])\r\n\r\n return (\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n variant='ghost'\r\n size='icon'\r\n className='size-8 shrink-0 scale-95 rounded-full'\r\n >\r\n <Sun className='size-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90' />\r\n <Moon className='absolute size-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0' />\r\n <span className='sr-only'>Toggle theme</span>\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align='end'>\r\n <DropdownMenuItem onClick={() => setTheme('light')}>\r\n Light{' '}\r\n <Check\r\n size={14}\r\n className={cn('ms-auto', theme !== 'light' && 'hidden')}\r\n />\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => setTheme('dark')}>\r\n Dark\r\n <Check\r\n size={14}\r\n className={cn('ms-auto', theme !== 'dark' && 'hidden')}\r\n />\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => setTheme('system')}>\r\n System\r\n <Check\r\n size={14}\r\n className={cn('ms-auto', theme !== 'system' && 'hidden')}\r\n />\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { createContext, useContext, useEffect, useState, useMemo } from 'react'\r\nimport { getCookie, setCookie, removeCookie } from '@/lib/cookies'\r\n\r\ntype Theme = 'dark' | 'light' | 'system'\r\ntype ResolvedTheme = Exclude<Theme, 'system'>\r\n\r\nconst DEFAULT_THEME = 'system'\r\nconst THEME_COOKIE_NAME = 'vite-ui-theme'\r\nconst THEME_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 // 1 year\r\n\r\ntype ThemeProviderProps = {\r\n children: React.ReactNode\r\n defaultTheme?: Theme\r\n storageKey?: string\r\n}\r\n\r\ntype ThemeProviderState = {\r\n defaultTheme: Theme\r\n resolvedTheme: ResolvedTheme\r\n theme: Theme\r\n setTheme: (theme: Theme) => void\r\n resetTheme: () => void\r\n}\r\n\r\nconst initialState: ThemeProviderState = {\r\n defaultTheme: DEFAULT_THEME,\r\n resolvedTheme: 'light',\r\n theme: DEFAULT_THEME,\r\n setTheme: () => null,\r\n resetTheme: () => null,\r\n}\r\n\r\nconst ThemeContext = createContext<ThemeProviderState>(initialState)\r\n\r\nfunction getSystemTheme(): ResolvedTheme {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches\r\n ? 'dark'\r\n : 'light'\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n defaultTheme = DEFAULT_THEME,\r\n storageKey = THEME_COOKIE_NAME,\r\n ...props\r\n}: ThemeProviderProps) {\r\n const [theme, _setTheme] = useState<Theme>(\r\n () => {\r\n if (typeof window === 'undefined') return defaultTheme\r\n return (getCookie(storageKey) as Theme) || defaultTheme\r\n }\r\n )\r\n const [systemTheme, setSystemTheme] = useState<ResolvedTheme>(() => getSystemTheme())\r\n\r\n const resolvedTheme = useMemo((): ResolvedTheme => {\r\n if (theme === 'system') {\r\n return systemTheme\r\n }\r\n return theme as ResolvedTheme\r\n }, [theme, systemTheme])\r\n\r\n useEffect(() => {\r\n const root = window.document.documentElement\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n\r\n const applyTheme = (currentResolvedTheme: ResolvedTheme) => {\r\n root.classList.remove('light')\r\n root.classList.toggle('dark', currentResolvedTheme === 'dark')\r\n }\r\n\r\n const handleChange = () => {\r\n const nextSystemTheme = mediaQuery.matches ? 'dark' : 'light'\r\n setSystemTheme(nextSystemTheme)\r\n if (theme === 'system') {\r\n applyTheme(nextSystemTheme)\r\n }\r\n }\r\n\r\n applyTheme(resolvedTheme)\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [theme, resolvedTheme])\r\n\r\n const setTheme = (theme: Theme) => {\r\n setCookie(storageKey, theme, THEME_COOKIE_MAX_AGE)\r\n _setTheme(theme)\r\n }\r\n\r\n const resetTheme = () => {\r\n removeCookie(storageKey)\r\n _setTheme(DEFAULT_THEME)\r\n }\r\n\r\n const contextValue = {\r\n defaultTheme,\r\n resolvedTheme,\r\n resetTheme,\r\n theme,\r\n setTheme,\r\n }\r\n\r\n return (\r\n <ThemeContext value={contextValue} {...props}>\r\n {children}\r\n </ThemeContext>\r\n )\r\n}\r\n\r\n// eslint-disable-next-line react-refresh/only-export-components\r\nexport const useTheme = () => {\r\n const context = useContext(ThemeContext)\r\n\r\n if (!context) throw new Error('useTheme must be used within a ThemeProvider')\r\n\r\n return context\r\n}\r\n","'use client'\n\nimport { Check, Palette } from 'lucide-react'\r\nimport { cn } from '../../../lib/utils'\r\nimport {\r\n colorThemes,\r\n useColorTheme,\r\n} from '../../../context/color-theme-provider'\r\nimport { useTheme } from '../../../context/theme-provider'\r\nimport { Button } from '../ui/button'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../ui/popover'\r\nimport { Separator } from '../ui/separator'\r\n\r\nexport function ThemeSelector() {\r\n const { colorTheme, setColorTheme } = useColorTheme()\r\n const { theme, setTheme } = useTheme()\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant='ghost'\r\n size='icon'\r\n className='relative size-8 shrink-0 scale-95 rounded-full'\r\n aria-label='Select color theme'\r\n >\r\n <Palette className='size-[1.2rem]' />\r\n {/* Active color indicator dot */}\r\n <span\r\n className='absolute -top-0.5 -right-0.5 size-2.5 rounded-full ring-2 ring-background'\r\n style={{\r\n backgroundColor:\r\n colorThemes.find((t) => t.name === colorTheme)?.preview ??\r\n 'currentColor',\r\n }}\r\n />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n align='end'\r\n className='w-[280px] p-3'\r\n >\r\n {/* Appearance Section */}\r\n <div className='mb-1'>\r\n <p className='mb-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground'>\r\n Appearance\r\n </p>\r\n <div className='grid grid-cols-3 gap-1.5'>\r\n {(\r\n [\r\n { value: 'light', label: 'Light' },\r\n { value: 'dark', label: 'Dark' },\r\n { value: 'system', label: 'System' },\r\n ] as const\r\n ).map((mode) => (\r\n <button\r\n key={mode.value}\r\n onClick={() => setTheme(mode.value)}\r\n className={cn(\r\n 'flex items-center justify-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-all',\r\n 'hover:bg-accent hover:text-accent-foreground',\r\n theme === mode.value\r\n ? 'bg-primary text-primary-foreground shadow-sm'\r\n : 'bg-muted/50 text-muted-foreground'\r\n )}\r\n >\r\n {mode.label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <Separator className='my-3' />\r\n\r\n {/* Color Theme Section */}\r\n <div>\r\n <p className='mb-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground'>\r\n Color Theme\r\n </p>\r\n <div className='max-h-[280px] space-y-0.5 overflow-y-auto'>\r\n {colorThemes.map((ct) => (\r\n <button\r\n key={ct.name}\r\n onClick={() => setColorTheme(ct.name)}\r\n className={cn(\r\n 'flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 transition-all',\r\n colorTheme === ct.name\r\n ? 'bg-primary text-primary-foreground'\r\n : 'hover:bg-accent'\r\n )}\r\n aria-label={`Select ${ct.label} color theme`}\r\n >\r\n <div className='flex gap-0.5'>\r\n {ct.colors.slice(0, 5).map((color, i) => (\r\n <span\r\n key={i}\r\n className={cn(\r\n 'size-2.5 rounded-full',\r\n colorTheme === ct.name\r\n ? 'ring-1 ring-primary-foreground/30'\r\n : 'ring-1 ring-border/40'\r\n )}\r\n style={{ backgroundColor: color }}\r\n />\r\n ))}\r\n </div>\r\n <span className='text-xs font-medium'>{ct.label}</span>\r\n {colorTheme === ct.name && (\r\n <Check className='ml-auto size-3.5' strokeWidth={3} />\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { createContext, useContext, useEffect, useState, useMemo, useCallback } from 'react'\r\nimport { getCookie, setCookie, removeCookie } from '@/lib/cookies'\r\nimport { useTheme } from '@/context/theme-provider'\r\n\r\n// Each color theme defines light and dark mode CSS variable overrides\r\nexport interface ColorThemeTokens {\r\n light: Record<string, string>\r\n dark: Record<string, string>\r\n}\r\n\r\nexport interface ColorThemeDefinition {\r\n name: string\r\n label: string\r\n category?: 'tweakcn' | 'accent' | 'palette'\r\n preview: string // primary color for preview swatch\r\n colors: string[] // 5 representative hex colors for dot previews\r\n tokens: ColorThemeTokens\r\n}\r\n\r\nconst COLOR_THEME_COOKIE = 'color-theme'\r\nconst COLOR_THEME_COOKIE_MAX_AGE = 60 * 60 * 24 * 365\r\n\r\n// All CSS variables themes can override — cleared before applying a new theme\r\nconst ALL_THEME_VARS = [\r\n '--background', '--foreground',\r\n '--card', '--card-foreground',\r\n '--popover', '--popover-foreground',\r\n '--primary', '--primary-foreground',\r\n '--secondary', '--secondary-foreground',\r\n '--muted', '--muted-foreground',\r\n '--accent', '--accent-foreground',\r\n '--destructive',\r\n '--border', '--input', '--ring',\r\n '--chart-1', '--chart-2', '--chart-3', '--chart-4', '--chart-5',\r\n // sidebar — must also be cleared so it picks up the new background\r\n '--sidebar', '--sidebar-foreground',\r\n '--sidebar-primary', '--sidebar-primary-foreground',\r\n '--sidebar-accent', '--sidebar-accent-foreground',\r\n '--sidebar-border', '--sidebar-ring',\r\n]\r\n\r\n// ── Helper to build a simple (primary-only) token pair ──\r\nfunction simplePalette(\r\n lightPrimary: string,\r\n lightRing: string,\r\n darkPrimary: string,\r\n darkRing: string,\r\n charts: { light: string[]; dark: string[] }\r\n): ColorThemeTokens {\r\n return {\r\n light: {\r\n '--primary': lightPrimary,\r\n '--primary-foreground': 'oklch(0.984 0.003 247.858)',\r\n '--ring': lightRing,\r\n '--chart-1': charts.light[0],\r\n '--chart-2': charts.light[1],\r\n '--chart-3': charts.light[2],\r\n '--chart-4': charts.light[3],\r\n '--chart-5': charts.light[4],\r\n },\r\n dark: {\r\n '--primary': darkPrimary,\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': darkRing,\r\n '--chart-1': charts.dark[0],\r\n '--chart-2': charts.dark[1],\r\n '--chart-3': charts.dark[2],\r\n '--chart-4': charts.dark[3],\r\n '--chart-5': charts.dark[4],\r\n },\r\n }\r\n}\r\n\r\n// ── Curated color palettes ──\r\nexport const colorThemes: ColorThemeDefinition[] = [\r\n // ─── Tweakcn & Custom Themes ─────────────────────────────────\r\n {\r\n name: 'catppuccin',\r\n label: 'Catppuccin',\r\n category: 'tweakcn',\r\n preview: '#cba6f7',\r\n colors: ['#cba6f7', '#89b4fa', '#f38ba8', '#a6e3a1', '#1e1e2e'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.01 260)',\r\n '--foreground': 'oklch(0.35 0.03 260)',\r\n '--card': 'oklch(0.98 0.005 260)',\r\n '--card-foreground': 'oklch(0.35 0.03 260)',\r\n '--popover': 'oklch(0.98 0.005 260)',\r\n '--popover-foreground': 'oklch(0.35 0.03 260)',\r\n '--primary': 'oklch(0.53 0.24 290)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.9 0.02 260)',\r\n '--secondary-foreground': 'oklch(0.35 0.03 260)',\r\n '--muted': 'oklch(0.92 0.015 260)',\r\n '--muted-foreground': 'oklch(0.52 0.03 260)',\r\n '--accent': 'oklch(0.72 0.17 330)',\r\n '--accent-foreground': 'oklch(0.99 0 0)',\r\n '--border': 'oklch(0.85 0.02 260)',\r\n '--input': 'oklch(0.85 0.02 260)',\r\n '--ring': 'oklch(0.53 0.24 290)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.18 0.03 260)',\r\n '--foreground': 'oklch(0.88 0.03 260)',\r\n '--card': 'oklch(0.15 0.03 260)',\r\n '--card-foreground': 'oklch(0.88 0.03 260)',\r\n '--popover': 'oklch(0.15 0.03 260)',\r\n '--popover-foreground': 'oklch(0.88 0.03 260)',\r\n '--primary': 'oklch(0.76 0.16 290)',\r\n '--primary-foreground': 'oklch(0.15 0.03 260)',\r\n '--secondary': 'oklch(0.24 0.03 260)',\r\n '--secondary-foreground': 'oklch(0.88 0.03 260)',\r\n '--muted': 'oklch(0.24 0.03 260)',\r\n '--muted-foreground': 'oklch(0.68 0.03 260)',\r\n '--accent': 'oklch(0.82 0.12 330)',\r\n '--accent-foreground': 'oklch(0.15 0.03 260)',\r\n '--border': 'oklch(0.32 0.03 260)',\r\n '--input': 'oklch(0.32 0.03 260)',\r\n '--ring': 'oklch(0.76 0.16 290)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'tokyo-night',\r\n label: 'Tokyo Night',\r\n category: 'tweakcn',\r\n preview: '#7aa2f7',\r\n colors: ['#7aa2f7', '#bb9af7', '#7dcfff', '#f7768e', '#1a1b26'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.02 260)',\r\n '--foreground': 'oklch(0.35 0.12 260)',\r\n '--card': 'oklch(0.97 0.015 260)',\r\n '--card-foreground': 'oklch(0.35 0.12 260)',\r\n '--popover': 'oklch(0.97 0.015 260)',\r\n '--popover-foreground': 'oklch(0.35 0.12 260)',\r\n '--primary': 'oklch(0.55 0.18 260)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.03 260)',\r\n '--secondary-foreground': 'oklch(0.35 0.12 260)',\r\n '--muted': 'oklch(0.9 0.02 260)',\r\n '--muted-foreground': 'oklch(0.5 0.08 260)',\r\n '--border': 'oklch(0.82 0.03 260)',\r\n '--input': 'oklch(0.82 0.03 260)',\r\n '--ring': 'oklch(0.55 0.18 260)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.16 0.03 260)',\r\n '--foreground': 'oklch(0.78 0.06 260)',\r\n '--card': 'oklch(0.14 0.03 260)',\r\n '--card-foreground': 'oklch(0.78 0.06 260)',\r\n '--popover': 'oklch(0.14 0.03 260)',\r\n '--popover-foreground': 'oklch(0.78 0.06 260)',\r\n '--primary': 'oklch(0.72 0.14 260)',\r\n '--primary-foreground': 'oklch(0.14 0.03 260)',\r\n '--secondary': 'oklch(0.22 0.03 260)',\r\n '--secondary-foreground': 'oklch(0.78 0.06 260)',\r\n '--muted': 'oklch(0.22 0.03 260)',\r\n '--muted-foreground': 'oklch(0.52 0.06 260)',\r\n '--border': 'oklch(0.26 0.03 260)',\r\n '--input': 'oklch(0.26 0.03 260)',\r\n '--ring': 'oklch(0.72 0.14 260)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'dracula',\r\n label: 'Dracula',\r\n category: 'tweakcn',\r\n preview: '#bd93f9',\r\n colors: ['#bd93f9', '#ff79c6', '#8be9fd', '#50fa7b', '#282a36'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.01 280)',\r\n '--foreground': 'oklch(0.22 0.04 280)',\r\n '--card': 'oklch(0.98 0.005 280)',\r\n '--card-foreground': 'oklch(0.22 0.04 280)',\r\n '--primary': 'oklch(0.52 0.12 280)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.9 0.02 280)',\r\n '--secondary-foreground': 'oklch(0.22 0.04 280)',\r\n '--muted': 'oklch(0.92 0.01 280)',\r\n '--muted-foreground': 'oklch(0.5 0.04 280)',\r\n '--border': 'oklch(0.85 0.02 280)',\r\n '--input': 'oklch(0.85 0.02 280)',\r\n '--ring': 'oklch(0.52 0.12 280)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.22 0.04 280)',\r\n '--foreground': 'oklch(0.97 0.01 280)',\r\n '--card': 'oklch(0.18 0.04 280)',\r\n '--card-foreground': 'oklch(0.97 0.01 280)',\r\n '--popover': 'oklch(0.18 0.04 280)',\r\n '--popover-foreground': 'oklch(0.97 0.01 280)',\r\n '--primary': 'oklch(0.72 0.16 295)',\r\n '--primary-foreground': 'oklch(0.22 0.04 280)',\r\n '--secondary': 'oklch(0.3 0.04 280)',\r\n '--secondary-foreground': 'oklch(0.97 0.01 280)',\r\n '--muted': 'oklch(0.3 0.04 280)',\r\n '--muted-foreground': 'oklch(0.65 0.04 280)',\r\n '--border': 'oklch(0.35 0.04 280)',\r\n '--input': 'oklch(0.35 0.04 280)',\r\n '--ring': 'oklch(0.72 0.16 295)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'nord',\r\n label: 'Nord',\r\n category: 'tweakcn',\r\n preview: '#88c0d0',\r\n colors: ['#88c0d0', '#81a1c1', '#5e81ac', '#bf616a', '#2e3440'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.01 230)',\r\n '--foreground': 'oklch(0.26 0.03 230)',\r\n '--card': 'oklch(0.97 0.005 230)',\r\n '--card-foreground': 'oklch(0.26 0.03 230)',\r\n '--primary': 'oklch(0.55 0.08 230)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.89 0.015 230)',\r\n '--secondary-foreground': 'oklch(0.26 0.03 230)',\r\n '--muted': 'oklch(0.89 0.015 230)',\r\n '--muted-foreground': 'oklch(0.42 0.03 230)',\r\n '--border': 'oklch(0.85 0.015 230)',\r\n '--input': 'oklch(0.85 0.015 230)',\r\n '--ring': 'oklch(0.55 0.08 230)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.26 0.03 230)',\r\n '--foreground': 'oklch(0.95 0.01 230)',\r\n '--card': 'oklch(0.22 0.03 230)',\r\n '--card-foreground': 'oklch(0.95 0.01 230)',\r\n '--popover': 'oklch(0.22 0.03 230)',\r\n '--popover-foreground': 'oklch(0.95 0.01 230)',\r\n '--primary': 'oklch(0.76 0.08 210)',\r\n '--primary-foreground': 'oklch(0.26 0.03 230)',\r\n '--secondary': 'oklch(0.32 0.03 230)',\r\n '--secondary-foreground': 'oklch(0.95 0.01 230)',\r\n '--muted': 'oklch(0.32 0.03 230)',\r\n '--muted-foreground': 'oklch(0.85 0.015 230)',\r\n '--border': 'oklch(0.36 0.03 230)',\r\n '--input': 'oklch(0.36 0.03 230)',\r\n '--ring': 'oklch(0.76 0.08 210)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'gruvbox',\r\n label: 'Gruvbox',\r\n category: 'tweakcn',\r\n preview: '#fe8019',\r\n colors: ['#fe8019', '#fabd2f', '#b8bb26', '#83a598', '#282828'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.03 85)',\r\n '--foreground': 'oklch(0.28 0.03 60)',\r\n '--card': 'oklch(0.92 0.04 85)',\r\n '--card-foreground': 'oklch(0.28 0.03 60)',\r\n '--primary': 'oklch(0.55 0.16 45)',\r\n '--primary-foreground': 'oklch(0.96 0.03 85)',\r\n '--secondary': 'oklch(0.88 0.04 85)',\r\n '--secondary-foreground': 'oklch(0.28 0.03 60)',\r\n '--muted': 'oklch(0.88 0.04 85)',\r\n '--muted-foreground': 'oklch(0.52 0.03 60)',\r\n '--border': 'oklch(0.82 0.04 85)',\r\n '--input': 'oklch(0.82 0.04 85)',\r\n '--ring': 'oklch(0.55 0.16 45)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.22 0.01 60)',\r\n '--foreground': 'oklch(0.88 0.04 85)',\r\n '--card': 'oklch(0.18 0.01 60)',\r\n '--card-foreground': 'oklch(0.88 0.04 85)',\r\n '--popover': 'oklch(0.18 0.01 60)',\r\n '--popover-foreground': 'oklch(0.88 0.04 85)',\r\n '--primary': 'oklch(0.68 0.18 55)',\r\n '--primary-foreground': 'oklch(0.22 0.01 60)',\r\n '--secondary': 'oklch(0.28 0.02 60)',\r\n '--secondary-foreground': 'oklch(0.88 0.04 85)',\r\n '--muted': 'oklch(0.28 0.02 60)',\r\n '--muted-foreground': 'oklch(0.68 0.03 80)',\r\n '--border': 'oklch(0.35 0.02 60)',\r\n '--input': 'oklch(0.35 0.02 60)',\r\n '--ring': 'oklch(0.68 0.18 55)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'supabase',\r\n label: 'Supabase',\r\n category: 'tweakcn',\r\n preview: '#3ecf8e',\r\n colors: ['#3ecf8e', '#10b981', '#047857', '#a7f3d0', '#121212'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.98 0.005 240)',\r\n '--foreground': 'oklch(0.15 0.02 240)',\r\n '--card': 'oklch(1 0 0)',\r\n '--card-foreground': 'oklch(0.15 0.02 240)',\r\n '--primary': 'oklch(0.55 0.15 160)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.92 0.01 240)',\r\n '--secondary-foreground': 'oklch(0.15 0.02 240)',\r\n '--muted': 'oklch(0.95 0.01 240)',\r\n '--muted-foreground': 'oklch(0.48 0.02 240)',\r\n '--border': 'oklch(0.9 0.01 240)',\r\n '--input': 'oklch(0.9 0.01 240)',\r\n '--ring': 'oklch(0.55 0.15 160)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.14 0.005 240)',\r\n '--foreground': 'oklch(0.94 0.005 240)',\r\n '--card': 'oklch(0.16 0.005 240)',\r\n '--card-foreground': 'oklch(0.94 0.005 240)',\r\n '--popover': 'oklch(0.16 0.005 240)',\r\n '--popover-foreground': 'oklch(0.94 0.005 240)',\r\n '--primary': 'oklch(0.74 0.17 160)',\r\n '--primary-foreground': 'oklch(0.14 0.005 240)',\r\n '--secondary': 'oklch(0.22 0.005 240)',\r\n '--secondary-foreground': 'oklch(0.94 0.005 240)',\r\n '--muted': 'oklch(0.22 0.005 240)',\r\n '--muted-foreground': 'oklch(0.68 0.005 240)',\r\n '--border': 'oklch(0.24 0.005 240)',\r\n '--input': 'oklch(0.24 0.005 240)',\r\n '--ring': 'oklch(0.74 0.17 160)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'tweakcn-sunset',\r\n label: 'Tweakcn Sunset',\r\n category: 'tweakcn',\r\n preview: '#f97316',\r\n colors: ['#f97316', '#ec4899', '#8b5cf6', '#3b82f6', '#0f172a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.02 50)',\r\n '--foreground': 'oklch(0.25 0.05 40)',\r\n '--card': 'oklch(0.94 0.03 50)',\r\n '--card-foreground': 'oklch(0.25 0.05 40)',\r\n '--primary': 'oklch(0.62 0.22 45)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.05 50)',\r\n '--secondary-foreground': 'oklch(0.25 0.05 40)',\r\n '--muted': 'oklch(0.94 0.03 50)',\r\n '--muted-foreground': 'oklch(0.55 0.08 40)',\r\n '--border': 'oklch(0.85 0.06 50)',\r\n '--input': 'oklch(0.85 0.06 50)',\r\n '--ring': 'oklch(0.62 0.22 45)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.02 50)',\r\n '--foreground': 'oklch(0.94 0.01 50)',\r\n '--card': 'oklch(0.16 0.02 50)',\r\n '--card-foreground': 'oklch(0.94 0.01 50)',\r\n '--popover': 'oklch(0.16 0.02 50)',\r\n '--popover-foreground': 'oklch(0.94 0.01 50)',\r\n '--primary': 'oklch(0.705 0.213 47.604)',\r\n '--primary-foreground': 'oklch(0.12 0.02 50)',\r\n '--secondary': 'oklch(0.22 0.02 50)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 50)',\r\n '--muted': 'oklch(0.22 0.02 50)',\r\n '--muted-foreground': 'oklch(0.68 0.02 50)',\r\n '--border': 'oklch(0.3 0.02 50)',\r\n '--input': 'oklch(0.3 0.02 50)',\r\n '--ring': 'oklch(0.705 0.213 47.604)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'tweakcn-ocean',\r\n label: 'Tweakcn Ocean',\r\n category: 'tweakcn',\r\n preview: '#06b6d4',\r\n colors: ['#06b6d4', '#0284c7', '#3b82f6', '#10b981', '#0f172a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.02 200)',\r\n '--foreground': 'oklch(0.22 0.06 200)',\r\n '--card': 'oklch(0.94 0.03 200)',\r\n '--card-foreground': 'oklch(0.22 0.06 200)',\r\n '--primary': 'oklch(0.55 0.15 200)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.05 200)',\r\n '--secondary-foreground': 'oklch(0.22 0.06 200)',\r\n '--muted': 'oklch(0.94 0.03 200)',\r\n '--muted-foreground': 'oklch(0.48 0.06 200)',\r\n '--border': 'oklch(0.85 0.05 200)',\r\n '--input': 'oklch(0.85 0.05 200)',\r\n '--ring': 'oklch(0.55 0.15 200)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.03 210)',\r\n '--foreground': 'oklch(0.92 0.02 210)',\r\n '--card': 'oklch(0.16 0.03 210)',\r\n '--card-foreground': 'oklch(0.92 0.02 210)',\r\n '--popover': 'oklch(0.16 0.03 210)',\r\n '--popover-foreground': 'oklch(0.92 0.02 210)',\r\n '--primary': 'oklch(0.68 0.15 200)',\r\n '--primary-foreground': 'oklch(0.12 0.03 210)',\r\n '--secondary': 'oklch(0.22 0.03 210)',\r\n '--secondary-foreground': 'oklch(0.92 0.02 210)',\r\n '--muted': 'oklch(0.22 0.03 210)',\r\n '--muted-foreground': 'oklch(0.68 0.03 210)',\r\n '--border': 'oklch(0.28 0.03 210)',\r\n '--input': 'oklch(0.28 0.03 210)',\r\n '--ring': 'oklch(0.68 0.15 200)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'tweakcn-midnight',\r\n label: 'Tweakcn Midnight',\r\n category: 'tweakcn',\r\n preview: '#8b5cf6',\r\n colors: ['#8b5cf6', '#d946ef', '#6366f1', '#ec4899', '#09090b'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.02 280)',\r\n '--foreground': 'oklch(0.22 0.08 280)',\r\n '--card': 'oklch(0.93 0.03 280)',\r\n '--card-foreground': 'oklch(0.22 0.08 280)',\r\n '--primary': 'oklch(0.55 0.22 280)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.04 280)',\r\n '--secondary-foreground': 'oklch(0.22 0.08 280)',\r\n '--muted': 'oklch(0.93 0.03 280)',\r\n '--muted-foreground': 'oklch(0.48 0.08 280)',\r\n '--border': 'oklch(0.84 0.04 280)',\r\n '--input': 'oklch(0.84 0.04 280)',\r\n '--ring': 'oklch(0.55 0.22 280)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.1 0.03 280)',\r\n '--foreground': 'oklch(0.93 0.02 280)',\r\n '--card': 'oklch(0.14 0.03 280)',\r\n '--card-foreground': 'oklch(0.93 0.02 280)',\r\n '--popover': 'oklch(0.14 0.03 280)',\r\n '--popover-foreground': 'oklch(0.93 0.02 280)',\r\n '--primary': 'oklch(0.72 0.18 280)',\r\n '--primary-foreground': 'oklch(0.1 0.03 280)',\r\n '--secondary': 'oklch(0.2 0.03 280)',\r\n '--secondary-foreground': 'oklch(0.93 0.02 280)',\r\n '--muted': 'oklch(0.2 0.03 280)',\r\n '--muted-foreground': 'oklch(0.68 0.03 280)',\r\n '--border': 'oklch(0.26 0.03 280)',\r\n '--input': 'oklch(0.26 0.03 280)',\r\n '--ring': 'oklch(0.72 0.18 280)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'synthwave-84',\r\n label: \"Synthwave '84\",\r\n category: 'tweakcn',\r\n preview: '#ff7edb',\r\n colors: ['#ff7edb', '#36f9f6', '#fe4450', '#72f1b8', '#262335'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.02 330)',\r\n '--foreground': 'oklch(0.3 0.12 330)',\r\n '--card': 'oklch(0.94 0.03 330)',\r\n '--card-foreground': 'oklch(0.3 0.12 330)',\r\n '--primary': 'oklch(0.6 0.25 330)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.05 330)',\r\n '--secondary-foreground': 'oklch(0.3 0.12 330)',\r\n '--muted': 'oklch(0.94 0.03 330)',\r\n '--muted-foreground': 'oklch(0.5 0.1 330)',\r\n '--border': 'oklch(0.84 0.06 330)',\r\n '--input': 'oklch(0.84 0.06 330)',\r\n '--ring': 'oklch(0.6 0.25 330)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.16 0.04 300)',\r\n '--foreground': 'oklch(0.95 0.02 330)',\r\n '--card': 'oklch(0.19 0.04 300)',\r\n '--card-foreground': 'oklch(0.95 0.02 330)',\r\n '--popover': 'oklch(0.19 0.04 300)',\r\n '--popover-foreground': 'oklch(0.95 0.02 330)',\r\n '--primary': 'oklch(0.74 0.2 330)',\r\n '--primary-foreground': 'oklch(0.16 0.04 300)',\r\n '--secondary': 'oklch(0.26 0.04 300)',\r\n '--secondary-foreground': 'oklch(0.95 0.02 330)',\r\n '--muted': 'oklch(0.26 0.04 300)',\r\n '--muted-foreground': 'oklch(0.75 0.12 190)',\r\n '--border': 'oklch(0.32 0.04 300)',\r\n '--input': 'oklch(0.32 0.04 300)',\r\n '--ring': 'oklch(0.74 0.2 330)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'everforest',\r\n label: 'Everforest',\r\n category: 'tweakcn',\r\n preview: '#a7c080',\r\n colors: ['#a7c080', '#dbbc7f', '#e67e80', '#7fbbb3', '#2d353b'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.02 90)',\r\n '--foreground': 'oklch(0.32 0.02 120)',\r\n '--card': 'oklch(0.93 0.025 90)',\r\n '--card-foreground': 'oklch(0.32 0.02 120)',\r\n '--primary': 'oklch(0.55 0.12 120)',\r\n '--primary-foreground': 'oklch(0.96 0.02 90)',\r\n '--secondary': 'oklch(0.88 0.02 90)',\r\n '--secondary-foreground': 'oklch(0.32 0.02 120)',\r\n '--muted': 'oklch(0.88 0.02 90)',\r\n '--muted-foreground': 'oklch(0.5 0.02 120)',\r\n '--border': 'oklch(0.82 0.02 90)',\r\n '--input': 'oklch(0.82 0.02 90)',\r\n '--ring': 'oklch(0.55 0.12 120)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.24 0.02 140)',\r\n '--foreground': 'oklch(0.88 0.03 110)',\r\n '--card': 'oklch(0.2 0.02 140)',\r\n '--card-foreground': 'oklch(0.88 0.03 110)',\r\n '--popover': 'oklch(0.2 0.02 140)',\r\n '--popover-foreground': 'oklch(0.88 0.03 110)',\r\n '--primary': 'oklch(0.74 0.11 125)',\r\n '--primary-foreground': 'oklch(0.24 0.02 140)',\r\n '--secondary': 'oklch(0.28 0.02 140)',\r\n '--secondary-foreground': 'oklch(0.88 0.03 110)',\r\n '--muted': 'oklch(0.28 0.02 140)',\r\n '--muted-foreground': 'oklch(0.68 0.02 120)',\r\n '--border': 'oklch(0.32 0.02 140)',\r\n '--input': 'oklch(0.32 0.02 140)',\r\n '--ring': 'oklch(0.74 0.11 125)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'rose-pine',\r\n label: 'Rosé Pine',\r\n category: 'tweakcn',\r\n preview: '#ebbcba',\r\n colors: ['#ebbcba', '#31748f', '#9ccfd8', '#c4a7e7', '#191724'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.01 60)',\r\n '--foreground': 'oklch(0.32 0.04 280)',\r\n '--card': 'oklch(0.93 0.015 60)',\r\n '--card-foreground': 'oklch(0.32 0.04 280)',\r\n '--primary': 'oklch(0.52 0.12 350)',\r\n '--primary-foreground': 'oklch(0.97 0.01 60)',\r\n '--secondary': 'oklch(0.88 0.015 60)',\r\n '--secondary-foreground': 'oklch(0.32 0.04 280)',\r\n '--muted': 'oklch(0.88 0.015 60)',\r\n '--muted-foreground': 'oklch(0.5 0.04 280)',\r\n '--border': 'oklch(0.82 0.015 60)',\r\n '--input': 'oklch(0.82 0.015 60)',\r\n '--ring': 'oklch(0.52 0.12 350)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.18 0.03 280)',\r\n '--foreground': 'oklch(0.9 0.02 280)',\r\n '--card': 'oklch(0.15 0.03 280)',\r\n '--card-foreground': 'oklch(0.9 0.02 280)',\r\n '--popover': 'oklch(0.15 0.03 280)',\r\n '--popover-foreground': 'oklch(0.9 0.02 280)',\r\n '--primary': 'oklch(0.78 0.08 20)',\r\n '--primary-foreground': 'oklch(0.18 0.03 280)',\r\n '--secondary': 'oklch(0.24 0.03 280)',\r\n '--secondary-foreground': 'oklch(0.9 0.02 280)',\r\n '--muted': 'oklch(0.24 0.03 280)',\r\n '--muted-foreground': 'oklch(0.65 0.02 280)',\r\n '--border': 'oklch(0.28 0.03 280)',\r\n '--input': 'oklch(0.28 0.03 280)',\r\n '--ring': 'oklch(0.78 0.08 20)',\r\n },\r\n },\r\n },\r\n // ─── Simple accent themes ─────────────────────────────────────\r\n {\r\n name: 'zinc',\r\n label: 'Zinc',\r\n preview: 'oklch(0.208 0.042 265.755)',\r\n colors: ['#71717a', '#fafafa', '#18181b', '#a1a1aa', '#d4d4d8'],\r\n tokens: {\r\n light: {\r\n '--primary': 'oklch(0.208 0.042 265.755)',\r\n '--primary-foreground': 'oklch(0.984 0.003 247.858)',\r\n '--ring': 'oklch(0.704 0.04 256.788)',\r\n '--chart-1': 'oklch(0.646 0.222 41.116)',\r\n '--chart-2': 'oklch(0.6 0.118 184.704)',\r\n '--chart-3': 'oklch(0.398 0.07 227.392)',\r\n '--chart-4': 'oklch(0.828 0.189 84.429)',\r\n '--chart-5': 'oklch(0.769 0.188 70.08)',\r\n },\r\n dark: {\r\n '--primary': 'oklch(0.929 0.013 255.508)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.551 0.027 264.364)',\r\n '--chart-1': 'oklch(0.488 0.243 264.376)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.769 0.188 70.08)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'blue',\r\n label: 'Blue',\r\n preview: 'oklch(0.546 0.245 262.881)',\r\n colors: ['#2563eb', '#3b82f6', '#93c5fd', '#bfdbfe', '#1e40af'],\r\n tokens: simplePalette(\r\n 'oklch(0.546 0.245 262.881)', 'oklch(0.546 0.245 262.881)',\r\n 'oklch(0.623 0.214 259.815)', 'oklch(0.623 0.214 259.815)',\r\n {\r\n light: ['oklch(0.546 0.245 262.881)', 'oklch(0.6 0.118 184.704)', 'oklch(0.398 0.07 227.392)', 'oklch(0.828 0.189 84.429)', 'oklch(0.769 0.188 70.08)'],\r\n dark: ['oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)', 'oklch(0.645 0.246 16.439)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'rose',\r\n label: 'Rose',\r\n preview: 'oklch(0.585 0.22 3.717)',\r\n colors: ['#e11d48', '#f43f5e', '#fda4af', '#fecdd3', '#9f1239'],\r\n tokens: simplePalette(\r\n 'oklch(0.585 0.22 3.717)', 'oklch(0.585 0.22 3.717)',\r\n 'oklch(0.645 0.246 16.439)', 'oklch(0.645 0.246 16.439)',\r\n {\r\n light: ['oklch(0.585 0.22 3.717)', 'oklch(0.6 0.118 184.704)', 'oklch(0.398 0.07 227.392)', 'oklch(0.828 0.189 84.429)', 'oklch(0.769 0.188 70.08)'],\r\n dark: ['oklch(0.645 0.246 16.439)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)', 'oklch(0.488 0.243 264.376)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'green',\r\n label: 'Green',\r\n preview: 'oklch(0.527 0.154 150.069)',\r\n colors: ['#16a34a', '#22c55e', '#86efac', '#bbf7d0', '#166534'],\r\n tokens: simplePalette(\r\n 'oklch(0.527 0.154 150.069)', 'oklch(0.527 0.154 150.069)',\r\n 'oklch(0.696 0.17 162.48)', 'oklch(0.696 0.17 162.48)',\r\n {\r\n light: ['oklch(0.527 0.154 150.069)', 'oklch(0.6 0.118 184.704)', 'oklch(0.398 0.07 227.392)', 'oklch(0.828 0.189 84.429)', 'oklch(0.769 0.188 70.08)'],\r\n dark: ['oklch(0.696 0.17 162.48)', 'oklch(0.623 0.214 259.815)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)', 'oklch(0.645 0.246 16.439)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'orange',\r\n label: 'Orange',\r\n preview: 'oklch(0.705 0.213 47.604)',\r\n colors: ['#f97316', '#fb923c', '#fdba74', '#fed7aa', '#c2410c'],\r\n tokens: {\r\n light: {\r\n '--primary': 'oklch(0.705 0.213 47.604)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.705 0.213 47.604)',\r\n '--chart-1': 'oklch(0.705 0.213 47.604)',\r\n '--chart-2': 'oklch(0.6 0.118 184.704)',\r\n '--chart-3': 'oklch(0.398 0.07 227.392)',\r\n '--chart-4': 'oklch(0.828 0.189 84.429)',\r\n '--chart-5': 'oklch(0.769 0.188 70.08)',\r\n },\r\n dark: {\r\n '--primary': 'oklch(0.769 0.188 70.08)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.769 0.188 70.08)',\r\n '--chart-1': 'oklch(0.769 0.188 70.08)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'violet',\r\n label: 'Violet',\r\n preview: 'oklch(0.541 0.281 293.009)',\r\n colors: ['#7c3aed', '#8b5cf6', '#c4b5fd', '#ddd6fe', '#5b21b6'],\r\n tokens: simplePalette(\r\n 'oklch(0.541 0.281 293.009)', 'oklch(0.541 0.281 293.009)',\r\n 'oklch(0.627 0.265 303.9)', 'oklch(0.627 0.265 303.9)',\r\n {\r\n light: ['oklch(0.541 0.281 293.009)', 'oklch(0.6 0.118 184.704)', 'oklch(0.398 0.07 227.392)', 'oklch(0.828 0.189 84.429)', 'oklch(0.769 0.188 70.08)'],\r\n dark: ['oklch(0.627 0.265 303.9)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.623 0.214 259.815)', 'oklch(0.645 0.246 16.439)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'amber',\r\n label: 'Amber',\r\n preview: 'oklch(0.769 0.172 70.67)',\r\n colors: ['#f59e0b', '#fbbf24', '#fcd34d', '#fde68a', '#92400e'],\r\n tokens: {\r\n light: {\r\n '--primary': 'oklch(0.555 0.163 48.998)',\r\n '--primary-foreground': 'oklch(0.984 0.003 247.858)',\r\n '--ring': 'oklch(0.555 0.163 48.998)',\r\n '--chart-1': 'oklch(0.769 0.172 70.67)',\r\n '--chart-2': 'oklch(0.6 0.118 184.704)',\r\n '--chart-3': 'oklch(0.398 0.07 227.392)',\r\n '--chart-4': 'oklch(0.828 0.189 84.429)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--primary': 'oklch(0.769 0.172 70.67)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.769 0.172 70.67)',\r\n '--chart-1': 'oklch(0.769 0.172 70.67)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'teal',\r\n label: 'Teal',\r\n preview: 'oklch(0.6 0.118 184.704)',\r\n colors: ['#14b8a6', '#2dd4bf', '#5eead4', '#99f6e4', '#115e59'],\r\n tokens: {\r\n light: {\r\n '--primary': 'oklch(0.485 0.118 192.351)',\r\n '--primary-foreground': 'oklch(0.984 0.003 247.858)',\r\n '--ring': 'oklch(0.485 0.118 192.351)',\r\n '--chart-1': 'oklch(0.6 0.118 184.704)',\r\n '--chart-2': 'oklch(0.546 0.245 262.881)',\r\n '--chart-3': 'oklch(0.398 0.07 227.392)',\r\n '--chart-4': 'oklch(0.828 0.189 84.429)',\r\n '--chart-5': 'oklch(0.769 0.188 70.08)',\r\n },\r\n dark: {\r\n '--primary': 'oklch(0.696 0.17 162.48)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.696 0.17 162.48)',\r\n '--chart-1': 'oklch(0.696 0.17 162.48)',\r\n '--chart-2': 'oklch(0.623 0.214 259.815)',\r\n '--chart-3': 'oklch(0.769 0.188 70.08)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n // New simple accent themes\r\n {\r\n name: 'ruby',\r\n label: 'Ruby',\r\n preview: '#b91c1c',\r\n colors: ['#b91c1c', '#ef4444', '#fca5a5', '#fee2e2', '#7f1d1d'],\r\n tokens: simplePalette(\r\n 'oklch(0.505 0.213 27.325)', 'oklch(0.505 0.213 27.325)',\r\n 'oklch(0.637 0.237 25.331)', 'oklch(0.637 0.237 25.331)',\r\n {\r\n light: ['oklch(0.505 0.213 27.325)', 'oklch(0.546 0.245 262.881)', 'oklch(0.527 0.154 150.069)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)'],\r\n dark: ['oklch(0.637 0.237 25.331)', 'oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'emerald',\r\n label: 'Emerald',\r\n preview: '#059669',\r\n colors: ['#059669', '#34d399', '#6ee7b7', '#a7f3d0', '#064e3b'],\r\n tokens: simplePalette(\r\n 'oklch(0.596 0.145 163.225)', 'oklch(0.596 0.145 163.225)',\r\n 'oklch(0.696 0.17 162.48)', 'oklch(0.696 0.17 162.48)',\r\n {\r\n light: ['oklch(0.596 0.145 163.225)', 'oklch(0.546 0.245 262.881)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.696 0.17 162.48)', 'oklch(0.623 0.214 259.815)', 'oklch(0.769 0.188 70.08)', 'oklch(0.645 0.246 16.439)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'sapphire',\r\n label: 'Sapphire',\r\n preview: '#1d4ed8',\r\n colors: ['#1d4ed8', '#3b82f6', '#93c5fd', '#bfdbfe', '#1e3a8a'],\r\n tokens: simplePalette(\r\n 'oklch(0.488 0.243 264.376)', 'oklch(0.488 0.243 264.376)',\r\n 'oklch(0.623 0.214 259.815)', 'oklch(0.623 0.214 259.815)',\r\n {\r\n light: ['oklch(0.488 0.243 264.376)', 'oklch(0.696 0.17 162.48)', 'oklch(0.585 0.22 3.717)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.645 0.246 16.439)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'fuchsia',\r\n label: 'Fuchsia',\r\n preview: '#c026d3',\r\n colors: ['#c026d3', '#e879f9', '#f5d0fe', '#fae8ff', '#86198f'],\r\n tokens: simplePalette(\r\n 'oklch(0.591 0.293 322.896)', 'oklch(0.591 0.293 322.896)',\r\n 'oklch(0.667 0.295 322.15)', 'oklch(0.667 0.295 322.15)',\r\n {\r\n light: ['oklch(0.591 0.293 322.896)', 'oklch(0.546 0.245 262.881)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)'],\r\n dark: ['oklch(0.667 0.295 322.15)', 'oklch(0.623 0.214 259.815)', 'oklch(0.769 0.188 70.08)', 'oklch(0.696 0.17 162.48)', 'oklch(0.645 0.246 16.439)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'cyan',\r\n label: 'Cyan',\r\n preview: '#0891b2',\r\n colors: ['#0891b2', '#22d3ee', '#a5f3fc', '#cffafe', '#155e75'],\r\n tokens: simplePalette(\r\n 'oklch(0.609 0.126 199.769)', 'oklch(0.609 0.126 199.769)',\r\n 'oklch(0.715 0.143 198.14)', 'oklch(0.715 0.143 198.14)',\r\n {\r\n light: ['oklch(0.609 0.126 199.769)', 'oklch(0.546 0.245 262.881)', 'oklch(0.585 0.22 3.717)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.715 0.143 198.14)', 'oklch(0.623 0.214 259.815)', 'oklch(0.645 0.246 16.439)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'indigo',\r\n label: 'Indigo',\r\n preview: '#4f46e5',\r\n colors: ['#4f46e5', '#818cf8', '#a5b4fc', '#c7d2fe', '#312e81'],\r\n tokens: simplePalette(\r\n 'oklch(0.511 0.262 276.966)', 'oklch(0.511 0.262 276.966)',\r\n 'oklch(0.585 0.233 277.117)', 'oklch(0.585 0.233 277.117)',\r\n {\r\n light: ['oklch(0.511 0.262 276.966)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.585 0.233 277.117)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.645 0.246 16.439)', 'oklch(0.623 0.214 259.815)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'pink',\r\n label: 'Pink',\r\n preview: '#db2777',\r\n colors: ['#db2777', '#f472b6', '#f9a8d4', '#fbcfe8', '#831843'],\r\n tokens: simplePalette(\r\n 'oklch(0.592 0.249 0.584)', 'oklch(0.592 0.249 0.584)',\r\n 'oklch(0.656 0.241 354.308)', 'oklch(0.656 0.241 354.308)',\r\n {\r\n light: ['oklch(0.592 0.249 0.584)', 'oklch(0.546 0.245 262.881)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.656 0.241 354.308)', 'oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'lime',\r\n label: 'Lime',\r\n preview: '#65a30d',\r\n colors: ['#65a30d', '#84cc16', '#bef264', '#d9f99d', '#365314'],\r\n tokens: simplePalette(\r\n 'oklch(0.627 0.168 131.589)', 'oklch(0.627 0.168 131.589)',\r\n 'oklch(0.768 0.233 130.85)', 'oklch(0.768 0.233 130.85)',\r\n {\r\n light: ['oklch(0.627 0.168 131.589)', 'oklch(0.546 0.245 262.881)', 'oklch(0.585 0.22 3.717)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.768 0.233 130.85)', 'oklch(0.623 0.214 259.815)', 'oklch(0.645 0.246 16.439)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'sky',\r\n label: 'Sky',\r\n preview: '#0284c7',\r\n colors: ['#0284c7', '#38bdf8', '#7dd3fc', '#bae6fd', '#0c4a6e'],\r\n tokens: simplePalette(\r\n 'oklch(0.562 0.158 241.966)', 'oklch(0.562 0.158 241.966)',\r\n 'oklch(0.714 0.175 232.799)', 'oklch(0.714 0.175 232.799)',\r\n {\r\n light: ['oklch(0.562 0.158 241.966)', 'oklch(0.696 0.17 162.48)', 'oklch(0.585 0.22 3.717)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.714 0.175 232.799)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.645 0.246 16.439)', 'oklch(0.623 0.214 259.815)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'slate',\r\n label: 'Slate',\r\n preview: '#475569',\r\n colors: ['#475569', '#94a3b8', '#cbd5e1', '#e2e8f0', '#1e293b'],\r\n tokens: simplePalette(\r\n 'oklch(0.446 0.043 257.281)', 'oklch(0.446 0.043 257.281)',\r\n 'oklch(0.869 0.022 252.894)', 'oklch(0.551 0.027 264.364)',\r\n {\r\n light: ['oklch(0.446 0.043 257.281)', 'oklch(0.546 0.245 262.881)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)'],\r\n dark: ['oklch(0.869 0.022 252.894)', 'oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n\r\n // ─── Full palette themes ──────────────────────────────────────\r\n {\r\n name: 'bold-tech',\r\n label: 'Bold Tech',\r\n preview: '#6d28d9',\r\n colors: ['#6d28d9', '#818cf8', '#c4b5fd', '#a5b4fc', '#1e1b4b'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.025 280)',\r\n '--foreground': 'oklch(0.15 0.05 280)',\r\n '--card': 'oklch(0.97 0.018 280)',\r\n '--card-foreground': 'oklch(0.15 0.05 280)',\r\n '--popover': 'oklch(0.97 0.018 280)',\r\n '--popover-foreground': 'oklch(0.15 0.05 280)',\r\n '--primary': 'oklch(0.49 0.27 285)',\r\n '--primary-foreground': 'oklch(0.98 0.005 280)',\r\n '--secondary': 'oklch(0.88 0.04 280)',\r\n '--secondary-foreground': 'oklch(0.25 0.05 280)',\r\n '--muted': 'oklch(0.9 0.03 280)',\r\n '--muted-foreground': 'oklch(0.5 0.04 280)',\r\n '--accent': 'oklch(0.86 0.055 280)',\r\n '--accent-foreground': 'oklch(0.25 0.05 280)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.04 280)',\r\n '--input': 'oklch(0.84 0.04 280)',\r\n '--ring': 'oklch(0.49 0.27 285)',\r\n '--chart-1': 'oklch(0.49 0.27 285)',\r\n '--chart-2': 'oklch(0.6 0.118 184.704)',\r\n '--chart-3': 'oklch(0.645 0.246 16.439)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.696 0.17 162.48)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.04 280)',\r\n '--foreground': 'oklch(0.93 0.01 280)',\r\n '--card': 'oklch(0.15 0.04 278)',\r\n '--card-foreground': 'oklch(0.93 0.01 280)',\r\n '--popover': 'oklch(0.17 0.045 280)',\r\n '--popover-foreground': 'oklch(0.93 0.01 280)',\r\n '--primary': 'oklch(0.65 0.25 285)',\r\n '--primary-foreground': 'oklch(0.12 0.04 280)',\r\n '--secondary': 'oklch(0.22 0.04 278)',\r\n '--secondary-foreground': 'oklch(0.93 0.01 280)',\r\n '--muted': 'oklch(0.22 0.04 278)',\r\n '--muted-foreground': 'oklch(0.65 0.04 280)',\r\n '--accent': 'oklch(0.22 0.04 278)',\r\n '--accent-foreground': 'oklch(0.93 0.01 280)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.65 0.25 285)',\r\n '--chart-1': 'oklch(0.65 0.25 285)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.769 0.188 70.08)',\r\n '--chart-4': 'oklch(0.645 0.246 16.439)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'bubblegum',\r\n label: 'Bubblegum',\r\n preview: '#ec4899',\r\n colors: ['#ec4899', '#f472b6', '#fce7f3', '#f9a8d4', '#831843'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.03 350)',\r\n '--foreground': 'oklch(0.18 0.06 340)',\r\n '--card': 'oklch(0.97 0.022 350)',\r\n '--card-foreground': 'oklch(0.18 0.06 340)',\r\n '--popover': 'oklch(0.97 0.022 350)',\r\n '--popover-foreground': 'oklch(0.18 0.06 340)',\r\n '--primary': 'oklch(0.656 0.241 354.308)',\r\n '--primary-foreground': 'oklch(0.98 0.005 350)',\r\n '--secondary': 'oklch(0.9 0.05 340)',\r\n '--secondary-foreground': 'oklch(0.25 0.06 340)',\r\n '--muted': 'oklch(0.91 0.04 340)',\r\n '--muted-foreground': 'oklch(0.5 0.04 340)',\r\n '--accent': 'oklch(0.88 0.06 340)',\r\n '--accent-foreground': 'oklch(0.25 0.06 340)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.05 340)',\r\n '--input': 'oklch(0.85 0.05 340)',\r\n '--ring': 'oklch(0.656 0.241 354.308)',\r\n '--chart-1': 'oklch(0.656 0.241 354.308)',\r\n '--chart-2': 'oklch(0.627 0.265 303.9)',\r\n '--chart-3': 'oklch(0.715 0.143 198.14)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.14 0.04 340)',\r\n '--foreground': 'oklch(0.94 0.015 340)',\r\n '--card': 'oklch(0.17 0.04 338)',\r\n '--card-foreground': 'oklch(0.94 0.015 340)',\r\n '--popover': 'oklch(0.19 0.045 340)',\r\n '--popover-foreground': 'oklch(0.94 0.015 340)',\r\n '--primary': 'oklch(0.72 0.22 350)',\r\n '--primary-foreground': 'oklch(0.14 0.04 340)',\r\n '--secondary': 'oklch(0.24 0.04 338)',\r\n '--secondary-foreground': 'oklch(0.94 0.015 340)',\r\n '--muted': 'oklch(0.24 0.04 338)',\r\n '--muted-foreground': 'oklch(0.65 0.04 340)',\r\n '--accent': 'oklch(0.24 0.04 338)',\r\n '--accent-foreground': 'oklch(0.94 0.015 340)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.72 0.22 350)',\r\n '--chart-1': 'oklch(0.72 0.22 350)',\r\n '--chart-2': 'oklch(0.627 0.265 303.9)',\r\n '--chart-3': 'oklch(0.715 0.143 198.14)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'caffeine',\r\n label: 'Caffeine',\r\n preview: '#92400e',\r\n colors: ['#92400e', '#a16207', '#ca8a04', '#fbbf24', '#451a03'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.025 65)',\r\n '--foreground': 'oklch(0.2 0.04 50)',\r\n '--card': 'oklch(0.97 0.02 65)',\r\n '--card-foreground': 'oklch(0.2 0.04 50)',\r\n '--popover': 'oklch(0.97 0.02 65)',\r\n '--popover-foreground': 'oklch(0.2 0.04 50)',\r\n '--primary': 'oklch(0.47 0.12 55)',\r\n '--primary-foreground': 'oklch(0.98 0.01 70)',\r\n '--secondary': 'oklch(0.91 0.035 60)',\r\n '--secondary-foreground': 'oklch(0.3 0.05 50)',\r\n '--muted': 'oklch(0.92 0.028 60)',\r\n '--muted-foreground': 'oklch(0.5 0.04 55)',\r\n '--accent': 'oklch(0.89 0.04 60)',\r\n '--accent-foreground': 'oklch(0.3 0.05 50)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.04 60)',\r\n '--input': 'oklch(0.86 0.04 60)',\r\n '--ring': 'oklch(0.55 0.12 55)',\r\n '--chart-1': 'oklch(0.55 0.12 55)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.546 0.245 262.881)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.13 0.02 50)',\r\n '--foreground': 'oklch(0.92 0.015 60)',\r\n '--card': 'oklch(0.16 0.025 48)',\r\n '--card-foreground': 'oklch(0.92 0.015 60)',\r\n '--popover': 'oklch(0.18 0.03 50)',\r\n '--popover-foreground': 'oklch(0.92 0.015 60)',\r\n '--primary': 'oklch(0.72 0.15 65)',\r\n '--primary-foreground': 'oklch(0.15 0.02 50)',\r\n '--secondary': 'oklch(0.24 0.03 48)',\r\n '--secondary-foreground': 'oklch(0.92 0.015 60)',\r\n '--muted': 'oklch(0.24 0.03 48)',\r\n '--muted-foreground': 'oklch(0.6 0.04 55)',\r\n '--accent': 'oklch(0.24 0.03 48)',\r\n '--accent-foreground': 'oklch(0.92 0.015 60)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.72 0.15 65)',\r\n '--chart-1': 'oklch(0.72 0.15 65)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'candyland',\r\n label: 'Candyland',\r\n preview: '#e11d48',\r\n colors: ['#e11d48', '#06b6d4', '#22c55e', '#f59e0b', '#fce7f3'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.018 15)',\r\n '--foreground': 'oklch(0.18 0.04 340)',\r\n '--card': 'oklch(0.975 0.013 15)',\r\n '--card-foreground': 'oklch(0.18 0.04 340)',\r\n '--popover': 'oklch(0.975 0.013 15)',\r\n '--popover-foreground': 'oklch(0.18 0.04 340)',\r\n '--primary': 'oklch(0.585 0.22 3.717)',\r\n '--primary-foreground': 'oklch(0.98 0.005 340)',\r\n '--secondary': 'oklch(0.91 0.028 15)',\r\n '--secondary-foreground': 'oklch(0.3 0.04 340)',\r\n '--muted': 'oklch(0.92 0.022 15)',\r\n '--muted-foreground': 'oklch(0.5 0.04 340)',\r\n '--accent': 'oklch(0.9 0.04 200)',\r\n '--accent-foreground': 'oklch(0.25 0.04 200)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.87 0.035 15)',\r\n '--input': 'oklch(0.87 0.035 15)',\r\n '--ring': 'oklch(0.585 0.22 3.717)',\r\n '--chart-1': 'oklch(0.585 0.22 3.717)',\r\n '--chart-2': 'oklch(0.715 0.143 198.14)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.14 0.03 340)',\r\n '--foreground': 'oklch(0.94 0.01 340)',\r\n '--card': 'oklch(0.17 0.03 338)',\r\n '--card-foreground': 'oklch(0.94 0.01 340)',\r\n '--popover': 'oklch(0.19 0.035 340)',\r\n '--popover-foreground': 'oklch(0.94 0.01 340)',\r\n '--primary': 'oklch(0.65 0.24 5)',\r\n '--primary-foreground': 'oklch(0.14 0.03 340)',\r\n '--secondary': 'oklch(0.24 0.03 338)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 340)',\r\n '--muted': 'oklch(0.24 0.03 338)',\r\n '--muted-foreground': 'oklch(0.65 0.04 340)',\r\n '--accent': 'oklch(0.24 0.035 200)',\r\n '--accent-foreground': 'oklch(0.94 0.01 200)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.65 0.24 5)',\r\n '--chart-1': 'oklch(0.65 0.24 5)',\r\n '--chart-2': 'oklch(0.715 0.143 198.14)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'catppuccin',\r\n label: 'Catppuccin',\r\n preview: '#cba6f7',\r\n colors: ['#cba6f7', '#f5c2e7', '#89b4fa', '#a6e3a1', '#1e1e2e'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.018 280)',\r\n '--foreground': 'oklch(0.28 0.03 280)',\r\n '--card': 'oklch(0.95 0.014 280)',\r\n '--card-foreground': 'oklch(0.28 0.03 280)',\r\n '--popover': 'oklch(0.95 0.014 280)',\r\n '--popover-foreground': 'oklch(0.28 0.03 280)',\r\n '--primary': 'oklch(0.57 0.18 295)',\r\n '--primary-foreground': 'oklch(0.97 0.006 280)',\r\n '--secondary': 'oklch(0.88 0.025 280)',\r\n '--secondary-foreground': 'oklch(0.35 0.03 280)',\r\n '--muted': 'oklch(0.89 0.022 280)',\r\n '--muted-foreground': 'oklch(0.5 0.03 280)',\r\n '--accent': 'oklch(0.87 0.03 280)',\r\n '--accent-foreground': 'oklch(0.35 0.03 280)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.025 280)',\r\n '--input': 'oklch(0.84 0.025 280)',\r\n '--ring': 'oklch(0.57 0.18 295)',\r\n '--chart-1': 'oklch(0.57 0.18 295)',\r\n '--chart-2': 'oklch(0.72 0.14 350)',\r\n '--chart-3': 'oklch(0.65 0.17 260)',\r\n '--chart-4': 'oklch(0.78 0.17 145)',\r\n '--chart-5': 'oklch(0.72 0.16 200)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.16 0.015 280)',\r\n '--foreground': 'oklch(0.9 0.01 280)',\r\n '--card': 'oklch(0.19 0.018 278)',\r\n '--card-foreground': 'oklch(0.9 0.01 280)',\r\n '--popover': 'oklch(0.21 0.02 280)',\r\n '--popover-foreground': 'oklch(0.9 0.01 280)',\r\n '--primary': 'oklch(0.78 0.15 295)',\r\n '--primary-foreground': 'oklch(0.16 0.015 280)',\r\n '--secondary': 'oklch(0.25 0.02 278)',\r\n '--secondary-foreground': 'oklch(0.9 0.01 280)',\r\n '--muted': 'oklch(0.25 0.02 278)',\r\n '--muted-foreground': 'oklch(0.65 0.03 280)',\r\n '--accent': 'oklch(0.25 0.02 278)',\r\n '--accent-foreground': 'oklch(0.9 0.01 280)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.3 0.018 280)',\r\n '--input': 'oklch(0.3 0.018 280)',\r\n '--ring': 'oklch(0.78 0.15 295)',\r\n '--chart-1': 'oklch(0.78 0.15 295)',\r\n '--chart-2': 'oklch(0.8 0.12 350)',\r\n '--chart-3': 'oklch(0.72 0.14 260)',\r\n '--chart-4': 'oklch(0.82 0.14 145)',\r\n '--chart-5': 'oklch(0.75 0.13 200)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'claude',\r\n label: 'Claude',\r\n preview: '#da7b3c',\r\n colors: ['#da7b3c', '#f5e6d3', '#c8956c', '#e8c5a0', '#2d2419'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.022 60)',\r\n '--foreground': 'oklch(0.2 0.03 55)',\r\n '--card': 'oklch(0.975 0.016 60)',\r\n '--card-foreground': 'oklch(0.2 0.03 55)',\r\n '--popover': 'oklch(0.975 0.016 60)',\r\n '--popover-foreground': 'oklch(0.2 0.03 55)',\r\n '--primary': 'oklch(0.62 0.16 50)',\r\n '--primary-foreground': 'oklch(0.98 0.01 65)',\r\n '--secondary': 'oklch(0.91 0.032 60)',\r\n '--secondary-foreground': 'oklch(0.3 0.04 55)',\r\n '--muted': 'oklch(0.92 0.026 60)',\r\n '--muted-foreground': 'oklch(0.5 0.03 55)',\r\n '--accent': 'oklch(0.9 0.038 60)',\r\n '--accent-foreground': 'oklch(0.3 0.04 55)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.035 60)',\r\n '--input': 'oklch(0.86 0.035 60)',\r\n '--ring': 'oklch(0.62 0.16 50)',\r\n '--chart-1': 'oklch(0.62 0.16 50)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.546 0.245 262.881)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.14 0.02 50)',\r\n '--foreground': 'oklch(0.92 0.012 60)',\r\n '--card': 'oklch(0.17 0.02 48)',\r\n '--card-foreground': 'oklch(0.92 0.012 60)',\r\n '--popover': 'oklch(0.19 0.025 50)',\r\n '--popover-foreground': 'oklch(0.92 0.012 60)',\r\n '--primary': 'oklch(0.73 0.14 52)',\r\n '--primary-foreground': 'oklch(0.14 0.02 50)',\r\n '--secondary': 'oklch(0.24 0.025 48)',\r\n '--secondary-foreground': 'oklch(0.92 0.012 60)',\r\n '--muted': 'oklch(0.24 0.025 48)',\r\n '--muted-foreground': 'oklch(0.62 0.035 55)',\r\n '--accent': 'oklch(0.24 0.025 48)',\r\n '--accent-foreground': 'oklch(0.92 0.012 60)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.73 0.14 52)',\r\n '--chart-1': 'oklch(0.73 0.14 52)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'claymorphism',\r\n label: 'Claymorphism',\r\n preview: '#8b7355',\r\n colors: ['#8b7355', '#c4a97d', '#e8dfd5', '#d4c4b0', '#f5f0eb'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.02 75)',\r\n '--foreground': 'oklch(0.25 0.03 60)',\r\n '--card': 'oklch(0.965 0.015 75)',\r\n '--card-foreground': 'oklch(0.25 0.03 60)',\r\n '--popover': 'oklch(0.965 0.015 75)',\r\n '--popover-foreground': 'oklch(0.25 0.03 60)',\r\n '--primary': 'oklch(0.52 0.07 65)',\r\n '--primary-foreground': 'oklch(0.97 0.008 75)',\r\n '--secondary': 'oklch(0.9 0.028 70)',\r\n '--secondary-foreground': 'oklch(0.35 0.03 60)',\r\n '--muted': 'oklch(0.91 0.022 70)',\r\n '--muted-foreground': 'oklch(0.5 0.03 65)',\r\n '--accent': 'oklch(0.88 0.032 70)',\r\n '--accent-foreground': 'oklch(0.35 0.03 60)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.03 70)',\r\n '--input': 'oklch(0.85 0.03 70)',\r\n '--ring': 'oklch(0.52 0.07 65)',\r\n '--chart-1': 'oklch(0.52 0.07 65)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.546 0.245 262.881)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.15 0.015 60)',\r\n '--foreground': 'oklch(0.92 0.01 70)',\r\n '--card': 'oklch(0.18 0.015 58)',\r\n '--card-foreground': 'oklch(0.92 0.01 70)',\r\n '--popover': 'oklch(0.2 0.018 60)',\r\n '--popover-foreground': 'oklch(0.92 0.01 70)',\r\n '--primary': 'oklch(0.72 0.08 65)',\r\n '--primary-foreground': 'oklch(0.15 0.015 60)',\r\n '--secondary': 'oklch(0.25 0.018 58)',\r\n '--secondary-foreground': 'oklch(0.92 0.01 70)',\r\n '--muted': 'oklch(0.25 0.018 58)',\r\n '--muted-foreground': 'oklch(0.62 0.03 65)',\r\n '--accent': 'oklch(0.25 0.018 58)',\r\n '--accent-foreground': 'oklch(0.92 0.01 70)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.3 0.015 60)',\r\n '--input': 'oklch(0.3 0.015 60)',\r\n '--ring': 'oklch(0.72 0.08 65)',\r\n '--chart-1': 'oklch(0.72 0.08 65)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'clean-slate',\r\n label: 'Clean Slate',\r\n preview: '#475569',\r\n colors: ['#475569', '#64748b', '#94a3b8', '#cbd5e1', '#f8fafc'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.01 250)',\r\n '--foreground': 'oklch(0.2 0.04 260)',\r\n '--card': 'oklch(0.965 0.007 250)',\r\n '--card-foreground': 'oklch(0.2 0.04 260)',\r\n '--popover': 'oklch(0.965 0.007 250)',\r\n '--popover-foreground': 'oklch(0.2 0.04 260)',\r\n '--primary': 'oklch(0.446 0.043 257.281)',\r\n '--primary-foreground': 'oklch(0.99 0.002 250)',\r\n '--secondary': 'oklch(0.9 0.014 250)',\r\n '--secondary-foreground': 'oklch(0.3 0.04 260)',\r\n '--muted': 'oklch(0.91 0.011 250)',\r\n '--muted-foreground': 'oklch(0.554 0.046 257.417)',\r\n '--accent': 'oklch(0.9 0.014 250)',\r\n '--accent-foreground': 'oklch(0.3 0.04 260)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.016 250)',\r\n '--input': 'oklch(0.86 0.016 250)',\r\n '--ring': 'oklch(0.446 0.043 257.281)',\r\n '--chart-1': 'oklch(0.446 0.043 257.281)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.585 0.22 3.717)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.13 0.02 260)',\r\n '--foreground': 'oklch(0.93 0.008 250)',\r\n '--card': 'oklch(0.16 0.02 258)',\r\n '--card-foreground': 'oklch(0.93 0.008 250)',\r\n '--popover': 'oklch(0.18 0.025 260)',\r\n '--popover-foreground': 'oklch(0.93 0.008 250)',\r\n '--primary': 'oklch(0.869 0.022 252.894)',\r\n '--primary-foreground': 'oklch(0.13 0.02 260)',\r\n '--secondary': 'oklch(0.24 0.02 258)',\r\n '--secondary-foreground': 'oklch(0.93 0.008 250)',\r\n '--muted': 'oklch(0.24 0.02 258)',\r\n '--muted-foreground': 'oklch(0.704 0.04 256.788)',\r\n '--accent': 'oklch(0.24 0.02 258)',\r\n '--accent-foreground': 'oklch(0.93 0.008 250)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.869 0.022 252.894)',\r\n '--chart-1': 'oklch(0.869 0.022 252.894)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.645 0.246 16.439)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'cosmic-night',\r\n label: 'Cosmic Night',\r\n preview: '#6366f1',\r\n colors: ['#6366f1', '#818cf8', '#a78bfa', '#c7d2fe', '#0f0524'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.022 275)',\r\n '--foreground': 'oklch(0.15 0.05 275)',\r\n '--card': 'oklch(0.95 0.016 275)',\r\n '--card-foreground': 'oklch(0.15 0.05 275)',\r\n '--popover': 'oklch(0.95 0.016 275)',\r\n '--popover-foreground': 'oklch(0.15 0.05 275)',\r\n '--primary': 'oklch(0.55 0.24 278)',\r\n '--primary-foreground': 'oklch(0.98 0.005 275)',\r\n '--secondary': 'oklch(0.88 0.032 275)',\r\n '--secondary-foreground': 'oklch(0.25 0.05 275)',\r\n '--muted': 'oklch(0.89 0.026 275)',\r\n '--muted-foreground': 'oklch(0.5 0.04 275)',\r\n '--accent': 'oklch(0.87 0.038 275)',\r\n '--accent-foreground': 'oklch(0.25 0.05 275)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.03 275)',\r\n '--input': 'oklch(0.84 0.03 275)',\r\n '--ring': 'oklch(0.55 0.24 278)',\r\n '--chart-1': 'oklch(0.55 0.24 278)',\r\n '--chart-2': 'oklch(0.627 0.265 303.9)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.1 0.045 275)',\r\n '--foreground': 'oklch(0.93 0.01 275)',\r\n '--card': 'oklch(0.13 0.045 273)',\r\n '--card-foreground': 'oklch(0.93 0.01 275)',\r\n '--popover': 'oklch(0.15 0.05 275)',\r\n '--popover-foreground': 'oklch(0.93 0.01 275)',\r\n '--primary': 'oklch(0.68 0.2 278)',\r\n '--primary-foreground': 'oklch(0.1 0.045 275)',\r\n '--secondary': 'oklch(0.2 0.04 273)',\r\n '--secondary-foreground': 'oklch(0.93 0.01 275)',\r\n '--muted': 'oklch(0.2 0.04 273)',\r\n '--muted-foreground': 'oklch(0.65 0.04 275)',\r\n '--accent': 'oklch(0.2 0.04 273)',\r\n '--accent-foreground': 'oklch(0.93 0.01 275)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 8%)',\r\n '--input': 'oklch(1 0 0 / 12%)',\r\n '--ring': 'oklch(0.68 0.2 278)',\r\n '--chart-1': 'oklch(0.68 0.2 278)',\r\n '--chart-2': 'oklch(0.627 0.265 303.9)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'cyberpunk',\r\n label: 'Cyberpunk',\r\n preview: '#00ff88',\r\n colors: ['#00ff88', '#ff0080', '#00d4ff', '#ffff00', '#0a0a0a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.015 160)',\r\n '--foreground': 'oklch(0.12 0.02 180)',\r\n '--card': 'oklch(0.945 0.012 160)',\r\n '--card-foreground': 'oklch(0.12 0.02 180)',\r\n '--popover': 'oklch(0.945 0.012 160)',\r\n '--popover-foreground': 'oklch(0.12 0.02 180)',\r\n '--primary': 'oklch(0.62 0.22 160)',\r\n '--primary-foreground': 'oklch(0.12 0.02 180)',\r\n '--secondary': 'oklch(0.88 0.025 160)',\r\n '--secondary-foreground': 'oklch(0.2 0.02 180)',\r\n '--muted': 'oklch(0.89 0.02 160)',\r\n '--muted-foreground': 'oklch(0.45 0.03 180)',\r\n '--accent': 'oklch(0.87 0.04 320)',\r\n '--accent-foreground': 'oklch(0.2 0.03 320)',\r\n '--destructive': 'oklch(0.65 0.28 340)',\r\n '--border': 'oklch(0.84 0.025 160)',\r\n '--input': 'oklch(0.84 0.025 160)',\r\n '--ring': 'oklch(0.62 0.22 160)',\r\n '--chart-1': 'oklch(0.87 0.3 155)',\r\n '--chart-2': 'oklch(0.65 0.28 340)',\r\n '--chart-3': 'oklch(0.75 0.17 220)',\r\n '--chart-4': 'oklch(0.9 0.22 105)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.09 0.005 0)',\r\n '--foreground': 'oklch(0.92 0.01 180)',\r\n '--card': 'oklch(0.12 0.008 270)',\r\n '--card-foreground': 'oklch(0.92 0.01 180)',\r\n '--popover': 'oklch(0.14 0.01 270)',\r\n '--popover-foreground': 'oklch(0.92 0.01 180)',\r\n '--primary': 'oklch(0.87 0.3 155)',\r\n '--primary-foreground': 'oklch(0.09 0.005 0)',\r\n '--secondary': 'oklch(0.18 0.01 270)',\r\n '--secondary-foreground': 'oklch(0.92 0.01 180)',\r\n '--muted': 'oklch(0.18 0.01 270)',\r\n '--muted-foreground': 'oklch(0.6 0.02 180)',\r\n '--accent': 'oklch(0.18 0.015 320)',\r\n '--accent-foreground': 'oklch(0.87 0.3 155)',\r\n '--destructive': 'oklch(0.72 0.26 340)',\r\n '--border': 'oklch(0.87 0.3 155 / 15%)',\r\n '--input': 'oklch(0.87 0.3 155 / 20%)',\r\n '--ring': 'oklch(0.87 0.3 155)',\r\n '--chart-1': 'oklch(0.87 0.3 155)',\r\n '--chart-2': 'oklch(0.72 0.26 340)',\r\n '--chart-3': 'oklch(0.75 0.17 220)',\r\n '--chart-4': 'oklch(0.9 0.22 105)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'darkmatter',\r\n label: 'Darkmatter',\r\n preview: '#525252',\r\n colors: ['#404040', '#525252', '#737373', '#a3a3a3', '#0a0a0a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.004 286)',\r\n '--foreground': 'oklch(0.145 0.005 285)',\r\n '--card': 'oklch(0.955 0.003 286)',\r\n '--card-foreground': 'oklch(0.145 0.005 285)',\r\n '--popover': 'oklch(0.955 0.003 286)',\r\n '--popover-foreground': 'oklch(0.145 0.005 285)',\r\n '--primary': 'oklch(0.27 0.006 286)',\r\n '--primary-foreground': 'oklch(0.985 0 0)',\r\n '--secondary': 'oklch(0.89 0.005 286)',\r\n '--secondary-foreground': 'oklch(0.27 0.006 286)',\r\n '--muted': 'oklch(0.9 0.004 286)',\r\n '--muted-foreground': 'oklch(0.55 0.013 286)',\r\n '--accent': 'oklch(0.88 0.006 286)',\r\n '--accent-foreground': 'oklch(0.27 0.006 286)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.007 286)',\r\n '--input': 'oklch(0.85 0.007 286)',\r\n '--ring': 'oklch(0.55 0.013 286)',\r\n '--chart-1': 'oklch(0.37 0.013 286)',\r\n '--chart-2': 'oklch(0.55 0.013 286)',\r\n '--chart-3': 'oklch(0.705 0.015 286)',\r\n '--chart-4': 'oklch(0.445 0.012 286)',\r\n '--chart-5': 'oklch(0.63 0.014 286)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.1 0.003 286)',\r\n '--foreground': 'oklch(0.92 0.004 286)',\r\n '--card': 'oklch(0.13 0.004 286)',\r\n '--card-foreground': 'oklch(0.92 0.004 286)',\r\n '--popover': 'oklch(0.15 0.004 286)',\r\n '--popover-foreground': 'oklch(0.92 0.004 286)',\r\n '--primary': 'oklch(0.87 0.006 286)',\r\n '--primary-foreground': 'oklch(0.1 0.003 286)',\r\n '--secondary': 'oklch(0.21 0.005 286)',\r\n '--secondary-foreground': 'oklch(0.92 0.004 286)',\r\n '--muted': 'oklch(0.21 0.005 286)',\r\n '--muted-foreground': 'oklch(0.6 0.01 286)',\r\n '--accent': 'oklch(0.21 0.005 286)',\r\n '--accent-foreground': 'oklch(0.92 0.004 286)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 8%)',\r\n '--input': 'oklch(1 0 0 / 12%)',\r\n '--ring': 'oklch(0.6 0.01 286)',\r\n '--chart-1': 'oklch(0.5 0.01 286)',\r\n '--chart-2': 'oklch(0.65 0.012 286)',\r\n '--chart-3': 'oklch(0.8 0.008 286)',\r\n '--chart-4': 'oklch(0.55 0.011 286)',\r\n '--chart-5': 'oklch(0.72 0.01 286)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'doom-64',\r\n label: 'Doom 64',\r\n preview: '#dc2626',\r\n colors: ['#dc2626', '#16a34a', '#ca8a04', '#71717a', '#1a0f0f'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.016 25)',\r\n '--foreground': 'oklch(0.18 0.02 20)',\r\n '--card': 'oklch(0.955 0.012 25)',\r\n '--card-foreground': 'oklch(0.18 0.02 20)',\r\n '--popover': 'oklch(0.955 0.012 25)',\r\n '--popover-foreground': 'oklch(0.18 0.02 20)',\r\n '--primary': 'oklch(0.577 0.245 27.325)',\r\n '--primary-foreground': 'oklch(0.97 0.005 25)',\r\n '--secondary': 'oklch(0.89 0.022 25)',\r\n '--secondary-foreground': 'oklch(0.3 0.02 20)',\r\n '--muted': 'oklch(0.9 0.018 25)',\r\n '--muted-foreground': 'oklch(0.5 0.02 20)',\r\n '--accent': 'oklch(0.88 0.025 25)',\r\n '--accent-foreground': 'oklch(0.3 0.02 20)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.025 25)',\r\n '--input': 'oklch(0.85 0.025 25)',\r\n '--ring': 'oklch(0.577 0.245 27.325)',\r\n '--chart-1': 'oklch(0.577 0.245 27.325)',\r\n '--chart-2': 'oklch(0.527 0.154 150.069)',\r\n '--chart-3': 'oklch(0.705 0.15 65)',\r\n '--chart-4': 'oklch(0.55 0.013 286)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.015 20)',\r\n '--foreground': 'oklch(0.88 0.01 25)',\r\n '--card': 'oklch(0.15 0.018 18)',\r\n '--card-foreground': 'oklch(0.88 0.01 25)',\r\n '--popover': 'oklch(0.17 0.02 20)',\r\n '--popover-foreground': 'oklch(0.88 0.01 25)',\r\n '--primary': 'oklch(0.637 0.237 25.331)',\r\n '--primary-foreground': 'oklch(0.12 0.015 20)',\r\n '--secondary': 'oklch(0.22 0.018 18)',\r\n '--secondary-foreground': 'oklch(0.88 0.01 25)',\r\n '--muted': 'oklch(0.22 0.018 18)',\r\n '--muted-foreground': 'oklch(0.6 0.02 20)',\r\n '--accent': 'oklch(0.22 0.018 18)',\r\n '--accent-foreground': 'oklch(0.88 0.01 25)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.637 0.237 25.331 / 15%)',\r\n '--input': 'oklch(0.637 0.237 25.331 / 20%)',\r\n '--ring': 'oklch(0.637 0.237 25.331)',\r\n '--chart-1': 'oklch(0.637 0.237 25.331)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.6 0.01 286)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'elegant-luxury',\r\n label: 'Elegant Luxury',\r\n preview: '#d4a853',\r\n colors: ['#d4a853', '#b8960c', '#a3a3a3', '#e5e5e5', '#0c0a09'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.018 80)',\r\n '--foreground': 'oklch(0.15 0.01 60)',\r\n '--card': 'oklch(0.97 0.013 80)',\r\n '--card-foreground': 'oklch(0.15 0.01 60)',\r\n '--popover': 'oklch(0.97 0.013 80)',\r\n '--popover-foreground': 'oklch(0.15 0.01 60)',\r\n '--primary': 'oklch(0.65 0.13 80)',\r\n '--primary-foreground': 'oklch(0.15 0.01 60)',\r\n '--secondary': 'oklch(0.91 0.022 80)',\r\n '--secondary-foreground': 'oklch(0.25 0.01 60)',\r\n '--muted': 'oklch(0.92 0.018 80)',\r\n '--muted-foreground': 'oklch(0.5 0.015 70)',\r\n '--accent': 'oklch(0.9 0.026 80)',\r\n '--accent-foreground': 'oklch(0.25 0.01 60)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.87 0.022 80)',\r\n '--input': 'oklch(0.87 0.022 80)',\r\n '--ring': 'oklch(0.65 0.13 80)',\r\n '--chart-1': 'oklch(0.65 0.13 80)',\r\n '--chart-2': 'oklch(0.55 0.013 286)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.585 0.22 3.717)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.1 0.008 60)',\r\n '--foreground': 'oklch(0.92 0.008 80)',\r\n '--card': 'oklch(0.13 0.008 58)',\r\n '--card-foreground': 'oklch(0.92 0.008 80)',\r\n '--popover': 'oklch(0.15 0.01 60)',\r\n '--popover-foreground': 'oklch(0.92 0.008 80)',\r\n '--primary': 'oklch(0.78 0.14 80)',\r\n '--primary-foreground': 'oklch(0.1 0.008 60)',\r\n '--secondary': 'oklch(0.2 0.008 58)',\r\n '--secondary-foreground': 'oklch(0.92 0.008 80)',\r\n '--muted': 'oklch(0.2 0.008 58)',\r\n '--muted-foreground': 'oklch(0.6 0.015 70)',\r\n '--accent': 'oklch(0.2 0.008 58)',\r\n '--accent-foreground': 'oklch(0.92 0.008 80)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.78 0.14 80 / 12%)',\r\n '--input': 'oklch(0.78 0.14 80 / 18%)',\r\n '--ring': 'oklch(0.78 0.14 80)',\r\n '--chart-1': 'oklch(0.78 0.14 80)',\r\n '--chart-2': 'oklch(0.6 0.01 286)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.645 0.246 16.439)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'frost',\r\n label: 'Frost',\r\n preview: '#0ea5e9',\r\n colors: ['#0ea5e9', '#38bdf8', '#7dd3fc', '#bae6fd', '#e0f2fe'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.025 220)',\r\n '--foreground': 'oklch(0.18 0.04 230)',\r\n '--card': 'oklch(0.955 0.019 220)',\r\n '--card-foreground': 'oklch(0.18 0.04 230)',\r\n '--popover': 'oklch(0.955 0.019 220)',\r\n '--popover-foreground': 'oklch(0.18 0.04 230)',\r\n '--primary': 'oklch(0.62 0.16 230)',\r\n '--primary-foreground': 'oklch(0.99 0.005 220)',\r\n '--secondary': 'oklch(0.89 0.035 220)',\r\n '--secondary-foreground': 'oklch(0.28 0.04 230)',\r\n '--muted': 'oklch(0.9 0.028 220)',\r\n '--muted-foreground': 'oklch(0.5 0.03 230)',\r\n '--accent': 'oklch(0.88 0.04 220)',\r\n '--accent-foreground': 'oklch(0.28 0.04 230)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.035 220)',\r\n '--input': 'oklch(0.85 0.035 220)',\r\n '--ring': 'oklch(0.62 0.16 230)',\r\n '--chart-1': 'oklch(0.62 0.16 230)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.627 0.265 303.9)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.13 0.025 230)',\r\n '--foreground': 'oklch(0.94 0.01 220)',\r\n '--card': 'oklch(0.16 0.025 228)',\r\n '--card-foreground': 'oklch(0.94 0.01 220)',\r\n '--popover': 'oklch(0.18 0.03 230)',\r\n '--popover-foreground': 'oklch(0.94 0.01 220)',\r\n '--primary': 'oklch(0.75 0.15 225)',\r\n '--primary-foreground': 'oklch(0.13 0.025 230)',\r\n '--secondary': 'oklch(0.23 0.025 228)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 220)',\r\n '--muted': 'oklch(0.23 0.025 228)',\r\n '--muted-foreground': 'oklch(0.65 0.03 225)',\r\n '--accent': 'oklch(0.23 0.025 228)',\r\n '--accent-foreground': 'oklch(0.94 0.01 220)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.75 0.15 225)',\r\n '--chart-1': 'oklch(0.75 0.15 225)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.627 0.265 303.9)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'horizon',\r\n label: 'Horizon',\r\n preview: '#f43f5e',\r\n colors: ['#f43f5e', '#fb923c', '#fbbf24', '#a78bfa', '#0f172a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.022 20)',\r\n '--foreground': 'oklch(0.18 0.03 30)',\r\n '--card': 'oklch(0.965 0.016 20)',\r\n '--card-foreground': 'oklch(0.18 0.03 30)',\r\n '--popover': 'oklch(0.965 0.016 20)',\r\n '--popover-foreground': 'oklch(0.18 0.03 30)',\r\n '--primary': 'oklch(0.585 0.22 3.717)',\r\n '--primary-foreground': 'oklch(0.99 0.005 20)',\r\n '--secondary': 'oklch(0.9 0.032 30)',\r\n '--secondary-foreground': 'oklch(0.28 0.03 30)',\r\n '--muted': 'oklch(0.91 0.026 30)',\r\n '--muted-foreground': 'oklch(0.5 0.03 30)',\r\n '--accent': 'oklch(0.89 0.038 50)',\r\n '--accent-foreground': 'oklch(0.28 0.03 50)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.028 30)',\r\n '--input': 'oklch(0.86 0.028 30)',\r\n '--ring': 'oklch(0.585 0.22 3.717)',\r\n '--chart-1': 'oklch(0.645 0.246 16.439)',\r\n '--chart-2': 'oklch(0.705 0.213 47.604)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.025 260)',\r\n '--foreground': 'oklch(0.94 0.01 30)',\r\n '--card': 'oklch(0.15 0.025 258)',\r\n '--card-foreground': 'oklch(0.94 0.01 30)',\r\n '--popover': 'oklch(0.17 0.03 260)',\r\n '--popover-foreground': 'oklch(0.94 0.01 30)',\r\n '--primary': 'oklch(0.65 0.24 5)',\r\n '--primary-foreground': 'oklch(0.12 0.025 260)',\r\n '--secondary': 'oklch(0.22 0.025 258)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 30)',\r\n '--muted': 'oklch(0.22 0.025 258)',\r\n '--muted-foreground': 'oklch(0.65 0.03 30)',\r\n '--accent': 'oklch(0.22 0.03 50)',\r\n '--accent-foreground': 'oklch(0.94 0.01 30)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.65 0.24 5)',\r\n '--chart-1': 'oklch(0.645 0.246 16.439)',\r\n '--chart-2': 'oklch(0.769 0.188 70.08)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'lavender-dreams',\r\n label: 'Lavender Dreams',\r\n preview: '#9333ea',\r\n colors: ['#9333ea', '#a855f7', '#c084fc', '#e9d5ff', '#faf5ff'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.022 300)',\r\n '--foreground': 'oklch(0.18 0.04 300)',\r\n '--card': 'oklch(0.955 0.016 300)',\r\n '--card-foreground': 'oklch(0.18 0.04 300)',\r\n '--popover': 'oklch(0.955 0.016 300)',\r\n '--popover-foreground': 'oklch(0.18 0.04 300)',\r\n '--primary': 'oklch(0.53 0.25 305)',\r\n '--primary-foreground': 'oklch(0.99 0.005 300)',\r\n '--secondary': 'oklch(0.89 0.034 300)',\r\n '--secondary-foreground': 'oklch(0.28 0.04 300)',\r\n '--muted': 'oklch(0.9 0.028 300)',\r\n '--muted-foreground': 'oklch(0.5 0.03 300)',\r\n '--accent': 'oklch(0.88 0.042 300)',\r\n '--accent-foreground': 'oklch(0.28 0.04 300)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.032 300)',\r\n '--input': 'oklch(0.85 0.032 300)',\r\n '--ring': 'oklch(0.53 0.25 305)',\r\n '--chart-1': 'oklch(0.53 0.25 305)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.585 0.22 3.717)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.13 0.03 300)',\r\n '--foreground': 'oklch(0.94 0.01 300)',\r\n '--card': 'oklch(0.16 0.03 298)',\r\n '--card-foreground': 'oklch(0.94 0.01 300)',\r\n '--popover': 'oklch(0.18 0.035 300)',\r\n '--popover-foreground': 'oklch(0.94 0.01 300)',\r\n '--primary': 'oklch(0.7 0.22 300)',\r\n '--primary-foreground': 'oklch(0.13 0.03 300)',\r\n '--secondary': 'oklch(0.23 0.03 298)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 300)',\r\n '--muted': 'oklch(0.23 0.03 298)',\r\n '--muted-foreground': 'oklch(0.65 0.03 300)',\r\n '--accent': 'oklch(0.23 0.03 298)',\r\n '--accent-foreground': 'oklch(0.94 0.01 300)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.7 0.22 300)',\r\n '--chart-1': 'oklch(0.7 0.22 300)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.645 0.246 16.439)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'midnight',\r\n label: 'Midnight',\r\n preview: '#3b82f6',\r\n colors: ['#3b82f6', '#60a5fa', '#93c5fd', '#bfdbfe', '#020617'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.02 260)',\r\n '--foreground': 'oklch(0.15 0.05 260)',\r\n '--card': 'oklch(0.945 0.015 260)',\r\n '--card-foreground': 'oklch(0.15 0.05 260)',\r\n '--popover': 'oklch(0.945 0.015 260)',\r\n '--popover-foreground': 'oklch(0.15 0.05 260)',\r\n '--primary': 'oklch(0.546 0.245 262.881)',\r\n '--primary-foreground': 'oklch(0.99 0.004 260)',\r\n '--secondary': 'oklch(0.88 0.03 260)',\r\n '--secondary-foreground': 'oklch(0.25 0.05 260)',\r\n '--muted': 'oklch(0.89 0.024 260)',\r\n '--muted-foreground': 'oklch(0.5 0.04 260)',\r\n '--accent': 'oklch(0.87 0.034 260)',\r\n '--accent-foreground': 'oklch(0.25 0.05 260)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.028 260)',\r\n '--input': 'oklch(0.84 0.028 260)',\r\n '--ring': 'oklch(0.546 0.245 262.881)',\r\n '--chart-1': 'oklch(0.546 0.245 262.881)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.585 0.22 3.717)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.08 0.04 260)',\r\n '--foreground': 'oklch(0.93 0.008 260)',\r\n '--card': 'oklch(0.11 0.04 258)',\r\n '--card-foreground': 'oklch(0.93 0.008 260)',\r\n '--popover': 'oklch(0.13 0.045 260)',\r\n '--popover-foreground': 'oklch(0.93 0.008 260)',\r\n '--primary': 'oklch(0.623 0.214 259.815)',\r\n '--primary-foreground': 'oklch(0.08 0.04 260)',\r\n '--secondary': 'oklch(0.18 0.04 258)',\r\n '--secondary-foreground': 'oklch(0.93 0.008 260)',\r\n '--muted': 'oklch(0.18 0.04 258)',\r\n '--muted-foreground': 'oklch(0.65 0.03 260)',\r\n '--accent': 'oklch(0.18 0.04 258)',\r\n '--accent-foreground': 'oklch(0.93 0.008 260)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 8%)',\r\n '--input': 'oklch(1 0 0 / 12%)',\r\n '--ring': 'oklch(0.623 0.214 259.815)',\r\n '--chart-1': 'oklch(0.623 0.214 259.815)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.645 0.246 16.439)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'nord',\r\n label: 'Nord',\r\n preview: '#88c0d0',\r\n colors: ['#88c0d0', '#81a1c1', '#5e81ac', '#b48ead', '#2e3440'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.018 230)',\r\n '--foreground': 'oklch(0.25 0.03 230)',\r\n '--card': 'oklch(0.955 0.013 230)',\r\n '--card-foreground': 'oklch(0.25 0.03 230)',\r\n '--popover': 'oklch(0.955 0.013 230)',\r\n '--popover-foreground': 'oklch(0.25 0.03 230)',\r\n '--primary': 'oklch(0.55 0.09 215)',\r\n '--primary-foreground': 'oklch(0.97 0.005 230)',\r\n '--secondary': 'oklch(0.89 0.025 230)',\r\n '--secondary-foreground': 'oklch(0.32 0.03 230)',\r\n '--muted': 'oklch(0.9 0.02 230)',\r\n '--muted-foreground': 'oklch(0.5 0.025 230)',\r\n '--accent': 'oklch(0.88 0.028 230)',\r\n '--accent-foreground': 'oklch(0.32 0.03 230)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.022 230)',\r\n '--input': 'oklch(0.85 0.022 230)',\r\n '--ring': 'oklch(0.55 0.09 215)',\r\n '--chart-1': 'oklch(0.73 0.08 210)',\r\n '--chart-2': 'oklch(0.63 0.07 240)',\r\n '--chart-3': 'oklch(0.55 0.09 255)',\r\n '--chart-4': 'oklch(0.68 0.1 330)',\r\n '--chart-5': 'oklch(0.72 0.12 100)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.22 0.02 230)',\r\n '--foreground': 'oklch(0.92 0.008 225)',\r\n '--card': 'oklch(0.25 0.02 228)',\r\n '--card-foreground': 'oklch(0.92 0.008 225)',\r\n '--popover': 'oklch(0.27 0.022 230)',\r\n '--popover-foreground': 'oklch(0.92 0.008 225)',\r\n '--primary': 'oklch(0.73 0.08 210)',\r\n '--primary-foreground': 'oklch(0.22 0.02 230)',\r\n '--secondary': 'oklch(0.3 0.02 228)',\r\n '--secondary-foreground': 'oklch(0.92 0.008 225)',\r\n '--muted': 'oklch(0.3 0.02 228)',\r\n '--muted-foreground': 'oklch(0.65 0.025 230)',\r\n '--accent': 'oklch(0.3 0.02 228)',\r\n '--accent-foreground': 'oklch(0.92 0.008 225)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.35 0.018 228)',\r\n '--input': 'oklch(0.35 0.018 228)',\r\n '--ring': 'oklch(0.73 0.08 210)',\r\n '--chart-1': 'oklch(0.73 0.08 210)',\r\n '--chart-2': 'oklch(0.63 0.07 240)',\r\n '--chart-3': 'oklch(0.55 0.09 255)',\r\n '--chart-4': 'oklch(0.68 0.1 330)',\r\n '--chart-5': 'oklch(0.72 0.12 100)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'sunset-vibes',\r\n label: 'Sunset Vibes',\r\n preview: '#ea580c',\r\n colors: ['#ea580c', '#f97316', '#fb923c', '#fdba74', '#431407'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.028 40)',\r\n '--foreground': 'oklch(0.18 0.03 35)',\r\n '--card': 'oklch(0.965 0.022 40)',\r\n '--card-foreground': 'oklch(0.18 0.03 35)',\r\n '--popover': 'oklch(0.965 0.022 40)',\r\n '--popover-foreground': 'oklch(0.18 0.03 35)',\r\n '--primary': 'oklch(0.58 0.22 38)',\r\n '--primary-foreground': 'oklch(0.99 0.005 40)',\r\n '--secondary': 'oklch(0.9 0.038 40)',\r\n '--secondary-foreground': 'oklch(0.28 0.03 35)',\r\n '--muted': 'oklch(0.91 0.032 40)',\r\n '--muted-foreground': 'oklch(0.5 0.03 38)',\r\n '--accent': 'oklch(0.89 0.042 40)',\r\n '--accent-foreground': 'oklch(0.28 0.03 35)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.036 40)',\r\n '--input': 'oklch(0.86 0.036 40)',\r\n '--ring': 'oklch(0.58 0.22 38)',\r\n '--chart-1': 'oklch(0.58 0.22 38)',\r\n '--chart-2': 'oklch(0.705 0.213 47.604)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.585 0.22 3.717)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.02 35)',\r\n '--foreground': 'oklch(0.93 0.012 40)',\r\n '--card': 'oklch(0.15 0.022 33)',\r\n '--card-foreground': 'oklch(0.93 0.012 40)',\r\n '--popover': 'oklch(0.17 0.025 35)',\r\n '--popover-foreground': 'oklch(0.93 0.012 40)',\r\n '--primary': 'oklch(0.72 0.2 42)',\r\n '--primary-foreground': 'oklch(0.12 0.02 35)',\r\n '--secondary': 'oklch(0.22 0.022 33)',\r\n '--secondary-foreground': 'oklch(0.93 0.012 40)',\r\n '--muted': 'oklch(0.22 0.022 33)',\r\n '--muted-foreground': 'oklch(0.62 0.03 38)',\r\n '--accent': 'oklch(0.22 0.022 33)',\r\n '--accent-foreground': 'oklch(0.93 0.012 40)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.72 0.2 42)',\r\n '--chart-1': 'oklch(0.72 0.2 42)',\r\n '--chart-2': 'oklch(0.769 0.188 70.08)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.645 0.246 16.439)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'twilight',\r\n label: 'Twilight',\r\n preview: '#a855f7',\r\n colors: ['#a855f7', '#c084fc', '#e879f9', '#7c3aed', '#1e1040'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.025 290)',\r\n '--foreground': 'oklch(0.16 0.045 290)',\r\n '--card': 'oklch(0.945 0.019 290)',\r\n '--card-foreground': 'oklch(0.16 0.045 290)',\r\n '--popover': 'oklch(0.945 0.019 290)',\r\n '--popover-foreground': 'oklch(0.16 0.045 290)',\r\n '--primary': 'oklch(0.6 0.25 295)',\r\n '--primary-foreground': 'oklch(0.98 0.006 290)',\r\n '--secondary': 'oklch(0.88 0.038 290)',\r\n '--secondary-foreground': 'oklch(0.25 0.045 290)',\r\n '--muted': 'oklch(0.89 0.032 290)',\r\n '--muted-foreground': 'oklch(0.5 0.035 290)',\r\n '--accent': 'oklch(0.87 0.045 300)',\r\n '--accent-foreground': 'oklch(0.25 0.045 300)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.036 290)',\r\n '--input': 'oklch(0.84 0.036 290)',\r\n '--ring': 'oklch(0.6 0.25 295)',\r\n '--chart-1': 'oklch(0.6 0.25 295)',\r\n '--chart-2': 'oklch(0.667 0.295 322.15)',\r\n '--chart-3': 'oklch(0.541 0.281 293.009)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.696 0.17 162.48)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.11 0.04 290)',\r\n '--foreground': 'oklch(0.93 0.01 290)',\r\n '--card': 'oklch(0.14 0.04 288)',\r\n '--card-foreground': 'oklch(0.93 0.01 290)',\r\n '--popover': 'oklch(0.16 0.045 290)',\r\n '--popover-foreground': 'oklch(0.93 0.01 290)',\r\n '--primary': 'oklch(0.72 0.2 295)',\r\n '--primary-foreground': 'oklch(0.11 0.04 290)',\r\n '--secondary': 'oklch(0.21 0.04 288)',\r\n '--secondary-foreground': 'oklch(0.93 0.01 290)',\r\n '--muted': 'oklch(0.21 0.04 288)',\r\n '--muted-foreground': 'oklch(0.65 0.035 290)',\r\n '--accent': 'oklch(0.21 0.04 310)',\r\n '--accent-foreground': 'oklch(0.93 0.01 310)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 8%)',\r\n '--input': 'oklch(1 0 0 / 12%)',\r\n '--ring': 'oklch(0.72 0.2 295)',\r\n '--chart-1': 'oklch(0.72 0.2 295)',\r\n '--chart-2': 'oklch(0.72 0.25 322)',\r\n '--chart-3': 'oklch(0.627 0.265 303.9)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.696 0.17 162.48)',\r\n },\r\n },\r\n },\r\n]\r\n\r\nexport const DEFAULT_COLOR_THEME = 'zinc'\r\n\r\ntype ColorThemeProviderState = {\r\n colorTheme: string\r\n setColorTheme: (name: string) => void\r\n resetColorTheme: () => void\r\n currentTheme: ColorThemeDefinition\r\n}\r\n\r\nconst ColorThemeContext = createContext<ColorThemeProviderState>({\r\n colorTheme: DEFAULT_COLOR_THEME,\r\n setColorTheme: () => null,\r\n resetColorTheme: () => null,\r\n currentTheme: colorThemes[0],\r\n})\r\n\r\nfunction applyColorTokens(themeName: string, isDark: boolean) {\r\n const theme = colorThemes.find((t) => t.name === themeName)\r\n if (!theme) return\r\n\r\n const root = document.documentElement\r\n\r\n // Clear previous theme overrides so stale vars don't leak between themes\r\n for (const prop of ALL_THEME_VARS) {\r\n root.style.removeProperty(prop)\r\n }\r\n\r\n const tokens = isDark ? theme.tokens.dark : theme.tokens.light\r\n for (const [prop, value] of Object.entries(tokens)) {\r\n root.style.setProperty(prop, value)\r\n }\r\n\r\n // ── Derive sidebar vars from theme so the full page reflects the theme ──\r\n // Only set sidebar vars if the theme didn't explicitly define them\r\n const bg = tokens['--background']\r\n const fg = tokens['--foreground']\r\n const primary = tokens['--primary']\r\n const primaryFg = tokens['--primary-foreground']\r\n const accent = tokens['--accent']\r\n const accentFg = tokens['--accent-foreground']\r\n const border = tokens['--border']\r\n const ring = tokens['--ring']\r\n\r\n if (bg && !tokens['--sidebar']) {\r\n // Sidebar background: slightly darker/different shade than the page bg\r\n // We use the card color if available, otherwise bg itself\r\n const sidebarBg = tokens['--card'] ?? bg\r\n root.style.setProperty('--sidebar', sidebarBg)\r\n }\r\n if (fg && !tokens['--sidebar-foreground']) {\r\n root.style.setProperty('--sidebar-foreground', fg)\r\n }\r\n if (primary && !tokens['--sidebar-primary']) {\r\n root.style.setProperty('--sidebar-primary', primary)\r\n }\r\n if (primaryFg && !tokens['--sidebar-primary-foreground']) {\r\n root.style.setProperty('--sidebar-primary-foreground', primaryFg)\r\n }\r\n if (accent && !tokens['--sidebar-accent']) {\r\n root.style.setProperty('--sidebar-accent', accent)\r\n }\r\n if (accentFg && !tokens['--sidebar-accent-foreground']) {\r\n root.style.setProperty('--sidebar-accent-foreground', accentFg)\r\n }\r\n if (border && !tokens['--sidebar-border']) {\r\n root.style.setProperty('--sidebar-border', border)\r\n }\r\n if (ring && !tokens['--sidebar-ring']) {\r\n root.style.setProperty('--sidebar-ring', ring)\r\n }\r\n}\r\n\r\nexport function ColorThemeProvider({ children }: { children: React.ReactNode }) {\r\n const { resolvedTheme } = useTheme()\r\n const [colorTheme, _setColorTheme] = useState<string>(\r\n () => getCookie(COLOR_THEME_COOKIE) || DEFAULT_COLOR_THEME\r\n )\r\n\r\n const currentTheme = useMemo(\r\n () => colorThemes.find((t) => t.name === colorTheme) || colorThemes[0],\r\n [colorTheme]\r\n )\r\n\r\n useEffect(() => {\r\n applyColorTokens(colorTheme, resolvedTheme === 'dark')\r\n }, [colorTheme, resolvedTheme])\r\n\r\n const setColorTheme = useCallback(\r\n (name: string) => {\r\n setCookie(COLOR_THEME_COOKIE, name, COLOR_THEME_COOKIE_MAX_AGE)\r\n _setColorTheme(name)\r\n },\r\n []\r\n )\r\n\r\n const resetColorTheme = useCallback(() => {\r\n removeCookie(COLOR_THEME_COOKIE)\r\n _setColorTheme(DEFAULT_COLOR_THEME)\r\n }, [])\r\n\r\n const value = useMemo(\r\n () => ({\r\n colorTheme,\r\n setColorTheme,\r\n resetColorTheme,\r\n currentTheme,\r\n }),\r\n [colorTheme, setColorTheme, resetColorTheme, currentTheme]\r\n )\r\n\r\n return (\r\n <ColorThemeContext value={value}>\r\n {children}\r\n </ColorThemeContext>\r\n )\r\n}\r\n\r\n// eslint-disable-next-line react-refresh/only-export-components\r\nexport const useColorTheme = () => {\r\n const context = useContext(ColorThemeContext)\r\n if (!context)\r\n throw new Error('useColorTheme must be used within a ColorThemeProvider')\r\n return context\r\n}\r\n","import { Loader } from 'lucide-react'\r\nimport { cn } from '../../../lib/utils'\r\nimport { FormControl } from '../ui/form'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '../ui/select'\r\n\r\ntype SelectDropdownProps = {\r\n onValueChange?: (value: string) => void\r\n defaultValue: string | undefined\r\n placeholder?: string\r\n isPending?: boolean\r\n items: { label: string; value: string }[] | undefined\r\n disabled?: boolean\r\n className?: string\r\n isControlled?: boolean\r\n}\r\n\r\nexport function SelectDropdown({\r\n defaultValue,\r\n onValueChange,\r\n isPending,\r\n items,\r\n placeholder,\r\n disabled,\r\n className = '',\r\n isControlled = false,\r\n}: SelectDropdownProps) {\r\n const defaultState = isControlled\r\n ? { value: defaultValue, onValueChange }\r\n : { defaultValue, onValueChange }\r\n return (\r\n <Select {...defaultState}>\r\n <FormControl>\r\n <SelectTrigger disabled={disabled} className={cn(className)}>\r\n <SelectValue placeholder={placeholder ?? 'Select'} />\r\n </SelectTrigger>\r\n </FormControl>\r\n <SelectContent>\r\n {isPending ? (\r\n <SelectItem disabled value='loading' className='h-14'>\r\n <div className='flex items-center justify-center gap-2'>\r\n <Loader className='h-5 w-5 animate-spin' />\r\n {' '}\r\n Loading...\r\n </div>\r\n </SelectItem>\r\n ) : (\r\n items?.map(({ label, value }) => (\r\n <SelectItem key={value} value={value}>\r\n {label}\r\n </SelectItem>\r\n ))\r\n )}\r\n </SelectContent>\r\n </Select>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { useRef, useState } from 'react'\r\nimport { cn } from '../../../lib/utils'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../ui/popover'\r\nimport {\r\n Tooltip,\r\n TooltipContent,\r\n TooltipProvider,\r\n TooltipTrigger,\r\n} from '../ui/tooltip'\r\n\r\ntype LongTextProps = {\r\n children: React.ReactNode\r\n className?: string\r\n contentClassName?: string\r\n}\r\n\r\nexport function LongText({\r\n children,\r\n className = '',\r\n contentClassName = '',\r\n}: LongTextProps) {\r\n const ref = useRef<HTMLDivElement>(null)\r\n const [isOverflown, setIsOverflown] = useState(false)\r\n\r\n // Use ref callback to check overflow when element is mounted\r\n const refCallback = (node: HTMLDivElement | null) => {\r\n ref.current = node\r\n if (node && checkOverflow(node)) {\r\n queueMicrotask(() => setIsOverflown(true))\r\n }\r\n }\r\n\r\n if (!isOverflown)\r\n return (\r\n <div ref={refCallback} className={cn('truncate', className)}>\r\n {children}\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n <div className='hidden sm:block'>\r\n <TooltipProvider delayDuration={0}>\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <div ref={refCallback} className={cn('truncate', className)}>\r\n {children}\r\n </div>\r\n </TooltipTrigger>\r\n <TooltipContent>\r\n <p className={contentClassName}>{children}</p>\r\n </TooltipContent>\r\n </Tooltip>\r\n </TooltipProvider>\r\n </div>\r\n <div className='sm:hidden'>\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <div ref={refCallback} className={cn('truncate', className)}>\r\n {children}\r\n </div>\r\n </PopoverTrigger>\r\n <PopoverContent className={cn('w-fit', contentClassName)}>\r\n <p>{children}</p>\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nconst checkOverflow = (textContainer: HTMLDivElement | null) => {\r\n if (textContainer) {\r\n return (\r\n textContainer.offsetHeight < textContainer.scrollHeight ||\r\n textContainer.offsetWidth < textContainer.scrollWidth\r\n )\r\n }\r\n return false\r\n}\r\n","'use client'\n\nimport { SearchIcon } from 'lucide-react'\nimport { cn } from '../../../lib/utils'\nimport { useSearch } from '../../../context/search-provider'\nimport { Button } from '../ui/button'\n\nexport function Search({\n className = '',\n placeholder = 'Search',\n iconOnly = true,\n ...props\n}: React.ComponentProps<'button'> & { placeholder?: string; iconOnly?: boolean }) {\n const { setOpen } = useSearch()\n\n const openSearch = () => setOpen(true)\n\n return (\n <Button\n {...props}\n variant='ghost'\n size='icon'\n className={cn('size-8 shrink-0', className)}\n aria-label='Search'\n aria-keyshortcuts='Meta+K Control+K'\n onClick={openSearch}\n >\n <SearchIcon className='size-5' aria-hidden='true' />\n </Button>\n )\n}\n","'use client'\r\n\r\nimport { createContext, useContext, useEffect, useState } from 'react'\r\nimport { CommandMenu } from '@/components/command-menu'\r\n\r\ntype SearchContextType = {\r\n open: boolean\r\n setOpen: React.Dispatch<React.SetStateAction<boolean>>\r\n}\r\n\r\nconst SearchContext = createContext<SearchContextType | null>(null)\r\n\r\ntype SearchProviderProps = {\r\n children: React.ReactNode\r\n}\r\n\r\nexport function SearchProvider({ children }: SearchProviderProps) {\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n const down = (e: KeyboardEvent) => {\r\n if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {\r\n e.preventDefault()\r\n setOpen((open) => !open)\r\n }\r\n }\r\n document.addEventListener('keydown', down)\r\n return () => document.removeEventListener('keydown', down)\r\n }, [])\r\n\r\n return (\r\n <SearchContext value={{ open, setOpen }}>\r\n {children}\r\n <CommandMenu />\r\n </SearchContext>\r\n )\r\n}\r\n\r\nexport const useSearch = () => {\r\n const searchContext = useContext(SearchContext)\r\n\r\n if (!searchContext) {\r\n return {\r\n open: false,\r\n setOpen: () => {},\r\n }\r\n }\r\n\r\n return searchContext\r\n}\r\n","'use client'\n\nimport React from 'react'\r\nimport { useRouter } from 'next/navigation'\r\nimport { ArrowRight, ChevronRight, Laptop, Moon, Sun } from 'lucide-react'\r\nimport { useSearch } from '@/context/search-provider'\r\nimport { useTheme } from '@/context/theme-provider'\r\nimport {\r\n CommandDialog,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n CommandSeparator,\r\n} from '@/components/ui/command'\r\nimport { sidebarData } from './layout/data/sidebar-data'\r\nimport { ScrollArea } from './ui/scroll-area'\r\n\r\nexport function CommandMenu() {\r\n const router = useRouter()\r\n const { setTheme } = useTheme()\r\n const { open, setOpen } = useSearch()\r\n\r\n const runCommand = React.useCallback(\r\n (command: () => unknown) => {\r\n setOpen(false)\r\n command()\r\n },\r\n [setOpen]\r\n )\r\n\r\n return (\r\n <CommandDialog modal open={open} onOpenChange={setOpen}>\r\n <CommandInput placeholder='Type a command or search...' />\r\n <CommandList>\r\n <ScrollArea type='hover' className='h-72 pe-1'>\r\n <CommandEmpty>No results found.</CommandEmpty>\r\n {sidebarData.navGroups.map((group) => (\r\n <CommandGroup key={group.title} heading={group.title}>\r\n {group.items.map((navItem, i) => {\r\n if (navItem.url)\r\n return (\r\n <CommandItem\r\n key={`${navItem.url}-${i}`}\r\n value={navItem.title}\r\n onSelect={() => {\r\n runCommand(() => router.push(navItem.url))\r\n }}\r\n >\r\n <div className='flex size-4 items-center justify-center'>\r\n <ArrowRight className='size-2 text-muted-foreground/80' />\r\n </div>\r\n {navItem.title}\r\n </CommandItem>\r\n )\r\n\r\n return navItem.items?.map((subItem, i) => (\r\n <CommandItem\r\n key={`${navItem.title}-${subItem.url}-${i}`}\r\n value={`${navItem.title}-${subItem.url}`}\r\n onSelect={() => {\r\n runCommand(() => router.push(subItem.url))\r\n }}\r\n >\r\n <div className='flex size-4 items-center justify-center'>\r\n <ArrowRight className='size-2 text-muted-foreground/80' />\r\n </div>\r\n {navItem.title} <ChevronRight /> {subItem.title}\r\n </CommandItem>\r\n ))\r\n })}\r\n </CommandGroup>\r\n ))}\r\n <CommandSeparator />\r\n <CommandGroup heading='Theme'>\r\n <CommandItem onSelect={() => runCommand(() => setTheme('light'))}>\r\n <Sun /> <span>Light</span>\r\n </CommandItem>\r\n <CommandItem onSelect={() => runCommand(() => setTheme('dark'))}>\r\n <Moon className='scale-90' />\r\n <span>Dark</span>\r\n </CommandItem>\r\n <CommandItem onSelect={() => runCommand(() => setTheme('system'))}>\r\n <Laptop />\r\n <span>System</span>\r\n </CommandItem>\r\n </CommandGroup>\r\n </ScrollArea>\r\n </CommandList>\r\n </CommandDialog>\r\n )\r\n}\r\n","import {\n Mail,\n HelpCircle,\n Settings,\n Command,\n Bot,\n SearchIcon,\n ChartArea,\n Map,\n Route,\n Link,\n Ticket,\n} from 'lucide-react'\nimport { type SidebarData } from '../types'\n\nexport const sidebarData: SidebarData = {\n user: {\n name: 'satnaing',\n email: 'satnaingdev@gmail.com',\n avatar: '/avatars/shadcn.jpg',\n },\n\n teams: [\n {\n name: 'Amoga App',\n logo: Command,\n plan: 'Demo Company',\n },\n ],\n\n navGroups: [\n {\n title: 'Menu',\n items: [\n {\n title: 'Message',\n url: '/message',\n icon: Mail,\n },\n {\n title: 'Email Settings',\n url: '/email-settings',\n icon: Settings,\n },\n {\n title: 'Design System',\n url: '/',\n icon: Settings,\n },\n {\n title: 'Vouchers',\n url: '/vouchers',\n icon: Ticket,\n },\n {\n title: 'AI Chat',\n url: '/ai_chat',\n icon: Bot,\n },\n {\n title: 'AI Search',\n url: '/ai_search',\n icon: SearchIcon,\n },\n {\n title: 'Chart Template',\n url: '/charttemplate',\n icon: ChartArea,\n },\n {\n title: 'Map Template',\n url: '/map',\n icon: Map,\n },\n {\n title: 'Route Doc',\n url: '/routedoc',\n icon: Route,\n },\n {\n title: 'Link Maker',\n url: '/link-maker',\n icon: Link,\n },\n ],\n },\n\n {\n title: 'Other',\n items: [\n {\n title: 'Settings',\n icon: Settings,\n items: [\n // Add settings pages here\n ],\n },\n {\n title: 'Help Center',\n url: '/help-center',\n icon: HelpCircle,\n },\n ],\n },\n ],\n}\n","import { Card, CardContent } from \"../ui/card\";\r\nimport { cn } from \"../../../lib/utils\";\r\n\r\nconst data = [\r\n {\r\n name: \"Profit\",\r\n value: \"$287,654.00\",\r\n change: \"+8.32%\",\r\n changeType: \"positive\",\r\n },\r\n {\r\n name: \"Late payments\",\r\n value: \"$9,435.00\",\r\n change: \"-12.64%\",\r\n changeType: \"negative\",\r\n },\r\n {\r\n name: \"Pending orders\",\r\n value: \"$173,229.00\",\r\n change: \"+2.87%\",\r\n changeType: \"positive\",\r\n },\r\n {\r\n name: \"Operating costs\",\r\n value: \"$52,891.00\",\r\n change: \"-5.73%\",\r\n changeType: \"negative\",\r\n },\r\n];\r\n\r\nexport function Stats01() {\r\n return (\r\n <div className=\"flex items-center justify-center p-10\">\r\n <div className=\"mx-auto grid grid-cols-1 gap-px rounded-xl bg-border sm:grid-cols-2 lg:grid-cols-4\">\r\n {data.map((stat, index) => (\r\n <Card\r\n key={stat.name}\r\n className={cn(\r\n \"rounded-none border-0 shadow-none py-0\",\r\n index === 0 && \"rounded-l-xl\",\r\n index === data.length - 1 && \"rounded-r-xl\"\r\n )}\r\n >\r\n <CardContent className=\"flex flex-wrap items-baseline justify-between gap-x-4 gap-y-2 p-4 sm:p-6\">\r\n <div className=\"text-sm font-medium text-muted-foreground\">\r\n {stat.name}\r\n </div>\r\n <div\r\n className={cn(\r\n \"tabular-nums text-xs font-medium\",\r\n stat.changeType === \"positive\"\r\n ? \"text-green-800 dark:text-green-400\"\r\n : \"text-red-800 dark:text-red-400\"\r\n )}\r\n >\r\n {stat.change}\r\n </div>\r\n <div className=\"tabular-nums w-full flex-none text-3xl font-medium tracking-tight text-foreground\">\r\n {stat.value}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Stats01;\r\n","import { format } from 'date-fns'\r\nimport { Calendar as CalendarIcon } from 'lucide-react'\r\nimport { Button } from '../ui/button'\r\nimport { Calendar } from '../ui/calendar'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../ui/popover'\r\n\r\ntype DatePickerProps = {\r\n selected: Date | undefined\r\n onSelect: (date: Date | undefined) => void\r\n placeholder?: string\r\n}\r\n\r\nexport function DatePicker({\r\n selected,\r\n onSelect,\r\n placeholder = 'Pick a date',\r\n}: DatePickerProps) {\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant='outline'\r\n data-empty={!selected}\r\n className='w-60 justify-start text-start font-normal data-[empty=true]:text-muted-foreground'\r\n >\r\n {selected ? (\r\n format(selected, 'MMM d, yyyy')\r\n ) : (\r\n <span>{placeholder}</span>\r\n )}\r\n <CalendarIcon className='ms-auto h-4 w-4 opacity-50' />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className='w-auto p-0'>\r\n <Calendar\r\n mode='single'\r\n captionLayout='dropdown'\r\n selected={selected}\r\n onSelect={onSelect}\r\n disabled={(date: Date) =>\r\n date > new Date() || date < new Date('1900-01-01')\r\n }\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport React from 'react'\r\nimport QRCode from 'react-qr-code'\r\nimport { toast } from 'sonner'\r\n\r\ninterface QrCodeDisplayProps {\r\n value: string\r\n size?: number\r\n className?: string\r\n}\r\n\r\nexport function QrCodeDisplay({ value, size = 140, className }: QrCodeDisplayProps) {\r\n if (!value) {\r\n return (\r\n <div\r\n className={`flex items-center justify-center bg-muted/40 rounded text-xs text-muted-foreground ${className ?? ''}`}\r\n style={{ width: size, height: size }}\r\n >\r\n No URL\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <div className={className} style={{ width: size, height: size }}>\r\n <QRCode\r\n value={value}\r\n size={size}\r\n level={value.length > 800 ? 'L' : 'M'}\r\n bgColor=\"#ffffff\"\r\n fgColor=\"#000000\"\r\n style={{ height: 'auto', maxWidth: '100%', width: '100%' }}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport const QRCodeDisplay = QrCodeDisplay\r\nexport type { QrCodeDisplayProps, QrCodeDisplayProps as QRCodeDisplayProps }\r\n\r\nexport async function downloadQrCode(value: string, filename: string, size = 400) {\r\n if (!value) return\r\n\r\n try {\r\n const wrapper = document.createElement('div')\r\n wrapper.style.position = 'absolute'\r\n wrapper.style.left = '-9999px'\r\n document.body.appendChild(wrapper)\r\n\r\n const { createRoot } = await import('react-dom/client')\r\n const root = createRoot(wrapper)\r\n root.render(\r\n React.createElement(QRCode, {\r\n value,\r\n size,\r\n level: 'M',\r\n bgColor: '#ffffff',\r\n fgColor: '#000000',\r\n })\r\n )\r\n\r\n await new Promise((r) => setTimeout(r, 100))\r\n\r\n const svgEl = wrapper.querySelector('svg')\r\n if (!svgEl) throw new Error('QR render failed')\r\n\r\n const svgData = new XMLSerializer().serializeToString(svgEl)\r\n const canvas = document.createElement('canvas')\r\n canvas.width = size\r\n canvas.height = size\r\n const ctx = canvas.getContext('2d')\r\n if (!ctx) throw new Error('Canvas unavailable')\r\n\r\n const img = new Image()\r\n const blob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' })\r\n const url = URL.createObjectURL(blob)\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n img.onload = () => {\r\n ctx.fillStyle = '#ffffff'\r\n ctx.fillRect(0, 0, size, size)\r\n ctx.drawImage(img, 0, 0, size, size)\r\n URL.revokeObjectURL(url)\r\n resolve()\r\n }\r\n img.onerror = reject\r\n img.src = url\r\n })\r\n\r\n root.unmount()\r\n document.body.removeChild(wrapper)\r\n\r\n canvas.toBlob((pngBlob) => {\r\n if (!pngBlob) return\r\n const blobUrl = window.URL.createObjectURL(pngBlob)\r\n const a = document.createElement('a')\r\n a.href = blobUrl\r\n a.download = filename\r\n document.body.appendChild(a)\r\n a.click()\r\n document.body.removeChild(a)\r\n window.URL.revokeObjectURL(blobUrl)\r\n toast.success('QR Code downloaded successfully!')\r\n }, 'image/png')\r\n } catch {\r\n toast.error('Failed to download QR code.')\r\n }\r\n}\r\n","import React from 'react'\nimport {\n Check,\n CheckCheck,\n Clock,\n AlertCircle,\n Download,\n FileText,\n MapPin,\n Eye,\n MoreHorizontal,\n CornerUpLeft,\n CornerUpRight,\n Pin,\n Star,\n Heart,\n Flag,\n Archive,\n Bell,\n Trash2,\n ChevronRight,\n ThumbsUp,\n ThumbsDown,\n Copy,\n Share2,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport type ChatMessageStatus = 'sending' | 'sent' | 'delivered' | 'read' | 'failed'\n\nexport interface ChatAttachmentItem {\n id?: string\n name: string\n url?: string\n size?: number\n type?: 'image' | 'file' | 'audio' | 'video' | 'pdf' | string\n mimeType?: string\n duration?: number\n statusText?: string\n}\n\nexport interface ChatLocationItem {\n latitude: number\n longitude: number\n address?: string\n title?: string\n}\n\nexport interface ChatBubbleProps {\n id?: string\n content?: string\n isOwn?: boolean\n senderName?: string\n senderAvatar?: string\n time?: string | Date\n status?: ChatMessageStatus\n attachments?: ChatAttachmentItem[]\n location?: ChatLocationItem\n reactions?: Array<{ emoji: string; count: number; users?: string[] }>\n replyTo?: {\n senderName?: string\n content?: string\n id?: string\n }\n isHighlighted?: boolean\n showActions?: boolean\n className?: string\n bubbleClassName?: string\n onReply?: () => void\n onForward?: () => void\n onPin?: () => void\n onStar?: () => void\n onFavorite?: () => void\n onFlag?: () => void\n onArchive?: () => void\n onActionThis?: () => void\n onDelete?: () => void\n onThumbsUp?: () => void\n onThumbsDown?: () => void\n onCopy?: () => void\n onShare?: () => void\n onActionClick?: (action: string) => void\n onAttachmentClick?: (attachment: ChatAttachmentItem) => void\n onAttachmentPreview?: (attachment: ChatAttachmentItem) => void\n onLocationClick?: (location: ChatLocationItem) => void\n children?: React.ReactNode\n}\n\nexport function ChatBubble({\n id,\n content,\n isOwn = false,\n senderName = 'Mohammed Aman',\n senderAvatar,\n time,\n status,\n attachments = [],\n location,\n reactions = [],\n replyTo,\n isHighlighted = false,\n showActions = true,\n className,\n bubbleClassName,\n onReply,\n onForward,\n onPin,\n onStar,\n onFavorite,\n onFlag,\n onArchive,\n onActionThis,\n onDelete,\n onThumbsUp,\n onThumbsDown,\n onCopy,\n onShare,\n onActionClick,\n onAttachmentClick,\n onAttachmentPreview,\n onLocationClick,\n children,\n}: ChatBubbleProps) {\n const formattedTime = time instanceof Date ? time.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : time\n\n const renderStatusIcon = () => {\n if (!status) return null\n switch (status) {\n case 'sending':\n return <Clock className=\"h-3.5 w-3.5 text-muted-foreground animate-spin shrink-0\" />\n case 'sent':\n return <Check className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n case 'delivered':\n return <CheckCheck className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n case 'read':\n return <CheckCheck className=\"h-3.5 w-3.5 text-sky-500 shrink-0\" />\n case 'failed':\n return <AlertCircle className=\"h-3.5 w-3.5 text-destructive shrink-0\" />\n default:\n return null\n }\n }\n\n const handleCopy = () => {\n if (content) {\n navigator.clipboard?.writeText(content)\n }\n onCopy?.()\n }\n\n const imageAttachments = attachments.filter((att) => att.type === 'image' || att.url?.match(/\\.(jpeg|jpg|gif|png|webp)/i))\n const fileAttachments = attachments.filter((att) => att.type !== 'image' && !att.url?.match(/\\.(jpeg|jpg|gif|png|webp)/i))\n\n const initials = senderName\n .split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n .toUpperCase() || 'MO'\n\n return (\n <div\n id={id ? `chat-bubble-${id}` : undefined}\n className={cn(\n 'group relative flex w-full gap-3 py-2 transition-colors duration-150',\n isHighlighted && 'bg-primary/5 rounded-xl px-2',\n className\n )}\n >\n {/* Avatar on Left */}\n <Avatar className=\"h-9 w-9 flex-shrink-0 mt-0.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 font-semibold border border-border/50 rounded-full\">\n {senderAvatar && <AvatarImage src={senderAvatar} alt={senderName} />}\n <AvatarFallback className=\"text-xs font-semibold\">\n {initials}\n </AvatarFallback>\n </Avatar>\n\n {/* Main Column */}\n <div className=\"flex flex-col min-w-0 flex-1 items-start relative\">\n {/* Sender Name */}\n {senderName && (\n <span className=\"text-xs font-semibold text-foreground/85 mb-1\">\n {senderName}\n </span>\n )}\n\n {/* Reply Quote Banner */}\n {replyTo && (\n <div\n onClick={onReply}\n className=\"mb-1 cursor-pointer rounded-lg border-l-2 border-indigo-600 bg-muted/60 p-1.5 text-xs transition-opacity hover:opacity-80\"\n >\n <div className=\"font-medium text-[10px]\">{replyTo.senderName || 'Replying to message'}</div>\n <div className=\"line-clamp-1 text-[11px] text-muted-foreground\">{replyTo.content}</div>\n </div>\n )}\n\n {/* Message Content */}\n {children ? (\n children\n ) : (\n <div className=\"space-y-2 w-full\">\n {/* Plain Text Message */}\n {content && (\n <p className=\"text-sm font-medium text-foreground whitespace-pre-wrap leading-relaxed\">\n {content}\n </p>\n )}\n\n {/* Document / PDF Card (Matching User Screenshot) */}\n {fileAttachments.map((att, idx) => (\n <div\n key={att.id || idx}\n className=\"w-full max-w-[340px] rounded-2xl border border-border/80 bg-background p-3.5 flex items-center justify-between gap-3 shadow-2xs hover:border-border transition-all duration-150\"\n >\n {/* Orange Document Icon */}\n <div className=\"flex h-11 w-11 items-center justify-center rounded-xl bg-amber-500/10 text-amber-600 dark:bg-amber-950/40 dark:text-amber-400 shrink-0\">\n <FileText className=\"h-5 w-5\" />\n </div>\n\n {/* Info Column */}\n <div className=\"min-w-0 flex-1\">\n <h5 className=\"truncate text-xs font-bold text-foreground\">\n {att.name}\n </h5>\n <p className=\"text-[11px] text-muted-foreground\">\n {att.size ? `${(att.size / 1024).toFixed(0)} KB • ` : ''}\n {att.type?.toUpperCase() || 'PDF'}\n </p>\n {att.statusText && (\n <span className=\"inline-block text-[11px] font-semibold text-emerald-600 dark:text-emerald-400\">\n {att.statusText}\n </span>\n )}\n </div>\n\n {/* Right Action Buttons */}\n <div className=\"flex items-center gap-1 shrink-0 text-muted-foreground\">\n <button\n type=\"button\"\n onClick={() => onAttachmentPreview?.(att)}\n className=\"p-1 rounded-md hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n title=\"Preview\"\n >\n <Eye className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onAttachmentClick?.(att)}\n className=\"p-1 rounded-md hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n title=\"Download\"\n >\n <Download className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n ))}\n\n {/* Location Card */}\n {location && (\n <div\n onClick={() => onLocationClick?.(location)}\n className=\"w-full max-w-[340px] rounded-2xl border border-border/80 bg-background overflow-hidden shadow-2xs cursor-pointer hover:border-border transition-all duration-150\"\n >\n <div className=\"relative h-36 w-full bg-slate-100 dark:bg-slate-900 flex items-center justify-center overflow-hidden\">\n <div className=\"absolute inset-0 bg-[radial-gradient(#cbd5e1_1px,transparent_1px)] dark:bg-[radial-gradient(#334155_1px,transparent_1px)] [background-size:16px_16px] opacity-70\" />\n <div className=\"relative z-10 flex h-10 w-10 items-center justify-center rounded-full bg-emerald-600 text-white shadow-md\">\n <MapPin className=\"h-5 w-5 fill-white text-emerald-600\" />\n </div>\n <div className=\"absolute bottom-1 left-2 rounded bg-background/80 px-1.5 py-0.5 text-[9px] text-muted-foreground backdrop-blur-xs\">\n © CARTO, © OpenStreetMap\n </div>\n </div>\n <div className=\"p-3 flex items-start gap-2.5 bg-muted/30\">\n <div className=\"flex h-6 w-6 items-center justify-center rounded-full bg-emerald-500/10 text-emerald-600 shrink-0 mt-0.5\">\n <MapPin className=\"h-3.5 w-3.5 text-emerald-600\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h5 className=\"text-xs font-bold text-foreground\">\n {location.title || 'Current Location'}\n </h5>\n <p className=\"text-[11px] text-muted-foreground truncate\">\n {location.address || `${location.latitude.toFixed(4)}, ${location.longitude.toFixed(4)}`}\n </p>\n </div>\n </div>\n </div>\n )}\n\n {/* Image Attachments */}\n {imageAttachments.map((img, idx) => (\n <div\n key={img.id || idx}\n onClick={() => onAttachmentClick?.(img)}\n className=\"w-full max-w-[340px] rounded-2xl overflow-hidden border border-border/80 bg-background shadow-2xs cursor-pointer group/img\"\n >\n {img.url ? (\n <img\n src={img.url}\n alt={img.name}\n className=\"w-full h-44 object-cover transition-transform duration-200 group-hover/img:scale-[1.02]\"\n />\n ) : (\n <div className=\"w-full h-44 bg-slate-900 flex items-center justify-center text-white text-xs\">\n {img.name}\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* Timestamp and Delivery Checkmarks Underneath */}\n <div className=\"mt-1 flex items-center gap-1 text-[11px] text-muted-foreground select-none\">\n {formattedTime && <span>{formattedTime}</span>}\n {renderStatusIcon()}\n </div>\n\n {/* Hover Action Bar: Pill Bar with ThumbsUp, ThumbsDown, Copy, Share, 3-dots (Matching Screenshot 2) */}\n {showActions && (\n <div className=\"mt-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <div className=\"inline-flex items-center gap-2.5 rounded-full border border-border/80 bg-background/95 backdrop-blur-xs px-3 py-1 shadow-md\">\n <button\n type=\"button\"\n onClick={onThumbsUp}\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Like\"\n >\n <ThumbsUp className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={onThumbsDown}\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Dislike\"\n >\n <ThumbsDown className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Copy\"\n >\n <Copy className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={onShare}\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Share\"\n >\n <Share2 className=\"h-3.5 w-3.5\" />\n </button>\n\n {/* 3-Dot More Menu Matching Screenshot 2 */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"More actions\"\n >\n <MoreHorizontal className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n side=\"top\"\n sideOffset={8}\n className=\"w-48 rounded-2xl p-1.5 shadow-2xl border border-border/80 bg-background text-foreground space-y-0.5\"\n >\n <DropdownMenuItem\n onClick={onReply}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <CornerUpLeft className=\"h-4 w-4 text-blue-600 shrink-0\" />\n <span>Reply</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onForward}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <CornerUpRight className=\"h-4 w-4 text-sky-500 shrink-0\" />\n <span>Forward</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onPin}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Pin className=\"h-4 w-4 text-purple-600 shrink-0\" />\n <span>Pin Message</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onStar}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Star className=\"h-4 w-4 text-amber-500 shrink-0\" />\n <span>Star</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onFavorite}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Heart className=\"h-4 w-4 text-rose-500 shrink-0\" />\n <span>Favorite</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onFlag}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Flag className=\"h-4 w-4 text-red-600 shrink-0\" />\n <span>Flag</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onArchive}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Archive className=\"h-4 w-4 text-indigo-600 shrink-0\" />\n <span>Archive</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onActionThis}\n className=\"flex items-center justify-between py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Bell className=\"h-4 w-4 text-orange-500 shrink-0\" />\n <span>Action This</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onDelete}\n className=\"flex items-center justify-between py-1.5 px-2 text-xs font-semibold text-rose-500 hover:text-rose-600 hover:bg-rose-50 dark:hover:bg-rose-950/30 cursor-pointer rounded-xl\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Trash2 className=\"h-4 w-4 text-rose-500 shrink-0\" />\n <span>Delete</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-rose-400\" />\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n )}\n\n {/* Emoji Reactions Row */}\n {reactions.length > 0 && (\n <div className=\"mt-1 flex flex-wrap gap-1\">\n {reactions.map((react, i) => (\n <span\n key={i}\n className=\"inline-flex items-center gap-1 rounded-full border border-border/60 bg-background px-2 py-0.5 text-xs shadow-2xs cursor-pointer hover:bg-muted\"\n >\n <span>{react.emoji}</span>\n <span className=\"font-semibold text-[10px] text-muted-foreground\">{react.count}</span>\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import React, { useRef, useEffect, useState } from 'react'\nimport {\n Send,\n Paperclip,\n Smile,\n Mic,\n Camera,\n X,\n ImagePlus,\n Video,\n FileText,\n MapPin,\n FileImage,\n RefreshCw,\n Scan,\n ScanLine,\n FileCode2,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '@/design-system/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport type AttachmentOptionType =\n | 'images'\n | 'videos'\n | 'documents'\n | 'location'\n | 'image-converter'\n | 'doc-converter'\n | 'doc-scanner'\n | 'scan-document'\n | 'extract-text'\n\nexport interface ChatInputProps {\n value: string\n onChange: (value: string) => void\n onSend: () => void\n placeholder?: string\n disabled?: boolean\n isLoading?: boolean\n maxLength?: number\n replyMessage?: {\n senderName?: string\n content?: string\n onClear?: () => void\n }\n showAttachments?: boolean\n showEmoji?: boolean\n showCamera?: boolean\n showVoice?: boolean\n onAttachmentClick?: () => void\n onSelectAttachmentType?: (type: AttachmentOptionType) => void\n onEmojiClick?: () => void\n onCameraClick?: () => void\n onVoiceClick?: () => void\n customActions?: React.ReactNode\n className?: string\n}\n\nexport function ChatInput({\n value,\n onChange,\n onSend,\n placeholder = 'Message',\n disabled = false,\n isLoading = false,\n maxLength,\n replyMessage,\n showAttachments = true,\n showEmoji = true,\n showCamera = true,\n showVoice = true,\n onAttachmentClick,\n onSelectAttachmentType,\n onEmojiClick,\n onCameraClick,\n onVoiceClick,\n customActions,\n className,\n}: ChatInputProps) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const [isAttachOpen, setIsAttachOpen] = useState(false)\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n if (value.trim() && !disabled && !isLoading) {\n onSend()\n }\n }\n }\n\n // Auto-resize textarea height\n useEffect(() => {\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto'\n textareaRef.current.style.height = `${Math.min(textareaRef.current.scrollHeight, 120)}px`\n }\n }, [value])\n\n const hasText = value.trim().length > 0\n\n const handleSelectOption = (type: AttachmentOptionType) => {\n setIsAttachOpen(false)\n onSelectAttachmentType?.(type)\n if (type === 'images' || type === 'documents') {\n onAttachmentClick?.()\n }\n }\n\n return (\n <div className={cn('flex flex-col gap-1 w-full', className)}>\n {/* Replying Banner */}\n {replyMessage && (\n <div className=\"flex items-center justify-between rounded-t-xl border border-b-0 border-border/60 bg-muted/40 px-3 py-1.5 text-xs text-muted-foreground\">\n <div className=\"flex items-center gap-1.5 truncate\">\n <span className=\"font-medium text-foreground\">Replying to {replyMessage.senderName || 'Message'}:</span>\n <span className=\"truncate\">{replyMessage.content}</span>\n </div>\n {replyMessage.onClear && (\n <button\n onClick={replyMessage.onClear}\n className=\"ml-2 rounded-sm p-0.5 hover:bg-muted text-muted-foreground hover:text-foreground cursor-pointer\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n )}\n\n {/* Main Bar: Pill Container + Circular Action Button */}\n <div className=\"flex items-center gap-2\">\n {/* Rounded Pill Input Bar */}\n <div className=\"flex flex-1 items-center gap-1.5 rounded-full border border-border/80 bg-background px-3 py-1.5 shadow-2xs transition-all focus-within:border-indigo-500/60 focus-within:ring-1 focus-within:ring-indigo-500/30\">\n {/* Emoji Button on Left */}\n {showEmoji && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={onEmojiClick}\n disabled={disabled || isLoading}\n className=\"h-8 w-8 text-muted-foreground hover:text-foreground rounded-full shrink-0\"\n >\n <Smile className=\"h-4.5 w-4.5\" />\n </Button>\n )}\n\n {/* Text Input / Auto-resizing textarea */}\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled || isLoading}\n maxLength={maxLength}\n rows={1}\n className=\"max-h-28 min-h-[24px] w-full resize-none bg-transparent px-1 py-1 text-sm outline-none placeholder:text-muted-foreground/80 disabled:cursor-not-allowed disabled:opacity-50 leading-normal\"\n />\n\n {/* Paperclip Button with Exact Attachment Menu from Screenshot */}\n {showAttachments && (\n <DropdownMenu open={isAttachOpen} onOpenChange={setIsAttachOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={disabled || isLoading}\n className=\"h-8 w-8 text-muted-foreground hover:text-foreground rounded-full shrink-0\"\n title=\"Attachments\"\n >\n <Paperclip className=\"h-4.5 w-4.5\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" side=\"top\" sideOffset={8} className=\"w-56 rounded-2xl p-1.5 shadow-xl border border-border/80 bg-background text-foreground\">\n <DropdownMenuItem\n onClick={() => handleSelectOption('images')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <ImagePlus className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Images</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('videos')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Video className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Videos</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('documents')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <FileText className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Documents</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('location')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <MapPin className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Location</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('image-converter')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <FileImage className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Image Converter</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('doc-converter')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <RefreshCw className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Doc Converter</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('doc-scanner')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Scan className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Doc Scanner</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('scan-document')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <ScanLine className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Scan Document</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('extract-text')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <FileCode2 className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Extract Text</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {/* Camera Button */}\n {showCamera && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={onCameraClick}\n disabled={disabled || isLoading}\n className=\"h-8 w-8 text-muted-foreground hover:text-foreground rounded-full shrink-0\"\n title=\"Camera\"\n >\n <Camera className=\"h-4.5 w-4.5\" />\n </Button>\n )}\n\n {customActions}\n </div>\n\n {/* Circular Action Button on Right (Mic or Send) */}\n {hasText ? (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={disabled || isLoading}\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-emerald-600 hover:bg-emerald-700 text-white shadow-md transition-transform active:scale-95 cursor-pointer disabled:opacity-50\"\n title=\"Send message\"\n >\n <Send className=\"h-4.5 w-4.5\" />\n </button>\n ) : showVoice ? (\n <button\n type=\"button\"\n onClick={onVoiceClick}\n disabled={disabled || isLoading}\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-emerald-600 hover:bg-emerald-700 text-white shadow-md transition-transform active:scale-95 cursor-pointer disabled:opacity-50\"\n title=\"Voice message\"\n >\n <Mic className=\"h-4.5 w-4.5\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={true}\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-emerald-600/50 text-white shadow-md cursor-not-allowed\"\n >\n <Send className=\"h-4.5 w-4.5\" />\n </button>\n )}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport {\n Bell,\n Flag,\n MoreVertical,\n CornerUpLeft,\n CornerUpRight,\n Pin,\n Star,\n Heart,\n Archive,\n Trash2,\n ChevronRight,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface ChatHeaderProps {\n title?: string\n subtitle?: string\n avatarUrl?: string\n status?: 'online' | 'offline' | 'away' | 'busy'\n isGroup?: boolean\n memberCount?: number\n actions?: React.ReactNode\n showDefaultActions?: boolean\n onAvatarClick?: () => void\n onNotificationClick?: () => void\n onFlagClick?: () => void\n onReply?: () => void\n onForward?: () => void\n onPin?: () => void\n onStar?: () => void\n onFavorite?: () => void\n onArchive?: () => void\n onActionThis?: () => void\n onDelete?: () => void\n className?: string\n}\n\nexport function ChatHeader({\n title = 'Mohammed Aman',\n subtitle = 'Last seen today at 04:58 PM',\n avatarUrl,\n status = 'online',\n isGroup = false,\n memberCount,\n actions,\n showDefaultActions = true,\n onAvatarClick,\n onNotificationClick,\n onFlagClick,\n onReply,\n onForward,\n onPin,\n onStar,\n onFavorite,\n onArchive,\n onActionThis,\n onDelete,\n className,\n}: ChatHeaderProps) {\n const getStatusColor = () => {\n switch (status) {\n case 'online':\n return 'bg-emerald-500'\n case 'away':\n return 'bg-amber-500'\n case 'busy':\n return 'bg-red-500'\n default:\n return 'bg-slate-400'\n }\n }\n\n const initials =\n title\n ?.split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n .toUpperCase() || 'MA'\n\n return (\n <div\n className={cn(\n 'flex items-center justify-between border-b border-border bg-background px-4 py-3 select-none',\n className\n )}\n >\n {/* Left Column: Avatar + Info */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"relative cursor-pointer shrink-0\" onClick={onAvatarClick}>\n <Avatar className=\"h-10 w-10 rounded-xl border border-border/60 shadow-2xs\">\n {avatarUrl && <AvatarImage src={avatarUrl} alt={title} className=\"rounded-xl\" />}\n <AvatarFallback className=\"rounded-xl bg-primary/10 text-primary font-bold text-sm\">\n {initials}\n </AvatarFallback>\n </Avatar>\n {!isGroup && (\n <span\n className={cn(\n 'absolute -bottom-0.5 -right-0.5 h-2.5 w-2.5 rounded-full ring-2 ring-background',\n getStatusColor()\n )}\n />\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-sm font-bold text-foreground tracking-tight leading-snug\">\n {title}\n </h2>\n <p className=\"truncate text-xs text-muted-foreground leading-tight\">\n {subtitle\n ? subtitle\n : isGroup\n ? `${memberCount || 0} members`\n : <span className=\"capitalize\">{status}</span>}\n </p>\n </div>\n </div>\n\n {/* Right Column: Actions (Outline Bell, Flag, 3-Dots Menu) */}\n <div className=\"flex items-center gap-1 shrink-0\">\n {actions ? (\n actions\n ) : showDefaultActions ? (\n <div className=\"flex items-center gap-1\">\n {/* Outline Bell Icon in Amber (No Fill) */}\n <button\n type=\"button\"\n onClick={onNotificationClick}\n className=\"p-1.5 rounded-lg hover:bg-muted text-amber-500 hover:text-amber-600 transition-colors cursor-pointer\"\n title=\"Act on this\"\n >\n <Bell className=\"h-4.5 w-4.5\" />\n </button>\n\n {/* Quick Flag Action */}\n <button\n type=\"button\"\n onClick={onFlagClick}\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Flag\"\n >\n <Flag className=\"h-4.5 w-4.5\" />\n </button>\n\n {/* 3-Dot More Options Menu */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"More options\"\n >\n <MoreVertical className=\"h-4.5 w-4.5\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-48 border border-border/80 bg-background shadow-lg p-1 space-y-0.5 rounded-xl\"\n >\n <DropdownMenuItem\n onClick={onReply}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <CornerUpLeft className=\"h-4 w-4 text-blue-500\" />\n <span>Reply</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onForward}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <CornerUpRight className=\"h-4 w-4 text-sky-500\" />\n <span>Forward</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onPin}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Pin className=\"h-4 w-4 text-purple-600\" />\n <span>Pin Message</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onStar}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Star className=\"h-4 w-4 text-amber-500\" />\n <span>Star</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onFavorite}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Heart className=\"h-4 w-4 text-rose-500\" />\n <span>Favorite</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onArchive}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Archive className=\"h-4 w-4 text-indigo-600\" />\n <span>Archive</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onActionThis}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Bell className=\"h-4 w-4 text-amber-500\" />\n <span>Action This</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onDelete}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-rose-50 dark:hover:bg-rose-950/30 text-rose-500 hover:text-rose-600 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Trash2 className=\"h-4 w-4 text-rose-500\" />\n <span>Delete</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-rose-400\" />\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import React from 'react'\r\nimport { cn } from '@/lib/utils'\r\n\r\nexport interface TypingIndicatorProps {\r\n label?: string\r\n avatarUrl?: string\r\n className?: string\r\n}\r\n\r\nexport function TypingIndicator({ label = 'Typing...', avatarUrl, className }: TypingIndicatorProps) {\r\n return (\r\n <div className={cn('flex items-center gap-2 px-3 py-1.5 text-xs text-muted-foreground', className)}>\r\n <div className=\"flex items-center gap-1 rounded-full bg-muted/80 px-2.5 py-1.5 border border-border/50\">\r\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary/70 animate-bounce [animation-delay:-0.3s]\" />\r\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary/70 animate-bounce [animation-delay:-0.15s]\" />\r\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary/70 animate-bounce\" />\r\n </div>\r\n {label && <span className=\"text-[11px] font-normal italic\">{label}</span>}\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\nimport { MessageSquareDashed } from 'lucide-react'\r\nimport { cn } from '@/lib/utils'\r\n\r\nexport interface ChatEmptyStateProps {\r\n title?: string\r\n description?: string\r\n icon?: React.ReactNode\r\n action?: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport function ChatEmptyState({\r\n title = 'No conversation selected',\r\n description = 'Choose a chat from the sidebar or start a new conversation to begin messaging.',\r\n icon,\r\n action,\r\n className,\r\n}: ChatEmptyStateProps) {\r\n return (\r\n <div className={cn('flex flex-1 flex-col items-center justify-center p-8 text-center bg-muted/20', className)}>\r\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-muted/80 text-muted-foreground mb-4 shadow-xs\">\r\n {icon || <MessageSquareDashed className=\"h-8 w-8 text-primary/70\" />}\r\n </div>\r\n <h3 className=\"text-base font-semibold text-foreground tracking-tight mb-1\">{title}</h3>\r\n <p className=\"text-xs text-muted-foreground max-w-sm leading-relaxed mb-4\">{description}</p>\r\n {action && <div>{action}</div>}\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\nimport { Users, MoreHorizontal, MessageSquare } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '@/design-system/components/ui/badge'\n\nexport interface ChatCardItemProps {\n id: string\n title: string\n badgeLabel?: string\n lastMessage?: string\n time?: string | Date\n membersCount?: number\n onlineCount?: number\n unreadCount?: number\n isActive?: boolean\n isGroup?: boolean\n onClick?: () => void\n onMoreClick?: (e: React.MouseEvent) => void\n className?: string\n}\n\nexport function ChatCardItem({\n id,\n title,\n badgeLabel = 'Chat',\n lastMessage,\n time,\n membersCount = 2,\n onlineCount = 0,\n unreadCount = 0,\n isActive = false,\n isGroup = false,\n onClick,\n onMoreClick,\n className,\n}: ChatCardItemProps) {\n const formattedTime = time instanceof Date ? time.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : time\n\n return (\n <div\n onClick={onClick}\n className={cn(\n 'group relative flex flex-col gap-1 rounded-xl p-3 cursor-pointer transition-all duration-150 select-none border',\n isActive\n ? 'bg-indigo-500/10 border-indigo-200/60 dark:bg-indigo-950/30 dark:border-indigo-900/50 shadow-2xs'\n : 'bg-background hover:bg-muted/40 border-transparent hover:border-border/40',\n unreadCount > 0 && !isActive && 'bg-primary/5',\n className\n )}\n >\n {/* Active Left Indicator Bar */}\n {isActive && (\n <div className=\"absolute top-1.5 bottom-1.5 left-0 w-1 rounded-l-md bg-indigo-600 dark:bg-indigo-500\" />\n )}\n\n {/* Row 1: Name, Badge, Timestamp */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-1.5 min-w-0\">\n <h4 className={cn('truncate text-sm font-semibold tracking-tight text-foreground')}>\n {title}\n </h4>\n {badgeLabel && (\n <Badge className=\"h-4.5 rounded-full border border-emerald-200/40 bg-emerald-500/10 dark:bg-emerald-950/40 px-1.5 py-0 text-[10px] font-medium text-emerald-600 dark:text-emerald-400 gap-1 shrink-0\">\n <span className=\"text-[9px]\">💬</span>\n <span>{badgeLabel}</span>\n </Badge>\n )}\n </div>\n\n {formattedTime && (\n <span className=\"text-[11px] text-muted-foreground whitespace-nowrap shrink-0\">\n {formattedTime}\n </span>\n )}\n </div>\n\n {/* Row 2: Members Count */}\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground/80\">\n <Users className=\"h-3.5 w-3.5 shrink-0\" />\n <span className=\"truncate\">\n {membersCount} Members • {onlineCount} Online\n </span>\n </div>\n\n {/* Row 3: Last Message Snippet */}\n {lastMessage && (\n <p className=\"line-clamp-1 text-xs text-muted-foreground/70 truncate\">\n {lastMessage}\n </p>\n )}\n\n {/* Optional More Menu on hover */}\n {onMoreClick && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onMoreClick(e)\n }}\n className=\"absolute top-2.5 right-2 opacity-0 group-hover:opacity-100 transition-opacity p-1 rounded-md hover:bg-muted text-muted-foreground\"\n >\n <MoreHorizontal className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\r\nimport { Loader2 } from 'lucide-react'\r\nimport { cn } from '@/lib/utils'\r\nimport { ScrollArea } from '@/design-system/components/ui/scroll-area'\r\n\r\nexport interface ChatMessageListProps {\r\n children?: React.ReactNode\r\n isLoadingMore?: boolean\r\n onLoadMore?: () => void\r\n autoScrollToBottom?: boolean\r\n emptyState?: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport function ChatMessageList({\r\n children,\r\n isLoadingMore = false,\r\n onLoadMore,\r\n autoScrollToBottom = true,\r\n emptyState,\r\n className,\r\n}: ChatMessageListProps) {\r\n const bottomRef = useRef<HTMLDivElement>(null)\r\n const containerRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n if (autoScrollToBottom && bottomRef.current) {\r\n bottomRef.current.scrollIntoView({ behavior: 'smooth' })\r\n }\r\n }, [children, autoScrollToBottom])\r\n\r\n const hasChildren = React.Children.count(children) > 0\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn('flex flex-1 flex-col overflow-y-auto p-4 space-y-2', className)}\r\n >\r\n {/* Top Loading Indicator for Infinite Scroll */}\r\n {isLoadingMore && (\r\n <div className=\"flex items-center justify-center py-2 text-muted-foreground\">\r\n <Loader2 className=\"h-4 w-4 animate-spin text-primary mr-1.5\" />\r\n <span className=\"text-xs\">Loading older messages...</span>\r\n </div>\r\n )}\r\n\r\n {/* Main Messages Content or Empty State */}\r\n {hasChildren ? (\r\n children\r\n ) : emptyState ? (\r\n <div className=\"flex flex-1 items-center justify-center h-full\">\r\n {emptyState}\r\n </div>\r\n ) : null}\r\n\r\n {/* Scroll Anchor */}\r\n <div ref={bottomRef} className=\"h-0 w-0\" />\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\nimport { Search, MessageSquare, Plus } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Input } from '@/design-system/components/ui/input'\nimport { Button } from '@/design-system/components/ui/button'\n\nexport interface ChatSidebarTab {\n id: string\n label: string\n count?: number\n}\n\nexport interface ChatSidebarProps {\n title?: string\n searchValue?: string\n onSearchChange?: (query: string) => void\n searchPlaceholder?: string\n tabs?: ChatSidebarTab[]\n activeTab?: string\n onTabChange?: (tabId: string) => void\n sectionLabel?: string\n sectionCount?: number\n actions?: React.ReactNode\n onNewChat?: () => void\n children?: React.ReactNode\n footer?: React.ReactNode\n className?: string\n}\n\nexport function ChatSidebar({\n title = 'Chats',\n searchValue = '',\n onSearchChange,\n searchPlaceholder = 'Search...',\n tabs = [\n { id: 'chats', label: 'Chats' },\n { id: 'contact', label: 'Contact' },\n { id: 'groups', label: 'Groups' },\n { id: 'folder', label: 'Folder' },\n ],\n activeTab = 'chats',\n onTabChange,\n sectionLabel = 'CHATS',\n sectionCount = 2,\n actions,\n onNewChat,\n children,\n footer,\n className,\n}: ChatSidebarProps) {\n return (\n <aside\n className={cn(\n 'flex flex-col h-full w-full md:w-80 lg:w-[340px] border-r border-border/70 bg-background/95 select-none',\n className\n )}\n >\n {/* 1. Top Subtabs (Chats, Contact, Groups, Folder) with Active Underline */}\n <div className=\"flex items-center gap-4 px-4 pt-3 pb-1 border-b border-border/40 overflow-x-auto no-scrollbar\">\n {tabs.map((tab) => {\n const isSelected = activeTab === tab.id\n return (\n <button\n key={tab.id}\n onClick={() => onTabChange?.(tab.id)}\n className={cn(\n 'relative pb-2 text-sm font-medium transition-all shrink-0 cursor-pointer',\n isSelected\n ? 'text-indigo-600 dark:text-indigo-400 font-semibold'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span>{tab.label}</span>\n {isSelected && (\n <span className=\"absolute bottom-0 left-0 right-0 h-0.5 rounded-full bg-indigo-600 dark:bg-indigo-400\" />\n )}\n </button>\n )\n })}\n </div>\n\n {/* 2. Rounded Search Bar */}\n <div className=\"p-3\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"search\"\n value={searchValue}\n onChange={(e) => onSearchChange?.(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"pl-9 h-9 text-xs rounded-xl bg-background border-border/80 focus-visible:ring-1 focus-visible:ring-indigo-500/50\"\n />\n </div>\n </div>\n\n {/* 3. Category Section Divider (💬 CHATS ─────────── 2) */}\n <div className=\"flex items-center px-4 py-1.5 gap-2\">\n <MessageSquare className=\"h-3.5 w-3.5 text-emerald-600 dark:text-emerald-400 shrink-0\" />\n <span className=\"text-[11px] font-bold tracking-wider text-muted-foreground uppercase\">\n {sectionLabel}\n </span>\n <div className=\"flex-1 h-[1px] bg-border/60 mx-1\" />\n {typeof sectionCount === 'number' && (\n <span className=\"text-xs font-medium text-muted-foreground shrink-0\">\n {sectionCount}\n </span>\n )}\n </div>\n\n {/* 4. Scrollable Conversations List */}\n <div className=\"flex-1 overflow-y-auto px-2 py-1 space-y-1\">\n {children}\n </div>\n\n {/* Optional Footer */}\n {footer && <div className=\"p-3 border-t border-border/60 bg-muted/20\">{footer}</div>}\n </aside>\n )\n}\n","import React, { useState } from 'react'\nimport { Users, Search, Plus, MessageSquare, Pencil, Trash2, X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Input } from '@/design-system/components/ui/input'\nimport { Button } from '@/design-system/components/ui/button'\nimport { Switch } from '@/design-system/components/ui/switch'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/design-system/components/ui/dialog'\n\nexport interface ContactItem {\n id: string\n name: string\n email: string\n avatarUrl?: string\n initials?: string\n isEnabled?: boolean\n mobile?: string\n}\n\nexport interface ContactManagerProps {\n contacts?: ContactItem[]\n title?: string\n description?: string\n searchPlaceholder?: string\n onChatClick?: (contact: ContactItem) => void\n onToggleStatus?: (contact: ContactItem, enabled: boolean) => void\n onEditClick?: (contact: ContactItem) => void\n onDeleteClick?: (contact: ContactItem) => void\n onAddContact?: (newContact: { name: string; email: string }) => void\n className?: string\n}\n\nexport function ContactManager({\n contacts = [],\n title = 'Contact Manager',\n description = 'Manage your saved contacts and start direct chat conversations.',\n searchPlaceholder = 'Search contacts by name or email...',\n onChatClick,\n onToggleStatus,\n onEditClick,\n onDeleteClick,\n onAddContact,\n className,\n}: ContactManagerProps) {\n const [searchQuery, setSearchQuery] = useState('')\n const [isAddOpen, setIsAddOpen] = useState(false)\n const [newName, setNewName] = useState('')\n const [newEmail, setNewEmail] = useState('')\n\n const filteredContacts = contacts.filter(\n (c) =>\n c.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n c.email.toLowerCase().includes(searchQuery.toLowerCase())\n )\n\n const handleAddSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (!newEmail.trim()) return\n onAddContact?.({\n name: newName.trim() || newEmail.split('@')[0],\n email: newEmail.trim(),\n })\n setNewName('')\n setNewEmail('')\n setIsAddOpen(false)\n }\n\n const getInitials = (contact: ContactItem) => {\n if (contact.initials) return contact.initials\n return contact.name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n .toUpperCase() || 'U'\n }\n\n return (\n <div\n className={cn(\n 'w-full rounded-2xl border border-border/80 bg-background p-6 shadow-sm space-y-5',\n className\n )}\n >\n {/* Header */}\n <div className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"h-5 w-5 text-indigo-600 dark:text-indigo-400\" />\n <h3 className=\"text-lg font-bold tracking-tight text-foreground\">{title}</h3>\n </div>\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n </div>\n\n {/* Search Input */}\n <div className=\"relative\">\n <Search className=\"absolute left-3.5 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"search\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"pl-10 h-10 text-xs rounded-xl bg-background border-border/80 focus-visible:ring-1 focus-visible:ring-indigo-500/50\"\n />\n </div>\n\n {/* Contact Cards List */}\n <div className=\"space-y-2.5 max-h-[380px] overflow-y-auto pr-1\">\n {filteredContacts.length === 0 ? (\n <div className=\"py-8 text-center text-xs text-muted-foreground\">\n No contacts found matching your search.\n </div>\n ) : (\n filteredContacts.map((contact) => (\n <div\n key={contact.id}\n className=\"flex items-center justify-between gap-3 rounded-2xl border border-border/70 bg-background/50 p-3 hover:border-border transition-all duration-150 shadow-2xs\"\n >\n {/* Left Details */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <Avatar className=\"h-10 w-10 rounded-xl bg-blue-100 dark:bg-blue-950/60 text-blue-600 dark:text-blue-400 font-bold border border-blue-200/50 dark:border-blue-900/40\">\n {contact.avatarUrl && <AvatarImage src={contact.avatarUrl} alt={contact.name} />}\n <AvatarFallback className=\"bg-transparent text-xs\">\n {getInitials(contact)}\n </AvatarFallback>\n </Avatar>\n\n <div className=\"min-w-0\">\n <h4 className=\"truncate text-sm font-semibold text-foreground tracking-tight\">\n {contact.name}\n </h4>\n <p className=\"truncate text-xs text-muted-foreground\">{contact.email}</p>\n </div>\n </div>\n\n {/* Right Action Icons & Toggle */}\n <div className=\"flex items-center gap-2 shrink-0\">\n {/* Chat Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onChatClick?.(contact)}\n className=\"h-8 w-8 text-indigo-600 dark:text-indigo-400 hover:bg-indigo-50 dark:hover:bg-indigo-950/40 rounded-lg\"\n title=\"Open Chat\"\n >\n <MessageSquare className=\"h-4 w-4\" />\n </Button>\n\n {/* Status Toggle */}\n <Switch\n checked={contact.isEnabled !== false}\n onCheckedChange={(checked) => onToggleStatus?.(contact, checked)}\n className=\"data-[state=checked]:bg-slate-800 dark:data-[state=checked]:bg-slate-200\"\n />\n\n {/* Edit Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onEditClick?.(contact)}\n className=\"h-8 w-8 text-blue-500 hover:bg-blue-50 dark:hover:bg-blue-950/40 rounded-lg\"\n title=\"Edit Contact\"\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n\n {/* Delete Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onDeleteClick?.(contact)}\n className=\"h-8 w-8 text-rose-500 hover:bg-rose-50 dark:hover:bg-rose-950/40 rounded-lg\"\n title=\"Delete Contact\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* Add New Contact Button */}\n <Button\n onClick={() => setIsAddOpen(true)}\n className=\"w-full h-10 rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white font-medium text-xs shadow-xs transition-transform active:scale-[0.99] gap-1.5\"\n >\n <Plus className=\"h-4 w-4\" />\n <span>Add New Contact</span>\n </Button>\n\n {/* Add Contact Modal Dialog */}\n <Dialog open={isAddOpen} onOpenChange={setIsAddOpen}>\n <DialogContent className=\"sm:max-w-md rounded-2xl\">\n <DialogHeader>\n <DialogTitle>Add New Contact</DialogTitle>\n <DialogDescription>\n Enter contact details to start messaging directly.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={handleAddSubmit} className=\"space-y-3 py-2\">\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-foreground\">Name (Optional)</label>\n <Input\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"e.g. Aman\"\n className=\"h-9 text-xs rounded-xl\"\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-foreground\">Email Address *</label>\n <Input\n type=\"email\"\n required\n value={newEmail}\n onChange={(e) => setNewEmail(e.target.value)}\n placeholder=\"e.g. aman@example.com\"\n className=\"h-9 text-xs rounded-xl\"\n />\n </div>\n <DialogFooter className=\"pt-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setIsAddOpen(false)}\n className=\"rounded-xl text-xs\"\n >\n Cancel\n </Button>\n <Button type=\"submit\" className=\"rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white text-xs\">\n Save Contact\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport { Users, Search, Plus, MessageSquare, Pencil, Trash2 } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Input } from '@/design-system/components/ui/input'\nimport { Button } from '@/design-system/components/ui/button'\nimport { Switch } from '@/design-system/components/ui/switch'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/design-system/components/ui/dialog'\n\nexport interface GroupItem {\n id: string\n name: string\n ownerEmail?: string\n membersCount?: number\n avatarUrl?: string\n isEnabled?: boolean\n description?: string\n}\n\nexport interface GroupManagerProps {\n groups?: GroupItem[]\n title?: string\n description?: string\n searchPlaceholder?: string\n onChatClick?: (group: GroupItem) => void\n onToggleStatus?: (group: GroupItem, enabled: boolean) => void\n onEditClick?: (group: GroupItem) => void\n onDeleteClick?: (group: GroupItem) => void\n onAddGroup?: (newGroup: { name: string; description?: string }) => void\n className?: string\n}\n\nexport function GroupManager({\n groups = [],\n title = 'Groups Manager',\n description = 'Manage your group channels and start team conversations.',\n searchPlaceholder = 'Search groups...',\n onChatClick,\n onToggleStatus,\n onEditClick,\n onDeleteClick,\n onAddGroup,\n className,\n}: GroupManagerProps) {\n const [searchQuery, setSearchQuery] = useState('')\n const [isAddOpen, setIsAddOpen] = useState(false)\n const [groupName, setGroupName] = useState('')\n const [groupDesc, setGroupDesc] = useState('')\n\n const filteredGroups = groups.filter(\n (g) =>\n g.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n (g.ownerEmail && g.ownerEmail.toLowerCase().includes(searchQuery.toLowerCase()))\n )\n\n const handleAddSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (!groupName.trim()) return\n onAddGroup?.({\n name: groupName.trim(),\n description: groupDesc.trim() || undefined,\n })\n setGroupName('')\n setGroupDesc('')\n setIsAddOpen(false)\n }\n\n return (\n <div\n className={cn(\n 'w-full rounded-2xl border border-border/80 bg-background p-6 shadow-sm space-y-5',\n className\n )}\n >\n {/* Header */}\n <div className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"h-5 w-5 text-indigo-600 dark:text-indigo-400\" />\n <h3 className=\"text-lg font-bold tracking-tight text-foreground\">{title}</h3>\n </div>\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n </div>\n\n {/* Search Bar */}\n <div className=\"relative\">\n <Search className=\"absolute left-3.5 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"search\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"pl-10 h-10 text-xs rounded-xl bg-background border-border/80 focus-visible:ring-1 focus-visible:ring-indigo-500/50\"\n />\n </div>\n\n {/* Group Cards List */}\n <div className=\"space-y-2.5 max-h-[380px] overflow-y-auto pr-1\">\n {filteredGroups.length === 0 ? (\n <div className=\"py-8 text-center text-xs text-muted-foreground\">\n No group channels found matching your search.\n </div>\n ) : (\n filteredGroups.map((group) => (\n <div\n key={group.id}\n className=\"flex items-center justify-between gap-3 rounded-2xl border border-border/70 bg-background/50 p-3 hover:border-border transition-all duration-150 shadow-2xs\"\n >\n {/* Left Group Details */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <Avatar className=\"h-10 w-10 rounded-xl bg-slate-800 text-white font-bold border border-border/60 overflow-hidden\">\n {group.avatarUrl && <AvatarImage src={group.avatarUrl} alt={group.name} className=\"object-cover\" />}\n <AvatarFallback className=\"bg-slate-800 text-xs font-semibold text-white\">\n {group.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n\n <div className=\"min-w-0\">\n <h4 className=\"truncate text-sm font-semibold text-foreground tracking-tight\">\n {group.name}\n </h4>\n <p className=\"truncate text-xs text-muted-foreground\">\n {group.membersCount || 1} members {group.ownerEmail ? `• ${group.ownerEmail}` : ''}\n </p>\n </div>\n </div>\n\n {/* Right Action Icons & Toggle */}\n <div className=\"flex items-center gap-2 shrink-0\">\n {/* Chat Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onChatClick?.(group)}\n className=\"h-8 w-8 text-indigo-600 dark:text-indigo-400 hover:bg-indigo-50 dark:hover:bg-indigo-950/40 rounded-lg\"\n title=\"Open Group Chat\"\n >\n <MessageSquare className=\"h-4 w-4\" />\n </Button>\n\n {/* Status Toggle */}\n <Switch\n checked={group.isEnabled !== false}\n onCheckedChange={(checked) => onToggleStatus?.(group, checked)}\n className=\"data-[state=checked]:bg-slate-800 dark:data-[state=checked]:bg-slate-200\"\n />\n\n {/* Edit Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onEditClick?.(group)}\n className=\"h-8 w-8 text-blue-500 hover:bg-blue-50 dark:hover:bg-blue-950/40 rounded-lg\"\n title=\"Edit Group\"\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n\n {/* Delete Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onDeleteClick?.(group)}\n className=\"h-8 w-8 text-rose-500 hover:bg-rose-50 dark:hover:bg-rose-950/40 rounded-lg\"\n title=\"Delete Group\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* Add New Group Button */}\n <Button\n onClick={() => setIsAddOpen(true)}\n className=\"w-full h-10 rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white font-medium text-xs shadow-xs transition-transform active:scale-[0.99] gap-1.5\"\n >\n <Plus className=\"h-4 w-4\" />\n <span>Add New Group</span>\n </Button>\n\n {/* Add Group Modal Dialog */}\n <Dialog open={isAddOpen} onOpenChange={setIsAddOpen}>\n <DialogContent className=\"sm:max-w-md rounded-2xl\">\n <DialogHeader>\n <DialogTitle>Create New Group</DialogTitle>\n <DialogDescription>\n Create a group channel to collaborate and chat with multiple members.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={handleAddSubmit} className=\"space-y-3 py-2\">\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-foreground\">Group Name *</label>\n <Input\n required\n value={groupName}\n onChange={(e) => setGroupName(e.target.value)}\n placeholder=\"e.g. Design Team Hub\"\n className=\"h-9 text-xs rounded-xl\"\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-foreground\">Description (Optional)</label>\n <Input\n value={groupDesc}\n onChange={(e) => setGroupDesc(e.target.value)}\n placeholder=\"e.g. Core team discussions\"\n className=\"h-9 text-xs rounded-xl\"\n />\n </div>\n <DialogFooter className=\"pt-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setIsAddOpen(false)}\n className=\"rounded-xl text-xs\"\n >\n Cancel\n </Button>\n <Button type=\"submit\" className=\"rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white text-xs\">\n Create Group\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n","import React from 'react'\nimport { ChevronDown, Check } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface AiModelOption {\n id: string\n name: string\n provider?: string\n badge?: string\n}\n\nexport const DEFAULT_AI_MODELS: AiModelOption[] = [\n { id: 'google/gemini-2.5-flash', name: 'Gemini 2.5 Flash' },\n { id: 'openai/gpt-4o', name: 'GPT-4o' },\n { id: 'anthropic/claude-3.5-sonnet', name: 'Claude 3.5 Sonnet' },\n { id: 'deepseek/deepseek-chat', name: 'DeepSeek Chat' },\n { id: 'meta-llama/llama-3.3-70b-instruct', name: 'Llama 3.3 70B' },\n]\n\nexport interface AiModelSelectorProps {\n model?: string\n models?: AiModelOption[]\n onModelChange?: (modelId: string) => void\n disabled?: boolean\n className?: string\n}\n\nexport function AiModelSelector({\n model = 'google/gemini-2.5-flash',\n models = DEFAULT_AI_MODELS,\n onModelChange,\n disabled = false,\n className,\n}: AiModelSelectorProps) {\n const currentModel = models.find((m) => m.id === model) || models[0]\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n className={cn(\n 'flex items-center gap-1.5 px-3 py-1 rounded-full border border-border/80 bg-background hover:bg-muted text-xs font-medium text-foreground transition-all cursor-pointer shadow-2xs focus:outline-none select-none',\n className\n )}\n >\n <span className=\"truncate max-w-[130px] font-semibold\">{currentModel?.name || 'Select Model'}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground shrink-0\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n side=\"top\"\n sideOffset={6}\n className=\"w-48 rounded-2xl p-1 shadow-2xl border border-border/80 bg-background text-foreground space-y-0.5\"\n >\n {models.map((m) => {\n const isSelected = m.id === model\n return (\n <DropdownMenuItem\n key={m.id}\n onClick={() => onModelChange?.(m.id)}\n className={cn(\n 'flex items-center justify-between py-2 px-3 text-xs font-semibold rounded-xl cursor-pointer transition-colors',\n isSelected\n ? 'bg-slate-900 text-white dark:bg-slate-900 dark:text-white focus:bg-slate-900 focus:text-white'\n : 'text-foreground hover:bg-muted/70 focus:bg-muted/70'\n )}\n >\n <span className=\"truncate\">{m.name}</span>\n {isSelected && <Check className=\"h-3.5 w-3.5 shrink-0 text-white\" />}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import React from 'react'\nimport { ChevronDown, Check } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface AiToolOption {\n id: string\n name: string\n icon?: string | React.ReactNode\n description?: string\n}\n\nexport const DEFAULT_AI_TOOLS: AiToolOption[] = [\n { id: 'chat', name: 'AI Chat', icon: '' },\n { id: 'web-search', name: 'Web Search', icon: '🌐' },\n { id: 'ui-render', name: 'UI Render', icon: '🎨' },\n]\n\nexport interface AiToolSelectorProps {\n tool?: string\n tools?: AiToolOption[]\n onToolChange?: (toolId: string) => void\n disabled?: boolean\n className?: string\n}\n\nexport function AiToolSelector({\n tool = 'chat',\n tools = DEFAULT_AI_TOOLS,\n onToolChange,\n disabled = false,\n className,\n}: AiToolSelectorProps) {\n const currentTool = tools.find((t) => t.id === tool) || tools[0]\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n className={cn(\n 'flex items-center gap-1.5 px-3 py-1 rounded-full border border-border/80 bg-background hover:bg-muted text-xs font-medium text-foreground transition-all cursor-pointer shadow-2xs focus:outline-none select-none',\n className\n )}\n >\n <span className=\"text-muted-foreground\">Tool:</span>\n <span className=\"flex items-center gap-1 font-semibold\">\n {currentTool.icon && <span>{currentTool.icon}</span>}\n <span>{currentTool?.name || 'Select Tool'}</span>\n </span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground shrink-0\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n side=\"top\"\n sideOffset={6}\n className=\"w-48 rounded-2xl p-1 shadow-2xl border border-border/80 bg-background text-foreground space-y-0.5\"\n >\n {tools.map((t) => {\n const isSelected = t.id === tool\n return (\n <DropdownMenuItem\n key={t.id}\n onClick={() => onToolChange?.(t.id)}\n className={cn(\n 'flex items-center justify-between py-2 px-3 text-xs font-semibold rounded-xl cursor-pointer transition-colors',\n isSelected\n ? 'bg-slate-900 text-white dark:bg-slate-900 dark:text-white focus:bg-slate-900 focus:text-white'\n : 'text-foreground hover:bg-muted/70 focus:bg-muted/70'\n )}\n >\n <div className=\"flex items-center gap-2\">\n {t.icon && <span className=\"text-sm shrink-0\">{t.icon}</span>}\n <span className=\"truncate\">{t.name}</span>\n </div>\n {isSelected && <Check className=\"h-3.5 w-3.5 shrink-0 text-white\" />}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import React, { useRef, useEffect } from 'react'\nimport { ArrowUp, Mic, History, Plus } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { AiModelSelector, AiModelOption } from './ai-model-selector'\nimport { AiToolSelector, AiToolOption } from './ai-tool-selector'\n\nexport interface AiChatInputProps {\n value: string\n onChange: (value: string) => void\n onSend: () => void\n placeholder?: string\n disabled?: boolean\n isLoading?: boolean\n model?: string\n onModelChange?: (model: string) => void\n models?: AiModelOption[]\n tool?: string\n onToolChange?: (tool: string) => void\n tools?: AiToolOption[]\n isListening?: boolean\n onVoiceToggle?: () => void\n onHistoryClick?: () => void\n onNewChatClick?: () => void\n className?: string\n}\n\nexport function AiChatInput({\n value,\n onChange,\n onSend,\n placeholder = 'Ask a question about your data...',\n disabled = false,\n isLoading = false,\n model = 'google/gemini-2.5-flash',\n onModelChange,\n models,\n tool = 'chat',\n onToolChange,\n tools,\n isListening = false,\n onVoiceToggle,\n onHistoryClick,\n onNewChatClick,\n className,\n}: AiChatInputProps) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n if (value.trim() && !disabled && !isLoading) {\n onSend()\n }\n }\n }\n\n // Auto-resize textarea height\n useEffect(() => {\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto'\n textareaRef.current.style.height = `${Math.min(textareaRef.current.scrollHeight, 140)}px`\n }\n }, [value])\n\n const hasText = value.trim().length > 0\n\n return (\n <div\n className={cn(\n 'w-full rounded-3xl border border-border/80 bg-background p-3 flex flex-col gap-2 shadow-xs transition-all focus-within:border-indigo-500/60 focus-within:ring-1 focus-within:ring-indigo-500/20',\n className\n )}\n >\n {/* Top Input Row */}\n <div className=\"flex items-center gap-2 px-1\">\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={\n isListening\n ? '🎤 Listening... Speak now'\n : isLoading\n ? 'Thinking...'\n : placeholder\n }\n disabled={disabled || isLoading}\n rows={1}\n className=\"max-h-32 min-h-[26px] w-full resize-none bg-transparent text-sm sm:text-base outline-none placeholder:text-muted-foreground/80 disabled:cursor-not-allowed disabled:opacity-50 leading-relaxed\"\n />\n\n {/* Voice Trigger Button */}\n {onVoiceToggle && (\n <button\n type=\"button\"\n onClick={onVoiceToggle}\n disabled={disabled || isLoading}\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full transition-all cursor-pointer',\n isListening\n ? 'bg-rose-500 text-white animate-pulse'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n )}\n title=\"Voice input\"\n >\n <Mic className=\"h-4.5 w-4.5\" />\n </button>\n )}\n\n {/* Upward Circular Send Button */}\n <button\n type=\"button\"\n onClick={onSend}\n disabled={!hasText || disabled || isLoading}\n className={cn(\n 'flex h-9 w-9 shrink-0 items-center justify-center rounded-full transition-all cursor-pointer shadow-xs',\n hasText && !disabled && !isLoading\n ? 'bg-slate-800 hover:bg-slate-900 text-white dark:bg-slate-200 dark:text-slate-900 active:scale-95'\n : 'bg-muted text-muted-foreground opacity-50 cursor-not-allowed'\n )}\n title=\"Send\"\n >\n <ArrowUp className=\"h-4.5 w-4.5\" />\n </button>\n </div>\n\n {/* Bottom Toolbar: Model + Tool Selectors + History + New Chat */}\n <div className=\"flex items-center justify-between gap-2 pt-1 border-t border-border/40 overflow-x-auto no-scrollbar\">\n {/* Left Pickers: Model + Tool */}\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <AiModelSelector\n model={model}\n models={models}\n onModelChange={onModelChange}\n disabled={disabled || isLoading}\n />\n <AiToolSelector\n tool={tool}\n tools={tools}\n onToolChange={onToolChange}\n disabled={disabled || isLoading}\n />\n </div>\n\n {/* Right Actions: History & New Chat */}\n <div className=\"flex items-center gap-1.5 shrink-0\">\n {onHistoryClick && (\n <button\n type=\"button\"\n onClick={onHistoryClick}\n disabled={disabled || isLoading}\n className=\"flex h-7 w-7 items-center justify-center rounded-full border border-border/70 hover:bg-muted text-muted-foreground hover:text-foreground transition-all cursor-pointer shadow-2xs\"\n title=\"Prompt History\"\n >\n <History className=\"h-3.5 w-3.5\" />\n </button>\n )}\n\n {onNewChatClick && (\n <button\n type=\"button\"\n onClick={onNewChatClick}\n disabled={disabled || isLoading}\n className=\"flex h-7 w-7 items-center justify-center rounded-full border border-border/70 hover:bg-muted text-muted-foreground hover:text-foreground transition-all cursor-pointer shadow-2xs\"\n title=\"New Chat\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport { Bot, User, Sparkles, Copy, Check, Globe } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\n\nexport interface AiSourceItem {\n title: string\n url: string\n snippet?: string\n}\n\nexport interface AiMessageBubbleProps {\n id?: string\n role: 'user' | 'assistant' | 'system'\n content: string\n senderName?: string\n modelName?: string\n avatarUrl?: string\n sources?: AiSourceItem[]\n images?: string[]\n isLoading?: boolean\n showPreviewBtn?: boolean\n onOpenPreview?: () => void\n onImageClick?: (url: string) => void\n className?: string\n}\n\nexport function AiMessageBubble({\n id,\n role,\n content,\n senderName,\n modelName,\n avatarUrl,\n sources = [],\n images = [],\n isLoading = false,\n showPreviewBtn = false,\n onOpenPreview,\n onImageClick,\n className,\n}: AiMessageBubbleProps) {\n const isUser = role === 'user'\n const authorLabel = senderName || (isUser ? 'You' : 'AI Assistant')\n\n return (\n <div\n id={id ? `ai-bubble-${id}` : undefined}\n className={cn('flex w-full gap-3 py-2 justify-start select-text', className)}\n >\n {/* Avatar on Left */}\n <div className=\"shrink-0 mt-0.5\">\n {isUser ? (\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-slate-800 text-white dark:bg-slate-200 dark:text-slate-900 shadow-2xs font-semibold text-xs\">\n <User className=\"h-4 w-4\" />\n </div>\n ) : (\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-indigo-50 dark:bg-indigo-950/50 text-indigo-600 dark:text-indigo-400 border border-indigo-200/60 dark:border-indigo-900/40 shadow-2xs\">\n <Bot className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n\n {/* Main Content Column */}\n <div className=\"flex flex-col min-w-0 flex-1 items-start gap-1\">\n {/* Author Label */}\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'text-xs font-semibold',\n isUser ? 'text-muted-foreground/90' : 'text-indigo-600 dark:text-indigo-400'\n )}\n >\n {authorLabel}\n </span>\n {!isUser && modelName && (\n <span className=\"text-[10px] text-muted-foreground font-normal\">\n • {modelName}\n </span>\n )}\n </div>\n\n {/* Text / Markdown Stream */}\n <div className=\"text-sm sm:text-base text-foreground w-full leading-relaxed\">\n {isLoading ? (\n <div className=\"flex items-center gap-1.5 py-1 text-xs text-muted-foreground\">\n <span className=\"h-2 w-2 rounded-full bg-indigo-600 animate-pulse\" />\n <span className=\"h-2 w-2 rounded-full bg-indigo-600 animate-pulse delay-75\" />\n <span className=\"h-2 w-2 rounded-full bg-indigo-600 animate-pulse delay-150\" />\n <span className=\"ml-1\">Thinking...</span>\n </div>\n ) : isUser ? (\n <div className=\"whitespace-pre-wrap\">{content}</div>\n ) : (\n <div className=\"prose prose-sm dark:prose-invert max-w-none leading-relaxed break-words prose-p:leading-relaxed prose-pre:bg-muted/80 prose-pre:border prose-pre:border-border/50 prose-pre:rounded-xl prose-code:text-indigo-600 dark:prose-code:text-indigo-400 prose-code:font-mono prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:before:content-none prose-code:after:content-none\">\n <ReactMarkdown remarkPlugins={[remarkGfm]}>{content}</ReactMarkdown>\n </div>\n )}\n\n {/* Quick Generative UI Open Action Button */}\n {!isUser && showPreviewBtn && onOpenPreview && (\n <div className=\"mt-3 flex justify-start\">\n <button\n type=\"button\"\n onClick={onOpenPreview}\n className=\"flex items-center gap-1.5 px-3 py-1.5 rounded-xl border border-indigo-200 dark:border-indigo-900/50 bg-indigo-50/50 dark:bg-indigo-950/20 text-xs font-bold text-indigo-600 dark:text-indigo-400 hover:bg-indigo-50 dark:hover:bg-indigo-950/40 hover:shadow-xs transition-all cursor-pointer\"\n >\n <Sparkles className=\"h-3.5 w-3.5\" />\n <span>Open Preview Panel</span>\n </button>\n </div>\n )}\n\n {/* Sources / Citations list */}\n {!isUser && sources.length > 0 && (\n <div className=\"mt-3 space-y-1.5\">\n <div className=\"flex items-center gap-1 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider\">\n <Globe className=\"h-3.5 w-3.5 text-blue-500\" />\n <span>Sources</span>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {sources.map((src, i) => (\n <a\n key={i}\n href={src.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-xl border border-border/80 bg-background hover:bg-muted text-xs text-foreground transition-colors shadow-2xs\"\n >\n <span className=\"truncate max-w-[180px]\">{src.title}</span>\n </a>\n ))}\n </div>\n </div>\n )}\n\n {/* Images Grid */}\n {!isUser && images.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {images.map((img, idx) => (\n <img\n key={idx}\n src={img}\n alt={`AI generated ${idx}`}\n onClick={() => onImageClick?.(img)}\n className=\"h-28 w-28 rounded-xl object-cover border border-border/80 cursor-pointer hover:opacity-90 transition-opacity\"\n />\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\nimport { cn } from '@/lib/utils'\nimport { AiPromptSuggestions, AiPromptSuggestionItem } from './ai-prompt-suggestions'\n\nexport interface AiMessageListProps {\n children?: React.ReactNode\n isEmpty?: boolean\n suggestions?: AiPromptSuggestionItem[]\n onSelectPrompt?: (prompt: string, tool?: string) => void\n autoScrollToBottom?: boolean\n className?: string\n}\n\nexport function AiMessageList({\n children,\n isEmpty = false,\n suggestions,\n onSelectPrompt,\n autoScrollToBottom = true,\n className,\n}: AiMessageListProps) {\n const scrollRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (autoScrollToBottom && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight\n }\n }, [children, autoScrollToBottom])\n\n return (\n <div\n ref={scrollRef}\n className={cn(\n 'flex-1 w-full overflow-y-auto px-4 py-4 space-y-4 no-scrollbar',\n className\n )}\n >\n {isEmpty ? (\n <AiPromptSuggestions\n suggestions={suggestions}\n onSelectPrompt={onSelectPrompt}\n />\n ) : (\n children\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Palette, Search, Code, FormInput, Sparkles } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface AiPromptSuggestionItem {\n title: string\n description: string\n prompt: string\n tool?: string\n icon?: React.ReactNode\n}\n\nexport const DEFAULT_AI_PROMPTS: AiPromptSuggestionItem[] = [\n {\n title: 'Explain React 19 features',\n description: 'Deep dive into server actions, useActionState, and use() hook.',\n prompt: 'Explain the new features of React 19 with examples of Server Actions and the use() hook.',\n tool: 'chat',\n icon: <Code className=\"h-4 w-4 text-sky-500\" />,\n },\n {\n title: 'Design user profile card',\n description: 'Generates a rich, interactive UI card showing stats, avatar, and badges.',\n prompt: 'Design a beautiful user profile card with follower count, location, badges and actions.',\n tool: 'ui-render',\n icon: <Palette className=\"h-4 w-4 text-indigo-500\" />,\n },\n {\n title: 'Search latest Tech news',\n description: 'Searches the web for recent announcements in AI and technology.',\n prompt: 'What are the key announcements from the latest tech conferences and AI releases this month?',\n tool: 'web-search',\n icon: <Search className=\"h-4 w-4 text-emerald-500\" />,\n },\n {\n title: 'Create feedback form',\n description: 'Renders a beautiful form with textareas, ratings, and submittable actions.',\n prompt: 'Build a premium user feedback form with input fields for name, email, rating select, and submit button.',\n tool: 'ui-render',\n icon: <FormInput className=\"h-4 w-4 text-amber-500\" />,\n },\n]\n\nexport interface AiPromptSuggestionsProps {\n suggestions?: AiPromptSuggestionItem[]\n onSelectPrompt?: (prompt: string, tool?: string) => void\n title?: string\n subtitle?: string\n className?: string\n}\n\nexport function AiPromptSuggestions({\n suggestions = DEFAULT_AI_PROMPTS,\n onSelectPrompt,\n title = 'How can I help you today?',\n subtitle = 'Choose a prompt below or start typing your question.',\n className,\n}: AiPromptSuggestionsProps) {\n return (\n <div className={cn('flex flex-col items-center justify-center p-6 text-center max-w-2xl mx-auto space-y-6', className)}>\n <div className=\"space-y-2\">\n <div className=\"inline-flex p-3 rounded-2xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 mb-1\">\n <Sparkles className=\"h-6 w-6\" />\n </div>\n <h2 className=\"text-xl sm:text-2xl font-bold tracking-tight text-foreground\">{title}</h2>\n <p className=\"text-xs text-muted-foreground\">{subtitle}</p>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3 w-full text-left\">\n {suggestions.map((item, idx) => (\n <div\n key={idx}\n onClick={() => onSelectPrompt?.(item.prompt, item.tool)}\n className=\"p-3.5 rounded-2xl border border-border/80 bg-background hover:bg-muted/40 hover:border-indigo-500/50 transition-all cursor-pointer shadow-2xs group flex flex-col justify-between gap-2\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"p-1.5 rounded-lg bg-muted/60 shrink-0\">\n {item.icon}\n </div>\n <h4 className=\"text-xs font-bold text-foreground group-hover:text-indigo-600 dark:group-hover:text-indigo-400 transition-colors\">\n {item.title}\n </h4>\n </div>\n <p className=\"text-[11px] text-muted-foreground line-clamp-2\">\n {item.description}\n </p>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport {\n Sparkles,\n Bot,\n ArrowLeft,\n Bell,\n Flag,\n MoreVertical,\n CornerUpLeft,\n CornerUpRight,\n Pin,\n Star,\n Heart,\n Archive,\n Trash2,\n ChevronRight,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface AiChatHeaderProps {\n title?: string\n subtitle?: string\n modelName?: string\n showSparkles?: boolean\n showDefaultActions?: boolean\n onBack?: () => void\n actions?: React.ReactNode\n onNotificationClick?: () => void\n onFlagClick?: () => void\n onReply?: () => void\n onForward?: () => void\n onPin?: () => void\n onStar?: () => void\n onFavorite?: () => void\n onArchive?: () => void\n onActionThis?: () => void\n onDelete?: () => void\n className?: string\n}\n\nexport function AiChatHeader({\n title = 'AI Assistant',\n subtitle = 'Powered by AI · Ask anything',\n modelName,\n showSparkles = true,\n showDefaultActions = true,\n onBack,\n actions,\n onNotificationClick,\n onFlagClick,\n onReply,\n onForward,\n onPin,\n onStar,\n onFavorite,\n onArchive,\n onActionThis,\n onDelete,\n className,\n}: AiChatHeaderProps) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between px-4 py-3 border-b border-border bg-background select-none',\n className\n )}\n >\n {/* Left Column: Avatar + Info */}\n <div className=\"flex items-center gap-3 min-w-0\">\n {onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"flex h-8 w-8 items-center justify-center rounded-xl hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Back\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </button>\n )}\n\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-indigo-50 dark:bg-indigo-950/50 text-indigo-600 dark:text-indigo-400 border border-indigo-200/60 dark:border-indigo-900/40 shrink-0 shadow-2xs\">\n <Bot className=\"h-5 w-5\" />\n </div>\n\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-1.5\">\n <h3 className=\"truncate text-sm font-bold text-foreground tracking-tight leading-snug\">\n {title}\n </h3>\n {showSparkles && (\n <Sparkles className=\"h-3.5 w-3.5 text-indigo-500 shrink-0\" />\n )}\n </div>\n <p className=\"truncate text-xs text-muted-foreground leading-tight\">\n {subtitle ? subtitle : modelName ? `Powered by ${modelName}` : 'Powered by AI · Ask anything'}\n </p>\n </div>\n </div>\n\n {/* Right Column: Actions (Outline Bell, Flag, 3-Dots Menu) */}\n <div className=\"flex items-center gap-1 shrink-0\">\n {actions ? (\n actions\n ) : showDefaultActions ? (\n <div className=\"flex items-center gap-1\">\n {/* Outline Bell Icon in Amber (No fill) */}\n <button\n type=\"button\"\n onClick={onNotificationClick}\n className=\"p-1.5 rounded-lg hover:bg-muted text-amber-500 hover:text-amber-600 transition-colors cursor-pointer\"\n title=\"Act on this\"\n >\n <Bell className=\"h-4.5 w-4.5\" />\n </button>\n\n {/* Quick Flag Action */}\n <button\n type=\"button\"\n onClick={onFlagClick}\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Flag\"\n >\n <Flag className=\"h-4.5 w-4.5\" />\n </button>\n\n {/* 3-Dot More Options Menu */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"More options\"\n >\n <MoreVertical className=\"h-4.5 w-4.5\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-48 border border-border/80 bg-background shadow-lg p-1 space-y-0.5 rounded-xl\"\n >\n <DropdownMenuItem\n onClick={onReply}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <CornerUpLeft className=\"h-4 w-4 text-blue-500\" />\n <span>Reply</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onForward}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <CornerUpRight className=\"h-4 w-4 text-sky-500\" />\n <span>Forward</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onPin}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Pin className=\"h-4 w-4 text-purple-600\" />\n <span>Pin Message</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onStar}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Star className=\"h-4 w-4 text-amber-500\" />\n <span>Star</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onFavorite}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Heart className=\"h-4 w-4 text-rose-500\" />\n <span>Favorite</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onArchive}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Archive className=\"h-4 w-4 text-indigo-600\" />\n <span>Archive</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onActionThis}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Bell className=\"h-4 w-4 text-amber-500\" />\n <span>Action This</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onDelete}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-rose-50 dark:hover:bg-rose-950/30 text-rose-500 hover:text-rose-600 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Trash2 className=\"h-4 w-4 text-rose-500\" />\n <span>Delete</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-rose-400\" />\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport {\n Eye,\n Download,\n FileText,\n Image as ImageIcon,\n Film,\n FileSpreadsheet,\n FileCode,\n FileArchive,\n MoreHorizontal,\n Copy,\n Trash2,\n Check,\n Pencil,\n Share2,\n} from 'lucide-react'\nimport { formatDistanceToNow, format } from 'date-fns'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '@/design-system/components/ui/badge'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport type FileCategoryType =\n | 'Pdf'\n | 'Doc'\n | 'Xls'\n | 'Csv'\n | 'Images'\n | 'Videos'\n | 'Zip'\n | 'Ppt'\n | 'Txt'\n | 'Other'\n | string\n\nexport interface FileItemData {\n id: string\n fileName: string\n fileUrl: string\n fileSize?: number\n updatedAt?: string | Date\n category: FileCategoryType\n section?: string\n folderPath?: string\n senderName?: string\n senderAvatar?: string\n version?: string\n editedJson?: any\n}\n\nexport interface FileCardItemProps {\n file: FileItemData\n isSelected?: boolean\n viewMode?: 'grid' | 'table'\n onSelect?: (file: FileItemData) => void\n onPreview?: (file: FileItemData) => void\n onDownload?: (file: FileItemData) => void\n onCopyLink?: (file: FileItemData) => void\n onRename?: (file: FileItemData) => void\n onDelete?: (file: FileItemData) => void\n onShare?: (file: FileItemData) => void\n className?: string\n}\n\nexport function getFileCategoryTheme(category: string): {\n bg: string\n text: string\n border: string\n gradient: string\n} {\n switch (category) {\n case 'Pdf':\n return {\n bg: 'bg-red-500/10 dark:bg-red-950/40',\n text: 'text-red-600 dark:text-red-400',\n border: 'border-red-200/40 dark:border-red-900/40',\n gradient: 'from-red-500/20 to-orange-500/10',\n }\n case 'Doc':\n return {\n bg: 'bg-blue-500/10 dark:bg-blue-950/40',\n text: 'text-blue-600 dark:text-blue-400',\n border: 'border-blue-200/40 dark:border-blue-900/40',\n gradient: 'from-blue-500/20 to-indigo-500/10',\n }\n case 'Xls':\n case 'Csv':\n return {\n bg: 'bg-emerald-500/10 dark:bg-emerald-950/40',\n text: 'text-emerald-600 dark:text-emerald-400',\n border: 'border-emerald-200/40 dark:border-emerald-900/40',\n gradient: 'from-emerald-500/20 to-teal-500/10',\n }\n case 'Images':\n return {\n bg: 'bg-amber-500/10 dark:bg-amber-950/40',\n text: 'text-amber-600 dark:text-amber-400',\n border: 'border-amber-200/40 dark:border-amber-900/40',\n gradient: 'from-amber-500/20 to-yellow-500/10',\n }\n case 'Videos':\n return {\n bg: 'bg-purple-500/10 dark:bg-purple-950/40',\n text: 'text-purple-600 dark:text-purple-400',\n border: 'border-purple-200/40 dark:border-purple-900/40',\n gradient: 'from-purple-500/20 to-pink-500/10',\n }\n case 'Zip':\n return {\n bg: 'bg-orange-500/10 dark:bg-orange-950/40',\n text: 'text-orange-600 dark:text-orange-400',\n border: 'border-orange-200/40 dark:border-orange-900/40',\n gradient: 'from-orange-500/20 to-amber-500/10',\n }\n default:\n return {\n bg: 'bg-indigo-500/10 dark:bg-indigo-950/40',\n text: 'text-indigo-600 dark:text-indigo-400',\n border: 'border-indigo-200/40 dark:border-indigo-900/40',\n gradient: 'from-indigo-500/20 to-purple-500/10',\n }\n }\n}\n\nexport function formatBytes(bytes?: number): string {\n if (!bytes || bytes === 0) return '0 B'\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`\n}\n\nexport function FileCardItem({\n file,\n isSelected = false,\n viewMode = 'grid',\n onSelect,\n onPreview,\n onDownload,\n onCopyLink,\n onRename,\n onDelete,\n onShare,\n className,\n}: FileCardItemProps) {\n const theme = getFileCategoryTheme(file.category)\n const isImage =\n file.category === 'Images' ||\n /\\.(jpg|jpeg|png|webp|svg|gif)$/i.test(file.fileName)\n const isVideo =\n file.category === 'Videos' || /\\.(mp4|webm|mov|mkv)$/i.test(file.fileName)\n const isPdf =\n file.category === 'Pdf' || /\\.pdf$/i.test(file.fileName)\n const isSheet =\n file.category === 'Xls' ||\n file.category === 'Csv' ||\n /\\.(xls|xlsx|csv)$/i.test(file.fileName)\n const isZip =\n file.category === 'Zip' || /\\.(zip|rar|7z|tar|gz)$/i.test(file.fileName)\n\n const updatedTimeDisplay = React.useMemo(() => {\n if (!file.updatedAt) return 'Recently'\n try {\n const d = new Date(file.updatedAt)\n return formatDistanceToNow(d, { addSuffix: true })\n } catch {\n return 'Recently'\n }\n }, [file.updatedAt])\n\n if (viewMode === 'table') {\n return (\n <tr\n onClick={() => onSelect?.(file)}\n className={cn(\n 'group border-b border-border/50 transition-colors hover:bg-muted/40 cursor-pointer',\n isSelected && 'bg-primary/5',\n className\n )}\n >\n <td className=\"py-3 px-4\">\n <div className=\"flex items-center gap-3\">\n <div\n className={cn(\n 'flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border shadow-2xs',\n theme.bg,\n theme.border\n )}\n >\n {isImage ? (\n <ImageIcon className={cn('h-4 w-4', theme.text)} />\n ) : isVideo ? (\n <Film className={cn('h-4 w-4', theme.text)} />\n ) : isPdf ? (\n <FileText className={cn('h-4 w-4', theme.text)} />\n ) : isSheet ? (\n <FileSpreadsheet className={cn('h-4 w-4', theme.text)} />\n ) : isZip ? (\n <FileArchive className={cn('h-4 w-4', theme.text)} />\n ) : (\n <FileCode className={cn('h-4 w-4', theme.text)} />\n )}\n </div>\n <div className=\"min-w-0\">\n <p className=\"font-semibold text-xs text-foreground truncate max-w-[240px] sm:max-w-xs\">\n {file.fileName}\n </p>\n <p className=\"text-[11px] text-muted-foreground\">\n {file.folderPath || file.section || 'General'}\n </p>\n </div>\n </div>\n </td>\n <td className=\"py-3 px-4 text-xs\">\n <Badge\n variant=\"outline\"\n className={cn('text-[10px] px-2 py-0.5 font-bold', theme.bg, theme.text, theme.border)}\n >\n {file.category}\n </Badge>\n </td>\n <td className=\"py-3 px-4 text-xs text-muted-foreground font-mono\">\n {formatBytes(file.fileSize)}\n </td>\n <td className=\"py-3 px-4 text-xs text-muted-foreground hidden sm:table-cell\">\n {updatedTimeDisplay}\n </td>\n <td className=\"py-3 px-4 text-right\">\n <div className=\"flex items-center justify-end gap-1\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onPreview?.(file)\n }}\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Preview\"\n >\n <Eye className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onDownload?.(file)\n }}\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Download\"\n >\n <Download className=\"h-4 w-4\" />\n </button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n onClick={(e) => e.stopPropagation()}\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"More actions\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-40 rounded-xl p-1 shadow-lg\">\n <DropdownMenuItem\n onClick={() => onPreview?.(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5\"\n >\n <Eye className=\"h-3.5 w-3.5 text-blue-500\" />\n <span>Preview</span>\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => onDownload?.(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5\"\n >\n <Download className=\"h-3.5 w-3.5 text-emerald-500\" />\n <span>Download</span>\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => onCopyLink?.(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5\"\n >\n <Copy className=\"h-3.5 w-3.5 text-amber-500\" />\n <span>Copy Link</span>\n </DropdownMenuItem>\n {onShare && (\n <DropdownMenuItem\n onClick={() => onShare(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5\"\n >\n <Share2 className=\"h-3.5 w-3.5 text-indigo-500\" />\n <span>Share</span>\n </DropdownMenuItem>\n )}\n {onRename && (\n <DropdownMenuItem\n onClick={() => onRename(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5\"\n >\n <Pencil className=\"h-3.5 w-3.5 text-purple-500\" />\n <span>Rename</span>\n </DropdownMenuItem>\n )}\n {onDelete && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => onDelete(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5 text-rose-500 hover:text-rose-600 hover:bg-rose-50 dark:hover:bg-rose-950/30 rounded-md\"\n >\n <Trash2 className=\"h-3.5 w-3.5 text-rose-500\" />\n <span>Delete</span>\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </td>\n </tr>\n )\n }\n\n return (\n <div\n onClick={() => onSelect?.(file)}\n className={cn(\n 'group relative flex flex-col justify-between overflow-hidden rounded-2xl border border-border/80 bg-card p-3.5 shadow-2xs transition-all duration-200 hover:shadow-md hover:border-indigo-300 dark:hover:border-indigo-700/60 cursor-pointer select-none',\n isSelected && 'border-indigo-500 ring-2 ring-indigo-500/20 bg-indigo-500/5',\n className\n )}\n >\n {/* Top Media / Thumbnail */}\n <div className=\"relative mb-3 flex items-center justify-center overflow-hidden rounded-xl bg-muted/20 border border-border/40 min-h-[105px]\">\n {isImage && file.fileUrl ? (\n <img\n src={file.fileUrl}\n alt={file.fileName}\n className=\"h-28 w-full object-cover transition-transform duration-300 group-hover:scale-105\"\n loading=\"lazy\"\n />\n ) : (\n <div\n className={cn(\n 'flex h-16 w-16 items-center justify-center rounded-2xl border shadow-inner transition-transform duration-200 group-hover:scale-110',\n theme.bg,\n theme.border\n )}\n >\n {isPdf ? (\n <FileText className={cn('h-8 w-8', theme.text)} />\n ) : isVideo ? (\n <Film className={cn('h-8 w-8', theme.text)} />\n ) : isSheet ? (\n <FileSpreadsheet className={cn('h-8 w-8', theme.text)} />\n ) : isZip ? (\n <FileArchive className={cn('h-8 w-8', theme.text)} />\n ) : (\n <FileCode className={cn('h-8 w-8', theme.text)} />\n )}\n </div>\n )}\n\n {/* Category Top-Right Floating Badge */}\n <Badge\n variant=\"outline\"\n className={cn(\n 'absolute top-2 right-2 backdrop-blur-md text-[10px] font-bold px-1.5 py-0.5 shadow-2xs',\n theme.bg,\n theme.text,\n theme.border\n )}\n >\n {file.category}\n </Badge>\n </div>\n\n {/* File Info */}\n <div className=\"flex flex-col gap-1 min-w-0\">\n <h4 className=\"font-bold text-xs text-foreground truncate tracking-tight\" title={file.fileName}>\n {file.fileName}\n </h4>\n <div className=\"flex items-center justify-between text-[11px] text-muted-foreground\">\n <span className=\"font-mono\">{formatBytes(file.fileSize)}</span>\n <span className=\"truncate\">{updatedTimeDisplay}</span>\n </div>\n </div>\n\n {/* Footer Bottom Actions */}\n <div className=\"mt-3 pt-2.5 flex items-center justify-between border-t border-border/50 text-muted-foreground\">\n <span className=\"text-[10px] text-muted-foreground/70 font-medium truncate max-w-[120px]\">\n {file.folderPath || file.section || 'General'}\n </span>\n\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onPreview?.(file)\n }}\n className=\"p-1 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Preview file\"\n >\n <Eye className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onDownload?.(file)\n }}\n className=\"p-1 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Download file\"\n >\n <Download className=\"h-3.5 w-3.5\" />\n </button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n onClick={(e) => e.stopPropagation()}\n className=\"p-1 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"More\"\n >\n <MoreHorizontal className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-38 rounded-xl p-1 shadow-lg\">\n <DropdownMenuItem\n onClick={() => onPreview?.(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5\"\n >\n <Eye className=\"h-3.5 w-3.5 text-blue-500\" />\n <span>Preview</span>\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => onDownload?.(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5\"\n >\n <Download className=\"h-3.5 w-3.5 text-emerald-500\" />\n <span>Download</span>\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => onCopyLink?.(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5\"\n >\n <Copy className=\"h-3.5 w-3.5 text-amber-500\" />\n <span>Copy Link</span>\n </DropdownMenuItem>\n {onDelete && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => onDelete(file)}\n className=\"cursor-pointer text-xs flex items-center gap-2 py-1.5 text-rose-500 hover:text-rose-600 hover:bg-rose-50 dark:hover:bg-rose-950/30 rounded-md\"\n >\n <Trash2 className=\"h-3.5 w-3.5 text-rose-500\" />\n <span>Delete</span>\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { FolderOpen, ChevronDown, ChevronRight, Folder } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '@/design-system/components/ui/badge'\n\nexport interface FolderItemData {\n id: string\n name: string\n path: string\n section?: string\n category?: string\n fileCount: number\n parentId?: string | null\n level: number\n}\n\nexport interface FolderTreeItemProps {\n folder: FolderItemData\n isFolderActive: boolean\n isExpanded: boolean\n onToggleExpand: (folderId: string, e?: React.MouseEvent) => void\n onSelectFolder: (folder: FolderItemData) => void\n className?: string\n}\n\nexport function FolderTreeItem({\n folder,\n isFolderActive,\n isExpanded,\n onToggleExpand,\n onSelectFolder,\n className,\n}: FolderTreeItemProps) {\n const isLevel0 = folder.level === 0\n const isLevel1 = folder.level === 1\n const isLevel2 = folder.level === 2\n const hasChildren = isLevel0 || isLevel1\n\n return (\n <div\n id={`folder-card-${folder.id}`}\n onClick={() => {\n if (hasChildren) {\n onToggleExpand(folder.id)\n } else {\n onSelectFolder(folder)\n }\n }}\n className={cn(\n 'group relative flex cursor-pointer items-center justify-between gap-2 rounded-xl py-1.5 px-2 transition-all duration-200 select-none border',\n isLevel0 && 'font-bold bg-muted/20 border-border/50 my-1',\n isLevel1 && 'ml-3 border-border/40 my-0.5',\n isLevel2 && 'ml-6 border-transparent hover:bg-muted/40 my-0.5',\n isFolderActive\n ? 'border-indigo-300 bg-indigo-500/15 text-indigo-600 dark:border-indigo-800 dark:bg-indigo-950/40 dark:text-indigo-400 font-bold shadow-2xs'\n : 'bg-card hover:bg-indigo-500/5 hover:border-indigo-200/40',\n className\n )}\n >\n {isFolderActive && (\n <div className=\"absolute top-1 bottom-1 left-0 w-1 rounded-l-full bg-indigo-600\" />\n )}\n <div className=\"flex items-center gap-1.5 min-w-0 flex-1\">\n {hasChildren && (\n <button\n type=\"button\"\n onClick={(e) => onToggleExpand(folder.id, e)}\n className=\"flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground cursor-pointer\"\n >\n {isExpanded ? (\n <ChevronDown className=\"h-3 w-3\" />\n ) : (\n <ChevronRight className=\"h-3 w-3\" />\n )}\n </button>\n )}\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center rounded-lg text-indigo-600 dark:text-indigo-400 transition-colors',\n isLevel0\n ? 'h-6 w-6 border border-indigo-200/40 bg-indigo-500/10'\n : isLevel1\n ? 'h-5.5 w-5.5 border border-indigo-200/30 bg-indigo-500/5'\n : 'h-5 w-5'\n )}\n >\n {isExpanded ? (\n <FolderOpen\n className={\n isLevel0\n ? 'h-3.5 w-3.5'\n : isLevel1\n ? 'h-3 w-3'\n : 'h-3 w-3 text-indigo-500'\n }\n />\n ) : (\n <Folder\n className={\n isLevel0\n ? 'h-3.5 w-3.5'\n : isLevel1\n ? 'h-3 w-3'\n : 'h-3 w-3 text-indigo-500'\n }\n />\n )}\n </div>\n <span\n className={cn(\n 'truncate text-foreground',\n isLevel0\n ? 'text-xs font-bold'\n : isLevel1\n ? 'text-[11px] font-semibold'\n : 'text-[11px] font-medium',\n isFolderActive && 'text-indigo-600 dark:text-indigo-400'\n )}\n >\n {folder.name}\n </span>\n </div>\n\n <Badge\n variant={isFolderActive ? 'default' : 'secondary'}\n className={cn(\n 'text-[10px] px-1.5 py-0 h-4 min-w-4 flex items-center justify-center font-mono',\n isFolderActive\n ? 'bg-indigo-600 text-white'\n : 'bg-muted text-muted-foreground group-hover:bg-indigo-500/10 group-hover:text-indigo-600'\n )}\n >\n {folder.fileCount}\n </Badge>\n </div>\n )\n}\n","import React from 'react'\nimport { HardDrive, FileText, Image as ImageIcon, Film, Database, ArrowUpRight } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { formatBytes } from './file-card-item'\n\nexport interface StorageStatItem {\n label: string\n count: number\n sizeBytes?: number\n colorClass: string\n icon?: React.ReactNode\n}\n\nexport interface StorageStatCardProps {\n totalFiles: number\n totalSizeBytes?: number\n maxStorageBytes?: number\n stats?: StorageStatItem[]\n onViewAllFiles?: () => void\n onUploadClick?: () => void\n className?: string\n}\n\nexport function StorageStatCard({\n totalFiles,\n totalSizeBytes = 0,\n maxStorageBytes = 10 * 1024 * 1024 * 1024, // 10 GB default\n stats,\n onViewAllFiles,\n onUploadClick,\n className,\n}: StorageStatCardProps) {\n const percentUsed = Math.min(\n 100,\n Math.max(1, Math.round((totalSizeBytes / (maxStorageBytes || 1)) * 100))\n )\n\n const defaultStats: StorageStatItem[] = stats || [\n {\n label: 'Documents & PDFs',\n count: Math.round(totalFiles * 0.4),\n sizeBytes: Math.round(totalSizeBytes * 0.45),\n colorClass: 'bg-red-500',\n icon: <FileText className=\"h-4 w-4 text-red-500\" />,\n },\n {\n label: 'Images & Photos',\n count: Math.round(totalFiles * 0.35),\n sizeBytes: Math.round(totalSizeBytes * 0.3),\n colorClass: 'bg-amber-500',\n icon: <ImageIcon className=\"h-4 w-4 text-amber-500\" />,\n },\n {\n label: 'Media & Videos',\n count: Math.round(totalFiles * 0.15),\n sizeBytes: Math.round(totalSizeBytes * 0.2),\n colorClass: 'bg-purple-500',\n icon: <Film className=\"h-4 w-4 text-purple-500\" />,\n },\n {\n label: 'Other & Archives',\n count: Math.max(0, totalFiles - Math.round(totalFiles * 0.9)),\n sizeBytes: Math.round(totalSizeBytes * 0.05),\n colorClass: 'bg-indigo-500',\n icon: <Database className=\"h-4 w-4 text-indigo-500\" />,\n },\n ]\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-4 rounded-2xl border border-border/80 bg-card p-4 shadow-2xs select-none',\n className\n )}\n >\n {/* Top Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 border border-indigo-200/40\">\n <HardDrive className=\"h-5 w-5\" />\n </div>\n <div>\n <h3 className=\"text-xs font-bold text-foreground\">Storage Overview</h3>\n <p className=\"text-[11px] text-muted-foreground\">\n {totalFiles} items stored in workspace\n </p>\n </div>\n </div>\n\n <div className=\"text-right\">\n <p className=\"text-xs font-bold text-foreground font-mono\">\n {formatBytes(totalSizeBytes)}\n </p>\n <p className=\"text-[10px] text-muted-foreground font-mono\">\n of {formatBytes(maxStorageBytes)}\n </p>\n </div>\n </div>\n\n {/* Progress Bar */}\n <div className=\"space-y-1.5\">\n <div className=\"flex h-2.5 w-full overflow-hidden rounded-full bg-muted/60 p-0.5 border border-border/40\">\n <div\n className=\"h-full rounded-full bg-linear-to-r from-indigo-500 via-purple-500 to-amber-500 transition-all duration-500\"\n style={{ width: `${percentUsed}%` }}\n />\n </div>\n <div className=\"flex justify-between text-[10px] text-muted-foreground\">\n <span>{percentUsed}% capacity utilized</span>\n <span>{formatBytes(Math.max(0, maxStorageBytes - totalSizeBytes))} available</span>\n </div>\n </div>\n\n {/* Breakdown categories */}\n <div className=\"grid grid-cols-2 gap-2 pt-1\">\n {defaultStats.map((item, idx) => (\n <div\n key={idx}\n className=\"flex items-center gap-2 rounded-xl border border-border/40 bg-muted/20 p-2\"\n >\n <div className=\"shrink-0\">{item.icon}</div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-[11px] font-semibold text-foreground\">\n {item.label}\n </p>\n <div className=\"flex items-center justify-between text-[10px] text-muted-foreground\">\n <span>{item.count} files</span>\n <span className=\"font-mono\">{formatBytes(item.sizeBytes)}</span>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {/* Action Footer */}\n {(onViewAllFiles || onUploadClick) && (\n <div className=\"flex items-center justify-between pt-2 border-t border-border/50\">\n {onViewAllFiles && (\n <button\n type=\"button\"\n onClick={onViewAllFiles}\n className=\"text-xs font-semibold text-indigo-600 dark:text-indigo-400 hover:underline flex items-center gap-1 cursor-pointer\"\n >\n <span>Explore All Files</span>\n <ArrowUpRight className=\"h-3.5 w-3.5\" />\n </button>\n )}\n {onUploadClick && (\n <button\n type=\"button\"\n onClick={onUploadClick}\n className=\"text-xs font-semibold bg-indigo-600 text-white hover:bg-indigo-700 px-3 py-1 rounded-lg transition-colors cursor-pointer\"\n >\n Upload New\n </button>\n )}\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useMemo } from 'react'\nimport {\n Search,\n X,\n FolderOpen,\n ArrowLeft,\n Filter,\n ArrowUpDown,\n LayoutGrid,\n Table as TableIcon,\n SlidersHorizontal,\n ChevronLeft,\n ChevronRight,\n Upload,\n CheckSquare,\n Square,\n Trash2,\n Download,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { FileCardItem, FileItemData, FileCategoryType, formatBytes } from './file-card-item'\nimport { FolderItemData } from './folder-tree-item'\nimport { HeaderActions } from '@/features/Message/components/chat/header-actions'\nimport { Button } from '@/design-system/components/ui/button'\nimport { Badge } from '@/design-system/components/ui/badge'\nimport { Input } from '@/design-system/components/ui/input'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface UserFileCardsViewProps {\n folder?: FolderItemData | null\n files: FileItemData[]\n selectedFileId?: string | null\n onSelectFileForPreview?: (file: FileItemData) => void\n onDownloadFile?: (file: FileItemData) => void\n onDeleteFile?: (file: FileItemData) => void\n onCopyLink?: (file: FileItemData) => void\n onRenameFile?: (file: FileItemData) => void\n onShareFile?: (file: FileItemData) => void\n onUploadClick?: () => void\n onBack?: () => void\n className?: string\n}\n\nconst CATEGORY_TABS: { label: string; value: string }[] = [\n { label: 'All Files', value: 'all' },\n { label: 'PDFs', value: 'Pdf' },\n { label: 'Documents', value: 'Doc' },\n { label: 'Spreadsheets', value: 'Xls' },\n { label: 'Images', value: 'Images' },\n { label: 'Videos', value: 'Videos' },\n { label: 'Archives', value: 'Zip' },\n]\n\nexport function UserFileCardsView({\n folder,\n files,\n selectedFileId,\n onSelectFileForPreview,\n onDownloadFile,\n onDeleteFile,\n onCopyLink,\n onRenameFile,\n onShareFile,\n onUploadClick,\n onBack,\n className,\n}: UserFileCardsViewProps) {\n const [searchQuery, setSearchQuery] = useState('')\n const [selectedCategory, setSelectedCategory] = useState<string>('all')\n const [sortBy, setSortBy] = useState<'date' | 'name' | 'size'>('date')\n const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('desc')\n const [viewMode, setViewMode] = useState<'grid' | 'table'>('grid')\n const [currentPage, setCurrentPage] = useState(1)\n const itemsPerPage = viewMode === 'grid' ? 12 : 20\n\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set())\n\n // Filter & Search Logic\n const filteredFiles = useMemo(() => {\n return files.filter((f) => {\n const matchCategory =\n selectedCategory === 'all' ||\n f.category.toLowerCase() === selectedCategory.toLowerCase() ||\n (selectedCategory === 'Xls' && (f.category === 'Csv' || f.category === 'Xls'))\n\n const matchSearch =\n !searchQuery.trim() ||\n f.fileName.toLowerCase().includes(searchQuery.toLowerCase()) ||\n (f.folderPath && f.folderPath.toLowerCase().includes(searchQuery.toLowerCase()))\n\n return matchCategory && matchSearch\n })\n }, [files, selectedCategory, searchQuery])\n\n // Sorting\n const sortedFiles = useMemo(() => {\n return [...filteredFiles].sort((a, b) => {\n let compare = 0\n if (sortBy === 'date') {\n const timeA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0\n const timeB = b.updatedAt ? new Date(b.updatedAt).getTime() : 0\n compare = timeB - timeA\n } else if (sortBy === 'name') {\n compare = a.fileName.localeCompare(b.fileName)\n } else if (sortBy === 'size') {\n compare = (b.fileSize || 0) - (a.fileSize || 0)\n }\n return sortOrder === 'asc' ? -compare : compare\n })\n }, [filteredFiles, sortBy, sortOrder])\n\n // Pagination\n const totalPages = Math.ceil(sortedFiles.length / itemsPerPage) || 1\n const paginatedFiles = useMemo(() => {\n const start = (currentPage - 1) * itemsPerPage\n return sortedFiles.slice(start, start + itemsPerPage)\n }, [sortedFiles, currentPage, itemsPerPage])\n\n const totalBytes = useMemo(() => {\n return files.reduce((acc, curr) => acc + (curr.fileSize || 0), 0)\n }, [files])\n\n const toggleSelectAll = () => {\n if (selectedIds.size === paginatedFiles.length) {\n setSelectedIds(new Set())\n } else {\n setSelectedIds(new Set(paginatedFiles.map((f) => f.id)))\n }\n }\n\n const toggleSelectOne = (id: string) => {\n setSelectedIds((prev) => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }\n\n const handleBulkDownload = () => {\n const toDownload = files.filter((f) => selectedIds.has(f.id))\n toDownload.forEach((f) => onDownloadFile?.(f))\n }\n\n const handleBulkDelete = () => {\n const toDelete = files.filter((f) => selectedIds.has(f.id))\n toDelete.forEach((f) => onDeleteFile?.(f))\n setSelectedIds(new Set())\n }\n\n return (\n <div\n className={cn(\n 'flex h-full min-h-0 w-full flex-1 flex-col overflow-hidden bg-background select-none',\n className\n )}\n >\n {/* ── TOP HEADER ────────────────────────────────────────────────────────── */}\n <div className=\"flex items-center justify-between border-b border-border bg-background px-4 py-3 shrink-0\">\n <div className=\"flex items-center gap-2.5 min-w-0\">\n {onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"flex h-8 w-8 items-center justify-center rounded-xl text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n title=\"Back\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </button>\n )}\n\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 border border-indigo-200/50 shrink-0 shadow-2xs\">\n <FolderOpen className=\"h-5 w-5\" />\n </div>\n\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h2 className=\"truncate text-sm font-bold text-foreground tracking-tight\">\n {folder?.name || 'All Files & Folders'}\n </h2>\n <Badge variant=\"secondary\" className=\"text-[10px] px-1.5 py-0 h-4 font-mono\">\n {filteredFiles.length} files\n </Badge>\n </div>\n <p className=\"truncate text-xs text-muted-foreground\">\n {folder?.path || 'Storage Space'} · Total size: {formatBytes(totalBytes)}\n </p>\n </div>\n </div>\n\n <div className=\"flex items-center gap-1.5 shrink-0\">\n {onUploadClick && (\n <Button\n size=\"sm\"\n onClick={onUploadClick}\n className=\"gap-1.5 h-8 text-xs font-semibold shadow-xs\"\n >\n <Upload className=\"h-3.5 w-3.5\" />\n <span className=\"hidden sm:inline\">Upload Files</span>\n </Button>\n )}\n <HeaderActions onDelete={onBack} />\n </div>\n </div>\n\n {/* ── TOOLBAR & CATEGORY PILLS ─────────────────────────────────────────── */}\n <div className=\"flex flex-col gap-2.5 border-b border-border/60 bg-muted/10 p-3 shrink-0\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n {/* Search Input */}\n <div className=\"relative min-w-[200px] flex-1 max-w-md\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground\" />\n <Input\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value)\n setCurrentPage(1)\n }}\n placeholder=\"Search files by name, type, or path...\"\n className=\"h-8.5 pl-8 pr-8 text-xs rounded-xl bg-background border-border/80\"\n />\n {searchQuery && (\n <button\n type=\"button\"\n onClick={() => setSearchQuery('')}\n className=\"absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n\n {/* Controls: Sort + View Toggle + Bulk */}\n <div className=\"flex items-center gap-1.5\">\n {/* Sort Menu */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"h-8 gap-1.5 text-xs rounded-xl\">\n <ArrowUpDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <span className=\"hidden sm:inline capitalize\">Sort: {sortBy}</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44 rounded-xl p-1 shadow-lg\">\n <DropdownMenuLabel className=\"text-[10px] text-muted-foreground uppercase font-bold tracking-wider\">\n Sort By\n </DropdownMenuLabel>\n <DropdownMenuItem\n onClick={() => setSortBy('date')}\n className={cn('text-xs cursor-pointer', sortBy === 'date' && 'font-bold text-primary')}\n >\n Last Updated\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => setSortBy('name')}\n className={cn('text-xs cursor-pointer', sortBy === 'name' && 'font-bold text-primary')}\n >\n File Name (A-Z)\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => setSortBy('size')}\n className={cn('text-xs cursor-pointer', sortBy === 'size' && 'font-bold text-primary')}\n >\n File Size\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => setSortOrder((prev) => (prev === 'asc' ? 'desc' : 'asc'))}\n className=\"text-xs cursor-pointer\"\n >\n Order: {sortOrder === 'asc' ? 'Ascending ↑' : 'Descending ↓'}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n {/* View Mode Toggle (Grid vs Table) */}\n <div className=\"flex items-center rounded-xl bg-muted/50 p-0.5 border border-border/60\">\n <button\n type=\"button\"\n onClick={() => setViewMode('grid')}\n className={cn(\n 'flex h-7 w-7 items-center justify-center rounded-lg transition-all cursor-pointer',\n viewMode === 'grid'\n ? 'bg-background text-foreground shadow-2xs font-bold'\n : 'text-muted-foreground hover:text-foreground'\n )}\n title=\"Grid View\"\n >\n <LayoutGrid className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setViewMode('table')}\n className={cn(\n 'flex h-7 w-7 items-center justify-center rounded-lg transition-all cursor-pointer',\n viewMode === 'table'\n ? 'bg-background text-foreground shadow-2xs font-bold'\n : 'text-muted-foreground hover:text-foreground'\n )}\n title=\"Table View\"\n >\n <TableIcon className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n </div>\n\n {/* Category Pills Row */}\n <div className=\"flex items-center gap-1.5 overflow-x-auto scrollbar-none pb-0.5\">\n {CATEGORY_TABS.map((tab) => (\n <button\n key={tab.value}\n type=\"button\"\n onClick={() => {\n setSelectedCategory(tab.value)\n setCurrentPage(1)\n }}\n className={cn(\n 'rounded-lg px-2.5 py-1 text-xs font-semibold whitespace-nowrap transition-all duration-200 cursor-pointer border',\n selectedCategory === tab.value\n ? 'bg-indigo-600 text-white border-indigo-600 shadow-2xs'\n : 'bg-background border-border/80 text-muted-foreground hover:text-foreground hover:bg-muted/40'\n )}\n >\n {tab.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* ── BULK ACTION BAR (when items selected) ────────────────────────────── */}\n {selectedIds.size > 0 && (\n <div className=\"flex items-center justify-between bg-indigo-500/10 border-b border-indigo-200/40 px-4 py-2 text-xs\">\n <span className=\"font-semibold text-indigo-700 dark:text-indigo-300\">\n {selectedIds.size} files selected\n </span>\n <div className=\"flex items-center gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleBulkDownload}\n className=\"h-7 text-xs gap-1 bg-background\"\n >\n <Download className=\"h-3 w-3\" />\n <span>Download</span>\n </Button>\n {onDeleteFile && (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n onClick={handleBulkDelete}\n className=\"h-7 text-xs gap-1\"\n >\n <Trash2 className=\"h-3 w-3\" />\n <span>Delete</span>\n </Button>\n )}\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setSelectedIds(new Set())}\n className=\"h-7 text-xs\"\n >\n Clear\n </Button>\n </div>\n </div>\n )}\n\n {/* ── MAIN CONTENT AREA ─────────────────────────────────────────────────── */}\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n {paginatedFiles.length === 0 ? (\n <div className=\"flex h-64 flex-col items-center justify-center gap-3 text-center text-muted-foreground border-2 border-dashed border-border/60 rounded-2xl bg-muted/5 p-8\">\n <FolderOpen className=\"h-10 w-10 text-muted-foreground/40\" />\n <div>\n <p className=\"text-sm font-bold text-foreground\">No files found</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {searchQuery\n ? 'No documents match your search criteria'\n : 'This folder is currently empty. Upload your first document.'}\n </p>\n </div>\n {onUploadClick && (\n <Button size=\"sm\" onClick={onUploadClick} className=\"gap-1.5 text-xs mt-2\">\n <Upload className=\"h-3.5 w-3.5\" />\n <span>Upload New File</span>\n </Button>\n )}\n </div>\n ) : viewMode === 'grid' ? (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3.5\">\n {paginatedFiles.map((file) => (\n <FileCardItem\n key={file.id}\n file={file}\n isSelected={file.id === selectedFileId || selectedIds.has(file.id)}\n viewMode=\"grid\"\n onSelect={() => onSelectFileForPreview?.(file)}\n onPreview={() => onSelectFileForPreview?.(file)}\n onDownload={() => onDownloadFile?.(file)}\n onCopyLink={() => onCopyLink?.(file)}\n onRename={() => onRenameFile?.(file)}\n onDelete={() => onDeleteFile?.(file)}\n onShare={() => onShareFile?.(file)}\n />\n ))}\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-2xl border border-border/80 bg-card shadow-2xs\">\n <table className=\"w-full text-left text-xs border-collapse\">\n <thead className=\"border-b border-border/80 bg-muted/30 text-muted-foreground font-bold\">\n <tr>\n <th className=\"py-2.5 px-4\">Name</th>\n <th className=\"py-2.5 px-4\">Category</th>\n <th className=\"py-2.5 px-4\">Size</th>\n <th className=\"py-2.5 px-4 hidden sm:table-cell\">Updated</th>\n <th className=\"py-2.5 px-4 text-right\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {paginatedFiles.map((file) => (\n <FileCardItem\n key={file.id}\n file={file}\n isSelected={file.id === selectedFileId || selectedIds.has(file.id)}\n viewMode=\"table\"\n onSelect={() => onSelectFileForPreview?.(file)}\n onPreview={() => onSelectFileForPreview?.(file)}\n onDownload={() => onDownloadFile?.(file)}\n onCopyLink={() => onCopyLink?.(file)}\n onRename={() => onRenameFile?.(file)}\n onDelete={() => onDeleteFile?.(file)}\n onShare={() => onShareFile?.(file)}\n />\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n\n {/* ── PAGINATION FOOTER ─────────────────────────────────────────────────── */}\n {totalPages > 1 && (\n <div className=\"flex items-center justify-between border-t border-border bg-background px-4 py-2.5 shrink-0 text-xs text-muted-foreground\">\n <span>\n Showing {(currentPage - 1) * itemsPerPage + 1} -{' '}\n {Math.min(currentPage * itemsPerPage, sortedFiles.length)} of {sortedFiles.length}\n </span>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\n disabled={currentPage === 1}\n className=\"h-7 w-7 p-0 rounded-lg\"\n >\n <ChevronLeft className=\"h-3.5 w-3.5\" />\n </Button>\n <span className=\"px-2 font-mono font-bold text-foreground\">\n {currentPage} / {totalPages}\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}\n disabled={currentPage === totalPages}\n className=\"h-7 w-7 p-0 rounded-lg\"\n >\n <ChevronRight className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport React from 'react'\nimport {\n Bell,\n Flag,\n MoreVertical,\n Reply,\n Forward,\n Pin,\n Star,\n Heart,\n Archive,\n Trash2,\n ChevronRight,\n X,\n} from 'lucide-react'\nimport { toast } from 'sonner'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\n\ninterface HeaderActionsProps {\n onDelete?: () => void\n onDownload?: () => void\n onPrint?: () => void\n onShare?: () => void\n onReply?: () => void\n onForward?: () => void\n onPin?: () => void\n onStar?: () => void\n onFavorite?: () => void\n onArchive?: () => void\n onActionThis?: () => void\n onClose?: () => void\n}\n\nexport function HeaderActions({\n onDelete,\n onDownload,\n onPrint,\n onShare,\n onReply,\n onForward,\n onPin,\n onStar,\n onFavorite,\n onArchive,\n onActionThis,\n onClose,\n}: HeaderActionsProps) {\n return (\n <div className='flex items-center gap-1 shrink-0 select-none'>\n {/* Icon 1: Act on this Quick Action (Left of Flag) */}\n <button\n type='button'\n onClick={() => {\n if (onActionThis) onActionThis()\n else toast.info('Act on this option selected')\n }}\n className='p-1.5 rounded-lg hover:bg-muted text-amber-500 hover:text-amber-600 transition-colors cursor-pointer'\n title='Act on this'\n >\n <Bell className='h-4.5 w-4.5' />\n </button>\n\n {/* Icon 2: Quick Flag Action */}\n <button\n type='button'\n onClick={() => toast.success('Flagged item')}\n className='p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer'\n title='Flag'\n >\n <Flag className='h-4.5 w-4.5' />\n </button>\n\n {/* Icon 3: 3-Dot More Menu */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type='button'\n className='p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer'\n title='More options'\n >\n <MoreVertical className='h-4.5 w-4.5' />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align='end'\n className='w-48 border border-border/80 bg-background shadow-lg p-1 space-y-0.5'\n >\n {/* 1. Reply */}\n <DropdownMenuItem\n onClick={() => {\n if (onReply) onReply()\n else toast.info('Reply option selected')\n }}\n className='cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md'\n >\n <div className='flex items-center gap-2.5'>\n <Reply className='h-4 w-4 text-blue-500' />\n <span className='text-foreground'>Reply</span>\n </div>\n </DropdownMenuItem>\n\n {/* 2. Forward */}\n <DropdownMenuItem\n onClick={() => {\n if (onForward) onForward()\n else toast.info('Forward option selected')\n }}\n className='cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md'\n >\n <div className='flex items-center gap-2.5'>\n <Forward className='h-4 w-4 text-sky-400' />\n <span className='text-foreground'>Forward</span>\n </div>\n </DropdownMenuItem>\n\n {/* 3. Pin Message */}\n <DropdownMenuItem\n onClick={() => {\n if (onPin) onPin()\n else toast.success('Message pinned')\n }}\n className='cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md'\n >\n <div className='flex items-center gap-2.5'>\n <Pin className='h-4 w-4 text-purple-500' />\n <span className='text-foreground'>Pin Message</span>\n </div>\n </DropdownMenuItem>\n\n {/* 4. Star */}\n <DropdownMenuItem\n onClick={() => {\n if (onStar) onStar()\n else toast.success('Starred successfully')\n }}\n className='cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md'\n >\n <div className='flex items-center gap-2.5'>\n <Star className='h-4 w-4 text-amber-500' />\n <span className='text-foreground'>Star</span>\n </div>\n </DropdownMenuItem>\n\n {/* 5. Favorite */}\n <DropdownMenuItem\n onClick={() => {\n if (onFavorite) onFavorite()\n else toast.success('Added to favorites')\n }}\n className='cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md'\n >\n <div className='flex items-center gap-2.5'>\n <Heart className='h-4 w-4 text-rose-500' />\n <span className='text-foreground'>Favorite</span>\n </div>\n </DropdownMenuItem>\n\n {/* 6. Flag */}\n <DropdownMenuItem\n onClick={() => toast.success('Flagged message')}\n className='cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md'\n >\n <div className='flex items-center gap-2.5'>\n <Flag className='h-4 w-4 text-red-500' />\n <span className='text-foreground'>Flag</span>\n </div>\n </DropdownMenuItem>\n\n {/* 7. Archive */}\n <DropdownMenuItem\n onClick={() => {\n if (onArchive) onArchive()\n else toast.success('Archived successfully')\n }}\n className='cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md'\n >\n <div className='flex items-center gap-2.5'>\n <Archive className='h-4 w-4 text-indigo-500' />\n <span className='text-foreground'>Archive</span>\n </div>\n </DropdownMenuItem>\n\n {/* 8. Action This */}\n <DropdownMenuItem\n onClick={() => {\n if (onActionThis) onActionThis()\n else toast.info('Action This selected')\n }}\n className='cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md'\n >\n <div className='flex items-center gap-2.5'>\n <Bell className='h-4 w-4 text-amber-500' />\n <span className='text-foreground'>Action This</span>\n </div>\n </DropdownMenuItem>\n\n {/* 9. Delete */}\n <DropdownMenuItem\n onClick={() => {\n if (onDelete) onDelete()\n else toast.success('Item deleted')\n }}\n className='cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-red-500/10 rounded-md text-red-500 focus:text-red-500'\n >\n <div className='flex items-center gap-2.5'>\n <Trash2 className='h-4 w-4 text-red-500' />\n <span className='font-semibold text-red-500'>Delete</span>\n </div>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n {/* Icon 4: Close / Cross Button */}\n {onClose && (\n <button\n type='button'\n onClick={onClose}\n className='p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer ml-0.5'\n title='Close'\n aria-label='Close'\n >\n <X className='h-4.5 w-4.5' />\n </button>\n )}\n </div>\n )\n}\n","import React, { useState, useRef } from 'react'\nimport {\n Bold,\n Italic,\n Underline,\n List,\n ListOrdered,\n Link as LinkIcon,\n ImageIcon,\n Paperclip,\n Save,\n ArrowLeft,\n Download,\n Eye,\n X,\n Loader2,\n FileText,\n FolderOpen,\n UploadCloud,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '@/design-system/components/ui/button'\nimport { Input } from '@/design-system/components/ui/input'\nimport { Label } from '@/design-system/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/design-system/components/ui/select'\nimport { FileItemData, FileCategoryType, formatBytes } from './file-card-item'\n\nexport interface AttachmentItem {\n id: string\n name: string\n type: string\n size: string\n url?: string\n fileObj?: File\n progress?: number\n isUploading?: boolean\n}\n\nexport interface FileUploadFormProps {\n userEmail?: string | null\n folders?: { id: string; name: string }[]\n initialSubject?: string\n initialFolder?: string\n initialSubFolder?: string\n onClose?: () => void\n onSave?: (data: {\n subject: string\n folder: string\n subFolder: string\n remarks: string\n body: string\n attachments: AttachmentItem[]\n }) => void | Promise<void>\n onUploadSuccess?: (newItems?: FileItemData[]) => void\n onPreviewAttachment?: (attachment: { name: string; url?: string }) => void\n className?: string\n}\n\nconst TEMPLATE_OPTIONS = [\n { id: '1', name: 'Standard Document' },\n { id: '2', name: 'Financial Invoice' },\n { id: '3', name: 'Report & Spreadsheet' },\n { id: '4', name: 'Contract & Legal' },\n]\n\nconst FOLDER_OPTIONS = ['Finance', 'Chat', 'Files', 'Email', 'AI Chat', 'Order']\nconst SUB_FOLDER_OPTIONS: FileCategoryType[] = [\n 'Pdf',\n 'Doc',\n 'Xls',\n 'Images',\n 'Videos',\n 'Ppt',\n 'Txt',\n 'Csv',\n 'Zip',\n 'Other',\n]\n\nexport function FileUploadForm({\n userEmail,\n folders,\n initialSubject = '',\n initialFolder = 'Finance',\n initialSubFolder = 'Pdf',\n onClose,\n onSave,\n onUploadSuccess,\n onPreviewAttachment,\n className,\n}: FileUploadFormProps) {\n const [template, setTemplate] = useState(TEMPLATE_OPTIONS[0].id)\n const [subject, setSubject] = useState(initialSubject)\n const [folder, setFolder] = useState<string>(initialFolder)\n const [subFolder, setSubFolder] = useState<string>(initialSubFolder)\n const [remarks, setRemarks] = useState('')\n const [body, setBody] = useState('')\n\n const [attachments, setAttachments] = useState<AttachmentItem[]>([])\n const [isSaving, setIsSaving] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files\n if (!files || files.length === 0) return\n\n const newAttachments: AttachmentItem[] = Array.from(files).map((f) => ({\n id: `att-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n name: f.name,\n type: f.type || 'application/octet-stream',\n size: formatBytes(f.size),\n url: URL.createObjectURL(f),\n fileObj: f,\n progress: 100,\n }))\n\n setAttachments((prev) => [...prev, ...newAttachments])\n if (fileInputRef.current) fileInputRef.current.value = ''\n }\n\n const handleRemoveAttachment = (id: string) => {\n setAttachments((prev) => prev.filter((a) => a.id !== id))\n }\n\n const handleFormSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setIsSaving(true)\n try {\n if (onSave) {\n await onSave({\n subject,\n folder,\n subFolder,\n remarks,\n body,\n attachments,\n })\n }\n onUploadSuccess?.()\n } finally {\n setIsSaving(false)\n }\n }\n\n return (\n <div\n className={cn(\n 'flex h-full min-h-0 w-full flex-1 flex-col overflow-hidden bg-background select-none',\n className\n )}\n >\n {/* ── HEADER ────────────────────────────────────────────────────────── */}\n <div className=\"flex items-center justify-between border-b border-border bg-background px-4 py-3 shrink-0\">\n <div className=\"flex items-center gap-2.5 min-w-0\">\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"flex h-8 w-8 items-center justify-center rounded-xl text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n title=\"Back\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </button>\n )}\n\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 border border-indigo-200/50 shrink-0 shadow-2xs\">\n <FileText className=\"h-5 w-5\" />\n </div>\n\n <div className=\"min-w-0\">\n <h2 className=\"truncate text-sm font-bold text-foreground tracking-tight\">\n Create & Upload Document\n </h2>\n <p className=\"truncate text-xs text-muted-foreground\">\n Add metadata, descriptions, and attach files to your cloud storage\n </p>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 shrink-0\">\n {onClose && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose} className=\"h-8 text-xs\">\n Cancel\n </Button>\n )}\n <Button\n size=\"sm\"\n onClick={handleFormSubmit}\n disabled={isSaving || (!subject && attachments.length === 0)}\n className=\"h-8 gap-1.5 text-xs font-semibold shadow-xs bg-indigo-600 hover:bg-indigo-700 text-white\"\n >\n {isSaving ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Save className=\"h-3.5 w-3.5\" />\n )}\n <span>Save & Upload</span>\n </Button>\n </div>\n </div>\n\n {/* ── FORM CONTENT ─────────────────────────────────────────────────── */}\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4 space-y-4\">\n {/* Template & Location Selectors */}\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3 p-3.5 rounded-2xl border border-border/80 bg-muted/10\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Document Template</Label>\n <Select value={template} onValueChange={setTemplate}>\n <SelectTrigger className=\"h-8.5 text-xs rounded-xl bg-background border-border/80\">\n <SelectValue placeholder=\"Select template\" />\n </SelectTrigger>\n <SelectContent className=\"rounded-xl shadow-lg\">\n {TEMPLATE_OPTIONS.map((t) => (\n <SelectItem key={t.id} value={t.id} className=\"text-xs\">\n {t.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Target Space</Label>\n <Select value={folder} onValueChange={setFolder}>\n <SelectTrigger className=\"h-8.5 text-xs rounded-xl bg-background border-border/80\">\n <SelectValue placeholder=\"Select space\" />\n </SelectTrigger>\n <SelectContent className=\"rounded-xl shadow-lg\">\n {(folders || FOLDER_OPTIONS.map((f) => ({ id: f, name: f }))).map((f) => (\n <SelectItem key={f.id} value={f.name} className=\"text-xs\">\n {f.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Category Subfolder</Label>\n <Select value={subFolder} onValueChange={setSubFolder}>\n <SelectTrigger className=\"h-8.5 text-xs rounded-xl bg-background border-border/80\">\n <SelectValue placeholder=\"Select category\" />\n </SelectTrigger>\n <SelectContent className=\"rounded-xl shadow-lg\">\n {SUB_FOLDER_OPTIONS.map((cat) => (\n <SelectItem key={cat} value={cat} className=\"text-xs\">\n {cat}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Subject / Title */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Document Title / Subject</Label>\n <Input\n value={subject}\n onChange={(e) => setSubject(e.target.value)}\n placeholder=\"e.g. Q3 Sales & Performance Report\"\n className=\"h-9 text-xs rounded-xl bg-background border-border/80\"\n />\n </div>\n\n {/* Rich Formatting Toolbar & Editor */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Document Content / Notes</Label>\n <div className=\"rounded-2xl border border-border/80 overflow-hidden bg-background\">\n <div className=\"flex items-center gap-1 border-b border-border/60 bg-muted/20 p-1.5\">\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground\"\n title=\"Bold\"\n >\n <Bold className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground\"\n title=\"Italic\"\n >\n <Italic className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground\"\n title=\"Underline\"\n >\n <Underline className=\"h-3.5 w-3.5\" />\n </button>\n <div className=\"h-4 w-px bg-border/80 mx-1\" />\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground\"\n title=\"Bullet List\"\n >\n <List className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground\"\n title=\"Numbered List\"\n >\n <ListOrdered className=\"h-3.5 w-3.5\" />\n </button>\n <div className=\"h-4 w-px bg-border/80 mx-1\" />\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className=\"p-1.5 rounded-lg hover:bg-muted text-indigo-600 dark:text-indigo-400 font-semibold flex items-center gap-1 text-xs\"\n title=\"Attach Files\"\n >\n <Paperclip className=\"h-3.5 w-3.5\" />\n <span>Attach</span>\n </button>\n </div>\n\n <textarea\n value={body}\n onChange={(e) => setBody(e.target.value)}\n placeholder=\"Write or paste your document notes and text here...\"\n rows={4}\n className=\"w-full p-3 text-xs bg-transparent border-0 focus:outline-hidden resize-y min-h-[90px]\"\n />\n </div>\n </div>\n\n {/* Dropzone & Attachment List */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-semibold text-foreground\">\n Attachments ({attachments.length})\n </Label>\n <input\n type=\"file\"\n multiple\n ref={fileInputRef}\n onChange={handleFileChange}\n className=\"hidden\"\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => fileInputRef.current?.click()}\n className=\"h-7 text-xs gap-1.5 rounded-xl border-dashed\"\n >\n <Paperclip className=\"h-3 w-3\" />\n <span>Browse Files</span>\n </Button>\n </div>\n\n {attachments.length === 0 ? (\n <div\n onClick={() => fileInputRef.current?.click()}\n className=\"flex flex-col items-center justify-center gap-2 p-6 border-2 border-dashed border-border/80 rounded-2xl bg-muted/10 text-muted-foreground hover:border-indigo-400 hover:bg-indigo-50/20 dark:hover:bg-indigo-950/20 transition-all cursor-pointer text-center\"\n >\n <UploadCloud className=\"h-8 w-8 text-indigo-500\" />\n <div>\n <p className=\"text-xs font-bold text-foreground\">Click to upload or drag and drop</p>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n PDF, DOCX, XLSX, PNG, JPG, MP4 or ZIP up to 50MB\n </p>\n </div>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n {attachments.map((att) => (\n <div\n key={att.id}\n className=\"flex items-center justify-between gap-2 p-2.5 rounded-xl border border-border/80 bg-card shadow-2xs\"\n >\n <div className=\"flex items-center gap-2.5 min-w-0\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-indigo-500/10 text-indigo-600 shrink-0\">\n <FileText className=\"h-4 w-4\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"truncate text-xs font-semibold text-foreground\">{att.name}</p>\n <p className=\"text-[10px] text-muted-foreground font-mono\">{att.size}</p>\n </div>\n </div>\n\n <div className=\"flex items-center gap-1 shrink-0\">\n {onPreviewAttachment && att.url && (\n <button\n type=\"button\"\n onClick={() => onPreviewAttachment({ name: att.name, url: att.url })}\n className=\"p-1 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground\"\n title=\"Preview\"\n >\n <Eye className=\"h-3.5 w-3.5\" />\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => handleRemoveAttachment(att.id)}\n className=\"p-1 rounded-lg hover:bg-rose-50 dark:hover:bg-rose-950/30 text-rose-500 hover:text-rose-600\"\n title=\"Remove\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Remarks / Tags */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Remarks / Tags</Label>\n <Input\n value={remarks}\n onChange={(e) => setRemarks(e.target.value)}\n placeholder=\"e.g. Confidential, Q3 Approved, Client Copy\"\n className=\"h-8.5 text-xs rounded-xl bg-background border-border/80\"\n />\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { FilterBar, type ActiveFilter } from '../components/business/filter-bar'\nimport { cn } from '../../lib/utils'\n\nexport interface ListTemplateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n actions?: React.ReactNode\n searchPlaceholder?: string\n searchValue?: string\n onSearchChange?: (val: string) => void\n filters?: React.ReactNode\n activeFilters?: ActiveFilter[]\n onClearAllFilters?: () => void\n filterActions?: React.ReactNode\n children: React.ReactNode\n footer?: React.ReactNode\n}\n\n\nexport function ListTemplate({\n title,\n description,\n badge,\n breadcrumbs,\n actions,\n searchPlaceholder,\n searchValue,\n onSearchChange,\n filters,\n activeFilters,\n onClearAllFilters,\n filterActions,\n children,\n footer,\n className,\n ...props\n}: ListTemplateProps) {\n const hasFilterBar =\n Boolean(onSearchChange) ||\n Boolean(filters) ||\n (activeFilters && activeFilters.length > 0) ||\n Boolean(filterActions)\n\n return (\n <div className={cn('flex flex-col gap-6 p-4 sm:p-6 md:p-8', className)} {...props}>\n <PageHeader\n title={title}\n description={description}\n badge={badge}\n breadcrumbs={breadcrumbs}\n actions={actions}\n />\n\n {hasFilterBar && (\n <FilterBar\n searchPlaceholder={searchPlaceholder}\n searchValue={searchValue}\n onSearchChange={onSearchChange}\n filters={filters}\n activeFilters={activeFilters}\n onClearAll={onClearAllFilters}\n actions={filterActions}\n />\n )}\n\n <div className='flex-1'>{children}</div>\n\n {footer && <div className='pt-2'>{footer}</div>}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { Button } from '../components/ui/button'\nimport { ArrowLeft } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface DetailTemplateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n actions?: React.ReactNode\n onBack?: () => void\n backLabel?: string\n highlights?: React.ReactNode\n sidebar?: React.ReactNode\n children: React.ReactNode\n}\n\n\nexport function DetailTemplate({\n title,\n description,\n badge,\n breadcrumbs,\n actions,\n onBack,\n backLabel = 'Back',\n highlights,\n sidebar,\n children,\n className,\n ...props\n}: DetailTemplateProps) {\n return (\n <div className={cn('flex flex-col gap-6 p-4 sm:p-6 md:p-8', className)} {...props}>\n <div className='flex flex-col gap-2'>\n {onBack && (\n <Button\n variant='ghost'\n size='sm'\n onClick={onBack}\n className='w-fit gap-1.5 px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground'\n >\n <ArrowLeft className='h-3.5 w-3.5' />\n {backLabel}\n </Button>\n )}\n <PageHeader\n title={title}\n description={description}\n badge={badge}\n breadcrumbs={breadcrumbs}\n actions={actions}\n />\n </div>\n\n {highlights && <div className='grid gap-4 sm:grid-cols-2 lg:grid-cols-4'>{highlights}</div>}\n\n <div\n className={cn(\n 'grid gap-6',\n sidebar ? 'grid-cols-1 lg:grid-cols-3' : 'grid-cols-1'\n )}\n >\n <div className={cn(sidebar ? 'lg:col-span-2 space-y-6' : 'space-y-6')}>\n {children}\n </div>\n {sidebar && (\n <aside className='space-y-6 lg:col-span-1'>\n {sidebar}\n </aside>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { Button } from '../components/ui/button'\nimport { ArrowLeft } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface FormTemplateProps extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n onBack?: () => void\n backLabel?: string\n submitLabel?: string\n cancelLabel?: string\n onCancel?: () => void\n isSubmitting?: boolean\n stickyFooter?: boolean\n secondaryActions?: React.ReactNode\n}\n\n\nexport function FormTemplate({\n title,\n description,\n badge,\n breadcrumbs,\n onBack,\n backLabel = 'Back',\n submitLabel = 'Save changes',\n cancelLabel = 'Cancel',\n onCancel,\n isSubmitting = false,\n stickyFooter = false,\n secondaryActions,\n children,\n className,\n onSubmit,\n ...props\n}: FormTemplateProps) {\n return (\n <div className='flex flex-col gap-6 p-4 sm:p-6 md:p-8'>\n <div className='flex flex-col gap-2'>\n {onBack && (\n <Button\n type='button'\n variant='ghost'\n size='sm'\n onClick={onBack}\n className='w-fit gap-1.5 px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground'\n >\n <ArrowLeft className='h-3.5 w-3.5' />\n {backLabel}\n </Button>\n )}\n <PageHeader\n title={title}\n description={description}\n badge={badge}\n breadcrumbs={breadcrumbs}\n />\n </div>\n\n <form onSubmit={onSubmit} className={cn('space-y-8', className)} {...props}>\n <div className='space-y-6'>{children}</div>\n\n <div\n className={cn(\n 'flex flex-wrap items-center justify-between gap-4 pt-6',\n stickyFooter &&\n 'sticky bottom-0 -mx-4 -mb-4 bg-background/95 p-4 backdrop-blur border-t sm:-mx-6 sm:-mb-6 sm:p-6 md:-mx-8 md:-mb-8 md:p-8'\n )}\n >\n <div>{secondaryActions}</div>\n <div className='flex items-center gap-3'>\n {onCancel && (\n <Button\n type='button'\n variant='outline'\n disabled={isSubmitting}\n onClick={onCancel}\n >\n {cancelLabel}\n </Button>\n )}\n <Button type='submit' disabled={isSubmitting}>\n {isSubmitting ? 'Saving...' : submitLabel}\n </Button>\n </div>\n </div>\n </form>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { Button } from '../components/ui/button'\nimport { Check, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface WizardStep {\n id: string | number\n title: string\n description?: string\n}\n\nexport interface WizardTemplateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n steps: WizardStep[]\n currentStepIndex: number\n onStepChange?: (index: number) => void\n onNext?: () => void\n onPrevious?: () => void\n onSubmit?: () => void\n nextLabel?: string\n previousLabel?: string\n submitLabel?: string\n isSubmitting?: boolean\n canProceed?: boolean\n children: React.ReactNode\n}\n\n\nexport function WizardTemplate({\n title,\n description,\n steps,\n currentStepIndex,\n onStepChange,\n onNext,\n onPrevious,\n onSubmit,\n nextLabel = 'Next',\n previousLabel = 'Previous',\n submitLabel = 'Complete',\n isSubmitting = false,\n canProceed = true,\n children,\n className,\n ...props\n}: WizardTemplateProps) {\n const isLastStep = currentStepIndex === steps.length - 1\n const isFirstStep = currentStepIndex === 0\n\n return (\n <div className={cn('flex flex-col gap-6 p-4 sm:p-6 md:p-8', className)} {...props}>\n <PageHeader title={title} description={description} />\n\n {/* Steps Navigation Bar */}\n <nav aria-label='Wizard Progress' className='py-2'>\n <ol className='flex items-center justify-between gap-2 overflow-x-auto pb-2'>\n {steps.map((step, idx) => {\n const isCompleted = idx < currentStepIndex\n const isCurrent = idx === currentStepIndex\n const isClickable = onStepChange && idx < currentStepIndex\n\n return (\n <li\n key={step.id}\n className='flex flex-1 items-center gap-2.5 min-w-[120px]'\n >\n <button\n type='button'\n disabled={!isClickable}\n onClick={isClickable ? () => onStepChange(idx) : undefined}\n className={cn(\n 'flex items-center gap-2 text-left transition-colors',\n isClickable && 'cursor-pointer hover:opacity-80'\n )}\n >\n <span\n className={cn(\n 'flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold',\n isCompleted && 'bg-primary text-primary-foreground',\n isCurrent && 'border-2 border-primary bg-primary/10 text-primary font-bold',\n !isCompleted && !isCurrent && 'border border-border bg-muted text-muted-foreground'\n )}\n >\n {isCompleted ? <Check className='h-4 w-4' /> : idx + 1}\n </span>\n <div className='hidden sm:block'>\n <div\n className={cn(\n 'text-xs font-medium',\n isCurrent ? 'text-foreground font-semibold' : 'text-muted-foreground'\n )}\n >\n {step.title}\n </div>\n </div>\n </button>\n {idx < steps.length - 1 && (\n <div\n className={cn(\n 'h-0.5 flex-1 rounded-full',\n idx < currentStepIndex ? 'bg-primary' : 'bg-border'\n )}\n />\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n\n {/* Step Content */}\n <div className='flex-1 rounded-lg border bg-card p-4 sm:p-6'>\n {children}\n </div>\n\n {/* Wizard Footer Navigation */}\n <div className='flex items-center justify-between pt-2'>\n <Button\n type='button'\n variant='outline'\n disabled={isFirstStep || isSubmitting}\n onClick={onPrevious}\n >\n <ChevronLeft className='mr-1 h-4 w-4' />\n {previousLabel}\n </Button>\n\n {isLastStep ? (\n <Button\n type='button'\n disabled={!canProceed || isSubmitting}\n onClick={onSubmit}\n >\n {isSubmitting ? 'Submitting...' : submitLabel}\n </Button>\n ) : (\n <Button\n type='button'\n disabled={!canProceed || isSubmitting}\n onClick={onNext}\n >\n {nextLabel}\n <ChevronRight className='ml-1 h-4 w-4' />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { cn } from '../../lib/utils'\n\nexport interface DashboardTemplateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n actions?: React.ReactNode\n metrics?: React.ReactNode\n charts?: React.ReactNode\n activity?: React.ReactNode\n children?: React.ReactNode\n}\n\n\nexport function DashboardTemplate({\n title,\n description,\n badge,\n breadcrumbs,\n actions,\n metrics,\n charts,\n activity,\n children,\n className,\n ...props\n}: DashboardTemplateProps) {\n return (\n <div className={cn('flex flex-col gap-6 p-4 sm:p-6 md:p-8', className)} {...props}>\n <PageHeader\n title={title}\n description={description}\n badge={badge}\n breadcrumbs={breadcrumbs}\n actions={actions}\n />\n\n {metrics && (\n <section aria-label='Key Metrics' className='grid gap-4 sm:grid-cols-2 lg:grid-cols-4'>\n {metrics}\n </section>\n )}\n\n {charts && (\n <section aria-label='Charts and Visualizations' className='grid gap-4 md:grid-cols-2 lg:grid-cols-7'>\n {charts}\n </section>\n )}\n\n {activity && (\n <section aria-label='Recent Activity' className='space-y-4'>\n {activity}\n </section>\n )}\n\n {children && <div className='space-y-6'>{children}</div>}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface WorkspaceTemplateProps extends React.HTMLAttributes<HTMLDivElement> {\n header?: React.ReactNode\n leftSidebar?: React.ReactNode\n rightSidebar?: React.ReactNode\n footer?: React.ReactNode\n children: React.ReactNode\n}\n\nexport function WorkspaceTemplate({\n header,\n leftSidebar,\n rightSidebar,\n footer,\n children,\n className,\n ...props\n}: WorkspaceTemplateProps) {\n return (\n <div\n className={cn(\n 'flex h-screen w-full flex-col overflow-hidden bg-background text-foreground',\n className\n )}\n {...props}\n >\n {header && (\n <header className='flex h-14 shrink-0 items-center border-b px-4 bg-background z-10'>\n {header}\n </header>\n )}\n\n <div className='flex flex-1 overflow-hidden'>\n {leftSidebar && (\n <aside className='hidden md:flex w-64 shrink-0 flex-col border-r bg-sidebar p-3 overflow-y-auto'>\n {leftSidebar}\n </aside>\n )}\n\n <main className='flex flex-1 flex-col overflow-y-auto p-4 sm:p-6 bg-muted/20'>\n {children}\n </main>\n\n {rightSidebar && (\n <aside className='hidden lg:flex w-80 shrink-0 flex-col border-l bg-background p-4 overflow-y-auto'>\n {rightSidebar}\n </aside>\n )}\n </div>\n\n {footer && (\n <footer className='flex h-10 shrink-0 items-center border-t px-4 text-xs text-muted-foreground bg-background'>\n {footer}\n </footer>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useEffect } from 'react'\nimport { Bell } from 'lucide-react'\nimport { useRouter } from 'next/navigation'\nimport { Header } from '@/components/layout/header'\nimport { Search } from '@/components/search'\nimport { Button } from '../components/ui/button'\nimport { useAuthStore } from '../../stores/auth-store'\nimport { useNotificationStore } from '../../stores/notification-store'\n\ntype AppHeaderProps = {\n title: string\n fixed?: boolean\n iconsPosition?: 'left' | 'right'\n children?: React.ReactNode\n}\n\nexport function AppHeader({\n title,\n fixed = true,\n iconsPosition = 'right',\n children,\n}: AppHeaderProps) {\n const router = useRouter()\n const currentUser = useAuthStore((state) => state.auth.user)\n const { unreadCount, fetchNotifications, subscribeToNotifications, unsubscribe } = useNotificationStore()\n\n useEffect(() => {\n if (currentUser) {\n fetchNotifications(currentUser.accountNo)\n subscribeToNotifications(currentUser.accountNo)\n }\n return () => {\n unsubscribe()\n }\n }, [currentUser, fetchNotifications, subscribeToNotifications, unsubscribe])\n\n return (\n <Header fixed={fixed} className='border-b bg-background'>\n <div className='flex flex-1 items-center justify-between w-full'>\n {iconsPosition === 'left' ? (\n <div className='flex items-center gap-2 sm:gap-3 min-w-0'>\n <h1 className='min-w-0 truncate text-base font-semibold sm:text-lg'>\n {title}\n </h1>\n\n <div className='flex items-center gap-1 sm:gap-2 shrink-0 ml-1'>\n <Search iconOnly />\n\n {children}\n\n <Button\n variant='ghost'\n size='icon'\n className='relative size-8 shrink-0'\n aria-label='Notifications'\n onClick={() => router.push('/notification')}\n >\n <Bell className='size-5' />\n {unreadCount > 0 && (\n <span className='absolute -top-1 -right-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-red-500 px-1 text-[10px] font-medium text-white shadow-xs'>\n {unreadCount > 5 ? '5+' : unreadCount}\n </span>\n )}\n </Button>\n </div>\n </div>\n ) : (\n <>\n <h1 className='min-w-0 truncate text-base font-semibold sm:text-lg'>\n {title}\n </h1>\n\n <div className='ml-auto flex items-center gap-2 sm:gap-3'>\n <Search iconOnly />\n\n {children}\n\n <Button\n variant='ghost'\n size='icon'\n className='relative size-8 shrink-0'\n aria-label='Notifications'\n onClick={() => router.push('/notification')}\n >\n <Bell className='size-5' />\n {unreadCount > 0 && (\n <span className='absolute -top-1 -right-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-red-500 px-1 text-[10px] font-medium text-white shadow-xs'>\n {unreadCount > 5 ? '5+' : unreadCount}\n </span>\n )}\n </Button>\n </div>\n </>\n )}\n </div>\n </Header>\n )\n}\n","'use client'\r\n\r\nimport { useEffect, useState } from 'react'\r\nimport { cn } from '@/lib/utils'\r\nimport { AppLogo } from './app-logo'\r\n\r\ntype HeaderProps = React.HTMLAttributes<HTMLElement> & {\r\n fixed?: boolean\r\n ref?: React.Ref<HTMLElement>\r\n}\r\n\r\nexport function Header({ className, fixed, children, ...props }: HeaderProps) {\r\n const [offset, setOffset] = useState(0)\r\n\r\n useEffect(() => {\r\n const onScroll = () => {\r\n setOffset(document.body.scrollTop || document.documentElement.scrollTop)\r\n }\r\n\r\n // Add scroll listener to the body\r\n document.addEventListener('scroll', onScroll, { passive: true })\r\n\r\n // Clean up the event listener on unmount\r\n return () => document.removeEventListener('scroll', onScroll)\r\n }, [])\r\n\r\n return (\r\n // Page header container: fixed mode me top par sticky behavior deta hai.\r\n <header\r\n className={cn(\r\n 'z-50 h-16 shrink-0',\r\n fixed &&\r\n 'header-fixed peer/header sticky top-0 w-full bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/80',\r\n offset > 10 && fixed ? 'shadow-sm' : 'shadow-none',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n // Header ke andar left-to-right UI controls/content align karne ke liye row layout.\r\n 'relative flex h-full min-w-0 flex-nowrap items-center gap-1.5 overflow-hidden px-2 py-2 sm:gap-3 sm:px-4 md:gap-4',\r\n offset > 10 &&\r\n fixed &&\r\n 'after:absolute after:inset-0 after:-z-10 after:bg-background/20 after:backdrop-blur-lg'\r\n )}\r\n >\r\n {/* Mobile par app logo; desktop par sidebar trigger sidebar header me hai */}\r\n <AppLogo className='shrink-0 md:hidden' />\r\n {children}\r\n </div>\r\n </header>\r\n )\r\n}\r\n","'use client'\n\nimport { SearchIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { useSearch } from '@/context/search-provider'\nimport { Button } from '@/components/ui/button'\n\nexport function Search({\n className = '',\n placeholder = 'Search',\n iconOnly = true,\n ...props\n}: React.ComponentProps<'button'> & { placeholder?: string; iconOnly?: boolean }) {\n const search = useSearch()\n\n const openSearch = () => {\n if (search?.setOpen) {\n search.setOpen(true)\n }\n }\n\n return (\n <Button\n {...props}\n variant='ghost'\n size='icon'\n className={cn('size-8 shrink-0', className)}\n aria-label='Search'\n aria-keyshortcuts='Meta+K Control+K'\n onClick={openSearch}\n >\n <SearchIcon className='size-5' aria-hidden='true' />\n </Button>\n )\n}\n","import { create } from 'zustand'\r\nimport { createClient } from '@/lib/supabase/client'\r\nimport { RealtimeChannel } from '@supabase/supabase-js'\r\n\r\nexport interface DbNotification {\r\n id: string\r\n user_id: string\r\n sender_id: string | null\r\n message_id: string | null\r\n message_text: string\r\n read: boolean\r\n created_at: string\r\n}\r\n\r\ninterface NotificationState {\r\n notifications: DbNotification[]\r\n unreadCount: number\r\n isLoading: boolean\r\n fetchNotifications: (userId: string) => Promise<void>\r\n markAsRead: (notificationId: string) => Promise<void>\r\n markAllAsRead: (userId: string) => Promise<void>\r\n deleteNotification: (notificationId: string) => Promise<void>\r\n subscribeToNotifications: (userId: string) => void\r\n unsubscribe: () => void\r\n}\r\n\r\nlet activeChannel: RealtimeChannel | null = null\r\n\r\nexport const useNotificationStore = create<NotificationState>((set, get) => ({\r\n notifications: [],\r\n unreadCount: 0,\r\n isLoading: false,\r\n\r\n fetchNotifications: async (userId: string) => {\r\n set({ isLoading: true })\r\n const supabase = createClient()\r\n try {\r\n const { data, error } = await supabase\r\n .from('notifications')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n\r\n if (error) throw error\r\n\r\n const notifications = data || []\r\n const unreadCount = notifications.filter((n: DbNotification) => !n.read).length\r\n set({ notifications, unreadCount })\r\n } catch (e) {\r\n console.error('[NotificationStore] Failed to fetch notifications:', e)\r\n } finally {\r\n set({ isLoading: false })\r\n }\r\n },\r\n\r\n markAsRead: async (notificationId: string) => {\r\n const supabase = createClient()\r\n try {\r\n const { error } = await supabase\r\n .from('notifications')\r\n .update({ read: true })\r\n .eq('id', notificationId)\r\n\r\n if (error) throw error\r\n\r\n set((state) => {\r\n const updated = state.notifications.map((n) =>\r\n n.id === notificationId ? { ...n, read: true } : n\r\n )\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n } catch (e) {\r\n console.error('[NotificationStore] Failed to mark notification as read:', e)\r\n }\r\n },\r\n\r\n markAllAsRead: async (userId: string) => {\r\n const supabase = createClient()\r\n try {\r\n const { error } = await supabase\r\n .from('notifications')\r\n .update({ read: true })\r\n .eq('user_id', userId)\r\n .eq('read', false)\r\n\r\n if (error) throw error\r\n\r\n set((state) => {\r\n const updated = state.notifications.map((n) => ({ ...n, read: true }))\r\n return { notifications: updated, unreadCount: 0 }\r\n })\r\n } catch (e) {\r\n console.error('[NotificationStore] Failed to mark all notifications as read:', e)\r\n }\r\n },\r\n\r\n deleteNotification: async (notificationId: string) => {\r\n const supabase = createClient()\r\n try {\r\n const { error } = await supabase\r\n .from('notifications')\r\n .delete()\r\n .eq('id', notificationId)\r\n\r\n if (error) throw error\r\n\r\n set((state) => {\r\n const updated = state.notifications.filter((n) => n.id !== notificationId)\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n } catch (e) {\r\n console.error('[NotificationStore] Failed to delete notification:', e)\r\n }\r\n },\r\n\r\n subscribeToNotifications: (userId: string) => {\r\n try {\r\n if (!userId) return\r\n\r\n const supabase = createClient()\r\n\r\n if (activeChannel && activeUserId === userId) {\r\n return\r\n }\r\n\r\n if (activeChannel) {\r\n try {\r\n supabase.removeChannel(activeChannel)\r\n } catch (_) {}\r\n activeChannel = null\r\n activeUserId = null\r\n }\r\n\r\n const channelTopic = `notifications-user-${userId}-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`\r\n const channel = supabase.channel(channelTopic)\r\n\r\n channel\r\n .on(\r\n 'postgres_changes',\r\n {\r\n event: '*',\r\n schema: 'public',\r\n table: 'notifications',\r\n filter: `user_id=eq.${userId}`,\r\n },\r\n (payload: any) => {\r\n const { eventType, new: newRecord, old: oldRecord } = payload\r\n\r\n if (eventType === 'INSERT') {\r\n const inserted = newRecord as DbNotification\r\n set((state) => {\r\n if (state.notifications.some((n) => n.id === inserted.id)) {\r\n return {}\r\n }\r\n const updated = [inserted, ...state.notifications]\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n } else if (eventType === 'UPDATE') {\r\n const updatedRecord = newRecord as DbNotification\r\n set((state) => {\r\n const updated = state.notifications.map((n) =>\r\n n.id === updatedRecord.id ? updatedRecord : n\r\n )\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n } else if (eventType === 'DELETE') {\r\n const deletedId = oldRecord?.id\r\n if (!deletedId) return\r\n set((state) => {\r\n const updated = state.notifications.filter((n) => n.id !== deletedId)\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n }\r\n }\r\n )\r\n .subscribe()\r\n\r\n activeChannel = channel\r\n activeUserId = userId\r\n } catch (err) {\r\n console.warn('[NotificationStore] Realtime subscription error:', err)\r\n }\r\n },\r\n\r\n unsubscribe: () => {\r\n try {\r\n if (activeChannel) {\r\n const supabase = createClient()\r\n supabase.removeChannel(activeChannel)\r\n activeChannel = null\r\n activeUserId = null\r\n }\r\n } catch (err) {\r\n console.warn('[NotificationStore] Unsubscribe error:', err)\r\n }\r\n },\r\n}))\r\n","import { createBrowserClient } from '@supabase/ssr'\r\n\r\nlet clientSingleton: ReturnType<typeof createBrowserClient> | null = null\r\n\r\nexport function createClient() {\r\n if (typeof window === 'undefined') {\r\n return createBrowserClient(\r\n process.env.NEXT_PUBLIC_SUPABASE_URL!,\r\n process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!\r\n )\r\n }\r\n\r\n if (!clientSingleton) {\r\n clientSingleton = createBrowserClient(\r\n process.env.NEXT_PUBLIC_SUPABASE_URL!,\r\n process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!\r\n )\r\n }\r\n return clientSingleton;\r\n}\r\n","import {\n Mail,\n HelpCircle,\n Settings,\n Command,\n Bot,\n SearchIcon,\n ChartArea,\n Map,\n Route,\n Link,\n Ticket,\n} from 'lucide-react'\nimport { type SidebarData } from '../types'\n\nexport const sidebarData: SidebarData = {\n user: {\n name: 'satnaing',\n email: 'satnaingdev@gmail.com',\n avatar: '/avatars/shadcn.jpg',\n },\n\n teams: [\n {\n name: 'Amoga App',\n logo: Command,\n plan: 'Demo Company',\n },\n ],\n\n navGroups: [\n {\n title: 'Menu',\n items: [\n {\n title: 'Message',\n url: '/message',\n icon: Mail,\n },\n {\n title: 'Email Settings',\n url: '/email-settings',\n icon: Settings,\n },\n {\n title: 'Design System',\n url: '/',\n icon: Settings,\n },\n {\n title: 'Vouchers',\n url: '/vouchers',\n icon: Ticket,\n },\n {\n title: 'AI Chat',\n url: '/ai_chat',\n icon: Bot,\n },\n {\n title: 'AI Search',\n url: '/ai_search',\n icon: SearchIcon,\n },\n {\n title: 'Chart Template',\n url: '/charttemplate',\n icon: ChartArea,\n },\n {\n title: 'Map Template',\n url: '/map',\n icon: Map,\n },\n {\n title: 'Route Doc',\n url: '/routedoc',\n icon: Route,\n },\n {\n title: 'Link Maker',\n url: '/link-maker',\n icon: Link,\n },\n ],\n },\n\n {\n title: 'Other',\n items: [\n {\n title: 'Settings',\n icon: Settings,\n items: [\n // Add settings pages here\n ],\n },\n {\n title: 'Help Center',\n url: '/help-center',\n icon: HelpCircle,\n },\n ],\n },\n ],\n}\n","import React from 'react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../components/ui/button'\nimport { useSidebar } from '../components/ui/sidebar'\nimport { sidebarData } from './data/sidebar-data'\n\ntype AppLogoProps = {\n className?: string\n onClick?: () => void\n}\n\nexport function AppLogo({ className, onClick }: AppLogoProps) {\n const { toggleSidebar, setOpenMobile, isMobile } = useSidebar()\n const team = sidebarData.teams[0]\n const Logo = team.logo\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (onClick) {\n onClick()\n return\n }\n if (isMobile) {\n setOpenMobile(true)\n } else {\n toggleSidebar()\n }\n }\n\n return (\n <Button\n type='button'\n variant='ghost'\n onClick={handleClick}\n className={cn(\n 'size-8 shrink-0 p-0 hover:bg-transparent sm:size-9 cursor-pointer',\n className\n )}\n aria-label='Open sidebar menu'\n >\n <div className='flex size-full items-center justify-center rounded-lg bg-primary text-primary-foreground'>\n <Logo className='size-4' />\n </div>\n </Button>\n )\n}\n","'use client'\r\n\r\nimport { createContext, useContext, useState } from 'react'\r\nimport { getCookie, setCookie } from '@/lib/cookies'\r\n\r\nexport type Collapsible = 'offcanvas' | 'icon' | 'none'\r\ntype Variant = 'inset' | 'sidebar' | 'floating'\r\n\r\n// Cookie constants following the pattern from sidebar.tsx\r\nconst LAYOUT_COLLAPSIBLE_COOKIE_NAME = 'layout_collapsible'\r\nconst LAYOUT_VARIANT_COOKIE_NAME = 'layout_variant'\r\nconst LAYOUT_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 // 7 days\r\n\r\n// Default values\r\nconst DEFAULT_VARIANT = 'inset'\r\nconst DEFAULT_COLLAPSIBLE = 'icon'\r\n\r\ntype LayoutContextType = {\r\n resetLayout: () => void\r\n\r\n defaultCollapsible: Collapsible\r\n collapsible: Collapsible\r\n setCollapsible: (collapsible: Collapsible) => void\r\n\r\n defaultVariant: Variant\r\n variant: Variant\r\n setVariant: (variant: Variant) => void\r\n\r\n showInlineNotFound: boolean\r\n setShowInlineNotFound: (show: boolean) => void\r\n}\r\n\r\nconst LayoutContext = createContext<LayoutContextType | null>(null)\r\n\r\ntype LayoutProviderProps = {\r\n children: React.ReactNode\r\n}\r\n\r\nexport function LayoutProvider({ children }: LayoutProviderProps) {\r\n const [collapsible, _setCollapsible] = useState<Collapsible>(() => {\r\n const saved = getCookie(LAYOUT_COLLAPSIBLE_COOKIE_NAME)\r\n return (saved as Collapsible) || DEFAULT_COLLAPSIBLE\r\n })\r\n\r\n const [variant, _setVariant] = useState<Variant>(() => {\r\n const saved = getCookie(LAYOUT_VARIANT_COOKIE_NAME)\r\n return (saved as Variant) || DEFAULT_VARIANT\r\n })\r\n\r\n const [showInlineNotFound, setShowInlineNotFound] = useState(false)\r\n\r\n const setCollapsible = (newCollapsible: Collapsible) => {\r\n _setCollapsible(newCollapsible)\r\n setCookie(\r\n LAYOUT_COLLAPSIBLE_COOKIE_NAME,\r\n newCollapsible,\r\n LAYOUT_COOKIE_MAX_AGE\r\n )\r\n }\r\n\r\n const setVariant = (newVariant: Variant) => {\r\n _setVariant(newVariant)\r\n setCookie(LAYOUT_VARIANT_COOKIE_NAME, newVariant, LAYOUT_COOKIE_MAX_AGE)\r\n }\r\n\r\n const resetLayout = () => {\r\n setCollapsible(DEFAULT_COLLAPSIBLE)\r\n setVariant(DEFAULT_VARIANT)\r\n }\r\n\r\n const contextValue: LayoutContextType = {\r\n resetLayout,\r\n defaultCollapsible: DEFAULT_COLLAPSIBLE,\r\n collapsible,\r\n setCollapsible,\r\n defaultVariant: DEFAULT_VARIANT,\r\n variant,\r\n setVariant,\r\n showInlineNotFound,\r\n setShowInlineNotFound,\r\n }\r\n\r\n return <LayoutContext value={contextValue}>{children}</LayoutContext>\r\n}\r\n\r\nexport function useLayout() {\r\n const context = useContext(LayoutContext)\r\n if (!context) {\r\n return {\r\n resetLayout: () => {},\r\n defaultCollapsible: DEFAULT_COLLAPSIBLE,\r\n collapsible: DEFAULT_COLLAPSIBLE,\r\n setCollapsible: () => {},\r\n defaultVariant: DEFAULT_VARIANT,\r\n variant: DEFAULT_VARIANT,\r\n setVariant: () => {},\r\n showInlineNotFound: false,\r\n setShowInlineNotFound: () => {},\r\n }\r\n }\r\n return context\r\n}\r\n","'use client'\r\n\r\nimport { type ReactNode } from 'react'\r\nimport Link from 'next/link'\r\nimport { usePathname } from 'next/navigation'\r\nimport { ChevronRight, X } from 'lucide-react'\r\nimport { useLayout } from '../../context/layout-provider'\r\nimport {\r\n Collapsible,\r\n CollapsibleContent,\r\n CollapsibleTrigger,\r\n} from '../components/ui/collapsible'\r\nimport {\r\n SidebarGroup,\r\n SidebarGroupLabel,\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n SidebarMenuSub,\r\n SidebarMenuSubButton,\r\n SidebarMenuSubItem,\r\n SidebarTrigger,\r\n useSidebar,\r\n} from '../components/ui/sidebar'\r\nimport { Button } from '../components/ui/button'\r\nimport { Badge } from '../components/ui/badge'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '../components/ui/dropdown-menu'\r\nimport {\r\n type NavCollapsible,\r\n type NavItem,\r\n type NavLink,\r\n type NavGroup as NavGroupProps,\r\n} from './types'\r\n\r\nimport { cn } from '../../lib/utils'\r\n\r\nexport function NavGroup({ title, items }: NavGroupProps) {\r\n const { state, isMobile, openMobile, setOpenMobile } = useSidebar()\r\n const href = usePathname()\r\n\r\n return (\r\n <SidebarGroup className={cn(title === 'Menu' && 'pt-0')}>\r\n {/* Label and Toggle: Sticky at the top */}\r\n <SidebarGroupLabel\r\n className={cn(\r\n 'flex items-center justify-between',\r\n title === 'Menu' && state !== 'collapsed' && 'sticky top-0 z-20 bg-sidebar py-1.5'\r\n )}\r\n >\r\n {/* Left Side */}\r\n <span>{title}</span>\r\n\r\n {/* Desktop: Toggle on far right */}\r\n {title === 'Menu' && !isMobile && (\r\n <SidebarTrigger\r\n variant='ghost'\r\n className='h-5 w-5'\r\n aria-label='Toggle sidebar'\r\n />\r\n )}\r\n\r\n {/* Mobile: Close button */}\r\n {title === 'Menu' && isMobile && openMobile && (\r\n <Button\r\n type='button'\r\n variant='ghost'\r\n size='icon'\r\n className='size-6 shrink-0'\r\n aria-label='Close sidebar'\r\n onClick={() => setOpenMobile(false)}\r\n >\r\n <X className='size-4' aria-hidden='true' />\r\n </Button>\r\n )}\r\n </SidebarGroupLabel>\r\n\r\n <SidebarMenu>\r\n {items.map((item) => {\r\n const key = `${item.title}-${item.url}`\r\n\r\n if (!item.items)\r\n return <SidebarMenuLink key={key} item={item} href={href} />\r\n\r\n if (item.title === 'Settings' && item.items.length === 0)\r\n return <SidebarMenuSettings key={key} item={item} />\r\n\r\n if (state === 'collapsed' && !isMobile)\r\n return (\r\n <SidebarMenuCollapsedDropdown key={key} item={item} href={href} />\r\n )\r\n\r\n return <SidebarMenuCollapsible key={key} item={item} href={href} />\r\n })}\r\n </SidebarMenu>\r\n </SidebarGroup>\r\n )\r\n}\r\n\r\nfunction NavBadge({ children }: { children: ReactNode }) {\r\n return <Badge className='rounded-full px-1 py-0 text-xs'>{children}</Badge>\r\n}\r\n\r\nfunction SidebarMenuLink({ item, href }: { item: NavLink; href: string }) {\r\n const { setOpenMobile } = useSidebar()\r\n const { setShowInlineNotFound } = useLayout()\r\n\r\n return (\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n asChild\r\n isActive={checkIsActive(href, item)}\r\n tooltip={item.title}\r\n >\r\n <Link\r\n href={item.url}\r\n onClick={() => {\r\n setShowInlineNotFound(false)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n </Link>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction SidebarMenuSettings({ item }: { item: NavCollapsible }) {\r\n const { setOpenMobile } = useSidebar()\r\n const { showInlineNotFound, setShowInlineNotFound } = useLayout()\r\n\r\n return (\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n tooltip={item.title}\r\n isActive={showInlineNotFound}\r\n onClick={() => {\r\n setShowInlineNotFound(true)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction SidebarMenuCollapsible({\r\n item,\r\n href,\r\n}: {\r\n item: NavCollapsible\r\n href: string\r\n}) {\r\n const { setOpenMobile } = useSidebar()\r\n const { setShowInlineNotFound } = useLayout()\r\n return (\r\n <Collapsible\r\n asChild\r\n defaultOpen={checkIsActive(href, item, true)}\r\n className='group/collapsible'\r\n >\r\n <SidebarMenuItem>\r\n <CollapsibleTrigger asChild>\r\n <SidebarMenuButton tooltip={item.title}>\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n <ChevronRight className='ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180' />\r\n </SidebarMenuButton>\r\n </CollapsibleTrigger>\r\n <CollapsibleContent className='CollapsibleContent'>\r\n <SidebarMenuSub>\r\n {item.items.map((subItem) => (\r\n <SidebarMenuSubItem key={subItem.title}>\r\n <SidebarMenuSubButton\r\n asChild\r\n isActive={checkIsActive(href, subItem)}\r\n >\r\n <Link\r\n href={subItem.url}\r\n onClick={() => {\r\n setShowInlineNotFound(false)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {subItem.icon && <subItem.icon />}\r\n <span>{subItem.title}</span>\r\n {subItem.badge && <NavBadge>{subItem.badge}</NavBadge>}\r\n </Link>\r\n </SidebarMenuSubButton>\r\n </SidebarMenuSubItem>\r\n ))}\r\n </SidebarMenuSub>\r\n </CollapsibleContent>\r\n </SidebarMenuItem>\r\n </Collapsible>\r\n )\r\n}\r\n\r\nfunction SidebarMenuCollapsedDropdown({\r\n item,\r\n href,\r\n}: {\r\n item: NavCollapsible\r\n href: string\r\n}) {\r\n return (\r\n <SidebarMenuItem>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <SidebarMenuButton\r\n tooltip={item.title}\r\n isActive={checkIsActive(href, item)}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n <ChevronRight className='ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90' />\r\n </SidebarMenuButton>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent side='right' align='start' sideOffset={4}>\r\n <DropdownMenuLabel>\r\n {item.title} {item.badge ? `(${item.badge})` : ''}\r\n </DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n {item.items.map((sub) => (\r\n <DropdownMenuItem key={`${sub.title}-${sub.url}`} asChild>\r\n <Link\r\n href={sub.url}\r\n className={`${checkIsActive(href, sub) ? 'bg-secondary' : ''}`}\r\n >\r\n {sub.icon && <sub.icon />}\r\n <span className='max-w-52 text-wrap'>{sub.title}</span>\r\n {sub.badge && (\r\n <span className='ms-auto text-xs'>{sub.badge}</span>\r\n )}\r\n </Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction checkIsActive(href: string, item: NavItem, mainNav = false) {\r\n return (\r\n href === item.url || // /endpint?search=param\r\n href.split('?')[0] === item.url || // endpoint\r\n !!item?.items?.filter((i) => i.url === href).length || // if child nav is active\r\n (mainNav &&\r\n href.split('/')[1] !== '' &&\r\n href.split('/')[1] === item?.url?.split('/')[1])\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport {\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n useSidebar,\r\n} from '../components/ui/sidebar'\r\n\r\ntype TeamSwitcherProps = {\r\n teams: {\r\n name: string\r\n logo: React.ElementType\r\n plan: string\r\n }[]\r\n}\r\n\r\nexport function TeamSwitcher({ teams }: TeamSwitcherProps) {\r\n // Teams ka dropdown/overlay remove: yahan sirf current team show hogi.\r\n useSidebar() // ensure sidebar context available (no-op usage)\r\n const activeTeam = teams[0]\r\n\r\n return (\r\n <SidebarMenu>\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n size='lg'\r\n className='data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground'\r\n >\r\n <div className='flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground'>\r\n <activeTeam.logo className='size-4' />\r\n </div>\r\n <div className='grid flex-1 text-start text-sm leading-tight'>\r\n <span className='truncate font-semibold'>{activeTeam.name}</span>\r\n <span className='truncate text-xs'>{activeTeam.plan}</span>\r\n </div>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n </SidebarMenu>\r\n )\r\n}\r\n","import {\n ChevronsUpDown,\n LogOut,\n Settings,\n Palette,\n} from 'lucide-react'\nimport useDialogState from '@/hooks/use-dialog-state'\nimport { useAuthStore } from '../../stores/auth-store'\nimport { Avatar, AvatarFallback, AvatarImage } from '../components/ui/avatar'\nimport { ConfigDrawer } from '@/components/config-drawer'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../components/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '../components/ui/sidebar'\nimport { SignOutDialog } from '@/components/sign-out-dialog'\n\ntype NavUserProps = {\n user: {\n name: string\n email: string\n avatar: string\n }\n}\n\nexport function NavUser({ user: fallbackUser }: NavUserProps) {\n const { isMobile } = useSidebar()\n const [open, setOpen] = useDialogState()\n const { auth } = useAuthStore()\n\n const userName = auth.user?.name || auth.user?.email?.split('@')[0] || fallbackUser.name\n const userEmail = auth.user?.email || fallbackUser.email\n const userAvatar = auth.user?.picture || fallbackUser.avatar\n const userInitials = userName\n .split(' ')\n .map((n: string) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n\n return (\n <>\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size='lg'\n tooltip={userName}\n className='data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground'\n >\n <Avatar className='h-8 w-8 rounded-lg'>\n <AvatarImage src={userAvatar} alt={userName} />\n <AvatarFallback className='rounded-lg'>{userInitials}</AvatarFallback>\n </Avatar>\n <div className='grid flex-1 text-start text-sm leading-tight'>\n <span className='truncate font-semibold'>{userName}</span>\n <span className='truncate text-xs text-muted-foreground'>{userEmail}</span>\n </div>\n <ChevronsUpDown className='ml-auto size-4 shrink-0' />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className='w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg'\n side={isMobile ? 'bottom' : 'right'}\n align='end'\n sideOffset={4}\n >\n <DropdownMenuLabel className='p-0 font-normal'>\n <div className='flex items-center gap-2 px-1 py-1.5 text-start text-sm'>\n <Avatar className='h-8 w-8 rounded-lg'>\n <AvatarImage src={userAvatar} alt={userName} />\n <AvatarFallback className='rounded-lg'>{userInitials}</AvatarFallback>\n </Avatar>\n <div className='grid flex-1 text-start text-sm leading-tight'>\n <span className='truncate font-semibold'>{userName}</span>\n <span className='truncate text-xs text-muted-foreground'>{userEmail}</span>\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n\n {/* Theme Settings */}\n <ConfigDrawer\n trigger={\n <DropdownMenuItem onSelect={(e) => e.preventDefault()}>\n <Palette className='mr-2 h-4 w-4' />\n Theme\n </DropdownMenuItem>\n }\n />\n\n {/* Settings */}\n <ConfigDrawer\n trigger={\n <DropdownMenuItem onSelect={(e) => e.preventDefault()}>\n <Settings className='mr-2 h-4 w-4' />\n Setting\n </DropdownMenuItem>\n }\n />\n\n <DropdownMenuSeparator />\n\n {/* Sign Out */}\n <DropdownMenuItem\n variant='destructive'\n onClick={() => setOpen(true)}\n >\n <LogOut className='mr-2 h-4 w-4' />\n Sign out\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n\n <SignOutDialog open={!!open} onOpenChange={setOpen} />\n </>\n )\n}\n","'use client'\r\n\r\nimport { useState } from 'react'\r\n\r\n/**\r\n * Custom hook for confirm dialog\r\n * @param initialState string | null\r\n * @returns A stateful value, and a function to update it.\r\n * @example const [open, setOpen] = useDialogState<\"approve\" | \"reject\">()\r\n */\r\nexport default function useDialogState<T extends string | boolean>(\r\n initialState: T | null = null\r\n) {\r\n const [open, _setOpen] = useState<T | null>(initialState)\r\n\r\n const setOpen = (str: T | null) =>\r\n _setOpen((prev) => (prev === str ? null : str))\r\n\r\n return [open, setOpen] as const\r\n}\r\n","'use client'\r\n\r\nimport { type SVGProps, useState } from 'react'\r\nimport { Root as Radio, Item } from '@radix-ui/react-radio-group'\r\nimport { Check, CircleCheck, RotateCcw, Search, Settings } from 'lucide-react'\r\nimport { IconThemeDark } from '@/assets/custom/icon-theme-dark'\r\nimport { IconThemeLight } from '@/assets/custom/icon-theme-light'\r\nimport { IconThemeSystem } from '@/assets/custom/icon-theme-system'\r\nimport { cn } from '@/lib/utils'\r\nimport { useTheme } from '@/context/theme-provider'\r\nimport {\r\n colorThemes,\r\n DEFAULT_COLOR_THEME,\r\n useColorTheme,\r\n} from '@/context/color-theme-provider'\r\nimport { Button } from '@/components/ui/button'\r\nimport {\r\n Sheet,\r\n SheetContent,\r\n SheetDescription,\r\n SheetFooter,\r\n SheetHeader,\r\n SheetTitle,\r\n SheetTrigger,\r\n} from '@/components/ui/sheet'\r\n\r\n// ✅ ADDED: Allow custom trigger\r\ntype ConfigDrawerProps = {\r\n trigger?: React.ReactNode\r\n}\r\n\r\nexport function ConfigDrawer({\r\n trigger,\r\n}: ConfigDrawerProps) {\r\n const { resetTheme } = useTheme()\r\n const { resetColorTheme } = useColorTheme()\r\n\r\n const handleReset = () => {\r\n resetTheme()\r\n resetColorTheme()\r\n }\r\n\r\n return (\r\n <Sheet>\r\n {/* ==========================================\r\n UPDATED\r\n Use custom trigger if provided\r\n Otherwise show default settings button\r\n ========================================== */}\r\n <SheetTrigger asChild>\r\n {trigger ?? (\r\n <Button\r\n size='icon'\r\n variant='ghost'\r\n aria-label='Open theme settings'\r\n className='rounded-full'\r\n >\r\n <Settings aria-hidden='true' />\r\n </Button>\r\n )}\r\n </SheetTrigger>\r\n\r\n {/* ==========================================\r\n EXISTING DRAWER CONTENT\r\n ========================================== */}\r\n <SheetContent className='flex flex-col'>\r\n <SheetHeader className='pb-0 text-start'>\r\n <SheetTitle>Theme Settings</SheetTitle>\r\n <SheetDescription>\r\n Customize the look and feel of your dashboard.\r\n </SheetDescription>\r\n </SheetHeader>\r\n\r\n <div className='flex flex-1 flex-col gap-6 overflow-hidden px-4'>\r\n <ThemeConfig />\r\n <ThemeListSelector />\r\n </div>\r\n\r\n <SheetFooter className='gap-2'>\r\n <Button\r\n variant='destructive'\r\n onClick={handleReset}\r\n >\r\n Reset\r\n </Button>\r\n </SheetFooter>\r\n </SheetContent>\r\n </Sheet>\r\n )\r\n}\r\n\r\nfunction SectionTitle({\r\n title,\r\n showReset = false,\r\n onReset,\r\n resetAriaLabel,\r\n className,\r\n}: {\r\n title: string\r\n showReset?: boolean\r\n onReset?: () => void\r\n /** Shown on the small per-section reset (RotateCcw) for accessibility and tests. */\r\n resetAriaLabel?: string\r\n className?: string\r\n}) {\r\n return (\r\n <div\r\n className={cn(\r\n 'mb-2 flex items-center gap-2 text-sm font-semibold text-muted-foreground',\r\n className\r\n )}\r\n >\r\n {title}\r\n {showReset && onReset && (\r\n <Button\r\n type='button'\r\n size='icon'\r\n variant='secondary'\r\n className='size-4 rounded-full'\r\n onClick={onReset}\r\n aria-label={resetAriaLabel}\r\n >\r\n <RotateCcw className='size-3' />\r\n </Button>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction RadioGroupItem({\r\n item,\r\n isTheme = false,\r\n}: {\r\n item: {\r\n value: string\r\n label: string\r\n icon: (props: SVGProps<SVGSVGElement>) => React.ReactElement\r\n }\r\n isTheme?: boolean\r\n}) {\r\n return (\r\n <Item\r\n value={item.value}\r\n className={cn('group outline-none', 'transition duration-200 ease-in')}\r\n aria-label={`Select ${item.label.toLowerCase()}`}\r\n aria-describedby={`${item.value}-description`}\r\n >\r\n <div\r\n className={cn(\r\n 'relative rounded-[6px] ring-[1px] ring-border',\r\n 'group-data-[state=checked]:shadow-2xl group-data-[state=checked]:ring-primary',\r\n 'group-focus-visible:ring-2'\r\n )}\r\n role='img'\r\n aria-hidden='false'\r\n aria-label={`${item.label} option preview`}\r\n >\r\n <CircleCheck\r\n className={cn(\r\n 'size-6 fill-primary stroke-white',\r\n 'group-data-[state=unchecked]:hidden',\r\n 'absolute top-0 right-0 translate-x-1/2 -translate-y-1/2'\r\n )}\r\n aria-hidden='true'\r\n />\r\n <item.icon\r\n className={cn(\r\n !isTheme &&\r\n 'fill-primary stroke-primary group-data-[state=unchecked]:fill-muted-foreground group-data-[state=unchecked]:stroke-muted-foreground'\r\n )}\r\n aria-hidden='true'\r\n />\r\n </div>\r\n <div\r\n className='mt-1 text-xs'\r\n id={`${item.value}-description`}\r\n aria-live='polite'\r\n >\r\n {item.label}\r\n </div>\r\n </Item>\r\n )\r\n}\r\n\r\nfunction ThemeConfig() {\r\n const { defaultTheme, theme, setTheme } = useTheme()\r\n return (\r\n <div>\r\n <SectionTitle\r\n title='Theme'\r\n showReset={theme !== defaultTheme}\r\n onReset={() => setTheme(defaultTheme)}\r\n resetAriaLabel='Reset theme preference to default'\r\n />\r\n <Radio\r\n value={theme}\r\n onValueChange={setTheme}\r\n className='grid w-full max-w-md grid-cols-3 gap-4'\r\n aria-label='Select theme preference'\r\n aria-describedby='theme-description'\r\n >\r\n {[\r\n {\r\n value: 'system',\r\n label: 'System',\r\n icon: IconThemeSystem,\r\n },\r\n {\r\n value: 'light',\r\n label: 'Light',\r\n icon: IconThemeLight,\r\n },\r\n {\r\n value: 'dark',\r\n label: 'Dark',\r\n icon: IconThemeDark,\r\n },\r\n ].map((item) => (\r\n <RadioGroupItem key={item.value} item={item} isTheme />\r\n ))}\r\n </Radio>\r\n <div id='theme-description' className='sr-only'>\r\n Choose between system preference, light mode, or dark mode\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction ThemeListSelector() {\r\n const [search, setSearch] = useState('')\r\n const { colorTheme, setColorTheme } = useColorTheme()\r\n\r\n const filtered = colorThemes.filter((t) =>\r\n t.label.toLowerCase().includes(search.toLowerCase())\r\n )\r\n\r\n return (\r\n <div className='flex min-h-0 flex-1 flex-col'>\r\n <SectionTitle\r\n title='Color Theme'\r\n showReset={colorTheme !== DEFAULT_COLOR_THEME}\r\n onReset={() => setColorTheme(DEFAULT_COLOR_THEME)}\r\n resetAriaLabel='Reset color theme to default'\r\n />\r\n\r\n {/* Search input */}\r\n <div className='relative mb-2.5'>\r\n <Search className='pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground' />\r\n <input\r\n type='text'\r\n placeholder='Search themes...'\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n className={cn(\r\n 'w-full rounded-lg border border-border bg-background py-2 pl-9 pr-3 text-sm',\r\n 'placeholder:text-muted-foreground',\r\n 'focus:outline-none focus:ring-2 focus:ring-ring',\r\n 'transition-colors'\r\n )}\r\n />\r\n </div>\r\n\r\n {/* Theme count */}\r\n <p className='mb-2 text-xs text-muted-foreground font-medium'>\r\n {filtered.length} theme{filtered.length !== 1 ? 's' : ''} available\r\n </p>\r\n\r\n {/* Scrollable theme list */}\r\n <div\r\n className='flex-1 space-y-1 overflow-y-auto rounded-lg pr-1'\r\n role='radiogroup'\r\n aria-label='Select color theme'\r\n >\r\n {filtered.length === 0 && (\r\n <p className='py-8 text-center text-sm text-muted-foreground'>\r\n No themes found\r\n </p>\r\n )}\r\n {filtered.map((ct) => (\r\n <button\r\n key={ct.name}\r\n onClick={() => setColorTheme(ct.name)}\r\n role='radio'\r\n aria-checked={colorTheme === ct.name}\r\n aria-label={`Select ${ct.label} theme`}\r\n className={cn(\r\n 'flex w-full items-center gap-3 rounded-lg px-3 py-2.5 transition-all duration-150 cursor-pointer',\r\n colorTheme === ct.name\r\n ? 'bg-primary text-primary-foreground shadow-md'\r\n : 'hover:bg-accent/80 hover:text-foreground border border-transparent hover:border-border/40'\r\n )}\r\n >\r\n {/* Color preview dots */}\r\n <div className='flex gap-1.5 shrink-0'>\r\n {ct.colors.map((color, i) => (\r\n <span\r\n key={i}\r\n className={cn(\r\n 'size-3.5 rounded-full shadow-xs transition-transform hover:scale-110',\r\n colorTheme === ct.name\r\n ? 'ring-1 ring-primary-foreground/40'\r\n : 'ring-1 ring-border/50'\r\n )}\r\n style={{ backgroundColor: color }}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Theme name & Tweakcn badge */}\r\n <div className='flex items-center gap-1.5 truncate'>\r\n <span className='text-sm font-medium truncate'>{ct.label}</span>\r\n {ct.category === 'tweakcn' && (\r\n <span\r\n className={cn(\r\n 'rounded px-1.5 py-0.2 text-[9px] font-semibold tracking-wider uppercase',\r\n colorTheme === ct.name\r\n ? 'bg-primary-foreground/20 text-primary-foreground'\r\n : 'bg-primary/10 text-primary'\r\n )}\r\n >\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Selected indicator */}\r\n {colorTheme === ct.name && (\r\n <Check className='ml-auto size-4 shrink-0' strokeWidth={3} />\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import { type SVGProps } from 'react'\r\n\r\nexport function IconThemeDark(props: SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg\r\n data-name='icon-theme-dark'\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 79.86 51.14'\r\n {...props}\r\n >\r\n <g fill='#1d2b3f'>\r\n <rect x={0.53} y={0.5} width={78.83} height={50.14} rx={3.5} ry={3.5} />\r\n <path d='M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z' />\r\n </g>\r\n <path\r\n d='M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z'\r\n fill='#0d1628'\r\n />\r\n <circle cx={6.7} cy={7.04} r={3.54} fill='#426187' />\r\n <path\r\n d='M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z'\r\n fill='#426187'\r\n />\r\n <g fill='#2a62bc'>\r\n <rect\r\n x={33.36}\r\n y={19.73}\r\n width={2.75}\r\n height={3.42}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.32}\r\n />\r\n <rect\r\n x={29.64}\r\n y={16.57}\r\n width={2.75}\r\n height={6.58}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.44}\r\n />\r\n <rect\r\n x={37.16}\r\n y={14.44}\r\n width={2.75}\r\n height={8.7}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.53}\r\n />\r\n <rect\r\n x={41.19}\r\n y={10.75}\r\n width={2.75}\r\n height={12.4}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.53}\r\n />\r\n </g>\r\n <circle cx={62.74} cy={16.32} r={8} fill='#2f5491' opacity={0.5} />\r\n <path\r\n d='M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z'\r\n fill='#2f5491'\r\n opacity={0.74}\r\n />\r\n <rect\r\n x={29.64}\r\n y={27.75}\r\n width={41.62}\r\n height={18.62}\r\n rx={1.69}\r\n ry={1.69}\r\n fill='#17273f'\r\n />\r\n </svg>\r\n )\r\n}\r\n","import { type SVGProps } from 'react'\r\n\r\nexport function IconThemeLight(props: SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg\r\n data-name='icon-theme-light'\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 79.86 51.14'\r\n {...props}\r\n >\r\n <g fill='#d9d9d9'>\r\n <rect x={0.53} y={0.5} width={78.83} height={50.14} rx={3.5} ry={3.5} />\r\n <path d='M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z' />\r\n </g>\r\n <path\r\n d='M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z'\r\n fill='#ecedef'\r\n />\r\n <circle cx={6.7} cy={7.04} r={3.54} fill='#fff' />\r\n <path\r\n d='M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z'\r\n fill='#fff'\r\n />\r\n <g fill='#c0c4c4'>\r\n <rect\r\n x={33.36}\r\n y={19.73}\r\n width={2.75}\r\n height={3.42}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.32}\r\n />\r\n <rect\r\n x={29.64}\r\n y={16.57}\r\n width={2.75}\r\n height={6.58}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.44}\r\n />\r\n <rect\r\n x={37.16}\r\n y={14.44}\r\n width={2.75}\r\n height={8.7}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.53}\r\n />\r\n <rect\r\n x={41.19}\r\n y={10.75}\r\n width={2.75}\r\n height={12.4}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.53}\r\n />\r\n </g>\r\n <circle cx={62.74} cy={16.32} r={8} fill='#fff' />\r\n <g fill='#d9d9d9'>\r\n <path d='M63.62 15.82L67 10.15c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z' />\r\n <path d='M67.14 10.88a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95s-1.67-2.21-2.86-2.92z' />\r\n </g>\r\n <rect\r\n x={29.64}\r\n y={27.75}\r\n width={41.62}\r\n height={18.62}\r\n rx={1.69}\r\n ry={1.69}\r\n fill='#fff'\r\n />\r\n </svg>\r\n )\r\n}\r\n","import { type SVGProps } from 'react'\r\nimport { cn } from '@/lib/utils'\r\n\r\nexport function IconThemeSystem({\r\n className,\r\n ...props\r\n}: SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg\r\n data-name='icon-theme-system'\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 79.86 51.14'\r\n className={cn(\r\n 'overflow-hidden rounded-[6px]',\r\n 'fill-primary stroke-primary group-data-[state=unchecked]:fill-muted-foreground group-data-[state=unchecked]:stroke-muted-foreground',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <path opacity={0.2} d='M0 0.03H22.88V51.17H0z' />\r\n <circle\r\n cx={6.7}\r\n cy={7.04}\r\n r={3.54}\r\n fill='#fff'\r\n opacity={0.8}\r\n stroke='#fff'\r\n strokeLinecap='round'\r\n strokeMiterlimit={10}\r\n />\r\n <path\r\n d='M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1z'\r\n fill='#fff'\r\n stroke='none'\r\n opacity={0.75}\r\n />\r\n <path\r\n d='M18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05z'\r\n fill='#fff'\r\n stroke='none'\r\n opacity={0.72}\r\n />\r\n <path\r\n d='M15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91z'\r\n fill='#fff'\r\n stroke='none'\r\n opacity={0.55}\r\n />\r\n <path\r\n d='M16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z'\r\n fill='#fff'\r\n stroke='none'\r\n opacity={0.67}\r\n />\r\n <rect\r\n x={33.36}\r\n y={19.73}\r\n width={2.75}\r\n height={3.42}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.31}\r\n stroke='none'\r\n />\r\n <rect\r\n x={29.64}\r\n y={16.57}\r\n width={2.75}\r\n height={6.58}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.4}\r\n stroke='none'\r\n />\r\n <rect\r\n x={37.16}\r\n y={14.44}\r\n width={2.75}\r\n height={8.7}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.26}\r\n stroke='none'\r\n />\r\n <rect\r\n x={41.19}\r\n y={10.75}\r\n width={2.75}\r\n height={12.4}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.37}\r\n stroke='none'\r\n />\r\n <g>\r\n <circle cx={62.74} cy={16.32} r={8} opacity={0.25} />\r\n <path\r\n d='M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z'\r\n opacity={0.45}\r\n />\r\n </g>\r\n <rect\r\n x={29.64}\r\n y={27.75}\r\n width={41.62}\r\n height={18.62}\r\n rx={1.69}\r\n ry={1.69}\r\n opacity={0.3}\r\n stroke='none'\r\n strokeLinecap='round'\r\n strokeMiterlimit={10}\r\n />\r\n </svg>\r\n )\r\n}\r\n","'use client'\n\nimport { useLayout } from '../../context/layout-provider'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarTrigger,\n} from '../components/ui/sidebar'\nimport { sidebarData } from './data/sidebar-data'\nimport { NavGroup } from './nav-group'\nimport { TeamSwitcher } from './team-switcher'\nimport { NavUser } from './nav-user'\n\nexport function AppSidebar() {\n const { collapsible } = useLayout()\n\n return (\n <Sidebar collapsible={collapsible} variant='sidebar'>\n {/* Logo & Toggle Header */}\n <SidebarHeader className='p-2 pb-1'>\n <div className='flex items-center justify-between gap-1'>\n <div className='flex-1 min-w-0'>\n <TeamSwitcher teams={sidebarData.teams} />\n </div>\n <div className='group-data-[collapsible=icon]:hidden shrink-0'>\n <SidebarTrigger\n variant='ghost'\n className='h-8 w-8 hover:bg-sidebar-accent text-sidebar-foreground'\n aria-label='Toggle sidebar'\n />\n </div>\n </div>\n\n {/* When collapsed to icon mode */}\n <div className='hidden group-data-[collapsible=icon]:flex justify-center pt-2 pb-1'>\n <SidebarTrigger\n variant='ghost'\n className='h-8 w-8 hover:bg-sidebar-accent text-sidebar-foreground'\n aria-label='Toggle sidebar'\n />\n </div>\n </SidebarHeader>\n\n {/* Navigation */}\n <SidebarContent>\n {sidebarData.navGroups.map((props) => (\n <NavGroup key={props.title} {...props} />\n ))}\n </SidebarContent>\n\n {/* User Profile */}\n <SidebarFooter>\n <NavUser user={sidebarData.user} />\n </SidebarFooter>\n </Sidebar>\n )\n}\n","import Link from 'next/link'\r\nimport { Menu, X } from 'lucide-react'\r\nimport { cn } from '../../lib/utils'\r\nimport {\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n useSidebar,\r\n} from '../components/ui/sidebar'\r\nimport { Button } from '../components/ui/button'\r\n\r\nexport function AppTitle() {\r\n const { setOpenMobile } = useSidebar()\r\n return (\r\n <SidebarMenu>\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n size='lg'\r\n className='gap-0 py-0 hover:bg-transparent active:bg-transparent'\r\n asChild\r\n >\r\n <div>\r\n <Link\r\n href='/'\r\n onClick={() => setOpenMobile(false)}\r\n className='grid flex-1 text-start text-sm leading-tight'\r\n >\r\n <span className='truncate font-bold'>Shadcn-Admin</span>\r\n <span className='truncate text-xs'>Vite + ShadcnUI</span>\r\n </Link>\r\n <ToggleSidebar />\r\n </div>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n </SidebarMenu>\r\n )\r\n}\r\n\r\nfunction ToggleSidebar({\r\n className,\r\n onClick,\r\n ...props\r\n}: React.ComponentProps<typeof Button>) {\r\n const { toggleSidebar } = useSidebar()\r\n\r\n return (\r\n <Button\r\n data-sidebar='trigger'\r\n data-slot='sidebar-trigger'\r\n variant='ghost'\r\n size='icon'\r\n className={cn('aspect-square size-8 max-md:scale-125', className)}\r\n onClick={(event) => {\r\n onClick?.(event)\r\n toggleSidebar()\r\n }}\r\n {...props}\r\n >\r\n <X className='md:hidden' />\r\n <Menu className='max-md:hidden' />\r\n <span className='sr-only'>Toggle Sidebar</span>\r\n </Button>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { useEffect, useState } from 'react'\r\nimport { usePathname } from 'next/navigation'\r\nimport { getCookie } from '../../lib/cookies'\r\nimport { cn } from '../../lib/utils'\r\nimport { LayoutProvider, useLayout } from '../../context/layout-provider'\r\nimport { SearchProvider } from '../../context/search-provider'\r\nimport { SidebarInset, SidebarProvider } from '../components/ui/sidebar'\r\nimport { AppSidebar } from '@/components/layout/app-sidebar'\r\nimport { SkipToMain } from '@/components/skip-to-main'\r\nimport { NotFoundError } from '@/features/errors/not-found-error'\r\n\r\ntype AuthenticatedLayoutProps = {\r\n children?: React.ReactNode\r\n}\r\n\r\nfunction AuthenticatedLayoutContent({ children }: AuthenticatedLayoutProps) {\r\n const { showInlineNotFound, setShowInlineNotFound } = useLayout()\r\n const pathname = usePathname()\r\n\r\n useEffect(() => {\r\n setShowInlineNotFound(false)\r\n }, [pathname, setShowInlineNotFound])\r\n\r\n return (\r\n <>\r\n <SkipToMain />\r\n <AppSidebar />\r\n <SidebarInset\r\n className={cn(\r\n '@container/content flex min-h-svh flex-1 flex-col overflow-hidden',\r\n 'has-[[data-layout=fixed]]:h-svh has-data-[layout=fixed]:h-svh',\r\n 'peer-data-[variant=inset]:has-data-[layout=fixed]:h-[calc(100svh-(var(--spacing)*4))]'\r\n )}\r\n >\r\n {showInlineNotFound ? (\r\n <NotFoundError\r\n embedded\r\n onDismiss={() => setShowInlineNotFound(false)}\r\n />\r\n ) : (\r\n children\r\n )}\r\n </SidebarInset>\r\n </>\r\n )\r\n}\r\n\r\nexport function AuthenticatedLayout({ children }: AuthenticatedLayoutProps) {\r\n const [defaultOpen, setDefaultOpen] = useState(true)\r\n const [isMounted, setIsMounted] = useState(false)\r\n\r\n useEffect(() => {\r\n setDefaultOpen(getCookie('sidebar_state') !== 'false')\r\n setIsMounted(true)\r\n }, [])\r\n\r\n if (!isMounted) {\r\n return null\r\n }\r\n\r\n return (\r\n <SearchProvider>\r\n <LayoutProvider>\r\n <SidebarProvider defaultOpen={defaultOpen}>\r\n <AuthenticatedLayoutContent>{children}</AuthenticatedLayoutContent>\r\n </SidebarProvider>\r\n </LayoutProvider>\r\n </SearchProvider>\r\n )\r\n}\r\n","'use client'\n\nimport { useEffect } from 'react'\r\nimport { useLayout } from '@/context/layout-provider'\r\nimport {\r\n Sidebar,\r\n SidebarContent,\r\n SidebarFooter,\r\n SidebarHeader,\r\n SidebarTrigger,\r\n} from '@/components/ui/sidebar'\r\nimport { sidebarData } from './data/sidebar-data'\r\nimport { NavGroup } from './nav-group'\r\nimport { TeamSwitcher } from './team-switcher'\r\nimport { NavUser } from './nav-user'\r\nimport { useAuthStore } from '@/stores/auth-store'\r\nimport { useNotificationStore } from '@/stores/notification-store'\r\n\r\nexport function AppSidebar() {\r\n const { collapsible } = useLayout()\r\n const currentUser = useAuthStore((state) => state.auth.user)\r\n const { unreadCount, fetchNotifications, subscribeToNotifications, unsubscribe } = useNotificationStore()\r\n\r\n useEffect(() => {\r\n if (currentUser) {\r\n fetchNotifications(currentUser.accountNo)\r\n subscribeToNotifications(currentUser.accountNo)\r\n }\r\n return () => {\r\n unsubscribe()\r\n }\r\n }, [currentUser, fetchNotifications, subscribeToNotifications, unsubscribe])\r\n\r\n // Map sidebarData to inject dynamic unreadCount badge for Notification item\r\n const dynamicSidebarData = {\r\n ...sidebarData,\r\n navGroups: sidebarData.navGroups.map((group) => ({\r\n ...group,\r\n items: group.items.map((item) => {\r\n if (item.title === 'Notification') {\r\n return {\r\n ...item,\r\n badge: unreadCount > 0 ? (unreadCount > 5 ? '5+' : String(unreadCount)) : undefined,\r\n }\r\n }\r\n return item\r\n }),\r\n })),\r\n }\r\n\r\n return (\r\n // Sidebar ko fixed \"sidebar\" variant par lock kiya gaya hai (floating remove).\r\n <Sidebar collapsible={collapsible} variant='sidebar'>\r\n {/* Logo */}\r\n <SidebarHeader className='pb-0'>\r\n <TeamSwitcher teams={dynamicSidebarData.teams} />\r\n </SidebarHeader>\r\n\r\n {/* NEW: Toggle sits below logo */}\r\n {/* ==========================================\r\n Show toggle below logo ONLY when collapsed\r\n========================================== */}\r\n <div className='hidden group-data-[state=collapsed]:flex justify-center py-2'>\r\n <SidebarTrigger\r\n variant='ghost'\r\n className='h-8 w-8'\r\n aria-label='Toggle sidebar'\r\n />\r\n </div>\r\n {/* Navigation */}\r\n <SidebarContent>\r\n {dynamicSidebarData.navGroups.map((props) => (\r\n <NavGroup key={props.title} {...props} />\r\n ))}\r\n </SidebarContent>\r\n\r\n {/* User Profile */}\r\n <SidebarFooter>\r\n <NavUser user={dynamicSidebarData.user} />\r\n </SidebarFooter>\r\n </Sidebar>\r\n )\r\n}\r\n","'use client'\n\nimport { type ReactNode } from 'react'\r\nimport Link from 'next/link'\r\nimport { usePathname } from 'next/navigation'\r\nimport { ChevronRight, X } from 'lucide-react'\r\nimport { useLayout } from '@/context/layout-provider'\r\nimport {\r\n Collapsible,\r\n CollapsibleContent,\r\n CollapsibleTrigger,\r\n} from '@/components/ui/collapsible'\r\nimport {\r\n SidebarGroup,\r\n SidebarGroupLabel,\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n SidebarMenuSub,\r\n SidebarMenuSubButton,\r\n SidebarMenuSubItem,\r\n SidebarTrigger,\r\n useSidebar,\r\n} from '@/components/ui/sidebar'\r\nimport { Button } from '@/components/ui/button'\r\nimport { Badge } from '../ui/badge'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '../ui/dropdown-menu'\r\nimport {\r\n type NavCollapsible,\r\n type NavItem,\r\n type NavLink,\r\n type NavGroup as NavGroupProps,\r\n} from './types'\r\n\r\nimport { cn } from '@/lib/utils'\r\n\r\nexport function NavGroup({ title, items }: NavGroupProps) {\r\n const { state, isMobile, openMobile, setOpenMobile } = useSidebar()\r\n const href = usePathname()\r\n\r\n return (\r\n <SidebarGroup className={cn(title === 'Menu' && 'pt-0')}>\r\n {/* Label and Toggle: Sticky at the top */}\r\n <SidebarGroupLabel\r\n className={cn(\r\n 'flex items-center justify-between',\r\n title === 'Menu' && state !== 'collapsed' && 'sticky top-0 z-20 bg-sidebar py-1.5'\r\n )}\r\n >\r\n {/* Left Side */}\r\n <span>{title}</span>\r\n\r\n {/* Desktop: Toggle on far right */}\r\n {title === 'Menu' && !isMobile && (\r\n <SidebarTrigger\r\n variant='ghost'\r\n className='h-5 w-5'\r\n aria-label='Toggle sidebar'\r\n />\r\n )}\r\n\r\n {/* Mobile: Close button */}\r\n {title === 'Menu' && isMobile && openMobile && (\r\n <Button\r\n type='button'\r\n variant='ghost'\r\n size='icon'\r\n className='size-6 shrink-0'\r\n aria-label='Close sidebar'\r\n onClick={() => setOpenMobile(false)}\r\n >\r\n <X className='size-4' aria-hidden='true' />\r\n </Button>\r\n )}\r\n </SidebarGroupLabel>\r\n\r\n <SidebarMenu>\r\n {items.map((item) => {\r\n const key = `${item.title}-${item.url}`\r\n\r\n if (!item.items)\r\n return <SidebarMenuLink key={key} item={item} href={href} />\r\n\r\n if (item.title === 'Settings' && item.items.length === 0)\r\n return <SidebarMenuSettings key={key} item={item} />\r\n\r\n if (state === 'collapsed' && !isMobile)\r\n return (\r\n <SidebarMenuCollapsedDropdown key={key} item={item} href={href} />\r\n )\r\n\r\n return <SidebarMenuCollapsible key={key} item={item} href={href} />\r\n })}\r\n </SidebarMenu>\r\n </SidebarGroup>\r\n )\r\n}\r\n\r\nfunction NavBadge({ children }: { children: ReactNode }) {\r\n return <Badge className='rounded-full px-1 py-0 text-xs'>{children}</Badge>\r\n}\r\n\r\nfunction SidebarMenuLink({ item, href }: { item: NavLink; href: string }) {\r\n const { setOpenMobile } = useSidebar()\r\n const { setShowInlineNotFound } = useLayout()\r\n\r\n return (\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n asChild\r\n isActive={checkIsActive(href, item)}\r\n tooltip={item.title}\r\n >\r\n <Link\r\n href={item.url}\r\n onClick={() => {\r\n setShowInlineNotFound(false)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n </Link>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction SidebarMenuSettings({ item }: { item: NavCollapsible }) {\r\n const { setOpenMobile } = useSidebar()\r\n const { showInlineNotFound, setShowInlineNotFound } = useLayout()\r\n\r\n return (\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n tooltip={item.title}\r\n isActive={showInlineNotFound}\r\n onClick={() => {\r\n setShowInlineNotFound(true)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction SidebarMenuCollapsible({\r\n item,\r\n href,\r\n}: {\r\n item: NavCollapsible\r\n href: string\r\n}) {\r\n const { setOpenMobile } = useSidebar()\r\n const { setShowInlineNotFound } = useLayout()\r\n return (\r\n <Collapsible\r\n asChild\r\n defaultOpen={checkIsActive(href, item, true)}\r\n className='group/collapsible'\r\n >\r\n <SidebarMenuItem>\r\n <CollapsibleTrigger asChild>\r\n <SidebarMenuButton tooltip={item.title}>\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n <ChevronRight className='ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180' />\r\n </SidebarMenuButton>\r\n </CollapsibleTrigger>\r\n <CollapsibleContent className='CollapsibleContent'>\r\n <SidebarMenuSub>\r\n {item.items.map((subItem) => (\r\n <SidebarMenuSubItem key={subItem.title}>\r\n <SidebarMenuSubButton\r\n asChild\r\n isActive={checkIsActive(href, subItem)}\r\n >\r\n <Link\r\n href={subItem.url}\r\n onClick={() => {\r\n setShowInlineNotFound(false)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {subItem.icon && <subItem.icon />}\r\n <span>{subItem.title}</span>\r\n {subItem.badge && <NavBadge>{subItem.badge}</NavBadge>}\r\n </Link>\r\n </SidebarMenuSubButton>\r\n </SidebarMenuSubItem>\r\n ))}\r\n </SidebarMenuSub>\r\n </CollapsibleContent>\r\n </SidebarMenuItem>\r\n </Collapsible>\r\n )\r\n}\r\n\r\nfunction SidebarMenuCollapsedDropdown({\r\n item,\r\n href,\r\n}: {\r\n item: NavCollapsible\r\n href: string\r\n}) {\r\n return (\r\n <SidebarMenuItem>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <SidebarMenuButton\r\n tooltip={item.title}\r\n isActive={checkIsActive(href, item)}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n <ChevronRight className='ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90' />\r\n </SidebarMenuButton>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent side='right' align='start' sideOffset={4}>\r\n <DropdownMenuLabel>\r\n {item.title} {item.badge ? `(${item.badge})` : ''}\r\n </DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n {item.items.map((sub) => (\r\n <DropdownMenuItem key={`${sub.title}-${sub.url}`} asChild>\r\n <Link\r\n href={sub.url}\r\n className={`${checkIsActive(href, sub) ? 'bg-secondary' : ''}`}\r\n >\r\n {sub.icon && <sub.icon />}\r\n <span className='max-w-52 text-wrap'>{sub.title}</span>\r\n {sub.badge && (\r\n <span className='ms-auto text-xs'>{sub.badge}</span>\r\n )}\r\n </Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction checkIsActive(href: string, item: NavItem, mainNav = false) {\r\n return (\r\n href === item.url || // /endpint?search=param\r\n href.split('?')[0] === item.url || // endpoint\r\n !!item?.items?.filter((i) => i.url === href).length || // if child nav is active\r\n (mainNav &&\r\n href.split('/')[1] !== '' &&\r\n href.split('/')[1] === item?.url?.split('/')[1])\r\n )\r\n}\r\n","'use client'\n\nimport {\r\n ChevronsUpDown,\r\n LogOut,\r\n User,\r\n Bell,\r\n MessageCircle,\r\n CreditCard,\r\n ShoppingBag,\r\n Settings,\r\n Palette,\r\n} from 'lucide-react'\r\nimport Link from 'next/link'\r\nimport useDialogState from '@/hooks/use-dialog-state'\r\nimport { useAuthStore } from '@/stores/auth-store'\r\nimport { useLayout } from '@/context/layout-provider'\r\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\r\nimport { ConfigDrawer } from '@/components/config-drawer'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '@/components/ui/dropdown-menu'\r\nimport {\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n useSidebar,\r\n} from '@/components/ui/sidebar'\r\nimport { SignOutDialog } from '@/components/sign-out-dialog'\r\n\r\ntype NavUserProps = {\r\n user: {\r\n name: string\r\n email: string\r\n avatar: string\r\n }\r\n}\r\n\r\nexport function NavUser({ user: fallbackUser }: NavUserProps) {\r\n const { isMobile } = useSidebar()\r\n const [open, setOpen] = useDialogState()\r\n const { auth } = useAuthStore()\r\n const { setShowInlineNotFound } = useLayout()\r\n\r\n const userName = auth.user?.name || auth.user?.email?.split('@')[0] || fallbackUser.name\r\n const userEmail = auth.user?.email || fallbackUser.email\r\n const userAvatar = auth.user?.picture || fallbackUser.avatar\r\n const userInitials = userName\r\n .split(' ')\r\n .map((n: string) => n[0])\r\n .join('')\r\n .toUpperCase()\r\n .slice(0, 2)\r\n\r\n return (\r\n <>\r\n <SidebarMenu>\r\n <SidebarMenuItem>\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <SidebarMenuButton\r\n size='lg'\r\n tooltip={userName}\r\n className='data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground'\r\n >\r\n <Avatar className='h-8 w-8 rounded-lg'>\r\n <AvatarImage src={userAvatar} alt={userName} />\r\n <AvatarFallback className='rounded-lg'>{userInitials}</AvatarFallback>\r\n </Avatar>\r\n <div className='grid flex-1 text-start text-sm leading-tight'>\r\n <span className='truncate font-semibold'>{userName}</span>\r\n <span className='truncate text-xs text-muted-foreground'>{userEmail}</span>\r\n </div>\r\n <ChevronsUpDown className='ml-auto size-4 shrink-0' />\r\n </SidebarMenuButton>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent\r\n className='w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg'\r\n side={isMobile ? 'bottom' : 'right'}\r\n align='end'\r\n sideOffset={4}\r\n >\r\n <DropdownMenuLabel className='p-0 font-normal'>\r\n <div className='flex items-center gap-2 px-1 py-1.5 text-start text-sm'>\r\n <Avatar className='h-8 w-8 rounded-lg'>\r\n <AvatarImage src={userAvatar} alt={userName} />\r\n <AvatarFallback className='rounded-lg'>{userInitials}</AvatarFallback>\r\n </Avatar>\r\n <div className='grid flex-1 text-start text-sm leading-tight'>\r\n <span className='truncate font-semibold'>{userName}</span>\r\n <span className='truncate text-xs text-muted-foreground'>{userEmail}</span>\r\n </div>\r\n </div>\r\n </DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n\r\n {/* My Profile */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <User className='mr-2 h-4 w-4' />\r\n My Profile\r\n </DropdownMenuItem>\r\n\r\n {/* Notifications */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <Bell className='mr-2 h-4 w-4' />\r\n Notifications\r\n </DropdownMenuItem>\r\n\r\n {/* Help */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <MessageCircle className='mr-2 h-4 w-4' />\r\n Help & Support\r\n </DropdownMenuItem>\r\n\r\n <DropdownMenuSeparator />\r\n\r\n {/* Subscription */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <CreditCard className='mr-2 h-4 w-4' />\r\n Subscriptions\r\n </DropdownMenuItem>\r\n\r\n {/* Buy Apps */}\r\n <DropdownMenuItem asChild>\r\n <Link href='/apps'>\r\n <ShoppingBag className='mr-2 h-4 w-4' />\r\n Buy Apps\r\n </Link>\r\n </DropdownMenuItem>\r\n\r\n {/* Theme Settings */}\r\n <ConfigDrawer\r\n trigger={\r\n <DropdownMenuItem onSelect={(e) => e.preventDefault()}>\r\n <Palette className='mr-2 h-4 w-4' />\r\n Theme Settings\r\n </DropdownMenuItem>\r\n }\r\n />\r\n\r\n {/* Settings */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <Settings className='mr-2 h-4 w-4' />\r\n Settings\r\n </DropdownMenuItem>\r\n\r\n <DropdownMenuSeparator />\r\n\r\n {/* Sign Out */}\r\n <DropdownMenuItem\r\n variant='destructive'\r\n onClick={() => setOpen(true)}\r\n >\r\n <LogOut className='mr-2 h-4 w-4' />\r\n Sign out\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </SidebarMenuItem>\r\n </SidebarMenu>\r\n\r\n <SignOutDialog open={!!open} onOpenChange={setOpen} />\r\n </>\r\n )\r\n}\r\n","export function SkipToMain() {\r\n return (\r\n <a\r\n className={`fixed inset-s-44 z-999 -translate-y-52 bg-primary px-4 py-2 text-sm font-medium whitespace-nowrap text-primary-foreground opacity-95 shadow-sm transition hover:bg-primary/90 focus:translate-y-3 focus:transform focus-visible:ring-1 focus-visible:ring-ring`}\r\n href='#content'\r\n >\r\n Skip to Main\r\n </a>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { useRouter } from 'next/navigation'\r\nimport { cn } from '@/lib/utils'\r\nimport { Button } from '@/components/ui/button'\r\n\r\ntype NotFoundErrorProps = React.HTMLAttributes<HTMLDivElement> & {\r\n embedded?: boolean\r\n onDismiss?: () => void\r\n}\r\n\r\nexport function NotFoundError({\r\n className,\r\n embedded = false,\r\n onDismiss,\r\n}: NotFoundErrorProps) {\r\n const router = useRouter()\r\n\r\n const handleGoBack = () => {\r\n if (onDismiss) {\r\n onDismiss()\r\n return\r\n }\r\n router.back()\r\n }\r\n\r\n const handleGoHome = () => {\r\n if (onDismiss) onDismiss()\r\n router.push('/')\r\n }\r\n return (\r\n <div className={cn(embedded ? 'min-h-96 w-full py-8' : 'h-svh', className)}>\r\n <div className='m-auto flex h-full w-full flex-col items-center justify-center gap-2'>\r\n <h1\r\n className={cn(\r\n 'leading-tight font-bold',\r\n embedded ? 'text-6xl' : 'text-[7rem]'\r\n )}\r\n >\r\n 404\r\n </h1>\r\n <span className='font-medium'>Oops! Page Not Found :-(!</span>\r\n <p className='text-center text-muted-foreground'>\r\n It seems like the page you're looking for <br />\r\n does not exist or might have been removed.\r\n </p>\r\n <div className='mt-6 flex gap-4'>\r\n <Button variant='outline' onClick={handleGoBack}>\r\n Go Back\r\n </Button>\r\n <Button onClick={handleGoHome}>Back to Home</Button>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { useEffect, useState } from 'react'\r\nimport { cn } from '../../lib/utils'\r\nimport { AppLogo } from './app-logo'\r\n\r\ntype HeaderProps = React.HTMLAttributes<HTMLElement> & {\r\n fixed?: boolean\r\n ref?: React.Ref<HTMLElement>\r\n}\r\n\r\nexport function Header({ className, fixed, children, ...props }: HeaderProps) {\r\n const [offset, setOffset] = useState(0)\r\n\r\n useEffect(() => {\r\n const onScroll = () => {\r\n setOffset(document.body.scrollTop || document.documentElement.scrollTop)\r\n }\r\n\r\n // Add scroll listener to the body\r\n document.addEventListener('scroll', onScroll, { passive: true })\r\n\r\n // Clean up the event listener on unmount\r\n return () => document.removeEventListener('scroll', onScroll)\r\n }, [])\r\n\r\n return (\r\n // Page header container: fixed mode me top par sticky behavior deta hai.\r\n <header\r\n className={cn(\r\n 'z-50 h-16 shrink-0',\r\n fixed &&\r\n 'header-fixed peer/header sticky top-0 w-full bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/80',\r\n offset > 10 && fixed ? 'shadow-sm' : 'shadow-none',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n // Header ke andar left-to-right UI controls/content align karne ke liye row layout.\r\n 'relative flex h-full min-w-0 flex-nowrap items-center gap-1.5 overflow-hidden px-2 py-2 sm:gap-3 sm:px-4 md:gap-4',\r\n offset > 10 &&\r\n fixed &&\r\n 'after:absolute after:inset-0 after:-z-10 after:bg-background/20 after:backdrop-blur-lg'\r\n )}\r\n >\r\n {/* Mobile par app logo; desktop par sidebar trigger sidebar header me hai */}\r\n <AppLogo className='shrink-0 md:hidden' />\r\n {children}\r\n </div>\r\n </header>\r\n )\r\n}\r\n","import { cn } from '../../lib/utils'\r\n\r\ntype MainProps = React.HTMLAttributes<HTMLElement> & {\r\n fixed?: boolean\r\n fluid?: boolean\r\n ref?: React.Ref<HTMLElement>\r\n}\r\n\r\nexport function Main({ fixed, className, fluid, ...props }: MainProps) {\r\n return (\r\n <main\r\n data-layout={fixed ? 'fixed' : 'auto'}\r\n className={cn(\r\n 'px-4 py-6',\r\n\r\n // If layout is fixed, make the main container flex and grow\r\n fixed && 'flex grow flex-col min-h-0 overflow-hidden',\r\n\r\n // Standard full width to avoid left-side offset/gap next to sidebar\r\n 'w-full',\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n","'use client'\n\nimport { SearchIcon } from 'lucide-react'\nimport { useSearch } from '../../context/search-provider'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from '../components/ui/sidebar'\n\nexport function SidebarSearch() {\n const { setOpen } = useSearch()\n\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton\n onClick={() => setOpen(true)}\n tooltip='Search (⌘K)'\n className='bg-sidebar-accent/50 hover:bg-sidebar-accent border border-sidebar-border/60 text-muted-foreground hover:text-foreground'\n >\n <SearchIcon className='size-4 shrink-0' />\n <span className='flex-1 text-left text-xs font-normal group-data-[collapsible=icon]:hidden'>\n Search...\n </span>\n <kbd className='pointer-events-none hidden h-4 select-none items-center gap-0.5 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium opacity-100 group-data-[collapsible=icon]:hidden sm:flex'>\n <span className='text-[10px]'>⌘</span>K\n </kbd>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n )\n}\n","import Link from 'next/link'\r\nimport { Menu } from 'lucide-react'\r\nimport { cn } from '../../lib/utils'\r\nimport { Button } from '../components/ui/button'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '../components/ui/dropdown-menu'\r\n\r\ntype TopNavProps = React.HTMLAttributes<HTMLElement> & {\r\n links: {\r\n title: string\r\n href?: string\r\n isActive: boolean\r\n disabled?: boolean\r\n onClick?: () => void\r\n }[]\r\n}\r\n\r\nexport function TopNav({ className, links, ...props }: TopNavProps) {\r\n const renderLink = ({\r\n title,\r\n href,\r\n isActive,\r\n disabled,\r\n onClick,\r\n }: TopNavProps['links'][number]) => {\r\n const className = `text-sm font-medium transition-colors hover:text-primary ${isActive ? '' : 'text-muted-foreground'}`\r\n\r\n if (onClick) {\r\n return (\r\n <button\r\n type='button'\r\n key={title}\r\n onClick={onClick}\r\n disabled={disabled}\r\n className={className}\r\n >\r\n {title}\r\n </button>\r\n )\r\n }\r\n\r\n return (\r\n <Link\r\n key={title}\r\n href={href!}\r\n className={className}\r\n style={disabled ? { pointerEvents: 'none', opacity: 0.5 } : undefined}\r\n >\r\n {title}\r\n </Link>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n size='icon'\r\n variant='outline'\r\n className={cn(\r\n 'hidden size-8 shrink-0 md:inline-flex lg:hidden',\r\n className\r\n )}\r\n >\r\n <Menu />\r\n <span className='sr-only'>Toggle navigation menu</span>\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent side='bottom' align='start'>\r\n {links.map((link) => (\r\n <DropdownMenuItem\r\n key={link.title}\r\n disabled={link.disabled}\r\n onClick={link.onClick}\r\n asChild={!link.onClick}\r\n >\r\n {link.onClick ? (\r\n <span className={!link.isActive ? 'text-muted-foreground' : ''}>\r\n {link.title}\r\n </span>\r\n ) : (\r\n <Link\r\n href={link.href!}\r\n className={!link.isActive ? 'text-muted-foreground' : ''}\r\n style={link.disabled ? { pointerEvents: 'none', opacity: 0.5 } : undefined}\r\n >\r\n {link.title}\r\n </Link>\r\n )}\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n\r\n <nav\r\n className={cn(\r\n 'hidden items-center space-x-4 lg:flex lg:space-x-4 xl:space-x-6',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {links.map((link) => renderLink(link))}\r\n </nav>\r\n </>\r\n )\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["DatePicker","Header","Sonner","Tooltip","sidebarData","AccordionPrimitive","import_radix_ui","import_jsx_runtime","AlertDialogPrimitive","import_jsx_runtime","import_radix_ui","import_jsx_runtime","AspectRatioPrimitive","import_radix_ui","import_jsx_runtime","AvatarPrimitive","import_class_variance_authority","import_radix_ui","import_jsx_runtime","import_lucide_react","import_radix_ui","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","import_lucide_react","import_jsx_runtime","className","props","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","useEmblaCarousel","api","React","import_jsx_runtime","config","import_jsx_runtime","import_lucide_react","import_radix_ui","import_jsx_runtime","CheckboxPrimitive","import_radix_ui","import_jsx_runtime","CollapsiblePrimitive","import_lucide_react","import_jsx_runtime","CommandPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","ContextMenuPrimitive","import_lucide_react","import_jsx_runtime","CalendarIcon","import_lucide_react","import_radix_ui","import_jsx_runtime","DialogPrimitive","import_jsx_runtime","DrawerPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","DropdownMenuPrimitive","import_class_variance_authority","import_jsx_runtime","import_react","import_class_variance_authority","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","import_radix_ui","import_jsx_runtime","HoverCardPrimitive","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","import_jsx_runtime","import_radix_ui","import_jsx_runtime","LabelPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","MenubarPrimitive","import_class_variance_authority","import_lucide_react","import_radix_ui","import_jsx_runtime","NavigationMenuPrimitive","import_lucide_react","import_jsx_runtime","import_radix_ui","import_jsx_runtime","PopoverPrimitive","import_radix_ui","import_jsx_runtime","ProgressPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","RadioGroupPrimitive","import_lucide_react","import_jsx_runtime","import_radix_ui","import_jsx_runtime","ScrollAreaPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","SelectPrimitive","import_radix_ui","import_jsx_runtime","SeparatorPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","SheetPrimitive","React","import_class_variance_authority","import_lucide_react","import_radix_ui","React","import_jsx_runtime","open","Tooltip","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","SliderPrimitive","import_lucide_react","import_jsx_runtime","Sonner","import_lucide_react","import_jsx_runtime","import_radix_ui","import_jsx_runtime","SwitchPrimitive","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","TabsPrimitive","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","TogglePrimitive","React","import_radix_ui","import_jsx_runtime","ToggleGroupPrimitive","import_radix_ui","import_jsx_runtime","TooltipPrimitive","Tooltip","import_jsx_runtime","import_lucide_react","import_jsx_runtime","data","import_class_variance_authority","import_jsx_runtime","import_lucide_react","import_jsx_runtime","SearchIcon","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","nextAuthSignOut","import_react","import_lucide_react","import_react","import_jsx_runtime","useTheme","import_jsx_runtime","useTheme","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","useTheme","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","Tooltip","import_lucide_react","import_react","import_react","import_lucide_react","import_lucide_react","import_jsx_runtime","useTheme","React","i","import_jsx_runtime","open","import_jsx_runtime","import_jsx_runtime","import_date_fns","import_lucide_react","import_jsx_runtime","DatePicker","CalendarIcon","import_react","import_sonner","import_jsx_runtime","QRCode","React","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","ReactMarkdown","remarkGfm","import_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_date_fns","import_jsx_runtime","React","ImageIcon","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","ImageIcon","import_react","import_lucide_react","import_lucide_react","import_sonner","import_jsx_runtime","import_jsx_runtime","TableIcon","import_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_navigation","import_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Search","import_zustand","import_ssr","clientSingleton","createClient","createClient","data","import_jsx_runtime","Search","import_lucide_react","sidebarData","import_jsx_runtime","sidebarData","import_react","import_jsx_runtime","import_navigation","import_lucide_react","import_jsx_runtime","Link","import_jsx_runtime","import_lucide_react","import_react","initialState","import_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","useTheme","RadioGroupItem","Radio","import_jsx_runtime","import_jsx_runtime","sidebarData","import_link","import_lucide_react","import_jsx_runtime","Link","import_react","import_navigation","import_react","import_link","import_navigation","import_lucide_react","import_jsx_runtime","NavGroup","SidebarMenuLink","SidebarMenuSettings","SidebarMenuCollapsedDropdown","SidebarMenuCollapsible","NavBadge","checkIsActive","Link","import_lucide_react","import_link","import_jsx_runtime","NavUser","Link","import_jsx_runtime","AppSidebar","NavGroup","NavUser","import_jsx_runtime","import_navigation","import_jsx_runtime","import_jsx_runtime","AppSidebar","import_react","import_jsx_runtime","Header","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_link","import_lucide_react","import_jsx_runtime","className","Link"]}
|
|
1
|
+
{"version":3,"sources":["../src/design-system/index.ts","../src/design-system/tokens/index.ts","../src/design-system/components/ui/accordion.tsx","../src/lib/utils.ts","../src/design-system/components/ui/alert-dialog.tsx","../src/design-system/components/ui/alert.tsx","../src/design-system/components/ui/aspect-ratio.tsx","../src/design-system/components/ui/avatar.tsx","../src/design-system/components/ui/badge.tsx","../src/design-system/components/ui/breadcrumb.tsx","../src/design-system/components/ui/button.tsx","../src/design-system/components/ui/button-group.tsx","../src/design-system/components/ui/calendar.tsx","../src/design-system/components/ui/card.tsx","../src/design-system/components/ui/carousel.tsx","../src/design-system/components/ui/chart.tsx","../src/design-system/components/ui/chart-demos.tsx","../src/design-system/components/ui/checkbox.tsx","../src/design-system/components/ui/collapsible.tsx","../src/design-system/components/ui/command.tsx","../src/design-system/components/ui/context-menu.tsx","../src/design-system/components/ui/date-picker.tsx","../src/design-system/components/ui/dialog.tsx","../src/design-system/components/ui/drawer.tsx","../src/design-system/components/ui/dropdown-menu.tsx","../src/design-system/components/ui/empty.tsx","../src/design-system/components/ui/field.tsx","../src/design-system/components/ui/form.tsx","../src/design-system/components/ui/hover-card.tsx","../src/design-system/components/ui/input.tsx","../src/design-system/components/ui/input-group.tsx","../src/design-system/components/ui/input-otp.tsx","../src/design-system/components/ui/item.tsx","../src/design-system/components/ui/kbd.tsx","../src/design-system/components/ui/label.tsx","../src/design-system/components/ui/menubar.tsx","../src/design-system/components/ui/navigation-menu.tsx","../src/design-system/components/ui/pagination.tsx","../src/design-system/components/ui/popover.tsx","../src/design-system/components/ui/progress.tsx","../src/design-system/components/ui/radio-group.tsx","../src/design-system/components/ui/resizable.tsx","../src/design-system/components/ui/scroll-area.tsx","../src/design-system/components/ui/select.tsx","../src/design-system/components/ui/separator.tsx","../src/design-system/components/ui/sheet.tsx","../src/design-system/components/ui/sidebar.tsx","../src/hooks/use-mobile.tsx","../src/design-system/components/ui/skeleton.tsx","../src/design-system/components/ui/slider.tsx","../src/design-system/components/ui/sonner.tsx","../src/design-system/components/ui/spinner.tsx","../src/design-system/components/ui/switch.tsx","../src/design-system/components/ui/table.tsx","../src/design-system/components/ui/tabs.tsx","../src/design-system/components/ui/textarea.tsx","../src/design-system/components/ui/toggle.tsx","../src/design-system/components/ui/toggle-group.tsx","../src/design-system/components/ui/tooltip.tsx","../src/design-system/components/business/page-header.tsx","../src/design-system/components/business/data-table.tsx","../src/design-system/components/business/status-badge.tsx","../src/design-system/components/business/filter-bar.tsx","../src/design-system/components/business/form-section.tsx","../src/design-system/components/business/metric-card.tsx","../src/design-system/components/business/confirm-dialog.tsx","../src/design-system/components/business/password-input.tsx","../src/lib/client.ts","../src/stores/auth-store.ts","../src/lib/cookies.ts","../src/design-system/components/business/sign-out-dialog.tsx","../src/design-system/components/business/theme-switch.tsx","../src/context/theme-provider.tsx","../src/design-system/components/business/theme-selector.tsx","../src/context/color-theme-provider.tsx","../src/design-system/components/business/select-dropdown.tsx","../src/design-system/components/business/long-text.tsx","../src/design-system/components/business/search.tsx","../src/context/search-provider.tsx","../src/components/command-menu.tsx","../src/components/layout/data/sidebar-data.ts","../src/design-system/components/business/stats-01.tsx","../src/design-system/components/business/date-picker.tsx","../src/design-system/components/business/qr-code-display.tsx","../src/design-system/components/chat/chat-bubble.tsx","../src/design-system/components/chat/chat-input.tsx","../src/design-system/components/chat/chat-header.tsx","../src/design-system/components/chat/typing-indicator.tsx","../src/design-system/components/chat/chat-empty-state.tsx","../src/design-system/components/chat/chat-card-item.tsx","../src/design-system/components/chat/chat-message-list.tsx","../src/design-system/components/chat/chat-sidebar.tsx","../src/design-system/components/chat/contact-manager.tsx","../src/design-system/components/chat/group-manager.tsx","../src/design-system/components/ai-chat/ai-model-selector.tsx","../src/design-system/components/ai-chat/ai-tool-selector.tsx","../src/design-system/components/ai-chat/ai-chat-input.tsx","../src/design-system/components/ai-chat/ai-message-bubble.tsx","../src/design-system/components/ai-chat/ai-message-list.tsx","../src/design-system/components/ai-chat/ai-prompt-suggestions.tsx","../src/design-system/components/ai-chat/ai-chat-header.tsx","../src/design-system/components/files/file-card-item.tsx","../src/design-system/components/files/folder-tree-item.tsx","../src/design-system/components/files/storage-stat-card.tsx","../src/design-system/components/files/user-file-cards-view.tsx","../src/design-system/components/files/file-upload-form.tsx","../src/design-system/templates/list-template.tsx","../src/design-system/templates/detail-template.tsx","../src/design-system/templates/form-template.tsx","../src/design-system/templates/wizard-template.tsx","../src/design-system/templates/dashboard-template.tsx","../src/design-system/templates/workspace-template.tsx","../src/design-system/templates/app-header.tsx","../src/components/layout/header.tsx","../src/components/search.tsx","../src/stores/notification-store.ts","../src/lib/supabase/client.ts","../src/design-system/templates/data/sidebar-data.ts","../src/design-system/templates/app-logo.tsx","../src/context/layout-provider.tsx","../src/design-system/templates/nav-group.tsx","../src/design-system/templates/team-switcher.tsx","../src/design-system/templates/nav-user.tsx","../src/hooks/use-dialog-state.tsx","../src/components/config-drawer.tsx","../src/assets/custom/icon-theme-dark.tsx","../src/assets/custom/icon-theme-light.tsx","../src/assets/custom/icon-theme-system.tsx","../src/design-system/templates/app-sidebar.tsx","../src/design-system/templates/app-title.tsx","../src/design-system/templates/authenticated-layout.tsx","../src/components/layout/app-sidebar.tsx","../src/components/layout/nav-group.tsx","../src/components/layout/nav-user.tsx","../src/components/skip-to-main.tsx","../src/features/errors/not-found-error.tsx","../src/design-system/templates/header.tsx","../src/design-system/templates/main.tsx","../src/design-system/templates/sidebar-search.tsx","../src/design-system/templates/top-nav.tsx"],"sourcesContent":["/**\r\n * Amoga Design System — Central Barrel Export\r\n *\r\n * Single source of truth for all reusable tokens, core UI primitives,\r\n * business components, and page templates.\r\n */\r\n\r\n// ── Design Tokens ────────────────────────────────────────────────────────────\r\nexport * from './tokens'\r\n\r\n// ── Core UI Components (shadcn/ui primitives) ────────────────────────────────\r\nexport * from './components/ui/accordion'\r\nexport * from './components/ui/alert-dialog'\r\nexport * from './components/ui/alert'\r\nexport * from './components/ui/aspect-ratio'\r\nexport * from './components/ui/avatar'\r\nexport * from './components/ui/badge'\r\nexport * from './components/ui/breadcrumb'\r\nexport * from './components/ui/button'\r\nexport * from './components/ui/button-group'\r\nexport * from './components/ui/calendar'\r\nexport * from './components/ui/card'\r\nexport * from './components/ui/carousel'\r\nexport * from './components/ui/chart'\r\nexport * from './components/ui/chart-demos'\r\n\r\nexport * from './components/ui/checkbox'\r\nexport * from './components/ui/collapsible'\r\nexport * from './components/ui/command'\r\nexport * from './components/ui/context-menu'\r\nexport * from './components/ui/date-picker'\r\nexport * from './components/ui/dialog'\r\nexport * from './components/ui/drawer'\r\nexport * from './components/ui/dropdown-menu'\r\nexport * from './components/ui/empty'\r\nexport * from './components/ui/field'\r\nexport * from './components/ui/form'\r\nexport * from './components/ui/hover-card'\r\nexport * from './components/ui/input'\r\nexport * from './components/ui/input-group'\r\nexport * from './components/ui/input-otp'\r\nexport * from './components/ui/item'\r\nexport * from './components/ui/kbd'\r\nexport * from './components/ui/label'\r\nexport * from './components/ui/menubar'\r\nexport * from './components/ui/navigation-menu'\r\nexport * from './components/ui/pagination'\r\nexport * from './components/ui/popover'\r\nexport * from './components/ui/progress'\r\nexport * from './components/ui/radio-group'\r\nexport * from './components/ui/resizable'\r\nexport * from './components/ui/scroll-area'\r\nexport * from './components/ui/select'\r\nexport * from './components/ui/separator'\r\nexport * from './components/ui/sheet'\r\nexport * from './components/ui/sidebar'\r\nexport * from './components/ui/skeleton'\r\nexport * from './components/ui/slider'\r\nexport * from './components/ui/sonner'\r\nexport * from './components/ui/spinner'\r\nexport * from './components/ui/switch'\r\nexport * from './components/ui/table'\r\nexport * from './components/ui/tabs'\r\nexport * from './components/ui/textarea'\r\nexport * from './components/ui/toggle'\r\nexport * from './components/ui/toggle-group'\r\nexport * from './components/ui/tooltip'\r\n\r\n\r\n// ── Reusable Business Components ─────────────────────────────────────────────\r\nexport { PageHeader, type PageHeaderProps } from './components/business/page-header'\r\nexport { DataTable, type DataTableProps, type ColumnDef } from './components/business/data-table'\r\nexport { StatusBadge, statusBadgeVariants, type StatusBadgeProps } from './components/business/status-badge'\r\nexport { FilterBar, type FilterBarProps, type ActiveFilter } from './components/business/filter-bar'\r\nexport { FormSection, type FormSectionProps } from './components/business/form-section'\r\nexport { MetricCard, type MetricCardProps } from './components/business/metric-card'\r\nexport { ConfirmDialog } from './components/business/confirm-dialog'\r\nexport { PasswordInput } from './components/business/password-input'\r\nexport { SignOutDialog } from './components/business/sign-out-dialog'\r\nexport { ThemeSwitch } from './components/business/theme-switch'\r\nexport { ThemeSelector } from './components/business/theme-selector'\r\nexport { SelectDropdown } from './components/business/select-dropdown'\r\nexport { LongText } from './components/business/long-text'\r\nexport { Search } from './components/business/search'\r\nexport { Stats01 } from './components/business/stats-01'\r\nexport { DatePicker } from './components/business/date-picker'\r\nexport { QrCodeDisplay, QRCodeDisplay, downloadQrCode, type QrCodeDisplayProps, type QRCodeDisplayProps } from './components/business/qr-code-display'\r\n\r\n\r\n\r\n// ── Chat & Realtime Components ──────────────────────────────────────────────\r\nexport * from './components/chat'\r\n\r\n// ── AI Assistant & Multi-Model Chat ─────────────────────────────────────────\r\nexport * from './components/ai-chat'\r\n\r\n// ── Files & Document Management ─────────────────────────────────────────────\r\nexport * from './components/files'\r\n\r\n\r\n// ── Reusable Page Templates ──────────────────────────────────────────────────\r\nexport { ListTemplate, type ListTemplateProps } from './templates/list-template'\r\nexport { DetailTemplate, type DetailTemplateProps } from './templates/detail-template'\r\nexport { FormTemplate, type FormTemplateProps } from './templates/form-template'\r\nexport { WizardTemplate, type WizardTemplateProps, type WizardStep } from './templates/wizard-template'\r\nexport { DashboardTemplate, type DashboardTemplateProps } from './templates/dashboard-template'\r\nexport { WorkspaceTemplate, type WorkspaceTemplateProps } from './templates/workspace-template'\r\nexport { AppHeader } from './templates/app-header'\r\nexport { AppLogo } from './templates/app-logo'\r\nexport { AppSidebar } from './templates/app-sidebar'\r\nexport { AppTitle } from './templates/app-title'\r\nexport { AuthenticatedLayout } from './templates/authenticated-layout'\r\nexport { Header } from './templates/header'\r\nexport { Main } from './templates/main'\r\nexport { NavGroup } from './templates/nav-group'\r\nexport { NavUser } from './templates/nav-user'\r\nexport { SidebarSearch } from './templates/sidebar-search'\r\nexport { TeamSwitcher } from './templates/team-switcher'\r\nexport { TopNav } from './templates/top-nav'\r\nexport { sidebarData } from './templates/data/sidebar-data'\r\nexport type { SidebarData, NavItem, NavGroup as NavGroupType } from './templates/types'\r\n\r\n","/**\n * Amoga Design System — Tokens Module\n *\n * Exposes design token constants and metadata for TypeScript usage.\n */\n\nexport const SEMANTIC_TOKENS = {\n background: 'var(--background)',\n foreground: 'var(--foreground)',\n card: 'var(--card)',\n cardForeground: 'var(--card-foreground)',\n popover: 'var(--popover)',\n popoverForeground: 'var(--popover-foreground)',\n primary: 'var(--primary)',\n primaryForeground: 'var(--primary-foreground)',\n secondary: 'var(--secondary)',\n secondaryForeground: 'var(--secondary-foreground)',\n muted: 'var(--muted)',\n mutedForeground: 'var(--muted-foreground)',\n accent: 'var(--accent)',\n accentForeground: 'var(--accent-foreground)',\n destructive: 'var(--destructive)',\n destructiveForeground: 'var(--destructive-foreground)',\n success: 'var(--success)',\n successForeground: 'var(--success-foreground)',\n warning: 'var(--warning)',\n warningForeground: 'var(--warning-foreground)',\n info: 'var(--info)',\n infoForeground: 'var(--info-foreground)',\n border: 'var(--border)',\n input: 'var(--input)',\n ring: 'var(--ring)',\n radius: 'var(--radius)',\n radiusSm: 'var(--radius-sm)',\n radiusMd: 'var(--radius-md)',\n radiusLg: 'var(--radius-lg)',\n radiusXl: 'var(--radius-xl)',\n} as const\n\nexport const CHART_TOKENS = {\n chart1: 'var(--chart-1)',\n chart2: 'var(--chart-2)',\n chart3: 'var(--chart-3)',\n chart4: 'var(--chart-4)',\n chart5: 'var(--chart-5)',\n} as const\n\nexport const SIDEBAR_TOKENS = {\n sidebar: 'var(--sidebar)',\n sidebarForeground: 'var(--sidebar-foreground)',\n sidebarPrimary: 'var(--sidebar-primary)',\n sidebarPrimaryForeground: 'var(--sidebar-primary-foreground)',\n sidebarAccent: 'var(--sidebar-accent)',\n sidebarAccentForeground: 'var(--sidebar-accent-foreground)',\n sidebarBorder: 'var(--sidebar-border)',\n sidebarRing: 'var(--sidebar-ring)',\n} as const\n","import * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Accordion({\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\r\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\r\n}\r\n\r\nfunction AccordionItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\r\n return (\r\n <AccordionPrimitive.Item\r\n data-slot=\"accordion-item\"\r\n className={cn(\"border-b last:border-b-0\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AccordionTrigger({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\r\n return (\r\n <AccordionPrimitive.Header className=\"flex\">\r\n <AccordionPrimitive.Trigger\r\n data-slot=\"accordion-trigger\"\r\n className={cn(\r\n \"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronDownIcon className=\"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200\" />\r\n </AccordionPrimitive.Trigger>\r\n </AccordionPrimitive.Header>\r\n )\r\n}\r\n\r\nfunction AccordionContent({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\r\n return (\r\n <AccordionPrimitive.Content\r\n data-slot=\"accordion-content\"\r\n className=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\r\n {...props}\r\n >\r\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\r\n </AccordionPrimitive.Content>\r\n )\r\n}\r\n\r\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\r\n","import { type ClassValue, clsx } from 'clsx'\r\nimport { twMerge } from 'tailwind-merge'\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n\r\nexport function sleep(ms: number = 1000) {\r\n return new Promise((resolve) => setTimeout(resolve, ms))\r\n}\r\n\r\n/** Normalize post-login redirect to an in-app path for TanStack Router. */\r\nexport function getRedirectPath(redirectTo?: string): string {\r\n if (!redirectTo) return '/'\r\n\r\n try {\r\n if (redirectTo.startsWith('http://') || redirectTo.startsWith('https://')) {\r\n const url = new URL(redirectTo)\r\n return `${url.pathname}${url.search}${url.hash}` || '/'\r\n }\r\n } catch {\r\n // Fall through to treat redirectTo as a relative path.\r\n }\r\n\r\n return redirectTo.startsWith('/') ? redirectTo : `/${redirectTo}`\r\n}\r\n\r\n/**\r\n * Generates page numbers for pagination with ellipsis\r\n * @param currentPage - Current page number (1-based)\r\n * @param totalPages - Total number of pages\r\n * @returns Array of page numbers and ellipsis strings\r\n *\r\n * Examples:\r\n * - Small dataset (≤5 pages): [1, 2, 3, 4, 5]\r\n * - Near beginning: [1, 2, 3, 4, '...', 10]\r\n * - In middle: [1, '...', 4, 5, 6, '...', 10]\r\n * - Near end: [1, '...', 7, 8, 9, 10]\r\n */\r\nexport function getPageNumbers(currentPage: number, totalPages: number) {\r\n const maxVisiblePages = 5 // Maximum number of page buttons to show\r\n const rangeWithDots = []\r\n\r\n if (totalPages <= maxVisiblePages) {\r\n // If total pages is 5 or less, show all pages\r\n for (let i = 1; i <= totalPages; i++) {\r\n rangeWithDots.push(i)\r\n }\r\n } else {\r\n // Always show first page\r\n rangeWithDots.push(1)\r\n\r\n if (currentPage <= 3) {\r\n // Near the beginning: [1] [2] [3] [4] ... [10]\r\n for (let i = 2; i <= 4; i++) {\r\n rangeWithDots.push(i)\r\n }\r\n rangeWithDots.push('...', totalPages)\r\n } else if (currentPage >= totalPages - 2) {\r\n // Near the end: [1] ... [7] [8] [9] [10]\r\n rangeWithDots.push('...')\r\n for (let i = totalPages - 3; i <= totalPages; i++) {\r\n rangeWithDots.push(i)\r\n }\r\n } else {\r\n // In the middle: [1] ... [4] [5] [6] ... [10]\r\n rangeWithDots.push('...')\r\n for (let i = currentPage - 1; i <= currentPage + 1; i++) {\r\n rangeWithDots.push(i)\r\n }\r\n rangeWithDots.push('...', totalPages)\r\n }\r\n }\r\n\r\n return rangeWithDots\r\n}\r\n\r\n/**\r\n * Initials from a display name: first character of the first word + first\r\n * character of the last word. One word only: first two characters. Empty: `?`.\r\n */\r\nexport function getDisplayNameInitials(displayName: string): string {\r\n const parts = displayName.trim().split(/\\s+/).filter(Boolean)\r\n if (parts.length === 0) return '?'\r\n if (parts.length === 1) {\r\n return parts[0].slice(0, 2).toUpperCase()\r\n }\r\n const first = parts[0][0] ?? ''\r\n const last = parts[parts.length - 1]?.[0] ?? ''\r\n return (first + last).toUpperCase()\r\n}\r\n","import * as React from \"react\"\r\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button } from \"@/components/ui/button\"\r\n\r\nfunction AlertDialog({\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\r\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\r\n}\r\n\r\nfunction AlertDialogTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\r\n return (\r\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\r\n )\r\n}\r\n\r\nfunction AlertDialogPortal({\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\r\n return (\r\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\r\n )\r\n}\r\n\r\nfunction AlertDialogOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\r\n return (\r\n <AlertDialogPrimitive.Overlay\r\n data-slot=\"alert-dialog-overlay\"\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogContent({\r\n className,\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\r\n size?: \"default\" | \"sm\"\r\n}) {\r\n return (\r\n <AlertDialogPortal>\r\n <AlertDialogOverlay />\r\n <AlertDialogPrimitive.Content\r\n data-slot=\"alert-dialog-content\"\r\n data-size={size}\r\n className={cn(\r\n \"group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </AlertDialogPortal>\r\n )\r\n}\r\n\r\nfunction AlertDialogHeader({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-header\"\r\n className={cn(\r\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogFooter({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-footer\"\r\n className={cn(\r\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\r\n return (\r\n <AlertDialogPrimitive.Title\r\n data-slot=\"alert-dialog-title\"\r\n className={cn(\r\n \"text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\r\n return (\r\n <AlertDialogPrimitive.Description\r\n data-slot=\"alert-dialog-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogMedia({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-dialog-media\"\r\n className={cn(\r\n \"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDialogAction({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\r\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\r\n return (\r\n <Button variant={variant} size={size} asChild>\r\n <AlertDialogPrimitive.Action\r\n data-slot=\"alert-dialog-action\"\r\n className={cn(className)}\r\n {...props}\r\n />\r\n </Button>\r\n )\r\n}\r\n\r\nfunction AlertDialogCancel({\r\n className,\r\n variant = \"outline\",\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\r\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\r\n return (\r\n <Button variant={variant} size={size} asChild>\r\n <AlertDialogPrimitive.Cancel\r\n data-slot=\"alert-dialog-cancel\"\r\n className={cn(className)}\r\n {...props}\r\n />\r\n </Button>\r\n )\r\n}\r\n\r\nexport {\r\n AlertDialog,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogMedia,\r\n AlertDialogOverlay,\r\n AlertDialogPortal,\r\n AlertDialogTitle,\r\n AlertDialogTrigger,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst alertVariants = cva(\r\n \"relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-card text-card-foreground\",\r\n destructive:\r\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Alert({\r\n className,\r\n variant,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\r\n return (\r\n <div\r\n data-slot=\"alert\"\r\n role=\"alert\"\r\n className={cn(alertVariants({ variant }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-title\"\r\n className={cn(\r\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-description\"\r\n className={cn(\r\n \"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Alert, AlertTitle, AlertDescription }\r\n","\"use client\"\r\n\r\nimport { AspectRatio as AspectRatioPrimitive } from \"radix-ui\"\r\n\r\nfunction AspectRatio({\r\n ...props\r\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\r\n return <AspectRatioPrimitive.Root data-slot=\"aspect-ratio\" {...props} />\r\n}\r\n\r\nexport { AspectRatio }\r\n","import * as React from \"react\"\r\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Avatar({\r\n className,\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\r\n size?: \"default\" | \"sm\" | \"lg\"\r\n}) {\r\n return (\r\n <AvatarPrimitive.Root\r\n data-slot=\"avatar\"\r\n data-size={size}\r\n className={cn(\r\n \"group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarImage({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\r\n return (\r\n <AvatarPrimitive.Image\r\n data-slot=\"avatar-image\"\r\n className={cn(\"aspect-square size-full\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarFallback({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\r\n return (\r\n <AvatarPrimitive.Fallback\r\n data-slot=\"avatar-fallback\"\r\n className={cn(\r\n \"flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"avatar-badge\"\r\n className={cn(\r\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none\",\r\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\r\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\r\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"avatar-group\"\r\n className={cn(\r\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarGroupCount({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"avatar-group-count\"\r\n className={cn(\r\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Avatar,\r\n AvatarImage,\r\n AvatarFallback,\r\n AvatarBadge,\r\n AvatarGroup,\r\n AvatarGroupCount,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst badgeVariants = cva(\r\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\r\n destructive:\r\n \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\r\n outline:\r\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\r\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\r\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Badge({\r\n className,\r\n variant = \"default\",\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"span\"> &\r\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\r\n const Comp = asChild ? Slot.Root : \"span\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"badge\"\r\n data-variant={variant}\r\n className={cn(badgeVariants({ variant }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Badge, badgeVariants }\r\n","import * as React from \"react\"\r\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\r\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\r\n}\r\n\r\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\r\n return (\r\n <ol\r\n data-slot=\"breadcrumb-list\"\r\n className={cn(\r\n \"flex flex-wrap items-center gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\r\n return (\r\n <li\r\n data-slot=\"breadcrumb-item\"\r\n className={cn(\"inline-flex items-center gap-1.5\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction BreadcrumbLink({\r\n asChild,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"a\"> & {\r\n asChild?: boolean\r\n}) {\r\n const Comp = asChild ? Slot.Root : \"a\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"breadcrumb-link\"\r\n className={cn(\"transition-colors hover:text-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"breadcrumb-page\"\r\n role=\"link\"\r\n aria-disabled=\"true\"\r\n aria-current=\"page\"\r\n className={cn(\"font-normal text-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction BreadcrumbSeparator({\r\n children,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"li\">) {\r\n return (\r\n <li\r\n data-slot=\"breadcrumb-separator\"\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n className={cn(\"[&>svg]:size-3.5\", className)}\r\n {...props}\r\n >\r\n {children ?? <ChevronRight />}\r\n </li>\r\n )\r\n}\r\n\r\nfunction BreadcrumbEllipsis({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"breadcrumb-ellipsis\"\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n className={cn(\"flex size-9 items-center justify-center\", className)}\r\n {...props}\r\n >\r\n <MoreHorizontal className=\"size-4\" />\r\n <span className=\"sr-only\">More</span>\r\n </span>\r\n )\r\n}\r\n\r\nexport {\r\n Breadcrumb,\r\n BreadcrumbList,\r\n BreadcrumbItem,\r\n BreadcrumbLink,\r\n BreadcrumbPage,\r\n BreadcrumbSeparator,\r\n BreadcrumbEllipsis,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\r\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\r\n \"icon-sm\": \"size-8\",\r\n \"icon-lg\": \"size-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? Slot.Root : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n data-variant={variant}\r\n data-size={size}\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Separator } from \"@/components/ui/separator\"\r\n\r\nconst buttonGroupVariants = cva(\r\n \"flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\r\n {\r\n variants: {\r\n orientation: {\r\n horizontal:\r\n \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\",\r\n vertical:\r\n \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\r\n },\r\n },\r\n defaultVariants: {\r\n orientation: \"horizontal\",\r\n },\r\n }\r\n)\r\n\r\nfunction ButtonGroup({\r\n className,\r\n orientation,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\r\n return (\r\n <div\r\n role=\"group\"\r\n data-slot=\"button-group\"\r\n data-orientation={orientation}\r\n className={cn(buttonGroupVariants({ orientation }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ButtonGroupText({\r\n className,\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n asChild?: boolean\r\n}) {\r\n const Comp = asChild ? Slot.Root : \"div\"\r\n\r\n return (\r\n <Comp\r\n className={cn(\r\n \"flex items-center gap-2 rounded-md border bg-muted px-4 text-sm font-medium shadow-xs [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ButtonGroupSeparator({\r\n className,\r\n orientation = \"vertical\",\r\n ...props\r\n}: React.ComponentProps<typeof Separator>) {\r\n return (\r\n <Separator\r\n data-slot=\"button-group-separator\"\r\n orientation={orientation}\r\n className={cn(\r\n \"relative m-0! self-stretch bg-input data-[orientation=vertical]:h-auto\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n ButtonGroup,\r\n ButtonGroupSeparator,\r\n ButtonGroupText,\r\n buttonGroupVariants,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport {\r\n ChevronDownIcon,\r\n ChevronLeftIcon,\r\n ChevronRightIcon,\r\n} from \"lucide-react\"\r\nimport {\r\n DayPicker,\r\n getDefaultClassNames,\r\n type DayButton,\r\n} from \"react-day-picker\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button, buttonVariants } from \"@/components/ui/button\"\r\n\r\nfunction Calendar({\r\n className,\r\n classNames,\r\n showOutsideDays = true,\r\n captionLayout = \"label\",\r\n buttonVariant = \"ghost\",\r\n formatters,\r\n components,\r\n ...props\r\n}: React.ComponentProps<typeof DayPicker> & {\r\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\r\n}) {\r\n const defaultClassNames = getDefaultClassNames()\r\n\r\n return (\r\n <DayPicker\r\n showOutsideDays={showOutsideDays}\r\n className={cn(\r\n \"group/calendar bg-background p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\r\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\r\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\r\n className\r\n )}\r\n captionLayout={captionLayout}\r\n formatters={{\r\n formatMonthDropdown: (date) =>\r\n date.toLocaleString(\"default\", { month: \"short\" }),\r\n ...formatters,\r\n }}\r\n classNames={{\r\n root: cn(\"w-fit\", defaultClassNames.root),\r\n months: cn(\r\n \"relative flex flex-col gap-4 md:flex-row\",\r\n defaultClassNames.months\r\n ),\r\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\r\n nav: cn(\r\n \"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\r\n defaultClassNames.nav\r\n ),\r\n button_previous: cn(\r\n buttonVariants({ variant: buttonVariant }),\r\n \"size-(--cell-size) p-0 select-none aria-disabled:opacity-50\",\r\n defaultClassNames.button_previous\r\n ),\r\n button_next: cn(\r\n buttonVariants({ variant: buttonVariant }),\r\n \"size-(--cell-size) p-0 select-none aria-disabled:opacity-50\",\r\n defaultClassNames.button_next\r\n ),\r\n month_caption: cn(\r\n \"flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)\",\r\n defaultClassNames.month_caption\r\n ),\r\n dropdowns: cn(\r\n \"flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium\",\r\n defaultClassNames.dropdowns\r\n ),\r\n dropdown_root: cn(\r\n \"relative rounded-md border border-input shadow-xs has-focus:border-ring has-focus:ring-[3px] has-focus:ring-ring/50\",\r\n defaultClassNames.dropdown_root\r\n ),\r\n dropdown: cn(\r\n \"absolute inset-0 bg-popover opacity-0\",\r\n defaultClassNames.dropdown\r\n ),\r\n caption_label: cn(\r\n \"font-medium select-none\",\r\n captionLayout === \"label\"\r\n ? \"text-sm\"\r\n : \"flex h-8 items-center gap-1 rounded-md pr-1 pl-2 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground\",\r\n defaultClassNames.caption_label\r\n ),\r\n month_grid: cn(\"w-full border-collapse\", defaultClassNames.month_grid),\r\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\r\n weekday: cn(\r\n \"flex-1 rounded-md text-[0.8rem] font-normal text-muted-foreground select-none\",\r\n defaultClassNames.weekday\r\n ),\r\n week: cn(\"mt-2 flex w-full\", defaultClassNames.week),\r\n week_number_header: cn(\r\n \"w-(--cell-size) select-none\",\r\n defaultClassNames.week_number_header\r\n ),\r\n week_number: cn(\r\n \"text-[0.8rem] text-muted-foreground select-none\",\r\n defaultClassNames.week_number\r\n ),\r\n day: cn(\r\n \"group/day relative aspect-square h-full w-full p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-md\",\r\n props.showWeekNumber\r\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\r\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\r\n defaultClassNames.day\r\n ),\r\n range_start: cn(\r\n \"rounded-l-md bg-accent\",\r\n defaultClassNames.range_start\r\n ),\r\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\r\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\r\n today: cn(\r\n \"rounded-md bg-accent text-accent-foreground data-[selected=true]:rounded-none\",\r\n defaultClassNames.today\r\n ),\r\n outside: cn(\r\n \"text-muted-foreground aria-selected:text-muted-foreground\",\r\n defaultClassNames.outside\r\n ),\r\n disabled: cn(\r\n \"text-muted-foreground opacity-50\",\r\n defaultClassNames.disabled\r\n ),\r\n hidden: cn(\"invisible\", defaultClassNames.hidden),\r\n ...classNames,\r\n }}\r\n components={{\r\n Root: ({ className, rootRef, ...props }) => {\r\n return (\r\n <div\r\n data-slot=\"calendar\"\r\n ref={rootRef}\r\n className={cn(className)}\r\n {...props}\r\n />\r\n )\r\n },\r\n Chevron: ({ className, orientation, ...props }) => {\r\n if (orientation === \"left\") {\r\n return (\r\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\r\n )\r\n }\r\n\r\n if (orientation === \"right\") {\r\n return (\r\n <ChevronRightIcon\r\n className={cn(\"size-4\", className)}\r\n {...props}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\r\n )\r\n },\r\n DayButton: CalendarDayButton,\r\n WeekNumber: ({ children, ...props }) => {\r\n return (\r\n <td {...props}>\r\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\r\n {children}\r\n </div>\r\n </td>\r\n )\r\n },\r\n ...components,\r\n }}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CalendarDayButton({\r\n className,\r\n day,\r\n modifiers,\r\n ...props\r\n}: React.ComponentProps<typeof DayButton>) {\r\n const defaultClassNames = getDefaultClassNames()\r\n\r\n const ref = React.useRef<HTMLButtonElement>(null)\r\n React.useEffect(() => {\r\n if (modifiers.focused) ref.current?.focus()\r\n }, [modifiers.focused])\r\n\r\n return (\r\n <Button\r\n ref={ref}\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n data-day={day.date.toLocaleDateString()}\r\n data-selected-single={\r\n modifiers.selected &&\r\n !modifiers.range_start &&\r\n !modifiers.range_end &&\r\n !modifiers.range_middle\r\n }\r\n data-range-start={modifiers.range_start}\r\n data-range-end={modifiers.range_end}\r\n data-range-middle={modifiers.range_middle}\r\n className={cn(\r\n \"flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-accent-foreground [&>span]:text-xs [&>span]:opacity-70\",\r\n defaultClassNames.day,\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Calendar, CalendarDayButton }\r\n","import * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card\"\r\n className={cn(\r\n \"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-header\"\r\n className={cn(\r\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-title\"\r\n className={cn(\"leading-none font-semibold\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-action\"\r\n className={cn(\r\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-content\"\r\n className={cn(\"px-6\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"card-footer\"\r\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Card,\r\n CardHeader,\r\n CardFooter,\r\n CardTitle,\r\n CardAction,\r\n CardDescription,\r\n CardContent,\r\n}\r\n","'use client'\n\nimport * as React from \"react\"\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from \"embla-carousel-react\"\r\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button } from \"@/components/ui/button\"\r\n\r\ntype CarouselApi = UseEmblaCarouselType[1]\r\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\r\ntype CarouselOptions = UseCarouselParameters[0]\r\ntype CarouselPlugin = UseCarouselParameters[1]\r\n\r\ntype CarouselProps = {\r\n opts?: CarouselOptions\r\n plugins?: CarouselPlugin\r\n orientation?: \"horizontal\" | \"vertical\"\r\n setApi?: (api: CarouselApi) => void\r\n}\r\n\r\ntype CarouselContextProps = {\r\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\r\n api: ReturnType<typeof useEmblaCarousel>[1]\r\n scrollPrev: () => void\r\n scrollNext: () => void\r\n canScrollPrev: boolean\r\n canScrollNext: boolean\r\n} & CarouselProps\r\n\r\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\r\n\r\nfunction useCarousel() {\r\n const context = React.useContext(CarouselContext)\r\n\r\n if (!context) {\r\n throw new Error(\"useCarousel must be used within a <Carousel />\")\r\n }\r\n\r\n return context\r\n}\r\n\r\nfunction Carousel({\r\n orientation = \"horizontal\",\r\n opts,\r\n setApi,\r\n plugins,\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & CarouselProps) {\r\n const [carouselRef, api] = useEmblaCarousel(\r\n {\r\n ...opts,\r\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\r\n },\r\n plugins\r\n )\r\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\r\n const [canScrollNext, setCanScrollNext] = React.useState(false)\r\n\r\n const onSelect = React.useCallback((api: CarouselApi) => {\r\n if (!api) return\r\n setCanScrollPrev(api.canScrollPrev())\r\n setCanScrollNext(api.canScrollNext())\r\n }, [])\r\n\r\n const scrollPrev = React.useCallback(() => {\r\n api?.scrollPrev()\r\n }, [api])\r\n\r\n const scrollNext = React.useCallback(() => {\r\n api?.scrollNext()\r\n }, [api])\r\n\r\n const handleKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"ArrowLeft\") {\r\n event.preventDefault()\r\n scrollPrev()\r\n } else if (event.key === \"ArrowRight\") {\r\n event.preventDefault()\r\n scrollNext()\r\n }\r\n },\r\n [scrollPrev, scrollNext]\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!api || !setApi) return\r\n setApi(api)\r\n }, [api, setApi])\r\n\r\n React.useEffect(() => {\r\n if (!api) return\r\n onSelect(api)\r\n api.on(\"reInit\", onSelect)\r\n api.on(\"select\", onSelect)\r\n\r\n return () => {\r\n api?.off(\"select\", onSelect)\r\n }\r\n }, [api, onSelect])\r\n\r\n return (\r\n <CarouselContext.Provider\r\n value={{\r\n carouselRef,\r\n api: api,\r\n opts,\r\n orientation:\r\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\r\n scrollPrev,\r\n scrollNext,\r\n canScrollPrev,\r\n canScrollNext,\r\n }}\r\n >\r\n <div\r\n onKeyDownCapture={handleKeyDown}\r\n className={cn(\"relative\", className)}\r\n role=\"region\"\r\n aria-roledescription=\"carousel\"\r\n data-slot=\"carousel\"\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </CarouselContext.Provider>\r\n )\r\n}\r\n\r\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const { carouselRef, orientation } = useCarousel()\r\n\r\n return (\r\n <div\r\n ref={carouselRef}\r\n className=\"overflow-hidden\"\r\n data-slot=\"carousel-content\"\r\n >\r\n <div\r\n className={cn(\r\n \"flex\",\r\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const { orientation } = useCarousel()\r\n\r\n return (\r\n <div\r\n role=\"group\"\r\n aria-roledescription=\"slide\"\r\n data-slot=\"carousel-item\"\r\n className={cn(\r\n \"min-w-0 shrink-0 grow-0 basis-full\",\r\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CarouselPrevious({\r\n className,\r\n variant = \"outline\",\r\n size = \"icon\",\r\n ...props\r\n}: React.ComponentProps<typeof Button>) {\r\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\r\n\r\n return (\r\n <Button\r\n data-slot=\"carousel-previous\"\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n \"absolute size-8 rounded-full\",\r\n orientation === \"horizontal\"\r\n ? \"top-1/2 -left-12 -translate-y-1/2\"\r\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\r\n className\r\n )}\r\n disabled={!canScrollPrev}\r\n onClick={scrollPrev}\r\n {...props}\r\n >\r\n <ArrowLeft />\r\n <span className=\"sr-only\">Previous slide</span>\r\n </Button>\r\n )\r\n}\r\n\r\nfunction CarouselNext({\r\n className,\r\n variant = \"outline\",\r\n size = \"icon\",\r\n ...props\r\n}: React.ComponentProps<typeof Button>) {\r\n const { orientation, scrollNext, canScrollNext } = useCarousel()\r\n\r\n return (\r\n <Button\r\n data-slot=\"carousel-next\"\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n \"absolute size-8 rounded-full\",\r\n orientation === \"horizontal\"\r\n ? \"top-1/2 -right-12 -translate-y-1/2\"\r\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\r\n className\r\n )}\r\n disabled={!canScrollNext}\r\n onClick={scrollNext}\r\n {...props}\r\n >\r\n <ArrowRight />\r\n <span className=\"sr-only\">Next slide</span>\r\n </Button>\r\n )\r\n}\r\n\r\nexport {\r\n type CarouselApi,\r\n Carousel,\r\n CarouselContent,\r\n CarouselItem,\r\n CarouselPrevious,\r\n CarouselNext,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as RechartsPrimitive from \"recharts\"\r\nimport type { TooltipValueType } from \"recharts\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\n// Format: { THEME_NAME: CSS_SELECTOR }\r\nconst THEMES = { light: \"\", dark: \".dark\" } as const\r\n\r\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const\r\ntype TooltipNameType = number | string\r\n\r\nexport type ChartConfig = Record<\r\n string,\r\n {\r\n label?: React.ReactNode\r\n icon?: React.ComponentType\r\n } & (\r\n | { color?: string; theme?: never }\r\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\r\n )\r\n>\r\n\r\ntype ChartContextProps = {\r\n config: ChartConfig\r\n}\r\n\r\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\r\n\r\nfunction useChart() {\r\n const context = React.useContext(ChartContext)\r\n\r\n if (!context) {\r\n throw new Error(\"useChart must be used within a <ChartContainer />\")\r\n }\r\n\r\n return context\r\n}\r\n\r\nfunction ChartContainer({\r\n id,\r\n className,\r\n children,\r\n config,\r\n initialDimension = INITIAL_DIMENSION,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n config: ChartConfig\r\n children: React.ComponentProps<\r\n typeof RechartsPrimitive.ResponsiveContainer\r\n >[\"children\"]\r\n initialDimension?: {\r\n width: number\r\n height: number\r\n }\r\n}) {\r\n const uniqueId = React.useId()\r\n const chartId = `chart-${id ?? uniqueId.replace(/:/g, \"\")}`\r\n\r\n return (\r\n <ChartContext.Provider value={{ config }}>\r\n <div\r\n data-slot=\"chart\"\r\n data-chart={chartId}\r\n className={cn(\r\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChartStyle id={chartId} config={config} />\r\n <RechartsPrimitive.ResponsiveContainer\r\n initialDimension={initialDimension}\r\n >\r\n {children}\r\n </RechartsPrimitive.ResponsiveContainer>\r\n </div>\r\n </ChartContext.Provider>\r\n )\r\n}\r\n\r\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\r\n const colorConfig = Object.entries(config).filter(\r\n ([, config]) => config.theme ?? config.color\r\n )\r\n\r\n if (!colorConfig.length) {\r\n return null\r\n }\r\n\r\n return (\r\n <style\r\n dangerouslySetInnerHTML={{\r\n __html: Object.entries(THEMES)\r\n .map(\r\n ([theme, prefix]) => `\r\n${prefix} [data-chart=${id}] {\r\n${colorConfig\r\n .map(([key, itemConfig]) => {\r\n const color =\r\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ??\r\n itemConfig.color\r\n return color ? ` --color-${key}: ${color};` : null\r\n })\r\n .join(\"\\n\")}\r\n}\r\n`\r\n )\r\n .join(\"\\n\"),\r\n }}\r\n />\r\n )\r\n}\r\n\r\nconst ChartTooltip = RechartsPrimitive.Tooltip\r\n\r\nfunction ChartTooltipContent({\r\n active,\r\n payload,\r\n className,\r\n indicator = \"dot\",\r\n hideLabel = false,\r\n hideIndicator = false,\r\n label,\r\n labelFormatter,\r\n labelClassName,\r\n formatter,\r\n color,\r\n nameKey,\r\n labelKey,\r\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\r\n React.ComponentProps<\"div\"> & {\r\n hideLabel?: boolean\r\n hideIndicator?: boolean\r\n indicator?: \"line\" | \"dot\" | \"dashed\"\r\n nameKey?: string\r\n labelKey?: string\r\n } & Omit<\r\n RechartsPrimitive.DefaultTooltipContentProps<\r\n TooltipValueType,\r\n TooltipNameType\r\n >,\r\n \"accessibilityLayer\"\r\n >) {\r\n const { config } = useChart()\r\n\r\n const tooltipLabel = React.useMemo(() => {\r\n if (hideLabel || !payload?.length) {\r\n return null\r\n }\r\n\r\n const [item] = payload\r\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? \"value\"}`\r\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\r\n const value =\r\n !labelKey && typeof label === \"string\"\r\n ? (config[label]?.label ?? label)\r\n : itemConfig?.label\r\n\r\n if (labelFormatter) {\r\n return (\r\n <div className={cn(\"font-medium\", labelClassName)}>\r\n {labelFormatter(value, payload)}\r\n </div>\r\n )\r\n }\r\n\r\n if (!value) {\r\n return null\r\n }\r\n\r\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\r\n }, [\r\n label,\r\n labelFormatter,\r\n payload,\r\n hideLabel,\r\n labelClassName,\r\n config,\r\n labelKey,\r\n ])\r\n\r\n if (!active || !payload?.length) {\r\n return null\r\n }\r\n\r\n const nestLabel = payload.length === 1 && indicator !== \"dot\"\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\r\n className\r\n )}\r\n >\r\n {!nestLabel ? tooltipLabel : null}\r\n <div className=\"grid gap-1.5\">\r\n {payload\r\n .filter((item) => item.type !== \"none\")\r\n .map((item, index) => {\r\n const key = `${nameKey ?? item.name ?? item.dataKey ?? \"value\"}`\r\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\r\n const indicatorColor = color ?? item.payload?.fill ?? item.color\r\n\r\n return (\r\n <div\r\n key={index}\r\n className={cn(\r\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\r\n indicator === \"dot\" && \"items-center\"\r\n )}\r\n >\r\n {formatter && item?.value !== undefined && item.name ? (\r\n formatter(item.value, item.name, item, index, item.payload)\r\n ) : (\r\n <>\r\n {itemConfig?.icon ? (\r\n <itemConfig.icon />\r\n ) : (\r\n !hideIndicator && (\r\n <div\r\n className={cn(\r\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\r\n {\r\n \"h-2.5 w-2.5\": indicator === \"dot\",\r\n \"w-1\": indicator === \"line\",\r\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\r\n indicator === \"dashed\",\r\n \"my-0.5\": nestLabel && indicator === \"dashed\",\r\n }\r\n )}\r\n style={\r\n {\r\n \"--color-bg\": indicatorColor,\r\n \"--color-border\": indicatorColor,\r\n } as React.CSSProperties\r\n }\r\n />\r\n )\r\n )}\r\n <div\r\n className={cn(\r\n \"flex flex-1 justify-between leading-none\",\r\n nestLabel ? \"items-end\" : \"items-center\"\r\n )}\r\n >\r\n <div className=\"grid gap-1.5\">\r\n {nestLabel ? tooltipLabel : null}\r\n <span className=\"text-muted-foreground\">\r\n {itemConfig?.label ?? item.name}\r\n </span>\r\n </div>\r\n {item.value != null && (\r\n <span className=\"font-mono font-medium text-foreground tabular-nums\">\r\n {typeof item.value === \"number\"\r\n ? item.value.toLocaleString()\r\n : String(item.value)}\r\n </span>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nconst ChartLegend = RechartsPrimitive.Legend\r\n\r\nfunction ChartLegendContent({\r\n className,\r\n hideIcon = false,\r\n payload,\r\n verticalAlign = \"bottom\",\r\n nameKey,\r\n}: React.ComponentProps<\"div\"> & {\r\n hideIcon?: boolean\r\n nameKey?: string\r\n} & RechartsPrimitive.DefaultLegendContentProps) {\r\n const { config } = useChart()\r\n\r\n if (!payload?.length) {\r\n return null\r\n }\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex items-center justify-center gap-4\",\r\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\r\n className\r\n )}\r\n >\r\n {payload\r\n .filter((item) => item.type !== \"none\")\r\n .map((item, index) => {\r\n const key = `${nameKey ?? item.dataKey ?? \"value\"}`\r\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\r\n\r\n return (\r\n <div\r\n key={index}\r\n className={cn(\r\n \"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\"\r\n )}\r\n >\r\n {itemConfig?.icon && !hideIcon ? (\r\n <itemConfig.icon />\r\n ) : (\r\n <div\r\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\r\n style={{\r\n backgroundColor: item.color,\r\n }}\r\n />\r\n )}\r\n {itemConfig?.label}\r\n </div>\r\n )\r\n })}\r\n </div>\r\n )\r\n}\r\n\r\n// Helper to extract item config from a payload.\r\nfunction getPayloadConfigFromPayload(\r\n config: ChartConfig,\r\n payload: unknown,\r\n key: string\r\n) {\r\n if (typeof payload !== \"object\" || payload === null) {\r\n return undefined\r\n }\r\n\r\n const payloadPayload =\r\n \"payload\" in payload &&\r\n typeof payload.payload === \"object\" &&\r\n payload.payload !== null\r\n ? payload.payload\r\n : undefined\r\n\r\n let configLabelKey: string = key\r\n\r\n if (\r\n key in payload &&\r\n typeof payload[key as keyof typeof payload] === \"string\"\r\n ) {\r\n configLabelKey = payload[key as keyof typeof payload] as string\r\n } else if (\r\n payloadPayload &&\r\n key in payloadPayload &&\r\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\r\n ) {\r\n configLabelKey = payloadPayload[\r\n key as keyof typeof payloadPayload\r\n ] as string\r\n }\r\n\r\n return configLabelKey in config ? config[configLabelKey] : config[key]\r\n}\r\n\r\nexport {\r\n ChartContainer,\r\n ChartTooltip,\r\n ChartTooltipContent,\r\n ChartLegend,\r\n ChartLegendContent,\r\n ChartStyle,\r\n}\r\n","import * as React from \"react\"\r\nimport { Area, AreaChart, Bar, BarChart, CartesianGrid, Line, LineChart, Pie, PieChart, XAxis, YAxis } from \"recharts\"\r\nimport { ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from \"@/components/ui/chart\"\r\n\r\n// Sample data for demos\r\nconst areaData = [\r\n { month: \"Jan\", desktop: 186, mobile: 80 },\r\n { month: \"Feb\", desktop: 305, mobile: 200 },\r\n { month: \"Mar\", desktop: 237, mobile: 120 },\r\n { month: \"Apr\", desktop: 73, mobile: 190 },\r\n { month: \"May\", desktop: 209, mobile: 130 },\r\n { month: \"Jun\", desktop: 214, mobile: 140 },\r\n]\r\n\r\nconst barData = [\r\n { month: \"Jan\", desktop: 186, mobile: 80 },\r\n { month: \"Feb\", desktop: 305, mobile: 200 },\r\n { month: \"Mar\", desktop: 237, mobile: 120 },\r\n { month: \"Apr\", desktop: 73, mobile: 190 },\r\n { month: \"May\", desktop: 209, mobile: 130 },\r\n { month: \"Jun\", desktop: 214, mobile: 140 },\r\n]\r\n\r\nconst lineData = [\r\n { month: \"Jan\", desktop: 186, mobile: 80 },\r\n { month: \"Feb\", desktop: 305, mobile: 200 },\r\n { month: \"Mar\", desktop: 237, mobile: 120 },\r\n { month: \"Apr\", desktop: 73, mobile: 190 },\r\n { month: \"May\", desktop: 209, mobile: 130 },\r\n { month: \"Jun\", desktop: 214, mobile: 140 },\r\n]\r\n\r\nconst pieData = [\r\n { browser: \"chrome\", visitors: 275, fill: \"var(--color-chrome)\" },\r\n { browser: \"safari\", visitors: 200, fill: \"var(--color-safari)\" },\r\n { browser: \"firefox\", visitors: 187, fill: \"var(--color-firefox)\" },\r\n { browser: \"edge\", visitors: 173, fill: \"var(--color-edge)\" },\r\n { browser: \"other\", visitors: 90, fill: \"var(--color-other)\" },\r\n]\r\n\r\nconst chartConfig = {\r\n desktop: {\r\n label: \"Desktop\",\r\n color: \"hsl(var(--chart-1))\",\r\n },\r\n mobile: {\r\n label: \"Mobile\",\r\n color: \"hsl(var(--chart-2))\",\r\n },\r\n} satisfies ChartConfig\r\n\r\nconst pieChartConfig = {\r\n visitors: { label: \"Visitors\" },\r\n chrome: { label: \"Chrome\", color: \"hsl(var(--chart-1))\" },\r\n safari: { label: \"Safari\", color: \"hsl(var(--chart-2))\" },\r\n firefox: { label: \"Firefox\", color: \"hsl(var(--chart-3))\" },\r\n edge: { label: \"Edge\", color: \"hsl(var(--chart-4))\" },\r\n other: { label: \"Other\", color: \"hsl(var(--chart-5))\" },\r\n} satisfies ChartConfig\r\n\r\nexport function AreaChartDemo({ className }: { className?: string }) {\r\n return (\r\n <ChartContainer config={chartConfig} className={className}>\r\n <AreaChart\r\n accessibilityLayer\r\n data={areaData}\r\n margin={{ left: 12, right: 12 }}\r\n >\r\n <CartesianGrid vertical={false} />\r\n <XAxis\r\n dataKey=\"month\"\r\n tickLine={false}\r\n axisLine={false}\r\n tickMargin={8}\r\n tickFormatter={(value) => value.slice(0, 3)}\r\n />\r\n <ChartTooltip cursor={false} content={<ChartTooltipContent />} />\r\n <Area\r\n dataKey=\"desktop\"\r\n type=\"natural\"\r\n fill=\"var(--color-desktop)\"\r\n fillOpacity={0.4}\r\n stroke=\"var(--color-desktop)\"\r\n stackId=\"a\"\r\n />\r\n <Area\r\n dataKey=\"mobile\"\r\n type=\"natural\"\r\n fill=\"var(--color-mobile)\"\r\n fillOpacity={0.4}\r\n stroke=\"var(--color-mobile)\"\r\n stackId=\"a\"\r\n />\r\n </AreaChart>\r\n </ChartContainer>\r\n )\r\n}\r\n\r\nexport function BarChartDemo({ className }: { className?: string }) {\r\n return (\r\n <ChartContainer config={chartConfig} className={className}>\r\n <BarChart accessibilityLayer data={barData}>\r\n <CartesianGrid vertical={false} />\r\n <XAxis\r\n dataKey=\"month\"\r\n tickLine={false}\r\n tickMargin={10}\r\n axisLine={false}\r\n tickFormatter={(value) => value.slice(0, 3)}\r\n />\r\n <ChartTooltip cursor={false} content={<ChartTooltipContent indicator=\"dashed\" />} />\r\n <Bar dataKey=\"desktop\" fill=\"var(--color-desktop)\" radius={4} />\r\n <Bar dataKey=\"mobile\" fill=\"var(--color-mobile)\" radius={4} />\r\n </BarChart>\r\n </ChartContainer>\r\n )\r\n}\r\n\r\nexport function LineChartDemo({ className }: { className?: string }) {\r\n return (\r\n <ChartContainer config={chartConfig} className={className}>\r\n <LineChart\r\n accessibilityLayer\r\n data={lineData}\r\n margin={{ left: 12, right: 12 }}\r\n >\r\n <CartesianGrid vertical={false} />\r\n <XAxis\r\n dataKey=\"month\"\r\n tickLine={false}\r\n axisLine={false}\r\n tickMargin={8}\r\n tickFormatter={(value) => value.slice(0, 3)}\r\n />\r\n <ChartTooltip cursor={false} content={<ChartTooltipContent />} />\r\n <Line\r\n dataKey=\"desktop\"\r\n type=\"monotone\"\r\n stroke=\"var(--color-desktop)\"\r\n strokeWidth={2}\r\n dot={false}\r\n />\r\n <Line\r\n dataKey=\"mobile\"\r\n type=\"monotone\"\r\n stroke=\"var(--color-mobile)\"\r\n strokeWidth={2}\r\n dot={false}\r\n />\r\n </LineChart>\r\n </ChartContainer>\r\n )\r\n}\r\n\r\nexport function PieChartDemo({ className }: { className?: string }) {\r\n return (\r\n <ChartContainer config={pieChartConfig} className={className}>\r\n <PieChart>\r\n <ChartTooltip cursor={false} content={<ChartTooltipContent hideLabel />} />\r\n <Pie\r\n data={pieData}\r\n dataKey=\"visitors\"\r\n nameKey=\"browser\"\r\n innerRadius={60}\r\n strokeWidth={5}\r\n />\r\n </PieChart>\r\n </ChartContainer>\r\n )\r\n}\r\n","import * as React from \"react\"\r\nimport { CheckIcon } from \"lucide-react\"\r\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Checkbox({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\r\n return (\r\n <CheckboxPrimitive.Root\r\n data-slot=\"checkbox\"\r\n className={cn(\r\n \"peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <CheckboxPrimitive.Indicator\r\n data-slot=\"checkbox-indicator\"\r\n className=\"grid place-content-center text-current transition-none\"\r\n >\r\n <CheckIcon className=\"size-3.5\" />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Checkbox }\r\n","\"use client\"\r\n\r\nimport { Collapsible as CollapsiblePrimitive } from \"radix-ui\"\r\n\r\nfunction Collapsible({\r\n ...props\r\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\r\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\r\n}\r\n\r\nfunction CollapsibleTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\r\n return (\r\n <CollapsiblePrimitive.CollapsibleTrigger\r\n data-slot=\"collapsible-trigger\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CollapsibleContent({\r\n ...props\r\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\r\n return (\r\n <CollapsiblePrimitive.CollapsibleContent\r\n data-slot=\"collapsible-content\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\r\n","import * as React from \"react\"\r\nimport { Command as CommandPrimitive } from \"cmdk\"\r\nimport { SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogDescription,\r\n DialogHeader,\r\n DialogTitle,\r\n} from \"@/components/ui/dialog\"\r\n\r\nfunction Command({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive>) {\r\n return (\r\n <CommandPrimitive\r\n data-slot=\"command\"\r\n className={cn(\r\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandDialog({\r\n title = \"Command Palette\",\r\n description = \"Search for a command to run...\",\r\n children,\r\n className,\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof Dialog> & {\r\n title?: string\r\n description?: string\r\n className?: string\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <Dialog {...props}>\r\n <DialogHeader className=\"sr-only\">\r\n <DialogTitle>{title}</DialogTitle>\r\n <DialogDescription>{description}</DialogDescription>\r\n </DialogHeader>\r\n <DialogContent\r\n className={cn(\"overflow-hidden p-0\", className)}\r\n showCloseButton={showCloseButton}\r\n >\r\n <Command className=\"**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\r\n {children}\r\n </Command>\r\n </DialogContent>\r\n </Dialog>\r\n )\r\n}\r\n\r\nfunction CommandInput({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\r\n return (\r\n <div\r\n data-slot=\"command-input-wrapper\"\r\n className=\"flex h-9 items-center gap-2 border-b px-3\"\r\n >\r\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\r\n <CommandPrimitive.Input\r\n data-slot=\"command-input\"\r\n className={cn(\r\n \"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction CommandList({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\r\n return (\r\n <CommandPrimitive.List\r\n data-slot=\"command-list\"\r\n className={cn(\r\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandEmpty({\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\r\n return (\r\n <CommandPrimitive.Empty\r\n data-slot=\"command-empty\"\r\n className=\"py-6 text-center text-sm\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandGroup({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\r\n return (\r\n <CommandPrimitive.Group\r\n data-slot=\"command-group\"\r\n className={cn(\r\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\r\n return (\r\n <CommandPrimitive.Separator\r\n data-slot=\"command-separator\"\r\n className={cn(\"-mx-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\r\n return (\r\n <CommandPrimitive.Item\r\n data-slot=\"command-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"command-shortcut\"\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Command,\r\n CommandDialog,\r\n CommandInput,\r\n CommandList,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandItem,\r\n CommandShortcut,\r\n CommandSeparator,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\r\nimport { ContextMenu as ContextMenuPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction ContextMenu({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\r\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\r\n}\r\n\r\nfunction ContextMenuTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\r\n return (\r\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\r\n )\r\n}\r\n\r\nfunction ContextMenuGroup({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\r\n return (\r\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\r\n )\r\n}\r\n\r\nfunction ContextMenuPortal({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\r\n return (\r\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\r\n )\r\n}\r\n\r\nfunction ContextMenuSub({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\r\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\r\n}\r\n\r\nfunction ContextMenuRadioGroup({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\r\n return (\r\n <ContextMenuPrimitive.RadioGroup\r\n data-slot=\"context-menu-radio-group\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuSubTrigger({\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <ContextMenuPrimitive.SubTrigger\r\n data-slot=\"context-menu-sub-trigger\"\r\n data-inset={inset}\r\n className={cn(\r\n \"flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon className=\"ml-auto\" />\r\n </ContextMenuPrimitive.SubTrigger>\r\n )\r\n}\r\n\r\nfunction ContextMenuSubContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\r\n return (\r\n <ContextMenuPrimitive.SubContent\r\n data-slot=\"context-menu-sub-content\"\r\n className={cn(\r\n \"z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\r\n return (\r\n <ContextMenuPrimitive.Portal>\r\n <ContextMenuPrimitive.Content\r\n data-slot=\"context-menu-content\"\r\n className={cn(\r\n \"z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </ContextMenuPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction ContextMenuItem({\r\n className,\r\n inset,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\r\n inset?: boolean\r\n variant?: \"default\" | \"destructive\"\r\n}) {\r\n return (\r\n <ContextMenuPrimitive.Item\r\n data-slot=\"context-menu-item\"\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\r\n return (\r\n <ContextMenuPrimitive.CheckboxItem\r\n data-slot=\"context-menu-checkbox-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <ContextMenuPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </ContextMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </ContextMenuPrimitive.CheckboxItem>\r\n )\r\n}\r\n\r\nfunction ContextMenuRadioItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\r\n return (\r\n <ContextMenuPrimitive.RadioItem\r\n data-slot=\"context-menu-radio-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <ContextMenuPrimitive.ItemIndicator>\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </ContextMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </ContextMenuPrimitive.RadioItem>\r\n )\r\n}\r\n\r\nfunction ContextMenuLabel({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <ContextMenuPrimitive.Label\r\n data-slot=\"context-menu-label\"\r\n data-inset={inset}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-medium text-foreground data-[inset]:pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\r\n return (\r\n <ContextMenuPrimitive.Separator\r\n data-slot=\"context-menu-separator\"\r\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"context-menu-shortcut\"\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n ContextMenu,\r\n ContextMenuTrigger,\r\n ContextMenuContent,\r\n ContextMenuItem,\r\n ContextMenuCheckboxItem,\r\n ContextMenuRadioItem,\r\n ContextMenuLabel,\r\n ContextMenuSeparator,\r\n ContextMenuShortcut,\r\n ContextMenuGroup,\r\n ContextMenuPortal,\r\n ContextMenuSub,\r\n ContextMenuSubContent,\r\n ContextMenuSubTrigger,\r\n ContextMenuRadioGroup,\r\n}\r\n","\"use client\";\r\nimport { format } from \"date-fns\";\r\nimport { Calendar as CalendarIcon } from \"lucide-react\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { Calendar } from \"@/components/ui/calendar\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { forwardRef } from \"react\";\r\n\r\nexport const DatePicker = forwardRef<\r\n HTMLDivElement,\r\n {\r\n date?: Date;\r\n setDate: (date?: Date) => void;\r\n }\r\n>(function DatePickerCmp({ date, setDate }, ref) {\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant={\"outline\"}\r\n className={cn(\r\n \"w-full justify-start text-left font-normal\",\r\n !date && \"text-muted-foreground\",\r\n )}\r\n >\r\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\r\n {date ? format(date, \"PPP\") : <span>Pick a date</span>}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" ref={ref}>\r\n <Calendar\r\n mode=\"single\"\r\n selected={date}\r\n onSelect={setDate}\r\n />\r\n\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n});\r\n","import * as React from \"react\"\r\nimport { XIcon } from \"lucide-react\"\r\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button } from \"@/components/ui/button\"\r\n\r\nfunction Dialog({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\r\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\r\n}\r\n\r\nfunction DialogTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\r\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\r\n}\r\n\r\nfunction DialogPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\r\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\r\n}\r\n\r\nfunction DialogClose({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\r\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\r\n}\r\n\r\nfunction DialogOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\r\n return (\r\n <DialogPrimitive.Overlay\r\n data-slot=\"dialog-overlay\"\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DialogContent({\r\n className,\r\n children,\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <DialogPortal data-slot=\"dialog-portal\">\r\n <DialogOverlay />\r\n <DialogPrimitive.Content\r\n data-slot=\"dialog-content\"\r\n className={cn(\r\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <DialogPrimitive.Close\r\n data-slot=\"dialog-close\"\r\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\r\n >\r\n <XIcon />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogPrimitive.Close>\r\n )}\r\n </DialogPrimitive.Content>\r\n </DialogPortal>\r\n )\r\n}\r\n\r\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"dialog-header\"\r\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DialogFooter({\r\n className,\r\n showCloseButton = false,\r\n children,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <div\r\n data-slot=\"dialog-footer\"\r\n className={cn(\r\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <DialogPrimitive.Close asChild>\r\n <Button variant=\"outline\">Close</Button>\r\n </DialogPrimitive.Close>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction DialogTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\r\n return (\r\n <DialogPrimitive.Title\r\n data-slot=\"dialog-title\"\r\n className={cn(\"text-lg leading-none font-semibold\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DialogDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\r\n return (\r\n <DialogPrimitive.Description\r\n data-slot=\"dialog-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Dialog,\r\n DialogClose,\r\n DialogContent,\r\n DialogDescription,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogOverlay,\r\n DialogPortal,\r\n DialogTitle,\r\n DialogTrigger,\r\n}\r\n","import * as React from \"react\"\r\nimport { Drawer as DrawerPrimitive } from \"vaul\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Drawer({\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\r\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\r\n}\r\n\r\nfunction DrawerTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\r\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\r\n}\r\n\r\nfunction DrawerPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\r\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\r\n}\r\n\r\nfunction DrawerClose({\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\r\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\r\n}\r\n\r\nfunction DrawerOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\r\n return (\r\n <DrawerPrimitive.Overlay\r\n data-slot=\"drawer-overlay\"\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DrawerContent({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\r\n return (\r\n <DrawerPortal data-slot=\"drawer-portal\">\r\n <DrawerOverlay />\r\n <DrawerPrimitive.Content\r\n data-slot=\"drawer-content\"\r\n className={cn(\r\n \"group/drawer-content fixed z-50 flex h-auto flex-col bg-background\",\r\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\r\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\r\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\r\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\r\n {children}\r\n </DrawerPrimitive.Content>\r\n </DrawerPortal>\r\n )\r\n}\r\n\r\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"drawer-header\"\r\n className={cn(\r\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"drawer-footer\"\r\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DrawerTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\r\n return (\r\n <DrawerPrimitive.Title\r\n data-slot=\"drawer-title\"\r\n className={cn(\"font-semibold text-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DrawerDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\r\n return (\r\n <DrawerPrimitive.Description\r\n data-slot=\"drawer-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Drawer,\r\n DrawerPortal,\r\n DrawerOverlay,\r\n DrawerTrigger,\r\n DrawerClose,\r\n DrawerContent,\r\n DrawerHeader,\r\n DrawerFooter,\r\n DrawerTitle,\r\n DrawerDescription,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\r\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction DropdownMenu({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\r\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\r\n}\r\n\r\nfunction DropdownMenuPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\r\n return (\r\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\r\n )\r\n}\r\n\r\nfunction DropdownMenuTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\r\n return (\r\n <DropdownMenuPrimitive.Trigger\r\n data-slot=\"dropdown-menu-trigger\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuContent({\r\n className,\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\r\n return (\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n data-slot=\"dropdown-menu-content\"\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction DropdownMenuGroup({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\r\n return (\r\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\r\n )\r\n}\r\n\r\nfunction DropdownMenuItem({\r\n className,\r\n inset,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n variant?: \"default\" | \"destructive\"\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.Item\r\n data-slot=\"dropdown-menu-item\"\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\r\n return (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n data-slot=\"dropdown-menu-checkbox-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n )\r\n}\r\n\r\nfunction DropdownMenuRadioGroup({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\r\n return (\r\n <DropdownMenuPrimitive.RadioGroup\r\n data-slot=\"dropdown-menu-radio-group\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuRadioItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\r\n return (\r\n <DropdownMenuPrimitive.RadioItem\r\n data-slot=\"dropdown-menu-radio-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n )\r\n}\r\n\r\nfunction DropdownMenuLabel({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.Label\r\n data-slot=\"dropdown-menu-label\"\r\n data-inset={inset}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\r\n return (\r\n <DropdownMenuPrimitive.Separator\r\n data-slot=\"dropdown-menu-separator\"\r\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"dropdown-menu-shortcut\"\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction DropdownMenuSub({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\r\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\r\n}\r\n\r\nfunction DropdownMenuSubTrigger({\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.SubTrigger\r\n data-slot=\"dropdown-menu-sub-trigger\"\r\n data-inset={inset}\r\n className={cn(\r\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon className=\"ml-auto size-4\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n )\r\n}\r\n\r\nfunction DropdownMenuSubContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\r\n return (\r\n <DropdownMenuPrimitive.SubContent\r\n data-slot=\"dropdown-menu-sub-content\"\r\n className={cn(\r\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuPortal,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuGroup,\r\n DropdownMenuLabel,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioGroup,\r\n DropdownMenuRadioItem,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuSub,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuSubContent,\r\n}\r\n","import { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"empty\"\r\n className={cn(\r\n \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"empty-header\"\r\n className={cn(\r\n \"flex max-w-sm flex-col items-center gap-2 text-center\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst emptyMediaVariants = cva(\r\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n icon: \"flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction EmptyMedia({\r\n className,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\r\n return (\r\n <div\r\n data-slot=\"empty-icon\"\r\n data-variant={variant}\r\n className={cn(emptyMediaVariants({ variant, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"empty-title\"\r\n className={cn(\"text-lg font-medium tracking-tight\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\r\n return (\r\n <div\r\n data-slot=\"empty-description\"\r\n className={cn(\r\n \"text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"empty-content\"\r\n className={cn(\r\n \"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Empty,\r\n EmptyHeader,\r\n EmptyTitle,\r\n EmptyDescription,\r\n EmptyContent,\r\n EmptyMedia,\r\n}\r\n","\"use client\"\r\n\r\nimport { useMemo } from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Label } from \"@/components/ui/label\"\r\nimport { Separator } from \"@/components/ui/separator\"\r\n\r\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\r\n return (\r\n <fieldset\r\n data-slot=\"field-set\"\r\n className={cn(\r\n \"flex flex-col gap-6\",\r\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldLegend({\r\n className,\r\n variant = \"legend\",\r\n ...props\r\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\r\n return (\r\n <legend\r\n data-slot=\"field-legend\"\r\n data-variant={variant}\r\n className={cn(\r\n \"mb-3 font-medium\",\r\n \"data-[variant=legend]:text-base\",\r\n \"data-[variant=label]:text-sm\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"field-group\"\r\n className={cn(\r\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst fieldVariants = cva(\r\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\r\n {\r\n variants: {\r\n orientation: {\r\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\r\n horizontal: [\r\n \"flex-row items-center\",\r\n \"[&>[data-slot=field-label]]:flex-auto\",\r\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\r\n ],\r\n responsive: [\r\n \"flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto\",\r\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\r\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\r\n ],\r\n },\r\n },\r\n defaultVariants: {\r\n orientation: \"vertical\",\r\n },\r\n }\r\n)\r\n\r\nfunction Field({\r\n className,\r\n orientation = \"vertical\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\r\n return (\r\n <div\r\n role=\"group\"\r\n data-slot=\"field\"\r\n data-orientation={orientation}\r\n className={cn(fieldVariants({ orientation }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"field-content\"\r\n className={cn(\r\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldLabel({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof Label>) {\r\n return (\r\n <Label\r\n data-slot=\"field-label\"\r\n className={cn(\r\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\r\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\r\n \"has-data-[state=checked]:border-primary has-data-[state=checked]:bg-primary/5 dark:has-data-[state=checked]:bg-primary/10\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"field-label\"\r\n className={cn(\r\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\r\n return (\r\n <p\r\n data-slot=\"field-description\"\r\n className={cn(\r\n \"text-sm leading-normal font-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance\",\r\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\r\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FieldSeparator({\r\n children,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n children?: React.ReactNode\r\n}) {\r\n return (\r\n <div\r\n data-slot=\"field-separator\"\r\n data-content={!!children}\r\n className={cn(\r\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <Separator className=\"absolute inset-0 top-1/2\" />\r\n {children && (\r\n <span\r\n className=\"relative mx-auto block w-fit bg-background px-2 text-muted-foreground\"\r\n data-slot=\"field-separator-content\"\r\n >\r\n {children}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction FieldError({\r\n className,\r\n children,\r\n errors,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n errors?: Array<{ message?: string } | undefined>\r\n}) {\r\n const content = useMemo(() => {\r\n if (children) {\r\n return children\r\n }\r\n\r\n if (!errors?.length) {\r\n return null\r\n }\r\n\r\n const uniqueErrors = [\r\n ...new Map(errors.map((error) => [error?.message, error])).values(),\r\n ]\r\n\r\n if (uniqueErrors?.length == 1) {\r\n return uniqueErrors[0]?.message\r\n }\r\n\r\n return (\r\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\r\n {uniqueErrors.map(\r\n (error, index) =>\r\n error?.message && <li key={index}>{error.message}</li>\r\n )}\r\n </ul>\r\n )\r\n }, [children, errors])\r\n\r\n if (!content) {\r\n return null\r\n }\r\n\r\n return (\r\n <div\r\n role=\"alert\"\r\n data-slot=\"field-error\"\r\n className={cn(\"text-sm font-normal text-destructive\", className)}\r\n {...props}\r\n >\r\n {content}\r\n </div>\r\n )\r\n}\r\n\r\nexport {\r\n Field,\r\n FieldLabel,\r\n FieldDescription,\r\n FieldError,\r\n FieldGroup,\r\n FieldLegend,\r\n FieldSeparator,\r\n FieldSet,\r\n FieldContent,\r\n FieldTitle,\r\n}\r\n","'use client'\r\n\r\nimport * as React from \"react\"\r\nimport type { Label as LabelPrimitive } from \"radix-ui\"\r\nimport { Slot } from \"radix-ui\"\r\nimport {\r\n Controller,\r\n FormProvider,\r\n useFormContext,\r\n useFormState,\r\n type ControllerProps,\r\n type FieldPath,\r\n type FieldValues,\r\n} from \"react-hook-form\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Label } from \"@/components/ui/label\"\r\n\r\nconst Form = FormProvider\r\n\r\ntype FormFieldContextValue<\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n> = {\r\n name: TName\r\n}\r\n\r\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\r\n {} as FormFieldContextValue\r\n)\r\n\r\nconst FormField = <\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n>({\r\n ...props\r\n}: ControllerProps<TFieldValues, TName>) => {\r\n return (\r\n <FormFieldContext.Provider value={{ name: props.name }}>\r\n <Controller {...props} />\r\n </FormFieldContext.Provider>\r\n )\r\n}\r\n\r\nconst useFormField = () => {\r\n const fieldContext = React.useContext(FormFieldContext)\r\n const itemContext = React.useContext(FormItemContext)\r\n const { getFieldState } = useFormContext()\r\n const formState = useFormState({ name: fieldContext.name })\r\n const fieldState = getFieldState(fieldContext.name, formState)\r\n\r\n if (!fieldContext) {\r\n throw new Error(\"useFormField should be used within <FormField>\")\r\n }\r\n\r\n const { id } = itemContext\r\n\r\n return {\r\n id,\r\n name: fieldContext.name,\r\n formItemId: `${id}-form-item`,\r\n formDescriptionId: `${id}-form-item-description`,\r\n formMessageId: `${id}-form-item-message`,\r\n ...fieldState,\r\n }\r\n}\r\n\r\ntype FormItemContextValue = {\r\n id: string\r\n}\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue>(\r\n {} as FormItemContextValue\r\n)\r\n\r\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const id = React.useId()\r\n\r\n return (\r\n <FormItemContext.Provider value={{ id }}>\r\n <div\r\n data-slot=\"form-item\"\r\n className={cn(\"grid gap-2\", className)}\r\n {...props}\r\n />\r\n </FormItemContext.Provider>\r\n )\r\n}\r\n\r\nfunction FormLabel({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\r\n const { error, formItemId } = useFormField()\r\n\r\n return (\r\n <Label\r\n data-slot=\"form-label\"\r\n data-error={!!error}\r\n className={cn(\"data-[error=true]:text-destructive\", className)}\r\n htmlFor={formItemId}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot.Root>) {\r\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\r\n\r\n return (\r\n <Slot.Root\r\n data-slot=\"form-control\"\r\n id={formItemId}\r\n aria-describedby={\r\n !error\r\n ? `${formDescriptionId}`\r\n : `${formDescriptionId} ${formMessageId}`\r\n }\r\n aria-invalid={!!error}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\r\n const { formDescriptionId } = useFormField()\r\n\r\n return (\r\n <p\r\n data-slot=\"form-description\"\r\n id={formDescriptionId}\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\r\n const { error, formMessageId } = useFormField()\r\n const body = error ? String(error?.message ?? \"\") : props.children\r\n\r\n if (!body) {\r\n return null\r\n }\r\n\r\n return (\r\n <p\r\n data-slot=\"form-message\"\r\n id={formMessageId}\r\n className={cn(\"text-sm text-destructive\", className)}\r\n {...props}\r\n >\r\n {body}\r\n </p>\r\n )\r\n}\r\n\r\nexport {\r\n useFormField,\r\n Form,\r\n FormItem,\r\n FormLabel,\r\n FormControl,\r\n FormDescription,\r\n FormMessage,\r\n FormField,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { HoverCard as HoverCardPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction HoverCard({\r\n ...props\r\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\r\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\r\n}\r\n\r\nfunction HoverCardTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\r\n return (\r\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\r\n )\r\n}\r\n\r\nfunction HoverCardContent({\r\n className,\r\n align = \"center\",\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\r\n return (\r\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\r\n <HoverCardPrimitive.Content\r\n data-slot=\"hover-card-content\"\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </HoverCardPrimitive.Portal>\r\n )\r\n}\r\n\r\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\r\n","import * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\r\n return (\r\n <input\r\n type={type}\r\n data-slot=\"input\"\r\n className={cn(\r\n \"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\r\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\r\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Input }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button } from \"@/components/ui/button\"\r\nimport { Input } from \"@/components/ui/input\"\r\nimport { Textarea } from \"@/components/ui/textarea\"\r\n\r\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"input-group\"\r\n role=\"group\"\r\n className={cn(\r\n \"group/input-group relative flex w-full items-center rounded-md border border-input shadow-xs transition-[color,box-shadow] outline-none dark:bg-input/30\",\r\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\r\n\r\n // Variants based on alignment.\r\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\r\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\r\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\r\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\r\n\r\n // Focus state.\r\n \"has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50\",\r\n\r\n // Error state.\r\n \"has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\r\n\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst inputGroupAddonVariants = cva(\r\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\r\n {\r\n variants: {\r\n align: {\r\n \"inline-start\":\r\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\r\n \"inline-end\":\r\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\r\n \"block-start\":\r\n \"order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3\",\r\n \"block-end\":\r\n \"order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3\",\r\n },\r\n },\r\n defaultVariants: {\r\n align: \"inline-start\",\r\n },\r\n }\r\n)\r\n\r\nfunction InputGroupAddon({\r\n className,\r\n align = \"inline-start\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\r\n return (\r\n <div\r\n role=\"group\"\r\n data-slot=\"input-group-addon\"\r\n data-align={align}\r\n className={cn(inputGroupAddonVariants({ align }), className)}\r\n onClick={(e) => {\r\n if ((e.target as HTMLElement).closest(\"button\")) {\r\n return\r\n }\r\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\r\n }}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst inputGroupButtonVariants = cva(\r\n \"flex items-center gap-2 text-sm shadow-none\",\r\n {\r\n variants: {\r\n size: {\r\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\r\n sm: \"h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5\",\r\n \"icon-xs\":\r\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\r\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"xs\",\r\n },\r\n }\r\n)\r\n\r\nfunction InputGroupButton({\r\n className,\r\n type = \"button\",\r\n variant = \"ghost\",\r\n size = \"xs\",\r\n ...props\r\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\r\n VariantProps<typeof inputGroupButtonVariants>) {\r\n return (\r\n <Button\r\n type={type}\r\n data-size={size}\r\n variant={variant}\r\n className={cn(inputGroupButtonVariants({ size }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n className={cn(\r\n \"flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputGroupInput({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"input\">) {\r\n return (\r\n <Input\r\n data-slot=\"input-group-control\"\r\n className={cn(\r\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputGroupTextarea({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"textarea\">) {\r\n return (\r\n <Textarea\r\n data-slot=\"input-group-control\"\r\n className={cn(\r\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n InputGroup,\r\n InputGroupAddon,\r\n InputGroupButton,\r\n InputGroupText,\r\n InputGroupInput,\r\n InputGroupTextarea,\r\n}\r\n","'use client'\n\nimport * as React from \"react\"\r\nimport { OTPInput, OTPInputContext } from \"input-otp\"\r\nimport { MinusIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction InputOTP({\r\n className,\r\n containerClassName,\r\n ...props\r\n}: React.ComponentProps<typeof OTPInput> & {\r\n containerClassName?: string\r\n}) {\r\n return (\r\n <OTPInput\r\n data-slot=\"input-otp\"\r\n containerClassName={cn(\r\n \"flex items-center gap-2 has-disabled:opacity-50\",\r\n containerClassName\r\n )}\r\n className={cn(\"disabled:cursor-not-allowed\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"input-otp-group\"\r\n className={cn(\"flex items-center\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputOTPSlot({\r\n index,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n index: number\r\n}) {\r\n const inputOTPContext = React.useContext(OTPInputContext)\r\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\r\n\r\n return (\r\n <div\r\n data-slot=\"input-otp-slot\"\r\n data-active={isActive}\r\n className={cn(\r\n \"relative flex h-9 w-9 items-center justify-center border-y border-r border-input text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {char}\r\n {hasFakeCaret && (\r\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\r\n <div className=\"h-4 w-px animate-caret-blink bg-foreground duration-1000\" />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\r\n <MinusIcon />\r\n </div>\r\n )\r\n}\r\n\r\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Slot } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Separator } from \"@/components/ui/separator\"\r\n\r\nfunction ItemGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n role=\"list\"\r\n data-slot=\"item-group\"\r\n className={cn(\"group/item-group flex flex-col\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof Separator>) {\r\n return (\r\n <Separator\r\n data-slot=\"item-separator\"\r\n orientation=\"horizontal\"\r\n className={cn(\"my-0\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst itemVariants = cva(\r\n \"group/item flex flex-wrap items-center rounded-md border border-transparent text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-accent/50\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n outline: \"border-border\",\r\n muted: \"bg-muted/50\",\r\n },\r\n size: {\r\n default: \"gap-4 p-4\",\r\n sm: \"gap-2.5 px-4 py-3\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Item({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"div\"> &\r\n VariantProps<typeof itemVariants> & { asChild?: boolean }) {\r\n const Comp = asChild ? Slot.Root : \"div\"\r\n return (\r\n <Comp\r\n data-slot=\"item\"\r\n data-variant={variant}\r\n data-size={size}\r\n className={cn(itemVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst itemMediaVariants = cva(\r\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n icon: \"size-8 rounded-sm border bg-muted [&_svg:not([class*='size-'])]:size-4\",\r\n image:\r\n \"size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction ItemMedia({\r\n className,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof itemMediaVariants>) {\r\n return (\r\n <div\r\n data-slot=\"item-media\"\r\n data-variant={variant}\r\n className={cn(itemMediaVariants({ variant, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-content\"\r\n className={cn(\r\n \"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-title\"\r\n className={cn(\r\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemDescription({ className, ...props }: React.ComponentProps<\"p\">) {\r\n return (\r\n <p\r\n data-slot=\"item-description\"\r\n className={cn(\r\n \"line-clamp-2 text-sm leading-normal font-normal text-balance text-muted-foreground\",\r\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemActions({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-actions\"\r\n className={cn(\"flex items-center gap-2\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-header\"\r\n className={cn(\r\n \"flex basis-full items-center justify-between gap-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ItemFooter({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"item-footer\"\r\n className={cn(\r\n \"flex basis-full items-center justify-between gap-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Item,\r\n ItemMedia,\r\n ItemContent,\r\n ItemActions,\r\n ItemGroup,\r\n ItemSeparator,\r\n ItemTitle,\r\n ItemDescription,\r\n ItemHeader,\r\n ItemFooter,\r\n}\r\n","import { cn } from \"@/lib/utils\"\r\n\r\nfunction Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\r\n return (\r\n <kbd\r\n data-slot=\"kbd\"\r\n className={cn(\r\n \"pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none\",\r\n \"[&_svg:not([class*='size-'])]:size-3\",\r\n \"[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction KbdGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <kbd\r\n data-slot=\"kbd-group\"\r\n className={cn(\"inline-flex items-center gap-1\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Kbd, KbdGroup }\r\n","import * as React from \"react\"\r\nimport { Label as LabelPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Label({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\r\n return (\r\n <LabelPrimitive.Root\r\n data-slot=\"label\"\r\n className={cn(\r\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Label }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\r\nimport { Menubar as MenubarPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Menubar({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\r\n return (\r\n <MenubarPrimitive.Root\r\n data-slot=\"menubar\"\r\n className={cn(\r\n \"flex h-9 items-center gap-1 rounded-md border bg-background p-1 shadow-xs\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarMenu({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\r\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\r\n}\r\n\r\nfunction MenubarGroup({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\r\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\r\n}\r\n\r\nfunction MenubarPortal({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\r\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\r\n}\r\n\r\nfunction MenubarRadioGroup({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\r\n return (\r\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\r\n )\r\n}\r\n\r\nfunction MenubarTrigger({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\r\n return (\r\n <MenubarPrimitive.Trigger\r\n data-slot=\"menubar-trigger\"\r\n className={cn(\r\n \"flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarContent({\r\n className,\r\n align = \"start\",\r\n alignOffset = -4,\r\n sideOffset = 8,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\r\n return (\r\n <MenubarPortal>\r\n <MenubarPrimitive.Content\r\n data-slot=\"menubar-content\"\r\n align={align}\r\n alignOffset={alignOffset}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </MenubarPortal>\r\n )\r\n}\r\n\r\nfunction MenubarItem({\r\n className,\r\n inset,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\r\n inset?: boolean\r\n variant?: \"default\" | \"destructive\"\r\n}) {\r\n return (\r\n <MenubarPrimitive.Item\r\n data-slot=\"menubar-item\"\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\r\n return (\r\n <MenubarPrimitive.CheckboxItem\r\n data-slot=\"menubar-checkbox-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <MenubarPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </MenubarPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </MenubarPrimitive.CheckboxItem>\r\n )\r\n}\r\n\r\nfunction MenubarRadioItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\r\n return (\r\n <MenubarPrimitive.RadioItem\r\n data-slot=\"menubar-radio-item\"\r\n className={cn(\r\n \"relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <MenubarPrimitive.ItemIndicator>\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </MenubarPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </MenubarPrimitive.RadioItem>\r\n )\r\n}\r\n\r\nfunction MenubarLabel({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <MenubarPrimitive.Label\r\n data-slot=\"menubar-label\"\r\n data-inset={inset}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\r\n return (\r\n <MenubarPrimitive.Separator\r\n data-slot=\"menubar-separator\"\r\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"menubar-shortcut\"\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction MenubarSub({\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\r\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\r\n}\r\n\r\nfunction MenubarSubTrigger({\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <MenubarPrimitive.SubTrigger\r\n data-slot=\"menubar-sub-trigger\"\r\n data-inset={inset}\r\n className={cn(\r\n \"flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\r\n </MenubarPrimitive.SubTrigger>\r\n )\r\n}\r\n\r\nfunction MenubarSubContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\r\n return (\r\n <MenubarPrimitive.SubContent\r\n data-slot=\"menubar-sub-content\"\r\n className={cn(\r\n \"z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Menubar,\r\n MenubarPortal,\r\n MenubarMenu,\r\n MenubarTrigger,\r\n MenubarContent,\r\n MenubarGroup,\r\n MenubarSeparator,\r\n MenubarLabel,\r\n MenubarItem,\r\n MenubarShortcut,\r\n MenubarCheckboxItem,\r\n MenubarRadioGroup,\r\n MenubarRadioItem,\r\n MenubarSub,\r\n MenubarSubTrigger,\r\n MenubarSubContent,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva } from \"class-variance-authority\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\nimport { NavigationMenu as NavigationMenuPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction NavigationMenu({\r\n className,\r\n children,\r\n viewport = true,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\r\n viewport?: boolean\r\n}) {\r\n return (\r\n <NavigationMenuPrimitive.Root\r\n data-slot=\"navigation-menu\"\r\n data-viewport={viewport}\r\n className={cn(\r\n \"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {viewport && <NavigationMenuViewport />}\r\n </NavigationMenuPrimitive.Root>\r\n )\r\n}\r\n\r\nfunction NavigationMenuList({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\r\n return (\r\n <NavigationMenuPrimitive.List\r\n data-slot=\"navigation-menu-list\"\r\n className={cn(\r\n \"group flex flex-1 list-none items-center justify-center gap-1\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction NavigationMenuItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\r\n return (\r\n <NavigationMenuPrimitive.Item\r\n data-slot=\"navigation-menu-item\"\r\n className={cn(\"relative\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst navigationMenuTriggerStyle = cva(\r\n \"group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-[color,box-shadow] outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=open]:bg-accent/50 data-[state=open]:text-accent-foreground data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent\"\r\n)\r\n\r\nfunction NavigationMenuTrigger({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\r\n return (\r\n <NavigationMenuPrimitive.Trigger\r\n data-slot=\"navigation-menu-trigger\"\r\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\r\n {...props}\r\n >\r\n {children}{\" \"}\r\n <ChevronDownIcon\r\n className=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\r\n aria-hidden=\"true\"\r\n />\r\n </NavigationMenuPrimitive.Trigger>\r\n )\r\n}\r\n\r\nfunction NavigationMenuContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\r\n return (\r\n <NavigationMenuPrimitive.Content\r\n data-slot=\"navigation-menu-content\"\r\n className={cn(\r\n \"top-0 left-0 w-full p-2 pr-2.5 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out md:absolute md:w-auto\",\r\n \"group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction NavigationMenuViewport({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\r\n return (\r\n <div\r\n className={cn(\r\n \"absolute top-full left-0 isolate z-50 flex justify-center\"\r\n )}\r\n >\r\n <NavigationMenuPrimitive.Viewport\r\n data-slot=\"navigation-menu-viewport\"\r\n className={cn(\r\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction NavigationMenuLink({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\r\n return (\r\n <NavigationMenuPrimitive.Link\r\n data-slot=\"navigation-menu-link\"\r\n className={cn(\r\n \"flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground data-[active=true]:hover:bg-accent data-[active=true]:focus:bg-accent [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction NavigationMenuIndicator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\r\n return (\r\n <NavigationMenuPrimitive.Indicator\r\n data-slot=\"navigation-menu-indicator\"\r\n className={cn(\r\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\r\n </NavigationMenuPrimitive.Indicator>\r\n )\r\n}\r\n\r\nexport {\r\n NavigationMenu,\r\n NavigationMenuList,\r\n NavigationMenuItem,\r\n NavigationMenuContent,\r\n NavigationMenuTrigger,\r\n NavigationMenuLink,\r\n NavigationMenuIndicator,\r\n NavigationMenuViewport,\r\n navigationMenuTriggerStyle,\r\n}\r\n","import * as React from \"react\"\r\nimport {\r\n ChevronLeftIcon,\r\n ChevronRightIcon,\r\n MoreHorizontalIcon,\r\n} from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { buttonVariants, type Button } from \"@/components/ui/button\"\r\n\r\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\r\n return (\r\n <nav\r\n role=\"navigation\"\r\n aria-label=\"pagination\"\r\n data-slot=\"pagination\"\r\n className={cn(\"mx-auto flex w-full justify-center\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PaginationContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"ul\">) {\r\n return (\r\n <ul\r\n data-slot=\"pagination-content\"\r\n className={cn(\"flex flex-row items-center gap-1\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\r\n return <li data-slot=\"pagination-item\" {...props} />\r\n}\r\n\r\ntype PaginationLinkProps = {\r\n isActive?: boolean\r\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\r\n React.ComponentProps<\"a\">\r\n\r\nfunction PaginationLink({\r\n className,\r\n isActive,\r\n size = \"icon\",\r\n ...props\r\n}: PaginationLinkProps) {\r\n return (\r\n <a\r\n aria-current={isActive ? \"page\" : undefined}\r\n data-slot=\"pagination-link\"\r\n data-active={isActive}\r\n className={cn(\r\n buttonVariants({\r\n variant: isActive ? \"outline\" : \"ghost\",\r\n size,\r\n }),\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PaginationPrevious({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PaginationLink>) {\r\n return (\r\n <PaginationLink\r\n aria-label=\"Go to previous page\"\r\n size=\"default\"\r\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\r\n {...props}\r\n >\r\n <ChevronLeftIcon />\r\n <span className=\"hidden sm:block\">Previous</span>\r\n </PaginationLink>\r\n )\r\n}\r\n\r\nfunction PaginationNext({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PaginationLink>) {\r\n return (\r\n <PaginationLink\r\n aria-label=\"Go to next page\"\r\n size=\"default\"\r\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\r\n {...props}\r\n >\r\n <span className=\"hidden sm:block\">Next</span>\r\n <ChevronRightIcon />\r\n </PaginationLink>\r\n )\r\n}\r\n\r\nfunction PaginationEllipsis({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n aria-hidden\r\n data-slot=\"pagination-ellipsis\"\r\n className={cn(\"flex size-9 items-center justify-center\", className)}\r\n {...props}\r\n >\r\n <MoreHorizontalIcon className=\"size-4\" />\r\n <span className=\"sr-only\">More pages</span>\r\n </span>\r\n )\r\n}\r\n\r\nexport {\r\n Pagination,\r\n PaginationContent,\r\n PaginationLink,\r\n PaginationItem,\r\n PaginationPrevious,\r\n PaginationNext,\r\n PaginationEllipsis,\r\n}\r\n","import * as React from \"react\"\r\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Popover({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\r\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\r\n}\r\n\r\nfunction PopoverTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\r\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\r\n}\r\n\r\nfunction PopoverContent({\r\n className,\r\n align = \"center\",\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\r\n return (\r\n <PopoverPrimitive.Portal>\r\n <PopoverPrimitive.Content\r\n data-slot=\"popover-content\"\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </PopoverPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction PopoverAnchor({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\r\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\r\n}\r\n\r\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"popover-header\"\r\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\r\n return (\r\n <div\r\n data-slot=\"popover-title\"\r\n className={cn(\"font-medium\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction PopoverDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"p\">) {\r\n return (\r\n <p\r\n data-slot=\"popover-description\"\r\n className={cn(\"text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Popover,\r\n PopoverTrigger,\r\n PopoverContent,\r\n PopoverAnchor,\r\n PopoverHeader,\r\n PopoverTitle,\r\n PopoverDescription,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Progress as ProgressPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Progress({\r\n className,\r\n value,\r\n ...props\r\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\r\n return (\r\n <ProgressPrimitive.Root\r\n data-slot=\"progress\"\r\n className={cn(\r\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ProgressPrimitive.Indicator\r\n data-slot=\"progress-indicator\"\r\n className=\"h-full w-full flex-1 bg-primary transition-all\"\r\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\r\n />\r\n </ProgressPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Progress }\r\n","import * as React from \"react\"\r\nimport { CircleIcon } from \"lucide-react\"\r\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction RadioGroup({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\r\n return (\r\n <RadioGroupPrimitive.Root\r\n data-slot=\"radio-group\"\r\n className={cn(\"grid gap-3\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction RadioGroupItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\r\n return (\r\n <RadioGroupPrimitive.Item\r\n data-slot=\"radio-group-item\"\r\n className={cn(\r\n \"aspect-square size-4 shrink-0 rounded-full border border-input text-primary shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <RadioGroupPrimitive.Indicator\r\n data-slot=\"radio-group-indicator\"\r\n className=\"relative flex items-center justify-center\"\r\n >\r\n <CircleIcon className=\"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-primary\" />\r\n </RadioGroupPrimitive.Indicator>\r\n </RadioGroupPrimitive.Item>\r\n )\r\n}\r\n\r\nexport { RadioGroup, RadioGroupItem }\r\n","\"use client\"\r\n\r\nimport { GripVerticalIcon } from \"lucide-react\"\r\nimport * as ResizablePrimitive from \"react-resizable-panels\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction ResizablePanelGroup({\r\n className,\r\n direction,\r\n ...props\r\n}: (ResizablePrimitive.GroupProps | any) & { direction?: 'horizontal' | 'vertical' }) {\r\n return (\r\n <ResizablePrimitive.Group\r\n data-slot=\"resizable-panel-group\"\r\n orientation={props.orientation || direction}\r\n className={cn(\r\n \"flex h-full w-full aria-[orientation=vertical]:flex-col\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\r\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\r\n}\r\n\r\nfunction ResizableHandle({\r\n withHandle,\r\n className,\r\n ...props\r\n}: ResizablePrimitive.SeparatorProps & {\r\n withHandle?: boolean\r\n}) {\r\n return (\r\n <ResizablePrimitive.Separator\r\n data-slot=\"resizable-handle\"\r\n className={cn(\r\n \"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {withHandle && (\r\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border\">\r\n <GripVerticalIcon className=\"size-2.5\" />\r\n </div>\r\n )}\r\n </ResizablePrimitive.Separator>\r\n )\r\n}\r\n\r\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup }\r\n","import * as React from \"react\"\r\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction ScrollArea({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\r\n return (\r\n <ScrollAreaPrimitive.Root\r\n data-slot=\"scroll-area\"\r\n className={cn(\"relative\", className)}\r\n {...props}\r\n >\r\n <ScrollAreaPrimitive.Viewport\r\n data-slot=\"scroll-area-viewport\"\r\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1\"\r\n >\r\n {children}\r\n </ScrollAreaPrimitive.Viewport>\r\n <ScrollBar />\r\n <ScrollAreaPrimitive.Corner />\r\n </ScrollAreaPrimitive.Root>\r\n )\r\n}\r\n\r\nfunction ScrollBar({\r\n className,\r\n orientation = \"vertical\",\r\n ...props\r\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\r\n return (\r\n <ScrollAreaPrimitive.ScrollAreaScrollbar\r\n data-slot=\"scroll-area-scrollbar\"\r\n orientation={orientation}\r\n className={cn(\r\n \"flex touch-none p-px transition-colors select-none\",\r\n orientation === \"vertical\" &&\r\n \"h-full w-2.5 border-l border-l-transparent\",\r\n orientation === \"horizontal\" &&\r\n \"h-2.5 flex-col border-t border-t-transparent\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ScrollAreaPrimitive.ScrollAreaThumb\r\n data-slot=\"scroll-area-thumb\"\r\n className=\"relative flex-1 rounded-full bg-border\"\r\n />\r\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\r\n )\r\n}\r\n\r\nexport { ScrollArea, ScrollBar }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\r\nimport { Select as SelectPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Select({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\r\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\r\n}\r\n\r\nfunction SelectGroup({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\r\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\r\n}\r\n\r\nfunction SelectValue({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\r\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\r\n}\r\n\r\nfunction SelectTrigger({\r\n className,\r\n size = \"default\",\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\r\n size?: \"sm\" | \"default\"\r\n}) {\r\n return (\r\n <SelectPrimitive.Trigger\r\n data-slot=\"select-trigger\"\r\n data-size={size}\r\n className={cn(\r\n \"flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <SelectPrimitive.Icon asChild>\r\n <ChevronDownIcon className=\"size-4 opacity-50\" />\r\n </SelectPrimitive.Icon>\r\n </SelectPrimitive.Trigger>\r\n )\r\n}\r\n\r\nfunction SelectContent({\r\n className,\r\n children,\r\n position = \"item-aligned\",\r\n align = \"center\",\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\r\n return (\r\n <SelectPrimitive.Portal>\r\n <SelectPrimitive.Content\r\n data-slot=\"select-content\"\r\n className={cn(\r\n \"relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\r\n position === \"popper\" &&\r\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\r\n className\r\n )}\r\n position={position}\r\n align={align}\r\n {...props}\r\n >\r\n <SelectScrollUpButton />\r\n <SelectPrimitive.Viewport\r\n className={cn(\r\n \"p-1\",\r\n position === \"popper\" &&\r\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\r\n )}\r\n >\r\n {children}\r\n </SelectPrimitive.Viewport>\r\n <SelectScrollDownButton />\r\n </SelectPrimitive.Content>\r\n </SelectPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction SelectLabel({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\r\n return (\r\n <SelectPrimitive.Label\r\n data-slot=\"select-label\"\r\n className={cn(\"px-2 py-1.5 text-xs text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SelectItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\r\n return (\r\n <SelectPrimitive.Item\r\n data-slot=\"select-item\"\r\n className={cn(\r\n \"relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span\r\n data-slot=\"select-item-indicator\"\r\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\r\n >\r\n <SelectPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </SelectPrimitive.ItemIndicator>\r\n </span>\r\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\r\n </SelectPrimitive.Item>\r\n )\r\n}\r\n\r\nfunction SelectSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\r\n return (\r\n <SelectPrimitive.Separator\r\n data-slot=\"select-separator\"\r\n className={cn(\"pointer-events-none -mx-1 my-1 h-px bg-border\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SelectScrollUpButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\r\n return (\r\n <SelectPrimitive.ScrollUpButton\r\n data-slot=\"select-scroll-up-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronUpIcon className=\"size-4\" />\r\n </SelectPrimitive.ScrollUpButton>\r\n )\r\n}\r\n\r\nfunction SelectScrollDownButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\r\n return (\r\n <SelectPrimitive.ScrollDownButton\r\n data-slot=\"select-scroll-down-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronDownIcon className=\"size-4\" />\r\n </SelectPrimitive.ScrollDownButton>\r\n )\r\n}\r\n\r\nexport {\r\n Select,\r\n SelectContent,\r\n SelectGroup,\r\n SelectItem,\r\n SelectLabel,\r\n SelectScrollDownButton,\r\n SelectScrollUpButton,\r\n SelectSeparator,\r\n SelectTrigger,\r\n SelectValue,\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Separator({\r\n className,\r\n orientation = \"horizontal\",\r\n decorative = true,\r\n ...props\r\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\r\n return (\r\n <SeparatorPrimitive.Root\r\n data-slot=\"separator\"\r\n decorative={decorative}\r\n orientation={orientation}\r\n className={cn(\r\n \"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Separator }\r\n","import * as React from \"react\"\r\nimport { XIcon } from \"lucide-react\"\r\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\r\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\r\n}\r\n\r\nfunction SheetTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\r\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\r\n}\r\n\r\nfunction SheetClose({\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\r\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\r\n}\r\n\r\nfunction SheetPortal({\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\r\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\r\n}\r\n\r\nfunction SheetOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\r\n return (\r\n <SheetPrimitive.Overlay\r\n data-slot=\"sheet-overlay\"\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SheetContent({\r\n className,\r\n children,\r\n side = \"right\",\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <SheetPortal>\r\n <SheetOverlay />\r\n <SheetPrimitive.Content\r\n data-slot=\"sheet-content\"\r\n className={cn(\r\n \"fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500\",\r\n side === \"right\" &&\r\n \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\r\n side === \"left\" &&\r\n \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\r\n side === \"top\" &&\r\n \"inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\r\n side === \"bottom\" &&\r\n \"inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <SheetPrimitive.Close className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary\">\r\n <XIcon className=\"size-4\" />\r\n <span className=\"sr-only\">Close</span>\r\n </SheetPrimitive.Close>\r\n )}\r\n </SheetPrimitive.Content>\r\n </SheetPortal>\r\n )\r\n}\r\n\r\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"sheet-header\"\r\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"sheet-footer\"\r\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SheetTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\r\n return (\r\n <SheetPrimitive.Title\r\n data-slot=\"sheet-title\"\r\n className={cn(\"font-semibold text-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SheetDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\r\n return (\r\n <SheetPrimitive.Description\r\n data-slot=\"sheet-description\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Sheet,\r\n SheetTrigger,\r\n SheetClose,\r\n SheetPortal,\r\n SheetOverlay,\r\n SheetContent,\r\n SheetHeader,\r\n SheetFooter,\r\n SheetTitle,\r\n SheetDescription,\r\n}\r\n\r\n","'use client'\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeftIcon } from \"lucide-react\"\nimport { Slot } from \"radix-ui\"\n\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Separator } from \"@/components/ui/separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/ui/sheet\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"13rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"15rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n return {\n state: \"expanded\" as const,\n open: true,\n setOpen: () => {},\n openMobile: false,\n setOpenMobile: () => {},\n isMobile: false,\n toggleSidebar: () => {},\n }\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n React.useEffect(() => {\n const handleCustomToggle = (e: Event) => {\n const customEvent = e as CustomEvent<{ open?: boolean }>\n if (customEvent.detail && typeof customEvent.detail.open === 'boolean') {\n if (isMobile) {\n setOpenMobile(customEvent.detail.open)\n } else {\n setOpen(customEvent.detail.open)\n }\n } else {\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"amoga:toggle-sidebar\", handleCustomToggle)\n return () => window.removeEventListener(\"amoga:toggle-sidebar\", handleCustomToggle)\n }, [isMobile, setOpenMobile, setOpen, toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer hidden text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"relative flex w-full flex-1 flex-col bg-background\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background shadow-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"div\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"a\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","'use client'\n\nimport * as React from \"react\"\r\n\r\nconst MOBILE_BREAKPOINT = 768\r\n\r\nexport function useIsMobile() {\r\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\r\n\r\n React.useEffect(() => {\r\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\r\n const onChange = () => {\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\r\n }\r\n mql.addEventListener(\"change\", onChange)\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\r\n return () => mql.removeEventListener(\"change\", onChange)\r\n }, [])\r\n\r\n return !!isMobile\r\n}\r\n","import { cn } from \"@/lib/utils\"\r\n\r\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"skeleton\"\r\n className={cn(\"animate-pulse rounded-md bg-accent\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Skeleton }\r\n","'use client'\n\nimport * as React from \"react\"\r\nimport { Slider as SliderPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Slider({\r\n className,\r\n defaultValue,\r\n value,\r\n min = 0,\r\n max = 100,\r\n ...props\r\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\r\n const _values = React.useMemo(\r\n () =>\r\n Array.isArray(value)\r\n ? value\r\n : Array.isArray(defaultValue)\r\n ? defaultValue\r\n : [min, max],\r\n [value, defaultValue, min, max]\r\n )\r\n\r\n return (\r\n <SliderPrimitive.Root\r\n data-slot=\"slider\"\r\n defaultValue={defaultValue}\r\n value={value}\r\n min={min}\r\n max={max}\r\n className={cn(\r\n \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <SliderPrimitive.Track\r\n data-slot=\"slider-track\"\r\n className={cn(\r\n \"relative grow overflow-hidden rounded-full bg-muted data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\r\n )}\r\n >\r\n <SliderPrimitive.Range\r\n data-slot=\"slider-range\"\r\n className={cn(\r\n \"absolute bg-primary data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\r\n )}\r\n />\r\n </SliderPrimitive.Track>\r\n {Array.from({ length: _values.length }, (_, index) => (\r\n <SliderPrimitive.Thumb\r\n data-slot=\"slider-thumb\"\r\n key={index}\r\n className=\"block size-4 shrink-0 rounded-full border border-primary bg-white shadow-sm ring-ring/50 transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\r\n />\r\n ))}\r\n </SliderPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Slider }\r\n","\"use client\"\r\n\r\nimport {\r\n CircleCheckIcon,\r\n InfoIcon,\r\n Loader2Icon,\r\n OctagonXIcon,\r\n TriangleAlertIcon,\r\n} from \"lucide-react\"\r\nimport { useTheme } from \"next-themes\"\r\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\r\n\r\nconst Toaster = ({ ...props }: ToasterProps) => {\r\n const { theme = \"system\" } = useTheme()\r\n\r\n return (\r\n <Sonner\r\n theme={theme as ToasterProps[\"theme\"]}\r\n className=\"toaster group\"\r\n closeButton={true}\r\n toastOptions={{\r\n classNames: {\r\n closeButton:\r\n '!left-auto !right-2.5 !top-2.5 !transform-none !bg-transparent !border-none !shadow-none text-muted-foreground hover:text-foreground transition-colors cursor-pointer p-0.5 rounded-xs hover:bg-muted/50',\r\n },\r\n }}\r\n icons={{\r\n success: <CircleCheckIcon className=\"size-4\" />,\r\n info: <InfoIcon className=\"size-4\" />,\r\n warning: <TriangleAlertIcon className=\"size-4\" />,\r\n error: <OctagonXIcon className=\"size-4\" />,\r\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\r\n }}\r\n style={\r\n {\r\n \"--normal-bg\": \"var(--popover)\",\r\n \"--normal-text\": \"var(--popover-foreground)\",\r\n \"--normal-border\": \"var(--border)\",\r\n \"--border-radius\": \"var(--radius)\",\r\n } as React.CSSProperties\r\n }\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Toaster, Sonner, type ToasterProps }\r\n","import { Loader2Icon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\r\n return (\r\n <Loader2Icon\r\n role=\"status\"\r\n aria-label=\"Loading\"\r\n className={cn(\"size-4 animate-spin\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Spinner }\r\n","import * as React from \"react\"\r\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Switch({\r\n className,\r\n size = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\r\n size?: \"sm\" | \"default\"\r\n}) {\r\n return (\r\n <SwitchPrimitive.Root\r\n data-slot=\"switch\"\r\n data-size={size}\r\n className={cn(\r\n \"peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <SwitchPrimitive.Thumb\r\n data-slot=\"switch-thumb\"\r\n className={cn(\r\n \"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground\"\r\n )}\r\n />\r\n </SwitchPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Switch }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\r\n return (\r\n <div\r\n data-slot=\"table-container\"\r\n className=\"relative w-full overflow-x-auto\"\r\n >\r\n <table\r\n data-slot=\"table\"\r\n className={cn(\"w-full caption-bottom text-sm\", className)}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\r\n return (\r\n <thead\r\n data-slot=\"table-header\"\r\n className={cn(\"[&_tr]:border-b\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\r\n return (\r\n <tbody\r\n data-slot=\"table-body\"\r\n className={cn(\"[&_tr:last-child]:border-0\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\r\n return (\r\n <tfoot\r\n data-slot=\"table-footer\"\r\n className={cn(\r\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\r\n return (\r\n <tr\r\n data-slot=\"table-row\"\r\n className={cn(\r\n \"border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\r\n return (\r\n <th\r\n data-slot=\"table-head\"\r\n className={cn(\r\n \"h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\r\n return (\r\n <td\r\n data-slot=\"table-cell\"\r\n className={cn(\r\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableCaption({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"caption\">) {\r\n return (\r\n <caption\r\n data-slot=\"table-caption\"\r\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Table,\r\n TableHeader,\r\n TableBody,\r\n TableFooter,\r\n TableHead,\r\n TableRow,\r\n TableCell,\r\n TableCaption,\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Tabs as TabsPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Tabs({\r\n className,\r\n orientation = \"horizontal\",\r\n ...props\r\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\r\n return (\r\n <TabsPrimitive.Root\r\n data-slot=\"tabs\"\r\n data-orientation={orientation}\r\n orientation={orientation}\r\n className={cn(\r\n \"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nconst tabsListVariants = cva(\r\n \"group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-muted\",\r\n line: \"gap-1 bg-transparent\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction TabsList({\r\n className,\r\n variant = \"default\",\r\n ...props\r\n}: React.ComponentProps<typeof TabsPrimitive.List> &\r\n VariantProps<typeof tabsListVariants>) {\r\n return (\r\n <TabsPrimitive.List\r\n data-slot=\"tabs-list\"\r\n data-variant={variant}\r\n className={cn(tabsListVariants({ variant }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TabsTrigger({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\r\n return (\r\n <TabsPrimitive.Trigger\r\n data-slot=\"tabs-trigger\"\r\n className={cn(\r\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent\",\r\n \"data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground\",\r\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TabsContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\r\n return (\r\n <TabsPrimitive.Content\r\n data-slot=\"tabs-content\"\r\n className={cn(\"flex-1 outline-none\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\r\n","import * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\r\n return (\r\n <textarea\r\n data-slot=\"textarea\"\r\n className={cn(\r\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Textarea }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Toggle as TogglePrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst toggleVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n outline:\r\n \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\r\n },\r\n size: {\r\n default: \"h-9 min-w-9 px-2\",\r\n sm: \"h-8 min-w-8 px-1.5\",\r\n lg: \"h-10 min-w-10 px-2.5\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Toggle({\r\n className,\r\n variant,\r\n size,\r\n ...props\r\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\r\n VariantProps<typeof toggleVariants>) {\r\n return (\r\n <TogglePrimitive.Root\r\n data-slot=\"toggle\"\r\n className={cn(toggleVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Toggle, toggleVariants }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\nimport { ToggleGroup as ToggleGroupPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { toggleVariants } from \"@/components/ui/toggle\"\r\n\r\nconst ToggleGroupContext = React.createContext<\r\n VariantProps<typeof toggleVariants> & {\r\n spacing?: number\r\n }\r\n>({\r\n size: \"default\",\r\n variant: \"default\",\r\n spacing: 0,\r\n})\r\n\r\nfunction ToggleGroup({\r\n className,\r\n variant,\r\n size,\r\n spacing = 0,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\r\n VariantProps<typeof toggleVariants> & {\r\n spacing?: number\r\n }) {\r\n return (\r\n <ToggleGroupPrimitive.Root\r\n data-slot=\"toggle-group\"\r\n data-variant={variant}\r\n data-size={size}\r\n data-spacing={spacing}\r\n style={{ \"--gap\": spacing } as React.CSSProperties}\r\n className={cn(\r\n \"group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ToggleGroupContext.Provider value={{ variant, size, spacing }}>\r\n {children}\r\n </ToggleGroupContext.Provider>\r\n </ToggleGroupPrimitive.Root>\r\n )\r\n}\r\n\r\nfunction ToggleGroupItem({\r\n className,\r\n children,\r\n variant,\r\n size,\r\n ...props\r\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\r\n VariantProps<typeof toggleVariants>) {\r\n const context = React.useContext(ToggleGroupContext)\r\n\r\n return (\r\n <ToggleGroupPrimitive.Item\r\n data-slot=\"toggle-group-item\"\r\n data-variant={context.variant || variant}\r\n data-size={context.size || size}\r\n data-spacing={context.spacing}\r\n className={cn(\r\n toggleVariants({\r\n variant: context.variant || variant,\r\n size: context.size || size,\r\n }),\r\n \"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10\",\r\n \"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </ToggleGroupPrimitive.Item>\r\n )\r\n}\r\n\r\nexport { ToggleGroup, ToggleGroupItem }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction TooltipProvider({\r\n delayDuration = 0,\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\r\n return (\r\n <TooltipPrimitive.Provider\r\n data-slot=\"tooltip-provider\"\r\n delayDuration={delayDuration}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction Tooltip({\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\r\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\r\n}\r\n\r\nfunction TooltipTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\r\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\r\n}\r\n\r\nfunction TooltipContent({\r\n className,\r\n sideOffset = 0,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\r\n return (\r\n <TooltipPrimitive.Portal>\r\n <TooltipPrimitive.Content\r\n data-slot=\"tooltip-content\"\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\r\n </TooltipPrimitive.Content>\r\n </TooltipPrimitive.Portal>\r\n )\r\n}\r\n\r\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\r\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../../lib/utils'\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n actions?: React.ReactNode\n}\n\n\nexport function PageHeader({\n title,\n description,\n badge,\n breadcrumbs,\n actions,\n className,\n children,\n ...props\n}: PageHeaderProps) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-4 pb-4 md:pb-6',\n className\n )}\n {...props}\n >\n {breadcrumbs && <div className='text-sm text-muted-foreground'>{breadcrumbs}</div>}\n <div className='flex flex-col gap-4 md:flex-row md:items-center md:justify-between'>\n <div className='space-y-1.5'>\n <div className='flex items-center gap-2.5'>\n <h1 className='text-2xl font-bold tracking-tight text-foreground sm:text-3xl'>\n {title}\n </h1>\n {badge && <div>{badge}</div>}\n </div>\n {description && (\n <p className='text-sm text-muted-foreground sm:text-base'>\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div className='flex flex-wrap items-center gap-2 md:self-center'>\n {actions}\n </div>\n )}\n </div>\n {children}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../ui/table'\nimport { Skeleton } from '../ui/skeleton'\nimport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyMedia,\n} from '../ui/empty'\nimport { Button } from '../ui/button'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '../../../lib/utils'\n\nexport interface ColumnDef<T> {\n key: string\n header: React.ReactNode\n cell?: (row: T, index: number) => React.ReactNode\n className?: string\n headerClassName?: string\n}\n\nexport interface DataTableProps<T> {\n columns: ColumnDef<T>[]\n data: T[]\n isLoading?: boolean\n loadingRowCount?: number\n emptyTitle?: string\n emptyDescription?: string\n emptyIcon?: React.ReactNode\n onRowClick?: (row: T) => void\n keyExtractor?: (row: T, index: number) => string | number\n pagination?: {\n pageIndex: number\n pageSize: number\n totalCount: number\n onPageChange: (page: number) => void\n }\n className?: string\n}\n\nexport function DataTable<T>({\n columns,\n data,\n isLoading = false,\n loadingRowCount = 5,\n emptyTitle = 'No data found',\n emptyDescription = 'There are no records matching your criteria.',\n emptyIcon,\n onRowClick,\n keyExtractor,\n pagination,\n className,\n}: DataTableProps<T>) {\n const totalPages = pagination\n ? Math.max(1, Math.ceil(pagination.totalCount / pagination.pageSize))\n : 1\n\n return (\n <div className={cn('space-y-4', className)}>\n <div className='rounded-md border bg-card'>\n <Table>\n <TableHeader>\n <TableRow>\n {columns.map((col) => (\n <TableHead key={col.key} className={col.headerClassName}>\n {col.header}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {isLoading ? (\n Array.from({ length: loadingRowCount }).map((_, rIdx) => (\n <TableRow key={`loading-${rIdx}`}>\n {columns.map((col) => (\n <TableCell key={`loading-${rIdx}-${col.key}`} className={col.className}>\n <Skeleton className='h-5 w-full max-w-[160px]' />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : data.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columns.length} className='h-48 text-center'>\n <Empty className='py-6'>\n <EmptyHeader>\n {emptyIcon && <EmptyMedia>{emptyIcon}</EmptyMedia>}\n <EmptyTitle>{emptyTitle}</EmptyTitle>\n <EmptyDescription>{emptyDescription}</EmptyDescription>\n </EmptyHeader>\n </Empty>\n </TableCell>\n </TableRow>\n ) : (\n data.map((row, rIdx) => {\n const key = keyExtractor ? keyExtractor(row, rIdx) : rIdx\n return (\n <TableRow\n key={key}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={cn(\n onRowClick && 'cursor-pointer hover:bg-muted/50 transition-colors'\n )}\n >\n {columns.map((col) => (\n <TableCell key={`${key}-${col.key}`} className={col.className}>\n {col.cell\n ? col.cell(row, rIdx)\n : ((row as Record<string, unknown>)[col.key] as React.ReactNode) ?? '—'}\n </TableCell>\n ))}\n </TableRow>\n )\n })\n )}\n </TableBody>\n </Table>\n </div>\n\n {pagination && (\n <div className='flex items-center justify-between px-2 text-sm text-muted-foreground'>\n <div>\n Showing{' '}\n <span className='font-medium text-foreground'>\n {data.length > 0 ? pagination.pageIndex * pagination.pageSize + 1 : 0}\n </span>{' '}\n to{' '}\n <span className='font-medium text-foreground'>\n {Math.min(\n (pagination.pageIndex + 1) * pagination.pageSize,\n pagination.totalCount\n )}\n </span>{' '}\n of{' '}\n <span className='font-medium text-foreground'>\n {pagination.totalCount}\n </span>{' '}\n results\n </div>\n <div className='flex items-center gap-2'>\n <Button\n variant='outline'\n size='sm'\n disabled={pagination.pageIndex <= 0 || isLoading}\n onClick={() => pagination.onPageChange(pagination.pageIndex - 1)}\n >\n <ChevronLeft className='mr-1 h-4 w-4' />\n Previous\n </Button>\n <span className='text-xs'>\n Page {pagination.pageIndex + 1} of {totalPages}\n </span>\n <Button\n variant='outline'\n size='sm'\n disabled={pagination.pageIndex + 1 >= totalPages || isLoading}\n onClick={() => pagination.onPageChange(pagination.pageIndex + 1)}\n >\n Next\n <ChevronRight className='ml-1 h-4 w-4' />\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../../lib/utils'\n\nexport const statusBadgeVariants = cva(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n status: {\n default: 'bg-primary/10 text-primary border border-primary/20',\n secondary: 'bg-secondary text-secondary-foreground border border-border',\n success: 'bg-emerald-500/15 text-emerald-700 dark:text-emerald-400 border border-emerald-500/30',\n warning: 'bg-amber-500/15 text-amber-700 dark:text-amber-400 border border-amber-500/30',\n info: 'bg-sky-500/15 text-sky-700 dark:text-sky-400 border border-sky-500/30',\n destructive: 'bg-destructive/15 text-destructive border border-destructive/30',\n outline: 'text-foreground border border-border bg-transparent',\n },\n size: {\n sm: 'px-2 py-0.25 text-[11px]',\n default: 'px-2.5 py-0.5 text-xs',\n lg: 'px-3 py-1 text-sm',\n },\n },\n defaultVariants: {\n status: 'default',\n size: 'default',\n },\n }\n)\n\nconst dotColorMap: Record<string, string> = {\n default: 'bg-primary',\n secondary: 'bg-secondary-foreground',\n success: 'bg-emerald-500',\n warning: 'bg-amber-500',\n info: 'bg-sky-500',\n destructive: 'bg-destructive',\n outline: 'bg-foreground',\n}\n\nexport interface StatusBadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof statusBadgeVariants> {\n dot?: boolean\n pulse?: boolean\n icon?: React.ReactNode\n}\n\nexport function StatusBadge({\n status = 'default',\n size = 'default',\n dot = false,\n pulse = false,\n icon,\n className,\n children,\n ...props\n}: StatusBadgeProps) {\n const activeStatus = status || 'default'\n return (\n <div\n className={cn(statusBadgeVariants({ status, size }), className)}\n {...props}\n >\n {dot && (\n <span className='relative flex h-2 w-2'>\n {pulse && (\n <span\n className={cn(\n 'absolute inline-flex h-full w-full animate-ping rounded-full opacity-75',\n dotColorMap[activeStatus] || 'bg-primary'\n )}\n />\n )}\n <span\n className={cn(\n 'relative inline-flex h-2 w-2 rounded-full',\n dotColorMap[activeStatus] || 'bg-primary'\n )}\n />\n </span>\n )}\n {icon && <span className='shrink-0'>{icon}</span>}\n <span>{children}</span>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Input } from '../ui/input'\nimport { Button } from '../ui/button'\nimport { Badge } from '../ui/badge'\nimport { Search as SearchIcon, X } from 'lucide-react'\nimport { cn } from '../../../lib/utils'\n\nexport interface ActiveFilter {\n key: string\n label: string\n value: string\n onRemove: () => void\n}\n\nexport interface FilterBarProps {\n searchPlaceholder?: string\n searchValue?: string\n onSearchChange?: (value: string) => void\n filters?: React.ReactNode\n activeFilters?: ActiveFilter[]\n onClearAll?: () => void\n actions?: React.ReactNode\n className?: string\n}\n\nexport function FilterBar({\n searchPlaceholder = 'Search...',\n searchValue,\n onSearchChange,\n filters,\n activeFilters = [],\n onClearAll,\n actions,\n className,\n}: FilterBarProps) {\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n <div className='flex flex-col gap-2.5 sm:flex-row sm:items-center sm:justify-between'>\n <div className='flex flex-1 flex-wrap items-center gap-2'>\n {onSearchChange && (\n <div className='relative w-full sm:w-64 md:w-80'>\n <SearchIcon className='absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground' />\n <Input\n placeholder={searchPlaceholder}\n value={searchValue ?? ''}\n onChange={(e) => onSearchChange(e.target.value)}\n className='pl-8'\n />\n </div>\n )}\n {filters}\n </div>\n {actions && (\n <div className='flex items-center gap-2 shrink-0'>\n {actions}\n </div>\n )}\n </div>\n\n {activeFilters.length > 0 && (\n <div className='flex flex-wrap items-center gap-2 pt-1'>\n <span className='text-xs font-medium text-muted-foreground'>\n Active filters:\n </span>\n {activeFilters.map((filter) => (\n <Badge\n key={filter.key}\n variant='secondary'\n className='gap-1 pr-1 text-xs'\n >\n <span>{filter.label}:</span>\n <span className='font-normal text-foreground'>{filter.value}</span>\n <button\n type='button'\n onClick={filter.onRemove}\n className='rounded-full p-0.5 hover:bg-muted-foreground/20'\n aria-label={`Remove filter ${filter.label}`}\n >\n <X className='h-3 w-3' />\n </button>\n </Badge>\n ))}\n {onClearAll && (\n <Button\n variant='ghost'\n size='sm'\n onClick={onClearAll}\n className='h-6 px-2 text-xs text-muted-foreground hover:text-foreground'\n >\n Clear all\n </Button>\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Separator } from '../ui/separator'\nimport { cn } from '../../../lib/utils'\n\nexport interface FormSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n actions?: React.ReactNode\n separator?: boolean\n columns?: 1 | 2 | 3 | 4\n}\n\n\nexport function FormSection({\n title,\n description,\n actions,\n separator = true,\n columns = 1,\n className,\n children,\n ...props\n}: FormSectionProps) {\n const gridColsClass = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 md:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n }[columns]\n\n return (\n <div className={cn('space-y-4 py-2', className)} {...props}>\n <div className='flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between'>\n <div>\n <h2 className='text-base font-semibold text-foreground sm:text-lg'>\n {title}\n </h2>\n {description && (\n <p className='text-xs text-muted-foreground sm:text-sm'>\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div className='flex items-center gap-2 pt-2 sm:pt-0'>\n {actions}\n </div>\n )}\n </div>\n\n {separator && <Separator />}\n\n <div className={cn('grid gap-4 sm:gap-6', gridColsClass)}>\n {children}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Card, CardContent, CardHeader, CardTitle } from '../ui/card'\nimport { ArrowDownRight, ArrowUpRight, Minus } from 'lucide-react'\nimport { cn } from '../../../lib/utils'\n\nexport interface MetricCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string\n value: string | number\n description?: string\n icon?: React.ComponentType<{ className?: string }> | React.ReactNode\n change?: {\n value: string | number\n trend?: 'up' | 'down' | 'neutral'\n label?: string\n }\n footer?: React.ReactNode\n}\n\nexport function MetricCard({\n title,\n value,\n description,\n icon: Icon,\n change,\n footer,\n className,\n ...props\n}: MetricCardProps) {\n const trendColor = change?.trend === 'up'\n ? 'text-emerald-600 dark:text-emerald-400'\n : change?.trend === 'down'\n ? 'text-rose-600 dark:text-rose-400'\n : 'text-muted-foreground'\n\n return (\n <Card className={cn('overflow-hidden shadow-xs transition-shadow hover:shadow-md', className)} {...props}>\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium text-muted-foreground'>\n {title}\n </CardTitle>\n {Icon && (\n <div className='rounded-md bg-muted p-2 text-muted-foreground'>\n {typeof Icon === 'function' ? <Icon className='h-4 w-4' /> : Icon}\n </div>\n )}\n </CardHeader>\n <CardContent className='space-y-1.5'>\n <div className='text-2xl font-bold tracking-tight text-foreground'>\n {value}\n </div>\n {(change || description) && (\n <div className='flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground'>\n {change && (\n <span className={cn('inline-flex items-center font-medium', trendColor)}>\n {change.trend === 'up' && <ArrowUpRight className='mr-0.5 h-3.5 w-3.5' />}\n {change.trend === 'down' && <ArrowDownRight className='mr-0.5 h-3.5 w-3.5' />}\n {change.trend === 'neutral' && <Minus className='mr-0.5 h-3.5 w-3.5' />}\n {change.value}\n </span>\n )}\n {change?.label && <span>{change.label}</span>}\n {!change && description && <span>{description}</span>}\n </div>\n )}\n {footer && <div className='pt-2'>{footer}</div>}\n </CardContent>\n </Card>\n )\n}\n","import { cn } from '../../../lib/utils'\r\nimport {\r\n AlertDialog,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogTitle,\r\n} from '../ui/alert-dialog'\r\nimport { Button } from '../ui/button'\r\n\r\ntype ConfirmDialogProps = {\r\n open: boolean\r\n onOpenChange: (open: boolean) => void\r\n title: React.ReactNode\r\n disabled?: boolean\r\n desc: React.JSX.Element | string\r\n cancelBtnText?: string\r\n confirmText?: React.ReactNode\r\n destructive?: boolean\r\n isLoading?: boolean\r\n className?: string\r\n children?: React.ReactNode\r\n} & (\r\n | { form: string; handleConfirm?: undefined }\r\n | { form?: undefined; handleConfirm: () => void }\r\n)\r\n\r\nexport function ConfirmDialog(props: ConfirmDialogProps) {\r\n const {\r\n title,\r\n desc,\r\n children,\r\n className,\r\n confirmText,\r\n cancelBtnText,\r\n destructive,\r\n isLoading,\r\n disabled = false,\r\n form,\r\n handleConfirm,\r\n ...actions\r\n } = props\r\n return (\r\n <AlertDialog {...actions}>\r\n <AlertDialogContent className={cn(className && className)}>\r\n <AlertDialogHeader className='text-start'>\r\n <AlertDialogTitle>{title}</AlertDialogTitle>\r\n <AlertDialogDescription asChild>\r\n <div>{desc}</div>\r\n </AlertDialogDescription>\r\n </AlertDialogHeader>\r\n {children}\r\n <AlertDialogFooter>\r\n <AlertDialogCancel disabled={isLoading}>\r\n {cancelBtnText ?? 'Cancel'}\r\n </AlertDialogCancel>\r\n <Button\r\n type={form ? 'submit' : 'button'}\r\n form={form}\r\n onClick={handleConfirm}\r\n variant={destructive ? 'destructive' : 'default'}\r\n disabled={disabled || isLoading}\r\n >\r\n {confirmText ?? 'Continue'}\r\n </Button>\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n )\r\n}\r\n","'use client'\n\nimport * as React from 'react'\r\nimport { Eye, EyeOff } from 'lucide-react'\r\nimport { cn } from '../../../lib/utils'\r\nimport { Button } from '../ui/button'\r\n\r\ntype PasswordInputProps = Omit<\r\n React.InputHTMLAttributes<HTMLInputElement>,\r\n 'type'\r\n> & {\r\n ref?: React.Ref<HTMLInputElement>\r\n}\r\n\r\nexport function PasswordInput({\r\n className,\r\n disabled,\r\n ref,\r\n ...props\r\n}: PasswordInputProps) {\r\n const [showPassword, setShowPassword] = React.useState(false)\r\n\r\n return (\r\n <div className={cn('relative rounded-md', className)}>\r\n <input\r\n type={showPassword ? 'text' : 'password'}\r\n className='flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50'\r\n ref={ref}\r\n disabled={disabled}\r\n {...props}\r\n />\r\n <Button\r\n type='button'\r\n size='icon'\r\n variant='ghost'\r\n disabled={disabled}\r\n className='absolute inset-e-1 top-1/2 h-6 w-6 -translate-y-1/2 rounded-md text-muted-foreground'\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n >\r\n {showPassword ? <Eye size={18} /> : <EyeOff size={18} />}\r\n <span className='sr-only'>\r\n {showPassword ? 'Hide password' : 'Show password'}\r\n </span>\r\n </Button>\r\n </div>\r\n )\r\n}\r\n","import { createBrowserClient } from '@supabase/ssr'\r\n\r\nlet clientSingleton: ReturnType<typeof createBrowserClient> | null = null\r\n\r\nexport function createClient() {\r\n if (typeof window === 'undefined') {\r\n return createBrowserClient(\r\n process.env.NEXT_PUBLIC_SUPABASE_URL!,\r\n process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!\r\n )\r\n }\r\n\r\n if (!clientSingleton) {\r\n clientSingleton = createBrowserClient(\r\n process.env.NEXT_PUBLIC_SUPABASE_URL!,\r\n process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!\r\n )\r\n }\r\n return clientSingleton;\r\n}\r\n","import { create } from 'zustand'\r\nimport { getCookie, setCookie, removeCookie } from '@/lib/cookies'\r\n\r\nconst ACCESS_TOKEN = 'thisisjustarandomstring'\r\nconst USER_DATA = 'auth_user_data'\r\n\r\ninterface AuthUser {\r\n id: string // 👈 ADD THIS - the auth.uid() from Supabase\r\n accountNo: string\r\n email: string\r\n name?: string\r\n picture?: string\r\n role: string[]\r\n exp: number\r\n}\r\n\r\ninterface AuthState {\r\n auth: {\r\n user: AuthUser | null\r\n setUser: (user: AuthUser | null) => void\r\n accessToken: string\r\n setAccessToken: (accessToken: string) => void\r\n resetAccessToken: () => void\r\n reset: () => void\r\n }\r\n}\r\n\r\nexport const useAuthStore = create<AuthState>()((set) => {\r\n const cookieState = getCookie(ACCESS_TOKEN)\r\n let initToken = ''\r\n if (cookieState) {\r\n try {\r\n initToken = JSON.parse(cookieState)\r\n } catch {\r\n removeCookie(ACCESS_TOKEN)\r\n }\r\n }\r\n\r\n const userCookie = getCookie(USER_DATA)\r\n let initUser: AuthUser | null = null\r\n if (userCookie) {\r\n try {\r\n const parsed = JSON.parse(decodeURIComponent(userCookie))\r\n if (parsed.exp && parsed.exp > Date.now()) {\r\n initUser = parsed\r\n } else {\r\n removeCookie(ACCESS_TOKEN)\r\n removeCookie(USER_DATA)\r\n }\r\n } catch {\r\n initUser = null\r\n removeCookie(USER_DATA)\r\n }\r\n }\r\n\r\n return {\r\n auth: {\r\n user: initUser,\r\n setUser: (user) =>\r\n set((state) => {\r\n if (user) {\r\n setCookie(USER_DATA, encodeURIComponent(JSON.stringify(user)))\r\n } else {\r\n removeCookie(USER_DATA)\r\n }\r\n return { ...state, auth: { ...state.auth, user } }\r\n }),\r\n accessToken: initUser ? initToken : '',\r\n setAccessToken: (accessToken) =>\r\n set((state) => {\r\n setCookie(ACCESS_TOKEN, JSON.stringify(accessToken))\r\n return { ...state, auth: { ...state.auth, accessToken } }\r\n }),\r\n resetAccessToken: () =>\r\n set((state) => {\r\n removeCookie(ACCESS_TOKEN)\r\n return { ...state, auth: { ...state.auth, accessToken: '' } }\r\n }),\r\n reset: () =>\r\n set((state) => {\r\n removeCookie(ACCESS_TOKEN)\r\n removeCookie(USER_DATA)\r\n return {\r\n ...state,\r\n auth: { ...state.auth, user: null, accessToken: '' },\r\n }\r\n }),\r\n },\r\n }\r\n})","/**\r\n * Cookie utility functions using manual document.cookie approach\r\n * Replaces js-cookie dependency for better consistency\r\n */\r\n\r\nconst DEFAULT_MAX_AGE = 60 * 60 * 24 * 7 // 7 days\r\n\r\n/**\r\n * Get a cookie value by name\r\n */\r\nexport function getCookie(name: string): string | undefined {\r\n if (typeof document === 'undefined') return undefined\r\n\r\n const value = `; ${document.cookie}`\r\n const parts = value.split(`; ${name}=`)\r\n if (parts.length === 2) {\r\n const cookieValue = parts.pop()?.split(';').shift()\r\n return cookieValue\r\n }\r\n return undefined\r\n}\r\n\r\n/**\r\n * Set a cookie with name, value, and optional max age\r\n */\r\nexport function setCookie(\r\n name: string,\r\n value: string,\r\n maxAge: number = DEFAULT_MAX_AGE\r\n): void {\r\n if (typeof document === 'undefined') return\r\n\r\n document.cookie = `${name}=${value}; path=/; max-age=${maxAge}`\r\n}\r\n\r\n/**\r\n * Remove a cookie by setting its max age to 0\r\n */\r\nexport function removeCookie(name: string): void {\r\n if (typeof document === 'undefined') return\r\n\r\n document.cookie = `${name}=; path=/; max-age=0`\r\n}\r\n","'use client'\n\nimport { ConfirmDialog } from '@/components/confirm-dialog'\nimport { createClient } from '../../../lib/client'\nimport { useAuthStore } from '../../../stores/auth-store'\nimport { signOut as nextAuthSignOut } from 'next-auth/react'\n\ninterface SignOutDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\nexport function SignOutDialog({ open, onOpenChange }: SignOutDialogProps) {\n const handleSignOut = async () => {\n try {\n useAuthStore.getState().auth.reset()\n } catch (err) {\n // ignore\n }\n\n try {\n await nextAuthSignOut({ redirect: false })\n } catch (err) {\n // ignore\n }\n\n try {\n const supabase = createClient()\n await supabase.auth.signOut({ scope: 'global' }).catch(() => {})\n } catch (err) {\n // ignore\n }\n\n try {\n if (typeof window !== 'undefined') {\n localStorage.clear()\n sessionStorage.clear()\n }\n } catch (e) {\n // ignore\n }\n\n // Direct window location navigation to server-side logout route.\n // Purges session cookies on response and redirects instantly to /sign-in (zero blank screen).\n window.location.href = '/api/auth/mobile-logout'\n }\n\n return (\n <ConfirmDialog\n open={open}\n onOpenChange={onOpenChange}\n title='Sign out'\n desc='Are you sure you want to sign out? You will need to sign in again to access your account.'\n confirmText='Sign out'\n destructive\n handleConfirm={handleSignOut}\n className='sm:max-w-sm'\n />\n )\n}\n","'use client'\r\n\r\nimport { useEffect } from 'react'\r\nimport { Check, Moon, Sun } from 'lucide-react'\r\nimport { cn } from '../../../lib/utils'\r\nimport { useTheme } from '../../../context/theme-provider'\r\nimport { Button } from '../ui/button'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '../ui/dropdown-menu'\r\n\r\nexport function ThemeSwitch() {\r\n const { theme, resolvedTheme, setTheme } = useTheme()\r\n\r\n /* Update theme-color meta tag\r\n * when theme is updated */\r\n useEffect(() => {\r\n const themeColor = resolvedTheme === 'dark' ? '#020817' : '#fff'\r\n const metaThemeColor = document.querySelector(\"meta[name='theme-color']\")\r\n if (metaThemeColor) metaThemeColor.setAttribute('content', themeColor)\r\n }, [resolvedTheme])\r\n\r\n return (\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n variant='ghost'\r\n size='icon'\r\n className='size-8 shrink-0 scale-95 rounded-full'\r\n >\r\n <Sun className='size-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90' />\r\n <Moon className='absolute size-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0' />\r\n <span className='sr-only'>Toggle theme</span>\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align='end'>\r\n <DropdownMenuItem onClick={() => setTheme('light')}>\r\n Light{' '}\r\n <Check\r\n size={14}\r\n className={cn('ms-auto', theme !== 'light' && 'hidden')}\r\n />\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => setTheme('dark')}>\r\n Dark\r\n <Check\r\n size={14}\r\n className={cn('ms-auto', theme !== 'dark' && 'hidden')}\r\n />\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => setTheme('system')}>\r\n System\r\n <Check\r\n size={14}\r\n className={cn('ms-auto', theme !== 'system' && 'hidden')}\r\n />\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { createContext, useContext, useEffect, useState, useMemo } from 'react'\r\nimport { getCookie, setCookie, removeCookie } from '@/lib/cookies'\r\n\r\ntype Theme = 'dark' | 'light' | 'system'\r\ntype ResolvedTheme = Exclude<Theme, 'system'>\r\n\r\nconst DEFAULT_THEME = 'system'\r\nconst THEME_COOKIE_NAME = 'vite-ui-theme'\r\nconst THEME_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 // 1 year\r\n\r\ntype ThemeProviderProps = {\r\n children: React.ReactNode\r\n defaultTheme?: Theme\r\n storageKey?: string\r\n}\r\n\r\ntype ThemeProviderState = {\r\n defaultTheme: Theme\r\n resolvedTheme: ResolvedTheme\r\n theme: Theme\r\n setTheme: (theme: Theme) => void\r\n resetTheme: () => void\r\n}\r\n\r\nconst initialState: ThemeProviderState = {\r\n defaultTheme: DEFAULT_THEME,\r\n resolvedTheme: 'light',\r\n theme: DEFAULT_THEME,\r\n setTheme: () => null,\r\n resetTheme: () => null,\r\n}\r\n\r\nconst ThemeContext = createContext<ThemeProviderState>(initialState)\r\n\r\nfunction getSystemTheme(): ResolvedTheme {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches\r\n ? 'dark'\r\n : 'light'\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n defaultTheme = DEFAULT_THEME,\r\n storageKey = THEME_COOKIE_NAME,\r\n ...props\r\n}: ThemeProviderProps) {\r\n const [theme, _setTheme] = useState<Theme>(\r\n () => {\r\n if (typeof window === 'undefined') return defaultTheme\r\n return (getCookie(storageKey) as Theme) || defaultTheme\r\n }\r\n )\r\n const [systemTheme, setSystemTheme] = useState<ResolvedTheme>(() => getSystemTheme())\r\n\r\n const resolvedTheme = useMemo((): ResolvedTheme => {\r\n if (theme === 'system') {\r\n return systemTheme\r\n }\r\n return theme as ResolvedTheme\r\n }, [theme, systemTheme])\r\n\r\n useEffect(() => {\r\n const root = window.document.documentElement\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n\r\n const applyTheme = (currentResolvedTheme: ResolvedTheme) => {\r\n root.classList.remove('light')\r\n root.classList.toggle('dark', currentResolvedTheme === 'dark')\r\n }\r\n\r\n const handleChange = () => {\r\n const nextSystemTheme = mediaQuery.matches ? 'dark' : 'light'\r\n setSystemTheme(nextSystemTheme)\r\n if (theme === 'system') {\r\n applyTheme(nextSystemTheme)\r\n }\r\n }\r\n\r\n applyTheme(resolvedTheme)\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [theme, resolvedTheme])\r\n\r\n const setTheme = (theme: Theme) => {\r\n setCookie(storageKey, theme, THEME_COOKIE_MAX_AGE)\r\n _setTheme(theme)\r\n }\r\n\r\n const resetTheme = () => {\r\n removeCookie(storageKey)\r\n _setTheme(DEFAULT_THEME)\r\n }\r\n\r\n const contextValue = {\r\n defaultTheme,\r\n resolvedTheme,\r\n resetTheme,\r\n theme,\r\n setTheme,\r\n }\r\n\r\n return (\r\n <ThemeContext value={contextValue} {...props}>\r\n {children}\r\n </ThemeContext>\r\n )\r\n}\r\n\r\n// eslint-disable-next-line react-refresh/only-export-components\r\nexport const useTheme = () => {\r\n const context = useContext(ThemeContext)\r\n\r\n if (!context) throw new Error('useTheme must be used within a ThemeProvider')\r\n\r\n return context\r\n}\r\n","'use client'\n\nimport { Check, Palette } from 'lucide-react'\r\nimport { cn } from '../../../lib/utils'\r\nimport {\r\n colorThemes,\r\n useColorTheme,\r\n} from '../../../context/color-theme-provider'\r\nimport { useTheme } from '../../../context/theme-provider'\r\nimport { Button } from '../ui/button'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../ui/popover'\r\nimport { Separator } from '../ui/separator'\r\n\r\nexport function ThemeSelector() {\r\n const { colorTheme, setColorTheme } = useColorTheme()\r\n const { theme, setTheme } = useTheme()\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant='ghost'\r\n size='icon'\r\n className='relative size-8 shrink-0 scale-95 rounded-full'\r\n aria-label='Select color theme'\r\n >\r\n <Palette className='size-[1.2rem]' />\r\n {/* Active color indicator dot */}\r\n <span\r\n className='absolute -top-0.5 -right-0.5 size-2.5 rounded-full ring-2 ring-background'\r\n style={{\r\n backgroundColor:\r\n colorThemes.find((t) => t.name === colorTheme)?.preview ??\r\n 'currentColor',\r\n }}\r\n />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n align='end'\r\n className='w-[280px] p-3'\r\n >\r\n {/* Appearance Section */}\r\n <div className='mb-1'>\r\n <p className='mb-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground'>\r\n Appearance\r\n </p>\r\n <div className='grid grid-cols-3 gap-1.5'>\r\n {(\r\n [\r\n { value: 'light', label: 'Light' },\r\n { value: 'dark', label: 'Dark' },\r\n { value: 'system', label: 'System' },\r\n ] as const\r\n ).map((mode) => (\r\n <button\r\n key={mode.value}\r\n onClick={() => setTheme(mode.value)}\r\n className={cn(\r\n 'flex items-center justify-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-all',\r\n 'hover:bg-accent hover:text-accent-foreground',\r\n theme === mode.value\r\n ? 'bg-primary text-primary-foreground shadow-sm'\r\n : 'bg-muted/50 text-muted-foreground'\r\n )}\r\n >\r\n {mode.label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <Separator className='my-3' />\r\n\r\n {/* Color Theme Section */}\r\n <div>\r\n <p className='mb-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground'>\r\n Color Theme\r\n </p>\r\n <div className='max-h-[280px] space-y-0.5 overflow-y-auto'>\r\n {colorThemes.map((ct) => (\r\n <button\r\n key={ct.name}\r\n onClick={() => setColorTheme(ct.name)}\r\n className={cn(\r\n 'flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 transition-all',\r\n colorTheme === ct.name\r\n ? 'bg-primary text-primary-foreground'\r\n : 'hover:bg-accent'\r\n )}\r\n aria-label={`Select ${ct.label} color theme`}\r\n >\r\n <div className='flex gap-0.5'>\r\n {ct.colors.slice(0, 5).map((color, i) => (\r\n <span\r\n key={i}\r\n className={cn(\r\n 'size-2.5 rounded-full',\r\n colorTheme === ct.name\r\n ? 'ring-1 ring-primary-foreground/30'\r\n : 'ring-1 ring-border/40'\r\n )}\r\n style={{ backgroundColor: color }}\r\n />\r\n ))}\r\n </div>\r\n <span className='text-xs font-medium'>{ct.label}</span>\r\n {colorTheme === ct.name && (\r\n <Check className='ml-auto size-3.5' strokeWidth={3} />\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { createContext, useContext, useEffect, useState, useMemo, useCallback } from 'react'\r\nimport { getCookie, setCookie, removeCookie } from '@/lib/cookies'\r\nimport { useTheme } from '@/context/theme-provider'\r\n\r\n// Each color theme defines light and dark mode CSS variable overrides\r\nexport interface ColorThemeTokens {\r\n light: Record<string, string>\r\n dark: Record<string, string>\r\n}\r\n\r\nexport interface ColorThemeDefinition {\r\n name: string\r\n label: string\r\n category?: 'tweakcn' | 'accent' | 'palette'\r\n preview: string // primary color for preview swatch\r\n colors: string[] // 5 representative hex colors for dot previews\r\n tokens: ColorThemeTokens\r\n}\r\n\r\nconst COLOR_THEME_COOKIE = 'color-theme'\r\nconst COLOR_THEME_COOKIE_MAX_AGE = 60 * 60 * 24 * 365\r\n\r\n// All CSS variables themes can override — cleared before applying a new theme\r\nconst ALL_THEME_VARS = [\r\n '--background', '--foreground',\r\n '--card', '--card-foreground',\r\n '--popover', '--popover-foreground',\r\n '--primary', '--primary-foreground',\r\n '--secondary', '--secondary-foreground',\r\n '--muted', '--muted-foreground',\r\n '--accent', '--accent-foreground',\r\n '--destructive',\r\n '--border', '--input', '--ring',\r\n '--chart-1', '--chart-2', '--chart-3', '--chart-4', '--chart-5',\r\n // sidebar — must also be cleared so it picks up the new background\r\n '--sidebar', '--sidebar-foreground',\r\n '--sidebar-primary', '--sidebar-primary-foreground',\r\n '--sidebar-accent', '--sidebar-accent-foreground',\r\n '--sidebar-border', '--sidebar-ring',\r\n]\r\n\r\n// ── Helper to build a simple (primary-only) token pair ──\r\nfunction simplePalette(\r\n lightPrimary: string,\r\n lightRing: string,\r\n darkPrimary: string,\r\n darkRing: string,\r\n charts: { light: string[]; dark: string[] }\r\n): ColorThemeTokens {\r\n return {\r\n light: {\r\n '--primary': lightPrimary,\r\n '--primary-foreground': 'oklch(0.984 0.003 247.858)',\r\n '--ring': lightRing,\r\n '--chart-1': charts.light[0],\r\n '--chart-2': charts.light[1],\r\n '--chart-3': charts.light[2],\r\n '--chart-4': charts.light[3],\r\n '--chart-5': charts.light[4],\r\n },\r\n dark: {\r\n '--primary': darkPrimary,\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': darkRing,\r\n '--chart-1': charts.dark[0],\r\n '--chart-2': charts.dark[1],\r\n '--chart-3': charts.dark[2],\r\n '--chart-4': charts.dark[3],\r\n '--chart-5': charts.dark[4],\r\n },\r\n }\r\n}\r\n\r\n// ── Curated color palettes ──\r\nexport const colorThemes: ColorThemeDefinition[] = [\r\n // ─── Tweakcn & Custom Themes ─────────────────────────────────\r\n {\r\n name: 'catppuccin',\r\n label: 'Catppuccin',\r\n category: 'tweakcn',\r\n preview: '#cba6f7',\r\n colors: ['#cba6f7', '#89b4fa', '#f38ba8', '#a6e3a1', '#1e1e2e'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.01 260)',\r\n '--foreground': 'oklch(0.35 0.03 260)',\r\n '--card': 'oklch(0.98 0.005 260)',\r\n '--card-foreground': 'oklch(0.35 0.03 260)',\r\n '--popover': 'oklch(0.98 0.005 260)',\r\n '--popover-foreground': 'oklch(0.35 0.03 260)',\r\n '--primary': 'oklch(0.53 0.24 290)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.9 0.02 260)',\r\n '--secondary-foreground': 'oklch(0.35 0.03 260)',\r\n '--muted': 'oklch(0.92 0.015 260)',\r\n '--muted-foreground': 'oklch(0.52 0.03 260)',\r\n '--accent': 'oklch(0.72 0.17 330)',\r\n '--accent-foreground': 'oklch(0.99 0 0)',\r\n '--border': 'oklch(0.85 0.02 260)',\r\n '--input': 'oklch(0.85 0.02 260)',\r\n '--ring': 'oklch(0.53 0.24 290)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.18 0.03 260)',\r\n '--foreground': 'oklch(0.88 0.03 260)',\r\n '--card': 'oklch(0.15 0.03 260)',\r\n '--card-foreground': 'oklch(0.88 0.03 260)',\r\n '--popover': 'oklch(0.15 0.03 260)',\r\n '--popover-foreground': 'oklch(0.88 0.03 260)',\r\n '--primary': 'oklch(0.76 0.16 290)',\r\n '--primary-foreground': 'oklch(0.15 0.03 260)',\r\n '--secondary': 'oklch(0.24 0.03 260)',\r\n '--secondary-foreground': 'oklch(0.88 0.03 260)',\r\n '--muted': 'oklch(0.24 0.03 260)',\r\n '--muted-foreground': 'oklch(0.68 0.03 260)',\r\n '--accent': 'oklch(0.82 0.12 330)',\r\n '--accent-foreground': 'oklch(0.15 0.03 260)',\r\n '--border': 'oklch(0.32 0.03 260)',\r\n '--input': 'oklch(0.32 0.03 260)',\r\n '--ring': 'oklch(0.76 0.16 290)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'tokyo-night',\r\n label: 'Tokyo Night',\r\n category: 'tweakcn',\r\n preview: '#7aa2f7',\r\n colors: ['#7aa2f7', '#bb9af7', '#7dcfff', '#f7768e', '#1a1b26'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.02 260)',\r\n '--foreground': 'oklch(0.35 0.12 260)',\r\n '--card': 'oklch(0.97 0.015 260)',\r\n '--card-foreground': 'oklch(0.35 0.12 260)',\r\n '--popover': 'oklch(0.97 0.015 260)',\r\n '--popover-foreground': 'oklch(0.35 0.12 260)',\r\n '--primary': 'oklch(0.55 0.18 260)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.03 260)',\r\n '--secondary-foreground': 'oklch(0.35 0.12 260)',\r\n '--muted': 'oklch(0.9 0.02 260)',\r\n '--muted-foreground': 'oklch(0.5 0.08 260)',\r\n '--border': 'oklch(0.82 0.03 260)',\r\n '--input': 'oklch(0.82 0.03 260)',\r\n '--ring': 'oklch(0.55 0.18 260)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.16 0.03 260)',\r\n '--foreground': 'oklch(0.78 0.06 260)',\r\n '--card': 'oklch(0.14 0.03 260)',\r\n '--card-foreground': 'oklch(0.78 0.06 260)',\r\n '--popover': 'oklch(0.14 0.03 260)',\r\n '--popover-foreground': 'oklch(0.78 0.06 260)',\r\n '--primary': 'oklch(0.72 0.14 260)',\r\n '--primary-foreground': 'oklch(0.14 0.03 260)',\r\n '--secondary': 'oklch(0.22 0.03 260)',\r\n '--secondary-foreground': 'oklch(0.78 0.06 260)',\r\n '--muted': 'oklch(0.22 0.03 260)',\r\n '--muted-foreground': 'oklch(0.52 0.06 260)',\r\n '--border': 'oklch(0.26 0.03 260)',\r\n '--input': 'oklch(0.26 0.03 260)',\r\n '--ring': 'oklch(0.72 0.14 260)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'dracula',\r\n label: 'Dracula',\r\n category: 'tweakcn',\r\n preview: '#bd93f9',\r\n colors: ['#bd93f9', '#ff79c6', '#8be9fd', '#50fa7b', '#282a36'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.01 280)',\r\n '--foreground': 'oklch(0.22 0.04 280)',\r\n '--card': 'oklch(0.98 0.005 280)',\r\n '--card-foreground': 'oklch(0.22 0.04 280)',\r\n '--primary': 'oklch(0.52 0.12 280)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.9 0.02 280)',\r\n '--secondary-foreground': 'oklch(0.22 0.04 280)',\r\n '--muted': 'oklch(0.92 0.01 280)',\r\n '--muted-foreground': 'oklch(0.5 0.04 280)',\r\n '--border': 'oklch(0.85 0.02 280)',\r\n '--input': 'oklch(0.85 0.02 280)',\r\n '--ring': 'oklch(0.52 0.12 280)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.22 0.04 280)',\r\n '--foreground': 'oklch(0.97 0.01 280)',\r\n '--card': 'oklch(0.18 0.04 280)',\r\n '--card-foreground': 'oklch(0.97 0.01 280)',\r\n '--popover': 'oklch(0.18 0.04 280)',\r\n '--popover-foreground': 'oklch(0.97 0.01 280)',\r\n '--primary': 'oklch(0.72 0.16 295)',\r\n '--primary-foreground': 'oklch(0.22 0.04 280)',\r\n '--secondary': 'oklch(0.3 0.04 280)',\r\n '--secondary-foreground': 'oklch(0.97 0.01 280)',\r\n '--muted': 'oklch(0.3 0.04 280)',\r\n '--muted-foreground': 'oklch(0.65 0.04 280)',\r\n '--border': 'oklch(0.35 0.04 280)',\r\n '--input': 'oklch(0.35 0.04 280)',\r\n '--ring': 'oklch(0.72 0.16 295)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'nord',\r\n label: 'Nord',\r\n category: 'tweakcn',\r\n preview: '#88c0d0',\r\n colors: ['#88c0d0', '#81a1c1', '#5e81ac', '#bf616a', '#2e3440'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.01 230)',\r\n '--foreground': 'oklch(0.26 0.03 230)',\r\n '--card': 'oklch(0.97 0.005 230)',\r\n '--card-foreground': 'oklch(0.26 0.03 230)',\r\n '--primary': 'oklch(0.55 0.08 230)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.89 0.015 230)',\r\n '--secondary-foreground': 'oklch(0.26 0.03 230)',\r\n '--muted': 'oklch(0.89 0.015 230)',\r\n '--muted-foreground': 'oklch(0.42 0.03 230)',\r\n '--border': 'oklch(0.85 0.015 230)',\r\n '--input': 'oklch(0.85 0.015 230)',\r\n '--ring': 'oklch(0.55 0.08 230)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.26 0.03 230)',\r\n '--foreground': 'oklch(0.95 0.01 230)',\r\n '--card': 'oklch(0.22 0.03 230)',\r\n '--card-foreground': 'oklch(0.95 0.01 230)',\r\n '--popover': 'oklch(0.22 0.03 230)',\r\n '--popover-foreground': 'oklch(0.95 0.01 230)',\r\n '--primary': 'oklch(0.76 0.08 210)',\r\n '--primary-foreground': 'oklch(0.26 0.03 230)',\r\n '--secondary': 'oklch(0.32 0.03 230)',\r\n '--secondary-foreground': 'oklch(0.95 0.01 230)',\r\n '--muted': 'oklch(0.32 0.03 230)',\r\n '--muted-foreground': 'oklch(0.85 0.015 230)',\r\n '--border': 'oklch(0.36 0.03 230)',\r\n '--input': 'oklch(0.36 0.03 230)',\r\n '--ring': 'oklch(0.76 0.08 210)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'gruvbox',\r\n label: 'Gruvbox',\r\n category: 'tweakcn',\r\n preview: '#fe8019',\r\n colors: ['#fe8019', '#fabd2f', '#b8bb26', '#83a598', '#282828'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.03 85)',\r\n '--foreground': 'oklch(0.28 0.03 60)',\r\n '--card': 'oklch(0.92 0.04 85)',\r\n '--card-foreground': 'oklch(0.28 0.03 60)',\r\n '--primary': 'oklch(0.55 0.16 45)',\r\n '--primary-foreground': 'oklch(0.96 0.03 85)',\r\n '--secondary': 'oklch(0.88 0.04 85)',\r\n '--secondary-foreground': 'oklch(0.28 0.03 60)',\r\n '--muted': 'oklch(0.88 0.04 85)',\r\n '--muted-foreground': 'oklch(0.52 0.03 60)',\r\n '--border': 'oklch(0.82 0.04 85)',\r\n '--input': 'oklch(0.82 0.04 85)',\r\n '--ring': 'oklch(0.55 0.16 45)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.22 0.01 60)',\r\n '--foreground': 'oklch(0.88 0.04 85)',\r\n '--card': 'oklch(0.18 0.01 60)',\r\n '--card-foreground': 'oklch(0.88 0.04 85)',\r\n '--popover': 'oklch(0.18 0.01 60)',\r\n '--popover-foreground': 'oklch(0.88 0.04 85)',\r\n '--primary': 'oklch(0.68 0.18 55)',\r\n '--primary-foreground': 'oklch(0.22 0.01 60)',\r\n '--secondary': 'oklch(0.28 0.02 60)',\r\n '--secondary-foreground': 'oklch(0.88 0.04 85)',\r\n '--muted': 'oklch(0.28 0.02 60)',\r\n '--muted-foreground': 'oklch(0.68 0.03 80)',\r\n '--border': 'oklch(0.35 0.02 60)',\r\n '--input': 'oklch(0.35 0.02 60)',\r\n '--ring': 'oklch(0.68 0.18 55)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'supabase',\r\n label: 'Supabase',\r\n category: 'tweakcn',\r\n preview: '#3ecf8e',\r\n colors: ['#3ecf8e', '#10b981', '#047857', '#a7f3d0', '#121212'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.98 0.005 240)',\r\n '--foreground': 'oklch(0.15 0.02 240)',\r\n '--card': 'oklch(1 0 0)',\r\n '--card-foreground': 'oklch(0.15 0.02 240)',\r\n '--primary': 'oklch(0.55 0.15 160)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.92 0.01 240)',\r\n '--secondary-foreground': 'oklch(0.15 0.02 240)',\r\n '--muted': 'oklch(0.95 0.01 240)',\r\n '--muted-foreground': 'oklch(0.48 0.02 240)',\r\n '--border': 'oklch(0.9 0.01 240)',\r\n '--input': 'oklch(0.9 0.01 240)',\r\n '--ring': 'oklch(0.55 0.15 160)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.14 0.005 240)',\r\n '--foreground': 'oklch(0.94 0.005 240)',\r\n '--card': 'oklch(0.16 0.005 240)',\r\n '--card-foreground': 'oklch(0.94 0.005 240)',\r\n '--popover': 'oklch(0.16 0.005 240)',\r\n '--popover-foreground': 'oklch(0.94 0.005 240)',\r\n '--primary': 'oklch(0.74 0.17 160)',\r\n '--primary-foreground': 'oklch(0.14 0.005 240)',\r\n '--secondary': 'oklch(0.22 0.005 240)',\r\n '--secondary-foreground': 'oklch(0.94 0.005 240)',\r\n '--muted': 'oklch(0.22 0.005 240)',\r\n '--muted-foreground': 'oklch(0.68 0.005 240)',\r\n '--border': 'oklch(0.24 0.005 240)',\r\n '--input': 'oklch(0.24 0.005 240)',\r\n '--ring': 'oklch(0.74 0.17 160)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'tweakcn-sunset',\r\n label: 'Tweakcn Sunset',\r\n category: 'tweakcn',\r\n preview: '#f97316',\r\n colors: ['#f97316', '#ec4899', '#8b5cf6', '#3b82f6', '#0f172a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.02 50)',\r\n '--foreground': 'oklch(0.25 0.05 40)',\r\n '--card': 'oklch(0.94 0.03 50)',\r\n '--card-foreground': 'oklch(0.25 0.05 40)',\r\n '--primary': 'oklch(0.62 0.22 45)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.05 50)',\r\n '--secondary-foreground': 'oklch(0.25 0.05 40)',\r\n '--muted': 'oklch(0.94 0.03 50)',\r\n '--muted-foreground': 'oklch(0.55 0.08 40)',\r\n '--border': 'oklch(0.85 0.06 50)',\r\n '--input': 'oklch(0.85 0.06 50)',\r\n '--ring': 'oklch(0.62 0.22 45)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.02 50)',\r\n '--foreground': 'oklch(0.94 0.01 50)',\r\n '--card': 'oklch(0.16 0.02 50)',\r\n '--card-foreground': 'oklch(0.94 0.01 50)',\r\n '--popover': 'oklch(0.16 0.02 50)',\r\n '--popover-foreground': 'oklch(0.94 0.01 50)',\r\n '--primary': 'oklch(0.705 0.213 47.604)',\r\n '--primary-foreground': 'oklch(0.12 0.02 50)',\r\n '--secondary': 'oklch(0.22 0.02 50)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 50)',\r\n '--muted': 'oklch(0.22 0.02 50)',\r\n '--muted-foreground': 'oklch(0.68 0.02 50)',\r\n '--border': 'oklch(0.3 0.02 50)',\r\n '--input': 'oklch(0.3 0.02 50)',\r\n '--ring': 'oklch(0.705 0.213 47.604)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'tweakcn-ocean',\r\n label: 'Tweakcn Ocean',\r\n category: 'tweakcn',\r\n preview: '#06b6d4',\r\n colors: ['#06b6d4', '#0284c7', '#3b82f6', '#10b981', '#0f172a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.02 200)',\r\n '--foreground': 'oklch(0.22 0.06 200)',\r\n '--card': 'oklch(0.94 0.03 200)',\r\n '--card-foreground': 'oklch(0.22 0.06 200)',\r\n '--primary': 'oklch(0.55 0.15 200)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.05 200)',\r\n '--secondary-foreground': 'oklch(0.22 0.06 200)',\r\n '--muted': 'oklch(0.94 0.03 200)',\r\n '--muted-foreground': 'oklch(0.48 0.06 200)',\r\n '--border': 'oklch(0.85 0.05 200)',\r\n '--input': 'oklch(0.85 0.05 200)',\r\n '--ring': 'oklch(0.55 0.15 200)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.03 210)',\r\n '--foreground': 'oklch(0.92 0.02 210)',\r\n '--card': 'oklch(0.16 0.03 210)',\r\n '--card-foreground': 'oklch(0.92 0.02 210)',\r\n '--popover': 'oklch(0.16 0.03 210)',\r\n '--popover-foreground': 'oklch(0.92 0.02 210)',\r\n '--primary': 'oklch(0.68 0.15 200)',\r\n '--primary-foreground': 'oklch(0.12 0.03 210)',\r\n '--secondary': 'oklch(0.22 0.03 210)',\r\n '--secondary-foreground': 'oklch(0.92 0.02 210)',\r\n '--muted': 'oklch(0.22 0.03 210)',\r\n '--muted-foreground': 'oklch(0.68 0.03 210)',\r\n '--border': 'oklch(0.28 0.03 210)',\r\n '--input': 'oklch(0.28 0.03 210)',\r\n '--ring': 'oklch(0.68 0.15 200)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'tweakcn-midnight',\r\n label: 'Tweakcn Midnight',\r\n category: 'tweakcn',\r\n preview: '#8b5cf6',\r\n colors: ['#8b5cf6', '#d946ef', '#6366f1', '#ec4899', '#09090b'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.02 280)',\r\n '--foreground': 'oklch(0.22 0.08 280)',\r\n '--card': 'oklch(0.93 0.03 280)',\r\n '--card-foreground': 'oklch(0.22 0.08 280)',\r\n '--primary': 'oklch(0.55 0.22 280)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.04 280)',\r\n '--secondary-foreground': 'oklch(0.22 0.08 280)',\r\n '--muted': 'oklch(0.93 0.03 280)',\r\n '--muted-foreground': 'oklch(0.48 0.08 280)',\r\n '--border': 'oklch(0.84 0.04 280)',\r\n '--input': 'oklch(0.84 0.04 280)',\r\n '--ring': 'oklch(0.55 0.22 280)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.1 0.03 280)',\r\n '--foreground': 'oklch(0.93 0.02 280)',\r\n '--card': 'oklch(0.14 0.03 280)',\r\n '--card-foreground': 'oklch(0.93 0.02 280)',\r\n '--popover': 'oklch(0.14 0.03 280)',\r\n '--popover-foreground': 'oklch(0.93 0.02 280)',\r\n '--primary': 'oklch(0.72 0.18 280)',\r\n '--primary-foreground': 'oklch(0.1 0.03 280)',\r\n '--secondary': 'oklch(0.2 0.03 280)',\r\n '--secondary-foreground': 'oklch(0.93 0.02 280)',\r\n '--muted': 'oklch(0.2 0.03 280)',\r\n '--muted-foreground': 'oklch(0.68 0.03 280)',\r\n '--border': 'oklch(0.26 0.03 280)',\r\n '--input': 'oklch(0.26 0.03 280)',\r\n '--ring': 'oklch(0.72 0.18 280)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'synthwave-84',\r\n label: \"Synthwave '84\",\r\n category: 'tweakcn',\r\n preview: '#ff7edb',\r\n colors: ['#ff7edb', '#36f9f6', '#fe4450', '#72f1b8', '#262335'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.02 330)',\r\n '--foreground': 'oklch(0.3 0.12 330)',\r\n '--card': 'oklch(0.94 0.03 330)',\r\n '--card-foreground': 'oklch(0.3 0.12 330)',\r\n '--primary': 'oklch(0.6 0.25 330)',\r\n '--primary-foreground': 'oklch(0.99 0 0)',\r\n '--secondary': 'oklch(0.88 0.05 330)',\r\n '--secondary-foreground': 'oklch(0.3 0.12 330)',\r\n '--muted': 'oklch(0.94 0.03 330)',\r\n '--muted-foreground': 'oklch(0.5 0.1 330)',\r\n '--border': 'oklch(0.84 0.06 330)',\r\n '--input': 'oklch(0.84 0.06 330)',\r\n '--ring': 'oklch(0.6 0.25 330)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.16 0.04 300)',\r\n '--foreground': 'oklch(0.95 0.02 330)',\r\n '--card': 'oklch(0.19 0.04 300)',\r\n '--card-foreground': 'oklch(0.95 0.02 330)',\r\n '--popover': 'oklch(0.19 0.04 300)',\r\n '--popover-foreground': 'oklch(0.95 0.02 330)',\r\n '--primary': 'oklch(0.74 0.2 330)',\r\n '--primary-foreground': 'oklch(0.16 0.04 300)',\r\n '--secondary': 'oklch(0.26 0.04 300)',\r\n '--secondary-foreground': 'oklch(0.95 0.02 330)',\r\n '--muted': 'oklch(0.26 0.04 300)',\r\n '--muted-foreground': 'oklch(0.75 0.12 190)',\r\n '--border': 'oklch(0.32 0.04 300)',\r\n '--input': 'oklch(0.32 0.04 300)',\r\n '--ring': 'oklch(0.74 0.2 330)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'everforest',\r\n label: 'Everforest',\r\n category: 'tweakcn',\r\n preview: '#a7c080',\r\n colors: ['#a7c080', '#dbbc7f', '#e67e80', '#7fbbb3', '#2d353b'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.02 90)',\r\n '--foreground': 'oklch(0.32 0.02 120)',\r\n '--card': 'oklch(0.93 0.025 90)',\r\n '--card-foreground': 'oklch(0.32 0.02 120)',\r\n '--primary': 'oklch(0.55 0.12 120)',\r\n '--primary-foreground': 'oklch(0.96 0.02 90)',\r\n '--secondary': 'oklch(0.88 0.02 90)',\r\n '--secondary-foreground': 'oklch(0.32 0.02 120)',\r\n '--muted': 'oklch(0.88 0.02 90)',\r\n '--muted-foreground': 'oklch(0.5 0.02 120)',\r\n '--border': 'oklch(0.82 0.02 90)',\r\n '--input': 'oklch(0.82 0.02 90)',\r\n '--ring': 'oklch(0.55 0.12 120)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.24 0.02 140)',\r\n '--foreground': 'oklch(0.88 0.03 110)',\r\n '--card': 'oklch(0.2 0.02 140)',\r\n '--card-foreground': 'oklch(0.88 0.03 110)',\r\n '--popover': 'oklch(0.2 0.02 140)',\r\n '--popover-foreground': 'oklch(0.88 0.03 110)',\r\n '--primary': 'oklch(0.74 0.11 125)',\r\n '--primary-foreground': 'oklch(0.24 0.02 140)',\r\n '--secondary': 'oklch(0.28 0.02 140)',\r\n '--secondary-foreground': 'oklch(0.88 0.03 110)',\r\n '--muted': 'oklch(0.28 0.02 140)',\r\n '--muted-foreground': 'oklch(0.68 0.02 120)',\r\n '--border': 'oklch(0.32 0.02 140)',\r\n '--input': 'oklch(0.32 0.02 140)',\r\n '--ring': 'oklch(0.74 0.11 125)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'rose-pine',\r\n label: 'Rosé Pine',\r\n category: 'tweakcn',\r\n preview: '#ebbcba',\r\n colors: ['#ebbcba', '#31748f', '#9ccfd8', '#c4a7e7', '#191724'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.97 0.01 60)',\r\n '--foreground': 'oklch(0.32 0.04 280)',\r\n '--card': 'oklch(0.93 0.015 60)',\r\n '--card-foreground': 'oklch(0.32 0.04 280)',\r\n '--primary': 'oklch(0.52 0.12 350)',\r\n '--primary-foreground': 'oklch(0.97 0.01 60)',\r\n '--secondary': 'oklch(0.88 0.015 60)',\r\n '--secondary-foreground': 'oklch(0.32 0.04 280)',\r\n '--muted': 'oklch(0.88 0.015 60)',\r\n '--muted-foreground': 'oklch(0.5 0.04 280)',\r\n '--border': 'oklch(0.82 0.015 60)',\r\n '--input': 'oklch(0.82 0.015 60)',\r\n '--ring': 'oklch(0.52 0.12 350)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.18 0.03 280)',\r\n '--foreground': 'oklch(0.9 0.02 280)',\r\n '--card': 'oklch(0.15 0.03 280)',\r\n '--card-foreground': 'oklch(0.9 0.02 280)',\r\n '--popover': 'oklch(0.15 0.03 280)',\r\n '--popover-foreground': 'oklch(0.9 0.02 280)',\r\n '--primary': 'oklch(0.78 0.08 20)',\r\n '--primary-foreground': 'oklch(0.18 0.03 280)',\r\n '--secondary': 'oklch(0.24 0.03 280)',\r\n '--secondary-foreground': 'oklch(0.9 0.02 280)',\r\n '--muted': 'oklch(0.24 0.03 280)',\r\n '--muted-foreground': 'oklch(0.65 0.02 280)',\r\n '--border': 'oklch(0.28 0.03 280)',\r\n '--input': 'oklch(0.28 0.03 280)',\r\n '--ring': 'oklch(0.78 0.08 20)',\r\n },\r\n },\r\n },\r\n // ─── Simple accent themes ─────────────────────────────────────\r\n {\r\n name: 'zinc',\r\n label: 'Zinc',\r\n preview: 'oklch(0.208 0.042 265.755)',\r\n colors: ['#71717a', '#fafafa', '#18181b', '#a1a1aa', '#d4d4d8'],\r\n tokens: {\r\n light: {\r\n '--primary': 'oklch(0.208 0.042 265.755)',\r\n '--primary-foreground': 'oklch(0.984 0.003 247.858)',\r\n '--ring': 'oklch(0.704 0.04 256.788)',\r\n '--chart-1': 'oklch(0.646 0.222 41.116)',\r\n '--chart-2': 'oklch(0.6 0.118 184.704)',\r\n '--chart-3': 'oklch(0.398 0.07 227.392)',\r\n '--chart-4': 'oklch(0.828 0.189 84.429)',\r\n '--chart-5': 'oklch(0.769 0.188 70.08)',\r\n },\r\n dark: {\r\n '--primary': 'oklch(0.929 0.013 255.508)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.551 0.027 264.364)',\r\n '--chart-1': 'oklch(0.488 0.243 264.376)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.769 0.188 70.08)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'blue',\r\n label: 'Blue',\r\n preview: 'oklch(0.546 0.245 262.881)',\r\n colors: ['#2563eb', '#3b82f6', '#93c5fd', '#bfdbfe', '#1e40af'],\r\n tokens: simplePalette(\r\n 'oklch(0.546 0.245 262.881)', 'oklch(0.546 0.245 262.881)',\r\n 'oklch(0.623 0.214 259.815)', 'oklch(0.623 0.214 259.815)',\r\n {\r\n light: ['oklch(0.546 0.245 262.881)', 'oklch(0.6 0.118 184.704)', 'oklch(0.398 0.07 227.392)', 'oklch(0.828 0.189 84.429)', 'oklch(0.769 0.188 70.08)'],\r\n dark: ['oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)', 'oklch(0.645 0.246 16.439)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'rose',\r\n label: 'Rose',\r\n preview: 'oklch(0.585 0.22 3.717)',\r\n colors: ['#e11d48', '#f43f5e', '#fda4af', '#fecdd3', '#9f1239'],\r\n tokens: simplePalette(\r\n 'oklch(0.585 0.22 3.717)', 'oklch(0.585 0.22 3.717)',\r\n 'oklch(0.645 0.246 16.439)', 'oklch(0.645 0.246 16.439)',\r\n {\r\n light: ['oklch(0.585 0.22 3.717)', 'oklch(0.6 0.118 184.704)', 'oklch(0.398 0.07 227.392)', 'oklch(0.828 0.189 84.429)', 'oklch(0.769 0.188 70.08)'],\r\n dark: ['oklch(0.645 0.246 16.439)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)', 'oklch(0.488 0.243 264.376)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'green',\r\n label: 'Green',\r\n preview: 'oklch(0.527 0.154 150.069)',\r\n colors: ['#16a34a', '#22c55e', '#86efac', '#bbf7d0', '#166534'],\r\n tokens: simplePalette(\r\n 'oklch(0.527 0.154 150.069)', 'oklch(0.527 0.154 150.069)',\r\n 'oklch(0.696 0.17 162.48)', 'oklch(0.696 0.17 162.48)',\r\n {\r\n light: ['oklch(0.527 0.154 150.069)', 'oklch(0.6 0.118 184.704)', 'oklch(0.398 0.07 227.392)', 'oklch(0.828 0.189 84.429)', 'oklch(0.769 0.188 70.08)'],\r\n dark: ['oklch(0.696 0.17 162.48)', 'oklch(0.623 0.214 259.815)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)', 'oklch(0.645 0.246 16.439)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'orange',\r\n label: 'Orange',\r\n preview: 'oklch(0.705 0.213 47.604)',\r\n colors: ['#f97316', '#fb923c', '#fdba74', '#fed7aa', '#c2410c'],\r\n tokens: {\r\n light: {\r\n '--primary': 'oklch(0.705 0.213 47.604)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.705 0.213 47.604)',\r\n '--chart-1': 'oklch(0.705 0.213 47.604)',\r\n '--chart-2': 'oklch(0.6 0.118 184.704)',\r\n '--chart-3': 'oklch(0.398 0.07 227.392)',\r\n '--chart-4': 'oklch(0.828 0.189 84.429)',\r\n '--chart-5': 'oklch(0.769 0.188 70.08)',\r\n },\r\n dark: {\r\n '--primary': 'oklch(0.769 0.188 70.08)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.769 0.188 70.08)',\r\n '--chart-1': 'oklch(0.769 0.188 70.08)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'violet',\r\n label: 'Violet',\r\n preview: 'oklch(0.541 0.281 293.009)',\r\n colors: ['#7c3aed', '#8b5cf6', '#c4b5fd', '#ddd6fe', '#5b21b6'],\r\n tokens: simplePalette(\r\n 'oklch(0.541 0.281 293.009)', 'oklch(0.541 0.281 293.009)',\r\n 'oklch(0.627 0.265 303.9)', 'oklch(0.627 0.265 303.9)',\r\n {\r\n light: ['oklch(0.541 0.281 293.009)', 'oklch(0.6 0.118 184.704)', 'oklch(0.398 0.07 227.392)', 'oklch(0.828 0.189 84.429)', 'oklch(0.769 0.188 70.08)'],\r\n dark: ['oklch(0.627 0.265 303.9)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.623 0.214 259.815)', 'oklch(0.645 0.246 16.439)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'amber',\r\n label: 'Amber',\r\n preview: 'oklch(0.769 0.172 70.67)',\r\n colors: ['#f59e0b', '#fbbf24', '#fcd34d', '#fde68a', '#92400e'],\r\n tokens: {\r\n light: {\r\n '--primary': 'oklch(0.555 0.163 48.998)',\r\n '--primary-foreground': 'oklch(0.984 0.003 247.858)',\r\n '--ring': 'oklch(0.555 0.163 48.998)',\r\n '--chart-1': 'oklch(0.769 0.172 70.67)',\r\n '--chart-2': 'oklch(0.6 0.118 184.704)',\r\n '--chart-3': 'oklch(0.398 0.07 227.392)',\r\n '--chart-4': 'oklch(0.828 0.189 84.429)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--primary': 'oklch(0.769 0.172 70.67)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.769 0.172 70.67)',\r\n '--chart-1': 'oklch(0.769 0.172 70.67)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'teal',\r\n label: 'Teal',\r\n preview: 'oklch(0.6 0.118 184.704)',\r\n colors: ['#14b8a6', '#2dd4bf', '#5eead4', '#99f6e4', '#115e59'],\r\n tokens: {\r\n light: {\r\n '--primary': 'oklch(0.485 0.118 192.351)',\r\n '--primary-foreground': 'oklch(0.984 0.003 247.858)',\r\n '--ring': 'oklch(0.485 0.118 192.351)',\r\n '--chart-1': 'oklch(0.6 0.118 184.704)',\r\n '--chart-2': 'oklch(0.546 0.245 262.881)',\r\n '--chart-3': 'oklch(0.398 0.07 227.392)',\r\n '--chart-4': 'oklch(0.828 0.189 84.429)',\r\n '--chart-5': 'oklch(0.769 0.188 70.08)',\r\n },\r\n dark: {\r\n '--primary': 'oklch(0.696 0.17 162.48)',\r\n '--primary-foreground': 'oklch(0.208 0.042 265.755)',\r\n '--ring': 'oklch(0.696 0.17 162.48)',\r\n '--chart-1': 'oklch(0.696 0.17 162.48)',\r\n '--chart-2': 'oklch(0.623 0.214 259.815)',\r\n '--chart-3': 'oklch(0.769 0.188 70.08)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n // New simple accent themes\r\n {\r\n name: 'ruby',\r\n label: 'Ruby',\r\n preview: '#b91c1c',\r\n colors: ['#b91c1c', '#ef4444', '#fca5a5', '#fee2e2', '#7f1d1d'],\r\n tokens: simplePalette(\r\n 'oklch(0.505 0.213 27.325)', 'oklch(0.505 0.213 27.325)',\r\n 'oklch(0.637 0.237 25.331)', 'oklch(0.637 0.237 25.331)',\r\n {\r\n light: ['oklch(0.505 0.213 27.325)', 'oklch(0.546 0.245 262.881)', 'oklch(0.527 0.154 150.069)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)'],\r\n dark: ['oklch(0.637 0.237 25.331)', 'oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'emerald',\r\n label: 'Emerald',\r\n preview: '#059669',\r\n colors: ['#059669', '#34d399', '#6ee7b7', '#a7f3d0', '#064e3b'],\r\n tokens: simplePalette(\r\n 'oklch(0.596 0.145 163.225)', 'oklch(0.596 0.145 163.225)',\r\n 'oklch(0.696 0.17 162.48)', 'oklch(0.696 0.17 162.48)',\r\n {\r\n light: ['oklch(0.596 0.145 163.225)', 'oklch(0.546 0.245 262.881)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.696 0.17 162.48)', 'oklch(0.623 0.214 259.815)', 'oklch(0.769 0.188 70.08)', 'oklch(0.645 0.246 16.439)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'sapphire',\r\n label: 'Sapphire',\r\n preview: '#1d4ed8',\r\n colors: ['#1d4ed8', '#3b82f6', '#93c5fd', '#bfdbfe', '#1e3a8a'],\r\n tokens: simplePalette(\r\n 'oklch(0.488 0.243 264.376)', 'oklch(0.488 0.243 264.376)',\r\n 'oklch(0.623 0.214 259.815)', 'oklch(0.623 0.214 259.815)',\r\n {\r\n light: ['oklch(0.488 0.243 264.376)', 'oklch(0.696 0.17 162.48)', 'oklch(0.585 0.22 3.717)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.645 0.246 16.439)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'fuchsia',\r\n label: 'Fuchsia',\r\n preview: '#c026d3',\r\n colors: ['#c026d3', '#e879f9', '#f5d0fe', '#fae8ff', '#86198f'],\r\n tokens: simplePalette(\r\n 'oklch(0.591 0.293 322.896)', 'oklch(0.591 0.293 322.896)',\r\n 'oklch(0.667 0.295 322.15)', 'oklch(0.667 0.295 322.15)',\r\n {\r\n light: ['oklch(0.591 0.293 322.896)', 'oklch(0.546 0.245 262.881)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)'],\r\n dark: ['oklch(0.667 0.295 322.15)', 'oklch(0.623 0.214 259.815)', 'oklch(0.769 0.188 70.08)', 'oklch(0.696 0.17 162.48)', 'oklch(0.645 0.246 16.439)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'cyan',\r\n label: 'Cyan',\r\n preview: '#0891b2',\r\n colors: ['#0891b2', '#22d3ee', '#a5f3fc', '#cffafe', '#155e75'],\r\n tokens: simplePalette(\r\n 'oklch(0.609 0.126 199.769)', 'oklch(0.609 0.126 199.769)',\r\n 'oklch(0.715 0.143 198.14)', 'oklch(0.715 0.143 198.14)',\r\n {\r\n light: ['oklch(0.609 0.126 199.769)', 'oklch(0.546 0.245 262.881)', 'oklch(0.585 0.22 3.717)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.715 0.143 198.14)', 'oklch(0.623 0.214 259.815)', 'oklch(0.645 0.246 16.439)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'indigo',\r\n label: 'Indigo',\r\n preview: '#4f46e5',\r\n colors: ['#4f46e5', '#818cf8', '#a5b4fc', '#c7d2fe', '#312e81'],\r\n tokens: simplePalette(\r\n 'oklch(0.511 0.262 276.966)', 'oklch(0.511 0.262 276.966)',\r\n 'oklch(0.585 0.233 277.117)', 'oklch(0.585 0.233 277.117)',\r\n {\r\n light: ['oklch(0.511 0.262 276.966)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.585 0.233 277.117)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.645 0.246 16.439)', 'oklch(0.623 0.214 259.815)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'pink',\r\n label: 'Pink',\r\n preview: '#db2777',\r\n colors: ['#db2777', '#f472b6', '#f9a8d4', '#fbcfe8', '#831843'],\r\n tokens: simplePalette(\r\n 'oklch(0.592 0.249 0.584)', 'oklch(0.592 0.249 0.584)',\r\n 'oklch(0.656 0.241 354.308)', 'oklch(0.656 0.241 354.308)',\r\n {\r\n light: ['oklch(0.592 0.249 0.584)', 'oklch(0.546 0.245 262.881)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.656 0.241 354.308)', 'oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'lime',\r\n label: 'Lime',\r\n preview: '#65a30d',\r\n colors: ['#65a30d', '#84cc16', '#bef264', '#d9f99d', '#365314'],\r\n tokens: simplePalette(\r\n 'oklch(0.627 0.168 131.589)', 'oklch(0.627 0.168 131.589)',\r\n 'oklch(0.768 0.233 130.85)', 'oklch(0.768 0.233 130.85)',\r\n {\r\n light: ['oklch(0.627 0.168 131.589)', 'oklch(0.546 0.245 262.881)', 'oklch(0.585 0.22 3.717)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.768 0.233 130.85)', 'oklch(0.623 0.214 259.815)', 'oklch(0.645 0.246 16.439)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'sky',\r\n label: 'Sky',\r\n preview: '#0284c7',\r\n colors: ['#0284c7', '#38bdf8', '#7dd3fc', '#bae6fd', '#0c4a6e'],\r\n tokens: simplePalette(\r\n 'oklch(0.562 0.158 241.966)', 'oklch(0.562 0.158 241.966)',\r\n 'oklch(0.714 0.175 232.799)', 'oklch(0.714 0.175 232.799)',\r\n {\r\n light: ['oklch(0.562 0.158 241.966)', 'oklch(0.696 0.17 162.48)', 'oklch(0.585 0.22 3.717)', 'oklch(0.769 0.172 70.67)', 'oklch(0.627 0.265 303.9)'],\r\n dark: ['oklch(0.714 0.175 232.799)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.645 0.246 16.439)', 'oklch(0.623 0.214 259.815)'],\r\n }\r\n ),\r\n },\r\n {\r\n name: 'slate',\r\n label: 'Slate',\r\n preview: '#475569',\r\n colors: ['#475569', '#94a3b8', '#cbd5e1', '#e2e8f0', '#1e293b'],\r\n tokens: simplePalette(\r\n 'oklch(0.446 0.043 257.281)', 'oklch(0.446 0.043 257.281)',\r\n 'oklch(0.869 0.022 252.894)', 'oklch(0.551 0.027 264.364)',\r\n {\r\n light: ['oklch(0.446 0.043 257.281)', 'oklch(0.546 0.245 262.881)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.172 70.67)', 'oklch(0.585 0.22 3.717)'],\r\n dark: ['oklch(0.869 0.022 252.894)', 'oklch(0.623 0.214 259.815)', 'oklch(0.696 0.17 162.48)', 'oklch(0.769 0.188 70.08)', 'oklch(0.627 0.265 303.9)'],\r\n }\r\n ),\r\n },\r\n\r\n // ─── Full palette themes ──────────────────────────────────────\r\n {\r\n name: 'bold-tech',\r\n label: 'Bold Tech',\r\n preview: '#6d28d9',\r\n colors: ['#6d28d9', '#818cf8', '#c4b5fd', '#a5b4fc', '#1e1b4b'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.025 280)',\r\n '--foreground': 'oklch(0.15 0.05 280)',\r\n '--card': 'oklch(0.97 0.018 280)',\r\n '--card-foreground': 'oklch(0.15 0.05 280)',\r\n '--popover': 'oklch(0.97 0.018 280)',\r\n '--popover-foreground': 'oklch(0.15 0.05 280)',\r\n '--primary': 'oklch(0.49 0.27 285)',\r\n '--primary-foreground': 'oklch(0.98 0.005 280)',\r\n '--secondary': 'oklch(0.88 0.04 280)',\r\n '--secondary-foreground': 'oklch(0.25 0.05 280)',\r\n '--muted': 'oklch(0.9 0.03 280)',\r\n '--muted-foreground': 'oklch(0.5 0.04 280)',\r\n '--accent': 'oklch(0.86 0.055 280)',\r\n '--accent-foreground': 'oklch(0.25 0.05 280)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.04 280)',\r\n '--input': 'oklch(0.84 0.04 280)',\r\n '--ring': 'oklch(0.49 0.27 285)',\r\n '--chart-1': 'oklch(0.49 0.27 285)',\r\n '--chart-2': 'oklch(0.6 0.118 184.704)',\r\n '--chart-3': 'oklch(0.645 0.246 16.439)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.696 0.17 162.48)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.04 280)',\r\n '--foreground': 'oklch(0.93 0.01 280)',\r\n '--card': 'oklch(0.15 0.04 278)',\r\n '--card-foreground': 'oklch(0.93 0.01 280)',\r\n '--popover': 'oklch(0.17 0.045 280)',\r\n '--popover-foreground': 'oklch(0.93 0.01 280)',\r\n '--primary': 'oklch(0.65 0.25 285)',\r\n '--primary-foreground': 'oklch(0.12 0.04 280)',\r\n '--secondary': 'oklch(0.22 0.04 278)',\r\n '--secondary-foreground': 'oklch(0.93 0.01 280)',\r\n '--muted': 'oklch(0.22 0.04 278)',\r\n '--muted-foreground': 'oklch(0.65 0.04 280)',\r\n '--accent': 'oklch(0.22 0.04 278)',\r\n '--accent-foreground': 'oklch(0.93 0.01 280)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.65 0.25 285)',\r\n '--chart-1': 'oklch(0.65 0.25 285)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.769 0.188 70.08)',\r\n '--chart-4': 'oklch(0.645 0.246 16.439)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'bubblegum',\r\n label: 'Bubblegum',\r\n preview: '#ec4899',\r\n colors: ['#ec4899', '#f472b6', '#fce7f3', '#f9a8d4', '#831843'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.03 350)',\r\n '--foreground': 'oklch(0.18 0.06 340)',\r\n '--card': 'oklch(0.97 0.022 350)',\r\n '--card-foreground': 'oklch(0.18 0.06 340)',\r\n '--popover': 'oklch(0.97 0.022 350)',\r\n '--popover-foreground': 'oklch(0.18 0.06 340)',\r\n '--primary': 'oklch(0.656 0.241 354.308)',\r\n '--primary-foreground': 'oklch(0.98 0.005 350)',\r\n '--secondary': 'oklch(0.9 0.05 340)',\r\n '--secondary-foreground': 'oklch(0.25 0.06 340)',\r\n '--muted': 'oklch(0.91 0.04 340)',\r\n '--muted-foreground': 'oklch(0.5 0.04 340)',\r\n '--accent': 'oklch(0.88 0.06 340)',\r\n '--accent-foreground': 'oklch(0.25 0.06 340)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.05 340)',\r\n '--input': 'oklch(0.85 0.05 340)',\r\n '--ring': 'oklch(0.656 0.241 354.308)',\r\n '--chart-1': 'oklch(0.656 0.241 354.308)',\r\n '--chart-2': 'oklch(0.627 0.265 303.9)',\r\n '--chart-3': 'oklch(0.715 0.143 198.14)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.14 0.04 340)',\r\n '--foreground': 'oklch(0.94 0.015 340)',\r\n '--card': 'oklch(0.17 0.04 338)',\r\n '--card-foreground': 'oklch(0.94 0.015 340)',\r\n '--popover': 'oklch(0.19 0.045 340)',\r\n '--popover-foreground': 'oklch(0.94 0.015 340)',\r\n '--primary': 'oklch(0.72 0.22 350)',\r\n '--primary-foreground': 'oklch(0.14 0.04 340)',\r\n '--secondary': 'oklch(0.24 0.04 338)',\r\n '--secondary-foreground': 'oklch(0.94 0.015 340)',\r\n '--muted': 'oklch(0.24 0.04 338)',\r\n '--muted-foreground': 'oklch(0.65 0.04 340)',\r\n '--accent': 'oklch(0.24 0.04 338)',\r\n '--accent-foreground': 'oklch(0.94 0.015 340)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.72 0.22 350)',\r\n '--chart-1': 'oklch(0.72 0.22 350)',\r\n '--chart-2': 'oklch(0.627 0.265 303.9)',\r\n '--chart-3': 'oklch(0.715 0.143 198.14)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'caffeine',\r\n label: 'Caffeine',\r\n preview: '#92400e',\r\n colors: ['#92400e', '#a16207', '#ca8a04', '#fbbf24', '#451a03'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.025 65)',\r\n '--foreground': 'oklch(0.2 0.04 50)',\r\n '--card': 'oklch(0.97 0.02 65)',\r\n '--card-foreground': 'oklch(0.2 0.04 50)',\r\n '--popover': 'oklch(0.97 0.02 65)',\r\n '--popover-foreground': 'oklch(0.2 0.04 50)',\r\n '--primary': 'oklch(0.47 0.12 55)',\r\n '--primary-foreground': 'oklch(0.98 0.01 70)',\r\n '--secondary': 'oklch(0.91 0.035 60)',\r\n '--secondary-foreground': 'oklch(0.3 0.05 50)',\r\n '--muted': 'oklch(0.92 0.028 60)',\r\n '--muted-foreground': 'oklch(0.5 0.04 55)',\r\n '--accent': 'oklch(0.89 0.04 60)',\r\n '--accent-foreground': 'oklch(0.3 0.05 50)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.04 60)',\r\n '--input': 'oklch(0.86 0.04 60)',\r\n '--ring': 'oklch(0.55 0.12 55)',\r\n '--chart-1': 'oklch(0.55 0.12 55)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.546 0.245 262.881)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.13 0.02 50)',\r\n '--foreground': 'oklch(0.92 0.015 60)',\r\n '--card': 'oklch(0.16 0.025 48)',\r\n '--card-foreground': 'oklch(0.92 0.015 60)',\r\n '--popover': 'oklch(0.18 0.03 50)',\r\n '--popover-foreground': 'oklch(0.92 0.015 60)',\r\n '--primary': 'oklch(0.72 0.15 65)',\r\n '--primary-foreground': 'oklch(0.15 0.02 50)',\r\n '--secondary': 'oklch(0.24 0.03 48)',\r\n '--secondary-foreground': 'oklch(0.92 0.015 60)',\r\n '--muted': 'oklch(0.24 0.03 48)',\r\n '--muted-foreground': 'oklch(0.6 0.04 55)',\r\n '--accent': 'oklch(0.24 0.03 48)',\r\n '--accent-foreground': 'oklch(0.92 0.015 60)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.72 0.15 65)',\r\n '--chart-1': 'oklch(0.72 0.15 65)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'candyland',\r\n label: 'Candyland',\r\n preview: '#e11d48',\r\n colors: ['#e11d48', '#06b6d4', '#22c55e', '#f59e0b', '#fce7f3'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.018 15)',\r\n '--foreground': 'oklch(0.18 0.04 340)',\r\n '--card': 'oklch(0.975 0.013 15)',\r\n '--card-foreground': 'oklch(0.18 0.04 340)',\r\n '--popover': 'oklch(0.975 0.013 15)',\r\n '--popover-foreground': 'oklch(0.18 0.04 340)',\r\n '--primary': 'oklch(0.585 0.22 3.717)',\r\n '--primary-foreground': 'oklch(0.98 0.005 340)',\r\n '--secondary': 'oklch(0.91 0.028 15)',\r\n '--secondary-foreground': 'oklch(0.3 0.04 340)',\r\n '--muted': 'oklch(0.92 0.022 15)',\r\n '--muted-foreground': 'oklch(0.5 0.04 340)',\r\n '--accent': 'oklch(0.9 0.04 200)',\r\n '--accent-foreground': 'oklch(0.25 0.04 200)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.87 0.035 15)',\r\n '--input': 'oklch(0.87 0.035 15)',\r\n '--ring': 'oklch(0.585 0.22 3.717)',\r\n '--chart-1': 'oklch(0.585 0.22 3.717)',\r\n '--chart-2': 'oklch(0.715 0.143 198.14)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.14 0.03 340)',\r\n '--foreground': 'oklch(0.94 0.01 340)',\r\n '--card': 'oklch(0.17 0.03 338)',\r\n '--card-foreground': 'oklch(0.94 0.01 340)',\r\n '--popover': 'oklch(0.19 0.035 340)',\r\n '--popover-foreground': 'oklch(0.94 0.01 340)',\r\n '--primary': 'oklch(0.65 0.24 5)',\r\n '--primary-foreground': 'oklch(0.14 0.03 340)',\r\n '--secondary': 'oklch(0.24 0.03 338)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 340)',\r\n '--muted': 'oklch(0.24 0.03 338)',\r\n '--muted-foreground': 'oklch(0.65 0.04 340)',\r\n '--accent': 'oklch(0.24 0.035 200)',\r\n '--accent-foreground': 'oklch(0.94 0.01 200)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.65 0.24 5)',\r\n '--chart-1': 'oklch(0.65 0.24 5)',\r\n '--chart-2': 'oklch(0.715 0.143 198.14)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'catppuccin',\r\n label: 'Catppuccin',\r\n preview: '#cba6f7',\r\n colors: ['#cba6f7', '#f5c2e7', '#89b4fa', '#a6e3a1', '#1e1e2e'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.018 280)',\r\n '--foreground': 'oklch(0.28 0.03 280)',\r\n '--card': 'oklch(0.95 0.014 280)',\r\n '--card-foreground': 'oklch(0.28 0.03 280)',\r\n '--popover': 'oklch(0.95 0.014 280)',\r\n '--popover-foreground': 'oklch(0.28 0.03 280)',\r\n '--primary': 'oklch(0.57 0.18 295)',\r\n '--primary-foreground': 'oklch(0.97 0.006 280)',\r\n '--secondary': 'oklch(0.88 0.025 280)',\r\n '--secondary-foreground': 'oklch(0.35 0.03 280)',\r\n '--muted': 'oklch(0.89 0.022 280)',\r\n '--muted-foreground': 'oklch(0.5 0.03 280)',\r\n '--accent': 'oklch(0.87 0.03 280)',\r\n '--accent-foreground': 'oklch(0.35 0.03 280)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.025 280)',\r\n '--input': 'oklch(0.84 0.025 280)',\r\n '--ring': 'oklch(0.57 0.18 295)',\r\n '--chart-1': 'oklch(0.57 0.18 295)',\r\n '--chart-2': 'oklch(0.72 0.14 350)',\r\n '--chart-3': 'oklch(0.65 0.17 260)',\r\n '--chart-4': 'oklch(0.78 0.17 145)',\r\n '--chart-5': 'oklch(0.72 0.16 200)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.16 0.015 280)',\r\n '--foreground': 'oklch(0.9 0.01 280)',\r\n '--card': 'oklch(0.19 0.018 278)',\r\n '--card-foreground': 'oklch(0.9 0.01 280)',\r\n '--popover': 'oklch(0.21 0.02 280)',\r\n '--popover-foreground': 'oklch(0.9 0.01 280)',\r\n '--primary': 'oklch(0.78 0.15 295)',\r\n '--primary-foreground': 'oklch(0.16 0.015 280)',\r\n '--secondary': 'oklch(0.25 0.02 278)',\r\n '--secondary-foreground': 'oklch(0.9 0.01 280)',\r\n '--muted': 'oklch(0.25 0.02 278)',\r\n '--muted-foreground': 'oklch(0.65 0.03 280)',\r\n '--accent': 'oklch(0.25 0.02 278)',\r\n '--accent-foreground': 'oklch(0.9 0.01 280)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.3 0.018 280)',\r\n '--input': 'oklch(0.3 0.018 280)',\r\n '--ring': 'oklch(0.78 0.15 295)',\r\n '--chart-1': 'oklch(0.78 0.15 295)',\r\n '--chart-2': 'oklch(0.8 0.12 350)',\r\n '--chart-3': 'oklch(0.72 0.14 260)',\r\n '--chart-4': 'oklch(0.82 0.14 145)',\r\n '--chart-5': 'oklch(0.75 0.13 200)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'claude',\r\n label: 'Claude',\r\n preview: '#da7b3c',\r\n colors: ['#da7b3c', '#f5e6d3', '#c8956c', '#e8c5a0', '#2d2419'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.022 60)',\r\n '--foreground': 'oklch(0.2 0.03 55)',\r\n '--card': 'oklch(0.975 0.016 60)',\r\n '--card-foreground': 'oklch(0.2 0.03 55)',\r\n '--popover': 'oklch(0.975 0.016 60)',\r\n '--popover-foreground': 'oklch(0.2 0.03 55)',\r\n '--primary': 'oklch(0.62 0.16 50)',\r\n '--primary-foreground': 'oklch(0.98 0.01 65)',\r\n '--secondary': 'oklch(0.91 0.032 60)',\r\n '--secondary-foreground': 'oklch(0.3 0.04 55)',\r\n '--muted': 'oklch(0.92 0.026 60)',\r\n '--muted-foreground': 'oklch(0.5 0.03 55)',\r\n '--accent': 'oklch(0.9 0.038 60)',\r\n '--accent-foreground': 'oklch(0.3 0.04 55)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.035 60)',\r\n '--input': 'oklch(0.86 0.035 60)',\r\n '--ring': 'oklch(0.62 0.16 50)',\r\n '--chart-1': 'oklch(0.62 0.16 50)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.546 0.245 262.881)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.14 0.02 50)',\r\n '--foreground': 'oklch(0.92 0.012 60)',\r\n '--card': 'oklch(0.17 0.02 48)',\r\n '--card-foreground': 'oklch(0.92 0.012 60)',\r\n '--popover': 'oklch(0.19 0.025 50)',\r\n '--popover-foreground': 'oklch(0.92 0.012 60)',\r\n '--primary': 'oklch(0.73 0.14 52)',\r\n '--primary-foreground': 'oklch(0.14 0.02 50)',\r\n '--secondary': 'oklch(0.24 0.025 48)',\r\n '--secondary-foreground': 'oklch(0.92 0.012 60)',\r\n '--muted': 'oklch(0.24 0.025 48)',\r\n '--muted-foreground': 'oklch(0.62 0.035 55)',\r\n '--accent': 'oklch(0.24 0.025 48)',\r\n '--accent-foreground': 'oklch(0.92 0.012 60)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.73 0.14 52)',\r\n '--chart-1': 'oklch(0.73 0.14 52)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'claymorphism',\r\n label: 'Claymorphism',\r\n preview: '#8b7355',\r\n colors: ['#8b7355', '#c4a97d', '#e8dfd5', '#d4c4b0', '#f5f0eb'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.02 75)',\r\n '--foreground': 'oklch(0.25 0.03 60)',\r\n '--card': 'oklch(0.965 0.015 75)',\r\n '--card-foreground': 'oklch(0.25 0.03 60)',\r\n '--popover': 'oklch(0.965 0.015 75)',\r\n '--popover-foreground': 'oklch(0.25 0.03 60)',\r\n '--primary': 'oklch(0.52 0.07 65)',\r\n '--primary-foreground': 'oklch(0.97 0.008 75)',\r\n '--secondary': 'oklch(0.9 0.028 70)',\r\n '--secondary-foreground': 'oklch(0.35 0.03 60)',\r\n '--muted': 'oklch(0.91 0.022 70)',\r\n '--muted-foreground': 'oklch(0.5 0.03 65)',\r\n '--accent': 'oklch(0.88 0.032 70)',\r\n '--accent-foreground': 'oklch(0.35 0.03 60)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.03 70)',\r\n '--input': 'oklch(0.85 0.03 70)',\r\n '--ring': 'oklch(0.52 0.07 65)',\r\n '--chart-1': 'oklch(0.52 0.07 65)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.546 0.245 262.881)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.15 0.015 60)',\r\n '--foreground': 'oklch(0.92 0.01 70)',\r\n '--card': 'oklch(0.18 0.015 58)',\r\n '--card-foreground': 'oklch(0.92 0.01 70)',\r\n '--popover': 'oklch(0.2 0.018 60)',\r\n '--popover-foreground': 'oklch(0.92 0.01 70)',\r\n '--primary': 'oklch(0.72 0.08 65)',\r\n '--primary-foreground': 'oklch(0.15 0.015 60)',\r\n '--secondary': 'oklch(0.25 0.018 58)',\r\n '--secondary-foreground': 'oklch(0.92 0.01 70)',\r\n '--muted': 'oklch(0.25 0.018 58)',\r\n '--muted-foreground': 'oklch(0.62 0.03 65)',\r\n '--accent': 'oklch(0.25 0.018 58)',\r\n '--accent-foreground': 'oklch(0.92 0.01 70)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.3 0.015 60)',\r\n '--input': 'oklch(0.3 0.015 60)',\r\n '--ring': 'oklch(0.72 0.08 65)',\r\n '--chart-1': 'oklch(0.72 0.08 65)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.623 0.214 259.815)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'clean-slate',\r\n label: 'Clean Slate',\r\n preview: '#475569',\r\n colors: ['#475569', '#64748b', '#94a3b8', '#cbd5e1', '#f8fafc'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.01 250)',\r\n '--foreground': 'oklch(0.2 0.04 260)',\r\n '--card': 'oklch(0.965 0.007 250)',\r\n '--card-foreground': 'oklch(0.2 0.04 260)',\r\n '--popover': 'oklch(0.965 0.007 250)',\r\n '--popover-foreground': 'oklch(0.2 0.04 260)',\r\n '--primary': 'oklch(0.446 0.043 257.281)',\r\n '--primary-foreground': 'oklch(0.99 0.002 250)',\r\n '--secondary': 'oklch(0.9 0.014 250)',\r\n '--secondary-foreground': 'oklch(0.3 0.04 260)',\r\n '--muted': 'oklch(0.91 0.011 250)',\r\n '--muted-foreground': 'oklch(0.554 0.046 257.417)',\r\n '--accent': 'oklch(0.9 0.014 250)',\r\n '--accent-foreground': 'oklch(0.3 0.04 260)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.016 250)',\r\n '--input': 'oklch(0.86 0.016 250)',\r\n '--ring': 'oklch(0.446 0.043 257.281)',\r\n '--chart-1': 'oklch(0.446 0.043 257.281)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.585 0.22 3.717)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.13 0.02 260)',\r\n '--foreground': 'oklch(0.93 0.008 250)',\r\n '--card': 'oklch(0.16 0.02 258)',\r\n '--card-foreground': 'oklch(0.93 0.008 250)',\r\n '--popover': 'oklch(0.18 0.025 260)',\r\n '--popover-foreground': 'oklch(0.93 0.008 250)',\r\n '--primary': 'oklch(0.869 0.022 252.894)',\r\n '--primary-foreground': 'oklch(0.13 0.02 260)',\r\n '--secondary': 'oklch(0.24 0.02 258)',\r\n '--secondary-foreground': 'oklch(0.93 0.008 250)',\r\n '--muted': 'oklch(0.24 0.02 258)',\r\n '--muted-foreground': 'oklch(0.704 0.04 256.788)',\r\n '--accent': 'oklch(0.24 0.02 258)',\r\n '--accent-foreground': 'oklch(0.93 0.008 250)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.869 0.022 252.894)',\r\n '--chart-1': 'oklch(0.869 0.022 252.894)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.645 0.246 16.439)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'cosmic-night',\r\n label: 'Cosmic Night',\r\n preview: '#6366f1',\r\n colors: ['#6366f1', '#818cf8', '#a78bfa', '#c7d2fe', '#0f0524'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.022 275)',\r\n '--foreground': 'oklch(0.15 0.05 275)',\r\n '--card': 'oklch(0.95 0.016 275)',\r\n '--card-foreground': 'oklch(0.15 0.05 275)',\r\n '--popover': 'oklch(0.95 0.016 275)',\r\n '--popover-foreground': 'oklch(0.15 0.05 275)',\r\n '--primary': 'oklch(0.55 0.24 278)',\r\n '--primary-foreground': 'oklch(0.98 0.005 275)',\r\n '--secondary': 'oklch(0.88 0.032 275)',\r\n '--secondary-foreground': 'oklch(0.25 0.05 275)',\r\n '--muted': 'oklch(0.89 0.026 275)',\r\n '--muted-foreground': 'oklch(0.5 0.04 275)',\r\n '--accent': 'oklch(0.87 0.038 275)',\r\n '--accent-foreground': 'oklch(0.25 0.05 275)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.03 275)',\r\n '--input': 'oklch(0.84 0.03 275)',\r\n '--ring': 'oklch(0.55 0.24 278)',\r\n '--chart-1': 'oklch(0.55 0.24 278)',\r\n '--chart-2': 'oklch(0.627 0.265 303.9)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.1 0.045 275)',\r\n '--foreground': 'oklch(0.93 0.01 275)',\r\n '--card': 'oklch(0.13 0.045 273)',\r\n '--card-foreground': 'oklch(0.93 0.01 275)',\r\n '--popover': 'oklch(0.15 0.05 275)',\r\n '--popover-foreground': 'oklch(0.93 0.01 275)',\r\n '--primary': 'oklch(0.68 0.2 278)',\r\n '--primary-foreground': 'oklch(0.1 0.045 275)',\r\n '--secondary': 'oklch(0.2 0.04 273)',\r\n '--secondary-foreground': 'oklch(0.93 0.01 275)',\r\n '--muted': 'oklch(0.2 0.04 273)',\r\n '--muted-foreground': 'oklch(0.65 0.04 275)',\r\n '--accent': 'oklch(0.2 0.04 273)',\r\n '--accent-foreground': 'oklch(0.93 0.01 275)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 8%)',\r\n '--input': 'oklch(1 0 0 / 12%)',\r\n '--ring': 'oklch(0.68 0.2 278)',\r\n '--chart-1': 'oklch(0.68 0.2 278)',\r\n '--chart-2': 'oklch(0.627 0.265 303.9)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'cyberpunk',\r\n label: 'Cyberpunk',\r\n preview: '#00ff88',\r\n colors: ['#00ff88', '#ff0080', '#00d4ff', '#ffff00', '#0a0a0a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.015 160)',\r\n '--foreground': 'oklch(0.12 0.02 180)',\r\n '--card': 'oklch(0.945 0.012 160)',\r\n '--card-foreground': 'oklch(0.12 0.02 180)',\r\n '--popover': 'oklch(0.945 0.012 160)',\r\n '--popover-foreground': 'oklch(0.12 0.02 180)',\r\n '--primary': 'oklch(0.62 0.22 160)',\r\n '--primary-foreground': 'oklch(0.12 0.02 180)',\r\n '--secondary': 'oklch(0.88 0.025 160)',\r\n '--secondary-foreground': 'oklch(0.2 0.02 180)',\r\n '--muted': 'oklch(0.89 0.02 160)',\r\n '--muted-foreground': 'oklch(0.45 0.03 180)',\r\n '--accent': 'oklch(0.87 0.04 320)',\r\n '--accent-foreground': 'oklch(0.2 0.03 320)',\r\n '--destructive': 'oklch(0.65 0.28 340)',\r\n '--border': 'oklch(0.84 0.025 160)',\r\n '--input': 'oklch(0.84 0.025 160)',\r\n '--ring': 'oklch(0.62 0.22 160)',\r\n '--chart-1': 'oklch(0.87 0.3 155)',\r\n '--chart-2': 'oklch(0.65 0.28 340)',\r\n '--chart-3': 'oklch(0.75 0.17 220)',\r\n '--chart-4': 'oklch(0.9 0.22 105)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.09 0.005 0)',\r\n '--foreground': 'oklch(0.92 0.01 180)',\r\n '--card': 'oklch(0.12 0.008 270)',\r\n '--card-foreground': 'oklch(0.92 0.01 180)',\r\n '--popover': 'oklch(0.14 0.01 270)',\r\n '--popover-foreground': 'oklch(0.92 0.01 180)',\r\n '--primary': 'oklch(0.87 0.3 155)',\r\n '--primary-foreground': 'oklch(0.09 0.005 0)',\r\n '--secondary': 'oklch(0.18 0.01 270)',\r\n '--secondary-foreground': 'oklch(0.92 0.01 180)',\r\n '--muted': 'oklch(0.18 0.01 270)',\r\n '--muted-foreground': 'oklch(0.6 0.02 180)',\r\n '--accent': 'oklch(0.18 0.015 320)',\r\n '--accent-foreground': 'oklch(0.87 0.3 155)',\r\n '--destructive': 'oklch(0.72 0.26 340)',\r\n '--border': 'oklch(0.87 0.3 155 / 15%)',\r\n '--input': 'oklch(0.87 0.3 155 / 20%)',\r\n '--ring': 'oklch(0.87 0.3 155)',\r\n '--chart-1': 'oklch(0.87 0.3 155)',\r\n '--chart-2': 'oklch(0.72 0.26 340)',\r\n '--chart-3': 'oklch(0.75 0.17 220)',\r\n '--chart-4': 'oklch(0.9 0.22 105)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'darkmatter',\r\n label: 'Darkmatter',\r\n preview: '#525252',\r\n colors: ['#404040', '#525252', '#737373', '#a3a3a3', '#0a0a0a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.004 286)',\r\n '--foreground': 'oklch(0.145 0.005 285)',\r\n '--card': 'oklch(0.955 0.003 286)',\r\n '--card-foreground': 'oklch(0.145 0.005 285)',\r\n '--popover': 'oklch(0.955 0.003 286)',\r\n '--popover-foreground': 'oklch(0.145 0.005 285)',\r\n '--primary': 'oklch(0.27 0.006 286)',\r\n '--primary-foreground': 'oklch(0.985 0 0)',\r\n '--secondary': 'oklch(0.89 0.005 286)',\r\n '--secondary-foreground': 'oklch(0.27 0.006 286)',\r\n '--muted': 'oklch(0.9 0.004 286)',\r\n '--muted-foreground': 'oklch(0.55 0.013 286)',\r\n '--accent': 'oklch(0.88 0.006 286)',\r\n '--accent-foreground': 'oklch(0.27 0.006 286)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.007 286)',\r\n '--input': 'oklch(0.85 0.007 286)',\r\n '--ring': 'oklch(0.55 0.013 286)',\r\n '--chart-1': 'oklch(0.37 0.013 286)',\r\n '--chart-2': 'oklch(0.55 0.013 286)',\r\n '--chart-3': 'oklch(0.705 0.015 286)',\r\n '--chart-4': 'oklch(0.445 0.012 286)',\r\n '--chart-5': 'oklch(0.63 0.014 286)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.1 0.003 286)',\r\n '--foreground': 'oklch(0.92 0.004 286)',\r\n '--card': 'oklch(0.13 0.004 286)',\r\n '--card-foreground': 'oklch(0.92 0.004 286)',\r\n '--popover': 'oklch(0.15 0.004 286)',\r\n '--popover-foreground': 'oklch(0.92 0.004 286)',\r\n '--primary': 'oklch(0.87 0.006 286)',\r\n '--primary-foreground': 'oklch(0.1 0.003 286)',\r\n '--secondary': 'oklch(0.21 0.005 286)',\r\n '--secondary-foreground': 'oklch(0.92 0.004 286)',\r\n '--muted': 'oklch(0.21 0.005 286)',\r\n '--muted-foreground': 'oklch(0.6 0.01 286)',\r\n '--accent': 'oklch(0.21 0.005 286)',\r\n '--accent-foreground': 'oklch(0.92 0.004 286)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 8%)',\r\n '--input': 'oklch(1 0 0 / 12%)',\r\n '--ring': 'oklch(0.6 0.01 286)',\r\n '--chart-1': 'oklch(0.5 0.01 286)',\r\n '--chart-2': 'oklch(0.65 0.012 286)',\r\n '--chart-3': 'oklch(0.8 0.008 286)',\r\n '--chart-4': 'oklch(0.55 0.011 286)',\r\n '--chart-5': 'oklch(0.72 0.01 286)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'doom-64',\r\n label: 'Doom 64',\r\n preview: '#dc2626',\r\n colors: ['#dc2626', '#16a34a', '#ca8a04', '#71717a', '#1a0f0f'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.016 25)',\r\n '--foreground': 'oklch(0.18 0.02 20)',\r\n '--card': 'oklch(0.955 0.012 25)',\r\n '--card-foreground': 'oklch(0.18 0.02 20)',\r\n '--popover': 'oklch(0.955 0.012 25)',\r\n '--popover-foreground': 'oklch(0.18 0.02 20)',\r\n '--primary': 'oklch(0.577 0.245 27.325)',\r\n '--primary-foreground': 'oklch(0.97 0.005 25)',\r\n '--secondary': 'oklch(0.89 0.022 25)',\r\n '--secondary-foreground': 'oklch(0.3 0.02 20)',\r\n '--muted': 'oklch(0.9 0.018 25)',\r\n '--muted-foreground': 'oklch(0.5 0.02 20)',\r\n '--accent': 'oklch(0.88 0.025 25)',\r\n '--accent-foreground': 'oklch(0.3 0.02 20)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.025 25)',\r\n '--input': 'oklch(0.85 0.025 25)',\r\n '--ring': 'oklch(0.577 0.245 27.325)',\r\n '--chart-1': 'oklch(0.577 0.245 27.325)',\r\n '--chart-2': 'oklch(0.527 0.154 150.069)',\r\n '--chart-3': 'oklch(0.705 0.15 65)',\r\n '--chart-4': 'oklch(0.55 0.013 286)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.015 20)',\r\n '--foreground': 'oklch(0.88 0.01 25)',\r\n '--card': 'oklch(0.15 0.018 18)',\r\n '--card-foreground': 'oklch(0.88 0.01 25)',\r\n '--popover': 'oklch(0.17 0.02 20)',\r\n '--popover-foreground': 'oklch(0.88 0.01 25)',\r\n '--primary': 'oklch(0.637 0.237 25.331)',\r\n '--primary-foreground': 'oklch(0.12 0.015 20)',\r\n '--secondary': 'oklch(0.22 0.018 18)',\r\n '--secondary-foreground': 'oklch(0.88 0.01 25)',\r\n '--muted': 'oklch(0.22 0.018 18)',\r\n '--muted-foreground': 'oklch(0.6 0.02 20)',\r\n '--accent': 'oklch(0.22 0.018 18)',\r\n '--accent-foreground': 'oklch(0.88 0.01 25)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.637 0.237 25.331 / 15%)',\r\n '--input': 'oklch(0.637 0.237 25.331 / 20%)',\r\n '--ring': 'oklch(0.637 0.237 25.331)',\r\n '--chart-1': 'oklch(0.637 0.237 25.331)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.6 0.01 286)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'elegant-luxury',\r\n label: 'Elegant Luxury',\r\n preview: '#d4a853',\r\n colors: ['#d4a853', '#b8960c', '#a3a3a3', '#e5e5e5', '#0c0a09'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.96 0.018 80)',\r\n '--foreground': 'oklch(0.15 0.01 60)',\r\n '--card': 'oklch(0.97 0.013 80)',\r\n '--card-foreground': 'oklch(0.15 0.01 60)',\r\n '--popover': 'oklch(0.97 0.013 80)',\r\n '--popover-foreground': 'oklch(0.15 0.01 60)',\r\n '--primary': 'oklch(0.65 0.13 80)',\r\n '--primary-foreground': 'oklch(0.15 0.01 60)',\r\n '--secondary': 'oklch(0.91 0.022 80)',\r\n '--secondary-foreground': 'oklch(0.25 0.01 60)',\r\n '--muted': 'oklch(0.92 0.018 80)',\r\n '--muted-foreground': 'oklch(0.5 0.015 70)',\r\n '--accent': 'oklch(0.9 0.026 80)',\r\n '--accent-foreground': 'oklch(0.25 0.01 60)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.87 0.022 80)',\r\n '--input': 'oklch(0.87 0.022 80)',\r\n '--ring': 'oklch(0.65 0.13 80)',\r\n '--chart-1': 'oklch(0.65 0.13 80)',\r\n '--chart-2': 'oklch(0.55 0.013 286)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.585 0.22 3.717)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.1 0.008 60)',\r\n '--foreground': 'oklch(0.92 0.008 80)',\r\n '--card': 'oklch(0.13 0.008 58)',\r\n '--card-foreground': 'oklch(0.92 0.008 80)',\r\n '--popover': 'oklch(0.15 0.01 60)',\r\n '--popover-foreground': 'oklch(0.92 0.008 80)',\r\n '--primary': 'oklch(0.78 0.14 80)',\r\n '--primary-foreground': 'oklch(0.1 0.008 60)',\r\n '--secondary': 'oklch(0.2 0.008 58)',\r\n '--secondary-foreground': 'oklch(0.92 0.008 80)',\r\n '--muted': 'oklch(0.2 0.008 58)',\r\n '--muted-foreground': 'oklch(0.6 0.015 70)',\r\n '--accent': 'oklch(0.2 0.008 58)',\r\n '--accent-foreground': 'oklch(0.92 0.008 80)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.78 0.14 80 / 12%)',\r\n '--input': 'oklch(0.78 0.14 80 / 18%)',\r\n '--ring': 'oklch(0.78 0.14 80)',\r\n '--chart-1': 'oklch(0.78 0.14 80)',\r\n '--chart-2': 'oklch(0.6 0.01 286)',\r\n '--chart-3': 'oklch(0.696 0.17 162.48)',\r\n '--chart-4': 'oklch(0.645 0.246 16.439)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'frost',\r\n label: 'Frost',\r\n preview: '#0ea5e9',\r\n colors: ['#0ea5e9', '#38bdf8', '#7dd3fc', '#bae6fd', '#e0f2fe'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.025 220)',\r\n '--foreground': 'oklch(0.18 0.04 230)',\r\n '--card': 'oklch(0.955 0.019 220)',\r\n '--card-foreground': 'oklch(0.18 0.04 230)',\r\n '--popover': 'oklch(0.955 0.019 220)',\r\n '--popover-foreground': 'oklch(0.18 0.04 230)',\r\n '--primary': 'oklch(0.62 0.16 230)',\r\n '--primary-foreground': 'oklch(0.99 0.005 220)',\r\n '--secondary': 'oklch(0.89 0.035 220)',\r\n '--secondary-foreground': 'oklch(0.28 0.04 230)',\r\n '--muted': 'oklch(0.9 0.028 220)',\r\n '--muted-foreground': 'oklch(0.5 0.03 230)',\r\n '--accent': 'oklch(0.88 0.04 220)',\r\n '--accent-foreground': 'oklch(0.28 0.04 230)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.035 220)',\r\n '--input': 'oklch(0.85 0.035 220)',\r\n '--ring': 'oklch(0.62 0.16 230)',\r\n '--chart-1': 'oklch(0.62 0.16 230)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.627 0.265 303.9)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.585 0.22 3.717)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.13 0.025 230)',\r\n '--foreground': 'oklch(0.94 0.01 220)',\r\n '--card': 'oklch(0.16 0.025 228)',\r\n '--card-foreground': 'oklch(0.94 0.01 220)',\r\n '--popover': 'oklch(0.18 0.03 230)',\r\n '--popover-foreground': 'oklch(0.94 0.01 220)',\r\n '--primary': 'oklch(0.75 0.15 225)',\r\n '--primary-foreground': 'oklch(0.13 0.025 230)',\r\n '--secondary': 'oklch(0.23 0.025 228)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 220)',\r\n '--muted': 'oklch(0.23 0.025 228)',\r\n '--muted-foreground': 'oklch(0.65 0.03 225)',\r\n '--accent': 'oklch(0.23 0.025 228)',\r\n '--accent-foreground': 'oklch(0.94 0.01 220)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.75 0.15 225)',\r\n '--chart-1': 'oklch(0.75 0.15 225)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.627 0.265 303.9)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.645 0.246 16.439)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'horizon',\r\n label: 'Horizon',\r\n preview: '#f43f5e',\r\n colors: ['#f43f5e', '#fb923c', '#fbbf24', '#a78bfa', '#0f172a'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.022 20)',\r\n '--foreground': 'oklch(0.18 0.03 30)',\r\n '--card': 'oklch(0.965 0.016 20)',\r\n '--card-foreground': 'oklch(0.18 0.03 30)',\r\n '--popover': 'oklch(0.965 0.016 20)',\r\n '--popover-foreground': 'oklch(0.18 0.03 30)',\r\n '--primary': 'oklch(0.585 0.22 3.717)',\r\n '--primary-foreground': 'oklch(0.99 0.005 20)',\r\n '--secondary': 'oklch(0.9 0.032 30)',\r\n '--secondary-foreground': 'oklch(0.28 0.03 30)',\r\n '--muted': 'oklch(0.91 0.026 30)',\r\n '--muted-foreground': 'oklch(0.5 0.03 30)',\r\n '--accent': 'oklch(0.89 0.038 50)',\r\n '--accent-foreground': 'oklch(0.28 0.03 50)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.028 30)',\r\n '--input': 'oklch(0.86 0.028 30)',\r\n '--ring': 'oklch(0.585 0.22 3.717)',\r\n '--chart-1': 'oklch(0.645 0.246 16.439)',\r\n '--chart-2': 'oklch(0.705 0.213 47.604)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.025 260)',\r\n '--foreground': 'oklch(0.94 0.01 30)',\r\n '--card': 'oklch(0.15 0.025 258)',\r\n '--card-foreground': 'oklch(0.94 0.01 30)',\r\n '--popover': 'oklch(0.17 0.03 260)',\r\n '--popover-foreground': 'oklch(0.94 0.01 30)',\r\n '--primary': 'oklch(0.65 0.24 5)',\r\n '--primary-foreground': 'oklch(0.12 0.025 260)',\r\n '--secondary': 'oklch(0.22 0.025 258)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 30)',\r\n '--muted': 'oklch(0.22 0.025 258)',\r\n '--muted-foreground': 'oklch(0.65 0.03 30)',\r\n '--accent': 'oklch(0.22 0.03 50)',\r\n '--accent-foreground': 'oklch(0.94 0.01 30)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.65 0.24 5)',\r\n '--chart-1': 'oklch(0.645 0.246 16.439)',\r\n '--chart-2': 'oklch(0.769 0.188 70.08)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.627 0.265 303.9)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'lavender-dreams',\r\n label: 'Lavender Dreams',\r\n preview: '#9333ea',\r\n colors: ['#9333ea', '#a855f7', '#c084fc', '#e9d5ff', '#faf5ff'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.022 300)',\r\n '--foreground': 'oklch(0.18 0.04 300)',\r\n '--card': 'oklch(0.955 0.016 300)',\r\n '--card-foreground': 'oklch(0.18 0.04 300)',\r\n '--popover': 'oklch(0.955 0.016 300)',\r\n '--popover-foreground': 'oklch(0.18 0.04 300)',\r\n '--primary': 'oklch(0.53 0.25 305)',\r\n '--primary-foreground': 'oklch(0.99 0.005 300)',\r\n '--secondary': 'oklch(0.89 0.034 300)',\r\n '--secondary-foreground': 'oklch(0.28 0.04 300)',\r\n '--muted': 'oklch(0.9 0.028 300)',\r\n '--muted-foreground': 'oklch(0.5 0.03 300)',\r\n '--accent': 'oklch(0.88 0.042 300)',\r\n '--accent-foreground': 'oklch(0.28 0.04 300)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.032 300)',\r\n '--input': 'oklch(0.85 0.032 300)',\r\n '--ring': 'oklch(0.53 0.25 305)',\r\n '--chart-1': 'oklch(0.53 0.25 305)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.585 0.22 3.717)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.13 0.03 300)',\r\n '--foreground': 'oklch(0.94 0.01 300)',\r\n '--card': 'oklch(0.16 0.03 298)',\r\n '--card-foreground': 'oklch(0.94 0.01 300)',\r\n '--popover': 'oklch(0.18 0.035 300)',\r\n '--popover-foreground': 'oklch(0.94 0.01 300)',\r\n '--primary': 'oklch(0.7 0.22 300)',\r\n '--primary-foreground': 'oklch(0.13 0.03 300)',\r\n '--secondary': 'oklch(0.23 0.03 298)',\r\n '--secondary-foreground': 'oklch(0.94 0.01 300)',\r\n '--muted': 'oklch(0.23 0.03 298)',\r\n '--muted-foreground': 'oklch(0.65 0.03 300)',\r\n '--accent': 'oklch(0.23 0.03 298)',\r\n '--accent-foreground': 'oklch(0.94 0.01 300)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.7 0.22 300)',\r\n '--chart-1': 'oklch(0.7 0.22 300)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.645 0.246 16.439)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'midnight',\r\n label: 'Midnight',\r\n preview: '#3b82f6',\r\n colors: ['#3b82f6', '#60a5fa', '#93c5fd', '#bfdbfe', '#020617'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.02 260)',\r\n '--foreground': 'oklch(0.15 0.05 260)',\r\n '--card': 'oklch(0.945 0.015 260)',\r\n '--card-foreground': 'oklch(0.15 0.05 260)',\r\n '--popover': 'oklch(0.945 0.015 260)',\r\n '--popover-foreground': 'oklch(0.15 0.05 260)',\r\n '--primary': 'oklch(0.546 0.245 262.881)',\r\n '--primary-foreground': 'oklch(0.99 0.004 260)',\r\n '--secondary': 'oklch(0.88 0.03 260)',\r\n '--secondary-foreground': 'oklch(0.25 0.05 260)',\r\n '--muted': 'oklch(0.89 0.024 260)',\r\n '--muted-foreground': 'oklch(0.5 0.04 260)',\r\n '--accent': 'oklch(0.87 0.034 260)',\r\n '--accent-foreground': 'oklch(0.25 0.05 260)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.028 260)',\r\n '--input': 'oklch(0.84 0.028 260)',\r\n '--ring': 'oklch(0.546 0.245 262.881)',\r\n '--chart-1': 'oklch(0.546 0.245 262.881)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.585 0.22 3.717)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.08 0.04 260)',\r\n '--foreground': 'oklch(0.93 0.008 260)',\r\n '--card': 'oklch(0.11 0.04 258)',\r\n '--card-foreground': 'oklch(0.93 0.008 260)',\r\n '--popover': 'oklch(0.13 0.045 260)',\r\n '--popover-foreground': 'oklch(0.93 0.008 260)',\r\n '--primary': 'oklch(0.623 0.214 259.815)',\r\n '--primary-foreground': 'oklch(0.08 0.04 260)',\r\n '--secondary': 'oklch(0.18 0.04 258)',\r\n '--secondary-foreground': 'oklch(0.93 0.008 260)',\r\n '--muted': 'oklch(0.18 0.04 258)',\r\n '--muted-foreground': 'oklch(0.65 0.03 260)',\r\n '--accent': 'oklch(0.18 0.04 258)',\r\n '--accent-foreground': 'oklch(0.93 0.008 260)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 8%)',\r\n '--input': 'oklch(1 0 0 / 12%)',\r\n '--ring': 'oklch(0.623 0.214 259.815)',\r\n '--chart-1': 'oklch(0.623 0.214 259.815)',\r\n '--chart-2': 'oklch(0.696 0.17 162.48)',\r\n '--chart-3': 'oklch(0.645 0.246 16.439)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.627 0.265 303.9)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'nord',\r\n label: 'Nord',\r\n preview: '#88c0d0',\r\n colors: ['#88c0d0', '#81a1c1', '#5e81ac', '#b48ead', '#2e3440'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.94 0.018 230)',\r\n '--foreground': 'oklch(0.25 0.03 230)',\r\n '--card': 'oklch(0.955 0.013 230)',\r\n '--card-foreground': 'oklch(0.25 0.03 230)',\r\n '--popover': 'oklch(0.955 0.013 230)',\r\n '--popover-foreground': 'oklch(0.25 0.03 230)',\r\n '--primary': 'oklch(0.55 0.09 215)',\r\n '--primary-foreground': 'oklch(0.97 0.005 230)',\r\n '--secondary': 'oklch(0.89 0.025 230)',\r\n '--secondary-foreground': 'oklch(0.32 0.03 230)',\r\n '--muted': 'oklch(0.9 0.02 230)',\r\n '--muted-foreground': 'oklch(0.5 0.025 230)',\r\n '--accent': 'oklch(0.88 0.028 230)',\r\n '--accent-foreground': 'oklch(0.32 0.03 230)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.85 0.022 230)',\r\n '--input': 'oklch(0.85 0.022 230)',\r\n '--ring': 'oklch(0.55 0.09 215)',\r\n '--chart-1': 'oklch(0.73 0.08 210)',\r\n '--chart-2': 'oklch(0.63 0.07 240)',\r\n '--chart-3': 'oklch(0.55 0.09 255)',\r\n '--chart-4': 'oklch(0.68 0.1 330)',\r\n '--chart-5': 'oklch(0.72 0.12 100)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.22 0.02 230)',\r\n '--foreground': 'oklch(0.92 0.008 225)',\r\n '--card': 'oklch(0.25 0.02 228)',\r\n '--card-foreground': 'oklch(0.92 0.008 225)',\r\n '--popover': 'oklch(0.27 0.022 230)',\r\n '--popover-foreground': 'oklch(0.92 0.008 225)',\r\n '--primary': 'oklch(0.73 0.08 210)',\r\n '--primary-foreground': 'oklch(0.22 0.02 230)',\r\n '--secondary': 'oklch(0.3 0.02 228)',\r\n '--secondary-foreground': 'oklch(0.92 0.008 225)',\r\n '--muted': 'oklch(0.3 0.02 228)',\r\n '--muted-foreground': 'oklch(0.65 0.025 230)',\r\n '--accent': 'oklch(0.3 0.02 228)',\r\n '--accent-foreground': 'oklch(0.92 0.008 225)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(0.35 0.018 228)',\r\n '--input': 'oklch(0.35 0.018 228)',\r\n '--ring': 'oklch(0.73 0.08 210)',\r\n '--chart-1': 'oklch(0.73 0.08 210)',\r\n '--chart-2': 'oklch(0.63 0.07 240)',\r\n '--chart-3': 'oklch(0.55 0.09 255)',\r\n '--chart-4': 'oklch(0.68 0.1 330)',\r\n '--chart-5': 'oklch(0.72 0.12 100)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'sunset-vibes',\r\n label: 'Sunset Vibes',\r\n preview: '#ea580c',\r\n colors: ['#ea580c', '#f97316', '#fb923c', '#fdba74', '#431407'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.95 0.028 40)',\r\n '--foreground': 'oklch(0.18 0.03 35)',\r\n '--card': 'oklch(0.965 0.022 40)',\r\n '--card-foreground': 'oklch(0.18 0.03 35)',\r\n '--popover': 'oklch(0.965 0.022 40)',\r\n '--popover-foreground': 'oklch(0.18 0.03 35)',\r\n '--primary': 'oklch(0.58 0.22 38)',\r\n '--primary-foreground': 'oklch(0.99 0.005 40)',\r\n '--secondary': 'oklch(0.9 0.038 40)',\r\n '--secondary-foreground': 'oklch(0.28 0.03 35)',\r\n '--muted': 'oklch(0.91 0.032 40)',\r\n '--muted-foreground': 'oklch(0.5 0.03 38)',\r\n '--accent': 'oklch(0.89 0.042 40)',\r\n '--accent-foreground': 'oklch(0.28 0.03 35)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.86 0.036 40)',\r\n '--input': 'oklch(0.86 0.036 40)',\r\n '--ring': 'oklch(0.58 0.22 38)',\r\n '--chart-1': 'oklch(0.58 0.22 38)',\r\n '--chart-2': 'oklch(0.705 0.213 47.604)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.585 0.22 3.717)',\r\n '--chart-5': 'oklch(0.546 0.245 262.881)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.12 0.02 35)',\r\n '--foreground': 'oklch(0.93 0.012 40)',\r\n '--card': 'oklch(0.15 0.022 33)',\r\n '--card-foreground': 'oklch(0.93 0.012 40)',\r\n '--popover': 'oklch(0.17 0.025 35)',\r\n '--popover-foreground': 'oklch(0.93 0.012 40)',\r\n '--primary': 'oklch(0.72 0.2 42)',\r\n '--primary-foreground': 'oklch(0.12 0.02 35)',\r\n '--secondary': 'oklch(0.22 0.022 33)',\r\n '--secondary-foreground': 'oklch(0.93 0.012 40)',\r\n '--muted': 'oklch(0.22 0.022 33)',\r\n '--muted-foreground': 'oklch(0.62 0.03 38)',\r\n '--accent': 'oklch(0.22 0.022 33)',\r\n '--accent-foreground': 'oklch(0.93 0.012 40)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 10%)',\r\n '--input': 'oklch(1 0 0 / 15%)',\r\n '--ring': 'oklch(0.72 0.2 42)',\r\n '--chart-1': 'oklch(0.72 0.2 42)',\r\n '--chart-2': 'oklch(0.769 0.188 70.08)',\r\n '--chart-3': 'oklch(0.769 0.172 70.67)',\r\n '--chart-4': 'oklch(0.645 0.246 16.439)',\r\n '--chart-5': 'oklch(0.623 0.214 259.815)',\r\n },\r\n },\r\n },\r\n {\r\n name: 'twilight',\r\n label: 'Twilight',\r\n preview: '#a855f7',\r\n colors: ['#a855f7', '#c084fc', '#e879f9', '#7c3aed', '#1e1040'],\r\n tokens: {\r\n light: {\r\n '--background': 'oklch(0.93 0.025 290)',\r\n '--foreground': 'oklch(0.16 0.045 290)',\r\n '--card': 'oklch(0.945 0.019 290)',\r\n '--card-foreground': 'oklch(0.16 0.045 290)',\r\n '--popover': 'oklch(0.945 0.019 290)',\r\n '--popover-foreground': 'oklch(0.16 0.045 290)',\r\n '--primary': 'oklch(0.6 0.25 295)',\r\n '--primary-foreground': 'oklch(0.98 0.006 290)',\r\n '--secondary': 'oklch(0.88 0.038 290)',\r\n '--secondary-foreground': 'oklch(0.25 0.045 290)',\r\n '--muted': 'oklch(0.89 0.032 290)',\r\n '--muted-foreground': 'oklch(0.5 0.035 290)',\r\n '--accent': 'oklch(0.87 0.045 300)',\r\n '--accent-foreground': 'oklch(0.25 0.045 300)',\r\n '--destructive': 'oklch(0.577 0.245 27.325)',\r\n '--border': 'oklch(0.84 0.036 290)',\r\n '--input': 'oklch(0.84 0.036 290)',\r\n '--ring': 'oklch(0.6 0.25 295)',\r\n '--chart-1': 'oklch(0.6 0.25 295)',\r\n '--chart-2': 'oklch(0.667 0.295 322.15)',\r\n '--chart-3': 'oklch(0.541 0.281 293.009)',\r\n '--chart-4': 'oklch(0.769 0.172 70.67)',\r\n '--chart-5': 'oklch(0.696 0.17 162.48)',\r\n },\r\n dark: {\r\n '--background': 'oklch(0.11 0.04 290)',\r\n '--foreground': 'oklch(0.93 0.01 290)',\r\n '--card': 'oklch(0.14 0.04 288)',\r\n '--card-foreground': 'oklch(0.93 0.01 290)',\r\n '--popover': 'oklch(0.16 0.045 290)',\r\n '--popover-foreground': 'oklch(0.93 0.01 290)',\r\n '--primary': 'oklch(0.72 0.2 295)',\r\n '--primary-foreground': 'oklch(0.11 0.04 290)',\r\n '--secondary': 'oklch(0.21 0.04 288)',\r\n '--secondary-foreground': 'oklch(0.93 0.01 290)',\r\n '--muted': 'oklch(0.21 0.04 288)',\r\n '--muted-foreground': 'oklch(0.65 0.035 290)',\r\n '--accent': 'oklch(0.21 0.04 310)',\r\n '--accent-foreground': 'oklch(0.93 0.01 310)',\r\n '--destructive': 'oklch(0.704 0.191 22.216)',\r\n '--border': 'oklch(1 0 0 / 8%)',\r\n '--input': 'oklch(1 0 0 / 12%)',\r\n '--ring': 'oklch(0.72 0.2 295)',\r\n '--chart-1': 'oklch(0.72 0.2 295)',\r\n '--chart-2': 'oklch(0.72 0.25 322)',\r\n '--chart-3': 'oklch(0.627 0.265 303.9)',\r\n '--chart-4': 'oklch(0.769 0.188 70.08)',\r\n '--chart-5': 'oklch(0.696 0.17 162.48)',\r\n },\r\n },\r\n },\r\n]\r\n\r\nexport const DEFAULT_COLOR_THEME = 'zinc'\r\n\r\ntype ColorThemeProviderState = {\r\n colorTheme: string\r\n setColorTheme: (name: string) => void\r\n resetColorTheme: () => void\r\n currentTheme: ColorThemeDefinition\r\n}\r\n\r\nconst ColorThemeContext = createContext<ColorThemeProviderState>({\r\n colorTheme: DEFAULT_COLOR_THEME,\r\n setColorTheme: () => null,\r\n resetColorTheme: () => null,\r\n currentTheme: colorThemes[0],\r\n})\r\n\r\nfunction applyColorTokens(themeName: string, isDark: boolean) {\r\n const theme = colorThemes.find((t) => t.name === themeName)\r\n if (!theme) return\r\n\r\n const root = document.documentElement\r\n\r\n // Clear previous theme overrides so stale vars don't leak between themes\r\n for (const prop of ALL_THEME_VARS) {\r\n root.style.removeProperty(prop)\r\n }\r\n\r\n const tokens = isDark ? theme.tokens.dark : theme.tokens.light\r\n for (const [prop, value] of Object.entries(tokens)) {\r\n root.style.setProperty(prop, value)\r\n }\r\n\r\n // ── Derive sidebar vars from theme so the full page reflects the theme ──\r\n // Only set sidebar vars if the theme didn't explicitly define them\r\n const bg = tokens['--background']\r\n const fg = tokens['--foreground']\r\n const primary = tokens['--primary']\r\n const primaryFg = tokens['--primary-foreground']\r\n const accent = tokens['--accent']\r\n const accentFg = tokens['--accent-foreground']\r\n const border = tokens['--border']\r\n const ring = tokens['--ring']\r\n\r\n if (bg && !tokens['--sidebar']) {\r\n // Sidebar background: slightly darker/different shade than the page bg\r\n // We use the card color if available, otherwise bg itself\r\n const sidebarBg = tokens['--card'] ?? bg\r\n root.style.setProperty('--sidebar', sidebarBg)\r\n }\r\n if (fg && !tokens['--sidebar-foreground']) {\r\n root.style.setProperty('--sidebar-foreground', fg)\r\n }\r\n if (primary && !tokens['--sidebar-primary']) {\r\n root.style.setProperty('--sidebar-primary', primary)\r\n }\r\n if (primaryFg && !tokens['--sidebar-primary-foreground']) {\r\n root.style.setProperty('--sidebar-primary-foreground', primaryFg)\r\n }\r\n if (accent && !tokens['--sidebar-accent']) {\r\n root.style.setProperty('--sidebar-accent', accent)\r\n }\r\n if (accentFg && !tokens['--sidebar-accent-foreground']) {\r\n root.style.setProperty('--sidebar-accent-foreground', accentFg)\r\n }\r\n if (border && !tokens['--sidebar-border']) {\r\n root.style.setProperty('--sidebar-border', border)\r\n }\r\n if (ring && !tokens['--sidebar-ring']) {\r\n root.style.setProperty('--sidebar-ring', ring)\r\n }\r\n}\r\n\r\nexport function ColorThemeProvider({ children }: { children: React.ReactNode }) {\r\n const { resolvedTheme } = useTheme()\r\n const [colorTheme, _setColorTheme] = useState<string>(\r\n () => getCookie(COLOR_THEME_COOKIE) || DEFAULT_COLOR_THEME\r\n )\r\n\r\n const currentTheme = useMemo(\r\n () => colorThemes.find((t) => t.name === colorTheme) || colorThemes[0],\r\n [colorTheme]\r\n )\r\n\r\n useEffect(() => {\r\n applyColorTokens(colorTheme, resolvedTheme === 'dark')\r\n }, [colorTheme, resolvedTheme])\r\n\r\n const setColorTheme = useCallback(\r\n (name: string) => {\r\n setCookie(COLOR_THEME_COOKIE, name, COLOR_THEME_COOKIE_MAX_AGE)\r\n _setColorTheme(name)\r\n },\r\n []\r\n )\r\n\r\n const resetColorTheme = useCallback(() => {\r\n removeCookie(COLOR_THEME_COOKIE)\r\n _setColorTheme(DEFAULT_COLOR_THEME)\r\n }, [])\r\n\r\n const value = useMemo(\r\n () => ({\r\n colorTheme,\r\n setColorTheme,\r\n resetColorTheme,\r\n currentTheme,\r\n }),\r\n [colorTheme, setColorTheme, resetColorTheme, currentTheme]\r\n )\r\n\r\n return (\r\n <ColorThemeContext value={value}>\r\n {children}\r\n </ColorThemeContext>\r\n )\r\n}\r\n\r\n// eslint-disable-next-line react-refresh/only-export-components\r\nexport const useColorTheme = () => {\r\n const context = useContext(ColorThemeContext)\r\n if (!context)\r\n throw new Error('useColorTheme must be used within a ColorThemeProvider')\r\n return context\r\n}\r\n","import { Loader } from 'lucide-react'\r\nimport { cn } from '../../../lib/utils'\r\nimport { FormControl } from '../ui/form'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '../ui/select'\r\n\r\ntype SelectDropdownProps = {\r\n onValueChange?: (value: string) => void\r\n defaultValue: string | undefined\r\n placeholder?: string\r\n isPending?: boolean\r\n items: { label: string; value: string }[] | undefined\r\n disabled?: boolean\r\n className?: string\r\n isControlled?: boolean\r\n}\r\n\r\nexport function SelectDropdown({\r\n defaultValue,\r\n onValueChange,\r\n isPending,\r\n items,\r\n placeholder,\r\n disabled,\r\n className = '',\r\n isControlled = false,\r\n}: SelectDropdownProps) {\r\n const defaultState = isControlled\r\n ? { value: defaultValue, onValueChange }\r\n : { defaultValue, onValueChange }\r\n return (\r\n <Select {...defaultState}>\r\n <FormControl>\r\n <SelectTrigger disabled={disabled} className={cn(className)}>\r\n <SelectValue placeholder={placeholder ?? 'Select'} />\r\n </SelectTrigger>\r\n </FormControl>\r\n <SelectContent>\r\n {isPending ? (\r\n <SelectItem disabled value='loading' className='h-14'>\r\n <div className='flex items-center justify-center gap-2'>\r\n <Loader className='h-5 w-5 animate-spin' />\r\n {' '}\r\n Loading...\r\n </div>\r\n </SelectItem>\r\n ) : (\r\n items?.map(({ label, value }) => (\r\n <SelectItem key={value} value={value}>\r\n {label}\r\n </SelectItem>\r\n ))\r\n )}\r\n </SelectContent>\r\n </Select>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { useRef, useState } from 'react'\r\nimport { cn } from '../../../lib/utils'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../ui/popover'\r\nimport {\r\n Tooltip,\r\n TooltipContent,\r\n TooltipProvider,\r\n TooltipTrigger,\r\n} from '../ui/tooltip'\r\n\r\ntype LongTextProps = {\r\n children: React.ReactNode\r\n className?: string\r\n contentClassName?: string\r\n}\r\n\r\nexport function LongText({\r\n children,\r\n className = '',\r\n contentClassName = '',\r\n}: LongTextProps) {\r\n const ref = useRef<HTMLDivElement>(null)\r\n const [isOverflown, setIsOverflown] = useState(false)\r\n\r\n // Use ref callback to check overflow when element is mounted\r\n const refCallback = (node: HTMLDivElement | null) => {\r\n ref.current = node\r\n if (node && checkOverflow(node)) {\r\n queueMicrotask(() => setIsOverflown(true))\r\n }\r\n }\r\n\r\n if (!isOverflown)\r\n return (\r\n <div ref={refCallback} className={cn('truncate', className)}>\r\n {children}\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n <div className='hidden sm:block'>\r\n <TooltipProvider delayDuration={0}>\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <div ref={refCallback} className={cn('truncate', className)}>\r\n {children}\r\n </div>\r\n </TooltipTrigger>\r\n <TooltipContent>\r\n <p className={contentClassName}>{children}</p>\r\n </TooltipContent>\r\n </Tooltip>\r\n </TooltipProvider>\r\n </div>\r\n <div className='sm:hidden'>\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <div ref={refCallback} className={cn('truncate', className)}>\r\n {children}\r\n </div>\r\n </PopoverTrigger>\r\n <PopoverContent className={cn('w-fit', contentClassName)}>\r\n <p>{children}</p>\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nconst checkOverflow = (textContainer: HTMLDivElement | null) => {\r\n if (textContainer) {\r\n return (\r\n textContainer.offsetHeight < textContainer.scrollHeight ||\r\n textContainer.offsetWidth < textContainer.scrollWidth\r\n )\r\n }\r\n return false\r\n}\r\n","'use client'\n\nimport { SearchIcon } from 'lucide-react'\nimport { cn } from '../../../lib/utils'\nimport { useSearch } from '../../../context/search-provider'\nimport { Button } from '../ui/button'\n\nexport function Search({\n className = '',\n placeholder = 'Search',\n iconOnly = true,\n ...props\n}: React.ComponentProps<'button'> & { placeholder?: string; iconOnly?: boolean }) {\n const { setOpen } = useSearch()\n\n const openSearch = () => setOpen(true)\n\n return (\n <Button\n {...props}\n variant='ghost'\n size='icon'\n className={cn('size-8 shrink-0', className)}\n aria-label='Search'\n aria-keyshortcuts='Meta+K Control+K'\n onClick={openSearch}\n >\n <SearchIcon className='size-5' aria-hidden='true' />\n </Button>\n )\n}\n","'use client'\r\n\r\nimport { createContext, useContext, useEffect, useState } from 'react'\r\nimport { CommandMenu } from '@/components/command-menu'\r\n\r\ntype SearchContextType = {\r\n open: boolean\r\n setOpen: React.Dispatch<React.SetStateAction<boolean>>\r\n}\r\n\r\nconst SearchContext = createContext<SearchContextType | null>(null)\r\n\r\ntype SearchProviderProps = {\r\n children: React.ReactNode\r\n}\r\n\r\nexport function SearchProvider({ children }: SearchProviderProps) {\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n const down = (e: KeyboardEvent) => {\r\n if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {\r\n e.preventDefault()\r\n setOpen((open) => !open)\r\n }\r\n }\r\n document.addEventListener('keydown', down)\r\n return () => document.removeEventListener('keydown', down)\r\n }, [])\r\n\r\n return (\r\n <SearchContext value={{ open, setOpen }}>\r\n {children}\r\n <CommandMenu />\r\n </SearchContext>\r\n )\r\n}\r\n\r\nexport const useSearch = () => {\r\n const searchContext = useContext(SearchContext)\r\n\r\n if (!searchContext) {\r\n return {\r\n open: false,\r\n setOpen: () => {},\r\n }\r\n }\r\n\r\n return searchContext\r\n}\r\n","'use client'\n\nimport React from 'react'\r\nimport { useRouter } from 'next/navigation'\r\nimport { ArrowRight, ChevronRight, Laptop, Moon, Sun } from 'lucide-react'\r\nimport { useSearch } from '@/context/search-provider'\r\nimport { useTheme } from '@/context/theme-provider'\r\nimport {\r\n CommandDialog,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n CommandSeparator,\r\n} from '@/components/ui/command'\r\nimport { sidebarData } from './layout/data/sidebar-data'\r\nimport { ScrollArea } from './ui/scroll-area'\r\n\r\nexport function CommandMenu() {\r\n const router = useRouter()\r\n const { setTheme } = useTheme()\r\n const { open, setOpen } = useSearch()\r\n\r\n const runCommand = React.useCallback(\r\n (command: () => unknown) => {\r\n setOpen(false)\r\n command()\r\n },\r\n [setOpen]\r\n )\r\n\r\n return (\r\n <CommandDialog modal open={open} onOpenChange={setOpen}>\r\n <CommandInput placeholder='Type a command or search...' />\r\n <CommandList>\r\n <ScrollArea type='hover' className='h-72 pe-1'>\r\n <CommandEmpty>No results found.</CommandEmpty>\r\n {sidebarData.navGroups.map((group) => (\r\n <CommandGroup key={group.title} heading={group.title}>\r\n {group.items.map((navItem, i) => {\r\n if (navItem.url)\r\n return (\r\n <CommandItem\r\n key={`${navItem.url}-${i}`}\r\n value={navItem.title}\r\n onSelect={() => {\r\n runCommand(() => router.push(navItem.url))\r\n }}\r\n >\r\n <div className='flex size-4 items-center justify-center'>\r\n <ArrowRight className='size-2 text-muted-foreground/80' />\r\n </div>\r\n {navItem.title}\r\n </CommandItem>\r\n )\r\n\r\n return navItem.items?.map((subItem, i) => (\r\n <CommandItem\r\n key={`${navItem.title}-${subItem.url}-${i}`}\r\n value={`${navItem.title}-${subItem.url}`}\r\n onSelect={() => {\r\n runCommand(() => router.push(subItem.url))\r\n }}\r\n >\r\n <div className='flex size-4 items-center justify-center'>\r\n <ArrowRight className='size-2 text-muted-foreground/80' />\r\n </div>\r\n {navItem.title} <ChevronRight /> {subItem.title}\r\n </CommandItem>\r\n ))\r\n })}\r\n </CommandGroup>\r\n ))}\r\n <CommandSeparator />\r\n <CommandGroup heading='Theme'>\r\n <CommandItem onSelect={() => runCommand(() => setTheme('light'))}>\r\n <Sun /> <span>Light</span>\r\n </CommandItem>\r\n <CommandItem onSelect={() => runCommand(() => setTheme('dark'))}>\r\n <Moon className='scale-90' />\r\n <span>Dark</span>\r\n </CommandItem>\r\n <CommandItem onSelect={() => runCommand(() => setTheme('system'))}>\r\n <Laptop />\r\n <span>System</span>\r\n </CommandItem>\r\n </CommandGroup>\r\n </ScrollArea>\r\n </CommandList>\r\n </CommandDialog>\r\n )\r\n}\r\n","import {\n Mail,\n HelpCircle,\n Settings,\n Command,\n Bot,\n SearchIcon,\n ChartArea,\n Map,\n Route,\n Link,\n Ticket,\n} from 'lucide-react'\nimport { type SidebarData } from '../types'\n\nexport const sidebarData: SidebarData = {\n user: {\n name: 'satnaing',\n email: 'satnaingdev@gmail.com',\n avatar: '/avatars/shadcn.jpg',\n },\n\n teams: [\n {\n name: 'Amoga App',\n logo: Command,\n plan: 'Demo Company',\n },\n ],\n\n navGroups: [\n {\n title: 'Menu',\n items: [\n {\n title: 'Message',\n url: '/message',\n icon: Mail,\n },\n {\n title: 'Email Settings',\n url: '/email-settings',\n icon: Settings,\n },\n {\n title: 'Design System',\n url: '/',\n icon: Settings,\n },\n {\n title: 'Vouchers',\n url: '/vouchers',\n icon: Ticket,\n },\n {\n title: 'AI Chat',\n url: '/ai_chat',\n icon: Bot,\n },\n {\n title: 'AI Search',\n url: '/ai_search',\n icon: SearchIcon,\n },\n {\n title: 'Chart Template',\n url: '/charttemplate',\n icon: ChartArea,\n },\n {\n title: 'Map Template',\n url: '/map',\n icon: Map,\n },\n {\n title: 'Route Doc',\n url: '/routedoc',\n icon: Route,\n },\n {\n title: 'Link Maker',\n url: '/link-maker',\n icon: Link,\n },\n ],\n },\n\n {\n title: 'Other',\n items: [\n {\n title: 'Settings',\n icon: Settings,\n items: [\n // Add settings pages here\n ],\n },\n {\n title: 'Help Center',\n url: '/help-center',\n icon: HelpCircle,\n },\n ],\n },\n ],\n}\n","import { Card, CardContent } from \"../ui/card\";\r\nimport { cn } from \"../../../lib/utils\";\r\n\r\nconst data = [\r\n {\r\n name: \"Profit\",\r\n value: \"$287,654.00\",\r\n change: \"+8.32%\",\r\n changeType: \"positive\",\r\n },\r\n {\r\n name: \"Late payments\",\r\n value: \"$9,435.00\",\r\n change: \"-12.64%\",\r\n changeType: \"negative\",\r\n },\r\n {\r\n name: \"Pending orders\",\r\n value: \"$173,229.00\",\r\n change: \"+2.87%\",\r\n changeType: \"positive\",\r\n },\r\n {\r\n name: \"Operating costs\",\r\n value: \"$52,891.00\",\r\n change: \"-5.73%\",\r\n changeType: \"negative\",\r\n },\r\n];\r\n\r\nexport function Stats01() {\r\n return (\r\n <div className=\"flex items-center justify-center p-10\">\r\n <div className=\"mx-auto grid grid-cols-1 gap-px rounded-xl bg-border sm:grid-cols-2 lg:grid-cols-4\">\r\n {data.map((stat, index) => (\r\n <Card\r\n key={stat.name}\r\n className={cn(\r\n \"rounded-none border-0 shadow-none py-0\",\r\n index === 0 && \"rounded-l-xl\",\r\n index === data.length - 1 && \"rounded-r-xl\"\r\n )}\r\n >\r\n <CardContent className=\"flex flex-wrap items-baseline justify-between gap-x-4 gap-y-2 p-4 sm:p-6\">\r\n <div className=\"text-sm font-medium text-muted-foreground\">\r\n {stat.name}\r\n </div>\r\n <div\r\n className={cn(\r\n \"tabular-nums text-xs font-medium\",\r\n stat.changeType === \"positive\"\r\n ? \"text-green-800 dark:text-green-400\"\r\n : \"text-red-800 dark:text-red-400\"\r\n )}\r\n >\r\n {stat.change}\r\n </div>\r\n <div className=\"tabular-nums w-full flex-none text-3xl font-medium tracking-tight text-foreground\">\r\n {stat.value}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Stats01;\r\n","import { format } from 'date-fns'\r\nimport { Calendar as CalendarIcon } from 'lucide-react'\r\nimport { Button } from '../ui/button'\r\nimport { Calendar } from '../ui/calendar'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../ui/popover'\r\n\r\ntype DatePickerProps = {\r\n selected: Date | undefined\r\n onSelect: (date: Date | undefined) => void\r\n placeholder?: string\r\n}\r\n\r\nexport function DatePicker({\r\n selected,\r\n onSelect,\r\n placeholder = 'Pick a date',\r\n}: DatePickerProps) {\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant='outline'\r\n data-empty={!selected}\r\n className='w-60 justify-start text-start font-normal data-[empty=true]:text-muted-foreground'\r\n >\r\n {selected ? (\r\n format(selected, 'MMM d, yyyy')\r\n ) : (\r\n <span>{placeholder}</span>\r\n )}\r\n <CalendarIcon className='ms-auto h-4 w-4 opacity-50' />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className='w-auto p-0'>\r\n <Calendar\r\n mode='single'\r\n captionLayout='dropdown'\r\n selected={selected}\r\n onSelect={onSelect}\r\n disabled={(date: Date) =>\r\n date > new Date() || date < new Date('1900-01-01')\r\n }\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport React from 'react'\r\nimport QRCode from 'react-qr-code'\r\nimport { toast } from 'sonner'\r\n\r\ninterface QrCodeDisplayProps {\r\n value: string\r\n size?: number\r\n className?: string\r\n}\r\n\r\nexport function QrCodeDisplay({ value, size = 140, className }: QrCodeDisplayProps) {\r\n if (!value) {\r\n return (\r\n <div\r\n className={`flex items-center justify-center bg-muted/40 rounded text-xs text-muted-foreground ${className ?? ''}`}\r\n style={{ width: size, height: size }}\r\n >\r\n No URL\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <div className={className} style={{ width: size, height: size }}>\r\n <QRCode\r\n value={value}\r\n size={size}\r\n level={value.length > 800 ? 'L' : 'M'}\r\n bgColor=\"#ffffff\"\r\n fgColor=\"#000000\"\r\n style={{ height: 'auto', maxWidth: '100%', width: '100%' }}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport const QRCodeDisplay = QrCodeDisplay\r\nexport type { QrCodeDisplayProps, QrCodeDisplayProps as QRCodeDisplayProps }\r\n\r\nexport async function downloadQrCode(value: string, filename: string, size = 400) {\r\n if (!value) return\r\n\r\n try {\r\n const wrapper = document.createElement('div')\r\n wrapper.style.position = 'absolute'\r\n wrapper.style.left = '-9999px'\r\n document.body.appendChild(wrapper)\r\n\r\n const { createRoot } = await import('react-dom/client')\r\n const root = createRoot(wrapper)\r\n root.render(\r\n React.createElement(QRCode, {\r\n value,\r\n size,\r\n level: 'M',\r\n bgColor: '#ffffff',\r\n fgColor: '#000000',\r\n })\r\n )\r\n\r\n await new Promise((r) => setTimeout(r, 100))\r\n\r\n const svgEl = wrapper.querySelector('svg')\r\n if (!svgEl) throw new Error('QR render failed')\r\n\r\n const svgData = new XMLSerializer().serializeToString(svgEl)\r\n const canvas = document.createElement('canvas')\r\n canvas.width = size\r\n canvas.height = size\r\n const ctx = canvas.getContext('2d')\r\n if (!ctx) throw new Error('Canvas unavailable')\r\n\r\n const img = new Image()\r\n const blob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' })\r\n const url = URL.createObjectURL(blob)\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n img.onload = () => {\r\n ctx.fillStyle = '#ffffff'\r\n ctx.fillRect(0, 0, size, size)\r\n ctx.drawImage(img, 0, 0, size, size)\r\n URL.revokeObjectURL(url)\r\n resolve()\r\n }\r\n img.onerror = reject\r\n img.src = url\r\n })\r\n\r\n root.unmount()\r\n document.body.removeChild(wrapper)\r\n\r\n canvas.toBlob((pngBlob) => {\r\n if (!pngBlob) return\r\n const blobUrl = window.URL.createObjectURL(pngBlob)\r\n const a = document.createElement('a')\r\n a.href = blobUrl\r\n a.download = filename\r\n document.body.appendChild(a)\r\n a.click()\r\n document.body.removeChild(a)\r\n window.URL.revokeObjectURL(blobUrl)\r\n toast.success('QR Code downloaded successfully!')\r\n }, 'image/png')\r\n } catch {\r\n toast.error('Failed to download QR code.')\r\n }\r\n}\r\n","import React from 'react'\nimport {\n Check,\n CheckCheck,\n Clock,\n AlertCircle,\n Download,\n FileText,\n MapPin,\n Eye,\n MoreHorizontal,\n CornerUpLeft,\n CornerUpRight,\n Pin,\n Star,\n Heart,\n Flag,\n Archive,\n Bell,\n Trash2,\n ChevronRight,\n ThumbsUp,\n ThumbsDown,\n Copy,\n Share2,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport type ChatMessageStatus = 'sending' | 'sent' | 'delivered' | 'read' | 'failed'\n\nexport interface ChatAttachmentItem {\n id?: string\n name: string\n url?: string\n size?: number\n type?: 'image' | 'file' | 'audio' | 'video' | 'pdf' | string\n mimeType?: string\n duration?: number\n statusText?: string\n}\n\nexport interface ChatLocationItem {\n latitude: number\n longitude: number\n address?: string\n title?: string\n}\n\nexport interface ChatBubbleProps {\n id?: string\n content?: string\n isOwn?: boolean\n senderName?: string\n senderAvatar?: string\n time?: string | Date\n status?: ChatMessageStatus\n attachments?: ChatAttachmentItem[]\n location?: ChatLocationItem\n reactions?: Array<{ emoji: string; count: number; users?: string[] }>\n replyTo?: {\n senderName?: string\n content?: string\n id?: string\n }\n isHighlighted?: boolean\n showActions?: boolean\n className?: string\n bubbleClassName?: string\n onReply?: () => void\n onForward?: () => void\n onPin?: () => void\n onStar?: () => void\n onFavorite?: () => void\n onFlag?: () => void\n onArchive?: () => void\n onActionThis?: () => void\n onDelete?: () => void\n onThumbsUp?: () => void\n onThumbsDown?: () => void\n onCopy?: () => void\n onShare?: () => void\n onActionClick?: (action: string) => void\n onAttachmentClick?: (attachment: ChatAttachmentItem) => void\n onAttachmentPreview?: (attachment: ChatAttachmentItem) => void\n onLocationClick?: (location: ChatLocationItem) => void\n children?: React.ReactNode\n}\n\nexport function ChatBubble({\n id,\n content,\n isOwn = false,\n senderName = 'Mohammed Aman',\n senderAvatar,\n time,\n status,\n attachments = [],\n location,\n reactions = [],\n replyTo,\n isHighlighted = false,\n showActions = true,\n className,\n bubbleClassName,\n onReply,\n onForward,\n onPin,\n onStar,\n onFavorite,\n onFlag,\n onArchive,\n onActionThis,\n onDelete,\n onThumbsUp,\n onThumbsDown,\n onCopy,\n onShare,\n onActionClick,\n onAttachmentClick,\n onAttachmentPreview,\n onLocationClick,\n children,\n}: ChatBubbleProps) {\n const formattedTime = time instanceof Date ? time.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : time\n\n const renderStatusIcon = () => {\n if (!status) return null\n switch (status) {\n case 'sending':\n return <Clock className=\"h-3.5 w-3.5 text-muted-foreground animate-spin shrink-0\" />\n case 'sent':\n return <Check className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n case 'delivered':\n return <CheckCheck className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n case 'read':\n return <CheckCheck className=\"h-3.5 w-3.5 text-sky-500 shrink-0\" />\n case 'failed':\n return <AlertCircle className=\"h-3.5 w-3.5 text-destructive shrink-0\" />\n default:\n return null\n }\n }\n\n const handleCopy = () => {\n if (content) {\n navigator.clipboard?.writeText(content)\n }\n onCopy?.()\n }\n\n const imageAttachments = attachments.filter((att) => att.type === 'image' || att.url?.match(/\\.(jpeg|jpg|gif|png|webp)/i))\n const fileAttachments = attachments.filter((att) => att.type !== 'image' && !att.url?.match(/\\.(jpeg|jpg|gif|png|webp)/i))\n\n const initials = senderName\n .split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n .toUpperCase() || 'MO'\n\n return (\n <div\n id={id ? `chat-bubble-${id}` : undefined}\n className={cn(\n 'group relative flex w-full gap-3 py-2 transition-colors duration-150',\n isHighlighted && 'bg-primary/5 rounded-xl px-2',\n className\n )}\n >\n {/* Avatar on Left */}\n <Avatar className=\"h-9 w-9 flex-shrink-0 mt-0.5 bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 font-semibold border border-border/50 rounded-full\">\n {senderAvatar && <AvatarImage src={senderAvatar} alt={senderName} />}\n <AvatarFallback className=\"text-xs font-semibold\">\n {initials}\n </AvatarFallback>\n </Avatar>\n\n {/* Main Column */}\n <div className=\"flex flex-col min-w-0 flex-1 items-start relative\">\n {/* Sender Name */}\n {senderName && (\n <span className=\"text-xs font-semibold text-foreground/85 mb-1\">\n {senderName}\n </span>\n )}\n\n {/* Reply Quote Banner */}\n {replyTo && (\n <div\n onClick={onReply}\n className=\"mb-1 cursor-pointer rounded-lg border-l-2 border-indigo-600 bg-muted/60 p-1.5 text-xs transition-opacity hover:opacity-80\"\n >\n <div className=\"font-medium text-[10px]\">{replyTo.senderName || 'Replying to message'}</div>\n <div className=\"line-clamp-1 text-[11px] text-muted-foreground\">{replyTo.content}</div>\n </div>\n )}\n\n {/* Message Content */}\n {children ? (\n children\n ) : (\n <div className=\"space-y-2 w-full\">\n {/* Plain Text Message */}\n {content && (\n <p className=\"text-sm font-medium text-foreground whitespace-pre-wrap leading-relaxed\">\n {content}\n </p>\n )}\n\n {/* Document / PDF Card (Matching User Screenshot) */}\n {fileAttachments.map((att, idx) => (\n <div\n key={att.id || idx}\n className=\"w-full max-w-[340px] rounded-2xl border border-border/80 bg-background p-3.5 flex items-center justify-between gap-3 shadow-2xs hover:border-border transition-all duration-150\"\n >\n {/* Orange Document Icon */}\n <div className=\"flex h-11 w-11 items-center justify-center rounded-xl bg-amber-500/10 text-amber-600 dark:bg-amber-950/40 dark:text-amber-400 shrink-0\">\n <FileText className=\"h-5 w-5\" />\n </div>\n\n {/* Info Column */}\n <div className=\"min-w-0 flex-1\">\n <h5 className=\"truncate text-xs font-bold text-foreground\">\n {att.name}\n </h5>\n <p className=\"text-[11px] text-muted-foreground\">\n {att.size ? `${(att.size / 1024).toFixed(0)} KB • ` : ''}\n {att.type?.toUpperCase() || 'PDF'}\n </p>\n {att.statusText && (\n <span className=\"inline-block text-[11px] font-semibold text-emerald-600 dark:text-emerald-400\">\n {att.statusText}\n </span>\n )}\n </div>\n\n {/* Right Action Buttons */}\n <div className=\"flex items-center gap-1 shrink-0 text-muted-foreground\">\n <button\n type=\"button\"\n onClick={() => onAttachmentPreview?.(att)}\n className=\"p-1 rounded-md hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n title=\"Preview\"\n >\n <Eye className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onAttachmentClick?.(att)}\n className=\"p-1 rounded-md hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n title=\"Download\"\n >\n <Download className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n ))}\n\n {/* Location Card */}\n {location && (\n <div\n onClick={() => onLocationClick?.(location)}\n className=\"w-full max-w-[340px] rounded-2xl border border-border/80 bg-background overflow-hidden shadow-2xs cursor-pointer hover:border-border transition-all duration-150\"\n >\n <div className=\"relative h-36 w-full bg-slate-100 dark:bg-slate-900 flex items-center justify-center overflow-hidden\">\n <div className=\"absolute inset-0 bg-[radial-gradient(#cbd5e1_1px,transparent_1px)] dark:bg-[radial-gradient(#334155_1px,transparent_1px)] [background-size:16px_16px] opacity-70\" />\n <div className=\"relative z-10 flex h-10 w-10 items-center justify-center rounded-full bg-emerald-600 text-white shadow-md\">\n <MapPin className=\"h-5 w-5 fill-white text-emerald-600\" />\n </div>\n <div className=\"absolute bottom-1 left-2 rounded bg-background/80 px-1.5 py-0.5 text-[9px] text-muted-foreground backdrop-blur-xs\">\n © CARTO, © OpenStreetMap\n </div>\n </div>\n <div className=\"p-3 flex items-start gap-2.5 bg-muted/30\">\n <div className=\"flex h-6 w-6 items-center justify-center rounded-full bg-emerald-500/10 text-emerald-600 shrink-0 mt-0.5\">\n <MapPin className=\"h-3.5 w-3.5 text-emerald-600\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h5 className=\"text-xs font-bold text-foreground\">\n {location.title || 'Current Location'}\n </h5>\n <p className=\"text-[11px] text-muted-foreground truncate\">\n {location.address || `${location.latitude.toFixed(4)}, ${location.longitude.toFixed(4)}`}\n </p>\n </div>\n </div>\n </div>\n )}\n\n {/* Image Attachments */}\n {imageAttachments.map((img, idx) => (\n <div\n key={img.id || idx}\n onClick={() => onAttachmentClick?.(img)}\n className=\"w-full max-w-[340px] rounded-2xl overflow-hidden border border-border/80 bg-background shadow-2xs cursor-pointer group/img\"\n >\n {img.url ? (\n <img\n src={img.url}\n alt={img.name}\n className=\"w-full h-44 object-cover transition-transform duration-200 group-hover/img:scale-[1.02]\"\n />\n ) : (\n <div className=\"w-full h-44 bg-slate-900 flex items-center justify-center text-white text-xs\">\n {img.name}\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* Timestamp and Delivery Checkmarks Underneath */}\n <div className=\"mt-1 flex items-center gap-1 text-[11px] text-muted-foreground select-none\">\n {formattedTime && <span>{formattedTime}</span>}\n {renderStatusIcon()}\n </div>\n\n {/* Hover Action Bar: Pill Bar with ThumbsUp, ThumbsDown, Copy, Share, 3-dots (Matching Screenshot 2) */}\n {showActions && (\n <div className=\"mt-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <div className=\"inline-flex items-center gap-2.5 rounded-full border border-border/80 bg-background/95 backdrop-blur-xs px-3 py-1 shadow-md\">\n <button\n type=\"button\"\n onClick={onThumbsUp}\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Like\"\n >\n <ThumbsUp className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={onThumbsDown}\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Dislike\"\n >\n <ThumbsDown className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Copy\"\n >\n <Copy className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={onShare}\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Share\"\n >\n <Share2 className=\"h-3.5 w-3.5\" />\n </button>\n\n {/* 3-Dot More Menu Matching Screenshot 2 */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"p-0.5 text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"More actions\"\n >\n <MoreHorizontal className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n side=\"top\"\n sideOffset={8}\n className=\"w-48 rounded-2xl p-1.5 shadow-2xl border border-border/80 bg-background text-foreground space-y-0.5\"\n >\n <DropdownMenuItem\n onClick={onReply}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <CornerUpLeft className=\"h-4 w-4 text-blue-600 shrink-0\" />\n <span>Reply</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onForward}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <CornerUpRight className=\"h-4 w-4 text-sky-500 shrink-0\" />\n <span>Forward</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onPin}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Pin className=\"h-4 w-4 text-purple-600 shrink-0\" />\n <span>Pin Message</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onStar}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Star className=\"h-4 w-4 text-amber-500 shrink-0\" />\n <span>Star</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onFavorite}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Heart className=\"h-4 w-4 text-rose-500 shrink-0\" />\n <span>Favorite</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onFlag}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Flag className=\"h-4 w-4 text-red-600 shrink-0\" />\n <span>Flag</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onArchive}\n className=\"gap-2.5 py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Archive className=\"h-4 w-4 text-indigo-600 shrink-0\" />\n <span>Archive</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onActionThis}\n className=\"flex items-center justify-between py-1.5 px-2 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Bell className=\"h-4 w-4 text-orange-500 shrink-0\" />\n <span>Action This</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onDelete}\n className=\"flex items-center justify-between py-1.5 px-2 text-xs font-semibold text-rose-500 hover:text-rose-600 hover:bg-rose-50 dark:hover:bg-rose-950/30 cursor-pointer rounded-xl\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Trash2 className=\"h-4 w-4 text-rose-500 shrink-0\" />\n <span>Delete</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-rose-400\" />\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n )}\n\n {/* Emoji Reactions Row */}\n {reactions.length > 0 && (\n <div className=\"mt-1 flex flex-wrap gap-1\">\n {reactions.map((react, i) => (\n <span\n key={i}\n className=\"inline-flex items-center gap-1 rounded-full border border-border/60 bg-background px-2 py-0.5 text-xs shadow-2xs cursor-pointer hover:bg-muted\"\n >\n <span>{react.emoji}</span>\n <span className=\"font-semibold text-[10px] text-muted-foreground\">{react.count}</span>\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import React, { useRef, useEffect, useState } from 'react'\nimport {\n Send,\n Paperclip,\n Smile,\n Mic,\n Camera,\n X,\n ImagePlus,\n Video,\n FileText,\n MapPin,\n FileImage,\n RefreshCw,\n Scan,\n ScanLine,\n FileCode2,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '@/design-system/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport type AttachmentOptionType =\n | 'images'\n | 'videos'\n | 'documents'\n | 'location'\n | 'image-converter'\n | 'doc-converter'\n | 'doc-scanner'\n | 'scan-document'\n | 'extract-text'\n\nexport interface ChatInputProps {\n value: string\n onChange: (value: string) => void\n onSend: () => void\n placeholder?: string\n disabled?: boolean\n isLoading?: boolean\n maxLength?: number\n replyMessage?: {\n senderName?: string\n content?: string\n onClear?: () => void\n }\n showAttachments?: boolean\n showEmoji?: boolean\n showCamera?: boolean\n showVoice?: boolean\n onAttachmentClick?: () => void\n onSelectAttachmentType?: (type: AttachmentOptionType) => void\n onEmojiClick?: () => void\n onCameraClick?: () => void\n onVoiceClick?: () => void\n customActions?: React.ReactNode\n className?: string\n}\n\nexport function ChatInput({\n value,\n onChange,\n onSend,\n placeholder = 'Message',\n disabled = false,\n isLoading = false,\n maxLength,\n replyMessage,\n showAttachments = true,\n showEmoji = true,\n showCamera = true,\n showVoice = true,\n onAttachmentClick,\n onSelectAttachmentType,\n onEmojiClick,\n onCameraClick,\n onVoiceClick,\n customActions,\n className,\n}: ChatInputProps) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const [isAttachOpen, setIsAttachOpen] = useState(false)\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n if (value.trim() && !disabled && !isLoading) {\n onSend()\n }\n }\n }\n\n // Auto-resize textarea height\n useEffect(() => {\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto'\n textareaRef.current.style.height = `${Math.min(textareaRef.current.scrollHeight, 120)}px`\n }\n }, [value])\n\n const hasText = value.trim().length > 0\n\n const handleSelectOption = (type: AttachmentOptionType) => {\n setIsAttachOpen(false)\n onSelectAttachmentType?.(type)\n if (type === 'images' || type === 'documents') {\n onAttachmentClick?.()\n }\n }\n\n return (\n <div className={cn('flex flex-col gap-1 w-full', className)}>\n {/* Replying Banner */}\n {replyMessage && (\n <div className=\"flex items-center justify-between rounded-t-xl border border-b-0 border-border/60 bg-muted/40 px-3 py-1.5 text-xs text-muted-foreground\">\n <div className=\"flex items-center gap-1.5 truncate\">\n <span className=\"font-medium text-foreground\">Replying to {replyMessage.senderName || 'Message'}:</span>\n <span className=\"truncate\">{replyMessage.content}</span>\n </div>\n {replyMessage.onClear && (\n <button\n onClick={replyMessage.onClear}\n className=\"ml-2 rounded-sm p-0.5 hover:bg-muted text-muted-foreground hover:text-foreground cursor-pointer\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n )}\n\n {/* Main Bar: Pill Container + Circular Action Button */}\n <div className=\"flex items-center gap-2\">\n {/* Rounded Pill Input Bar */}\n <div className=\"flex flex-1 items-center gap-1.5 rounded-full border border-border/80 bg-background px-3 py-1.5 shadow-2xs transition-all focus-within:border-indigo-500/60 focus-within:ring-1 focus-within:ring-indigo-500/30\">\n {/* Emoji Button on Left */}\n {showEmoji && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={onEmojiClick}\n disabled={disabled || isLoading}\n className=\"h-8 w-8 text-muted-foreground hover:text-foreground rounded-full shrink-0\"\n >\n <Smile className=\"h-4.5 w-4.5\" />\n </Button>\n )}\n\n {/* Text Input / Auto-resizing textarea */}\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled || isLoading}\n maxLength={maxLength}\n rows={1}\n className=\"max-h-28 min-h-[24px] w-full resize-none bg-transparent px-1 py-1 text-sm outline-none placeholder:text-muted-foreground/80 disabled:cursor-not-allowed disabled:opacity-50 leading-normal\"\n />\n\n {/* Paperclip Button with Exact Attachment Menu from Screenshot */}\n {showAttachments && (\n <DropdownMenu open={isAttachOpen} onOpenChange={setIsAttachOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={disabled || isLoading}\n className=\"h-8 w-8 text-muted-foreground hover:text-foreground rounded-full shrink-0\"\n title=\"Attachments\"\n >\n <Paperclip className=\"h-4.5 w-4.5\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" side=\"top\" sideOffset={8} className=\"w-56 rounded-2xl p-1.5 shadow-xl border border-border/80 bg-background text-foreground\">\n <DropdownMenuItem\n onClick={() => handleSelectOption('images')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <ImagePlus className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Images</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('videos')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Video className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Videos</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('documents')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <FileText className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Documents</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('location')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <MapPin className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Location</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('image-converter')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <FileImage className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Image Converter</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('doc-converter')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <RefreshCw className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Doc Converter</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('doc-scanner')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <Scan className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Doc Scanner</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('scan-document')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <ScanLine className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Scan Document</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={() => handleSelectOption('extract-text')}\n className=\"gap-3 py-2 px-2.5 text-xs font-semibold cursor-pointer rounded-xl hover:bg-muted\"\n >\n <FileCode2 className=\"h-4 w-4 text-slate-600 dark:text-slate-400 shrink-0\" />\n <span>Extract Text</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {/* Camera Button */}\n {showCamera && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={onCameraClick}\n disabled={disabled || isLoading}\n className=\"h-8 w-8 text-muted-foreground hover:text-foreground rounded-full shrink-0\"\n title=\"Camera\"\n >\n <Camera className=\"h-4.5 w-4.5\" />\n </Button>\n )}\n\n {customActions}\n </div>\n\n {/* Circular Action Button on Right (Mic or Send) */}\n {hasText ? (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={disabled || isLoading}\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-emerald-600 hover:bg-emerald-700 text-white shadow-md transition-transform active:scale-95 cursor-pointer disabled:opacity-50\"\n title=\"Send message\"\n >\n <Send className=\"h-4.5 w-4.5\" />\n </button>\n ) : showVoice ? (\n <button\n type=\"button\"\n onClick={onVoiceClick}\n disabled={disabled || isLoading}\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-emerald-600 hover:bg-emerald-700 text-white shadow-md transition-transform active:scale-95 cursor-pointer disabled:opacity-50\"\n title=\"Voice message\"\n >\n <Mic className=\"h-4.5 w-4.5\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={true}\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-emerald-600/50 text-white shadow-md cursor-not-allowed\"\n >\n <Send className=\"h-4.5 w-4.5\" />\n </button>\n )}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport {\n Bell,\n Flag,\n MoreVertical,\n CornerUpLeft,\n CornerUpRight,\n Pin,\n Star,\n Heart,\n Archive,\n Trash2,\n ChevronRight,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface ChatHeaderProps {\n title?: string\n subtitle?: string\n avatarUrl?: string\n status?: 'online' | 'offline' | 'away' | 'busy'\n isGroup?: boolean\n memberCount?: number\n actions?: React.ReactNode\n showDefaultActions?: boolean\n onAvatarClick?: () => void\n onNotificationClick?: () => void\n onFlagClick?: () => void\n onReply?: () => void\n onForward?: () => void\n onPin?: () => void\n onStar?: () => void\n onFavorite?: () => void\n onArchive?: () => void\n onActionThis?: () => void\n onDelete?: () => void\n className?: string\n}\n\nexport function ChatHeader({\n title = 'Mohammed Aman',\n subtitle = 'Last seen today at 04:58 PM',\n avatarUrl,\n status = 'online',\n isGroup = false,\n memberCount,\n actions,\n showDefaultActions = true,\n onAvatarClick,\n onNotificationClick,\n onFlagClick,\n onReply,\n onForward,\n onPin,\n onStar,\n onFavorite,\n onArchive,\n onActionThis,\n onDelete,\n className,\n}: ChatHeaderProps) {\n const getStatusColor = () => {\n switch (status) {\n case 'online':\n return 'bg-emerald-500'\n case 'away':\n return 'bg-amber-500'\n case 'busy':\n return 'bg-red-500'\n default:\n return 'bg-slate-400'\n }\n }\n\n const initials =\n title\n ?.split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n .toUpperCase() || 'MA'\n\n return (\n <div\n className={cn(\n 'flex items-center justify-between border-b border-border bg-background px-4 py-3 select-none',\n className\n )}\n >\n {/* Left Column: Avatar + Info */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"relative cursor-pointer shrink-0\" onClick={onAvatarClick}>\n <Avatar className=\"h-10 w-10 rounded-xl border border-border/60 shadow-2xs\">\n {avatarUrl && <AvatarImage src={avatarUrl} alt={title} className=\"rounded-xl\" />}\n <AvatarFallback className=\"rounded-xl bg-primary/10 text-primary font-bold text-sm\">\n {initials}\n </AvatarFallback>\n </Avatar>\n {!isGroup && (\n <span\n className={cn(\n 'absolute -bottom-0.5 -right-0.5 h-2.5 w-2.5 rounded-full ring-2 ring-background',\n getStatusColor()\n )}\n />\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-sm font-bold text-foreground tracking-tight leading-snug\">\n {title}\n </h2>\n <p className=\"truncate text-xs text-muted-foreground leading-tight\">\n {subtitle\n ? subtitle\n : isGroup\n ? `${memberCount || 0} members`\n : <span className=\"capitalize\">{status}</span>}\n </p>\n </div>\n </div>\n\n {/* Right Column: Actions (Outline Bell, Flag, 3-Dots Menu) */}\n <div className=\"flex items-center gap-1 shrink-0\">\n {actions ? (\n actions\n ) : showDefaultActions ? (\n <div className=\"flex items-center gap-1\">\n {/* Outline Bell Icon in Amber (No Fill) */}\n <button\n type=\"button\"\n onClick={onNotificationClick}\n className=\"p-1.5 rounded-lg hover:bg-muted text-amber-500 hover:text-amber-600 transition-colors cursor-pointer\"\n title=\"Act on this\"\n >\n <Bell className=\"h-4.5 w-4.5\" />\n </button>\n\n {/* Quick Flag Action */}\n <button\n type=\"button\"\n onClick={onFlagClick}\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Flag\"\n >\n <Flag className=\"h-4.5 w-4.5\" />\n </button>\n\n {/* 3-Dot More Options Menu */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"More options\"\n >\n <MoreVertical className=\"h-4.5 w-4.5\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-48 border border-border/80 bg-background shadow-lg p-1 space-y-0.5 rounded-xl\"\n >\n <DropdownMenuItem\n onClick={onReply}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <CornerUpLeft className=\"h-4 w-4 text-blue-500\" />\n <span>Reply</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onForward}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <CornerUpRight className=\"h-4 w-4 text-sky-500\" />\n <span>Forward</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onPin}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Pin className=\"h-4 w-4 text-purple-600\" />\n <span>Pin Message</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onStar}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Star className=\"h-4 w-4 text-amber-500\" />\n <span>Star</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onFavorite}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Heart className=\"h-4 w-4 text-rose-500\" />\n <span>Favorite</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onArchive}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Archive className=\"h-4 w-4 text-indigo-600\" />\n <span>Archive</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onActionThis}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Bell className=\"h-4 w-4 text-amber-500\" />\n <span>Action This</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onDelete}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-rose-50 dark:hover:bg-rose-950/30 text-rose-500 hover:text-rose-600 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Trash2 className=\"h-4 w-4 text-rose-500\" />\n <span>Delete</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-rose-400\" />\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import React from 'react'\r\nimport { cn } from '@/lib/utils'\r\n\r\nexport interface TypingIndicatorProps {\r\n label?: string\r\n avatarUrl?: string\r\n className?: string\r\n}\r\n\r\nexport function TypingIndicator({ label = 'Typing...', avatarUrl, className }: TypingIndicatorProps) {\r\n return (\r\n <div className={cn('flex items-center gap-2 px-3 py-1.5 text-xs text-muted-foreground', className)}>\r\n <div className=\"flex items-center gap-1 rounded-full bg-muted/80 px-2.5 py-1.5 border border-border/50\">\r\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary/70 animate-bounce [animation-delay:-0.3s]\" />\r\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary/70 animate-bounce [animation-delay:-0.15s]\" />\r\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary/70 animate-bounce\" />\r\n </div>\r\n {label && <span className=\"text-[11px] font-normal italic\">{label}</span>}\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\nimport { MessageSquareDashed } from 'lucide-react'\r\nimport { cn } from '@/lib/utils'\r\n\r\nexport interface ChatEmptyStateProps {\r\n title?: string\r\n description?: string\r\n icon?: React.ReactNode\r\n action?: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport function ChatEmptyState({\r\n title = 'No conversation selected',\r\n description = 'Choose a chat from the sidebar or start a new conversation to begin messaging.',\r\n icon,\r\n action,\r\n className,\r\n}: ChatEmptyStateProps) {\r\n return (\r\n <div className={cn('flex flex-1 flex-col items-center justify-center p-8 text-center bg-muted/20', className)}>\r\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-muted/80 text-muted-foreground mb-4 shadow-xs\">\r\n {icon || <MessageSquareDashed className=\"h-8 w-8 text-primary/70\" />}\r\n </div>\r\n <h3 className=\"text-base font-semibold text-foreground tracking-tight mb-1\">{title}</h3>\r\n <p className=\"text-xs text-muted-foreground max-w-sm leading-relaxed mb-4\">{description}</p>\r\n {action && <div>{action}</div>}\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\nimport { Users, MoreHorizontal, MessageSquare } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '@/design-system/components/ui/badge'\n\nexport interface ChatCardItemProps {\n id: string\n title: string\n badgeLabel?: string\n lastMessage?: string\n time?: string | Date\n membersCount?: number\n onlineCount?: number\n unreadCount?: number\n isActive?: boolean\n isGroup?: boolean\n onClick?: () => void\n onMoreClick?: (e: React.MouseEvent) => void\n className?: string\n}\n\nexport function ChatCardItem({\n id,\n title,\n badgeLabel = 'Chat',\n lastMessage,\n time,\n membersCount = 2,\n onlineCount = 0,\n unreadCount = 0,\n isActive = false,\n isGroup = false,\n onClick,\n onMoreClick,\n className,\n}: ChatCardItemProps) {\n const formattedTime = time instanceof Date ? time.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : time\n\n return (\n <div\n onClick={onClick}\n className={cn(\n 'group relative flex flex-col gap-1 rounded-xl p-3 cursor-pointer transition-all duration-150 select-none border',\n isActive\n ? 'bg-indigo-500/10 border-indigo-200/60 dark:bg-indigo-950/30 dark:border-indigo-900/50 shadow-2xs'\n : 'bg-background hover:bg-muted/40 border-transparent hover:border-border/40',\n unreadCount > 0 && !isActive && 'bg-primary/5',\n className\n )}\n >\n {/* Active Left Indicator Bar */}\n {isActive && (\n <div className=\"absolute top-1.5 bottom-1.5 left-0 w-1 rounded-l-md bg-indigo-600 dark:bg-indigo-500\" />\n )}\n\n {/* Row 1: Name, Badge, Timestamp */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-1.5 min-w-0\">\n <h4 className={cn('truncate text-sm font-semibold tracking-tight text-foreground')}>\n {title}\n </h4>\n {badgeLabel && (\n <Badge className=\"h-4.5 rounded-full border border-emerald-200/40 bg-emerald-500/10 dark:bg-emerald-950/40 px-1.5 py-0 text-[10px] font-medium text-emerald-600 dark:text-emerald-400 gap-1 shrink-0\">\n <span className=\"text-[9px]\">💬</span>\n <span>{badgeLabel}</span>\n </Badge>\n )}\n </div>\n\n {formattedTime && (\n <span className=\"text-[11px] text-muted-foreground whitespace-nowrap shrink-0\">\n {formattedTime}\n </span>\n )}\n </div>\n\n {/* Row 2: Members Count */}\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground/80\">\n <Users className=\"h-3.5 w-3.5 shrink-0\" />\n <span className=\"truncate\">\n {membersCount} Members • {onlineCount} Online\n </span>\n </div>\n\n {/* Row 3: Last Message Snippet */}\n {lastMessage && (\n <p className=\"line-clamp-1 text-xs text-muted-foreground/70 truncate\">\n {lastMessage}\n </p>\n )}\n\n {/* Optional More Menu on hover */}\n {onMoreClick && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onMoreClick(e)\n }}\n className=\"absolute top-2.5 right-2 opacity-0 group-hover:opacity-100 transition-opacity p-1 rounded-md hover:bg-muted text-muted-foreground\"\n >\n <MoreHorizontal className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\r\nimport { Loader2 } from 'lucide-react'\r\nimport { cn } from '@/lib/utils'\r\nimport { ScrollArea } from '@/design-system/components/ui/scroll-area'\r\n\r\nexport interface ChatMessageListProps {\r\n children?: React.ReactNode\r\n isLoadingMore?: boolean\r\n onLoadMore?: () => void\r\n autoScrollToBottom?: boolean\r\n emptyState?: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport function ChatMessageList({\r\n children,\r\n isLoadingMore = false,\r\n onLoadMore,\r\n autoScrollToBottom = true,\r\n emptyState,\r\n className,\r\n}: ChatMessageListProps) {\r\n const bottomRef = useRef<HTMLDivElement>(null)\r\n const containerRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n if (autoScrollToBottom && bottomRef.current) {\r\n bottomRef.current.scrollIntoView({ behavior: 'smooth' })\r\n }\r\n }, [children, autoScrollToBottom])\r\n\r\n const hasChildren = React.Children.count(children) > 0\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn('flex flex-1 flex-col overflow-y-auto p-4 space-y-2', className)}\r\n >\r\n {/* Top Loading Indicator for Infinite Scroll */}\r\n {isLoadingMore && (\r\n <div className=\"flex items-center justify-center py-2 text-muted-foreground\">\r\n <Loader2 className=\"h-4 w-4 animate-spin text-primary mr-1.5\" />\r\n <span className=\"text-xs\">Loading older messages...</span>\r\n </div>\r\n )}\r\n\r\n {/* Main Messages Content or Empty State */}\r\n {hasChildren ? (\r\n children\r\n ) : emptyState ? (\r\n <div className=\"flex flex-1 items-center justify-center h-full\">\r\n {emptyState}\r\n </div>\r\n ) : null}\r\n\r\n {/* Scroll Anchor */}\r\n <div ref={bottomRef} className=\"h-0 w-0\" />\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\nimport { Search, MessageSquare, Plus } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Input } from '@/design-system/components/ui/input'\nimport { Button } from '@/design-system/components/ui/button'\n\nexport interface ChatSidebarTab {\n id: string\n label: string\n count?: number\n}\n\nexport interface ChatSidebarProps {\n title?: string\n searchValue?: string\n onSearchChange?: (query: string) => void\n searchPlaceholder?: string\n tabs?: ChatSidebarTab[]\n activeTab?: string\n onTabChange?: (tabId: string) => void\n sectionLabel?: string\n sectionCount?: number\n actions?: React.ReactNode\n onNewChat?: () => void\n children?: React.ReactNode\n footer?: React.ReactNode\n className?: string\n}\n\nexport function ChatSidebar({\n title = 'Chats',\n searchValue = '',\n onSearchChange,\n searchPlaceholder = 'Search...',\n tabs = [\n { id: 'chats', label: 'Chats' },\n { id: 'contact', label: 'Contact' },\n { id: 'groups', label: 'Groups' },\n { id: 'folder', label: 'Folder' },\n ],\n activeTab = 'chats',\n onTabChange,\n sectionLabel = 'CHATS',\n sectionCount = 2,\n actions,\n onNewChat,\n children,\n footer,\n className,\n}: ChatSidebarProps) {\n return (\n <aside\n className={cn(\n 'flex flex-col h-full w-full md:w-80 lg:w-[340px] border-r border-border/70 bg-background/95 select-none',\n className\n )}\n >\n {/* 1. Top Subtabs (Chats, Contact, Groups, Folder) with Active Underline */}\n <div className=\"flex items-center gap-4 px-4 pt-3 pb-1 border-b border-border/40 overflow-x-auto no-scrollbar\">\n {tabs.map((tab) => {\n const isSelected = activeTab === tab.id\n return (\n <button\n key={tab.id}\n onClick={() => onTabChange?.(tab.id)}\n className={cn(\n 'relative pb-2 text-sm font-medium transition-all shrink-0 cursor-pointer',\n isSelected\n ? 'text-indigo-600 dark:text-indigo-400 font-semibold'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span>{tab.label}</span>\n {isSelected && (\n <span className=\"absolute bottom-0 left-0 right-0 h-0.5 rounded-full bg-indigo-600 dark:bg-indigo-400\" />\n )}\n </button>\n )\n })}\n </div>\n\n {/* 2. Rounded Search Bar */}\n <div className=\"p-3\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"search\"\n value={searchValue}\n onChange={(e) => onSearchChange?.(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"pl-9 h-9 text-xs rounded-xl bg-background border-border/80 focus-visible:ring-1 focus-visible:ring-indigo-500/50\"\n />\n </div>\n </div>\n\n {/* 3. Category Section Divider (💬 CHATS ─────────── 2) */}\n <div className=\"flex items-center px-4 py-1.5 gap-2\">\n <MessageSquare className=\"h-3.5 w-3.5 text-emerald-600 dark:text-emerald-400 shrink-0\" />\n <span className=\"text-[11px] font-bold tracking-wider text-muted-foreground uppercase\">\n {sectionLabel}\n </span>\n <div className=\"flex-1 h-[1px] bg-border/60 mx-1\" />\n {typeof sectionCount === 'number' && (\n <span className=\"text-xs font-medium text-muted-foreground shrink-0\">\n {sectionCount}\n </span>\n )}\n </div>\n\n {/* 4. Scrollable Conversations List */}\n <div className=\"flex-1 overflow-y-auto px-2 py-1 space-y-1\">\n {children}\n </div>\n\n {/* Optional Footer */}\n {footer && <div className=\"p-3 border-t border-border/60 bg-muted/20\">{footer}</div>}\n </aside>\n )\n}\n","import React, { useState } from 'react'\nimport { Users, Search, Plus, MessageSquare, Pencil, Trash2, X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Input } from '@/design-system/components/ui/input'\nimport { Button } from '@/design-system/components/ui/button'\nimport { Switch } from '@/design-system/components/ui/switch'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/design-system/components/ui/dialog'\n\nexport interface ContactItem {\n id: string\n name: string\n email: string\n avatarUrl?: string\n initials?: string\n isEnabled?: boolean\n mobile?: string\n}\n\nexport interface ContactManagerProps {\n contacts?: ContactItem[]\n title?: string\n description?: string\n searchPlaceholder?: string\n onChatClick?: (contact: ContactItem) => void\n onToggleStatus?: (contact: ContactItem, enabled: boolean) => void\n onEditClick?: (contact: ContactItem) => void\n onDeleteClick?: (contact: ContactItem) => void\n onAddContact?: (newContact: { name: string; email: string }) => void\n className?: string\n}\n\nexport function ContactManager({\n contacts = [],\n title = 'Contact Manager',\n description = 'Manage your saved contacts and start direct chat conversations.',\n searchPlaceholder = 'Search contacts by name or email...',\n onChatClick,\n onToggleStatus,\n onEditClick,\n onDeleteClick,\n onAddContact,\n className,\n}: ContactManagerProps) {\n const [searchQuery, setSearchQuery] = useState('')\n const [isAddOpen, setIsAddOpen] = useState(false)\n const [newName, setNewName] = useState('')\n const [newEmail, setNewEmail] = useState('')\n\n const filteredContacts = contacts.filter(\n (c) =>\n c.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n c.email.toLowerCase().includes(searchQuery.toLowerCase())\n )\n\n const handleAddSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (!newEmail.trim()) return\n onAddContact?.({\n name: newName.trim() || newEmail.split('@')[0],\n email: newEmail.trim(),\n })\n setNewName('')\n setNewEmail('')\n setIsAddOpen(false)\n }\n\n const getInitials = (contact: ContactItem) => {\n if (contact.initials) return contact.initials\n return contact.name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n .toUpperCase() || 'U'\n }\n\n return (\n <div\n className={cn(\n 'w-full rounded-2xl border border-border/80 bg-background p-6 shadow-sm space-y-5',\n className\n )}\n >\n {/* Header */}\n <div className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"h-5 w-5 text-indigo-600 dark:text-indigo-400\" />\n <h3 className=\"text-lg font-bold tracking-tight text-foreground\">{title}</h3>\n </div>\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n </div>\n\n {/* Search Input */}\n <div className=\"relative\">\n <Search className=\"absolute left-3.5 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"search\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"pl-10 h-10 text-xs rounded-xl bg-background border-border/80 focus-visible:ring-1 focus-visible:ring-indigo-500/50\"\n />\n </div>\n\n {/* Contact Cards List */}\n <div className=\"space-y-2.5 max-h-[380px] overflow-y-auto pr-1\">\n {filteredContacts.length === 0 ? (\n <div className=\"py-8 text-center text-xs text-muted-foreground\">\n No contacts found matching your search.\n </div>\n ) : (\n filteredContacts.map((contact) => (\n <div\n key={contact.id}\n className=\"flex items-center justify-between gap-3 rounded-2xl border border-border/70 bg-background/50 p-3 hover:border-border transition-all duration-150 shadow-2xs\"\n >\n {/* Left Details */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <Avatar className=\"h-10 w-10 rounded-xl bg-blue-100 dark:bg-blue-950/60 text-blue-600 dark:text-blue-400 font-bold border border-blue-200/50 dark:border-blue-900/40\">\n {contact.avatarUrl && <AvatarImage src={contact.avatarUrl} alt={contact.name} />}\n <AvatarFallback className=\"bg-transparent text-xs\">\n {getInitials(contact)}\n </AvatarFallback>\n </Avatar>\n\n <div className=\"min-w-0\">\n <h4 className=\"truncate text-sm font-semibold text-foreground tracking-tight\">\n {contact.name}\n </h4>\n <p className=\"truncate text-xs text-muted-foreground\">{contact.email}</p>\n </div>\n </div>\n\n {/* Right Action Icons & Toggle */}\n <div className=\"flex items-center gap-2 shrink-0\">\n {/* Chat Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onChatClick?.(contact)}\n className=\"h-8 w-8 text-indigo-600 dark:text-indigo-400 hover:bg-indigo-50 dark:hover:bg-indigo-950/40 rounded-lg\"\n title=\"Open Chat\"\n >\n <MessageSquare className=\"h-4 w-4\" />\n </Button>\n\n {/* Status Toggle */}\n <Switch\n checked={contact.isEnabled !== false}\n onCheckedChange={(checked) => onToggleStatus?.(contact, checked)}\n className=\"data-[state=checked]:bg-slate-800 dark:data-[state=checked]:bg-slate-200\"\n />\n\n {/* Edit Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onEditClick?.(contact)}\n className=\"h-8 w-8 text-blue-500 hover:bg-blue-50 dark:hover:bg-blue-950/40 rounded-lg\"\n title=\"Edit Contact\"\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n\n {/* Delete Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onDeleteClick?.(contact)}\n className=\"h-8 w-8 text-rose-500 hover:bg-rose-50 dark:hover:bg-rose-950/40 rounded-lg\"\n title=\"Delete Contact\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* Add New Contact Button */}\n <Button\n onClick={() => setIsAddOpen(true)}\n className=\"w-full h-10 rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white font-medium text-xs shadow-xs transition-transform active:scale-[0.99] gap-1.5\"\n >\n <Plus className=\"h-4 w-4\" />\n <span>Add New Contact</span>\n </Button>\n\n {/* Add Contact Modal Dialog */}\n <Dialog open={isAddOpen} onOpenChange={setIsAddOpen}>\n <DialogContent className=\"sm:max-w-md rounded-2xl\">\n <DialogHeader>\n <DialogTitle>Add New Contact</DialogTitle>\n <DialogDescription>\n Enter contact details to start messaging directly.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={handleAddSubmit} className=\"space-y-3 py-2\">\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-foreground\">Name (Optional)</label>\n <Input\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"e.g. Aman\"\n className=\"h-9 text-xs rounded-xl\"\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-foreground\">Email Address *</label>\n <Input\n type=\"email\"\n required\n value={newEmail}\n onChange={(e) => setNewEmail(e.target.value)}\n placeholder=\"e.g. aman@example.com\"\n className=\"h-9 text-xs rounded-xl\"\n />\n </div>\n <DialogFooter className=\"pt-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setIsAddOpen(false)}\n className=\"rounded-xl text-xs\"\n >\n Cancel\n </Button>\n <Button type=\"submit\" className=\"rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white text-xs\">\n Save Contact\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport { Users, Search, Plus, MessageSquare, Pencil, Trash2 } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Input } from '@/design-system/components/ui/input'\nimport { Button } from '@/design-system/components/ui/button'\nimport { Switch } from '@/design-system/components/ui/switch'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/design-system/components/ui/dialog'\n\nexport interface GroupItem {\n id: string\n name: string\n ownerEmail?: string\n membersCount?: number\n avatarUrl?: string\n isEnabled?: boolean\n description?: string\n}\n\nexport interface GroupManagerProps {\n groups?: GroupItem[]\n title?: string\n description?: string\n searchPlaceholder?: string\n onChatClick?: (group: GroupItem) => void\n onToggleStatus?: (group: GroupItem, enabled: boolean) => void\n onEditClick?: (group: GroupItem) => void\n onDeleteClick?: (group: GroupItem) => void\n onAddGroup?: (newGroup: { name: string; description?: string }) => void\n className?: string\n}\n\nexport function GroupManager({\n groups = [],\n title = 'Groups Manager',\n description = 'Manage your group channels and start team conversations.',\n searchPlaceholder = 'Search groups...',\n onChatClick,\n onToggleStatus,\n onEditClick,\n onDeleteClick,\n onAddGroup,\n className,\n}: GroupManagerProps) {\n const [searchQuery, setSearchQuery] = useState('')\n const [isAddOpen, setIsAddOpen] = useState(false)\n const [groupName, setGroupName] = useState('')\n const [groupDesc, setGroupDesc] = useState('')\n\n const filteredGroups = groups.filter(\n (g) =>\n g.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n (g.ownerEmail && g.ownerEmail.toLowerCase().includes(searchQuery.toLowerCase()))\n )\n\n const handleAddSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (!groupName.trim()) return\n onAddGroup?.({\n name: groupName.trim(),\n description: groupDesc.trim() || undefined,\n })\n setGroupName('')\n setGroupDesc('')\n setIsAddOpen(false)\n }\n\n return (\n <div\n className={cn(\n 'w-full rounded-2xl border border-border/80 bg-background p-6 shadow-sm space-y-5',\n className\n )}\n >\n {/* Header */}\n <div className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"h-5 w-5 text-indigo-600 dark:text-indigo-400\" />\n <h3 className=\"text-lg font-bold tracking-tight text-foreground\">{title}</h3>\n </div>\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n </div>\n\n {/* Search Bar */}\n <div className=\"relative\">\n <Search className=\"absolute left-3.5 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"search\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"pl-10 h-10 text-xs rounded-xl bg-background border-border/80 focus-visible:ring-1 focus-visible:ring-indigo-500/50\"\n />\n </div>\n\n {/* Group Cards List */}\n <div className=\"space-y-2.5 max-h-[380px] overflow-y-auto pr-1\">\n {filteredGroups.length === 0 ? (\n <div className=\"py-8 text-center text-xs text-muted-foreground\">\n No group channels found matching your search.\n </div>\n ) : (\n filteredGroups.map((group) => (\n <div\n key={group.id}\n className=\"flex items-center justify-between gap-3 rounded-2xl border border-border/70 bg-background/50 p-3 hover:border-border transition-all duration-150 shadow-2xs\"\n >\n {/* Left Group Details */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <Avatar className=\"h-10 w-10 rounded-xl bg-slate-800 text-white font-bold border border-border/60 overflow-hidden\">\n {group.avatarUrl && <AvatarImage src={group.avatarUrl} alt={group.name} className=\"object-cover\" />}\n <AvatarFallback className=\"bg-slate-800 text-xs font-semibold text-white\">\n {group.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n\n <div className=\"min-w-0\">\n <h4 className=\"truncate text-sm font-semibold text-foreground tracking-tight\">\n {group.name}\n </h4>\n <p className=\"truncate text-xs text-muted-foreground\">\n {group.membersCount || 1} members {group.ownerEmail ? `• ${group.ownerEmail}` : ''}\n </p>\n </div>\n </div>\n\n {/* Right Action Icons & Toggle */}\n <div className=\"flex items-center gap-2 shrink-0\">\n {/* Chat Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onChatClick?.(group)}\n className=\"h-8 w-8 text-indigo-600 dark:text-indigo-400 hover:bg-indigo-50 dark:hover:bg-indigo-950/40 rounded-lg\"\n title=\"Open Group Chat\"\n >\n <MessageSquare className=\"h-4 w-4\" />\n </Button>\n\n {/* Status Toggle */}\n <Switch\n checked={group.isEnabled !== false}\n onCheckedChange={(checked) => onToggleStatus?.(group, checked)}\n className=\"data-[state=checked]:bg-slate-800 dark:data-[state=checked]:bg-slate-200\"\n />\n\n {/* Edit Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onEditClick?.(group)}\n className=\"h-8 w-8 text-blue-500 hover:bg-blue-50 dark:hover:bg-blue-950/40 rounded-lg\"\n title=\"Edit Group\"\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n\n {/* Delete Action */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onDeleteClick?.(group)}\n className=\"h-8 w-8 text-rose-500 hover:bg-rose-50 dark:hover:bg-rose-950/40 rounded-lg\"\n title=\"Delete Group\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* Add New Group Button */}\n <Button\n onClick={() => setIsAddOpen(true)}\n className=\"w-full h-10 rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white font-medium text-xs shadow-xs transition-transform active:scale-[0.99] gap-1.5\"\n >\n <Plus className=\"h-4 w-4\" />\n <span>Add New Group</span>\n </Button>\n\n {/* Add Group Modal Dialog */}\n <Dialog open={isAddOpen} onOpenChange={setIsAddOpen}>\n <DialogContent className=\"sm:max-w-md rounded-2xl\">\n <DialogHeader>\n <DialogTitle>Create New Group</DialogTitle>\n <DialogDescription>\n Create a group channel to collaborate and chat with multiple members.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={handleAddSubmit} className=\"space-y-3 py-2\">\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-foreground\">Group Name *</label>\n <Input\n required\n value={groupName}\n onChange={(e) => setGroupName(e.target.value)}\n placeholder=\"e.g. Design Team Hub\"\n className=\"h-9 text-xs rounded-xl\"\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-foreground\">Description (Optional)</label>\n <Input\n value={groupDesc}\n onChange={(e) => setGroupDesc(e.target.value)}\n placeholder=\"e.g. Core team discussions\"\n className=\"h-9 text-xs rounded-xl\"\n />\n </div>\n <DialogFooter className=\"pt-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setIsAddOpen(false)}\n className=\"rounded-xl text-xs\"\n >\n Cancel\n </Button>\n <Button type=\"submit\" className=\"rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white text-xs\">\n Create Group\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n","import React from 'react'\nimport { ChevronDown, Check } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface AiModelOption {\n id: string\n name: string\n provider?: string\n badge?: string\n}\n\nexport const DEFAULT_AI_MODELS: AiModelOption[] = [\n { id: 'google/gemini-2.5-flash', name: 'Gemini 2.5 Flash' },\n { id: 'openai/gpt-4o', name: 'GPT-4o' },\n { id: 'anthropic/claude-3.5-sonnet', name: 'Claude 3.5 Sonnet' },\n { id: 'deepseek/deepseek-chat', name: 'DeepSeek Chat' },\n { id: 'meta-llama/llama-3.3-70b-instruct', name: 'Llama 3.3 70B' },\n]\n\nexport interface AiModelSelectorProps {\n model?: string\n models?: AiModelOption[]\n onModelChange?: (modelId: string) => void\n disabled?: boolean\n className?: string\n}\n\nexport function AiModelSelector({\n model = 'google/gemini-2.5-flash',\n models = DEFAULT_AI_MODELS,\n onModelChange,\n disabled = false,\n className,\n}: AiModelSelectorProps) {\n const currentModel = models.find((m) => m.id === model) || models[0]\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n className={cn(\n 'flex items-center gap-1.5 px-3 py-1 rounded-full border border-border/80 bg-background hover:bg-muted text-xs font-medium text-foreground transition-all cursor-pointer shadow-2xs focus:outline-none select-none',\n className\n )}\n >\n <span className=\"truncate max-w-[130px] font-semibold\">{currentModel?.name || 'Select Model'}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground shrink-0\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n side=\"top\"\n sideOffset={6}\n className=\"w-48 rounded-2xl p-1 shadow-2xl border border-border/80 bg-background text-foreground space-y-0.5\"\n >\n {models.map((m) => {\n const isSelected = m.id === model\n return (\n <DropdownMenuItem\n key={m.id}\n onClick={() => onModelChange?.(m.id)}\n className={cn(\n 'flex items-center justify-between py-2 px-3 text-xs font-semibold rounded-xl cursor-pointer transition-colors',\n isSelected\n ? 'bg-slate-900 text-white dark:bg-slate-900 dark:text-white focus:bg-slate-900 focus:text-white'\n : 'text-foreground hover:bg-muted/70 focus:bg-muted/70'\n )}\n >\n <span className=\"truncate\">{m.name}</span>\n {isSelected && <Check className=\"h-3.5 w-3.5 shrink-0 text-white\" />}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import React from 'react'\nimport { ChevronDown, Check } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface AiToolOption {\n id: string\n name: string\n icon?: string | React.ReactNode\n description?: string\n}\n\nexport const DEFAULT_AI_TOOLS: AiToolOption[] = [\n { id: 'chat', name: 'AI Chat', icon: '' },\n { id: 'web-search', name: 'Web Search', icon: '🌐' },\n { id: 'ui-render', name: 'UI Render', icon: '🎨' },\n]\n\nexport interface AiToolSelectorProps {\n tool?: string\n tools?: AiToolOption[]\n onToolChange?: (toolId: string) => void\n disabled?: boolean\n className?: string\n}\n\nexport function AiToolSelector({\n tool = 'chat',\n tools = DEFAULT_AI_TOOLS,\n onToolChange,\n disabled = false,\n className,\n}: AiToolSelectorProps) {\n const currentTool = tools.find((t) => t.id === tool) || tools[0]\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n className={cn(\n 'flex items-center gap-1.5 px-3 py-1 rounded-full border border-border/80 bg-background hover:bg-muted text-xs font-medium text-foreground transition-all cursor-pointer shadow-2xs focus:outline-none select-none',\n className\n )}\n >\n <span className=\"text-muted-foreground\">Tool:</span>\n <span className=\"flex items-center gap-1 font-semibold\">\n {currentTool.icon && <span>{currentTool.icon}</span>}\n <span>{currentTool?.name || 'Select Tool'}</span>\n </span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground shrink-0\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n side=\"top\"\n sideOffset={6}\n className=\"w-48 rounded-2xl p-1 shadow-2xl border border-border/80 bg-background text-foreground space-y-0.5\"\n >\n {tools.map((t) => {\n const isSelected = t.id === tool\n return (\n <DropdownMenuItem\n key={t.id}\n onClick={() => onToolChange?.(t.id)}\n className={cn(\n 'flex items-center justify-between py-2 px-3 text-xs font-semibold rounded-xl cursor-pointer transition-colors',\n isSelected\n ? 'bg-slate-900 text-white dark:bg-slate-900 dark:text-white focus:bg-slate-900 focus:text-white'\n : 'text-foreground hover:bg-muted/70 focus:bg-muted/70'\n )}\n >\n <div className=\"flex items-center gap-2\">\n {t.icon && <span className=\"text-sm shrink-0\">{t.icon}</span>}\n <span className=\"truncate\">{t.name}</span>\n </div>\n {isSelected && <Check className=\"h-3.5 w-3.5 shrink-0 text-white\" />}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import React, { useRef, useEffect } from 'react'\nimport { ArrowUp, Mic, History, Plus } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { AiModelSelector, AiModelOption } from './ai-model-selector'\nimport { AiToolSelector, AiToolOption } from './ai-tool-selector'\n\nexport interface AiChatInputProps {\n value: string\n onChange: (value: string) => void\n onSend: () => void\n placeholder?: string\n disabled?: boolean\n isLoading?: boolean\n model?: string\n onModelChange?: (model: string) => void\n models?: AiModelOption[]\n tool?: string\n onToolChange?: (tool: string) => void\n tools?: AiToolOption[]\n isListening?: boolean\n onVoiceToggle?: () => void\n onHistoryClick?: () => void\n onNewChatClick?: () => void\n className?: string\n}\n\nexport function AiChatInput({\n value,\n onChange,\n onSend,\n placeholder = 'Ask a question about your data...',\n disabled = false,\n isLoading = false,\n model = 'google/gemini-2.5-flash',\n onModelChange,\n models,\n tool = 'chat',\n onToolChange,\n tools,\n isListening = false,\n onVoiceToggle,\n onHistoryClick,\n onNewChatClick,\n className,\n}: AiChatInputProps) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n if (value.trim() && !disabled && !isLoading) {\n onSend()\n }\n }\n }\n\n // Auto-resize textarea height\n useEffect(() => {\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto'\n textareaRef.current.style.height = `${Math.min(textareaRef.current.scrollHeight, 140)}px`\n }\n }, [value])\n\n const hasText = value.trim().length > 0\n\n return (\n <div\n className={cn(\n 'w-full rounded-3xl border border-border/80 bg-background p-3 flex flex-col gap-2 shadow-xs transition-all focus-within:border-indigo-500/60 focus-within:ring-1 focus-within:ring-indigo-500/20',\n className\n )}\n >\n {/* Top Input Row */}\n <div className=\"flex items-center gap-2 px-1\">\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={\n isListening\n ? '🎤 Listening... Speak now'\n : isLoading\n ? 'Thinking...'\n : placeholder\n }\n disabled={disabled || isLoading}\n rows={1}\n className=\"max-h-32 min-h-[26px] w-full resize-none bg-transparent text-sm sm:text-base outline-none placeholder:text-muted-foreground/80 disabled:cursor-not-allowed disabled:opacity-50 leading-relaxed\"\n />\n\n {/* Voice Trigger Button */}\n {onVoiceToggle && (\n <button\n type=\"button\"\n onClick={onVoiceToggle}\n disabled={disabled || isLoading}\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full transition-all cursor-pointer',\n isListening\n ? 'bg-rose-500 text-white animate-pulse'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n )}\n title=\"Voice input\"\n >\n <Mic className=\"h-4.5 w-4.5\" />\n </button>\n )}\n\n {/* Upward Circular Send Button */}\n <button\n type=\"button\"\n onClick={onSend}\n disabled={!hasText || disabled || isLoading}\n className={cn(\n 'flex h-9 w-9 shrink-0 items-center justify-center rounded-full transition-all cursor-pointer shadow-xs',\n hasText && !disabled && !isLoading\n ? 'bg-slate-800 hover:bg-slate-900 text-white dark:bg-slate-200 dark:text-slate-900 active:scale-95'\n : 'bg-muted text-muted-foreground opacity-50 cursor-not-allowed'\n )}\n title=\"Send\"\n >\n <ArrowUp className=\"h-4.5 w-4.5\" />\n </button>\n </div>\n\n {/* Bottom Toolbar: Model + Tool Selectors + History + New Chat */}\n <div className=\"flex items-center justify-between gap-2 pt-1 border-t border-border/40 overflow-x-auto no-scrollbar\">\n {/* Left Pickers: Model + Tool */}\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <AiModelSelector\n model={model}\n models={models}\n onModelChange={onModelChange}\n disabled={disabled || isLoading}\n />\n <AiToolSelector\n tool={tool}\n tools={tools}\n onToolChange={onToolChange}\n disabled={disabled || isLoading}\n />\n </div>\n\n {/* Right Actions: History & New Chat */}\n <div className=\"flex items-center gap-1.5 shrink-0\">\n {onHistoryClick && (\n <button\n type=\"button\"\n onClick={onHistoryClick}\n disabled={disabled || isLoading}\n className=\"flex h-7 w-7 items-center justify-center rounded-full border border-border/70 hover:bg-muted text-muted-foreground hover:text-foreground transition-all cursor-pointer shadow-2xs\"\n title=\"Prompt History\"\n >\n <History className=\"h-3.5 w-3.5\" />\n </button>\n )}\n\n {onNewChatClick && (\n <button\n type=\"button\"\n onClick={onNewChatClick}\n disabled={disabled || isLoading}\n className=\"flex h-7 w-7 items-center justify-center rounded-full border border-border/70 hover:bg-muted text-muted-foreground hover:text-foreground transition-all cursor-pointer shadow-2xs\"\n title=\"New Chat\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport { Bot, User, Sparkles, Copy, Check, Globe } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/design-system/components/ui/avatar'\n\nexport interface AiSourceItem {\n title: string\n url: string\n snippet?: string\n}\n\nexport interface AiMessageBubbleProps {\n id?: string\n role: 'user' | 'assistant' | 'system'\n content: string\n senderName?: string\n modelName?: string\n avatarUrl?: string\n sources?: AiSourceItem[]\n images?: string[]\n isLoading?: boolean\n showPreviewBtn?: boolean\n onOpenPreview?: () => void\n onImageClick?: (url: string) => void\n className?: string\n}\n\nexport function AiMessageBubble({\n id,\n role,\n content,\n senderName,\n modelName,\n avatarUrl,\n sources = [],\n images = [],\n isLoading = false,\n showPreviewBtn = false,\n onOpenPreview,\n onImageClick,\n className,\n}: AiMessageBubbleProps) {\n const isUser = role === 'user'\n const authorLabel = senderName || (isUser ? 'You' : 'AI Assistant')\n\n return (\n <div\n id={id ? `ai-bubble-${id}` : undefined}\n className={cn('flex w-full gap-3 py-2 justify-start select-text', className)}\n >\n {/* Avatar on Left */}\n <div className=\"shrink-0 mt-0.5\">\n {isUser ? (\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-slate-800 text-white dark:bg-slate-200 dark:text-slate-900 shadow-2xs font-semibold text-xs\">\n <User className=\"h-4 w-4\" />\n </div>\n ) : (\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-indigo-50 dark:bg-indigo-950/50 text-indigo-600 dark:text-indigo-400 border border-indigo-200/60 dark:border-indigo-900/40 shadow-2xs\">\n <Bot className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n\n {/* Main Content Column */}\n <div className=\"flex flex-col min-w-0 flex-1 items-start gap-1\">\n {/* Author Label */}\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'text-xs font-semibold',\n isUser ? 'text-muted-foreground/90' : 'text-indigo-600 dark:text-indigo-400'\n )}\n >\n {authorLabel}\n </span>\n {!isUser && modelName && (\n <span className=\"text-[10px] text-muted-foreground font-normal\">\n • {modelName}\n </span>\n )}\n </div>\n\n {/* Text / Markdown Stream */}\n <div className=\"text-sm sm:text-base text-foreground w-full leading-relaxed\">\n {isLoading ? (\n <div className=\"flex items-center gap-1.5 py-1 text-xs text-muted-foreground\">\n <span className=\"h-2 w-2 rounded-full bg-indigo-600 animate-pulse\" />\n <span className=\"h-2 w-2 rounded-full bg-indigo-600 animate-pulse delay-75\" />\n <span className=\"h-2 w-2 rounded-full bg-indigo-600 animate-pulse delay-150\" />\n <span className=\"ml-1\">Thinking...</span>\n </div>\n ) : isUser ? (\n <div className=\"whitespace-pre-wrap\">{content}</div>\n ) : (\n <div className=\"prose prose-sm dark:prose-invert max-w-none leading-relaxed break-words prose-p:leading-relaxed prose-pre:bg-muted/80 prose-pre:border prose-pre:border-border/50 prose-pre:rounded-xl prose-code:text-indigo-600 dark:prose-code:text-indigo-400 prose-code:font-mono prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:before:content-none prose-code:after:content-none\">\n <ReactMarkdown remarkPlugins={[remarkGfm]}>{content}</ReactMarkdown>\n </div>\n )}\n\n {/* Quick Generative UI Open Action Button */}\n {!isUser && showPreviewBtn && onOpenPreview && (\n <div className=\"mt-3 flex justify-start\">\n <button\n type=\"button\"\n onClick={onOpenPreview}\n className=\"flex items-center gap-1.5 px-3 py-1.5 rounded-xl border border-indigo-200 dark:border-indigo-900/50 bg-indigo-50/50 dark:bg-indigo-950/20 text-xs font-bold text-indigo-600 dark:text-indigo-400 hover:bg-indigo-50 dark:hover:bg-indigo-950/40 hover:shadow-xs transition-all cursor-pointer\"\n >\n <Sparkles className=\"h-3.5 w-3.5\" />\n <span>Open Preview Panel</span>\n </button>\n </div>\n )}\n\n {/* Sources / Citations list */}\n {!isUser && sources.length > 0 && (\n <div className=\"mt-3 space-y-1.5\">\n <div className=\"flex items-center gap-1 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider\">\n <Globe className=\"h-3.5 w-3.5 text-blue-500\" />\n <span>Sources</span>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {sources.map((src, i) => (\n <a\n key={i}\n href={src.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-xl border border-border/80 bg-background hover:bg-muted text-xs text-foreground transition-colors shadow-2xs\"\n >\n <span className=\"truncate max-w-[180px]\">{src.title}</span>\n </a>\n ))}\n </div>\n </div>\n )}\n\n {/* Images Grid */}\n {!isUser && images.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {images.map((img, idx) => (\n <img\n key={idx}\n src={img}\n alt={`AI generated ${idx}`}\n onClick={() => onImageClick?.(img)}\n className=\"h-28 w-28 rounded-xl object-cover border border-border/80 cursor-pointer hover:opacity-90 transition-opacity\"\n />\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\nimport { cn } from '@/lib/utils'\nimport { AiPromptSuggestions, AiPromptSuggestionItem } from './ai-prompt-suggestions'\n\nexport interface AiMessageListProps {\n children?: React.ReactNode\n isEmpty?: boolean\n suggestions?: AiPromptSuggestionItem[]\n onSelectPrompt?: (prompt: string, tool?: string) => void\n autoScrollToBottom?: boolean\n className?: string\n}\n\nexport function AiMessageList({\n children,\n isEmpty = false,\n suggestions,\n onSelectPrompt,\n autoScrollToBottom = true,\n className,\n}: AiMessageListProps) {\n const scrollRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (autoScrollToBottom && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight\n }\n }, [children, autoScrollToBottom])\n\n return (\n <div\n ref={scrollRef}\n className={cn(\n 'flex-1 w-full overflow-y-auto px-4 py-4 space-y-4 no-scrollbar',\n className\n )}\n >\n {isEmpty ? (\n <AiPromptSuggestions\n suggestions={suggestions}\n onSelectPrompt={onSelectPrompt}\n />\n ) : (\n children\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Palette, Search, Code, FormInput, Sparkles } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface AiPromptSuggestionItem {\n title: string\n description: string\n prompt: string\n tool?: string\n icon?: React.ReactNode\n}\n\nexport const DEFAULT_AI_PROMPTS: AiPromptSuggestionItem[] = [\n {\n title: 'Explain React 19 features',\n description: 'Deep dive into server actions, useActionState, and use() hook.',\n prompt: 'Explain the new features of React 19 with examples of Server Actions and the use() hook.',\n tool: 'chat',\n icon: <Code className=\"h-4 w-4 text-sky-500\" />,\n },\n {\n title: 'Design user profile card',\n description: 'Generates a rich, interactive UI card showing stats, avatar, and badges.',\n prompt: 'Design a beautiful user profile card with follower count, location, badges and actions.',\n tool: 'ui-render',\n icon: <Palette className=\"h-4 w-4 text-indigo-500\" />,\n },\n {\n title: 'Search latest Tech news',\n description: 'Searches the web for recent announcements in AI and technology.',\n prompt: 'What are the key announcements from the latest tech conferences and AI releases this month?',\n tool: 'web-search',\n icon: <Search className=\"h-4 w-4 text-emerald-500\" />,\n },\n {\n title: 'Create feedback form',\n description: 'Renders a beautiful form with textareas, ratings, and submittable actions.',\n prompt: 'Build a premium user feedback form with input fields for name, email, rating select, and submit button.',\n tool: 'ui-render',\n icon: <FormInput className=\"h-4 w-4 text-amber-500\" />,\n },\n]\n\nexport interface AiPromptSuggestionsProps {\n suggestions?: AiPromptSuggestionItem[]\n onSelectPrompt?: (prompt: string, tool?: string) => void\n title?: string\n subtitle?: string\n className?: string\n}\n\nexport function AiPromptSuggestions({\n suggestions = DEFAULT_AI_PROMPTS,\n onSelectPrompt,\n title = 'How can I help you today?',\n subtitle = 'Choose a prompt below or start typing your question.',\n className,\n}: AiPromptSuggestionsProps) {\n return (\n <div className={cn('flex flex-col items-center justify-center p-6 text-center max-w-2xl mx-auto space-y-6', className)}>\n <div className=\"space-y-2\">\n <div className=\"inline-flex p-3 rounded-2xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 mb-1\">\n <Sparkles className=\"h-6 w-6\" />\n </div>\n <h2 className=\"text-xl sm:text-2xl font-bold tracking-tight text-foreground\">{title}</h2>\n <p className=\"text-xs text-muted-foreground\">{subtitle}</p>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3 w-full text-left\">\n {suggestions.map((item, idx) => (\n <div\n key={idx}\n onClick={() => onSelectPrompt?.(item.prompt, item.tool)}\n className=\"p-3.5 rounded-2xl border border-border/80 bg-background hover:bg-muted/40 hover:border-indigo-500/50 transition-all cursor-pointer shadow-2xs group flex flex-col justify-between gap-2\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"p-1.5 rounded-lg bg-muted/60 shrink-0\">\n {item.icon}\n </div>\n <h4 className=\"text-xs font-bold text-foreground group-hover:text-indigo-600 dark:group-hover:text-indigo-400 transition-colors\">\n {item.title}\n </h4>\n </div>\n <p className=\"text-[11px] text-muted-foreground line-clamp-2\">\n {item.description}\n </p>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport {\n Sparkles,\n Bot,\n ArrowLeft,\n Bell,\n Flag,\n MoreVertical,\n CornerUpLeft,\n CornerUpRight,\n Pin,\n Star,\n Heart,\n Archive,\n Trash2,\n ChevronRight,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface AiChatHeaderProps {\n title?: string\n subtitle?: string\n modelName?: string\n showSparkles?: boolean\n showDefaultActions?: boolean\n onBack?: () => void\n actions?: React.ReactNode\n onNotificationClick?: () => void\n onFlagClick?: () => void\n onReply?: () => void\n onForward?: () => void\n onPin?: () => void\n onStar?: () => void\n onFavorite?: () => void\n onArchive?: () => void\n onActionThis?: () => void\n onDelete?: () => void\n className?: string\n}\n\nexport function AiChatHeader({\n title = 'AI Assistant',\n subtitle = 'Powered by AI · Ask anything',\n modelName,\n showSparkles = true,\n showDefaultActions = true,\n onBack,\n actions,\n onNotificationClick,\n onFlagClick,\n onReply,\n onForward,\n onPin,\n onStar,\n onFavorite,\n onArchive,\n onActionThis,\n onDelete,\n className,\n}: AiChatHeaderProps) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between px-4 py-3 border-b border-border bg-background select-none',\n className\n )}\n >\n {/* Left Column: Avatar + Info */}\n <div className=\"flex items-center gap-3 min-w-0\">\n {onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"flex h-8 w-8 items-center justify-center rounded-xl hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Back\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </button>\n )}\n\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-indigo-50 dark:bg-indigo-950/50 text-indigo-600 dark:text-indigo-400 border border-indigo-200/60 dark:border-indigo-900/40 shrink-0 shadow-2xs\">\n <Bot className=\"h-5 w-5\" />\n </div>\n\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-1.5\">\n <h3 className=\"truncate text-sm font-bold text-foreground tracking-tight leading-snug\">\n {title}\n </h3>\n {showSparkles && (\n <Sparkles className=\"h-3.5 w-3.5 text-indigo-500 shrink-0\" />\n )}\n </div>\n <p className=\"truncate text-xs text-muted-foreground leading-tight\">\n {subtitle ? subtitle : modelName ? `Powered by ${modelName}` : 'Powered by AI · Ask anything'}\n </p>\n </div>\n </div>\n\n {/* Right Column: Actions (Outline Bell, Flag, 3-Dots Menu) */}\n <div className=\"flex items-center gap-1 shrink-0\">\n {actions ? (\n actions\n ) : showDefaultActions ? (\n <div className=\"flex items-center gap-1\">\n {/* Outline Bell Icon in Amber (No fill) */}\n <button\n type=\"button\"\n onClick={onNotificationClick}\n className=\"p-1.5 rounded-lg hover:bg-muted text-amber-500 hover:text-amber-600 transition-colors cursor-pointer\"\n title=\"Act on this\"\n >\n <Bell className=\"h-4.5 w-4.5\" />\n </button>\n\n {/* Quick Flag Action */}\n <button\n type=\"button\"\n onClick={onFlagClick}\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"Flag\"\n >\n <Flag className=\"h-4.5 w-4.5\" />\n </button>\n\n {/* 3-Dot More Options Menu */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n title=\"More options\"\n >\n <MoreVertical className=\"h-4.5 w-4.5\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-48 border border-border/80 bg-background shadow-lg p-1 space-y-0.5 rounded-xl\"\n >\n <DropdownMenuItem\n onClick={onReply}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <CornerUpLeft className=\"h-4 w-4 text-blue-500\" />\n <span>Reply</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onForward}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <CornerUpRight className=\"h-4 w-4 text-sky-500\" />\n <span>Forward</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onPin}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Pin className=\"h-4 w-4 text-purple-600\" />\n <span>Pin Message</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onStar}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Star className=\"h-4 w-4 text-amber-500\" />\n <span>Star</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onFavorite}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Heart className=\"h-4 w-4 text-rose-500\" />\n <span>Favorite</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onArchive}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Archive className=\"h-4 w-4 text-indigo-600\" />\n <span>Archive</span>\n </div>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onActionThis}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-muted/80 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Bell className=\"h-4 w-4 text-amber-500\" />\n <span>Action This</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </DropdownMenuItem>\n\n <DropdownMenuItem\n onClick={onDelete}\n className=\"cursor-pointer text-xs flex items-center justify-between py-2 px-2.5 font-medium hover:bg-rose-50 dark:hover:bg-rose-950/30 text-rose-500 hover:text-rose-600 rounded-md\"\n >\n <div className=\"flex items-center gap-2.5\">\n <Trash2 className=\"h-4 w-4 text-rose-500\" />\n <span>Delete</span>\n </div>\n <ChevronRight className=\"h-3.5 w-3.5 text-rose-400\" />\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport {\n FileText,\n Image as ImageIcon,\n FileSpreadsheet,\n Film,\n Archive,\n File,\n Eye,\n Download,\n MoreHorizontal,\n Copy,\n Share2,\n Trash2,\n Edit2,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '@/design-system/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport type FileCategoryType =\n | 'Pdf'\n | 'Doc'\n | 'Xls'\n | 'Images'\n | 'Videos'\n | 'Ppt'\n | 'Txt'\n | 'Csv'\n | 'Zip'\n | 'Other'\n\nexport interface FileItemData {\n id: string\n fileName: string\n fileUrl: string\n fileSize?: number\n updatedAt?: string\n category: FileCategoryType | string\n folderPath?: string\n senderName?: string\n senderEmail?: string\n section?: string\n}\n\nexport interface FileCardItemProps {\n file: FileItemData\n viewMode?: 'grid' | 'table'\n isSelected?: boolean\n onSelect?: (file: FileItemData) => void\n onPreview?: (file: FileItemData) => void\n onDownload?: (file: FileItemData) => void\n onDelete?: (file: FileItemData) => void\n onCopyLink?: (file: FileItemData) => void\n onRename?: (file: FileItemData) => void\n onShare?: (file: FileItemData) => void\n className?: string\n}\n\nexport function formatBytes(bytes?: number, decimals = 1): string {\n if (!bytes || bytes === 0) return '0 B'\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]\n}\n\nexport function getFileCategoryTheme(category: string | FileCategoryType) {\n const cat = (category || '').toLowerCase()\n if (cat.includes('pdf')) {\n return {\n name: 'Pdf',\n icon: FileText,\n badgeColor: 'bg-red-500/10 text-red-600 dark:text-red-400 border-red-200/50',\n iconColor: 'text-red-500',\n bgColor: 'bg-red-50 dark:bg-red-950/30',\n }\n }\n if (cat.includes('doc') || cat.includes('word') || cat.includes('txt')) {\n return {\n name: 'Doc',\n icon: FileText,\n badgeColor: 'bg-blue-500/10 text-blue-600 dark:text-blue-400 border-blue-200/50',\n iconColor: 'text-blue-500',\n bgColor: 'bg-blue-50 dark:bg-blue-950/30',\n }\n }\n if (cat.includes('xls') || cat.includes('csv') || cat.includes('sheet')) {\n return {\n name: 'Spreadsheet',\n icon: FileSpreadsheet,\n badgeColor: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-200/50',\n iconColor: 'text-emerald-500',\n bgColor: 'bg-emerald-50 dark:bg-emerald-950/30',\n }\n }\n if (cat.includes('image') || cat.includes('img') || cat.includes('png') || cat.includes('jpg')) {\n return {\n name: 'Images',\n icon: ImageIcon,\n badgeColor: 'bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-200/50',\n iconColor: 'text-amber-500',\n bgColor: 'bg-amber-50 dark:bg-amber-950/30',\n }\n }\n if (cat.includes('video') || cat.includes('mp4') || cat.includes('mov')) {\n return {\n name: 'Videos',\n icon: Film,\n badgeColor: 'bg-purple-500/10 text-purple-600 dark:text-purple-400 border-purple-200/50',\n iconColor: 'text-purple-500',\n bgColor: 'bg-purple-50 dark:bg-purple-950/30',\n }\n }\n if (cat.includes('zip') || cat.includes('rar') || cat.includes('tar')) {\n return {\n name: 'Archives',\n icon: Archive,\n badgeColor: 'bg-orange-500/10 text-orange-600 dark:text-orange-400 border-orange-200/50',\n iconColor: 'text-orange-500',\n bgColor: 'bg-orange-50 dark:bg-orange-950/30',\n }\n }\n return {\n name: 'Other',\n icon: File,\n badgeColor: 'bg-muted text-muted-foreground border-border/80',\n iconColor: 'text-muted-foreground',\n bgColor: 'bg-muted/40',\n }\n}\n\nexport function formatTimeAgo(dateString?: string): string {\n if (!dateString) return 'recently'\n try {\n const d = new Date(dateString)\n const diff = (Date.now() - d.getTime()) / 1000\n if (diff < 60) return 'just now'\n if (diff < 3600) return `${Math.floor(diff / 60)} mins ago`\n if (diff < 86400) {\n const hours = Math.floor(diff / 3600)\n return `${hours} hour${hours > 1 ? 's' : ''} ago`\n }\n const days = Math.floor(diff / 86400)\n return `${days} day${days > 1 ? 's' : ''} ago`\n } catch {\n return 'recently'\n }\n}\n\nexport function FileCardItem({\n file,\n viewMode = 'grid',\n isSelected = false,\n onSelect,\n onPreview,\n onDownload,\n onDelete,\n onCopyLink,\n onRename,\n onShare,\n className,\n}: FileCardItemProps) {\n const theme = getFileCategoryTheme(file.category)\n const isImage =\n theme.name === 'Images' ||\n file.fileName.match(/\\.(jpg|jpeg|png|webp|gif|svg)$/i) ||\n (file.fileUrl && file.fileUrl.startsWith('http') && !file.fileUrl.endsWith('.pdf'))\n\n // ─── Table View Row ────────────────────────────────────────────────────────\n if (viewMode === 'table') {\n return (\n <tr\n className={cn(\n 'group border-b border-border/60 transition-colors hover:bg-muted/40 text-xs',\n isSelected && 'bg-primary/5',\n className\n )}\n >\n <td className=\"py-2.5 px-3\">\n <div className=\"flex items-center gap-2.5 min-w-0\">\n <div\n className={cn(\n 'flex h-7 w-7 items-center justify-center rounded-lg shrink-0',\n theme.bgColor,\n theme.iconColor\n )}\n >\n <theme.icon className=\"h-3.5 w-3.5\" />\n </div>\n <span className=\"font-semibold text-foreground truncate max-w-[200px]\">\n {file.fileName}\n </span>\n </div>\n </td>\n\n <td className=\"py-2.5 px-3 text-muted-foreground truncate max-w-[140px]\">\n {file.folderPath || file.section || 'General'}\n </td>\n\n <td className=\"py-2.5 px-3 text-muted-foreground font-mono\">\n {formatBytes(file.fileSize)}\n </td>\n\n <td className=\"py-2.5 px-3 text-muted-foreground\">\n {formatTimeAgo(file.updatedAt)}\n </td>\n\n <td className=\"py-2.5 px-3 text-right\">\n <div className=\"flex items-center justify-end gap-1\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => onPreview?.(file)}\n className=\"h-7 px-2.5 rounded-lg bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 hover:bg-indigo-500/20 text-xs font-semibold gap-1.5\"\n >\n <Eye className=\"h-3.5 w-3.5\" /> Preview\n </Button>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onDownload?.(file)}\n className=\"h-7 w-7 rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Download className=\"h-3.5 w-3.5\" />\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"h-7 w-7 rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <MoreHorizontal className=\"h-3.5 w-3.5\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-40 rounded-xl p-1 shadow-lg\">\n <DropdownMenuItem onClick={() => onPreview?.(file)} className=\"gap-2 text-xs\">\n <Eye className=\"h-3.5 w-3.5\" /> Preview\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onDownload?.(file)} className=\"gap-2 text-xs\">\n <Download className=\"h-3.5 w-3.5\" /> Download\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onCopyLink?.(file)} className=\"gap-2 text-xs\">\n <Copy className=\"h-3.5 w-3.5\" /> Copy Link\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => onDelete?.(file)}\n className=\"gap-2 text-xs text-destructive focus:text-destructive\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" /> Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </td>\n </tr>\n )\n }\n\n // ─── Grid View Card (Matches Screenshot 1 Exactly) ─────────────────────────\n return (\n <div\n className={cn(\n 'group relative flex flex-col justify-between rounded-2xl border border-border/80 bg-card p-2.5 shadow-2xs hover:shadow-md transition-all hover:border-indigo-300 dark:hover:border-indigo-700 select-none',\n isSelected && 'ring-2 ring-indigo-500 bg-indigo-500/5',\n className\n )}\n >\n <div>\n {/* Media Thumbnail */}\n <div className=\"relative w-full aspect-[16/10] rounded-xl overflow-hidden bg-muted/60 mb-2.5 flex items-center justify-center\">\n {isImage && file.fileUrl ? (\n <img\n src={file.fileUrl}\n alt={file.fileName}\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n loading=\"lazy\"\n />\n ) : (\n <div\n className={cn(\n 'flex flex-col items-center justify-center gap-1.5 w-full h-full p-4',\n theme.bgColor\n )}\n >\n <theme.icon className={cn('h-10 w-10', theme.iconColor)} />\n <span className=\"text-[11px] font-bold uppercase tracking-wider text-muted-foreground\">\n {theme.name}\n </span>\n </div>\n )}\n </div>\n\n {/* File Name & Path Info */}\n <div className=\"px-1 min-w-0\">\n <h3\n className=\"text-sm font-bold text-foreground truncate tracking-tight\"\n title={file.fileName}\n >\n {file.fileName}\n </h3>\n <p className=\"text-xs text-muted-foreground truncate mt-0.5 flex items-center gap-1\">\n <span>{file.folderPath || `Chat/${file.senderEmail || 'amanmicropay@gmail.com'}`}</span>\n <span>·</span>\n <span>{formatTimeAgo(file.updatedAt)}</span>\n </p>\n </div>\n </div>\n\n {/* Card Action Footer */}\n <div className=\"flex items-center gap-1.5 mt-2.5 pt-2 border-t border-border/40 px-1\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => onPreview?.(file)}\n className=\"h-7 px-2.5 rounded-lg bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 hover:bg-indigo-500/20 text-xs font-semibold gap-1.5 flex-1 justify-center cursor-pointer\"\n >\n <Eye className=\"h-3.5 w-3.5\" /> Preview\n </Button>\n\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onDownload?.(file)}\n className=\"h-7 w-7 rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground cursor-pointer\"\n title=\"Download\"\n >\n <Download className=\"h-3.5 w-3.5\" />\n </Button>\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"h-7 w-7 rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground cursor-pointer\"\n title=\"More actions\"\n >\n <MoreHorizontal className=\"h-3.5 w-3.5\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-40 rounded-xl p-1 shadow-lg\">\n <DropdownMenuItem onClick={() => onPreview?.(file)} className=\"gap-2 text-xs\">\n <Eye className=\"h-3.5 w-3.5\" /> Preview\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onDownload?.(file)} className=\"gap-2 text-xs\">\n <Download className=\"h-3.5 w-3.5\" /> Download\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onCopyLink?.(file)} className=\"gap-2 text-xs\">\n <Copy className=\"h-3.5 w-3.5\" /> Copy Link\n </DropdownMenuItem>\n {onShare && (\n <DropdownMenuItem onClick={() => onShare?.(file)} className=\"gap-2 text-xs\">\n <Share2 className=\"h-3.5 w-3.5\" /> Share\n </DropdownMenuItem>\n )}\n {onRename && (\n <DropdownMenuItem onClick={() => onRename?.(file)} className=\"gap-2 text-xs\">\n <Edit2 className=\"h-3.5 w-3.5\" /> Rename\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => onDelete?.(file)}\n className=\"gap-2 text-xs text-destructive focus:text-destructive\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" /> Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { FolderOpen, ChevronDown, ChevronRight, Folder } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '@/design-system/components/ui/badge'\n\nexport interface FolderItemData {\n id: string\n name: string\n path: string\n section?: string\n category?: string\n fileCount: number\n parentId?: string | null\n level: number\n}\n\nexport interface FolderTreeItemProps {\n folder: FolderItemData\n isFolderActive: boolean\n isExpanded: boolean\n onToggleExpand: (folderId: string, e?: React.MouseEvent) => void\n onSelectFolder: (folder: FolderItemData) => void\n className?: string\n}\n\nexport function FolderTreeItem({\n folder,\n isFolderActive,\n isExpanded,\n onToggleExpand,\n onSelectFolder,\n className,\n}: FolderTreeItemProps) {\n const isLevel0 = folder.level === 0\n const isLevel1 = folder.level === 1\n const isLevel2 = folder.level === 2\n const hasChildren = isLevel0 || isLevel1\n\n return (\n <div\n id={`folder-card-${folder.id}`}\n onClick={() => {\n if (hasChildren) {\n onToggleExpand(folder.id)\n } else {\n onSelectFolder(folder)\n }\n }}\n className={cn(\n 'group relative flex cursor-pointer items-center justify-between gap-2 rounded-xl py-1.5 px-2 transition-all duration-200 select-none border',\n isLevel0 && 'font-bold bg-muted/20 border-border/50 my-1',\n isLevel1 && 'ml-3 border-border/40 my-0.5',\n isLevel2 && 'ml-6 border-transparent hover:bg-muted/40 my-0.5',\n isFolderActive\n ? 'border-indigo-300 bg-indigo-500/15 text-indigo-600 dark:border-indigo-800 dark:bg-indigo-950/40 dark:text-indigo-400 font-bold shadow-2xs'\n : 'bg-card hover:bg-indigo-500/5 hover:border-indigo-200/40',\n className\n )}\n >\n {isFolderActive && (\n <div className=\"absolute top-1 bottom-1 left-0 w-1 rounded-l-full bg-indigo-600\" />\n )}\n <div className=\"flex items-center gap-1.5 min-w-0 flex-1\">\n {hasChildren && (\n <button\n type=\"button\"\n onClick={(e) => onToggleExpand(folder.id, e)}\n className=\"flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground cursor-pointer\"\n >\n {isExpanded ? (\n <ChevronDown className=\"h-3 w-3\" />\n ) : (\n <ChevronRight className=\"h-3 w-3\" />\n )}\n </button>\n )}\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center rounded-lg text-indigo-600 dark:text-indigo-400 transition-colors',\n isLevel0\n ? 'h-6 w-6 border border-indigo-200/40 bg-indigo-500/10'\n : isLevel1\n ? 'h-5.5 w-5.5 border border-indigo-200/30 bg-indigo-500/5'\n : 'h-5 w-5'\n )}\n >\n {isExpanded ? (\n <FolderOpen\n className={\n isLevel0\n ? 'h-3.5 w-3.5'\n : isLevel1\n ? 'h-3 w-3'\n : 'h-3 w-3 text-indigo-500'\n }\n />\n ) : (\n <Folder\n className={\n isLevel0\n ? 'h-3.5 w-3.5'\n : isLevel1\n ? 'h-3 w-3'\n : 'h-3 w-3 text-indigo-500'\n }\n />\n )}\n </div>\n <span\n className={cn(\n 'truncate text-foreground',\n isLevel0\n ? 'text-xs font-bold'\n : isLevel1\n ? 'text-[11px] font-semibold'\n : 'text-[11px] font-medium',\n isFolderActive && 'text-indigo-600 dark:text-indigo-400'\n )}\n >\n {folder.name}\n </span>\n </div>\n\n <Badge\n variant={isFolderActive ? 'default' : 'secondary'}\n className={cn(\n 'text-[10px] px-1.5 py-0 h-4 min-w-4 flex items-center justify-center font-mono',\n isFolderActive\n ? 'bg-indigo-600 text-white'\n : 'bg-muted text-muted-foreground group-hover:bg-indigo-500/10 group-hover:text-indigo-600'\n )}\n >\n {folder.fileCount}\n </Badge>\n </div>\n )\n}\n","import React from 'react'\nimport { HardDrive, FileText, Image as ImageIcon, Film, Database, ArrowUpRight } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { formatBytes } from './file-card-item'\n\nexport interface StorageStatItem {\n label: string\n count: number\n sizeBytes?: number\n colorClass: string\n icon?: React.ReactNode\n}\n\nexport interface StorageStatCardProps {\n totalFiles: number\n totalSizeBytes?: number\n maxStorageBytes?: number\n stats?: StorageStatItem[]\n onViewAllFiles?: () => void\n onUploadClick?: () => void\n className?: string\n}\n\nexport function StorageStatCard({\n totalFiles,\n totalSizeBytes = 0,\n maxStorageBytes = 10 * 1024 * 1024 * 1024, // 10 GB default\n stats,\n onViewAllFiles,\n onUploadClick,\n className,\n}: StorageStatCardProps) {\n const percentUsed = Math.min(\n 100,\n Math.max(1, Math.round((totalSizeBytes / (maxStorageBytes || 1)) * 100))\n )\n\n const defaultStats: StorageStatItem[] = stats || [\n {\n label: 'Documents & PDFs',\n count: Math.round(totalFiles * 0.4),\n sizeBytes: Math.round(totalSizeBytes * 0.45),\n colorClass: 'bg-red-500',\n icon: <FileText className=\"h-4 w-4 text-red-500\" />,\n },\n {\n label: 'Images & Photos',\n count: Math.round(totalFiles * 0.35),\n sizeBytes: Math.round(totalSizeBytes * 0.3),\n colorClass: 'bg-amber-500',\n icon: <ImageIcon className=\"h-4 w-4 text-amber-500\" />,\n },\n {\n label: 'Media & Videos',\n count: Math.round(totalFiles * 0.15),\n sizeBytes: Math.round(totalSizeBytes * 0.2),\n colorClass: 'bg-purple-500',\n icon: <Film className=\"h-4 w-4 text-purple-500\" />,\n },\n {\n label: 'Other & Archives',\n count: Math.max(0, totalFiles - Math.round(totalFiles * 0.9)),\n sizeBytes: Math.round(totalSizeBytes * 0.05),\n colorClass: 'bg-indigo-500',\n icon: <Database className=\"h-4 w-4 text-indigo-500\" />,\n },\n ]\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-4 rounded-2xl border border-border/80 bg-card p-4 shadow-2xs select-none',\n className\n )}\n >\n {/* Top Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 border border-indigo-200/40\">\n <HardDrive className=\"h-5 w-5\" />\n </div>\n <div>\n <h3 className=\"text-xs font-bold text-foreground\">Storage Overview</h3>\n <p className=\"text-[11px] text-muted-foreground\">\n {totalFiles} items stored in workspace\n </p>\n </div>\n </div>\n\n <div className=\"text-right\">\n <p className=\"text-xs font-bold text-foreground font-mono\">\n {formatBytes(totalSizeBytes)}\n </p>\n <p className=\"text-[10px] text-muted-foreground font-mono\">\n of {formatBytes(maxStorageBytes)}\n </p>\n </div>\n </div>\n\n {/* Progress Bar */}\n <div className=\"space-y-1.5\">\n <div className=\"flex h-2.5 w-full overflow-hidden rounded-full bg-muted/60 p-0.5 border border-border/40\">\n <div\n className=\"h-full rounded-full bg-linear-to-r from-indigo-500 via-purple-500 to-amber-500 transition-all duration-500\"\n style={{ width: `${percentUsed}%` }}\n />\n </div>\n <div className=\"flex justify-between text-[10px] text-muted-foreground\">\n <span>{percentUsed}% capacity utilized</span>\n <span>{formatBytes(Math.max(0, maxStorageBytes - totalSizeBytes))} available</span>\n </div>\n </div>\n\n {/* Breakdown categories */}\n <div className=\"grid grid-cols-2 gap-2 pt-1\">\n {defaultStats.map((item, idx) => (\n <div\n key={idx}\n className=\"flex items-center gap-2 rounded-xl border border-border/40 bg-muted/20 p-2\"\n >\n <div className=\"shrink-0\">{item.icon}</div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-[11px] font-semibold text-foreground\">\n {item.label}\n </p>\n <div className=\"flex items-center justify-between text-[10px] text-muted-foreground\">\n <span>{item.count} files</span>\n <span className=\"font-mono\">{formatBytes(item.sizeBytes)}</span>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {/* Action Footer */}\n {(onViewAllFiles || onUploadClick) && (\n <div className=\"flex items-center justify-between pt-2 border-t border-border/50\">\n {onViewAllFiles && (\n <button\n type=\"button\"\n onClick={onViewAllFiles}\n className=\"text-xs font-semibold text-indigo-600 dark:text-indigo-400 hover:underline flex items-center gap-1 cursor-pointer\"\n >\n <span>Explore All Files</span>\n <ArrowUpRight className=\"h-3.5 w-3.5\" />\n </button>\n )}\n {onUploadClick && (\n <button\n type=\"button\"\n onClick={onUploadClick}\n className=\"text-xs font-semibold bg-indigo-600 text-white hover:bg-indigo-700 px-3 py-1 rounded-lg transition-colors cursor-pointer\"\n >\n Upload New\n </button>\n )}\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useMemo } from 'react'\nimport {\n Search,\n X,\n FolderOpen,\n ArrowLeft,\n Filter,\n ArrowUpDown,\n ArrowLeftRight,\n SlidersHorizontal,\n LayoutGrid,\n List as ListIcon,\n ChevronLeft,\n ChevronRight,\n Upload,\n CheckSquare,\n Square,\n Trash2,\n Download,\n Bell,\n Flag,\n MoreVertical,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { FileCardItem, FileItemData, FileCategoryType, formatBytes } from './file-card-item'\nimport { FolderItemData } from './folder-tree-item'\nimport { Button } from '@/design-system/components/ui/button'\nimport { Input } from '@/design-system/components/ui/input'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n} from '@/design-system/components/ui/dropdown-menu'\n\nexport interface UserFileCardsViewProps {\n folder?: FolderItemData | null\n files: FileItemData[]\n selectedFileId?: string | null\n onSelectFileForPreview?: (file: FileItemData) => void\n onDownloadFile?: (file: FileItemData) => void\n onDeleteFile?: (file: FileItemData) => void\n onCopyLink?: (file: FileItemData) => void\n onRenameFile?: (file: FileItemData) => void\n onShareFile?: (file: FileItemData) => void\n onUploadClick?: () => void\n onBack?: () => void\n onClose?: () => void\n className?: string\n}\n\nexport function UserFileCardsView({\n folder,\n files,\n selectedFileId,\n onSelectFileForPreview,\n onDownloadFile,\n onDeleteFile,\n onCopyLink,\n onRenameFile,\n onShareFile,\n onUploadClick,\n onBack,\n onClose,\n className,\n}: UserFileCardsViewProps) {\n const [searchQuery, setSearchQuery] = useState('')\n const [selectedCategory, setSelectedCategory] = useState<string>('all')\n const [sortBy, setSortBy] = useState<'date' | 'name' | 'size'>('date')\n const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('desc')\n const [viewMode, setViewMode] = useState<'grid' | 'table'>('grid')\n const [currentPage, setCurrentPage] = useState(1)\n const itemsPerPage = viewMode === 'grid' ? 12 : 20\n\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set())\n\n // Filter & Search Logic\n const filteredFiles = useMemo(() => {\n return files.filter((f) => {\n const matchCategory =\n selectedCategory === 'all' ||\n f.category.toLowerCase() === selectedCategory.toLowerCase() ||\n (selectedCategory === 'Xls' && (f.category === 'Csv' || f.category === 'Xls'))\n\n const matchSearch =\n !searchQuery.trim() ||\n f.fileName.toLowerCase().includes(searchQuery.toLowerCase()) ||\n (f.folderPath && f.folderPath.toLowerCase().includes(searchQuery.toLowerCase()))\n\n return matchCategory && matchSearch\n })\n }, [files, selectedCategory, searchQuery])\n\n // Sorting\n const sortedFiles = useMemo(() => {\n return [...filteredFiles].sort((a, b) => {\n let compare = 0\n if (sortBy === 'date') {\n const timeA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0\n const timeB = b.updatedAt ? new Date(b.updatedAt).getTime() : 0\n compare = timeB - timeA\n } else if (sortBy === 'name') {\n compare = a.fileName.localeCompare(b.fileName)\n } else if (sortBy === 'size') {\n compare = (b.fileSize || 0) - (a.fileSize || 0)\n }\n return sortOrder === 'asc' ? -compare : compare\n })\n }, [filteredFiles, sortBy, sortOrder])\n\n // Pagination\n const totalPages = Math.ceil(sortedFiles.length / itemsPerPage) || 1\n const paginatedFiles = useMemo(() => {\n const start = (currentPage - 1) * itemsPerPage\n return sortedFiles.slice(start, start + itemsPerPage)\n }, [sortedFiles, currentPage, itemsPerPage])\n\n const totalBytes = useMemo(() => {\n return files.reduce((acc, curr) => acc + (curr.fileSize || 0), 0)\n }, [files])\n\n const handleBulkDownload = () => {\n const toDownload = files.filter((f) => selectedIds.has(f.id))\n toDownload.forEach((f) => onDownloadFile?.(f))\n }\n\n const handleBulkDelete = () => {\n const toDelete = files.filter((f) => selectedIds.has(f.id))\n toDelete.forEach((f) => onDeleteFile?.(f))\n setSelectedIds(new Set())\n }\n\n const folderDisplayName = folder?.name || 'Images'\n const folderDisplayPath = folder?.path || 'Chat/amanmicropay@gmail.com/Images'\n\n return (\n <div\n className={cn(\n 'flex h-full min-h-0 w-full flex-1 flex-col overflow-hidden bg-background select-none',\n className\n )}\n >\n {/* ── 1. TOP HEADER (Exact Screenshot 1 Style) ────────────────────────── */}\n <div className=\"flex items-center justify-between border-b border-border bg-background px-4 py-3 shrink-0\">\n <div className=\"flex items-center gap-3 min-w-0\">\n {onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"flex h-8 w-8 items-center justify-center rounded-xl text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n title=\"Back\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </button>\n )}\n\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 border border-indigo-200/50 dark:border-indigo-900/40 shrink-0 shadow-2xs\">\n <FolderOpen className=\"h-5 w-5\" />\n </div>\n\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h2 className=\"truncate text-base font-bold text-foreground tracking-tight\">\n {folderDisplayName}\n </h2>\n <span className=\"px-2 py-0.5 rounded-full bg-muted text-xs font-normal text-muted-foreground shrink-0\">\n {filteredFiles.length} files\n </span>\n </div>\n <p className=\"truncate text-xs text-muted-foreground mt-0.5\">\n Storage folder: {folderDisplayPath}\n </p>\n </div>\n </div>\n\n {/* Action icons on top right: Bell, Flag, 3-dot, Close (X without border) */}\n <div className=\"flex items-center gap-1 shrink-0\">\n <button\n type=\"button\"\n className=\"p-2 rounded-lg text-amber-500 hover:bg-muted transition-colors cursor-pointer\"\n title=\"Notifications\"\n >\n <Bell className=\"h-4 w-4\" />\n </button>\n\n <button\n type=\"button\"\n className=\"p-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n title=\"Flag / Report\"\n >\n <Flag className=\"h-4 w-4\" />\n </button>\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"p-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n title=\"Options\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44 rounded-xl p-1 shadow-lg\">\n {onUploadClick && (\n <DropdownMenuItem onClick={onUploadClick} className=\"gap-2 text-xs\">\n <Upload className=\"h-3.5 w-3.5\" /> Upload Files\n </DropdownMenuItem>\n )}\n <DropdownMenuItem onClick={() => setViewMode(viewMode === 'grid' ? 'table' : 'grid')} className=\"gap-2 text-xs\">\n {viewMode === 'grid' ? <ListIcon className=\"h-3.5 w-3.5\" /> : <LayoutGrid className=\"h-3.5 w-3.5\" />}\n Switch to {viewMode === 'grid' ? 'Table' : 'Card'} View\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n {(onClose || onBack) && (\n <button\n type=\"button\"\n onClick={onClose || onBack}\n className=\"p-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n title=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n\n {/* ── 2. TOOLBAR (LTR, FILTER, SORT, SHORT, VIEW TOGGLE) ──────────────── */}\n <div className=\"flex flex-wrap items-center justify-between gap-2 px-4 pt-3 pb-2 shrink-0\">\n <div className=\"flex items-center gap-2 overflow-x-auto py-0.5\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs font-bold text-muted-foreground rounded-xl border-border px-3 shrink-0\"\n >\n <ArrowLeftRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n LTR\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs font-bold text-muted-foreground rounded-xl border-border px-3 shrink-0\"\n >\n <Filter className=\"h-3.5 w-3.5 text-muted-foreground\" />\n FILTER\n </Button>\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs font-bold text-muted-foreground rounded-xl border-border px-3 shrink-0\"\n >\n <ArrowUpDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\n SORT\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-40 rounded-xl p-1 shadow-lg\">\n <DropdownMenuItem onClick={() => setSortBy('date')} className=\"text-xs\">\n Date Modified\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => setSortBy('name')} className=\"text-xs\">\n File Name\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => setSortBy('size')} className=\"text-xs\">\n File Size\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs font-bold text-muted-foreground rounded-xl border-border px-3 shrink-0\"\n >\n <SlidersHorizontal className=\"h-3.5 w-3.5 text-muted-foreground\" />\n SHORT\n </Button>\n </div>\n\n {/* View Toggle Button */}\n <Button\n onClick={() => setViewMode(viewMode === 'grid' ? 'table' : 'grid')}\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs font-bold rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white shadow-xs px-3.5 shrink-0 cursor-pointer\"\n >\n {viewMode === 'grid' ? (\n <>\n <LayoutGrid className=\"h-3.5 w-3.5\" />\n VIEW: CARD\n </>\n ) : (\n <>\n <ListIcon className=\"h-3.5 w-3.5\" />\n VIEW: TABLE\n </>\n )}\n </Button>\n </div>\n\n {/* ── 3. SEARCH BAR ───────────────────────────────────────────────────── */}\n <div className=\"px-4 pb-2 shrink-0\">\n <div className=\"relative w-full\">\n <Search className=\"absolute left-3.5 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value)\n setCurrentPage(1)\n }}\n placeholder=\"Search files by name, format, or sender...\"\n className=\"h-10 pl-10 pr-9 text-sm rounded-xl bg-background border-border/80 focus-visible:ring-1 focus-visible:ring-indigo-500\"\n />\n {searchQuery && (\n <button\n type=\"button\"\n onClick={() => setSearchQuery('')}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n\n {/* ── 4. SUBHEADER: COUNT & PAGINATION ────────────────────────────────── */}\n <div className=\"flex items-center justify-between px-4 py-2 text-xs text-muted-foreground font-medium shrink-0\">\n <span>{filteredFiles.length} files</span>\n <div className=\"flex items-center gap-2\">\n <span>\n {sortedFiles.length === 0\n ? '0 of 0'\n : `${(currentPage - 1) * itemsPerPage + 1}–${Math.min(\n currentPage * itemsPerPage,\n sortedFiles.length\n )} of ${sortedFiles.length}`}\n </span>\n <div className=\"flex items-center gap-0.5\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n disabled={currentPage <= 1}\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\n className=\"h-6 w-6 rounded-md text-muted-foreground hover:text-foreground\"\n >\n <ChevronLeft className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n disabled={currentPage >= totalPages}\n onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}\n className=\"h-6 w-6 rounded-md text-muted-foreground hover:text-foreground\"\n >\n <ChevronRight className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n </div>\n\n {/* ── 5. FILE LIST / GRID CONTENT ─────────────────────────────────────── */}\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n {paginatedFiles.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center h-64 text-center p-6 rounded-2xl border border-dashed border-border/80 bg-muted/5\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-2xl bg-indigo-500/10 text-indigo-600 mb-3\">\n <FolderOpen className=\"h-6 w-6\" />\n </div>\n <h3 className=\"text-sm font-bold text-foreground\">No files found</h3>\n <p className=\"text-xs text-muted-foreground max-w-xs mt-1\">\n {searchQuery\n ? `No files match your query \"${searchQuery}\" in this folder.`\n : 'This folder is currently empty. Upload documents or media to get started.'}\n </p>\n {onUploadClick && (\n <Button\n size=\"sm\"\n onClick={onUploadClick}\n className=\"mt-4 gap-1.5 text-xs font-semibold bg-indigo-600 hover:bg-indigo-700 text-white rounded-xl shadow-xs\"\n >\n <Upload className=\"h-3.5 w-3.5\" />\n Upload First File\n </Button>\n )}\n </div>\n ) : viewMode === 'table' ? (\n <div className=\"overflow-x-auto rounded-2xl border border-border/80 bg-card shadow-2xs\">\n <table className=\"w-full text-left text-xs border-collapse\">\n <thead>\n <tr className=\"border-b border-border/60 bg-muted/20 text-muted-foreground font-semibold\">\n <th className=\"py-2.5 px-3\">File Name</th>\n <th className=\"py-2.5 px-3\">Storage Space</th>\n <th className=\"py-2.5 px-3\">Size</th>\n <th className=\"py-2.5 px-3\">Updated</th>\n <th className=\"py-2.5 px-3 text-right\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {paginatedFiles.map((file) => (\n <FileCardItem\n key={file.id}\n file={file}\n viewMode=\"table\"\n isSelected={selectedIds.has(file.id)}\n onSelect={() => {\n setSelectedIds((prev) => {\n const next = new Set(prev)\n if (next.has(file.id)) next.delete(file.id)\n else next.add(file.id)\n return next\n })\n }}\n onPreview={onSelectFileForPreview}\n onDownload={onDownloadFile}\n onDelete={onDeleteFile}\n onCopyLink={onCopyLink}\n onRename={onRenameFile}\n onShare={onShareFile}\n />\n ))}\n </tbody>\n </table>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4\">\n {paginatedFiles.map((file) => (\n <FileCardItem\n key={file.id}\n file={file}\n viewMode=\"grid\"\n isSelected={selectedIds.has(file.id)}\n onPreview={onSelectFileForPreview}\n onDownload={onDownloadFile}\n onDelete={onDeleteFile}\n onCopyLink={onCopyLink}\n onRename={onRenameFile}\n onShare={onShareFile}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import React, { useState, useRef } from 'react'\nimport {\n Bold,\n Italic,\n Underline,\n List,\n ListOrdered,\n Paperclip,\n Save,\n ArrowLeft,\n X,\n Loader2,\n Folder as FolderIcon,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '@/design-system/components/ui/button'\nimport { Input } from '@/design-system/components/ui/input'\nimport { Label } from '@/design-system/components/ui/label'\nimport { Textarea } from '@/design-system/components/ui/textarea'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/design-system/components/ui/select'\nimport { FileItemData, FileCategoryType, formatBytes } from './file-card-item'\n\nexport interface AttachmentItem {\n id: string\n name: string\n type: string\n size: string\n url?: string\n fileObj?: File\n progress?: number\n isUploading?: boolean\n}\n\nexport interface FileUploadFormProps {\n userEmail?: string | null\n folders?: { id: string; name: string }[]\n initialSubject?: string\n initialFolder?: string\n initialSubFolder?: string\n onClose?: () => void\n onSave?: (data: {\n subject: string\n folder: string\n subFolder: string\n remarks: string\n body: string\n attachments: AttachmentItem[]\n }) => void | Promise<void>\n onSaveDraft?: (data: {\n subject: string\n folder: string\n subFolder: string\n remarks: string\n body: string\n attachments: AttachmentItem[]\n }) => void | Promise<void>\n onUploadSuccess?: (newItems?: FileItemData[]) => void\n onPreviewAttachment?: (attachment: { name: string; url?: string }) => void\n className?: string\n}\n\nconst TEMPLATE_OPTIONS = [\n { id: 'standard', name: 'Standard Document' },\n { id: 'invoice', name: 'Financial Invoice' },\n { id: 'report', name: 'Report & Spreadsheet' },\n { id: 'contract', name: 'Contract & Legal' },\n]\n\nconst FOLDER_OPTIONS = ['Finance', 'Chat', 'Files', 'Email', 'AI Chat', 'Order']\nconst SUB_FOLDER_OPTIONS: FileCategoryType[] = [\n 'Pdf',\n 'Doc',\n 'Xls',\n 'Images',\n 'Videos',\n 'Ppt',\n 'Txt',\n 'Csv',\n 'Zip',\n 'Other',\n]\n\nexport function FileUploadForm({\n userEmail,\n folders,\n initialSubject = '',\n initialFolder = 'Finance',\n initialSubFolder = 'Pdf',\n onClose,\n onSave,\n onSaveDraft,\n onUploadSuccess,\n onPreviewAttachment,\n className,\n}: FileUploadFormProps) {\n const [template, setTemplate] = useState('standard')\n const [subject, setSubject] = useState(initialSubject)\n const [folder, setFolder] = useState<string>(initialFolder)\n const [subFolder, setSubFolder] = useState<string>(initialSubFolder)\n const [remarks, setRemarks] = useState('')\n const [body, setBody] = useState('')\n\n const [attachments, setAttachments] = useState<AttachmentItem[]>([])\n const [isSaving, setIsSaving] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files\n if (!files || files.length === 0) return\n\n const newAttachments: AttachmentItem[] = Array.from(files).map((f) => ({\n id: `att-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n name: f.name,\n type: f.type || 'application/octet-stream',\n size: formatBytes(f.size),\n url: URL.createObjectURL(f),\n fileObj: f,\n progress: 100,\n }))\n\n setAttachments((prev) => [...prev, ...newAttachments])\n if (fileInputRef.current) fileInputRef.current.value = ''\n }\n\n const handleRemoveAttachment = (id: string) => {\n setAttachments((prev) => prev.filter((a) => a.id !== id))\n }\n\n const handleFormSubmit = async (e?: React.FormEvent) => {\n if (e) e.preventDefault()\n setIsSaving(true)\n try {\n if (onSave) {\n await onSave({\n subject,\n folder,\n subFolder,\n remarks,\n body,\n attachments,\n })\n }\n onUploadSuccess?.()\n } finally {\n setIsSaving(false)\n }\n }\n\n const handleDraftSubmit = async () => {\n if (onSaveDraft) {\n await onSaveDraft({\n subject,\n folder,\n subFolder,\n remarks,\n body,\n attachments,\n })\n } else {\n await handleFormSubmit()\n }\n }\n\n return (\n <div\n className={cn(\n 'flex h-full min-h-0 w-full flex-1 flex-col overflow-hidden bg-background select-none',\n className\n )}\n >\n {/* ── 1. TOP HEADER (Matches Screenshot 2) ─────────────────────────────── */}\n <div className=\"flex items-center justify-between border-b border-border bg-background px-6 py-4 shrink-0\">\n <h2 className=\"text-xl font-bold text-foreground tracking-tight\">\n New File Upload\n </h2>\n\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"flex items-center gap-1.5 text-sm font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span>Back to Storage</span>\n </button>\n )}\n </div>\n\n {/* ── 2. FORM BODY (Matches Screenshot 2) ──────────────────────────────── */}\n <div className=\"min-h-0 flex-1 overflow-y-auto p-6 space-y-5\">\n {/* Select Template */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Select Template</Label>\n <div className=\"w-full max-w-sm\">\n <Select value={template} onValueChange={setTemplate}>\n <SelectTrigger className=\"h-10 text-sm rounded-xl bg-background border-border/80\">\n <SelectValue placeholder=\"Select template\" />\n </SelectTrigger>\n <SelectContent className=\"rounded-xl shadow-lg\">\n {TEMPLATE_OPTIONS.map((t) => (\n <SelectItem key={t.id} value={t.id} className=\"text-sm\">\n {t.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Document Title / Subject */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Document Title / Subject</Label>\n <Input\n value={subject}\n onChange={(e) => setSubject(e.target.value)}\n placeholder=\"Enter document title or reference name\"\n className=\"h-10 text-sm rounded-xl bg-background border-border/80\"\n />\n </div>\n\n {/* Folder */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Folder</Label>\n <div className=\"w-full max-w-xs\">\n <Select value={folder} onValueChange={setFolder}>\n <SelectTrigger className=\"h-10 text-sm rounded-xl bg-background border-border/80\">\n <div className=\"flex items-center gap-2\">\n <FolderIcon className=\"h-4 w-4 text-amber-500 fill-amber-500\" />\n <SelectValue placeholder=\"Select folder\" />\n </div>\n </SelectTrigger>\n <SelectContent className=\"rounded-xl shadow-lg\">\n {(folders || FOLDER_OPTIONS.map((f) => ({ id: f, name: f }))).map((f) => (\n <SelectItem key={f.id} value={f.name} className=\"text-sm\">\n <div className=\"flex items-center gap-2\">\n <FolderIcon className=\"h-3.5 w-3.5 text-amber-500 fill-amber-500\" />\n <span>{f.name}</span>\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Sub folder */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Sub folder</Label>\n <div className=\"w-full max-w-xs\">\n <Select value={subFolder} onValueChange={setSubFolder}>\n <SelectTrigger className=\"h-10 text-sm rounded-xl bg-background border-border/80\">\n <div className=\"flex items-center gap-2\">\n <FolderIcon className=\"h-4 w-4 text-amber-500 fill-amber-500\" />\n <SelectValue placeholder=\"Select subfolder\" />\n </div>\n </SelectTrigger>\n <SelectContent className=\"rounded-xl shadow-lg\">\n {SUB_FOLDER_OPTIONS.map((sf) => (\n <SelectItem key={sf} value={sf} className=\"text-sm\">\n <div className=\"flex items-center gap-2\">\n <FolderIcon className=\"h-3.5 w-3.5 text-amber-500 fill-amber-500\" />\n <span>{sf}</span>\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Remarks */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Remarks</Label>\n <Textarea\n value={remarks}\n onChange={(e) => setRemarks(e.target.value)}\n placeholder=\"Add a note about these attachments...\"\n className=\"min-h-[80px] text-sm rounded-xl bg-background border-border/80 resize-y\"\n />\n </div>\n\n {/* Description / Notes with Rich Formatting Toolbar */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-semibold text-foreground\">Description / Notes</Label>\n <div className=\"overflow-hidden rounded-xl border border-border/80 bg-background focus-within:ring-1 focus-within:ring-indigo-500\">\n {/* Toolbar: B, I, U, :=, 1., 📎 */}\n <div className=\"flex items-center gap-1 p-2 border-b border-border/60 bg-muted/20\">\n <button\n type=\"button\"\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground text-xs font-bold transition-colors\"\n title=\"Bold\"\n >\n <Bold className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground text-xs font-bold transition-colors\"\n title=\"Italic\"\n >\n <Italic className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground text-xs font-bold transition-colors\"\n title=\"Underline\"\n >\n <Underline className=\"h-3.5 w-3.5\" />\n </button>\n <div className=\"h-4 w-[1px] bg-border mx-1\" />\n <button\n type=\"button\"\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground text-xs font-bold transition-colors\"\n title=\"Bullet List\"\n >\n <List className=\"h-3.5 w-3.5\" />\n </button>\n <button\n type=\"button\"\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground text-xs font-bold transition-colors\"\n title=\"Numbered List\"\n >\n <ListOrdered className=\"h-3.5 w-3.5\" />\n </button>\n <div className=\"h-4 w-[1px] bg-border mx-1\" />\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground text-xs font-bold transition-colors cursor-pointer\"\n title=\"Attach Files\"\n >\n <Paperclip className=\"h-3.5 w-3.5\" />\n </button>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={handleFileChange}\n />\n </div>\n\n {/* Editor Textarea */}\n <textarea\n value={body}\n onChange={(e) => setBody(e.target.value)}\n placeholder=\"Type description, remarks, or notes here...\"\n rows={4}\n className=\"w-full bg-transparent p-3 text-sm outline-none resize-y border-0 focus:ring-0\"\n />\n </div>\n </div>\n\n {/* Attachment chips if any files are attached */}\n {attachments.length > 0 && (\n <div className=\"space-y-2 pt-1\">\n <Label className=\"text-xs font-semibold text-foreground\">\n Attached Files ({attachments.length})\n </Label>\n <div className=\"flex flex-wrap gap-2\">\n {attachments.map((att) => (\n <div\n key={att.id}\n className=\"flex items-center gap-2 px-3 py-1.5 rounded-xl border border-border/80 bg-muted/30 text-xs text-foreground font-medium\"\n >\n <Paperclip className=\"h-3.5 w-3.5 text-indigo-500\" />\n <span className=\"max-w-[200px] truncate\">{att.name}</span>\n <span className=\"text-[10px] text-muted-foreground\">({att.size})</span>\n <button\n type=\"button\"\n onClick={() => handleRemoveAttachment(att.id)}\n className=\"text-muted-foreground hover:text-destructive cursor-pointer ml-1\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* ── 3. BOTTOM FOOTER (Matches Screenshot 2) ─────────────────────────── */}\n <div className=\"flex items-center justify-between border-t border-border bg-background px-6 py-4 shrink-0\">\n <Button\n variant=\"outline\"\n onClick={onClose}\n className=\"h-9 px-4 rounded-xl text-sm font-semibold border-border/80 cursor-pointer\"\n >\n Cancel\n </Button>\n\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n onClick={handleDraftSubmit}\n disabled={isSaving}\n className=\"h-9 px-4 rounded-xl text-sm font-semibold border-border/80 gap-2 cursor-pointer\"\n >\n <Save className=\"h-4 w-4 text-muted-foreground\" />\n <span>Save as Draft</span>\n </Button>\n\n <Button\n onClick={() => handleFormSubmit()}\n disabled={isSaving}\n className=\"h-9 px-5 rounded-xl text-sm font-semibold gap-2 bg-indigo-600 hover:bg-indigo-700 text-white shadow-xs cursor-pointer\"\n >\n {isSaving ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Save className=\"h-4 w-4\" />\n )}\n <span>Save</span>\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { FilterBar, type ActiveFilter } from '../components/business/filter-bar'\nimport { cn } from '../../lib/utils'\n\nexport interface ListTemplateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n actions?: React.ReactNode\n searchPlaceholder?: string\n searchValue?: string\n onSearchChange?: (val: string) => void\n filters?: React.ReactNode\n activeFilters?: ActiveFilter[]\n onClearAllFilters?: () => void\n filterActions?: React.ReactNode\n children: React.ReactNode\n footer?: React.ReactNode\n}\n\n\nexport function ListTemplate({\n title,\n description,\n badge,\n breadcrumbs,\n actions,\n searchPlaceholder,\n searchValue,\n onSearchChange,\n filters,\n activeFilters,\n onClearAllFilters,\n filterActions,\n children,\n footer,\n className,\n ...props\n}: ListTemplateProps) {\n const hasFilterBar =\n Boolean(onSearchChange) ||\n Boolean(filters) ||\n (activeFilters && activeFilters.length > 0) ||\n Boolean(filterActions)\n\n return (\n <div className={cn('flex flex-col gap-6 p-4 sm:p-6 md:p-8', className)} {...props}>\n <PageHeader\n title={title}\n description={description}\n badge={badge}\n breadcrumbs={breadcrumbs}\n actions={actions}\n />\n\n {hasFilterBar && (\n <FilterBar\n searchPlaceholder={searchPlaceholder}\n searchValue={searchValue}\n onSearchChange={onSearchChange}\n filters={filters}\n activeFilters={activeFilters}\n onClearAll={onClearAllFilters}\n actions={filterActions}\n />\n )}\n\n <div className='flex-1'>{children}</div>\n\n {footer && <div className='pt-2'>{footer}</div>}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { Button } from '../components/ui/button'\nimport { ArrowLeft } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface DetailTemplateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n actions?: React.ReactNode\n onBack?: () => void\n backLabel?: string\n highlights?: React.ReactNode\n sidebar?: React.ReactNode\n children: React.ReactNode\n}\n\n\nexport function DetailTemplate({\n title,\n description,\n badge,\n breadcrumbs,\n actions,\n onBack,\n backLabel = 'Back',\n highlights,\n sidebar,\n children,\n className,\n ...props\n}: DetailTemplateProps) {\n return (\n <div className={cn('flex flex-col gap-6 p-4 sm:p-6 md:p-8', className)} {...props}>\n <div className='flex flex-col gap-2'>\n {onBack && (\n <Button\n variant='ghost'\n size='sm'\n onClick={onBack}\n className='w-fit gap-1.5 px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground'\n >\n <ArrowLeft className='h-3.5 w-3.5' />\n {backLabel}\n </Button>\n )}\n <PageHeader\n title={title}\n description={description}\n badge={badge}\n breadcrumbs={breadcrumbs}\n actions={actions}\n />\n </div>\n\n {highlights && <div className='grid gap-4 sm:grid-cols-2 lg:grid-cols-4'>{highlights}</div>}\n\n <div\n className={cn(\n 'grid gap-6',\n sidebar ? 'grid-cols-1 lg:grid-cols-3' : 'grid-cols-1'\n )}\n >\n <div className={cn(sidebar ? 'lg:col-span-2 space-y-6' : 'space-y-6')}>\n {children}\n </div>\n {sidebar && (\n <aside className='space-y-6 lg:col-span-1'>\n {sidebar}\n </aside>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { Button } from '../components/ui/button'\nimport { ArrowLeft } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface FormTemplateProps extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n onBack?: () => void\n backLabel?: string\n submitLabel?: string\n cancelLabel?: string\n onCancel?: () => void\n isSubmitting?: boolean\n stickyFooter?: boolean\n secondaryActions?: React.ReactNode\n}\n\n\nexport function FormTemplate({\n title,\n description,\n badge,\n breadcrumbs,\n onBack,\n backLabel = 'Back',\n submitLabel = 'Save changes',\n cancelLabel = 'Cancel',\n onCancel,\n isSubmitting = false,\n stickyFooter = false,\n secondaryActions,\n children,\n className,\n onSubmit,\n ...props\n}: FormTemplateProps) {\n return (\n <div className='flex flex-col gap-6 p-4 sm:p-6 md:p-8'>\n <div className='flex flex-col gap-2'>\n {onBack && (\n <Button\n type='button'\n variant='ghost'\n size='sm'\n onClick={onBack}\n className='w-fit gap-1.5 px-0 text-xs text-muted-foreground hover:bg-transparent hover:text-foreground'\n >\n <ArrowLeft className='h-3.5 w-3.5' />\n {backLabel}\n </Button>\n )}\n <PageHeader\n title={title}\n description={description}\n badge={badge}\n breadcrumbs={breadcrumbs}\n />\n </div>\n\n <form onSubmit={onSubmit} className={cn('space-y-8', className)} {...props}>\n <div className='space-y-6'>{children}</div>\n\n <div\n className={cn(\n 'flex flex-wrap items-center justify-between gap-4 pt-6',\n stickyFooter &&\n 'sticky bottom-0 -mx-4 -mb-4 bg-background/95 p-4 backdrop-blur border-t sm:-mx-6 sm:-mb-6 sm:p-6 md:-mx-8 md:-mb-8 md:p-8'\n )}\n >\n <div>{secondaryActions}</div>\n <div className='flex items-center gap-3'>\n {onCancel && (\n <Button\n type='button'\n variant='outline'\n disabled={isSubmitting}\n onClick={onCancel}\n >\n {cancelLabel}\n </Button>\n )}\n <Button type='submit' disabled={isSubmitting}>\n {isSubmitting ? 'Saving...' : submitLabel}\n </Button>\n </div>\n </div>\n </form>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { Button } from '../components/ui/button'\nimport { Check, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface WizardStep {\n id: string | number\n title: string\n description?: string\n}\n\nexport interface WizardTemplateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n steps: WizardStep[]\n currentStepIndex: number\n onStepChange?: (index: number) => void\n onNext?: () => void\n onPrevious?: () => void\n onSubmit?: () => void\n nextLabel?: string\n previousLabel?: string\n submitLabel?: string\n isSubmitting?: boolean\n canProceed?: boolean\n children: React.ReactNode\n}\n\n\nexport function WizardTemplate({\n title,\n description,\n steps,\n currentStepIndex,\n onStepChange,\n onNext,\n onPrevious,\n onSubmit,\n nextLabel = 'Next',\n previousLabel = 'Previous',\n submitLabel = 'Complete',\n isSubmitting = false,\n canProceed = true,\n children,\n className,\n ...props\n}: WizardTemplateProps) {\n const isLastStep = currentStepIndex === steps.length - 1\n const isFirstStep = currentStepIndex === 0\n\n return (\n <div className={cn('flex flex-col gap-6 p-4 sm:p-6 md:p-8', className)} {...props}>\n <PageHeader title={title} description={description} />\n\n {/* Steps Navigation Bar */}\n <nav aria-label='Wizard Progress' className='py-2'>\n <ol className='flex items-center justify-between gap-2 overflow-x-auto pb-2'>\n {steps.map((step, idx) => {\n const isCompleted = idx < currentStepIndex\n const isCurrent = idx === currentStepIndex\n const isClickable = onStepChange && idx < currentStepIndex\n\n return (\n <li\n key={step.id}\n className='flex flex-1 items-center gap-2.5 min-w-[120px]'\n >\n <button\n type='button'\n disabled={!isClickable}\n onClick={isClickable ? () => onStepChange(idx) : undefined}\n className={cn(\n 'flex items-center gap-2 text-left transition-colors',\n isClickable && 'cursor-pointer hover:opacity-80'\n )}\n >\n <span\n className={cn(\n 'flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold',\n isCompleted && 'bg-primary text-primary-foreground',\n isCurrent && 'border-2 border-primary bg-primary/10 text-primary font-bold',\n !isCompleted && !isCurrent && 'border border-border bg-muted text-muted-foreground'\n )}\n >\n {isCompleted ? <Check className='h-4 w-4' /> : idx + 1}\n </span>\n <div className='hidden sm:block'>\n <div\n className={cn(\n 'text-xs font-medium',\n isCurrent ? 'text-foreground font-semibold' : 'text-muted-foreground'\n )}\n >\n {step.title}\n </div>\n </div>\n </button>\n {idx < steps.length - 1 && (\n <div\n className={cn(\n 'h-0.5 flex-1 rounded-full',\n idx < currentStepIndex ? 'bg-primary' : 'bg-border'\n )}\n />\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n\n {/* Step Content */}\n <div className='flex-1 rounded-lg border bg-card p-4 sm:p-6'>\n {children}\n </div>\n\n {/* Wizard Footer Navigation */}\n <div className='flex items-center justify-between pt-2'>\n <Button\n type='button'\n variant='outline'\n disabled={isFirstStep || isSubmitting}\n onClick={onPrevious}\n >\n <ChevronLeft className='mr-1 h-4 w-4' />\n {previousLabel}\n </Button>\n\n {isLastStep ? (\n <Button\n type='button'\n disabled={!canProceed || isSubmitting}\n onClick={onSubmit}\n >\n {isSubmitting ? 'Submitting...' : submitLabel}\n </Button>\n ) : (\n <Button\n type='button'\n disabled={!canProceed || isSubmitting}\n onClick={onNext}\n >\n {nextLabel}\n <ChevronRight className='ml-1 h-4 w-4' />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PageHeader } from '../components/business/page-header'\nimport { cn } from '../../lib/utils'\n\nexport interface DashboardTemplateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n badge?: React.ReactNode\n breadcrumbs?: React.ReactNode\n actions?: React.ReactNode\n metrics?: React.ReactNode\n charts?: React.ReactNode\n activity?: React.ReactNode\n children?: React.ReactNode\n}\n\n\nexport function DashboardTemplate({\n title,\n description,\n badge,\n breadcrumbs,\n actions,\n metrics,\n charts,\n activity,\n children,\n className,\n ...props\n}: DashboardTemplateProps) {\n return (\n <div className={cn('flex flex-col gap-6 p-4 sm:p-6 md:p-8', className)} {...props}>\n <PageHeader\n title={title}\n description={description}\n badge={badge}\n breadcrumbs={breadcrumbs}\n actions={actions}\n />\n\n {metrics && (\n <section aria-label='Key Metrics' className='grid gap-4 sm:grid-cols-2 lg:grid-cols-4'>\n {metrics}\n </section>\n )}\n\n {charts && (\n <section aria-label='Charts and Visualizations' className='grid gap-4 md:grid-cols-2 lg:grid-cols-7'>\n {charts}\n </section>\n )}\n\n {activity && (\n <section aria-label='Recent Activity' className='space-y-4'>\n {activity}\n </section>\n )}\n\n {children && <div className='space-y-6'>{children}</div>}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface WorkspaceTemplateProps extends React.HTMLAttributes<HTMLDivElement> {\n header?: React.ReactNode\n leftSidebar?: React.ReactNode\n rightSidebar?: React.ReactNode\n footer?: React.ReactNode\n children: React.ReactNode\n}\n\nexport function WorkspaceTemplate({\n header,\n leftSidebar,\n rightSidebar,\n footer,\n children,\n className,\n ...props\n}: WorkspaceTemplateProps) {\n return (\n <div\n className={cn(\n 'flex h-screen w-full flex-col overflow-hidden bg-background text-foreground',\n className\n )}\n {...props}\n >\n {header && (\n <header className='flex h-14 shrink-0 items-center border-b px-4 bg-background z-10'>\n {header}\n </header>\n )}\n\n <div className='flex flex-1 overflow-hidden'>\n {leftSidebar && (\n <aside className='hidden md:flex w-64 shrink-0 flex-col border-r bg-sidebar p-3 overflow-y-auto'>\n {leftSidebar}\n </aside>\n )}\n\n <main className='flex flex-1 flex-col overflow-y-auto p-4 sm:p-6 bg-muted/20'>\n {children}\n </main>\n\n {rightSidebar && (\n <aside className='hidden lg:flex w-80 shrink-0 flex-col border-l bg-background p-4 overflow-y-auto'>\n {rightSidebar}\n </aside>\n )}\n </div>\n\n {footer && (\n <footer className='flex h-10 shrink-0 items-center border-t px-4 text-xs text-muted-foreground bg-background'>\n {footer}\n </footer>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useEffect } from 'react'\nimport { Bell } from 'lucide-react'\nimport { useRouter } from 'next/navigation'\nimport { Header } from '@/components/layout/header'\nimport { Search } from '@/components/search'\nimport { Button } from '../components/ui/button'\nimport { useAuthStore } from '../../stores/auth-store'\nimport { useNotificationStore } from '../../stores/notification-store'\n\ntype AppHeaderProps = {\n title: string\n fixed?: boolean\n iconsPosition?: 'left' | 'right'\n children?: React.ReactNode\n}\n\nexport function AppHeader({\n title,\n fixed = true,\n iconsPosition = 'right',\n children,\n}: AppHeaderProps) {\n const router = useRouter()\n const currentUser = useAuthStore((state) => state.auth.user)\n const { unreadCount, fetchNotifications, subscribeToNotifications, unsubscribe } = useNotificationStore()\n\n useEffect(() => {\n if (currentUser) {\n fetchNotifications(currentUser.accountNo)\n subscribeToNotifications(currentUser.accountNo)\n }\n return () => {\n unsubscribe()\n }\n }, [currentUser, fetchNotifications, subscribeToNotifications, unsubscribe])\n\n return (\n <Header fixed={fixed} className='border-b bg-background'>\n <div className='flex flex-1 items-center justify-between w-full'>\n {iconsPosition === 'left' ? (\n <div className='flex items-center gap-2 sm:gap-3 min-w-0'>\n <h1 className='min-w-0 truncate text-base font-semibold sm:text-lg'>\n {title}\n </h1>\n\n <div className='flex items-center gap-1 sm:gap-2 shrink-0 ml-1'>\n <Search iconOnly />\n\n {children}\n\n <Button\n variant='ghost'\n size='icon'\n className='relative size-8 shrink-0'\n aria-label='Notifications'\n onClick={() => router.push('/notification')}\n >\n <Bell className='size-5' />\n {unreadCount > 0 && (\n <span className='absolute -top-1 -right-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-red-500 px-1 text-[10px] font-medium text-white shadow-xs'>\n {unreadCount > 5 ? '5+' : unreadCount}\n </span>\n )}\n </Button>\n </div>\n </div>\n ) : (\n <>\n <h1 className='min-w-0 truncate text-base font-semibold sm:text-lg'>\n {title}\n </h1>\n\n <div className='ml-auto flex items-center gap-2 sm:gap-3'>\n <Search iconOnly />\n\n {children}\n\n <Button\n variant='ghost'\n size='icon'\n className='relative size-8 shrink-0'\n aria-label='Notifications'\n onClick={() => router.push('/notification')}\n >\n <Bell className='size-5' />\n {unreadCount > 0 && (\n <span className='absolute -top-1 -right-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-red-500 px-1 text-[10px] font-medium text-white shadow-xs'>\n {unreadCount > 5 ? '5+' : unreadCount}\n </span>\n )}\n </Button>\n </div>\n </>\n )}\n </div>\n </Header>\n )\n}\n","'use client'\r\n\r\nimport { useEffect, useState } from 'react'\r\nimport { cn } from '@/lib/utils'\r\nimport { AppLogo } from './app-logo'\r\n\r\ntype HeaderProps = React.HTMLAttributes<HTMLElement> & {\r\n fixed?: boolean\r\n ref?: React.Ref<HTMLElement>\r\n}\r\n\r\nexport function Header({ className, fixed, children, ...props }: HeaderProps) {\r\n const [offset, setOffset] = useState(0)\r\n\r\n useEffect(() => {\r\n const onScroll = () => {\r\n setOffset(document.body.scrollTop || document.documentElement.scrollTop)\r\n }\r\n\r\n // Add scroll listener to the body\r\n document.addEventListener('scroll', onScroll, { passive: true })\r\n\r\n // Clean up the event listener on unmount\r\n return () => document.removeEventListener('scroll', onScroll)\r\n }, [])\r\n\r\n return (\r\n // Page header container: fixed mode me top par sticky behavior deta hai.\r\n <header\r\n className={cn(\r\n 'z-50 h-16 shrink-0',\r\n fixed &&\r\n 'header-fixed peer/header sticky top-0 w-full bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/80',\r\n offset > 10 && fixed ? 'shadow-sm' : 'shadow-none',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n // Header ke andar left-to-right UI controls/content align karne ke liye row layout.\r\n 'relative flex h-full min-w-0 flex-nowrap items-center gap-1.5 overflow-hidden px-2 py-2 sm:gap-3 sm:px-4 md:gap-4',\r\n offset > 10 &&\r\n fixed &&\r\n 'after:absolute after:inset-0 after:-z-10 after:bg-background/20 after:backdrop-blur-lg'\r\n )}\r\n >\r\n {/* Mobile par app logo; desktop par sidebar trigger sidebar header me hai */}\r\n <AppLogo className='shrink-0 md:hidden' />\r\n {children}\r\n </div>\r\n </header>\r\n )\r\n}\r\n","'use client'\n\nimport { SearchIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { useSearch } from '@/context/search-provider'\nimport { Button } from '@/components/ui/button'\n\nexport function Search({\n className = '',\n placeholder = 'Search',\n iconOnly = true,\n ...props\n}: React.ComponentProps<'button'> & { placeholder?: string; iconOnly?: boolean }) {\n const search = useSearch()\n\n const openSearch = () => {\n if (search?.setOpen) {\n search.setOpen(true)\n }\n }\n\n return (\n <Button\n {...props}\n variant='ghost'\n size='icon'\n className={cn('size-8 shrink-0', className)}\n aria-label='Search'\n aria-keyshortcuts='Meta+K Control+K'\n onClick={openSearch}\n >\n <SearchIcon className='size-5' aria-hidden='true' />\n </Button>\n )\n}\n","import { create } from 'zustand'\r\nimport { createClient } from '@/lib/supabase/client'\r\nimport { RealtimeChannel } from '@supabase/supabase-js'\r\n\r\nexport interface DbNotification {\r\n id: string\r\n user_id: string\r\n sender_id: string | null\r\n message_id: string | null\r\n message_text: string\r\n read: boolean\r\n created_at: string\r\n}\r\n\r\ninterface NotificationState {\r\n notifications: DbNotification[]\r\n unreadCount: number\r\n isLoading: boolean\r\n fetchNotifications: (userId: string) => Promise<void>\r\n markAsRead: (notificationId: string) => Promise<void>\r\n markAllAsRead: (userId: string) => Promise<void>\r\n deleteNotification: (notificationId: string) => Promise<void>\r\n subscribeToNotifications: (userId: string) => void\r\n unsubscribe: () => void\r\n}\r\n\r\nlet activeChannel: RealtimeChannel | null = null\r\nlet activeUserId: string | null = null\r\n\r\nexport const useNotificationStore = create<NotificationState>((set, get) => ({\r\n notifications: [],\r\n unreadCount: 0,\r\n isLoading: false,\r\n\r\n fetchNotifications: async (userId: string) => {\r\n set({ isLoading: true })\r\n const supabase = createClient()\r\n try {\r\n const { data, error } = await supabase\r\n .from('notifications')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n\r\n if (error) throw error\r\n\r\n const notifications = data || []\r\n const unreadCount = notifications.filter((n: DbNotification) => !n.read).length\r\n set({ notifications, unreadCount })\r\n } catch (e) {\r\n console.error('[NotificationStore] Failed to fetch notifications:', e)\r\n } finally {\r\n set({ isLoading: false })\r\n }\r\n },\r\n\r\n markAsRead: async (notificationId: string) => {\r\n const supabase = createClient()\r\n try {\r\n const { error } = await supabase\r\n .from('notifications')\r\n .update({ read: true })\r\n .eq('id', notificationId)\r\n\r\n if (error) throw error\r\n\r\n set((state) => {\r\n const updated = state.notifications.map((n) =>\r\n n.id === notificationId ? { ...n, read: true } : n\r\n )\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n } catch (e) {\r\n console.error('[NotificationStore] Failed to mark notification as read:', e)\r\n }\r\n },\r\n\r\n markAllAsRead: async (userId: string) => {\r\n const supabase = createClient()\r\n try {\r\n const { error } = await supabase\r\n .from('notifications')\r\n .update({ read: true })\r\n .eq('user_id', userId)\r\n .eq('read', false)\r\n\r\n if (error) throw error\r\n\r\n set((state) => {\r\n const updated = state.notifications.map((n) => ({ ...n, read: true }))\r\n return { notifications: updated, unreadCount: 0 }\r\n })\r\n } catch (e) {\r\n console.error('[NotificationStore] Failed to mark all notifications as read:', e)\r\n }\r\n },\r\n\r\n deleteNotification: async (notificationId: string) => {\r\n const supabase = createClient()\r\n try {\r\n const { error } = await supabase\r\n .from('notifications')\r\n .delete()\r\n .eq('id', notificationId)\r\n\r\n if (error) throw error\r\n\r\n set((state) => {\r\n const updated = state.notifications.filter((n) => n.id !== notificationId)\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n } catch (e) {\r\n console.error('[NotificationStore] Failed to delete notification:', e)\r\n }\r\n },\r\n\r\n subscribeToNotifications: (userId: string) => {\r\n try {\r\n if (!userId) return\r\n\r\n const supabase = createClient()\r\n\r\n if (activeChannel && activeUserId === userId) {\r\n return\r\n }\r\n\r\n if (activeChannel) {\r\n try {\r\n supabase.removeChannel(activeChannel)\r\n } catch (_) {}\r\n activeChannel = null\r\n activeUserId = null\r\n }\r\n\r\n const channelTopic = `notifications-user-${userId}-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`\r\n const channel = supabase.channel(channelTopic)\r\n\r\n channel\r\n .on(\r\n 'postgres_changes',\r\n {\r\n event: '*',\r\n schema: 'public',\r\n table: 'notifications',\r\n filter: `user_id=eq.${userId}`,\r\n },\r\n (payload: any) => {\r\n const { eventType, new: newRecord, old: oldRecord } = payload\r\n\r\n if (eventType === 'INSERT') {\r\n const inserted = newRecord as DbNotification\r\n set((state) => {\r\n if (state.notifications.some((n) => n.id === inserted.id)) {\r\n return {}\r\n }\r\n const updated = [inserted, ...state.notifications]\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n } else if (eventType === 'UPDATE') {\r\n const updatedRecord = newRecord as DbNotification\r\n set((state) => {\r\n const updated = state.notifications.map((n) =>\r\n n.id === updatedRecord.id ? updatedRecord : n\r\n )\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n } else if (eventType === 'DELETE') {\r\n const deletedId = oldRecord?.id\r\n if (!deletedId) return\r\n set((state) => {\r\n const updated = state.notifications.filter((n) => n.id !== deletedId)\r\n const unreadCount = updated.filter((n) => !n.read).length\r\n return { notifications: updated, unreadCount }\r\n })\r\n }\r\n }\r\n )\r\n .subscribe()\r\n\r\n activeChannel = channel\r\n activeUserId = userId\r\n } catch (err) {\r\n console.warn('[NotificationStore] Realtime subscription error:', err)\r\n }\r\n },\r\n\r\n unsubscribe: () => {\r\n try {\r\n if (activeChannel) {\r\n const supabase = createClient()\r\n supabase.removeChannel(activeChannel)\r\n activeChannel = null\r\n activeUserId = null\r\n }\r\n } catch (err) {\r\n console.warn('[NotificationStore] Unsubscribe error:', err)\r\n }\r\n },\r\n}))\r\n","import { createBrowserClient } from '@supabase/ssr'\r\n\r\nlet clientSingleton: ReturnType<typeof createBrowserClient> | null = null\r\n\r\nexport function createClient() {\r\n if (typeof window === 'undefined') {\r\n return createBrowserClient(\r\n process.env.NEXT_PUBLIC_SUPABASE_URL!,\r\n process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!\r\n )\r\n }\r\n\r\n if (!clientSingleton) {\r\n clientSingleton = createBrowserClient(\r\n process.env.NEXT_PUBLIC_SUPABASE_URL!,\r\n process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!\r\n )\r\n }\r\n return clientSingleton;\r\n}\r\n","import {\n Mail,\n HelpCircle,\n Settings,\n Command,\n Bot,\n SearchIcon,\n ChartArea,\n Map,\n Route,\n Link,\n Ticket,\n} from 'lucide-react'\nimport { type SidebarData } from '../types'\n\nexport const sidebarData: SidebarData = {\n user: {\n name: 'satnaing',\n email: 'satnaingdev@gmail.com',\n avatar: '/avatars/shadcn.jpg',\n },\n\n teams: [\n {\n name: 'Amoga App',\n logo: Command,\n plan: 'Demo Company',\n },\n ],\n\n navGroups: [\n {\n title: 'Menu',\n items: [\n {\n title: 'Message',\n url: '/message',\n icon: Mail,\n },\n {\n title: 'Email Settings',\n url: '/email-settings',\n icon: Settings,\n },\n {\n title: 'Design System',\n url: '/',\n icon: Settings,\n },\n {\n title: 'Vouchers',\n url: '/vouchers',\n icon: Ticket,\n },\n {\n title: 'AI Chat',\n url: '/ai_chat',\n icon: Bot,\n },\n {\n title: 'AI Search',\n url: '/ai_search',\n icon: SearchIcon,\n },\n {\n title: 'Chart Template',\n url: '/charttemplate',\n icon: ChartArea,\n },\n {\n title: 'Map Template',\n url: '/map',\n icon: Map,\n },\n {\n title: 'Route Doc',\n url: '/routedoc',\n icon: Route,\n },\n {\n title: 'Link Maker',\n url: '/link-maker',\n icon: Link,\n },\n ],\n },\n\n {\n title: 'Other',\n items: [\n {\n title: 'Settings',\n icon: Settings,\n items: [\n // Add settings pages here\n ],\n },\n {\n title: 'Help Center',\n url: '/help-center',\n icon: HelpCircle,\n },\n ],\n },\n ],\n}\n","import React from 'react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../components/ui/button'\nimport { useSidebar } from '../components/ui/sidebar'\nimport { sidebarData } from './data/sidebar-data'\n\ntype AppLogoProps = {\n className?: string\n onClick?: () => void\n}\n\nexport function AppLogo({ className, onClick }: AppLogoProps) {\n const { toggleSidebar, setOpenMobile, isMobile } = useSidebar()\n const team = sidebarData.teams[0]\n const Logo = team.logo\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (onClick) {\n onClick()\n return\n }\n if (isMobile) {\n setOpenMobile(true)\n } else {\n toggleSidebar()\n }\n }\n\n return (\n <Button\n type='button'\n variant='ghost'\n onClick={handleClick}\n className={cn(\n 'size-8 shrink-0 p-0 hover:bg-transparent sm:size-9 cursor-pointer',\n className\n )}\n aria-label='Open sidebar menu'\n >\n <div className='flex size-full items-center justify-center rounded-lg bg-primary text-primary-foreground'>\n <Logo className='size-4' />\n </div>\n </Button>\n )\n}\n","'use client'\r\n\r\nimport { createContext, useContext, useState } from 'react'\r\nimport { getCookie, setCookie } from '@/lib/cookies'\r\n\r\nexport type Collapsible = 'offcanvas' | 'icon' | 'none'\r\ntype Variant = 'inset' | 'sidebar' | 'floating'\r\n\r\n// Cookie constants following the pattern from sidebar.tsx\r\nconst LAYOUT_COLLAPSIBLE_COOKIE_NAME = 'layout_collapsible'\r\nconst LAYOUT_VARIANT_COOKIE_NAME = 'layout_variant'\r\nconst LAYOUT_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 // 7 days\r\n\r\n// Default values\r\nconst DEFAULT_VARIANT = 'inset'\r\nconst DEFAULT_COLLAPSIBLE = 'icon'\r\n\r\ntype LayoutContextType = {\r\n resetLayout: () => void\r\n\r\n defaultCollapsible: Collapsible\r\n collapsible: Collapsible\r\n setCollapsible: (collapsible: Collapsible) => void\r\n\r\n defaultVariant: Variant\r\n variant: Variant\r\n setVariant: (variant: Variant) => void\r\n\r\n showInlineNotFound: boolean\r\n setShowInlineNotFound: (show: boolean) => void\r\n}\r\n\r\nconst LayoutContext = createContext<LayoutContextType | null>(null)\r\n\r\ntype LayoutProviderProps = {\r\n children: React.ReactNode\r\n}\r\n\r\nexport function LayoutProvider({ children }: LayoutProviderProps) {\r\n const [collapsible, _setCollapsible] = useState<Collapsible>(() => {\r\n const saved = getCookie(LAYOUT_COLLAPSIBLE_COOKIE_NAME)\r\n return (saved as Collapsible) || DEFAULT_COLLAPSIBLE\r\n })\r\n\r\n const [variant, _setVariant] = useState<Variant>(() => {\r\n const saved = getCookie(LAYOUT_VARIANT_COOKIE_NAME)\r\n return (saved as Variant) || DEFAULT_VARIANT\r\n })\r\n\r\n const [showInlineNotFound, setShowInlineNotFound] = useState(false)\r\n\r\n const setCollapsible = (newCollapsible: Collapsible) => {\r\n _setCollapsible(newCollapsible)\r\n setCookie(\r\n LAYOUT_COLLAPSIBLE_COOKIE_NAME,\r\n newCollapsible,\r\n LAYOUT_COOKIE_MAX_AGE\r\n )\r\n }\r\n\r\n const setVariant = (newVariant: Variant) => {\r\n _setVariant(newVariant)\r\n setCookie(LAYOUT_VARIANT_COOKIE_NAME, newVariant, LAYOUT_COOKIE_MAX_AGE)\r\n }\r\n\r\n const resetLayout = () => {\r\n setCollapsible(DEFAULT_COLLAPSIBLE)\r\n setVariant(DEFAULT_VARIANT)\r\n }\r\n\r\n const contextValue: LayoutContextType = {\r\n resetLayout,\r\n defaultCollapsible: DEFAULT_COLLAPSIBLE,\r\n collapsible,\r\n setCollapsible,\r\n defaultVariant: DEFAULT_VARIANT,\r\n variant,\r\n setVariant,\r\n showInlineNotFound,\r\n setShowInlineNotFound,\r\n }\r\n\r\n return <LayoutContext value={contextValue}>{children}</LayoutContext>\r\n}\r\n\r\nexport function useLayout() {\r\n const context = useContext(LayoutContext)\r\n if (!context) {\r\n return {\r\n resetLayout: () => {},\r\n defaultCollapsible: DEFAULT_COLLAPSIBLE,\r\n collapsible: DEFAULT_COLLAPSIBLE,\r\n setCollapsible: () => {},\r\n defaultVariant: DEFAULT_VARIANT,\r\n variant: DEFAULT_VARIANT,\r\n setVariant: () => {},\r\n showInlineNotFound: false,\r\n setShowInlineNotFound: () => {},\r\n }\r\n }\r\n return context\r\n}\r\n","'use client'\r\n\r\nimport { type ReactNode } from 'react'\r\nimport Link from 'next/link'\r\nimport { usePathname } from 'next/navigation'\r\nimport { ChevronRight, X } from 'lucide-react'\r\nimport { useLayout } from '../../context/layout-provider'\r\nimport {\r\n Collapsible,\r\n CollapsibleContent,\r\n CollapsibleTrigger,\r\n} from '../components/ui/collapsible'\r\nimport {\r\n SidebarGroup,\r\n SidebarGroupLabel,\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n SidebarMenuSub,\r\n SidebarMenuSubButton,\r\n SidebarMenuSubItem,\r\n SidebarTrigger,\r\n useSidebar,\r\n} from '../components/ui/sidebar'\r\nimport { Button } from '../components/ui/button'\r\nimport { Badge } from '../components/ui/badge'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '../components/ui/dropdown-menu'\r\nimport {\r\n type NavCollapsible,\r\n type NavItem,\r\n type NavLink,\r\n type NavGroup as NavGroupProps,\r\n} from './types'\r\n\r\nimport { cn } from '../../lib/utils'\r\n\r\nexport function NavGroup({ title, items }: NavGroupProps) {\r\n const { state, isMobile, openMobile, setOpenMobile } = useSidebar()\r\n const href = usePathname()\r\n\r\n return (\r\n <SidebarGroup className={cn(title === 'Menu' && 'pt-0')}>\r\n {/* Label and Toggle: Sticky at the top */}\r\n <SidebarGroupLabel\r\n className={cn(\r\n 'flex items-center justify-between',\r\n title === 'Menu' && state !== 'collapsed' && 'sticky top-0 z-20 bg-sidebar py-1.5'\r\n )}\r\n >\r\n {/* Left Side */}\r\n <span>{title}</span>\r\n\r\n {/* Desktop: Toggle on far right */}\r\n {title === 'Menu' && !isMobile && (\r\n <SidebarTrigger\r\n variant='ghost'\r\n className='h-5 w-5'\r\n aria-label='Toggle sidebar'\r\n />\r\n )}\r\n\r\n {/* Mobile: Close button */}\r\n {title === 'Menu' && isMobile && openMobile && (\r\n <Button\r\n type='button'\r\n variant='ghost'\r\n size='icon'\r\n className='size-6 shrink-0'\r\n aria-label='Close sidebar'\r\n onClick={() => setOpenMobile(false)}\r\n >\r\n <X className='size-4' aria-hidden='true' />\r\n </Button>\r\n )}\r\n </SidebarGroupLabel>\r\n\r\n <SidebarMenu>\r\n {items.map((item) => {\r\n const key = `${item.title}-${item.url}`\r\n\r\n if (!item.items)\r\n return <SidebarMenuLink key={key} item={item} href={href} />\r\n\r\n if (item.title === 'Settings' && item.items.length === 0)\r\n return <SidebarMenuSettings key={key} item={item} />\r\n\r\n if (state === 'collapsed' && !isMobile)\r\n return (\r\n <SidebarMenuCollapsedDropdown key={key} item={item} href={href} />\r\n )\r\n\r\n return <SidebarMenuCollapsible key={key} item={item} href={href} />\r\n })}\r\n </SidebarMenu>\r\n </SidebarGroup>\r\n )\r\n}\r\n\r\nfunction NavBadge({ children }: { children: ReactNode }) {\r\n return <Badge className='rounded-full px-1 py-0 text-xs'>{children}</Badge>\r\n}\r\n\r\nfunction SidebarMenuLink({ item, href }: { item: NavLink; href: string }) {\r\n const { setOpenMobile } = useSidebar()\r\n const { setShowInlineNotFound } = useLayout()\r\n\r\n return (\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n asChild\r\n isActive={checkIsActive(href, item)}\r\n tooltip={item.title}\r\n >\r\n <Link\r\n href={item.url}\r\n onClick={() => {\r\n setShowInlineNotFound(false)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n </Link>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction SidebarMenuSettings({ item }: { item: NavCollapsible }) {\r\n const { setOpenMobile } = useSidebar()\r\n const { showInlineNotFound, setShowInlineNotFound } = useLayout()\r\n\r\n return (\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n tooltip={item.title}\r\n isActive={showInlineNotFound}\r\n onClick={() => {\r\n setShowInlineNotFound(true)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction SidebarMenuCollapsible({\r\n item,\r\n href,\r\n}: {\r\n item: NavCollapsible\r\n href: string\r\n}) {\r\n const { setOpenMobile } = useSidebar()\r\n const { setShowInlineNotFound } = useLayout()\r\n return (\r\n <Collapsible\r\n asChild\r\n defaultOpen={checkIsActive(href, item, true)}\r\n className='group/collapsible'\r\n >\r\n <SidebarMenuItem>\r\n <CollapsibleTrigger asChild>\r\n <SidebarMenuButton tooltip={item.title}>\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n <ChevronRight className='ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180' />\r\n </SidebarMenuButton>\r\n </CollapsibleTrigger>\r\n <CollapsibleContent className='CollapsibleContent'>\r\n <SidebarMenuSub>\r\n {item.items.map((subItem) => (\r\n <SidebarMenuSubItem key={subItem.title}>\r\n <SidebarMenuSubButton\r\n asChild\r\n isActive={checkIsActive(href, subItem)}\r\n >\r\n <Link\r\n href={subItem.url}\r\n onClick={() => {\r\n setShowInlineNotFound(false)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {subItem.icon && <subItem.icon />}\r\n <span>{subItem.title}</span>\r\n {subItem.badge && <NavBadge>{subItem.badge}</NavBadge>}\r\n </Link>\r\n </SidebarMenuSubButton>\r\n </SidebarMenuSubItem>\r\n ))}\r\n </SidebarMenuSub>\r\n </CollapsibleContent>\r\n </SidebarMenuItem>\r\n </Collapsible>\r\n )\r\n}\r\n\r\nfunction SidebarMenuCollapsedDropdown({\r\n item,\r\n href,\r\n}: {\r\n item: NavCollapsible\r\n href: string\r\n}) {\r\n return (\r\n <SidebarMenuItem>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <SidebarMenuButton\r\n tooltip={item.title}\r\n isActive={checkIsActive(href, item)}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n <ChevronRight className='ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90' />\r\n </SidebarMenuButton>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent side='right' align='start' sideOffset={4}>\r\n <DropdownMenuLabel>\r\n {item.title} {item.badge ? `(${item.badge})` : ''}\r\n </DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n {item.items.map((sub) => (\r\n <DropdownMenuItem key={`${sub.title}-${sub.url}`} asChild>\r\n <Link\r\n href={sub.url}\r\n className={`${checkIsActive(href, sub) ? 'bg-secondary' : ''}`}\r\n >\r\n {sub.icon && <sub.icon />}\r\n <span className='max-w-52 text-wrap'>{sub.title}</span>\r\n {sub.badge && (\r\n <span className='ms-auto text-xs'>{sub.badge}</span>\r\n )}\r\n </Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction checkIsActive(href: string, item: NavItem, mainNav = false) {\r\n return (\r\n href === item.url || // /endpint?search=param\r\n href.split('?')[0] === item.url || // endpoint\r\n !!item?.items?.filter((i) => i.url === href).length || // if child nav is active\r\n (mainNav &&\r\n href.split('/')[1] !== '' &&\r\n href.split('/')[1] === item?.url?.split('/')[1])\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport {\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n useSidebar,\r\n} from '../components/ui/sidebar'\r\n\r\ntype TeamSwitcherProps = {\r\n teams: {\r\n name: string\r\n logo: React.ElementType\r\n plan: string\r\n }[]\r\n}\r\n\r\nexport function TeamSwitcher({ teams }: TeamSwitcherProps) {\r\n // Teams ka dropdown/overlay remove: yahan sirf current team show hogi.\r\n useSidebar() // ensure sidebar context available (no-op usage)\r\n const activeTeam = teams[0]\r\n\r\n return (\r\n <SidebarMenu>\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n size='lg'\r\n className='data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground'\r\n >\r\n <div className='flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground'>\r\n <activeTeam.logo className='size-4' />\r\n </div>\r\n <div className='grid flex-1 text-start text-sm leading-tight'>\r\n <span className='truncate font-semibold'>{activeTeam.name}</span>\r\n <span className='truncate text-xs'>{activeTeam.plan}</span>\r\n </div>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n </SidebarMenu>\r\n )\r\n}\r\n","import {\n ChevronsUpDown,\n LogOut,\n Settings,\n Palette,\n} from 'lucide-react'\nimport useDialogState from '@/hooks/use-dialog-state'\nimport { useAuthStore } from '../../stores/auth-store'\nimport { Avatar, AvatarFallback, AvatarImage } from '../components/ui/avatar'\nimport { ConfigDrawer } from '@/components/config-drawer'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../components/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '../components/ui/sidebar'\nimport { SignOutDialog } from '@/components/sign-out-dialog'\n\ntype NavUserProps = {\n user: {\n name: string\n email: string\n avatar: string\n }\n}\n\nexport function NavUser({ user: fallbackUser }: NavUserProps) {\n const { isMobile } = useSidebar()\n const [open, setOpen] = useDialogState()\n const { auth } = useAuthStore()\n\n const userName = auth.user?.name || auth.user?.email?.split('@')[0] || fallbackUser.name\n const userEmail = auth.user?.email || fallbackUser.email\n const userAvatar = auth.user?.picture || fallbackUser.avatar\n const userInitials = userName\n .split(' ')\n .map((n: string) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n\n return (\n <>\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size='lg'\n tooltip={userName}\n className='data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground'\n >\n <Avatar className='h-8 w-8 rounded-lg'>\n <AvatarImage src={userAvatar} alt={userName} />\n <AvatarFallback className='rounded-lg'>{userInitials}</AvatarFallback>\n </Avatar>\n <div className='grid flex-1 text-start text-sm leading-tight'>\n <span className='truncate font-semibold'>{userName}</span>\n <span className='truncate text-xs text-muted-foreground'>{userEmail}</span>\n </div>\n <ChevronsUpDown className='ml-auto size-4 shrink-0' />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className='w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg'\n side={isMobile ? 'bottom' : 'right'}\n align='end'\n sideOffset={4}\n >\n <DropdownMenuLabel className='p-0 font-normal'>\n <div className='flex items-center gap-2 px-1 py-1.5 text-start text-sm'>\n <Avatar className='h-8 w-8 rounded-lg'>\n <AvatarImage src={userAvatar} alt={userName} />\n <AvatarFallback className='rounded-lg'>{userInitials}</AvatarFallback>\n </Avatar>\n <div className='grid flex-1 text-start text-sm leading-tight'>\n <span className='truncate font-semibold'>{userName}</span>\n <span className='truncate text-xs text-muted-foreground'>{userEmail}</span>\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n\n {/* Theme Settings */}\n <ConfigDrawer\n trigger={\n <DropdownMenuItem onSelect={(e) => e.preventDefault()}>\n <Palette className='mr-2 h-4 w-4' />\n Theme\n </DropdownMenuItem>\n }\n />\n\n {/* Settings */}\n <ConfigDrawer\n trigger={\n <DropdownMenuItem onSelect={(e) => e.preventDefault()}>\n <Settings className='mr-2 h-4 w-4' />\n Setting\n </DropdownMenuItem>\n }\n />\n\n <DropdownMenuSeparator />\n\n {/* Sign Out */}\n <DropdownMenuItem\n variant='destructive'\n onClick={() => setOpen(true)}\n >\n <LogOut className='mr-2 h-4 w-4' />\n Sign out\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n\n <SignOutDialog open={!!open} onOpenChange={setOpen} />\n </>\n )\n}\n","'use client'\r\n\r\nimport { useState } from 'react'\r\n\r\n/**\r\n * Custom hook for confirm dialog\r\n * @param initialState string | null\r\n * @returns A stateful value, and a function to update it.\r\n * @example const [open, setOpen] = useDialogState<\"approve\" | \"reject\">()\r\n */\r\nexport default function useDialogState<T extends string | boolean>(\r\n initialState: T | null = null\r\n) {\r\n const [open, _setOpen] = useState<T | null>(initialState)\r\n\r\n const setOpen = (str: T | null) =>\r\n _setOpen((prev) => (prev === str ? null : str))\r\n\r\n return [open, setOpen] as const\r\n}\r\n","'use client'\r\n\r\nimport { type SVGProps, useState } from 'react'\r\nimport { Root as Radio, Item } from '@radix-ui/react-radio-group'\r\nimport { Check, CircleCheck, RotateCcw, Search, Settings } from 'lucide-react'\r\nimport { IconThemeDark } from '@/assets/custom/icon-theme-dark'\r\nimport { IconThemeLight } from '@/assets/custom/icon-theme-light'\r\nimport { IconThemeSystem } from '@/assets/custom/icon-theme-system'\r\nimport { cn } from '@/lib/utils'\r\nimport { useTheme } from '@/context/theme-provider'\r\nimport {\r\n colorThemes,\r\n DEFAULT_COLOR_THEME,\r\n useColorTheme,\r\n} from '@/context/color-theme-provider'\r\nimport { Button } from '@/components/ui/button'\r\nimport {\r\n Sheet,\r\n SheetContent,\r\n SheetDescription,\r\n SheetFooter,\r\n SheetHeader,\r\n SheetTitle,\r\n SheetTrigger,\r\n} from '@/components/ui/sheet'\r\n\r\n// ✅ ADDED: Allow custom trigger\r\ntype ConfigDrawerProps = {\r\n trigger?: React.ReactNode\r\n}\r\n\r\nexport function ConfigDrawer({\r\n trigger,\r\n}: ConfigDrawerProps) {\r\n const { resetTheme } = useTheme()\r\n const { resetColorTheme } = useColorTheme()\r\n\r\n const handleReset = () => {\r\n resetTheme()\r\n resetColorTheme()\r\n }\r\n\r\n return (\r\n <Sheet>\r\n {/* ==========================================\r\n UPDATED\r\n Use custom trigger if provided\r\n Otherwise show default settings button\r\n ========================================== */}\r\n <SheetTrigger asChild>\r\n {trigger ?? (\r\n <Button\r\n size='icon'\r\n variant='ghost'\r\n aria-label='Open theme settings'\r\n className='rounded-full'\r\n >\r\n <Settings aria-hidden='true' />\r\n </Button>\r\n )}\r\n </SheetTrigger>\r\n\r\n {/* ==========================================\r\n EXISTING DRAWER CONTENT\r\n ========================================== */}\r\n <SheetContent className='flex flex-col'>\r\n <SheetHeader className='pb-0 text-start'>\r\n <SheetTitle>Theme Settings</SheetTitle>\r\n <SheetDescription>\r\n Customize the look and feel of your dashboard.\r\n </SheetDescription>\r\n </SheetHeader>\r\n\r\n <div className='flex flex-1 flex-col gap-6 overflow-hidden px-4'>\r\n <ThemeConfig />\r\n <ThemeListSelector />\r\n </div>\r\n\r\n <SheetFooter className='gap-2'>\r\n <Button\r\n variant='destructive'\r\n onClick={handleReset}\r\n >\r\n Reset\r\n </Button>\r\n </SheetFooter>\r\n </SheetContent>\r\n </Sheet>\r\n )\r\n}\r\n\r\nfunction SectionTitle({\r\n title,\r\n showReset = false,\r\n onReset,\r\n resetAriaLabel,\r\n className,\r\n}: {\r\n title: string\r\n showReset?: boolean\r\n onReset?: () => void\r\n /** Shown on the small per-section reset (RotateCcw) for accessibility and tests. */\r\n resetAriaLabel?: string\r\n className?: string\r\n}) {\r\n return (\r\n <div\r\n className={cn(\r\n 'mb-2 flex items-center gap-2 text-sm font-semibold text-muted-foreground',\r\n className\r\n )}\r\n >\r\n {title}\r\n {showReset && onReset && (\r\n <Button\r\n type='button'\r\n size='icon'\r\n variant='secondary'\r\n className='size-4 rounded-full'\r\n onClick={onReset}\r\n aria-label={resetAriaLabel}\r\n >\r\n <RotateCcw className='size-3' />\r\n </Button>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction RadioGroupItem({\r\n item,\r\n isTheme = false,\r\n}: {\r\n item: {\r\n value: string\r\n label: string\r\n icon: (props: SVGProps<SVGSVGElement>) => React.ReactElement\r\n }\r\n isTheme?: boolean\r\n}) {\r\n return (\r\n <Item\r\n value={item.value}\r\n className={cn('group outline-none', 'transition duration-200 ease-in')}\r\n aria-label={`Select ${item.label.toLowerCase()}`}\r\n aria-describedby={`${item.value}-description`}\r\n >\r\n <div\r\n className={cn(\r\n 'relative rounded-[6px] ring-[1px] ring-border',\r\n 'group-data-[state=checked]:shadow-2xl group-data-[state=checked]:ring-primary',\r\n 'group-focus-visible:ring-2'\r\n )}\r\n role='img'\r\n aria-hidden='false'\r\n aria-label={`${item.label} option preview`}\r\n >\r\n <CircleCheck\r\n className={cn(\r\n 'size-6 fill-primary stroke-white',\r\n 'group-data-[state=unchecked]:hidden',\r\n 'absolute top-0 right-0 translate-x-1/2 -translate-y-1/2'\r\n )}\r\n aria-hidden='true'\r\n />\r\n <item.icon\r\n className={cn(\r\n !isTheme &&\r\n 'fill-primary stroke-primary group-data-[state=unchecked]:fill-muted-foreground group-data-[state=unchecked]:stroke-muted-foreground'\r\n )}\r\n aria-hidden='true'\r\n />\r\n </div>\r\n <div\r\n className='mt-1 text-xs'\r\n id={`${item.value}-description`}\r\n aria-live='polite'\r\n >\r\n {item.label}\r\n </div>\r\n </Item>\r\n )\r\n}\r\n\r\nfunction ThemeConfig() {\r\n const { defaultTheme, theme, setTheme } = useTheme()\r\n return (\r\n <div>\r\n <SectionTitle\r\n title='Theme'\r\n showReset={theme !== defaultTheme}\r\n onReset={() => setTheme(defaultTheme)}\r\n resetAriaLabel='Reset theme preference to default'\r\n />\r\n <Radio\r\n value={theme}\r\n onValueChange={setTheme}\r\n className='grid w-full max-w-md grid-cols-3 gap-4'\r\n aria-label='Select theme preference'\r\n aria-describedby='theme-description'\r\n >\r\n {[\r\n {\r\n value: 'system',\r\n label: 'System',\r\n icon: IconThemeSystem,\r\n },\r\n {\r\n value: 'light',\r\n label: 'Light',\r\n icon: IconThemeLight,\r\n },\r\n {\r\n value: 'dark',\r\n label: 'Dark',\r\n icon: IconThemeDark,\r\n },\r\n ].map((item) => (\r\n <RadioGroupItem key={item.value} item={item} isTheme />\r\n ))}\r\n </Radio>\r\n <div id='theme-description' className='sr-only'>\r\n Choose between system preference, light mode, or dark mode\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction ThemeListSelector() {\r\n const [search, setSearch] = useState('')\r\n const { colorTheme, setColorTheme } = useColorTheme()\r\n\r\n const filtered = colorThemes.filter((t) =>\r\n t.label.toLowerCase().includes(search.toLowerCase())\r\n )\r\n\r\n return (\r\n <div className='flex min-h-0 flex-1 flex-col'>\r\n <SectionTitle\r\n title='Color Theme'\r\n showReset={colorTheme !== DEFAULT_COLOR_THEME}\r\n onReset={() => setColorTheme(DEFAULT_COLOR_THEME)}\r\n resetAriaLabel='Reset color theme to default'\r\n />\r\n\r\n {/* Search input */}\r\n <div className='relative mb-2.5'>\r\n <Search className='pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground' />\r\n <input\r\n type='text'\r\n placeholder='Search themes...'\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n className={cn(\r\n 'w-full rounded-lg border border-border bg-background py-2 pl-9 pr-3 text-sm',\r\n 'placeholder:text-muted-foreground',\r\n 'focus:outline-none focus:ring-2 focus:ring-ring',\r\n 'transition-colors'\r\n )}\r\n />\r\n </div>\r\n\r\n {/* Theme count */}\r\n <p className='mb-2 text-xs text-muted-foreground font-medium'>\r\n {filtered.length} theme{filtered.length !== 1 ? 's' : ''} available\r\n </p>\r\n\r\n {/* Scrollable theme list */}\r\n <div\r\n className='flex-1 space-y-1 overflow-y-auto rounded-lg pr-1'\r\n role='radiogroup'\r\n aria-label='Select color theme'\r\n >\r\n {filtered.length === 0 && (\r\n <p className='py-8 text-center text-sm text-muted-foreground'>\r\n No themes found\r\n </p>\r\n )}\r\n {filtered.map((ct) => (\r\n <button\r\n key={ct.name}\r\n onClick={() => setColorTheme(ct.name)}\r\n role='radio'\r\n aria-checked={colorTheme === ct.name}\r\n aria-label={`Select ${ct.label} theme`}\r\n className={cn(\r\n 'flex w-full items-center gap-3 rounded-lg px-3 py-2.5 transition-all duration-150 cursor-pointer',\r\n colorTheme === ct.name\r\n ? 'bg-primary text-primary-foreground shadow-md'\r\n : 'hover:bg-accent/80 hover:text-foreground border border-transparent hover:border-border/40'\r\n )}\r\n >\r\n {/* Color preview dots */}\r\n <div className='flex gap-1.5 shrink-0'>\r\n {ct.colors.map((color, i) => (\r\n <span\r\n key={i}\r\n className={cn(\r\n 'size-3.5 rounded-full shadow-xs transition-transform hover:scale-110',\r\n colorTheme === ct.name\r\n ? 'ring-1 ring-primary-foreground/40'\r\n : 'ring-1 ring-border/50'\r\n )}\r\n style={{ backgroundColor: color }}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Theme name & Tweakcn badge */}\r\n <div className='flex items-center gap-1.5 truncate'>\r\n <span className='text-sm font-medium truncate'>{ct.label}</span>\r\n {ct.category === 'tweakcn' && (\r\n <span\r\n className={cn(\r\n 'rounded px-1.5 py-0.2 text-[9px] font-semibold tracking-wider uppercase',\r\n colorTheme === ct.name\r\n ? 'bg-primary-foreground/20 text-primary-foreground'\r\n : 'bg-primary/10 text-primary'\r\n )}\r\n >\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Selected indicator */}\r\n {colorTheme === ct.name && (\r\n <Check className='ml-auto size-4 shrink-0' strokeWidth={3} />\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import { type SVGProps } from 'react'\r\n\r\nexport function IconThemeDark(props: SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg\r\n data-name='icon-theme-dark'\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 79.86 51.14'\r\n {...props}\r\n >\r\n <g fill='#1d2b3f'>\r\n <rect x={0.53} y={0.5} width={78.83} height={50.14} rx={3.5} ry={3.5} />\r\n <path d='M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z' />\r\n </g>\r\n <path\r\n d='M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z'\r\n fill='#0d1628'\r\n />\r\n <circle cx={6.7} cy={7.04} r={3.54} fill='#426187' />\r\n <path\r\n d='M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z'\r\n fill='#426187'\r\n />\r\n <g fill='#2a62bc'>\r\n <rect\r\n x={33.36}\r\n y={19.73}\r\n width={2.75}\r\n height={3.42}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.32}\r\n />\r\n <rect\r\n x={29.64}\r\n y={16.57}\r\n width={2.75}\r\n height={6.58}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.44}\r\n />\r\n <rect\r\n x={37.16}\r\n y={14.44}\r\n width={2.75}\r\n height={8.7}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.53}\r\n />\r\n <rect\r\n x={41.19}\r\n y={10.75}\r\n width={2.75}\r\n height={12.4}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.53}\r\n />\r\n </g>\r\n <circle cx={62.74} cy={16.32} r={8} fill='#2f5491' opacity={0.5} />\r\n <path\r\n d='M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z'\r\n fill='#2f5491'\r\n opacity={0.74}\r\n />\r\n <rect\r\n x={29.64}\r\n y={27.75}\r\n width={41.62}\r\n height={18.62}\r\n rx={1.69}\r\n ry={1.69}\r\n fill='#17273f'\r\n />\r\n </svg>\r\n )\r\n}\r\n","import { type SVGProps } from 'react'\r\n\r\nexport function IconThemeLight(props: SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg\r\n data-name='icon-theme-light'\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 79.86 51.14'\r\n {...props}\r\n >\r\n <g fill='#d9d9d9'>\r\n <rect x={0.53} y={0.5} width={78.83} height={50.14} rx={3.5} ry={3.5} />\r\n <path d='M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z' />\r\n </g>\r\n <path\r\n d='M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z'\r\n fill='#ecedef'\r\n />\r\n <circle cx={6.7} cy={7.04} r={3.54} fill='#fff' />\r\n <path\r\n d='M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z'\r\n fill='#fff'\r\n />\r\n <g fill='#c0c4c4'>\r\n <rect\r\n x={33.36}\r\n y={19.73}\r\n width={2.75}\r\n height={3.42}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.32}\r\n />\r\n <rect\r\n x={29.64}\r\n y={16.57}\r\n width={2.75}\r\n height={6.58}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.44}\r\n />\r\n <rect\r\n x={37.16}\r\n y={14.44}\r\n width={2.75}\r\n height={8.7}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.53}\r\n />\r\n <rect\r\n x={41.19}\r\n y={10.75}\r\n width={2.75}\r\n height={12.4}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.53}\r\n />\r\n </g>\r\n <circle cx={62.74} cy={16.32} r={8} fill='#fff' />\r\n <g fill='#d9d9d9'>\r\n <path d='M63.62 15.82L67 10.15c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z' />\r\n <path d='M67.14 10.88a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95s-1.67-2.21-2.86-2.92z' />\r\n </g>\r\n <rect\r\n x={29.64}\r\n y={27.75}\r\n width={41.62}\r\n height={18.62}\r\n rx={1.69}\r\n ry={1.69}\r\n fill='#fff'\r\n />\r\n </svg>\r\n )\r\n}\r\n","import { type SVGProps } from 'react'\r\nimport { cn } from '@/lib/utils'\r\n\r\nexport function IconThemeSystem({\r\n className,\r\n ...props\r\n}: SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg\r\n data-name='icon-theme-system'\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 79.86 51.14'\r\n className={cn(\r\n 'overflow-hidden rounded-[6px]',\r\n 'fill-primary stroke-primary group-data-[state=unchecked]:fill-muted-foreground group-data-[state=unchecked]:stroke-muted-foreground',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <path opacity={0.2} d='M0 0.03H22.88V51.17H0z' />\r\n <circle\r\n cx={6.7}\r\n cy={7.04}\r\n r={3.54}\r\n fill='#fff'\r\n opacity={0.8}\r\n stroke='#fff'\r\n strokeLinecap='round'\r\n strokeMiterlimit={10}\r\n />\r\n <path\r\n d='M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1z'\r\n fill='#fff'\r\n stroke='none'\r\n opacity={0.75}\r\n />\r\n <path\r\n d='M18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05z'\r\n fill='#fff'\r\n stroke='none'\r\n opacity={0.72}\r\n />\r\n <path\r\n d='M15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91z'\r\n fill='#fff'\r\n stroke='none'\r\n opacity={0.55}\r\n />\r\n <path\r\n d='M16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z'\r\n fill='#fff'\r\n stroke='none'\r\n opacity={0.67}\r\n />\r\n <rect\r\n x={33.36}\r\n y={19.73}\r\n width={2.75}\r\n height={3.42}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.31}\r\n stroke='none'\r\n />\r\n <rect\r\n x={29.64}\r\n y={16.57}\r\n width={2.75}\r\n height={6.58}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.4}\r\n stroke='none'\r\n />\r\n <rect\r\n x={37.16}\r\n y={14.44}\r\n width={2.75}\r\n height={8.7}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.26}\r\n stroke='none'\r\n />\r\n <rect\r\n x={41.19}\r\n y={10.75}\r\n width={2.75}\r\n height={12.4}\r\n rx={0.33}\r\n ry={0.33}\r\n opacity={0.37}\r\n stroke='none'\r\n />\r\n <g>\r\n <circle cx={62.74} cy={16.32} r={8} opacity={0.25} />\r\n <path\r\n d='M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z'\r\n opacity={0.45}\r\n />\r\n </g>\r\n <rect\r\n x={29.64}\r\n y={27.75}\r\n width={41.62}\r\n height={18.62}\r\n rx={1.69}\r\n ry={1.69}\r\n opacity={0.3}\r\n stroke='none'\r\n strokeLinecap='round'\r\n strokeMiterlimit={10}\r\n />\r\n </svg>\r\n )\r\n}\r\n","'use client'\n\nimport { useLayout } from '../../context/layout-provider'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarTrigger,\n} from '../components/ui/sidebar'\nimport { sidebarData } from './data/sidebar-data'\nimport { NavGroup } from './nav-group'\nimport { TeamSwitcher } from './team-switcher'\nimport { NavUser } from './nav-user'\n\nexport function AppSidebar() {\n const { collapsible } = useLayout()\n\n return (\n <Sidebar collapsible={collapsible} variant='sidebar'>\n {/* Logo & Toggle Header */}\n <SidebarHeader className='p-2 pb-1'>\n <div className='flex items-center justify-between gap-1'>\n <div className='flex-1 min-w-0'>\n <TeamSwitcher teams={sidebarData.teams} />\n </div>\n <div className='group-data-[collapsible=icon]:hidden shrink-0'>\n <SidebarTrigger\n variant='ghost'\n className='h-8 w-8 hover:bg-sidebar-accent text-sidebar-foreground'\n aria-label='Toggle sidebar'\n />\n </div>\n </div>\n\n {/* When collapsed to icon mode */}\n <div className='hidden group-data-[collapsible=icon]:flex justify-center pt-2 pb-1'>\n <SidebarTrigger\n variant='ghost'\n className='h-8 w-8 hover:bg-sidebar-accent text-sidebar-foreground'\n aria-label='Toggle sidebar'\n />\n </div>\n </SidebarHeader>\n\n {/* Navigation */}\n <SidebarContent>\n {sidebarData.navGroups.map((props) => (\n <NavGroup key={props.title} {...props} />\n ))}\n </SidebarContent>\n\n {/* User Profile */}\n <SidebarFooter>\n <NavUser user={sidebarData.user} />\n </SidebarFooter>\n </Sidebar>\n )\n}\n","import Link from 'next/link'\r\nimport { Menu, X } from 'lucide-react'\r\nimport { cn } from '../../lib/utils'\r\nimport {\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n useSidebar,\r\n} from '../components/ui/sidebar'\r\nimport { Button } from '../components/ui/button'\r\n\r\nexport function AppTitle() {\r\n const { setOpenMobile } = useSidebar()\r\n return (\r\n <SidebarMenu>\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n size='lg'\r\n className='gap-0 py-0 hover:bg-transparent active:bg-transparent'\r\n asChild\r\n >\r\n <div>\r\n <Link\r\n href='/'\r\n onClick={() => setOpenMobile(false)}\r\n className='grid flex-1 text-start text-sm leading-tight'\r\n >\r\n <span className='truncate font-bold'>Shadcn-Admin</span>\r\n <span className='truncate text-xs'>Vite + ShadcnUI</span>\r\n </Link>\r\n <ToggleSidebar />\r\n </div>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n </SidebarMenu>\r\n )\r\n}\r\n\r\nfunction ToggleSidebar({\r\n className,\r\n onClick,\r\n ...props\r\n}: React.ComponentProps<typeof Button>) {\r\n const { toggleSidebar } = useSidebar()\r\n\r\n return (\r\n <Button\r\n data-sidebar='trigger'\r\n data-slot='sidebar-trigger'\r\n variant='ghost'\r\n size='icon'\r\n className={cn('aspect-square size-8 max-md:scale-125', className)}\r\n onClick={(event) => {\r\n onClick?.(event)\r\n toggleSidebar()\r\n }}\r\n {...props}\r\n >\r\n <X className='md:hidden' />\r\n <Menu className='max-md:hidden' />\r\n <span className='sr-only'>Toggle Sidebar</span>\r\n </Button>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { useEffect, useState } from 'react'\r\nimport { usePathname } from 'next/navigation'\r\nimport { getCookie } from '../../lib/cookies'\r\nimport { cn } from '../../lib/utils'\r\nimport { LayoutProvider, useLayout } from '../../context/layout-provider'\r\nimport { SearchProvider } from '../../context/search-provider'\r\nimport { SidebarInset, SidebarProvider } from '../components/ui/sidebar'\r\nimport { AppSidebar } from '@/components/layout/app-sidebar'\r\nimport { SkipToMain } from '@/components/skip-to-main'\r\nimport { NotFoundError } from '@/features/errors/not-found-error'\r\n\r\ntype AuthenticatedLayoutProps = {\r\n children?: React.ReactNode\r\n}\r\n\r\nfunction AuthenticatedLayoutContent({ children }: AuthenticatedLayoutProps) {\r\n const { showInlineNotFound, setShowInlineNotFound } = useLayout()\r\n const pathname = usePathname()\r\n\r\n useEffect(() => {\r\n setShowInlineNotFound(false)\r\n }, [pathname, setShowInlineNotFound])\r\n\r\n return (\r\n <>\r\n <SkipToMain />\r\n <AppSidebar />\r\n <SidebarInset\r\n className={cn(\r\n '@container/content flex min-h-svh flex-1 flex-col overflow-hidden',\r\n 'has-[[data-layout=fixed]]:h-svh has-data-[layout=fixed]:h-svh',\r\n 'peer-data-[variant=inset]:has-data-[layout=fixed]:h-[calc(100svh-(var(--spacing)*4))]'\r\n )}\r\n >\r\n {showInlineNotFound ? (\r\n <NotFoundError\r\n embedded\r\n onDismiss={() => setShowInlineNotFound(false)}\r\n />\r\n ) : (\r\n children\r\n )}\r\n </SidebarInset>\r\n </>\r\n )\r\n}\r\n\r\nexport function AuthenticatedLayout({ children }: AuthenticatedLayoutProps) {\r\n const [defaultOpen, setDefaultOpen] = useState(true)\r\n const [isMounted, setIsMounted] = useState(false)\r\n\r\n useEffect(() => {\r\n setDefaultOpen(getCookie('sidebar_state') !== 'false')\r\n setIsMounted(true)\r\n }, [])\r\n\r\n if (!isMounted) {\r\n return null\r\n }\r\n\r\n return (\r\n <SearchProvider>\r\n <LayoutProvider>\r\n <SidebarProvider defaultOpen={defaultOpen}>\r\n <AuthenticatedLayoutContent>{children}</AuthenticatedLayoutContent>\r\n </SidebarProvider>\r\n </LayoutProvider>\r\n </SearchProvider>\r\n )\r\n}\r\n","'use client'\n\nimport { useEffect } from 'react'\r\nimport { useLayout } from '@/context/layout-provider'\r\nimport {\r\n Sidebar,\r\n SidebarContent,\r\n SidebarFooter,\r\n SidebarHeader,\r\n SidebarTrigger,\r\n} from '@/components/ui/sidebar'\r\nimport { sidebarData } from './data/sidebar-data'\r\nimport { NavGroup } from './nav-group'\r\nimport { TeamSwitcher } from './team-switcher'\r\nimport { NavUser } from './nav-user'\r\nimport { useAuthStore } from '@/stores/auth-store'\r\nimport { useNotificationStore } from '@/stores/notification-store'\r\n\r\nexport function AppSidebar() {\r\n const { collapsible } = useLayout()\r\n const currentUser = useAuthStore((state) => state.auth.user)\r\n const { unreadCount, fetchNotifications, subscribeToNotifications, unsubscribe } = useNotificationStore()\r\n\r\n useEffect(() => {\r\n if (currentUser) {\r\n fetchNotifications(currentUser.accountNo)\r\n subscribeToNotifications(currentUser.accountNo)\r\n }\r\n return () => {\r\n unsubscribe()\r\n }\r\n }, [currentUser, fetchNotifications, subscribeToNotifications, unsubscribe])\r\n\r\n // Map sidebarData to inject dynamic unreadCount badge for Notification item\r\n const dynamicSidebarData = {\r\n ...sidebarData,\r\n navGroups: sidebarData.navGroups.map((group) => ({\r\n ...group,\r\n items: group.items.map((item) => {\r\n if (item.title === 'Notification') {\r\n return {\r\n ...item,\r\n badge: unreadCount > 0 ? (unreadCount > 5 ? '5+' : String(unreadCount)) : undefined,\r\n }\r\n }\r\n return item\r\n }),\r\n })),\r\n }\r\n\r\n return (\r\n // Sidebar ko fixed \"sidebar\" variant par lock kiya gaya hai (floating remove).\r\n <Sidebar collapsible={collapsible} variant='sidebar'>\r\n {/* Logo */}\r\n <SidebarHeader className='pb-0'>\r\n <TeamSwitcher teams={dynamicSidebarData.teams} />\r\n </SidebarHeader>\r\n\r\n {/* NEW: Toggle sits below logo */}\r\n {/* ==========================================\r\n Show toggle below logo ONLY when collapsed\r\n========================================== */}\r\n <div className='hidden group-data-[state=collapsed]:flex justify-center py-2'>\r\n <SidebarTrigger\r\n variant='ghost'\r\n className='h-8 w-8'\r\n aria-label='Toggle sidebar'\r\n />\r\n </div>\r\n {/* Navigation */}\r\n <SidebarContent>\r\n {dynamicSidebarData.navGroups.map((props) => (\r\n <NavGroup key={props.title} {...props} />\r\n ))}\r\n </SidebarContent>\r\n\r\n {/* User Profile */}\r\n <SidebarFooter>\r\n <NavUser user={dynamicSidebarData.user} />\r\n </SidebarFooter>\r\n </Sidebar>\r\n )\r\n}\r\n","'use client'\n\nimport { type ReactNode } from 'react'\r\nimport Link from 'next/link'\r\nimport { usePathname } from 'next/navigation'\r\nimport { ChevronRight, X } from 'lucide-react'\r\nimport { useLayout } from '@/context/layout-provider'\r\nimport {\r\n Collapsible,\r\n CollapsibleContent,\r\n CollapsibleTrigger,\r\n} from '@/components/ui/collapsible'\r\nimport {\r\n SidebarGroup,\r\n SidebarGroupLabel,\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n SidebarMenuSub,\r\n SidebarMenuSubButton,\r\n SidebarMenuSubItem,\r\n SidebarTrigger,\r\n useSidebar,\r\n} from '@/components/ui/sidebar'\r\nimport { Button } from '@/components/ui/button'\r\nimport { Badge } from '../ui/badge'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '../ui/dropdown-menu'\r\nimport {\r\n type NavCollapsible,\r\n type NavItem,\r\n type NavLink,\r\n type NavGroup as NavGroupProps,\r\n} from './types'\r\n\r\nimport { cn } from '@/lib/utils'\r\n\r\nexport function NavGroup({ title, items }: NavGroupProps) {\r\n const { state, isMobile, openMobile, setOpenMobile } = useSidebar()\r\n const href = usePathname()\r\n\r\n return (\r\n <SidebarGroup className={cn(title === 'Menu' && 'pt-0')}>\r\n {/* Label and Toggle: Sticky at the top */}\r\n <SidebarGroupLabel\r\n className={cn(\r\n 'flex items-center justify-between',\r\n title === 'Menu' && state !== 'collapsed' && 'sticky top-0 z-20 bg-sidebar py-1.5'\r\n )}\r\n >\r\n {/* Left Side */}\r\n <span>{title}</span>\r\n\r\n {/* Desktop: Toggle on far right */}\r\n {title === 'Menu' && !isMobile && (\r\n <SidebarTrigger\r\n variant='ghost'\r\n className='h-5 w-5'\r\n aria-label='Toggle sidebar'\r\n />\r\n )}\r\n\r\n {/* Mobile: Close button */}\r\n {title === 'Menu' && isMobile && openMobile && (\r\n <Button\r\n type='button'\r\n variant='ghost'\r\n size='icon'\r\n className='size-6 shrink-0'\r\n aria-label='Close sidebar'\r\n onClick={() => setOpenMobile(false)}\r\n >\r\n <X className='size-4' aria-hidden='true' />\r\n </Button>\r\n )}\r\n </SidebarGroupLabel>\r\n\r\n <SidebarMenu>\r\n {items.map((item) => {\r\n const key = `${item.title}-${item.url}`\r\n\r\n if (!item.items)\r\n return <SidebarMenuLink key={key} item={item} href={href} />\r\n\r\n if (item.title === 'Settings' && item.items.length === 0)\r\n return <SidebarMenuSettings key={key} item={item} />\r\n\r\n if (state === 'collapsed' && !isMobile)\r\n return (\r\n <SidebarMenuCollapsedDropdown key={key} item={item} href={href} />\r\n )\r\n\r\n return <SidebarMenuCollapsible key={key} item={item} href={href} />\r\n })}\r\n </SidebarMenu>\r\n </SidebarGroup>\r\n )\r\n}\r\n\r\nfunction NavBadge({ children }: { children: ReactNode }) {\r\n return <Badge className='rounded-full px-1 py-0 text-xs'>{children}</Badge>\r\n}\r\n\r\nfunction SidebarMenuLink({ item, href }: { item: NavLink; href: string }) {\r\n const { setOpenMobile } = useSidebar()\r\n const { setShowInlineNotFound } = useLayout()\r\n\r\n return (\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n asChild\r\n isActive={checkIsActive(href, item)}\r\n tooltip={item.title}\r\n >\r\n <Link\r\n href={item.url}\r\n onClick={() => {\r\n setShowInlineNotFound(false)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n </Link>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction SidebarMenuSettings({ item }: { item: NavCollapsible }) {\r\n const { setOpenMobile } = useSidebar()\r\n const { showInlineNotFound, setShowInlineNotFound } = useLayout()\r\n\r\n return (\r\n <SidebarMenuItem>\r\n <SidebarMenuButton\r\n tooltip={item.title}\r\n isActive={showInlineNotFound}\r\n onClick={() => {\r\n setShowInlineNotFound(true)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction SidebarMenuCollapsible({\r\n item,\r\n href,\r\n}: {\r\n item: NavCollapsible\r\n href: string\r\n}) {\r\n const { setOpenMobile } = useSidebar()\r\n const { setShowInlineNotFound } = useLayout()\r\n return (\r\n <Collapsible\r\n asChild\r\n defaultOpen={checkIsActive(href, item, true)}\r\n className='group/collapsible'\r\n >\r\n <SidebarMenuItem>\r\n <CollapsibleTrigger asChild>\r\n <SidebarMenuButton tooltip={item.title}>\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n <ChevronRight className='ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90 rtl:rotate-180' />\r\n </SidebarMenuButton>\r\n </CollapsibleTrigger>\r\n <CollapsibleContent className='CollapsibleContent'>\r\n <SidebarMenuSub>\r\n {item.items.map((subItem) => (\r\n <SidebarMenuSubItem key={subItem.title}>\r\n <SidebarMenuSubButton\r\n asChild\r\n isActive={checkIsActive(href, subItem)}\r\n >\r\n <Link\r\n href={subItem.url}\r\n onClick={() => {\r\n setShowInlineNotFound(false)\r\n setOpenMobile(false)\r\n }}\r\n >\r\n {subItem.icon && <subItem.icon />}\r\n <span>{subItem.title}</span>\r\n {subItem.badge && <NavBadge>{subItem.badge}</NavBadge>}\r\n </Link>\r\n </SidebarMenuSubButton>\r\n </SidebarMenuSubItem>\r\n ))}\r\n </SidebarMenuSub>\r\n </CollapsibleContent>\r\n </SidebarMenuItem>\r\n </Collapsible>\r\n )\r\n}\r\n\r\nfunction SidebarMenuCollapsedDropdown({\r\n item,\r\n href,\r\n}: {\r\n item: NavCollapsible\r\n href: string\r\n}) {\r\n return (\r\n <SidebarMenuItem>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <SidebarMenuButton\r\n tooltip={item.title}\r\n isActive={checkIsActive(href, item)}\r\n >\r\n {item.icon && <item.icon />}\r\n <span>{item.title}</span>\r\n {item.badge && <NavBadge>{item.badge}</NavBadge>}\r\n <ChevronRight className='ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90' />\r\n </SidebarMenuButton>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent side='right' align='start' sideOffset={4}>\r\n <DropdownMenuLabel>\r\n {item.title} {item.badge ? `(${item.badge})` : ''}\r\n </DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n {item.items.map((sub) => (\r\n <DropdownMenuItem key={`${sub.title}-${sub.url}`} asChild>\r\n <Link\r\n href={sub.url}\r\n className={`${checkIsActive(href, sub) ? 'bg-secondary' : ''}`}\r\n >\r\n {sub.icon && <sub.icon />}\r\n <span className='max-w-52 text-wrap'>{sub.title}</span>\r\n {sub.badge && (\r\n <span className='ms-auto text-xs'>{sub.badge}</span>\r\n )}\r\n </Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </SidebarMenuItem>\r\n )\r\n}\r\n\r\nfunction checkIsActive(href: string, item: NavItem, mainNav = false) {\r\n return (\r\n href === item.url || // /endpint?search=param\r\n href.split('?')[0] === item.url || // endpoint\r\n !!item?.items?.filter((i) => i.url === href).length || // if child nav is active\r\n (mainNav &&\r\n href.split('/')[1] !== '' &&\r\n href.split('/')[1] === item?.url?.split('/')[1])\r\n )\r\n}\r\n","'use client'\n\nimport {\r\n ChevronsUpDown,\r\n LogOut,\r\n User,\r\n Bell,\r\n MessageCircle,\r\n CreditCard,\r\n ShoppingBag,\r\n Settings,\r\n Palette,\r\n} from 'lucide-react'\r\nimport Link from 'next/link'\r\nimport useDialogState from '@/hooks/use-dialog-state'\r\nimport { useAuthStore } from '@/stores/auth-store'\r\nimport { useLayout } from '@/context/layout-provider'\r\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\r\nimport { ConfigDrawer } from '@/components/config-drawer'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '@/components/ui/dropdown-menu'\r\nimport {\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n useSidebar,\r\n} from '@/components/ui/sidebar'\r\nimport { SignOutDialog } from '@/components/sign-out-dialog'\r\n\r\ntype NavUserProps = {\r\n user: {\r\n name: string\r\n email: string\r\n avatar: string\r\n }\r\n}\r\n\r\nexport function NavUser({ user: fallbackUser }: NavUserProps) {\r\n const { isMobile } = useSidebar()\r\n const [open, setOpen] = useDialogState()\r\n const { auth } = useAuthStore()\r\n const { setShowInlineNotFound } = useLayout()\r\n\r\n const userName = auth.user?.name || auth.user?.email?.split('@')[0] || fallbackUser.name\r\n const userEmail = auth.user?.email || fallbackUser.email\r\n const userAvatar = auth.user?.picture || fallbackUser.avatar\r\n const userInitials = userName\r\n .split(' ')\r\n .map((n: string) => n[0])\r\n .join('')\r\n .toUpperCase()\r\n .slice(0, 2)\r\n\r\n return (\r\n <>\r\n <SidebarMenu>\r\n <SidebarMenuItem>\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <SidebarMenuButton\r\n size='lg'\r\n tooltip={userName}\r\n className='data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground'\r\n >\r\n <Avatar className='h-8 w-8 rounded-lg'>\r\n <AvatarImage src={userAvatar} alt={userName} />\r\n <AvatarFallback className='rounded-lg'>{userInitials}</AvatarFallback>\r\n </Avatar>\r\n <div className='grid flex-1 text-start text-sm leading-tight'>\r\n <span className='truncate font-semibold'>{userName}</span>\r\n <span className='truncate text-xs text-muted-foreground'>{userEmail}</span>\r\n </div>\r\n <ChevronsUpDown className='ml-auto size-4 shrink-0' />\r\n </SidebarMenuButton>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent\r\n className='w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg'\r\n side={isMobile ? 'bottom' : 'right'}\r\n align='end'\r\n sideOffset={4}\r\n >\r\n <DropdownMenuLabel className='p-0 font-normal'>\r\n <div className='flex items-center gap-2 px-1 py-1.5 text-start text-sm'>\r\n <Avatar className='h-8 w-8 rounded-lg'>\r\n <AvatarImage src={userAvatar} alt={userName} />\r\n <AvatarFallback className='rounded-lg'>{userInitials}</AvatarFallback>\r\n </Avatar>\r\n <div className='grid flex-1 text-start text-sm leading-tight'>\r\n <span className='truncate font-semibold'>{userName}</span>\r\n <span className='truncate text-xs text-muted-foreground'>{userEmail}</span>\r\n </div>\r\n </div>\r\n </DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n\r\n {/* My Profile */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <User className='mr-2 h-4 w-4' />\r\n My Profile\r\n </DropdownMenuItem>\r\n\r\n {/* Notifications */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <Bell className='mr-2 h-4 w-4' />\r\n Notifications\r\n </DropdownMenuItem>\r\n\r\n {/* Help */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <MessageCircle className='mr-2 h-4 w-4' />\r\n Help & Support\r\n </DropdownMenuItem>\r\n\r\n <DropdownMenuSeparator />\r\n\r\n {/* Subscription */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <CreditCard className='mr-2 h-4 w-4' />\r\n Subscriptions\r\n </DropdownMenuItem>\r\n\r\n {/* Buy Apps */}\r\n <DropdownMenuItem asChild>\r\n <Link href='/apps'>\r\n <ShoppingBag className='mr-2 h-4 w-4' />\r\n Buy Apps\r\n </Link>\r\n </DropdownMenuItem>\r\n\r\n {/* Theme Settings */}\r\n <ConfigDrawer\r\n trigger={\r\n <DropdownMenuItem onSelect={(e) => e.preventDefault()}>\r\n <Palette className='mr-2 h-4 w-4' />\r\n Theme Settings\r\n </DropdownMenuItem>\r\n }\r\n />\r\n\r\n {/* Settings */}\r\n <DropdownMenuItem onClick={() => setShowInlineNotFound(true)}>\r\n <Settings className='mr-2 h-4 w-4' />\r\n Settings\r\n </DropdownMenuItem>\r\n\r\n <DropdownMenuSeparator />\r\n\r\n {/* Sign Out */}\r\n <DropdownMenuItem\r\n variant='destructive'\r\n onClick={() => setOpen(true)}\r\n >\r\n <LogOut className='mr-2 h-4 w-4' />\r\n Sign out\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </SidebarMenuItem>\r\n </SidebarMenu>\r\n\r\n <SignOutDialog open={!!open} onOpenChange={setOpen} />\r\n </>\r\n )\r\n}\r\n","export function SkipToMain() {\r\n return (\r\n <a\r\n className={`fixed inset-s-44 z-999 -translate-y-52 bg-primary px-4 py-2 text-sm font-medium whitespace-nowrap text-primary-foreground opacity-95 shadow-sm transition hover:bg-primary/90 focus:translate-y-3 focus:transform focus-visible:ring-1 focus-visible:ring-ring`}\r\n href='#content'\r\n >\r\n Skip to Main\r\n </a>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { useRouter } from 'next/navigation'\r\nimport { cn } from '@/lib/utils'\r\nimport { Button } from '@/components/ui/button'\r\n\r\ntype NotFoundErrorProps = React.HTMLAttributes<HTMLDivElement> & {\r\n embedded?: boolean\r\n onDismiss?: () => void\r\n}\r\n\r\nexport function NotFoundError({\r\n className,\r\n embedded = false,\r\n onDismiss,\r\n}: NotFoundErrorProps) {\r\n const router = useRouter()\r\n\r\n const handleGoBack = () => {\r\n if (onDismiss) {\r\n onDismiss()\r\n return\r\n }\r\n router.back()\r\n }\r\n\r\n const handleGoHome = () => {\r\n if (onDismiss) onDismiss()\r\n router.push('/')\r\n }\r\n return (\r\n <div className={cn(embedded ? 'min-h-96 w-full py-8' : 'h-svh', className)}>\r\n <div className='m-auto flex h-full w-full flex-col items-center justify-center gap-2'>\r\n <h1\r\n className={cn(\r\n 'leading-tight font-bold',\r\n embedded ? 'text-6xl' : 'text-[7rem]'\r\n )}\r\n >\r\n 404\r\n </h1>\r\n <span className='font-medium'>Oops! Page Not Found :-(!</span>\r\n <p className='text-center text-muted-foreground'>\r\n It seems like the page you're looking for <br />\r\n does not exist or might have been removed.\r\n </p>\r\n <div className='mt-6 flex gap-4'>\r\n <Button variant='outline' onClick={handleGoBack}>\r\n Go Back\r\n </Button>\r\n <Button onClick={handleGoHome}>Back to Home</Button>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { useEffect, useState } from 'react'\r\nimport { cn } from '../../lib/utils'\r\nimport { AppLogo } from './app-logo'\r\n\r\ntype HeaderProps = React.HTMLAttributes<HTMLElement> & {\r\n fixed?: boolean\r\n ref?: React.Ref<HTMLElement>\r\n}\r\n\r\nexport function Header({ className, fixed, children, ...props }: HeaderProps) {\r\n const [offset, setOffset] = useState(0)\r\n\r\n useEffect(() => {\r\n const onScroll = () => {\r\n setOffset(document.body.scrollTop || document.documentElement.scrollTop)\r\n }\r\n\r\n // Add scroll listener to the body\r\n document.addEventListener('scroll', onScroll, { passive: true })\r\n\r\n // Clean up the event listener on unmount\r\n return () => document.removeEventListener('scroll', onScroll)\r\n }, [])\r\n\r\n return (\r\n // Page header container: fixed mode me top par sticky behavior deta hai.\r\n <header\r\n className={cn(\r\n 'z-50 h-16 shrink-0',\r\n fixed &&\r\n 'header-fixed peer/header sticky top-0 w-full bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/80',\r\n offset > 10 && fixed ? 'shadow-sm' : 'shadow-none',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n // Header ke andar left-to-right UI controls/content align karne ke liye row layout.\r\n 'relative flex h-full min-w-0 flex-nowrap items-center gap-1.5 overflow-hidden px-2 py-2 sm:gap-3 sm:px-4 md:gap-4',\r\n offset > 10 &&\r\n fixed &&\r\n 'after:absolute after:inset-0 after:-z-10 after:bg-background/20 after:backdrop-blur-lg'\r\n )}\r\n >\r\n {/* Mobile par app logo; desktop par sidebar trigger sidebar header me hai */}\r\n <AppLogo className='shrink-0 md:hidden' />\r\n {children}\r\n </div>\r\n </header>\r\n )\r\n}\r\n","import { cn } from '../../lib/utils'\r\n\r\ntype MainProps = React.HTMLAttributes<HTMLElement> & {\r\n fixed?: boolean\r\n fluid?: boolean\r\n ref?: React.Ref<HTMLElement>\r\n}\r\n\r\nexport function Main({ fixed, className, fluid, ...props }: MainProps) {\r\n return (\r\n <main\r\n data-layout={fixed ? 'fixed' : 'auto'}\r\n className={cn(\r\n 'px-4 py-6',\r\n\r\n // If layout is fixed, make the main container flex and grow\r\n fixed && 'flex grow flex-col min-h-0 overflow-hidden',\r\n\r\n // Standard full width to avoid left-side offset/gap next to sidebar\r\n 'w-full',\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n","'use client'\n\nimport { SearchIcon } from 'lucide-react'\nimport { useSearch } from '../../context/search-provider'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from '../components/ui/sidebar'\n\nexport function SidebarSearch() {\n const { setOpen } = useSearch()\n\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton\n onClick={() => setOpen(true)}\n tooltip='Search (⌘K)'\n className='bg-sidebar-accent/50 hover:bg-sidebar-accent border border-sidebar-border/60 text-muted-foreground hover:text-foreground'\n >\n <SearchIcon className='size-4 shrink-0' />\n <span className='flex-1 text-left text-xs font-normal group-data-[collapsible=icon]:hidden'>\n Search...\n </span>\n <kbd className='pointer-events-none hidden h-4 select-none items-center gap-0.5 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium opacity-100 group-data-[collapsible=icon]:hidden sm:flex'>\n <span className='text-[10px]'>⌘</span>K\n </kbd>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n )\n}\n","import Link from 'next/link'\r\nimport { Menu } from 'lucide-react'\r\nimport { cn } from '../../lib/utils'\r\nimport { Button } from '../components/ui/button'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '../components/ui/dropdown-menu'\r\n\r\ntype TopNavProps = React.HTMLAttributes<HTMLElement> & {\r\n links: {\r\n title: string\r\n href?: string\r\n isActive: boolean\r\n disabled?: boolean\r\n onClick?: () => void\r\n }[]\r\n}\r\n\r\nexport function TopNav({ className, links, ...props }: TopNavProps) {\r\n const renderLink = ({\r\n title,\r\n href,\r\n isActive,\r\n disabled,\r\n onClick,\r\n }: TopNavProps['links'][number]) => {\r\n const className = `text-sm font-medium transition-colors hover:text-primary ${isActive ? '' : 'text-muted-foreground'}`\r\n\r\n if (onClick) {\r\n return (\r\n <button\r\n type='button'\r\n key={title}\r\n onClick={onClick}\r\n disabled={disabled}\r\n className={className}\r\n >\r\n {title}\r\n </button>\r\n )\r\n }\r\n\r\n return (\r\n <Link\r\n key={title}\r\n href={href!}\r\n className={className}\r\n style={disabled ? { pointerEvents: 'none', opacity: 0.5 } : undefined}\r\n >\r\n {title}\r\n </Link>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n size='icon'\r\n variant='outline'\r\n className={cn(\r\n 'hidden size-8 shrink-0 md:inline-flex lg:hidden',\r\n className\r\n )}\r\n >\r\n <Menu />\r\n <span className='sr-only'>Toggle navigation menu</span>\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent side='bottom' align='start'>\r\n {links.map((link) => (\r\n <DropdownMenuItem\r\n key={link.title}\r\n disabled={link.disabled}\r\n onClick={link.onClick}\r\n asChild={!link.onClick}\r\n >\r\n {link.onClick ? (\r\n <span className={!link.isActive ? 'text-muted-foreground' : ''}>\r\n {link.title}\r\n </span>\r\n ) : (\r\n <Link\r\n href={link.href!}\r\n className={!link.isActive ? 'text-muted-foreground' : ''}\r\n style={link.disabled ? { pointerEvents: 'none', opacity: 0.5 } : undefined}\r\n >\r\n {link.title}\r\n </Link>\r\n )}\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n\r\n <nav\r\n className={cn(\r\n 'hidden items-center space-x-4 lg:flex lg:space-x-4 xl:space-x-6',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {links.map((link) => renderLink(link))}\r\n </nav>\r\n </>\r\n )\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["DatePicker","Header","Sonner","Tooltip","sidebarData","AccordionPrimitive","import_radix_ui","import_jsx_runtime","AlertDialogPrimitive","import_jsx_runtime","import_radix_ui","import_jsx_runtime","AspectRatioPrimitive","import_radix_ui","import_jsx_runtime","AvatarPrimitive","import_class_variance_authority","import_radix_ui","import_jsx_runtime","import_lucide_react","import_radix_ui","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","import_lucide_react","import_jsx_runtime","className","props","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","useEmblaCarousel","api","React","import_jsx_runtime","config","import_jsx_runtime","import_lucide_react","import_radix_ui","import_jsx_runtime","CheckboxPrimitive","import_radix_ui","import_jsx_runtime","CollapsiblePrimitive","import_lucide_react","import_jsx_runtime","CommandPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","ContextMenuPrimitive","import_lucide_react","import_jsx_runtime","CalendarIcon","import_lucide_react","import_radix_ui","import_jsx_runtime","DialogPrimitive","import_jsx_runtime","DrawerPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","DropdownMenuPrimitive","import_class_variance_authority","import_jsx_runtime","import_react","import_class_variance_authority","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","import_radix_ui","import_jsx_runtime","HoverCardPrimitive","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","import_jsx_runtime","import_radix_ui","import_jsx_runtime","LabelPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","MenubarPrimitive","import_class_variance_authority","import_lucide_react","import_radix_ui","import_jsx_runtime","NavigationMenuPrimitive","import_lucide_react","import_jsx_runtime","import_radix_ui","import_jsx_runtime","PopoverPrimitive","import_radix_ui","import_jsx_runtime","ProgressPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","RadioGroupPrimitive","import_lucide_react","import_jsx_runtime","import_radix_ui","import_jsx_runtime","ScrollAreaPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","SelectPrimitive","import_radix_ui","import_jsx_runtime","SeparatorPrimitive","import_lucide_react","import_radix_ui","import_jsx_runtime","SheetPrimitive","React","import_class_variance_authority","import_lucide_react","import_radix_ui","React","import_jsx_runtime","open","Tooltip","import_jsx_runtime","React","import_radix_ui","import_jsx_runtime","SliderPrimitive","import_lucide_react","import_jsx_runtime","Sonner","import_lucide_react","import_jsx_runtime","import_radix_ui","import_jsx_runtime","SwitchPrimitive","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","TabsPrimitive","import_jsx_runtime","import_class_variance_authority","import_radix_ui","import_jsx_runtime","TogglePrimitive","React","import_radix_ui","import_jsx_runtime","ToggleGroupPrimitive","import_radix_ui","import_jsx_runtime","TooltipPrimitive","Tooltip","import_jsx_runtime","import_lucide_react","import_jsx_runtime","data","import_class_variance_authority","import_jsx_runtime","import_lucide_react","import_jsx_runtime","SearchIcon","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","nextAuthSignOut","import_react","import_lucide_react","import_react","import_jsx_runtime","useTheme","import_jsx_runtime","useTheme","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","useTheme","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","Tooltip","import_lucide_react","import_react","import_react","import_lucide_react","import_lucide_react","import_jsx_runtime","useTheme","React","i","import_jsx_runtime","open","import_jsx_runtime","import_jsx_runtime","import_date_fns","import_lucide_react","import_jsx_runtime","DatePicker","CalendarIcon","import_react","import_sonner","import_jsx_runtime","QRCode","React","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","ReactMarkdown","remarkGfm","import_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","ImageIcon","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","ImageIcon","import_react","import_lucide_react","import_jsx_runtime","ListIcon","import_react","import_lucide_react","import_jsx_runtime","FolderIcon","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_navigation","import_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Search","import_zustand","import_ssr","clientSingleton","createClient","createClient","data","import_jsx_runtime","Search","import_lucide_react","sidebarData","import_jsx_runtime","sidebarData","import_react","import_jsx_runtime","import_navigation","import_lucide_react","import_jsx_runtime","Link","import_jsx_runtime","import_lucide_react","import_react","initialState","import_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","useTheme","RadioGroupItem","Radio","import_jsx_runtime","import_jsx_runtime","sidebarData","import_link","import_lucide_react","import_jsx_runtime","Link","import_react","import_navigation","import_react","import_link","import_navigation","import_lucide_react","import_jsx_runtime","NavGroup","SidebarMenuLink","SidebarMenuSettings","SidebarMenuCollapsedDropdown","SidebarMenuCollapsible","NavBadge","checkIsActive","Link","import_lucide_react","import_link","import_jsx_runtime","NavUser","Link","import_jsx_runtime","AppSidebar","NavGroup","NavUser","import_jsx_runtime","import_navigation","import_jsx_runtime","import_jsx_runtime","AppSidebar","import_react","import_jsx_runtime","Header","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_link","import_lucide_react","import_jsx_runtime","className","Link"]}
|