UNPKG

niva-ui

Version:

A beautiful, minimalistic React + Tailwind UI framework for SaaS applications

1 lines 176 kB
{"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":";;;AAAA,YAAYA,YAAW;AACvB,SAAS,YAAY;AACrB,SAAS,WAA8B;;;ACFvC,SAA0B,YAAY;AACtC,SAAS,eAAe;AAMjB,SAAS,MAAM,QAAsB;AACxC,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC/B;;;ADHA,IAAM,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SAAS;AAAA,QACT,aACI;AAAA,QACJ,SACI;AAAA,QACJ,WACI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACF,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAQA,IAAM,SAAe;AAAA,EACjB,CAAC,EAAE,WAAW,SAAS,MAAM,UAAU,OAAO,GAAG,MAAM,GAAG,QAAQ;AAC9D,UAAM,OAAO,UAAU,OAAO;AAC9B,WACI;AAAA,MAAC;AAAA;AAAA,QACG,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,QAC1D;AAAA,QACC,GAAG;AAAA;AAAA,IACR;AAAA,EAER;AACJ;AACA,OAAO,cAAc;;;AErDrB,YAAYC,YAAW;AACvB,SAAS,OAAAC,YAA8B;AAIvC,IAAM,gBAAgBC;AAAA,EAClB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SACI;AAAA,QACJ,WACI;AAAA,QACJ,aACI;AAAA,QACJ,SAAS;AAAA,MACb;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,IACb;AAAA,EACJ;AACJ;AAMA,SAAS,MAAM,EAAE,WAAW,SAAS,GAAG,MAAM,GAAe;AACzD,SACI,qCAAC,SAAI,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS,GAAI,GAAG,OAAO;AAE9E;;;ACjCA,YAAYC,YAAW;AAIvB,IAAM,OAAa,kBAGjB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH;AACD,KAAK,cAAc;AAEnB,IAAM,aAAmB,kBAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACR,CACH;AACD,WAAW,cAAc;AAEzB,IAAM,YAAkB,kBAGtB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH;AACD,UAAU,cAAc;AAExB,IAAM,kBAAwB,kBAG5B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACR,CACH;AACD,gBAAgB,cAAc;AAE9B,IAAM,cAAoB,kBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,qCAAC,SAAI,KAAU,WAAW,GAAG,YAAY,SAAS,GAAI,GAAG,OAAO,CACnE;AACD,YAAY,cAAc;AAE1B,IAAM,aAAmB,kBAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,8BAA8B,SAAS;AAAA,IACpD,GAAG;AAAA;AACR,CACH;AACD,WAAW,cAAc;;;AC1EzB,YAAYC,YAAW;AACvB,SAAS,OAAAC,YAA8B;AAGvC,IAAM,gBAAgBC;AAAA,EAClB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SAAS;AAAA,QACT,aAAa;AAAA,QACb,OAAO;AAAA,MACX;AAAA,MACA,MAAM;AAAA,QACF,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,MACR;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAWA,IAAM,QAAc;AAAA,EAChB,CAAC,EAAE,WAAW,SAAS,MAAM,MAAM,OAAO,OAAO,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ;AAC/E,WACI,qCAAC,SAAI,WAAU,yBACV,SACG,qCAAC,WAAM,WAAU,gGACZ,KACL,GAEJ,qCAAC,SAAI,WAAU,cACV,QACG,qCAAC,SAAI,WAAU,oEACV,IACL,GAEJ;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW;AAAA,UACP,cAAc,EAAE,SAAS,MAAM,UAAU,CAAC;AAAA,UAC1C,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,SAAS;AAAA,QACb;AAAA,QACA;AAAA,QACC,GAAG;AAAA;AAAA,IACR,GACC,UACG,qCAAC,SAAI,WAAU,qEACV,MACL,CAER,GACC,SACG,qCAAC,OAAE,WAAU,8BAA4B,KAAM,CAEvD;AAAA,EAER;AACJ;AACA,MAAM,cAAc;;;AC1EpB,YAAYC,YAAW;AACvB,SAAS,aAAa,aAAa;AACnC,SAAS,OAAAC,YAA8B;AAGvC,IAAM,iBAAiBC;AAAA,EACnB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SAAS;AAAA,QACT,aAAa;AAAA,MACjB;AAAA,MACA,MAAM;AAAA,QACF,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,MACR;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAoBA,IAAM,SAAe;AAAA,EACjB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,GAAG;AAAA,EACP,GAAG,QAAQ;AACP,UAAM,CAAC,QAAQ,SAAS,IAAU,gBAAS,KAAK;AAChD,UAAM,CAAC,YAAY,aAAa,IAAU,gBAAS,EAAE;AACrD,UAAM,cAAoB,cAAuB,IAAI;AAErD,UAAM,iBAAiB,QAAQ,KAAK,YAAU,OAAO,UAAU,KAAK;AAEpE,UAAM,kBAAwB,eAAQ,MAAM;AACxC,UAAI,CAAC,cAAc,CAAC,WAAY,QAAO;AACvC,aAAO,QAAQ;AAAA,QAAO,YAClB,OAAO,MAAM,YAAY,EAAE,SAAS,WAAW,YAAY,CAAC;AAAA,MAChE;AAAA,IACJ,GAAG,CAAC,SAAS,YAAY,UAAU,CAAC;AAEpC,IAAM,iBAAU,MAAM;AAClB,YAAM,qBAAqB,CAAC,UAAsB;AAC9C,YAAI,YAAY,WAAW,CAAC,YAAY,QAAQ,SAAS,MAAM,MAAc,GAAG;AAC5E,oBAAU,KAAK;AACf,wBAAc,EAAE;AAAA,QACpB;AAAA,MACJ;AAEA,eAAS,iBAAiB,aAAa,kBAAkB;AACzD,aAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,IAC7E,GAAG,CAAC,CAAC;AAEL,UAAM,eAAe,CAAC,gBAAwB;AAC1C,sBAAgB,WAAW;AAC3B,gBAAU,KAAK;AACf,oBAAc,EAAE;AAAA,IACpB;AAEA,WACI,qCAAC,SAAI,WAAU,yBACV,SACG,qCAAC,WAAM,WAAU,gGACZ,KACL,GAEJ,qCAAC,SAAI,WAAU,YAAW,KAAK,eAC3B;AAAA,MAAC;AAAA;AAAA,QACG,MAAK;AAAA,QACL;AAAA,QACA,WAAW;AAAA,UACP,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC;AAAA,UAC3C,SAAS;AAAA,QACb;AAAA,QACA,SAAS,MAAM,CAAC,YAAY,UAAU,CAAC,MAAM;AAAA,QAC7C;AAAA,QACC,GAAG;AAAA;AAAA,MAEJ,qCAAC,UAAK,WAAW;AAAA,QACb;AAAA,QACA,CAAC,kBAAkB;AAAA,MACvB,KACK,iBAAiB,eAAe,QAAQ,WAC7C;AAAA,MACA,qCAAC,eAAY,WAAW;AAAA,QACpB;AAAA,QACA,UAAU;AAAA,MACd,GAAG;AAAA,IACP,GAEC,UACG,qCAAC,SAAI,WAAU,0EACV,cACG,qCAAC,SAAI,WAAU,SACX;AAAA,MAAC;AAAA;AAAA,QACG,MAAK;AAAA,QACL,aAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,cAAc,EAAE,OAAO,KAAK;AAAA,QAC7C,WAAU;AAAA;AAAA,IACd,CACJ,GAEJ,qCAAC,SAAI,WAAU,4BACV,gBAAgB,WAAW,IACxB,qCAAC,SAAI,WAAU,oDAAiD,mBAEhE,IAEA,gBAAgB,IAAI,CAAC,WACjB;AAAA,MAAC;AAAA;AAAA,QACG,KAAK,OAAO;AAAA,QACZ,MAAK;AAAA,QACL,WAAW;AAAA,UACP;AAAA,UACA,OAAO,YAAY;AAAA,UACnB,UAAU,OAAO,SAAS;AAAA,QAC9B;AAAA,QACA,SAAS,MAAM,CAAC,OAAO,YAAY,aAAa,OAAO,KAAK;AAAA,QAC5D,UAAU,OAAO;AAAA;AAAA,MAEjB,qCAAC,UAAK,WAAU,kEACX,UAAU,OAAO,SAAS,qCAAC,SAAM,WAAU,WAAU,CAC1D;AAAA,MACC,OAAO;AAAA,IACZ,CACH,CAET,CACJ,CAER,GACC,SACG,qCAAC,OAAE,WAAU,8BAA4B,KAAM,CAEvD;AAAA,EAER;AACJ;AACA,OAAO,cAAc;;;AC1KrB,YAAYC,YAAW;AACvB,SAAS,OAAAC,YAA8B;AAGvC,IAAM,iBAAiBC;AAAA,EACnB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,MAAM;AAAA,QACF,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAEA,IAAM,sBAAsBA,KAAI,0CAA0C;AAE1E,IAAM,yBAAyBA;AAAA,EAC3B;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,MAAM;AAAA,QACF,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAWA,IAAM,SAAe;AAAA,EACjB,CAAC,EAAE,WAAW,MAAM,KAAK,KAAK,UAAU,QAAQ,GAAG,MAAM,GAAG,QAAQ;AAChE,UAAM,CAAC,aAAa,cAAc,IAAU,gBAAS,KAAK;AAC1D,UAAM,CAAC,aAAa,cAAc,IAAU,gBAAS,KAAK;AAE1D,UAAM,WAAiB,eAAQ,MAAM;AACjC,UAAI,SAAU,QAAO;AACrB,UAAI,KAAK;AACL,cAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,eAAO,MAAM,SAAS,IAChB,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,IAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,YAAY;AAAA,MAC3C;AACA,aAAO;AAAA,IACX,GAAG,CAAC,UAAU,GAAG,CAAC;AAElB,WACI,qCAAC,SAAI,WAAW,GAAG,eAAe,EAAE,KAAK,CAAC,GAAG,SAAS,GAAG,KAAW,GAAG,SAClE,OAAO,CAAC,eACL;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA,WAAW,GAAG,oBAAoB,CAAC;AAAA,QACnC,QAAQ,MAAM,eAAe,IAAI;AAAA,QACjC,SAAS,MAAM,eAAe,IAAI;AAAA;AAAA,IACtC,IAEF,CAAC,OAAO,eAAe,CAAC,gBACtB,qCAAC,SAAI,WAAW,GAAG,uBAAuB,EAAE,KAAK,CAAC,CAAC,KAC9C,QACL,GAEH,UACG,qCAAC,SAAI,WAAW;AAAA,MACZ;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,SAAS,aAAa;AAAA,MACtB,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,MACjB,SAAS,SAAS;AAAA,MAClB,WAAW,YAAY;AAAA,MACvB,WAAW,aAAa;AAAA,MACxB,WAAW,UAAU;AAAA,MACrB,WAAW,UAAU;AAAA,IACzB,GAAG,CAEX;AAAA,EAER;AACJ;AACA,OAAO,cAAc;;;ACrGrB,YAAYC,YAAW;AACvB,SAAS,WAAW,eAAAC,cAAa,sBAAsB;AAGvD,IAAM,QAAc,kBAGlB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,qCAAC,SAAI,WAAU,mCACX;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACR,CACJ,CACH;AACD,MAAM,cAAc;AAEpB,IAAM,cAAoB,kBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,qCAAC,WAAM,KAAU,WAAW,GAAG,mBAAmB,SAAS,GAAI,GAAG,OAAO,CAC5E;AACD,YAAY,cAAc;AAE1B,IAAM,YAAkB,kBAGtB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,8BAA8B,SAAS;AAAA,IACpD,GAAG;AAAA;AACR,CACH;AACD,UAAU,cAAc;AAExB,IAAM,cAAoB,kBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH;AACD,YAAY,cAAc;AAE1B,IAAM,WAAiB,kBAKrB,CAAC,EAAE,WAAW,QAAQ,MAAM,GAAG,MAAM,GAAG,QACtC;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH;AACD,SAAS,cAAc;AAQvB,IAAM,YAAkB;AAAA,EACpB,CAAC,EAAE,WAAW,UAAU,eAAe,QAAQ,UAAU,GAAG,MAAM,GAAG,QACjE;AAAA,IAAC;AAAA;AAAA,MACG;AAAA,MACA,WAAW;AAAA,QACP;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACJ;AAAA,MACA,SAAS,WAAW,SAAS;AAAA,MAC5B,GAAG;AAAA;AAAA,IAEJ,qCAAC,SAAI,WAAU,iCACX,qCAAC,cAAM,QAAS,GACf,YACG,qCAAC,UAAK,WAAU,uBACX,kBAAkB,SAAS,qCAAC,aAAU,WAAU,WAAU,GAC1D,kBAAkB,UAAU,qCAACC,cAAA,EAAY,WAAU,WAAU,GAC7D,kBAAkB,QAAQ,qCAAC,kBAAe,WAAU,WAAU,CACnE,CAER;AAAA,EACJ;AAER;AACA,UAAU,cAAc;AAExB,IAAM,YAAkB,kBAGtB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,kDAAkD,SAAS;AAAA,IACxE,GAAG;AAAA;AACR,CACH;AACD,UAAU,cAAc;AAExB,IAAM,eAAqB,kBAGzB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,sCAAsC,SAAS;AAAA,IAC5D,GAAG;AAAA;AACR,CACH;AACD,aAAa,cAAc;AAsB3B,SAAS,UAAyC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,eAAe;AAAA,EACf;AAAA,EACA,aAAa;AAAA,EACb,eAAe,CAAC;AAAA,EAChB;AACJ,GAAsB;AAClB,QAAM,CAAC,YAAY,aAAa,IAAU,gBAGvC,EAAE,KAAK,MAAM,WAAW,MAAM,CAAC;AAElC,QAAM,aAAmB,eAAQ,MAAM;AACnC,QAAI,CAAC,WAAW,IAAK,QAAO;AAE5B,WAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM;AAC5B,YAAM,SAAS,EAAE,WAAW,GAAI;AAChC,YAAM,SAAS,EAAE,WAAW,GAAI;AAEhC,UAAI,SAAS,QAAQ;AACjB,eAAO,WAAW,cAAc,QAAQ,KAAK;AAAA,MACjD;AACA,UAAI,SAAS,QAAQ;AACjB,eAAO,WAAW,cAAc,QAAQ,IAAI;AAAA,MAChD;AACA,aAAO;AAAA,IACX,CAAC;AAAA,EACL,GAAG,CAAC,MAAM,UAAU,CAAC;AAErB,QAAM,aAAa,CAAC,QAAiB;AACjC,kBAAc,WAAS;AAAA,MACnB;AAAA,MACA,WAAW,KAAK,QAAQ,OAAO,KAAK,cAAc,QAAQ,SAAS;AAAA,IACvE,EAAE;AAAA,EACN;AAEA,QAAM,aAAa,CAAC,QAAW,aAAa,KAAK,cAAY,aAAa,GAAG;AAE7E,QAAM,kBAAkB,CAAC,QAAW;AAChC,QAAI,CAAC,kBAAmB;AAExB,UAAM,eAAe,WAAW,GAAG,IAC7B,aAAa,OAAO,cAAY,aAAa,GAAG,IAChD,CAAC,GAAG,cAAc,GAAG;AAE3B,sBAAkB,YAAY;AAAA,EAClC;AAEA,QAAM,qBAAqB,MAAM;AAC7B,QAAI,CAAC,kBAAmB;AAExB,UAAM,cAAc,aAAa,WAAW,KAAK;AACjD,sBAAkB,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAAA,EAClD;AAEA,MAAI,SAAS;AACT,WACI,qCAAC,SAAI,WAAU,4BACX,qCAAC,SAAI,WAAU,mCAAgC,YAAU,CAC7D;AAAA,EAER;AAEA,SACI,qCAAC,aACG,qCAAC,mBACG,qCAAC,gBACI,cACG,qCAAC,aAAU,WAAU,UACjB;AAAA,IAAC;AAAA;AAAA,MACG,MAAK;AAAA,MACL,SAAS,aAAa,WAAW,KAAK,UAAU,KAAK,SAAS;AAAA,MAC9D,UAAU;AAAA,MACV,WAAU;AAAA;AAAA,EACd,CACJ,GAEH,QAAQ,IAAI,CAAC,WACV;AAAA,IAAC;AAAA;AAAA,MACG,KAAK,OAAO,OAAO,GAAG;AAAA,MACtB,UAAU,OAAO;AAAA,MACjB,eACI,WAAW,QAAQ,OAAO,MACpB,WAAW,YACX;AAAA,MAEV,QAAQ,MAAM,OAAO,YAAY,WAAW,OAAO,GAAG;AAAA,MACtD,OAAO,EAAE,OAAO,OAAO,MAAM;AAAA;AAAA,IAE5B,OAAO;AAAA,EACZ,CACH,CACL,CACJ,GACA,qCAAC,iBACI,WAAW,WAAW,IACnB,qCAAC,gBACG,qCAAC,aAAU,SAAS,QAAQ,UAAU,aAAa,IAAI,IAAI,WAAU,sBACjE,qCAAC,SAAI,WAAU,2BAAyB,YAAa,CACzD,CACJ,IAEA,WAAW,IAAI,CAAC,KAAK,UACjB;AAAA,IAAC;AAAA;AAAA,MACG,KAAK;AAAA,MACL,WAAW;AAAA,QACP,cAAc;AAAA,QACd,WAAW,GAAG,KAAK;AAAA,MACvB;AAAA,MACA,SAAS,MAAM,aAAa,GAAG;AAAA;AAAA,IAE9B,cACG,qCAAC,iBACG;AAAA,MAAC;AAAA;AAAA,QACG,MAAK;AAAA,QACL,SAAS,WAAW,GAAG;AAAA,QACvB,UAAU,MAAM,gBAAgB,GAAG;AAAA,QACnC,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAClC,WAAU;AAAA;AAAA,IACd,CACJ;AAAA,IAEH,QAAQ,IAAI,CAAC,WACV,qCAAC,aAAU,KAAK,OAAO,OAAO,GAAG,KAC5B,OAAO,SACF,OAAO,OAAO,IAAI,OAAO,GAAG,GAAG,GAAG,IAClC,OAAO,IAAI,OAAO,GAAG,KAAK,EAAE,CACtC,CACH;AAAA,EACL,CACH,CAET,CACJ;AAER;;;AC/RA,YAAYC,YAAW;AACvB,SAAS,GAAG,aAAa,aAAa,MAAM,qBAAqB;AACjE,SAAS,OAAAC,YAA8B;AAGvC,IAAM,gBAAgBC;AAAA,EAClB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,IACb;AAAA,EACJ;AACJ;AAYA,IAAM,QAAc;AAAA,EAChB,CAAC,EAAE,WAAW,SAAS,OAAO,aAAa,QAAQ,SAAS,WAAW,KAAM,GAAG,MAAM,GAAG,QAAQ;AAC7F,UAAM,CAAC,WAAW,YAAY,IAAU,gBAAS,IAAI;AAErD,IAAM,iBAAU,MAAM;AAClB,UAAI,YAAY,WAAW,GAAG;AAC1B,cAAM,QAAQ,WAAW,MAAM;AAC3B,uBAAa,KAAK;AAClB,qBAAW,MAAM,UAAU,GAAG,GAAG;AAAA,QACrC,GAAG,QAAQ;AAEX,eAAO,MAAM,aAAa,KAAK;AAAA,MACnC;AAAA,IACJ,GAAG,CAAC,UAAU,OAAO,CAAC;AAEtB,UAAM,UAAU,MAAM;AAClB,cAAQ,SAAS;AAAA,QACb,KAAK;AACD,iBAAO,qCAAC,eAAY,WAAU,8CAA6C;AAAA,QAC/E,KAAK;AACD,iBAAO,qCAAC,eAAY,WAAU,0CAAyC;AAAA,QAC3E,KAAK;AACD,iBAAO,qCAAC,iBAAc,WAAU,gDAA+C;AAAA,QACnF,KAAK;AACD,iBAAO,qCAAC,QAAK,WAAU,4CAA2C;AAAA,QACtE;AACI,iBAAO;AAAA,MACf;AAAA,IACJ;AAEA,QAAI,CAAC,UAAW,QAAO;AAEvB,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,QAClD,GAAG;AAAA;AAAA,MAEJ,qCAAC,SAAI,WAAU,gCACX,qCAAC,SAAI,WAAU,0BACV,QAAQ,CACb,GACA,qCAAC,SAAI,WAAU,oBACV,SACG,qCAAC,SAAI,WAAU,2BACV,KACL,GAEH,eACG,qCAAC,SAAI,WAAU,6BACV,WACL,GAEH,UACG,qCAAC,SAAI,WAAU,UACV,MACL,CAER,CACJ;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACG,SAAS,MAAM;AACX,yBAAa,KAAK;AAClB,uBAAW,MAAM,UAAU,GAAG,GAAG;AAAA,UACrC;AAAA,UACA,WAAU;AAAA;AAAA,QAEV,qCAAC,KAAE,WAAU,WAAU;AAAA,MAC3B;AAAA,IACJ;AAAA,EAER;AACJ;AACA,MAAM,cAAc;AAOpB,IAAM,iBAAgD,CAAC;AAAA,EACnD,WAAW;AACf,MAAM;AACF,QAAM,kBAAkB;AAAA,IACpB,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB;AAAA,EACrB;AAEA,SACI;AAAA,IAAC;AAAA;AAAA,MACG,WAAW;AAAA,QACP;AAAA,QACA,gBAAgB,QAAQ;AAAA,MAC5B;AAAA,MACA,IAAG;AAAA;AAAA,EACP;AAER;AAcA,IAAM,eAAqB,qBAA4C,MAAS;AAEzE,SAAS,cAAc,EAAE,SAAS,GAAkC;AACvE,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAA4C,CAAC,CAAC;AAEhF,QAAMC,SAAc,mBAAY,CAAC,YAA0B;AACvD,UAAM,KAAK,QAAQ,MAAM,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC;AAE/D,cAAU,UAAQ,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC;AAE/C,WAAO;AAAA,EACX,GAAG,CAAC,CAAC;AAEL,QAAM,UAAgB,mBAAY,CAAC,OAAe;AAC9C,cAAU,UAAQ,KAAK,OAAO,CAAAA,WAASA,OAAM,OAAO,EAAE,CAAC;AAAA,EAC3D,GAAG,CAAC,CAAC;AAEL,QAAM,QAAc,mBAAY,MAAM;AAClC,cAAU,CAAC,CAAC;AAAA,EAChB,GAAG,CAAC,CAAC;AAEL,SACI,qCAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,QAAQ,OAAAA,QAAO,SAAS,MAAM,KACzD,UACD,qCAAC,oBAAe,GACf,OAAO,IAAI,CAAC,EAAE,IAAI,GAAG,WAAW,MAC7B;AAAA,IAAC;AAAA;AAAA,MACG,KAAK;AAAA,MACJ,GAAG;AAAA,MACJ,SAAS,MAAM,QAAQ,EAAE;AAAA;AAAA,EAC7B,CACH,CACL;AAER;AAEO,SAAS,WAAW;AACvB,QAAM,UAAgB,kBAAW,YAAY;AAC7C,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAClE;AACA,SAAO;AACX;AAGO,IAAM,QAAQ;AAAA,EACjB,SAAS,CAAC,SAAiB,YAA4C;AACnE,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAO,cAAc,IAAI,YAAY,SAAS;AAAA,QAC1C,QAAQ,EAAE,SAAS,WAAW,aAAa,SAAS,GAAG,QAAQ;AAAA,MACnE,CAAC,CAAC;AAAA,IACN;AAAA,EACJ;AAAA,EACA,OAAO,CAAC,SAAiB,YAA4C;AACjE,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAO,cAAc,IAAI,YAAY,SAAS;AAAA,QAC1C,QAAQ,EAAE,SAAS,SAAS,aAAa,SAAS,GAAG,QAAQ;AAAA,MACjE,CAAC,CAAC;AAAA,IACN;AAAA,EACJ;AAAA,EACA,SAAS,CAAC,SAAiB,YAA4C;AACnE,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAO,cAAc,IAAI,YAAY,SAAS;AAAA,QAC1C,QAAQ,EAAE,SAAS,WAAW,aAAa,SAAS,GAAG,QAAQ;AAAA,MACnE,CAAC,CAAC;AAAA,IACN;AAAA,EACJ;AAAA,EACA,MAAM,CAAC,SAAiB,YAA4C;AAChE,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAO,cAAc,IAAI,YAAY,SAAS;AAAA,QAC1C,QAAQ,EAAE,SAAS,QAAQ,aAAa,SAAS,GAAG,QAAQ;AAAA,MAChE,CAAC,CAAC;AAAA,IACN;AAAA,EACJ;AACJ;;;AC9NA,YAAYC,aAAW;AACvB,SAAS,KAAAC,UAAS;AAClB,SAAS,OAAAC,YAA8B;AAGvC,IAAM,gBAAgBC;AAAA,EAClB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,MAAM;AAAA,QACF,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAcA,IAAM,QAAc;AAAA,EAChB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB;AAAA,IACA,GAAG;AAAA,EACP,GAAG,QAAQ;AACP,UAAM,WAAiB,eAAuB,IAAI;AAGlD,IAAM,kBAAU,MAAM;AAClB,UAAI,CAAC,iBAAiB,CAAC,OAAQ;AAE/B,YAAM,eAAe,CAAC,MAAqB;AACvC,YAAI,EAAE,QAAQ,UAAU;AACpB,kBAAQ;AAAA,QACZ;AAAA,MACJ;AAEA,eAAS,iBAAiB,WAAW,YAAY;AACjD,aAAO,MAAM,SAAS,oBAAoB,WAAW,YAAY;AAAA,IACrE,GAAG,CAAC,QAAQ,eAAe,OAAO,CAAC;AAGnC,UAAM,qBAAqB,CAAC,MAAwB;AAChD,UAAI,uBAAuB,EAAE,WAAW,EAAE,eAAe;AACrD,gBAAQ;AAAA,MACZ;AAAA,IACJ;AAGA,IAAM,kBAAU,MAAM;AAClB,UAAI,QAAQ;AACR,cAAM,wBAAwB,SAAS;AACvC,iBAAS,SAAS,MAAM;AAExB,eAAO,MAAM;AACT,iCAAuB,MAAM;AAAA,QACjC;AAAA,MACJ;AAAA,IACJ,GAAG,CAAC,MAAM,CAAC;AAGX,IAAM,kBAAU,MAAM;AAClB,UAAI,QAAQ;AACR,iBAAS,KAAK,MAAM,WAAW;AAC/B,eAAO,MAAM;AACT,mBAAS,KAAK,MAAM,WAAW;AAAA,QACnC;AAAA,MACJ;AAAA,IACJ,GAAG,CAAC,MAAM,CAAC;AAEX,QAAI,CAAC,OAAQ,QAAO;AAEpB,WACI,8DAEI;AAAA,MAAC;AAAA;AAAA,QACG,WAAU;AAAA,QACV,SAAS;AAAA;AAAA,IACb,GAGA;AAAA,MAAC;AAAA;AAAA,QACG,KAAK,CAAC,SAAS;AACX,mBAAS,UAAU;AACnB,cAAI,OAAO,QAAQ,YAAY;AAC3B,gBAAI,IAAI;AAAA,UACZ,WAAW,KAAK;AACZ,gBAAI,UAAU;AAAA,UAClB;AAAA,QACJ;AAAA,QACA,WAAW,GAAG,cAAc,EAAE,KAAK,CAAC,GAAG,SAAS;AAAA,QAChD,MAAK;AAAA,QACL,cAAW;AAAA,QACX,mBAAiB,QAAQ,gBAAgB;AAAA,QACzC,oBAAkB,cAAc,sBAAsB;AAAA,QACtD,UAAU;AAAA,QACT,GAAG;AAAA;AAAA,MAGH,mBACG;AAAA,QAAC;AAAA;AAAA,UACG,SAAS;AAAA,UACT,WAAU;AAAA;AAAA,QAEV,sCAACC,IAAA,EAAE,WAAU,WAAU;AAAA,QACvB,sCAAC,UAAK,WAAU,aAAU,OAAK;AAAA,MACnC;AAAA,OAIF,SAAS,gBACP,sCAAC,SAAI,WAAU,+BACV,SACG,sCAAC,QAAG,IAAG,eAAc,WAAU,uDAC1B,KACL,GAEH,eACG,sCAAC,OAAE,IAAG,qBAAoB,WAAU,mCAC/B,WACL,CAER;AAAA,MAIJ,sCAAC,SAAI,WAAU,YACV,QACL;AAAA,IACJ,CACJ;AAAA,EAER;AACJ;AACA,MAAM,cAAc;AAGpB,IAAM,cAAoB,mBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,sDAAsD,SAAS;AAAA,IAC5E,GAAG;AAAA;AACR,CACH;AACD,YAAY,cAAc;AAE1B,IAAM,aAAmB,mBAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,qDAAqD,SAAS;AAAA,IAC3E,GAAG;AAAA;AACR,CACH;AACD,WAAW,cAAc;AAEzB,IAAM,mBAAyB,mBAG7B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACR,CACH;AACD,iBAAiB,cAAc;AAE/B,IAAM,eAAqB,mBAGzB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,sCAAC,SAAI,KAAU,WAAW,GAAG,QAAQ,SAAS,GAAI,GAAG,OAAO,CAC/D;AACD,aAAa,cAAc;AAE3B,IAAM,cAAoB,mBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,iEAAiE,SAAS;AAAA,IACvF,GAAG;AAAA;AACR,CACH;AACD,YAAY,cAAc;AAWnB,SAAS,kBAAkB;AAC9B,QAAM,CAAC,QAAQ,SAAS,IAAU,iBAAS,KAAK;AAChD,QAAM,CAAC,SAAS,UAAU,IAAU,iBAAiC,CAAC,CAAC;AACvE,QAAM,aAAmB,eAA0C,IAAI;AAEvE,QAAM,UAAgB,oBAAY,CAAC,OAA+B,CAAC,MAAM;AACrE,eAAW;AAAA,MACP,OAAO,KAAK,SAAS;AAAA,MACrB,aAAa,KAAK,eAAe;AAAA,MACjC,aAAa,KAAK,eAAe;AAAA,MACjC,YAAY,KAAK,cAAc;AAAA,MAC/B,SAAS,KAAK,WAAW;AAAA,MACzB,GAAG;AAAA,IACP,CAAC;AACD,cAAU,IAAI;AAEd,WAAO,IAAI,QAAiB,CAAC,YAAY;AACrC,iBAAW,UAAU;AAAA,IACzB,CAAC;AAAA,EACL,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAgB,MAAM;AACxB,eAAW,UAAU,IAAI;AACzB,cAAU,KAAK;AAAA,EACnB;AAEA,QAAM,eAAe,MAAM;AACvB,eAAW,UAAU,KAAK;AAC1B,cAAU,KAAK;AAAA,EACnB;AAEA,QAAM,eAAe,MACjB;AAAA,IAAC;AAAA;AAAA,MACG;AAAA,MACA,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,aAAa,QAAQ;AAAA;AAAA,IAErB,sCAAC,mBACG;AAAA,MAAC;AAAA;AAAA,QACG,SAAS;AAAA,QACT,WAAW;AAAA,UACP;AAAA,UACA;AAAA,QACJ;AAAA;AAAA,MAEC,QAAQ;AAAA,IACb,GACA;AAAA,MAAC;AAAA;AAAA,QACG,SAAS;AAAA,QACT,WAAW;AAAA,UACP;AAAA,UACA,QAAQ,YAAY,gBACd,sFACA;AAAA,QACV;AAAA;AAAA,MAEC,QAAQ;AAAA,IACb,CACJ;AAAA,EACJ;AAGJ,SAAO,EAAE,SAAS,aAAa;AACnC;;;AClSA,YAAYC,aAAW;AACvB,SAAS,MAAM,KAAAC,IAAG,eAAAC,oBAAmB;AACrC,SAAS,OAAAC,YAA8B;AAGvC,IAAM,iBAAiBC;AAAA,EACnB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,MAAM;AAAA,QACF,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,MACR;AAAA,MACA,SAAS;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,MACd;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACb;AAAA,EACJ;AACJ;AAuBA,IAAM,SAAe;AAAA,EACjB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,CAAC;AAAA,IACT;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA,mBAAmB;AAAA,IACnB,GAAG;AAAA,EACP,GAAG,QAAQ;AACP,UAAM,CAAC,cAAc,eAAe,IAAU,iBAAwB,IAAI;AAE1E,UAAM,uBAAuB,CAAC,UAAkB;AAC5C,sBAAgB,iBAAiB,QAAQ,OAAO,KAAK;AAAA,IACzD;AAEA,UAAM,kBAAkB,CAAC,SAAkB;AACvC,UAAI,KAAK,SAAU;AAEnB,UAAI,KAAK,SAAS;AACd,aAAK,QAAQ;AAAA,MACjB,WAAW,KAAK,MAAM;AAClB,eAAO,SAAS,OAAO,KAAK;AAAA,MAChC;AAEA,sBAAgB,IAAI;AAAA,IACxB;AAEA,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW,GAAG,eAAe,EAAE,MAAM,QAAQ,CAAC,GAAG,SAAS;AAAA,QACzD,GAAG;AAAA;AAAA,MAGJ,sCAAC,SAAI,WAAU,iCACV,IACL;AAAA,MAGA,sCAAC,SAAI,WAAU,2CACV,MAAM,IAAI,CAAC,SACR,sCAAC,SAAI,KAAK,KAAK,OAAO,WAAU,cAC3B,KAAK,SAAS,KAAK,MAAM,SAAS;AAAA;AAAA,QAE/B,sCAAC,SAAI,WAAU,cACX;AAAA,UAAC;AAAA;AAAA,YACG,SAAS,MAAM,qBAAqB,KAAK,KAAK;AAAA,YAC9C,WAAW;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA,KAAK,YAAY;AAAA,cACjB,iBAAiB,KAAK,SAAS;AAAA,YACnC;AAAA,YACA,UAAU,KAAK;AAAA;AAAA,UAEd,KAAK;AAAA,UACN,sCAAC,cAAM,KAAK,KAAM;AAAA,UACjB,KAAK,SACF,sCAAC,UAAK,WAAU,8EACX,KAAK,KACV;AAAA,UAEJ,sCAACC,cAAA,EAAY,WAAW;AAAA,YACpB;AAAA,YACA,iBAAiB,KAAK,SAAS;AAAA,UACnC,GAAG;AAAA,QACP,GAEC,iBAAiB,KAAK,SACnB,sCAAC,SAAI,WAAU,wFACV,KAAK,MAAM,IAAI,CAAC,YACb;AAAA,UAAC;AAAA;AAAA,YACG,KAAK,QAAQ;AAAA,YACb,SAAS,MAAM,gBAAgB,OAAO;AAAA,YACtC,WAAW;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA,QAAQ,YAAY;AAAA,YACxB;AAAA,YACA,UAAU,QAAQ;AAAA;AAAA,UAEjB,QAAQ;AAAA,UACT,sCAAC,cAAM,QAAQ,KAAM;AAAA,UACpB,QAAQ,SACL,sCAAC,UAAK,WAAU,iFACX,QAAQ,KACb;AAAA,QAER,CACH,CACL,CAER;AAAA;AAAA;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACG,SAAS,MAAM,gBAAgB,IAAI;AAAA,YACnC,WAAW;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA,KAAK,YAAY;AAAA,YACrB;AAAA,YACA,UAAU,KAAK;AAAA;AAAA,UAEd,KAAK;AAAA,UACN,sCAAC,cAAM,KAAK,KAAM;AAAA,UACjB,KAAK,SACF,sCAAC,UAAK,WAAU,8EACX,KAAK,KACV;AAAA,QAER;AAAA,OAER,CACH,CACL;AAAA,MAGA,sCAAC,SAAI,WAAU,iCACV,SAGA,oBACG;AAAA,QAAC;AAAA;AAAA,UACG,SAAS;AAAA,UACT,WAAU;AAAA;AAAA,QAET,mBACG,sCAACC,IAAA,EAAE,WAAU,WAAU,IAEvB,sCAAC,QAAK,WAAU,WAAU;AAAA,MAElC,CAER;AAAA,MAGC,oBACG,sCAAC,SAAI,WAAU,sFACX,sCAAC,SAAI,WAAU,yBACV,MAAM,IAAI,CAAC,SACR,sCAAC,SAAI,KAAK,KAAK,SACV,KAAK,SAAS,KAAK,MAAM,SAAS,IAC/B,sCAAC,aACG;AAAA,QAAC;AAAA;AAAA,UACG,SAAS,MAAM,qBAAqB,KAAK,KAAK;AAAA,UAC9C,WAAW;AAAA,YACP;AAAA,YACA;AAAA,YACA,KAAK,YAAY;AAAA,UACrB;AAAA,UACA,UAAU,KAAK;AAAA;AAAA,QAEf,sCAAC,SAAI,WAAU,iCACV,KAAK,MACN,sCAAC,cAAM,KAAK,KAAM,GACjB,KAAK,SACF,sCAAC,UAAK,WAAU,yEACX,KAAK,KACV,CAER;AAAA,QACA,sCAACD,cAAA,EAAY,WAAW;AAAA,UACpB;AAAA,UACA,iBAAiB,KAAK,SAAS;AAAA,QACnC,GAAG;AAAA,MACP,GAEC,iBAAiB,KAAK,SACnB,sCAAC,SAAI,WAAU,yBACV,KAAK,MAAM,IAAI,CAAC,YACb;AAAA,QAAC;AAAA;AAAA,UACG,KAAK,QAAQ;AAAA,UACb,SAAS,MAAM,gBAAgB,OAAO;AAAA,UACtC,WAAW;AAAA,YACP;AAAA,YACA;AAAA,YACA,QAAQ,YAAY;AAAA,UACxB;AAAA,UACA,UAAU,QAAQ;AAAA;AAAA,QAEjB,QAAQ;AAAA,QACT,sCAAC,cAAM,QAAQ,KAAM;AAAA,QACpB,QAAQ,SACL,sCAAC,UAAK,WAAU,iFACX,QAAQ,KACb;AAAA,MAER,CACH,CACL,CAER,IAEA;AAAA,QAAC;AAAA;AAAA,UACG,SAAS,MAAM,gBAAgB,IAAI;AAAA,UACnC,WAAW;AAAA,YACP;AAAA,YACA;AAAA,YACA,KAAK,YAAY;AAAA,UACrB;AAAA,UACA,UAAU,KAAK;AAAA;AAAA,QAEd,KAAK;AAAA,QACN,sCAAC,cAAM,KAAK,KAAM;AAAA,QACjB,KAAK,SACF,sCAAC,UAAK,WAAU,iFACX,KAAK,KACV;AAAA,MAER,CAER,CACH,CACL,CACJ;AAAA,IAER;AAAA,EAER;AACJ;AACA,OAAO,cAAc;;;ACpRrB,YAAYE,aAAW;AACvB,SAAS,aAAa,cAAc,eAAAC,oBAAmB;AACvD,SAAS,OAAAC,YAA8B;AAGvC,IAAM,kBAAkBC;AAAA,EACpB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACF,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,MACR;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AA8BA,IAAM,UAAgB;AAAA,EAClB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,IACZ,cAAc;AAAA,IACd,YAAY;AAAA,IACZ;AAAA,IACA,qBAAqB;AAAA,IACrB,GAAG;AAAA,EACP,GAAG,QAAQ;AACP,UAAM,CAAC,eAAe,gBAAgB,IAAU,iBAAsB,oBAAI,IAAI,CAAC;AAC/E,UAAM,CAAC,mBAAmB,oBAAoB,IAAU,iBAAS,SAAS;AAE1E,UAAM,cAAc,cAAc,oBAAoB;AAEtD,IAAM,kBAAU,MAAM;AAClB,2BAAqB,SAAS;AAAA,IAClC,GAAG,CAAC,SAAS,CAAC;AAEd,UAAM,iBAAiB,MAAM;AACzB,YAAM,eAAe,CAAC;AACtB,2BAAqB,YAAY;AACjC,mBAAa,YAAY;AAAA,IAC7B;AAEA,UAAM,iBAAiB,CAAC,UAAkB;AACtC,YAAM,cAAc,IAAI,IAAI,aAAa;AACzC,UAAI,YAAY,IAAI,KAAK,GAAG;AACxB,oBAAY,OAAO,KAAK;AAAA,MAC5B,OAAO;AACH,oBAAY,IAAI,KAAK;AAAA,MACzB;AACA,uBAAiB,WAAW;AAAA,IAChC;AAEA,UAAM,kBAAkB,CAAC,SAAsB;AAC3C,UAAI,KAAK,SAAU;AAEnB,UAAI,KAAK,SAAS,KAAK,MAAM,SAAS,GAAG;AACrC,uBAAe,KAAK,KAAK;AAAA,MAC7B,WAAW,KAAK,SAAS;AACrB,aAAK,QAAQ;AAAA,MACjB,WAAW,KAAK,MAAM;AAClB,eAAO,SAAS,OAAO,KAAK;AAAA,MAChC;AAAA,IACJ;AAEA,UAAM,aAAa,CAAC,MAAmB,QAAQ,MAAM;AACjD,YAAM,cAAc,KAAK,SAAS,KAAK,MAAM,SAAS;AACtD,YAAM,aAAa,cAAc,IAAI,KAAK,KAAK;AAE/C,aACI,sCAAC,SAAI,KAAK,KAAK,SACX;AAAA,QAAC;AAAA;AAAA,UACG,SAAS,MAAM,gBAAgB,IAAI;AAAA,UACnC,WAAW;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ,KAAK;AAAA,YACb,KAAK,UAAU;AAAA,YACf,KAAK,YAAY;AAAA,YACjB,eAAe;AAAA,UACnB;AAAA,UACA,UAAU,KAAK;AAAA,UACf,OAAO,cAAc,KAAK,QAAQ;AAAA;AAAA,QAElC,sCAAC,SAAI,WAAU,iCACV,KAAK,QACF,sCAAC,SAAI,WAAU,mBACV,KAAK,IACV,GAEH,CAAC,eACE,sCAAC,UAAK,WAAU,cAAY,KAAK,KAAM,CAE/C;AAAA,QAEC,CAAC,eACE,sCAAC,SAAI,WAAU,iCACV,KAAK,SACF,sCAAC,UAAK,WAAU,yEACX,KAAK,KACV,GAEH,eACG,sCAACC,cAAA,EAAY,WAAW;AAAA,UACpB;AAAA,UACA,cAAc;AAAA,QAClB,GAAG,CAEX;AAAA,MAER,GAEC,eAAe,cAAc,CAAC,eAC3B,sCAAC,SAAI,WAAU,oBACV,KAAK,MAAO,IAAI,CAAC,YAAY,WAAW,SAAS,QAAQ,CAAC,CAAC,CAChE,CAER;AAAA,IAER;AAEA,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW;AAAA,UACP,gBAAgB;AAAA,YACZ;AAAA,YACA,MAAM,cAAc,OAAO;AAAA,UAC/B,CAAC;AAAA,UACD;AAAA,QACJ;AAAA,QACC,GAAG;AAAA;AAAA,MAGH,UACG,sCAAC,SAAI,WAAW;AAAA,QACZ;AAAA,QACA,eAAe;AAAA,MACnB,KACK,MACL;AAAA,MAIJ,sCAAC,SAAI,WAAU,0CACV,SAAS,IAAI,CAAC,SAAS,iBACpB,sCAAC,SAAI,KAAK,WAAW,YAAY,MAC5B,QAAQ,SAAS,CAAC,eACf,sCAAC,SAAI,WAAU,eACX,sCAAC,QAAG,WAAU,0EACT,QAAQ,KACb,CACJ,GAEJ,sCAAC,SAAI,WAAU,eACV,QAAQ,MAAM,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,CACjD,GACC,eAAe,SAAS,SAAS,KAC9B,sCAAC,SAAI,WAAU,+BAA8B,CAErD,CACH,CACL;AAAA,MAGC,UACG,sCAAC,SAAI,WAAW;AAAA,QACZ;AAAA,QACA,eAAe;AAAA,MACnB,KACK,MACL;AAAA,MAIH,eAAe,sBACZ,sCAAC,SAAI,WAAU,gCACX;AAAA,QAAC;AAAA;AAAA,UACG,SAAS;AAAA,UACT,WAAU;AAAA,UACV,OAAO,cAAc,mBAAmB;AAAA;AAAA,QAEvC,cACG,sCAAC,gBAAa,WAAU,WAAU,IAElC,sCAAC,eAAY,WAAU,WAAU;AAAA,MAEzC,CACJ;AAAA,IAER;AAAA,EAER;AACJ;AACA,QAAQ,cAAc;AAGf,SAAS,WAAW,mBAAmB,OAAO;AACjD,QAAM,CAAC,WAAW,YAAY,IAAU,iBAAS,gBAAgB;AAEjE,QAAM,SAAe,oBAAY,MAAM;AACnC,iBAAa,UAAQ,CAAC,IAAI;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,QAAM,SAAe,oBAAY,MAAM;AACnC,iBAAa,KAAK;AAAA,EACtB,GAAG,CAAC,CAAC;AAEL,QAAM,WAAiB,oBAAY,MAAM;AACrC,iBAAa,IAAI;AAAA,EACrB,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;;;ACrQA,YAAYC,aAAW;AACvB,SAAS,OAAAC,aAA8B;AAGvC,IAAM,eAAeC,MAAI,aAAa;AAAA,EAClC,UAAU;AAAA,IACN,SAAS;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,IACZ;AAAA,EACJ;AAAA,EACA,iBAAiB;AAAA,IACb,SAAS;AAAA,EACb;AACJ,CAAC;AA2BD,IAAM,cAAoB,sBAA2C,MAAS;AAEvE,SAAS,iBAAiB;AAC7B,QAAM,UAAgB,mBAAW,WAAW;AAC5C,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACzE;AACA,SAAO;AACX;AAuBA,IAAM,OAAa;AAAA,EACf,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA,gBAAgB,CAAC;AAAA,IACjB,kBAAkB,CAAC;AAAA,IACnB;AAAA,IACA,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB;AAAA,IACA,GAAG;AAAA,EACP,GAAG,QAAQ;AACP,UAAM,CAAC,QAAQ,SAAS,IAAU,iBAAoB,aAAa;AACnE,UAAM,CAAC,QAAQ,SAAS,IAAU,iBAAqB,CAAC,CAAC;AACzD,UAAM,CAAC,SAAS,eAAe,IAAU,iBAAqC,CAAC,CAAC;AAChF,UAAM,CAAC,cAAc,eAAe,IAAU,iBAAS,KAAK;AAE5D,UAAM,gBAAsB,oBAAY,OAAO,SAAmC;AAC9E,YAAM,OAAO,gBAAgB,IAAI;AACjC,UAAI,CAAC,KAAM,QAAO;AAElB,YAAM,QAAQ,OAAO,IAAI;AACzB,UAAI;AAGJ,UAAI,KAAK,UAAU;AACf,cAAM,aAAa,OAAO,KAAK,aAAa,YAAY,KAAK,WAAW;AACxE,cAAM,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW,GAAG,IAAI;AAE3E,YAAI,eAAe,UAAU,UAAa,UAAU,QAAQ,UAAU,KAAK;AACvE,kBAAQ,EAAE,SAAS,MAAM,WAAW;AAAA,QACxC;AAAA,MACJ;AAGA,UAAI,CAAC,SAAS,KAAK,aAAa,OAAO,UAAU,UAAU;AACvD,cAAM,YAAY,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY,KAAK,UAAU;AACvF,cAAM,UAAU,OAAO,KAAK,cAAc,WAAW,KAAK,UAAU,UAAU,GAAG,IAAI,qBAAqB,SAAS;AAEnH,YAAI,MAAM,SAAS,WAAW;AAC1B,kBAAQ,EAAE,SAAS,MAAM,YAAY;AAAA,QACzC;AAAA,MACJ;AAGA,UAAI,CAAC,SAAS,KAAK,aAAa,OAAO,UAAU,UAAU;AACvD,cAAM,YAAY,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY,KAAK,UAAU;AACvF,cAAM,UAAU,OAAO,KAAK,cAAc,WAAW,KAAK,UAAU,UAAU,GAAG,IAAI,yBAAyB,SAAS;AAEvH,YAAI,MAAM,SAAS,WAAW;AAC1B,kBAAQ,EAAE,SAAS,MAAM,YAAY;AAAA,QACzC;AAAA,MACJ;AAGA,UAAI,CAAC,SAAS,KAAK,WAAW,OAAO,UAAU,UAAU;AACrD,cAAM,UAAU,KAAK,mBAAmB,SAAS,KAAK,UAAU,KAAK,QAAQ;AAC7E,cAAM,UAAU,KAAK,mBAAmB,SAAS,GAAG,IAAI,uBAAuB,KAAK,QAAQ;AAE5F,YAAI,CAAC,QAAQ,KAAK,KAAK,GAAG;AACtB,kBAAQ,EAAE,SAAS,MAAM,UAAU;AAAA,QACvC;AAAA,MACJ;AAGA,UAAI,CAAC,SAAS,KAAK,UAAU;AACzB,cAAM,SAAS,MAAM,KAAK,SAAS,OAAO,MAAM;AAChD,YAAI,OAAO,WAAW,UAAU;AAC5B,kBAAQ,EAAE,SAAS,QAAQ,MAAM,SAAS;AAAA,QAC9C,WAAW,WAAW,OAAO;AACzB,kBAAQ,EAAE,SAAS,GAAG,IAAI,eAAe,MAAM,SAAS;AAAA,QAC5D;AAAA,MACJ;AAEA,gBAAU,WAAS,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE;AAC9C,aAAO,CAAC;AAAA,IACZ,GAAG,CAAC,QAAQ,eAAe,CAAC;AAE5B,UAAM,WAAiB,oBAAY,CAAC,MAAc,UAAe;AAC7D,gBAAU,WAAS,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE;AAE9C,UAAI,oBAAoB,QAAQ,IAAI,GAAG;AAEnC,mBAAW,MAAM,cAAc,IAAI,GAAG,CAAC;AAAA,MAC3C;AAAA,IACJ,GAAG,CAAC,kBAAkB,SAAS,aAAa,CAAC;AAE7C,UAAM,WAAiB,oBAAY,CAAC,MAAc,UAAsC;AACpF,gBAAU,WAAS,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE;AAAA,IAClD,GAAG,CAAC,CAAC;AAEL,UAAM,aAAmB,oBAAY,CAAC,MAAc,YAAY,SAAS;AACrE,sBAAgB,WAAS,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,EAAE;AAExD,UAAI,kBAAkB,WAAW;AAC7B,sBAAc,IAAI;AAAA,MACtB;AAAA,IACJ,GAAG,CAAC,gBAAgB,aAAa,CAAC;AAElC,UAAM,YAAkB,oBAAY,MAAM;AACtC,gBAAU,aAAa;AACvB,gBAAU,CAAC,CAAC;AACZ,sBAAgB,CAAC,CAAC;AAClB,sBAAgB,KAAK;AAAA,IACzB,GAAG,CAAC,aAAa,CAAC;AAElB,UAAM,eAAe,OAAO,MAAuB;AAC/C,QAAE,eAAe;AAEjB,UAAI,CAAC,gBAAgB,aAAc;AAEnC,sBAAgB,IAAI;AAGpB,YAAM,aAAa,OAAO,KAAK,eAAe;AAC9C,YAAM,oBAAoB,MAAM,QAAQ;AAAA,QACpC,WAAW,IAAI,UAAQ,cAAc,IAAI,CAAC;AAAA,MAC9C;AAEA,YAAM,YAAY,kBAAkB,KAAK,YAAU,CAAC,MAAM;AAE1D,UAAI,WAAW;AACX,wBAAgB,KAAK;AACrB;AAAA,MACJ;AAEA,UAAI;AACA,cAAM,aAAa,QAAQ;AAAA,UACvB,eAAe;AAAA,UACf,WAAW,CAACC,YAAuB,UAAUA,OAAM;AAAA,QACvD,CAAC;AAAA,MACL,SAAS,OAAO;AACZ,gBAAQ,MAAM,0BAA0B,KAAK;AAAA,MACjD,UAAE;AACE,wBAAgB,KAAK;AAAA,MACzB;AAAA,IACJ;AAEA,UAAM,eAAgC;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAEA,WACI,sCAAC,YAAY,UAAZ,EAAqB,OAAO,gBACzB;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW,GAAG,aAAa,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,QAClD,UAAU;AAAA,QACT,GAAG;AAAA;AAAA,MAEH;AAAA,IACL,CACJ;AAAA,EAER;AACJ;AACA,KAAK,cAAc;AAcnB,IAAM,YAAsC,CAAC,EAAE,MAAM,SAAS,MAAM;AAChE,QAAM,EAAE,QAAQ,QAAQ,SAAS,UAAU,WAAW,IAAI,eAAe;AAEzE,QAAM,eAAe,CAAC,UAAe;AACjC,aAAS,MAAM,KAAK;AAAA,EACxB;AAEA,QAAM,aAAa,MAAM;AACrB,eAAW,MAAM,IAAI;AAAA,EACzB;AAEA,SACI,8DACK,SAAS;AAAA,IACN,OAAO,OAAO,IAAI,KAAK;AAAA,IACvB,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO,OAAO,IAAI;AAAA,IAClB,SAAS,CAAC,CAAC,QAAQ,IAAI;AAAA,EAC3B,CAAC,CACL;AAER;AAOA,IAAM,aAAmB;AAAA,EACrB,CAAC,EAAE,UAAU,cAAc,iBAAiB,UAAU,GAAG,MAAM,GAAG,QAAQ;AACtE,UAAM,EAAE,aAAa,IAAI,eAAe;AAExC,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,MAAK;AAAA,QACL,UAAU,YAAY;AAAA,QACrB,GAAG;AAAA;AAAA,MAEH,eAAe,cAAc;AAAA,IAClC;AAAA,EAER;AACJ;AACA,WAAW,cAAc;;;ACxSzB,YAAYC,aAAW;AACvB,YAAY,2BAA2B;AACvC,SAAS,SAAAC,QAAO,gBAAAC,eAAc,cAAc;AAG5C,IAAM,eAAqC;AAE3C,IAAM,sBAA4C;AAElD,IAAM,oBAA0C;AAEhD,IAAM,qBAA2C;AAEjD,IAAM,kBAAwC;AAE9C,IAAM,yBAA+C;AAErD,IAAM,yBAA+B,mBAKnC,CAAC,EAAE,WAAW,OAAO,UAAU,GAAG,MAAM,GAAG,QACzC;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AAAA,EAEH;AAAA,EACD,sCAACC,eAAA,EAAa,WAAU,mBAAkB;AAC9C,CACH;AACD,uBAAuB,cACG,iCAAW;AAErC,IAAM,yBAA+B,mBAGnC,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH;AACD,uBAAuB,cACG,iCAAW;AAErC,IAAM,sBAA4B,mBAGhC,CAAC,EAAE,WAAW,aAAa,GAAG,GAAG,MAAM,GAAG,QACxC,sCAAuB,8BAAtB,MACG;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACG;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AACR,CACJ,CACH;AACD,oBAAoB,cAAoC,8BAAQ;AAEhE,IAAM,mBAAyB,mBAK7B,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,GAAG,QAC/B;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH;AACD,iBAAiB,cAAoC,2BAAK;AAE1D,IAAM,2BAAiC,mBAGrC,CAAC,EAAE,WAAW,UAAU,SAAS,GAAG,MAAM,GAAG,QAC3C;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA;AAAA,IACJ;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AAAA,EAEJ,sCAAC,UAAK,WAAU,kEACZ,sCAAuB,qCAAtB,MACG,sCAACC,QAAA,EAAM,WAAU,WAAU,CAC/B,CACJ;AAAA,EACC;AACL,CACH;AACD,yBAAyB,cACC,mCAAa;AAEvC,IAAM,wBAA8B,mBAGlC,CAAC,EAAE,WAAW,UAAU,GAAG,MAAM,GAAG,QAClC;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AAAA,EAEJ,sCAAC,UAAK,WAAU,kEACZ,sCAAuB,qCAAtB,MACG,sCAAC,UAAO,WAAU,wBAAuB,CAC7C,CACJ;AAAA,EACC;AACL,CACH;AACD,sBAAsB,cAAoC,gCAAU;AAEpE,IAAM,oBAA0B,mBAK9B,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,GAAG,QAC/B;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACG;AAAA,IACA,WAAW;AAAA,MACP;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH;AACD,kBAAkB,cAAoC,4BAAM;AAE5D,IAAM,wBAA8B,mBAGlC,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACG;AAAA,IACA,WAAW,GAAG,4BAA4B,SAAS;AAAA,IAClD,GAAG;AAAA;AACR,CACH;AACD,sBAAsB,cAAoC,gCAAU;AAEpE,IAAM,uBAAuB,CAAC;AAAA,EAC1B;AAAA,EACA,GAAG;AACP,MAA6C;AACzC,SACI;AAAA,IAAC;AAAA;AAAA,MACG,WAAW,GAAG,8CAA8C,SAAS;AAAA,MACpE,GAAG;AAAA;AAAA,EACR;AAER;AACA,qBAAqB,cAAc;;;AClLnC,YAAYC,aAAW;AACvB,SAAS,OAAAC,aAA8B;AACvC,SAAS,eAAAC,cAAa,cAAc,QAAAC,OAAM,eAAe;AAGzD,IAAM,gBAAgBC;AAAA,EAClB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SAAS;AAAA,QACT,aACI;AAAA,QACJ,SACI;AAAA,QACJ,SACI;AAAA,QACJ,MACI;AAAA,MACR;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,IACb;AAAA,EACJ;AACJ;AAEA,IAAM,QAAc,mBAGlB,CAAC,EAAE,WAAW,SAAS,GAAG,MAAM,GAAG,QACjC;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,MAAK;AAAA,IACL,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,IAClD,GAAG;AAAA;AACR,CACH;AACD,MAAM,cAAc;AAEpB,IAAM,aAAmB,mBAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,gDAAgD,SAAS;AAAA,IACtE,GAAG;AAAA;AACR,CACH;AACD,WAAW,cAAc;AAEzB,IAAM,mBAAyB,mBAG7B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB;AAAA,EAAC;AAAA;AAAA,IACG;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACR,CACH;AACD,iBAAiB,cAAc;AAG/B,IAAM,YAAY,CAAC,EAAE,QAAQ,MAAgF;AACzG,UAAQ,SAAS;AAAA,IACb,KAAK;AACD,aAAO,sCAAC,WAAQ,WAAU,WAAU;AAAA,IACxC,KAAK;AACD,aAAO,sCAACC,cAAA,EAAY,WAAU,WAAU;AAAA,IAC5C,KAAK;AACD,aAAO,sCAAC,gBAAa,WAAU,WAAU;AAAA,IAC7C,KAAK;AACD,aAAO,sCAACC,OAAA,EAAK,WAAU,WAAU;AAAA,IACrC;AACI,aAAO,sCAACA,OAAA,EAAK,WAAU,WAAU;AAAA,EACzC;AACJ;;;AC9EA,YAAYC,aAAW;AACvB,SAAS,OAAAC,aAA8B;AAGvC,IAAM,iBAAiBC,MAAI,iJAAiJ;AAAA,EACxK,UAAU;AAAA,IACN,MAAM;AAAA,MACF,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACL,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,iBAAiB;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACb;AACJ,CAAC;AAQD,IAAM,SAAe;AAAA,EACjB,CAAC,EAAE,WAAW,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,QAAQ;AACnD,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW,GAAG,2BAA2B,SAAS;AAAA,QAClD,MAAK;AAAA,QACL,cAAY,QAAQ;AAAA,QACnB,GAAG;AAAA;AAAA,MAEJ;AAAA,QAAC;AAAA;AAAA,UACG,WAAW,GAAG,eAAe,EAAE,MAAM,QAAQ,CAAC,GAAG,cAAc;AAAA;AAAA,MACnE;AAAA,MACC,QAAQ,sCAAC,UAAK,WAAU,mCAAiC,IAAK;AAAA,IACnE;AAAA,EAER;AACJ;AACA,OAAO,cAAc;AAGrB,IAAM,mBAAmBA,MAAI,kCAAkC;AAAA,EAC3D,UAAU;AAAA,IACN,SAAS;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AAAA,EACJ;AAAA,EACA,iBAAiB;AAAA,IACb,SAAS;AAAA,EACb;AACJ,CAAC;AAMD,IAAM,WAAiB;AAAA,EACnB,CAAC,EAAE,WAAW,SAAS,GAAG,MAAM,GAAG,QAAQ;AACvC,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW,GAAG,iBAAiB,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,QACrD,GAAG;AAAA;AAAA,IACR;AAAA,EAER;AACJ;AACA,SAAS,cAAc;AAQvB,IAAM,aAAwC,CAAC,EAAE,OAAO,cAAc,OAAO,KAAK,MAAM;AACpF,SACI,sCAAC,SAAI,WAAU,2DACX,sCAAC,UAAO,MAAY,MAAY,CACpC;AAER;;;AC/FA,YAAYC,aAAW;AACvB,SAAS,OAAAC,aAA8B;AACvC,SAAS,KAAAC,UAAS;AAGlB,IAAM,eAAeC;AAAA,EACjB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACF,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACR;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAUA,IAAM,OAAa;AAAA,EACf,CAAC,EAAE,WAAW,SAAS,MAAM,UAAU,YAAY,OAAO,WAAW,OAAO,UAAU,GAAG,MAAM,GAAG,QAAQ;AACtG,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW;AAAA,UACP,aAAa,EAAE,SAAS,KAAK,CAAC;AAAA,UAC9B,YAAY;AAAA,UACZ;AAAA,QACJ;AAAA,QACC,GAAG;AAAA;AAAA,MAEJ,sCAAC,UAAK,WAAU,cAAY,QAAS;AAAA,MACpC,aAAa,CAAC,YACX;AAAA,QAAC;AAAA;AAAA,UACG,MAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAU;AAAA,UACV,cAAW;AAAA;AAAA,QAEX,sCAACC,IAAA,EAAE,WAAU,WAAU;AAAA,MAC3B;AAAA,IAER;AAAA,EAER;AACJ;AACA,KAAK,cAAc;AAcnB,IAAM,YAAkB;AAAA,EACpB,CAAC,EAAE,WAAW,OAAO,UAAU,YAAY,GAAG,MAAM,GAAG,QAAQ;AAC3D,UAAM,eAAe,aAAa,MAAM,MAAM,GAAG,UAAU,IAAI;AAC/D,UAAM,cAAc,aAAa,KAAK,IAAI,GAAG,MAAM,SAAS,UAAU,IAAI;AAE1E,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW,GAAG,qCAAqC,SAAS;AAAA,QAC3D,GAAG;AAAA;AAAA,MAEH,aAAa,IAAI,CAAC,SACf;AAAA,QAAC;AAAA;AAAA,UACG,KAAK,KAAK;AAAA,UACV,SAAS,KAAK;AAAA,UACd,WAAW,KAAK;AAAA,UAChB,UAAU,MAAM,WAAW,KAAK,EAAE;AAAA;AAAA,QAEjC,KAAK;AAAA,MACV,CACH;AAAA,MACA,cAAc,KACX,sCAAC,QAAK,SAAQ,WAAU,MAAK,QAAK,KAC5B,aAAY,OAClB;AAAA,IAER;AAAA,EAER;AACJ;AACA,UAAU,cAAc;;;AC9GxB,YAAYC,aAAW;AACvB,SAAS,OAAAC,aAA8B;AACvC,SAAS,eAAAC,cAAa,gBAAAC,qBAAoB;AAI1C,IAAM,qBAAqBC;AAAA,EACvB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,MAAM;AAAA,QACF,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,MACR;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAaA,IAAM,aAAmB;AAAA,EACrB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,GAAG;AAAA,EACP,GAAG,QAAQ;AACP,UAAM,kBAAkB,MAAM;AAC1B,YAAM,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAC3C,UAAI,QAAQ,KAAK,IAAI,cAAc,MAAM,CAAC;AAC1C,UAAI,MAAM,KAAK,IAAI,QAAQ,kBAAkB,GAAG,UAAU;AAE1D,UAAI,MAAM,QAAQ,IAAI,iBAAiB;AACnC,gBAAQ,KAAK,IAAI,MAAM,kBAAkB,GAAG,CAAC;AAAA,MACjD;AAEA,aAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,QAAQ,CAAC;AAAA,IACtE;AAEA,UAAM,eAAe,gBAAgB;AACrC,UAAM,cAAc,gBAAgB;AACpC,UAAM,aAAa,gBAAgB;AAEnC,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW,GAAG,mBAAmB,EAAE,KAAK,CAAC,GAAG,SAAS;AAAA,QACrD,MAAK;AAAA,QACL,cAAW;AAAA,QACV,GAAG;AAAA;AAAA,MAEH,iBAAiB,CAAC,eACf;AAAA,QAAC;AAAA;AAAA,UACG,SAAQ;AAAA,UACR,MAAM,SAAS,OAAO,OAAO,SAAS,OAAO,OAAO;AAAA,UACpD,SAAS,MAAM,aAAa,CAAC;AAAA,UAC7B,cAAW;AAAA;AAAA,QACd;AAAA,MAED;AAAA,MAGH,gBAAgB,CAAC,eACd;AAAA,QAAC;AAAA;AAAA,UACG,SAAQ;AAAA,UACR,MAAM,SAAS,OAAO,OAAO,SAAS,OAAO,OAAO;AAAA,UACpD,SAAS,MAAM,aAAa,cAAc,CAAC;AAAA,UAC3C,cAAW;AAAA;AAAA,QAEX,sCAACC,cAAA,EAAY,WAAU,WAAU;AAAA,MACrC;AAAA,MAGH,aAAa,CAAC,IAAI,KACf,8DACI;AAAA,QAAC;AAAA;AAAA,UACG,SAAQ;AAAA,UACR,MAAM,SAAS,OAAO,OAAO,SAAS,OAAO,OAAO;AAAA,UACpD,SAAS,MAAM,aAAa,CAAC;AAAA;AAAA,QAChC;AAAA,MAED,GACC,aAAa,CAAC,IAAI,KACf,sCAAC,UAAK,WAAU,gCAA6B,KAAG,CAExD;AAAA,MAGH,aAAa,IAAI,CAAC,SACf;AAAA,QAAC;AAAA;AAAA,UACG,KAAK;AAAA,UACL,SAAS,SAAS,cAAc,YAAY;AAAA,UAC5C,MAAM,SAAS,OAAO,OAAO,SAAS,OAAO,OAAO;AAAA,UACpD,SAAS,MAAM,aAAa,IAAI;AAAA,UAChC,cAAY,cAAc,IAAI;AAAA,UAC9B,gBAAc,SAAS,cAAc,SAAS;AAAA;AAAA,QAE7C;AAAA,MACL,CACH;AAAA,MAEA,aAAa,aAAa,SAAS,CAAC,IAAI,cACrC,8DACK,aAAa,aAAa,SAAS,CAAC,IAAI,aAAa,KAClD,sCAAC,UAAK,WAAU,gCAA6B,KAAG,GAEpD;AAAA,QAAC;AAAA;AAAA,UACG,SAAQ;AAAA,UACR,MAAM,SAAS,OAAO,OAAO,SAAS,OAAO,OAAO;AAAA,UACpD,SAAS,MAAM,aAAa,UAAU;AAAA;AAAA,QAErC;AAAA,MACL,CACJ;AAAA,MAGH,gBAAgB,CAAC,cACd;AAAA,QAAC;AAAA;AAAA,UACG,SAAQ;AAAA,UACR,MAAM,SAAS,OAAO,OAAO,SAAS,OAAO,OAAO;AAAA,UACpD,SAAS,MAAM,aAAa,cAAc,CAAC;AAAA,UAC3C,cAAW;AAAA;AAAA,QAEX,sCAACC,eAAA,EAAa,WAAU,WAAU;AAAA,MACtC;AAAA,MAGH,iBAAiB,CAAC,cACf;AAAA,QAAC;AAAA;AAAA,UACG,SAAQ;AAAA,UACR,MAAM,SAAS,OAAO,OAAO,SAAS,OAAO,OAAO;AAAA,UACpD,SAAS,MAAM,aAAa,UAAU;AAAA,UACtC,cAAW;AAAA;AAAA,QACd;AAAA,MAED;AAAA,IAER;AAAA,EAER;AACJ;AACA,WAAW,cAAc;AAWzB,IAAM,iBAAgD,CAAC;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,QAAM,aAAa,cAAc,KAAK,eAAe;AACrD,QAAM,UAAU,KAAK,IAAI,cAAc,cAAc,UAAU;AAE/D,SACI,sCAAC,SAAI,WAAW,GAAG,iCAAiC,SAAS,KAAG,YACnD,WAAU,QAAK,SAAQ,QAAK,YAAW,UACpD;AAER;;;ACxLA,YAAYC,aAAW;AACvB,SAAS,OAAAC,aAA8B;AACvC,SAAS,KAAAC,IAAG,QAAQ,cAAc;AAOlC,IAAM,oBAAoBC;AAAA,EACtB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,MACX;AAAA,MACA,MAAM;AAAA,QACF,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACR;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAiCA,IAAM,YAAkB;AAAA,EACpB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,UAAU,CAAC;AAAA,IACX,gBAAgB,CAAC;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,GAAG;AAAA,EACP,GAAG,QAAQ;AACP,UAAM,CAAC,cAAc,eAAe,IAAU,iBAAS,KAAK;AAC5D,UAAM,CAAC,kBAAkB,mBAAmB,IAAU,iBAAiB,EAAE;AACzE,UAAM,CAAC,aAAa,cAAc,IAAU,iBAAiB,EAAE;AAE/D,UAAM,iBAAiB,QAAQ,KAAK,OAAK,EAAE,OAAO,gBAAgB;AAElE,UAAM,kBAAkB,MAAM;AAC1B,UAAI,kBAAkB,YAAY,KAAK,KAAK,aAAa;AACrD,cAAM,UAAU,eAAe,SAAS,WAClC,eAAe,SAAS,KAAK,SAAO,IAAI,UAAU,WAAW,GAAG,SAAS,cACzE;AAEN,oBAAY;AAAA,UACR,IAAI,GAAG,eAAe,EAAE,IAAI,KAAK,IAAI,CAAC;AAAA,UACtC,OAAO,eAAe;AAAA,UACtB,OAAO;AAAA,UACP,SAAS,GAAG,eAAe,KAAK,KAAK,OAAO;AAAA,QAChD,CAAC;AAED,4BAAoB,EAAE;AACtB,uBAAe,EAAE;AACjB,wBAAgB,KAAK;AAAA,MACzB;AAAA,IACJ;AAEA,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA,WAAW,GAAG,kBAAkB,EAAE,SAAS,KAAK,CAAC,GAAG,sBAAsB,SAAS;AAAA,QAClF,GAAG;AAAA;AAAA,MAGJ,sCAAC,SAAI,WAAU,wCACX,sCAAC,SAAI,WAAU,qBACX,sCAAC,UAAO,WAAU,oFAAmF,GACrG;AAAA,QAAC;AAAA;AAAA,UACG,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,eAAe,EAAE,OAAO,KAAK;AAAA,UAC9C;AAAA,UACA,WAAU;AAAA;AAAA,MACd,CACJ,GAEC,oBAAoB,QAAQ,SAAS,KAClC;AAAA,QAAC;AAAA;AAAA,UACG,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAAS,MAAM,gBAAgB,CAAC,YAAY;AAAA,UAC5C,WAAU;AAAA;AAAA,QAEV,sCAAC,UAAO,WAAU,gBAAe;AAAA,QAAE;AAAA,MAEvC,GAGH,oBAAoB,cAAc,SAAS,KAAK,gBAC7C;AAAA,QAAC;AAAA;AAAA,UACG,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAAS,MAAM;AACX,2BAAe,EAAE;AACjB,yBAAa;AAAA,UACjB;AAAA,UACA,WAAU;AAAA;AAAA,QAEV,sCAACC,IAAA,EAAE,WAAU,gBAAe;AAAA,QAAE;AAAA,MAElC,CAER;AAAA,MAGC,cAAc,SAAS,KACpB,sCAAC,SAAI,WAAU,0BACV,cAAc,IAAI,CAAC,WAChB;AAAA,QAAC;AAAA;AAAA,UACG,KAAK,OAAO;AAAA,UACZ,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,WAAS;AAAA,UACT,UAAU,MAAM,iBAAiB,OAAO,EAAE;AAAA;AAAA,QAEzC,OAAO;AAAA,MACZ,CACH,CACL;AAAA,MAIH,gBACG,sCAAC,SAAI,WAAU,yDACX,sCAAC,SAAI,WAAU,YACX,sCAAC,WAAM,WAAU,oCAAiC,WAAS,GAC3D;AAAA,QAAC;AAAA;AAAA,UACG,SAAS,QAAQ,IAAI,QAAM,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,MAAM,EAAE;AAAA,UAC3D,OAAO;AAAA,UACP,eAAe;AAAA,UACf,aAAY;AAAA;AAAA,MAChB,CACJ,GAEC,kBACG,sCAAC,SAAI,WAAU,YACX,sCAAC,WAAM,WAAU,oCAAiC,OAAK,GACtD,eAAe,SAAS,WACrB;AAAA,QAAC;AAAA;AAAA,UACG,SAAS,eAAe,WAAW,CAAC;AAAA,UACpC,OAAO;AAAA,UACP,eAAe;AAAA,UACf,aAAa,eAAe,eAAe;AAAA;AAAA,MAC/C,IAEA;AAAA,QAAC;AAAA;AAAA,UACG,MAAM,eAAe,SAAS,SAAS,SAAS,eAAe,SAAS,WAAW,WAAW;AAAA,UAC9F,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,eAAe,EAAE,OAAO,KAAK;AAAA,UAC9C,aAAa,eAAe,eAAe;AAAA;AAAA,MAC/C,CAER,GAGJ;AAAA,QAAC;AAAA;AAAA,UACG,SAAS;AAAA,UACT,UAAU,CAAC,kBAAkB,CAAC,YAAY,KAAK;AAAA,UAC/C,MAAK;AAAA;AAAA,QACR;AAAA,MAED,CACJ;AAAA,IAER;AAAA,EAER;AACJ;AACA,UAAU,cAAc;;;ACtNxB,YAAYC,aAAW;AACvB,SAAS,OAAAC,aAA8B;AACvC,SAAS,YAAY,cAAc,OAAO,YAAY,OAAO,UAAU,WAAW;AAIlF,IAAM,mBAAmBC;AAAA,EACrB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACF,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACR;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAkBA,IAAM,WAAiB;AAAA,EACnB,CAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,UAAU;AAAA,IACV,GAAG;AAAA,EACP,GAAG,QAAQ;AACP,UAAM,cAAc,CAAC,QAAyB;AAC1C,YAAM,WAAW,OAAO,QAAQ,WAAW,WAAW,GAAG,IAAI;AAE7D,UAAI,MAAM,QAAQ,EAAG,QAAO;AAE5B,cAAQ,QAAQ;AAAA,QACZ,KAAK;AACD,iBAAO,IAAI,KAAK,aAAa,SAAS;AAAA,YAClC,OAAO;AAAA,YACP,UAAU;AAAA,YACV,uBAAuB;AAAA,YACvB,uBAAuB;AAAA,UAC3B,CAAC,EAAE,OAAO,QAAQ;AAAA,QACtB,KAAK;AACD,iBAAO,GAAG,QAAQ;AAAA,QACtB,KAAK;AAAA,QACL;AACI,iBAAO,IAAI,KAAK,aAAa,OAAO,EAAE,OAAO,QAAQ;AAAA,MAC7D;AAAA,IACJ;AAEA,UAAM,eAAe,MAAM;AACvB,UAAI,CAAC,OAAQ,QAAO;AAEpB,YAAM,YAAY,UAAU,OAAO,QAAQ,IAAI,OAAO,OAAO,QAAQ,IAAI,SAAS;AAElF,cAAQ,WAAW;AAAA,QACf,KAAK;AACD,iBAAO,sCAAC,cAAW,WAAU,0BAAyB;AAAA,QAC1D,KAAK;AACD,iBAAO,sCAAC,gBAAa,WAAU,wBAAuB;AAAA,QAC1D,KAAK;AAAA,QACL;AACI,iBAAO,sCAAC,SAAM,WAAU,iCAAgC;AAAA,MAChE;AAAA,IACJ;AAEA,UAAM,gBAAgB,MAAM;AACxB,UAAI,CAAC,OAAQ,QAAO;AAEpB,YAAM,YAAY,UAAU,OAAO,QAAQ,IAAI,OAAO,OAAO,QAAQ,IAAI,SAAS;AAElF,cAAQ,WAAW;AAAA,QACf,KAAK;AACD,iBAAO;AAAA,QACX,KAAK;AACD,iBAAO;AAAA,QACX,KAAK;AAAA,QACL;AACI,iBAAO;AAAA,MACf;AAAA,IACJ;AAEA,QAAI,SAAS;AACT,aACI,sCAAC,QAAK,KAAU,WAAW,GAAG,iBAAiB,EAAE,SAAS,KAAK,CAAC,GAAG,SAAS,GAAI,GAAG,SAC/E,sCAAC,cAAW,WAAU,+DAClB,sCAAC,SAAI,WAAU,2CAA0C,GACxD,QAAQ,sCAAC,SAAI,WAAU,0CAAyC,CACrE,GACA,sCAAC,mBACG,sCAAC,SAAI,WAAU,gDAA+C,GAC9D,sCAAC,SAAI,WAAU,2CAA0C,CAC7D,CACJ;AAAA,IAER;AAEA,WACI,sCAAC,QAAK,KAAU,WAAW,GAAG,iBAAiB,EAAE,SAAS,KAAK,CAAC,GAAG,SAAS,GAAI,GAAG,SAC/E,sCAAC,cAAW,WAAU,+DAClB,sCAAC,aAAU,WAAU,oCAAkC,KAAM,GAC5D,QAAQ,sCAAC,SAAI,WAAU,2BAAyB,IAAK,CAC1D,GACA,sCAAC,mBACG,sCAAC,SAAI,WAAU,mCAAiC,YAAY,KAAK,CAAE,GAClE,UACG,sCAAC,SAAI,WAAU,8CACV,aAAa,GACd,sCAAC,UAAK,WAAW,cAAc,KAC1B,OAAO,QAAQ,IAAI,MAAM,IAAI,OAAO,OACpC,OAAO,SAAS,IAAI,OAAO,KAAK,EACrC,GACC,OAAO,UACJ,sCAAC,UAAK,WAAU,2BAAwB,SAAM,OAAO,MAAO,CAEpE,CAER,CACJ;AAAA,EAER;AACJ;AACA,SAAS,cAAc;AAOvB,IAAM,aAAmB;AAAA,EACrB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ;AACzB,UAAM,mBAAmB,MAAM;AAC3B,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,iBAAO,EAAE,MAAM,sCAAC,cAAW,WAAU,WAAU,GAAI,QAAQ,WAAoB;AAAA,QACnF,KAAK;AACD,iBAAO,EAAE,MAAM,sCAAC,SAAM,WAAU,WAAU,GAAI,QAAQ,SAAkB;AAAA,QAC5E,KAAK;AACD,iBAAO,EAAE,MAAM,sCAAC,YAAS,WAAU,WAAU,GAAI,QAAQ,aAAsB;AAAA,QACnF,KAAK;AACD,iBAAO,EAAE,MAAM,sCAAC,OAAI,WAAU,WAAU,GAAI,QAAQ,SAAkB;AAAA,QAC1E,KAAK;AAAA,QACL;AACI,iBAAO,EAAE,MAAM,QAAW,QAAQ,SAAkB;AAAA,MAC5D;AAAA,IACJ;AAEA,UAAM,EAAE,MAAM,OAAO,IAAI,iBAAiB;AAE1C,WACI;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA;AAAA,QACC,GAAG;AAAA;AAAA,IACR;AAAA,EAER;AACJ;AACA,WAAW,cAAc;;;AC7LzB,SAAS,YAAAC,kBAAgB;AACzB,SAAS,SAAAC,QAAO,YAAY;AAUrB,SAAS,UAAU,EAAE,UAAU,YAAY,GAAG,GAAmB;AACtE,QAAM,CAAC,QAAQ,SAAS,IAAIC,WAAS,KAAK;AAE1C,QAAM,kBAAkB,YAAY;AAClC,QAAI;AACF,YAAM,UAAU,UAAU,UAAU,QAAQ;AAC5C,gBAAU,IAAI;AACd,iBAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,IACzC,SAAS,KAAK;AACZ,cAAQ,MAAM,yBAAyB,GAAG;AAAA,IAC5C;AAAA,EACF;AAEA,SACE,oCAAC,SAAI,WAAW,4DAA4D,SAAS,MACnF;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAU;AAAA,MACV,SAAS;AAAA;AAAA,IAER,SACC,oCAACC,QAAA,EAAM,WAAU,0BAAyB,IAE1C,oCAAC,QAAK,WAAU,WAAU;AAAA,EAE9B,GACA,oCAAC,aACC,oCAAC,cAAM,QAAS,CAClB,CACF;AAEJ;;;AC3CA,YAAYC,aAAW;AACvB,SAAS,iBAAiB,0BAA0B;AAO7C,SAAS,cAAc,EAAE,UAAU,GAAG,MAAM,GAAuB;AACtE,SAAO,sCAAC,sBAAoB,GAAG,SAAQ,QAAS;AACpD;","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"]}