@capy-vn/ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +299 -0
- package/dist/index.browser.js +51746 -0
- package/dist/index.cjs +5682 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1391 -0
- package/dist/index.d.ts +1391 -0
- package/dist/index.js +5435 -0
- package/dist/index.js.map +1 -0
- package/package.json +82 -0
- package/src/styles/globals.css +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/accordion.tsx","../src/components/ui/alert.tsx","../src/components/ui/button.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/avatar.tsx","../src/components/ui/badge.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/calendar.tsx","../src/components/ui/card.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/popover.tsx","../src/components/ui/date-picker.tsx","../src/components/ui/separator.tsx","../src/components/ui/date-range-picker.tsx","../src/components/ui/time-picker.tsx","../src/components/ui/datetime-picker.tsx","../src/components/ui/datetime-range-picker.tsx","../src/components/ui/dialog.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/file-upload.tsx","../src/components/ui/label.tsx","../src/components/ui/form.tsx","../src/components/ui/input.tsx","../src/components/ui/multi-select.tsx","../src/components/ui/notification.tsx","../src/components/ui/number-input.tsx","../src/components/ui/otp-input.tsx","../src/components/ui/progress.tsx","../src/components/ui/radio-group.tsx","../src/components/ui/scroll-area.tsx","../src/hooks/useDebounce.ts","../src/components/ui/search-select.tsx","../src/components/ui/select.tsx","../src/components/ui/sheet.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/slider.tsx","../src/components/ui/switch.tsx","../src/components/ui/table.tsx","../src/components/ui/tabs.tsx","../src/components/ui/textarea.tsx","../src/components/ui/toaster.tsx","../src/components/ui/tooltip.tsx","../src/components/layout/container.tsx","../src/components/layout/page-layout.tsx","../src/components/layout/sidebar-layout.tsx","../src/components/layout/stack.tsx","../src/components/layout/admin-layout-context.ts","../src/components/layout/admin-layout.tsx","../src/components/layout/admin-sidebar.tsx","../src/components/layout/admin-header.tsx","../src/components/layout/admin-footer.tsx","../src/components/layout/admin-content.tsx","../src/components/layout/public-layout-context.ts","../src/components/layout/public-layout.tsx","../src/components/layout/public-navbar.tsx","../src/components/layout/public-footer.tsx","../src/components/navigation/pagination.tsx","../src/components/navigation/stepper.tsx","../src/components/forms/form-checkbox.tsx","../src/components/forms/form-field.tsx","../src/components/forms/form-date-picker.tsx","../src/components/forms/form-date-range-picker.tsx","../src/components/forms/form-datetime-picker.tsx","../src/components/forms/form-datetime-range-picker.tsx","../src/components/forms/form-file-upload.tsx","../src/components/forms/form-input.tsx","../src/components/forms/form-multi-select.tsx","../src/components/forms/form-number-input.tsx","../src/components/forms/form-otp-input.tsx","../src/components/forms/form-select.tsx","../src/components/forms/form-slider.tsx","../src/components/forms/form-switch.tsx","../src/components/forms/form-textarea.tsx","../src/components/forms/form-time-picker.tsx","../src/components/data-display/data-table.tsx","../src/components/data-display/description-list.tsx","../src/components/data-display/empty-state.tsx","../src/components/data-display/stat-card.tsx","../src/components/data-display/timeline.tsx","../src/components/feedback/confirm-dialog.tsx","../src/components/feedback/loading-spinner.tsx","../src/components/feedback/loading-overlay.tsx","../src/components/feedback/result.tsx","../src/components/sections/section.tsx","../src/components/sections/section-heading.tsx","../src/components/sections/hero-section.tsx","../src/components/sections/feature-section.tsx","../src/components/sections/cta-section.tsx","../src/components/sections/stats-section.tsx","../src/components/sections/testimonial-section.tsx","../src/components/sections/pricing-section.tsx","../src/components/sections/faq-section.tsx","../src/components/sections/team-section.tsx","../src/hooks/useDisclosure.ts","../src/hooks/useLocalStorage.ts","../src/hooks/usePagination.ts"],"names":["twMerge","clsx","React","jsx","jsxs","ChevronDown","cva","React2","React3","Slot","Loader2","Slottable","AlertDialogPrimitive","React4","React5","AvatarPrimitive","React6","ChevronRight","MoreHorizontal","locale","vi","DayPicker","ChevronLeft","React7","React8","CheckboxPrimitive","Minus","Check","PopoverPrimitive","React9","CalendarIcon","format","React10","SeparatorPrimitive","startOfDay","subDays","startOfWeek","startOfMonth","isSameDay","React11","Fragment","React12","Clock","pad","React13","PRESETS","isActivePreset","dateToTimeString","mergeDateTime","React14","DialogPrimitive","React15","X","DropdownMenuPrimitive","React16","Circle","React17","Upload","FileIcon","Label","React18","LabelPrimitive","FormProvider","React19","Controller","useFormContext","React20","React21","Bell","Info","CheckCircle2","AlertTriangle","XCircle","React22","React23","Plus","React24","React25","ProgressPrimitive","RadioGroup","React26","RadioGroupPrimitive","React27","ScrollAreaPrimitive","useState","useEffect","React28","ChevronsUpDown","SearchIcon","SelectPrimitive","React29","ChevronUp","SheetPrimitive","React30","React31","React32","SwitchPrimitives","React33","TabsPrimitive","React34","React35","Sonner","TooltipPrimitive","React36","React37","React38","React39","React40","React41","Icon","User","Settings","LogOut","React42","PanelLeft","PanelLeftClose","React43","React44","React45","React46","React47","Menu","Linkedin","Twitter","Github","Instagram","Youtube","Facebook","Mail","Globe","React48","ChevronsLeft","ChevronsRight","React49","React50","table","useReactTable","getCoreRowModel","getSortedRowModel","getExpandedRowModel","getFilteredRowModel","Search","SlidersHorizontal","flexRender","_","TrendingUp","TrendingDown","React51","React52","ReactDOM","AlertCircle","React53","alignClass","React54","renderAction","columnsClass","getInitials","React55","useCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport function formatCurrency(\n value: number,\n currency = 'VND',\n locale = 'vi-VN',\n): string {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n }).format(value)\n}\n\nexport function formatNumber(value: number, locale = 'vi-VN'): string {\n return new Intl.NumberFormat(locale).format(value)\n}\n\nexport function formatDate(\n date: Date | string | number,\n options: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n },\n locale = 'vi-VN',\n): string {\n return new Intl.DateTimeFormat(locale, options).format(new Date(date))\n}\n\nexport function slugify(text: string): string {\n return text\n .toLowerCase()\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .replace(/[^a-z0-9\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .trim()\n}\n\nexport function truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text\n return `${text.slice(0, maxLength)}...`\n}\n","'use client'\n\nimport * as React from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\n/* ── Root context ── */\ninterface AccordionContextValue {\n openItems: string[]\n toggle: (value: string) => void\n collapsible: boolean\n}\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null)\n\n/* ── Item context (passes value down to Trigger + Content) ── */\nconst AccordionItemContext = React.createContext<string>('')\n\n/* ── Accordion root ── */\nexport interface AccordionProps {\n type?: 'single' | 'multiple'\n collapsible?: boolean\n defaultValue?: string | string[]\n value?: string | string[]\n onValueChange?: (value: string | string[]) => void\n children: React.ReactNode\n className?: string\n}\n\nfunction Accordion({\n type = 'single',\n collapsible = false,\n defaultValue,\n value: controlledValue,\n onValueChange,\n children,\n className,\n}: AccordionProps) {\n const normalize = (v: string | string[] | undefined): string[] =>\n !v ? [] : Array.isArray(v) ? v : [v]\n\n const [internal, setInternal] = React.useState<string[]>(() => normalize(defaultValue))\n const controlled = controlledValue !== undefined\n const openItems = controlled ? normalize(controlledValue) : internal\n\n const toggle = React.useCallback(\n (item: string) => {\n let next: string[]\n if (type === 'single') {\n if (openItems.includes(item)) {\n next = collapsible ? [] : openItems\n } else {\n next = [item]\n }\n } else {\n next = openItems.includes(item)\n ? openItems.filter((v) => v !== item)\n : [...openItems, item]\n }\n if (!controlled) setInternal(next)\n onValueChange?.(type === 'single' ? (next[0] ?? '') : next)\n },\n [type, collapsible, openItems, controlled, onValueChange],\n )\n\n return (\n <AccordionContext.Provider value={{ openItems, toggle, collapsible }}>\n <div className={cn('w-full', className)}>{children}</div>\n </AccordionContext.Provider>\n )\n}\nAccordion.displayName = 'Accordion'\n\n/* ── AccordionItem ── */\nexport interface AccordionItemProps {\n value: string\n children: React.ReactNode\n className?: string\n}\n\nfunction AccordionItem({ value, children, className }: AccordionItemProps) {\n return (\n <AccordionItemContext.Provider value={value}>\n <div className={cn('border-b', className)}>{children}</div>\n </AccordionItemContext.Provider>\n )\n}\nAccordionItem.displayName = 'AccordionItem'\n\n/* ── AccordionTrigger ── */\nexport interface AccordionTriggerProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction AccordionTrigger({ children, className }: AccordionTriggerProps) {\n const ctx = React.useContext(AccordionContext)\n const value = React.useContext(AccordionItemContext)\n const open = ctx?.openItems.includes(value) ?? false\n\n return (\n <h3 className=\"flex\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => ctx?.toggle(value)}\n className={cn(\n 'flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline',\n '[&[aria-expanded=true]>svg]:rotate-180',\n className,\n )}\n >\n {children}\n <ChevronDown\n className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\"\n aria-hidden=\"true\"\n />\n </button>\n </h3>\n )\n}\nAccordionTrigger.displayName = 'AccordionTrigger'\n\n/* ── AccordionContent ── */\nexport interface AccordionContentProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction AccordionContent({ children, className }: AccordionContentProps) {\n const ctx = React.useContext(AccordionContext)\n const value = React.useContext(AccordionItemContext)\n const open = ctx?.openItems.includes(value) ?? false\n\n return (\n <div\n role=\"region\"\n hidden={!open}\n className={cn('overflow-hidden text-sm', open ? 'animate-accordion-down' : '')}\n >\n <div className={cn('pb-4 pt-0', className)}>{children}</div>\n </div>\n )\n}\nAccordionContent.displayName = 'AccordionContent'\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst alertVariants = cva(\n 'relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground',\n {\n variants: {\n variant: {\n default: 'bg-background text-foreground',\n destructive:\n 'border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive',\n success:\n 'border-green-500/50 text-green-700 dark:text-green-400 [&>svg]:text-green-600',\n warning:\n 'border-yellow-500/50 text-yellow-700 dark:text-yellow-400 [&>svg]:text-yellow-600',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />\n))\nAlert.displayName = 'Alert'\n\nconst AlertTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn('mb-1 font-medium leading-none tracking-tight', className)}\n {...props}\n />\n ),\n)\nAlertTitle.displayName = 'AlertTitle'\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm [&_p]:leading-relaxed', className)} {...props} />\n))\nAlertDescription.displayName = 'AlertDescription'\n\nexport { Alert, AlertTitle, AlertDescription }\n","'use client'\n\nimport * as React from 'react'\nimport { Slot, Slottable } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive: '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-8 px-4 py-2',\n sm: 'h-7 rounded-md px-3',\n lg: 'h-9 rounded-md px-8',\n icon: 'h-8 w-8',\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 loading?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, loading = false, disabled, children, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n ref={ref}\n className={cn(buttonVariants({ variant, size, className }))}\n disabled={disabled ?? loading}\n aria-busy={loading}\n {...props}\n >\n {loading && <Loader2 className=\"animate-spin\" aria-hidden=\"true\" />}\n <Slottable>{children}</Slottable>\n </Comp>\n )\n },\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","'use client'\n\nimport * as React from 'react'\nimport * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog'\nimport { cn } from '@/lib/utils'\nimport { buttonVariants } from './button'\n\nconst AlertDialog = AlertDialogPrimitive.Root\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80',\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 className,\n )}\n {...props}\n ref={ref}\n />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.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',\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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]',\n 'data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n 'sm:rounded-lg',\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col space-y-2 text-center sm:text-left', className)}\n {...props}\n />\n)\nAlertDialogHeader.displayName = 'AlertDialogHeader'\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n)\nAlertDialogFooter.displayName = 'AlertDialogFooter'\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold', className)}\n {...props}\n />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n))\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: 'outline' }), 'mt-2 sm:mt-0', className)}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\nimport { cn } from '@/lib/utils'\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full', className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-muted text-sm font-medium',\n className,\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","'use client'\n\nimport * 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',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n outline: 'text-foreground',\n success: 'border-transparent bg-green-500 text-white hover:bg-green-500/80',\n warning: 'border-transparent bg-yellow-500 text-white hover:bg-yellow-500/80',\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 <div className={cn(badgeVariants({ variant }), className)} {...props} />\n}\n\nexport { Badge, badgeVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<'nav'> & {\n separator?: React.ReactNode\n }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />)\nBreadcrumb.displayName = 'Breadcrumb'\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentPropsWithoutRef<'ol'>>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className,\n )}\n {...props}\n />\n ),\n)\nBreadcrumbList.displayName = 'BreadcrumbList'\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<'li'>>(\n ({ className, ...props }, ref) => (\n <li ref={ref} className={cn('inline-flex items-center gap-1.5', className)} {...props} />\n ),\n)\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<'a'> & {\n asChild?: boolean\n }\n>(({ asChild, className, ...props }, ref) => (\n <a\n ref={ref}\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n />\n))\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentPropsWithoutRef<'span'>>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n ),\n)\nBreadcrumbPage.displayName = 'BreadcrumbPage'\n\nconst BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<'li'>) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n)\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\n\nconst BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<'span'>) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">Thêm</span>\n </span>\n)\nBreadcrumbEllipsis.displayName = 'BreadcrumbElipssis'\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { DayPicker } from 'react-day-picker'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { vi } from 'date-fns/locale'\nimport { cn } from '@/lib/utils'\nimport { buttonVariants } from './button'\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n locale = vi,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n locale={locale}\n className={cn('p-3', className)}\n classNames={{\n months: 'flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0',\n month: 'space-y-4',\n caption: 'flex justify-center pt-1 relative items-center',\n caption_label: 'text-sm font-medium',\n nav: 'space-x-1 flex items-center',\n nav_button: cn(\n buttonVariants({ variant: 'outline' }),\n 'h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100',\n ),\n nav_button_previous: 'absolute left-1',\n nav_button_next: 'absolute right-1',\n table: 'w-full border-collapse space-y-1',\n head_row: 'flex',\n head_cell: 'text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]',\n row: 'flex w-full mt-2',\n cell: cn(\n 'h-9 w-9 text-center text-sm p-0 relative',\n '[&:has([aria-selected].day-range-end)]:rounded-r-md',\n '[&:has([aria-selected].day-outside)]:bg-accent/50',\n '[&:has([aria-selected])]:bg-accent',\n 'first:[&:has([aria-selected])]:rounded-l-md',\n 'last:[&:has([aria-selected])]:rounded-r-md',\n 'focus-within:relative focus-within:z-20',\n ),\n day: cn(buttonVariants({ variant: 'ghost' }), 'h-9 w-9 p-0 font-normal aria-selected:opacity-100'),\n day_range_end: 'day-range-end',\n day_selected:\n 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground',\n day_today: 'bg-accent text-accent-foreground',\n day_outside:\n 'day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30',\n day_disabled: 'text-muted-foreground opacity-50',\n day_range_middle: 'aria-selected:bg-accent aria-selected:text-accent-foreground',\n day_hidden: 'invisible',\n ...classNames,\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = 'Calendar'\n\nexport { Calendar }\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-lg border bg-card text-card-foreground shadow-sm', className)}\n {...props}\n />\n ),\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n)\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn('text-2xl font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n ),\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n))\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n ),\n)\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n ),\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }\n","'use client'\n\nimport * as React from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { Check, Minus } from 'lucide-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst checkboxVariants = cva(\n 'peer shrink-0 rounded-sm border border-primary disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground',\n {\n variants: {\n size: {\n sm: 'h-3.5 w-3.5',\n default: 'h-4 w-4',\n lg: 'h-5 w-5',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\nconst checkboxIconSize = {\n sm: 'h-2.5 w-2.5',\n default: 'h-3 w-3',\n lg: 'h-3.5 w-3.5',\n} as const\n\ntype CheckboxProps = React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> &\n VariantProps<typeof checkboxVariants>\n\nconst Checkbox = React.forwardRef<React.ElementRef<typeof CheckboxPrimitive.Root>, CheckboxProps>(\n ({ className, checked, size, ...props }, ref) => {\n const iconClass = checkboxIconSize[size ?? 'default']\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n {...(checked !== undefined ? { checked } : {})}\n className={cn(checkboxVariants({ size, className }))}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n {checked === 'indeterminate' ? (\n <Minus className={iconClass} />\n ) : (\n <Check className={iconClass} />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n },\n)\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","'use client'\n\nimport * 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\nconst PopoverAnchor = PopoverPrimitive.Anchor\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',\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 className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","'use client'\n\nimport * as React from 'react'\nimport { format } from 'date-fns'\nimport { vi } from 'date-fns/locale'\nimport type { Locale } from 'date-fns'\nimport { CalendarIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from './button'\nimport { Calendar } from './calendar'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\n\nexport interface DatePickerProps {\n value?: Date | undefined\n onChange?: (date: Date | undefined) => void\n placeholder?: string\n disabled?: boolean\n className?: string\n locale?: Locale\n dateFormat?: string\n}\n\nfunction DatePicker({\n value,\n onChange,\n placeholder = 'Chọn ngày',\n disabled = false,\n className,\n locale = vi,\n dateFormat = 'dd/MM/yyyy',\n}: DatePickerProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n 'h-10 w-full justify-start text-left font-normal',\n !value && 'text-muted-foreground',\n className,\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" aria-hidden=\"true\" />\n {value ? format(value, dateFormat, { locale }) : placeholder}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={value}\n onSelect={(day) => onChange?.(day)}\n locale={locale}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n )\n}\nDatePicker.displayName = 'DatePicker'\n\nexport { DatePicker }\n","'use client'\n\nimport * 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>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\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))\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","'use client'\n\nimport * as React from 'react'\nimport { format, startOfDay, startOfWeek, startOfMonth, subDays, isSameDay } from 'date-fns'\nimport { vi } from 'date-fns/locale'\nimport type { Locale } from 'date-fns'\nimport type { DateRange } from 'react-day-picker'\nimport { CalendarIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from './button'\nimport { Calendar } from './calendar'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\nimport { Separator } from './separator'\n\nexport type { DateRange }\n\nconst PRESETS = [\n {\n label: 'Hôm nay',\n range: () => {\n const d = startOfDay(new Date())\n return { from: d, to: d }\n },\n },\n {\n label: 'Hôm qua',\n range: () => {\n const d = startOfDay(subDays(new Date(), 1))\n return { from: d, to: d }\n },\n },\n {\n label: 'Tuần này',\n range: () => ({\n from: startOfWeek(new Date(), { weekStartsOn: 1 }),\n to: startOfDay(new Date()),\n }),\n },\n {\n label: '7 ngày qua',\n range: () => ({\n from: startOfDay(subDays(new Date(), 6)),\n to: startOfDay(new Date()),\n }),\n },\n {\n label: 'Tháng này',\n range: () => ({\n from: startOfMonth(new Date()),\n to: startOfDay(new Date()),\n }),\n },\n {\n label: '30 ngày qua',\n range: () => ({\n from: startOfDay(subDays(new Date(), 29)),\n to: startOfDay(new Date()),\n }),\n },\n]\n\nfunction isActivePreset(preset: { from: Date; to: Date }, value: DateRange | undefined): boolean {\n if (!value?.from || !value?.to) return false\n return isSameDay(value.from, preset.from) && isSameDay(value.to, preset.to)\n}\n\nexport interface DateRangePickerProps {\n value?: DateRange | undefined\n onChange?: (range: DateRange | undefined) => void\n placeholder?: string\n disabled?: boolean\n className?: string\n locale?: Locale\n dateFormat?: string\n numberOfMonths?: number\n showPresets?: boolean\n}\n\nfunction DateRangePicker({\n value,\n onChange,\n placeholder = 'Chọn khoảng ngày',\n disabled = false,\n className,\n locale = vi,\n dateFormat = 'dd/MM/yyyy',\n numberOfMonths = 2,\n showPresets = false,\n}: DateRangePickerProps) {\n const [open, setOpen] = React.useState(false)\n const [localRange, setLocalRange] = React.useState<DateRange | undefined>(value)\n\n const handleOpenChange = (isOpen: boolean) => {\n if (isOpen) setLocalRange(value)\n setOpen(isOpen)\n }\n\n const handleSelect = (range: DateRange | undefined) => {\n setLocalRange(range)\n onChange?.(range)\n if (range?.from && range?.to) setOpen(false)\n }\n\n const handlePresetSelect = (range: { from: Date; to: Date }) => {\n setLocalRange(range)\n onChange?.(range)\n setOpen(false)\n }\n\n const formatLabel = () => {\n if (!value?.from) return placeholder\n if (!value.to) return format(value.from, dateFormat, { locale })\n return `${format(value.from, dateFormat, { locale })} – ${format(value.to, dateFormat, { locale })}`\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n 'h-10 w-full justify-start text-left font-normal',\n !value?.from && 'text-muted-foreground',\n className,\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" aria-hidden=\"true\" />\n {formatLabel()}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <div className=\"flex\">\n {showPresets && (\n <>\n <div className=\"flex w-36 flex-col gap-1 p-2\">\n {PRESETS.map((preset) => {\n const range = preset.range()\n return (\n <button\n key={preset.label}\n onClick={() => handlePresetSelect(range)}\n className={cn(\n 'w-full rounded px-3 py-1.5 text-left text-sm hover:bg-accent hover:text-accent-foreground',\n isActivePreset(range, value) && 'bg-accent text-accent-foreground font-medium',\n )}\n >\n {preset.label}\n </button>\n )\n })}\n </div>\n <Separator orientation=\"vertical\" className=\"h-auto\" />\n </>\n )}\n <Calendar\n mode=\"range\"\n selected={localRange}\n onSelect={handleSelect}\n locale={locale}\n numberOfMonths={numberOfMonths}\n initialFocus\n />\n </div>\n </PopoverContent>\n </Popover>\n )\n}\nDateRangePicker.displayName = 'DateRangePicker'\n\nexport { DateRangePicker }\n","'use client'\n\nimport * as React from 'react'\nimport { Clock } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface TimePickerProps {\n value?: string\n onChange?: (value: string) => void\n withSeconds?: boolean\n disabled?: boolean\n className?: string\n}\n\nfunction parseTime(value?: string): { hours: number; minutes: number; seconds: number } {\n if (!value) return { hours: 0, minutes: 0, seconds: 0 }\n const parts = value.split(':').map(Number)\n return {\n hours: parts[0] ?? 0,\n minutes: parts[1] ?? 0,\n seconds: parts[2] ?? 0,\n }\n}\n\nfunction pad(v: number): string {\n return String(v).padStart(2, '0')\n}\n\nfunction TimePicker({ value, onChange, withSeconds = false, disabled = false, className }: TimePickerProps) {\n const { hours, minutes, seconds } = parseTime(value)\n const minuteRef = React.useRef<HTMLInputElement>(null)\n const secondRef = React.useRef<HTMLInputElement>(null)\n\n const emit = (h: number, m: number, s: number) => {\n const time = withSeconds ? `${pad(h)}:${pad(m)}:${pad(s)}` : `${pad(h)}:${pad(m)}`\n onChange?.(time)\n }\n\n const segmentClass =\n 'w-8 bg-transparent text-center outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none disabled:cursor-not-allowed'\n\n return (\n <div\n className={cn(\n 'flex h-10 w-full items-center rounded-md border border-input bg-background px-3 py-2 text-sm',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n >\n <Clock className=\"mr-2 h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n <input\n type=\"number\"\n min={0}\n max={23}\n value={pad(hours)}\n disabled={disabled}\n onChange={(e) => {\n const v = Math.min(23, Math.max(0, Number(e.target.value)))\n emit(v, minutes, seconds)\n if (e.target.value.length >= 2) minuteRef.current?.focus()\n }}\n className={segmentClass}\n aria-label=\"Hours\"\n />\n <span className=\"mx-0.5 select-none text-muted-foreground\">:</span>\n <input\n ref={minuteRef}\n type=\"number\"\n min={0}\n max={59}\n value={pad(minutes)}\n disabled={disabled}\n onChange={(e) => {\n const v = Math.min(59, Math.max(0, Number(e.target.value)))\n emit(hours, v, seconds)\n if (withSeconds && e.target.value.length >= 2) secondRef.current?.focus()\n }}\n className={segmentClass}\n aria-label=\"Minutes\"\n />\n {withSeconds && (\n <>\n <span className=\"mx-0.5 select-none text-muted-foreground\">:</span>\n <input\n ref={secondRef}\n type=\"number\"\n min={0}\n max={59}\n value={pad(seconds)}\n disabled={disabled}\n onChange={(e) => {\n const v = Math.min(59, Math.max(0, Number(e.target.value)))\n emit(hours, minutes, v)\n }}\n className={segmentClass}\n aria-label=\"Seconds\"\n />\n </>\n )}\n </div>\n )\n}\nTimePicker.displayName = 'TimePicker'\n\nexport { TimePicker }\n","'use client'\n\nimport * as React from 'react'\nimport { format } from 'date-fns'\nimport { vi } from 'date-fns/locale'\nimport type { Locale } from 'date-fns'\nimport { CalendarIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from './button'\nimport { Calendar } from './calendar'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\nimport { Separator } from './separator'\nimport { TimePicker } from './time-picker'\n\nexport interface DateTimePickerProps {\n value?: Date | undefined\n onChange?: (date: Date | undefined) => void\n placeholder?: string\n disabled?: boolean\n className?: string\n withSeconds?: boolean\n locale?: Locale\n dateFormat?: string\n}\n\nfunction dateToTimeString(date: Date | undefined, withSeconds: boolean): string {\n if (!date) return withSeconds ? '00:00:00' : '00:00'\n const h = pad(date.getHours())\n const m = pad(date.getMinutes())\n if (withSeconds) return `${h}:${m}:${pad(date.getSeconds())}`\n return `${h}:${m}`\n}\n\nfunction pad(v: number): string {\n return String(v).padStart(2, '0')\n}\n\nfunction mergeDateTime(date: Date | undefined, timeString: string): Date | undefined {\n if (!date) return undefined\n const parts = timeString.split(':').map(Number)\n const result = new Date(date)\n result.setHours(parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0, 0)\n return result\n}\n\nfunction DateTimePicker({\n value,\n onChange,\n placeholder = 'Chọn ngày và giờ',\n disabled = false,\n className,\n withSeconds = false,\n locale = vi,\n dateFormat,\n}: DateTimePickerProps) {\n const resolvedFormat = dateFormat ?? (withSeconds ? 'dd/MM/yyyy HH:mm:ss' : 'dd/MM/yyyy HH:mm')\n const [timeString, setTimeString] = React.useState(() => dateToTimeString(value, withSeconds))\n\n React.useEffect(() => {\n setTimeString(dateToTimeString(value, withSeconds))\n }, [value, withSeconds])\n\n const handleDateSelect = (day: Date | undefined) => {\n onChange?.(mergeDateTime(day, timeString))\n }\n\n const handleTimeChange = (t: string) => {\n setTimeString(t)\n onChange?.(mergeDateTime(value, t))\n }\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n 'h-10 w-full justify-start text-left font-normal',\n !value && 'text-muted-foreground',\n className,\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" aria-hidden=\"true\" />\n {value ? format(value, resolvedFormat, { locale }) : placeholder}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={value}\n onSelect={handleDateSelect}\n locale={locale}\n initialFocus\n />\n <Separator />\n <div className=\"p-3\">\n <TimePicker\n value={timeString}\n onChange={handleTimeChange}\n withSeconds={withSeconds}\n />\n </div>\n </PopoverContent>\n </Popover>\n )\n}\nDateTimePicker.displayName = 'DateTimePicker'\n\nexport { DateTimePicker }\n","'use client'\n\nimport * as React from 'react'\nimport { format, startOfDay, startOfWeek, startOfMonth, subDays, isSameDay } from 'date-fns'\nimport { vi } from 'date-fns/locale'\nimport type { Locale } from 'date-fns'\nimport type { DateRange } from 'react-day-picker'\nimport { CalendarIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from './button'\nimport { Calendar } from './calendar'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\nimport { Separator } from './separator'\nimport { TimePicker } from './time-picker'\n\nexport interface DateTimeRange {\n from: Date | undefined\n to: Date | undefined\n}\n\nexport interface DateTimeRangePickerProps {\n value?: DateTimeRange\n onChange?: (range: DateTimeRange | undefined) => void\n placeholder?: string\n disabled?: boolean\n className?: string\n withSeconds?: boolean\n locale?: Locale\n dateFormat?: string\n numberOfMonths?: number\n showPresets?: boolean\n}\n\nconst PRESETS = [\n {\n label: 'Hôm nay',\n range: () => {\n const d = startOfDay(new Date())\n return { from: d, to: d }\n },\n },\n {\n label: 'Hôm qua',\n range: () => {\n const d = startOfDay(subDays(new Date(), 1))\n return { from: d, to: d }\n },\n },\n {\n label: 'Tuần này',\n range: () => ({\n from: startOfWeek(new Date(), { weekStartsOn: 1 }),\n to: startOfDay(new Date()),\n }),\n },\n {\n label: '7 ngày qua',\n range: () => ({\n from: startOfDay(subDays(new Date(), 6)),\n to: startOfDay(new Date()),\n }),\n },\n {\n label: 'Tháng này',\n range: () => ({\n from: startOfMonth(new Date()),\n to: startOfDay(new Date()),\n }),\n },\n {\n label: '30 ngày qua',\n range: () => ({\n from: startOfDay(subDays(new Date(), 29)),\n to: startOfDay(new Date()),\n }),\n },\n]\n\nfunction isActivePreset(\n preset: { from: Date; to: Date },\n value: DateTimeRange | undefined,\n): boolean {\n if (!value?.from || !value?.to) return false\n return isSameDay(value.from, preset.from) && isSameDay(value.to, preset.to)\n}\n\nfunction dateToTimeString(date: Date | undefined, withSeconds: boolean): string {\n if (!date) return withSeconds ? '00:00:00' : '00:00'\n const h = pad(date.getHours())\n const m = pad(date.getMinutes())\n if (withSeconds) return `${h}:${m}:${pad(date.getSeconds())}`\n return `${h}:${m}`\n}\n\nfunction pad(v: number): string {\n return String(v).padStart(2, '0')\n}\n\nfunction mergeDateTime(date: Date | undefined, timeString: string): Date | undefined {\n if (!date) return undefined\n const parts = timeString.split(':').map(Number)\n const result = new Date(date)\n result.setHours(parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0, 0)\n return result\n}\n\nfunction DateTimeRangePicker({\n value,\n onChange,\n placeholder = 'Chọn khoảng thời gian',\n disabled = false,\n className,\n withSeconds = false,\n locale = vi,\n dateFormat,\n numberOfMonths = 2,\n showPresets = false,\n}: DateTimeRangePickerProps) {\n const resolvedFormat = dateFormat ?? (withSeconds ? 'dd/MM/yyyy HH:mm:ss' : 'dd/MM/yyyy HH:mm')\n\n const [open, setOpen] = React.useState(false)\n const [localRange, setLocalRange] = React.useState<DateRange | undefined>(\n value ? { from: value.from, to: value.to } : undefined,\n )\n const [fromTime, setFromTime] = React.useState(() => dateToTimeString(value?.from, withSeconds))\n const [toTime, setToTime] = React.useState(() => dateToTimeString(value?.to, withSeconds))\n\n const handleOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n setLocalRange(value ? { from: value.from, to: value.to } : undefined)\n setFromTime(dateToTimeString(value?.from, withSeconds))\n setToTime(dateToTimeString(value?.to, withSeconds))\n }\n setOpen(isOpen)\n }\n\n React.useEffect(() => {\n setFromTime(dateToTimeString(value?.from, withSeconds))\n }, [value?.from, withSeconds])\n\n React.useEffect(() => {\n setToTime(dateToTimeString(value?.to, withSeconds))\n }, [value?.to, withSeconds])\n\n const emit = (from: Date | undefined, to: Date | undefined) => {\n onChange?.({ from, to })\n }\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n setLocalRange(range)\n const from = mergeDateTime(range?.from, fromTime)\n const to = mergeDateTime(range?.to, toTime)\n emit(from, to)\n }\n\n const handlePresetSelect = (range: { from: Date; to: Date }) => {\n const zeroTime = withSeconds ? '00:00:00' : '00:00'\n setFromTime(zeroTime)\n setToTime(zeroTime)\n setLocalRange(range)\n emit(range.from, range.to)\n setOpen(false)\n }\n\n const handleFromTimeChange = (t: string) => {\n setFromTime(t)\n emit(mergeDateTime(value?.from, t), value?.to)\n }\n\n const handleToTimeChange = (t: string) => {\n setToTime(t)\n emit(value?.from, mergeDateTime(value?.to, t))\n }\n\n const formatLabel = () => {\n if (!value?.from) return placeholder\n if (!value.to) return format(value.from, resolvedFormat, { locale })\n return `${format(value.from, resolvedFormat, { locale })} – ${format(value.to, resolvedFormat, { locale })}`\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n 'h-10 w-full justify-start text-left font-normal',\n !value?.from && 'text-muted-foreground',\n className,\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" aria-hidden=\"true\" />\n {formatLabel()}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <div className=\"flex\">\n {showPresets && (\n <>\n <div className=\"flex w-36 flex-col gap-1 p-2\">\n {PRESETS.map((preset) => {\n const range = preset.range()\n return (\n <button\n key={preset.label}\n onClick={() => handlePresetSelect(range)}\n className={cn(\n 'w-full rounded px-3 py-1.5 text-left text-sm hover:bg-accent hover:text-accent-foreground',\n isActivePreset(range, value) && 'bg-accent text-accent-foreground font-medium',\n )}\n >\n {preset.label}\n </button>\n )\n })}\n </div>\n <Separator orientation=\"vertical\" className=\"h-auto\" />\n </>\n )}\n <div className=\"flex flex-col\">\n <Calendar\n mode=\"range\"\n selected={localRange}\n onSelect={handleRangeSelect}\n locale={locale}\n numberOfMonths={numberOfMonths}\n initialFocus\n />\n <Separator />\n <div className=\"flex gap-4 p-3\">\n <div className=\"flex flex-1 flex-col gap-1.5\">\n <span className=\"text-xs text-muted-foreground\">Từ</span>\n <TimePicker\n value={fromTime}\n onChange={handleFromTimeChange}\n withSeconds={withSeconds}\n disabled={disabled || !value?.from}\n />\n </div>\n <div className=\"flex flex-1 flex-col gap-1.5\">\n <span className=\"text-xs text-muted-foreground\">Đến</span>\n <TimePicker\n value={toTime}\n onChange={handleToTimeChange}\n withSeconds={withSeconds}\n disabled={disabled || !value?.to}\n />\n </div>\n </div>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\nDateTimeRangePicker.displayName = 'DateTimeRangePicker'\n\nexport { DateTimeRangePicker }\n","'use client'\n\nimport * 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 DialogPortal = DialogPrimitive.Portal\nconst DialogClose = DialogPrimitive.Close\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',\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 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',\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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]',\n 'data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n 'sm:rounded-lg',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 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\">Đóng</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\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('text-lg font-semibold leading-none tracking-tight', className)}\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","'use client'\n\nimport * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check, ChevronRight, Circle } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\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 gap-2 rounded-sm px-2 py-1.5 text-sm outline-none',\n 'focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName = 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',\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 className,\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\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 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 gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors',\n 'focus:bg-accent focus:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\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 {...(checked !== undefined ? { checked } : {})}\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',\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 <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 = 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',\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 <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nfunction DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest opacity-60', className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut'\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { File as FileIcon, Upload, X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface FileUploadProps {\n accept?: string\n multiple?: boolean\n maxSize?: number\n value?: File[]\n onChange?: (files: File[]) => void\n disabled?: boolean\n placeholder?: string\n className?: string\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B'\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`\n}\n\nfunction FileUpload({\n accept,\n multiple = false,\n maxSize,\n value = [],\n onChange,\n disabled = false,\n placeholder = 'Kéo thả file vào đây hoặc click để chọn',\n className,\n}: FileUploadProps) {\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [dragOver, setDragOver] = React.useState(false)\n\n const addFiles = (incoming: FileList | null) => {\n if (!incoming || disabled) return\n let files = Array.from(incoming)\n if (maxSize) files = files.filter((f) => f.size <= maxSize)\n onChange?.(multiple ? [...value, ...files] : files.slice(0, 1))\n }\n\n const remove = (i: number) => onChange?.(value.filter((_, idx) => idx !== i))\n\n return (\n <div className={cn('w-full space-y-2', className)}>\n {/* Drop zone */}\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n onClick={() => !disabled && inputRef.current?.click()}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); !disabled && inputRef.current?.click() } }}\n onDragOver={(e) => { e.preventDefault(); if (!disabled) setDragOver(true) }}\n onDragLeave={() => setDragOver(false)}\n onDrop={(e) => { e.preventDefault(); setDragOver(false); addFiles(e.dataTransfer.files) }}\n className={cn(\n 'flex cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-8 text-center transition-colors',\n dragOver ? 'border-primary bg-primary/5' : 'border-input hover:border-primary/50 hover:bg-accent/30',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n <Upload className=\"h-8 w-8 text-muted-foreground\" aria-hidden=\"true\" />\n <p className=\"text-sm text-muted-foreground\">{placeholder}</p>\n {(accept || maxSize) && (\n <p className=\"text-xs text-muted-foreground\">\n {[accept, maxSize && `Tối đa ${formatBytes(maxSize)}`].filter(Boolean).join(' · ')}\n </p>\n )}\n </div>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"hidden\"\n onChange={(e) => addFiles(e.target.files)}\n />\n {/* File list */}\n {value.length > 0 && (\n <ul className=\"space-y-1.5\">\n {value.map((file, i) => (\n <li\n key={`${file.name}-${i}`}\n className=\"flex items-center gap-2 rounded-md border border-border bg-muted/40 px-3 py-2 text-sm\"\n >\n <FileIcon className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n <span className=\"flex-1 truncate\">{file.name}</span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">{formatBytes(file.size)}</span>\n <button\n type=\"button\"\n onClick={() => remove(i)}\n disabled={disabled}\n aria-label={`Xóa ${file.name}`}\n className=\"ml-1 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm text-muted-foreground hover:text-foreground disabled:pointer-events-none\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\nFileUpload.displayName = 'FileUpload'\n\nexport { FileUpload }\n","'use client'\n\nimport * as React from 'react'\nimport * as LabelPrimitive from '@radix-ui/react-label'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst labelVariants = cva(\n 'font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n {\n variants: {\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, size, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants({ size, className }))} {...props} />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","'use client'\n\nimport * as React from 'react'\nimport * as LabelPrimitive from '@radix-ui/react-label'\nimport { Slot } from '@radix-ui/react-slot'\nimport {\n Controller,\n FormProvider,\n useFormContext,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from 'react-hook-form'\nimport { cn } from '@/lib/utils'\nimport { Label } from './label'\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error('useFormField phải được dùng trong <FormField>')\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue)\n\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn('space-y-2', className)} {...props} />\n </FormItemContext.Provider>\n )\n },\n)\nFormItem.displayName = 'FormItem'\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n ref={ref}\n className={cn(error && 'text-destructive', className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n})\nFormLabel.displayName = 'FormLabel'\n\nconst FormControl = React.forwardRef<\n React.ElementRef<typeof Slot>,\n React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={!error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n )\n})\nFormControl.displayName = 'FormControl'\n\nconst FormDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n})\nFormDescription.displayName = 'FormDescription'\n\nconst FormMessage = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={cn('text-sm font-medium text-destructive', className)}\n {...props}\n >\n {body}\n </p>\n )\n})\nFormMessage.displayName = 'FormMessage'\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => (\n <input\n type={type}\n ref={ref}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm',\n 'file:border-0 file:bg-transparent file:text-sm file:font-medium',\n 'placeholder:text-muted-foreground',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n ),\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","'use client'\n\nimport * as React from 'react'\nimport { Check, ChevronDown, X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from './badge'\nimport { Button } from './button'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\n\nexport interface MultiSelectOption {\n value: string\n label: string\n description?: string\n}\n\nexport interface MultiSelectProps {\n options: MultiSelectOption[]\n value?: string[]\n onChange?: (value: string[]) => void\n placeholder?: string\n searchPlaceholder?: string\n emptyText?: string\n disabled?: boolean\n className?: string\n maxDisplay?: number\n}\n\nfunction MultiSelect({\n options,\n value = [],\n onChange,\n placeholder = 'Chọn...',\n searchPlaceholder = 'Tìm kiếm...',\n emptyText = 'Không tìm thấy.',\n disabled = false,\n className,\n maxDisplay = 3,\n}: MultiSelectProps) {\n const [open, setOpen] = React.useState(false)\n const [search, setSearch] = React.useState('')\n\n const filtered = options.filter((o) =>\n o.label.toLowerCase().includes(search.toLowerCase()),\n )\n\n const toggle = (optValue: string) => {\n onChange?.(\n value.includes(optValue) ? value.filter((v) => v !== optValue) : [...value, optValue],\n )\n }\n\n const clear = (e: React.MouseEvent) => {\n e.stopPropagation()\n onChange?.([])\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n 'h-auto min-h-10 w-full justify-between px-3 py-2 font-normal',\n className,\n )}\n >\n <div className=\"flex-1 text-left\">\n {value.length === 0 ? (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n ) : (\n <div className=\"flex flex-wrap gap-1\">\n {value.slice(0, maxDisplay).map((v) => (\n <Badge key={v} variant=\"secondary\" className=\"text-xs\">\n {options.find((o) => o.value === v)?.label ?? v}\n </Badge>\n ))}\n {value.length > maxDisplay && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n +{value.length - maxDisplay}\n </Badge>\n )}\n </div>\n )}\n </div>\n <div className=\"ml-2 flex shrink-0 items-center gap-1\">\n {value.length > 0 && (\n <span\n role=\"button\"\n aria-label=\"Xóa tất cả\"\n onClick={clear}\n className=\"flex h-4 w-4 items-center justify-center rounded-sm text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-3 w-3\" />\n </span>\n )}\n <ChevronDown className=\"h-4 w-4 text-muted-foreground opacity-60\" />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[var(--radix-popover-trigger-width)] p-0\" align=\"start\">\n <div className=\"border-b p-2\">\n <input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm placeholder:text-muted-foreground\"\n />\n </div>\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {filtered.length === 0 ? (\n <p className=\"px-3 py-6 text-center text-sm text-muted-foreground\">{emptyText}</p>\n ) : (\n filtered.map((option) => {\n const selected = value.includes(option.value)\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => toggle(option.value)}\n className=\"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground\"\n >\n <div\n className={cn(\n 'flex h-4 w-4 shrink-0 items-center justify-center rounded border border-primary',\n selected ? 'bg-primary text-primary-foreground' : 'opacity-50',\n )}\n >\n {selected && <Check className=\"h-3 w-3\" />}\n </div>\n <div className=\"flex-1 text-left\">\n <div>{option.label}</div>\n {option.description && (\n <div className=\"text-xs text-muted-foreground\">{option.description}</div>\n )}\n </div>\n </button>\n )\n })\n )}\n </div>\n {value.length > 0 && (\n <div className=\"border-t p-2\">\n <button\n type=\"button\"\n onClick={() => onChange?.([])}\n className=\"w-full rounded-sm px-2 py-1.5 text-center text-xs text-muted-foreground hover:bg-accent\"\n >\n Bỏ chọn tất cả ({value.length})\n </button>\n </div>\n )}\n </PopoverContent>\n </Popover>\n )\n}\nMultiSelect.displayName = 'MultiSelect'\n\nexport { MultiSelect }\n","'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { X, Info, CheckCircle2, AlertTriangle, XCircle, Bell } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst notificationVariants = cva(\n 'relative flex gap-3 rounded-lg border p-4 text-sm',\n {\n variants: {\n variant: {\n default: 'border-border bg-background text-foreground',\n info: 'border-blue-200 bg-blue-50 text-blue-900 dark:border-blue-800 dark:bg-blue-950/50 dark:text-blue-100',\n success: 'border-green-200 bg-green-50 text-green-900 dark:border-green-800 dark:bg-green-950/50 dark:text-green-100',\n warning: 'border-yellow-200 bg-yellow-50 text-yellow-900 dark:border-yellow-800 dark:bg-yellow-950/50 dark:text-yellow-100',\n error: 'border-red-200 bg-red-50 text-red-900 dark:border-red-800 dark:bg-red-950/50 dark:text-red-100',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nconst notificationIconClass = cva('mt-0.5 size-4 shrink-0', {\n variants: {\n variant: {\n default: 'text-foreground',\n info: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n error: 'text-red-600 dark:text-red-400',\n },\n },\n defaultVariants: { variant: 'default' },\n})\n\nconst defaultIcons = {\n default: Bell,\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n error: XCircle,\n} as const\n\nexport interface NotificationProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof notificationVariants> {\n title: string\n description?: string\n timestamp?: string\n unread?: boolean\n icon?: React.ReactNode\n onDismiss?: () => void\n action?: { label: string; onClick: () => void }\n}\n\nconst Notification = React.forwardRef<HTMLDivElement, NotificationProps>(\n (\n { className, variant = 'default', title, description, timestamp, unread, icon, onDismiss, action, ...props },\n ref,\n ) => {\n const IconComponent = defaultIcons[variant ?? 'default']\n const renderedIcon = icon ?? <IconComponent className={notificationIconClass({ variant })} />\n\n return (\n <div ref={ref} className={cn(notificationVariants({ variant }), className)} {...props}>\n {unread && (\n <span className=\"absolute left-2 top-2 h-1.5 w-1.5 rounded-full bg-primary\" />\n )}\n <span className=\"mt-0.5 shrink-0\">{renderedIcon}</span>\n <div className=\"flex-1 space-y-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"font-medium leading-none\">{title}</p>\n {timestamp && (\n <span className=\"shrink-0 text-xs opacity-60\">{timestamp}</span>\n )}\n </div>\n {description && <p className=\"opacity-80\">{description}</p>}\n {action && (\n <button\n onClick={action.onClick}\n className=\"mt-1 text-xs font-medium underline underline-offset-2 opacity-80 hover:opacity-100 transition-opacity\"\n >\n {action.label}\n </button>\n )}\n </div>\n {onDismiss && (\n <button\n onClick={onDismiss}\n aria-label=\"Đóng thông báo\"\n className=\"mt-0.5 shrink-0 opacity-50 hover:opacity-100 transition-opacity\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n )\n },\n)\nNotification.displayName = 'Notification'\n\nexport { Notification, notificationVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { Minus, Plus } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from './button'\n\nexport interface NumberInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n onValueChange?: (value: number) => void\n}\n\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n ({ className, min, max, step = 1, value, disabled, onValueChange, onChange, ...props }, ref) => {\n const stepNum = Number(step)\n const minNum = min !== undefined ? Number(min) : undefined\n const maxNum = max !== undefined ? Number(max) : undefined\n const currentNum = value !== undefined ? Number(value) : NaN\n\n const clamp = (v: number) => {\n let result = v\n if (minNum !== undefined && result < minNum) result = minNum\n if (maxNum !== undefined && result > maxNum) result = maxNum\n return result\n }\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e)\n if (onValueChange) {\n const v = e.target.valueAsNumber\n if (!isNaN(v)) onValueChange(clamp(v))\n }\n }\n\n const adjust = (delta: number) => {\n const base = isNaN(currentNum) ? 0 : currentNum\n onValueChange?.(clamp(base + delta))\n }\n\n const isAtMin = minNum !== undefined && !isNaN(currentNum) && currentNum <= minNum\n const isAtMax = maxNum !== undefined && !isNaN(currentNum) && currentNum >= maxNum\n\n return (\n <div className={cn('flex', className)}>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-10 w-10 shrink-0 rounded-r-none border-r-0\"\n onClick={() => adjust(-stepNum)}\n disabled={disabled ?? isAtMin}\n tabIndex={-1}\n aria-label=\"Decrease\"\n >\n <Minus aria-hidden=\"true\" />\n </Button>\n <input\n ref={ref}\n type=\"number\"\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n onChange={handleChange}\n className={cn(\n 'flex h-10 w-full rounded-none border border-input bg-background px-3 py-2 text-center text-sm',\n 'placeholder:text-muted-foreground',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n '[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\n )}\n {...props}\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-10 w-10 shrink-0 rounded-l-none border-l-0\"\n onClick={() => adjust(stepNum)}\n disabled={disabled ?? isAtMax}\n tabIndex={-1}\n aria-label=\"Increase\"\n >\n <Plus aria-hidden=\"true\" />\n </Button>\n </div>\n )\n },\n)\nNumberInput.displayName = 'NumberInput'\n\nexport { NumberInput }\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface OtpInputProps {\n length?: number\n value?: string | undefined\n onChange?: (value: string) => void\n disabled?: boolean\n className?: string\n inputClassName?: string\n}\n\nfunction OtpInput({\n length = 6,\n value = '',\n onChange,\n disabled = false,\n className,\n inputClassName,\n}: OtpInputProps) {\n const refs = React.useRef<(HTMLInputElement | null)[]>([])\n const digits = value.split('').slice(0, length)\n\n const focus = (i: number) => refs.current[Math.max(0, Math.min(i, length - 1))]?.focus()\n\n const handleChange = (i: number, e: React.ChangeEvent<HTMLInputElement>) => {\n const char = e.target.value.replace(/\\D/g, '').slice(-1)\n const next = [...digits]\n next[i] = char\n onChange?.(next.join('').slice(0, length))\n if (char) focus(i + 1)\n }\n\n const handleKeyDown = (i: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault()\n const next = [...digits]\n if (next[i]) {\n next[i] = ''\n onChange?.(next.join(''))\n } else if (i > 0) {\n focus(i - 1)\n next[i - 1] = ''\n onChange?.(next.join(''))\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault(); focus(i - 1)\n } else if (e.key === 'ArrowRight') {\n e.preventDefault(); focus(i + 1)\n }\n }\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault()\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length)\n onChange?.(pasted)\n focus(Math.min(pasted.length, length - 1))\n }\n\n return (\n <div className={cn('flex gap-2', className)}>\n {Array.from({ length }, (_, i) => (\n <input\n key={i}\n ref={(el) => { refs.current[i] = el }}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={1}\n value={digits[i] ?? ''}\n disabled={disabled}\n onChange={(e) => handleChange(i, e)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={(e) => e.target.select()}\n className={cn(\n 'h-12 w-12 rounded-md border border-input bg-background text-center text-lg font-medium shadow-sm',\n 'transition-colors placeholder:text-muted-foreground',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n inputClassName,\n )}\n aria-label={`Ký tự ${i + 1}`}\n />\n ))}\n </div>\n )\n}\nOtpInput.displayName = 'OtpInput'\n\nexport { OtpInput }\n","'use client'\n\nimport * as React from 'react'\nimport * as ProgressPrimitive from '@radix-ui/react-progress'\nimport { cn } from '@/lib/utils'\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn('relative h-4 w-full overflow-hidden rounded-full bg-secondary', className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value ?? 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }\n","'use client'\n\nimport * as React from 'react'\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group'\nimport { Circle } from 'lucide-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root className={cn('grid gap-2', className)} {...props} ref={ref} />\n))\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst radioGroupItemVariants = cva(\n 'aspect-square rounded-full border border-primary text-primary disabled:cursor-not-allowed disabled:opacity-50',\n {\n variants: {\n size: {\n sm: 'h-3.5 w-3.5',\n default: 'h-4 w-4',\n lg: 'h-5 w-5',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\nconst radioIndicatorIconSize = {\n sm: 'h-2 w-2',\n default: 'h-2.5 w-2.5',\n lg: 'h-3 w-3',\n} as const\n\ntype RadioGroupItemProps = React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item> &\n VariantProps<typeof radioGroupItemVariants>\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({ className, size, ...props }, ref) => {\n const iconClass = radioIndicatorIconSize[size ?? 'default']\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(radioGroupItemVariants({ size, className }))}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className={cn('fill-current text-current', iconClass)} />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n","'use client'\n\nimport * as React from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\nimport { cn } from '@/lib/utils'\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent p-[1px]',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import { useEffect, useState } from 'react'\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value)\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay)\n return () => clearTimeout(timer)\n }, [value, delay])\n\n return debouncedValue\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Check, ChevronsUpDown, Loader2, SearchIcon } from 'lucide-react'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\nimport { cn } from '@/lib/utils'\nimport { useDebounce } from '@/hooks/useDebounce'\n\nexport interface SearchSelectOption {\n value: string\n label: string\n description?: string\n disabled?: boolean\n}\n\nexport interface SearchSelectProps {\n value?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n searchPlaceholder?: string\n onSearch: (query: string) => Promise<SearchSelectOption[]>\n initialOptions?: SearchSelectOption[]\n debounceMs?: number\n disabled?: boolean\n className?: string\n emptyText?: string\n}\n\nexport function SearchSelect({\n value,\n onValueChange,\n placeholder = 'Chọn...',\n searchPlaceholder = 'Tìm kiếm...',\n onSearch,\n initialOptions = [],\n debounceMs = 300,\n disabled,\n className,\n emptyText = 'Không tìm thấy kết quả.',\n}: SearchSelectProps) {\n const [open, setOpen] = React.useState(false)\n const [query, setQuery] = React.useState('')\n const [loading, setLoading] = React.useState(false)\n const [options, setOptions] = React.useState<SearchSelectOption[]>(initialOptions)\n const debouncedQuery = useDebounce(query, debounceMs)\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const selectedLabel = options.find(o => o.value === value)?.label\n ?? initialOptions.find(o => o.value === value)?.label\n\n React.useEffect(() => {\n if (!open) return\n let cancelled = false\n setLoading(true)\n onSearch(debouncedQuery).then(results => {\n if (!cancelled) { setOptions(results); setLoading(false) }\n }).catch(() => {\n if (!cancelled) { setOptions([]); setLoading(false) }\n })\n return () => { cancelled = true }\n }, [debouncedQuery, open])\n\n React.useEffect(() => {\n if (open) setTimeout(() => inputRef.current?.focus(), 0)\n else setQuery('')\n }, [open])\n\n function handleSelect(option: SearchSelectOption) {\n if (option.disabled) return\n onValueChange?.(option.value)\n setOpen(false)\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded-md border border-input',\n 'bg-background px-3 py-2 text-sm',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n !value && 'text-muted-foreground',\n className,\n )}\n >\n <span className=\"truncate\">{selectedLabel ?? placeholder}</span>\n <ChevronsUpDown className=\"h-4 w-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[var(--radix-popover-trigger-width)] p-0\" align=\"start\">\n {/* Search input */}\n <div className=\"flex items-center border-b px-3\" style={{ borderColor: 'hsl(var(--border))' }}>\n <SearchIcon className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <input\n ref={inputRef}\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"flex h-10 w-full bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n {loading && <Loader2 className=\"h-4 w-4 shrink-0 animate-spin opacity-50\" />}\n </div>\n\n {/* Options list */}\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {!loading && options.length === 0 && (\n <p className=\"py-6 text-center text-sm text-muted-foreground\">{emptyText}</p>\n )}\n {options.map(option => (\n <button\n key={option.value}\n onClick={() => handleSelect(option)}\n disabled={option.disabled}\n className={cn(\n 'flex w-full items-center gap-2 rounded-sm px-3 py-2 text-sm text-left',\n 'hover:bg-accent hover:text-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'focus:outline-none focus:bg-accent',\n option.value === value && 'bg-accent',\n )}\n >\n <Check\n className={cn('h-4 w-4 shrink-0', option.value === value ? 'opacity-100' : 'opacity-0')}\n />\n <span className=\"flex-1\">\n <span className=\"block\">{option.label}</span>\n {option.description && (\n <span className=\"block text-xs text-muted-foreground\">{option.description}</span>\n )}\n </span>\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n","'use client'\n\nimport * 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-md border border-input bg-background px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\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\" />\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 className={cn(\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md',\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' && '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-sm font-semibold', 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 rounded-sm py-1.5 pl-8 pr-2 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 <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\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-muted', className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as SheetPrimitive from '@radix-ui/react-dialog'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst Sheet = SheetPrimitive.Root\nconst SheetTrigger = SheetPrimitive.Trigger\nconst SheetClose = SheetPrimitive.Close\nconst SheetPortal = SheetPrimitive.Portal\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80',\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 className,\n )}\n {...props}\n ref={ref}\n />\n))\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName\n\nconst sheetVariants = cva(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',\n {\n variants: {\n side: {\n top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom:\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n right:\n 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n },\n },\n defaultVariants: {\n side: 'right',\n },\n },\n)\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = 'right', className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Đóng</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n))\nSheetContent.displayName = SheetPrimitive.Content.displayName\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n)\nSheetHeader.displayName = 'SheetHeader'\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n)\nSheetFooter.displayName = 'SheetFooter'\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold text-foreground', className)}\n {...props}\n />\n))\nSheetTitle.displayName = SheetPrimitive.Title.displayName\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n))\nSheetDescription.displayName = SheetPrimitive.Description.displayName\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import { cn } from '@/lib/utils'\n\nfunction Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('animate-pulse rounded-md bg-muted', className)} {...props} />\n}\n\nexport { Skeleton }\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SliderProps {\n value?: number | undefined\n defaultValue?: number\n onChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n className?: string\n}\n\nfunction Slider({\n value,\n defaultValue = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n className,\n}: SliderProps) {\n const [internal, setInternal] = React.useState(defaultValue)\n const controlled = value !== undefined\n const current = controlled ? value : internal\n const pct = ((current - min) / (max - min)) * 100\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = Number(e.target.value)\n if (!controlled) setInternal(v)\n onChange?.(v)\n }\n\n return (\n <div className={cn('relative flex w-full touch-none select-none items-center py-2', className)}>\n {/* Track */}\n <div className=\"relative h-1.5 w-full grow rounded-full bg-secondary\">\n {/* Fill */}\n <div\n className=\"absolute h-full rounded-full bg-primary\"\n style={{ width: `${pct}%` }}\n aria-hidden=\"true\"\n />\n {/* Thumb (decorative) */}\n <div\n className=\"absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-primary bg-background shadow-sm ring-offset-background transition-shadow\"\n style={{ left: `${pct}%` }}\n aria-hidden=\"true\"\n />\n </div>\n {/* Actual input — transparent, handles interaction */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={current}\n disabled={disabled}\n onChange={handleChange}\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={current}\n />\n </div>\n )\n}\nSlider.displayName = 'Slider'\n\nexport { Slider }\n","'use client'\n\nimport * as React from 'react'\nimport * as SwitchPrimitives from '@radix-ui/react-switch'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst switchVariants = cva(\n 'peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n {\n variants: {\n size: {\n sm: 'h-5 w-9',\n default: 'h-6 w-11',\n lg: 'h-7 w-14',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\nconst switchThumbVariants = cva(\n 'pointer-events-none block rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=unchecked]:translate-x-0',\n {\n variants: {\n size: {\n sm: 'h-4 w-4 data-[state=checked]:translate-x-4',\n default: 'h-5 w-5 data-[state=checked]:translate-x-5',\n lg: 'h-6 w-6 data-[state=checked]:translate-x-7',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\ntype SwitchProps = React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> &\n VariantProps<typeof switchVariants>\n\nconst Switch = React.forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchProps>(\n ({ className, size, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(switchVariants({ size, className }))}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb className={cn(switchThumbVariants({ size }))} />\n </SwitchPrimitives.Root>\n ),\n)\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n ),\n)\nTable.displayName = 'Table'\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n))\nTableHeader.displayName = 'TableHeader'\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n))\nTableBody.displayName = 'TableBody'\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n))\nTableFooter.displayName = 'TableFooter'\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n 'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\n className,\n )}\n {...props}\n />\n ),\n)\nTableRow.displayName = 'TableRow'\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0',\n className,\n )}\n {...props}\n />\n))\nTableHead.displayName = 'TableHead'\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn('p-4 align-middle [&:has([role=checkbox])]:pr-0', className)}\n {...props}\n />\n))\nTableCell.displayName = 'TableCell'\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn('mt-4 text-sm text-muted-foreground', className)}\n {...props}\n />\n))\nTableCaption.displayName = 'TableCaption'\n\nexport { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption }\n","'use client'\n\nimport * 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 transition-all',\n 'disabled:pointer-events-none disabled:opacity-50',\n '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',\n className,\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => (\n <textarea\n ref={ref}\n className={cn(\n 'flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n ),\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n","'use client'\n\nimport { Toaster as Sonner } from 'sonner'\nimport type { ComponentProps } from 'react'\n\ntype ToasterProps = ComponentProps<typeof Sonner>\n\nexport function Toaster({ ...props }: ToasterProps) {\n return (\n <Sonner\n theme=\"system\"\n className=\"toaster group\"\n richColors\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton:\n 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton:\n 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n },\n }}\n {...props}\n />\n )\n}\n\nexport { toast } from 'sonner'\n","'use client'\n\nimport * 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.Portal>\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',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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 className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\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 type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: ContainerSize\n center?: boolean\n}\n\nconst sizeClass: Record<ContainerSize, string> = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'max-w-full',\n}\n\nfunction Container({ size = 'xl', center = true, className, children, ...props }: ContainerProps) {\n return (\n <div\n className={cn('w-full px-4 sm:px-6 lg:px-8', sizeClass[size], center && 'mx-auto', className)}\n {...props}\n >\n {children}\n </div>\n )\n}\nContainer.displayName = 'Container'\n\nexport { Container }\n","'use client'\n\nimport * as React from 'react'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '../ui/breadcrumb'\nimport { Separator } from '../ui/separator'\n\nexport interface PageLayoutProps {\n title: string\n description?: string\n actions?: React.ReactNode\n children: React.ReactNode\n breadcrumbs?: { label: string; href?: string }[]\n}\n\nexport function PageLayout({ title, description, actions, children, breadcrumbs }: PageLayoutProps) {\n return (\n <div className=\"flex flex-1 flex-col gap-4 p-4 md:gap-6 md:p-6\">\n {breadcrumbs && breadcrumbs.length > 0 && (\n <Breadcrumb>\n <BreadcrumbList>\n {breadcrumbs.map((crumb, index) => {\n const isLast = index === breadcrumbs.length - 1\n return (\n <React.Fragment key={crumb.label}>\n <BreadcrumbItem>\n {isLast ? (\n <BreadcrumbPage>{crumb.label}</BreadcrumbPage>\n ) : (\n <BreadcrumbLink href={crumb.href ?? '#'}>{crumb.label}</BreadcrumbLink>\n )}\n </BreadcrumbItem>\n {!isLast && <BreadcrumbSeparator />}\n </React.Fragment>\n )\n })}\n </BreadcrumbList>\n </Breadcrumb>\n )}\n\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-semibold tracking-tight\">{title}</h1>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n\n <Separator />\n\n <div className=\"flex-1\">{children}</div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SidebarLayoutProps {\n sidebar: React.ReactNode\n children: React.ReactNode\n sidebarWidth?: number\n collapsible?: boolean\n className?: string\n}\n\nexport function SidebarLayout({\n sidebar,\n children,\n sidebarWidth = 256,\n collapsible = false,\n className,\n}: SidebarLayoutProps) {\n const [collapsed, setCollapsed] = React.useState(false)\n\n const effectiveWidth = collapsible && collapsed ? 0 : sidebarWidth\n\n return (\n <div className={cn('flex h-full min-h-0', className)}>\n <aside\n className=\"flex shrink-0 flex-col border-r bg-sidebar transition-all duration-200 overflow-hidden\"\n style={{ width: effectiveWidth }}\n aria-label=\"Sidebar\"\n >\n {sidebar}\n </aside>\n\n <main className=\"flex flex-1 flex-col overflow-auto\">\n {collapsible && (\n <button\n onClick={() => setCollapsed((v) => !v)}\n className=\"absolute left-0 top-1/2 z-10 flex h-6 w-6 -translate-y-1/2 translate-x-[calc(var(--sidebar-w,0px)-12px)] items-center justify-center rounded-full border bg-background shadow-sm transition-colors hover:bg-accent\"\n style={{ '--sidebar-w': `${effectiveWidth}px` } as React.CSSProperties}\n aria-label={collapsed ? 'Mở sidebar' : 'Thu sidebar'}\n >\n <svg\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 className={cn('h-3 w-3 transition-transform', collapsed ? 'rotate-0' : 'rotate-180')}\n aria-hidden=\"true\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n </button>\n )}\n {children}\n </main>\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\ntype Gap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16\ntype Align = 'start' | 'center' | 'end' | 'stretch' | 'baseline'\ntype Justify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'\ntype Wrap = 'nowrap' | 'wrap' | 'wrap-reverse'\n\nconst gapClass: Record<Gap, string> = {\n 0: 'gap-0', 1: 'gap-1', 2: 'gap-2', 3: 'gap-3', 4: 'gap-4',\n 5: 'gap-5', 6: 'gap-6', 8: 'gap-8', 10: 'gap-10', 12: 'gap-12', 16: 'gap-16',\n}\nconst alignClass: Record<Align, string> = {\n start: 'items-start', center: 'items-center', end: 'items-end',\n stretch: 'items-stretch', baseline: 'items-baseline',\n}\nconst justifyClass: Record<Justify, string> = {\n start: 'justify-start', center: 'justify-center', end: 'justify-end',\n between: 'justify-between', around: 'justify-around', evenly: 'justify-evenly',\n}\nconst wrapClass: Record<Wrap, string> = {\n nowrap: 'flex-nowrap', wrap: 'flex-wrap', 'wrap-reverse': 'flex-wrap-reverse',\n}\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'row' | 'column'\n gap?: Gap\n align?: Align\n justify?: Justify\n wrap?: Wrap\n}\n\nfunction Stack({\n direction = 'column',\n gap = 4,\n align = 'start',\n justify = 'start',\n wrap = 'nowrap',\n className,\n children,\n ...props\n}: StackProps) {\n return (\n <div\n className={cn(\n 'flex',\n direction === 'row' ? 'flex-row' : 'flex-col',\n gapClass[gap],\n alignClass[align],\n justifyClass[justify],\n wrapClass[wrap],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\nStack.displayName = 'Stack'\n\nfunction HStack({ align = 'center', ...props }: Omit<StackProps, 'direction'>) {\n return <Stack direction=\"row\" align={align} {...props} />\n}\nHStack.displayName = 'HStack'\n\nfunction VStack(props: Omit<StackProps, 'direction'>) {\n return <Stack direction=\"column\" {...props} />\n}\nVStack.displayName = 'VStack'\n\nexport { Stack, HStack, VStack }\n","import * as React from 'react'\n\nexport interface AdminLayoutContextValue {\n collapsed: boolean\n setCollapsed: (collapsed: boolean) => void\n toggleCollapsed: () => void\n sidebarWidth: number\n collapsedWidth: number\n}\n\nexport const AdminLayoutContext = React.createContext<AdminLayoutContextValue | null>(null)\n\nexport function useAdminLayout(): AdminLayoutContextValue {\n const ctx = React.useContext(AdminLayoutContext)\n if (!ctx) throw new Error('useAdminLayout must be used within AdminLayout')\n return ctx\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport { AdminLayoutContext } from './admin-layout-context'\n\nexport interface AdminLayoutProps {\n children: React.ReactNode\n className?: string\n defaultCollapsed?: boolean\n collapsed?: boolean\n onCollapsedChange?: (collapsed: boolean) => void\n sidebarWidth?: number\n collapsedWidth?: number\n}\n\nexport function AdminLayout({\n children,\n className,\n defaultCollapsed = false,\n collapsed: controlledCollapsed,\n onCollapsedChange,\n sidebarWidth = 256,\n collapsedWidth = 56,\n}: AdminLayoutProps) {\n const [internalCollapsed, setInternalCollapsed] = React.useState(defaultCollapsed)\n\n const isControlled = controlledCollapsed !== undefined\n const collapsed = isControlled ? controlledCollapsed : internalCollapsed\n\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalCollapsed(next)\n onCollapsedChange?.(next)\n },\n [isControlled, onCollapsedChange],\n )\n\n const toggleCollapsed = React.useCallback(() => setCollapsed(!collapsed), [collapsed, setCollapsed])\n\n return (\n <AdminLayoutContext.Provider value={{ collapsed, setCollapsed, toggleCollapsed, sidebarWidth, collapsedWidth }}>\n <div className={cn('flex h-screen overflow-hidden bg-background', className)}>{children}</div>\n </AdminLayoutContext.Provider>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { ChevronDown, ChevronRight } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '../ui/badge'\nimport { ScrollArea } from '../ui/scroll-area'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/tooltip'\nimport { useAdminLayout } from './admin-layout-context'\n\nexport interface AdminNavBadge {\n label: string | number\n variant?: 'default' | 'destructive' | 'secondary'\n}\n\nexport interface AdminNavItem {\n label: string\n href?: string\n icon?: LucideIcon\n active?: boolean\n disabled?: boolean\n badge?: AdminNavBadge\n onClick?: React.MouseEventHandler<HTMLElement>\n asChild?: boolean\n children?: AdminNavItem[]\n}\n\nexport interface AdminNavGroup {\n label?: string\n items: AdminNavItem[]\n}\n\nexport interface AdminSidebarProps {\n groups?: AdminNavGroup[]\n logo?: React.ReactNode\n footer?: React.ReactNode\n className?: string\n}\n\nfunction NavItemRow({ item, collapsed }: { item: AdminNavItem; collapsed: boolean }) {\n const [open, setOpen] = React.useState(false)\n const hasChildren = item.children && item.children.length > 0\n const Icon = item.icon\n\n const itemContent = (\n <>\n {Icon && <Icon className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />}\n <span className={cn('flex-1 truncate text-sm', collapsed && 'sr-only')}>{item.label}</span>\n {!collapsed && item.badge && (\n <Badge variant={item.badge.variant ?? 'secondary'} className=\"ml-auto h-5 px-1.5 text-xs\">\n {item.badge.label}\n </Badge>\n )}\n {!collapsed && hasChildren && (\n <span className=\"ml-auto\">\n {open ? (\n <ChevronDown className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n ) : (\n <ChevronRight className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n )}\n </span>\n )}\n </>\n )\n\n const baseClass = cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left transition-colors',\n 'text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring',\n item.active && 'bg-sidebar-primary text-sidebar-primary-foreground hover:bg-sidebar-primary/90 hover:text-sidebar-primary-foreground',\n item.disabled && 'pointer-events-none opacity-50',\n collapsed && 'justify-center px-0',\n )\n\n const trigger = hasChildren ? (\n <button\n className={baseClass}\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n disabled={item.disabled}\n >\n {itemContent}\n </button>\n ) : item.asChild ? (\n <Slot className={baseClass} onClick={item.onClick}>\n {itemContent}\n </Slot>\n ) : (\n <a\n href={item.href ?? '#'}\n className={baseClass}\n onClick={item.onClick}\n aria-disabled={item.disabled}\n aria-current={item.active ? 'page' : undefined}\n >\n {itemContent}\n </a>\n )\n\n const wrappedTrigger = collapsed ? (\n <Tooltip>\n <TooltipTrigger asChild>{trigger}</TooltipTrigger>\n <TooltipContent side=\"right\">{item.label}</TooltipContent>\n </Tooltip>\n ) : (\n trigger\n )\n\n return (\n <li>\n {wrappedTrigger}\n {hasChildren && !collapsed && open && (\n <ul className=\"mt-0.5 space-y-0.5 pl-6\">\n {item.children!.map((child) => (\n <NavItemRow key={child.label} item={child} collapsed={false} />\n ))}\n </ul>\n )}\n </li>\n )\n}\n\nexport function AdminSidebar({ groups, logo, footer, className }: AdminSidebarProps) {\n const { collapsed, sidebarWidth, collapsedWidth } = useAdminLayout()\n\n return (\n <TooltipProvider delayDuration={0}>\n <aside\n style={{ width: collapsed ? collapsedWidth : sidebarWidth }}\n className={cn(\n 'hidden md:flex shrink-0 flex-col border-r bg-sidebar transition-all duration-200 overflow-hidden',\n className,\n )}\n aria-label=\"Sidebar navigation\"\n >\n {logo && (\n <div\n className={cn(\n 'flex h-14 shrink-0 items-center border-b border-sidebar-border px-4',\n collapsed && 'justify-center px-0',\n )}\n >\n {logo}\n </div>\n )}\n\n <ScrollArea className=\"flex-1\">\n <nav className=\"p-2\">\n {groups?.map((group, i) => (\n <div key={i} className={cn('mb-4 last:mb-0')}>\n {group.label && (\n <p\n className={cn(\n 'mb-1 px-2 text-xs font-semibold uppercase tracking-wider text-sidebar-foreground/50',\n collapsed && 'hidden',\n )}\n >\n {group.label}\n </p>\n )}\n <ul className=\"space-y-0.5\">\n {group.items.map((item) => (\n <NavItemRow key={item.label} item={item} collapsed={collapsed} />\n ))}\n </ul>\n </div>\n ))}\n </nav>\n </ScrollArea>\n\n {footer && (\n <div\n className={cn(\n 'shrink-0 border-t border-sidebar-border p-2',\n collapsed && 'flex justify-center',\n )}\n >\n {footer}\n </div>\n )}\n </aside>\n </TooltipProvider>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { PanelLeft, PanelLeftClose, User, Settings, LogOut } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { useAdminLayout } from './admin-layout-context'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '../ui/breadcrumb'\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu'\nimport type { BreadcrumbNavItem } from '@/types'\n\nexport interface AdminUserMenuItem {\n label: string\n icon?: LucideIcon\n onClick?: () => void\n href?: string\n destructive?: boolean\n separator?: boolean\n}\n\nexport interface AdminHeaderUser {\n name: string\n email?: string\n avatarSrc?: string\n avatarFallback?: string\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(/\\s+/)\n .map((w) => w[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n}\n\nconst DEFAULT_USER_MENU_ITEMS: AdminUserMenuItem[] = [\n { label: 'Hồ sơ', icon: User },\n { label: 'Cài đặt', icon: Settings },\n { label: 'Đăng xuất', icon: LogOut, destructive: true, separator: true },\n]\n\nexport interface AdminHeaderProps extends React.HTMLAttributes<HTMLElement> {\n title?: string\n breadcrumbs?: BreadcrumbNavItem[]\n actions?: React.ReactNode\n sticky?: boolean\n showToggle?: boolean\n user?: AdminHeaderUser\n userMenuItems?: AdminUserMenuItem[]\n}\n\nconst AdminHeader = React.forwardRef<HTMLElement, AdminHeaderProps>(\n (\n {\n title,\n breadcrumbs,\n actions,\n sticky = false,\n showToggle = true,\n user,\n userMenuItems,\n className,\n ...props\n },\n ref,\n ) => {\n const { collapsed, toggleCollapsed } = useAdminLayout()\n const menuItems = userMenuItems ?? DEFAULT_USER_MENU_ITEMS\n const fallback = user?.avatarFallback ?? (user ? getInitials(user.name) : '')\n\n return (\n <header\n ref={ref as React.Ref<HTMLElement>}\n className={cn(\n 'flex h-14 shrink-0 items-center gap-3 border-b bg-background px-4',\n sticky && 'sticky top-0 z-10',\n className,\n )}\n {...props}\n >\n {showToggle && (\n <button\n onClick={toggleCollapsed}\n aria-label={collapsed ? 'Mở sidebar' : 'Thu sidebar'}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {collapsed ? (\n <PanelLeft className=\"h-4 w-4\" aria-hidden=\"true\" />\n ) : (\n <PanelLeftClose className=\"h-4 w-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n\n <div className=\"flex min-w-0 flex-1 items-center\">\n {breadcrumbs && breadcrumbs.length > 0 ? (\n <Breadcrumb>\n <BreadcrumbList>\n {breadcrumbs.map((crumb, index) => {\n const isLast = index === breadcrumbs.length - 1\n return (\n <React.Fragment key={crumb.label}>\n <BreadcrumbItem>\n {isLast ? (\n <BreadcrumbPage>{crumb.label}</BreadcrumbPage>\n ) : (\n <BreadcrumbLink href={crumb.href ?? '#'}>{crumb.label}</BreadcrumbLink>\n )}\n </BreadcrumbItem>\n {!isLast && <BreadcrumbSeparator />}\n </React.Fragment>\n )\n })}\n </BreadcrumbList>\n </Breadcrumb>\n ) : title ? (\n <h1 className=\"truncate text-sm font-semibold\">{title}</h1>\n ) : null}\n </div>\n\n <div className=\"flex shrink-0 items-center gap-2\">\n {actions}\n\n {user && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className=\"flex items-center rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n aria-label=\"Tài khoản người dùng\"\n >\n <Avatar className=\"h-8 w-8\">\n {user.avatarSrc && <AvatarImage src={user.avatarSrc} alt={user.name} />}\n <AvatarFallback className=\"text-xs\">{fallback}</AvatarFallback>\n </Avatar>\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-medium leading-none\">{user.name}</span>\n {user.email && (\n <span className=\"text-xs leading-none text-muted-foreground\">{user.email}</span>\n )}\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n {menuItems.map((item, i) => {\n const Icon = item.icon\n return (\n <React.Fragment key={i}>\n {item.separator && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={item.onClick}\n className={cn(item.destructive && 'text-destructive focus:text-destructive')}\n asChild={!!item.href}\n >\n {item.href ? (\n <a href={item.href}>\n {Icon && <Icon />}\n {item.label}\n </a>\n ) : (\n <>\n {Icon && <Icon />}\n {item.label}\n </>\n )}\n </DropdownMenuItem>\n </React.Fragment>\n )\n })}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </header>\n )\n },\n)\nAdminHeader.displayName = 'AdminHeader'\n\nexport { AdminHeader }\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface AdminFooterProps extends React.HTMLAttributes<HTMLElement> {}\n\nconst AdminFooter = React.forwardRef<HTMLElement, AdminFooterProps>(\n ({ className, children, ...props }, ref) => (\n <footer\n ref={ref as React.Ref<HTMLElement>}\n className={cn('shrink-0 border-t bg-background px-4 py-3 text-sm text-muted-foreground', className)}\n {...props}\n >\n {children}\n </footer>\n ),\n)\nAdminFooter.displayName = 'AdminFooter'\n\nexport { AdminFooter }\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface AdminContentProps extends React.HTMLAttributes<HTMLElement> {\n padded?: boolean\n}\n\nconst AdminContent = React.forwardRef<HTMLElement, AdminContentProps>(\n ({ className, children, padded = true, ...props }, ref) => (\n <main\n ref={ref as React.Ref<HTMLElement>}\n className={cn('flex flex-1 flex-col overflow-auto', padded && 'p-6', className)}\n {...props}\n >\n {children}\n </main>\n ),\n)\nAdminContent.displayName = 'AdminContent'\n\nexport { AdminContent }\n","import * as React from 'react'\n\nexport interface PublicLayoutContextValue {\n mobileMenuOpen: boolean\n setMobileMenuOpen: (open: boolean) => void\n}\n\nexport const PublicLayoutContext = React.createContext<PublicLayoutContextValue | null>(null)\n\nexport function usePublicLayout(): PublicLayoutContextValue {\n const ctx = React.useContext(PublicLayoutContext)\n if (!ctx) throw new Error('usePublicLayout must be used within PublicLayout')\n return ctx\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport { PublicLayoutContext } from './public-layout-context'\n\nexport interface PublicLayoutProps {\n children: React.ReactNode\n className?: string\n}\n\nexport function PublicLayout({ children, className }: PublicLayoutProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = React.useState(false)\n\n return (\n <PublicLayoutContext.Provider value={{ mobileMenuOpen, setMobileMenuOpen }}>\n <div className={cn('flex min-h-screen flex-col bg-background', className)}>\n {children}\n </div>\n </PublicLayoutContext.Provider>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Menu, ChevronDown } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu'\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from '../ui/sheet'\nimport { Container } from './container'\nimport type { ContainerSize } from './container'\nimport { usePublicLayout } from './public-layout-context'\n\nexport interface PublicNavLink {\n label: string\n href?: string\n active?: boolean\n external?: boolean\n onClick?: React.MouseEventHandler<HTMLElement>\n children?: PublicNavLink[]\n}\n\nexport interface PublicNavbarProps extends React.HTMLAttributes<HTMLElement> {\n logo?: React.ReactNode\n links?: PublicNavLink[]\n cta?: React.ReactNode\n sticky?: boolean\n transparent?: boolean\n transparentThreshold?: number\n mobileMenuTitle?: string\n containerSize?: ContainerSize\n}\n\nfunction NavDesktopLink({ link }: { link: PublicNavLink }) {\n if (link.children && link.children.length > 0) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'gap-1',\n link.active && 'text-foreground',\n )}\n >\n {link.label}\n <ChevronDown className=\"h-3.5 w-3.5 opacity-60\" aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {link.children.map((child) => (\n <DropdownMenuItem key={child.label} asChild={!!child.href}>\n {child.href ? (\n <a\n href={child.href}\n target={child.external ? '_blank' : undefined}\n rel={child.external ? 'noopener noreferrer' : undefined}\n onClick={child.onClick as React.MouseEventHandler<HTMLAnchorElement>}\n aria-current={child.active ? 'page' : undefined}\n >\n {child.label}\n </a>\n ) : (\n <button onClick={child.onClick as React.MouseEventHandler<HTMLButtonElement>}>\n {child.label}\n </button>\n )}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n }\n\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n asChild={!!link.href}\n className={cn(link.active && 'text-foreground')}\n onClick={!link.href ? (link.onClick as React.MouseEventHandler<HTMLButtonElement>) : undefined}\n >\n {link.href ? (\n <a\n href={link.href}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n onClick={link.onClick as React.MouseEventHandler<HTMLAnchorElement>}\n aria-current={link.active ? 'page' : undefined}\n >\n {link.label}\n </a>\n ) : (\n <span>{link.label}</span>\n )}\n </Button>\n )\n}\n\nfunction NavMobileLink({\n link,\n onClose,\n depth = 0,\n}: {\n link: PublicNavLink\n onClose: () => void\n depth?: number\n}) {\n const [open, setOpen] = React.useState(false)\n const hasChildren = link.children && link.children.length > 0\n\n const handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (hasChildren) {\n setOpen((v) => !v)\n return\n }\n link.onClick?.(e)\n onClose()\n }\n\n const baseClass = cn(\n 'flex w-full items-center justify-between rounded-md px-3 py-2 text-sm font-medium transition-colors',\n 'hover:bg-accent hover:text-accent-foreground',\n link.active && 'bg-accent text-accent-foreground',\n depth > 0 && 'pl-6 font-normal',\n )\n\n return (\n <li>\n {link.href && !hasChildren ? (\n <a\n href={link.href}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n className={baseClass}\n aria-current={link.active ? 'page' : undefined}\n onClick={(e) => {\n link.onClick?.(e)\n onClose()\n }}\n >\n {link.label}\n </a>\n ) : (\n <button className={baseClass} onClick={handleClick}>\n {link.label}\n {hasChildren && (\n <ChevronDown\n className={cn(\n 'h-4 w-4 opacity-60 transition-transform',\n open && 'rotate-180',\n )}\n aria-hidden=\"true\"\n />\n )}\n </button>\n )}\n\n {hasChildren && open && (\n <ul className=\"mt-1 space-y-0.5\">\n {link.children!.map((child) => (\n <NavMobileLink key={child.label} link={child} onClose={onClose} depth={depth + 1} />\n ))}\n </ul>\n )}\n </li>\n )\n}\n\nconst PublicNavbar = React.forwardRef<HTMLElement, PublicNavbarProps>(\n (\n {\n logo,\n links,\n cta,\n sticky = false,\n transparent = false,\n transparentThreshold = 60,\n mobileMenuTitle = 'Menu',\n containerSize = 'xl',\n className,\n ...props\n },\n ref,\n ) => {\n const { setMobileMenuOpen } = usePublicLayout()\n const [scrolled, setScrolled] = React.useState(false)\n const [sheetOpen, setSheetOpen] = React.useState(false)\n\n React.useEffect(() => {\n if (!transparent) return\n const handler = () => setScrolled(window.scrollY > transparentThreshold)\n window.addEventListener('scroll', handler, { passive: true })\n handler()\n return () => window.removeEventListener('scroll', handler)\n }, [transparent, transparentThreshold])\n\n const handleSheetOpen = (open: boolean) => {\n setSheetOpen(open)\n setMobileMenuOpen(open)\n }\n\n const isTransparent = transparent && !scrolled\n\n return (\n <header\n ref={ref as React.Ref<HTMLElement>}\n className={cn(\n 'z-50 w-full transition-all duration-200',\n sticky && 'sticky top-0',\n isTransparent\n ? 'bg-transparent'\n : 'border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60',\n className,\n )}\n {...props}\n >\n <Container size={containerSize}>\n <div className=\"flex h-16 items-center gap-6\">\n {/* Logo */}\n {logo && <div className=\"shrink-0\">{logo}</div>}\n\n {/* Desktop nav links */}\n {links && links.length > 0 && (\n <nav className=\"hidden md:flex items-center gap-1\">\n {links.map((link) => (\n <NavDesktopLink key={link.label} link={link} />\n ))}\n </nav>\n )}\n\n {/* Spacer */}\n <div className=\"flex-1\" />\n\n {/* Desktop CTA */}\n {cta && <div className=\"hidden md:flex items-center gap-3\">{cta}</div>}\n\n {/* Mobile hamburger */}\n <div className=\"flex md:hidden\">\n <Sheet open={sheetOpen} onOpenChange={handleSheetOpen}>\n <SheetTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Mở menu\"\n className=\"h-9 w-9\"\n >\n <Menu className=\"h-5 w-5\" aria-hidden=\"true\" />\n </Button>\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"flex flex-col\">\n <SheetHeader>\n <SheetTitle>{mobileMenuTitle}</SheetTitle>\n </SheetHeader>\n\n {links && links.length > 0 && (\n <nav className=\"mt-4 flex-1\">\n <ul className=\"space-y-1\">\n {links.map((link) => (\n <NavMobileLink\n key={link.label}\n link={link}\n onClose={() => handleSheetOpen(false)}\n />\n ))}\n </ul>\n </nav>\n )}\n\n {cta && (\n <div className=\"mt-auto border-t pt-4\">{cta}</div>\n )}\n </SheetContent>\n </Sheet>\n </div>\n </div>\n </Container>\n </header>\n )\n },\n)\nPublicNavbar.displayName = 'PublicNavbar'\n\nexport { PublicNavbar }\n","import * as React from 'react'\nimport {\n Linkedin,\n Twitter,\n Github,\n Instagram,\n Youtube,\n Facebook,\n Mail,\n Globe,\n} from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Separator } from '../ui/separator'\nimport { Container } from './container'\nimport type { ContainerSize } from './container'\n\nexport type PublicFooterSocialPlatform =\n | 'facebook'\n | 'twitter'\n | 'instagram'\n | 'linkedin'\n | 'youtube'\n | 'github'\n | 'email'\n | 'website'\n\nconst socialIconMap: Record<PublicFooterSocialPlatform, LucideIcon> = {\n linkedin: Linkedin,\n twitter: Twitter,\n github: Github,\n instagram: Instagram,\n youtube: Youtube,\n facebook: Facebook,\n email: Mail,\n website: Globe,\n}\n\nexport interface PublicFooterLink {\n label: string\n href: string\n external?: boolean\n}\n\nexport interface PublicFooterLinkGroup {\n heading: string\n links: PublicFooterLink[]\n}\n\nexport interface PublicFooterSocialLink {\n platform: PublicFooterSocialPlatform\n href: string\n label?: string\n}\n\nexport interface PublicFooterProps extends React.HTMLAttributes<HTMLElement> {\n logo?: React.ReactNode\n tagline?: string\n linkGroups?: PublicFooterLinkGroup[]\n socialLinks?: PublicFooterSocialLink[]\n copyright?: React.ReactNode\n newsletter?: React.ReactNode\n containerSize?: ContainerSize\n}\n\nconst PublicFooter = React.forwardRef<HTMLElement, PublicFooterProps>(\n (\n {\n logo,\n tagline,\n linkGroups,\n socialLinks,\n copyright,\n newsletter,\n containerSize = 'xl',\n className,\n ...props\n },\n ref,\n ) => (\n <footer\n ref={ref as React.Ref<HTMLElement>}\n className={cn('border-t bg-background', className)}\n {...props}\n >\n <Container size={containerSize} className=\"py-12\">\n {/* Top area: logo + link groups */}\n <div className=\"flex flex-wrap gap-10\">\n {/* Logo + tagline column */}\n {(logo || tagline) && (\n <div className=\"flex min-w-[160px] flex-1 flex-col gap-3\">\n {logo}\n {tagline && (\n <p className=\"text-sm text-muted-foreground\">{tagline}</p>\n )}\n </div>\n )}\n\n {/* Link group columns */}\n {linkGroups && linkGroups.length > 0 && (\n <div className=\"flex flex-wrap gap-10\">\n {linkGroups.map((group) => (\n <div key={group.heading} className=\"flex min-w-[120px] flex-col gap-3\">\n <p className=\"text-sm font-semibold\">{group.heading}</p>\n <ul className=\"flex flex-col gap-2\">\n {group.links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n className=\"text-sm text-muted-foreground transition-colors hover:text-foreground\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Newsletter slot */}\n {newsletter && <div className=\"mt-10\">{newsletter}</div>}\n\n <Separator className=\"my-8\" />\n\n {/* Bottom bar: copyright + social links */}\n <div className=\"flex flex-wrap items-center justify-between gap-4\">\n {copyright && (\n <p className=\"text-sm text-muted-foreground\">{copyright}</p>\n )}\n\n {socialLinks && socialLinks.length > 0 && (\n <div className=\"flex items-center gap-3\">\n {socialLinks.map((social) => {\n const Icon = socialIconMap[social.platform]\n return (\n <a\n key={social.platform}\n href={social.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={social.label ?? social.platform}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-foreground\"\n >\n <Icon className=\"h-4 w-4\" aria-hidden=\"true\" />\n </a>\n )\n })}\n </div>\n )}\n </div>\n </Container>\n </footer>\n ),\n)\nPublicFooter.displayName = 'PublicFooter'\n\nexport { PublicFooter }\n","'use client'\n\nimport * as React from 'react'\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, MoreHorizontal } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '../ui/button'\n\nexport interface PaginationProps {\n page: number\n totalPages: number\n onPageChange: (page: number) => void\n showFirstLast?: boolean\n siblingCount?: number\n className?: string\n}\n\nfunction buildRange(page: number, total: number, siblings: number): (number | 'ellipsis')[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i)\n\n const left = Math.max(page - siblings, 1)\n const right = Math.min(page + siblings, total - 2)\n\n const result: (number | 'ellipsis')[] = [0]\n if (left > 1) result.push('ellipsis')\n for (let i = left; i <= right; i++) result.push(i)\n if (right < total - 2) result.push('ellipsis')\n result.push(total - 1)\n return result\n}\n\nfunction Pagination({\n page,\n totalPages,\n onPageChange,\n showFirstLast = false,\n siblingCount = 1,\n className,\n}: PaginationProps) {\n if (totalPages <= 1) return null\n const pages = buildRange(page, totalPages, siblingCount)\n\n return (\n <nav role=\"navigation\" aria-label=\"Phân trang\" className={cn('flex items-center gap-1', className)}>\n {showFirstLast && (\n <Button variant=\"outline\" size=\"icon\" onClick={() => onPageChange(0)} disabled={page === 0} aria-label=\"Trang đầu\">\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n )}\n <Button variant=\"outline\" size=\"icon\" onClick={() => onPageChange(page - 1)} disabled={page === 0} aria-label=\"Trang trước\">\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n {pages.map((p, i) =>\n p === 'ellipsis' ? (\n <span key={`e${i}`} className=\"flex h-9 w-9 items-center justify-center\">\n <MoreHorizontal className=\"h-4 w-4 text-muted-foreground\" aria-hidden=\"true\" />\n </span>\n ) : (\n <Button\n key={p}\n variant={p === page ? 'default' : 'outline'}\n size=\"icon\"\n onClick={() => onPageChange(p)}\n aria-label={`Trang ${p + 1}`}\n aria-current={p === page ? 'page' : undefined}\n >\n {p + 1}\n </Button>\n ),\n )}\n\n <Button variant=\"outline\" size=\"icon\" onClick={() => onPageChange(page + 1)} disabled={page >= totalPages - 1} aria-label=\"Trang sau\">\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n {showFirstLast && (\n <Button variant=\"outline\" size=\"icon\" onClick={() => onPageChange(totalPages - 1)} disabled={page >= totalPages - 1} aria-label=\"Trang cuối\">\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n )}\n </nav>\n )\n}\nPagination.displayName = 'Pagination'\n\nexport { Pagination }\n","'use client'\n\nimport * as React from 'react'\nimport { Check } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface StepperStep {\n title: string\n description?: string\n}\n\nexport interface StepperProps {\n steps: StepperStep[]\n activeStep: number\n orientation?: 'horizontal' | 'vertical'\n onStepClick?: (index: number) => void\n className?: string\n}\n\nfunction Stepper({\n steps,\n activeStep,\n orientation = 'horizontal',\n onStepClick,\n className,\n}: StepperProps) {\n return (\n <div\n role=\"list\"\n aria-label=\"Các bước\"\n className={cn(\n orientation === 'horizontal' ? 'flex items-start' : 'flex flex-col',\n className,\n )}\n >\n {steps.map((step, i) => {\n const completed = i < activeStep\n const active = i === activeStep\n const last = i === steps.length - 1\n const clickable = !!onStepClick && i <= activeStep\n\n return (\n <React.Fragment key={i}>\n <div\n role=\"listitem\"\n aria-current={active ? 'step' : undefined}\n className={cn(\n 'flex',\n orientation === 'horizontal' ? 'flex-col items-center' : 'items-start gap-3',\n )}\n >\n {/* Circle */}\n <button\n type=\"button\"\n disabled={!clickable}\n onClick={() => onStepClick?.(i)}\n aria-label={`Bước ${i + 1}: ${step.title}`}\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full border-2 text-xs font-semibold transition-colors',\n completed && 'border-primary bg-primary text-primary-foreground',\n active && 'border-primary bg-background text-primary',\n !completed && !active && 'border-muted-foreground/30 bg-background text-muted-foreground',\n clickable ? 'cursor-pointer' : 'cursor-default',\n )}\n >\n {completed ? <Check className=\"h-4 w-4\" aria-hidden=\"true\" /> : i + 1}\n </button>\n\n {/* Label */}\n <div className={cn(orientation === 'horizontal' ? 'mt-2 text-center' : '')}>\n <p\n className={cn(\n 'text-sm font-medium',\n active ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n {step.title}\n </p>\n {step.description && (\n <p className=\"text-xs text-muted-foreground\">{step.description}</p>\n )}\n </div>\n </div>\n\n {/* Connector */}\n {!last && (\n orientation === 'horizontal' ? (\n <div\n className={cn(\n 'mt-4 h-0.5 flex-1 transition-colors',\n i < activeStep ? 'bg-primary' : 'bg-muted',\n )}\n aria-hidden=\"true\"\n />\n ) : (\n <div\n className={cn(\n 'ml-4 w-0.5 flex-1 self-stretch transition-colors',\n i < activeStep ? 'bg-primary' : 'bg-muted',\n )}\n style={{ minHeight: '1.5rem' }}\n aria-hidden=\"true\"\n />\n )\n )}\n </React.Fragment>\n )\n })}\n </div>\n )\n}\nStepper.displayName = 'Stepper'\n\nexport { Stepper }\n","'use client'\n\nimport * as React from 'react'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { Checkbox } from '../ui/checkbox'\nimport {\n FormControl,\n FormDescription,\n FormField as RHFFormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '../ui/form'\n\nexport interface FormCheckboxProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n disabled?: boolean\n}\n\nexport function FormCheckbox<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n disabled,\n}: FormCheckboxProps<TFieldValues, TName>) {\n return (\n <RHFFormField\n control={control}\n name={name}\n render={({ field }) => (\n <FormItem className=\"flex flex-row items-start space-x-3 space-y-0\">\n <FormControl>\n <Checkbox\n checked={!!field.value}\n onCheckedChange={field.onChange}\n disabled={disabled}\n />\n </FormControl>\n {(label || description) && (\n <div className=\"space-y-1 leading-none\">\n {label && <FormLabel>{label}</FormLabel>}\n {description && <FormDescription>{description}</FormDescription>}\n </div>\n )}\n <FormMessage />\n </FormItem>\n )}\n />\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport type { Control, ControllerRenderProps, FieldPath, FieldValues } from 'react-hook-form'\nimport {\n FormControl,\n FormDescription,\n FormField as RHFFormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '../ui/form'\n\nexport interface FormFieldWrapperProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n label?: string\n description?: string\n required?: boolean\n control: Control<TFieldValues>\n render: (field: ControllerRenderProps<TFieldValues, TName>) => React.ReactNode\n}\n\nexport function FormFieldWrapper<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n label,\n description,\n required,\n control,\n render,\n}: FormFieldWrapperProps<TFieldValues, TName>) {\n return (\n <RHFFormField\n control={control}\n name={name}\n render={({ field }) => (\n <FormItem>\n {label && (\n <FormLabel>\n {label}\n {required && <span className=\"ml-1 text-destructive\" aria-hidden=\"true\">*</span>}\n </FormLabel>\n )}\n <FormControl>{render(field)}</FormControl>\n {description && <FormDescription>{description}</FormDescription>}\n <FormMessage />\n </FormItem>\n )}\n />\n )\n}\n","'use client'\n\nimport type { Locale } from 'date-fns'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { DatePicker } from '../ui/date-picker'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormDatePickerProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n placeholder?: string\n disabled?: boolean\n className?: string\n locale?: Locale\n dateFormat?: string\n}\n\nexport function FormDatePicker<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n required,\n ...pickerProps\n}: FormDatePickerProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <DatePicker\n {...pickerProps}\n value={field.value as Date | undefined}\n onChange={field.onChange}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport type { Locale } from 'date-fns'\nimport type { DateRange } from 'react-day-picker'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { DateRangePicker } from '../ui/date-range-picker'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormDateRangePickerProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n placeholder?: string\n disabled?: boolean\n className?: string\n locale?: Locale\n dateFormat?: string\n numberOfMonths?: number\n}\n\nexport function FormDateRangePicker<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n required,\n ...pickerProps\n}: FormDateRangePickerProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <DateRangePicker\n {...pickerProps}\n {...(field.value !== undefined ? { value: field.value as DateRange } : {})}\n onChange={field.onChange}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport type { Locale } from 'date-fns'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { DateTimePicker } from '../ui/datetime-picker'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormDateTimePickerProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n placeholder?: string\n disabled?: boolean\n className?: string\n withSeconds?: boolean\n locale?: Locale\n dateFormat?: string\n}\n\nexport function FormDateTimePicker<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n required,\n ...pickerProps\n}: FormDateTimePickerProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <DateTimePicker\n {...pickerProps}\n value={field.value as Date | undefined}\n onChange={field.onChange}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport type { Locale } from 'date-fns'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { DateTimeRangePicker, type DateTimeRange } from '../ui/datetime-range-picker'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormDateTimeRangePickerProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n placeholder?: string\n disabled?: boolean\n className?: string\n withSeconds?: boolean\n locale?: Locale\n dateFormat?: string\n numberOfMonths?: number\n}\n\nexport function FormDateTimeRangePicker<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n required,\n ...pickerProps\n}: FormDateTimeRangePickerProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <DateTimeRangePicker\n {...pickerProps}\n {...(field.value !== undefined ? { value: field.value as DateTimeRange } : {})}\n onChange={field.onChange}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { FileUpload } from '../ui/file-upload'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormFileUploadProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n accept?: string\n multiple?: boolean\n maxSize?: number\n placeholder?: string\n disabled?: boolean\n className?: string\n}\n\nexport function FormFileUpload<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({ name, control, label, description, required, ...uploadProps }: FormFileUploadProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <FileUpload\n {...uploadProps}\n value={(field.value as File[] | undefined) ?? []}\n onChange={field.onChange}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { Input } from '../ui/input'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormInputProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'name' | 'defaultValue'> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n}\n\nexport function FormInput<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n required,\n ...inputProps\n}: FormInputProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <Input\n {...inputProps}\n {...field}\n value={field.value ?? ''}\n aria-required={required}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { MultiSelect, type MultiSelectOption } from '../ui/multi-select'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormMultiSelectProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n options: MultiSelectOption[]\n label?: string\n description?: string\n required?: boolean\n placeholder?: string\n searchPlaceholder?: string\n emptyText?: string\n disabled?: boolean\n className?: string\n maxDisplay?: number\n}\n\nexport function FormMultiSelect<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({ name, control, label, description, required, ...selectProps }: FormMultiSelectProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <MultiSelect\n {...selectProps}\n value={(field.value as string[] | undefined) ?? []}\n onChange={field.onChange}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { NumberInput } from '../ui/number-input'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormNumberInputProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'name' | 'defaultValue' | 'type' | 'onChange'> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n}\n\nexport function FormNumberInput<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n required,\n ...inputProps\n}: FormNumberInputProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <NumberInput\n {...inputProps}\n name={field.name}\n ref={field.ref}\n value={field.value ?? 0}\n onBlur={field.onBlur}\n onChange={(e) => {\n const v = e.target.valueAsNumber\n if (!isNaN(v)) field.onChange(v)\n }}\n onValueChange={field.onChange}\n aria-required={required}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { OtpInput } from '../ui/otp-input'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormOtpInputProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n length?: number\n disabled?: boolean\n className?: string\n inputClassName?: string\n}\n\nexport function FormOtpInput<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({ name, control, label, description, required, ...inputProps }: FormOtpInputProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <OtpInput\n {...inputProps}\n value={field.value as string | undefined}\n onChange={field.onChange}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport type { SelectOption } from '@/types'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormSelectProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n options: SelectOption[]\n label?: string\n description?: string\n placeholder?: string\n required?: boolean\n disabled?: boolean\n}\n\nexport function FormSelect<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n options,\n label,\n description,\n placeholder = 'Chọn một giá trị...',\n required,\n disabled,\n}: FormSelectProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <Select\n onValueChange={field.onChange}\n {...(field.value !== undefined ? { defaultValue: field.value as string } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n >\n <SelectTrigger aria-required={required}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n {...(option.disabled !== undefined ? { disabled: option.disabled } : {})}\n >\n <span>{option.label}</span>\n {option.description && (\n <span className=\"ml-1 text-xs text-muted-foreground\">{option.description}</span>\n )}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n />\n )\n}\n","'use client'\n\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { Slider } from '../ui/slider'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormSliderProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n className?: string\n}\n\nexport function FormSlider<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({ name, control, label, description, required, ...sliderProps }: FormSliderProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <Slider\n {...sliderProps}\n value={field.value as number | undefined}\n onChange={field.onChange}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { Switch } from '../ui/switch'\nimport {\n FormControl,\n FormDescription,\n FormField as RHFFormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '../ui/form'\n\nexport interface FormSwitchProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n disabled?: boolean\n}\n\nexport function FormSwitch<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n disabled,\n}: FormSwitchProps<TFieldValues, TName>) {\n return (\n <RHFFormField\n control={control}\n name={name}\n render={({ field }) => (\n <FormItem className=\"flex flex-row items-center justify-between rounded-lg border p-4\">\n {(label || description) && (\n <div className=\"space-y-0.5\">\n {label && <FormLabel>{label}</FormLabel>}\n {description && <FormDescription>{description}</FormDescription>}\n </div>\n )}\n <FormControl>\n <Switch\n checked={!!field.value}\n onCheckedChange={field.onChange}\n disabled={disabled}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { Textarea } from '../ui/textarea'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormTextareaProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'name' | 'defaultValue'> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n}\n\nexport function FormTextarea<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n required,\n ...textareaProps\n}: FormTextareaProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <Textarea\n {...textareaProps}\n {...field}\n value={field.value ?? ''}\n aria-required={required}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form'\nimport { TimePicker } from '../ui/time-picker'\nimport { FormFieldWrapper } from './form-field'\n\nexport interface FormTimePickerProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n control: Control<TFieldValues>\n label?: string\n description?: string\n required?: boolean\n withSeconds?: boolean\n disabled?: boolean\n className?: string\n}\n\nexport function FormTimePicker<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n label,\n description,\n required,\n ...pickerProps\n}: FormTimePickerProps<TFieldValues, TName>) {\n return (\n <FormFieldWrapper\n name={name}\n control={control}\n {...(label !== undefined ? { label } : {})}\n {...(description !== undefined ? { description } : {})}\n {...(required !== undefined ? { required } : {})}\n render={(field) => (\n <TimePicker\n {...pickerProps}\n value={field.value ?? ''}\n onChange={field.onChange}\n />\n )}\n />\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport {\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type VisibilityState,\n type ExpandedState,\n type Row,\n type RowSelectionState,\n type SortingState,\n} from '@tanstack/react-table'\nimport {\n ChevronDown,\n ChevronRight,\n ChevronUp,\n ChevronsUpDown,\n MoreHorizontal,\n Search,\n SlidersHorizontal,\n X,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '../ui/button'\nimport { Checkbox } from '../ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu'\nimport { Input } from '../ui/input'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../ui/table'\nimport { Pagination } from '../navigation/pagination'\n\n// ─── Public types ──────────────────────────────────────────────────────────────\n\nexport interface DataTablePaginationProps {\n pageIndex: number\n pageSize: number\n total: number\n onPageChange: (page: number) => void\n onPageSizeChange?: (size: number) => void\n showFirstLast?: boolean\n siblingCount?: number\n}\n\nexport interface DataTableRowAction<TData> {\n label: string\n icon?: React.ComponentType<{ className?: string }>\n onClick: (row: TData) => void\n /** Đổi màu text sang destructive */\n variant?: 'default' | 'destructive'\n /** Disable dựa vào dữ liệu của dòng */\n disabled?: (row: TData) => boolean\n /** Hiện separator phía trên item này */\n separator?: boolean\n}\n\nexport interface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n loading?: boolean\n pagination?: DataTablePaginationProps\n /** Hiện search input, debounce 300ms */\n searchable?: boolean\n onSearch?: (query: string) => void\n emptyText?: string\n className?: string\n /** Checkbox chọn nhiều dòng */\n enableRowSelection?: boolean\n onRowSelectionChange?: (rows: TData[]) => void\n /** Slot render bulk-action buttons khi có dòng được chọn */\n selectionActions?: React.ReactNode\n /** Render nội dung expand bên dưới mỗi dòng */\n renderSubRow?: (row: Row<TData>) => React.ReactNode\n getRowCanExpand?: (row: Row<TData>) => boolean\n /** Hiện nút toggle ẩn/hiện cột ở góc phải toolbar */\n showColumnToggle?: boolean\n /** Inject cột \"...\" cuối mỗi dòng với dropdown actions */\n rowActions?: DataTableRowAction<TData>[]\n /** Callback khi sort thay đổi — nếu truyền vào thì dùng manualSorting (server-side) */\n onSortChange?: (sorting: SortingState) => void\n}\n\n// ─── Internals ─────────────────────────────────────────────────────────────────\n\nconst PAGE_SIZE_OPTIONS = [10, 20, 50, 100]\nconst SKELETON_ROWS = 5\n\nfunction SortIcon({ sorted }: { sorted: false | 'asc' | 'desc' }) {\n if (sorted === 'asc') return <ChevronUp className=\"ml-1 h-4 w-4 shrink-0\" />\n if (sorted === 'desc') return <ChevronDown className=\"ml-1 h-4 w-4 shrink-0\" />\n return <ChevronsUpDown className=\"ml-1 h-4 w-4 shrink-0 opacity-40\" />\n}\n\nfunction SkeletonCell({ className }: { className?: string }) {\n return <div className={cn('h-4 animate-pulse rounded-md bg-muted', className)} />\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function DataTable<TData, TValue>({\n columns,\n data,\n loading = false,\n pagination,\n searchable = false,\n onSearch,\n emptyText = 'Không có dữ liệu.',\n className,\n enableRowSelection = false,\n onRowSelectionChange,\n selectionActions,\n renderSubRow,\n getRowCanExpand,\n showColumnToggle = false,\n rowActions,\n onSortChange,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({})\n const [expanded, setExpanded] = React.useState<ExpandedState>({})\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\n const [searchValue, setSearchValue] = React.useState('')\n\n // Inject _expand, _select, _actions columns automatically\n const allColumns = React.useMemo<ColumnDef<TData, unknown>[]>(() => {\n const prefix: ColumnDef<TData, unknown>[] = []\n const suffix: ColumnDef<TData, unknown>[] = []\n\n if (renderSubRow) {\n prefix.push({\n id: '_expand',\n size: 44,\n header: () => null,\n cell: ({ row }) =>\n row.getCanExpand() ? (\n <button\n onClick={row.getToggleExpandedHandler()}\n className=\"flex items-center justify-center rounded p-1 text-muted-foreground hover:text-foreground hover:bg-muted transition-colors\"\n aria-label={row.getIsExpanded() ? 'Thu gọn' : 'Mở rộng'}\n aria-expanded={row.getIsExpanded()}\n >\n <ChevronRight\n className={cn(\n 'h-4 w-4 transition-transform duration-200',\n row.getIsExpanded() && 'rotate-90',\n )}\n />\n </button>\n ) : null,\n enableSorting: false,\n enableHiding: false,\n })\n }\n\n if (enableRowSelection) {\n prefix.push({\n id: '_select',\n size: 44,\n header: ({ table }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected()\n ? true\n : table.getIsSomePageRowsSelected()\n ? 'indeterminate'\n : false\n }\n onCheckedChange={(v) => table.toggleAllPageRowsSelected(!!v)}\n aria-label=\"Chọn tất cả dòng\"\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(v) => row.toggleSelected(!!v)}\n onClick={(e) => e.stopPropagation()}\n disabled={!row.getCanSelect()}\n aria-label=\"Chọn dòng này\"\n />\n ),\n enableSorting: false,\n enableHiding: false,\n })\n }\n\n if (rowActions) {\n suffix.push({\n id: '_actions',\n size: 52,\n header: () => null,\n cell: ({ row }) => (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 data-[state=open]:bg-muted\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">Thao tác</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-40\">\n {rowActions.map((action, idx) => (\n <React.Fragment key={idx}>\n {action.separator && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={() => action.onClick(row.original)}\n {...(action.disabled?.(row.original) ? { disabled: true } : {})}\n className={cn(\n action.variant === 'destructive' &&\n 'text-destructive focus:text-destructive focus:bg-destructive/10',\n )}\n >\n {action.icon && <action.icon className=\"mr-2 h-4 w-4\" />}\n {action.label}\n </DropdownMenuItem>\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n ),\n enableSorting: false,\n enableHiding: false,\n })\n }\n\n return [...prefix, ...(columns as ColumnDef<TData, unknown>[]), ...suffix]\n }, [columns, enableRowSelection, renderSubRow, rowActions])\n\n const table = useReactTable({\n data,\n columns: allColumns,\n state: { sorting, rowSelection, expanded, columnVisibility, globalFilter: searchValue },\n enableRowSelection,\n onSortingChange: setSorting,\n onRowSelectionChange: setRowSelection,\n onExpandedChange: setExpanded,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getRowCanExpand: getRowCanExpand ?? (renderSubRow ? () => true : () => false),\n manualPagination: true,\n manualFiltering: !!onSearch,\n manualSorting: !!onSortChange,\n })\n\n React.useEffect(() => {\n if (!onRowSelectionChange) return\n onRowSelectionChange(table.getSelectedRowModel().rows.map((r) => r.original))\n }, [rowSelection]) // eslint-disable-line react-hooks/exhaustive-deps\n\n React.useEffect(() => {\n if (!onSortChange) return\n onSortChange(sorting)\n }, [sorting]) // eslint-disable-line react-hooks/exhaustive-deps\n\n React.useEffect(() => {\n if (!onSearch) return\n const timer = setTimeout(() => onSearch(searchValue), 300)\n return () => clearTimeout(timer)\n }, [searchValue, onSearch])\n\n const selectedCount = Object.keys(rowSelection).length\n const totalPages = pagination ? Math.ceil(pagination.total / pagination.pageSize) : 1\n const hideableColumns = table.getAllLeafColumns().filter((c) => c.getCanHide())\n\n const hasToolbar = searchable || showColumnToggle\n\n return (\n <div className={cn('space-y-3', className)}>\n {/* Toolbar: search + column toggle */}\n {hasToolbar && (\n <div className=\"flex items-center gap-2\">\n {searchable && (\n <div className=\"relative max-w-sm flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground pointer-events-none\" />\n <Input\n placeholder=\"Tìm kiếm...\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n className=\"pl-9\"\n aria-label=\"Tìm kiếm\"\n />\n </div>\n )}\n\n {showColumnToggle && hideableColumns.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"ml-auto gap-1.5\">\n <SlidersHorizontal className=\"h-4 w-4\" />\n Cột\n <ChevronDown className=\"h-4 w-4 opacity-60\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44\">\n <DropdownMenuLabel className=\"text-xs text-muted-foreground font-normal\">\n Hiển thị / ẩn cột\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {hideableColumns.map((col) => {\n const header = col.columnDef.header\n const label = typeof header === 'string' ? header : col.id\n return (\n <DropdownMenuCheckboxItem\n key={col.id}\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(v)}\n >\n {label}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n )}\n\n {/* Selection action bar */}\n {enableRowSelection && selectedCount > 0 && (\n <div className=\"flex items-center gap-3 rounded-md border bg-muted/50 px-4 py-2.5\">\n <span className=\"text-sm font-medium\">\n {selectedCount} dòng đã chọn\n </span>\n {selectionActions && (\n <div className=\"flex items-center gap-2\">{selectionActions}</div>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto h-7 gap-1.5 text-xs\"\n onClick={() => {\n setRowSelection({})\n table.resetRowSelection()\n }}\n >\n <X className=\"h-3 w-3\" />\n Bỏ chọn tất cả\n </Button>\n </div>\n )}\n\n {/* Table */}\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id} className=\"hover:bg-transparent\">\n {headerGroup.headers.map((header) => {\n const canSort = header.column.getCanSort()\n return (\n <TableHead\n key={header.id}\n style={{ width: header.getSize() !== 150 ? header.getSize() : undefined }}\n >\n {header.isPlaceholder ? null : canSort ? (\n <button\n className=\"inline-flex items-center font-medium hover:text-foreground transition-colors -ml-1 px-1 py-0.5 rounded\"\n onClick={header.column.getToggleSortingHandler()}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n <SortIcon sorted={header.column.getIsSorted()} />\n </button>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </TableHead>\n )\n })}\n </TableRow>\n ))}\n </TableHeader>\n\n <TableBody>\n {loading ? (\n Array.from({ length: SKELETON_ROWS }).map((_, rowIdx) => (\n <TableRow key={`skeleton-${rowIdx}`} className=\"hover:bg-transparent\">\n {table.getVisibleLeafColumns().map((_, colIdx) => (\n <TableCell key={colIdx}>\n <SkeletonCell className={colIdx <= 1 ? 'w-3/4' : 'w-1/2'} />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : table.getRowModel().rows.length > 0 ? (\n table.getRowModel().rows.map((row) => (\n <React.Fragment key={row.id}>\n <TableRow data-state={row.getIsSelected() ? 'selected' : undefined}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n {row.getIsExpanded() && renderSubRow && (\n <TableRow className=\"hover:bg-transparent border-b\">\n <TableCell colSpan={row.getVisibleCells().length} className=\"p-0\">\n <div className=\"border-t bg-muted/30 px-6 py-4\">\n {renderSubRow(row)}\n </div>\n </TableCell>\n </TableRow>\n )}\n </React.Fragment>\n ))\n ) : (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell\n colSpan={table.getVisibleLeafColumns().length}\n className=\"h-32 text-center text-muted-foreground\"\n >\n {emptyText}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination */}\n {pagination && (\n <div className=\"flex items-center justify-between gap-4 px-1\">\n <p className=\"text-sm text-muted-foreground shrink-0\">\n {pagination.total === 0\n ? 'Không có kết quả'\n : `${pagination.pageIndex * pagination.pageSize + 1}–${Math.min(\n (pagination.pageIndex + 1) * pagination.pageSize,\n pagination.total,\n )} / ${pagination.total}`}\n </p>\n <div className=\"flex items-center gap-2\">\n {pagination.onPageSizeChange && (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-sm text-muted-foreground\">Hiển thị</span>\n <select\n value={pagination.pageSize}\n onChange={(e) => pagination.onPageSizeChange?.(Number(e.target.value))}\n className=\"h-8 rounded-md border border-input bg-background px-2 text-sm\"\n >\n {PAGE_SIZE_OPTIONS.map((size) => (\n <option key={size} value={size}>{size}</option>\n ))}\n </select>\n </div>\n )}\n <Pagination\n page={pagination.pageIndex}\n totalPages={totalPages}\n onPageChange={pagination.onPageChange}\n {...(pagination.showFirstLast !== undefined && { showFirstLast: pagination.showFirstLast })}\n {...(pagination.siblingCount !== undefined && { siblingCount: pagination.siblingCount })}\n />\n </div>\n </div>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface DescriptionItem {\n label: string\n value: React.ReactNode\n}\n\nexport interface DescriptionListProps {\n items: DescriptionItem[]\n layout?: 'horizontal' | 'vertical'\n striped?: boolean\n labelWidth?: string\n className?: string\n}\n\nfunction DescriptionList({\n items,\n layout = 'horizontal',\n striped = false,\n labelWidth = 'w-36',\n className,\n}: DescriptionListProps) {\n return (\n <dl className={cn('w-full text-sm', className)}>\n {items.map((item, i) => (\n <div\n key={i}\n className={cn(\n layout === 'horizontal' ? 'flex items-start gap-4' : 'flex flex-col gap-0.5',\n 'py-2.5',\n !striped && i !== 0 && 'border-t border-border',\n striped && i % 2 === 0 && 'rounded-sm bg-muted/50 px-2',\n striped && i % 2 !== 0 && 'px-2',\n )}\n >\n <dt className={cn('shrink-0 font-medium text-muted-foreground', layout === 'horizontal' && labelWidth)}>\n {item.label}\n </dt>\n <dd className=\"text-foreground\">{item.value}</dd>\n </div>\n ))}\n </dl>\n )\n}\nDescriptionList.displayName = 'DescriptionList'\n\nexport { DescriptionList }\n","'use client'\n\nimport * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '../ui/button'\n\nexport interface EmptyStateProps {\n icon?: LucideIcon\n title: string\n description?: string\n action?: {\n label: string\n onClick: () => void\n }\n className?: string\n}\n\nexport function EmptyState({ icon: Icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cn('flex flex-col items-center justify-center py-12 text-center', className)}>\n {Icon && (\n <div className=\"mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-muted\">\n <Icon className=\"h-6 w-6 text-muted-foreground\" aria-hidden=\"true\" />\n </div>\n )}\n <h3 className=\"mb-1 text-sm font-semibold text-foreground\">{title}</h3>\n {description && (\n <p className=\"mb-4 max-w-sm text-sm text-muted-foreground\">{description}</p>\n )}\n {action && (\n <Button size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { TrendingDown, TrendingUp } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Card, CardContent, CardHeader, CardTitle } from '../ui/card'\nimport { Skeleton } from '../ui/skeleton'\n\nexport interface StatCardProps {\n title: string\n value: string | number\n change?: { value: number; period: string }\n icon?: LucideIcon\n loading?: boolean\n className?: string\n}\n\nexport function StatCard({ title, value, change, icon: Icon, loading = false, className }: StatCardProps) {\n const isPositive = (change?.value ?? 0) >= 0\n\n return (\n <Card className={className}>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">{title}</CardTitle>\n {Icon && <Icon className=\"h-4 w-4 text-muted-foreground\" aria-hidden=\"true\" />}\n </CardHeader>\n <CardContent>\n {loading ? (\n <div className=\"space-y-2\">\n <Skeleton className=\"h-8 w-24\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n ) : (\n <>\n <div className=\"text-2xl font-bold\">{value}</div>\n {change !== undefined && (\n <p className={cn('mt-1 flex items-center gap-1 text-xs', isPositive ? 'text-green-600' : 'text-destructive')}>\n {isPositive ? (\n <TrendingUp className=\"h-3 w-3\" aria-hidden=\"true\" />\n ) : (\n <TrendingDown className=\"h-3 w-3\" aria-hidden=\"true\" />\n )}\n <span>\n {isPositive ? '+' : ''}{change.value}% {change.period}\n </span>\n </p>\n )}\n </>\n )}\n </CardContent>\n </Card>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type TimelineStatus = 'default' | 'success' | 'warning' | 'error' | 'pending'\n\nexport interface TimelineItem {\n title: string\n description?: React.ReactNode\n time?: string\n icon?: React.ReactNode\n status?: TimelineStatus\n}\n\nexport interface TimelineProps {\n items: TimelineItem[]\n className?: string\n}\n\nconst dotColor: Record<TimelineStatus, string> = {\n default: 'bg-muted-foreground',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n error: 'bg-destructive',\n pending: 'border-2 border-primary bg-primary/20',\n}\n\nfunction Timeline({ items, className }: TimelineProps) {\n return (\n <ol className={cn('relative space-y-0 pl-2', className)}>\n {items.map((item, i) => {\n const last = i === items.length - 1\n const status = item.status ?? 'default'\n\n return (\n <li key={i} className=\"relative pl-7\">\n {/* Vertical connector */}\n {!last && (\n <span\n className=\"absolute left-[5px] top-5 h-full w-0.5 bg-border\"\n aria-hidden=\"true\"\n />\n )}\n {/* Node */}\n <span\n className={cn(\n 'absolute left-0 top-[5px] flex h-3 w-3 items-center justify-center rounded-full',\n item.icon ? 'h-5 w-5 -left-1 border border-border bg-background text-[10px]' : dotColor[status],\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n {/* Content */}\n <div className=\"pb-7\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <p className=\"text-sm font-medium leading-5\">{item.title}</p>\n {item.time && (\n <time className=\"shrink-0 text-xs text-muted-foreground\">{item.time}</time>\n )}\n </div>\n {item.description && (\n <div className=\"mt-0.5 text-sm text-muted-foreground\">{item.description}</div>\n )}\n </div>\n </li>\n )\n })}\n </ol>\n )\n}\nTimeline.displayName = 'Timeline'\n\nexport { Timeline }\n","'use client'\n\nimport * as React from 'react'\nimport { Loader2 } from 'lucide-react'\nimport { Button } from '../ui/button'\nimport {\n AlertDialog,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '../ui/alert-dialog'\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 variant?: 'destructive' | 'default'\n onConfirm: () => void | Promise<void>\n loading?: boolean\n}\n\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = 'Xác nhận',\n cancelLabel = 'Huỷ',\n variant = 'default',\n onConfirm,\n loading = false,\n}: ConfirmDialogProps) {\n const [internalLoading, setInternalLoading] = React.useState(false)\n const isLoading = loading || internalLoading\n\n async function handleConfirm() {\n setInternalLoading(true)\n try {\n await onConfirm()\n } finally {\n setInternalLoading(false)\n }\n }\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)} disabled={isLoading}>\n {cancelLabel}\n </Button>\n <Button\n variant={variant}\n onClick={handleConfirm}\n disabled={isLoading}\n aria-busy={isLoading}\n >\n {isLoading && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" aria-hidden=\"true\" />}\n {confirmLabel}\n </Button>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface LoadingSpinnerProps {\n size?: 'sm' | 'md' | 'lg'\n text?: string\n className?: string\n fullScreen?: boolean\n}\n\nconst sizeMap = {\n sm: 'h-4 w-4',\n md: 'h-6 w-6',\n lg: 'h-10 w-10',\n}\n\nexport function LoadingSpinner({ size = 'md', text, className, fullScreen = false }: LoadingSpinnerProps) {\n const content = (\n <div className={cn('flex flex-col items-center justify-center gap-2', className)}>\n <Loader2 className={cn('animate-spin text-muted-foreground', sizeMap[size])} aria-hidden=\"true\" />\n {text && <p className=\"text-sm text-muted-foreground\">{text}</p>}\n <span className=\"sr-only\">Đang tải...</span>\n </div>\n )\n\n if (fullScreen) {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-background/80 backdrop-blur-sm\">\n {content}\n </div>\n )\n }\n\n return content\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport { cn } from '@/lib/utils'\nimport { LoadingSpinner } from './loading-spinner'\n\nexport interface LoadingOverlayProps {\n open?: boolean\n message?: string\n blur?: boolean\n className?: string\n}\n\nfunction LoadingOverlay({ open = false, message, blur = true, className }: LoadingOverlayProps) {\n const [mounted, setMounted] = React.useState(false)\n React.useEffect(() => { setMounted(true) }, [])\n\n if (!open || !mounted) return null\n\n return ReactDOM.createPortal(\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label={message ?? 'Đang tải...'}\n className={cn(\n 'fixed inset-0 z-[9999] flex flex-col items-center justify-center gap-3',\n 'bg-background/80',\n blur && 'backdrop-blur-sm',\n className,\n )}\n >\n <LoadingSpinner size=\"lg\" />\n {message && <p className=\"text-sm text-foreground/80\">{message}</p>}\n </div>,\n document.body,\n )\n}\nLoadingOverlay.displayName = 'LoadingOverlay'\n\nexport { LoadingOverlay }\n","import * as React from 'react'\nimport { AlertCircle, AlertTriangle, CheckCircle2, Info } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport type ResultStatus = 'success' | 'error' | 'warning' | 'info'\n\nexport interface ResultProps {\n status?: ResultStatus\n icon?: React.ReactNode\n title: string\n description?: React.ReactNode\n extra?: React.ReactNode\n className?: string\n}\n\nconst iconMap: Record<ResultStatus, React.ReactNode> = {\n success: <CheckCircle2 className=\"h-12 w-12 text-green-500\" aria-hidden=\"true\" />,\n error: <AlertCircle className=\"h-12 w-12 text-destructive\" aria-hidden=\"true\" />,\n warning: <AlertTriangle className=\"h-12 w-12 text-yellow-500\" aria-hidden=\"true\" />,\n info: <Info className=\"h-12 w-12 text-blue-500\" aria-hidden=\"true\" />,\n}\n\nfunction Result({\n status = 'info',\n icon,\n title,\n description,\n extra,\n className,\n}: ResultProps) {\n return (\n <div className={cn('flex flex-col items-center gap-4 py-12 text-center', className)}>\n {icon ?? iconMap[status]}\n <div className=\"space-y-1.5\">\n <h2 className=\"text-lg font-semibold\">{title}</h2>\n {description && (\n <div className=\"text-sm text-muted-foreground\">{description}</div>\n )}\n </div>\n {extra && <div className=\"mt-2 flex gap-2\">{extra}</div>}\n </div>\n )\n}\nResult.displayName = 'Result'\n\nexport { Result }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\nimport { Container } from '../layout/container'\nimport type { ContainerSize } from '../layout/container'\n\nexport const sectionVariants = cva('w-full', {\n variants: {\n padding: {\n none: 'py-0',\n sm: 'py-8 md:py-12',\n md: 'py-12 md:py-16',\n lg: 'py-16 md:py-24',\n xl: 'py-24 md:py-32',\n },\n background: {\n default: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n primary: 'bg-primary text-primary-foreground',\n dark: 'bg-gray-900 text-white',\n transparent: '',\n },\n },\n defaultVariants: {\n padding: 'md',\n background: 'default',\n },\n})\n\nexport type SectionVariantProps = VariantProps<typeof sectionVariants>\n\nexport interface SectionProps\n extends React.HTMLAttributes<HTMLElement>,\n SectionVariantProps {\n as?: React.ElementType\n container?: boolean\n containerSize?: ContainerSize\n}\n\nconst Section = React.forwardRef<HTMLElement, SectionProps>(\n (\n {\n as: Comp = 'section',\n padding,\n background,\n container = false,\n containerSize = 'xl',\n className,\n children,\n ...props\n },\n ref,\n ) => (\n <Comp\n ref={ref}\n className={cn(sectionVariants({ padding, background }), className)}\n {...props}\n >\n {container ? <Container size={containerSize}>{children}</Container> : children}\n </Comp>\n ),\n)\nSection.displayName = 'Section'\n\nexport { Section }\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type SectionHeadingAlign = 'left' | 'center' | 'right'\n\nexport interface SectionHeadingProps extends React.HTMLAttributes<HTMLDivElement> {\n eyebrow?: string\n eyebrowClassName?: string\n heading: string\n headingAs?: 'h1' | 'h2' | 'h3' | 'h4'\n headingClassName?: string\n description?: string\n descriptionClassName?: string\n align?: SectionHeadingAlign\n gradient?: boolean\n}\n\nconst alignClass: Record<SectionHeadingAlign, string> = {\n left: 'text-left items-start',\n center: 'text-center items-center',\n right: 'text-right items-end',\n}\n\nconst SectionHeading = React.forwardRef<HTMLDivElement, SectionHeadingProps>(\n (\n {\n eyebrow,\n eyebrowClassName,\n heading,\n headingAs: Heading = 'h2',\n headingClassName,\n description,\n descriptionClassName,\n align = 'center',\n gradient = false,\n className,\n ...props\n },\n ref,\n ) => (\n <div\n ref={ref}\n className={cn('flex flex-col gap-4', alignClass[align], className)}\n {...props}\n >\n {eyebrow && (\n <span\n className={cn(\n 'inline-flex items-center rounded-full border border-primary/20 bg-primary/10 px-3 py-1 text-xs font-semibold uppercase tracking-widest text-primary',\n eyebrowClassName,\n )}\n >\n {eyebrow}\n </span>\n )}\n <Heading\n className={cn(\n 'text-3xl font-bold tracking-tight md:text-4xl',\n gradient && 'bg-gradient-to-br from-foreground to-foreground/60 bg-clip-text text-transparent',\n headingClassName,\n )}\n >\n {heading}\n </Heading>\n {description && (\n <p\n className={cn(\n 'max-w-2xl text-base leading-relaxed text-muted-foreground md:text-lg',\n descriptionClassName,\n )}\n >\n {description}\n </p>\n )}\n </div>\n ),\n)\nSectionHeading.displayName = 'SectionHeading'\n\nexport { SectionHeading }\n","import * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '../ui/button'\nimport type { ButtonProps } from '../ui/button'\nimport { Container } from '../layout/container'\nimport type { ContainerSize } from '../layout/container'\nimport { sectionVariants, type SectionVariantProps } from './section'\nimport { SectionHeading } from './section-heading'\n\nexport interface HeroAction {\n label: string\n href?: string\n onClick?: React.MouseEventHandler<HTMLElement>\n variant?: ButtonProps['variant']\n size?: ButtonProps['size']\n asChild?: boolean\n icon?: LucideIcon\n}\n\nexport type HeroMediaPosition = 'right' | 'left' | 'bottom' | 'background'\nexport type HeroMinHeight = 'screen' | 'half' | 'auto'\n\nexport interface HeroSectionProps\n extends React.HTMLAttributes<HTMLElement>,\n SectionVariantProps {\n eyebrow?: string\n heading: string\n description?: string\n primaryAction?: HeroAction\n secondaryAction?: HeroAction\n media?: React.ReactNode\n mediaPosition?: HeroMediaPosition\n align?: 'left' | 'center'\n minHeight?: HeroMinHeight\n containerSize?: ContainerSize\n}\n\nconst minHeightClass: Record<HeroMinHeight, string> = {\n screen: 'min-h-screen',\n half: 'min-h-[50vh]',\n auto: '',\n}\n\nfunction renderAction(action: HeroAction) {\n const Icon = action.icon\n const variant = action.variant ?? 'default'\n const size = action.size ?? 'lg'\n\n if (action.href) {\n return (\n <Button key={action.label} variant={variant} size={size} asChild>\n <a href={action.href}>\n {Icon && <Icon aria-hidden=\"true\" />}\n {action.label}\n </a>\n </Button>\n )\n }\n return (\n <Button\n key={action.label}\n variant={variant}\n size={size}\n onClick={action.onClick as React.MouseEventHandler<HTMLButtonElement>}\n >\n {Icon && <Icon aria-hidden=\"true\" />}\n {action.label}\n </Button>\n )\n}\n\nexport function HeroSection({\n eyebrow,\n heading,\n description,\n primaryAction,\n secondaryAction,\n media,\n mediaPosition = 'right',\n align,\n minHeight = 'auto',\n padding = 'xl',\n background,\n containerSize = 'xl',\n className,\n ...props\n}: HeroSectionProps) {\n const hasMedia = !!media\n const effectiveAlign = align ?? (hasMedia && mediaPosition !== 'background' ? 'left' : 'center')\n const isBackground = mediaPosition === 'background'\n const isSplit = hasMedia && (mediaPosition === 'right' || mediaPosition === 'left')\n\n const actions = (primaryAction || secondaryAction) && (\n <div\n className={cn(\n 'flex flex-wrap items-center gap-3',\n effectiveAlign === 'center' && 'justify-center',\n )}\n >\n {primaryAction && renderAction(primaryAction)}\n {secondaryAction && renderAction({ variant: 'outline', ...secondaryAction })}\n </div>\n )\n\n const textContent = (\n <div className=\"flex flex-col gap-8\">\n <SectionHeading\n heading={heading}\n align={effectiveAlign}\n headingAs=\"h1\"\n headingClassName=\"text-4xl font-extrabold tracking-tight md:text-5xl lg:text-6xl\"\n gradient\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n {actions}\n </div>\n )\n\n return (\n <section\n className={cn(\n sectionVariants({ padding, background }),\n minHeightClass[minHeight],\n 'relative overflow-hidden',\n className,\n )}\n {...props}\n >\n {/* Decorative radial glow */}\n {!background && (\n <div className=\"pointer-events-none absolute inset-0 -z-10\">\n <div className=\"absolute -top-1/3 left-1/2 h-[600px] w-[600px] -translate-x-1/2 rounded-full bg-primary/5 blur-3xl\" />\n <div className=\"absolute -bottom-1/4 right-0 h-[400px] w-[400px] rounded-full bg-primary/5 blur-3xl\" />\n </div>\n )}\n\n {isBackground && media && (\n <div className=\"absolute inset-0 -z-10 overflow-hidden\">{media}</div>\n )}\n\n <Container size={containerSize} className={cn(isBackground && 'relative z-10')}>\n {isSplit ? (\n <div\n className={cn(\n 'grid grid-cols-1 items-center gap-12 lg:grid-cols-2',\n mediaPosition === 'left' && 'lg:[&>*:first-child]:order-last',\n )}\n >\n {textContent}\n <div className=\"w-full\">{media}</div>\n </div>\n ) : mediaPosition === 'bottom' ? (\n <div className=\"flex flex-col items-center gap-12\">\n {textContent}\n {media && <div className=\"w-full\">{media}</div>}\n </div>\n ) : (\n textContent\n )}\n </Container>\n </section>\n )\n}\n","import * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '../ui/badge'\nimport { Container } from '../layout/container'\nimport type { ContainerSize } from '../layout/container'\nimport { sectionVariants, type SectionVariantProps } from './section'\nimport { SectionHeading, type SectionHeadingAlign } from './section-heading'\n\nexport interface FeatureItem {\n icon?: LucideIcon | React.ReactNode\n title: string\n description: string\n href?: string\n badge?: string\n}\n\nexport type FeatureVariant = 'card' | 'icon-left' | 'minimal'\n\nconst columnsClass: Record<2 | 3 | 4, string> = {\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n}\n\nfunction isLucideIcon(icon: unknown): icon is LucideIcon {\n return typeof icon === 'function'\n}\n\nfunction IconRenderer({ icon, className }: { icon: LucideIcon | React.ReactNode; className?: string }) {\n if (isLucideIcon(icon)) {\n const Icon = icon\n return <Icon className={cn('h-5 w-5', className)} aria-hidden=\"true\" />\n }\n return <>{icon}</>\n}\n\nexport interface FeatureCardProps {\n item: FeatureItem\n variant: FeatureVariant\n className?: string\n}\n\nexport function FeatureCard({ item, variant, className }: FeatureCardProps) {\n if (variant === 'card') {\n return (\n <div\n className={cn(\n 'group flex flex-col gap-5 rounded-2xl border border-border/60 bg-card p-6',\n 'shadow-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-lg hover:border-border',\n className,\n )}\n >\n {item.icon && (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-primary/20 to-primary/5 text-primary ring-1 ring-primary/10 transition-transform duration-300 group-hover:scale-110\">\n <IconRenderer icon={item.icon} />\n </div>\n )}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n {item.href ? (\n <a href={item.href} className=\"font-semibold hover:text-primary transition-colors\">\n {item.title}\n </a>\n ) : (\n <span className=\"font-semibold\">{item.title}</span>\n )}\n {item.badge && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {item.badge}\n </Badge>\n )}\n </div>\n <p className=\"text-sm leading-relaxed text-muted-foreground\">{item.description}</p>\n </div>\n </div>\n )\n }\n\n if (variant === 'icon-left') {\n return (\n <div className={cn('flex gap-4', className)}>\n {item.icon && (\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-primary/20 to-primary/5 text-primary ring-1 ring-primary/10\">\n <IconRenderer icon={item.icon} />\n </div>\n )}\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center gap-2\">\n {item.href ? (\n <a href={item.href} className=\"font-semibold text-sm hover:text-primary transition-colors\">\n {item.title}\n </a>\n ) : (\n <span className=\"font-semibold text-sm\">{item.title}</span>\n )}\n {item.badge && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {item.badge}\n </Badge>\n )}\n </div>\n <p className=\"text-sm leading-relaxed text-muted-foreground\">{item.description}</p>\n </div>\n </div>\n )\n }\n\n // minimal\n return (\n <div className={cn('group flex flex-col gap-4', className)}>\n {item.icon && (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-primary/20 to-primary/5 text-primary ring-1 ring-primary/10 transition-transform duration-300 group-hover:scale-110\">\n <IconRenderer icon={item.icon} />\n </div>\n )}\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-base font-semibold\">\n {item.href ? (\n <a href={item.href} className=\"hover:text-primary transition-colors\">{item.title}</a>\n ) : item.title}\n </span>\n {item.badge && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {item.badge}\n </Badge>\n )}\n </div>\n <p className=\"text-sm leading-relaxed text-muted-foreground\">{item.description}</p>\n </div>\n </div>\n )\n}\n\nexport interface FeatureSectionProps\n extends React.HTMLAttributes<HTMLElement>,\n SectionVariantProps {\n eyebrow?: string\n heading?: string\n description?: string\n headingAlign?: SectionHeadingAlign\n features: FeatureItem[]\n columns?: 2 | 3 | 4\n variant?: FeatureVariant\n containerSize?: ContainerSize\n}\n\nexport function FeatureSection({\n eyebrow,\n heading,\n description,\n headingAlign = 'center',\n features,\n columns = 3,\n variant = 'card',\n padding,\n background,\n containerSize = 'xl',\n className,\n ...props\n}: FeatureSectionProps) {\n return (\n <section\n className={cn(sectionVariants({ padding, background }), className)}\n {...props}\n >\n <Container size={containerSize}>\n <div className=\"flex flex-col gap-14\">\n {(eyebrow || heading || description) && (\n <SectionHeading\n heading={heading ?? ''}\n align={headingAlign}\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n )}\n\n <div className={cn('grid gap-6', columnsClass[columns])}>\n {features.map((feature, i) => (\n <FeatureCard key={i} item={feature} variant={variant} />\n ))}\n </div>\n </div>\n </Container>\n </section>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '../ui/button'\nimport type { ButtonProps } from '../ui/button'\nimport { Container } from '../layout/container'\nimport type { ContainerSize } from '../layout/container'\nimport { sectionVariants, type SectionVariantProps } from './section'\nimport { SectionHeading } from './section-heading'\n\nexport interface CTASectionAction {\n label: string\n href?: string\n onClick?: React.MouseEventHandler<HTMLElement>\n variant?: ButtonProps['variant']\n size?: ButtonProps['size']\n asChild?: boolean\n}\n\nexport type CTASectionVariant = 'simple' | 'split' | 'boxed'\n\nexport interface CTASectionProps\n extends React.HTMLAttributes<HTMLElement>,\n SectionVariantProps {\n eyebrow?: string\n heading: string\n description?: string\n primaryAction?: CTASectionAction\n secondaryAction?: CTASectionAction\n align?: 'left' | 'center'\n variant?: CTASectionVariant\n containerSize?: ContainerSize\n}\n\nfunction renderAction(action: CTASectionAction, defaultVariant: ButtonProps['variant'] = 'default') {\n const variant = action.variant ?? defaultVariant\n if (action.href) {\n return (\n <Button key={action.label} variant={variant} size={action.size ?? 'lg'} asChild>\n <a href={action.href}>{action.label}</a>\n </Button>\n )\n }\n return (\n <Button\n key={action.label}\n variant={variant}\n size={action.size ?? 'lg'}\n onClick={action.onClick as React.MouseEventHandler<HTMLButtonElement>}\n >\n {action.label}\n </Button>\n )\n}\n\nexport function CTASection({\n eyebrow,\n heading,\n description,\n primaryAction,\n secondaryAction,\n align = 'center',\n variant = 'simple',\n padding = 'lg',\n background = 'primary',\n containerSize = 'xl',\n className,\n ...props\n}: CTASectionProps) {\n const isPrimary = background === 'primary' || background === 'dark'\n const primaryBtnVariant: ButtonProps['variant'] = isPrimary ? 'secondary' : 'default'\n const secondaryBtnVariant: ButtonProps['variant'] = isPrimary ? 'outline' : 'outline'\n\n const actions = (primaryAction || secondaryAction) && (\n <div\n className={cn(\n 'flex flex-wrap items-center gap-4',\n align === 'center' && variant !== 'split' && 'justify-center',\n )}\n >\n {primaryAction && renderAction(primaryAction, primaryBtnVariant)}\n {secondaryAction && renderAction(secondaryAction, secondaryBtnVariant)}\n </div>\n )\n\n if (variant === 'boxed') {\n return (\n <section\n className={cn(sectionVariants({ padding, background: 'muted' }), className)}\n {...props}\n >\n <Container size={containerSize}>\n <div className=\"relative overflow-hidden rounded-3xl border border-primary/20 bg-gradient-to-br from-primary/10 via-card to-primary/5 p-8 shadow-sm md:p-14\">\n {/* Decorative circles */}\n <div className=\"pointer-events-none absolute -right-16 -top-16 h-48 w-48 rounded-full bg-primary/10 blur-2xl\" />\n <div className=\"pointer-events-none absolute -bottom-16 -left-16 h-48 w-48 rounded-full bg-primary/10 blur-2xl\" />\n\n <div\n className={cn(\n 'relative flex flex-col gap-6',\n align === 'center' && 'items-center text-center',\n )}\n >\n <SectionHeading\n heading={heading}\n align={align}\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n {actions}\n </div>\n </div>\n </Container>\n </section>\n )\n }\n\n if (variant === 'split') {\n return (\n <section\n className={cn(sectionVariants({ padding, background }), 'relative overflow-hidden', className)}\n {...props}\n >\n {isPrimary && (\n <>\n <div className=\"pointer-events-none absolute -right-20 -top-20 h-64 w-64 rounded-full bg-white/10 blur-3xl\" />\n <div className=\"pointer-events-none absolute -bottom-20 -left-20 h-64 w-64 rounded-full bg-white/10 blur-3xl\" />\n </>\n )}\n <Container size={containerSize} className=\"relative\">\n <div className=\"flex flex-col gap-8 md:flex-row md:items-center md:justify-between\">\n <div className=\"flex-1\">\n <SectionHeading\n heading={heading}\n align=\"left\"\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n </div>\n {actions && <div className=\"shrink-0\">{actions}</div>}\n </div>\n </Container>\n </section>\n )\n }\n\n // simple\n return (\n <section\n className={cn(sectionVariants({ padding, background }), 'relative overflow-hidden', className)}\n {...props}\n >\n {/* Decorative glow blobs */}\n {isPrimary && (\n <>\n <div className=\"pointer-events-none absolute -right-20 top-0 h-72 w-72 rounded-full bg-white/10 blur-3xl\" />\n <div className=\"pointer-events-none absolute -left-20 bottom-0 h-72 w-72 rounded-full bg-white/10 blur-3xl\" />\n </>\n )}\n\n <Container size={containerSize} className=\"relative\">\n <div\n className={cn(\n 'flex flex-col gap-6',\n align === 'center' && 'items-center text-center',\n )}\n >\n <SectionHeading\n heading={heading}\n align={align}\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n {actions}\n </div>\n </Container>\n </section>\n )\n}\n","import * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Container } from '../layout/container'\nimport type { ContainerSize } from '../layout/container'\nimport { sectionVariants, type SectionVariantProps } from './section'\nimport { SectionHeading, type SectionHeadingAlign } from './section-heading'\n\nexport interface StatItem {\n value: string\n label: string\n description?: string\n icon?: LucideIcon\n}\n\nexport type StatsVariant = 'simple' | 'card' | 'bordered'\n\nconst columnsClass: Record<2 | 3 | 4, string> = {\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-3',\n 4: 'grid-cols-2 sm:grid-cols-4',\n}\n\nexport interface StatsSectionProps\n extends React.HTMLAttributes<HTMLElement>,\n SectionVariantProps {\n eyebrow?: string\n heading?: string\n description?: string\n headingAlign?: SectionHeadingAlign\n stats: StatItem[]\n columns?: 2 | 3 | 4\n variant?: StatsVariant\n containerSize?: ContainerSize\n}\n\nfunction StatItemCard({\n stat,\n variant,\n}: {\n stat: StatItem\n variant: StatsVariant\n}) {\n const Icon = stat.icon\n\n if (variant === 'card') {\n return (\n <div className=\"flex flex-col items-center gap-3 rounded-2xl border border-border/60 bg-card p-8 text-center shadow-sm transition-all duration-300 hover:shadow-md hover:-translate-y-0.5\">\n {Icon && (\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-primary/20 to-primary/5 text-primary ring-1 ring-primary/10\">\n <Icon className=\"h-5 w-5\" aria-hidden=\"true\" />\n </div>\n )}\n <p className=\"bg-gradient-to-br from-primary to-primary/50 bg-clip-text text-5xl font-black text-transparent\">\n {stat.value}\n </p>\n <div>\n <p className=\"font-semibold\">{stat.label}</p>\n {stat.description && (\n <p className=\"mt-0.5 text-sm text-muted-foreground\">{stat.description}</p>\n )}\n </div>\n </div>\n )\n }\n\n if (variant === 'bordered') {\n return (\n <div className=\"border-l-2 border-primary py-4 pl-6\">\n <p className=\"bg-gradient-to-br from-primary to-primary/50 bg-clip-text text-4xl font-black text-transparent md:text-5xl\">\n {stat.value}\n </p>\n <p className=\"mt-1 font-semibold\">{stat.label}</p>\n {stat.description && (\n <p className=\"mt-0.5 text-sm text-muted-foreground\">{stat.description}</p>\n )}\n </div>\n )\n }\n\n // simple\n return (\n <div className=\"flex flex-col items-center gap-2 text-center\">\n {Icon && (\n <div className=\"mb-1 flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-primary/20 to-primary/5 text-primary\">\n <Icon className=\"h-5 w-5\" aria-hidden=\"true\" />\n </div>\n )}\n <p className=\"bg-gradient-to-br from-primary to-primary/50 bg-clip-text text-5xl font-black text-transparent md:text-6xl\">\n {stat.value}\n </p>\n <p className=\"font-semibold\">{stat.label}</p>\n {stat.description && (\n <p className=\"text-sm text-muted-foreground\">{stat.description}</p>\n )}\n </div>\n )\n}\n\nexport function StatsSection({\n eyebrow,\n heading,\n description,\n headingAlign = 'center',\n stats,\n columns,\n variant = 'simple',\n padding,\n background,\n containerSize = 'xl',\n className,\n ...props\n}: StatsSectionProps) {\n const effectiveCols: 2 | 3 | 4 =\n columns ?? (stats.length <= 2 ? 2 : stats.length === 3 ? 3 : 4)\n\n return (\n <section\n className={cn(sectionVariants({ padding, background }), className)}\n {...props}\n >\n <Container size={containerSize}>\n <div className=\"flex flex-col gap-14\">\n {(eyebrow || heading || description) && (\n <SectionHeading\n heading={heading ?? ''}\n align={headingAlign}\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n )}\n\n <div className={cn('grid gap-8', columnsClass[effectiveCols])}>\n {stats.map((stat, i) => (\n <StatItemCard key={i} stat={stat} variant={variant} />\n ))}\n </div>\n </div>\n </Container>\n </section>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar'\nimport { Container } from '../layout/container'\nimport type { ContainerSize } from '../layout/container'\nimport { sectionVariants, type SectionVariantProps } from './section'\nimport { SectionHeading, type SectionHeadingAlign } from './section-heading'\n\nexport interface TestimonialAuthor {\n name: string\n role?: string\n company?: string\n avatarSrc?: string\n avatarFallback?: string\n}\n\nexport interface TestimonialItem {\n quote: string\n author: TestimonialAuthor\n rating?: 1 | 2 | 3 | 4 | 5\n featured?: boolean\n}\n\nexport type TestimonialVariant = 'grid' | 'masonry' | 'featured'\n\nconst columnsClass: Record<1 | 2 | 3, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(/\\s+/)\n .map((w) => w[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n}\n\nexport interface TestimonialCardProps {\n item: TestimonialItem\n featured?: boolean\n className?: string\n}\n\nexport function TestimonialCard({ item, featured = false, className }: TestimonialCardProps) {\n const fallback = item.author.avatarFallback ?? getInitials(item.author.name)\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-5 rounded-2xl border border-border/60 bg-card p-6 shadow-sm',\n 'transition-all duration-300 hover:shadow-md hover:-translate-y-0.5',\n featured && 'ring-2 ring-primary/30',\n className,\n )}\n >\n {item.rating && (\n <div className=\"flex gap-0.5\" aria-label={`${item.rating} sao`}>\n {Array.from({ length: 5 }).map((_, i) => (\n <span\n key={i}\n className={cn(\n 'text-base',\n i < item.rating! ? 'text-amber-400' : 'text-muted-foreground/20',\n )}\n aria-hidden=\"true\"\n >\n ★\n </span>\n ))}\n </div>\n )}\n\n <blockquote className=\"relative flex-1\">\n {/* Decorative open-quote */}\n <span\n className=\"pointer-events-none absolute -left-1 -top-2 select-none text-5xl font-serif leading-none text-primary/15\"\n aria-hidden=\"true\"\n >\n \"\n </span>\n <p className=\"relative pl-4 text-sm leading-relaxed text-muted-foreground\">\n {item.quote}\n </p>\n </blockquote>\n\n <div className=\"flex items-center gap-3 border-t border-border/50 pt-4\">\n <Avatar className=\"h-10 w-10 shrink-0 ring-2 ring-border/50\">\n {item.author.avatarSrc && (\n <AvatarImage src={item.author.avatarSrc} alt={item.author.name} />\n )}\n <AvatarFallback className=\"bg-primary/10 text-xs font-semibold text-primary\">\n {fallback}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-semibold leading-tight\">{item.author.name}</span>\n {(item.author.role || item.author.company) && (\n <span className=\"mt-0.5 text-xs text-muted-foreground\">\n {[item.author.role, item.author.company].filter(Boolean).join(' · ')}\n </span>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport interface TestimonialSectionProps\n extends React.HTMLAttributes<HTMLElement>,\n SectionVariantProps {\n eyebrow?: string\n heading?: string\n description?: string\n headingAlign?: SectionHeadingAlign\n testimonials: TestimonialItem[]\n columns?: 1 | 2 | 3\n variant?: TestimonialVariant\n containerSize?: ContainerSize\n}\n\nexport function TestimonialSection({\n eyebrow,\n heading,\n description,\n headingAlign = 'center',\n testimonials,\n columns = 3,\n variant = 'grid',\n padding,\n background,\n containerSize = 'xl',\n className,\n ...props\n}: TestimonialSectionProps) {\n return (\n <section\n className={cn(sectionVariants({ padding, background }), className)}\n {...props}\n >\n <Container size={containerSize}>\n <div className=\"flex flex-col gap-14\">\n {(eyebrow || heading || description) && (\n <SectionHeading\n heading={heading ?? ''}\n align={headingAlign}\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n )}\n\n {variant === 'masonry' ? (\n <div className=\"columns-1 gap-6 sm:columns-2 lg:columns-3\">\n {testimonials.map((item, i) => (\n <TestimonialCard\n key={i}\n item={item}\n className=\"mb-6 break-inside-avoid\"\n />\n ))}\n </div>\n ) : variant === 'featured' ? (\n <div className=\"flex flex-col gap-6\">\n {testimonials[0] && (\n <TestimonialCard item={testimonials[0]} featured />\n )}\n {testimonials.length > 1 && (\n <div className={cn('grid gap-6', columnsClass[columns])}>\n {testimonials.slice(1).map((item, i) => (\n <TestimonialCard key={i} item={item} />\n ))}\n </div>\n )}\n </div>\n ) : (\n <div className={cn('grid gap-6', columnsClass[columns])}>\n {testimonials.map((item, i) => (\n <TestimonialCard key={i} item={item} />\n ))}\n </div>\n )}\n </div>\n </Container>\n </section>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Check, X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '../ui/badge'\nimport { Button } from '../ui/button'\nimport type { ButtonProps } from '../ui/button'\nimport { Separator } from '../ui/separator'\nimport { Switch } from '../ui/switch'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/tooltip'\nimport { Container } from '../layout/container'\nimport type { ContainerSize } from '../layout/container'\nimport { sectionVariants, type SectionVariantProps } from './section'\nimport { SectionHeading, type SectionHeadingAlign } from './section-heading'\n\nexport interface PricingFeatureItem {\n label: string\n included: boolean | string\n tooltip?: string\n}\n\nexport interface PricingPlanPrice {\n monthly?: string | number\n annual?: string | number\n currency?: string\n unit?: string\n}\n\nexport interface PricingPlanCTA {\n label: string\n href?: string\n onClick?: () => void\n variant?: ButtonProps['variant']\n}\n\nexport interface PricingPlan {\n name: string\n description?: string\n price: PricingPlanPrice\n features: PricingFeatureItem[]\n cta: PricingPlanCTA\n highlighted?: boolean\n highlightLabel?: string\n badge?: string\n}\n\nexport interface PricingBillingToggle {\n enabled: boolean\n defaultPeriod?: 'monthly' | 'annual'\n annualDiscount?: string\n}\n\nexport type BillingPeriod = 'monthly' | 'annual'\n\nexport interface PricingCardProps {\n plan: PricingPlan\n period: BillingPeriod\n className?: string\n}\n\nfunction formatPrice(price: PricingPlanPrice, period: BillingPeriod): string {\n const value = period === 'annual' ? (price.annual ?? price.monthly) : (price.monthly ?? price.annual)\n if (value === undefined) return 'Liên hệ'\n const currency = price.currency ?? ''\n return `${currency}${value}`\n}\n\nexport function PricingCard({ plan, period, className }: PricingCardProps) {\n const ctaVariant: ButtonProps['variant'] =\n plan.cta.variant ?? (plan.highlighted ? 'default' : 'outline')\n\n return (\n <div\n className={cn(\n 'relative flex flex-col overflow-hidden rounded-2xl border border-border/60 bg-card shadow-sm transition-all duration-300',\n plan.highlighted\n ? 'scale-[1.02] border-primary/40 shadow-lg shadow-primary/10 ring-2 ring-primary/30'\n : 'hover:shadow-md hover:-translate-y-0.5',\n className,\n )}\n >\n {/* Highlighted badge */}\n {plan.highlighted && (\n <div className=\"absolute inset-x-0 top-0 h-1 bg-gradient-to-r from-primary/50 via-primary to-primary/50\" />\n )}\n\n {/* Header */}\n <div\n className={cn(\n 'relative p-6',\n plan.highlighted && 'bg-gradient-to-br from-primary/10 to-primary/5',\n )}\n >\n {plan.highlighted && (\n <div className=\"mb-3\">\n <Badge className=\"bg-primary text-primary-foreground text-xs px-2.5 py-0.5\">\n {plan.highlightLabel ?? 'Phổ biến nhất'}\n </Badge>\n </div>\n )}\n {plan.badge && !plan.highlighted && (\n <div className=\"mb-3\">\n <Badge variant=\"secondary\" className=\"text-xs px-2.5 py-0.5\">\n {plan.badge}\n </Badge>\n </div>\n )}\n <h3 className=\"text-lg font-bold\">{plan.name}</h3>\n {plan.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{plan.description}</p>\n )}\n <div className=\"mt-5 flex items-baseline gap-1.5\">\n <span\n className={cn(\n 'text-4xl font-black',\n plan.highlighted\n ? 'bg-gradient-to-br from-primary to-primary/60 bg-clip-text text-transparent'\n : 'text-foreground',\n )}\n >\n {formatPrice(plan.price, period)}\n </span>\n {plan.price.unit && (\n <span className=\"text-sm text-muted-foreground\">{plan.price.unit}</span>\n )}\n </div>\n </div>\n\n <Separator />\n\n {/* Features */}\n <div className=\"flex flex-1 flex-col gap-3 p-6\">\n <TooltipProvider delayDuration={200}>\n {plan.features.map((feature, i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <div\n className={cn(\n 'flex h-5 w-5 shrink-0 items-center justify-center rounded-full',\n feature.included !== false\n ? 'bg-primary/10 text-primary'\n : 'bg-muted text-muted-foreground/50',\n )}\n >\n {feature.included !== false ? (\n <Check className=\"h-3 w-3\" aria-hidden=\"true\" />\n ) : (\n <X className=\"h-3 w-3\" aria-hidden=\"true\" />\n )}\n </div>\n {feature.tooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n 'cursor-default text-sm underline decoration-dotted underline-offset-2',\n feature.included === false && 'text-muted-foreground/50 line-through decoration-solid',\n )}\n >\n {feature.included !== true && feature.included !== false\n ? `${feature.label}: ${feature.included}`\n : feature.label}\n </span>\n </TooltipTrigger>\n <TooltipContent>{feature.tooltip}</TooltipContent>\n </Tooltip>\n ) : (\n <span\n className={cn(\n 'text-sm',\n feature.included === false && 'text-muted-foreground/50 line-through',\n )}\n >\n {feature.included !== true && feature.included !== false\n ? `${feature.label}: ${feature.included}`\n : feature.label}\n </span>\n )}\n </div>\n ))}\n </TooltipProvider>\n </div>\n\n {/* CTA */}\n <div className=\"p-6 pt-0\">\n {plan.cta.href ? (\n <Button\n className={cn('w-full', plan.highlighted && 'shadow-md shadow-primary/20')}\n variant={ctaVariant}\n size=\"lg\"\n asChild\n >\n <a href={plan.cta.href}>{plan.cta.label}</a>\n </Button>\n ) : (\n <Button\n className={cn('w-full', plan.highlighted && 'shadow-md shadow-primary/20')}\n variant={ctaVariant}\n size=\"lg\"\n onClick={plan.cta.onClick}\n >\n {plan.cta.label}\n </Button>\n )}\n </div>\n </div>\n )\n}\n\nexport interface PricingSectionProps\n extends React.HTMLAttributes<HTMLElement>,\n SectionVariantProps {\n eyebrow?: string\n heading?: string\n description?: string\n headingAlign?: SectionHeadingAlign\n plans: PricingPlan[]\n billingToggle?: PricingBillingToggle\n columns?: 2 | 3 | 4\n containerSize?: ContainerSize\n}\n\nconst columnsClass: Record<2 | 3 | 4, string> = {\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n}\n\nexport function PricingSection({\n eyebrow,\n heading,\n description,\n headingAlign = 'center',\n plans,\n billingToggle,\n columns,\n padding,\n background,\n containerSize = 'xl',\n className,\n ...props\n}: PricingSectionProps) {\n const defaultPeriod = billingToggle?.defaultPeriod ?? 'monthly'\n const [isAnnual, setIsAnnual] = React.useState(defaultPeriod === 'annual')\n const period: BillingPeriod = isAnnual ? 'annual' : 'monthly'\n\n const effectiveCols: 2 | 3 | 4 =\n columns ?? (plans.length <= 2 ? 2 : plans.length === 3 ? 3 : 4)\n\n return (\n <section\n className={cn(sectionVariants({ padding, background }), className)}\n {...props}\n >\n <Container size={containerSize}>\n <div className=\"flex flex-col gap-12\">\n {(eyebrow || heading || description) && (\n <SectionHeading\n heading={heading ?? ''}\n align={headingAlign}\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n )}\n\n {billingToggle?.enabled && (\n <div className=\"flex items-center justify-center gap-3\">\n <span\n className={cn(\n 'text-sm font-medium transition-colors',\n !isAnnual ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n Hàng tháng\n </span>\n <Switch\n checked={isAnnual}\n onCheckedChange={setIsAnnual}\n aria-label=\"Chuyển sang thanh toán hàng năm\"\n />\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'text-sm font-medium transition-colors',\n isAnnual ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n Hàng năm\n </span>\n {billingToggle.annualDiscount && (\n <Badge className=\"bg-primary/10 text-primary text-xs\">\n {billingToggle.annualDiscount}\n </Badge>\n )}\n </div>\n </div>\n )}\n\n <div className={cn('grid items-end gap-6', columnsClass[effectiveCols])}>\n {plans.map((plan, i) => (\n <PricingCard key={i} plan={plan} period={period} />\n ))}\n </div>\n </div>\n </Container>\n </section>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@/lib/utils'\nimport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from '../ui/accordion'\nimport { Button } from '../ui/button'\nimport { Card, CardContent } from '../ui/card'\nimport { Container } from '../layout/container'\nimport type { ContainerSize } from '../layout/container'\nimport { sectionVariants, type SectionVariantProps } from './section'\nimport { SectionHeading, type SectionHeadingAlign } from './section-heading'\n\nexport interface FAQItem {\n question: string\n answer: string | React.ReactNode\n value?: string\n}\n\nexport type FAQVariant = 'default' | 'card' | 'separated'\nexport type FAQLayout = 'full' | 'two-column'\n\nexport interface FAQSectionProps\n extends React.HTMLAttributes<HTMLElement>,\n SectionVariantProps {\n eyebrow?: string\n heading?: string\n description?: string\n headingAlign?: SectionHeadingAlign\n items: FAQItem[]\n type?: 'single' | 'multiple'\n collapsible?: boolean\n variant?: FAQVariant\n layout?: FAQLayout\n containerSize?: ContainerSize\n contactCta?: {\n heading?: string\n label: string\n href?: string\n onClick?: () => void\n }\n}\n\nexport function FAQSection({\n eyebrow,\n heading,\n description,\n headingAlign = 'center',\n items,\n type = 'single',\n collapsible = true,\n variant = 'default',\n layout = 'full',\n padding,\n background,\n containerSize = 'xl',\n contactCta,\n className,\n ...props\n}: FAQSectionProps) {\n const normalizedItems = items.map((item, i) => ({\n ...item,\n value: item.value ?? `faq-${i}`,\n }))\n\n const accordionEl = (() => {\n const accordion = (\n <Accordion type={type} collapsible={collapsible}>\n {normalizedItems.map((item) => (\n <AccordionItem key={item.value} value={item.value}>\n <AccordionTrigger>{item.question}</AccordionTrigger>\n <AccordionContent>\n {typeof item.answer === 'string' ? (\n <p className=\"text-muted-foreground\">{item.answer}</p>\n ) : (\n item.answer\n )}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n )\n\n if (variant === 'card') {\n return (\n <Card>\n <CardContent className=\"p-2\">{accordion}</CardContent>\n </Card>\n )\n }\n\n if (variant === 'separated') {\n return (\n <div className=\"flex flex-col gap-3\">\n {normalizedItems.map((item) => (\n <Card key={item.value} className=\"px-1\">\n <Accordion type={type} collapsible={collapsible}>\n <AccordionItem value={item.value} className=\"border-0\">\n <AccordionTrigger>{item.question}</AccordionTrigger>\n <AccordionContent>\n {typeof item.answer === 'string' ? (\n <p className=\"text-muted-foreground\">{item.answer}</p>\n ) : (\n item.answer\n )}\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n </Card>\n ))}\n </div>\n )\n }\n\n return accordion\n })()\n\n const headingEl = (eyebrow || heading || description) && (\n <SectionHeading\n heading={heading ?? ''}\n align={layout === 'two-column' ? 'left' : headingAlign}\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n )\n\n const contactEl = contactCta && (\n <div className=\"mt-10 flex flex-col items-center gap-3 text-center\">\n {contactCta.heading && (\n <p className=\"text-lg font-semibold\">{contactCta.heading}</p>\n )}\n {contactCta.href ? (\n <Button variant=\"outline\" asChild>\n <a href={contactCta.href}>{contactCta.label}</a>\n </Button>\n ) : (\n <Button variant=\"outline\" onClick={contactCta.onClick}>\n {contactCta.label}\n </Button>\n )}\n </div>\n )\n\n return (\n <section\n className={cn(sectionVariants({ padding, background }), className)}\n {...props}\n >\n <Container size={containerSize}>\n {layout === 'two-column' ? (\n <div className=\"grid grid-cols-1 gap-12 lg:grid-cols-2 lg:gap-24\">\n <div className=\"lg:sticky lg:top-24 lg:self-start\">\n {headingEl}\n </div>\n <div>\n {accordionEl}\n {contactEl}\n </div>\n </div>\n ) : (\n <div className=\"flex flex-col gap-12\">\n {headingEl}\n <div className=\"mx-auto w-full max-w-3xl\">\n {accordionEl}\n {contactEl}\n </div>\n </div>\n )}\n </Container>\n </section>\n )\n}\n","import * as React from 'react'\nimport { Linkedin, Twitter, Github, Mail, Globe } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar'\nimport { Badge } from '../ui/badge'\nimport { Container } from '../layout/container'\nimport type { ContainerSize } from '../layout/container'\nimport { sectionVariants, type SectionVariantProps } from './section'\nimport { SectionHeading, type SectionHeadingAlign } from './section-heading'\n\nexport type TeamSocialPlatform = 'linkedin' | 'twitter' | 'github' | 'email' | 'website'\n\nconst teamSocialIconMap: Record<TeamSocialPlatform, LucideIcon> = {\n linkedin: Linkedin,\n twitter: Twitter,\n github: Github,\n email: Mail,\n website: Globe,\n}\n\nexport interface TeamSocialLink {\n platform: TeamSocialPlatform\n href: string\n label?: string\n}\n\nexport interface TeamMember {\n name: string\n role: string\n bio?: string\n avatarSrc?: string\n avatarFallback?: string\n socials?: TeamSocialLink[]\n badge?: string\n}\n\nexport type TeamVariant = 'card' | 'minimal' | 'horizontal'\nexport type TeamAvatarSize = 'sm' | 'md' | 'lg'\n\nconst avatarSizeClass: Record<TeamAvatarSize, string> = {\n sm: 'h-16 w-16',\n md: 'h-24 w-24',\n lg: 'h-32 w-32',\n}\n\nconst columnsClass: Record<2 | 3 | 4 | 5, string> = {\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-5',\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(/\\s+/)\n .map((w) => w[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n}\n\nfunction SocialLinks({ socials }: { socials: TeamSocialLink[] }) {\n return (\n <div className=\"flex items-center gap-1.5\">\n {socials.map((social) => {\n const Icon = teamSocialIconMap[social.platform]\n return (\n <a\n key={social.platform}\n href={social.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={social.label ?? social.platform}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-all hover:bg-primary/10 hover:text-primary\"\n >\n <Icon className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </a>\n )\n })}\n </div>\n )\n}\n\nexport interface TeamMemberCardProps {\n member: TeamMember\n variant: TeamVariant\n avatarSize?: TeamAvatarSize\n className?: string\n}\n\nexport function TeamMemberCard({\n member,\n variant,\n avatarSize = 'md',\n className,\n}: TeamMemberCardProps) {\n const fallback = member.avatarFallback ?? getInitials(member.name)\n\n if (variant === 'card') {\n return (\n <div\n className={cn(\n 'group flex flex-col overflow-hidden rounded-2xl border border-border/60 bg-card shadow-sm transition-all duration-300 hover:shadow-md hover:-translate-y-0.5',\n className,\n )}\n >\n <div className=\"relative aspect-[4/3] w-full overflow-hidden bg-gradient-to-br from-primary/10 to-muted\">\n {member.avatarSrc ? (\n <img\n src={member.avatarSrc}\n alt={member.name}\n className=\"h-full w-full object-cover object-center transition-transform duration-500 group-hover:scale-105\"\n />\n ) : (\n <div className=\"flex h-full w-full items-center justify-center\">\n <span className=\"text-5xl font-black text-primary/20\">{fallback}</span>\n </div>\n )}\n </div>\n <div className=\"flex flex-col gap-1.5 p-5\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"font-semibold leading-tight\">{member.name}</span>\n {member.badge && (\n <Badge variant=\"secondary\" className=\"shrink-0 text-xs\">\n {member.badge}\n </Badge>\n )}\n </div>\n <p className=\"text-sm text-primary font-medium\">{member.role}</p>\n {member.bio && (\n <p className=\"mt-1 text-sm leading-relaxed text-muted-foreground line-clamp-2\">{member.bio}</p>\n )}\n {member.socials && member.socials.length > 0 && (\n <div className=\"mt-3\">\n <SocialLinks socials={member.socials} />\n </div>\n )}\n </div>\n </div>\n )\n }\n\n if (variant === 'horizontal') {\n return (\n <div\n className={cn(\n 'flex gap-4 rounded-2xl border border-border/60 bg-card p-5 shadow-sm transition-all duration-300 hover:shadow-md hover:-translate-y-0.5',\n className,\n )}\n >\n <Avatar className={cn('shrink-0 ring-2 ring-border/50', avatarSizeClass[avatarSize])}>\n {member.avatarSrc && (\n <AvatarImage src={member.avatarSrc} alt={member.name} />\n )}\n <AvatarFallback className=\"bg-primary/10 font-semibold text-primary\">\n {fallback}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-semibold\">{member.name}</span>\n {member.badge && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {member.badge}\n </Badge>\n )}\n </div>\n <p className=\"text-sm font-medium text-primary\">{member.role}</p>\n {member.bio && (\n <p className=\"mt-1.5 text-sm leading-relaxed text-muted-foreground line-clamp-2\">{member.bio}</p>\n )}\n {member.socials && member.socials.length > 0 && (\n <div className=\"mt-2\">\n <SocialLinks socials={member.socials} />\n </div>\n )}\n </div>\n </div>\n )\n }\n\n // minimal\n return (\n <div className={cn('group flex flex-col items-center gap-3 text-center', className)}>\n <div className=\"relative\">\n <Avatar\n className={cn(\n 'ring-2 ring-border/50 transition-transform duration-300 group-hover:scale-105',\n avatarSizeClass[avatarSize],\n )}\n >\n {member.avatarSrc && (\n <AvatarImage src={member.avatarSrc} alt={member.name} />\n )}\n <AvatarFallback className=\"bg-primary/10 text-lg font-bold text-primary\">\n {fallback}\n </AvatarFallback>\n </Avatar>\n </div>\n <div className=\"flex flex-col items-center gap-0.5\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold\">{member.name}</span>\n {member.badge && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {member.badge}\n </Badge>\n )}\n </div>\n <p className=\"text-sm font-medium text-primary\">{member.role}</p>\n </div>\n {member.socials && member.socials.length > 0 && (\n <SocialLinks socials={member.socials} />\n )}\n </div>\n )\n}\n\nexport interface TeamSectionProps\n extends React.HTMLAttributes<HTMLElement>,\n SectionVariantProps {\n eyebrow?: string\n heading?: string\n description?: string\n headingAlign?: SectionHeadingAlign\n members: TeamMember[]\n variant?: TeamVariant\n columns?: 2 | 3 | 4 | 5\n avatarSize?: TeamAvatarSize\n containerSize?: ContainerSize\n}\n\nexport function TeamSection({\n eyebrow,\n heading,\n description,\n headingAlign = 'center',\n members,\n variant = 'card',\n columns = 3,\n avatarSize = 'md',\n padding,\n background,\n containerSize = 'xl',\n className,\n ...props\n}: TeamSectionProps) {\n return (\n <section\n className={cn(sectionVariants({ padding, background }), className)}\n {...props}\n >\n <Container size={containerSize}>\n <div className=\"flex flex-col gap-14\">\n {(eyebrow || heading || description) && (\n <SectionHeading\n heading={heading ?? ''}\n align={headingAlign}\n {...(eyebrow !== undefined && { eyebrow })}\n {...(description !== undefined && { description })}\n />\n )}\n\n <div className={cn('grid gap-6', columnsClass[columns])}>\n {members.map((member, i) => (\n <TeamMemberCard\n key={i}\n member={member}\n variant={variant}\n avatarSize={avatarSize}\n />\n ))}\n </div>\n </div>\n </Container>\n </section>\n )\n}\n","import { useCallback, useState } from 'react'\n\nexport interface UseDisclosureReturn {\n isOpen: boolean\n open: () => void\n close: () => void\n toggle: () => void\n onOpenChange: (open: boolean) => void\n}\n\nexport function useDisclosure(defaultOpen = false): UseDisclosureReturn {\n const [isOpen, setIsOpen] = useState(defaultOpen)\n\n const open = useCallback(() => setIsOpen(true), [])\n const close = useCallback(() => setIsOpen(false), [])\n const toggle = useCallback(() => setIsOpen((v) => !v), [])\n const onOpenChange = useCallback((value: boolean) => setIsOpen(value), [])\n\n return { isOpen, open, close, toggle, onOpenChange }\n}\n","import { useCallback, useEffect, useState } from 'react'\n\nexport function useLocalStorage<T>(key: string, defaultValue: T): [T, (value: T) => void] {\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') return defaultValue\n try {\n const item = window.localStorage.getItem(key)\n return item !== null ? (JSON.parse(item) as T) : defaultValue\n } catch {\n return defaultValue\n }\n })\n\n const setValue = useCallback(\n (value: T) => {\n try {\n setStoredValue(value)\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, JSON.stringify(value))\n }\n } catch {\n // Bỏ qua lỗi storage quota hoặc private mode\n }\n },\n [key],\n )\n\n // Đồng bộ khi tab khác thay đổi cùng key\n useEffect(() => {\n function handleStorage(e: StorageEvent) {\n if (e.key !== key || e.newValue === null) return\n try {\n setStoredValue(JSON.parse(e.newValue) as T)\n } catch {\n // no-op\n }\n }\n window.addEventListener('storage', handleStorage)\n return () => window.removeEventListener('storage', handleStorage)\n }, [key])\n\n return [storedValue, setValue]\n}\n","import { useCallback, useState } from 'react'\n\nexport interface UsePaginationOptions {\n total: number\n defaultPageSize?: number\n defaultPage?: number\n}\n\nexport interface UsePaginationReturn {\n page: number\n pageSize: number\n offset: number\n totalPages: number\n setPage: (page: number) => void\n setPageSize: (size: number) => void\n}\n\nexport function usePagination({\n total,\n defaultPageSize = 10,\n defaultPage = 0,\n}: UsePaginationOptions): UsePaginationReturn {\n const [page, setPageState] = useState(defaultPage)\n const [pageSize, setPageSizeState] = useState(defaultPageSize)\n\n const totalPages = Math.max(1, Math.ceil(total / pageSize))\n\n const setPage = useCallback(\n (nextPage: number) => {\n const clamped = Math.max(0, Math.min(nextPage, totalPages - 1))\n setPageState(clamped)\n },\n [totalPages],\n )\n\n const setPageSize = useCallback((size: number) => {\n setPageSizeState(size)\n setPageState(0)\n }, [])\n\n return {\n page,\n pageSize,\n offset: page * pageSize,\n totalPages,\n setPage,\n setPageSize,\n }\n}\n"]}
|