niva-ui
Version:
A beautiful, minimalistic React + Tailwind UI framework for SaaS applications
1 lines • 176 kB
Source Map (JSON)
{"version":3,"sources":["../src/components/ui/button.tsx","../src/lib/utils.ts","../src/components/ui/badge.tsx","../src/components/ui/card.tsx","../src/components/ui/input.tsx","../src/components/ui/select.tsx","../src/components/ui/avatar.tsx","../src/components/ui/table.tsx","../src/components/ui/toast.tsx","../src/components/ui/modal.tsx","../src/components/ui/navbar.tsx","../src/components/ui/sidebar.tsx","../src/components/ui/form.tsx","../src/components/ui/dropdown.tsx","../src/components/ui/alert.tsx","../src/components/ui/loader.tsx","../src/components/ui/chip.tsx","../src/components/ui/pagination.tsx","../src/components/ui/search-bar.tsx","../src/components/ui/stat-card.tsx","../src/components/ui/code-block.tsx","../src/components/theme-provider.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Utility function to merge class names with tailwind-merge\n * This ensures that conflicting Tailwind classes are properly resolved\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n/**\n * Format currency values for display in SaaS applications\n */\nexport function formatCurrency(\n amount: number,\n currency: string = 'USD',\n locale: string = 'en-US'\n): string {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(amount)\n}\n\n/**\n * Format large numbers with compact notation (1.2K, 1.5M, etc.)\n */\nexport function formatCompactNumber(\n num: number,\n locale: string = 'en-US'\n): string {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(num)\n}\n\n/**\n * Calculate percentage change between two values\n */\nexport function calculatePercentageChange(\n current: number,\n previous: number\n): number {\n if (previous === 0) return current > 0 ? 100 : 0\n return ((current - previous) / previous) * 100\n}\n\n/**\n * Generate initials from a full name\n */\nexport function getInitials(name: string): string {\n return name\n .split(' ')\n .map((part) => part.charAt(0))\n .join('')\n .toUpperCase()\n .slice(0, 2)\n}\n\n/**\n * Debounce function for search inputs and other frequent operations\n */\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout\n\n return function executedFunction(...args: Parameters<T>) {\n const later = () => {\n clearTimeout(timeout)\n func(...args)\n }\n\n clearTimeout(timeout)\n timeout = setTimeout(later, wait)\n }\n}\n\n/**\n * Generate a random color for avatars, badges, etc.\n */\nexport function generateRandomColor(): string {\n const colors = [\n 'bg-red-500',\n 'bg-blue-500',\n 'bg-green-500',\n 'bg-yellow-500',\n 'bg-purple-500',\n 'bg-pink-500',\n 'bg-indigo-500',\n 'bg-cyan-500',\n 'bg-orange-500',\n 'bg-emerald-500',\n ]\n return colors[Math.floor(Math.random() * colors.length)]\n}\n\n/**\n * Check if a string is a valid email\n */\nexport function isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n}\n\n/**\n * Truncate text with ellipsis\n */\nexport function truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text\n return text.slice(0, maxLength) + '...'\n}\n\n/**\n * Sleep utility for async operations\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> { }\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst inputVariants = cva(\n \"flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"border-input\",\n destructive: \"border-destructive focus-visible:ring-destructive\",\n ghost: \"border-transparent bg-transparent hover:bg-accent\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 px-3 text-sm\",\n lg: \"h-11 px-4 py-3\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n label?: string\n error?: string\n icon?: React.ReactNode\n suffix?: React.ReactNode\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, variant, size, type, label, error, icon, suffix, ...props }, ref) => {\n return (\n <div className=\"grid w-full gap-1.5\">\n {label && (\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n {icon && (\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {icon}\n </div>\n )}\n <input\n type={type}\n className={cn(\n inputVariants({ variant, size, className }),\n icon && \"pl-10\",\n suffix && \"pr-10\",\n error && \"border-destructive focus-visible:ring-destructive\"\n )}\n ref={ref}\n {...props}\n />\n {suffix && (\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {suffix}\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-sm text-destructive\">{error}</p>\n )}\n </div>\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input, inputVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDown, Check } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst selectVariants = cva(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"border-input\",\n destructive: \"border-destructive focus:ring-destructive\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 px-3 text-sm\",\n lg: \"h-11 px-4 py-3\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface SelectProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'>,\n VariantProps<typeof selectVariants> {\n options: SelectOption[]\n value?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n label?: string\n error?: string\n searchable?: boolean\n}\n\nconst Select = React.forwardRef<HTMLButtonElement, SelectProps>(\n ({\n className,\n variant,\n size,\n options,\n value,\n onValueChange,\n placeholder = \"Select an option...\",\n label,\n error,\n searchable = false,\n disabled,\n ...props\n }, ref) => {\n const [isOpen, setIsOpen] = React.useState(false)\n const [searchTerm, setSearchTerm] = React.useState(\"\")\n const dropdownRef = React.useRef<HTMLDivElement>(null)\n\n const selectedOption = options.find(option => option.value === value)\n\n const filteredOptions = React.useMemo(() => {\n if (!searchable || !searchTerm) return options\n return options.filter(option =>\n option.label.toLowerCase().includes(searchTerm.toLowerCase())\n )\n }, [options, searchTerm, searchable])\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n setSearchTerm(\"\")\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n const handleSelect = (optionValue: string) => {\n onValueChange?.(optionValue)\n setIsOpen(false)\n setSearchTerm(\"\")\n }\n\n return (\n <div className=\"grid w-full gap-1.5\">\n {label && (\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n </label>\n )}\n <div className=\"relative\" ref={dropdownRef}>\n <button\n type=\"button\"\n ref={ref}\n className={cn(\n selectVariants({ variant, size, className }),\n error && \"border-destructive focus:ring-destructive\"\n )}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n {...props}\n >\n <span className={cn(\n \"block truncate text-left\",\n !selectedOption && \"text-muted-foreground\"\n )}>\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <ChevronDown className={cn(\n \"h-4 w-4 transition-transform\",\n isOpen && \"rotate-180\"\n )} />\n </button>\n\n {isOpen && (\n <div className=\"absolute z-50 mt-1 w-full rounded-md border bg-popover p-1 shadow-md\">\n {searchable && (\n <div className=\"p-1\">\n <input\n type=\"text\"\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"w-full rounded-sm border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n )}\n <div className=\"max-h-60 overflow-auto\">\n {filteredOptions.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No options found.\n </div>\n ) : (\n filteredOptions.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none hover:bg-accent hover:text-accent-foreground\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n value === option.value && \"bg-accent text-accent-foreground\"\n )}\n onClick={() => !option.disabled && handleSelect(option.value)}\n disabled={option.disabled}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {value === option.value && <Check className=\"h-4 w-4\" />}\n </span>\n {option.label}\n </button>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-sm text-destructive\">{error}</p>\n )}\n </div>\n )\n }\n)\nSelect.displayName = \"Select\"\n\nexport { Select, selectVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst avatarVariants = cva(\n \"relative flex shrink-0 overflow-hidden rounded-full\",\n {\n variants: {\n size: {\n sm: \"h-6 w-6\",\n default: \"h-10 w-10\",\n lg: \"h-12 w-12\",\n xl: \"h-16 w-16\",\n \"2xl\": \"h-20 w-20\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nconst avatarImageVariants = cva(\"aspect-square h-full w-full object-cover\")\n\nconst avatarFallbackVariants = cva(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground font-medium\",\n {\n variants: {\n size: {\n sm: \"text-xs\",\n default: \"text-sm\",\n lg: \"text-base\",\n xl: \"text-lg\",\n \"2xl\": \"text-xl\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface AvatarProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof avatarVariants> {\n src?: string\n alt?: string\n fallback?: string\n status?: \"online\" | \"offline\" | \"away\" | \"busy\"\n}\n\nconst Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n ({ className, size, src, alt, fallback, status, ...props }, ref) => {\n const [imageLoaded, setImageLoaded] = React.useState(false)\n const [imageFailed, setImageFailed] = React.useState(false)\n\n const initials = React.useMemo(() => {\n if (fallback) return fallback\n if (alt) {\n const names = alt.split(' ')\n return names.length > 1\n ? `${names[0][0]}${names[names.length - 1][0]}`.toUpperCase()\n : names[0].slice(0, 2).toUpperCase()\n }\n return '??'\n }, [fallback, alt])\n\n return (\n <div className={cn(avatarVariants({ size }), className)} ref={ref} {...props}>\n {src && !imageFailed && (\n <img\n src={src}\n alt={alt}\n className={cn(avatarImageVariants())}\n onLoad={() => setImageLoaded(true)}\n onError={() => setImageFailed(true)}\n />\n )}\n {(!src || imageFailed || !imageLoaded) && (\n <div className={cn(avatarFallbackVariants({ size }))}>\n {initials}\n </div>\n )}\n {status && (\n <div className={cn(\n \"absolute -bottom-0 -right-0 rounded-full border-2 border-background\",\n size === \"sm\" && \"h-2 w-2\",\n size === \"default\" && \"h-3 w-3\",\n size === \"lg\" && \"h-3.5 w-3.5\",\n size === \"xl\" && \"h-4 w-4\",\n size === \"2xl\" && \"h-5 w-5\",\n status === \"online\" && \"bg-green-500\",\n status === \"offline\" && \"bg-gray-400\",\n status === \"away\" && \"bg-yellow-500\",\n status === \"busy\" && \"bg-red-500\"\n )} />\n )}\n </div>\n )\n }\n)\nAvatar.displayName = \"Avatar\"\n\nexport { Avatar, avatarVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronUp, ChevronDown, ChevronsUpDown } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement> & {\n hover?: boolean\n }\n>(({ className, hover = true, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors\",\n hover && \"hover:bg-muted/50\",\n \"data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\ninterface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n sortable?: boolean\n sortDirection?: \"asc\" | \"desc\" | null\n onSort?: () => void\n}\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, sortable, sortDirection, onSort, children, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n sortable && \"cursor-pointer hover:text-foreground\",\n className\n )}\n onClick={sortable ? onSort : undefined}\n {...props}\n >\n <div className=\"flex items-center space-x-2\">\n <span>{children}</span>\n {sortable && (\n <span className=\"flex items-center\">\n {sortDirection === \"asc\" && <ChevronUp className=\"h-4 w-4\" />}\n {sortDirection === \"desc\" && <ChevronDown className=\"h-4 w-4\" />}\n {sortDirection === null && <ChevronsUpDown className=\"h-4 w-4\" />}\n </span>\n )}\n </div>\n </th>\n )\n)\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\n// Enhanced DataTable component for SaaS applications\nexport interface Column<T> {\n key: keyof T\n header: string\n sortable?: boolean\n render?: (value: T[keyof T], row: T) => React.ReactNode\n width?: string\n}\n\nexport interface DataTableProps<T> {\n data: T[]\n columns: Column<T>[]\n loading?: boolean\n emptyMessage?: string\n onRowClick?: (row: T) => void\n selectable?: boolean\n selectedRows?: T[]\n onSelectionChange?: (rows: T[]) => void\n}\n\nfunction DataTable<T extends Record<string, any>>({\n data,\n columns,\n loading = false,\n emptyMessage = \"No data available\",\n onRowClick,\n selectable = false,\n selectedRows = [],\n onSelectionChange,\n}: DataTableProps<T>) {\n const [sortConfig, setSortConfig] = React.useState<{\n key: keyof T | null\n direction: \"asc\" | \"desc\"\n }>({ key: null, direction: \"asc\" })\n\n const sortedData = React.useMemo(() => {\n if (!sortConfig.key) return data\n\n return [...data].sort((a, b) => {\n const aValue = a[sortConfig.key!]\n const bValue = b[sortConfig.key!]\n\n if (aValue < bValue) {\n return sortConfig.direction === \"asc\" ? -1 : 1\n }\n if (aValue > bValue) {\n return sortConfig.direction === \"asc\" ? 1 : -1\n }\n return 0\n })\n }, [data, sortConfig])\n\n const handleSort = (key: keyof T) => {\n setSortConfig(prev => ({\n key,\n direction: prev.key === key && prev.direction === \"asc\" ? \"desc\" : \"asc\"\n }))\n }\n\n const isSelected = (row: T) => selectedRows.some(selected => selected === row)\n\n const toggleSelection = (row: T) => {\n if (!onSelectionChange) return\n\n const newSelection = isSelected(row)\n ? selectedRows.filter(selected => selected !== row)\n : [...selectedRows, row]\n\n onSelectionChange(newSelection)\n }\n\n const toggleAllSelection = () => {\n if (!onSelectionChange) return\n\n const allSelected = selectedRows.length === data.length\n onSelectionChange(allSelected ? [] : [...data])\n }\n\n if (loading) {\n return (\n <div className=\"w-full p-8 text-center\">\n <div className=\"text-sm text-muted-foreground\">Loading...</div>\n </div>\n )\n }\n\n return (\n <Table>\n <TableHeader>\n <TableRow>\n {selectable && (\n <TableHead className=\"w-12\">\n <input\n type=\"checkbox\"\n checked={selectedRows.length === data.length && data.length > 0}\n onChange={toggleAllSelection}\n className=\"rounded\"\n />\n </TableHead>\n )}\n {columns.map((column) => (\n <TableHead\n key={String(column.key)}\n sortable={column.sortable}\n sortDirection={\n sortConfig.key === column.key\n ? sortConfig.direction\n : null\n }\n onSort={() => column.sortable && handleSort(column.key)}\n style={{ width: column.width }}\n >\n {column.header}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {sortedData.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columns.length + (selectable ? 1 : 0)} className=\"text-center py-8\">\n <div className=\"text-muted-foreground\">{emptyMessage}</div>\n </TableCell>\n </TableRow>\n ) : (\n sortedData.map((row, index) => (\n <TableRow\n key={index}\n className={cn(\n onRowClick && \"cursor-pointer\",\n isSelected(row) && \"bg-muted/50\"\n )}\n onClick={() => onRowClick?.(row)}\n >\n {selectable && (\n <TableCell>\n <input\n type=\"checkbox\"\n checked={isSelected(row)}\n onChange={() => toggleSelection(row)}\n onClick={(e) => e.stopPropagation()}\n className=\"rounded\"\n />\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell key={String(column.key)}>\n {column.render\n ? column.render(row[column.key], row)\n : String(row[column.key] ?? \"\")}\n </TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n DataTable,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { X, CheckCircle, AlertCircle, Info, AlertTriangle } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst toastVariants = cva(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n {\n variants: {\n variant: {\n default: \"border bg-background text-foreground\",\n success: \"border-green-200 bg-green-50 text-green-900 dark:border-green-800 dark:bg-green-950 dark:text-green-50\",\n error: \"border-red-200 bg-red-50 text-red-900 dark:border-red-800 dark:bg-red-950 dark:text-red-50\",\n warning: \"border-yellow-200 bg-yellow-50 text-yellow-900 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-50\",\n info: \"border-blue-200 bg-blue-50 text-blue-900 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-50\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface ToastProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof toastVariants> {\n title?: string\n description?: string\n action?: React.ReactNode\n onClose?: () => void\n duration?: number\n}\n\nconst Toast = React.forwardRef<HTMLDivElement, ToastProps>(\n ({ className, variant, title, description, action, onClose, duration = 5000, ...props }, ref) => {\n const [isVisible, setIsVisible] = React.useState(true)\n\n React.useEffect(() => {\n if (duration && duration > 0) {\n const timer = setTimeout(() => {\n setIsVisible(false)\n setTimeout(() => onClose?.(), 150) // Allow time for exit animation\n }, duration)\n\n return () => clearTimeout(timer)\n }\n }, [duration, onClose])\n\n const getIcon = () => {\n switch (variant) {\n case \"success\":\n return <CheckCircle className=\"h-5 w-5 text-green-600 dark:text-green-400\" />\n case \"error\":\n return <AlertCircle className=\"h-5 w-5 text-red-600 dark:text-red-400\" />\n case \"warning\":\n return <AlertTriangle className=\"h-5 w-5 text-yellow-600 dark:text-yellow-400\" />\n case \"info\":\n return <Info className=\"h-5 w-5 text-blue-600 dark:text-blue-400\" />\n default:\n return null\n }\n }\n\n if (!isVisible) return null\n\n return (\n <div\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-start space-x-3\">\n <div className=\"flex-shrink-0 mt-0.5\">\n {getIcon()}\n </div>\n <div className=\"flex-1 min-w-0\">\n {title && (\n <div className=\"text-sm font-semibold\">\n {title}\n </div>\n )}\n {description && (\n <div className=\"mt-1 text-sm opacity-90\">\n {description}\n </div>\n )}\n {action && (\n <div className=\"mt-2\">\n {action}\n </div>\n )}\n </div>\n </div>\n <button\n onClick={() => {\n setIsVisible(false)\n setTimeout(() => onClose?.(), 150)\n }}\n className=\"absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n )\n }\n)\nToast.displayName = \"Toast\"\n\n// Toast Container\ninterface ToastContainerProps {\n position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\" | \"top-center\" | \"bottom-center\"\n}\n\nconst ToastContainer: React.FC<ToastContainerProps> = ({\n position = \"top-right\"\n}) => {\n const positionClasses = {\n \"top-right\": \"top-0 right-0\",\n \"top-left\": \"top-0 left-0\",\n \"bottom-right\": \"bottom-0 right-0\",\n \"bottom-left\": \"bottom-0 left-0\",\n \"top-center\": \"top-0 left-1/2 -translate-x-1/2\",\n \"bottom-center\": \"bottom-0 left-1/2 -translate-x-1/2\",\n }\n\n return (\n <div\n className={cn(\n \"fixed z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:flex-col md:max-w-[420px]\",\n positionClasses[position]\n )}\n id=\"toast-container\"\n />\n )\n}\n\n// Toast Hook and Context\ninterface ToastOptions extends Omit<ToastProps, 'onClose'> {\n id?: string\n}\n\ninterface ToastContextType {\n toasts: (ToastOptions & { id: string })[]\n toast: (options: ToastOptions) => string\n dismiss: (id: string) => void\n clear: () => void\n}\n\nconst ToastContext = React.createContext<ToastContextType | undefined>(undefined)\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = React.useState<(ToastOptions & { id: string })[]>([])\n\n const toast = React.useCallback((options: ToastOptions) => {\n const id = options.id || Math.random().toString(36).substring(7)\n\n setToasts(prev => [...prev, { ...options, id }])\n\n return id\n }, [])\n\n const dismiss = React.useCallback((id: string) => {\n setToasts(prev => prev.filter(toast => toast.id !== id))\n }, [])\n\n const clear = React.useCallback(() => {\n setToasts([])\n }, [])\n\n return (\n <ToastContext.Provider value={{ toasts, toast, dismiss, clear }}>\n {children}\n <ToastContainer />\n {toasts.map(({ id, ...toastProps }) => (\n <Toast\n key={id}\n {...toastProps}\n onClose={() => dismiss(id)}\n />\n ))}\n </ToastContext.Provider>\n )\n}\n\nexport function useToast() {\n const context = React.useContext(ToastContext)\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\")\n }\n return context\n}\n\n// Convenience functions\nexport const toast = {\n success: (message: string, options?: Omit<ToastOptions, 'variant'>) => {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('toast', {\n detail: { variant: 'success', description: message, ...options }\n }))\n }\n },\n error: (message: string, options?: Omit<ToastOptions, 'variant'>) => {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('toast', {\n detail: { variant: 'error', description: message, ...options }\n }))\n }\n },\n warning: (message: string, options?: Omit<ToastOptions, 'variant'>) => {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('toast', {\n detail: { variant: 'warning', description: message, ...options }\n }))\n }\n },\n info: (message: string, options?: Omit<ToastOptions, 'variant'>) => {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('toast', {\n detail: { variant: 'info', description: message, ...options }\n }))\n }\n },\n}\n\nexport { Toast, ToastContainer, toastVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst modalVariants = cva(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n {\n variants: {\n size: {\n sm: \"max-w-sm\",\n default: \"max-w-lg\",\n lg: \"max-w-2xl\",\n xl: \"max-w-4xl\",\n full: \"max-w-[95vw] max-h-[95vh]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface ModalProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof modalVariants> {\n isOpen: boolean\n onClose: () => void\n title?: string\n description?: string\n showCloseButton?: boolean\n closeOnOverlayClick?: boolean\n closeOnEscape?: boolean\n}\n\nconst Modal = React.forwardRef<HTMLDivElement, ModalProps>(\n ({\n className,\n size,\n isOpen,\n onClose,\n title,\n description,\n showCloseButton = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n children,\n ...props\n }, ref) => {\n const modalRef = React.useRef<HTMLDivElement>(null)\n\n // Handle escape key\n React.useEffect(() => {\n if (!closeOnEscape || !isOpen) return\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose()\n }\n }\n\n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isOpen, closeOnEscape, onClose])\n\n // Handle overlay click\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose()\n }\n }\n\n // Focus management\n React.useEffect(() => {\n if (isOpen) {\n const previousActiveElement = document.activeElement as HTMLElement\n modalRef.current?.focus()\n\n return () => {\n previousActiveElement?.focus()\n }\n }\n }, [isOpen])\n\n // Prevent body scroll when modal is open\n React.useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = 'unset'\n }\n }\n }, [isOpen])\n\n if (!isOpen) return null\n\n return (\n <>\n {/* Overlay */}\n <div\n className=\"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm\"\n onClick={handleOverlayClick}\n />\n\n {/* Modal */}\n <div\n ref={(node) => {\n modalRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={cn(modalVariants({ size }), className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? \"modal-title\" : undefined}\n aria-describedby={description ? \"modal-description\" : undefined}\n tabIndex={-1}\n {...props}\n >\n {/* Close button */}\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n )}\n\n {/* Header */}\n {(title || description) && (\n <div className=\"flex flex-col space-y-1.5\">\n {title && (\n <h2 id=\"modal-title\" className=\"text-lg font-semibold leading-none tracking-tight\">\n {title}\n </h2>\n )}\n {description && (\n <p id=\"modal-description\" className=\"text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1\">\n {children}\n </div>\n </div>\n </>\n )\n }\n)\nModal.displayName = \"Modal\"\n\n// Modal Components for composition\nconst ModalHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left\", className)}\n {...props}\n />\n))\nModalHeader.displayName = \"ModalHeader\"\n\nconst ModalTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n))\nModalTitle.displayName = \"ModalTitle\"\n\nconst ModalDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nModalDescription.displayName = \"ModalDescription\"\n\nconst ModalContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"py-4\", className)} {...props} />\n))\nModalContent.displayName = \"ModalContent\"\n\nconst ModalFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)}\n {...props}\n />\n))\nModalFooter.displayName = \"ModalFooter\"\n\n// Confirmation Modal Hook\ninterface UseConfirmModalOptions {\n title?: string\n description?: string\n confirmText?: string\n cancelText?: string\n variant?: \"default\" | \"destructive\"\n}\n\nexport function useConfirmModal() {\n const [isOpen, setIsOpen] = React.useState(false)\n const [options, setOptions] = React.useState<UseConfirmModalOptions>({})\n const resolveRef = React.useRef<((value: boolean) => void) | null>(null)\n\n const confirm = React.useCallback((opts: UseConfirmModalOptions = {}) => {\n setOptions({\n title: opts.title || \"Are you sure?\",\n description: opts.description || \"This action cannot be undone.\",\n confirmText: opts.confirmText || \"Confirm\",\n cancelText: opts.cancelText || \"Cancel\",\n variant: opts.variant || \"default\",\n ...opts,\n })\n setIsOpen(true)\n\n return new Promise<boolean>((resolve) => {\n resolveRef.current = resolve\n })\n }, [])\n\n const handleConfirm = () => {\n resolveRef.current?.(true)\n setIsOpen(false)\n }\n\n const handleCancel = () => {\n resolveRef.current?.(false)\n setIsOpen(false)\n }\n\n const ConfirmModal = () => (\n <Modal\n isOpen={isOpen}\n onClose={handleCancel}\n title={options.title}\n description={options.description}\n >\n <ModalFooter>\n <button\n onClick={handleCancel}\n className={cn(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2\"\n )}\n >\n {options.cancelText}\n </button>\n <button\n onClick={handleConfirm}\n className={cn(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n options.variant === \"destructive\"\n ? \"bg-destructive text-destructive-foreground hover:bg-destructive/90 h-10 px-4 py-2\"\n : \"bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\n )}\n >\n {options.confirmText}\n </button>\n </ModalFooter>\n </Modal>\n )\n\n return { confirm, ConfirmModal }\n}\n\nexport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalContent,\n ModalFooter,\n modalVariants\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Menu, X, ChevronDown } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst navbarVariants = cva(\n \"flex w-full items-center justify-between border-b bg-background px-4\",\n {\n variants: {\n size: {\n default: \"h-16\",\n sm: \"h-12\",\n lg: \"h-20\",\n },\n variant: {\n default: \"border-border\",\n minimal: \"border-transparent\",\n elevated: \"shadow-sm border-border\",\n },\n },\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n }\n)\n\nexport interface NavItem {\n label: string\n href?: string\n onClick?: () => void\n icon?: React.ReactNode\n badge?: string | number\n disabled?: boolean\n items?: NavItem[] // For dropdown items\n}\n\nexport interface NavbarProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof navbarVariants> {\n logo?: React.ReactNode\n items?: NavItem[]\n actions?: React.ReactNode\n mobileMenuButton?: boolean\n onMobileMenuToggle?: () => void\n isMobileMenuOpen?: boolean\n}\n\nconst Navbar = React.forwardRef<HTMLElement, NavbarProps>(\n ({\n className,\n size,\n variant,\n logo,\n items = [],\n actions,\n mobileMenuButton = true,\n onMobileMenuToggle,\n isMobileMenuOpen = false,\n ...props\n }, ref) => {\n const [openDropdown, setOpenDropdown] = React.useState<string | null>(null)\n\n const handleDropdownToggle = (label: string) => {\n setOpenDropdown(openDropdown === label ? null : label)\n }\n\n const handleItemClick = (item: NavItem) => {\n if (item.disabled) return\n\n if (item.onClick) {\n item.onClick()\n } else if (item.href) {\n window.location.href = item.href\n }\n\n setOpenDropdown(null)\n }\n\n return (\n <nav\n ref={ref}\n className={cn(navbarVariants({ size, variant }), className)}\n {...props}\n >\n {/* Logo Section */}\n <div className=\"flex items-center space-x-4\">\n {logo}\n </div>\n\n {/* Desktop Navigation */}\n <div className=\"hidden md:flex items-center space-x-1\">\n {items.map((item) => (\n <div key={item.label} className=\"relative\">\n {item.items && item.items.length > 0 ? (\n // Dropdown Menu\n <div className=\"relative\">\n <button\n onClick={() => handleDropdownToggle(item.label)}\n className={cn(\n \"flex items-center space-x-1 px-3 py-2 text-sm font-medium rounded-md transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n item.disabled && \"opacity-50 cursor-not-allowed\",\n openDropdown === item.label && \"bg-accent text-accent-foreground\"\n )}\n disabled={item.disabled}\n >\n {item.icon}\n <span>{item.label}</span>\n {item.badge && (\n <span className=\"ml-1 px-2 py-0.5 text-xs bg-primary text-primary-foreground rounded-full\">\n {item.badge}\n </span>\n )}\n <ChevronDown className={cn(\n \"h-4 w-4 transition-transform\",\n openDropdown === item.label && \"rotate-180\"\n )} />\n </button>\n\n {openDropdown === item.label && (\n <div className=\"absolute top-full left-0 mt-1 w-48 rounded-md border bg-popover p-1 shadow-md z-50\">\n {item.items.map((subItem) => (\n <button\n key={subItem.label}\n onClick={() => handleItemClick(subItem)}\n className={cn(\n \"flex w-full items-center space-x-2 px-3 py-2 text-sm rounded-sm transition-colors text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring\",\n subItem.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n disabled={subItem.disabled}\n >\n {subItem.icon}\n <span>{subItem.label}</span>\n {subItem.badge && (\n <span className=\"ml-auto px-2 py-0.5 text-xs bg-primary text-primary-foreground rounded-full\">\n {subItem.badge}\n </span>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n ) : (\n // Regular Menu Item\n <button\n onClick={() => handleItemClick(item)}\n className={cn(\n \"flex items-center space-x-2 px-3 py-2 text-sm font-medium rounded-md transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n disabled={item.disabled}\n >\n {item.icon}\n <span>{item.label}</span>\n {item.badge && (\n <span className=\"ml-1 px-2 py-0.5 text-xs bg-primary text-primary-foreground rounded-full\">\n {item.badge}\n </span>\n )}\n </button>\n )}\n </div>\n ))}\n </div>\n\n {/* Actions Section */}\n <div className=\"flex items-center space-x-2\">\n {actions}\n\n {/* Mobile Menu Button */}\n {mobileMenuButton && (\n <button\n onClick={onMobileMenuToggle}\n className=\"md:hidden p-2 rounded-md hover:bg-accent hover:text-accent-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n >\n {isMobileMenuOpen ? (\n <X className=\"h-5 w-5\" />\n ) : (\n <Menu className=\"h-5 w-5\" />\n )}\n </button>\n )}\n </div>\n\n {/* Mobile Menu */}\n {isMobileMenuOpen && (\n <div className=\"absolute top-full left-0 right-0 md:hidden border-b bg-background shadow-lg z-40\">\n <div className=\"px-4 py-2 space-y-1\">\n {items.map((item) => (\n <div key={item.label}>\n {item.items && item.items.length > 0 ? (\n <div>\n <button\n onClick={() => handleDropdownToggle(item.label)}\n className={cn(\n \"flex w-full items-center justify-between px-3 py-2 text-sm font-medium rounded-md transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground\",\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n disabled={item.disabled}\n >\n <div className=\"flex items-center space-x-2\">\n {item.icon}\n <span>{item.label}</span>\n {item.badge && (\n <span className=\"px-2 py-0.5 text-xs bg-primary text-primary-foreground rounded-full\">\n {item.badge}\n </span>\n )}\n </div>\n <ChevronDown className={cn(\n \"h-4 w-4 transition-transform\",\n openDropdown === item.label && \"rotate-180\"\n )} />\n </button>\n\n {openDropdown === item.label && (\n <div className=\"ml-4 mt-1 space-y-1\">\n {item.items.map((subItem) => (\n <button\n key={subItem.label}\n onClick={() => handleItemClick(subItem)}\n className={cn(\n \"flex w-full items-center space-x-2 px-3 py-2 text-sm rounded-md transition-colors text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n subItem.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n disabled={subItem.disabled}\n >\n {subItem.icon}\n <span>{subItem.label}</span>\n {subItem.badge && (\n <span className=\"ml-auto px-2 py-0.5 text-xs bg-primary text-primary-foreground rounded-full\">\n {subItem.badge}\n </span>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n ) : (\n <button\n onClick={() => handleItemClick(item)}\n className={cn(\n \"flex w-full items-center space-x-2 px-3 py-2 text-sm font-medium rounded-md transition-colors text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n disabled={item.disabled}\n >\n {item.icon}\n <span>{item.label}</span>\n {item.badge && (\n <span className=\"ml-auto px-2 py-0.5 text-xs bg-primary text-primary-foreground rounded-full\">\n {item.badge}\n </span>\n )}\n </button>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n </nav>\n )\n }\n)\nNavbar.displayName = \"Navbar\"\n\nexport { Navbar, navbarVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight, ChevronDown } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst sidebarVariants = cva(\n \"flex flex-col border-r bg-background transition-all duration-300 ease-in-out\",\n {\n variants: {\n variant: {\n default: \"border-border\",\n minimal: \"border-transparent\",\n elevated: \"shadow-lg border-border\",\n },\n size: {\n sm: \"w-16\",\n default: \"w-64\",\n lg: \"w-80\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface SidebarItem {\n label: string\n href?: string\n onClick?: () => void\n icon?: React.ReactNode\n badge?: string | number\n disabled?: boolean\n active?: boolean\n items?: SidebarItem[] // For nested items\n}\n\nexport interface SidebarSection {\n title?: string\n items: SidebarItem[]\n}\n\nexport interface SidebarProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof sidebarVariants> {\n header?: React.ReactNode\n footer?: React.ReactNode\n sections?: SidebarSection[]\n collapsible?: boolean\n collapsed?: boolean\n onCollapse?: (collapsed: boolean) => void\n showCollapseButton?: boolean\n}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(\n ({\n className,\n variant,\n size,\n header,\n footer,\n sections = [],\n collapsible = false,\n collapsed = false,\n onCollapse,\n showCollapseButton = true,\n ...props\n }, ref) => {\n const [expandedItems, setExpandedItems] = React.useState<Set<string>>(new Set())\n const [internalCollapsed, setInternalCollapsed] = React.useState(collapsed)\n\n const isCollapsed = collapsible ? internalCollapsed : false\n\n React.useEffect(() => {\n setInternalCollapsed(collapsed)\n }, [collapsed])\n\n const toggleCollapse = () => {\n const newCollapsed = !internalCollapsed\n setInternalCollapsed(newCollapsed)\n onCollapse?.(newCollapsed)\n }\n\n const toggleExpanded = (label: string) => {\n const newExpanded = new Set(expandedItems)\n if (newExpanded.has(label)) {\n newExpanded.delete(label)\n } else {\n newExpanded.add(label)\n }\n setExpandedItems(newExpanded)\n }\n\n const handleItemClick = (item: SidebarItem) => {\n if (item.disabled) return\n\n if (item.items && item.items.length > 0) {\n toggleExpanded(item.label)\n } else if (item.onClick) {\n item.onClick()\n } else if (item.href) {\n window.location.href = item.href\n }\n }\n\n const renderItem = (item: SidebarItem, level = 0) => {\n const hasChildren = item.items && item.items.length > 0\n const isExpanded = expandedItems.has(item.label)\n\n return (\n <div key={item.label}>\n <button\n onClick={() => handleItemClick(item)}\n className={cn(\n \"flex w-full items-center justify-between px-3 py-2 text-sm font-medium rounded-lg transition-colors group\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n level > 0 && \"ml-4 pl-6\",\n item.active && \"bg-accent text-accent-foreground\",\n item.disabled && \"opacity-50 cursor-not-allowed\",\n isCollapsed && \"justify-center px-2\"\n )}\n disabled={item.disabled}\n title={isCollapsed ? item.label : undefined}\n >\n <div className=\"flex items-center space-x-3\">\n {item.icon && (\n <div className=\"flex-shrink-0\">\n {item.icon}\n </div>\n )}\n {!isCollapsed && (\n <span className=\"truncate\">{item.label}</span>\n )}\n </div>\n\n {!isCollapsed && (\n <div className=\"flex items-center space-x-2\">\n {item.badge && (\n <span className=\"px-2 py-0.5 text-xs bg-primary text-primary-foreground rounded-full\">\n {item.badge}\n </span>\n )}\n {hasChildren && (\n <ChevronDown className={cn(\n \"h-4 w-4 transition-transform\",\n isExpanded && \"rotate-180\"\n )} />\n )}\n </div>\n )}\n </button>\n\n {hasChildren && isExpanded && !isCollapsed && (\n <div className=\"mt-1 space-y-1\">\n {item.items!.map((subItem) => renderItem(subItem, level + 1))}\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n sidebarVariants({\n variant,\n size: isCollapsed ? \"sm\" : size\n }),\n className\n )}\n {...props}\n >\n {/* Header */}\n {header && (\n <div className={cn(\n \"flex items-center p-4 border-b border-border\",\n isCollapsed && \"justify-center px-2\"\n )}>\n {header}\n </div>\n )}\n\n {/* Navigation */}\n <div className=\"flex-1 overflow-y-auto p-4 space-y-2\">\n {sections.map((section, sectionIndex) => (\n <div key={`section-${sectionIndex}`}>\n {section.title && !isCollapsed && (\n <div className=\"px-3 mb-2\">\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n {section.title}\n </h3>\n </div>\n )}\n <div className=\"space-y-1\">\n {section.items.map((item) => renderItem(item))}\n </div>\n {sectionIndex < sections.length - 1 && (\n <div className=\"my-4 border-t border-border\" />\n )}\n </div>\n ))}\n </div>\n\n {/* Footer */}\n {footer && (\n <div className={cn(\n \"p-4 border-t border-border\",\n isCollapsed && \"px-2\"\n )}>\n {footer}\n </div>\n )}\n\n {/* Collapse Button */}\n {collapsible && showCollapseButton && (\n <div className=\"p-2 border-t border-border\">\n <button\n onClick={toggleCollapse}\n className=\"flex w-full items-center justify-center p-2 rounded-lg hover:bg-accent hover:text-accent-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n title={isCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n >\n {isCollapsed ? (\n <ChevronRight className=\"h-4 w-4\" />\n ) : (\n <ChevronLeft className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n )}\n </div>\n )\n }\n)\nSidebar.displayName = \"Sidebar\"\n\n// Sidebar Hook for state management\nexport function useSidebar(defaultCollapsed = false) {\n const [collapsed, setCollapsed] = React.useState(defaultCollapsed)\n\n const toggle = React.useCallback(() => {\n setCollapsed(prev => !prev)\n }, [])\n\n const expand = React.useCallback(() => {\n setCollapsed(false)\n }, [])\n\n const collapse = React.useCallback(() => {\n setCollapsed(true)\n }, [])\n\n return {\n collapsed,\n toggle,\n expand,\n collapse,\n setCollapsed,\n }\n}\n\nexport { Sidebar, sidebarVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst formVariants = cva(\"space-y-6\", {\n variants: {\n variant: {\n default: \"\",\n card: \"p-6 border border-border rounded-lg bg-card\",\n inline: \"space-y-0 flex items-end space-x-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n})\n\nexport interface FormFieldError {\n message: string\n type?: string\n}\n\nexport interface FormState {\n [key: string]: any\n}\n\nexport interface FormErrors {\n [key: string]: FormFieldError | undefined\n}\n\nexport interface FormContextType {\n values: FormState\n errors: FormErrors\n touched: { [key: string]: boolean }\n isSubmitting: boolean\n setValue: (name: string, value: any) => void\n setError: (name: string, error: FormFieldError | undefined) => void\n setTouched: (name: string, touched?: boolean) => void\n validateField: (name: string) => Promise<boolean>\n resetForm: () => void\n}\n\nconst FormContext = React.createContext<FormContextType | undefined>(undefined)\n\nexport function useFormContext() {\n const context = React.useContext(FormContext)\n if (!context) {\n throw new Error(\"useFormContext must be used within a Form component\")\n }\n return context\n}\n\nexport interface ValidationRule {\n required?: boolean | string\n minLength?: number | { value: number; message: string }\n maxLength?: number | { value: number; message: string }\n pattern?: RegExp | { value: RegExp; message: string }\n validate?: (value: any, values: FormState) => string | boolean | undefined\n}\n\nexport interface FormProps\n extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit'>,\n VariantProps<typeof formVariants> {\n initialValues?: FormState\n validationRules?: { [key: string]: ValidationRule }\n onFormSubmit?: (values: FormState, { setSubmitting, setErrors }: {\n setSubmitting: (submitting: boolean) => void\n setErrors: (errors: FormErrors) => void\n }) => void | Promise<void>\n validateOnChange?: boolean\n validateOnBlur?: boolean\n}\n\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({\n className,\n variant,\n initialValues = {},\n validationRules = {},\n onFormSubmit,\n validateOnChange = true,\n validateOnBlur = true,\n children,\n ...props\n }, ref) => {\n const [values, setValues] = React.useState<FormState>(initialValues)\n const [errors, setErrors] = React.useState<FormErrors>({})\n const [touched, setTouchedState] = React.useState<{ [key: string]: boolean }>({})\n const [isSubmitting, setIsSubmitting] = React.useState(false)\n\n const validateField = React.useCallback(async (name: string): Promise<boolean> => {\n const rule = validationRules[name]\n if (!rule) return true\n\n const value = values[name]\n let error: FormFieldError | undefined\n\n // Required validation\n if (rule.required) {\n const isRequired = typeof rule.required === 'boolean' ? rule.required : true\n const message = typeof rule.required === 'string' ? rule.required : `${name} is required`\n\n if (isRequired && (value === undefined || value === null || value === '')) {\n error = { message, type: 'required' }\n }\n }\n\n // MinLength validation\n if (!error && rule.minLength && typeof value === 'string') {\n const minLength = typeof rule.minLength === 'number' ? rule.minLength : rule.minLength.value\n const message = typeof rule.minLength === 'object' ? rule.minLength.message : `${name} must be at least ${minLength} characters`\n\n if (value.length < minLength) {\n error = { message, type: 'minLength' }\n }\n }\n\n // MaxLength validation\n if (!error && rule.maxLength && typeof value === 'string') {\n const maxLength = typeof rule.maxLength === 'number' ? rule.maxLength : rule.maxLength.value\n const message = typeof rule.maxLength === 'object' ? rule.maxLength.message : `${name} must be no more than ${maxLength} characters`\n\n if (value.length > maxLength) {\n error = { message, type: 'maxLength' }\n }\n }\n\n // Pattern validation\n if (!error && rule.pattern && typeof value === 'string') {\n const pattern = rule.pattern instanceof RegExp ? rule.pattern : rule.pattern.value\n const message = rule.pattern instanceof RegExp ? `${name} format is invalid` : rule.pattern.message\n\n if (!pattern.test(value)) {\n error = { message, type: 'pattern' }\n }\n }\n\n // Custom validation\n if (!error && rule.validate) {\n const result = await rule.validate(value, values)\n if (typeof result === 'string') {\n error = { message: result, type: 'custom' }\n } else if (result === false) {\n error = { message: `${name} is invalid`, type: 'custom' }\n }\n }\n\n setErrors(prev => ({ ...prev, [name]: error }))\n return !error\n }, [values, validationRules])\n\n const setValue = React.useCallback((name: string, value: any) => {\n setValues(prev => ({ ...prev, [name]: value }))\n\n if (validateOnChange && touched[name]) {\n // Validate after state update\n setTimeout(() => validateField(name), 0)\n }\n }, [validateOnChange, touched, validateField])\n\n const setError = React.useCallback((name: string, error: FormFieldError | undefined) => {\n setErrors(prev => ({ ...prev, [name]: error }))\n }, [])\n\n const setTouched = React.useCallback((name: string, isTouched = true) => {\n setTouchedState(prev => ({ ...prev, [name]: isTouched }))\n\n if (validateOnBlur && isTouched) {\n validateField(name)\n }\n }, [validateOnBlur, validateField])\n\n const resetForm = React.useCallback(() => {\n setValues(initialValues)\n setErrors({})\n setTouchedState({})\n setIsSubmitting(false)\n }, [initialValues])\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n\n if (!onFormSubmit || isSubmitting) return\n\n setIsSubmitting(true)\n\n // Validate all fields\n const fieldNames = Object.keys(validationRules)\n const validationResults = await Promise.all(\n fieldNames.map(name => validateField(name))\n )\n\n const hasErrors = validationResults.some(result => !result)\n\n if (hasErrors) {\n setIsSubmitting(false)\n return\n }\n\n try {\n await onFormSubmit(values, {\n setSubmitting: setIsSubmitting,\n setErrors: (errors: FormErrors) => setErrors(errors)\n })\n } catch (error) {\n console.error('Form submission error:', error)\n } finally {\n setIsSubmitting(false)\n }\n }\n\n const contextValue: FormContextType = {\n values,\n errors,\n touched,\n isSubmitting,\n setValue,\n setError,\n setTouched,\n validateField,\n resetForm,\n }\n\n return (\n <FormContext.Provider value={contextValue}>\n <form\n ref={ref}\n className={cn(formVariants({ variant }), className)}\n onSubmit={handleSubmit}\n {...props}\n >\n {children}\n </form>\n </FormContext.Provider>\n )\n }\n)\nForm.displayName = \"Form\"\n\n// Form Field Component\nexport interface FormFieldProps {\n name: string\n children: (field: {\n value: any\n onChange: (value: any) => void\n onBlur: () => void\n error?: FormFieldError\n touched: boolean\n }) => React.ReactNode\n}\n\nconst FormField: React.FC<FormFieldProps> = ({ name, children }) => {\n const { values, errors, touched, setValue, setTouched } = useFormContext()\n\n const handleChange = (value: any) => {\n setValue(name, value)\n }\n\n const handleBlur = () => {\n setTouched(name, true)\n }\n\n return (\n <>\n {children({\n value: values[name] ?? '',\n onChange: handleChange,\n onBlur: handleBlur,\n error: errors[name],\n touched: !!touched[name],\n })}\n </>\n )\n}\n\n// Form Submit Button\nexport interface FormSubmitProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n loadingText?: string\n}\n\nconst FormSubmit = React.forwardRef<HTMLButtonElement, FormSubmitProps>(\n ({ children, loadingText = \"Submitting...\", disabled, ...props }, ref) => {\n const { isSubmitting } = useFormContext()\n\n return (\n <button\n ref={ref}\n type=\"submit\"\n disabled={disabled || isSubmitting}\n {...props}\n >\n {isSubmitting ? loadingText : children}\n </button>\n )\n }\n)\nFormSubmit.displayName = \"FormSubmit\"\n\nexport { Form, FormField, FormSubmit, formVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { AlertCircle, CheckCircle2, Info, XCircle } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n warning:\n \"border-yellow-200 bg-yellow-50 text-yellow-800 dark:border-yellow-900/50 dark:bg-yellow-900/20 dark:text-yellow-200 [&>svg]:text-yellow-600 dark:[&>svg]:text-yellow-400\",\n success:\n \"border-green-200 bg-green-50 text-green-800 dark:border-green-900/50 dark:bg-green-900/20 dark:text-green-200 [&>svg]:text-green-600 dark:[&>svg]:text-green-400\",\n info:\n \"border-blue-200 bg-blue-50 text-blue-800 dark:border-blue-900/50 dark:bg-blue-900/20 dark:text-blue-200 [&>svg]:text-blue-600 dark:[&>svg]:text-blue-400\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\n// Alert icons for different variants\nconst AlertIcon = ({ variant }: { variant?: \"default\" | \"destructive\" | \"warning\" | \"success\" | \"info\" }) => {\n switch (variant) {\n case \"destructive\":\n return <XCircle className=\"h-4 w-4\" />\n case \"warning\":\n return <AlertCircle className=\"h-4 w-4\" />\n case \"success\":\n return <CheckCircle2 className=\"h-4 w-4\" />\n case \"info\":\n return <Info className=\"h-4 w-4\" />\n default:\n return <Info className=\"h-4 w-4\" />\n }\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertIcon }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"@/lib/utils\"\n\nconst loaderVariants = cva(\"animate-spin inline-block border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]\", {\n variants: {\n size: {\n xs: \"h-3 w-3 border-2\",\n sm: \"h-4 w-4 border-2\",\n md: \"h-6 w-6 border-2\",\n lg: \"h-8 w-8 border-[3px]\",\n xl: \"h-12 w-12 border-4\",\n },\n variant: {\n default: \"text-primary\",\n secondary: \"text-secondary\",\n muted: \"text-muted-foreground\",\n white: \"text-white\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n})\n\nexport interface LoaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof loaderVariants> {\n text?: string\n}\n\nconst Loader = React.forwardRef<HTMLDivElement, LoaderProps>(\n ({ className, size, variant, text, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-2\", className)}\n role=\"status\"\n aria-label={text || \"Loading\"}\n {...props}\n >\n <div\n className={cn(loaderVariants({ size, variant }), \"rounded-full\")}\n />\n {text && <span className=\"text-sm text-muted-foreground\">{text}</span>}\n </div>\n )\n }\n)\nLoader.displayName = \"Loader\"\n\n// Skeleton loader for content placeholders\nconst skeletonVariants = cva(\"animate-pulse bg-muted rounded\", {\n variants: {\n variant: {\n default: \"bg-muted\",\n card: \"bg-muted/50\",\n text: \"bg-muted/60\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n})\n\nexport interface SkeletonProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof skeletonVariants> { }\n\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, variant, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(skeletonVariants({ variant }), className)}\n {...props}\n />\n )\n }\n)\nSkeleton.displayName = \"Skeleton\"\n\n// Full page loader component\nexport interface PageLoaderProps {\n text?: string\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\nconst PageLoader: React.FC<PageLoaderProps> = ({ text = \"Loading...\", size = \"lg\" }) => {\n return (\n <div className=\"flex min-h-[400px] w-full items-center justify-center\">\n <Loader size={size} text={text} />\n </div>\n )\n}\n\nexport { Loader, Skeleton, PageLoader }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\n\nconst chipVariants = cva(\n \"inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground border border-input hover:bg-accent hover:text-accent-foreground\",\n success: \"bg-green-100 text-green-800 hover:bg-green-200 dark:bg-green-900/20 dark:text-green-400 dark:hover:bg-green-900/30\",\n warning: \"bg-yellow-100 text-yellow-800 hover:bg-yellow-200 dark:bg-yellow-900/20 dark:text-yellow-400 dark:hover:bg-yellow-900/30\",\n info: \"bg-blue-100 text-blue-800 hover:bg-blue-200 dark:bg-blue-900/20 dark:text-blue-400 dark:hover:bg-blue-900/30\",\n },\n size: {\n sm: \"h-5 px-2 text-xs\",\n md: \"h-6 px-2.5 text-xs\",\n lg: \"h-7 px-3 text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nexport interface ChipProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof chipVariants> {\n onRemove?: () => void\n removable?: boolean\n disabled?: boolean\n}\n\nconst Chip = React.forwardRef<HTMLDivElement, ChipProps>(\n ({ className, variant, size, onRemove, removable = false, disabled = false, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n chipVariants({ variant, size }),\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n <span className=\"truncate\">{children}</span>\n {removable && !disabled && (\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"ml-1 inline-flex h-3 w-3 items-center justify-center rounded-full hover:bg-black/20 dark:hover:bg-white/20 transition-colors\"\n aria-label=\"Remove\"\n >\n <X className=\"h-2 w-2\" />\n </button>\n )}\n </div>\n )\n }\n)\nChip.displayName = \"Chip\"\n\n// Chip Group for managing multiple chips\nexport interface ChipGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n chips: Array<{\n id: string\n label: string\n variant?: ChipProps[\"variant\"]\n removable?: boolean\n }>\n onRemove?: (id: string) => void\n maxVisible?: number\n}\n\nconst ChipGroup = React.forwardRef<HTMLDivElement, ChipGroupProps>(\n ({ className, chips, onRemove, maxVisible, ...props }, ref) => {\n const visibleChips = maxVisible ? chips.slice(0, maxVisible) : chips\n const hiddenCount = maxVisible ? Math.max(0, chips.length - maxVisible) : 0\n\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-wrap items-center gap-1\", className)}\n {...props}\n >\n {visibleChips.map((chip) => (\n <Chip\n key={chip.id}\n variant={chip.variant}\n removable={chip.removable}\n onRemove={() => onRemove?.(chip.id)}\n >\n {chip.label}\n </Chip>\n ))}\n {hiddenCount > 0 && (\n <Chip variant=\"outline\" size=\"sm\">\n +{hiddenCount} more\n </Chip>\n )}\n </div>\n )\n }\n)\nChipGroup.displayName = \"ChipGroup\"\n\nexport { Chip, ChipGroup }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"./button\"\n\nconst paginationVariants = cva(\n \"flex items-center justify-center space-x-2\",\n {\n variants: {\n size: {\n default: \"\",\n sm: \"[&_button]:h-8 [&_button]:px-2 [&_button]:text-xs\",\n lg: \"[&_button]:h-12 [&_button]:px-4 [&_button]:text-base\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface PaginationProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof paginationVariants> {\n currentPage: number\n totalPages: number\n onPageChange: (page: number) => void\n showFirstLast?: boolean\n showPrevNext?: boolean\n maxVisiblePages?: number\n}\n\nconst Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n ({\n className,\n size,\n currentPage,\n totalPages,\n onPageChange,\n showFirstLast = true,\n showPrevNext = true,\n maxVisiblePages = 5,\n ...props\n }, ref) => {\n const getVisiblePages = () => {\n const half = Math.floor(maxVisiblePages / 2)\n let start = Math.max(currentPage - half, 1)\n let end = Math.min(start + maxVisiblePages - 1, totalPages)\n\n if (end - start + 1 < maxVisiblePages) {\n start = Math.max(end - maxVisiblePages + 1, 1)\n }\n\n return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n }\n\n const visiblePages = getVisiblePages()\n const isFirstPage = currentPage === 1\n const isLastPage = currentPage === totalPages\n\n return (\n <nav\n ref={ref}\n className={cn(paginationVariants({ size }), className)}\n role=\"navigation\"\n aria-label=\"Pagination\"\n {...props}\n >\n {showFirstLast && !isFirstPage && (\n <Button\n variant=\"outline\"\n size={size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"default\"}\n onClick={() => onPageChange(1)}\n aria-label=\"Go to first page\"\n >\n First\n </Button>\n )}\n\n {showPrevNext && !isFirstPage && (\n <Button\n variant=\"outline\"\n size={size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"default\"}\n onClick={() => onPageChange(currentPage - 1)}\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n )}\n\n {visiblePages[0] > 1 && (\n <>\n <Button\n variant=\"outline\"\n size={size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"default\"}\n onClick={() => onPageChange(1)}\n >\n 1\n </Button>\n {visiblePages[0] > 2 && (\n <span className=\"px-2 text-muted-foreground\">...</span>\n )}\n </>\n )}\n\n {visiblePages.map((page) => (\n <Button\n key={page}\n variant={page === currentPage ? \"default\" : \"outline\"}\n size={size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"default\"}\n onClick={() => onPageChange(page)}\n aria-label={`Go to page ${page}`}\n aria-current={page === currentPage ? \"page\" : undefined}\n >\n {page}\n </Button>\n ))}\n\n {visiblePages[visiblePages.length - 1] < totalPages && (\n <>\n {visiblePages[visiblePages.length - 1] < totalPages - 1 && (\n <span className=\"px-2 text-muted-foreground\">...</span>\n )}\n <Button\n variant=\"outline\"\n size={size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"default\"}\n onClick={() => onPageChange(totalPages)}\n >\n {totalPages}\n </Button>\n </>\n )}\n\n {showPrevNext && !isLastPage && (\n <Button\n variant=\"outline\"\n size={size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"default\"}\n onClick={() => onPageChange(currentPage + 1)}\n aria-label=\"Go to next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n )}\n\n {showFirstLast && !isLastPage && (\n <Button\n variant=\"outline\"\n size={size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"default\"}\n onClick={() => onPageChange(totalPages)}\n aria-label=\"Go to last page\"\n >\n Last\n </Button>\n )}\n </nav>\n )\n }\n)\nPagination.displayName = \"Pagination\"\n\n// Simple pagination info component\nexport interface PaginationInfoProps {\n currentPage: number\n totalPages: number\n totalItems: number\n itemsPerPage: number\n className?: string\n}\n\nconst PaginationInfo: React.FC<PaginationInfoProps> = ({\n currentPage,\n totalItems,\n itemsPerPage,\n className,\n}) => {\n const startItem = (currentPage - 1) * itemsPerPage + 1\n const endItem = Math.min(currentPage * itemsPerPage, totalItems)\n\n return (\n <div className={cn(\"text-sm text-muted-foreground\", className)}>\n Showing {startItem} to {endItem} of {totalItems} results\n </div>\n )\n}\n\nexport { Pagination, PaginationInfo, paginationVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X, Search, Filter } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Select } from \"./select\"\nimport { Chip } from \"./chip\"\n\nconst searchBarVariants = cva(\n \"flex items-center space-x-2 p-4 bg-background border rounded-lg\",\n {\n variants: {\n variant: {\n default: \"border-border\",\n elevated: \"border-border shadow-md\",\n ghost: \"border-transparent bg-transparent p-2\",\n },\n size: {\n sm: \"p-2 space-x-1\",\n md: \"p-4 space-x-2\",\n lg: \"p-6 space-x-3\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nexport interface SearchFilter {\n id: string\n label: string\n value: string\n type: \"text\" | \"select\" | \"date\" | \"number\"\n options?: Array<{ value: string; label: string }>\n placeholder?: string\n}\n\nexport interface ActiveFilter {\n id: string\n label: string\n value: string\n display: string\n}\n\nexport interface SearchBarProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof searchBarVariants> {\n searchValue: string\n onSearchChange: (value: string) => void\n placeholder?: string\n filters?: SearchFilter[]\n activeFilters?: ActiveFilter[]\n onFilterAdd?: (filter: ActiveFilter) => void\n onFilterRemove?: (filterId: string) => void\n onClearAll?: () => void\n showFilterButton?: boolean\n showClearButton?: boolean\n}\n\nconst SearchBar = React.forwardRef<HTMLDivElement, SearchBarProps>(\n ({\n className,\n variant,\n size,\n searchValue,\n onSearchChange,\n placeholder = \"Search...\",\n filters = [],\n activeFilters = [],\n onFilterAdd,\n onFilterRemove,\n onClearAll,\n showFilterButton = true,\n showClearButton = true,\n ...props\n }, ref) => {\n const [isFilterOpen, setIsFilterOpen] = React.useState(false)\n const [selectedFilterId, setSelectedFilterId] = React.useState<string>(\"\")\n const [filterValue, setFilterValue] = React.useState<string>(\"\")\n\n const selectedFilter = filters.find(f => f.id === selectedFilterId)\n\n const handleAddFilter = () => {\n if (selectedFilter && filterValue.trim() && onFilterAdd) {\n const display = selectedFilter.type === \"select\"\n ? selectedFilter.options?.find(opt => opt.value === filterValue)?.label || filterValue\n : filterValue\n\n onFilterAdd({\n id: `${selectedFilter.id}-${Date.now()}`,\n label: selectedFilter.label,\n value: filterValue,\n display: `${selectedFilter.label}: ${display}`,\n })\n\n setSelectedFilterId(\"\")\n setFilterValue(\"\")\n setIsFilterOpen(false)\n }\n }\n\n return (\n <div\n ref={ref}\n className={cn(searchBarVariants({ variant, size }), \"flex-col space-y-3\", className)}\n {...props}\n >\n {/* Main search bar */}\n <div className=\"flex items-center space-x-2 w-full\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n value={searchValue}\n onChange={(e) => onSearchChange(e.target.value)}\n placeholder={placeholder}\n className=\"pl-10\"\n />\n </div>\n\n {showFilterButton && filters.length > 0 && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setIsFilterOpen(!isFilterOpen)}\n className=\"shrink-0\"\n >\n <Filter className=\"h-4 w-4 mr-2\" />\n Filter\n </Button>\n )}\n\n {showClearButton && (activeFilters.length > 0 || searchValue) && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n onSearchChange(\"\")\n onClearAll?.()\n }}\n className=\"shrink-0\"\n >\n <X className=\"h-4 w-4 mr-2\" />\n Clear\n </Button>\n )}\n </div>\n\n {/* Active filters */}\n {activeFilters.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {activeFilters.map((filter) => (\n <Chip\n key={filter.id}\n variant=\"outline\"\n size=\"sm\"\n removable\n onRemove={() => onFilterRemove?.(filter.id)}\n >\n {filter.display}\n </Chip>\n ))}\n </div>\n )}\n\n {/* Filter controls */}\n {isFilterOpen && (\n <div className=\"flex items-end space-x-2 p-3 bg-muted/50 rounded-md\">\n <div className=\"flex-1\">\n <label className=\"text-sm font-medium mb-1 block\">Filter by</label>\n <Select\n options={filters.map(f => ({ value: f.id, label: f.label }))}\n value={selectedFilterId}\n onValueChange={setSelectedFilterId}\n placeholder=\"Select filter...\"\n />\n </div>\n\n {selectedFilter && (\n <div className=\"flex-1\">\n <label className=\"text-sm font-medium mb-1 block\">Value</label>\n {selectedFilter.type === \"select\" ? (\n <Select\n options={selectedFilter.options || []}\n value={filterValue}\n onValueChange={setFilterValue}\n placeholder={selectedFilter.placeholder || \"Select value...\"}\n />\n ) : (\n <Input\n type={selectedFilter.type === \"date\" ? \"date\" : selectedFilter.type === \"number\" ? \"number\" : \"text\"}\n value={filterValue}\n onChange={(e) => setFilterValue(e.target.value)}\n placeholder={selectedFilter.placeholder || \"Enter value...\"}\n />\n )}\n </div>\n )}\n\n <Button\n onClick={handleAddFilter}\n disabled={!selectedFilter || !filterValue.trim()}\n size=\"sm\"\n >\n Add Filter\n </Button>\n </div>\n )}\n </div>\n )\n }\n)\nSearchBar.displayName = \"SearchBar\"\n\nexport { SearchBar, searchBarVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { TrendingUp, TrendingDown, Minus, DollarSign, Users, Activity, Eye } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"./card\"\n\nconst statCardVariants = cva(\n \"transition-all duration-200 hover:shadow-md\",\n {\n variants: {\n variant: {\n default: \"\",\n accent: \"border-l-4 border-l-primary\",\n gradient: \"bg-gradient-to-br from-primary/5 to-primary/10\",\n elevated: \"shadow-lg border-0\",\n },\n size: {\n sm: \"[&_.stat-value]:text-xl [&_.stat-label]:text-xs\",\n md: \"[&_.stat-value]:text-2xl [&_.stat-label]:text-sm\",\n lg: \"[&_.stat-value]:text-3xl [&_.stat-label]:text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nexport interface StatCardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof statCardVariants> {\n title: string\n value: string | number\n change?: {\n value: number\n label?: string\n period?: string\n }\n icon?: React.ReactNode\n trend?: \"up\" | \"down\" | \"neutral\"\n format?: \"number\" | \"currency\" | \"percentage\"\n loading?: boolean\n}\n\nconst StatCard = React.forwardRef<HTMLDivElement, StatCardProps>(\n ({\n className,\n variant,\n size,\n title,\n value,\n change,\n icon,\n trend,\n format = \"number\",\n loading = false,\n ...props\n }, ref) => {\n const formatValue = (val: string | number) => {\n const numValue = typeof val === \"string\" ? parseFloat(val) : val\n\n if (isNaN(numValue)) return val\n\n switch (format) {\n case \"currency\":\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n }).format(numValue)\n case \"percentage\":\n return `${numValue}%`\n case \"number\":\n default:\n return new Intl.NumberFormat(\"en-US\").format(numValue)\n }\n }\n\n const getTrendIcon = () => {\n if (!change) return null\n\n const trendType = trend || (change.value > 0 ? \"up\" : change.value < 0 ? \"down\" : \"neutral\")\n\n switch (trendType) {\n case \"up\":\n return <TrendingUp className=\"h-4 w-4 text-green-500\" />\n case \"down\":\n return <TrendingDown className=\"h-4 w-4 text-red-500\" />\n case \"neutral\":\n default:\n return <Minus className=\"h-4 w-4 text-muted-foreground\" />\n }\n }\n\n const getTrendColor = () => {\n if (!change) return \"text-muted-foreground\"\n\n const trendType = trend || (change.value > 0 ? \"up\" : change.value < 0 ? \"down\" : \"neutral\")\n\n switch (trendType) {\n case \"up\":\n return \"text-green-600\"\n case \"down\":\n return \"text-red-600\"\n case \"neutral\":\n default:\n return \"text-muted-foreground\"\n }\n }\n\n if (loading) {\n return (\n <Card ref={ref} className={cn(statCardVariants({ variant, size }), className)} {...props}>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <div className=\"animate-pulse bg-muted h-4 w-20 rounded\" />\n {icon && <div className=\"animate-pulse bg-muted h-6 w-6 rounded\" />}\n </CardHeader>\n <CardContent>\n <div className=\"animate-pulse bg-muted h-8 w-24 rounded mb-2\" />\n <div className=\"animate-pulse bg-muted h-3 w-16 rounded\" />\n </CardContent>\n </Card>\n )\n }\n\n return (\n <Card ref={ref} className={cn(statCardVariants({ variant, size }), className)} {...props}>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"stat-label text-sm font-medium\">{title}</CardTitle>\n {icon && <div className=\"text-muted-foreground\">{icon}</div>}\n </CardHeader>\n <CardContent>\n <div className=\"stat-value text-2xl font-bold\">{formatValue(value)}</div>\n {change && (\n <div className=\"flex items-center space-x-1 text-xs mt-1\">\n {getTrendIcon()}\n <span className={getTrendColor()}>\n {change.value > 0 ? \"+\" : \"\"}{change.value}\n {change.label && ` ${change.label}`}\n </span>\n {change.period && (\n <span className=\"text-muted-foreground\">from {change.period}</span>\n )}\n </div>\n )}\n </CardContent>\n </Card>\n )\n }\n)\nStatCard.displayName = \"StatCard\"\n\n// Predefined stat card types for common use cases\nexport interface MetricCardProps extends Omit<StatCardProps, 'icon' | 'format'> {\n type: 'revenue' | 'users' | 'conversion' | 'views' | 'custom'\n}\n\nconst MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\n ({ type, ...props }, ref) => {\n const getIconAndFormat = () => {\n switch (type) {\n case 'revenue':\n return { icon: <DollarSign className=\"h-4 w-4\" />, format: 'currency' as const }\n case 'users':\n return { icon: <Users className=\"h-4 w-4\" />, format: 'number' as const }\n case 'conversion':\n return { icon: <Activity className=\"h-4 w-4\" />, format: 'percentage' as const }\n case 'views':\n return { icon: <Eye className=\"h-4 w-4\" />, format: 'number' as const }\n case 'custom':\n default:\n return { icon: undefined, format: 'number' as const }\n }\n }\n\n const { icon, format } = getIconAndFormat()\n\n return (\n <StatCard\n ref={ref}\n icon={icon}\n format={format}\n {...props}\n />\n )\n }\n)\nMetricCard.displayName = \"MetricCard\"\n\nexport { StatCard, MetricCard, statCardVariants }\n","\"use client\"\n\nimport { useState } from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\n\ninterface CodeBlockProps {\n children: string\n className?: string\n}\n\nexport type { CodeBlockProps }\n\nexport function CodeBlock({ children, className = '' }: CodeBlockProps) {\n const [copied, setCopied] = useState(false)\n\n const copyToClipboard = async () => {\n try {\n await navigator.clipboard.writeText(children)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy text: ', err)\n }\n }\n\n return (\n <div className={`relative bg-muted p-4 rounded-lg text-sm overflow-x-auto ${className}`}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-2 right-2 h-8 w-8 p-0\"\n onClick={copyToClipboard}\n >\n {copied ? (\n <Check className=\"h-4 w-4 text-green-600\" />\n ) : (\n <Copy className=\"h-4 w-4\" />\n )}\n </Button>\n <pre>\n <code>{children}</code>\n </pre>\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ThemeProvider as NextThemesProvider } from \"next-themes\"\n\ninterface ThemeProviderProps {\n children: React.ReactNode\n [key: string]: any\n}\n\nexport function ThemeProvider({ children, ...props }: ThemeProviderProps) {\n return <NextThemesProvider {...props}>{children}</NextThemesProvider>\n}\n"],"mappings":"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","names":["React","React","cva","cva","React","React","cva","cva","React","cva","cva","React","cva","cva","React","ChevronDown","ChevronDown","React","cva","cva","toast","React","X","cva","cva","X","React","X","ChevronDown","cva","cva","ChevronDown","X","React","ChevronDown","cva","cva","ChevronDown","React","cva","cva","errors","React","Check","ChevronRight","ChevronRight","Check","React","cva","AlertCircle","Info","cva","AlertCircle","Info","React","cva","cva","React","cva","X","cva","X","React","cva","ChevronLeft","ChevronRight","cva","ChevronLeft","ChevronRight","React","cva","X","cva","X","React","cva","cva","useState","Check","useState","Check","React"]}