@webdevarif/dashui 1.2.8 → 1.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/primitives/button.tsx","../src/lib/utils.ts","../src/components/primitives/badge.tsx","../src/components/primitives/card.tsx","../src/components/primitives/checkbox.tsx","../src/components/primitives/dialog.tsx","../src/components/primitives/dropdown-menu.tsx","../src/components/primitives/input.tsx","../src/components/primitives/label.tsx","../src/components/primitives/popover.tsx","../src/components/primitives/select.tsx","../src/components/primitives/separator.tsx","../src/components/primitives/skeleton.tsx","../src/components/primitives/switch.tsx","../src/components/primitives/tabs.tsx","../src/components/primitives/textarea.tsx","../src/components/primitives/tooltip.tsx","../src/components/layout/app-shell.tsx","../src/components/layout/sidebar.tsx","../src/components/layout/top-bar.tsx","../src/components/layout/page.tsx","../src/components/layout/page-section.tsx","../src/components/layout/search-bar.tsx","../src/components/layout/notification-bell.tsx","../src/components/layout/theme-toggle.tsx","../src/components/layout/dashboard-layout.tsx","../src/components/data/data-table.tsx","../src/components/data/empty-state.tsx","../src/components/data/pagination.tsx","../src/components/data/stats.tsx","../src/components/data/plan-badge.tsx","../src/components/data/storage-bar.tsx","../src/components/media/upload-zone.tsx","../src/components/media/upload-progress-panel.tsx","../src/components/media/image-picker-field.tsx","../src/components/media/media-card.tsx","../src/components/form/form-field.tsx","../src/components/form/form-layout.tsx","../src/components/form/form-section.tsx","../src/components/form/local-input.tsx","../src/components/form/responsive-size-device-icon.tsx","../src/components/form/responsive-types.tsx","../src/components/form/responsive-size-field.tsx","../src/components/feedback/alert.tsx","../src/components/feedback/loading-spinner.tsx","../src/components/feedback/confirm-dialog.tsx","../src/components/content/post-status-badge.tsx","../src/components/content/post-list-table.tsx","../src/components/Skeleton.tsx","../src/components/content/post-filters-bar.tsx","../src/components/content/post-editor-shell.tsx","../src/components/content/slug-input.tsx","../src/components/content/post-sidebar-section.tsx","../src/components/ui/hsl-color-input.tsx","../src/components/ui/color-picker.tsx","../src/components/editors/tiptap-editor.tsx","../src/components/cms/theme-builder.tsx","../src/components/cms/color-schema-panel.tsx","../src/components/cms/typography-panel.tsx","../src/setup/hooks/use-fetch.ts","../src/setup/hooks/use-auth.ts","../src/components/auth/AuthShell.tsx","../src/components/auth/AuthCard.tsx","../src/components/auth/AuthLogo.tsx","../src/components/auth/AuthHeader.tsx","../src/components/auth/AuthField.tsx","../src/components/auth/AuthButton.tsx","../src/components/auth/AuthDivider.tsx","../src/components/auth/AuthFootnote.tsx","../src/index.ts","../src/setup/providers/auth-provider.tsx","../src/setup/providers/swr-provider.tsx","../src/setup/providers/root-provider.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg 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 {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"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-lg px-3\",\n lg: \"h-11 rounded-lg 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\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\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 success:\n \"border-transparent bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100\",\n warning:\n \"border-transparent bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100\",\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\";\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","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogClose = DialogPrimitive.Close;\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\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 className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close 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 <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import * 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;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\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 =\n 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 =\n 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","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n error?: boolean;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, error, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-lg border border-input bg-background px-3 py-2 text-sm ring-offset-background\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n error && \"border-destructive focus-visible:ring-destructive\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cn } from \"../../lib/utils\";\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"block text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className\n )}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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 </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Select = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-lg border border-input bg-background px-3 py-2 text-sm\",\n \"ring-offset-background placeholder:text-muted-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"[&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50 shrink-0\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n style={{ background: '#ffffff', border: '1px solid #e5e7eb', borderRadius: 10, boxShadow: '0 8px 32px rgba(0,0,0,0.12)', zIndex: 9999, overflow: 'hidden' }}\n className={cn(\n \"relative max-h-96 min-w-[8rem] overflow-hidden\",\n \"rounded-lg border border-border bg-white text-foreground shadow-lg\",\n \"dark:bg-zinc-900 dark:border-zinc-700\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-xs font-semibold text-muted-foreground\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center\",\n \"rounded-md py-2 pl-9 pr-3 text-sm outline-none\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n {/* Checkmark — left aligned */}\n <span className=\"absolute left-2.5 flex h-4 w-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-3.5 w-3.5 text-primary\" strokeWidth={2.5} />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select, SelectGroup, SelectValue, SelectTrigger,\n SelectContent, SelectLabel, SelectItem,\n SelectSeparator, SelectScrollUpButton, SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../../lib/utils\";\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import { cn } from \"../../lib/utils\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-[24px] w-[44px] shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../../lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean;\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, error, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background 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 error && \"border-destructive focus-visible:ring-destructive\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface AppShellProps {\n sidebar: React.ReactNode;\n children: React.ReactNode;\n collapsed?: boolean;\n}\n\nexport function AppShell({ sidebar, children, collapsed }: AppShellProps) {\n return (\n <div className=\"flex h-screen overflow-hidden bg-background\">\n <aside\n className={cn(\n \"hidden border-r bg-card transition-all duration-300 md:block\",\n collapsed\n ? \"w-[var(--sidebar-collapsed-width)]\"\n : \"w-[var(--sidebar-width)]\"\n )}\n >\n {sidebar}\n </aside>\n <main className=\"flex flex-1 flex-col overflow-hidden\">{children}</main>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { ChevronDown, ChevronsLeft, ChevronsRight } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SidebarItem {\n label: string;\n href: string;\n icon?: React.ComponentType<{ className?: string }>;\n badge?: string | number;\n children?: SidebarItem[];\n active?: boolean;\n}\n\nexport interface SidebarProps {\n logo?: React.ReactNode;\n items: SidebarItem[];\n footer?: React.ReactNode;\n collapsed?: boolean;\n onCollapse?: (collapsed: boolean) => void;\n}\n\nfunction SidebarItemComponent({\n item,\n collapsed,\n depth = 0,\n}: {\n item: SidebarItem;\n collapsed?: boolean;\n depth?: number;\n}) {\n const [open, setOpen] = React.useState(\n item.active || item.children?.some((c) => c.active) || false\n );\n const Icon = item.icon;\n const hasChildren = item.children && item.children.length > 0;\n\n if (hasChildren) {\n return (\n <div>\n <button\n onClick={() => setOpen(!open)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md px-3 py-2 text-sm font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n item.active && \"bg-accent text-accent-foreground\",\n depth > 0 && \"pl-9\"\n )}\n >\n {Icon && <Icon className=\"h-4 w-4 shrink-0\" />}\n {!collapsed && (\n <>\n <span className=\"flex-1 text-left\">{item.label}</span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform\",\n open && \"rotate-180\"\n )}\n />\n </>\n )}\n </button>\n {open && !collapsed && (\n <div className=\"mt-1 space-y-1\">\n {item.children!.map((child) => (\n <SidebarItemComponent\n key={child.href}\n item={child}\n collapsed={collapsed}\n depth={depth + 1}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n\n return (\n <a\n href={item.href}\n className={cn(\n \"flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n item.active && \"bg-accent text-accent-foreground\",\n depth > 0 && \"pl-9\"\n )}\n >\n {Icon && <Icon className=\"h-4 w-4 shrink-0\" />}\n {!collapsed && (\n <>\n <span className=\"flex-1\">{item.label}</span>\n {item.badge !== undefined && (\n <span className=\"ml-auto rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary\">\n {item.badge}\n </span>\n )}\n </>\n )}\n </a>\n );\n}\n\nexport function Sidebar({\n logo,\n items,\n footer,\n collapsed,\n onCollapse,\n}: SidebarProps) {\n return (\n <div className=\"flex h-full flex-col\">\n {logo && (\n <div className=\"flex h-14 items-center border-b px-4\">{logo}</div>\n )}\n <nav className=\"flex-1 space-y-1 overflow-y-auto p-3\">\n {items.map((item) => (\n <SidebarItemComponent\n key={item.href}\n item={item}\n collapsed={collapsed}\n />\n ))}\n </nav>\n <div className=\"border-t p-3\">\n {footer}\n {onCollapse && (\n <button\n onClick={() => onCollapse(!collapsed)}\n className=\"flex w-full items-center justify-center rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"\n >\n {collapsed ? (\n <ChevronsRight className=\"h-4 w-4\" />\n ) : (\n <ChevronsLeft className=\"h-4 w-4\" />\n )}\n </button>\n )}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Menu } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface TopBarProps {\n storeName?: string;\n user?: { name: string; email: string; avatar?: string };\n onMenuToggle?: () => void;\n actions?: React.ReactNode;\n className?: string;\n}\n\nexport function TopBar({\n storeName,\n user,\n onMenuToggle,\n actions,\n className,\n}: TopBarProps) {\n return (\n <header\n className={cn(\n \"flex h-14 items-center gap-4 border-b bg-card px-4 lg:px-6\",\n className\n )}\n >\n {onMenuToggle && (\n <button\n onClick={onMenuToggle}\n className=\"rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground md:hidden\"\n >\n <Menu className=\"h-5 w-5\" />\n <span className=\"sr-only\">Toggle menu</span>\n </button>\n )}\n\n {storeName && (\n <div className=\"font-semibold text-foreground\">{storeName}</div>\n )}\n\n <div className=\"flex flex-1 items-center justify-end gap-4\">\n {actions}\n\n {user && (\n <div className=\"flex items-center gap-3\">\n <div className=\"hidden text-right text-sm md:block\">\n <div className=\"font-medium\">{user.name}</div>\n <div className=\"text-muted-foreground text-xs\">{user.email}</div>\n </div>\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-primary text-xs font-medium text-primary-foreground\">\n {user.avatar ? (\n <img\n src={user.avatar}\n alt={user.name}\n className=\"h-full w-full rounded-full object-cover\"\n />\n ) : (\n user.name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n )}\n </div>\n </div>\n )}\n </div>\n </header>\n );\n}\n","import * as React from \"react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface Breadcrumb {\n label: string;\n href?: string;\n}\n\nexport interface PageProps {\n title: string;\n subtitle?: string;\n actions?: React.ReactNode;\n breadcrumbs?: Breadcrumb[];\n children: React.ReactNode;\n fullWidth?: boolean;\n}\n\nexport function Page({\n title,\n subtitle,\n actions,\n breadcrumbs,\n children,\n fullWidth,\n}: PageProps) {\n return (\n <div className=\"flex-1 overflow-y-auto\">\n <div\n className={cn(\n \"mx-auto space-y-6 p-6\",\n !fullWidth && \"max-w-6xl\"\n )}\n >\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav className=\"flex items-center space-x-1 text-sm text-muted-foreground\">\n {breadcrumbs.map((crumb, index) => (\n <React.Fragment key={index}>\n {index > 0 && <ChevronRight className=\"h-4 w-4\" />}\n {crumb.href ? (\n <a\n href={crumb.href}\n className=\"hover:text-foreground transition-colors\"\n >\n {crumb.label}\n </a>\n ) : (\n <span className=\"text-foreground\">{crumb.label}</span>\n )}\n </React.Fragment>\n ))}\n </nav>\n )}\n\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">{title}</h1>\n {subtitle && (\n <p className=\"text-muted-foreground mt-1\">{subtitle}</p>\n )}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n\n {children}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PageSectionProps {\n title?: string;\n description?: string;\n children: React.ReactNode;\n actions?: React.ReactNode;\n className?: string;\n}\n\nexport function PageSection({\n title,\n description,\n children,\n actions,\n className,\n}: PageSectionProps) {\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n >\n {(title || description || actions) && (\n <div className=\"flex items-start justify-between border-b p-6\">\n <div>\n {title && <h2 className=\"text-lg font-semibold\">{title}</h2>}\n {description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )}\n <div className=\"p-6\">{children}</div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SearchBarProps {\n value?: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n shortcut?: string;\n className?: string;\n width?: string;\n}\n\nexport function SearchBar({\n value,\n onChange,\n placeholder = \"Search…\",\n shortcut,\n className,\n width = \"max-w-xs\",\n}: SearchBarProps) {\n const shortcuts = shortcut ? shortcut.split(\" \") : [];\n\n return (\n <div className={cn(\"relative flex items-center\", width, className)}>\n {/* Search icon */}\n <svg\n className=\"pointer-events-none absolute left-2.5 h-3.5 w-3.5 text-muted-foreground\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n\n <input\n type=\"search\"\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n placeholder={placeholder}\n className={cn(\n \"h-8 w-full rounded-lg border border-input bg-muted/50 pl-8 text-sm outline-none transition-colors\",\n \"placeholder:text-muted-foreground\",\n \"focus:border-primary focus:ring-1 focus:ring-primary\",\n shortcut ? \"pr-16\" : \"pr-3\"\n )}\n />\n\n {shortcuts.length > 0 && (\n <div className=\"pointer-events-none absolute right-2 flex items-center gap-0.5\">\n {shortcuts.map((key, i) => (\n <kbd\n key={i}\n className=\"inline-flex h-5 items-center rounded border border-border bg-background px-1 font-mono text-[10px] text-muted-foreground\"\n >\n {key}\n </kbd>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface NotificationBellProps {\n count?: number;\n onClick?: () => void;\n className?: string;\n}\n\nexport function NotificationBell({\n count = 0,\n onClick,\n className,\n}: NotificationBellProps) {\n return (\n <button\n onClick={onClick}\n className={cn(\n \"relative flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n className\n )}\n aria-label={count > 0 ? `${count} unread notifications` : \"Notifications\"}\n >\n {/* Bell icon */}\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\" />\n <path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\" />\n </svg>\n\n {count > 0 && (\n <span className=\"absolute right-1.5 top-1.5 h-2 w-2 rounded-full bg-green-500\" />\n )}\n </button>\n );\n}\n","'use client';\n\nimport * as React from \"react\";\nimport { useTheme } from \"next-themes\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ThemeToggleProps {\n className?: string;\n /** External controlled theme value. When provided, next-themes is not used. */\n theme?: string;\n /** External toggle handler. When provided, next-themes setTheme is not called. */\n onToggle?: () => void;\n}\n\nexport function ThemeToggle({ className, theme: externalTheme, onToggle }: ThemeToggleProps) {\n // Always call hook (Rules of Hooks) — values only used when no external props\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return (\n <button\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground\",\n className\n )}\n aria-label=\"Toggle theme\"\n >\n <span className=\"h-4 w-4\" />\n </button>\n );\n }\n\n // External props take precedence over next-themes\n const isDark = externalTheme !== undefined\n ? externalTheme === \"dark\"\n : resolvedTheme === \"dark\";\n\n const handleToggle = onToggle ?? (() => setTheme(isDark ? \"light\" : \"dark\"));\n\n return (\n <button\n onClick={handleToggle}\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n className\n )}\n aria-label={isDark ? \"Switch to light mode\" : \"Switch to dark mode\"}\n >\n {isDark ? (\n /* Sun icon */\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\" />\n </svg>\n ) : (\n /* Moon icon */\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />\n </svg>\n )}\n </button>\n );\n}\n","'use client';\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SearchBar } from \"./search-bar\";\nimport { NotificationBell } from \"./notification-bell\";\nimport { ThemeToggle } from \"./theme-toggle\";\n\nexport interface NavItem {\n href: string;\n label: string;\n icon?: React.ReactNode;\n badge?: string | number;\n children?: NavItem[];\n}\n\nexport interface DashboardLayoutProps {\n // Branding\n logo?: React.ReactNode;\n appName?: string;\n // Navigation\n navItems: NavItem[];\n bottomNavItems?: NavItem[];\n activeHref?: string;\n onNavigate?: (href: string) => void;\n // Topbar\n searchPlaceholder?: string;\n searchShortcut?: string;\n notificationCount?: number;\n onNotificationClick?: () => void;\n // User\n user?: { name: string; email: string; avatar?: string };\n onSignOut?: () => void;\n // Layout\n children: React.ReactNode;\n defaultCollapsed?: boolean;\n footerContent?: React.ReactNode;\n}\n\nfunction isActive(itemHref: string, activeHref?: string): boolean {\n if (!activeHref) return false;\n return activeHref === itemHref || activeHref.startsWith(itemHref + \"/\");\n}\n\nfunction NavItemRow({\n item,\n collapsed,\n activeHref,\n onNavigate,\n depth = 0,\n}: {\n item: NavItem;\n collapsed: boolean;\n activeHref?: string;\n onNavigate?: (href: string) => void;\n depth?: number;\n}) {\n const active = isActive(item.href, activeHref);\n const hasChildren = item.children && item.children.length > 0;\n const childActive = hasChildren && item.children!.some((c) => isActive(c.href, activeHref));\n const [open, setOpen] = React.useState(active || childActive);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (onNavigate) {\n e.preventDefault();\n onNavigate(item.href);\n }\n if (hasChildren) {\n e.preventDefault();\n setOpen((v) => !v);\n }\n };\n\n const rowClasses = cn(\n \"flex w-full items-center gap-2.5 rounded-md px-3 py-2 text-sm font-medium transition-colors\",\n active\n ? \"bg-sidebar-accent text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground\",\n depth > 0 && \"py-1.5\"\n );\n\n return (\n <div>\n <a\n href={item.href}\n onClick={hasChildren ? (e) => { e.preventDefault(); setOpen((v) => !v); } : onNavigate ? handleClick : undefined}\n className={rowClasses}\n title={collapsed ? item.label : undefined}\n >\n {item.icon && (\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">\n {item.icon}\n </span>\n )}\n {!collapsed && (\n <>\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.badge !== undefined && !hasChildren && (\n <span className=\"rounded-full bg-primary/15 px-2 py-0.5 text-[11px] font-semibold text-primary\">\n {item.badge}\n </span>\n )}\n {hasChildren && (\n <svg\n className={cn(\"h-3.5 w-3.5 shrink-0 transition-transform text-sidebar-foreground/50\", open && \"rotate-180\")}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n )}\n </>\n )}\n </a>\n\n {hasChildren && open && !collapsed && (\n <div className=\"mt-0.5 ml-[22px] space-y-0.5 border-l border-sidebar-border/60 pl-3\">\n {item.children!.map((child) => (\n <NavItemRow\n key={child.href}\n item={child}\n collapsed={collapsed}\n activeHref={activeHref}\n onNavigate={onNavigate}\n depth={depth + 1}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction UserAvatar({ user, size = \"sm\" }: { user: { name: string; email: string; avatar?: string }; size?: \"sm\" | \"md\" }) {\n const initials = user.name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n\n const sizeClass = size === \"md\" ? \"h-8 w-8 text-xs\" : \"h-7 w-7 text-[10px]\";\n\n return (\n <div className={cn(\"flex shrink-0 items-center justify-center rounded-full bg-primary font-semibold text-primary-foreground overflow-hidden\", sizeClass)}>\n {user.avatar ? (\n <img src={user.avatar} alt={user.name} className=\"h-full w-full object-cover\" />\n ) : (\n initials\n )}\n </div>\n );\n}\n\nexport function DashboardLayout({\n logo,\n appName = \"Dashboard\",\n navItems,\n bottomNavItems,\n activeHref,\n onNavigate,\n searchPlaceholder,\n searchShortcut,\n notificationCount,\n onNotificationClick,\n user,\n onSignOut,\n children,\n defaultCollapsed = false,\n footerContent,\n}: DashboardLayoutProps) {\n const [collapsed, setCollapsed] = React.useState(defaultCollapsed);\n const [userMenuOpen, setUserMenuOpen] = React.useState(false);\n const [searchValue, setSearchValue] = React.useState(\"\");\n const userMenuRef = React.useRef<HTMLDivElement>(null);\n\n // Close user menu on outside click\n React.useEffect(() => {\n function handler(e: MouseEvent) {\n if (userMenuRef.current && !userMenuRef.current.contains(e.target as Node)) {\n setUserMenuOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, []);\n\n const ToggleIcon = () => (\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n );\n\n return (\n <div className=\"flex h-screen overflow-hidden bg-background\">\n {/* ── Sidebar ── */}\n <aside\n className={cn(\n \"flex shrink-0 flex-col border-r bg-sidebar transition-all duration-200 ease-in-out\",\n collapsed ? \"w-16\" : \"w-80\"\n )}\n >\n {/* Logo area */}\n <div className=\"flex h-14 shrink-0 items-center border-b border-sidebar-border px-4\">\n {collapsed ? (\n <div className=\"flex h-8 w-8 items-center justify-center rounded-md bg-primary/10\">\n <span className=\"text-sm font-bold text-primary\">\n {appName?.[0] ?? \"D\"}\n </span>\n </div>\n ) : (\n logo ?? (\n <span className=\"text-base font-semibold text-sidebar-foreground\">\n {appName}\n </span>\n )\n )}\n </div>\n\n {/* Nav */}\n <nav className=\"flex-1 space-y-0.5 overflow-y-auto p-2\">\n {navItems.map((item) => (\n <NavItemRow\n key={item.href}\n item={item}\n collapsed={collapsed}\n activeHref={activeHref}\n onNavigate={onNavigate}\n />\n ))}\n </nav>\n\n {/* Bottom nav + footer + user */}\n <div className=\"border-t border-sidebar-border p-2\">\n {bottomNavItems && bottomNavItems.length > 0 && (\n <div className=\"mb-2 space-y-0.5\">\n {bottomNavItems.map((item) => (\n <NavItemRow\n key={item.href}\n item={item}\n collapsed={collapsed}\n activeHref={activeHref}\n onNavigate={onNavigate}\n />\n ))}\n </div>\n )}\n\n {footerContent && !collapsed && (\n <div className=\"mb-2\">{footerContent}</div>\n )}\n\n {/* User row */}\n {user && (\n <div className=\"relative\" ref={userMenuRef}>\n <button\n onClick={() => setUserMenuOpen((v) => !v)}\n className=\"flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-sm transition-colors hover:bg-sidebar-accent/60\"\n >\n <UserAvatar user={user} />\n {!collapsed && (\n <div className=\"flex-1 overflow-hidden text-left\">\n <div className=\"truncate text-xs font-medium text-sidebar-foreground\">{user.name}</div>\n <div className=\"truncate text-[11px] text-sidebar-foreground/60\">{user.email}</div>\n </div>\n )}\n </button>\n\n {userMenuOpen && (\n <div className={cn(\n \"absolute bottom-full mb-1 z-50 min-w-[180px] rounded-md border bg-popover shadow-md\",\n collapsed ? \"left-full ml-2 bottom-0\" : \"left-0\"\n )}>\n <div className=\"px-3 py-2 border-b\">\n <p className=\"text-xs font-medium\">{user.name}</p>\n <p className=\"text-[11px] text-muted-foreground truncate\">{user.email}</p>\n </div>\n {onSignOut && (\n <button\n onClick={() => { setUserMenuOpen(false); onSignOut(); }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-sm text-destructive hover:bg-accent transition-colors\"\n >\n <svg className=\"h-3.5 w-3.5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n <polyline points=\"16 17 21 12 16 7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n Sign out\n </button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </aside>\n\n {/* ── Main column ── */}\n <div className=\"flex flex-1 flex-col overflow-hidden\">\n {/* Topbar */}\n <header className=\"flex h-14 shrink-0 items-center gap-3 border-b bg-background px-4\">\n <button\n onClick={() => setCollapsed((v) => !v)}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"\n aria-label=\"Toggle sidebar\"\n >\n <ToggleIcon />\n </button>\n\n <div className=\"flex flex-1 items-center gap-2\">\n <SearchBar\n value={searchValue}\n onChange={setSearchValue}\n placeholder={searchPlaceholder}\n shortcut={searchShortcut}\n width=\"max-w-sm\"\n />\n </div>\n\n <div className=\"flex items-center gap-1\">\n <ThemeToggle />\n <NotificationBell count={notificationCount} onClick={onNotificationClick} />\n {user && (\n <div className=\"ml-1\">\n <UserAvatar user={user} size=\"md\" />\n </div>\n )}\n </div>\n </header>\n\n {/* Content */}\n <main className=\"flex-1 overflow-y-auto bg-muted/30 p-6\">\n {children}\n </main>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Checkbox } from \"../primitives/checkbox\";\nimport { Skeleton } from \"../primitives/skeleton\";\n\nexport interface Column<T> {\n key: keyof T | string;\n header: string;\n cell?: (row: T) => React.ReactNode;\n sortable?: boolean;\n width?: string;\n}\n\nexport interface DataTableProps<T> {\n columns: Column<T>[];\n data: T[];\n loading?: boolean;\n pagination?: {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n };\n selection?: {\n selected: string[];\n onSelect: (ids: string[]) => void;\n idKey?: keyof T;\n };\n onRowClick?: (row: T) => void;\n emptyState?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n data,\n loading,\n pagination,\n selection,\n onRowClick,\n emptyState,\n actions,\n}: DataTableProps<T>) {\n const idKey = (selection?.idKey ?? \"id\") as string;\n\n const allSelected =\n selection && data.length > 0 && data.every((row) => selection.selected.includes(String(row[idKey])));\n\n const someSelected =\n selection && data.some((row) => selection.selected.includes(String(row[idKey]))) && !allSelected;\n\n function toggleAll() {\n if (!selection) return;\n if (allSelected) {\n selection.onSelect([]);\n } else {\n selection.onSelect(data.map((row) => String(row[idKey])));\n }\n }\n\n function toggleRow(row: T) {\n if (!selection) return;\n const id = String(row[idKey]);\n if (selection.selected.includes(id)) {\n selection.onSelect(selection.selected.filter((s) => s !== id));\n } else {\n selection.onSelect([...selection.selected, id]);\n }\n }\n\n const totalPages = pagination\n ? Math.ceil(pagination.total / pagination.pageSize)\n : 1;\n\n return (\n <div className=\"space-y-4\">\n {selection && selection.selected.length > 0 && actions && (\n <div className=\"flex items-center gap-2 rounded-md border bg-muted/50 p-2\">\n <span className=\"text-sm text-muted-foreground\">\n {selection.selected.length} selected\n </span>\n {actions}\n </div>\n )}\n\n <div className=\"rounded-md border\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n {selection && (\n <th className=\"w-12 px-4 py-3\">\n <Checkbox\n checked={allSelected}\n ref={(el) => {\n if (el) {\n (el as unknown as HTMLInputElement).indeterminate =\n someSelected ?? false;\n }\n }}\n onCheckedChange={toggleAll}\n />\n </th>\n )}\n {columns.map((col) => (\n <th\n key={String(col.key)}\n className=\"px-4 py-3 text-left font-medium text-muted-foreground\"\n style={col.width ? { width: col.width } : undefined}\n >\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading\n ? Array.from({ length: 5 }).map((_, i) => (\n <tr key={i} className=\"border-b\">\n {selection && (\n <td className=\"px-4 py-3\">\n <Skeleton className=\"h-4 w-4\" />\n </td>\n )}\n {columns.map((col) => (\n <td key={String(col.key)} className=\"px-4 py-3\">\n <Skeleton className=\"h-4 w-24\" />\n </td>\n ))}\n </tr>\n ))\n : data.length === 0\n ? (\n <tr>\n <td\n colSpan={columns.length + (selection ? 1 : 0)}\n className=\"py-12 text-center\"\n >\n {emptyState || (\n <p className=\"text-muted-foreground\">No data found</p>\n )}\n </td>\n </tr>\n )\n : data.map((row, idx) => {\n const rowId = String(row[idKey] ?? idx);\n const isSelected = selection?.selected.includes(rowId);\n return (\n <tr\n key={rowId}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50\",\n isSelected && \"bg-muted/50\",\n onRowClick && \"cursor-pointer\"\n )}\n onClick={() => onRowClick?.(row)}\n >\n {selection && (\n <td\n className=\"px-4 py-3\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => toggleRow(row)}\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={String(col.key)} className=\"px-4 py-3\">\n {col.cell\n ? col.cell(row)\n : String(row[col.key as keyof T] ?? \"\")}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n\n {pagination && totalPages > 1 && (\n <div className=\"flex items-center justify-between px-2\">\n <div className=\"text-sm text-muted-foreground\">\n Page {pagination.page} of {totalPages} ({pagination.total} total)\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n className=\"rounded-md border px-3 py-1.5 text-sm disabled:opacity-50\"\n disabled={pagination.page <= 1}\n onClick={() => pagination.onPageChange(pagination.page - 1)}\n >\n Previous\n </button>\n <button\n className=\"rounded-md border px-3 py-1.5 text-sm disabled:opacity-50\"\n disabled={pagination.page >= totalPages}\n onClick={() => pagination.onPageChange(pagination.page + 1)}\n >\n Next\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface EmptyStateProps {\n icon?: React.ComponentType<{ className?: string }>;\n title: string;\n description?: string;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n icon: Icon,\n title,\n description,\n action,\n className,\n}: EmptyStateProps) {\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center py-12 text-center\",\n className\n )}\n >\n {Icon && (\n <div className=\"mb-4 rounded-full bg-muted p-3\">\n <Icon className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n )}\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {description && (\n <p className=\"mt-1 max-w-sm text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n {action && <div className=\"mt-4\">{action}</div>}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n className?: string;\n}\n\nexport function Pagination({\n page,\n totalPages,\n onPageChange,\n className,\n}: PaginationProps) {\n const pages = React.useMemo(() => {\n const items: (number | \"ellipsis\")[] = [];\n if (totalPages <= 7) {\n for (let i = 1; i <= totalPages; i++) items.push(i);\n } else {\n items.push(1);\n if (page > 3) items.push(\"ellipsis\");\n const start = Math.max(2, page - 1);\n const end = Math.min(totalPages - 1, page + 1);\n for (let i = start; i <= end; i++) items.push(i);\n if (page < totalPages - 2) items.push(\"ellipsis\");\n items.push(totalPages);\n }\n return items;\n }, [page, totalPages]);\n\n if (totalPages <= 1) return null;\n\n return (\n <nav className={cn(\"flex items-center gap-1\", className)}>\n <button\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-md border text-sm disabled:opacity-50\"\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n {pages.map((p, i) =>\n p === \"ellipsis\" ? (\n <span key={`e-${i}`} className=\"px-2 text-muted-foreground\">\n ...\n </span>\n ) : (\n <button\n key={p}\n className={cn(\n \"inline-flex h-9 w-9 items-center justify-center rounded-md border text-sm\",\n p === page && \"bg-primary text-primary-foreground\"\n )}\n onClick={() => onPageChange(p)}\n >\n {p}\n </button>\n )\n )}\n <button\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-md border text-sm disabled:opacity-50\"\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </nav>\n );\n}\n","import * as React from \"react\";\nimport { ArrowDown, ArrowUp } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface Stat {\n label: string;\n value: string | number;\n change?: { value: number; type: \"increase\" | \"decrease\" };\n icon?: React.ComponentType<{ className?: string }>;\n}\n\nexport interface StatsProps {\n stats: Stat[];\n columns?: 2 | 3 | 4;\n className?: string;\n}\n\nexport function Stats({ stats, columns = 4, className }: StatsProps) {\n return (\n <div\n className={cn(\n \"grid gap-4\",\n columns === 2 && \"grid-cols-1 sm:grid-cols-2\",\n columns === 3 && \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n columns === 4 && \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\n className\n )}\n >\n {stats.map((stat, index) => {\n const Icon = stat.icon;\n return (\n <div\n key={index}\n className=\"rounded-lg border bg-card p-6 text-card-foreground shadow-sm\"\n >\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-medium text-muted-foreground\">\n {stat.label}\n </p>\n {Icon && <Icon className=\"h-4 w-4 text-muted-foreground\" />}\n </div>\n <div className=\"mt-2 flex items-baseline gap-2\">\n <p className=\"text-2xl font-bold\">{stat.value}</p>\n {stat.change && (\n <span\n className={cn(\n \"inline-flex items-center text-xs font-medium\",\n stat.change.type === \"increase\"\n ? \"text-green-600 dark:text-green-400\"\n : \"text-red-600 dark:text-red-400\"\n )}\n >\n {stat.change.type === \"increase\" ? (\n <ArrowUp className=\"mr-0.5 h-3 w-3\" />\n ) : (\n <ArrowDown className=\"mr-0.5 h-3 w-3\" />\n )}\n {stat.change.value}%\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type PlanId = \"BASIC\" | \"GROW\" | \"ADVANCED\" | string;\n\nexport interface PlanBadgeProps {\n plan: PlanId;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nconst PLAN_STYLES: Record<string, string> = {\n BASIC: \"bg-muted text-muted-foreground\",\n GROW: \"bg-primary text-primary-foreground\",\n ADVANCED: \"bg-zinc-900 text-amber-400 dark:bg-zinc-800\",\n};\n\nexport function PlanBadge({ plan, size = \"md\", className }: PlanBadgeProps) {\n const colorClass = PLAN_STYLES[plan.toUpperCase()] ?? \"bg-muted text-muted-foreground\";\n\n return (\n <span\n className={cn(\n \"inline-flex items-center rounded font-semibold uppercase tracking-wide\",\n colorClass,\n size === \"sm\" ? \"px-1.5 py-0.5 text-[10px]\" : \"px-2 py-1 text-xs\",\n className\n )}\n >\n {plan}\n </span>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface StorageBarProps {\n used: number;\n limit: number | null;\n plan?: string;\n collapsed?: boolean;\n className?: string;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n}\n\nfunction getBarColor(pct: number): string {\n if (pct >= 90) return \"bg-destructive\";\n if (pct >= 70) return \"bg-amber-500\";\n return \"bg-primary\";\n}\n\n// Storage icon\nfunction StorageIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v14c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 12c0 1.66 4.03 3 9 3s9-1.34 9-3\" />\n </svg>\n );\n}\n\nexport function StorageBar({\n used,\n limit,\n plan,\n collapsed = false,\n className,\n}: StorageBarProps) {\n const pct = limit ? Math.min(100, (used / limit) * 100) : 0;\n const barColor = getBarColor(pct);\n\n if (collapsed) {\n return (\n <div className={cn(\"flex justify-center\", className)}>\n <StorageIcon className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n );\n }\n\n return (\n <div className={cn(\"space-y-1.5 px-1\", className)}>\n <div className=\"flex items-center gap-1.5\">\n <StorageIcon className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n {limit === null ? (\n <p className=\"text-[11px] text-muted-foreground\">\n <span className=\"font-medium text-foreground\">{formatBytes(used)}</span>\n {\" · Unlimited\"}\n </p>\n ) : (\n <p className=\"text-[11px] text-muted-foreground\">\n <span className=\"font-medium text-foreground\">{formatBytes(used)}</span>\n {\" / \"}\n {formatBytes(limit)}\n </p>\n )}\n </div>\n\n {limit !== null && (\n <div className=\"h-1 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className={cn(\"h-full rounded-full transition-all duration-300\", barColor)}\n style={{ width: `${pct}%` }}\n />\n </div>\n )}\n\n {plan && (\n <p className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">{plan}</p>\n )}\n </div>\n );\n}\n","'use client'\n\nimport { useState, useRef } from 'react'\nimport { Cloud } from 'lucide-react'\n\nconst CloudUploadIcon = Cloud\n\n/**\n * UploadZone — Drag & drop file input\n *\n * Presentation-only. Calls your callback with selected files.\n * You handle: validation, upload, progress, error handling.\n *\n * Props:\n * - onFiles: (files: File[]) => void — called when user selects/drops files\n * - accept?: string — MIME types (e.g., \"image/*\")\n * - multiple?: boolean\n * - disabled?: boolean\n */\nexport function UploadZone({\n onFiles,\n accept = '*',\n multiple = true,\n disabled = false,\n}: {\n onFiles: (files: File[]) => void\n accept?: string\n multiple?: boolean\n disabled?: boolean\n}) {\n const [dragActive, setDragActive] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleDrag = (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setDragActive(e.type === 'dragenter' || e.type === 'dragover')\n }\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setDragActive(false)\n if (!disabled && e.dataTransfer.files?.length) {\n onFiles(Array.from(e.dataTransfer.files))\n }\n }\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files?.length) {\n onFiles(Array.from(e.target.files))\n }\n }\n\n return (\n <div\n className={`relative rounded-lg border-2 border-dashed p-8 text-center transition-colors ${\n dragActive\n ? 'border-blue-500 bg-blue-50/50'\n : 'border-gray-300 bg-gray-50/50 hover:border-gray-400'\n } ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"hidden\"\n />\n <div className=\"flex flex-col items-center gap-2\">\n <CloudUploadIcon className=\"w-8 h-8 text-gray-400\" />\n <div>\n <p className=\"text-sm font-medium text-gray-700\">\n {dragActive ? 'Drop files here' : 'Drag & drop files, or click to browse'}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">Max file size: 100MB</p>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { CheckCircle, X, Image, File, Video } from 'lucide-react'\n\nconst CheckmarkCircle01Icon = CheckCircle\nconst Cancel01Icon = X\nconst Image01Icon = Image\nconst File01Icon = File\nconst VideoIcon = Video\n\n/**\n * UploadProgressPanel — Display upload progress for multiple files\n *\n * Presentation-only. Shows status, progress, and allows retry/cancel.\n * You handle: actual upload logic.\n *\n * Props:\n * - items: UploadItem[] — files being uploaded\n * - onRetry?: (id: string) => void\n * - onCancel?: (id: string) => void\n * - onCancelAll?: () => void\n */\n\nexport type UploadProgressItem = {\n id: string\n name: string\n mimeType: string\n status: 'pending' | 'uploading' | 'done' | 'failed'\n progress: number // 0-100\n error?: string\n}\n\nfunction getFileIcon(mimeType: string) {\n if (mimeType.startsWith('image/')) return Image01Icon\n if (mimeType.startsWith('video/')) return VideoIcon\n return File01Icon\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`\n}\n\nexport function UploadProgressPanel({\n items,\n onRetry,\n onCancel,\n onCancelAll,\n}: {\n items: UploadProgressItem[]\n onRetry?: (id: string) => void\n onCancel?: (id: string) => void\n onCancelAll?: () => void\n}) {\n if (items.length === 0) return null\n\n const activeCount = items.filter((it) => it.status === 'uploading').length\n const doneCount = items.filter((it) => it.status === 'done').length\n const failedCount = items.filter((it) => it.status === 'failed').length\n const avgProgress = items.length > 0 ? Math.round(items.reduce((s, it) => s + it.progress, 0) / items.length) : 0\n\n return (\n <div className=\"rounded-lg border border-gray-200 bg-white p-4 shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-sm font-semibold text-gray-900\">\n {activeCount > 0 ? `Uploading ${activeCount} file${activeCount > 1 ? 's' : ''}` : 'Upload complete'}\n </h3>\n {onCancelAll && items.some((it) => it.status === 'uploading' || it.status === 'pending') && (\n <button\n onClick={onCancelAll}\n className=\"text-xs text-red-600 hover:text-red-700 font-medium\"\n >\n Cancel all\n </button>\n )}\n </div>\n\n {/* Progress bar */}\n <div className=\"w-full h-2 bg-gray-200 rounded-full overflow-hidden mb-4\">\n <div\n className=\"h-full bg-blue-500 transition-all duration-300\"\n style={{ width: `${avgProgress}%` }}\n />\n </div>\n\n {/* Summary */}\n <p className=\"text-xs text-gray-600 mb-4\">\n {doneCount} done\n {failedCount > 0 && ` · ${failedCount} failed`}\n {activeCount > 0 && ` · ${activeCount} uploading`}\n </p>\n\n {/* Items list */}\n <div className=\"space-y-2 max-h-48 overflow-y-auto\">\n {items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-3 p-2 rounded-md bg-gray-50 hover:bg-gray-100 transition-colors\">\n {/* Icon */}\n <div className=\"shrink-0\">\n {item.status === 'done' && <CheckmarkCircle01Icon className=\"w-4 h-4 text-green-600\" />}\n {item.status === 'failed' && <Cancel01Icon className=\"w-4 h-4 text-red-600\" />}\n {(item.status === 'uploading' || item.status === 'pending') && (\n <div className=\"w-4 h-4 rounded-full border-2 border-blue-300 border-t-blue-600 animate-spin\" />\n )}\n </div>\n\n {/* Name */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs font-medium text-gray-900 truncate\">{item.name}</p>\n {item.error && <p className=\"text-xs text-red-600\">{item.error}</p>}\n {item.status === 'uploading' && <p className=\"text-xs text-gray-500\">{item.progress}%</p>}\n </div>\n\n {/* Actions */}\n {item.status === 'failed' && onRetry && (\n <button\n onClick={() => onRetry(item.id)}\n className=\"text-xs text-blue-600 hover:text-blue-700 font-medium shrink-0\"\n >\n Retry\n </button>\n )}\n {(item.status === 'uploading' || item.status === 'pending') && onCancel && (\n <button\n onClick={() => onCancel(item.id)}\n className=\"text-xs text-gray-600 hover:text-gray-700 shrink-0\"\n >\n <Cancel01Icon className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ImagePickerFieldProps {\n value?: string;\n filename?: string;\n onPickerOpen?: () => void;\n onRemove?: () => void;\n size?: \"sm\" | \"md\" | \"lg\";\n emptyLabel?: string;\n className?: string;\n}\n\nconst sizeMap = {\n sm: { box: \"h-12 w-12\", icon: \"h-4 w-4\", text: \"text-[9px]\" },\n md: { box: \"h-20 w-20\", icon: \"h-5 w-5\", text: \"text-[10px]\" },\n lg: { box: \"h-24 w-24\", icon: \"h-6 w-6\", text: \"text-xs\" },\n};\n\nexport function ImagePickerField({\n value,\n filename,\n onPickerOpen,\n onRemove,\n size = \"md\",\n emptyLabel = \"Click to select\",\n className,\n}: ImagePickerFieldProps) {\n const sz = sizeMap[size];\n\n return (\n <div className={cn(\"relative inline-flex shrink-0\", className)}>\n <button\n type=\"button\"\n onClick={onPickerOpen}\n className={cn(\n \"group flex items-center justify-center rounded-lg border-2 border-dashed transition-all duration-150\",\n sz.box,\n value\n ? \"border-border overflow-hidden\"\n : \"border-border hover:border-[color:var(--primary)] hover:bg-primary/5\"\n )}\n >\n {value ? (\n <img\n src={value}\n alt={filename ?? \"Selected image\"}\n className=\"h-full w-full rounded-md object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center gap-1\">\n {/* Image icon */}\n <svg\n className={cn(sz.icon, \"text-muted-foreground transition-colors group-hover:text-primary\")}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </svg>\n {size !== \"sm\" && (\n <span className={cn(sz.text, \"text-muted-foreground text-center leading-tight transition-colors group-hover:text-primary\")}>\n {emptyLabel}\n </span>\n )}\n </div>\n )}\n </button>\n\n {/* Remove button */}\n {value && onRemove && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n className=\"absolute -right-1.5 -top-1.5 flex h-5 w-5 items-center justify-center rounded-full bg-destructive text-destructive-foreground shadow-sm transition-opacity hover:opacity-90\"\n aria-label=\"Remove image\"\n >\n <svg className=\"h-2.5 w-2.5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface MediaCardFile {\n id: string;\n name: string;\n url: string;\n mimeType: string;\n size: number;\n width?: number | null;\n height?: number | null;\n}\n\nexport interface MediaCardProps {\n file: MediaCardFile;\n selected?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nfunction stripExtension(name: string): string {\n return name.replace(/\\.[^/.]+$/, \"\");\n}\n\nfunction getFileEmoji(mimeType: string): string {\n if (mimeType.startsWith(\"video/\")) return \"🎬\";\n if (mimeType.startsWith(\"audio/\")) return \"🎵\";\n if (mimeType === \"application/pdf\") return \"📄\";\n return \"📎\";\n}\n\nexport function MediaCard({ file, selected = false, onClick, className }: MediaCardProps) {\n const isImage = file.mimeType.startsWith(\"image/\");\n const displayName = stripExtension(file.name);\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") onClick?.(); }}\n className={cn(\n \"group relative aspect-square cursor-pointer rounded-xl overflow-hidden border-2 transition-all duration-150\",\n selected\n ? \"border-[color:var(--primary)] shadow-[0_0_0_2px_rgba(40,127,113,0.2)]\"\n : \"border-transparent hover:border-[color:var(--primary)]/40\",\n className\n )}\n >\n {isImage ? (\n <img\n src={file.url}\n alt={file.name}\n className=\"h-full w-full object-cover transition-transform duration-150 group-hover:scale-[1.03]\"\n loading=\"lazy\"\n />\n ) : (\n <div className=\"flex h-full w-full items-center justify-center bg-muted text-4xl\">\n {getFileEmoji(file.mimeType)}\n </div>\n )}\n\n {/* Hover gradient overlay with filename */}\n <div className=\"absolute inset-0 flex items-end bg-gradient-to-t from-black/60 via-transparent to-transparent opacity-0 transition-opacity duration-150 group-hover:opacity-100\">\n <p className=\"truncate px-2 pb-2 text-[11px] font-medium text-white\">\n {displayName}\n </p>\n </div>\n\n {/* Selected checkmark */}\n {selected && (\n <div className=\"absolute right-1.5 top-1.5 flex h-5 w-5 items-center justify-center rounded-full bg-primary shadow\">\n <svg\n className=\"h-3 w-3 text-white\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Label } from \"../primitives/label\";\n\nexport interface FormFieldProps {\n label: string;\n error?: string;\n hint?: string;\n required?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormField({\n label,\n error,\n hint,\n required,\n children,\n className,\n}: FormFieldProps) {\n return (\n <div className={cn(\"space-y-2\", className)}>\n <Label>\n {label}\n {required && <span className=\"ml-1 text-destructive\">*</span>}\n </Label>\n {children}\n {hint && !error && (\n <p className=\"text-sm text-muted-foreground\">{hint}</p>\n )}\n {error && <p className=\"text-sm text-destructive\">{error}</p>}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface FormLayoutProps {\n title?: string;\n description?: string;\n children: React.ReactNode;\n actions?: React.ReactNode;\n className?: string;\n}\n\nexport function FormLayout({\n title,\n description,\n children,\n actions,\n className,\n}: FormLayoutProps) {\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n >\n {(title || description) && (\n <div className=\"border-b p-6\">\n {title && <h3 className=\"text-lg font-semibold\">{title}</h3>}\n {description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n <div className=\"space-y-6 p-6\">{children}</div>\n {actions && (\n <div className=\"flex items-center justify-end gap-2 border-t px-6 py-4\">\n {actions}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface FormSectionProps {\n title: string;\n description?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormSection({\n title,\n description,\n children,\n className,\n}: FormSectionProps) {\n return (\n <div className={cn(\"space-y-4\", className)}>\n <div>\n <h4 className=\"text-sm font-medium\">{title}</h4>\n {description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n <div className=\"space-y-4\">{children}</div>\n </div>\n );\n}\n","'use client'\n\nimport { useState, useRef, useEffect } from 'react'\n\n/**\n * LocalInput — Prevents cursor jumping in form-heavy UIs\n * \n * Problem: When parent component re-renders, native input loses focus.\n * Solution: Maintains local state + syncs from parent only when not focused.\n * \n * Props:\n * - value: number | string (from parent)\n * - onChange: (val: string) => void (called on every keystroke OR on blur)\n * - commitOnBlur?: boolean (if true, only commits to parent on blur; if false, commits immediately)\n * - ...rest: HTML input attributes\n */\nexport function LocalInput({\n value,\n onChange,\n commitOnBlur,\n ...rest\n}: Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value: number | string\n onChange: (val: string) => void\n commitOnBlur?: boolean\n}) {\n const [local, setLocal] = useState(String(value ?? ''))\n const ref = useRef<HTMLInputElement>(null)\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n\n // Sync parent value to local state only when input is not focused\n useEffect(() => {\n if (document.activeElement !== ref.current) {\n setLocal(String(value ?? ''))\n }\n }, [value])\n\n return (\n <input\n ref={ref}\n {...rest}\n value={local}\n onChange={(e) => {\n setLocal(e.target.value)\n // If commitOnBlur is false, call onChange immediately (normal behavior)\n // If commitOnBlur is true, wait for blur to avoid re-render spam\n if (!commitOnBlur) {\n onChangeRef.current(e.target.value)\n }\n }}\n onBlur={(e) => {\n // If commitOnBlur is true, commit on blur\n if (commitOnBlur) {\n onChangeRef.current(e.target.value)\n }\n }}\n />\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport type { DeviceKey, DeviceOption } from './responsive-types'\nimport { DEVICES, DEVICE_ICONS } from './responsive-types'\n\n/**\n * ResponsiveSizeDeviceIcon\n * \n * Device picker icon + dropdown menu.\n * Typically sits next to a \"Size\" label in forms.\n * \n * Props:\n * - activeDevice: Currently selected device\n * - setActiveDevice: Callback to change device\n */\nexport function ResponsiveSizeDeviceIcon({\n activeDevice,\n setActiveDevice,\n}: {\n activeDevice: DeviceKey\n setActiveDevice: (d: DeviceKey) => void\n}) {\n const [open, setOpen] = useState(false)\n\n return (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n className=\"flex items-center text-white/30 hover:text-white/60 transition-colors\"\n >\n {DEVICE_ICONS[activeDevice]}\n </button>\n {open && (\n <div\n className=\"absolute left-0 top-full mt-1 z-[200] rounded-lg overflow-hidden border border-white/10 shadow-xl\"\n style={{ background: '#1e2030', minWidth: 160 }}\n >\n {DEVICES.map((d) => (\n <button\n key={d.key}\n type=\"button\"\n onClick={() => {\n setActiveDevice(d.key)\n setOpen(false)\n }}\n className=\"w-full flex items-center gap-3 px-3 py-2 text-xs hover:bg-white/10 transition-colors\"\n >\n <span className=\"text-white/60\">{DEVICE_ICONS[d.key]}</span>\n <span className=\"text-white/70 flex-1 text-left\">{d.label}</span>\n <span className=\"text-white/30\">{d.width}</span>\n {activeDevice === d.key && (\n <svg\n className=\"w-3 h-3 text-[#287f71] shrink-0\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n >\n <path d=\"m5 13 4 4L19 7\" />\n </svg>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * Responsive input device types and constants\n */\n\nexport type DeviceKey = 'desktop' | 'laptop' | 'tablet' | 'mobile'\n\nexport interface DeviceOption {\n key: DeviceKey\n label: string\n width: string\n}\n\nexport const DEVICES: DeviceOption[] = [\n { key: 'desktop', label: 'Desktop', width: '1200px' },\n { key: 'laptop', label: 'Laptop', width: '1024px' },\n { key: 'tablet', label: 'Tablet', width: '768px' },\n { key: 'mobile', label: 'Mobile', width: '375px' },\n]\n\nexport const DEVICE_ICONS: Record<DeviceKey, React.ReactNode> = {\n desktop: (\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"14\" rx=\"2\" />\n <path d=\"M8 20h8M12 18v2\" />\n </svg>\n ),\n laptop: (\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"12\" rx=\"1.5\" />\n <path d=\"M1 19h22\" />\n </svg>\n ),\n tablet: (\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" />\n <circle cx=\"12\" cy=\"18\" r=\"0.5\" fill=\"currentColor\" />\n </svg>\n ),\n mobile: (\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"6\" y=\"2\" width=\"12\" height=\"20\" rx=\"2\" />\n <circle cx=\"12\" cy=\"18\" r=\"0.5\" fill=\"currentColor\" />\n </svg>\n ),\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { LocalInput } from './local-input'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../primitives/select'\nimport type { DeviceKey } from './responsive-types'\nimport { DEVICE_ICONS } from './responsive-types'\n\n/**\n * ResponsiveSizeField\n * \n * Bordered input field with device-aware number/text input + unit selector.\n * Supports responsive sizes by device (desktop, laptop, tablet, mobile).\n * Supports custom CSS values (calc, clamp, etc.) when unit is 'custom'.\n * \n * Props:\n * - value: Size values by device\n * - unit: Current unit (px, rem, em, vh, vw, custom)\n * - customUnit?: Custom CSS value (e.g., \"calc(100% - 20px)\")\n * - activeDevice: Currently selected device\n * - onSizeChange: Callback when size changes\n * - onUnitChange: Callback when unit changes\n * - onCustomChange?: Callback when custom value changes\n */\nexport function ResponsiveSizeField({\n value,\n unit,\n customUnit,\n activeDevice,\n onSizeChange,\n onUnitChange,\n onCustomChange,\n}: {\n value: Partial<Record<DeviceKey, number>>\n unit: string\n customUnit?: string\n activeDevice: DeviceKey\n onSizeChange: (dev: DeviceKey, val: number) => void\n onUnitChange: (unit: string) => void\n onCustomChange?: (val: string) => void\n}) {\n const [unitOpen, setUnitOpen] = useState(false)\n const currentVal = value[activeDevice] ?? value.desktop ?? 0\n const isCustom = unit === 'custom'\n\n return (\n <div className=\"relative flex items-center border border-white/10 rounded-md bg-white/5 w-full\" style={{ height: 32 }}>\n {/* Input: number or custom text */}\n {isCustom ? (\n <LocalInput\n type=\"text\"\n value={customUnit || ''}\n onChange={(v) => onCustomChange?.(v)}\n commitOnBlur\n placeholder=\"e.g. 2rem\"\n className=\"flex-1 min-w-0 bg-transparent px-2 text-xs text-white/80 outline-none h-full\"\n />\n ) : (\n <LocalInput\n type=\"number\"\n min={0}\n value={currentVal}\n onChange={(v) => onSizeChange(activeDevice, +v)}\n commitOnBlur\n className=\"flex-1 min-w-0 bg-transparent px-2 text-xs text-white/80 outline-none text-center h-full\"\n />\n )}\n\n {/* Unit: pencil icon (custom mode) or Select */}\n {isCustom ? (\n <div className=\"relative shrink-0\">\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setUnitOpen((o) => !o)}\n title=\"Choose unit\"\n className=\"flex items-center justify-center px-2 h-full text-white/30 hover:text-white/60 transition-colors cursor-pointer\"\n >\n <svg\n className=\"w-3 h-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path d=\"m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Z\" />\n </svg>\n </div>\n {unitOpen && (\n <div\n className=\"absolute right-0 top-full mt-1 z-[200] rounded-lg overflow-hidden border border-white/10 shadow-xl\"\n style={{ background: '#1e2030', minWidth: 60 }}\n >\n {['px', 'rem', 'em', 'vh', 'vw'].map((u) => (\n <div\n key={u}\n role=\"button\"\n tabIndex={0}\n onClick={() => {\n onUnitChange(u)\n setUnitOpen(false)\n }}\n className=\"w-full px-3 py-2 text-xs text-white/70 hover:bg-white/10 text-right transition-colors cursor-pointer\"\n >\n {u}\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n <Select value={unit} onValueChange={onUnitChange}>\n <SelectTrigger\n className=\"h-full border-0 rounded-l-none rounded-r-lg px-2 text-xs text-white/50 bg-transparent focus:ring-0 shadow-none\"\n style={{ width: 52, minWidth: 52 }}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent style={{ background: '#1a1c2e', border: '1px solid rgba(255,255,255,0.1)', color: 'rgba(255,255,255,0.7)' }}>\n {['px', 'rem', 'em', 'vh', 'vw', 'custom'].map((u) => (\n <SelectItem key={u} value={u}>\n {u}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </div>\n )\n}\n","import * as React from \"react\";\nimport { AlertCircle, CheckCircle2, Info, AlertTriangle, X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface AlertProps {\n variant?: \"info\" | \"success\" | \"warning\" | \"error\";\n title?: string;\n children: React.ReactNode;\n dismissible?: boolean;\n onDismiss?: () => void;\n className?: string;\n}\n\nconst variantConfig = {\n info: {\n icon: Info,\n classes: \"border-blue-200 bg-blue-50 text-blue-900 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-100\",\n },\n success: {\n icon: CheckCircle2,\n classes: \"border-green-200 bg-green-50 text-green-900 dark:border-green-800 dark:bg-green-950 dark:text-green-100\",\n },\n warning: {\n icon: AlertTriangle,\n classes: \"border-yellow-200 bg-yellow-50 text-yellow-900 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-100\",\n },\n error: {\n icon: AlertCircle,\n classes: \"border-red-200 bg-red-50 text-red-900 dark:border-red-800 dark:bg-red-950 dark:text-red-100\",\n },\n};\n\nexport function Alert({\n variant = \"info\",\n title,\n children,\n dismissible,\n onDismiss,\n className,\n}: AlertProps) {\n const config = variantConfig[variant];\n const Icon = config.icon;\n\n return (\n <div\n className={cn(\n \"relative flex gap-3 rounded-lg border p-4\",\n config.classes,\n className\n )}\n role=\"alert\"\n >\n <Icon className=\"mt-0.5 h-5 w-5 shrink-0\" />\n <div className=\"flex-1\">\n {title && <p className=\"font-medium\">{title}</p>}\n <div className={cn(\"text-sm\", title && \"mt-1\")}>{children}</div>\n </div>\n {dismissible && (\n <button\n onClick={onDismiss}\n className=\"absolute right-3 top-3 rounded-md p-1 opacity-70 hover:opacity-100\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface LoadingSpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst sizeMap = {\n sm: \"h-4 w-4\",\n md: \"h-6 w-6\",\n lg: \"h-8 w-8\",\n};\n\nexport function LoadingSpinner({ size = \"md\", className }: LoadingSpinnerProps) {\n return (\n <Loader2\n className={cn(\"animate-spin text-muted-foreground\", sizeMap[size], className)}\n />\n );\n}\n","import * as React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../primitives/dialog\";\nimport { Button } from \"../primitives/button\";\nimport { LoadingSpinner } from \"./loading-spinner\";\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n onConfirm: () => void;\n loading?: boolean;\n variant?: \"default\" | \"destructive\";\n}\n\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n onConfirm,\n loading,\n variant = \"default\",\n}: ConfirmDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && (\n <DialogDescription>{description}</DialogDescription>\n )}\n </DialogHeader>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={loading}\n >\n {cancelLabel}\n </Button>\n <Button\n variant={variant === \"destructive\" ? \"destructive\" : \"default\"}\n onClick={onConfirm}\n disabled={loading}\n >\n {loading && <LoadingSpinner size=\"sm\" className=\"mr-2\" />}\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type PostStatus = \"DRAFT\" | \"PUBLISHED\" | \"SCHEDULED\" | \"ARCHIVED\";\n\nexport interface PostStatusBadgeProps {\n status: PostStatus;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nconst statusConfig: Record<\n PostStatus,\n { label: string; container: string; dot: string }\n> = {\n DRAFT: {\n label: \"Draft\",\n container: \"bg-muted text-muted-foreground\",\n dot: \"bg-gray-400\",\n },\n PUBLISHED: {\n label: \"Published\",\n container: \"bg-primary/10 text-primary\",\n dot: \"bg-primary animate-pulse\",\n },\n SCHEDULED: {\n label: \"Scheduled\",\n container:\n \"bg-blue-50 text-blue-600 dark:bg-blue-950 dark:text-blue-400\",\n dot: \"bg-blue-500 dark:bg-blue-400\",\n },\n ARCHIVED: {\n label: \"Archived\",\n container:\n \"bg-amber-50 text-amber-600 dark:bg-amber-950 dark:text-amber-400\",\n dot: \"bg-amber-500 dark:bg-amber-400\",\n },\n};\n\nconst sizeConfig = {\n sm: \"text-[10px] px-1.5 py-0.5\",\n md: \"text-xs px-2 py-1\",\n};\n\nexport function PostStatusBadge({\n status,\n size = \"md\",\n className,\n}: PostStatusBadgeProps) {\n const config = statusConfig[status];\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full font-medium\",\n config.container,\n sizeConfig[size],\n className\n )}\n >\n <span\n className={cn(\"inline-block rounded-full\", config.dot, {\n \"w-1.5 h-1.5\": size === \"md\",\n \"w-1 h-1\": size === \"sm\",\n })}\n />\n {config.label}\n </span>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { PostStatus, PostStatusBadge } from \"./post-status-badge\";\nimport { Skeleton } from \"../Skeleton\";\n\n// ─── Icons ─────────────────────────────────────────────────────────────────\n\nfunction IconEdit() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n}\n\nfunction IconTrash() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\" />\n <path d=\"M10 11v6\" />\n <path d=\"M14 11v6\" />\n <path d=\"M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2\" />\n </svg>\n );\n}\n\nfunction IconCopy() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nfunction IconMoreHorizontal() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction IconChevronRight() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n}\n\nfunction IconImage() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n );\n}\n\nfunction IconPlus() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n}\n\n// ─── Types ─────────────────────────────────────────────────────────────────\n\nexport interface PostListItem {\n id: string;\n title: string;\n slug: string;\n status: PostStatus;\n author?: string | null;\n publishedAt?: Date | string | null;\n createdAt: Date | string;\n featuredImageUrl?: string | null;\n excerpt?: string | null;\n}\n\nexport interface PostListTableProps {\n posts: PostListItem[];\n loading?: boolean;\n singularLabel?: string;\n onEdit?: (id: string) => void;\n onDelete?: (id: string) => void;\n onDuplicate?: (id: string) => void;\n onStatusChange?: (id: string, status: PostStatus) => void;\n emptyMessage?: string;\n emptyIcon?: React.ReactNode;\n onNewPost?: () => void;\n newPostLabel?: string;\n className?: string;\n}\n\n// ─── Helpers ───────────────────────────────────────────────────────────────\n\nfunction formatDate(date: Date | string): string {\n return new Date(date).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .slice(0, 2)\n .map((w) => w[0]?.toUpperCase() ?? \"\")\n .join(\"\");\n}\n\n// ─── Row Actions Dropdown ──────────────────────────────────────────────────\n\ninterface RowActionsProps {\n post: PostListItem;\n onEdit?: (id: string) => void;\n onDelete?: (id: string) => void;\n onDuplicate?: (id: string) => void;\n onStatusChange?: (id: string, status: PostStatus) => void;\n}\n\nfunction RowActions({ post, onEdit, onDelete, onDuplicate, onStatusChange }: RowActionsProps) {\n const [open, setOpen] = React.useState(false);\n const [statusOpen, setStatusOpen] = React.useState(false);\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!open) return;\n function handleClick(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setStatusOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n const statusOptions: { label: string; value: PostStatus }[] = [\n { label: \"Draft\", value: \"DRAFT\" },\n { label: \"Publish\", value: \"PUBLISHED\" },\n { label: \"Archive\", value: \"ARCHIVED\" },\n ];\n\n return (\n <div className=\"relative flex items-center gap-1\" ref={ref}>\n {/* Edit button */}\n <button\n onClick={() => onEdit?.(post.id)}\n className=\"inline-flex items-center justify-center h-7 w-7 rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n title=\"Edit\"\n >\n <IconEdit />\n </button>\n\n {/* More dropdown */}\n <button\n onClick={() => { setOpen((v) => !v); setStatusOpen(false); }}\n className=\"inline-flex items-center justify-center h-7 w-7 rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n title=\"More actions\"\n >\n <IconMoreHorizontal />\n </button>\n\n {open && (\n <div className=\"absolute right-0 top-8 z-50 min-w-[160px] rounded-lg border border-border bg-card shadow-md py-1\">\n {/* Duplicate */}\n <button\n onClick={() => { onDuplicate?.(post.id); setOpen(false); }}\n className=\"flex w-full items-center gap-2 px-3 py-1.5 text-sm hover:bg-accent transition-colors\"\n >\n <IconCopy />\n Duplicate\n </button>\n\n {/* Change Status */}\n <div className=\"relative\">\n <button\n onMouseEnter={() => setStatusOpen(true)}\n onMouseLeave={() => setStatusOpen(false)}\n onClick={() => setStatusOpen((v) => !v)}\n className=\"flex w-full items-center justify-between gap-2 px-3 py-1.5 text-sm hover:bg-accent transition-colors\"\n >\n <span>Change status</span>\n <IconChevronRight />\n </button>\n {statusOpen && (\n <div\n className=\"absolute left-full top-0 z-50 min-w-[130px] rounded-lg border border-border bg-card shadow-md py-1\"\n onMouseEnter={() => setStatusOpen(true)}\n onMouseLeave={() => setStatusOpen(false)}\n >\n {statusOptions.map((opt) => (\n <button\n key={opt.value}\n onClick={() => { onStatusChange?.(post.id, opt.value); setOpen(false); setStatusOpen(false); }}\n className={cn(\n \"flex w-full items-center gap-2 px-3 py-1.5 text-sm hover:bg-accent transition-colors\",\n post.status === opt.value && \"text-primary font-medium\"\n )}\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Divider */}\n <div className=\"my-1 border-t border-border\" />\n\n {/* Delete */}\n <button\n onClick={() => { onDelete?.(post.id); setOpen(false); }}\n className=\"flex w-full items-center gap-2 px-3 py-1.5 text-sm text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <IconTrash />\n Delete\n </button>\n </div>\n )}\n </div>\n );\n}\n\n// ─── Skeleton Row ──────────────────────────────────────────────────────────\n\nfunction SkeletonRow() {\n return (\n <tr>\n <td className=\"px-4 py-3\">\n <Skeleton className=\"w-10 h-10 rounded-lg\" />\n </td>\n <td className=\"px-4 py-3\">\n <Skeleton className=\"h-4 w-40 mb-1.5\" />\n <Skeleton className=\"h-3 w-24\" />\n </td>\n <td className=\"px-4 py-3\">\n <Skeleton className=\"h-5 w-20 rounded-full\" />\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"w-6 h-6 rounded-full\" />\n <Skeleton className=\"h-4 w-20\" />\n </div>\n </td>\n <td className=\"px-4 py-3\">\n <Skeleton className=\"h-4 w-24\" />\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex gap-1\">\n <Skeleton className=\"w-7 h-7 rounded-md\" />\n <Skeleton className=\"w-7 h-7 rounded-md\" />\n </div>\n </td>\n </tr>\n );\n}\n\n// ─── Component ─────────────────────────────────────────────────────────────\n\nexport function PostListTable({\n posts,\n loading = false,\n singularLabel = \"Post\",\n onEdit,\n onDelete,\n onDuplicate,\n onStatusChange,\n emptyMessage,\n emptyIcon,\n onNewPost,\n newPostLabel,\n className,\n}: PostListTableProps) {\n const isEmpty = !loading && posts.length === 0;\n\n return (\n <div className={cn(\"w-full overflow-x-auto rounded-lg border border-border bg-card\", className)}>\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border bg-muted/40\">\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground w-14\">Image</th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground\">Title</th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground\">Status</th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground\">Author</th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground\">Date</th>\n <th className=\"px-4 py-2.5 text-right text-xs font-medium text-muted-foreground\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {loading\n ? Array.from({ length: 5 }).map((_, i) => <SkeletonRow key={i} />)\n : isEmpty\n ? null\n : posts.map((post) => {\n const date =\n post.status === \"PUBLISHED\" && post.publishedAt\n ? formatDate(post.publishedAt)\n : formatDate(post.createdAt);\n return (\n <tr\n key={post.id}\n className=\"border-b border-border last:border-0 hover:bg-muted/30 transition-colors\"\n >\n {/* Thumbnail */}\n <td className=\"px-4 py-3\">\n {post.featuredImageUrl ? (\n <img\n src={post.featuredImageUrl}\n alt={post.title}\n className=\"w-10 h-10 rounded-lg object-cover\"\n />\n ) : (\n <div className=\"w-10 h-10 rounded-lg bg-muted flex items-center justify-center text-muted-foreground\">\n <IconImage />\n </div>\n )}\n </td>\n\n {/* Title + Slug */}\n <td className=\"px-4 py-3\">\n <div className=\"font-medium text-foreground leading-tight truncate max-w-[240px]\">\n {post.title}\n </div>\n <div className=\"text-xs text-muted-foreground mt-0.5 truncate max-w-[240px]\">\n /{post.slug}\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-4 py-3\">\n <PostStatusBadge status={post.status} size=\"sm\" />\n </td>\n\n {/* Author */}\n <td className=\"px-4 py-3\">\n {post.author ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"w-6 h-6 rounded-full bg-primary/20 text-primary flex items-center justify-center text-[10px] font-semibold shrink-0\">\n {getInitials(post.author)}\n </div>\n <span className=\"text-sm text-foreground truncate max-w-[100px]\">\n {post.author}\n </span>\n </div>\n ) : (\n <span className=\"text-muted-foreground text-xs\">—</span>\n )}\n </td>\n\n {/* Date */}\n <td className=\"px-4 py-3 text-sm text-muted-foreground whitespace-nowrap\">\n {date}\n </td>\n\n {/* Actions */}\n <td className=\"px-4 py-3\">\n <div className=\"flex justify-end\">\n <RowActions\n post={post}\n onEdit={onEdit}\n onDelete={onDelete}\n onDuplicate={onDuplicate}\n onStatusChange={onStatusChange}\n />\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n\n {/* Empty state */}\n {isEmpty && (\n <div className=\"flex flex-col items-center justify-center py-16 px-6 text-center\">\n <div className=\"text-muted-foreground mb-3\">\n {emptyIcon ?? (\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"opacity-40\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n )}\n </div>\n <p className=\"text-sm text-muted-foreground mb-4\">\n {emptyMessage ?? `No ${singularLabel.toLowerCase()}s yet.`}\n </p>\n {onNewPost && (\n <button\n onClick={onNewPost}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n >\n <IconPlus />\n {newPostLabel ?? `New ${singularLabel}`}\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface SkeletonProps {\n width?: string | number\n height?: string | number\n rounded?: string\n className?: string\n style?: React.CSSProperties\n}\n\nexport function Skeleton({ width = '100%', height = 16, rounded, style }: SkeletonProps) {\n return (\n <div\n style={{\n width,\n height,\n background: 'var(--muted, #e5e7eb)',\n borderRadius: rounded ?? 'var(--radius, 0.5rem)',\n overflow: 'hidden',\n position: 'relative',\n flexShrink: 0,\n ...style,\n }}\n >\n <div\n style={{\n position: 'absolute',\n inset: 0,\n background:\n 'linear-gradient(90deg, transparent 0%, color-mix(in oklab, var(--background, #fff) 40%, transparent) 50%, transparent 100%)',\n animation: 'dashui-shimmer 1.6s ease-in-out infinite',\n }}\n />\n </div>\n )\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PostFiltersBarProps {\n search: string;\n onSearch: (v: string) => void;\n status: string;\n onStatusChange: (v: string) => void;\n onNew?: () => void;\n newLabel?: string;\n total?: number;\n typeLabel?: string;\n className?: string;\n}\n\nconst STATUS_TABS = [\n { value: \"all\", label: \"All\" },\n { value: \"DRAFT\", label: \"Draft\" },\n { value: \"PUBLISHED\", label: \"Published\" },\n { value: \"SCHEDULED\", label: \"Scheduled\" },\n { value: \"ARCHIVED\", label: \"Archived\" },\n];\n\nfunction IconSearch() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n );\n}\n\nfunction IconPlus() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n}\n\nexport function PostFiltersBar({\n search,\n onSearch,\n status,\n onStatusChange,\n onNew,\n newLabel = \"New Post\",\n total,\n typeLabel = \"Posts\",\n className,\n}: PostFiltersBarProps) {\n return (\n <div className={cn(\"space-y-2\", className)}>\n <div className=\"flex flex-wrap items-center gap-3\">\n {/* Search */}\n <div className=\"relative flex items-center\">\n <span className=\"absolute left-2.5 text-muted-foreground pointer-events-none\">\n <IconSearch />\n </span>\n <input\n type=\"text\"\n value={search}\n onChange={(e) => onSearch(e.target.value)}\n placeholder={`Search ${typeLabel}…`}\n className=\"h-8 pl-8 pr-3 rounded-lg border border-border bg-background text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary transition-colors w-56\"\n />\n </div>\n\n {/* Status tabs */}\n <div className=\"flex items-center gap-1 rounded-lg bg-muted p-0.5\">\n {STATUS_TABS.map((tab) => (\n <button\n key={tab.value}\n onClick={() => onStatusChange(tab.value)}\n className={cn(\n \"rounded-md px-2.5 py-1 text-xs font-medium transition-colors\",\n status === tab.value\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Spacer */}\n <div className=\"flex-1\" />\n\n {/* New button */}\n {onNew && (\n <button\n onClick={onNew}\n className=\"inline-flex items-center gap-1.5 h-8 rounded-lg bg-primary px-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n >\n <IconPlus />\n {newLabel}\n </button>\n )}\n </div>\n\n {/* Total count */}\n {total !== undefined && (\n <p className=\"text-xs text-muted-foreground\">\n {total} {total === 1 ? typeLabel.replace(/s$/, \"\") : typeLabel}\n </p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { PostStatus, PostStatusBadge } from \"./post-status-badge\";\n\nexport interface PostEditorShellProps {\n title?: string;\n backLabel?: string;\n onBack?: () => void;\n onSave?: () => void;\n onPublish?: () => void;\n saving?: boolean;\n publishing?: boolean;\n status?: PostStatus;\n children: React.ReactNode;\n sidebar: React.ReactNode;\n className?: string;\n}\n\nfunction IconArrowLeft() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\" />\n <polyline points=\"12 19 5 12 12 5\" />\n </svg>\n );\n}\n\nfunction IconSpinner() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"animate-spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\nfunction IconMoreHorizontal() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport function PostEditorShell({\n title,\n backLabel = \"Back\",\n onBack,\n onSave,\n onPublish,\n saving = false,\n publishing = false,\n status,\n children,\n sidebar,\n className,\n}: PostEditorShellProps) {\n return (\n <div className={cn(\"flex flex-col h-screen bg-background overflow-hidden\", className)}>\n {/* Top Bar */}\n <div className=\"flex items-center gap-3 h-14 px-4 border-b border-border bg-card shrink-0\">\n {/* Back button */}\n {onBack && (\n <button\n onClick={onBack}\n className=\"inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-sm text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n >\n <IconArrowLeft />\n {backLabel}\n </button>\n )}\n\n {/* Separator */}\n {onBack && <div className=\"h-5 w-px bg-border\" />}\n\n {/* Title */}\n {title && (\n <span className=\"text-sm font-medium text-muted-foreground truncate max-w-xs\">\n {title}\n </span>\n )}\n\n {/* Status badge */}\n {status && <PostStatusBadge status={status} size=\"sm\" />}\n\n {/* Spacer */}\n <div className=\"flex-1\" />\n\n {/* More button */}\n <button className=\"inline-flex items-center justify-center h-8 w-8 rounded-lg text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\">\n <IconMoreHorizontal />\n </button>\n\n {/* Save Draft */}\n <button\n onClick={onSave}\n disabled={saving}\n className=\"inline-flex items-center gap-1.5 h-8 rounded-lg border border-border bg-background px-3 text-sm font-medium hover:bg-accent transition-colors disabled:opacity-60\"\n >\n {saving && <IconSpinner />}\n Save Draft\n </button>\n\n {/* Publish */}\n <button\n onClick={onPublish}\n disabled={publishing}\n className=\"inline-flex items-center gap-1.5 h-8 rounded-lg bg-primary px-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-60\"\n >\n {publishing && <IconSpinner />}\n Publish\n </button>\n </div>\n\n {/* Body */}\n <div className=\"flex flex-1 overflow-hidden\">\n {/* Main content */}\n <div className=\"flex-1 overflow-y-auto p-6\">\n <div className=\"max-w-3xl mx-auto\">{children}</div>\n </div>\n\n {/* Sidebar */}\n <div className=\"w-72 shrink-0 border-l border-border overflow-y-auto p-4\">\n {sidebar}\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SlugInputProps {\n value: string;\n onChange: (value: string) => void;\n onGenerate?: () => void;\n prefix?: string;\n disabled?: boolean;\n className?: string;\n}\n\nfunction IconRefresh() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"23 4 23 10 17 10\" />\n <polyline points=\"1 20 1 14 7 14\" />\n <path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n );\n}\n\nexport function SlugInput({\n value,\n onChange,\n onGenerate,\n prefix,\n disabled = false,\n className,\n}: SlugInputProps) {\n return (\n <div className={cn(\"space-y-1\", className)}>\n <div className=\"flex items-center gap-1\">\n {prefix && (\n <span className=\"shrink-0 text-sm text-muted-foreground select-none\">\n {prefix}\n </span>\n )}\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n className={cn(\n \"flex-1 h-8 border-0 border-b border-input bg-transparent text-sm focus:outline-none focus:border-primary transition-colors\",\n disabled && \"opacity-60 cursor-not-allowed\"\n )}\n placeholder=\"your-slug-here\"\n />\n {onGenerate && (\n <button\n onClick={onGenerate}\n disabled={disabled}\n title=\"Generate slug\"\n className=\"inline-flex items-center justify-center h-7 w-7 rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors disabled:opacity-60\"\n >\n <IconRefresh />\n </button>\n )}\n </div>\n <p className=\"text-[10px] text-muted-foreground\">\n Only lowercase letters, numbers, and hyphens\n </p>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PostSidebarSectionProps {\n title: string;\n children: React.ReactNode;\n defaultOpen?: boolean;\n className?: string;\n}\n\nfunction IconChevronDown() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nexport function PostSidebarSection({\n title,\n children,\n defaultOpen = true,\n className,\n}: PostSidebarSectionProps) {\n const [open, setOpen] = React.useState(defaultOpen);\n\n return (\n <div className={cn(\"border-b border-border\", className)}>\n {/* Header */}\n <button\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center justify-between py-3 px-0 text-sm font-medium text-foreground hover:text-primary transition-colors\"\n >\n {title}\n <span\n className={cn(\n \"text-muted-foreground transition-transform duration-200\",\n open ? \"rotate-0\" : \"-rotate-90\"\n )}\n >\n <IconChevronDown />\n </span>\n </button>\n\n {/* Body */}\n <div\n className={cn(\n \"overflow-hidden transition-all duration-200\",\n open ? \"max-h-[9999px] pb-4 opacity-100\" : \"max-h-0 opacity-0 pointer-events-none\"\n )}\n >\n {children}\n </div>\n </div>\n );\n}\n","'use client'\n\nimport { useState, useRef, useEffect, useCallback } from 'react'\nimport Color from 'color'\nimport * as Popover from '@radix-ui/react-popover'\nimport {\n ColorPicker,\n ColorPickerSelection,\n ColorPickerHue,\n ColorPickerAlpha,\n ColorPickerOutput,\n ColorPickerFormat,\n ColorPickerEyeDropper,\n useColorPicker,\n} from './color-picker'\nimport { cn } from '../../lib/utils'\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction hslToHex(hsl: string): string {\n if (!hsl) return '#000000'\n try {\n const parts = hsl.trim().split(/\\s+/)\n const h = parseFloat(parts[0]) || 0\n const s = parseFloat(parts[1]) || 0\n const l = parseFloat(parts[2]) || 0\n return Color.hsl(h, s, l).hex()\n } catch { return '#000000' }\n}\n\nfunction hexToHsl(hex: string): string {\n try {\n const c = Color(hex.startsWith('#') ? hex : `#${hex}`)\n return `${Math.round(c.hue())} ${Math.round(c.saturationl())}% ${Math.round(c.lightness())}%`\n } catch { return '0 0% 0%' }\n}\n\n// ─── ColorReader — reads picker context, stores pending hex ──────────────────\n\nfunction ColorReader({ onHexChange }: { onHexChange: (hex: string) => void }) {\n const { hue, saturation, lightness, alpha } = useColorPicker()\n useEffect(() => {\n try {\n const hex = Color.hsl(hue, saturation, lightness).alpha(alpha / 100).hex()\n onHexChange(hex)\n } catch {}\n }, [hue, saturation, lightness, alpha, onHexChange])\n return null\n}\n\n// ─── HslColorInput ────────────────────────────────────────────────────────────\n\ninterface HslColorInputProps {\n value: string // \"160 47% 33%\"\n onChange: (v: string) => void\n className?: string\n inputClassName?: string\n disabled?: boolean\n}\n\nexport function HslColorInput({ value, onChange, className, inputClassName, disabled }: HslColorInputProps) {\n const [open, setOpen] = useState(false)\n const hexValue = hslToHex(value)\n const cssColor = value ? `hsl(${value})` : 'transparent'\n\n // Pending color — only commit to parent when popover closes\n const pendingHexRef = useRef(hexValue)\n const onChangeRef = useRef(onChange)\n useEffect(() => { onChangeRef.current = onChange }, [onChange])\n\n // Reset pending when popover opens\n useEffect(() => {\n if (open) pendingHexRef.current = hexValue\n }, [open, hexValue])\n\n const handleHexChange = useCallback((hex: string) => {\n pendingHexRef.current = hex\n }, [])\n\n const handleOpenChange = useCallback((newOpen: boolean) => {\n if (!newOpen && open) {\n // Popover closing — commit pending color\n const pending = pendingHexRef.current\n if (pending && pending !== hexValue) {\n onChangeRef.current(hexToHsl(pending))\n }\n }\n setOpen(newOpen)\n }, [open, hexValue])\n\n return (\n <Popover.Root open={open} onOpenChange={disabled ? undefined : handleOpenChange}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'flex items-center gap-2 px-2 py-1 rounded-lg border border-white/10',\n 'bg-white/5 hover:border-white/20 hover:bg-white/[0.08] transition-colors',\n 'text-xs text-white/60 font-mono min-w-[7.5rem] justify-start',\n 'focus:outline-none focus:border-white/30',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n aria-label=\"Pick color\"\n >\n {/* Circular swatch */}\n <span\n className=\"w-4 h-4 rounded-full border border-white/20 shrink-0 inline-block\"\n style={{ background: cssColor }}\n />\n {/* Hex value */}\n <span>{hexValue.toUpperCase()}</span>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n sideOffset={6}\n align=\"start\"\n className={cn(\n 'z-[9999] rounded-xl shadow-2xl p-3 w-[220px]',\n 'bg-[#0f1117] border border-white/10',\n 'focus:outline-none'\n )}\n onInteractOutside={() => handleOpenChange(false)}\n >\n {open && (\n <ColorPicker key={hexValue} defaultValue={hexValue} className=\"gap-2.5\">\n <ColorReader onHexChange={handleHexChange} />\n <ColorPickerSelection className=\"h-32 w-full rounded-lg\" />\n <div className=\"flex items-center gap-3\">\n <ColorPickerEyeDropper />\n <div className=\"flex flex-col gap-1.5 flex-1\">\n <ColorPickerHue />\n <ColorPickerAlpha />\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 min-w-0\">\n <ColorPickerOutput />\n <ColorPickerFormat className=\"min-w-0\" />\n </div>\n </ColorPicker>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","'use client'\n\nimport Color from 'color'\nimport {\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport * as Slider from '@radix-ui/react-slider'\nimport { cn } from '../../lib/utils'\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface ColorPickerContextValue {\n hue: number\n saturation: number\n lightness: number\n alpha: number\n mode: string\n setHue: (h: number) => void\n setSaturation: (s: number) => void\n setLightness: (l: number) => void\n setAlpha: (a: number) => void\n setMode: (mode: string) => void\n}\n\nconst ColorPickerContext = createContext<ColorPickerContextValue | undefined>(undefined)\n\nexport const useColorPicker = () => {\n const ctx = useContext(ColorPickerContext)\n if (!ctx) throw new Error('useColorPicker must be used within ColorPicker')\n return ctx\n}\n\n// ─── Root ──────────────────────────────────────────────────────────────────────\n\nexport type ColorPickerProps = HTMLAttributes<HTMLDivElement> & {\n defaultValue?: string\n onChange?: (hex: string) => void\n}\n\nexport const ColorPicker = ({\n defaultValue = '#000000',\n onChange,\n className,\n children,\n ...props\n}: ColorPickerProps) => {\n const initial = (() => { try { return Color(defaultValue) } catch { return Color('#000000') } })()\n\n const [hue, setHueState] = useState(initial.hue())\n const [saturation, setSaturationState] = useState(initial.saturationl())\n const [lightness, setLightnessState] = useState(initial.lightness())\n const [alpha, setAlphaState] = useState(initial.alpha() * 100)\n const [mode, setMode] = useState('HEX')\n\n const notifyRef = useRef(onChange)\n useEffect(() => { notifyRef.current = onChange }, [onChange])\n\n const notify = useCallback((h: number, s: number, l: number, a: number) => {\n notifyRef.current?.(Color.hsl(h, s, l).alpha(a / 100).hexa())\n }, [])\n\n const setHue = useCallback((h: number) => { setHueState(h); notify(h, saturation, lightness, alpha) }, [saturation, lightness, alpha, notify])\n const setSaturation = useCallback((s: number) => { setSaturationState(s); notify(hue, s, lightness, alpha) }, [hue, lightness, alpha, notify])\n const setLightness = useCallback((l: number) => { setLightnessState(l); notify(hue, saturation, l, alpha) }, [hue, saturation, alpha, notify])\n const setAlpha = useCallback((a: number) => { setAlphaState(a); notify(hue, saturation, lightness, a) }, [hue, saturation, lightness, notify])\n\n return (\n <ColorPickerContext.Provider value={{ hue, saturation, lightness, alpha, mode, setHue, setSaturation, setLightness, setAlpha, setMode }}>\n <div className={cn('flex flex-col gap-3', className)} {...props}>\n {children}\n </div>\n </ColorPickerContext.Provider>\n )\n}\n\n// ─── Selection ────────────────────────────────────────────────────────────────\n\nexport const ColorPickerSelection = memo(({ className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n const { hue, saturation, lightness, setSaturation, setLightness } = useColorPicker()\n\n const [posX, setPosX] = useState(() => saturation / 100)\n const [posY, setPosY] = useState(() => {\n const x = saturation / 100\n const topL = x < 0.01 ? 100 : 50 + 50 * (1 - x)\n return topL > 0 ? Math.max(0, Math.min(1, 1 - lightness / topL)) : 0\n })\n\n const bg = useMemo(() =>\n `linear-gradient(0deg,rgba(0,0,0,1),rgba(0,0,0,0)),linear-gradient(90deg,rgba(255,255,255,1),rgba(255,255,255,0)),hsl(${hue},100%,50%)`,\n [hue]\n )\n\n const handleMove = useCallback((e: PointerEvent) => {\n if (!isDragging || !containerRef.current) return\n const rect = containerRef.current.getBoundingClientRect()\n const x = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const y = Math.max(0, Math.min(1, (e.clientY - rect.top) / rect.height))\n setPosX(x); setPosY(y)\n setSaturation(x * 100)\n setLightness((x < 0.01 ? 100 : 50 + 50 * (1 - x)) * (1 - y))\n }, [isDragging, setSaturation, setLightness])\n\n useEffect(() => {\n if (!isDragging) return\n const up = () => setIsDragging(false)\n window.addEventListener('pointermove', handleMove)\n window.addEventListener('pointerup', up)\n return () => { window.removeEventListener('pointermove', handleMove); window.removeEventListener('pointerup', up) }\n }, [isDragging, handleMove])\n\n return (\n <div\n ref={containerRef}\n className={cn('relative w-full cursor-crosshair rounded-lg', className)}\n style={{ background: bg }}\n onPointerDown={e => { e.preventDefault(); setIsDragging(true); handleMove(e.nativeEvent) }}\n {...props}\n >\n <div\n className=\"pointer-events-none absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white\"\n style={{ left: `${posX * 100}%`, top: `${posY * 100}%`, boxShadow: '0 0 0 1px rgba(0,0,0,0.6)' }}\n />\n </div>\n )\n})\nColorPickerSelection.displayName = 'ColorPickerSelection'\n\n// ─── Hue Slider ───────────────────────────────────────────────────────────────\n\nexport const ColorPickerHue = ({ className, ...props }: Omit<ComponentProps<typeof Slider.Root>, 'value' | 'onValueChange' | 'max' | 'step'>) => {\n const { hue, setHue } = useColorPicker()\n return (\n <Slider.Root className={cn('relative flex h-4 w-full touch-none items-center', className)} max={360} step={1} value={[hue]} onValueChange={([h]) => setHue(h)} {...props}>\n <Slider.Track className=\"relative h-3 w-full grow rounded-full bg-[linear-gradient(90deg,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)]\">\n <Slider.Range className=\"absolute h-full\" />\n </Slider.Track>\n <Slider.Thumb className=\"block h-4 w-4 rounded-full border-2 border-white shadow-md focus:outline-none\" style={{ boxShadow: '0 0 0 1px rgba(0,0,0,0.4)' }} />\n </Slider.Root>\n )\n}\n\n// ─── Alpha Slider ─────────────────────────────────────────────────────────────\n\nexport const ColorPickerAlpha = ({ className, ...props }: Omit<ComponentProps<typeof Slider.Root>, 'value' | 'onValueChange' | 'max' | 'step'>) => {\n const { alpha, setAlpha, hue, saturation, lightness } = useColorPicker()\n return (\n <Slider.Root className={cn('relative flex h-4 w-full touch-none items-center', className)} max={100} step={1} value={[alpha]} onValueChange={([a]) => setAlpha(a)} {...props}>\n <Slider.Track className=\"relative h-3 w-full grow rounded-full\" style={{\n backgroundImage: `linear-gradient(90deg,transparent,hsl(${hue},${saturation}%,${lightness}%)),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==\")`,\n }}>\n <Slider.Range className=\"absolute h-full\" />\n </Slider.Track>\n <Slider.Thumb className=\"block h-4 w-4 rounded-full border-2 border-white shadow-md focus:outline-none\" style={{ boxShadow: '0 0 0 1px rgba(0,0,0,0.4)' }} />\n </Slider.Root>\n )\n}\n\n// ─── Eye Dropper ─────────────────────────────────────────────────────────────\n\nexport const ColorPickerEyeDropper = ({ className, ...props }: HTMLAttributes<HTMLButtonElement>) => {\n const { setHue, setSaturation, setLightness, setAlpha } = useColorPicker()\n return (\n <button\n type=\"button\"\n title=\"Eye dropper\"\n onClick={async () => {\n try {\n // @ts-expect-error EyeDropper is experimental\n const r = await new EyeDropper().open()\n const c = Color(r.sRGBHex)\n setHue(c.hue()); setSaturation(c.saturationl()); setLightness(c.lightness()); setAlpha(100)\n } catch {}\n }}\n className={cn('shrink-0 focus:outline-none', className)}\n style={{ width: 32, height: 32, display: 'flex', alignItems: 'center', justifyContent: 'center', borderRadius: 6, border: '1px solid rgba(255,255,255,0.12)', backgroundColor: 'rgba(255,255,255,0.05)', color: 'rgba(255,255,255,0.5)', cursor: 'pointer' }}\n {...props as any}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M9.53 16.122a3 3 0 0 0-5.78 1.128 2.25 2.25 0 0 1-2.4 2.245 4.5 4.5 0 0 0 8.4-2.245c0-.399-.078-.78-.22-1.128Z\"/>\n <path d=\"m13.5 10.5 2.25-2.25m0 0 2.25-2.25M15.75 8.25l2.25 2.25M15.75 8.25 13.5 6m4.5-1.5 1.5-1.5\"/>\n <path d=\"M6.75 7.5 10.5 4.5c.5-.375 1.25-.375 1.5 0l6.75 6.75c.375.5.375 1.25 0 1.5L15 16.5\"/>\n </svg>\n </button>\n )\n}\n\n// ─── Format Output (mode selector) ───────────────────────────────────────────\n\nexport type ColorPickerOutputProps = HTMLAttributes<HTMLDivElement>\n\nexport const ColorPickerOutput = ({ className, ...props }: ColorPickerOutputProps) => {\n const { mode, setMode } = useColorPicker()\n return (\n <div className={cn('relative shrink-0', className)} {...props}>\n <select\n value={mode}\n onChange={e => setMode(e.target.value)}\n style={{\n height: 32,\n width: 72,\n backgroundColor: 'rgba(255,255,255,0.06)',\n border: '1px solid rgba(255,255,255,0.12)',\n borderRadius: 6,\n color: 'rgba(255,255,255,0.75)',\n fontSize: 12,\n paddingLeft: 8,\n paddingRight: 24,\n outline: 'none',\n cursor: 'pointer',\n appearance: 'none',\n WebkitAppearance: 'none',\n }}\n >\n {['HEX', 'HSL', 'RGB'].map(f => (\n <option key={f} value={f} style={{ backgroundColor: '#1e2130', color: 'rgba(255,255,255,0.8)' }}>{f}</option>\n ))}\n </select>\n <svg style={{ position: 'absolute', right: 6, top: '50%', transform: 'translateY(-50%)', width: 12, height: 12, color: 'rgba(255,255,255,0.35)', pointerEvents: 'none' }} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"m6 9 6 6 6-6\"/>\n </svg>\n </div>\n )\n}\n\n// ─── Format Display (editable value input) ────────────────────────────────────\n\nexport type ColorPickerFormatProps = HTMLAttributes<HTMLInputElement>\n\nexport const ColorPickerFormat = ({ className, ...props }: ColorPickerFormatProps) => {\n const { hue, saturation, lightness, alpha, mode, setHue, setSaturation, setLightness, setAlpha } = useColorPicker()\n const [focused, setFocused] = useState(false)\n const [localVal, setLocalVal] = useState('')\n\n const computedVal = (() => {\n try {\n const c = Color.hsl(hue, saturation, lightness).alpha(alpha / 100)\n if (mode === 'HEX') return c.hex().toUpperCase()\n if (mode === 'HSL') return `${Math.round(hue)} ${Math.round(saturation)}% ${Math.round(lightness)}%`\n if (mode === 'RGB') { const [r, g, b] = c.rgb().array().map(Math.round); return `${r}, ${g}, ${b}` }\n } catch {}\n return ''\n })()\n\n useEffect(() => { if (!focused) setLocalVal(computedVal) }, [computedVal, focused])\n\n const tryApply = (raw: string) => {\n try {\n if (mode === 'HEX') {\n const c = Color(raw.startsWith('#') ? raw : `#${raw}`)\n setHue(c.hue()); setSaturation(c.saturationl()); setLightness(c.lightness()); setAlpha(c.alpha() * 100)\n } else if (mode === 'HSL') {\n const p = raw.split(/[\\s,%]+/).filter(Boolean)\n if (p.length >= 3) { setHue(+p[0]); setSaturation(+p[1]); setLightness(+p[2]) }\n } else if (mode === 'RGB') {\n const p = raw.split(/[\\s,]+/).filter(Boolean)\n if (p.length >= 3) { const c = Color.rgb(+p[0], +p[1], +p[2]); setHue(c.hue()); setSaturation(c.saturationl()); setLightness(c.lightness()) }\n }\n } catch {}\n }\n\n return (\n <input\n type=\"text\"\n value={focused ? localVal : computedVal}\n onChange={e => { setLocalVal(e.target.value); tryApply(e.target.value) }}\n onFocus={() => { setFocused(true); setLocalVal(computedVal) }}\n onBlur={() => { tryApply(localVal); setFocused(false) }}\n style={{\n flex: 1, minWidth: 0, height: 32,\n backgroundColor: 'rgba(255,255,255,0.05)',\n border: '1px solid rgba(255,255,255,0.12)',\n borderRadius: 6,\n padding: '0 8px',\n color: 'rgba(255,255,255,0.75)',\n fontSize: 12,\n fontFamily: 'monospace',\n outline: 'none',\n }}\n className={className}\n {...props as any}\n />\n )\n}\n\n// ─── Hex Output (swatch + hex label) ─────────────────────────────────────────\n\nexport const ColorPickerHexOutput = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n const { hue, saturation, lightness } = useColorPicker()\n const hex = Color.hsl(hue, saturation, lightness).hex()\n return (\n <div className={cn('flex items-center gap-1.5 px-0.5', className)} {...props}>\n <div className=\"w-5 h-5 rounded border border-white/20 shrink-0\" style={{ background: `hsl(${hue},${saturation}%,${lightness}%)` }} />\n <span className=\"text-xs font-mono text-white/50\">{hex}</span>\n </div>\n )\n}\n","'use client'\n\nimport { useEditor, EditorContent } from '@tiptap/react'\nimport StarterKit from '@tiptap/starter-kit'\nimport Placeholder from '@tiptap/extension-placeholder'\nimport { useMemo } from 'react'\n\n/**\n * TiptapEditor — Rich text editor with live editing\n *\n * Presentation-only. Consumer handles:\n * - Saving (getJSON() when ready)\n * - Upload handling\n * - Validation\n *\n * Props:\n * - value: Record<string, any> | string | null — JSON content from editor.getJSON()\n * - onChange: (json: Record<string, any>) => void — called on every change\n * - placeholder?: string — placeholder text\n * - disabled?: boolean\n * - className?: string — wrapper classes\n */\nexport function TiptapEditor({\n value,\n onChange,\n placeholder = 'Start writing…',\n disabled = false,\n className = '',\n}: {\n value: Record<string, any> | string | null\n onChange: (json: Record<string, any>) => void\n placeholder?: string\n disabled?: boolean\n className?: string\n}) {\n // Initialize editor with Tiptap + StarterKit\n const editor = useEditor({\n immediatelyRender: false,\n extensions: [\n StarterKit.configure({\n heading: { levels: [1, 2, 3] },\n }),\n Placeholder.configure({ placeholder }),\n ],\n content: value,\n editable: !disabled,\n editorProps: {\n attributes: {\n class:\n 'prose prose-sm max-w-none min-h-[400px] p-4 outline-none focus:outline-none bg-white dark:bg-slate-900 text-slate-900 dark:text-white rounded-lg border border-gray-200 dark:border-slate-700',\n },\n },\n onUpdate: ({ editor }) => {\n onChange(editor.getJSON())\n },\n })\n\n // Render editor\n if (!editor) return null\n\n return (\n <div className={`tiptap-wrapper ${className}`.trim()}>\n {/* Toolbar (minimal) */}\n <div className=\"flex gap-1 p-2 border-b border-gray-200 dark:border-slate-700 bg-gray-50 dark:bg-slate-800 rounded-t-lg\">\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n active={editor.isActive('bold')}\n title=\"Bold (Ctrl+B)\"\n >\n <strong>B</strong>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n active={editor.isActive('italic')}\n title=\"Italic (Ctrl+I)\"\n >\n <em>I</em>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n active={editor.isActive('strike')}\n title=\"Strikethrough\"\n >\n <s>S</s>\n </ToolbarButton>\n\n <div className=\"w-px bg-gray-300 dark:bg-slate-600 mx-1\" />\n\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}\n active={editor.isActive('heading', { level: 1 })}\n title=\"Heading 1\"\n >\n H1\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}\n active={editor.isActive('heading', { level: 2 })}\n title=\"Heading 2\"\n >\n H2\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}\n active={editor.isActive('heading', { level: 3 })}\n title=\"Heading 3\"\n >\n H3\n </ToolbarButton>\n\n <div className=\"w-px bg-gray-300 dark:bg-slate-600 mx-1\" />\n\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n active={editor.isActive('bulletList')}\n title=\"Bullet list\"\n >\n •\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n active={editor.isActive('orderedList')}\n title=\"Ordered list\"\n >\n 1.\n </ToolbarButton>\n\n <div className=\"w-px bg-gray-300 dark:bg-slate-600 mx-1\" />\n\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleCodeBlock().run()}\n active={editor.isActive('codeBlock')}\n title=\"Code block\"\n >\n {'<>'}\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleCode().run()}\n active={editor.isActive('code')}\n title=\"Inline code\"\n >\n {\"`\"}\n </ToolbarButton>\n\n <div className=\"w-px bg-gray-300 dark:bg-slate-600 mx-1\" />\n\n <ToolbarButton\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n title=\"Horizontal rule\"\n >\n —\n </ToolbarButton>\n </div>\n\n {/* Editor content */}\n <EditorContent editor={editor} />\n </div>\n )\n}\n\n/**\n * ToolbarButton — Simple toolbar button\n */\nfunction ToolbarButton({\n onClick,\n active,\n title,\n children,\n}: {\n onClick: () => void\n active?: boolean\n title?: string\n children: React.ReactNode\n}) {\n return (\n <button\n onClick={onClick}\n title={title}\n className={`\n px-2 py-1 rounded text-sm font-medium transition-colors\n ${active\n ? 'bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400'\n : 'bg-transparent text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-slate-700'\n }\n `}\n >\n {children}\n </button>\n )\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\n/**\n * ThemeBuilder — Visual theme editor shell\n *\n * Consumer provides:\n * - initialTheme: Current theme data\n * - onSave: (themeData) => void\n * - onPreview: (html) => void\n *\n * Includes:\n * - Icon strip sidebar (AI, Variables, Styles)\n * - Variables panel (Color Schema + Typography + Page Layout)\n * - Preview iframe\n *\n * This is the shell. Consumer handles:\n * - API persistence\n * - Preview rendering (Tailwind + Alpine)\n * - Theme data structure\n */\n\nexport interface Theme {\n id: string\n name: string\n variables?: Record<string, any>\n colorSchemas?: Array<any>\n typography?: Record<string, any>\n [key: string]: any\n}\n\nexport interface ThemeBuilderProps {\n theme: Theme\n onSave: (theme: Theme) => void\n onPreviewUpdate?: (previewHtml: string) => void\n previewUrl?: string\n}\n\ntype SidebarTab = 'ai' | 'variables' | 'styles'\n\nexport function ThemeBuilder({ theme, onSave, onPreviewUpdate, previewUrl }: ThemeBuilderProps) {\n const [sidebarTab, setSidebarTab] = useState<SidebarTab>('variables')\n const [iframeLoaded, setIframeLoaded] = useState(false)\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const handleSave = useCallback(() => {\n onSave(theme)\n }, [theme, onSave])\n\n const handlePreviewReload = useCallback(() => {\n if (iframeRef.current) {\n iframeRef.current.src = previewUrl || 'about:blank'\n }\n }, [previewUrl])\n\n return (\n <div className=\"flex h-screen bg-[#0f1117] text-white overflow-hidden\">\n {/* Left sidebar — icon strip */}\n <div className=\"w-11 bg-[#010409] border-r border-white/10 flex flex-col items-center py-4 gap-6\">\n {/* AI Tab */}\n <button\n onClick={() => setSidebarTab('ai')}\n title=\"AI Assistant\"\n className={`p-2 rounded transition-colors ${\n sidebarTab === 'ai'\n ? 'bg-[#287f71]/20 text-[#287f71]'\n : 'text-white/40 hover:text-white/60'\n }`}\n >\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z\" />\n </svg>\n </button>\n\n {/* Variables Tab */}\n <button\n onClick={() => setSidebarTab('variables')}\n title=\"Variables\"\n className={`p-2 rounded transition-colors ${\n sidebarTab === 'variables'\n ? 'bg-[#287f71]/20 text-[#287f71]'\n : 'text-white/40 hover:text-white/60'\n }`}\n >\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <circle cx=\"6\" cy=\"6\" r=\"2\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n <circle cx=\"18\" cy=\"18\" r=\"2\" />\n <path d=\"M8 8l8 8M6 18l12-12\" />\n </svg>\n </button>\n\n {/* Styles Tab */}\n <button\n onClick={() => setSidebarTab('styles')}\n title=\"Styles\"\n className={`p-2 rounded transition-colors ${\n sidebarTab === 'styles'\n ? 'bg-[#287f71]/20 text-[#287f71]'\n : 'text-white/40 hover:text-white/60'\n }`}\n >\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M3 6h18M3 12h18M3 18h18\" />\n </svg>\n </button>\n </div>\n\n {/* Middle — Variables panel */}\n <div className=\"w-80 bg-[#13151e] border-r border-white/10 overflow-y-auto p-4\">\n {sidebarTab === 'variables' && (\n <div className=\"space-y-6\">\n <h2 className=\"text-lg font-semibold\">Theme Variables</h2>\n <div className=\"text-sm text-white/50 p-4 bg-white/5 rounded\">\n 💡 Variables panel component — render color schema, typography, page layout sections here\n </div>\n <button\n onClick={handleSave}\n className=\"w-full px-4 py-2 bg-[#287f71] text-white rounded-lg hover:bg-[#287f71]/80 transition-colors font-medium\"\n >\n Save Changes\n </button>\n </div>\n )}\n\n {sidebarTab === 'ai' && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-semibold\">AI Assistant</h2>\n <div className=\"text-sm text-white/50 p-4 bg-white/5 rounded\">\n 🤖 AI chat component — connect to OpenAI/Anthropic API\n </div>\n </div>\n )}\n\n {sidebarTab === 'styles' && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-semibold\">Style Classes</h2>\n <div className=\"text-sm text-white/50 p-4 bg-white/5 rounded\">\n 🎨 Style Classes editor — coming soon\n </div>\n </div>\n )}\n </div>\n\n {/* Right — Preview iframe */}\n <div className=\"flex-1 flex flex-col bg-[#161b22]\">\n {/* Topbar */}\n <div className=\"h-12 bg-[#0d1117] border-b border-white/10 flex items-center justify-between px-4\">\n <h1 className=\"text-sm font-medium\">Preview</h1>\n <button\n onClick={handlePreviewReload}\n className=\"px-3 py-1 text-xs bg-white/10 hover:bg-white/20 rounded transition-colors\"\n >\n Reload\n </button>\n </div>\n\n {/* Preview iframe */}\n <iframe\n ref={iframeRef}\n src={previewUrl || 'about:blank'}\n onLoad={() => setIframeLoaded(true)}\n className=\"flex-1 border-0\"\n title=\"Theme preview\"\n />\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { Button } from '../primitives/button'\nimport { Input } from '../primitives/input'\n\n/**\n * ColorSchemaPanel — Color token editor with light/dark support\n *\n * Consumer provides:\n * - schemas: Array of color schemas\n * - onSave: (schemas) => void\n * - onSchemaSelect: (schemaId) => void\n */\n\nexport interface ColorSchema {\n id: string\n name: string\n light: Record<string, string>\n dark: Record<string, string>\n}\n\nexport function ColorSchemaPanel({\n schemas = [],\n activeSchemaId,\n onSchemaSelect,\n onSchemaSave,\n onSchemaCreate,\n}: {\n schemas: ColorSchema[]\n activeSchemaId?: string\n onSchemaSelect: (id: string) => void\n onSchemaSave: (schema: ColorSchema) => void\n onSchemaCreate: (name: string) => void\n}) {\n const [showCreate, setShowCreate] = useState(false)\n const [newName, setNewName] = useState('')\n const activeSchema = schemas.find((s) => s.id === activeSchemaId)\n\n const handleCreate = () => {\n if (newName.trim()) {\n onSchemaCreate(newName)\n setNewName('')\n setShowCreate(false)\n }\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-semibold text-white\">Color Schemas</h3>\n <button\n onClick={() => setShowCreate(!showCreate)}\n className=\"text-xs px-2 py-1 bg-[#287f71] text-white rounded hover:bg-[#287f71]/80 transition-colors\"\n >\n + New\n </button>\n </div>\n\n {/* Create new schema */}\n {showCreate && (\n <div className=\"flex gap-2 p-3 bg-white/5 rounded-lg\">\n <Input\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"Schema name\"\n className=\"h-8 text-xs bg-white/10 border-white/20 text-white placeholder:text-white/30\"\n />\n <button\n onClick={handleCreate}\n className=\"px-3 py-1 text-xs bg-[#287f71] text-white rounded hover:bg-[#287f71]/80\"\n >\n Create\n </button>\n <button\n onClick={() => setShowCreate(false)}\n className=\"px-3 py-1 text-xs bg-white/10 text-white/70 rounded hover:bg-white/20\"\n >\n Cancel\n </button>\n </div>\n )}\n\n {/* Schema list */}\n <div className=\"space-y-2\">\n {schemas.map((schema) => (\n <button\n key={schema.id}\n onClick={() => onSchemaSelect(schema.id)}\n className={`w-full p-3 rounded-lg border-2 transition-colors text-left ${\n activeSchemaId === schema.id\n ? 'border-[#287f71] bg-[#287f71]/10'\n : 'border-white/10 bg-white/5 hover:border-white/20'\n }`}\n >\n <p className=\"text-sm font-medium text-white\">{schema.name}</p>\n <p className=\"text-xs text-white/50\">\n {Object.keys(schema.light).length} tokens\n </p>\n </button>\n ))}\n </div>\n\n {/* Active schema preview */}\n {activeSchema && (\n <div className=\"p-3 bg-white/5 rounded-lg border border-white/10 space-y-3\">\n <h4 className=\"text-xs font-semibold text-white\">Light Mode</h4>\n <div className=\"grid grid-cols-4 gap-2\">\n {Object.entries(activeSchema.light).slice(0, 8).map(([key, color]) => (\n <div\n key={key}\n className=\"rounded border border-white/10 overflow-hidden\"\n title={key}\n >\n <div\n className=\"h-6\"\n style={{ backgroundColor: color }}\n />\n </div>\n ))}\n </div>\n\n <h4 className=\"text-xs font-semibold text-white mt-3\">Dark Mode</h4>\n <div className=\"grid grid-cols-4 gap-2\">\n {Object.entries(activeSchema.dark).slice(0, 8).map(([key, color]) => (\n <div\n key={key}\n className=\"rounded border border-white/10 overflow-hidden\"\n title={key}\n >\n <div\n className=\"h-6\"\n style={{ backgroundColor: color }}\n />\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { Label } from '../primitives/label'\nimport { Input } from '../primitives/input'\n\n/**\n * TypographyPanel — Font & text settings editor\n *\n * Consumer provides:\n * - typography: Typography settings object\n * - onSave: (typography) => void\n */\n\nexport interface TextPreset {\n size: Record<string, number>\n sizeUnit: string\n lineHeight: string\n fontRole: string\n weight: number\n letterSpacing: string\n}\n\nexport interface TypographySettings {\n fonts: Record<string, string>\n body: TextPreset\n headings: Record<string, TextPreset>\n}\n\nexport function TypographyPanel({\n typography,\n onSave,\n}: {\n typography: TypographySettings\n onSave: (settings: TypographySettings) => void\n}) {\n const [expanded, setExpanded] = useState<string | null>('body')\n\n const handleFontChange = (role: string, font: string) => {\n const updated = {\n ...typography,\n fonts: { ...typography.fonts, [role]: font },\n }\n onSave(updated)\n }\n\n const handlePresetChange = (presetKey: string, field: string, value: any) => {\n const isHeading = presetKey.startsWith('h')\n const updated = isHeading\n ? {\n ...typography,\n headings: {\n ...typography.headings,\n [presetKey]: { ...typography.headings[presetKey], [field]: value },\n },\n }\n : {\n ...typography,\n body: { ...typography.body, [field]: value },\n }\n onSave(updated)\n }\n\n return (\n <div className=\"space-y-4\">\n <h3 className=\"text-sm font-semibold text-white\">Typography</h3>\n\n {/* Fonts section */}\n <div className=\"space-y-2 border-b border-white/10 pb-4\">\n <h4 className=\"text-xs font-medium text-white/70 uppercase\">Fonts</h4>\n {Object.entries(typography.fonts || {}).map(([role, font]) => (\n <div key={role} className=\"flex flex-col gap-1\">\n <Label className=\"text-xs text-white/60\">{role}</Label>\n <Input\n value={font}\n onChange={(e) => handleFontChange(role, e.target.value)}\n placeholder=\"Font name\"\n className=\"h-8 text-xs bg-white/10 border-white/20 text-white placeholder:text-white/30\"\n />\n </div>\n ))}\n </div>\n\n {/* Text presets section */}\n <div className=\"space-y-2\">\n <h4 className=\"text-xs font-medium text-white/70 uppercase\">Text Styles</h4>\n\n {/* Body */}\n <button\n onClick={() => setExpanded(expanded === 'body' ? null : 'body')}\n className=\"w-full text-left p-2 rounded hover:bg-white/5 transition-colors\"\n >\n <span className=\"text-sm font-medium text-white\">Body Text</span>\n <svg\n className={`w-3 h-3 inline ml-2 transition-transform ${expanded === 'body' ? 'rotate-180' : ''}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n {expanded === 'body' && (\n <div className=\"ml-2 space-y-2 p-2 bg-white/5 rounded\">\n <div>\n <Label className=\"text-xs text-white/60\">Size</Label>\n <Input\n type=\"number\"\n value={typography.body?.size?.desktop || 16}\n onChange={(e) => handlePresetChange('body', 'size', { desktop: +e.target.value })}\n className=\"h-8 text-xs bg-white/10 border-white/20 text-white\"\n />\n </div>\n <div>\n <Label className=\"text-xs text-white/60\">Line Height</Label>\n <Input\n value={typography.body?.lineHeight || '1.5'}\n onChange={(e) => handlePresetChange('body', 'lineHeight', e.target.value)}\n className=\"h-8 text-xs bg-white/10 border-white/20 text-white\"\n />\n </div>\n </div>\n )}\n\n {/* Headings */}\n {['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].map((heading) => (\n <button\n key={heading}\n onClick={() => setExpanded(expanded === heading ? null : heading)}\n className=\"w-full text-left p-2 rounded hover:bg-white/5 transition-colors\"\n >\n <span className=\"text-sm font-medium text-white uppercase\">{heading}</span>\n <svg\n className={`w-3 h-3 inline ml-2 transition-transform ${expanded === heading ? 'rotate-180' : ''}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n ))}\n </div>\n\n {/* Save */}\n <button\n onClick={() => onSave(typography)}\n className=\"w-full px-4 py-2 bg-[#287f71] text-white rounded-lg hover:bg-[#287f71]/80 transition-colors font-medium text-sm mt-4\"\n >\n Save Typography\n </button>\n </div>\n )\n}\n","import useSWR from 'swr'\n\ninterface UseFetchOptions {\n /** Custom fetcher override */\n fetcher?: (url: string) => Promise<any>\n /** SWR options */\n revalidateOnFocus?: boolean\n refreshInterval?: number\n /** Don't fetch until condition is true */\n enabled?: boolean\n}\n\n/**\n * useFetch - SWR-powered data fetching hook\n * \n * Uses global SWR config by default (from SWRProvider)\n * Supports fetch, axios, or any custom fetcher\n * \n * Basic:\n * ```tsx\n * const { data, isLoading } = useFetch('/api/users')\n * ```\n * \n * With axios:\n * ```tsx\n * import axios from 'axios'\n * const { data } = useFetch('/api/users', { \n * fetcher: (url) => axios.get(url).then(r => r.data) \n * })\n * ```\n * \n * Conditional:\n * ```tsx\n * const { data } = useFetch(userId ? `/api/users/${userId}` : null)\n * ```\n */\nexport function useFetch<T = any>(url: string | null, options?: UseFetchOptions) {\n const { data, error, isLoading, isValidating, mutate } = useSWR<T>(\n options?.enabled === false ? null : url,\n options?.fetcher,\n {\n revalidateOnFocus: options?.revalidateOnFocus,\n refreshInterval: options?.refreshInterval,\n }\n )\n\n return {\n data,\n isLoading,\n isValidating,\n error,\n isError: !!error,\n mutate,\n }\n}\n","import { useSession } from 'next-auth/react'\n\n/**\n * useAuth - Hook to access current session and auth methods\n * \n * Returns the NextAuth useSession hook result\n * \n * Usage:\n * ```tsx\n * import { useAuth } from '@webdevarif/dashui-setup/hooks'\n * \n * function Profile() {\n * const { data: session, status } = useAuth()\n * \n * if (status === 'loading') return <div>Loading...</div>\n * if (status === 'unauthenticated') return <div>Not logged in</div>\n * \n * return <div>Welcome {session?.user?.name}</div>\n * }\n * ```\n */\nexport function useAuth() {\n return useSession()\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthShellProps {\n children: React.ReactNode\n /** Optional background pattern — 'dots' | 'grid' | 'none' */\n pattern?: 'dots' | 'grid' | 'none'\n maxWidth?: string\n}\n\nexport function AuthShell({ children, pattern = 'dots', maxWidth = '520px' }: AuthShellProps) {\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px',\n background: 'var(--background)',\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n {pattern === 'dots' && (\n <div\n aria-hidden\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage:\n 'radial-gradient(circle, var(--border) 1px, transparent 1px)',\n backgroundSize: '28px 28px',\n opacity: 0.5,\n pointerEvents: 'none',\n }}\n />\n )}\n {pattern === 'grid' && (\n <div\n aria-hidden\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage:\n 'linear-gradient(var(--border) 1px, transparent 1px), linear-gradient(90deg, var(--border) 1px, transparent 1px)',\n backgroundSize: '32px 32px',\n opacity: 0.4,\n pointerEvents: 'none',\n }}\n />\n )}\n <div style={{ position: 'relative', zIndex: 1, width: '100%', maxWidth }}>\n {children}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthCardProps {\n children: React.ReactNode\n padding?: string\n}\n\nexport function AuthCard({ children, padding = '24px 28px' }: AuthCardProps) {\n return (\n <div\n style={{\n background: 'var(--card)',\n border: '1px solid var(--border)',\n borderRadius: 'calc(var(--radius, 0.5rem) * 1.5)',\n boxShadow: '0 4px 32px rgba(0,0,0,0.06), 0 1px 4px rgba(0,0,0,0.04)',\n padding,\n width: '100%',\n }}\n >\n {children}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthLogoProps {\n /** App name shown next to the logo mark */\n appName?: string\n /** Single letter shown inside the logo box (fallback when no imageUrl) */\n letter?: string\n /** Image URL — when provided, shows image instead of letter box */\n imageUrl?: string\n /** Image/logo size in px */\n size?: number\n}\n\nexport function AuthLogo({ appName = 'Builify CMS', letter = 'B', imageUrl, size = 36 }: AuthLogoProps) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '10px', marginBottom: '28px' }}>\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={appName}\n width={size}\n height={size}\n style={{ borderRadius: 'calc(var(--radius, 0.5rem) * 1.2)', flexShrink: 0, display: 'block' }}\n />\n ) : (\n <div\n style={{\n width: size,\n height: size,\n background: 'var(--primary)',\n borderRadius: 'calc(var(--radius, 0.5rem) * 1.2)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--primary-foreground)',\n fontWeight: 800,\n fontSize: `${size * 0.44}px`,\n flexShrink: 0,\n }}\n >\n {letter}\n </div>\n )}\n <span\n style={{\n fontWeight: 700,\n fontSize: '1.125rem',\n color: 'var(--foreground)',\n letterSpacing: '-0.02em',\n }}\n >\n {appName}\n </span>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthHeaderProps {\n title: string\n description?: string\n}\n\nexport function AuthHeader({ title, description }: AuthHeaderProps) {\n return (\n <div style={{ marginBottom: '24px', textAlign: 'center' }}>\n <h1\n style={{\n fontSize: '1.375rem',\n fontWeight: 700,\n color: 'var(--foreground)',\n margin: 0,\n letterSpacing: '-0.02em',\n }}\n >\n {title}\n </h1>\n {description && (\n <p\n style={{\n marginTop: '6px',\n fontSize: '0.875rem',\n color: 'var(--muted-foreground)',\n lineHeight: 1.5,\n }}\n >\n {description}\n </p>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthFieldProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label: string\n error?: string\n hint?: string\n rightLabel?: React.ReactNode\n}\n\nexport function AuthField({ label, error, hint, rightLabel, id, ...props }: AuthFieldProps) {\n const fieldId = id ?? label.toLowerCase().replace(/\\s+/g, '-')\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <label\n htmlFor={fieldId}\n style={{\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--foreground)',\n }}\n >\n {label}\n </label>\n {rightLabel && (\n <span style={{ fontSize: '0.8125rem' }}>{rightLabel}</span>\n )}\n </div>\n <input\n id={fieldId}\n style={{\n height: '40px',\n padding: '0 12px',\n background: 'var(--background)',\n border: `1px solid ${error ? 'var(--destructive)' : 'var(--border)'}`,\n borderRadius: 'var(--radius, 0.5rem)',\n color: 'var(--foreground)',\n fontSize: '0.875rem',\n outline: 'none',\n width: '100%',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n }}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = 'var(--ring)'\n e.currentTarget.style.boxShadow = '0 0 0 3px color-mix(in oklab, var(--ring) 20%, transparent)'\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = error ? 'var(--destructive)' : 'var(--border)'\n e.currentTarget.style.boxShadow = 'none'\n props.onBlur?.(e)\n }}\n {...props}\n />\n {error && (\n <p style={{ fontSize: '0.8rem', color: 'var(--destructive)', margin: 0 }}>{error}</p>\n )}\n {hint && !error && (\n <p style={{ fontSize: '0.8rem', color: 'var(--muted-foreground)', margin: 0 }}>{hint}</p>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n loading?: boolean\n variant?: 'primary' | 'outline' | 'ghost'\n fullWidth?: boolean\n}\n\nexport function AuthButton({\n loading,\n variant = 'primary',\n fullWidth = true,\n children,\n disabled,\n style,\n ...props\n}: AuthButtonProps) {\n const base: React.CSSProperties = {\n height: '42px',\n padding: '0 20px',\n borderRadius: 'var(--radius, 0.5rem)',\n fontSize: '0.875rem',\n fontWeight: 600,\n cursor: loading || disabled ? 'not-allowed' : 'pointer',\n opacity: loading || disabled ? 0.65 : 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n border: 'none',\n outline: 'none',\n transition: 'opacity 0.15s, filter 0.15s',\n width: fullWidth ? '100%' : 'auto',\n ...style,\n }\n\n const variantStyles: Record<string, React.CSSProperties> = {\n primary: {\n background: 'var(--primary)',\n color: 'var(--primary-foreground)',\n },\n outline: {\n background: 'transparent',\n color: 'var(--foreground)',\n border: '1px solid var(--border)',\n },\n ghost: {\n background: 'transparent',\n color: 'var(--foreground)',\n },\n }\n\n return (\n <button\n disabled={loading || disabled}\n style={{ ...base, ...variantStyles[variant] }}\n onMouseEnter={(e) => {\n if (!loading && !disabled) e.currentTarget.style.filter = 'brightness(0.9)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.filter = 'none'\n }}\n {...props}\n >\n {loading ? (\n <>\n <span\n style={{\n width: 14,\n height: 14,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n display: 'inline-block',\n animation: 'dashui-spin 0.7s linear infinite',\n }}\n />\n {children}\n </>\n ) : children}\n </button>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\nexport function AuthDivider({ label = 'or' }: { label?: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', margin: '20px 0' }}>\n <div style={{ flex: 1, height: 1, background: 'var(--border)' }} />\n <span style={{ fontSize: '0.75rem', color: 'var(--muted-foreground)', userSelect: 'none' }}>\n {label}\n </span>\n <div style={{ flex: 1, height: 1, background: 'var(--border)' }} />\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthFootnoteProps {\n text: string\n linkText: string\n linkHref: string\n}\n\nexport function AuthFootnote({ text, linkText, linkHref }: AuthFootnoteProps) {\n return (\n <p style={{\n textAlign: 'center',\n marginTop: '20px',\n fontSize: '0.8125rem',\n color: 'var(--muted-foreground)',\n }}>\n {text}{' '}\n <a\n href={linkHref}\n style={{\n color: 'var(--primary)',\n fontWeight: 600,\n textDecoration: 'none',\n }}\n onMouseEnter={(e) => e.currentTarget.style.textDecoration = 'underline'}\n onMouseLeave={(e) => e.currentTarget.style.textDecoration = 'none'}\n >\n {linkText}\n </a>\n </p>\n )\n}\n","// ─── Primitives ──────────────────────────────────────────────\nexport * from './components/primitives/button'\nexport * from './components/primitives/badge'\nexport * from './components/primitives/card'\nexport * from './components/primitives/checkbox'\nexport * from './components/primitives/dialog'\nexport * from './components/primitives/dropdown-menu'\nexport * from './components/primitives/input'\nexport * from './components/primitives/label'\nexport * from './components/primitives/popover'\nexport * from './components/primitives/select'\nexport * from './components/primitives/separator'\nexport * from './components/primitives/skeleton'\nexport * from './components/primitives/switch'\nexport * from './components/primitives/tabs'\nexport * from './components/primitives/textarea'\nexport * from './components/primitives/tooltip'\n\n// ─── Layout ──────────────────────────────────────────────────\nexport * from './components/layout/app-shell'\nexport * from './components/layout/sidebar'\nexport * from './components/layout/top-bar'\nexport * from './components/layout/page'\nexport * from './components/layout/page-section'\nexport * from './components/layout/search-bar'\nexport * from './components/layout/notification-bell'\nexport * from './components/layout/theme-toggle'\nexport * from './components/layout/dashboard-layout'\n\n// ─── Data Display ─────────────────────────────────────────────\nexport * from './components/data/data-table'\nexport * from './components/data/empty-state'\nexport * from './components/data/pagination'\nexport * from './components/data/stats'\nexport * from './components/data/plan-badge'\nexport * from './components/data/storage-bar'\n\n// ─── Media ────────────────────────────────────────────────────\nexport * from './components/media'\n\n// ─── Form ─────────────────────────────────────────────────────\nexport * from './components/form/form-field'\nexport * from './components/form/form-layout'\nexport * from './components/form/form-section'\nexport * from './components/form/local-input'\nexport * from './components/form/responsive-size-device-icon'\nexport * from './components/form/responsive-size-field'\nexport type { DeviceKey } from './components/form/responsive-types'\nexport { DEVICES, DEVICE_ICONS } from './components/form/responsive-types'\n\n// ─── Feedback ─────────────────────────────────────────────────\nexport * from './components/feedback/alert'\nexport * from './components/feedback/confirm-dialog'\nexport * from './components/feedback/loading-spinner'\n\n// ─── Content ──────────────────────────────────────────────────\nexport { PostStatusBadge } from './components/content/post-status-badge'\nexport type { PostStatus, PostStatusBadgeProps } from './components/content/post-status-badge'\nexport { PostListTable } from './components/content/post-list-table'\nexport type { PostListItem, PostListTableProps } from './components/content/post-list-table'\nexport { PostFiltersBar } from './components/content/post-filters-bar'\nexport type { PostFiltersBarProps } from './components/content/post-filters-bar'\nexport { PostEditorShell } from './components/content/post-editor-shell'\nexport type { PostEditorShellProps } from './components/content/post-editor-shell'\nexport { SlugInput } from './components/content/slug-input'\nexport type { SlugInputProps } from './components/content/slug-input'\nexport { PostSidebarSection } from './components/content/post-sidebar-section'\nexport type { PostSidebarSectionProps } from './components/content/post-sidebar-section'\n\n// ─── UI Inputs ────────────────────────────────────────────────\nexport { HslColorInput } from './components/ui/hsl-color-input'\nexport { ColorPicker, ColorPickerSelection, ColorPickerHue, ColorPickerAlpha, ColorPickerHexOutput, ColorPickerEyeDropper, ColorPickerOutput, ColorPickerFormat, useColorPicker } from './components/ui/color-picker'\n\n// ─── Editors (v0.7+) ──────────────────────────────────────────\nexport { TiptapEditor } from './components/editors/tiptap-editor'\n\n// // Coming soon: TiptapEditor, MarkdownEditor, CodeEditor\n// See: src/components/editors/README.md\n\n// ─── CMS Category (v1.0+) ────────────────────────────────────\nexport * from './components/cms'\n// See: src/components/cms/README.md\n\n// ─── E-commerce Category (v1.0+) ──────────────────────────────\n// Coming soon: ProductCard, ProductGallery, PricingTable, ReviewDisplay, CartWidget\n// See: src/components/ecommerce/README.md\n\n// ─── Hooks ────────────────────────────────────────────────────\nexport * from './hooks'\n\n// ─── Utils ────────────────────────────────────────────────────\nexport * from './lib/utils'\n\n// ─── Auth Components ──────────────────────────────────────────\nexport * from './components/auth'\n\n// ─── Skeleton ─────────────────────────────────────────────────\nexport { Skeleton } from './components/Skeleton'\n\n// ─── Theme (next-themes re-export) ────────────────────────────\nexport { ThemeProvider, useTheme } from 'next-themes'\n\n// Setup (v1.3+) - Zero-config providers + hooks for Next.js + NextAuth + next-intl + SWR\nexport * from './setup/providers'\nexport * from './setup/hooks'\nexport * from './setup/lib'\r\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SessionProvider } from 'next-auth/react'\n\ninterface AuthProviderProps {\n children: ReactNode\n session?: any\n}\n\n/**\n * AuthProvider - Wraps your app with NextAuth SessionProvider\n * \n * Usage:\n * ```tsx\n * import { AuthProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <AuthProvider session={session}>\n * <App />\n * </AuthProvider>\n * ```\n */\nexport function AuthProvider({ children, session }: AuthProviderProps) {\n return (\n <SessionProvider session={session}>\n {children}\n </SessionProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SWRConfig } from 'swr'\n\nconst fetchFetcher = (url: string) => fetch(url).then(r => r.json())\n\nconst DEFAULT_SWR_CONFIG = {\n revalidateOnFocus: false,\n revalidateOnReconnect: true,\n dedupingInterval: 60000,\n focusThrottleInterval: 300000,\n}\n\ninterface SWRProviderProps {\n children: ReactNode\n /** Custom fetcher (e.g. axios). Default: fetch */\n fetcher?: (url: string) => Promise<any>\n /** Override any SWR config */\n config?: Record<string, any>\n}\n\n/**\n * SWRProvider - Global SWR config with optional axios support\n * \n * Default (fetch):\n * ```tsx\n * <SWRProvider>{children}</SWRProvider>\n * ```\n * \n * With axios:\n * ```tsx\n * import axios from 'axios'\n * const axiosFetcher = (url: string) => axios.get(url).then(res => res.data)\n * <SWRProvider fetcher={axiosFetcher}>{children}</SWRProvider>\n * ```\n * \n * Custom config:\n * ```tsx\n * <SWRProvider config={{ dedupingInterval: 30000 }}>{children}</SWRProvider>\n * ```\n */\nexport function SWRProvider({ children, fetcher, config }: SWRProviderProps) {\n return (\n <SWRConfig value={{\n fetcher: fetcher ?? fetchFetcher,\n ...DEFAULT_SWR_CONFIG,\n ...config,\n }}>\n {children}\n </SWRConfig>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { AuthProvider } from './auth-provider'\nimport { SWRProvider } from './swr-provider'\n\ninterface RootProviderProps {\n children: ReactNode\n session?: any\n}\n\n/**\n * RootProvider - Single provider that combines Auth + SWR\n * \n * I18n setup is handled by next-intl directly in your project\n * \n * Usage in layout.tsx:\n * ```tsx\n * import { RootProvider } from '@webdevarif/dashui/setup'\n * import { getMessages } from 'next-intl/server'\n * \n * export default async function RootLayout({ \n * children, \n * params: { locale } \n * }: {\n * children: React.ReactNode\n * params: { locale: string }\n * }) {\n * const session = await auth()\n * const messages = await getMessages()\n * \n * return (\n * <html lang={locale}>\n * <body>\n * <RootProvider session={session}>\n * {children}\n * </RootProvider>\n * </body>\n * </html>\n * )\n * }\n * ```\n */\nexport function RootProvider({\n children,\n session,\n}: RootProviderProps) {\n return (\n <AuthProvider session={session}>\n <SWRProvider>\n {children}\n </SWRProvider>\n </AuthProvider>\n )\n}\n"],"mappings":"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","names":["cva","jsx","cva","React","jsx","React","jsx","React","jsx","React","Check","jsx","jsxs","Check","React","jsx","React","jsx","Label","React","jsx","React","Check","jsx","jsxs","Check","React","jsx","Separator","jsx","React","jsx","React","jsx","React","jsx","React","jsx","jsx","jsxs","React","ChevronDown","jsx","jsxs","Icon","ChevronDown","jsx","jsxs","React","ChevronRight","jsx","jsxs","ChevronRight","jsx","jsxs","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","Icon","React","ChevronRight","jsx","jsxs","ChevronRight","jsx","jsxs","Icon","jsx","jsx","jsxs","useState","useRef","jsx","jsxs","X","jsx","jsxs","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","Label","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","jsx","useState","jsx","jsxs","jsx","jsxs","useState","useState","jsx","jsxs","useState","X","jsx","jsxs","Icon","X","jsx","sizeMap","jsx","jsxs","jsx","jsxs","React","jsx","Skeleton","jsx","jsxs","Skeleton","jsx","jsxs","IconPlus","jsx","jsxs","IconMoreHorizontal","jsx","jsxs","React","jsx","jsxs","useState","useRef","useEffect","useCallback","Color","Popover","useEffect","useMemo","useRef","useState","jsx","jsxs","useState","useRef","useEffect","useMemo","jsx","jsxs","Color","useEffect","useState","useRef","useCallback","jsx","jsxs","editor","useState","useCallback","useRef","jsx","jsxs","useState","jsx","jsxs","useState","useState","jsx","jsxs","useState","Label","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","useTheme","jsx","jsx","jsx"]}
1
+ {"version":3,"sources":["../src/components/primitives/button.tsx","../src/lib/utils.ts","../src/components/primitives/badge.tsx","../src/components/primitives/card.tsx","../src/components/primitives/checkbox.tsx","../src/components/primitives/dialog.tsx","../src/components/primitives/dropdown-menu.tsx","../src/components/primitives/input.tsx","../src/components/primitives/label.tsx","../src/components/primitives/popover.tsx","../src/components/primitives/select.tsx","../src/components/primitives/separator.tsx","../src/components/primitives/skeleton.tsx","../src/components/primitives/switch.tsx","../src/components/primitives/tabs.tsx","../src/components/primitives/textarea.tsx","../src/components/primitives/tooltip.tsx","../src/components/layout/app-shell.tsx","../src/components/layout/sidebar.tsx","../src/components/layout/top-bar.tsx","../src/components/layout/page.tsx","../src/components/layout/page-section.tsx","../src/components/layout/search-bar.tsx","../src/components/layout/notification-bell.tsx","../src/components/layout/theme-toggle.tsx","../src/components/layout/dashboard-layout.tsx","../src/components/data/data-table.tsx","../src/components/data/empty-state.tsx","../src/components/data/pagination.tsx","../src/components/data/stats.tsx","../src/components/data/plan-badge.tsx","../src/components/data/storage-bar.tsx","../src/components/media/upload-zone.tsx","../src/components/media/upload-progress-panel.tsx","../src/components/media/image-picker-field.tsx","../src/components/media/media-card.tsx","../src/components/form/form-field.tsx","../src/components/form/form-layout.tsx","../src/components/form/form-section.tsx","../src/components/form/local-input.tsx","../src/components/form/responsive-size-device-icon.tsx","../src/components/form/responsive-types.tsx","../src/components/form/responsive-size-field.tsx","../src/components/feedback/alert.tsx","../src/components/feedback/loading-spinner.tsx","../src/components/feedback/confirm-dialog.tsx","../src/components/content/post-status-badge.tsx","../src/components/content/post-list-table.tsx","../src/components/Skeleton.tsx","../src/components/content/post-filters-bar.tsx","../src/components/content/post-editor-shell.tsx","../src/components/content/slug-input.tsx","../src/components/content/post-sidebar-section.tsx","../src/components/ui/hsl-color-input.tsx","../src/components/ui/color-picker.tsx","../src/components/editors/tiptap-editor.tsx","../src/components/cms/theme-builder.tsx","../src/components/cms/color-schema-panel.tsx","../src/components/cms/typography-panel.tsx","../src/setup/hooks/use-fetch.ts","../src/setup/hooks/use-auth.ts","../src/components/auth/AuthShell.tsx","../src/components/auth/AuthCard.tsx","../src/components/auth/AuthLogo.tsx","../src/components/auth/AuthHeader.tsx","../src/components/auth/AuthField.tsx","../src/components/auth/AuthButton.tsx","../src/components/auth/AuthDivider.tsx","../src/components/auth/AuthFootnote.tsx","../src/index.ts"],"sourcesContent":["import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg 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 {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"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-lg px-3\",\n lg: \"h-11 rounded-lg 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\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\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 success:\n \"border-transparent bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100\",\n warning:\n \"border-transparent bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100\",\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\";\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","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogClose = DialogPrimitive.Close;\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\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 className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close 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 <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import * 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;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\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 =\n 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 =\n 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","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n error?: boolean;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, error, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-lg border border-input bg-background px-3 py-2 text-sm ring-offset-background\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n error && \"border-destructive focus-visible:ring-destructive\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cn } from \"../../lib/utils\";\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"block text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className\n )}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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 </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Select = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-lg border border-input bg-background px-3 py-2 text-sm\",\n \"ring-offset-background placeholder:text-muted-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"[&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50 shrink-0\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n style={{ background: '#ffffff', border: '1px solid #e5e7eb', borderRadius: 10, boxShadow: '0 8px 32px rgba(0,0,0,0.12)', zIndex: 9999, overflow: 'hidden' }}\n className={cn(\n \"relative max-h-96 min-w-[8rem] overflow-hidden\",\n \"rounded-lg border border-border bg-white text-foreground shadow-lg\",\n \"dark:bg-zinc-900 dark:border-zinc-700\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-xs font-semibold text-muted-foreground\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center\",\n \"rounded-md py-2 pl-9 pr-3 text-sm outline-none\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n {/* Checkmark — left aligned */}\n <span className=\"absolute left-2.5 flex h-4 w-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-3.5 w-3.5 text-primary\" strokeWidth={2.5} />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select, SelectGroup, SelectValue, SelectTrigger,\n SelectContent, SelectLabel, SelectItem,\n SelectSeparator, SelectScrollUpButton, SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../../lib/utils\";\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import { cn } from \"../../lib/utils\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-[24px] w-[44px] shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../../lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean;\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, error, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background 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 error && \"border-destructive focus-visible:ring-destructive\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface AppShellProps {\n sidebar: React.ReactNode;\n children: React.ReactNode;\n collapsed?: boolean;\n}\n\nexport function AppShell({ sidebar, children, collapsed }: AppShellProps) {\n return (\n <div className=\"flex h-screen overflow-hidden bg-background\">\n <aside\n className={cn(\n \"hidden border-r bg-card transition-all duration-300 md:block\",\n collapsed\n ? \"w-[var(--sidebar-collapsed-width)]\"\n : \"w-[var(--sidebar-width)]\"\n )}\n >\n {sidebar}\n </aside>\n <main className=\"flex flex-1 flex-col overflow-hidden\">{children}</main>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { ChevronDown, ChevronsLeft, ChevronsRight } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SidebarItem {\n label: string;\n href: string;\n icon?: React.ComponentType<{ className?: string }>;\n badge?: string | number;\n children?: SidebarItem[];\n active?: boolean;\n}\n\nexport interface SidebarProps {\n logo?: React.ReactNode;\n items: SidebarItem[];\n footer?: React.ReactNode;\n collapsed?: boolean;\n onCollapse?: (collapsed: boolean) => void;\n}\n\nfunction SidebarItemComponent({\n item,\n collapsed,\n depth = 0,\n}: {\n item: SidebarItem;\n collapsed?: boolean;\n depth?: number;\n}) {\n const [open, setOpen] = React.useState(\n item.active || item.children?.some((c) => c.active) || false\n );\n const Icon = item.icon;\n const hasChildren = item.children && item.children.length > 0;\n\n if (hasChildren) {\n return (\n <div>\n <button\n onClick={() => setOpen(!open)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md px-3 py-2 text-sm font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n item.active && \"bg-accent text-accent-foreground\",\n depth > 0 && \"pl-9\"\n )}\n >\n {Icon && <Icon className=\"h-4 w-4 shrink-0\" />}\n {!collapsed && (\n <>\n <span className=\"flex-1 text-left\">{item.label}</span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform\",\n open && \"rotate-180\"\n )}\n />\n </>\n )}\n </button>\n {open && !collapsed && (\n <div className=\"mt-1 space-y-1\">\n {item.children!.map((child) => (\n <SidebarItemComponent\n key={child.href}\n item={child}\n collapsed={collapsed}\n depth={depth + 1}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n\n return (\n <a\n href={item.href}\n className={cn(\n \"flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n item.active && \"bg-accent text-accent-foreground\",\n depth > 0 && \"pl-9\"\n )}\n >\n {Icon && <Icon className=\"h-4 w-4 shrink-0\" />}\n {!collapsed && (\n <>\n <span className=\"flex-1\">{item.label}</span>\n {item.badge !== undefined && (\n <span className=\"ml-auto rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary\">\n {item.badge}\n </span>\n )}\n </>\n )}\n </a>\n );\n}\n\nexport function Sidebar({\n logo,\n items,\n footer,\n collapsed,\n onCollapse,\n}: SidebarProps) {\n return (\n <div className=\"flex h-full flex-col\">\n {logo && (\n <div className=\"flex h-14 items-center border-b px-4\">{logo}</div>\n )}\n <nav className=\"flex-1 space-y-1 overflow-y-auto p-3\">\n {items.map((item) => (\n <SidebarItemComponent\n key={item.href}\n item={item}\n collapsed={collapsed}\n />\n ))}\n </nav>\n <div className=\"border-t p-3\">\n {footer}\n {onCollapse && (\n <button\n onClick={() => onCollapse(!collapsed)}\n className=\"flex w-full items-center justify-center rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"\n >\n {collapsed ? (\n <ChevronsRight className=\"h-4 w-4\" />\n ) : (\n <ChevronsLeft className=\"h-4 w-4\" />\n )}\n </button>\n )}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Menu } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface TopBarProps {\n storeName?: string;\n user?: { name: string; email: string; avatar?: string };\n onMenuToggle?: () => void;\n actions?: React.ReactNode;\n className?: string;\n}\n\nexport function TopBar({\n storeName,\n user,\n onMenuToggle,\n actions,\n className,\n}: TopBarProps) {\n return (\n <header\n className={cn(\n \"flex h-14 items-center gap-4 border-b bg-card px-4 lg:px-6\",\n className\n )}\n >\n {onMenuToggle && (\n <button\n onClick={onMenuToggle}\n className=\"rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground md:hidden\"\n >\n <Menu className=\"h-5 w-5\" />\n <span className=\"sr-only\">Toggle menu</span>\n </button>\n )}\n\n {storeName && (\n <div className=\"font-semibold text-foreground\">{storeName}</div>\n )}\n\n <div className=\"flex flex-1 items-center justify-end gap-4\">\n {actions}\n\n {user && (\n <div className=\"flex items-center gap-3\">\n <div className=\"hidden text-right text-sm md:block\">\n <div className=\"font-medium\">{user.name}</div>\n <div className=\"text-muted-foreground text-xs\">{user.email}</div>\n </div>\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-primary text-xs font-medium text-primary-foreground\">\n {user.avatar ? (\n <img\n src={user.avatar}\n alt={user.name}\n className=\"h-full w-full rounded-full object-cover\"\n />\n ) : (\n user.name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n )}\n </div>\n </div>\n )}\n </div>\n </header>\n );\n}\n","import * as React from \"react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface Breadcrumb {\n label: string;\n href?: string;\n}\n\nexport interface PageProps {\n title: string;\n subtitle?: string;\n actions?: React.ReactNode;\n breadcrumbs?: Breadcrumb[];\n children: React.ReactNode;\n fullWidth?: boolean;\n}\n\nexport function Page({\n title,\n subtitle,\n actions,\n breadcrumbs,\n children,\n fullWidth,\n}: PageProps) {\n return (\n <div className=\"flex-1 overflow-y-auto\">\n <div\n className={cn(\n \"mx-auto space-y-6 p-6\",\n !fullWidth && \"max-w-6xl\"\n )}\n >\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav className=\"flex items-center space-x-1 text-sm text-muted-foreground\">\n {breadcrumbs.map((crumb, index) => (\n <React.Fragment key={index}>\n {index > 0 && <ChevronRight className=\"h-4 w-4\" />}\n {crumb.href ? (\n <a\n href={crumb.href}\n className=\"hover:text-foreground transition-colors\"\n >\n {crumb.label}\n </a>\n ) : (\n <span className=\"text-foreground\">{crumb.label}</span>\n )}\n </React.Fragment>\n ))}\n </nav>\n )}\n\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">{title}</h1>\n {subtitle && (\n <p className=\"text-muted-foreground mt-1\">{subtitle}</p>\n )}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n\n {children}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PageSectionProps {\n title?: string;\n description?: string;\n children: React.ReactNode;\n actions?: React.ReactNode;\n className?: string;\n}\n\nexport function PageSection({\n title,\n description,\n children,\n actions,\n className,\n}: PageSectionProps) {\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n >\n {(title || description || actions) && (\n <div className=\"flex items-start justify-between border-b p-6\">\n <div>\n {title && <h2 className=\"text-lg font-semibold\">{title}</h2>}\n {description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )}\n <div className=\"p-6\">{children}</div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SearchBarProps {\n value?: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n shortcut?: string;\n className?: string;\n width?: string;\n}\n\nexport function SearchBar({\n value,\n onChange,\n placeholder = \"Search…\",\n shortcut,\n className,\n width = \"max-w-xs\",\n}: SearchBarProps) {\n const shortcuts = shortcut ? shortcut.split(\" \") : [];\n\n return (\n <div className={cn(\"relative flex items-center\", width, className)}>\n {/* Search icon */}\n <svg\n className=\"pointer-events-none absolute left-2.5 h-3.5 w-3.5 text-muted-foreground\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n\n <input\n type=\"search\"\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n placeholder={placeholder}\n className={cn(\n \"h-8 w-full rounded-lg border border-input bg-muted/50 pl-8 text-sm outline-none transition-colors\",\n \"placeholder:text-muted-foreground\",\n \"focus:border-primary focus:ring-1 focus:ring-primary\",\n shortcut ? \"pr-16\" : \"pr-3\"\n )}\n />\n\n {shortcuts.length > 0 && (\n <div className=\"pointer-events-none absolute right-2 flex items-center gap-0.5\">\n {shortcuts.map((key, i) => (\n <kbd\n key={i}\n className=\"inline-flex h-5 items-center rounded border border-border bg-background px-1 font-mono text-[10px] text-muted-foreground\"\n >\n {key}\n </kbd>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface NotificationBellProps {\n count?: number;\n onClick?: () => void;\n className?: string;\n}\n\nexport function NotificationBell({\n count = 0,\n onClick,\n className,\n}: NotificationBellProps) {\n return (\n <button\n onClick={onClick}\n className={cn(\n \"relative flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n className\n )}\n aria-label={count > 0 ? `${count} unread notifications` : \"Notifications\"}\n >\n {/* Bell icon */}\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\" />\n <path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\" />\n </svg>\n\n {count > 0 && (\n <span className=\"absolute right-1.5 top-1.5 h-2 w-2 rounded-full bg-green-500\" />\n )}\n </button>\n );\n}\n","'use client';\n\nimport * as React from \"react\";\nimport { useTheme } from \"next-themes\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ThemeToggleProps {\n className?: string;\n /** External controlled theme value. When provided, next-themes is not used. */\n theme?: string;\n /** External toggle handler. When provided, next-themes setTheme is not called. */\n onToggle?: () => void;\n}\n\nexport function ThemeToggle({ className, theme: externalTheme, onToggle }: ThemeToggleProps) {\n // Always call hook (Rules of Hooks) — values only used when no external props\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return (\n <button\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground\",\n className\n )}\n aria-label=\"Toggle theme\"\n >\n <span className=\"h-4 w-4\" />\n </button>\n );\n }\n\n // External props take precedence over next-themes\n const isDark = externalTheme !== undefined\n ? externalTheme === \"dark\"\n : resolvedTheme === \"dark\";\n\n const handleToggle = onToggle ?? (() => setTheme(isDark ? \"light\" : \"dark\"));\n\n return (\n <button\n onClick={handleToggle}\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n className\n )}\n aria-label={isDark ? \"Switch to light mode\" : \"Switch to dark mode\"}\n >\n {isDark ? (\n /* Sun icon */\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\" />\n </svg>\n ) : (\n /* Moon icon */\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />\n </svg>\n )}\n </button>\n );\n}\n","'use client';\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SearchBar } from \"./search-bar\";\nimport { NotificationBell } from \"./notification-bell\";\nimport { ThemeToggle } from \"./theme-toggle\";\n\nexport interface NavItem {\n href: string;\n label: string;\n icon?: React.ReactNode;\n badge?: string | number;\n children?: NavItem[];\n}\n\nexport interface DashboardLayoutProps {\n // Branding\n logo?: React.ReactNode;\n appName?: string;\n // Navigation\n navItems: NavItem[];\n bottomNavItems?: NavItem[];\n activeHref?: string;\n onNavigate?: (href: string) => void;\n // Topbar\n searchPlaceholder?: string;\n searchShortcut?: string;\n notificationCount?: number;\n onNotificationClick?: () => void;\n // User\n user?: { name: string; email: string; avatar?: string };\n onSignOut?: () => void;\n // Layout\n children: React.ReactNode;\n defaultCollapsed?: boolean;\n footerContent?: React.ReactNode;\n}\n\nfunction isActive(itemHref: string, activeHref?: string): boolean {\n if (!activeHref) return false;\n return activeHref === itemHref || activeHref.startsWith(itemHref + \"/\");\n}\n\nfunction NavItemRow({\n item,\n collapsed,\n activeHref,\n onNavigate,\n depth = 0,\n}: {\n item: NavItem;\n collapsed: boolean;\n activeHref?: string;\n onNavigate?: (href: string) => void;\n depth?: number;\n}) {\n const active = isActive(item.href, activeHref);\n const hasChildren = item.children && item.children.length > 0;\n const childActive = hasChildren && item.children!.some((c) => isActive(c.href, activeHref));\n const [open, setOpen] = React.useState(active || childActive);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (onNavigate) {\n e.preventDefault();\n onNavigate(item.href);\n }\n if (hasChildren) {\n e.preventDefault();\n setOpen((v) => !v);\n }\n };\n\n const rowClasses = cn(\n \"flex w-full items-center gap-2.5 rounded-md px-3 py-2 text-sm font-medium transition-colors\",\n active\n ? \"bg-sidebar-accent text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground\",\n depth > 0 && \"py-1.5\"\n );\n\n return (\n <div>\n <a\n href={item.href}\n onClick={hasChildren ? (e) => { e.preventDefault(); setOpen((v) => !v); } : onNavigate ? handleClick : undefined}\n className={rowClasses}\n title={collapsed ? item.label : undefined}\n >\n {item.icon && (\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">\n {item.icon}\n </span>\n )}\n {!collapsed && (\n <>\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.badge !== undefined && !hasChildren && (\n <span className=\"rounded-full bg-primary/15 px-2 py-0.5 text-[11px] font-semibold text-primary\">\n {item.badge}\n </span>\n )}\n {hasChildren && (\n <svg\n className={cn(\"h-3.5 w-3.5 shrink-0 transition-transform text-sidebar-foreground/50\", open && \"rotate-180\")}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n )}\n </>\n )}\n </a>\n\n {hasChildren && open && !collapsed && (\n <div className=\"mt-0.5 ml-[22px] space-y-0.5 border-l border-sidebar-border/60 pl-3\">\n {item.children!.map((child) => (\n <NavItemRow\n key={child.href}\n item={child}\n collapsed={collapsed}\n activeHref={activeHref}\n onNavigate={onNavigate}\n depth={depth + 1}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction UserAvatar({ user, size = \"sm\" }: { user: { name: string; email: string; avatar?: string }; size?: \"sm\" | \"md\" }) {\n const initials = user.name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n\n const sizeClass = size === \"md\" ? \"h-8 w-8 text-xs\" : \"h-7 w-7 text-[10px]\";\n\n return (\n <div className={cn(\"flex shrink-0 items-center justify-center rounded-full bg-primary font-semibold text-primary-foreground overflow-hidden\", sizeClass)}>\n {user.avatar ? (\n <img src={user.avatar} alt={user.name} className=\"h-full w-full object-cover\" />\n ) : (\n initials\n )}\n </div>\n );\n}\n\nexport function DashboardLayout({\n logo,\n appName = \"Dashboard\",\n navItems,\n bottomNavItems,\n activeHref,\n onNavigate,\n searchPlaceholder,\n searchShortcut,\n notificationCount,\n onNotificationClick,\n user,\n onSignOut,\n children,\n defaultCollapsed = false,\n footerContent,\n}: DashboardLayoutProps) {\n const [collapsed, setCollapsed] = React.useState(defaultCollapsed);\n const [userMenuOpen, setUserMenuOpen] = React.useState(false);\n const [searchValue, setSearchValue] = React.useState(\"\");\n const userMenuRef = React.useRef<HTMLDivElement>(null);\n\n // Close user menu on outside click\n React.useEffect(() => {\n function handler(e: MouseEvent) {\n if (userMenuRef.current && !userMenuRef.current.contains(e.target as Node)) {\n setUserMenuOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, []);\n\n const ToggleIcon = () => (\n <svg\n className=\"h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n );\n\n return (\n <div className=\"flex h-screen overflow-hidden bg-background\">\n {/* ── Sidebar ── */}\n <aside\n className={cn(\n \"flex shrink-0 flex-col border-r bg-sidebar transition-all duration-200 ease-in-out\",\n collapsed ? \"w-16\" : \"w-80\"\n )}\n >\n {/* Logo area */}\n <div className=\"flex h-14 shrink-0 items-center border-b border-sidebar-border px-4\">\n {collapsed ? (\n <div className=\"flex h-8 w-8 items-center justify-center rounded-md bg-primary/10\">\n <span className=\"text-sm font-bold text-primary\">\n {appName?.[0] ?? \"D\"}\n </span>\n </div>\n ) : (\n logo ?? (\n <span className=\"text-base font-semibold text-sidebar-foreground\">\n {appName}\n </span>\n )\n )}\n </div>\n\n {/* Nav */}\n <nav className=\"flex-1 space-y-0.5 overflow-y-auto p-2\">\n {navItems.map((item) => (\n <NavItemRow\n key={item.href}\n item={item}\n collapsed={collapsed}\n activeHref={activeHref}\n onNavigate={onNavigate}\n />\n ))}\n </nav>\n\n {/* Bottom nav + footer + user */}\n <div className=\"border-t border-sidebar-border p-2\">\n {bottomNavItems && bottomNavItems.length > 0 && (\n <div className=\"mb-2 space-y-0.5\">\n {bottomNavItems.map((item) => (\n <NavItemRow\n key={item.href}\n item={item}\n collapsed={collapsed}\n activeHref={activeHref}\n onNavigate={onNavigate}\n />\n ))}\n </div>\n )}\n\n {footerContent && !collapsed && (\n <div className=\"mb-2\">{footerContent}</div>\n )}\n\n {/* User row */}\n {user && (\n <div className=\"relative\" ref={userMenuRef}>\n <button\n onClick={() => setUserMenuOpen((v) => !v)}\n className=\"flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-sm transition-colors hover:bg-sidebar-accent/60\"\n >\n <UserAvatar user={user} />\n {!collapsed && (\n <div className=\"flex-1 overflow-hidden text-left\">\n <div className=\"truncate text-xs font-medium text-sidebar-foreground\">{user.name}</div>\n <div className=\"truncate text-[11px] text-sidebar-foreground/60\">{user.email}</div>\n </div>\n )}\n </button>\n\n {userMenuOpen && (\n <div className={cn(\n \"absolute bottom-full mb-1 z-50 min-w-[180px] rounded-md border bg-popover shadow-md\",\n collapsed ? \"left-full ml-2 bottom-0\" : \"left-0\"\n )}>\n <div className=\"px-3 py-2 border-b\">\n <p className=\"text-xs font-medium\">{user.name}</p>\n <p className=\"text-[11px] text-muted-foreground truncate\">{user.email}</p>\n </div>\n {onSignOut && (\n <button\n onClick={() => { setUserMenuOpen(false); onSignOut(); }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-sm text-destructive hover:bg-accent transition-colors\"\n >\n <svg className=\"h-3.5 w-3.5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n <polyline points=\"16 17 21 12 16 7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n Sign out\n </button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </aside>\n\n {/* ── Main column ── */}\n <div className=\"flex flex-1 flex-col overflow-hidden\">\n {/* Topbar */}\n <header className=\"flex h-14 shrink-0 items-center gap-3 border-b bg-background px-4\">\n <button\n onClick={() => setCollapsed((v) => !v)}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"\n aria-label=\"Toggle sidebar\"\n >\n <ToggleIcon />\n </button>\n\n <div className=\"flex flex-1 items-center gap-2\">\n <SearchBar\n value={searchValue}\n onChange={setSearchValue}\n placeholder={searchPlaceholder}\n shortcut={searchShortcut}\n width=\"max-w-sm\"\n />\n </div>\n\n <div className=\"flex items-center gap-1\">\n <ThemeToggle />\n <NotificationBell count={notificationCount} onClick={onNotificationClick} />\n {user && (\n <div className=\"ml-1\">\n <UserAvatar user={user} size=\"md\" />\n </div>\n )}\n </div>\n </header>\n\n {/* Content */}\n <main className=\"flex-1 overflow-y-auto bg-muted/30 p-6\">\n {children}\n </main>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Checkbox } from \"../primitives/checkbox\";\nimport { Skeleton } from \"../primitives/skeleton\";\n\nexport interface Column<T> {\n key: keyof T | string;\n header: string;\n cell?: (row: T) => React.ReactNode;\n sortable?: boolean;\n width?: string;\n}\n\nexport interface DataTableProps<T> {\n columns: Column<T>[];\n data: T[];\n loading?: boolean;\n pagination?: {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n };\n selection?: {\n selected: string[];\n onSelect: (ids: string[]) => void;\n idKey?: keyof T;\n };\n onRowClick?: (row: T) => void;\n emptyState?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n data,\n loading,\n pagination,\n selection,\n onRowClick,\n emptyState,\n actions,\n}: DataTableProps<T>) {\n const idKey = (selection?.idKey ?? \"id\") as string;\n\n const allSelected =\n selection && data.length > 0 && data.every((row) => selection.selected.includes(String(row[idKey])));\n\n const someSelected =\n selection && data.some((row) => selection.selected.includes(String(row[idKey]))) && !allSelected;\n\n function toggleAll() {\n if (!selection) return;\n if (allSelected) {\n selection.onSelect([]);\n } else {\n selection.onSelect(data.map((row) => String(row[idKey])));\n }\n }\n\n function toggleRow(row: T) {\n if (!selection) return;\n const id = String(row[idKey]);\n if (selection.selected.includes(id)) {\n selection.onSelect(selection.selected.filter((s) => s !== id));\n } else {\n selection.onSelect([...selection.selected, id]);\n }\n }\n\n const totalPages = pagination\n ? Math.ceil(pagination.total / pagination.pageSize)\n : 1;\n\n return (\n <div className=\"space-y-4\">\n {selection && selection.selected.length > 0 && actions && (\n <div className=\"flex items-center gap-2 rounded-md border bg-muted/50 p-2\">\n <span className=\"text-sm text-muted-foreground\">\n {selection.selected.length} selected\n </span>\n {actions}\n </div>\n )}\n\n <div className=\"rounded-md border\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n {selection && (\n <th className=\"w-12 px-4 py-3\">\n <Checkbox\n checked={allSelected}\n ref={(el) => {\n if (el) {\n (el as unknown as HTMLInputElement).indeterminate =\n someSelected ?? false;\n }\n }}\n onCheckedChange={toggleAll}\n />\n </th>\n )}\n {columns.map((col) => (\n <th\n key={String(col.key)}\n className=\"px-4 py-3 text-left font-medium text-muted-foreground\"\n style={col.width ? { width: col.width } : undefined}\n >\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading\n ? Array.from({ length: 5 }).map((_, i) => (\n <tr key={i} className=\"border-b\">\n {selection && (\n <td className=\"px-4 py-3\">\n <Skeleton className=\"h-4 w-4\" />\n </td>\n )}\n {columns.map((col) => (\n <td key={String(col.key)} className=\"px-4 py-3\">\n <Skeleton className=\"h-4 w-24\" />\n </td>\n ))}\n </tr>\n ))\n : data.length === 0\n ? (\n <tr>\n <td\n colSpan={columns.length + (selection ? 1 : 0)}\n className=\"py-12 text-center\"\n >\n {emptyState || (\n <p className=\"text-muted-foreground\">No data found</p>\n )}\n </td>\n </tr>\n )\n : data.map((row, idx) => {\n const rowId = String(row[idKey] ?? idx);\n const isSelected = selection?.selected.includes(rowId);\n return (\n <tr\n key={rowId}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50\",\n isSelected && \"bg-muted/50\",\n onRowClick && \"cursor-pointer\"\n )}\n onClick={() => onRowClick?.(row)}\n >\n {selection && (\n <td\n className=\"px-4 py-3\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => toggleRow(row)}\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={String(col.key)} className=\"px-4 py-3\">\n {col.cell\n ? col.cell(row)\n : String(row[col.key as keyof T] ?? \"\")}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n\n {pagination && totalPages > 1 && (\n <div className=\"flex items-center justify-between px-2\">\n <div className=\"text-sm text-muted-foreground\">\n Page {pagination.page} of {totalPages} ({pagination.total} total)\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n className=\"rounded-md border px-3 py-1.5 text-sm disabled:opacity-50\"\n disabled={pagination.page <= 1}\n onClick={() => pagination.onPageChange(pagination.page - 1)}\n >\n Previous\n </button>\n <button\n className=\"rounded-md border px-3 py-1.5 text-sm disabled:opacity-50\"\n disabled={pagination.page >= totalPages}\n onClick={() => pagination.onPageChange(pagination.page + 1)}\n >\n Next\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface EmptyStateProps {\n icon?: React.ComponentType<{ className?: string }>;\n title: string;\n description?: string;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n icon: Icon,\n title,\n description,\n action,\n className,\n}: EmptyStateProps) {\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center py-12 text-center\",\n className\n )}\n >\n {Icon && (\n <div className=\"mb-4 rounded-full bg-muted p-3\">\n <Icon className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n )}\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {description && (\n <p className=\"mt-1 max-w-sm text-sm text-muted-foreground\">\n {description}\n </p>\n )}\n {action && <div className=\"mt-4\">{action}</div>}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n className?: string;\n}\n\nexport function Pagination({\n page,\n totalPages,\n onPageChange,\n className,\n}: PaginationProps) {\n const pages = React.useMemo(() => {\n const items: (number | \"ellipsis\")[] = [];\n if (totalPages <= 7) {\n for (let i = 1; i <= totalPages; i++) items.push(i);\n } else {\n items.push(1);\n if (page > 3) items.push(\"ellipsis\");\n const start = Math.max(2, page - 1);\n const end = Math.min(totalPages - 1, page + 1);\n for (let i = start; i <= end; i++) items.push(i);\n if (page < totalPages - 2) items.push(\"ellipsis\");\n items.push(totalPages);\n }\n return items;\n }, [page, totalPages]);\n\n if (totalPages <= 1) return null;\n\n return (\n <nav className={cn(\"flex items-center gap-1\", className)}>\n <button\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-md border text-sm disabled:opacity-50\"\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n {pages.map((p, i) =>\n p === \"ellipsis\" ? (\n <span key={`e-${i}`} className=\"px-2 text-muted-foreground\">\n ...\n </span>\n ) : (\n <button\n key={p}\n className={cn(\n \"inline-flex h-9 w-9 items-center justify-center rounded-md border text-sm\",\n p === page && \"bg-primary text-primary-foreground\"\n )}\n onClick={() => onPageChange(p)}\n >\n {p}\n </button>\n )\n )}\n <button\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-md border text-sm disabled:opacity-50\"\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </nav>\n );\n}\n","import * as React from \"react\";\nimport { ArrowDown, ArrowUp } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface Stat {\n label: string;\n value: string | number;\n change?: { value: number; type: \"increase\" | \"decrease\" };\n icon?: React.ComponentType<{ className?: string }>;\n}\n\nexport interface StatsProps {\n stats: Stat[];\n columns?: 2 | 3 | 4;\n className?: string;\n}\n\nexport function Stats({ stats, columns = 4, className }: StatsProps) {\n return (\n <div\n className={cn(\n \"grid gap-4\",\n columns === 2 && \"grid-cols-1 sm:grid-cols-2\",\n columns === 3 && \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n columns === 4 && \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\n className\n )}\n >\n {stats.map((stat, index) => {\n const Icon = stat.icon;\n return (\n <div\n key={index}\n className=\"rounded-lg border bg-card p-6 text-card-foreground shadow-sm\"\n >\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-medium text-muted-foreground\">\n {stat.label}\n </p>\n {Icon && <Icon className=\"h-4 w-4 text-muted-foreground\" />}\n </div>\n <div className=\"mt-2 flex items-baseline gap-2\">\n <p className=\"text-2xl font-bold\">{stat.value}</p>\n {stat.change && (\n <span\n className={cn(\n \"inline-flex items-center text-xs font-medium\",\n stat.change.type === \"increase\"\n ? \"text-green-600 dark:text-green-400\"\n : \"text-red-600 dark:text-red-400\"\n )}\n >\n {stat.change.type === \"increase\" ? (\n <ArrowUp className=\"mr-0.5 h-3 w-3\" />\n ) : (\n <ArrowDown className=\"mr-0.5 h-3 w-3\" />\n )}\n {stat.change.value}%\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type PlanId = \"BASIC\" | \"GROW\" | \"ADVANCED\" | string;\n\nexport interface PlanBadgeProps {\n plan: PlanId;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nconst PLAN_STYLES: Record<string, string> = {\n BASIC: \"bg-muted text-muted-foreground\",\n GROW: \"bg-primary text-primary-foreground\",\n ADVANCED: \"bg-zinc-900 text-amber-400 dark:bg-zinc-800\",\n};\n\nexport function PlanBadge({ plan, size = \"md\", className }: PlanBadgeProps) {\n const colorClass = PLAN_STYLES[plan.toUpperCase()] ?? \"bg-muted text-muted-foreground\";\n\n return (\n <span\n className={cn(\n \"inline-flex items-center rounded font-semibold uppercase tracking-wide\",\n colorClass,\n size === \"sm\" ? \"px-1.5 py-0.5 text-[10px]\" : \"px-2 py-1 text-xs\",\n className\n )}\n >\n {plan}\n </span>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface StorageBarProps {\n used: number;\n limit: number | null;\n plan?: string;\n collapsed?: boolean;\n className?: string;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n}\n\nfunction getBarColor(pct: number): string {\n if (pct >= 90) return \"bg-destructive\";\n if (pct >= 70) return \"bg-amber-500\";\n return \"bg-primary\";\n}\n\n// Storage icon\nfunction StorageIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v14c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 12c0 1.66 4.03 3 9 3s9-1.34 9-3\" />\n </svg>\n );\n}\n\nexport function StorageBar({\n used,\n limit,\n plan,\n collapsed = false,\n className,\n}: StorageBarProps) {\n const pct = limit ? Math.min(100, (used / limit) * 100) : 0;\n const barColor = getBarColor(pct);\n\n if (collapsed) {\n return (\n <div className={cn(\"flex justify-center\", className)}>\n <StorageIcon className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n );\n }\n\n return (\n <div className={cn(\"space-y-1.5 px-1\", className)}>\n <div className=\"flex items-center gap-1.5\">\n <StorageIcon className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n {limit === null ? (\n <p className=\"text-[11px] text-muted-foreground\">\n <span className=\"font-medium text-foreground\">{formatBytes(used)}</span>\n {\" · Unlimited\"}\n </p>\n ) : (\n <p className=\"text-[11px] text-muted-foreground\">\n <span className=\"font-medium text-foreground\">{formatBytes(used)}</span>\n {\" / \"}\n {formatBytes(limit)}\n </p>\n )}\n </div>\n\n {limit !== null && (\n <div className=\"h-1 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className={cn(\"h-full rounded-full transition-all duration-300\", barColor)}\n style={{ width: `${pct}%` }}\n />\n </div>\n )}\n\n {plan && (\n <p className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">{plan}</p>\n )}\n </div>\n );\n}\n","'use client'\n\nimport { useState, useRef } from 'react'\nimport { Cloud } from 'lucide-react'\n\nconst CloudUploadIcon = Cloud\n\n/**\n * UploadZone — Drag & drop file input\n *\n * Presentation-only. Calls your callback with selected files.\n * You handle: validation, upload, progress, error handling.\n *\n * Props:\n * - onFiles: (files: File[]) => void — called when user selects/drops files\n * - accept?: string — MIME types (e.g., \"image/*\")\n * - multiple?: boolean\n * - disabled?: boolean\n */\nexport function UploadZone({\n onFiles,\n accept = '*',\n multiple = true,\n disabled = false,\n}: {\n onFiles: (files: File[]) => void\n accept?: string\n multiple?: boolean\n disabled?: boolean\n}) {\n const [dragActive, setDragActive] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleDrag = (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setDragActive(e.type === 'dragenter' || e.type === 'dragover')\n }\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setDragActive(false)\n if (!disabled && e.dataTransfer.files?.length) {\n onFiles(Array.from(e.dataTransfer.files))\n }\n }\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files?.length) {\n onFiles(Array.from(e.target.files))\n }\n }\n\n return (\n <div\n className={`relative rounded-lg border-2 border-dashed p-8 text-center transition-colors ${\n dragActive\n ? 'border-blue-500 bg-blue-50/50'\n : 'border-gray-300 bg-gray-50/50 hover:border-gray-400'\n } ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"hidden\"\n />\n <div className=\"flex flex-col items-center gap-2\">\n <CloudUploadIcon className=\"w-8 h-8 text-gray-400\" />\n <div>\n <p className=\"text-sm font-medium text-gray-700\">\n {dragActive ? 'Drop files here' : 'Drag & drop files, or click to browse'}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">Max file size: 100MB</p>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { CheckCircle, X, Image, File, Video } from 'lucide-react'\n\nconst CheckmarkCircle01Icon = CheckCircle\nconst Cancel01Icon = X\nconst Image01Icon = Image\nconst File01Icon = File\nconst VideoIcon = Video\n\n/**\n * UploadProgressPanel — Display upload progress for multiple files\n *\n * Presentation-only. Shows status, progress, and allows retry/cancel.\n * You handle: actual upload logic.\n *\n * Props:\n * - items: UploadItem[] — files being uploaded\n * - onRetry?: (id: string) => void\n * - onCancel?: (id: string) => void\n * - onCancelAll?: () => void\n */\n\nexport type UploadProgressItem = {\n id: string\n name: string\n mimeType: string\n status: 'pending' | 'uploading' | 'done' | 'failed'\n progress: number // 0-100\n error?: string\n}\n\nfunction getFileIcon(mimeType: string) {\n if (mimeType.startsWith('image/')) return Image01Icon\n if (mimeType.startsWith('video/')) return VideoIcon\n return File01Icon\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`\n}\n\nexport function UploadProgressPanel({\n items,\n onRetry,\n onCancel,\n onCancelAll,\n}: {\n items: UploadProgressItem[]\n onRetry?: (id: string) => void\n onCancel?: (id: string) => void\n onCancelAll?: () => void\n}) {\n if (items.length === 0) return null\n\n const activeCount = items.filter((it) => it.status === 'uploading').length\n const doneCount = items.filter((it) => it.status === 'done').length\n const failedCount = items.filter((it) => it.status === 'failed').length\n const avgProgress = items.length > 0 ? Math.round(items.reduce((s, it) => s + it.progress, 0) / items.length) : 0\n\n return (\n <div className=\"rounded-lg border border-gray-200 bg-white p-4 shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-sm font-semibold text-gray-900\">\n {activeCount > 0 ? `Uploading ${activeCount} file${activeCount > 1 ? 's' : ''}` : 'Upload complete'}\n </h3>\n {onCancelAll && items.some((it) => it.status === 'uploading' || it.status === 'pending') && (\n <button\n onClick={onCancelAll}\n className=\"text-xs text-red-600 hover:text-red-700 font-medium\"\n >\n Cancel all\n </button>\n )}\n </div>\n\n {/* Progress bar */}\n <div className=\"w-full h-2 bg-gray-200 rounded-full overflow-hidden mb-4\">\n <div\n className=\"h-full bg-blue-500 transition-all duration-300\"\n style={{ width: `${avgProgress}%` }}\n />\n </div>\n\n {/* Summary */}\n <p className=\"text-xs text-gray-600 mb-4\">\n {doneCount} done\n {failedCount > 0 && ` · ${failedCount} failed`}\n {activeCount > 0 && ` · ${activeCount} uploading`}\n </p>\n\n {/* Items list */}\n <div className=\"space-y-2 max-h-48 overflow-y-auto\">\n {items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-3 p-2 rounded-md bg-gray-50 hover:bg-gray-100 transition-colors\">\n {/* Icon */}\n <div className=\"shrink-0\">\n {item.status === 'done' && <CheckmarkCircle01Icon className=\"w-4 h-4 text-green-600\" />}\n {item.status === 'failed' && <Cancel01Icon className=\"w-4 h-4 text-red-600\" />}\n {(item.status === 'uploading' || item.status === 'pending') && (\n <div className=\"w-4 h-4 rounded-full border-2 border-blue-300 border-t-blue-600 animate-spin\" />\n )}\n </div>\n\n {/* Name */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs font-medium text-gray-900 truncate\">{item.name}</p>\n {item.error && <p className=\"text-xs text-red-600\">{item.error}</p>}\n {item.status === 'uploading' && <p className=\"text-xs text-gray-500\">{item.progress}%</p>}\n </div>\n\n {/* Actions */}\n {item.status === 'failed' && onRetry && (\n <button\n onClick={() => onRetry(item.id)}\n className=\"text-xs text-blue-600 hover:text-blue-700 font-medium shrink-0\"\n >\n Retry\n </button>\n )}\n {(item.status === 'uploading' || item.status === 'pending') && onCancel && (\n <button\n onClick={() => onCancel(item.id)}\n className=\"text-xs text-gray-600 hover:text-gray-700 shrink-0\"\n >\n <Cancel01Icon className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ImagePickerFieldProps {\n value?: string;\n filename?: string;\n onPickerOpen?: () => void;\n onRemove?: () => void;\n size?: \"sm\" | \"md\" | \"lg\";\n emptyLabel?: string;\n className?: string;\n}\n\nconst sizeMap = {\n sm: { box: \"h-12 w-12\", icon: \"h-4 w-4\", text: \"text-[9px]\" },\n md: { box: \"h-20 w-20\", icon: \"h-5 w-5\", text: \"text-[10px]\" },\n lg: { box: \"h-24 w-24\", icon: \"h-6 w-6\", text: \"text-xs\" },\n};\n\nexport function ImagePickerField({\n value,\n filename,\n onPickerOpen,\n onRemove,\n size = \"md\",\n emptyLabel = \"Click to select\",\n className,\n}: ImagePickerFieldProps) {\n const sz = sizeMap[size];\n\n return (\n <div className={cn(\"relative inline-flex shrink-0\", className)}>\n <button\n type=\"button\"\n onClick={onPickerOpen}\n className={cn(\n \"group flex items-center justify-center rounded-lg border-2 border-dashed transition-all duration-150\",\n sz.box,\n value\n ? \"border-border overflow-hidden\"\n : \"border-border hover:border-[color:var(--primary)] hover:bg-primary/5\"\n )}\n >\n {value ? (\n <img\n src={value}\n alt={filename ?? \"Selected image\"}\n className=\"h-full w-full rounded-md object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center gap-1\">\n {/* Image icon */}\n <svg\n className={cn(sz.icon, \"text-muted-foreground transition-colors group-hover:text-primary\")}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </svg>\n {size !== \"sm\" && (\n <span className={cn(sz.text, \"text-muted-foreground text-center leading-tight transition-colors group-hover:text-primary\")}>\n {emptyLabel}\n </span>\n )}\n </div>\n )}\n </button>\n\n {/* Remove button */}\n {value && onRemove && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n className=\"absolute -right-1.5 -top-1.5 flex h-5 w-5 items-center justify-center rounded-full bg-destructive text-destructive-foreground shadow-sm transition-opacity hover:opacity-90\"\n aria-label=\"Remove image\"\n >\n <svg className=\"h-2.5 w-2.5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface MediaCardFile {\n id: string;\n name: string;\n url: string;\n mimeType: string;\n size: number;\n width?: number | null;\n height?: number | null;\n}\n\nexport interface MediaCardProps {\n file: MediaCardFile;\n selected?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nfunction stripExtension(name: string): string {\n return name.replace(/\\.[^/.]+$/, \"\");\n}\n\nfunction getFileEmoji(mimeType: string): string {\n if (mimeType.startsWith(\"video/\")) return \"🎬\";\n if (mimeType.startsWith(\"audio/\")) return \"🎵\";\n if (mimeType === \"application/pdf\") return \"📄\";\n return \"📎\";\n}\n\nexport function MediaCard({ file, selected = false, onClick, className }: MediaCardProps) {\n const isImage = file.mimeType.startsWith(\"image/\");\n const displayName = stripExtension(file.name);\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") onClick?.(); }}\n className={cn(\n \"group relative aspect-square cursor-pointer rounded-xl overflow-hidden border-2 transition-all duration-150\",\n selected\n ? \"border-[color:var(--primary)] shadow-[0_0_0_2px_rgba(40,127,113,0.2)]\"\n : \"border-transparent hover:border-[color:var(--primary)]/40\",\n className\n )}\n >\n {isImage ? (\n <img\n src={file.url}\n alt={file.name}\n className=\"h-full w-full object-cover transition-transform duration-150 group-hover:scale-[1.03]\"\n loading=\"lazy\"\n />\n ) : (\n <div className=\"flex h-full w-full items-center justify-center bg-muted text-4xl\">\n {getFileEmoji(file.mimeType)}\n </div>\n )}\n\n {/* Hover gradient overlay with filename */}\n <div className=\"absolute inset-0 flex items-end bg-gradient-to-t from-black/60 via-transparent to-transparent opacity-0 transition-opacity duration-150 group-hover:opacity-100\">\n <p className=\"truncate px-2 pb-2 text-[11px] font-medium text-white\">\n {displayName}\n </p>\n </div>\n\n {/* Selected checkmark */}\n {selected && (\n <div className=\"absolute right-1.5 top-1.5 flex h-5 w-5 items-center justify-center rounded-full bg-primary shadow\">\n <svg\n className=\"h-3 w-3 text-white\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Label } from \"../primitives/label\";\n\nexport interface FormFieldProps {\n label: string;\n error?: string;\n hint?: string;\n required?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormField({\n label,\n error,\n hint,\n required,\n children,\n className,\n}: FormFieldProps) {\n return (\n <div className={cn(\"space-y-2\", className)}>\n <Label>\n {label}\n {required && <span className=\"ml-1 text-destructive\">*</span>}\n </Label>\n {children}\n {hint && !error && (\n <p className=\"text-sm text-muted-foreground\">{hint}</p>\n )}\n {error && <p className=\"text-sm text-destructive\">{error}</p>}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface FormLayoutProps {\n title?: string;\n description?: string;\n children: React.ReactNode;\n actions?: React.ReactNode;\n className?: string;\n}\n\nexport function FormLayout({\n title,\n description,\n children,\n actions,\n className,\n}: FormLayoutProps) {\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n >\n {(title || description) && (\n <div className=\"border-b p-6\">\n {title && <h3 className=\"text-lg font-semibold\">{title}</h3>}\n {description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n <div className=\"space-y-6 p-6\">{children}</div>\n {actions && (\n <div className=\"flex items-center justify-end gap-2 border-t px-6 py-4\">\n {actions}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface FormSectionProps {\n title: string;\n description?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormSection({\n title,\n description,\n children,\n className,\n}: FormSectionProps) {\n return (\n <div className={cn(\"space-y-4\", className)}>\n <div>\n <h4 className=\"text-sm font-medium\">{title}</h4>\n {description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n <div className=\"space-y-4\">{children}</div>\n </div>\n );\n}\n","'use client'\n\nimport { useState, useRef, useEffect } from 'react'\n\n/**\n * LocalInput — Prevents cursor jumping in form-heavy UIs\n * \n * Problem: When parent component re-renders, native input loses focus.\n * Solution: Maintains local state + syncs from parent only when not focused.\n * \n * Props:\n * - value: number | string (from parent)\n * - onChange: (val: string) => void (called on every keystroke OR on blur)\n * - commitOnBlur?: boolean (if true, only commits to parent on blur; if false, commits immediately)\n * - ...rest: HTML input attributes\n */\nexport function LocalInput({\n value,\n onChange,\n commitOnBlur,\n ...rest\n}: Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value: number | string\n onChange: (val: string) => void\n commitOnBlur?: boolean\n}) {\n const [local, setLocal] = useState(String(value ?? ''))\n const ref = useRef<HTMLInputElement>(null)\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n\n // Sync parent value to local state only when input is not focused\n useEffect(() => {\n if (document.activeElement !== ref.current) {\n setLocal(String(value ?? ''))\n }\n }, [value])\n\n return (\n <input\n ref={ref}\n {...rest}\n value={local}\n onChange={(e) => {\n setLocal(e.target.value)\n // If commitOnBlur is false, call onChange immediately (normal behavior)\n // If commitOnBlur is true, wait for blur to avoid re-render spam\n if (!commitOnBlur) {\n onChangeRef.current(e.target.value)\n }\n }}\n onBlur={(e) => {\n // If commitOnBlur is true, commit on blur\n if (commitOnBlur) {\n onChangeRef.current(e.target.value)\n }\n }}\n />\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport type { DeviceKey, DeviceOption } from './responsive-types'\nimport { DEVICES, DEVICE_ICONS } from './responsive-types'\n\n/**\n * ResponsiveSizeDeviceIcon\n * \n * Device picker icon + dropdown menu.\n * Typically sits next to a \"Size\" label in forms.\n * \n * Props:\n * - activeDevice: Currently selected device\n * - setActiveDevice: Callback to change device\n */\nexport function ResponsiveSizeDeviceIcon({\n activeDevice,\n setActiveDevice,\n}: {\n activeDevice: DeviceKey\n setActiveDevice: (d: DeviceKey) => void\n}) {\n const [open, setOpen] = useState(false)\n\n return (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n className=\"flex items-center text-white/30 hover:text-white/60 transition-colors\"\n >\n {DEVICE_ICONS[activeDevice]}\n </button>\n {open && (\n <div\n className=\"absolute left-0 top-full mt-1 z-[200] rounded-lg overflow-hidden border border-white/10 shadow-xl\"\n style={{ background: '#1e2030', minWidth: 160 }}\n >\n {DEVICES.map((d) => (\n <button\n key={d.key}\n type=\"button\"\n onClick={() => {\n setActiveDevice(d.key)\n setOpen(false)\n }}\n className=\"w-full flex items-center gap-3 px-3 py-2 text-xs hover:bg-white/10 transition-colors\"\n >\n <span className=\"text-white/60\">{DEVICE_ICONS[d.key]}</span>\n <span className=\"text-white/70 flex-1 text-left\">{d.label}</span>\n <span className=\"text-white/30\">{d.width}</span>\n {activeDevice === d.key && (\n <svg\n className=\"w-3 h-3 text-[#287f71] shrink-0\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n >\n <path d=\"m5 13 4 4L19 7\" />\n </svg>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * Responsive input device types and constants\n */\n\nexport type DeviceKey = 'desktop' | 'laptop' | 'tablet' | 'mobile'\n\nexport interface DeviceOption {\n key: DeviceKey\n label: string\n width: string\n}\n\nexport const DEVICES: DeviceOption[] = [\n { key: 'desktop', label: 'Desktop', width: '1200px' },\n { key: 'laptop', label: 'Laptop', width: '1024px' },\n { key: 'tablet', label: 'Tablet', width: '768px' },\n { key: 'mobile', label: 'Mobile', width: '375px' },\n]\n\nexport const DEVICE_ICONS: Record<DeviceKey, React.ReactNode> = {\n desktop: (\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"14\" rx=\"2\" />\n <path d=\"M8 20h8M12 18v2\" />\n </svg>\n ),\n laptop: (\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"12\" rx=\"1.5\" />\n <path d=\"M1 19h22\" />\n </svg>\n ),\n tablet: (\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" />\n <circle cx=\"12\" cy=\"18\" r=\"0.5\" fill=\"currentColor\" />\n </svg>\n ),\n mobile: (\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"6\" y=\"2\" width=\"12\" height=\"20\" rx=\"2\" />\n <circle cx=\"12\" cy=\"18\" r=\"0.5\" fill=\"currentColor\" />\n </svg>\n ),\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { LocalInput } from './local-input'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../primitives/select'\nimport type { DeviceKey } from './responsive-types'\nimport { DEVICE_ICONS } from './responsive-types'\n\n/**\n * ResponsiveSizeField\n * \n * Bordered input field with device-aware number/text input + unit selector.\n * Supports responsive sizes by device (desktop, laptop, tablet, mobile).\n * Supports custom CSS values (calc, clamp, etc.) when unit is 'custom'.\n * \n * Props:\n * - value: Size values by device\n * - unit: Current unit (px, rem, em, vh, vw, custom)\n * - customUnit?: Custom CSS value (e.g., \"calc(100% - 20px)\")\n * - activeDevice: Currently selected device\n * - onSizeChange: Callback when size changes\n * - onUnitChange: Callback when unit changes\n * - onCustomChange?: Callback when custom value changes\n */\nexport function ResponsiveSizeField({\n value,\n unit,\n customUnit,\n activeDevice,\n onSizeChange,\n onUnitChange,\n onCustomChange,\n}: {\n value: Partial<Record<DeviceKey, number>>\n unit: string\n customUnit?: string\n activeDevice: DeviceKey\n onSizeChange: (dev: DeviceKey, val: number) => void\n onUnitChange: (unit: string) => void\n onCustomChange?: (val: string) => void\n}) {\n const [unitOpen, setUnitOpen] = useState(false)\n const currentVal = value[activeDevice] ?? value.desktop ?? 0\n const isCustom = unit === 'custom'\n\n return (\n <div className=\"relative flex items-center border border-white/10 rounded-md bg-white/5 w-full\" style={{ height: 32 }}>\n {/* Input: number or custom text */}\n {isCustom ? (\n <LocalInput\n type=\"text\"\n value={customUnit || ''}\n onChange={(v) => onCustomChange?.(v)}\n commitOnBlur\n placeholder=\"e.g. 2rem\"\n className=\"flex-1 min-w-0 bg-transparent px-2 text-xs text-white/80 outline-none h-full\"\n />\n ) : (\n <LocalInput\n type=\"number\"\n min={0}\n value={currentVal}\n onChange={(v) => onSizeChange(activeDevice, +v)}\n commitOnBlur\n className=\"flex-1 min-w-0 bg-transparent px-2 text-xs text-white/80 outline-none text-center h-full\"\n />\n )}\n\n {/* Unit: pencil icon (custom mode) or Select */}\n {isCustom ? (\n <div className=\"relative shrink-0\">\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setUnitOpen((o) => !o)}\n title=\"Choose unit\"\n className=\"flex items-center justify-center px-2 h-full text-white/30 hover:text-white/60 transition-colors cursor-pointer\"\n >\n <svg\n className=\"w-3 h-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path d=\"m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Z\" />\n </svg>\n </div>\n {unitOpen && (\n <div\n className=\"absolute right-0 top-full mt-1 z-[200] rounded-lg overflow-hidden border border-white/10 shadow-xl\"\n style={{ background: '#1e2030', minWidth: 60 }}\n >\n {['px', 'rem', 'em', 'vh', 'vw'].map((u) => (\n <div\n key={u}\n role=\"button\"\n tabIndex={0}\n onClick={() => {\n onUnitChange(u)\n setUnitOpen(false)\n }}\n className=\"w-full px-3 py-2 text-xs text-white/70 hover:bg-white/10 text-right transition-colors cursor-pointer\"\n >\n {u}\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n <Select value={unit} onValueChange={onUnitChange}>\n <SelectTrigger\n className=\"h-full border-0 rounded-l-none rounded-r-lg px-2 text-xs text-white/50 bg-transparent focus:ring-0 shadow-none\"\n style={{ width: 52, minWidth: 52 }}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent style={{ background: '#1a1c2e', border: '1px solid rgba(255,255,255,0.1)', color: 'rgba(255,255,255,0.7)' }}>\n {['px', 'rem', 'em', 'vh', 'vw', 'custom'].map((u) => (\n <SelectItem key={u} value={u}>\n {u}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </div>\n )\n}\n","import * as React from \"react\";\nimport { AlertCircle, CheckCircle2, Info, AlertTriangle, X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface AlertProps {\n variant?: \"info\" | \"success\" | \"warning\" | \"error\";\n title?: string;\n children: React.ReactNode;\n dismissible?: boolean;\n onDismiss?: () => void;\n className?: string;\n}\n\nconst variantConfig = {\n info: {\n icon: Info,\n classes: \"border-blue-200 bg-blue-50 text-blue-900 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-100\",\n },\n success: {\n icon: CheckCircle2,\n classes: \"border-green-200 bg-green-50 text-green-900 dark:border-green-800 dark:bg-green-950 dark:text-green-100\",\n },\n warning: {\n icon: AlertTriangle,\n classes: \"border-yellow-200 bg-yellow-50 text-yellow-900 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-100\",\n },\n error: {\n icon: AlertCircle,\n classes: \"border-red-200 bg-red-50 text-red-900 dark:border-red-800 dark:bg-red-950 dark:text-red-100\",\n },\n};\n\nexport function Alert({\n variant = \"info\",\n title,\n children,\n dismissible,\n onDismiss,\n className,\n}: AlertProps) {\n const config = variantConfig[variant];\n const Icon = config.icon;\n\n return (\n <div\n className={cn(\n \"relative flex gap-3 rounded-lg border p-4\",\n config.classes,\n className\n )}\n role=\"alert\"\n >\n <Icon className=\"mt-0.5 h-5 w-5 shrink-0\" />\n <div className=\"flex-1\">\n {title && <p className=\"font-medium\">{title}</p>}\n <div className={cn(\"text-sm\", title && \"mt-1\")}>{children}</div>\n </div>\n {dismissible && (\n <button\n onClick={onDismiss}\n className=\"absolute right-3 top-3 rounded-md p-1 opacity-70 hover:opacity-100\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface LoadingSpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst sizeMap = {\n sm: \"h-4 w-4\",\n md: \"h-6 w-6\",\n lg: \"h-8 w-8\",\n};\n\nexport function LoadingSpinner({ size = \"md\", className }: LoadingSpinnerProps) {\n return (\n <Loader2\n className={cn(\"animate-spin text-muted-foreground\", sizeMap[size], className)}\n />\n );\n}\n","import * as React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../primitives/dialog\";\nimport { Button } from \"../primitives/button\";\nimport { LoadingSpinner } from \"./loading-spinner\";\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n onConfirm: () => void;\n loading?: boolean;\n variant?: \"default\" | \"destructive\";\n}\n\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n onConfirm,\n loading,\n variant = \"default\",\n}: ConfirmDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && (\n <DialogDescription>{description}</DialogDescription>\n )}\n </DialogHeader>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={loading}\n >\n {cancelLabel}\n </Button>\n <Button\n variant={variant === \"destructive\" ? \"destructive\" : \"default\"}\n onClick={onConfirm}\n disabled={loading}\n >\n {loading && <LoadingSpinner size=\"sm\" className=\"mr-2\" />}\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type PostStatus = \"DRAFT\" | \"PUBLISHED\" | \"SCHEDULED\" | \"ARCHIVED\";\n\nexport interface PostStatusBadgeProps {\n status: PostStatus;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nconst statusConfig: Record<\n PostStatus,\n { label: string; container: string; dot: string }\n> = {\n DRAFT: {\n label: \"Draft\",\n container: \"bg-muted text-muted-foreground\",\n dot: \"bg-gray-400\",\n },\n PUBLISHED: {\n label: \"Published\",\n container: \"bg-primary/10 text-primary\",\n dot: \"bg-primary animate-pulse\",\n },\n SCHEDULED: {\n label: \"Scheduled\",\n container:\n \"bg-blue-50 text-blue-600 dark:bg-blue-950 dark:text-blue-400\",\n dot: \"bg-blue-500 dark:bg-blue-400\",\n },\n ARCHIVED: {\n label: \"Archived\",\n container:\n \"bg-amber-50 text-amber-600 dark:bg-amber-950 dark:text-amber-400\",\n dot: \"bg-amber-500 dark:bg-amber-400\",\n },\n};\n\nconst sizeConfig = {\n sm: \"text-[10px] px-1.5 py-0.5\",\n md: \"text-xs px-2 py-1\",\n};\n\nexport function PostStatusBadge({\n status,\n size = \"md\",\n className,\n}: PostStatusBadgeProps) {\n const config = statusConfig[status];\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full font-medium\",\n config.container,\n sizeConfig[size],\n className\n )}\n >\n <span\n className={cn(\"inline-block rounded-full\", config.dot, {\n \"w-1.5 h-1.5\": size === \"md\",\n \"w-1 h-1\": size === \"sm\",\n })}\n />\n {config.label}\n </span>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { PostStatus, PostStatusBadge } from \"./post-status-badge\";\nimport { Skeleton } from \"../Skeleton\";\n\n// ─── Icons ─────────────────────────────────────────────────────────────────\n\nfunction IconEdit() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n}\n\nfunction IconTrash() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\" />\n <path d=\"M10 11v6\" />\n <path d=\"M14 11v6\" />\n <path d=\"M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2\" />\n </svg>\n );\n}\n\nfunction IconCopy() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nfunction IconMoreHorizontal() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction IconChevronRight() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n}\n\nfunction IconImage() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n );\n}\n\nfunction IconPlus() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n}\n\n// ─── Types ─────────────────────────────────────────────────────────────────\n\nexport interface PostListItem {\n id: string;\n title: string;\n slug: string;\n status: PostStatus;\n author?: string | null;\n publishedAt?: Date | string | null;\n createdAt: Date | string;\n featuredImageUrl?: string | null;\n excerpt?: string | null;\n}\n\nexport interface PostListTableProps {\n posts: PostListItem[];\n loading?: boolean;\n singularLabel?: string;\n onEdit?: (id: string) => void;\n onDelete?: (id: string) => void;\n onDuplicate?: (id: string) => void;\n onStatusChange?: (id: string, status: PostStatus) => void;\n emptyMessage?: string;\n emptyIcon?: React.ReactNode;\n onNewPost?: () => void;\n newPostLabel?: string;\n className?: string;\n}\n\n// ─── Helpers ───────────────────────────────────────────────────────────────\n\nfunction formatDate(date: Date | string): string {\n return new Date(date).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .slice(0, 2)\n .map((w) => w[0]?.toUpperCase() ?? \"\")\n .join(\"\");\n}\n\n// ─── Row Actions Dropdown ──────────────────────────────────────────────────\n\ninterface RowActionsProps {\n post: PostListItem;\n onEdit?: (id: string) => void;\n onDelete?: (id: string) => void;\n onDuplicate?: (id: string) => void;\n onStatusChange?: (id: string, status: PostStatus) => void;\n}\n\nfunction RowActions({ post, onEdit, onDelete, onDuplicate, onStatusChange }: RowActionsProps) {\n const [open, setOpen] = React.useState(false);\n const [statusOpen, setStatusOpen] = React.useState(false);\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!open) return;\n function handleClick(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setStatusOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n const statusOptions: { label: string; value: PostStatus }[] = [\n { label: \"Draft\", value: \"DRAFT\" },\n { label: \"Publish\", value: \"PUBLISHED\" },\n { label: \"Archive\", value: \"ARCHIVED\" },\n ];\n\n return (\n <div className=\"relative flex items-center gap-1\" ref={ref}>\n {/* Edit button */}\n <button\n onClick={() => onEdit?.(post.id)}\n className=\"inline-flex items-center justify-center h-7 w-7 rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n title=\"Edit\"\n >\n <IconEdit />\n </button>\n\n {/* More dropdown */}\n <button\n onClick={() => { setOpen((v) => !v); setStatusOpen(false); }}\n className=\"inline-flex items-center justify-center h-7 w-7 rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n title=\"More actions\"\n >\n <IconMoreHorizontal />\n </button>\n\n {open && (\n <div className=\"absolute right-0 top-8 z-50 min-w-[160px] rounded-lg border border-border bg-card shadow-md py-1\">\n {/* Duplicate */}\n <button\n onClick={() => { onDuplicate?.(post.id); setOpen(false); }}\n className=\"flex w-full items-center gap-2 px-3 py-1.5 text-sm hover:bg-accent transition-colors\"\n >\n <IconCopy />\n Duplicate\n </button>\n\n {/* Change Status */}\n <div className=\"relative\">\n <button\n onMouseEnter={() => setStatusOpen(true)}\n onMouseLeave={() => setStatusOpen(false)}\n onClick={() => setStatusOpen((v) => !v)}\n className=\"flex w-full items-center justify-between gap-2 px-3 py-1.5 text-sm hover:bg-accent transition-colors\"\n >\n <span>Change status</span>\n <IconChevronRight />\n </button>\n {statusOpen && (\n <div\n className=\"absolute left-full top-0 z-50 min-w-[130px] rounded-lg border border-border bg-card shadow-md py-1\"\n onMouseEnter={() => setStatusOpen(true)}\n onMouseLeave={() => setStatusOpen(false)}\n >\n {statusOptions.map((opt) => (\n <button\n key={opt.value}\n onClick={() => { onStatusChange?.(post.id, opt.value); setOpen(false); setStatusOpen(false); }}\n className={cn(\n \"flex w-full items-center gap-2 px-3 py-1.5 text-sm hover:bg-accent transition-colors\",\n post.status === opt.value && \"text-primary font-medium\"\n )}\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Divider */}\n <div className=\"my-1 border-t border-border\" />\n\n {/* Delete */}\n <button\n onClick={() => { onDelete?.(post.id); setOpen(false); }}\n className=\"flex w-full items-center gap-2 px-3 py-1.5 text-sm text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <IconTrash />\n Delete\n </button>\n </div>\n )}\n </div>\n );\n}\n\n// ─── Skeleton Row ──────────────────────────────────────────────────────────\n\nfunction SkeletonRow() {\n return (\n <tr>\n <td className=\"px-4 py-3\">\n <Skeleton className=\"w-10 h-10 rounded-lg\" />\n </td>\n <td className=\"px-4 py-3\">\n <Skeleton className=\"h-4 w-40 mb-1.5\" />\n <Skeleton className=\"h-3 w-24\" />\n </td>\n <td className=\"px-4 py-3\">\n <Skeleton className=\"h-5 w-20 rounded-full\" />\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"w-6 h-6 rounded-full\" />\n <Skeleton className=\"h-4 w-20\" />\n </div>\n </td>\n <td className=\"px-4 py-3\">\n <Skeleton className=\"h-4 w-24\" />\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex gap-1\">\n <Skeleton className=\"w-7 h-7 rounded-md\" />\n <Skeleton className=\"w-7 h-7 rounded-md\" />\n </div>\n </td>\n </tr>\n );\n}\n\n// ─── Component ─────────────────────────────────────────────────────────────\n\nexport function PostListTable({\n posts,\n loading = false,\n singularLabel = \"Post\",\n onEdit,\n onDelete,\n onDuplicate,\n onStatusChange,\n emptyMessage,\n emptyIcon,\n onNewPost,\n newPostLabel,\n className,\n}: PostListTableProps) {\n const isEmpty = !loading && posts.length === 0;\n\n return (\n <div className={cn(\"w-full overflow-x-auto rounded-lg border border-border bg-card\", className)}>\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border bg-muted/40\">\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground w-14\">Image</th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground\">Title</th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground\">Status</th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground\">Author</th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-muted-foreground\">Date</th>\n <th className=\"px-4 py-2.5 text-right text-xs font-medium text-muted-foreground\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {loading\n ? Array.from({ length: 5 }).map((_, i) => <SkeletonRow key={i} />)\n : isEmpty\n ? null\n : posts.map((post) => {\n const date =\n post.status === \"PUBLISHED\" && post.publishedAt\n ? formatDate(post.publishedAt)\n : formatDate(post.createdAt);\n return (\n <tr\n key={post.id}\n className=\"border-b border-border last:border-0 hover:bg-muted/30 transition-colors\"\n >\n {/* Thumbnail */}\n <td className=\"px-4 py-3\">\n {post.featuredImageUrl ? (\n <img\n src={post.featuredImageUrl}\n alt={post.title}\n className=\"w-10 h-10 rounded-lg object-cover\"\n />\n ) : (\n <div className=\"w-10 h-10 rounded-lg bg-muted flex items-center justify-center text-muted-foreground\">\n <IconImage />\n </div>\n )}\n </td>\n\n {/* Title + Slug */}\n <td className=\"px-4 py-3\">\n <div className=\"font-medium text-foreground leading-tight truncate max-w-[240px]\">\n {post.title}\n </div>\n <div className=\"text-xs text-muted-foreground mt-0.5 truncate max-w-[240px]\">\n /{post.slug}\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-4 py-3\">\n <PostStatusBadge status={post.status} size=\"sm\" />\n </td>\n\n {/* Author */}\n <td className=\"px-4 py-3\">\n {post.author ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"w-6 h-6 rounded-full bg-primary/20 text-primary flex items-center justify-center text-[10px] font-semibold shrink-0\">\n {getInitials(post.author)}\n </div>\n <span className=\"text-sm text-foreground truncate max-w-[100px]\">\n {post.author}\n </span>\n </div>\n ) : (\n <span className=\"text-muted-foreground text-xs\">—</span>\n )}\n </td>\n\n {/* Date */}\n <td className=\"px-4 py-3 text-sm text-muted-foreground whitespace-nowrap\">\n {date}\n </td>\n\n {/* Actions */}\n <td className=\"px-4 py-3\">\n <div className=\"flex justify-end\">\n <RowActions\n post={post}\n onEdit={onEdit}\n onDelete={onDelete}\n onDuplicate={onDuplicate}\n onStatusChange={onStatusChange}\n />\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n\n {/* Empty state */}\n {isEmpty && (\n <div className=\"flex flex-col items-center justify-center py-16 px-6 text-center\">\n <div className=\"text-muted-foreground mb-3\">\n {emptyIcon ?? (\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"opacity-40\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n )}\n </div>\n <p className=\"text-sm text-muted-foreground mb-4\">\n {emptyMessage ?? `No ${singularLabel.toLowerCase()}s yet.`}\n </p>\n {onNewPost && (\n <button\n onClick={onNewPost}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n >\n <IconPlus />\n {newPostLabel ?? `New ${singularLabel}`}\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface SkeletonProps {\n width?: string | number\n height?: string | number\n rounded?: string\n className?: string\n style?: React.CSSProperties\n}\n\nexport function Skeleton({ width = '100%', height = 16, rounded, style }: SkeletonProps) {\n return (\n <div\n style={{\n width,\n height,\n background: 'var(--muted, #e5e7eb)',\n borderRadius: rounded ?? 'var(--radius, 0.5rem)',\n overflow: 'hidden',\n position: 'relative',\n flexShrink: 0,\n ...style,\n }}\n >\n <div\n style={{\n position: 'absolute',\n inset: 0,\n background:\n 'linear-gradient(90deg, transparent 0%, color-mix(in oklab, var(--background, #fff) 40%, transparent) 50%, transparent 100%)',\n animation: 'dashui-shimmer 1.6s ease-in-out infinite',\n }}\n />\n </div>\n )\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PostFiltersBarProps {\n search: string;\n onSearch: (v: string) => void;\n status: string;\n onStatusChange: (v: string) => void;\n onNew?: () => void;\n newLabel?: string;\n total?: number;\n typeLabel?: string;\n className?: string;\n}\n\nconst STATUS_TABS = [\n { value: \"all\", label: \"All\" },\n { value: \"DRAFT\", label: \"Draft\" },\n { value: \"PUBLISHED\", label: \"Published\" },\n { value: \"SCHEDULED\", label: \"Scheduled\" },\n { value: \"ARCHIVED\", label: \"Archived\" },\n];\n\nfunction IconSearch() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n );\n}\n\nfunction IconPlus() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n}\n\nexport function PostFiltersBar({\n search,\n onSearch,\n status,\n onStatusChange,\n onNew,\n newLabel = \"New Post\",\n total,\n typeLabel = \"Posts\",\n className,\n}: PostFiltersBarProps) {\n return (\n <div className={cn(\"space-y-2\", className)}>\n <div className=\"flex flex-wrap items-center gap-3\">\n {/* Search */}\n <div className=\"relative flex items-center\">\n <span className=\"absolute left-2.5 text-muted-foreground pointer-events-none\">\n <IconSearch />\n </span>\n <input\n type=\"text\"\n value={search}\n onChange={(e) => onSearch(e.target.value)}\n placeholder={`Search ${typeLabel}…`}\n className=\"h-8 pl-8 pr-3 rounded-lg border border-border bg-background text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary transition-colors w-56\"\n />\n </div>\n\n {/* Status tabs */}\n <div className=\"flex items-center gap-1 rounded-lg bg-muted p-0.5\">\n {STATUS_TABS.map((tab) => (\n <button\n key={tab.value}\n onClick={() => onStatusChange(tab.value)}\n className={cn(\n \"rounded-md px-2.5 py-1 text-xs font-medium transition-colors\",\n status === tab.value\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Spacer */}\n <div className=\"flex-1\" />\n\n {/* New button */}\n {onNew && (\n <button\n onClick={onNew}\n className=\"inline-flex items-center gap-1.5 h-8 rounded-lg bg-primary px-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n >\n <IconPlus />\n {newLabel}\n </button>\n )}\n </div>\n\n {/* Total count */}\n {total !== undefined && (\n <p className=\"text-xs text-muted-foreground\">\n {total} {total === 1 ? typeLabel.replace(/s$/, \"\") : typeLabel}\n </p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { PostStatus, PostStatusBadge } from \"./post-status-badge\";\n\nexport interface PostEditorShellProps {\n title?: string;\n backLabel?: string;\n onBack?: () => void;\n onSave?: () => void;\n onPublish?: () => void;\n saving?: boolean;\n publishing?: boolean;\n status?: PostStatus;\n children: React.ReactNode;\n sidebar: React.ReactNode;\n className?: string;\n}\n\nfunction IconArrowLeft() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\" />\n <polyline points=\"12 19 5 12 12 5\" />\n </svg>\n );\n}\n\nfunction IconSpinner() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"animate-spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\nfunction IconMoreHorizontal() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport function PostEditorShell({\n title,\n backLabel = \"Back\",\n onBack,\n onSave,\n onPublish,\n saving = false,\n publishing = false,\n status,\n children,\n sidebar,\n className,\n}: PostEditorShellProps) {\n return (\n <div className={cn(\"flex flex-col h-screen bg-background overflow-hidden\", className)}>\n {/* Top Bar */}\n <div className=\"flex items-center gap-3 h-14 px-4 border-b border-border bg-card shrink-0\">\n {/* Back button */}\n {onBack && (\n <button\n onClick={onBack}\n className=\"inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-sm text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n >\n <IconArrowLeft />\n {backLabel}\n </button>\n )}\n\n {/* Separator */}\n {onBack && <div className=\"h-5 w-px bg-border\" />}\n\n {/* Title */}\n {title && (\n <span className=\"text-sm font-medium text-muted-foreground truncate max-w-xs\">\n {title}\n </span>\n )}\n\n {/* Status badge */}\n {status && <PostStatusBadge status={status} size=\"sm\" />}\n\n {/* Spacer */}\n <div className=\"flex-1\" />\n\n {/* More button */}\n <button className=\"inline-flex items-center justify-center h-8 w-8 rounded-lg text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\">\n <IconMoreHorizontal />\n </button>\n\n {/* Save Draft */}\n <button\n onClick={onSave}\n disabled={saving}\n className=\"inline-flex items-center gap-1.5 h-8 rounded-lg border border-border bg-background px-3 text-sm font-medium hover:bg-accent transition-colors disabled:opacity-60\"\n >\n {saving && <IconSpinner />}\n Save Draft\n </button>\n\n {/* Publish */}\n <button\n onClick={onPublish}\n disabled={publishing}\n className=\"inline-flex items-center gap-1.5 h-8 rounded-lg bg-primary px-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-60\"\n >\n {publishing && <IconSpinner />}\n Publish\n </button>\n </div>\n\n {/* Body */}\n <div className=\"flex flex-1 overflow-hidden\">\n {/* Main content */}\n <div className=\"flex-1 overflow-y-auto p-6\">\n <div className=\"max-w-3xl mx-auto\">{children}</div>\n </div>\n\n {/* Sidebar */}\n <div className=\"w-72 shrink-0 border-l border-border overflow-y-auto p-4\">\n {sidebar}\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SlugInputProps {\n value: string;\n onChange: (value: string) => void;\n onGenerate?: () => void;\n prefix?: string;\n disabled?: boolean;\n className?: string;\n}\n\nfunction IconRefresh() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"23 4 23 10 17 10\" />\n <polyline points=\"1 20 1 14 7 14\" />\n <path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n );\n}\n\nexport function SlugInput({\n value,\n onChange,\n onGenerate,\n prefix,\n disabled = false,\n className,\n}: SlugInputProps) {\n return (\n <div className={cn(\"space-y-1\", className)}>\n <div className=\"flex items-center gap-1\">\n {prefix && (\n <span className=\"shrink-0 text-sm text-muted-foreground select-none\">\n {prefix}\n </span>\n )}\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n className={cn(\n \"flex-1 h-8 border-0 border-b border-input bg-transparent text-sm focus:outline-none focus:border-primary transition-colors\",\n disabled && \"opacity-60 cursor-not-allowed\"\n )}\n placeholder=\"your-slug-here\"\n />\n {onGenerate && (\n <button\n onClick={onGenerate}\n disabled={disabled}\n title=\"Generate slug\"\n className=\"inline-flex items-center justify-center h-7 w-7 rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors disabled:opacity-60\"\n >\n <IconRefresh />\n </button>\n )}\n </div>\n <p className=\"text-[10px] text-muted-foreground\">\n Only lowercase letters, numbers, and hyphens\n </p>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PostSidebarSectionProps {\n title: string;\n children: React.ReactNode;\n defaultOpen?: boolean;\n className?: string;\n}\n\nfunction IconChevronDown() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nexport function PostSidebarSection({\n title,\n children,\n defaultOpen = true,\n className,\n}: PostSidebarSectionProps) {\n const [open, setOpen] = React.useState(defaultOpen);\n\n return (\n <div className={cn(\"border-b border-border\", className)}>\n {/* Header */}\n <button\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center justify-between py-3 px-0 text-sm font-medium text-foreground hover:text-primary transition-colors\"\n >\n {title}\n <span\n className={cn(\n \"text-muted-foreground transition-transform duration-200\",\n open ? \"rotate-0\" : \"-rotate-90\"\n )}\n >\n <IconChevronDown />\n </span>\n </button>\n\n {/* Body */}\n <div\n className={cn(\n \"overflow-hidden transition-all duration-200\",\n open ? \"max-h-[9999px] pb-4 opacity-100\" : \"max-h-0 opacity-0 pointer-events-none\"\n )}\n >\n {children}\n </div>\n </div>\n );\n}\n","'use client'\n\nimport { useState, useRef, useEffect, useCallback } from 'react'\nimport Color from 'color'\nimport * as Popover from '@radix-ui/react-popover'\nimport {\n ColorPicker,\n ColorPickerSelection,\n ColorPickerHue,\n ColorPickerAlpha,\n ColorPickerOutput,\n ColorPickerFormat,\n ColorPickerEyeDropper,\n useColorPicker,\n} from './color-picker'\nimport { cn } from '../../lib/utils'\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction hslToHex(hsl: string): string {\n if (!hsl) return '#000000'\n try {\n const parts = hsl.trim().split(/\\s+/)\n const h = parseFloat(parts[0]) || 0\n const s = parseFloat(parts[1]) || 0\n const l = parseFloat(parts[2]) || 0\n return Color.hsl(h, s, l).hex()\n } catch { return '#000000' }\n}\n\nfunction hexToHsl(hex: string): string {\n try {\n const c = Color(hex.startsWith('#') ? hex : `#${hex}`)\n return `${Math.round(c.hue())} ${Math.round(c.saturationl())}% ${Math.round(c.lightness())}%`\n } catch { return '0 0% 0%' }\n}\n\n// ─── ColorReader — reads picker context, stores pending hex ──────────────────\n\nfunction ColorReader({ onHexChange }: { onHexChange: (hex: string) => void }) {\n const { hue, saturation, lightness, alpha } = useColorPicker()\n useEffect(() => {\n try {\n const hex = Color.hsl(hue, saturation, lightness).alpha(alpha / 100).hex()\n onHexChange(hex)\n } catch {}\n }, [hue, saturation, lightness, alpha, onHexChange])\n return null\n}\n\n// ─── HslColorInput ────────────────────────────────────────────────────────────\n\ninterface HslColorInputProps {\n value: string // \"160 47% 33%\"\n onChange: (v: string) => void\n className?: string\n inputClassName?: string\n disabled?: boolean\n}\n\nexport function HslColorInput({ value, onChange, className, inputClassName, disabled }: HslColorInputProps) {\n const [open, setOpen] = useState(false)\n const hexValue = hslToHex(value)\n const cssColor = value ? `hsl(${value})` : 'transparent'\n\n // Pending color — only commit to parent when popover closes\n const pendingHexRef = useRef(hexValue)\n const onChangeRef = useRef(onChange)\n useEffect(() => { onChangeRef.current = onChange }, [onChange])\n\n // Reset pending when popover opens\n useEffect(() => {\n if (open) pendingHexRef.current = hexValue\n }, [open, hexValue])\n\n const handleHexChange = useCallback((hex: string) => {\n pendingHexRef.current = hex\n }, [])\n\n const handleOpenChange = useCallback((newOpen: boolean) => {\n if (!newOpen && open) {\n // Popover closing — commit pending color\n const pending = pendingHexRef.current\n if (pending && pending !== hexValue) {\n onChangeRef.current(hexToHsl(pending))\n }\n }\n setOpen(newOpen)\n }, [open, hexValue])\n\n return (\n <Popover.Root open={open} onOpenChange={disabled ? undefined : handleOpenChange}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'flex items-center gap-2 px-2 py-1 rounded-lg border border-white/10',\n 'bg-white/5 hover:border-white/20 hover:bg-white/[0.08] transition-colors',\n 'text-xs text-white/60 font-mono min-w-[7.5rem] justify-start',\n 'focus:outline-none focus:border-white/30',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n aria-label=\"Pick color\"\n >\n {/* Circular swatch */}\n <span\n className=\"w-4 h-4 rounded-full border border-white/20 shrink-0 inline-block\"\n style={{ background: cssColor }}\n />\n {/* Hex value */}\n <span>{hexValue.toUpperCase()}</span>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n sideOffset={6}\n align=\"start\"\n className={cn(\n 'z-[9999] rounded-xl shadow-2xl p-3 w-[220px]',\n 'bg-[#0f1117] border border-white/10',\n 'focus:outline-none'\n )}\n onInteractOutside={() => handleOpenChange(false)}\n >\n {open && (\n <ColorPicker key={hexValue} defaultValue={hexValue} className=\"gap-2.5\">\n <ColorReader onHexChange={handleHexChange} />\n <ColorPickerSelection className=\"h-32 w-full rounded-lg\" />\n <div className=\"flex items-center gap-3\">\n <ColorPickerEyeDropper />\n <div className=\"flex flex-col gap-1.5 flex-1\">\n <ColorPickerHue />\n <ColorPickerAlpha />\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 min-w-0\">\n <ColorPickerOutput />\n <ColorPickerFormat className=\"min-w-0\" />\n </div>\n </ColorPicker>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","'use client'\n\nimport Color from 'color'\nimport {\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport * as Slider from '@radix-ui/react-slider'\nimport { cn } from '../../lib/utils'\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface ColorPickerContextValue {\n hue: number\n saturation: number\n lightness: number\n alpha: number\n mode: string\n setHue: (h: number) => void\n setSaturation: (s: number) => void\n setLightness: (l: number) => void\n setAlpha: (a: number) => void\n setMode: (mode: string) => void\n}\n\nconst ColorPickerContext = createContext<ColorPickerContextValue | undefined>(undefined)\n\nexport const useColorPicker = () => {\n const ctx = useContext(ColorPickerContext)\n if (!ctx) throw new Error('useColorPicker must be used within ColorPicker')\n return ctx\n}\n\n// ─── Root ──────────────────────────────────────────────────────────────────────\n\nexport type ColorPickerProps = HTMLAttributes<HTMLDivElement> & {\n defaultValue?: string\n onChange?: (hex: string) => void\n}\n\nexport const ColorPicker = ({\n defaultValue = '#000000',\n onChange,\n className,\n children,\n ...props\n}: ColorPickerProps) => {\n const initial = (() => { try { return Color(defaultValue) } catch { return Color('#000000') } })()\n\n const [hue, setHueState] = useState(initial.hue())\n const [saturation, setSaturationState] = useState(initial.saturationl())\n const [lightness, setLightnessState] = useState(initial.lightness())\n const [alpha, setAlphaState] = useState(initial.alpha() * 100)\n const [mode, setMode] = useState('HEX')\n\n const notifyRef = useRef(onChange)\n useEffect(() => { notifyRef.current = onChange }, [onChange])\n\n const notify = useCallback((h: number, s: number, l: number, a: number) => {\n notifyRef.current?.(Color.hsl(h, s, l).alpha(a / 100).hexa())\n }, [])\n\n const setHue = useCallback((h: number) => { setHueState(h); notify(h, saturation, lightness, alpha) }, [saturation, lightness, alpha, notify])\n const setSaturation = useCallback((s: number) => { setSaturationState(s); notify(hue, s, lightness, alpha) }, [hue, lightness, alpha, notify])\n const setLightness = useCallback((l: number) => { setLightnessState(l); notify(hue, saturation, l, alpha) }, [hue, saturation, alpha, notify])\n const setAlpha = useCallback((a: number) => { setAlphaState(a); notify(hue, saturation, lightness, a) }, [hue, saturation, lightness, notify])\n\n return (\n <ColorPickerContext.Provider value={{ hue, saturation, lightness, alpha, mode, setHue, setSaturation, setLightness, setAlpha, setMode }}>\n <div className={cn('flex flex-col gap-3', className)} {...props}>\n {children}\n </div>\n </ColorPickerContext.Provider>\n )\n}\n\n// ─── Selection ────────────────────────────────────────────────────────────────\n\nexport const ColorPickerSelection = memo(({ className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n const { hue, saturation, lightness, setSaturation, setLightness } = useColorPicker()\n\n const [posX, setPosX] = useState(() => saturation / 100)\n const [posY, setPosY] = useState(() => {\n const x = saturation / 100\n const topL = x < 0.01 ? 100 : 50 + 50 * (1 - x)\n return topL > 0 ? Math.max(0, Math.min(1, 1 - lightness / topL)) : 0\n })\n\n const bg = useMemo(() =>\n `linear-gradient(0deg,rgba(0,0,0,1),rgba(0,0,0,0)),linear-gradient(90deg,rgba(255,255,255,1),rgba(255,255,255,0)),hsl(${hue},100%,50%)`,\n [hue]\n )\n\n const handleMove = useCallback((e: PointerEvent) => {\n if (!isDragging || !containerRef.current) return\n const rect = containerRef.current.getBoundingClientRect()\n const x = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const y = Math.max(0, Math.min(1, (e.clientY - rect.top) / rect.height))\n setPosX(x); setPosY(y)\n setSaturation(x * 100)\n setLightness((x < 0.01 ? 100 : 50 + 50 * (1 - x)) * (1 - y))\n }, [isDragging, setSaturation, setLightness])\n\n useEffect(() => {\n if (!isDragging) return\n const up = () => setIsDragging(false)\n window.addEventListener('pointermove', handleMove)\n window.addEventListener('pointerup', up)\n return () => { window.removeEventListener('pointermove', handleMove); window.removeEventListener('pointerup', up) }\n }, [isDragging, handleMove])\n\n return (\n <div\n ref={containerRef}\n className={cn('relative w-full cursor-crosshair rounded-lg', className)}\n style={{ background: bg }}\n onPointerDown={e => { e.preventDefault(); setIsDragging(true); handleMove(e.nativeEvent) }}\n {...props}\n >\n <div\n className=\"pointer-events-none absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white\"\n style={{ left: `${posX * 100}%`, top: `${posY * 100}%`, boxShadow: '0 0 0 1px rgba(0,0,0,0.6)' }}\n />\n </div>\n )\n})\nColorPickerSelection.displayName = 'ColorPickerSelection'\n\n// ─── Hue Slider ───────────────────────────────────────────────────────────────\n\nexport const ColorPickerHue = ({ className, ...props }: Omit<ComponentProps<typeof Slider.Root>, 'value' | 'onValueChange' | 'max' | 'step'>) => {\n const { hue, setHue } = useColorPicker()\n return (\n <Slider.Root className={cn('relative flex h-4 w-full touch-none items-center', className)} max={360} step={1} value={[hue]} onValueChange={([h]) => setHue(h)} {...props}>\n <Slider.Track className=\"relative h-3 w-full grow rounded-full bg-[linear-gradient(90deg,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)]\">\n <Slider.Range className=\"absolute h-full\" />\n </Slider.Track>\n <Slider.Thumb className=\"block h-4 w-4 rounded-full border-2 border-white shadow-md focus:outline-none\" style={{ boxShadow: '0 0 0 1px rgba(0,0,0,0.4)' }} />\n </Slider.Root>\n )\n}\n\n// ─── Alpha Slider ─────────────────────────────────────────────────────────────\n\nexport const ColorPickerAlpha = ({ className, ...props }: Omit<ComponentProps<typeof Slider.Root>, 'value' | 'onValueChange' | 'max' | 'step'>) => {\n const { alpha, setAlpha, hue, saturation, lightness } = useColorPicker()\n return (\n <Slider.Root className={cn('relative flex h-4 w-full touch-none items-center', className)} max={100} step={1} value={[alpha]} onValueChange={([a]) => setAlpha(a)} {...props}>\n <Slider.Track className=\"relative h-3 w-full grow rounded-full\" style={{\n backgroundImage: `linear-gradient(90deg,transparent,hsl(${hue},${saturation}%,${lightness}%)),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==\")`,\n }}>\n <Slider.Range className=\"absolute h-full\" />\n </Slider.Track>\n <Slider.Thumb className=\"block h-4 w-4 rounded-full border-2 border-white shadow-md focus:outline-none\" style={{ boxShadow: '0 0 0 1px rgba(0,0,0,0.4)' }} />\n </Slider.Root>\n )\n}\n\n// ─── Eye Dropper ─────────────────────────────────────────────────────────────\n\nexport const ColorPickerEyeDropper = ({ className, ...props }: HTMLAttributes<HTMLButtonElement>) => {\n const { setHue, setSaturation, setLightness, setAlpha } = useColorPicker()\n return (\n <button\n type=\"button\"\n title=\"Eye dropper\"\n onClick={async () => {\n try {\n // @ts-expect-error EyeDropper is experimental\n const r = await new EyeDropper().open()\n const c = Color(r.sRGBHex)\n setHue(c.hue()); setSaturation(c.saturationl()); setLightness(c.lightness()); setAlpha(100)\n } catch {}\n }}\n className={cn('shrink-0 focus:outline-none', className)}\n style={{ width: 32, height: 32, display: 'flex', alignItems: 'center', justifyContent: 'center', borderRadius: 6, border: '1px solid rgba(255,255,255,0.12)', backgroundColor: 'rgba(255,255,255,0.05)', color: 'rgba(255,255,255,0.5)', cursor: 'pointer' }}\n {...props as any}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M9.53 16.122a3 3 0 0 0-5.78 1.128 2.25 2.25 0 0 1-2.4 2.245 4.5 4.5 0 0 0 8.4-2.245c0-.399-.078-.78-.22-1.128Z\"/>\n <path d=\"m13.5 10.5 2.25-2.25m0 0 2.25-2.25M15.75 8.25l2.25 2.25M15.75 8.25 13.5 6m4.5-1.5 1.5-1.5\"/>\n <path d=\"M6.75 7.5 10.5 4.5c.5-.375 1.25-.375 1.5 0l6.75 6.75c.375.5.375 1.25 0 1.5L15 16.5\"/>\n </svg>\n </button>\n )\n}\n\n// ─── Format Output (mode selector) ───────────────────────────────────────────\n\nexport type ColorPickerOutputProps = HTMLAttributes<HTMLDivElement>\n\nexport const ColorPickerOutput = ({ className, ...props }: ColorPickerOutputProps) => {\n const { mode, setMode } = useColorPicker()\n return (\n <div className={cn('relative shrink-0', className)} {...props}>\n <select\n value={mode}\n onChange={e => setMode(e.target.value)}\n style={{\n height: 32,\n width: 72,\n backgroundColor: 'rgba(255,255,255,0.06)',\n border: '1px solid rgba(255,255,255,0.12)',\n borderRadius: 6,\n color: 'rgba(255,255,255,0.75)',\n fontSize: 12,\n paddingLeft: 8,\n paddingRight: 24,\n outline: 'none',\n cursor: 'pointer',\n appearance: 'none',\n WebkitAppearance: 'none',\n }}\n >\n {['HEX', 'HSL', 'RGB'].map(f => (\n <option key={f} value={f} style={{ backgroundColor: '#1e2130', color: 'rgba(255,255,255,0.8)' }}>{f}</option>\n ))}\n </select>\n <svg style={{ position: 'absolute', right: 6, top: '50%', transform: 'translateY(-50%)', width: 12, height: 12, color: 'rgba(255,255,255,0.35)', pointerEvents: 'none' }} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"m6 9 6 6 6-6\"/>\n </svg>\n </div>\n )\n}\n\n// ─── Format Display (editable value input) ────────────────────────────────────\n\nexport type ColorPickerFormatProps = HTMLAttributes<HTMLInputElement>\n\nexport const ColorPickerFormat = ({ className, ...props }: ColorPickerFormatProps) => {\n const { hue, saturation, lightness, alpha, mode, setHue, setSaturation, setLightness, setAlpha } = useColorPicker()\n const [focused, setFocused] = useState(false)\n const [localVal, setLocalVal] = useState('')\n\n const computedVal = (() => {\n try {\n const c = Color.hsl(hue, saturation, lightness).alpha(alpha / 100)\n if (mode === 'HEX') return c.hex().toUpperCase()\n if (mode === 'HSL') return `${Math.round(hue)} ${Math.round(saturation)}% ${Math.round(lightness)}%`\n if (mode === 'RGB') { const [r, g, b] = c.rgb().array().map(Math.round); return `${r}, ${g}, ${b}` }\n } catch {}\n return ''\n })()\n\n useEffect(() => { if (!focused) setLocalVal(computedVal) }, [computedVal, focused])\n\n const tryApply = (raw: string) => {\n try {\n if (mode === 'HEX') {\n const c = Color(raw.startsWith('#') ? raw : `#${raw}`)\n setHue(c.hue()); setSaturation(c.saturationl()); setLightness(c.lightness()); setAlpha(c.alpha() * 100)\n } else if (mode === 'HSL') {\n const p = raw.split(/[\\s,%]+/).filter(Boolean)\n if (p.length >= 3) { setHue(+p[0]); setSaturation(+p[1]); setLightness(+p[2]) }\n } else if (mode === 'RGB') {\n const p = raw.split(/[\\s,]+/).filter(Boolean)\n if (p.length >= 3) { const c = Color.rgb(+p[0], +p[1], +p[2]); setHue(c.hue()); setSaturation(c.saturationl()); setLightness(c.lightness()) }\n }\n } catch {}\n }\n\n return (\n <input\n type=\"text\"\n value={focused ? localVal : computedVal}\n onChange={e => { setLocalVal(e.target.value); tryApply(e.target.value) }}\n onFocus={() => { setFocused(true); setLocalVal(computedVal) }}\n onBlur={() => { tryApply(localVal); setFocused(false) }}\n style={{\n flex: 1, minWidth: 0, height: 32,\n backgroundColor: 'rgba(255,255,255,0.05)',\n border: '1px solid rgba(255,255,255,0.12)',\n borderRadius: 6,\n padding: '0 8px',\n color: 'rgba(255,255,255,0.75)',\n fontSize: 12,\n fontFamily: 'monospace',\n outline: 'none',\n }}\n className={className}\n {...props as any}\n />\n )\n}\n\n// ─── Hex Output (swatch + hex label) ─────────────────────────────────────────\n\nexport const ColorPickerHexOutput = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n const { hue, saturation, lightness } = useColorPicker()\n const hex = Color.hsl(hue, saturation, lightness).hex()\n return (\n <div className={cn('flex items-center gap-1.5 px-0.5', className)} {...props}>\n <div className=\"w-5 h-5 rounded border border-white/20 shrink-0\" style={{ background: `hsl(${hue},${saturation}%,${lightness}%)` }} />\n <span className=\"text-xs font-mono text-white/50\">{hex}</span>\n </div>\n )\n}\n","'use client'\n\nimport { useEditor, EditorContent } from '@tiptap/react'\nimport StarterKit from '@tiptap/starter-kit'\nimport Placeholder from '@tiptap/extension-placeholder'\nimport { useMemo } from 'react'\n\n/**\n * TiptapEditor — Rich text editor with live editing\n *\n * Presentation-only. Consumer handles:\n * - Saving (getJSON() when ready)\n * - Upload handling\n * - Validation\n *\n * Props:\n * - value: Record<string, any> | string | null — JSON content from editor.getJSON()\n * - onChange: (json: Record<string, any>) => void — called on every change\n * - placeholder?: string — placeholder text\n * - disabled?: boolean\n * - className?: string — wrapper classes\n */\nexport function TiptapEditor({\n value,\n onChange,\n placeholder = 'Start writing…',\n disabled = false,\n className = '',\n}: {\n value: Record<string, any> | string | null\n onChange: (json: Record<string, any>) => void\n placeholder?: string\n disabled?: boolean\n className?: string\n}) {\n // Initialize editor with Tiptap + StarterKit\n const editor = useEditor({\n immediatelyRender: false,\n extensions: [\n StarterKit.configure({\n heading: { levels: [1, 2, 3] },\n }),\n Placeholder.configure({ placeholder }),\n ],\n content: value,\n editable: !disabled,\n editorProps: {\n attributes: {\n class:\n 'prose prose-sm max-w-none min-h-[400px] p-4 outline-none focus:outline-none bg-white dark:bg-slate-900 text-slate-900 dark:text-white rounded-lg border border-gray-200 dark:border-slate-700',\n },\n },\n onUpdate: ({ editor }) => {\n onChange(editor.getJSON())\n },\n })\n\n // Render editor\n if (!editor) return null\n\n return (\n <div className={`tiptap-wrapper ${className}`.trim()}>\n {/* Toolbar (minimal) */}\n <div className=\"flex gap-1 p-2 border-b border-gray-200 dark:border-slate-700 bg-gray-50 dark:bg-slate-800 rounded-t-lg\">\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n active={editor.isActive('bold')}\n title=\"Bold (Ctrl+B)\"\n >\n <strong>B</strong>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n active={editor.isActive('italic')}\n title=\"Italic (Ctrl+I)\"\n >\n <em>I</em>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n active={editor.isActive('strike')}\n title=\"Strikethrough\"\n >\n <s>S</s>\n </ToolbarButton>\n\n <div className=\"w-px bg-gray-300 dark:bg-slate-600 mx-1\" />\n\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}\n active={editor.isActive('heading', { level: 1 })}\n title=\"Heading 1\"\n >\n H1\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}\n active={editor.isActive('heading', { level: 2 })}\n title=\"Heading 2\"\n >\n H2\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}\n active={editor.isActive('heading', { level: 3 })}\n title=\"Heading 3\"\n >\n H3\n </ToolbarButton>\n\n <div className=\"w-px bg-gray-300 dark:bg-slate-600 mx-1\" />\n\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n active={editor.isActive('bulletList')}\n title=\"Bullet list\"\n >\n •\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n active={editor.isActive('orderedList')}\n title=\"Ordered list\"\n >\n 1.\n </ToolbarButton>\n\n <div className=\"w-px bg-gray-300 dark:bg-slate-600 mx-1\" />\n\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleCodeBlock().run()}\n active={editor.isActive('codeBlock')}\n title=\"Code block\"\n >\n {'<>'}\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleCode().run()}\n active={editor.isActive('code')}\n title=\"Inline code\"\n >\n {\"`\"}\n </ToolbarButton>\n\n <div className=\"w-px bg-gray-300 dark:bg-slate-600 mx-1\" />\n\n <ToolbarButton\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n title=\"Horizontal rule\"\n >\n —\n </ToolbarButton>\n </div>\n\n {/* Editor content */}\n <EditorContent editor={editor} />\n </div>\n )\n}\n\n/**\n * ToolbarButton — Simple toolbar button\n */\nfunction ToolbarButton({\n onClick,\n active,\n title,\n children,\n}: {\n onClick: () => void\n active?: boolean\n title?: string\n children: React.ReactNode\n}) {\n return (\n <button\n onClick={onClick}\n title={title}\n className={`\n px-2 py-1 rounded text-sm font-medium transition-colors\n ${active\n ? 'bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400'\n : 'bg-transparent text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-slate-700'\n }\n `}\n >\n {children}\n </button>\n )\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\n/**\n * ThemeBuilder — Visual theme editor shell\n *\n * Consumer provides:\n * - initialTheme: Current theme data\n * - onSave: (themeData) => void\n * - onPreview: (html) => void\n *\n * Includes:\n * - Icon strip sidebar (AI, Variables, Styles)\n * - Variables panel (Color Schema + Typography + Page Layout)\n * - Preview iframe\n *\n * This is the shell. Consumer handles:\n * - API persistence\n * - Preview rendering (Tailwind + Alpine)\n * - Theme data structure\n */\n\nexport interface Theme {\n id: string\n name: string\n variables?: Record<string, any>\n colorSchemas?: Array<any>\n typography?: Record<string, any>\n [key: string]: any\n}\n\nexport interface ThemeBuilderProps {\n theme: Theme\n onSave: (theme: Theme) => void\n onPreviewUpdate?: (previewHtml: string) => void\n previewUrl?: string\n}\n\ntype SidebarTab = 'ai' | 'variables' | 'styles'\n\nexport function ThemeBuilder({ theme, onSave, onPreviewUpdate, previewUrl }: ThemeBuilderProps) {\n const [sidebarTab, setSidebarTab] = useState<SidebarTab>('variables')\n const [iframeLoaded, setIframeLoaded] = useState(false)\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const handleSave = useCallback(() => {\n onSave(theme)\n }, [theme, onSave])\n\n const handlePreviewReload = useCallback(() => {\n if (iframeRef.current) {\n iframeRef.current.src = previewUrl || 'about:blank'\n }\n }, [previewUrl])\n\n return (\n <div className=\"flex h-screen bg-[#0f1117] text-white overflow-hidden\">\n {/* Left sidebar — icon strip */}\n <div className=\"w-11 bg-[#010409] border-r border-white/10 flex flex-col items-center py-4 gap-6\">\n {/* AI Tab */}\n <button\n onClick={() => setSidebarTab('ai')}\n title=\"AI Assistant\"\n className={`p-2 rounded transition-colors ${\n sidebarTab === 'ai'\n ? 'bg-[#287f71]/20 text-[#287f71]'\n : 'text-white/40 hover:text-white/60'\n }`}\n >\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z\" />\n </svg>\n </button>\n\n {/* Variables Tab */}\n <button\n onClick={() => setSidebarTab('variables')}\n title=\"Variables\"\n className={`p-2 rounded transition-colors ${\n sidebarTab === 'variables'\n ? 'bg-[#287f71]/20 text-[#287f71]'\n : 'text-white/40 hover:text-white/60'\n }`}\n >\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <circle cx=\"6\" cy=\"6\" r=\"2\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n <circle cx=\"18\" cy=\"18\" r=\"2\" />\n <path d=\"M8 8l8 8M6 18l12-12\" />\n </svg>\n </button>\n\n {/* Styles Tab */}\n <button\n onClick={() => setSidebarTab('styles')}\n title=\"Styles\"\n className={`p-2 rounded transition-colors ${\n sidebarTab === 'styles'\n ? 'bg-[#287f71]/20 text-[#287f71]'\n : 'text-white/40 hover:text-white/60'\n }`}\n >\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M3 6h18M3 12h18M3 18h18\" />\n </svg>\n </button>\n </div>\n\n {/* Middle — Variables panel */}\n <div className=\"w-80 bg-[#13151e] border-r border-white/10 overflow-y-auto p-4\">\n {sidebarTab === 'variables' && (\n <div className=\"space-y-6\">\n <h2 className=\"text-lg font-semibold\">Theme Variables</h2>\n <div className=\"text-sm text-white/50 p-4 bg-white/5 rounded\">\n 💡 Variables panel component — render color schema, typography, page layout sections here\n </div>\n <button\n onClick={handleSave}\n className=\"w-full px-4 py-2 bg-[#287f71] text-white rounded-lg hover:bg-[#287f71]/80 transition-colors font-medium\"\n >\n Save Changes\n </button>\n </div>\n )}\n\n {sidebarTab === 'ai' && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-semibold\">AI Assistant</h2>\n <div className=\"text-sm text-white/50 p-4 bg-white/5 rounded\">\n 🤖 AI chat component — connect to OpenAI/Anthropic API\n </div>\n </div>\n )}\n\n {sidebarTab === 'styles' && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-semibold\">Style Classes</h2>\n <div className=\"text-sm text-white/50 p-4 bg-white/5 rounded\">\n 🎨 Style Classes editor — coming soon\n </div>\n </div>\n )}\n </div>\n\n {/* Right — Preview iframe */}\n <div className=\"flex-1 flex flex-col bg-[#161b22]\">\n {/* Topbar */}\n <div className=\"h-12 bg-[#0d1117] border-b border-white/10 flex items-center justify-between px-4\">\n <h1 className=\"text-sm font-medium\">Preview</h1>\n <button\n onClick={handlePreviewReload}\n className=\"px-3 py-1 text-xs bg-white/10 hover:bg-white/20 rounded transition-colors\"\n >\n Reload\n </button>\n </div>\n\n {/* Preview iframe */}\n <iframe\n ref={iframeRef}\n src={previewUrl || 'about:blank'}\n onLoad={() => setIframeLoaded(true)}\n className=\"flex-1 border-0\"\n title=\"Theme preview\"\n />\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { Button } from '../primitives/button'\nimport { Input } from '../primitives/input'\n\n/**\n * ColorSchemaPanel — Color token editor with light/dark support\n *\n * Consumer provides:\n * - schemas: Array of color schemas\n * - onSave: (schemas) => void\n * - onSchemaSelect: (schemaId) => void\n */\n\nexport interface ColorSchema {\n id: string\n name: string\n light: Record<string, string>\n dark: Record<string, string>\n}\n\nexport function ColorSchemaPanel({\n schemas = [],\n activeSchemaId,\n onSchemaSelect,\n onSchemaSave,\n onSchemaCreate,\n}: {\n schemas: ColorSchema[]\n activeSchemaId?: string\n onSchemaSelect: (id: string) => void\n onSchemaSave: (schema: ColorSchema) => void\n onSchemaCreate: (name: string) => void\n}) {\n const [showCreate, setShowCreate] = useState(false)\n const [newName, setNewName] = useState('')\n const activeSchema = schemas.find((s) => s.id === activeSchemaId)\n\n const handleCreate = () => {\n if (newName.trim()) {\n onSchemaCreate(newName)\n setNewName('')\n setShowCreate(false)\n }\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-semibold text-white\">Color Schemas</h3>\n <button\n onClick={() => setShowCreate(!showCreate)}\n className=\"text-xs px-2 py-1 bg-[#287f71] text-white rounded hover:bg-[#287f71]/80 transition-colors\"\n >\n + New\n </button>\n </div>\n\n {/* Create new schema */}\n {showCreate && (\n <div className=\"flex gap-2 p-3 bg-white/5 rounded-lg\">\n <Input\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"Schema name\"\n className=\"h-8 text-xs bg-white/10 border-white/20 text-white placeholder:text-white/30\"\n />\n <button\n onClick={handleCreate}\n className=\"px-3 py-1 text-xs bg-[#287f71] text-white rounded hover:bg-[#287f71]/80\"\n >\n Create\n </button>\n <button\n onClick={() => setShowCreate(false)}\n className=\"px-3 py-1 text-xs bg-white/10 text-white/70 rounded hover:bg-white/20\"\n >\n Cancel\n </button>\n </div>\n )}\n\n {/* Schema list */}\n <div className=\"space-y-2\">\n {schemas.map((schema) => (\n <button\n key={schema.id}\n onClick={() => onSchemaSelect(schema.id)}\n className={`w-full p-3 rounded-lg border-2 transition-colors text-left ${\n activeSchemaId === schema.id\n ? 'border-[#287f71] bg-[#287f71]/10'\n : 'border-white/10 bg-white/5 hover:border-white/20'\n }`}\n >\n <p className=\"text-sm font-medium text-white\">{schema.name}</p>\n <p className=\"text-xs text-white/50\">\n {Object.keys(schema.light).length} tokens\n </p>\n </button>\n ))}\n </div>\n\n {/* Active schema preview */}\n {activeSchema && (\n <div className=\"p-3 bg-white/5 rounded-lg border border-white/10 space-y-3\">\n <h4 className=\"text-xs font-semibold text-white\">Light Mode</h4>\n <div className=\"grid grid-cols-4 gap-2\">\n {Object.entries(activeSchema.light).slice(0, 8).map(([key, color]) => (\n <div\n key={key}\n className=\"rounded border border-white/10 overflow-hidden\"\n title={key}\n >\n <div\n className=\"h-6\"\n style={{ backgroundColor: color }}\n />\n </div>\n ))}\n </div>\n\n <h4 className=\"text-xs font-semibold text-white mt-3\">Dark Mode</h4>\n <div className=\"grid grid-cols-4 gap-2\">\n {Object.entries(activeSchema.dark).slice(0, 8).map(([key, color]) => (\n <div\n key={key}\n className=\"rounded border border-white/10 overflow-hidden\"\n title={key}\n >\n <div\n className=\"h-6\"\n style={{ backgroundColor: color }}\n />\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { Label } from '../primitives/label'\nimport { Input } from '../primitives/input'\n\n/**\n * TypographyPanel — Font & text settings editor\n *\n * Consumer provides:\n * - typography: Typography settings object\n * - onSave: (typography) => void\n */\n\nexport interface TextPreset {\n size: Record<string, number>\n sizeUnit: string\n lineHeight: string\n fontRole: string\n weight: number\n letterSpacing: string\n}\n\nexport interface TypographySettings {\n fonts: Record<string, string>\n body: TextPreset\n headings: Record<string, TextPreset>\n}\n\nexport function TypographyPanel({\n typography,\n onSave,\n}: {\n typography: TypographySettings\n onSave: (settings: TypographySettings) => void\n}) {\n const [expanded, setExpanded] = useState<string | null>('body')\n\n const handleFontChange = (role: string, font: string) => {\n const updated = {\n ...typography,\n fonts: { ...typography.fonts, [role]: font },\n }\n onSave(updated)\n }\n\n const handlePresetChange = (presetKey: string, field: string, value: any) => {\n const isHeading = presetKey.startsWith('h')\n const updated = isHeading\n ? {\n ...typography,\n headings: {\n ...typography.headings,\n [presetKey]: { ...typography.headings[presetKey], [field]: value },\n },\n }\n : {\n ...typography,\n body: { ...typography.body, [field]: value },\n }\n onSave(updated)\n }\n\n return (\n <div className=\"space-y-4\">\n <h3 className=\"text-sm font-semibold text-white\">Typography</h3>\n\n {/* Fonts section */}\n <div className=\"space-y-2 border-b border-white/10 pb-4\">\n <h4 className=\"text-xs font-medium text-white/70 uppercase\">Fonts</h4>\n {Object.entries(typography.fonts || {}).map(([role, font]) => (\n <div key={role} className=\"flex flex-col gap-1\">\n <Label className=\"text-xs text-white/60\">{role}</Label>\n <Input\n value={font}\n onChange={(e) => handleFontChange(role, e.target.value)}\n placeholder=\"Font name\"\n className=\"h-8 text-xs bg-white/10 border-white/20 text-white placeholder:text-white/30\"\n />\n </div>\n ))}\n </div>\n\n {/* Text presets section */}\n <div className=\"space-y-2\">\n <h4 className=\"text-xs font-medium text-white/70 uppercase\">Text Styles</h4>\n\n {/* Body */}\n <button\n onClick={() => setExpanded(expanded === 'body' ? null : 'body')}\n className=\"w-full text-left p-2 rounded hover:bg-white/5 transition-colors\"\n >\n <span className=\"text-sm font-medium text-white\">Body Text</span>\n <svg\n className={`w-3 h-3 inline ml-2 transition-transform ${expanded === 'body' ? 'rotate-180' : ''}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n {expanded === 'body' && (\n <div className=\"ml-2 space-y-2 p-2 bg-white/5 rounded\">\n <div>\n <Label className=\"text-xs text-white/60\">Size</Label>\n <Input\n type=\"number\"\n value={typography.body?.size?.desktop || 16}\n onChange={(e) => handlePresetChange('body', 'size', { desktop: +e.target.value })}\n className=\"h-8 text-xs bg-white/10 border-white/20 text-white\"\n />\n </div>\n <div>\n <Label className=\"text-xs text-white/60\">Line Height</Label>\n <Input\n value={typography.body?.lineHeight || '1.5'}\n onChange={(e) => handlePresetChange('body', 'lineHeight', e.target.value)}\n className=\"h-8 text-xs bg-white/10 border-white/20 text-white\"\n />\n </div>\n </div>\n )}\n\n {/* Headings */}\n {['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].map((heading) => (\n <button\n key={heading}\n onClick={() => setExpanded(expanded === heading ? null : heading)}\n className=\"w-full text-left p-2 rounded hover:bg-white/5 transition-colors\"\n >\n <span className=\"text-sm font-medium text-white uppercase\">{heading}</span>\n <svg\n className={`w-3 h-3 inline ml-2 transition-transform ${expanded === heading ? 'rotate-180' : ''}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n ))}\n </div>\n\n {/* Save */}\n <button\n onClick={() => onSave(typography)}\n className=\"w-full px-4 py-2 bg-[#287f71] text-white rounded-lg hover:bg-[#287f71]/80 transition-colors font-medium text-sm mt-4\"\n >\n Save Typography\n </button>\n </div>\n )\n}\n","import useSWR from 'swr'\n\ninterface UseFetchOptions {\n /** Custom fetcher override */\n fetcher?: (url: string) => Promise<any>\n /** SWR options */\n revalidateOnFocus?: boolean\n refreshInterval?: number\n /** Don't fetch until condition is true */\n enabled?: boolean\n}\n\n/**\n * useFetch - SWR-powered data fetching hook\n * \n * Uses global SWR config by default (from SWRProvider)\n * Supports fetch, axios, or any custom fetcher\n * \n * Basic:\n * ```tsx\n * const { data, isLoading } = useFetch('/api/users')\n * ```\n * \n * With axios:\n * ```tsx\n * import axios from 'axios'\n * const { data } = useFetch('/api/users', { \n * fetcher: (url) => axios.get(url).then(r => r.data) \n * })\n * ```\n * \n * Conditional:\n * ```tsx\n * const { data } = useFetch(userId ? `/api/users/${userId}` : null)\n * ```\n */\nexport function useFetch<T = any>(url: string | null, options?: UseFetchOptions) {\n const { data, error, isLoading, isValidating, mutate } = useSWR<T>(\n options?.enabled === false ? null : url,\n options?.fetcher,\n {\n revalidateOnFocus: options?.revalidateOnFocus,\n refreshInterval: options?.refreshInterval,\n }\n )\n\n return {\n data,\n isLoading,\n isValidating,\n error,\n isError: !!error,\n mutate,\n }\n}\n","import { useSession } from 'next-auth/react'\n\n/**\n * useAuth - Hook to access current session and auth methods\n * \n * Returns the NextAuth useSession hook result\n * \n * Usage:\n * ```tsx\n * import { useAuth } from '@webdevarif/dashui-setup/hooks'\n * \n * function Profile() {\n * const { data: session, status } = useAuth()\n * \n * if (status === 'loading') return <div>Loading...</div>\n * if (status === 'unauthenticated') return <div>Not logged in</div>\n * \n * return <div>Welcome {session?.user?.name}</div>\n * }\n * ```\n */\nexport function useAuth() {\n return useSession()\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthShellProps {\n children: React.ReactNode\n /** Optional background pattern — 'dots' | 'grid' | 'none' */\n pattern?: 'dots' | 'grid' | 'none'\n maxWidth?: string\n}\n\nexport function AuthShell({ children, pattern = 'dots', maxWidth = '520px' }: AuthShellProps) {\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px',\n background: 'var(--background)',\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n {pattern === 'dots' && (\n <div\n aria-hidden\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage:\n 'radial-gradient(circle, var(--border) 1px, transparent 1px)',\n backgroundSize: '28px 28px',\n opacity: 0.5,\n pointerEvents: 'none',\n }}\n />\n )}\n {pattern === 'grid' && (\n <div\n aria-hidden\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage:\n 'linear-gradient(var(--border) 1px, transparent 1px), linear-gradient(90deg, var(--border) 1px, transparent 1px)',\n backgroundSize: '32px 32px',\n opacity: 0.4,\n pointerEvents: 'none',\n }}\n />\n )}\n <div style={{ position: 'relative', zIndex: 1, width: '100%', maxWidth }}>\n {children}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthCardProps {\n children: React.ReactNode\n padding?: string\n}\n\nexport function AuthCard({ children, padding = '24px 28px' }: AuthCardProps) {\n return (\n <div\n style={{\n background: 'var(--card)',\n border: '1px solid var(--border)',\n borderRadius: 'calc(var(--radius, 0.5rem) * 1.5)',\n boxShadow: '0 4px 32px rgba(0,0,0,0.06), 0 1px 4px rgba(0,0,0,0.04)',\n padding,\n width: '100%',\n }}\n >\n {children}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthLogoProps {\n /** App name shown next to the logo mark */\n appName?: string\n /** Single letter shown inside the logo box (fallback when no imageUrl) */\n letter?: string\n /** Image URL — when provided, shows image instead of letter box */\n imageUrl?: string\n /** Image/logo size in px */\n size?: number\n}\n\nexport function AuthLogo({ appName = 'Builify CMS', letter = 'B', imageUrl, size = 36 }: AuthLogoProps) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '10px', marginBottom: '28px' }}>\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={appName}\n width={size}\n height={size}\n style={{ borderRadius: 'calc(var(--radius, 0.5rem) * 1.2)', flexShrink: 0, display: 'block' }}\n />\n ) : (\n <div\n style={{\n width: size,\n height: size,\n background: 'var(--primary)',\n borderRadius: 'calc(var(--radius, 0.5rem) * 1.2)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--primary-foreground)',\n fontWeight: 800,\n fontSize: `${size * 0.44}px`,\n flexShrink: 0,\n }}\n >\n {letter}\n </div>\n )}\n <span\n style={{\n fontWeight: 700,\n fontSize: '1.125rem',\n color: 'var(--foreground)',\n letterSpacing: '-0.02em',\n }}\n >\n {appName}\n </span>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthHeaderProps {\n title: string\n description?: string\n}\n\nexport function AuthHeader({ title, description }: AuthHeaderProps) {\n return (\n <div style={{ marginBottom: '24px', textAlign: 'center' }}>\n <h1\n style={{\n fontSize: '1.375rem',\n fontWeight: 700,\n color: 'var(--foreground)',\n margin: 0,\n letterSpacing: '-0.02em',\n }}\n >\n {title}\n </h1>\n {description && (\n <p\n style={{\n marginTop: '6px',\n fontSize: '0.875rem',\n color: 'var(--muted-foreground)',\n lineHeight: 1.5,\n }}\n >\n {description}\n </p>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthFieldProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label: string\n error?: string\n hint?: string\n rightLabel?: React.ReactNode\n}\n\nexport function AuthField({ label, error, hint, rightLabel, id, ...props }: AuthFieldProps) {\n const fieldId = id ?? label.toLowerCase().replace(/\\s+/g, '-')\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <label\n htmlFor={fieldId}\n style={{\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--foreground)',\n }}\n >\n {label}\n </label>\n {rightLabel && (\n <span style={{ fontSize: '0.8125rem' }}>{rightLabel}</span>\n )}\n </div>\n <input\n id={fieldId}\n style={{\n height: '40px',\n padding: '0 12px',\n background: 'var(--background)',\n border: `1px solid ${error ? 'var(--destructive)' : 'var(--border)'}`,\n borderRadius: 'var(--radius, 0.5rem)',\n color: 'var(--foreground)',\n fontSize: '0.875rem',\n outline: 'none',\n width: '100%',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n }}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = 'var(--ring)'\n e.currentTarget.style.boxShadow = '0 0 0 3px color-mix(in oklab, var(--ring) 20%, transparent)'\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = error ? 'var(--destructive)' : 'var(--border)'\n e.currentTarget.style.boxShadow = 'none'\n props.onBlur?.(e)\n }}\n {...props}\n />\n {error && (\n <p style={{ fontSize: '0.8rem', color: 'var(--destructive)', margin: 0 }}>{error}</p>\n )}\n {hint && !error && (\n <p style={{ fontSize: '0.8rem', color: 'var(--muted-foreground)', margin: 0 }}>{hint}</p>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n loading?: boolean\n variant?: 'primary' | 'outline' | 'ghost'\n fullWidth?: boolean\n}\n\nexport function AuthButton({\n loading,\n variant = 'primary',\n fullWidth = true,\n children,\n disabled,\n style,\n ...props\n}: AuthButtonProps) {\n const base: React.CSSProperties = {\n height: '42px',\n padding: '0 20px',\n borderRadius: 'var(--radius, 0.5rem)',\n fontSize: '0.875rem',\n fontWeight: 600,\n cursor: loading || disabled ? 'not-allowed' : 'pointer',\n opacity: loading || disabled ? 0.65 : 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n border: 'none',\n outline: 'none',\n transition: 'opacity 0.15s, filter 0.15s',\n width: fullWidth ? '100%' : 'auto',\n ...style,\n }\n\n const variantStyles: Record<string, React.CSSProperties> = {\n primary: {\n background: 'var(--primary)',\n color: 'var(--primary-foreground)',\n },\n outline: {\n background: 'transparent',\n color: 'var(--foreground)',\n border: '1px solid var(--border)',\n },\n ghost: {\n background: 'transparent',\n color: 'var(--foreground)',\n },\n }\n\n return (\n <button\n disabled={loading || disabled}\n style={{ ...base, ...variantStyles[variant] }}\n onMouseEnter={(e) => {\n if (!loading && !disabled) e.currentTarget.style.filter = 'brightness(0.9)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.filter = 'none'\n }}\n {...props}\n >\n {loading ? (\n <>\n <span\n style={{\n width: 14,\n height: 14,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n display: 'inline-block',\n animation: 'dashui-spin 0.7s linear infinite',\n }}\n />\n {children}\n </>\n ) : children}\n </button>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\nexport function AuthDivider({ label = 'or' }: { label?: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', margin: '20px 0' }}>\n <div style={{ flex: 1, height: 1, background: 'var(--border)' }} />\n <span style={{ fontSize: '0.75rem', color: 'var(--muted-foreground)', userSelect: 'none' }}>\n {label}\n </span>\n <div style={{ flex: 1, height: 1, background: 'var(--border)' }} />\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\ninterface AuthFootnoteProps {\n text: string\n linkText: string\n linkHref: string\n}\n\nexport function AuthFootnote({ text, linkText, linkHref }: AuthFootnoteProps) {\n return (\n <p style={{\n textAlign: 'center',\n marginTop: '20px',\n fontSize: '0.8125rem',\n color: 'var(--muted-foreground)',\n }}>\n {text}{' '}\n <a\n href={linkHref}\n style={{\n color: 'var(--primary)',\n fontWeight: 600,\n textDecoration: 'none',\n }}\n onMouseEnter={(e) => e.currentTarget.style.textDecoration = 'underline'}\n onMouseLeave={(e) => e.currentTarget.style.textDecoration = 'none'}\n >\n {linkText}\n </a>\n </p>\n )\n}\n","// ─── Primitives ──────────────────────────────────────────────\nexport * from './components/primitives/button'\nexport * from './components/primitives/badge'\nexport * from './components/primitives/card'\nexport * from './components/primitives/checkbox'\nexport * from './components/primitives/dialog'\nexport * from './components/primitives/dropdown-menu'\nexport * from './components/primitives/input'\nexport * from './components/primitives/label'\nexport * from './components/primitives/popover'\nexport * from './components/primitives/select'\nexport * from './components/primitives/separator'\nexport * from './components/primitives/skeleton'\nexport * from './components/primitives/switch'\nexport * from './components/primitives/tabs'\nexport * from './components/primitives/textarea'\nexport * from './components/primitives/tooltip'\n\n// ─── Layout ──────────────────────────────────────────────────\nexport * from './components/layout/app-shell'\nexport * from './components/layout/sidebar'\nexport * from './components/layout/top-bar'\nexport * from './components/layout/page'\nexport * from './components/layout/page-section'\nexport * from './components/layout/search-bar'\nexport * from './components/layout/notification-bell'\nexport * from './components/layout/theme-toggle'\nexport * from './components/layout/dashboard-layout'\n\n// ─── Data Display ─────────────────────────────────────────────\nexport * from './components/data/data-table'\nexport * from './components/data/empty-state'\nexport * from './components/data/pagination'\nexport * from './components/data/stats'\nexport * from './components/data/plan-badge'\nexport * from './components/data/storage-bar'\n\n// ─── Media ────────────────────────────────────────────────────\nexport * from './components/media'\n\n// ─── Form ─────────────────────────────────────────────────────\nexport * from './components/form/form-field'\nexport * from './components/form/form-layout'\nexport * from './components/form/form-section'\nexport * from './components/form/local-input'\nexport * from './components/form/responsive-size-device-icon'\nexport * from './components/form/responsive-size-field'\nexport type { DeviceKey } from './components/form/responsive-types'\nexport { DEVICES, DEVICE_ICONS } from './components/form/responsive-types'\n\n// ─── Feedback ─────────────────────────────────────────────────\nexport * from './components/feedback/alert'\nexport * from './components/feedback/confirm-dialog'\nexport * from './components/feedback/loading-spinner'\n\n// ─── Content ──────────────────────────────────────────────────\nexport { PostStatusBadge } from './components/content/post-status-badge'\nexport type { PostStatus, PostStatusBadgeProps } from './components/content/post-status-badge'\nexport { PostListTable } from './components/content/post-list-table'\nexport type { PostListItem, PostListTableProps } from './components/content/post-list-table'\nexport { PostFiltersBar } from './components/content/post-filters-bar'\nexport type { PostFiltersBarProps } from './components/content/post-filters-bar'\nexport { PostEditorShell } from './components/content/post-editor-shell'\nexport type { PostEditorShellProps } from './components/content/post-editor-shell'\nexport { SlugInput } from './components/content/slug-input'\nexport type { SlugInputProps } from './components/content/slug-input'\nexport { PostSidebarSection } from './components/content/post-sidebar-section'\nexport type { PostSidebarSectionProps } from './components/content/post-sidebar-section'\n\n// ─── UI Inputs ────────────────────────────────────────────────\nexport { HslColorInput } from './components/ui/hsl-color-input'\nexport { ColorPicker, ColorPickerSelection, ColorPickerHue, ColorPickerAlpha, ColorPickerHexOutput, ColorPickerEyeDropper, ColorPickerOutput, ColorPickerFormat, useColorPicker } from './components/ui/color-picker'\n\n// ─── Editors (v0.7+) ──────────────────────────────────────────\nexport { TiptapEditor } from './components/editors/tiptap-editor'\n\n// // Coming soon: TiptapEditor, MarkdownEditor, CodeEditor\n// See: src/components/editors/README.md\n\n// ─── CMS Category (v1.0+) ────────────────────────────────────\nexport * from './components/cms'\n// See: src/components/cms/README.md\n\n// ─── E-commerce Category (v1.0+) ──────────────────────────────\n// Coming soon: ProductCard, ProductGallery, PricingTable, ReviewDisplay, CartWidget\n// See: src/components/ecommerce/README.md\n\n// ─── Hooks ────────────────────────────────────────────────────\nexport * from './hooks'\n\n// ─── Utils ────────────────────────────────────────────────────\nexport * from './lib/utils'\n\n// ─── Auth Components ──────────────────────────────────────────\nexport * from './components/auth'\n\n// ─── Skeleton ─────────────────────────────────────────────────\nexport { Skeleton } from './components/Skeleton'\n\n// ─── Theme (next-themes re-export) ────────────────────────────\nexport { ThemeProvider, useTheme } from 'next-themes'\n\n// Setup (v1.3+) - Zero-config providers + hooks for Next.js + NextAuth + next-intl + SWR\n// Import from @webdevarif/dashui/setup instead of main package\n// export * from './setup/providers'\n// export * from './setup/hooks'\n// (setup/lib is optional - don't export by default)\n"],"mappings":"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","names":["cva","jsx","cva","React","jsx","React","jsx","React","jsx","React","Check","jsx","jsxs","Check","React","jsx","React","jsx","Label","React","jsx","React","Check","jsx","jsxs","Check","React","jsx","Separator","jsx","React","jsx","React","jsx","React","jsx","React","jsx","jsx","jsxs","React","ChevronDown","jsx","jsxs","Icon","ChevronDown","jsx","jsxs","React","ChevronRight","jsx","jsxs","ChevronRight","jsx","jsxs","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","Icon","React","ChevronRight","jsx","jsxs","ChevronRight","jsx","jsxs","Icon","jsx","jsx","jsxs","useState","useRef","jsx","jsxs","X","jsx","jsxs","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","Label","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","jsx","useState","jsx","jsxs","jsx","jsxs","useState","useState","jsx","jsxs","useState","X","jsx","jsxs","Icon","X","jsx","sizeMap","jsx","jsxs","jsx","jsxs","React","jsx","Skeleton","jsx","jsxs","Skeleton","jsx","jsxs","IconPlus","jsx","jsxs","IconMoreHorizontal","jsx","jsxs","React","jsx","jsxs","useState","useRef","useEffect","useCallback","Color","Popover","useEffect","useMemo","useRef","useState","jsx","jsxs","useState","useRef","useEffect","useMemo","jsx","jsxs","Color","useEffect","useState","useRef","useCallback","jsx","jsxs","editor","useState","useCallback","useRef","jsx","jsxs","useState","jsx","jsxs","useState","useState","jsx","jsxs","useState","Label","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","useTheme"]}