@payglocal_ui/flux-ui 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +51 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +24 -3
- package/dist/index.d.ts +24 -3
- package/dist/index.js +51 -29
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/src/data-table.tsx +105 -35
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/layout.tsx","../src/grid-flex.tsx","../src/button.tsx","../src/button-group.tsx","../src/input.tsx","../src/password-input.tsx","../src/otp-input.tsx","../src/checkbox-select.tsx","../src/textarea.tsx","../src/label.tsx","../src/checkbox.tsx","../src/radio-group.tsx","../src/switch.tsx","../src/slider.tsx","../src/form.tsx","../src/field.tsx","../src/separator.tsx","../src/input-group.tsx","../src/currency-amount-input.tsx","../src/card.tsx","../src/scroll-area.tsx","../src/side-nav.tsx","../src/breadcrumb.tsx","../src/pagination.tsx","../src/link.tsx","../../../node_modules/@radix-ui/react-slot/src/slot.tsx","../../../node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../src/badge.tsx","../src/lozenge.tsx","../src/tag.tsx","../src/status-badge.tsx","../src/blanket.tsx","../src/spotlight.tsx","../src/dialog.tsx","../src/drawer.tsx","../src/popover.tsx","../src/tooltip.tsx","../src/menu.tsx","../src/dropdown-menu.tsx","../src/select.tsx","../src/command.tsx","../src/tabs.tsx","../src/accordion.tsx","../src/alert.tsx","../src/callout.tsx","../src/section-message.tsx","../src/spinner.tsx","../src/progress.tsx","../src/skeleton.tsx","../src/empty-state.tsx","../src/data-table.tsx","../src/page-header.tsx","../src/code.tsx","../src/avatar.tsx","../src/avatar-group.tsx","../src/avatar-tag.tsx","../src/calendar.tsx","../src/date-picker.tsx","../src/chart.tsx","../src/chart-templates.tsx","../src/sonner.tsx","../src/inline-edit.tsx","../src/inline-dialog.tsx","../src/flag.tsx","../src/responsive.tsx","../src/country-select.tsx","../src/icon-button.tsx","../src/time-picker.tsx","../src/heading.tsx","../src/progress-indicator.tsx","../src/visually-hidden.tsx"],"sourcesContent":["export { cn } from \"./utils\";\n\n// Layout\nexport { Box, Stack, Inline } from \"./layout\";\nexport type { BoxProps, StackProps, InlineProps, LayoutSpacing } from \"./layout\";\nexport { Grid, Flex } from \"./grid-flex\";\nexport type { GridProps, GridCols, GridFlow, ResponsiveCols, FlexProps, FlexDirection, FlexAlign, FlexJustify, FlexWrap } from \"./grid-flex\";\n\n// Button\nexport { Button } from \"./button\";\nexport type { ButtonProps } from \"./button\";\nexport { ButtonGroup, SplitButton, SplitButtonItem } from \"./button-group\";\nexport type { ButtonGroupProps, SplitButtonProps, SplitButtonItemProps } from \"./button-group\";\n\n// Inputs\nexport { Input } from \"./input\";\nexport { PasswordInput } from \"./password-input\";\nexport type { PasswordInputProps } from \"./password-input\";\nexport { OtpInput } from \"./otp-input\";\nexport type { OtpInputProps } from \"./otp-input\";\nexport { CheckboxSelect } from \"./checkbox-select\";\nexport type { CheckboxSelectProps, CheckboxSelectOption } from \"./checkbox-select\";\nexport { Textarea } from \"./textarea\";\nexport { Label } from \"./label\";\nexport { Checkbox } from \"./checkbox\";\nexport type { CheckboxProps } from \"./checkbox\";\nexport { RadioGroup, RadioGroupItem } from \"./radio-group\";\nexport type { RadioGroupItemProps } from \"./radio-group\";\nexport { Switch } from \"./switch\";\nexport type { SwitchProps } from \"./switch\";\nexport { Slider } from \"./slider\";\nexport type { SliderProps } from \"./slider\";\n\n// Form (validation wrapper)\nexport {\n Form,\n FormField,\n FormLabel,\n FormControl,\n FormDescription,\n FormError,\n FormItem,\n useForm,\n} from \"./form\";\nexport type {\n FormProps,\n FormFieldProps,\n FormValues,\n FormErrors,\n FieldConfig,\n FieldsConfig,\n RegisterResult,\n UseFormReturn,\n ValidatorRule,\n} from \"./form\";\n\n// Form fields\nexport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"./field\";\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"./input-group\";\nexport { CurrencyAmountInput } from \"./currency-amount-input\";\n\n// Surfaces\nexport { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from \"./card\";\nexport { Separator } from \"./separator\";\nexport { ScrollArea, ScrollBar } from \"./scroll-area\";\n\n// SideNav\nexport {\n SideNav,\n SideNavHeader,\n SideNavSection,\n SideNavItem,\n SideNavFooter,\n} from \"./side-nav\";\nexport type { SideNavProps, SideNavItemProps } from \"./side-nav\";\n\n// Navigation\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n} from \"./breadcrumb\";\nexport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n} from \"./pagination\";\nexport type {\n PaginationProps,\n PaginationContentProps,\n PaginationItemProps,\n PaginationLinkProps,\n PaginationPreviousProps,\n PaginationNextProps,\n PaginationEllipsisProps,\n} from \"./pagination\";\nexport { Link } from \"./link\";\nexport type { LinkProps } from \"./link\";\n\n// Labels & Badges\nexport { Badge } from \"./badge\";\nexport type { BadgeProps } from \"./badge\";\nexport { Lozenge } from \"./lozenge\";\nexport type { LozengeProps } from \"./lozenge\";\nexport { Tag, TagGroup } from \"./tag\";\nexport type { TagProps, TagGroupProps } from \"./tag\";\nexport { StatusBadge } from \"./status-badge\";\nexport type { StatusBadgeProps, BadgeVariant, BadgeTrailIcon } from \"./status-badge\";\n\n// Overlays\nexport { Blanket } from \"./blanket\";\nexport type { BlanketProps } from \"./blanket\";\nexport { Spotlight, SpotlightCard, useSpotlight } from \"./spotlight\";\nexport type { SpotlightProps, SpotlightCardProps, SpotlightStep, UseSpotlightReturn } from \"./spotlight\";\nexport {\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogClose,\n DialogContent,\n DialogTitle,\n DialogDescription,\n} from \"./dialog\";\nexport {\n Drawer,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n} from \"./drawer\";\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor } from \"./popover\";\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\n\n// Menu (standalone vertical)\nexport { Menu, MenuSection, MenuItem, MenuDivider } from \"./menu\";\nexport type { MenuProps, MenuSectionProps, MenuItemProps } from \"./menu\";\n\n// Menus & Select\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} from \"./dropdown-menu\";\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n} from \"./select\";\nexport { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, CommandShortcut } from \"./command\";\nexport type {\n CommandProps,\n CommandInputProps,\n CommandListProps,\n CommandEmptyProps,\n CommandGroupProps,\n CommandItemProps,\n CommandSeparatorProps,\n CommandShortcutProps,\n} from \"./command\";\n\n// Tabs & Accordion\nexport { Tabs, TabsList, TabsTrigger, TabsContent } from \"./tabs\";\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from \"./accordion\";\n\n// Messaging & Feedback\nexport { Alert, AlertTitle, AlertDescription, Banner } from \"./alert\";\nexport type { AlertProps, BannerProps } from \"./alert\";\nexport { Callout, CalloutIcon, CalloutTitle, CalloutText } from \"./callout\";\nexport type { CalloutProps, CalloutVariant } from \"./callout\";\nexport {\n SectionMessage,\n SectionMessageTitle,\n SectionMessageContent,\n SectionMessageActions,\n} from \"./section-message\";\nexport type { SectionMessageProps, SectionMessageVariant } from \"./section-message\";\nexport { Spinner } from \"./spinner\";\nexport type { SpinnerProps } from \"./spinner\";\nexport { Progress, ProgressTracker } from \"./progress\";\nexport type { ProgressProps, ProgressTrackerStep, ProgressTrackerProps } from \"./progress\";\n\n// Loading & Skeleton\nexport { Shimmer, StatCardSkeleton, TableRowSkeleton, ChartSkeleton } from \"./skeleton\";\n\n// Data display\nexport { DataTable } from \"./data-table\";\nexport type { Column, DataTableDensity, DataTableFooterSummary, DataTableHeaderStyle } from \"./data-table\";\nexport { EmptyState } from \"./empty-state\";\nexport { PageHeader } from \"./page-header\";\nexport { Code, CodeBlock } from \"./code\";\nexport type { CodeProps, CodeBlockProps } from \"./code\";\n\n// Avatar\nexport { Avatar, AvatarImage, AvatarFallback } from \"./avatar\";\nexport { AvatarGroup } from \"./avatar-group\";\nexport type { AvatarGroupProps, AvatarGroupItem } from \"./avatar-group\";\nexport { AvatarTag } from \"./avatar-tag\";\nexport type { AvatarTagProps, AvatarTagSize } from \"./avatar-tag\";\n\n// Date & Calendar\nexport { Calendar, CalendarDayButton } from \"./calendar\";\nexport type { CalendarProps } from \"./calendar\";\nexport type { DateRange } from \"react-day-picker\";\nexport { DatePicker } from \"./date-picker\";\n\n// Charts\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n} from \"./chart\";\nexport type { ChartConfig } from \"./chart\";\nexport {\n MetricSparklineCard,\n DashboardAreaChartTemplate,\n GroupedBarChartTemplate,\n RankedBarListTemplate,\n CategoryBarChartTemplate,\n MiniSparklineChartCard,\n AttentionListTemplate,\n} from \"./chart-templates\";\nexport type {\n MetricSparklinePoint,\n MetricSparklineCardProps,\n DashboardAreaChartPoint,\n DashboardAreaChartTemplateProps,\n GroupedBarSeries,\n GroupedBarChartTemplateProps,\n RankedBarItem,\n RankedBarListTemplateProps,\n CategoryBarPoint,\n CategoryBarChartTemplateProps,\n MiniSparklinePoint,\n MiniSparklineStat,\n MiniSparklineChartCardProps,\n AttentionListItem,\n AttentionListTemplateProps,\n} from \"./chart-templates\";\n\n// Toast\nexport { Toaster, toast } from \"./sonner\";\n\n// Inline Edit\nexport { InlineEdit } from \"./inline-edit\";\nexport type { InlineEditProps } from \"./inline-edit\";\n\n// Inline Dialog\nexport { InlineDialog, InlineDialogTrigger, InlineDialogContent } from \"./inline-dialog\";\nexport type { InlineDialogProps, InlineDialogContentProps } from \"./inline-dialog\";\n\n// Flag notifications\nexport { Flag, FlagGroup, useFlagGroup } from \"./flag\";\nexport type { FlagProps, FlagGroupProps, FlagVariant, FlagAction, FlagGroupPosition, UseFlagGroupReturn } from \"./flag\";\n\n// Responsive Show/Hide\nexport { Show, Hide, useBreakpoint } from \"./responsive\";\nexport type { ShowProps, HideProps, Breakpoint, UseBreakpointReturn } from \"./responsive\";\n\n// Country Select\nexport { CountrySelect, COUNTRIES } from \"./country-select\";\nexport type { CountrySelectProps, Country } from \"./country-select\";\n\n// Button variants\nexport { IconButton } from \"./icon-button\";\nexport type { IconButtonProps } from \"./icon-button\";\n\n// Inputs\nexport { TimePicker } from \"./time-picker\";\nexport type { TimePickerProps } from \"./time-picker\";\n\n// Typography\nexport { Heading, Text, MetricText } from \"./heading\";\nexport type { HeadingProps, TextProps, MetricTextProps } from \"./heading\";\n\n// Status\nexport { ProgressIndicator } from \"./progress-indicator\";\nexport type { ProgressIndicatorProps } from \"./progress-indicator\";\n\n// Utility\nexport { VisuallyHidden } from \"./visually-hidden\";\nexport type { VisuallyHiddenProps } from \"./visually-hidden\";\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cn } from \"./utils\";\n\n/** Maps to Tailwind spacing steps used across PayGlocal dashboard surfaces */\nexport type LayoutSpacing = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst gapClass: Record<LayoutSpacing, string> = {\n none: \"gap-0\",\n xs: \"gap-1\",\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-4\",\n xl: \"gap-6\",\n};\n\nconst padClass: Record<LayoutSpacing, string> = {\n none: \"p-0\",\n xs: \"p-1\",\n sm: \"p-2\",\n md: \"p-4\",\n lg: \"p-6\",\n xl: \"p-8\",\n};\n\nconst padXClass: Record<LayoutSpacing, string> = {\n none: \"px-0\",\n xs: \"px-1\",\n sm: \"px-2\",\n md: \"px-4\",\n lg: \"px-6\",\n xl: \"px-8\",\n};\n\nconst padYClass: Record<LayoutSpacing, string> = {\n none: \"py-0\",\n xs: \"py-1\",\n sm: \"py-2\",\n md: \"py-4\",\n lg: \"py-6\",\n xl: \"py-8\",\n};\n\nexport type BoxProps = React.HTMLAttributes<HTMLDivElement> & {\n as?: React.ElementType;\n p?: LayoutSpacing;\n px?: LayoutSpacing;\n py?: LayoutSpacing;\n};\n\n/** Neutral block with token-aligned padding; extend with `className` for radius, borders, flex, etc. */\nexport function Box({ as: Comp = \"div\", className, p = \"none\", px, py, ...props }: BoxProps) {\n const axis = px !== undefined || py !== undefined;\n return (\n <Comp\n className={cn(\n !axis && padClass[p],\n px !== undefined && padXClass[px],\n py !== undefined && padYClass[py],\n className\n )}\n {...props}\n />\n );\n}\n\nexport type StackProps = React.HTMLAttributes<HTMLDivElement> & {\n as?: React.ElementType;\n gap?: LayoutSpacing;\n align?: \"start\" | \"center\" | \"stretch\" | \"end\";\n};\n\n/** Vertical flex stack; default gap matches common section rhythm (`gap-4`). */\nexport function Stack({\n as: Comp = \"div\",\n className,\n gap = \"lg\",\n align = \"stretch\",\n ...props\n}: StackProps) {\n const alignCls =\n align === \"start\"\n ? \"items-start\"\n : align === \"center\"\n ? \"items-center\"\n : align === \"end\"\n ? \"items-end\"\n : \"items-stretch\";\n return <Comp className={cn(\"flex flex-col\", gapClass[gap], alignCls, className)} {...props} />;\n}\n\nexport type InlineProps = React.HTMLAttributes<HTMLDivElement> & {\n gap?: LayoutSpacing;\n wrap?: boolean;\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n};\n\n/** Horizontal flex row for toolbars and inline field groups */\nexport function Inline({\n className,\n gap = \"md\",\n wrap = false,\n justify = \"start\",\n ...props\n}: InlineProps) {\n const justifyCls =\n justify === \"center\"\n ? \"justify-center\"\n : justify === \"end\"\n ? \"justify-end\"\n : justify === \"between\"\n ? \"justify-between\"\n : \"justify-start\";\n return (\n <div\n className={cn(\"flex flex-row items-center\", gapClass[gap], justifyCls, wrap && \"flex-wrap\", className)}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"./utils\";\nimport type { LayoutSpacing } from \"./layout\";\n\n// ---------------------------------------------------------------------------\n// Shared gap map (mirrors layout.tsx)\n// ---------------------------------------------------------------------------\n\nconst gapClass: Record<LayoutSpacing, string> = {\n none: \"gap-0\",\n xs: \"gap-1\",\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-4\",\n xl: \"gap-6\",\n};\n\n// ---------------------------------------------------------------------------\n// Grid\n// ---------------------------------------------------------------------------\n\nexport type GridCols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | \"auto\";\n\nexport type ResponsiveCols = {\n base?: GridCols;\n sm?: GridCols;\n md?: GridCols;\n lg?: GridCols;\n};\n\nexport type GridFlow = \"row\" | \"col\" | \"dense\";\n\nexport type GridProps = React.HTMLAttributes<HTMLDivElement> & {\n /** Number of columns (1–12 or \"auto\"), or a responsive object */\n cols?: GridCols | ResponsiveCols;\n /** Number of explicit rows */\n rows?: 1 | 2 | 3 | 4 | 5 | 6 | \"auto\";\n /** Gap between cells */\n gap?: LayoutSpacing;\n /** Grid auto-flow direction */\n flow?: GridFlow;\n};\n\nconst colClass: Record<string, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n 6: \"grid-cols-6\",\n 7: \"grid-cols-7\",\n 8: \"grid-cols-8\",\n 9: \"grid-cols-9\",\n 10: \"grid-cols-10\",\n 11: \"grid-cols-11\",\n 12: \"grid-cols-12\",\n auto: \"grid-cols-[repeat(auto-fit,minmax(0,1fr))]\",\n};\n\nconst smColClass: Record<string, string> = {\n 1: \"sm:grid-cols-1\",\n 2: \"sm:grid-cols-2\",\n 3: \"sm:grid-cols-3\",\n 4: \"sm:grid-cols-4\",\n 5: \"sm:grid-cols-5\",\n 6: \"sm:grid-cols-6\",\n 7: \"sm:grid-cols-7\",\n 8: \"sm:grid-cols-8\",\n 9: \"sm:grid-cols-9\",\n 10: \"sm:grid-cols-10\",\n 11: \"sm:grid-cols-11\",\n 12: \"sm:grid-cols-12\",\n auto: \"sm:grid-cols-[repeat(auto-fit,minmax(0,1fr))]\",\n};\n\nconst mdColClass: Record<string, string> = {\n 1: \"md:grid-cols-1\",\n 2: \"md:grid-cols-2\",\n 3: \"md:grid-cols-3\",\n 4: \"md:grid-cols-4\",\n 5: \"md:grid-cols-5\",\n 6: \"md:grid-cols-6\",\n 7: \"md:grid-cols-7\",\n 8: \"md:grid-cols-8\",\n 9: \"md:grid-cols-9\",\n 10: \"md:grid-cols-10\",\n 11: \"md:grid-cols-11\",\n 12: \"md:grid-cols-12\",\n auto: \"md:grid-cols-[repeat(auto-fit,minmax(0,1fr))]\",\n};\n\nconst lgColClass: Record<string, string> = {\n 1: \"lg:grid-cols-1\",\n 2: \"lg:grid-cols-2\",\n 3: \"lg:grid-cols-3\",\n 4: \"lg:grid-cols-4\",\n 5: \"lg:grid-cols-5\",\n 6: \"lg:grid-cols-6\",\n 7: \"lg:grid-cols-7\",\n 8: \"lg:grid-cols-8\",\n 9: \"lg:grid-cols-9\",\n 10: \"lg:grid-cols-10\",\n 11: \"lg:grid-cols-11\",\n 12: \"lg:grid-cols-12\",\n auto: \"lg:grid-cols-[repeat(auto-fit,minmax(0,1fr))]\",\n};\n\nconst rowClass: Record<string, string> = {\n 1: \"grid-rows-1\",\n 2: \"grid-rows-2\",\n 3: \"grid-rows-3\",\n 4: \"grid-rows-4\",\n 5: \"grid-rows-5\",\n 6: \"grid-rows-6\",\n auto: \"grid-rows-none\",\n};\n\nconst flowClass: Record<GridFlow, string> = {\n row: \"grid-flow-row\",\n col: \"grid-flow-col\",\n dense: \"grid-flow-dense\",\n};\n\nfunction resolveColClasses(cols: GridCols | ResponsiveCols | undefined): string {\n if (cols === undefined) return \"\";\n if (typeof cols === \"number\" || cols === \"auto\") {\n return colClass[String(cols)] ?? \"\";\n }\n // Responsive object\n const { base, sm, md, lg } = cols as ResponsiveCols;\n return cn(\n base !== undefined && colClass[String(base)],\n sm !== undefined && smColClass[String(sm)],\n md !== undefined && mdColClass[String(md)],\n lg !== undefined && lgColClass[String(lg)],\n );\n}\n\nexport const Grid = React.forwardRef<HTMLDivElement, GridProps>(\n ({ className, cols, rows, gap = \"md\", flow, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"grid\",\n resolveColClasses(cols),\n rows !== undefined && rowClass[String(rows)],\n gapClass[gap],\n flow !== undefined && flowClass[flow],\n className,\n )}\n {...props}\n />\n );\n },\n);\nGrid.displayName = \"Grid\";\n\n// ---------------------------------------------------------------------------\n// Flex\n// ---------------------------------------------------------------------------\n\nexport type FlexDirection = \"row\" | \"col\" | \"row-reverse\" | \"col-reverse\";\nexport type FlexWrap = boolean | \"reverse\";\nexport type FlexAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type FlexJustify = \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n\nexport type FlexProps = React.HTMLAttributes<HTMLDivElement> & {\n /** Flex direction */\n direction?: FlexDirection;\n /** Whether children wrap */\n wrap?: FlexWrap;\n /** Align items (cross axis) */\n align?: FlexAlign;\n /** Justify content (main axis) */\n justify?: FlexJustify;\n /** Gap between children */\n gap?: LayoutSpacing;\n /** Render as inline-flex */\n inline?: boolean;\n};\n\nconst directionClass: Record<FlexDirection, string> = {\n row: \"flex-row\",\n col: \"flex-col\",\n \"row-reverse\": \"flex-row-reverse\",\n \"col-reverse\": \"flex-col-reverse\",\n};\n\nconst alignClass: Record<FlexAlign, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n};\n\nconst justifyClass: Record<FlexJustify, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n};\n\nexport const Flex = React.forwardRef<HTMLDivElement, FlexProps>(\n (\n {\n className,\n direction = \"row\",\n wrap = false,\n align = \"start\",\n justify = \"start\",\n gap = \"md\",\n inline = false,\n ...props\n },\n ref,\n ) => {\n const wrapCls =\n wrap === true ? \"flex-wrap\" : wrap === \"reverse\" ? \"flex-wrap-reverse\" : \"flex-nowrap\";\n\n return (\n <div\n ref={ref}\n className={cn(\n inline ? \"inline-flex\" : \"flex\",\n directionClass[direction],\n wrapCls,\n alignClass[align],\n justifyClass[justify],\n gapClass[gap],\n className,\n )}\n {...props}\n />\n );\n },\n);\nFlex.displayName = \"Flex\";\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { Loader2 } from \"lucide-react\";\nimport { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"outline\" | \"link\";\n size?: \"sm\" | \"md\" | \"lg\";\n isLoading?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\nconst variantClasses: Record<NonNullable<ButtonProps[\"variant\"]>, string> = {\n primary:\n \"bg-primary text-primary-foreground border border-primary shadow-sm hover:bg-[var(--primary-hover)]\",\n secondary:\n \"bg-muted text-foreground border border-border shadow-sm hover:bg-muted/85 dark:bg-muted/35 dark:text-foreground dark:border-border dark:hover:bg-muted/55\",\n ghost:\n \"bg-transparent text-foreground border border-transparent hover:bg-muted focus-visible:bg-muted/80 active:bg-muted/90\",\n danger:\n \"bg-red-600 text-white border border-red-600 shadow-sm hover:bg-red-700\",\n outline:\n \"bg-card text-foreground border border-border shadow-sm hover:bg-muted\",\n link:\n \"h-auto min-h-0 rounded-md border border-transparent bg-transparent px-2 py-2 text-[15px] font-medium text-primary shadow-none underline-offset-4 hover:bg-primary/5 hover:underline focus-visible:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 disabled:pointer-events-none disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:no-underline\",\n};\n\n/** Heights and padding match dashboard primary actions (~44–48px) and comfortable tap targets. */\nconst sizes = {\n sm: \"h-9 min-h-9 px-3.5 text-xs gap-1.5 rounded-lg\",\n md: \"h-10 min-h-10 px-5 text-sm gap-2 rounded-lg\",\n lg: \"h-[3.25rem] min-h-[3.25rem] px-10 text-[15px] gap-2.5 rounded-xl\",\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n className,\n disabled,\n ...props\n },\n ref\n ) => {\n return (\n <button\n ref={ref}\n disabled={disabled || isLoading}\n className={cn(\n \"inline-flex items-center justify-center font-medium transition-colors duration-pg-fast ease-pg-standard\",\n variant !== \"link\" && \"disabled:cursor-not-allowed disabled:opacity-50\",\n variant === \"link\" && \"justify-center\",\n variant !== \"link\" && \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n variantClasses[variant],\n variant !== \"link\" && sizes[size],\n className\n )}\n {...props}\n >\n {isLoading ? (\n <Loader2\n className={cn(\n \"animate-spin\",\n size === \"sm\" ? \"size-3.5\" : size === \"lg\" ? \"size-[1.125rem]\" : \"size-3.5\"\n )}\n />\n ) : (\n leftIcon\n )}\n <span className={cn(isLoading && \"opacity-70\")}>{children}</span>\n {!isLoading && rightIcon}\n </button>\n );\n }\n);\nButton.displayName = \"Button\";\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { ChevronDown } from \"lucide-react\";\nimport {\n forwardRef,\n useState,\n useRef,\n useEffect,\n type HTMLAttributes,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./button\";\nimport type { ButtonProps } from \"./button\";\n\n// ---------------------------------------------------------------------------\n// ButtonGroup\n// ---------------------------------------------------------------------------\n\nexport interface ButtonGroupProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: \"horizontal\" | \"vertical\";\n variant?: ButtonProps[\"variant\"];\n}\n\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({ orientation = \"horizontal\", variant, className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-variant={variant}\n className={cn(\n \"inline-flex\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n // Horizontal connected borders\n orientation === \"horizontal\" && [\n \"[&>*:not(:first-child)]:rounded-l-none\",\n \"[&>*:not(:last-child)]:rounded-r-none\",\n \"[&>*:not(:first-child)]:-ml-px\",\n ],\n // Vertical connected borders\n orientation === \"vertical\" && [\n \"[&>*:not(:first-child)]:rounded-t-none\",\n \"[&>*:not(:last-child)]:rounded-b-none\",\n \"[&>*:not(:first-child)]:-mt-px\",\n ],\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\nButtonGroup.displayName = \"ButtonGroup\";\n\n// ---------------------------------------------------------------------------\n// SplitButton\n// ---------------------------------------------------------------------------\n\nexport interface SplitButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\"> {\n label: ReactNode;\n onClick?: ButtonHTMLAttributes<HTMLButtonElement>[\"onClick\"];\n children?: ReactNode;\n variant?: ButtonProps[\"variant\"];\n size?: ButtonProps[\"size\"];\n isLoading?: boolean;\n}\n\nexport const SplitButton = forwardRef<HTMLDivElement, SplitButtonProps>(\n (\n {\n label,\n onClick,\n children,\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n className,\n disabled,\n ...props\n },\n ref\n ) => {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Merge forwarded ref with internal ref\n function setRefs(el: HTMLDivElement | null) {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }\n }\n\n // Close dropdown when clicking outside\n useEffect(() => {\n if (!open) return;\n function handleOutside(e: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleOutside);\n return () => document.removeEventListener(\"mousedown\", handleOutside);\n }, [open]);\n\n return (\n <div\n ref={setRefs}\n className={cn(\"relative inline-flex\", className)}\n {...(props as HTMLAttributes<HTMLDivElement>)}\n >\n {/* Primary action button */}\n <Button\n variant={variant}\n size={size}\n isLoading={isLoading}\n disabled={disabled}\n onClick={onClick}\n className=\"rounded-r-none\"\n >\n {label}\n </Button>\n\n {/* Dropdown trigger */}\n <button\n type=\"button\"\n disabled={disabled || isLoading}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className={cn(\n \"inline-flex items-center justify-center px-2 rounded-l-none -ml-px\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n // Match variant styling\n variant === \"primary\" &&\n \"bg-primary text-primary-foreground border border-primary shadow-sm hover:bg-[var(--primary-hover)] border-l border-l-primary-foreground/20\",\n variant === \"secondary\" &&\n \"bg-muted text-foreground border border-border shadow-sm hover:bg-muted/85 dark:bg-muted/35 dark:hover:bg-muted/55 border-l-0\",\n variant === \"outline\" &&\n \"bg-card text-foreground border border-border shadow-sm hover:bg-muted border-l-0\",\n variant === \"ghost\" &&\n \"bg-transparent text-foreground border border-transparent hover:bg-muted border-l-0\",\n variant === \"danger\" &&\n \"bg-red-600 text-white border border-red-600 shadow-sm hover:bg-red-700 border-l border-l-white/20\",\n // Size heights to match Button\n size === \"sm\" && \"h-9 min-h-9 rounded-lg\",\n size === \"md\" && \"h-10 min-h-10 rounded-lg\",\n size === \"lg\" && \"h-[3.25rem] min-h-[3.25rem] rounded-xl\"\n )}\n >\n <ChevronDown\n className={cn(\n \"transition-transform duration-pg-fast ease-pg-standard\",\n open && \"rotate-180\",\n size === \"sm\" ? \"size-3.5\" : size === \"lg\" ? \"size-[1.125rem]\" : \"size-4\"\n )}\n />\n </button>\n\n {/* Dropdown menu */}\n {open && children && (\n <div\n role=\"menu\"\n className={cn(\n \"absolute right-0 top-full mt-1 z-50\",\n \"bg-card border border-border rounded-lg shadow-lg py-1 min-w-32\"\n )}\n >\n {children}\n </div>\n )}\n </div>\n );\n }\n);\nSplitButton.displayName = \"SplitButton\";\n\n// ---------------------------------------------------------------------------\n// SplitButtonItem — convenience wrapper for dropdown items\n// ---------------------------------------------------------------------------\n\nexport interface SplitButtonItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n}\n\nexport const SplitButtonItem = forwardRef<HTMLButtonElement, SplitButtonItemProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <button\n ref={ref}\n role=\"menuitem\"\n type=\"button\"\n className={cn(\n \"block w-full text-left px-3 py-2 text-sm text-foreground\",\n \"hover:bg-muted transition-colors duration-pg-fast ease-pg-standard\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:outline-none focus-visible:bg-muted\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\nSplitButtonItem.displayName = \"SplitButtonItem\";\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-11 min-h-11 w-full rounded-lg border border-border bg-card px-4 py-2 text-[15px] leading-tight shadow-sm transition-colors\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n \"disabled:cursor-not-allowed disabled:bg-muted/40 disabled:opacity-60\",\n \"read-only:bg-muted/25 read-only:text-muted-foreground\",\n \"aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/25 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Eye, EyeOff } from \"lucide-react\";\nimport { cn } from \"./utils\";\nimport { Input } from \"./input\";\n\nexport type PasswordInputProps = Omit<React.ComponentProps<typeof Input>, \"type\">;\n\nexport const PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ className, ...props }, ref) => {\n const [visible, setVisible] = React.useState(false);\n return (\n <div className=\"relative\">\n <Input\n ref={ref}\n type={visible ? \"text\" : \"password\"}\n className={cn(\"pr-10\", className)}\n {...props}\n />\n <button\n type=\"button\"\n onClick={() => setVisible((v) => !v)}\n aria-label={visible ? \"Hide password\" : \"Show password\"}\n tabIndex={-1}\n className=\"absolute inset-y-0 right-0 flex w-10 items-center justify-center text-muted-foreground transition-colors hover:text-foreground\"\n >\n {visible ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n );\n }\n);\nPasswordInput.displayName = \"PasswordInput\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface OtpInputProps {\n /** Current OTP value (controlled). */\n value: string;\n /** Fires with the full joined string on every change. */\n onChange: (value: string) => void;\n /** Number of digit boxes. */\n length?: number;\n /** Fired when all boxes are filled. */\n onComplete?: (value: string) => void;\n disabled?: boolean;\n invalid?: boolean;\n autoFocus?: boolean;\n \"aria-label\"?: string;\n}\n\nexport function OtpInput({\n value,\n onChange,\n length = 6,\n onComplete,\n disabled,\n invalid,\n autoFocus,\n \"aria-label\": ariaLabel = \"One-time passcode\",\n}: OtpInputProps) {\n const refs = React.useRef<Array<HTMLInputElement | null>>([]);\n const digits = React.useMemo(() => {\n const arr = value.split(\"\").slice(0, length);\n return Array.from({ length }, (_, i) => arr[i] ?? \"\");\n }, [value, length]);\n\n const emit = (next: string) => {\n onChange(next);\n if (next.length === length && !next.includes(\" \")) onComplete?.(next);\n };\n\n const setAt = (index: number, char: string) => {\n const arr = digits.slice();\n arr[index] = char;\n emit(arr.join(\"\").replace(/\\s+$/g, \"\"));\n };\n\n const handleChange = (index: number, raw: string) => {\n const onlyDigits = raw.replace(/\\D/g, \"\");\n if (!onlyDigits) {\n setAt(index, \"\");\n return;\n }\n const chars = onlyDigits.split(\"\");\n const arr = digits.slice();\n let cursor = index;\n for (const c of chars) {\n if (cursor >= length) break;\n arr[cursor] = c;\n cursor += 1;\n }\n emit(arr.join(\"\"));\n refs.current[Math.min(cursor, length - 1)]?.focus();\n };\n\n const handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Backspace\") {\n e.preventDefault();\n if (digits[index]) {\n setAt(index, \"\");\n } else if (index > 0) {\n refs.current[index - 1]?.focus();\n setAt(index - 1, \"\");\n }\n } else if (e.key === \"ArrowLeft\" && index > 0) {\n refs.current[index - 1]?.focus();\n } else if (e.key === \"ArrowRight\" && index < length - 1) {\n refs.current[index + 1]?.focus();\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData(\"text\").replace(/\\D/g, \"\").slice(0, length);\n if (!pasted) return;\n emit(pasted);\n refs.current[Math.min(pasted.length, length - 1)]?.focus();\n };\n\n return (\n <div className=\"flex gap-2\" role=\"group\" aria-label={ariaLabel}>\n {digits.map((digit, i) => (\n <input\n key={i}\n ref={(el) => { refs.current[i] = el; }}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={i === 0 ? \"one-time-code\" : \"off\"}\n maxLength={length}\n value={digit}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n autoFocus={autoFocus && i === 0}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n className={cn(\n \"h-12 w-11 rounded-lg border bg-card text-center text-lg font-semibold text-foreground shadow-sm transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 focus-visible:border-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n invalid ? \"border-destructive ring-destructive/20\" : \"border-input\"\n )}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, ChevronDown, Search } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface CheckboxSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CheckboxSelectProps {\n options: CheckboxSelectOption[];\n value: string[];\n onChange: (values: string[]) => void;\n placeholder?: string;\n showSearch?: boolean;\n disabled?: boolean;\n maxDisplay?: number;\n className?: string;\n}\n\nfunction getTriggerLabel(\n value: string[],\n options: CheckboxSelectOption[],\n placeholder: string,\n maxDisplay: number\n): string {\n if (value.length === 0) return placeholder;\n if (value.length === options.length) return \"All\";\n if (value.length <= maxDisplay) {\n const labels = value\n .map((v) => options.find((o) => o.value === v)?.label ?? v)\n .filter(Boolean);\n return labels.join(\", \");\n }\n return `${value.length} selected`;\n}\n\nconst CheckboxSelect = React.forwardRef<HTMLButtonElement, CheckboxSelectProps>(\n (\n {\n options,\n value,\n onChange,\n placeholder = \"Select options\",\n showSearch = false,\n disabled = false,\n maxDisplay = 2,\n className,\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n\n const filtered = React.useMemo(() => {\n if (!search.trim()) return options;\n const lower = search.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(lower));\n }, [options, search]);\n\n const allFilteredValues = filtered.filter((o) => !o.disabled).map((o) => o.value);\n const allFilteredSelected =\n allFilteredValues.length > 0 && allFilteredValues.every((v) => value.includes(v));\n const someFilteredSelected = allFilteredValues.some((v) => value.includes(v));\n\n function handleSelectAll() {\n if (allFilteredSelected) {\n onChange(value.filter((v) => !allFilteredValues.includes(v)));\n } else {\n const merged = Array.from(new Set([...value, ...allFilteredValues]));\n onChange(merged);\n }\n }\n\n function handleClearAll() {\n onChange(value.filter((v) => !allFilteredValues.includes(v)));\n }\n\n function handleToggle(optValue: string) {\n if (value.includes(optValue)) {\n onChange(value.filter((v) => v !== optValue));\n } else {\n onChange([...value, optValue]);\n }\n }\n\n const triggerLabel = getTriggerLabel(value, options, placeholder, maxDisplay);\n const hasSelection = value.length > 0;\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={cn(\n \"flex h-11 w-full items-center justify-between gap-2.5 rounded-lg border border-border bg-card px-4 py-2 text-[15px] shadow-sm outline-none\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n hasSelection ? \"text-foreground\" : \"text-muted-foreground\",\n className\n )}\n >\n <span className=\"truncate\">{triggerLabel}</span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-muted-foreground opacity-70 transition-transform duration-pg-fast ease-pg-standard\",\n open && \"rotate-180\"\n )}\n />\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={6}\n className={cn(\n \"z-[120] min-w-[var(--radix-popover-trigger-width)] w-full rounded-xl border border-border bg-popover text-popover-foreground shadow-lg outline-none p-1\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\"\n )}\n >\n {showSearch && (\n <div className=\"relative mb-1 px-1 pt-1\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\" />\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search...\"\n className={cn(\n \"flex h-9 w-full rounded-md border border-border bg-card pl-8 pr-3 text-sm shadow-sm placeholder:text-muted-foreground\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n )}\n />\n </div>\n )}\n\n <div className=\"flex items-center justify-between px-2 py-1.5\">\n <button\n type=\"button\"\n onClick={handleSelectAll}\n className={cn(\n \"text-xs font-medium transition-colors duration-pg-fast ease-pg-standard\",\n allFilteredSelected\n ? \"text-primary hover:text-primary/80\"\n : someFilteredSelected\n ? \"text-primary hover:text-primary/80\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n {allFilteredSelected ? \"Deselect all\" : \"Select all\"}\n </button>\n {value.length > 0 && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"text-xs font-medium text-muted-foreground transition-colors duration-pg-fast ease-pg-standard hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"my-0.5 h-px bg-border mx-1\" />\n\n <div className=\"max-h-60 overflow-y-auto py-0.5\">\n {filtered.length === 0 ? (\n <div className=\"px-3 py-6 text-center text-sm text-muted-foreground\">\n No options found.\n </div>\n ) : (\n filtered.map((option) => {\n const checked = value.includes(option.value);\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={checked}\n aria-disabled={option.disabled}\n onClick={() => !option.disabled && handleToggle(option.value)}\n className={cn(\n \"flex items-center gap-2.5 px-3 py-2 rounded-md text-sm select-none\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n option.disabled\n ? \"cursor-not-allowed opacity-50\"\n : \"cursor-pointer hover:bg-muted\"\n )}\n >\n <CheckboxPrimitive.Root\n checked={checked}\n disabled={option.disabled}\n onCheckedChange={() => !option.disabled && handleToggle(option.value)}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-md border border-border bg-card shadow-sm\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary\"\n )}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-primary-foreground\">\n <Check className=\"size-3\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n <span\n className={cn(\n \"leading-none\",\n checked ? \"text-foreground\" : \"text-foreground\"\n )}\n >\n {option.label}\n </span>\n </div>\n );\n })\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n }\n);\n\nCheckboxSelect.displayName = \"CheckboxSelect\";\n\nexport { CheckboxSelect };\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<\"textarea\">>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[5.5rem] w-full rounded-lg border border-border bg-card px-4 py-3 text-[15px] leading-relaxed shadow-sm transition-colors\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\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\";\n\nimport { cn } from \"./utils\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, Minus } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type CheckboxSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n size?: CheckboxSize;\n}\n\nconst sizeClasses: Record<CheckboxSize, string> = {\n sm: \"h-3.5 w-3.5 rounded\",\n md: \"h-4 w-4 rounded-md\",\n lg: \"h-[1.125rem] w-[1.125rem] rounded-md\",\n};\n\nconst iconSizes: Record<CheckboxSize, string> = {\n sm: \"size-2.5\",\n md: \"size-3\",\n lg: \"size-3.5\",\n};\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, size = \"md\", ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer shrink-0 border border-border bg-card shadow-sm transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n \"data-[state=indeterminate]:bg-primary data-[state=indeterminate]:border-primary\",\n sizeClasses[size],\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-primary-foreground\">\n {props.checked === \"indeterminate\" ? (\n <Minus className={iconSizes[size]} strokeWidth={3} />\n ) : (\n <Check className={iconSizes[size]} strokeWidth={3} />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"./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\n ref={ref}\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n));\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nexport type RadioGroupItemProps = React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Item\n>;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"size-4 shrink-0 rounded-full border border-border bg-card shadow-sm\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"data-[state=checked]:border-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span className=\"block size-2 rounded-full bg-primary\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n));\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst switchRootVariants = cva(\n [\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=unchecked]:bg-muted data-[state=unchecked]:border-border\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-transparent\",\n ],\n {\n variants: {\n size: {\n sm: \"h-5 w-9\",\n md: \"h-6 w-11\",\n lg: \"h-7 w-[3.25rem]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nconst switchThumbVariants = cva(\n [\n \"pointer-events-none block rounded-full bg-white shadow-sm\",\n \"transition-transform duration-pg-fast ease-pg-standard\",\n \"ring-0\",\n ],\n {\n variants: {\n size: {\n sm: \"size-3.5 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5\",\n md: \"size-4.5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5\",\n lg: \"size-5.5 data-[state=checked]:translate-x-6 data-[state=unchecked]:translate-x-0.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n VariantProps<typeof switchRootVariants> {}\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, size, ...props }, ref) => (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(switchRootVariants({ size }), className)}\n {...props}\n >\n <SwitchPrimitive.Thumb className={cn(switchThumbVariants({ size }))} />\n </SwitchPrimitive.Root>\n));\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n\nexport { Switch };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cn } from \"./utils\";\n\nexport interface SliderProps extends React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> {}\n\nconst Slider = React.forwardRef<React.ElementRef<typeof SliderPrimitive.Root>, SliderProps>(\n ({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\"relative flex w-full touch-none select-none items-center\", className)}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-muted\">\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"block h-[18px] w-[18px] rounded-full border-2 border-primary bg-card shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n )\n);\nSlider.displayName = SliderPrimitive.Root.displayName;\n\nexport { Slider };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AlertCircle } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type FormValues = Record<string, string>;\nexport type FormErrors = Record<string, string>;\n\nexport interface ValidatorRule {\n required?: boolean | string;\n minLength?: { value: number; message: string };\n maxLength?: { value: number; message: string };\n pattern?: { value: RegExp; message: string };\n validate?: (value: string) => string | undefined;\n}\n\nexport interface FieldConfig {\n defaultValue?: string;\n rules?: ValidatorRule;\n}\n\nexport type FieldsConfig = Record<string, FieldConfig>;\n\nexport interface RegisterResult {\n name: string;\n id: string;\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;\n onBlur: () => void;\n}\n\nexport interface UseFormReturn {\n values: FormValues;\n errors: FormErrors;\n register: (name: string) => RegisterResult;\n handleSubmit: (onValid: (values: FormValues) => void, onInvalid?: (errors: FormErrors) => void) => (e: React.FormEvent) => void;\n setError: (name: string, message: string) => void;\n clearError: (name: string) => void;\n reset: () => void;\n setValue: (name: string, value: string) => void;\n}\n\nexport function useForm(fields: FieldsConfig = {}): UseFormReturn {\n const initial = Object.fromEntries(Object.entries(fields).map(([k, v]) => [k, v.defaultValue ?? \"\"]));\n const [values, setValues] = React.useState<FormValues>(initial);\n const [errors, setErrors] = React.useState<FormErrors>({});\n\n function validate(name: string, value: string): string | undefined {\n const rules = fields[name]?.rules;\n if (!rules) return undefined;\n if (rules.required && !value.trim()) return typeof rules.required === \"string\" ? rules.required : \"This field is required\";\n if (rules.minLength && value.length < rules.minLength.value) return rules.minLength.message;\n if (rules.maxLength && value.length > rules.maxLength.value) return rules.maxLength.message;\n if (rules.pattern && !rules.pattern.value.test(value)) return rules.pattern.message;\n if (rules.validate) return rules.validate(value);\n }\n\n const register = (name: string): RegisterResult => ({\n name,\n id: name,\n value: values[name] ?? \"\",\n onChange: (e) => setValues(v => ({ ...v, [name]: e.target.value })),\n onBlur: () => {\n const err = validate(name, values[name] ?? \"\");\n setErrors(e => err ? { ...e, [name]: err } : (({ [name]: _, ...rest }) => rest)(e));\n },\n });\n\n const handleSubmit = (onValid: (v: FormValues) => void, onInvalid?: (e: FormErrors) => void) => (e: React.FormEvent) => {\n e.preventDefault();\n const newErrors: FormErrors = {};\n for (const [name] of Object.entries(fields)) {\n const err = validate(name, values[name] ?? \"\");\n if (err) newErrors[name] = err;\n }\n if (Object.keys(newErrors).length > 0) {\n setErrors(newErrors);\n onInvalid?.(newErrors);\n } else {\n setErrors({});\n onValid(values);\n }\n };\n\n return {\n values,\n errors,\n register,\n handleSubmit,\n setError: (name, msg) => setErrors(e => ({ ...e, [name]: msg })),\n clearError: (name) => setErrors(e => (({ [name]: _, ...rest }) => rest)(e)),\n reset: () => { setValues(initial); setErrors({}); },\n setValue: (name, value) => setValues(v => ({ ...v, [name]: value })),\n };\n}\n\nexport interface FormProps extends React.FormHTMLAttributes<HTMLFormElement> {}\n\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ className, ...props }, ref) => (\n <form ref={ref} className={cn(\"space-y-4\", className)} {...props} />\n )\n);\nForm.displayName = \"Form\";\n\nexport interface FormItemProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FormItem = React.forwardRef<HTMLDivElement, FormItemProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5\", className)} {...props} />\n )\n);\nFormItem.displayName = \"FormItem\";\n\nexport interface FormLabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n}\n\nconst FormLabel = React.forwardRef<HTMLLabelElement, FormLabelProps>(\n ({ className, required, children, ...props }, ref) => (\n <label ref={ref} className={cn(\"text-sm font-medium text-foreground\", className)} {...props}>\n {children}\n {required && <span className=\"ml-1 text-destructive\">*</span>}\n </label>\n )\n);\nFormLabel.displayName = \"FormLabel\";\n\nexport interface FormControlProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FormControl = React.forwardRef<HTMLDivElement, FormControlProps>(\n ({ ...props }, ref) => <div ref={ref} {...props} />\n);\nFormControl.displayName = \"FormControl\";\n\nexport interface FormDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nconst FormDescription = React.forwardRef<HTMLParagraphElement, FormDescriptionProps>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-xs text-muted-foreground\", className)} {...props} />\n )\n);\nFormDescription.displayName = \"FormDescription\";\n\nexport interface FormErrorProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nconst FormError = React.forwardRef<HTMLParagraphElement, FormErrorProps>(\n ({ className, children, ...props }, ref) =>\n children ? (\n <p ref={ref} className={cn(\"flex items-center gap-1 text-xs text-destructive\", className)} {...props}>\n <AlertCircle className=\"size-3 shrink-0\" />\n {children}\n </p>\n ) : null\n);\nFormError.displayName = \"FormError\";\n\nexport interface FormFieldProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5\", className)} {...props} />\n )\n);\nFormField.displayName = \"FormField\";\n\nexport { Form, FormItem, FormLabel, FormControl, FormDescription, FormError, FormField };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\nimport { Label } from \"./label\";\nimport { Separator } from \"./separator\";\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n \"data-[variant=label]:text-sm\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nconst fieldVariants = cva(\"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\", {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start\",\n ],\n responsive: [\n \"@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n});\n\nfunction Field({\n className,\n orientation = \"vertical\",\n invalid,\n disabled,\n ...props\n}: React.ComponentProps<\"div\"> &\n VariantProps<typeof fieldVariants> & {\n invalid?: boolean;\n disabled?: boolean;\n }) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n data-invalid={invalid ? true : undefined}\n data-disabled={disabled ? true : undefined}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n );\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\", className)}\n {...props}\n />\n );\n}\n\nfunction FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border has-[>[data-slot=field]]:border-border [&>[data-slot=field]]:p-4\",\n \"has-data-[state=checked]:border-primary has-data-[state=checked]:bg-primary/5 dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm font-medium leading-snug group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-sm font-normal leading-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode;\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children ? (\n <span\n className=\"relative mx-auto block w-fit bg-background px-2 text-muted-foreground\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n ) : null}\n </div>\n );\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>;\n}) {\n const content = useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors) {\n return null;\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return errors[0].message;\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {errors.map(\n (error, index) => error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-sm font-normal text-destructive\", className)}\n {...props}\n >\n {content}\n </div>\n );\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"./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-px w-full\" : \"h-full w-px\",\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 { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group relative flex w-full items-stretch rounded-xl border border-border bg-card shadow-sm outline-none transition-[color,box-shadow] dark:bg-card/50\",\n \"min-h-11 h-11 has-[>textarea]:h-auto\",\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n \"has-[[data-slot=input-group-control]:focus-visible]:ring-1 has-[[data-slot=input-group-control]:focus-visible]:ring-ring\",\n \"has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n className\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto min-h-11 cursor-text select-none items-center justify-center gap-2 px-0 text-[15px] font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3.5 has-[>button]:-ml-[0.45rem] has-[>kbd]:-ml-[0.35rem]\",\n \"inline-end\":\n \"order-last pr-3.5 has-[>button]:-mr-[0.4rem] has-[>kbd]:-mr-[0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start border-b px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3\",\n \"block-end\":\n \"order-last w-full justify-start border-t px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n);\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva(\n \"inline-flex items-center justify-center gap-2 border border-transparent bg-transparent text-sm font-medium text-foreground shadow-none transition-colors hover:bg-muted\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5\",\n \"icon-xs\": \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n);\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n size = \"xs\",\n ...props\n}: React.ComponentProps<\"button\"> & VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <button\n type={type}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n","\"use client\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nconst CURRENCIES = [\"USD\", \"INR\", \"EUR\", \"GBP\", \"SGD\", \"AED\", \"JPY\"];\n\ninterface CurrencyAmountInputProps {\n currency: string;\n amount: string;\n onCurrencyChange: (currency: string) => void;\n onAmountChange: (amount: string) => void;\n placeholder?: string;\n disabled?: boolean;\n required?: boolean;\n currencies?: string[];\n id?: string;\n}\n\nexport function CurrencyAmountInput({\n currency,\n amount,\n onCurrencyChange,\n onAmountChange,\n placeholder = \"0.00\",\n disabled = false,\n required = false,\n currencies = CURRENCIES,\n id,\n}: CurrencyAmountInputProps) {\n return (\n <div className=\"flex h-12 min-h-12 items-stretch overflow-hidden rounded-xl border border-border bg-card text-[15px] transition-all focus-within:border-muted-foreground/50 focus-within:ring-2 focus-within:ring-ring/20\">\n <div className=\"relative flex min-w-[5.25rem] shrink-0 items-center border-r border-border bg-muted/25 px-3\">\n <select\n value={currency}\n onChange={(e) => onCurrencyChange(e.target.value)}\n disabled={disabled}\n aria-label=\"Currency\"\n className={cn(\n \"h-full min-h-0 w-full min-w-0 cursor-pointer bg-transparent py-2 pl-1 pr-9 text-[15px] font-semibold text-foreground\",\n \"focus:outline-none disabled:opacity-50\",\n \"appearance-none [-webkit-appearance:none] [-moz-appearance:none]\",\n \"[&::-ms-expand]:hidden\"\n )}\n >\n {currencies.map((c) => (\n <option key={c} value={c}>\n {c}\n </option>\n ))}\n </select>\n <ChevronDown\n className=\"pointer-events-none absolute right-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground opacity-80\"\n aria-hidden\n />\n </div>\n\n <input\n id={id}\n type=\"number\"\n value={amount}\n onChange={(e) => onAmountChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n min=\"0\"\n step=\"0.01\"\n className=\"min-h-0 min-w-0 flex-1 bg-transparent px-4 py-3 text-[15px] tabular-nums text-foreground placeholder:text-muted-foreground focus:outline-none disabled:opacity-50\"\n />\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst cardVariants = cva(\"flex flex-col rounded-xl border border-border bg-card text-card-foreground shadow-sm\", {\n variants: {\n size: {\n default: \"gap-10 px-10 py-10\",\n sm: \"gap-6 px-7 py-7\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n});\n\nfunction Card({\n className,\n size,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof cardVariants>) {\n return (\n <div\n data-slot=\"card\"\n className={cn(cardVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-4 px-0 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-lg font-semibold leading-snug tracking-tight\", className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm leading-relaxed text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"px-0\", className)} {...props} />;\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex flex-wrap items-center gap-3 border-t border-border px-0 pt-8 pb-0 sm:gap-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport { cn } from \"./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 ref={ref} className={cn(\"relative overflow-hidden\", className)} {...props}>\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">{children}</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-px\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-px\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border hover:bg-muted-foreground/30\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SideNavProps extends React.ComponentPropsWithoutRef<\"aside\"> {\n /** \"collapsed\" renders icon-only at 60px; \"expanded\" renders full at 240px (default) */\n width?: \"collapsed\" | \"expanded\";\n /** Controlled collapsed state */\n isCollapsed?: boolean;\n /** Called when the sidebar requests a collapse/expand */\n onCollapse?: (collapsed: boolean) => void;\n}\n\nexport interface SideNavItemProps extends React.ComponentPropsWithoutRef<\"a\"> {\n /** Icon element — required, rendered at size-4 shrink-0 */\n icon: React.ReactNode;\n /** Visible label — hidden when sidebar is collapsed */\n label: string;\n /** Highlights the item as the current route */\n isActive?: boolean;\n /** Navigable href — renders an <a> when provided */\n href?: string;\n /** Click handler */\n onClick?: React.MouseEventHandler<HTMLElement>;\n /** Optional badge slot rendered after the label */\n badge?: React.ReactNode;\n /** Injected by SideNavSection — consumers should not pass this */\n _collapsed?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface SideNavContextValue {\n isCollapsed: boolean;\n}\n\nconst SideNavContext = React.createContext<SideNavContextValue>({\n isCollapsed: false,\n});\n\nfunction useSideNavContext() {\n return React.useContext(SideNavContext);\n}\n\n// ---------------------------------------------------------------------------\n// SideNav\n// ---------------------------------------------------------------------------\n\nconst SideNav = React.forwardRef<HTMLElement, SideNavProps>(\n (\n {\n className,\n width = \"expanded\",\n isCollapsed: isCollapsedProp,\n onCollapse,\n children,\n ...props\n },\n ref\n ) => {\n const collapsed =\n isCollapsedProp !== undefined ? isCollapsedProp : width === \"collapsed\";\n\n return (\n <SideNavContext.Provider value={{ isCollapsed: collapsed }}>\n <aside\n ref={ref}\n data-slot=\"side-nav\"\n data-collapsed={collapsed}\n className={cn(\n \"flex flex-col bg-sidebar border-r border-sidebar-border\",\n \"transition-all duration-pg-normal ease-pg-standard\",\n collapsed ? \"w-[60px]\" : \"w-[240px]\",\n className\n )}\n {...props}\n >\n {children}\n </aside>\n </SideNavContext.Provider>\n );\n }\n);\nSideNav.displayName = \"SideNav\";\n\n// ---------------------------------------------------------------------------\n// SideNavHeader\n// ---------------------------------------------------------------------------\n\nconst SideNavHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"side-nav-header\"\n className={cn(\n \"px-4 py-4 border-b border-sidebar-border shrink-0\",\n className\n )}\n {...props}\n />\n));\nSideNavHeader.displayName = \"SideNavHeader\";\n\n// ---------------------------------------------------------------------------\n// SideNavSection\n// ---------------------------------------------------------------------------\n\ninterface SideNavSectionProps extends React.ComponentPropsWithoutRef<\"div\"> {\n /** Optional section label — hidden when sidebar is collapsed */\n label?: string;\n}\n\nconst SideNavSection = React.forwardRef<HTMLDivElement, SideNavSectionProps>(\n ({ className, label, children, ...props }, ref) => {\n const { isCollapsed } = useSideNavContext();\n\n return (\n <div\n ref={ref}\n data-slot=\"side-nav-section\"\n className={cn(\"px-3 py-2\", className)}\n {...props}\n >\n {label && !isCollapsed && (\n <p className=\"mb-1 px-3 text-xs font-medium text-muted-foreground uppercase tracking-wider select-none\">\n {label}\n </p>\n )}\n {children}\n </div>\n );\n }\n);\nSideNavSection.displayName = \"SideNavSection\";\n\n// ---------------------------------------------------------------------------\n// SideNavItem\n// ---------------------------------------------------------------------------\n\nconst SideNavItem = React.forwardRef<HTMLAnchorElement, SideNavItemProps>(\n (\n {\n className,\n icon,\n label,\n isActive = false,\n href,\n onClick,\n badge,\n _collapsed,\n children,\n ...props\n },\n ref\n ) => {\n const { isCollapsed } = useSideNavContext();\n const collapsed = _collapsed !== undefined ? _collapsed : isCollapsed;\n\n const baseClassName = cn(\n \"flex items-center gap-3 px-3 py-2 rounded-lg text-sm cursor-pointer\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n isActive\n ? \"bg-primary/10 text-primary font-medium\"\n : \"text-sidebar-foreground hover:bg-muted/50\",\n collapsed && \"justify-center px-0\",\n className\n );\n\n const content = (\n <>\n <span className=\"size-4 shrink-0 flex items-center justify-center\">\n {icon}\n </span>\n {!collapsed && (\n <>\n <span className=\"flex-1 truncate\">{label}</span>\n {badge && <span className=\"shrink-0\">{badge}</span>}\n </>\n )}\n </>\n );\n\n if (href) {\n return (\n <a\n ref={ref}\n href={href}\n title={collapsed ? label : undefined}\n aria-current={isActive ? \"page\" : undefined}\n className={baseClassName}\n onClick={onClick as React.MouseEventHandler<HTMLAnchorElement>}\n {...props}\n >\n {content}\n </a>\n );\n }\n\n return (\n <a\n ref={ref}\n role=\"button\"\n tabIndex={0}\n title={collapsed ? label : undefined}\n aria-current={isActive ? \"page\" : undefined}\n className={baseClassName}\n onClick={onClick as React.MouseEventHandler<HTMLAnchorElement>}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.(e as unknown as React.MouseEvent<HTMLElement>);\n }\n }}\n {...props}\n >\n {content}\n </a>\n );\n }\n);\nSideNavItem.displayName = \"SideNavItem\";\n\n// ---------------------------------------------------------------------------\n// SideNavFooter\n// ---------------------------------------------------------------------------\n\nconst SideNavFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"side-nav-footer\"\n className={cn(\n \"mt-auto border-t border-sidebar-border px-3 py-3 shrink-0\",\n className\n )}\n {...props}\n />\n));\nSideNavFooter.displayName = \"SideNavFooter\";\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport {\n SideNav,\n SideNavHeader,\n SideNavSection,\n SideNavItem,\n SideNavFooter,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\"> & {\n separator?: React.ReactNode;\n }\n>(({ className, ...props }, ref) => (\n <nav\n ref={ref}\n aria-label=\"breadcrumb\"\n className={cn(\"\", className)}\n {...props}\n />\n));\nBreadcrumb.displayName = \"Breadcrumb\";\n\nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n 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\",\n className\n )}\n {...props}\n />\n));\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n));\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\">\n>(({ className, ...props }, ref) => (\n <a\n ref={ref}\n className={cn(\n \"text-sm text-muted-foreground transition-colors duration-pg-fast ease-pg-standard hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 rounded-sm\",\n className\n )}\n {...props}\n />\n));\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-current=\"page\"\n aria-disabled=\"true\"\n className={cn(\"text-sm font-medium text-foreground\", className)}\n {...props}\n />\n));\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: 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 className=\"text-muted-foreground\" />}\n </li>\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4 text-muted-foreground\" />\n <span className=\"sr-only\">More</span>\n </span>\n);\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Pagination (nav wrapper)\n// ---------------------------------------------------------------------------\n\nexport interface PaginationProps extends React.ComponentPropsWithoutRef<\"nav\"> {}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n ({ className, ...props }, ref) => (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n )\n);\nPagination.displayName = \"Pagination\";\n\n// ---------------------------------------------------------------------------\n// PaginationContent (ul)\n// ---------------------------------------------------------------------------\n\nexport interface PaginationContentProps\n extends React.ComponentPropsWithoutRef<\"ul\"> {}\n\nexport const PaginationContent = forwardRef<\n HTMLUListElement,\n PaginationContentProps\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n));\nPaginationContent.displayName = \"PaginationContent\";\n\n// ---------------------------------------------------------------------------\n// PaginationItem (li)\n// ---------------------------------------------------------------------------\n\nexport interface PaginationItemProps\n extends React.ComponentPropsWithoutRef<\"li\"> {}\n\nexport const PaginationItem = forwardRef<HTMLLIElement, PaginationItemProps>(\n ({ className, ...props }, ref) => (\n <li ref={ref} className={cn(\"list-none\", className)} {...props} />\n )\n);\nPaginationItem.displayName = \"PaginationItem\";\n\n// ---------------------------------------------------------------------------\n// PaginationLink (anchor / button-like)\n// ---------------------------------------------------------------------------\n\nexport interface PaginationLinkProps\n extends React.ComponentPropsWithoutRef<\"a\"> {\n isActive?: boolean;\n}\n\nexport const PaginationLink = forwardRef<HTMLAnchorElement, PaginationLinkProps>(\n ({ className, isActive = false, ...props }, ref) => (\n <a\n ref={ref}\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n // base\n \"h-9 w-9 inline-flex items-center justify-center rounded-lg text-sm font-medium border\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"cursor-pointer select-none\",\n // active\n isActive\n ? \"bg-primary text-primary-foreground border-primary shadow-sm\"\n : \"text-muted-foreground border-border hover:bg-muted hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n);\nPaginationLink.displayName = \"PaginationLink\";\n\n// ---------------------------------------------------------------------------\n// PaginationPrevious\n// ---------------------------------------------------------------------------\n\nexport interface PaginationPreviousProps\n extends React.ComponentPropsWithoutRef<\"a\"> {\n disabled?: boolean;\n}\n\nexport const PaginationPrevious = forwardRef<\n HTMLAnchorElement,\n PaginationPreviousProps\n>(({ className, disabled, ...props }, ref) => (\n <a\n ref={ref}\n aria-label=\"Go to previous page\"\n aria-disabled={disabled}\n className={cn(\n \"h-9 px-3 inline-flex items-center justify-center gap-1.5 rounded-lg text-sm font-medium border border-border\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"cursor-pointer select-none\",\n disabled\n ? \"cursor-not-allowed opacity-50 pointer-events-none text-muted-foreground border-border\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\",\n className\n )}\n {...props}\n >\n <ChevronLeft className=\"size-4\" />\n <span>Previous</span>\n </a>\n));\nPaginationPrevious.displayName = \"PaginationPrevious\";\n\n// ---------------------------------------------------------------------------\n// PaginationNext\n// ---------------------------------------------------------------------------\n\nexport interface PaginationNextProps\n extends React.ComponentPropsWithoutRef<\"a\"> {\n disabled?: boolean;\n}\n\nexport const PaginationNext = forwardRef<\n HTMLAnchorElement,\n PaginationNextProps\n>(({ className, disabled, ...props }, ref) => (\n <a\n ref={ref}\n aria-label=\"Go to next page\"\n aria-disabled={disabled}\n className={cn(\n \"h-9 px-3 inline-flex items-center justify-center gap-1.5 rounded-lg text-sm font-medium border border-border\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"cursor-pointer select-none\",\n disabled\n ? \"cursor-not-allowed opacity-50 pointer-events-none text-muted-foreground border-border\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\",\n className\n )}\n {...props}\n >\n <span>Next</span>\n <ChevronRight className=\"size-4\" />\n </a>\n));\nPaginationNext.displayName = \"PaginationNext\";\n\n// ---------------------------------------------------------------------------\n// PaginationEllipsis\n// ---------------------------------------------------------------------------\n\nexport interface PaginationEllipsisProps\n extends React.ComponentPropsWithoutRef<\"span\"> {}\n\nexport const PaginationEllipsis = forwardRef<\n HTMLSpanElement,\n PaginationEllipsisProps\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n aria-hidden\n className={cn(\n \"h-9 w-9 inline-flex items-center justify-center text-muted-foreground\",\n className\n )}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n));\nPaginationEllipsis.displayName = \"PaginationEllipsis\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"./utils\";\n\nconst linkVariants = cva(\n [\n \"inline-flex items-center gap-1 transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 rounded-sm\",\n \"aria-disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:pointer-events-none\",\n ],\n {\n variants: {\n variant: {\n default: \"text-primary underline-offset-4 hover:underline\",\n subtle: \"text-muted-foreground hover:text-foreground\",\n nav: \"text-foreground hover:text-primary\",\n },\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\nexport interface LinkProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement>,\n VariantProps<typeof linkVariants> {\n asChild?: boolean;\n}\n\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n href,\n target,\n rel,\n children,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"a\";\n\n const isExternal =\n typeof href === \"string\" && href.startsWith(\"http\");\n\n const externalProps = isExternal\n ? {\n target: target ?? \"_blank\",\n rel: rel ?? \"noreferrer\",\n }\n : { target, rel };\n\n return (\n <Comp\n ref={ref}\n href={href}\n className={cn(linkVariants({ variant, size }), className)}\n {...externalProps}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\nLink.displayName = \"Link\";\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\n\ndeclare module 'react' {\n interface ReactElement {\n $$typeof?: symbol | string;\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\nexport type Usable<T> = PromiseLike<T> | React.Context<T>;\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n let slottableElement: React.ReactElement | null = null;\n let hasSlottable = false;\n const newChildren: React.ReactNode[] = [];\n\n if (isLazyComponent(children) && typeof use === 'function') {\n children = use(children._payload);\n }\n\n React.Children.forEach(children, (maybeSlottable) => {\n if (isSlottable(maybeSlottable)) {\n hasSlottable = true;\n const slottable = maybeSlottable;\n let child = 'child' in slottable.props ? slottable.props.child : slottable.props.children;\n\n if (isLazyComponent(child) && typeof use === 'function') {\n child = use(child._payload);\n }\n\n slottableElement = getSlottableElementFromSlottable(slottable, child);\n newChildren.push((slottableElement?.props as any)?.children);\n } else {\n newChildren.push(maybeSlottable);\n }\n });\n\n if (slottableElement) {\n slottableElement = React.cloneElement(slottableElement, undefined, newChildren);\n } else if (\n // A `Slottable` was found but it didn't resolve to a single element (e.g.\n // it wrapped multiple elements, text, or a render-prop `child` that\n // wasn't an element). Don't fall back to treating the `Slottable` wrapper\n // itself as the slot target — throw a descriptive error below instead.\n !hasSlottable &&\n React.Children.count(children) === 1 &&\n React.isValidElement(children)\n ) {\n slottableElement = children;\n }\n\n const slottableElementRef = slottableElement ? getElementRef(slottableElement) : undefined;\n const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n\n if (!slottableElement) {\n // Empty/falsy children (`null`, `undefined`, `false`, no children, etc.) are valid and\n // render nothing. Anything else is content we couldn't slot onto a single element, which\n // is a usage error, so we fail loudly with a clear message.\n if (children || children === 0) {\n throw new Error(\n hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName),\n );\n }\n return children;\n }\n\n const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n\n // do not pass ref to React.Fragment for React 19 compatibility\n if (slottableElement.type !== React.Fragment) {\n mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n }\n\n return React.cloneElement(slottableElement, mergedProps);\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol.for('radix.slottable');\n\ntype SlottableChildrenProps = { children: React.ReactNode };\ntype SlottableRenderFnProps = {\n child: React.ReactNode;\n children: (slottable: React.ReactNode) => React.ReactNode;\n};\n\ntype SlottableProps = SlottableRenderFnProps | SlottableChildrenProps;\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = (props) =>\n 'child' in props ? props.children(props.child) : props.children;\n\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* -------------------------------------------------------------------------------------------------\n * getSlottableElementFromSlottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst getSlottableElementFromSlottable = (slottable: SlottableElement, child: React.ReactNode) => {\n if ('child' in slottable.props) {\n const child = slottable.props.child;\n if (!React.isValidElement<React.PropsWithChildren>(child)) return null;\n return React.cloneElement(child, undefined, slottable.props.children(child.props.children));\n }\n\n return React.isValidElement(child) ? child : null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * mergeProps\n * -----------------------------------------------------------------------------------------------*/\n\ntype AnyProps = Record<string, any>;\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * getElementRef\n * -----------------------------------------------------------------------------------------------*/\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype SlottableElement = React.ReactElement<SlottableProps, SlottableComponent>;\n\nfunction isSlottable(\n child: React.ReactNode,\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nconst REACT_LAZY_TYPE = Symbol.for('react.lazy');\n\ninterface LazyReactElement extends React.ReactElement {\n $$typeof: typeof REACT_LAZY_TYPE;\n _payload: PromiseLike<Exclude<React.ReactNode, PromiseLike<any>>>;\n}\n\nfunction isLazyComponent(element: React.ReactNode): element is LazyReactElement {\n return (\n element != null &&\n typeof element === 'object' &&\n '$$typeof' in element &&\n element.$$typeof === REACT_LAZY_TYPE &&\n '_payload' in element &&\n isPromiseLike(element._payload)\n );\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return typeof value === 'object' && value !== null && 'then' in value;\n}\n\nconst createSlotError = (ownerName: string) => {\n return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n};\n\nconst createSlottableError = (ownerName: string) => {\n return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n};\n\nconst use: typeof React.use | undefined = (React as any)[' use '.trim().toString()];\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == 'function') {\n hasCleanup = true;\n }\n return cleanup;\n });\n\n // React <19 will log an error to the console if a callback ref returns a\n // value. We don't use ref cleanups internally so this will only happen if a\n // user's ref callback returns a value, which we only expect if they are\n // using the cleanup functionality added in React 19.\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == 'function') {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: \"default\" | \"secondary\" | \"success\" | \"warning\" | \"error\" | \"outline\";\n size?: \"sm\" | \"md\" | \"lg\";\n square?: boolean;\n dot?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n}\n\nconst variantClasses: Record<NonNullable<BadgeProps[\"variant\"]>, string> = {\n default:\n \"bg-primary/10 text-primary border border-primary/20\",\n secondary:\n \"bg-muted text-muted-foreground border border-border\",\n success:\n \"bg-green-500/10 text-green-700 border border-green-500/20 dark:text-green-400\",\n warning:\n \"bg-amber-500/10 text-amber-700 border border-amber-500/20 dark:text-amber-400\",\n error:\n \"bg-red-500/10 text-red-700 border border-red-500/20 dark:text-red-400\",\n outline:\n \"bg-transparent text-foreground border border-border\",\n};\n\nconst sizeClasses: Record<NonNullable<BadgeProps[\"size\"]>, string> = {\n sm: \"text-[10px] px-1.5 py-0.5 gap-1\",\n md: \"text-xs px-2 py-0.5 gap-1\",\n lg: \"text-sm px-2.5 py-1 gap-1.5\",\n};\n\nconst dotColorClasses: Record<NonNullable<BadgeProps[\"variant\"]>, string> = {\n default: \"bg-primary\",\n secondary: \"bg-muted-foreground\",\n success: \"bg-green-500\",\n warning: \"bg-amber-500\",\n error: \"bg-red-500\",\n outline: \"bg-foreground\",\n};\n\nconst dotSizeClasses: Record<NonNullable<BadgeProps[\"size\"]>, string> = {\n sm: \"size-1.5\",\n md: \"size-1.5\",\n lg: \"size-2\",\n};\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n variant = \"default\",\n size = \"md\",\n square = false,\n dot = false,\n leftIcon,\n rightIcon,\n children,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center font-medium whitespace-nowrap transition-colors duration-pg-fast ease-pg-standard\",\n square ? \"rounded-md\" : \"rounded-full\",\n variantClasses[variant],\n sizeClasses[size],\n className\n )}\n {...props}\n >\n {dot && (\n <span\n className={cn(\n \"rounded-full flex-shrink-0\",\n dotSizeClasses[size],\n dotColorClasses[variant]\n )}\n />\n )}\n {!dot && leftIcon && (\n <span className=\"inline-flex items-center flex-shrink-0\">{leftIcon}</span>\n )}\n {children}\n {rightIcon && (\n <span className=\"inline-flex items-center flex-shrink-0\">{rightIcon}</span>\n )}\n </span>\n );\n }\n);\nBadge.displayName = \"Badge\";\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface LozengeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: \"default\" | \"inprogress\" | \"success\" | \"moved\" | \"new\" | \"removed\";\n isBold?: boolean;\n maxWidth?: number | string;\n}\n\nconst variantClasses: Record<NonNullable<LozengeProps[\"variant\"]>, string> = {\n default: \"bg-muted text-muted-foreground\",\n inprogress: \"bg-blue-500/15 text-blue-700 dark:text-blue-300\",\n success: \"bg-green-500/15 text-green-700 dark:text-green-300\",\n moved: \"bg-purple-500/15 text-purple-700 dark:text-purple-300\",\n new: \"bg-teal-500/15 text-teal-700 dark:text-teal-300\",\n removed: \"bg-red-500/15 text-red-700 dark:text-red-300\",\n};\n\nexport const Lozenge = forwardRef<HTMLSpanElement, LozengeProps>(\n (\n {\n variant = \"default\",\n isBold = false,\n maxWidth,\n children,\n className,\n style,\n ...props\n },\n ref\n ) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center rounded-sm px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wide whitespace-nowrap transition-colors duration-pg-fast ease-pg-standard\",\n variantClasses[variant],\n isBold && \"ring-1 ring-current/30\",\n className\n )}\n style={\n maxWidth !== undefined\n ? { maxWidth, overflow: \"hidden\", textOverflow: \"ellipsis\", ...style }\n : style\n }\n {...props}\n >\n <span\n className={cn(\n maxWidth !== undefined ? \"truncate\" : undefined\n )}\n >\n {children}\n </span>\n </span>\n );\n }\n);\nLozenge.displayName = \"Lozenge\";\n","import * as React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type TagColorScheme = \"neutral\" | \"blue\" | \"green\" | \"amber\" | \"red\" | \"purple\";\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n colorScheme?: TagColorScheme;\n onRemove?: () => void;\n disabled?: boolean;\n}\n\nconst colorClasses: Record<TagColorScheme, string> = {\n neutral: \"bg-card border-border text-foreground\",\n blue: \"bg-blue-500/10 border-blue-500/20 text-blue-700 dark:text-blue-300\",\n green: \"bg-green-500/10 border-green-500/20 text-green-700 dark:text-green-300\",\n amber: \"bg-amber-500/10 border-amber-500/20 text-amber-700 dark:text-amber-300\",\n red: \"bg-red-500/10 border-red-500/20 text-red-700 dark:text-red-300\",\n purple: \"bg-purple-500/10 border-purple-500/20 text-purple-700 dark:text-purple-300\",\n};\n\nconst Tag = React.forwardRef<HTMLSpanElement, TagProps>(\n ({ className, colorScheme = \"neutral\", onRemove, disabled, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs font-medium transition-colors\", colorClasses[colorScheme], disabled && \"opacity-50 cursor-not-allowed\", className)}\n {...props}\n >\n {children}\n {onRemove && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n className=\"ml-0.5 rounded-sm opacity-60 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n aria-label=\"Remove\"\n >\n <X className=\"size-3\" />\n </button>\n )}\n </span>\n )\n);\nTag.displayName = \"Tag\";\n\nexport interface TagGroupProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst TagGroup = React.forwardRef<HTMLDivElement, TagGroupProps>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"flex flex-wrap gap-1.5\", className)} {...props} />\n);\nTagGroup.displayName = \"TagGroup\";\n\nexport { Tag, TagGroup };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check, X, RefreshCw, Clock, AlertCircle, ArrowRight, Info } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type BadgeVariant =\n | \"success\"\n | \"info\"\n | \"warning\"\n | \"refund\"\n | \"danger\"\n | \"orange\"\n | \"muted\";\n\nexport type BadgeTrailIcon =\n | \"check\"\n | \"x\"\n | \"refresh\"\n | \"clock\"\n | \"alert\"\n | \"arrow-right\"\n | \"info\";\n\n/* Light: low-opacity hue-matched borders. Dark: stronger borders for contrast on dark surfaces. */\nconst VARIANT_CLASS: Record<BadgeVariant, string> = {\n success:\n \"bg-emerald-500/10 text-emerald-800 border-emerald-600/10 dark:bg-emerald-500/35 dark:text-emerald-50 dark:border-emerald-400/70\",\n info: \"bg-blue-500/10 text-blue-800 border-blue-600/10 dark:bg-sky-500/30 dark:text-sky-50 dark:border-sky-400/65\",\n warning:\n \"bg-amber-500/10 text-amber-900 border-amber-600/10 dark:bg-amber-500/35 dark:text-amber-50 dark:border-amber-400/70\",\n refund:\n \"bg-yellow-500/10 text-yellow-900 border-yellow-600/10 dark:bg-violet-500/30 dark:text-violet-100 dark:border-violet-400/60\",\n danger:\n \"bg-red-500/10 text-red-800 border-red-600/10 dark:bg-red-500/35 dark:text-red-50 dark:border-red-400/70\",\n orange:\n \"bg-orange-500/10 text-orange-900 border-orange-600/10 dark:bg-orange-500/35 dark:text-orange-50 dark:border-orange-400/65\",\n muted:\n \"bg-muted text-muted-foreground border-border/40 dark:bg-zinc-800/90 dark:text-zinc-200 dark:border-zinc-500/45\",\n};\n\nexport interface StatusBadgeProps {\n variant: BadgeVariant;\n label: string;\n trailIcon?: BadgeTrailIcon;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nexport const StatusBadge = React.forwardRef<HTMLSpanElement, StatusBadgeProps>(\n ({ variant, label, trailIcon, size = \"md\", className }, ref) => {\n const iSize = size === \"sm\" ? 11 : 12;\n const iProps = {\n width: iSize,\n height: iSize,\n strokeWidth: 2.5,\n style: { flexShrink: 0 },\n } as const;\n\n const icon =\n trailIcon === \"check\" ? <Check {...iProps} /> :\n trailIcon === \"x\" ? <X {...iProps} strokeWidth={3} /> :\n trailIcon === \"refresh\" ? <RefreshCw {...{ ...iProps, strokeWidth: 2 }} /> :\n trailIcon === \"clock\" ? <Clock {...iProps} strokeWidth={2} /> :\n trailIcon === \"alert\" ? <AlertCircle {...iProps} strokeWidth={2} /> :\n trailIcon === \"arrow-right\" ? <ArrowRight {...iProps} strokeWidth={2.5} /> :\n trailIcon === \"info\" ? <Info {...iProps} strokeWidth={2.5} /> :\n null;\n\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-1.5 font-medium border whitespace-nowrap rounded-md\",\n VARIANT_CLASS[variant],\n size === \"sm\" ? \"text-[11px] px-2 py-[2px]\" : \"text-[13px] px-3 py-[5px]\",\n className\n )}\n >\n {label}\n {icon}\n </span>\n );\n }\n);\nStatusBadge.displayName = \"StatusBadge\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface BlanketProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controls visibility of the blanket */\n open?: boolean;\n /** Adds semi-transparent black background (default: true) */\n isTinted?: boolean;\n /** Makes blanket completely transparent — only blocks pointer events */\n isTransparent?: boolean;\n /** Called when the blanket is clicked */\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n /** When true, pointer events pass through the blanket */\n shouldAllowClickThrough?: boolean;\n}\n\nconst Blanket = React.forwardRef<HTMLDivElement, BlanketProps>(\n (\n {\n open = true,\n isTinted = true,\n isTransparent = false,\n onClick,\n shouldAllowClickThrough = false,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n data-open={open}\n aria-hidden=\"true\"\n onClick={onClick}\n className={cn(\n \"fixed inset-0 z-40\",\n // Animate in/out\n \"data-[open=true]:animate-in data-[open=false]:animate-out\",\n \"data-[open=true]:fade-in-0 data-[open=false]:fade-out-0\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n // Visibility\n !open && \"pointer-events-none\",\n // Background\n !isTransparent && isTinted && \"bg-black/50 backdrop-blur-sm\",\n isTransparent && \"bg-transparent\",\n // Click-through\n shouldAllowClickThrough && \"pointer-events-none\",\n className\n )}\n {...props}\n />\n );\n }\n);\n\nBlanket.displayName = \"Blanket\";\n\nexport { Blanket };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { X, ChevronLeft, ChevronRight, Check } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface SpotlightStep {\n title: string;\n body: string;\n image?: React.ReactNode;\n}\n\nexport interface SpotlightCardProps {\n title: string;\n body: string;\n image?: React.ReactNode;\n currentStep?: number;\n totalSteps?: number;\n onNext?: () => void;\n onBack?: () => void;\n onDismiss?: () => void;\n nextLabel?: string;\n className?: string;\n}\n\nconst SpotlightCard = React.forwardRef<HTMLDivElement, SpotlightCardProps>(\n ({ title, body, image, currentStep, totalSteps, onNext, onBack, onDismiss, nextLabel, className }, ref) => {\n const isLast = currentStep !== undefined && totalSteps !== undefined && currentStep >= totalSteps - 1;\n return (\n <div ref={ref} className={cn(\"bg-card border border-border rounded-xl shadow-xl p-5 w-72\", className)}>\n {onDismiss && (\n <button\n onClick={onDismiss}\n className=\"absolute top-3 right-3 rounded-md p-1 text-muted-foreground hover:text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n {image && <div className=\"mb-4\">{image}</div>}\n <h3 className=\"font-semibold text-base text-foreground pr-6\">{title}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground leading-relaxed\">{body}</p>\n <div className=\"flex items-center justify-between mt-4\">\n <div className=\"flex items-center gap-2\">\n {totalSteps && totalSteps > 1 && (\n <>\n <span className=\"text-xs text-muted-foreground\">{(currentStep ?? 0) + 1} of {totalSteps}</span>\n <div className=\"flex gap-1\">\n {Array.from({ length: totalSteps }).map((_, i) => (\n <span\n key={i}\n className={cn(\n \"rounded-full transition-all duration-pg-fast\",\n i === (currentStep ?? 0)\n ? \"w-4 h-1.5 bg-primary\"\n : \"w-1.5 h-1.5 bg-muted-foreground/30\"\n )}\n />\n ))}\n </div>\n </>\n )}\n </div>\n <div className=\"flex gap-2\">\n {onBack && (currentStep ?? 0) > 0 && (\n <button\n onClick={onBack}\n className=\"inline-flex items-center gap-1 h-8 px-3 rounded-lg text-xs font-medium text-muted-foreground hover:bg-muted transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n >\n <ChevronLeft className=\"size-3\" /> Back\n </button>\n )}\n {onNext && (\n <button\n onClick={onNext}\n className=\"inline-flex items-center gap-1 h-8 px-3 rounded-lg text-xs font-medium bg-primary text-primary-foreground hover:bg-[var(--primary-hover)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n >\n {isLast ? (\n <><Check className=\"size-3\" /> {nextLabel ?? \"Done\"}</>\n ) : (\n <>{nextLabel ?? \"Next\"} <ChevronRight className=\"size-3\" /></>\n )}\n </button>\n )}\n </div>\n </div>\n </div>\n );\n }\n);\nSpotlightCard.displayName = \"SpotlightCard\";\n\nexport interface SpotlightProps {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n className?: string;\n}\n\nconst Spotlight = ({ isOpen, onClose, children, className }: SpotlightProps) => {\n if (!isOpen) return null;\n return (\n <div className=\"fixed inset-0 z-50\">\n <div className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\" onClick={onClose} />\n <div className={cn(\"relative z-10 flex items-center justify-center min-h-full p-4\", className)}>\n {children}\n </div>\n </div>\n );\n};\nSpotlight.displayName = \"Spotlight\";\n\nexport interface UseSpotlightReturn {\n isOpen: boolean;\n currentStep: number;\n open: () => void;\n close: () => void;\n goNext: () => void;\n goBack: () => void;\n goTo: (step: number) => void;\n}\n\nexport function useSpotlight(steps: SpotlightStep[], initialStep = 0): UseSpotlightReturn {\n const [isOpen, setIsOpen] = React.useState(false);\n const [currentStep, setCurrentStep] = React.useState(initialStep);\n\n return {\n isOpen,\n currentStep,\n open: () => { setCurrentStep(initialStep); setIsOpen(true); },\n close: () => setIsOpen(false),\n goNext: () => {\n if (currentStep >= steps.length - 1) setIsOpen(false);\n else setCurrentStep(s => s + 1);\n },\n goBack: () => setCurrentStep(s => Math.max(0, s - 1)),\n goTo: (step) => setCurrentStep(Math.max(0, Math.min(step, steps.length - 1))),\n };\n}\n\nexport { Spotlight, SpotlightCard };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nfunction DialogOverlay({ className, ...props }: ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-[100] min-h-[100dvh] w-full bg-black/50 backdrop-blur-[2px]\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-200\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showClose = true,\n overlayClassName,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Content> & {\n showClose?: boolean;\n overlayClassName?: string;\n}) {\n return (\n <DialogPortal>\n <DialogOverlay className={overlayClassName} />\n <DialogPrimitive.Content\n className={cn(\n \"fixed left-1/2 top-1/2 z-[101] w-[calc(100%-1.5rem)] max-w-[min(100%,26rem)] -translate-x-1/2 -translate-y-1/2\",\n // Default padding reserves space for the close button.\n // Pass p-0 in className to opt out (manage padding per section).\n \"rounded-2xl border border-border bg-card p-6 pt-10 text-card-foreground shadow-2xl outline-none\",\n \"max-h-[min(90vh,720px)] overflow-y-auto\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 data-[state=open]:scale-100 data-[state=closed]:scale-[0.98]\",\n \"transition-[opacity,transform] duration-200 ease-out\",\n className\n )}\n {...props}\n >\n {children}\n {showClose && (\n <DialogPrimitive.Close\n className=\"absolute right-3 top-3 inline-flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground transition-colors\"\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogTitle({ className, ...props }: ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n className={cn(\"text-lg font-semibold text-foreground tracking-tight pr-10\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({ className, ...props }: ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description className={cn(\"text-[13px] text-muted-foreground mt-1\", className)} {...props} />\n );\n}\n\nexport { Dialog, DialogTrigger, DialogPortal, DialogClose, DialogContent, DialogTitle, DialogDescription };\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 \"./utils\";\n\ntype DrawerSide = \"right\" | \"left\" | \"top\" | \"bottom\";\nconst DrawerContext = React.createContext<{ side: DrawerSide }>({ side: \"right\" });\n\ninterface DrawerProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root> { side?: DrawerSide; }\n\nconst Drawer = ({ side = \"right\", children, ...props }: DrawerProps) => (\n <DrawerContext.Provider value={{ side }}>\n <DialogPrimitive.Root {...props}>{children}</DialogPrimitive.Root>\n </DrawerContext.Provider>\n);\nDrawer.displayName = \"Drawer\";\n\nconst DrawerTrigger = DialogPrimitive.Trigger;\nconst DrawerClose = DialogPrimitive.Close;\n\nconst DrawerOverlay = 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(\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className)}\n {...props}\n />\n));\nDrawerOverlay.displayName = \"DrawerOverlay\";\n\nconst sideClasses: Record<DrawerSide, string> = {\n right: \"inset-y-0 right-0 h-full w-80 sm:w-96 border-l data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right\",\n left: \"inset-y-0 left-0 h-full w-80 sm:w-96 border-r data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left\",\n top: \"inset-x-0 top-0 w-full border-b rounded-b-2xl data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top\",\n bottom: \"inset-x-0 bottom-0 w-full border-t rounded-t-2xl max-h-[85vh] data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom\",\n};\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n const { side } = React.useContext(DrawerContext);\n return (\n <DialogPrimitive.Portal>\n <DrawerOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\"fixed z-50 flex flex-col bg-card border-border shadow-xl transition-all duration-pg-normal ease-pg-standard data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-200\", sideClasses[side], className)}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-md p-1 text-muted-foreground opacity-70 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\">\n <X className=\"size-4\" /><span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"px-6 pt-6 pb-4 border-b border-border\", className)} {...props} />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"px-6 py-4 border-t border-border flex gap-2 justify-end mt-auto\", className)} {...props} />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} className={cn(\"text-base font-semibold text-foreground pr-6\", className)} {...props} />\n));\nDrawerTitle.displayName = \"DrawerTitle\";\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn(\"mt-1 text-sm text-muted-foreground\", className)} {...props} />\n));\nDrawerDescription.displayName = \"DrawerDescription\";\n\nexport { Drawer, DrawerTrigger, DrawerClose, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"./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 = 6, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-[120] w-72 rounded-xl border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\",\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 * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"./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 = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-[130] max-w-xs overflow-hidden rounded-lg border border-border bg-popover px-3 py-2 text-sm leading-snug text-popover-foreground shadow-md\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { forwardRef, type AnchorHTMLAttributes, type ButtonHTMLAttributes, type HTMLAttributes, type ReactNode } from \"react\";\n\n// ─── MenuDivider ─────────────────────────────────────────────────────────────\n\nexport const MenuDivider = forwardRef<HTMLHRElement, HTMLAttributes<HTMLHRElement>>(\n ({ className, ...props }, ref) => (\n <hr\n ref={ref}\n className={cn(\"h-px bg-border border-none my-1\", className)}\n {...props}\n />\n )\n);\nMenuDivider.displayName = \"MenuDivider\";\n\n// ─── MenuSection ─────────────────────────────────────────────────────────────\n\nexport interface MenuSectionProps extends HTMLAttributes<HTMLDivElement> {\n label?: string;\n children: ReactNode;\n}\n\nexport const MenuSection = forwardRef<HTMLDivElement, MenuSectionProps>(\n ({ label, children, className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col\", className)} {...props}>\n {label && (\n <span className=\"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground px-2 py-1.5 mt-2 first:mt-0 select-none\">\n {label}\n </span>\n )}\n {children}\n </div>\n )\n);\nMenuSection.displayName = \"MenuSection\";\n\n// ─── MenuItem ────────────────────────────────────────────────────────────────\n\ntype MenuItemBaseProps = {\n icon?: ReactNode;\n rightContent?: ReactNode;\n isSelected?: boolean;\n isDanger?: boolean;\n};\n\ntype MenuItemButtonProps = MenuItemBaseProps &\n ButtonHTMLAttributes<HTMLButtonElement> & {\n href?: undefined;\n };\n\ntype MenuItemAnchorProps = MenuItemBaseProps &\n AnchorHTMLAttributes<HTMLAnchorElement> & {\n href: string;\n };\n\nexport type MenuItemProps = MenuItemButtonProps | MenuItemAnchorProps;\n\nconst menuItemBaseClasses =\n \"flex items-center gap-2.5 px-2 py-2 rounded-lg text-sm transition-colors duration-pg-fast ease-pg-standard w-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\";\n\nexport const MenuItem = forwardRef<HTMLButtonElement | HTMLAnchorElement, MenuItemProps>(\n (props, ref) => {\n const {\n icon,\n rightContent,\n isSelected,\n isDanger,\n children,\n className,\n ...rest\n } = props;\n\n const resolvedClasses = cn(\n menuItemBaseClasses,\n !isDanger && !isSelected && \"text-muted-foreground hover:bg-muted hover:text-foreground\",\n isSelected && !isDanger && \"bg-muted text-foreground font-medium\",\n isDanger && \"text-destructive hover:bg-destructive/10\",\n (rest as { disabled?: boolean }).disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n className\n );\n\n const content = (\n <>\n {icon && (\n <span className=\"size-4 shrink-0 flex items-center justify-center [&>svg]:size-4\">\n {icon}\n </span>\n )}\n <span className=\"flex-1 text-left truncate\">{children}</span>\n {rightContent && (\n <span className=\"ml-auto shrink-0\">{rightContent}</span>\n )}\n </>\n );\n\n if (\"href\" in props && props.href !== undefined) {\n const { href, ...anchorRest } = rest as AnchorHTMLAttributes<HTMLAnchorElement> & { href: string };\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n className={resolvedClasses}\n {...anchorRest}\n >\n {content}\n </a>\n );\n }\n\n const { disabled, ...buttonRest } = rest as ButtonHTMLAttributes<HTMLButtonElement>;\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n disabled={disabled}\n className={resolvedClasses}\n {...buttonRest}\n >\n {content}\n </button>\n );\n }\n);\nMenuItem.displayName = \"MenuItem\";\n\n// ─── Menu ────────────────────────────────────────────────────────────────────\n\nexport interface MenuProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n}\n\nexport const Menu = forwardRef<HTMLElement, MenuProps>(\n ({ children, className, ...props }, ref) => (\n <nav\n ref={ref as React.Ref<HTMLElement>}\n className={cn(\"flex flex-col\", className)}\n {...props}\n >\n {children}\n </nav>\n )\n);\nMenu.displayName = \"Menu\";\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 \"./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> & { inset?: boolean }\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-lg px-3 py-2.5 text-[15px] outline-none\",\n \"focus:bg-muted data-[state=open]:bg-muted\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4 text-muted-foreground\" />\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-[130] min-w-[8rem] overflow-hidden rounded-xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\",\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 = 8, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-[130] min-w-[11rem] overflow-hidden rounded-xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\",\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> & { inset?: boolean }\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-lg px-3 py-2.5 text-[15px] outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-lg py-2 pl-8 pr-2 text-sm outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4 text-primary\" />\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-lg py-2 pl-8 pr-2 text-sm outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current text-primary\" />\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> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\", 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 ref={ref} className={cn(\"-mx-1 my-1 h-px bg-border\", className)} {...props} />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nfunction DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn(\"ml-auto text-[10px] tracking-wide text-muted-foreground\", className)} {...props} />;\n}\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 * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"./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-11 min-h-11 w-full items-center justify-between gap-2.5 rounded-lg border border-border bg-card px-4 py-2 text-[15px] text-foreground shadow-sm outline-none\",\n \"ring-ring/50 focus-visible:ring-2 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 shrink-0 text-muted-foreground opacity-70\" />\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 text-muted-foreground\", 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 text-muted-foreground\", 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-[120] max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[var(--radix-select-trigger-width)] overflow-hidden rounded-xl border border-border bg-popover text-popover-foreground shadow-lg\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\",\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 max-h-72 overflow-y-auto\",\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 ref={ref} className={cn(\"px-2 py-1.5 text-xs font-medium text-muted-foreground\", className)} {...props} />\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-lg py-2 pl-2 pr-8 text-sm outline-none\",\n \"focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4 text-primary\" />\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 ref={ref} className={cn(\"-mx-1 my-1 h-px bg-border\", className)} {...props} />\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 { Search } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface CommandProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CommandInputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\nexport interface CommandListProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CommandEmptyProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> { heading?: string; }\nexport interface CommandItemProps extends React.HTMLAttributes<HTMLDivElement> { selected?: boolean; disabled?: boolean; onSelect?: () => void; }\nexport interface CommandSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CommandShortcutProps extends React.HTMLAttributes<HTMLSpanElement> {}\n\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"bg-card rounded-xl border border-border shadow-lg overflow-hidden\", className)} {...props} />\n));\nCommand.displayName = \"Command\";\n\nconst CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(({ className, ...props }, ref) => (\n <div className=\"flex items-center gap-2 border-b border-border px-3 h-11\">\n <Search className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <input ref={ref} className={cn(\"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed\", className)} {...props} />\n </div>\n));\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"max-h-72 overflow-y-auto py-1\", className)} role=\"listbox\" {...props} />\n));\nCommandList.displayName = \"CommandList\";\n\nconst CommandEmpty = React.forwardRef<HTMLDivElement, CommandEmptyProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"text-sm text-muted-foreground text-center py-6\", className)} {...props} />\n));\nCommandEmpty.displayName = \"CommandEmpty\";\n\nconst CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(({ className, heading, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-1 py-1\", className)} role=\"group\" {...props}>\n {heading && <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wider\">{heading}</div>}\n {children}\n </div>\n));\nCommandGroup.displayName = \"CommandGroup\";\n\nconst CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(({ className, selected, disabled, onSelect, children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={disabled}\n onClick={disabled ? undefined : onSelect}\n className={cn(\n \"flex items-center gap-2 px-2 py-1.5 rounded-md text-sm cursor-pointer transition-colors duration-pg-fast ease-pg-standard select-none\",\n selected ? \"bg-muted text-foreground\" : \"text-foreground hover:bg-muted\",\n disabled && \"pointer-events-none opacity-50\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n));\nCommandItem.displayName = \"CommandItem\";\n\nconst CommandSeparator = React.forwardRef<HTMLDivElement, CommandSeparatorProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"h-px bg-border my-1 -mx-1\", className)} {...props} />\n));\nCommandSeparator.displayName = \"CommandSeparator\";\n\nconst CommandShortcut = React.forwardRef<HTMLSpanElement, CommandShortcutProps>(({ className, ...props }, ref) => (\n <span ref={ref} className={cn(\"ml-auto text-xs text-muted-foreground tracking-widest\", className)} {...props} />\n));\nCommandShortcut.displayName = \"CommandShortcut\";\n\nexport { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, CommandShortcut };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"./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-9 items-center justify-center gap-0.5 rounded-lg border border-border bg-muted/40 p-0.5 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-md px-3 py-1.5 text-xs font-medium transition-colors\",\n \"ring-ring/50 focus-visible:outline-none focus-visible:ring-2\",\n \"data-[state=active]:bg-card data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n \"disabled:pointer-events-none disabled:opacity-50\",\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-3 outline-none ring-ring/50 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-lg\",\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 * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b border-border last:border-b-0\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex w-full items-center justify-between py-4 text-sm font-medium text-foreground\",\n \"hover:text-primary transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"[&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-pg-fast ease-pg-standard\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className={cn(\n \"overflow-hidden text-sm text-muted-foreground\",\n \"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\",\n className\n )}\n style={\n {\n \"--accordion-content-height\": \"var(--radix-accordion-content-height)\",\n } as React.CSSProperties\n }\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { X, Info, CheckCircle2, AlertTriangle, XCircle } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type AlertVariant = \"info\" | \"success\" | \"warning\" | \"error\" | \"neutral\";\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant;\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nconst variantStyles: Record<AlertVariant, string> = {\n info: \"bg-blue-50 border-blue-200 text-blue-900 dark:bg-blue-950/30 dark:border-blue-800 dark:text-blue-200\",\n success: \"bg-green-50 border-green-200 text-green-900 dark:bg-green-950/30 dark:border-green-800 dark:text-green-200\",\n warning: \"bg-amber-50 border-amber-200 text-amber-900 dark:bg-amber-950/30 dark:border-amber-800 dark:text-amber-200\",\n error: \"bg-red-50 border-red-200 text-red-900 dark:bg-red-950/30 dark:border-red-800 dark:text-red-200\",\n neutral: \"bg-muted border-border text-foreground\",\n};\n\nconst variantIcons: Record<AlertVariant, React.ElementType> = {\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n error: XCircle,\n neutral: Info,\n};\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant = \"info\", dismissible, onDismiss, children, ...props }, ref) => {\n const Icon = variantIcons[variant];\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\"relative flex gap-3 rounded-xl border p-4 shadow-sm\", variantStyles[variant], className)}\n {...props}\n >\n <Icon className=\"mt-0.5 size-4 shrink-0\" aria-hidden />\n <div className=\"flex-1 min-w-0\">{children}</div>\n {dismissible && (\n <button\n type=\"button\"\n onClick={onDismiss}\n className=\"shrink-0 rounded-md p-0.5 opacity-60 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n );\n }\n);\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h5 ref={ref} className={cn(\"mb-1 text-sm font-semibold leading-none\", className)} {...props} />\n )\n);\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm opacity-90 leading-relaxed\", className)} {...props} />\n )\n);\nAlertDescription.displayName = \"AlertDescription\";\n\nexport interface BannerProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant;\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nconst Banner = React.forwardRef<HTMLDivElement, BannerProps>(\n ({ className, variant = \"info\", dismissible, onDismiss, children, ...props }, ref) => {\n const Icon = variantIcons[variant];\n return (\n <div\n ref={ref}\n role=\"banner\"\n className={cn(\"flex items-center gap-3 border-b px-4 py-3\", variantStyles[variant], className)}\n {...props}\n >\n <Icon className=\"size-4 shrink-0\" aria-hidden />\n <div className=\"flex-1 min-w-0 text-sm\">{children}</div>\n {dismissible && (\n <button\n type=\"button\"\n onClick={onDismiss}\n className=\"shrink-0 rounded-md p-0.5 opacity-60 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n );\n }\n);\nBanner.displayName = \"Banner\";\n\nexport { Alert, AlertTitle, AlertDescription, Banner };\n","import * as React from \"react\";\nimport { Info, CheckCircle2, AlertTriangle, XCircle, Sparkles } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type CalloutVariant = \"info\" | \"success\" | \"warning\" | \"error\" | \"neutral\" | \"discovery\";\n\nexport interface CalloutProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CalloutVariant;\n}\n\nconst variantStyles: Record<CalloutVariant, string> = {\n info: \"bg-blue-50 border-blue-200 text-blue-900 dark:bg-blue-950/30 dark:border-blue-800 dark:text-blue-200\",\n success: \"bg-green-50 border-green-200 text-green-900 dark:bg-green-950/30 dark:border-green-800 dark:text-green-200\",\n warning: \"bg-amber-50 border-amber-200 text-amber-900 dark:bg-amber-950/30 dark:border-amber-800 dark:text-amber-200\",\n error: \"bg-red-50 border-red-200 text-red-900 dark:bg-red-950/30 dark:border-red-800 dark:text-red-200\",\n neutral: \"bg-muted border-border text-foreground\",\n discovery: \"bg-purple-50 border-purple-200 text-purple-900 dark:bg-purple-950/30 dark:border-purple-800 dark:text-purple-200\",\n};\n\nconst variantIcons: Record<CalloutVariant, React.ElementType> = {\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n error: XCircle,\n neutral: Info,\n discovery: Sparkles,\n};\n\nconst Callout = React.forwardRef<HTMLDivElement, CalloutProps>(\n ({ className, variant = \"info\", children, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex gap-3 rounded-xl border p-4\", variantStyles[variant], className)} {...props}>\n {children}\n </div>\n )\n);\nCallout.displayName = \"Callout\";\n\ninterface CalloutIconProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CalloutVariant;\n}\n\nconst CalloutIcon = React.forwardRef<HTMLDivElement, CalloutIconProps>(\n ({ className, variant = \"info\", ...props }, ref) => {\n const Icon = variantIcons[variant];\n return (\n <div ref={ref} className={cn(\"mt-0.5 shrink-0\", className)} {...props}>\n <Icon className=\"size-4\" aria-hidden />\n </div>\n );\n }\n);\nCalloutIcon.displayName = \"CalloutIcon\";\n\nconst CalloutTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm font-semibold\", className)} {...props} />\n )\n);\nCalloutTitle.displayName = \"CalloutTitle\";\n\nconst CalloutText = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"mt-1 text-sm opacity-90 leading-relaxed\", className)} {...props} />\n )\n);\nCalloutText.displayName = \"CalloutText\";\n\nexport { Callout, CalloutIcon, CalloutTitle, CalloutText };\n","import * as React from \"react\";\nimport { Info, CheckCircle2, AlertTriangle, XCircle, Sparkles } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type SectionMessageVariant = \"info\" | \"success\" | \"warning\" | \"error\" | \"discovery\";\n\nexport interface SectionMessageProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: SectionMessageVariant;\n}\n\nconst variantConfig: Record<\n SectionMessageVariant,\n { border: string; bg: string; icon: React.ElementType; iconColor: string }\n> = {\n info: {\n border: \"border-l-blue-500\",\n bg: \"bg-blue-50/60 dark:bg-blue-950/20\",\n icon: Info,\n iconColor: \"text-blue-500 dark:text-blue-400\",\n },\n success: {\n border: \"border-l-green-500\",\n bg: \"bg-green-50/60 dark:bg-green-950/20\",\n icon: CheckCircle2,\n iconColor: \"text-green-500 dark:text-green-400\",\n },\n warning: {\n border: \"border-l-amber-500\",\n bg: \"bg-amber-50/60 dark:bg-amber-950/20\",\n icon: AlertTriangle,\n iconColor: \"text-amber-500 dark:text-amber-400\",\n },\n error: {\n border: \"border-l-red-500\",\n bg: \"bg-red-50/60 dark:bg-red-950/20\",\n icon: XCircle,\n iconColor: \"text-red-500 dark:text-red-400\",\n },\n discovery: {\n border: \"border-l-purple-500\",\n bg: \"bg-purple-50/60 dark:bg-purple-950/20\",\n icon: Sparkles,\n iconColor: \"text-purple-500 dark:text-purple-400\",\n },\n};\n\nconst SectionMessageVariantContext = React.createContext<SectionMessageVariant>(\"info\");\n\nconst SectionMessage = React.forwardRef<HTMLDivElement, SectionMessageProps>(\n ({ className, variant = \"info\", children, ...props }, ref) => {\n const config = variantConfig[variant];\n const Icon = config.icon;\n return (\n <SectionMessageVariantContext.Provider value={variant}>\n <div\n ref={ref}\n role=\"region\"\n className={cn(\n \"flex w-full gap-4 rounded-xl border border-l-4 border-border p-5 shadow-sm transition-colors duration-pg-fast ease-pg-standard\",\n config.border,\n config.bg,\n className\n )}\n {...props}\n >\n <Icon\n className={cn(\"mt-0.5 size-5 shrink-0\", config.iconColor)}\n aria-hidden\n />\n <div className=\"flex-1 min-w-0\">{children}</div>\n </div>\n </SectionMessageVariantContext.Provider>\n );\n }\n);\nSectionMessage.displayName = \"SectionMessage\";\n\nconst SectionMessageTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h4\n ref={ref}\n className={cn(\"text-sm font-semibold text-foreground mb-1\", className)}\n {...props}\n />\n));\nSectionMessageTitle.displayName = \"SectionMessageTitle\";\n\nconst SectionMessageContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground leading-relaxed\", className)}\n {...props}\n />\n));\nSectionMessageContent.displayName = \"SectionMessageContent\";\n\nconst SectionMessageActions = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-wrap gap-2 mt-3\", className)}\n {...props}\n />\n));\nSectionMessageActions.displayName = \"SectionMessageActions\";\n\nexport {\n SectionMessage,\n SectionMessageTitle,\n SectionMessageContent,\n SectionMessageActions,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Loader2 } from \"lucide-react\";\n\nimport { cn } from \"./utils\";\n\nconst sizeMap = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 28,\n xl: 36,\n} as const;\n\nconst colorMap = {\n primary: \"text-primary\",\n muted: \"text-muted-foreground\",\n white: \"text-white\",\n inherit: \"\",\n} as const;\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: keyof typeof sizeMap;\n color?: keyof typeof colorMap;\n}\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size = \"md\", color = \"primary\", ...props }, ref) => {\n const px = sizeMap[size];\n\n return (\n <span\n ref={ref}\n data-slot=\"spinner\"\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"inline-flex items-center justify-center\", colorMap[color], className)}\n {...props}\n >\n <Loader2\n width={px}\n height={px}\n className=\"animate-spin\"\n aria-hidden=\"true\"\n />\n <span className=\"sr-only\">Loading...</span>\n </span>\n );\n }\n);\nSpinner.displayName = \"Spinner\";\n\nexport { Spinner };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type ProgressVariant = \"default\" | \"success\" | \"warning\" | \"error\";\nexport type ProgressSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> {\n variant?: ProgressVariant;\n size?: ProgressSize;\n label?: boolean;\n}\n\nconst variantTrack: Record<ProgressVariant, string> = {\n default: \"bg-primary\",\n success: \"bg-green-500\",\n warning: \"bg-amber-500\",\n error: \"bg-red-500\",\n};\n\nconst sizeClasses: Record<ProgressSize, string> = {\n xs: \"h-1\",\n sm: \"h-1.5\",\n md: \"h-2\",\n lg: \"h-3\",\n};\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({ className, value, variant = \"default\", size = \"md\", label, ...props }, ref) => (\n <div className=\"w-full\">\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\"relative w-full overflow-hidden rounded-full bg-muted\", sizeClasses[size], className)}\n {...props}\n value={value}\n >\n <ProgressPrimitive.Indicator\n className={cn(\"h-full w-full flex-1 transition-all duration-pg-slow ease-pg-standard\", variantTrack[variant])}\n style={{ transform: `translateX(-${100 - (value ?? 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n {label && <p className=\"mt-1 text-xs text-muted-foreground text-right\">{value ?? 0}%</p>}\n </div>\n));\nProgress.displayName = \"Progress\";\n\nexport type ProgressStepStatus = \"complete\" | \"current\" | \"upcoming\";\n\nexport interface ProgressTrackerStep {\n label: string;\n description?: string;\n status: ProgressStepStatus;\n}\n\nexport interface ProgressTrackerProps extends React.HTMLAttributes<HTMLDivElement> {\n steps: ProgressTrackerStep[];\n}\n\nconst ProgressTracker = React.forwardRef<HTMLDivElement, ProgressTrackerProps>(\n ({ className, steps, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-start\", className)} {...props}>\n {steps.map((step, i) => (\n <React.Fragment key={i}>\n <div className=\"flex flex-col items-center gap-1.5 min-w-0\">\n <div className={cn(\n \"flex h-8 w-8 shrink-0 items-center justify-center rounded-full border-2 text-sm font-semibold transition-colors\",\n step.status === \"complete\" && \"bg-primary border-primary text-primary-foreground\",\n step.status === \"current\" && \"bg-primary/10 border-primary text-primary\",\n step.status === \"upcoming\" && \"bg-card border-border text-muted-foreground\"\n )}>\n {step.status === \"complete\" ? <Check className=\"size-4\" strokeWidth={2.5} /> : i + 1}\n </div>\n <div className=\"text-center px-1\">\n <p className={cn(\"text-xs font-medium\", step.status === \"upcoming\" ? \"text-muted-foreground\" : \"text-foreground\")}>{step.label}</p>\n {step.description && <p className=\"text-[11px] text-muted-foreground mt-0.5\">{step.description}</p>}\n </div>\n </div>\n {i < steps.length - 1 && (\n <div className=\"flex-1 mt-4 mx-1\">\n <div className={cn(\"h-0.5 w-full rounded-full transition-colors\", step.status === \"complete\" ? \"bg-primary\" : \"bg-border\")} />\n </div>\n )}\n </React.Fragment>\n ))}\n </div>\n )\n);\nProgressTracker.displayName = \"ProgressTracker\";\n\nexport { Progress, ProgressTracker };\n","import { cn } from \"./utils\";\n\ninterface ShimmerProps {\n className?: string;\n rounded?: \"sm\" | \"md\" | \"lg\" | \"full\";\n}\n\nexport function Shimmer({ className, rounded = \"md\" }: ShimmerProps) {\n const r = { sm: \"rounded\", md: \"rounded-lg\", lg: \"rounded-xl\", full: \"rounded-full\" }[rounded];\n return <div className={cn(\"shimmer\", r, className)} />;\n}\n\nexport function StatCardSkeleton() {\n return (\n <div className=\"bg-card text-card-foreground rounded-xl p-5 flex flex-col gap-3 border border-border shadow-sm\">\n <div className=\"flex items-center justify-between\">\n <Shimmer className=\"h-3 w-28\" />\n <Shimmer className=\"h-10 w-10\" rounded=\"full\" />\n </div>\n <Shimmer className=\"h-9 w-44 mt-1\" />\n <Shimmer className=\"h-3 w-32\" />\n </div>\n );\n}\n\nexport function TableRowSkeleton({\n cols = 6,\n comfortable = false,\n density: densityProp,\n snug = false,\n}: {\n cols?: number;\n /** @deprecated prefer `density` */\n comfortable?: boolean;\n density?: \"default\" | \"comfortable\" | \"compact\";\n snug?: boolean;\n}) {\n const density =\n densityProp ??\n (comfortable ? \"comfortable\" : \"default\");\n const cellPad =\n density === \"comfortable\"\n ? \"px-5 py-4\"\n : density === \"compact\"\n ? snug\n ? \"pl-1.5 pr-2.5 py-2.5\"\n : \"px-3 py-2.5\"\n : \"px-4 py-3.5\";\n return (\n <tr\n className={cn(\n \"border-b border-border/60\",\n density === \"comfortable\" && \"min-h-[56px]\",\n density === \"compact\" && \"min-h-[44px]\"\n )}\n >\n {Array.from({ length: cols }).map((_, i) => (\n <td key={i} className={cellPad}>\n <Shimmer className={cn(\"h-3.5\", i === 0 ? \"w-20\" : i === cols - 1 ? \"w-14\" : \"w-28\")} />\n </td>\n ))}\n </tr>\n );\n}\n\nexport function ChartSkeleton({ height = \"h-48\" }: { height?: string }) {\n return (\n <div className={cn(\"flex items-end gap-2 px-2\", height)}>\n {[55, 72, 40, 88, 65, 82, 48, 95, 60, 70].map((h, i) => (\n <div key={i} className=\"flex-1 shimmer rounded-t-md\" style={{ height: `${h}%` }} />\n ))}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"./utils\";\nimport { type LucideIcon, Inbox } from \"lucide-react\";\n\ninterface EmptyStateProps {\n icon?: LucideIcon;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n icon: Icon = Inbox,\n title,\n description,\n action,\n className,\n}: EmptyStateProps) {\n return (\n <div className={cn(\"flex flex-col items-center justify-center py-16 px-4 text-center\", className)}>\n <div className=\"w-14 h-14 rounded-2xl bg-slate-100 flex items-center justify-center mb-4\">\n <Icon className=\"w-6 h-6 text-slate-400\" />\n </div>\n <h3 className=\"text-sm font-semibold text-slate-700 mb-1\">{title}</h3>\n {description && (\n <p className=\"text-xs text-slate-500 max-w-xs leading-relaxed\">{description}</p>\n )}\n {action && <div className=\"mt-4\">{action}</div>}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"./utils\";\nimport { TableRowSkeleton } from \"./skeleton\";\nimport { EmptyState } from \"./empty-state\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { useState } from \"react\";\n\nexport type DataTableDensity = \"default\" | \"comfortable\" | \"compact\";\nexport type DataTableHeaderStyle = \"surface\" | \"minimal\";\nexport type DataTableFooterSummary = \"range\" | \"count\";\n\n/** Builds the visible page numbers including ellipsis markers */\nfunction getPageRange(current: number, total: number): (number | \"…\")[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n const pages: (number | \"…\")[] = [1];\n if (current > 3) pages.push(\"…\");\n const lo = Math.max(2, current - 1);\n const hi = Math.min(total - 1, current + 1);\n for (let p = lo; p <= hi; p++) pages.push(p);\n if (current < total - 2) pages.push(\"…\");\n pages.push(total);\n return pages;\n}\n\nexport type Column<T> = {\n key: string;\n header: ReactNode;\n /** Table column width, e.g. `48px`, `18%`, `minmax(12rem,1fr)` (fixed layout) */\n width?: string;\n minWidth?: number;\n maxWidth?: number;\n align?: \"left\" | \"right\" | \"center\";\n /** Allow cell text to wrap instead of truncating. */\n wrap?: boolean;\n /** Extra classes on `<th>` / `<td>` (e.g. wider horizontal padding per column) */\n cellClassName?: string;\n render: (row: T, index: number) => ReactNode;\n};\n\ninterface DataTableProps<T> {\n columns: Column<T>[];\n data: T[];\n isLoading?: boolean;\n skeletonRows?: number;\n emptyTitle?: string;\n emptyDescription?: string;\n pageSize?: number;\n /** Controlled page number (1-indexed). Enables server-side pagination. */\n page?: number;\n /** Called when the user changes page in controlled mode. */\n onPageChange?: (page: number) => void;\n /** Total row count for server-side pagination (overrides data.length for page calculations). */\n totalRows?: number;\n className?: string;\n rowKey: (row: T) => string;\n /** Optional hover CTA shown on the right of every row */\n rowCta?: {\n label: string;\n onClick?: (row: T) => void;\n };\n /** Row / cell vertical rhythm and horizontal gutters */\n density?: DataTableDensity;\n /** `auto` lets columns breathe; `fixed` uses `colgroup` hints */\n tableLayout?: \"auto\" | \"fixed\";\n theadClassName?: string;\n headerStyle?: DataTableHeaderStyle;\n /** Footer: paginated range vs simple `n items` */\n footerSummary?: DataTableFooterSummary;\n /** Noun after the count when `footerSummary=\"count\"` (default singular / plural `item` / `items`). */\n footerCountLabels?: { singular: string; plural: string };\n /** With `density=\"compact\"`, use tighter cell gutters (`pl-1.5 pr-2.5` vs `px-3`). Footer keeps normal horizontal padding. */\n snug?: boolean;\n}\n\nexport function DataTable<T>({\n columns,\n data,\n isLoading = false,\n skeletonRows = 6,\n emptyTitle = \"No data yet\",\n emptyDescription,\n pageSize = 10,\n page: controlledPage,\n onPageChange,\n totalRows,\n className,\n rowKey,\n rowCta,\n density = \"default\",\n tableLayout = \"fixed\",\n theadClassName,\n headerStyle = \"surface\",\n footerSummary = \"range\",\n footerCountLabels = { singular: \"item\", plural: \"items\" },\n snug = false,\n}: DataTableProps<T>) {\n const isControlled = controlledPage !== undefined;\n const [internalPage, setInternalPage] = useState(1);\n const page = isControlled ? controlledPage : internalPage;\n const setPage = isControlled\n ? (p: number) => onPageChange?.(p)\n : (p: number) => setInternalPage(p);\n\n const total = totalRows ?? data.length;\n const totalPages = Math.ceil(total / pageSize);\n const paginated = isControlled ? data : data.slice((page - 1) * pageSize, page * pageSize);\n\n const comfortable = density === \"comfortable\";\n const compact = density === \"compact\";\n const compactCellPad = compact\n ? snug\n ? \"pl-1.5 pr-2.5 py-2.5\"\n : \"px-3 py-2.5\"\n : \"px-4 py-3.5\";\n const cellPad = comfortable ? \"px-5 py-4\" : compactCellPad;\n const headPad = comfortable ? \"px-5 py-4\" : compactCellPad;\n /** Footer is outside the grid; do not reuse snug cell `pl-0`-style gutters here. */\n const footerPad = comfortable\n ? \"px-5 py-4\"\n : compact\n ? \"px-4 py-2.5\"\n : \"px-4 py-3.5\";\n const headText = comfortable\n ? \"text-[12px] font-medium text-muted-foreground tracking-normal\"\n : compact\n ? \"text-[11px] font-semibold text-muted-foreground\"\n : \"text-[11px] font-semibold text-foreground/75 dark:text-foreground/85\";\n const rowCtaColWidth = compact ? 108 : 130;\n\n return (\n <div\n className={cn(\n \"bg-card text-card-foreground rounded-xl overflow-hidden border border-border\",\n className\n )}\n >\n {/* scrollbar space always reserved; thumb subtle on hover */}\n <div\n className={cn(\n \"overflow-x-auto\",\n \"[&::-webkit-scrollbar]:h-[4px] [&::-webkit-scrollbar-track]:bg-transparent\",\n \"[&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-transparent\",\n \"hover:[&::-webkit-scrollbar-thumb]:bg-border dark:hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/35\"\n )}\n style={{ scrollbarWidth: \"thin\", scrollbarColor: \"var(--border) transparent\" }}\n >\n <table\n className={cn(tableLayout === \"auto\" && \"min-w-[920px]\")}\n style={{ tableLayout, width: \"100%\" }}\n >\n {tableLayout === \"fixed\" && (\n <colgroup>\n {columns.map((col) => (\n <col\n key={col.key}\n style={{\n width: col.width ?? (col.minWidth != null ? `${col.minWidth}px` : undefined),\n minWidth: col.minWidth,\n maxWidth: col.maxWidth,\n }}\n />\n ))}\n {rowCta ? <col style={{ width: rowCtaColWidth }} /> : null}\n </colgroup>\n )}\n\n <thead\n className={cn(\n headerStyle === \"surface\" && \"bg-muted/35\",\n headerStyle === \"minimal\" && \"bg-transparent\",\n theadClassName\n )}\n >\n <tr\n className={cn(\n \"border-b\",\n headerStyle === \"surface\" ? \"border-border\" : \"border-border/70\"\n )}\n >\n {columns.map((col) => (\n <th\n key={col.key}\n className={cn(\n headPad,\n headText,\n \"whitespace-nowrap align-middle\",\n col.align === \"right\"\n ? \"text-right\"\n : col.align === \"center\"\n ? \"text-center\"\n : \"text-left\",\n col.cellClassName\n )}\n >\n {col.header}\n </th>\n ))}\n {rowCta ? <th className={cn(headPad, \"w-[1%]\")} aria-hidden /> : null}\n </tr>\n </thead>\n\n <tbody>\n {isLoading ? (\n Array.from({ length: skeletonRows }).map((_, i) => (\n <TableRowSkeleton\n key={i}\n cols={columns.length + (rowCta ? 1 : 0)}\n density={density}\n snug={snug}\n />\n ))\n ) : paginated.length === 0 ? (\n <tr>\n <td colSpan={columns.length + (rowCta ? 1 : 0)}>\n <EmptyState title={emptyTitle} description={emptyDescription} />\n </td>\n </tr>\n ) : (\n paginated.map((row, i) => (\n <tr\n key={rowKey(row)}\n className={cn(\n \"group transition-colors duration-150 border-b border-border/60 last:border-b-0\",\n comfortable && \"min-h-[56px]\",\n compact && \"min-h-[44px]\",\n \"hover:bg-muted/40 dark:hover:bg-muted/25\",\n rowCta &&\n \"hover:shadow-[0_1px_0_rgba(0,0,0,0.04)] dark:hover:shadow-none\"\n )}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n className={cn(\n cellPad,\n \"align-middle\",\n comfortable\n ? cn(\n \"text-[13px] leading-snug\",\n !col.wrap && \"whitespace-nowrap\"\n )\n : compact\n ? cn(\n \"text-[13px] leading-tight\",\n !col.wrap && \"whitespace-nowrap\",\n \"overflow-hidden\"\n )\n : \"whitespace-nowrap overflow-hidden\",\n col.align === \"right\"\n ? \"text-right\"\n : col.align === \"center\"\n ? \"text-center\"\n : \"text-left\",\n col.cellClassName\n )}\n >\n {col.render(row, i)}\n </td>\n ))}\n\n {rowCta ? (\n <td\n className={cn(\n cellPad,\n \"text-left align-middle whitespace-nowrap\",\n comfortable\n ? \"pl-2 pr-5\"\n : compact\n ? snug\n ? \"pl-1.5 pr-2\"\n : \"pl-1.5 pr-3\"\n : \"pl-3 pr-4\"\n )}\n >\n <button\n type=\"button\"\n onClick={() => rowCta.onClick?.(row)}\n className={cn(\n \"opacity-0 group-hover:opacity-100 transition-opacity duration-150 inline-flex items-center font-medium text-foreground bg-card rounded-lg border border-border hover:border-muted-foreground/50 whitespace-nowrap shadow-sm\",\n compact\n ? \"px-2.5 py-1 text-[11px]\"\n : \"px-3 py-1.5 text-[12px]\"\n )}\n >\n {rowCta.label}\n </button>\n </td>\n ) : null}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {!isLoading && paginated.length > 0 && (\n <div\n className={cn(\n \"flex items-center gap-4 flex-wrap border-t border-border\",\n footerPad,\n footerSummary === \"count\" && totalPages <= 1\n ? \"justify-start\"\n : \"justify-between\"\n )}\n >\n {footerSummary === \"count\" ? (\n <span className=\"text-[12px] text-muted-foreground tabular-nums\">\n <span className=\"font-medium text-foreground\">{total}</span>{\" \"}\n {total === 1\n ? footerCountLabels.singular\n : footerCountLabels.plural}\n </span>\n ) : (\n <span className=\"text-[12px] text-muted-foreground tabular-nums\">\n Showing{\" \"}\n <span className=\"text-foreground font-medium\">\n {Math.min((page - 1) * pageSize + 1, total)}–\n {Math.min(page * pageSize, total)}\n </span>{\" \"}\n of{\" \"}\n <span className=\"text-foreground font-medium\">\n {total.toLocaleString()}\n </span>{\" \"}\n {total !== 1 ? \"results\" : \"result\"}\n </span>\n )}\n\n {(footerSummary === \"range\" || footerSummary === \"count\") &&\n totalPages > 1 && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => setPage(Math.max(1, page - 1))}\n disabled={page === 1}\n className=\"w-7 h-7 rounded-md flex items-center justify-center text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\n >\n <ChevronLeft className=\"w-3.5 h-3.5\" />\n </button>\n\n {getPageRange(page, totalPages).map((p, idx) =>\n p === \"…\" ? (\n <span\n key={`ellipsis-${idx}`}\n className=\"w-7 h-7 flex items-center justify-center text-[12px] text-muted-foreground select-none\"\n >\n …\n </span>\n ) : (\n <button\n key={p}\n onClick={() => setPage(p as number)}\n className={cn(\n \"w-7 h-7 rounded-md text-[12px] font-medium transition-colors tabular-nums flex items-center justify-center\",\n page === p\n ? \"bg-primary text-primary-foreground shadow-sm\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\"\n )}\n >\n {p}\n </button>\n )\n )}\n\n <button\n onClick={() => setPage(Math.min(totalPages, page + 1))}\n disabled={page === totalPages}\n className=\"w-7 h-7 rounded-md flex items-center justify-center text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\n >\n <ChevronRight className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"./utils\";\n\ninterface PageHeaderProps {\n title: ReactNode;\n /** When title is non-plain text (e.g. includes a flag), set for screen readers. */\n titleAriaLabel?: string;\n subtitle?: string;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function PageHeader({ title, titleAriaLabel, subtitle, actions, className }: PageHeaderProps) {\n return (\n <div className={cn(\"flex items-start justify-between mb-6\", className)}>\n <div>\n <h1\n className=\"text-xl font-semibold text-foreground tracking-tight flex items-center gap-2.5 flex-wrap\"\n {...(titleAriaLabel ? { \"aria-label\": titleAriaLabel } : {})}\n >\n {title}\n </h1>\n {subtitle && <p className=\"text-sm text-muted-foreground mt-0.5\">{subtitle}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { forwardRef, type HTMLAttributes, useState, useCallback } from \"react\";\nimport { Check, Copy } from \"lucide-react\";\n\n// ---------------------------------------------------------------------------\n// Code – inline\n// ---------------------------------------------------------------------------\n\nexport type CodeProps = HTMLAttributes<HTMLElement>;\n\nexport const Code = forwardRef<HTMLElement, CodeProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <code\n ref={ref}\n className={cn(\n \"rounded-md bg-muted px-1.5 py-0.5 font-mono text-[13px] text-foreground ring-1 ring-border\",\n className\n )}\n {...props}\n >\n {children}\n </code>\n );\n }\n);\nCode.displayName = \"Code\";\n\n// ---------------------------------------------------------------------------\n// CodeBlock – multi-line\n// ---------------------------------------------------------------------------\n\nexport interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {\n /** The raw code string to display and optionally copy. */\n code: string;\n /** Optional filename shown in the header. */\n filename?: string;\n /** Optional language label shown as a badge in the header. */\n language?: string;\n /** Hide the copy button. Defaults to false. */\n hideCopy?: boolean;\n}\n\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(\n (\n {\n code,\n filename,\n language,\n hideCopy = false,\n className,\n ...props\n },\n ref\n ) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n const timer = setTimeout(() => setCopied(false), 2000);\n return () => clearTimeout(timer);\n } catch {\n // Clipboard access denied — fail silently.\n }\n }, [code]);\n\n const hasHeader = Boolean(filename || language);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative overflow-hidden bg-[#0f1117] text-[#e5e7eb]\",\n hasHeader ? \"rounded-xl\" : \"rounded-xl\",\n className\n )}\n {...props}\n >\n {/* Header */}\n {hasHeader && (\n <div className=\"flex items-center justify-between bg-[#1a1f2e] px-4 py-2 border-b border-[#2a3441]\">\n <div className=\"flex items-center gap-2.5\">\n {filename && (\n <span className=\"text-[#9ca3af] text-xs font-mono\">\n {filename}\n </span>\n )}\n {language && (\n <span className=\"rounded-md bg-[#2a3441] px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-[#6b7280]\">\n {language}\n </span>\n )}\n </div>\n {!hideCopy && (\n <CopyButton copied={copied} onClick={handleCopy} inHeader />\n )}\n </div>\n )}\n\n {/* Code area */}\n <div className=\"relative\">\n <pre className=\"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed\">\n <code>{code}</code>\n </pre>\n\n {/* Copy button (no header case) */}\n {!hasHeader && !hideCopy && (\n <div className=\"absolute top-3 right-3\">\n <CopyButton copied={copied} onClick={handleCopy} />\n </div>\n )}\n </div>\n </div>\n );\n }\n);\nCodeBlock.displayName = \"CodeBlock\";\n\n// ---------------------------------------------------------------------------\n// Internal: CopyButton\n// ---------------------------------------------------------------------------\n\ninterface CopyButtonProps {\n copied: boolean;\n onClick: () => void;\n inHeader?: boolean;\n}\n\nfunction CopyButton({ copied, onClick, inHeader = false }: CopyButtonProps) {\n return (\n <button\n type=\"button\"\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n onClick={onClick}\n className={cn(\n \"inline-flex items-center justify-center rounded-md transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n inHeader\n ? \"size-6 text-[#6b7280] hover:bg-[#2a3441] hover:text-[#9ca3af]\"\n : \"size-7 bg-[#1a1f2e]/80 text-[#6b7280] hover:bg-[#1a1f2e] hover:text-[#9ca3af]\"\n )}\n >\n {copied ? (\n <Check className=\"size-3.5 text-green-400\" />\n ) : (\n <Copy className=\"size-3.5\" />\n )}\n </button>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cn } from \"./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-9 w-9 shrink-0 overflow-hidden rounded-full border border-border bg-muted\", 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 ref={ref} className={cn(\"aspect-square h-full w-full object-cover\", className)} {...props} />\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(\"flex h-full w-full items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground\", className)}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"./avatar\";\n\nexport interface AvatarGroupItem {\n src?: string;\n fallback: string;\n alt?: string;\n}\n\nexport interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n avatars: AvatarGroupItem[];\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeClasses: Record<NonNullable<AvatarGroupProps[\"size\"]>, string> = {\n sm: \"h-6 w-6\",\n md: \"h-8 w-8\",\n lg: \"h-10 w-10\",\n};\n\nconst fontSizeClasses: Record<NonNullable<AvatarGroupProps[\"size\"]>, string> = {\n sm: \"text-[10px]\",\n md: \"text-xs\",\n lg: \"text-xs\",\n};\n\nconst overlapClasses: Record<NonNullable<AvatarGroupProps[\"size\"]>, string> = {\n sm: \"-ml-2\",\n md: \"-ml-2\",\n lg: \"-ml-2\",\n};\n\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ avatars, max = 4, size = \"md\", className, ...props }, ref) => {\n const visible = avatars.slice(0, max);\n const overflowCount = avatars.length - max;\n const totalSlots = visible.length + (overflowCount > 0 ? 1 : 0);\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center\", className)}\n {...props}\n >\n {visible.map((avatar, index) => {\n const zIndex = totalSlots - index;\n return (\n <Avatar\n key={index}\n className={cn(\n sizeClasses[size],\n overlapClasses[size],\n \"ring-2 ring-background border border-border shrink-0 transition-[margin] duration-[var(--duration-pg-fast,150ms)] ease-[var(--ease-pg-standard,cubic-bezier(0.4,0,0.2,1))] first:ml-0\",\n )}\n style={{ zIndex }}\n >\n {avatar.src && (\n <AvatarImage src={avatar.src} alt={avatar.alt ?? avatar.fallback} />\n )}\n <AvatarFallback\n className={cn(\n fontSizeClasses[size],\n \"font-medium\",\n )}\n >\n {avatar.fallback}\n </AvatarFallback>\n </Avatar>\n );\n })}\n\n {overflowCount > 0 && (\n <div\n className={cn(\n sizeClasses[size],\n overlapClasses[size],\n fontSizeClasses[size],\n \"relative shrink-0 flex items-center justify-center rounded-full border border-border bg-muted text-muted-foreground font-medium ring-2 ring-background transition-[margin] duration-[var(--duration-pg-fast,150ms)] ease-[var(--ease-pg-standard,cubic-bezier(0.4,0,0.2,1))]\",\n )}\n style={{ zIndex: 0 }}\n >\n +{overflowCount}\n </div>\n )}\n </div>\n );\n }\n);\n\nAvatarGroup.displayName = \"AvatarGroup\";\n\nexport { AvatarGroup };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type AvatarTagSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface AvatarTagProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Display label for the tag */\n label: string;\n /** Optional image src for the avatar */\n src?: string;\n /** Alt text for the avatar image */\n alt?: string;\n /** Size variant */\n size?: AvatarTagSize;\n /** Called when the remove button is clicked */\n onRemove?: () => void;\n /** Disables interaction */\n disabled?: boolean;\n}\n\nfunction getInitials(label: string): string {\n const words = label.trim().split(/\\s+/);\n if (words.length === 1) {\n return words[0].slice(0, 2).toUpperCase();\n }\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n}\n\nconst sizeConfig: Record<\n AvatarTagSize,\n { avatar: string; text: string; icon: string; padding: string }\n> = {\n sm: {\n avatar: \"h-[18px] w-[18px]\",\n text: \"text-[10px]\",\n icon: \"size-2.5\",\n padding: \"px-1.5 py-0.5 gap-1\",\n },\n md: {\n avatar: \"h-5 w-5\",\n text: \"text-xs\",\n icon: \"size-3\",\n padding: \"px-2 py-0.5 gap-1\",\n },\n lg: {\n avatar: \"h-6 w-6\",\n text: \"text-sm\",\n icon: \"size-3.5\",\n padding: \"px-2.5 py-1 gap-1.5\",\n },\n};\n\nconst AvatarTag = React.forwardRef<HTMLSpanElement, AvatarTagProps>(\n (\n {\n label,\n src,\n alt,\n size = \"md\",\n onRemove,\n disabled = false,\n className,\n ...props\n },\n ref\n ) => {\n const cfg = sizeConfig[size];\n const initials = getInitials(label);\n\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center rounded-full border border-border bg-card font-medium transition-colors duration-[var(--duration-pg-fast,150ms)] ease-[var(--ease-pg-standard,cubic-bezier(0.4,0,0.2,1))]\",\n cfg.padding,\n cfg.text,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {/* Avatar */}\n <AvatarPrimitive.Root\n className={cn(\n \"relative shrink-0 overflow-hidden rounded-full\",\n cfg.avatar\n )}\n >\n <AvatarPrimitive.Image\n src={src}\n alt={alt ?? label}\n className=\"aspect-square h-full w-full object-cover\"\n />\n <AvatarPrimitive.Fallback\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-primary/10 text-primary font-semibold leading-none\",\n cfg.text\n )}\n >\n {initials}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n\n {/* Label */}\n <span className=\"leading-none select-none\">{label}</span>\n\n {/* Remove button */}\n {onRemove && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n if (!disabled) onRemove();\n }}\n disabled={disabled}\n className={cn(\n \"flex items-center justify-center rounded-full opacity-60 transition-opacity duration-[var(--duration-pg-fast,150ms)] hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n disabled && \"pointer-events-none\"\n )}\n aria-label={`Remove ${label}`}\n >\n <X className={cfg.icon} />\n </button>\n )}\n </span>\n );\n }\n);\n\nAvatarTag.displayName = \"AvatarTag\";\n\nexport { AvatarTag };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ChevronDown, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButtonProps,\n type DayPickerProps,\n} from \"react-day-picker\";\n\nimport { Button } from \"./button\";\nimport type { ButtonProps } from \"./button\";\nimport { cn } from \"./utils\";\n\nconst cellSize = \"[--cell-size:2rem]\";\n\nfunction navButtonClasses(variant: NonNullable<ButtonProps[\"variant\"]>): string {\n const base =\n \"inline-flex items-center justify-center rounded-lg border font-medium transition-colors duration-pg-fast ease-pg-standard focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 disabled:pointer-events-none disabled:opacity-50\";\n switch (variant) {\n case \"outline\":\n return cn(\n base,\n \"border-border bg-card text-foreground shadow-sm hover:bg-muted\"\n );\n case \"ghost\":\n default:\n return cn(\n base,\n \"border-transparent bg-transparent text-foreground hover:bg-muted focus-visible:bg-muted/80 active:bg-muted/90\"\n );\n }\n}\n\nexport type CalendarProps = DayPickerProps & {\n buttonVariant?: ButtonProps[\"variant\"];\n};\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n locale,\n formatters,\n components,\n showWeekNumber,\n ...props\n}: CalendarProps) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n showWeekNumber={showWeekNumber}\n locale={locale}\n className={cn(\n \"group/calendar bg-background p-3\",\n cellSize,\n \"[[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(locale?.code ?? \"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"relative flex flex-col gap-4 md:flex-row\",\n defaultClassNames.months\n ),\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\n nav: cn(\n \"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n navButtonClasses(buttonVariant),\n \"h-[var(--cell-size)] w-[var(--cell-size)] min-h-0 min-w-0 shrink-0 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n navButtonClasses(buttonVariant),\n \"h-[var(--cell-size)] w-[var(--cell-size)] min-h-0 min-w-0 shrink-0 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex h-[var(--cell-size)] w-full items-center justify-center px-[var(--cell-size)]\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"flex h-[var(--cell-size)] w-full items-center justify-center gap-1.5 text-sm font-medium\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative rounded-md border border-border bg-card shadow-sm focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/35\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\"absolute inset-0 cursor-pointer opacity-0\", defaultClassNames.dropdown),\n caption_label: cn(\n \"font-medium select-none\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground\",\n defaultClassNames.caption_label\n ),\n month_grid: cn(\"w-full border-collapse\", defaultClassNames.month_grid),\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"flex-1 rounded-md text-[0.8rem] font-normal text-muted-foreground select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"mt-2 flex w-full\", defaultClassNames.week),\n week_number_header: cn(\n \"w-[var(--cell-size)] select-none\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] text-muted-foreground select-none\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"group/day relative aspect-square h-full w-full p-0 text-center select-none\",\n \"[&:last-child[data-selected=true]_button]:rounded-r-md\",\n showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none bg-accent/60\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"rounded-md bg-muted text-foreground data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\"text-muted-foreground opacity-50\", defaultClassNames.disabled),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className: rootClass, rootRef, ...rootProps }) => (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(rootClass)}\n {...rootProps}\n />\n ),\n Chevron: ({ className: chClass, orientation, ...chProps }) => {\n if (orientation === \"left\") {\n return <ChevronLeft className={cn(\"size-4\", chClass)} {...chProps} />;\n }\n if (orientation === \"right\") {\n return <ChevronRight className={cn(\"size-4\", chClass)} {...chProps} />;\n }\n return <ChevronDown className={cn(\"size-4\", chClass)} {...chProps} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...weekProps }) => (\n <th {...weekProps}>\n <div className=\"flex h-[var(--cell-size)] w-[var(--cell-size)] min-h-[var(--cell-size)] min-w-[var(--cell-size)] items-center justify-center text-center text-xs tabular-nums\">\n {children}\n </div>\n </th>\n ),\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: DayButtonProps) {\n const defaultClassNames = getDefaultClassNames();\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n type=\"button\"\n variant=\"ghost\"\n {...props}\n disabled={Boolean(modifiers.disabled) || props.disabled}\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"flex aspect-square h-auto min-h-[var(--cell-size)] w-full min-w-[var(--cell-size)] flex-col gap-1 rounded-md p-0 font-normal leading-none data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground hover:bg-muted/80 dark:hover:bg-muted/50 [&>span]:text-xs [&>span]:opacity-70\",\n \"group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/35\",\n defaultClassNames.day,\n className\n )}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","\"use client\";\n\nimport { useState, useRef, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ChevronLeft, ChevronRight, ChevronDown, CalendarDays } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"./utils\";\n\n/* ─── Constants ─────────────────────────────────────────────────────────── */\nconst MONTHS = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\n \"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\nconst DAYS = [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"];\nconst PRIMARY = \"#0061E3\";\nconst PANEL_W = 296;\n\n/* ─── Helpers ────────────────────────────────────────────────────────────── */\nfunction daysInMonth(y: number, m: number) { return new Date(y, m + 1, 0).getDate(); }\nfunction firstDayOf(y: number, m: number) { return new Date(y, m, 1).getDay(); }\n\nfunction parseYMD(s: string) {\n if (!s) return null;\n const [y, m, d] = s.split(\"-\").map(Number);\n if (!y || !m || !d) return null;\n return { y, m: m - 1, d };\n}\nfunction toYMD(y: number, m: number, d: number) {\n return `${y}-${String(m + 1).padStart(2, \"0\")}-${String(d).padStart(2, \"0\")}`;\n}\nfunction displayDate(ymd: string) {\n const p = parseYMD(ymd);\n if (!p) return \"\";\n return `${String(p.d).padStart(2, \"0\")} ${MONTHS[p.m].slice(0, 3)} ${p.y}`;\n}\n\n/* ─── Props ─────────────────────────────────────────────────────────────── */\ninterface DatePickerProps {\n value: string;\n onChange: (v: string) => void;\n placeholder?: string;\n className?: string;\n min?: string;\n label?: string;\n}\n\n/* ─── DatePicker ─────────────────────────────────────────────────────────── */\nexport function DatePicker({ value, onChange, placeholder = \"Select date\", className, min, label }: DatePickerProps) {\n const today = new Date();\n const parsed = parseYMD(value);\n\n const [open, setOpen] = useState(false);\n const [panelPos, setPanelPos] = useState({ top: 0, left: 0 });\n const [viewYear, setViewYear] = useState(parsed?.y ?? today.getFullYear());\n const [viewMonth, setViewMonth] = useState(parsed?.m ?? today.getMonth());\n const [yearMenu, setYearMenu] = useState(false);\n const [monthMenu, setMonthMenu] = useState(false);\n const [mounted, setMounted] = useState(false);\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => { setMounted(true); }, []);\n\n /* Sync view when value changes */\n useEffect(() => {\n if (parsed) { setViewYear(parsed.y); setViewMonth(parsed.m); }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n /* Compute fixed position from trigger rect */\n function openPanel() {\n if (!triggerRef.current) return;\n const trigger = triggerRef.current;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const PANEL_H = 340; // approx height\n\n // Scroll trigger into view so panel can appear next to it (avoids panel far from input in scrollable forms)\n trigger.scrollIntoView({ block: \"center\", behavior: \"auto\" });\n\n requestAnimationFrame(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n\n // Horizontal: align left edge, clamp so it doesn't go off screen\n let left = rect.left;\n if (left + PANEL_W > vw - 8) left = vw - PANEL_W - 8;\n\n // Vertical: prefer below trigger; if not enough room open above\n let top = rect.bottom + 6;\n if (top + PANEL_H > vh - 8) top = rect.top - PANEL_H - 6;\n\n setPanelPos({ top, left });\n setOpen(true);\n });\n }\n\n /* Close on outside click */\n useEffect(() => {\n if (!open) return;\n function handler(e: MouseEvent) {\n const inTrigger = triggerRef.current?.contains(e.target as Node);\n const inPanel = panelRef.current?.contains(e.target as Node);\n if (!inTrigger && !inPanel) {\n setOpen(false); setYearMenu(false); setMonthMenu(false);\n }\n }\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open]);\n\n /* Navigation */\n function prevMonth() {\n if (viewMonth === 0) { setViewMonth(11); setViewYear(y => y - 1); }\n else setViewMonth(m => m - 1);\n }\n function nextMonth() {\n if (viewMonth === 11) { setViewMonth(0); setViewYear(y => y + 1); }\n else setViewMonth(m => m + 1);\n }\n\n /* Day grid */\n const totalDays = daysInMonth(viewYear, viewMonth);\n const firstDay = firstDayOf(viewYear, viewMonth);\n const prevTotal = daysInMonth(viewYear, viewMonth === 0 ? 11 : viewMonth - 1);\n const minParsed = parseYMD(min ?? \"\");\n\n function isDisabled(y: number, m: number, d: number) {\n if (!minParsed) return false;\n return new Date(y, m, d) < new Date(minParsed.y, minParsed.m, minParsed.d);\n }\n\n type Cell = { d: number; m: number; y: number; current: boolean };\n const cells: Cell[] = [];\n for (let i = 0; i < firstDay; i++) {\n const d = prevTotal - firstDay + 1 + i;\n const m = viewMonth === 0 ? 11 : viewMonth - 1;\n const y = viewMonth === 0 ? viewYear - 1 : viewYear;\n cells.push({ d, m, y, current: false });\n }\n for (let d = 1; d <= totalDays; d++) cells.push({ d, m: viewMonth, y: viewYear, current: true });\n const remaining = 42 - cells.length;\n for (let d = 1; d <= remaining; d++) {\n const m = viewMonth === 11 ? 0 : viewMonth + 1;\n const y = viewMonth === 11 ? viewYear + 1 : viewYear;\n cells.push({ d, m, y, current: false });\n }\n\n const years = Array.from({ length: 15 }, (_, i) => today.getFullYear() - 2 + i);\n\n function selectDay(cell: Cell) {\n if (!cell.current) { setViewYear(cell.y); setViewMonth(cell.m); }\n if (cell.current && isDisabled(cell.y, cell.m, cell.d)) return;\n onChange(toYMD(cell.y, cell.m, cell.d));\n setOpen(false);\n }\n\n const isToday = (c: Cell) => c.d === today.getDate() && c.m === today.getMonth() && c.y === today.getFullYear();\n const isSelected = (c: Cell) => !!parsed && c.d === parsed.d && c.m === parsed.m && c.y === parsed.y;\n\n /* ── Calendar panel (portalled) ── */\n const panel = (\n <AnimatePresence>\n {open && (\n <motion.div\n ref={panelRef}\n initial={{ opacity: 0, scale: 0.97, y: -6 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.97, y: -6 }}\n transition={{ duration: 0.16, ease: [0.16, 1, 0.3, 1] }}\n className=\"isolate rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg select-none dark:shadow-black/40\"\n style={{\n position: \"fixed\",\n top: panelPos.top,\n left: panelPos.left,\n width: PANEL_W,\n zIndex: 20000,\n backgroundColor: \"var(--popover)\",\n boxShadow: \"0 16px 40px rgba(0,0,0,0.12), 0 4px 12px rgba(0,0,0,0.07)\",\n }}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 pt-4 pb-3\">\n <button onClick={prevMonth}\n className=\"w-8 h-8 rounded-full flex items-center justify-center text-gray-500 hover:bg-gray-100 transition-colors\">\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n\n <div className=\"flex items-center gap-1\">\n {/* Month */}\n <div className=\"relative\">\n <button onClick={() => { setMonthMenu(o => !o); setYearMenu(false); }}\n className=\"flex items-center gap-1 px-2 py-1 rounded-lg text-[14px] font-semibold text-gray-900 hover:bg-gray-100 transition-colors\">\n {MONTHS[viewMonth].slice(0, 3)}\n <ChevronDown className=\"w-3 h-3 text-gray-400\" />\n </button>\n <AnimatePresence>\n {monthMenu && (\n <motion.div\n initial={{ opacity: 0, y: -4 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -4 }}\n transition={{ duration: 0.12 }}\n className=\"absolute top-full left-0 z-[10000] mt-1 max-h-[220px] min-w-[130px] overflow-y-auto rounded-xl border border-border bg-popover py-1 shadow-lg\"\n >\n {MONTHS.map((mn, mi) => (\n <button key={mn} onClick={() => { setViewMonth(mi); setMonthMenu(false); }}\n className=\"w-full px-3 py-2 text-left text-[13px] text-foreground transition-colors hover:bg-muted\"\n style={{ fontWeight: mi === viewMonth ? 600 : 400, color: mi === viewMonth ? PRIMARY : undefined }}\n >\n {mn}\n </button>\n ))}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Year */}\n <div className=\"relative\">\n <button onClick={() => { setYearMenu(o => !o); setMonthMenu(false); }}\n className=\"flex items-center gap-1 px-2 py-1 rounded-lg text-[14px] font-semibold text-gray-900 hover:bg-gray-100 transition-colors\">\n {viewYear}\n <ChevronDown className=\"w-3 h-3 text-gray-400\" />\n </button>\n <AnimatePresence>\n {yearMenu && (\n <motion.div\n initial={{ opacity: 0, y: -4 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -4 }}\n transition={{ duration: 0.12 }}\n className=\"absolute top-full left-0 z-[10000] mt-1 max-h-[200px] min-w-[90px] overflow-y-auto rounded-xl border border-border bg-popover py-1 shadow-lg\"\n >\n {years.map(yr => (\n <button key={yr} onClick={() => { setViewYear(yr); setYearMenu(false); }}\n className=\"w-full px-3 py-2 text-left text-[13px] text-foreground transition-colors hover:bg-muted\"\n style={{ fontWeight: yr === viewYear ? 600 : 400, color: yr === viewYear ? PRIMARY : undefined }}\n >\n {yr}\n </button>\n ))}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n\n <button onClick={nextMonth}\n className=\"w-8 h-8 rounded-full flex items-center justify-center text-gray-500 hover:bg-gray-100 transition-colors\">\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Day headers — explicit grid: Tailwind grid-cols-7 can be dropped from CSS output for portalled nodes */}\n <div\n className=\"px-3 pb-1\"\n style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, minmax(0, 1fr))\" }}\n >\n {DAYS.map((d) => (\n <div key={d} className=\"py-1 text-center text-[11.5px] font-semibold text-muted-foreground\">\n {d}\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div\n className=\"gap-y-0.5 px-3 pb-4\"\n style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, minmax(0, 1fr))\" }}\n >\n {cells.map((cell, i) => {\n const selected = isSelected(cell);\n const tod = isToday(cell);\n const disabled = cell.current && isDisabled(cell.y, cell.m, cell.d);\n return (\n <button key={i} onClick={() => selectDay(cell)} disabled={disabled}\n className={cn(\n \"h-9 w-9 mx-auto rounded-full text-[13px] font-medium flex items-center justify-center transition-all\",\n selected && \"text-white font-semibold\",\n !selected && tod && \"font-semibold\",\n !selected && !tod && cell.current && !disabled && \"text-gray-800 hover:bg-gray-100\",\n !selected && !cell.current && \"text-gray-300 hover:bg-gray-50\",\n disabled && \"opacity-30 cursor-not-allowed\",\n )}\n style={selected ? { background: PRIMARY } : tod ? { background: `${PRIMARY}18`, color: PRIMARY } : {}}>\n {cell.d}\n </button>\n );\n })}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n\n return (\n <div className={cn(\"relative\", className)}>\n {label && <p className=\"mb-2 text-sm font-medium text-foreground\">{label}</p>}\n\n {/* Trigger */}\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => open ? setOpen(false) : openPanel()}\n className={cn(\n \"flex h-12 min-h-12 w-full items-center gap-3 rounded-xl border border-border bg-card px-5 text-left text-[15px] shadow-sm transition-colors\",\n open ? \"border-ring ring-2 ring-ring/20\" : \"hover:border-muted-foreground/45\",\n )}\n >\n <CalendarDays className=\"size-[1.125rem] shrink-0 text-muted-foreground\" />\n <span className={cn(\"flex-1\", value ? \"text-foreground\" : \"text-muted-foreground\")}>\n {value ? displayDate(value) : placeholder}\n </span>\n <ChevronDown className={cn(\"size-[1.125rem] shrink-0 text-muted-foreground transition-transform\", open && \"rotate-180\")} />\n </button>\n\n {/* Portal */}\n {mounted && createPortal(panel, document.body)}\n </div>\n );\n}\n","\"use client\"\n\n/**\n * Chart primitives from shadcn/ui (Recharts composition layer).\n * @see https://ui.shadcn.com/docs/components/radix/chart\n */\n\nimport * as React from \"react\"\nimport * as RechartsPrimitive from \"recharts\"\nimport type { TooltipValueType } from \"recharts\"\n\nimport { cn } from \"./utils\"\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const\n\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const\ntype TooltipNameType = number | string\n\nexport type ChartConfig = Record<\n string,\n {\n label?: React.ReactNode\n icon?: React.ComponentType\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n )\n>\n\ntype ChartContextProps = {\n config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nfunction useChart() {\n const context = React.useContext(ChartContext)\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\")\n }\n\n return context\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n initialDimension = INITIAL_DIMENSION,\n ...props\n}: React.ComponentProps<\"div\"> & {\n config: ChartConfig\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >[\"children\"]\n initialDimension?: {\n width: number\n height: number\n }\n}) {\n const uniqueId = React.useId()\n const chartId = `chart-${id ?? uniqueId.replace(/:/g, \"\")}`\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer\n initialDimension={initialDimension}\n >\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n )\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme ?? config.color\n )\n\n if (!colorConfig.length) {\n return null\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ??\n itemConfig.color\n return color ? ` --color-${key}: ${color};` : null\n })\n .join(\"\\n\")}\n}\n`\n )\n .join(\"\\n\"),\n }}\n />\n )\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<\"div\"> & {\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: \"line\" | \"dot\" | \"dashed\"\n nameKey?: string\n labelKey?: string\n } & Omit<\n RechartsPrimitive.DefaultTooltipContentProps<\n TooltipValueType,\n TooltipNameType\n >,\n \"accessibilityLayer\"\n >) {\n const { config } = useChart()\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null\n }\n\n const [item] = payload\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const value =\n !labelKey && typeof label === \"string\"\n ? (config[label]?.label ?? label)\n : itemConfig?.label\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n )\n }\n\n if (!value) {\n return null\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ])\n\n if (!active || !payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\"\n\n return (\n <div\n className={cn(\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey ?? item.name ?? item.dataKey ?? \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const indicatorColor = color ?? item.payload?.fill ?? item.color\n\n return (\n <div\n key={index}\n className={cn(\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\n indicator === \"dot\" && \"items-center\"\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n }\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\"\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label ?? item.name}\n </span>\n </div>\n {item.value != null && (\n <span className=\"font-mono font-medium text-foreground tabular-nums\">\n {typeof item.value === \"number\"\n ? item.value.toLocaleString()\n : String(item.value)}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = \"bottom\",\n nameKey,\n}: React.ComponentProps<\"div\"> & {\n hideIcon?: boolean\n nameKey?: string\n} & RechartsPrimitive.DefaultLegendContentProps) {\n const { config } = useChart()\n\n if (!payload?.length) {\n return null\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className\n )}\n >\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey ?? item.dataKey ?? \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n return (\n <div\n key={index}\n className={cn(\n \"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\"\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n )\n })}\n </div>\n )\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined\n\n let configLabelKey: string = key\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key]\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Line,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport {\n ArrowDownRight,\n ArrowUpRight,\n ExternalLink,\n Info,\n Minus,\n} from \"lucide-react\";\nimport { cn } from \"./utils\";\nimport { Button } from \"./button\";\nimport { Separator } from \"./separator\";\n\nconst gridStroke = \"color-mix(in srgb, var(--border) 65%, transparent)\";\nconst tickFill = \"var(--muted-foreground)\";\n\n/** ─── KPI + sparkline (dashboard stat tiles) ─────────────────────────── */\n\nexport type MetricSparklinePoint = { x: string | number; y: number };\n\nexport type MetricSparklineCardProps = {\n title: string;\n icon?: React.ReactNode;\n value: React.ReactNode;\n /** e.g. \"+8.4% vs last month\" */\n trend?: { direction: \"up\" | \"down\" | \"flat\"; label: string };\n data: MetricSparklinePoint[];\n /** Stroke / gradient accent (CSS color) */\n accentColor?: string;\n className?: string;\n onInfoClick?: () => void;\n};\n\nexport function MetricSparklineCard({\n title,\n icon,\n value,\n trend,\n data,\n accentColor = \"var(--chart-1)\",\n className,\n onInfoClick,\n}: MetricSparklineCardProps) {\n const gid = React.useId().replace(/:/g, \"\");\n const chartData = data.map((d) => ({ ...d, y: d.y }));\n\n const trendCls =\n trend?.direction === \"up\"\n ? \"text-emerald-600 dark:text-emerald-400\"\n : trend?.direction === \"down\"\n ? \"text-red-600 dark:text-red-400\"\n : \"text-muted-foreground\";\n\n const TrendIcon =\n trend?.direction === \"up\" ? ArrowUpRight : trend?.direction === \"down\" ? ArrowDownRight : Minus;\n\n return (\n <div\n className={cn(\n \"relative overflow-hidden rounded-xl border border-border bg-card p-5 text-card-foreground shadow-sm\",\n className\n )}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {icon ? <span className=\"flex shrink-0 text-muted-foreground [&_svg]:size-4\">{icon}</span> : null}\n <span className=\"truncate text-sm font-semibold text-foreground\">{title}</span>\n </div>\n {onInfoClick ? (\n <button\n type=\"button\"\n onClick={onInfoClick}\n className=\"shrink-0 rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n aria-label=\"More info\"\n >\n <Info className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n\n <div className=\"mt-3 text-2xl font-semibold tabular-nums tracking-tight text-foreground\">{value}</div>\n\n <div className=\"pointer-events-none absolute bottom-3 right-3 h-14 w-[46%] max-w-[9rem] opacity-95\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={chartData} margin={{ top: 4, right: 0, left: 0, bottom: 0 }}>\n <defs>\n <linearGradient id={gid} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={accentColor} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={accentColor} stopOpacity={0} />\n </linearGradient>\n </defs>\n <Area\n type=\"monotone\"\n dataKey=\"y\"\n stroke={accentColor}\n strokeWidth={2}\n fill={`url(#${gid})`}\n isAnimationActive={false}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n\n {trend ? (\n <div className={cn(\"mt-10 flex items-center gap-1 text-xs font-medium\", trendCls)}>\n <TrendIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span>{trend.label}</span>\n </div>\n ) : (\n <div className=\"mt-10\" />\n )}\n </div>\n );\n}\n\n/** ─── Hero area + optional compare line + tabs + footer ──────────────── */\n\nexport type DashboardAreaChartPoint = Record<string, string | number>;\n\nexport type DashboardAreaChartTemplateProps = {\n title: string;\n tabs: { id: string; label: string }[];\n activeTabId: string;\n onTabChange: (id: string) => void;\n headline: React.ReactNode;\n delta?: React.ReactNode;\n data: DashboardAreaChartPoint[];\n xKey: string;\n areaKey: string;\n compareLineKey?: string;\n height?: number;\n formatYAxis?: (v: number) => string;\n footer?: React.ReactNode;\n className?: string;\n};\n\nexport function DashboardAreaChartTemplate({\n title,\n tabs,\n activeTabId,\n onTabChange,\n headline,\n delta,\n data,\n xKey,\n areaKey,\n compareLineKey,\n height = 220,\n formatYAxis = (v) =>\n v >= 1_000_000 ? `${(v / 1_000_000).toFixed(1)}L` : v >= 1_000 ? `${(v / 1_000).toFixed(0)}K` : `${v}`,\n footer,\n className,\n}: DashboardAreaChartTemplateProps) {\n const areaGid = React.useId().replace(/:/g, \"\");\n\n return (\n <div className={cn(\"rounded-xl border border-border bg-card text-card-foreground shadow-sm\", className)}>\n <div className=\"flex flex-col gap-4 border-b border-border px-5 pt-4 pb-3 sm:flex-row sm:items-start sm:justify-between\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n <div className=\"flex flex-wrap gap-1 rounded-lg border border-border bg-muted/30 p-0.5\">\n {tabs.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n onClick={() => onTabChange(t.id)}\n className={cn(\n \"rounded-md px-2.5 py-1 text-[11px] font-medium transition-colors\",\n activeTabId === t.id\n ? \"bg-card text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n {t.label}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"px-5 pt-4\">\n <div className=\"text-2xl font-semibold tabular-nums tracking-tight text-foreground\">{headline}</div>\n {delta ? <div className=\"mt-1 text-sm\">{delta}</div> : null}\n </div>\n\n <div className=\"px-3 pb-2 pt-2\" style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={data} margin={{ top: 8, right: 12, left: 0, bottom: 0 }}>\n <defs>\n <linearGradient id={areaGid} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"var(--chart-1)\" stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor=\"var(--chart-1)\" stopOpacity={0.02} />\n </linearGradient>\n </defs>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} vertical={false} />\n <XAxis\n dataKey={xKey}\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 10, fill: tickFill }}\n interval=\"preserveStartEnd\"\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 10, fill: tickFill }}\n tickFormatter={formatYAxis}\n width={44}\n />\n <Tooltip\n contentStyle={{\n borderRadius: 10,\n border: \"1px solid var(--border)\",\n fontSize: 12,\n background: \"var(--popover)\",\n color: \"var(--popover-foreground)\",\n }}\n />\n <Area\n type=\"monotone\"\n dataKey={areaKey}\n stroke=\"var(--chart-1)\"\n strokeWidth={2}\n fill={`url(#${areaGid})`}\n />\n {compareLineKey ? (\n <Line\n type=\"monotone\"\n dataKey={compareLineKey}\n stroke=\"var(--muted-foreground)\"\n strokeWidth={1.5}\n strokeDasharray=\"4 4\"\n dot={false}\n />\n ) : null}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n\n {footer ? (\n <>\n <Separator />\n <div className=\"px-5 py-3\">{footer}</div>\n </>\n ) : null}\n </div>\n );\n}\n\n/** ─── Grouped vertical bars + legend (e.g. volume vs settled) ───────── */\n\nexport type GroupedBarSeries = { key: string; label: string; color: string };\n\nexport type GroupedBarChartTemplateProps = {\n title: string;\n subtitle?: string;\n data: DashboardAreaChartPoint[];\n xKey: string;\n series: GroupedBarSeries[];\n height?: number;\n formatYAxis?: (v: number) => string;\n className?: string;\n};\n\nexport function GroupedBarChartTemplate({\n title,\n subtitle,\n data,\n xKey,\n series,\n height = 200,\n formatYAxis = (v) =>\n v >= 1_000_000 ? `${(v / 1_000_000).toFixed(1)}M` : v >= 1_000 ? `${(v / 1_000).toFixed(0)}K` : `${v}`,\n className,\n}: GroupedBarChartTemplateProps) {\n return (\n <div className={cn(\"rounded-xl border border-border bg-card px-5 pt-4 pb-3 text-card-foreground shadow-sm\", className)}>\n <div className=\"mb-3 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {subtitle ? <p className=\"mt-0.5 text-xs text-muted-foreground\">{subtitle}</p> : null}\n </div>\n <div className=\"flex flex-wrap items-center gap-4\">\n {series.map((s) => (\n <div key={s.key} className=\"flex items-center gap-1.5\">\n <div className=\"size-2.5 rounded-sm\" style={{ background: s.color }} />\n <span className=\"text-[11px] font-medium text-muted-foreground\">{s.label}</span>\n </div>\n ))}\n </div>\n </div>\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={data} barCategoryGap=\"22%\" barGap={4}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} vertical={false} />\n <XAxis dataKey={xKey} axisLine={false} tickLine={false} tick={{ fontSize: 11, fill: tickFill }} />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 11, fill: tickFill }}\n tickFormatter={formatYAxis}\n width={40}\n />\n <Tooltip\n contentStyle={{\n borderRadius: 10,\n border: \"1px solid var(--border)\",\n fontSize: 12,\n background: \"var(--popover)\",\n }}\n />\n {series.map((s) => (\n <Bar key={s.key} dataKey={s.key} name={s.label} fill={s.color} radius={[5, 5, 0, 0]} maxBarSize={36} />\n ))}\n </BarChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\n/** ─── Ranked rows with horizontal bar (country / state insights) ────── */\n\nexport type RankedBarItem = {\n id: string;\n leading?: React.ReactNode;\n label: string;\n value: string;\n /** 0–100 width of the filled bar */\n percent: number;\n};\n\nexport type RankedBarListTemplateProps = {\n title: string;\n subtitle?: string;\n headerRight?: React.ReactNode;\n items: RankedBarItem[];\n /** CSS colors for bar gradient */\n barFrom?: string;\n barTo?: string;\n className?: string;\n};\n\nexport function RankedBarListTemplate({\n title,\n subtitle,\n headerRight,\n items,\n barFrom = \"var(--chart-1)\",\n barTo = \"var(--chart-3)\",\n className,\n}: RankedBarListTemplateProps) {\n return (\n <div className={cn(\"rounded-xl border border-border bg-card p-5 text-card-foreground shadow-sm\", className)}>\n <div className=\"mb-4 flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {subtitle ? <p className=\"mt-0.5 text-xs text-muted-foreground\">{subtitle}</p> : null}\n </div>\n {headerRight ? <div className=\"shrink-0\">{headerRight}</div> : null}\n </div>\n <ul className=\"space-y-3\">\n {items.map((row) => (\n <li key={row.id} className=\"flex items-center gap-3 text-sm\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n {row.leading ? <span className=\"shrink-0 text-muted-foreground\">{row.leading}</span> : null}\n <span className=\"truncate font-medium text-foreground\">{row.label}</span>\n </div>\n <div className=\"relative hidden h-2 w-[min(40%,9rem)] overflow-hidden rounded-full bg-muted sm:block\">\n <div\n className=\"absolute inset-y-0 left-0 rounded-full\"\n style={{\n width: `${Math.min(100, Math.max(0, row.percent))}%`,\n background: `linear-gradient(90deg, ${barFrom}, ${barTo})`,\n }}\n />\n </div>\n <span className=\"w-14 shrink-0 text-right text-xs font-semibold tabular-nums text-foreground\">\n {row.value}\n </span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n/** ─── Vertical category bars (e.g. T+N settlement mix) ──────────────── */\n\nexport type CategoryBarPoint = { category: string; value: number };\n\nexport type CategoryBarChartTemplateProps = {\n title: string;\n subtitle?: string;\n data: CategoryBarPoint[];\n valueLabel?: string;\n barColor?: string;\n height?: number;\n className?: string;\n};\n\nexport function CategoryBarChartTemplate({\n title,\n subtitle,\n data,\n valueLabel = \"Share\",\n barColor = \"var(--chart-1)\",\n height = 200,\n className,\n}: CategoryBarChartTemplateProps) {\n const chartData = data.map((d) => ({ name: d.category, v: d.value }));\n\n return (\n <div className={cn(\"rounded-xl border border-border bg-card px-5 pt-4 pb-3 text-card-foreground shadow-sm\", className)}>\n <div className=\"mb-3\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {subtitle ? <p className=\"mt-0.5 text-xs text-muted-foreground\">{subtitle}</p> : null}\n </div>\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={chartData} barCategoryGap=\"28%\">\n <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} vertical={false} />\n <XAxis dataKey=\"name\" axisLine={false} tickLine={false} tick={{ fontSize: 11, fill: tickFill }} />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 11, fill: tickFill }}\n tickFormatter={(v) => `${v}%`}\n domain={[0, \"dataMax + 5\"]}\n width={36}\n />\n <Tooltip\n formatter={(value) => [`${value ?? 0}%`, valueLabel]}\n contentStyle={{\n borderRadius: 10,\n border: \"1px solid var(--border)\",\n fontSize: 12,\n background: \"var(--popover)\",\n }}\n />\n <Bar dataKey=\"v\" fill={barColor} radius={[6, 6, 0, 0]} maxBarSize={48} />\n </BarChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\n/** ─── Mini sparkline + stat row (success / failed / avg) ────────────── */\n\nexport type MiniSparklinePoint = { x: string | number; y: number; compare?: number };\n\nexport type MiniSparklineStat = { label: string; value: string; dotClassName?: string };\n\nexport type MiniSparklineChartCardProps = {\n title: string;\n value: React.ReactNode;\n data: MiniSparklinePoint[];\n accentColor?: string;\n stats: MiniSparklineStat[];\n height?: number;\n className?: string;\n};\n\nexport function MiniSparklineChartCard({\n title,\n value,\n data,\n accentColor = \"var(--chart-4)\",\n height = 100,\n stats,\n className,\n}: MiniSparklineChartCardProps) {\n const gid = React.useId().replace(/:/g, \"\");\n const hasCompare = data.some((d) => d.compare != null);\n\n return (\n <div className={cn(\"rounded-xl border border-border bg-card p-5 text-card-foreground shadow-sm\", className)}>\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n <div className=\"mt-2 text-2xl font-semibold tabular-nums\">{value}</div>\n <div className=\"mt-2\" style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={data} margin={{ top: 4, right: 8, left: 0, bottom: 0 }}>\n <defs>\n <linearGradient id={gid} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={accentColor} stopOpacity={0.3} />\n <stop offset=\"100%\" stopColor={accentColor} stopOpacity={0} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"x\" hide />\n <YAxis hide domain={[\"dataMin - 1\", \"dataMax + 1\"]} />\n <Area type=\"monotone\" dataKey=\"y\" stroke={accentColor} strokeWidth={2} fill={`url(#${gid})`} />\n {hasCompare ? (\n <Line\n type=\"monotone\"\n dataKey=\"compare\"\n stroke=\"var(--muted-foreground)\"\n strokeWidth={1.5}\n strokeDasharray=\"4 4\"\n dot={false}\n connectNulls\n />\n ) : null}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n <div className=\"mt-3 flex flex-wrap gap-x-4 gap-y-2 border-t border-border pt-3 text-[11px]\">\n {stats.map((s) => (\n <div key={s.label} className=\"flex items-center gap-1.5\">\n {s.dotClassName ? <span className={cn(\"size-1.5 rounded-full\", s.dotClassName)} /> : null}\n <span className=\"text-muted-foreground\">{s.label}</span>\n <span className=\"font-semibold tabular-nums text-foreground\">{s.value}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\n/** ─── “Needs attention” list with actions ───────────────────────────── */\n\nexport type AttentionListItem = {\n id: string;\n title: string;\n value: string;\n valueTone?: \"default\" | \"warning\" | \"danger\";\n meta?: string;\n actionLabel: string;\n onAction?: () => void;\n};\n\nexport type AttentionListTemplateProps = {\n title: string;\n items: AttentionListItem[];\n className?: string;\n};\n\nconst toneCls = {\n default: \"text-foreground\",\n warning: \"text-amber-600 dark:text-amber-400\",\n danger: \"text-red-600 dark:text-red-400\",\n} as const;\n\nexport function AttentionListTemplate({ title, items, className }: AttentionListTemplateProps) {\n return (\n <div className={cn(\"rounded-xl border border-border bg-card p-5 text-card-foreground shadow-sm\", className)}>\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n <ul className=\"mt-4 space-y-4\">\n {items.map((item) => (\n <li\n key={item.id}\n className=\"flex flex-col gap-3 border-b border-border/60 pb-4 last:border-0 last:pb-0 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"min-w-0 space-y-0.5\">\n <p className=\"text-sm font-semibold text-foreground\">{item.title}</p>\n <p className={cn(\"text-lg font-semibold tabular-nums\", toneCls[item.valueTone ?? \"default\"])}>\n {item.value}\n </p>\n {item.meta ? <p className=\"text-xs text-muted-foreground\">{item.meta}</p> : null}\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"md\"\n className=\"shrink-0 gap-1.5\"\n onClick={item.onAction}\n >\n {item.actionLabel}\n <ExternalLink className=\"size-3.5 opacity-70\" aria-hidden />\n </Button>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTheme } from \"next-themes\";\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\";\nimport { useEffect, useState } from \"react\";\n\n/** Drop-in toast host; pair with `toast` from `sonner`. Resolves theme via next-themes when mounted. */\nexport function Toaster({ theme, ...props }: ToasterProps) {\n const { resolvedTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const resolved =\n theme ?? (mounted && resolvedTheme === \"dark\" ? \"dark\" : \"light\");\n\n return (\n <Sonner\n theme={resolved}\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast:\n \"bg-[var(--popover)] text-[var(--popover-foreground)] border-[var(--border)] shadow-lg rounded-[10px] text-[13px]\",\n description: \"text-[var(--muted-foreground)]\",\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from \"sonner\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check, Pencil, X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface InlineEditProps {\n value: string;\n onConfirm: (val: string) => void;\n placeholder?: string;\n multiline?: boolean;\n disabled?: boolean;\n showButtons?: boolean;\n readClassName?: string;\n inputClassName?: string;\n}\n\nconst InlineEdit = React.forwardRef<HTMLDivElement, InlineEditProps>(\n (\n {\n value,\n onConfirm,\n placeholder = \"Click to edit…\",\n multiline = false,\n disabled = false,\n showButtons = false,\n readClassName,\n inputClassName,\n },\n ref\n ) => {\n const [editing, setEditing] = React.useState(false);\n const [draft, setDraft] = React.useState(value);\n const [hovered, setHovered] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement & HTMLTextAreaElement>(null);\n\n React.useEffect(() => {\n if (!editing) setDraft(value);\n }, [value, editing]);\n\n React.useEffect(() => {\n if (editing) {\n inputRef.current?.focus();\n if (inputRef.current) {\n const el = inputRef.current;\n const len = el.value.length;\n el.setSelectionRange(len, len);\n }\n }\n }, [editing]);\n\n const confirm = React.useCallback(() => {\n setEditing(false);\n if (draft !== value) onConfirm(draft);\n }, [draft, value, onConfirm]);\n\n const cancel = React.useCallback(() => {\n setEditing(false);\n setDraft(value);\n }, [value]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !multiline) {\n e.preventDefault();\n confirm();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n cancel();\n }\n },\n [confirm, cancel, multiline]\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent) => {\n // If showButtons, don't auto-confirm on blur unless focus leaves the whole group\n if (showButtons) {\n const related = e.relatedTarget as Node | null;\n const container = (e.currentTarget as HTMLElement).closest(\n \"[data-inline-edit]\"\n );\n if (container && related && container.contains(related)) return;\n }\n confirm();\n },\n [confirm, showButtons]\n );\n\n const startEditing = () => {\n if (disabled) return;\n setEditing(true);\n };\n\n const sharedInputClass = cn(\n \"w-full rounded-md border border-border bg-card px-2 py-1 text-[15px] leading-tight text-foreground shadow-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n inputClassName\n );\n\n return (\n <div ref={ref} data-inline-edit=\"\" className=\"relative inline-flex flex-col gap-1 max-w-full\">\n {editing ? (\n <>\n {multiline ? (\n <textarea\n ref={inputRef as React.Ref<HTMLTextAreaElement>}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n rows={3}\n className={cn(sharedInputClass, \"resize-none leading-relaxed py-1.5\")}\n />\n ) : (\n <input\n ref={inputRef as React.Ref<HTMLInputElement>}\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n className={sharedInputClass}\n />\n )}\n\n {showButtons && (\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n confirm();\n }}\n className={cn(\n \"inline-flex items-center justify-center rounded-md p-1\",\n \"text-emerald-600 hover:bg-emerald-50 dark:hover:bg-emerald-950/40\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n )}\n aria-label=\"Confirm\"\n >\n <Check className=\"size-3.5\" />\n </button>\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n cancel();\n }}\n className={cn(\n \"inline-flex items-center justify-center rounded-md p-1\",\n \"text-destructive hover:bg-destructive/10\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n )}\n aria-label=\"Cancel\"\n >\n <X className=\"size-3.5\" />\n </button>\n </div>\n )}\n </>\n ) : (\n <span\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={value || placeholder}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={startEditing}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n startEditing();\n }\n }}\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-md px-2 py-1 text-[15px] leading-tight\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n !disabled && \"hover:bg-muted cursor-text\",\n disabled && \"cursor-not-allowed opacity-50\",\n readClassName\n )}\n >\n <span className={cn(!value && \"text-muted-foreground\")}>\n {value || placeholder}\n </span>\n {!disabled && (\n <Pencil\n className={cn(\n \"size-3.5 shrink-0 text-muted-foreground transition-opacity duration-pg-fast ease-pg-standard\",\n hovered ? \"opacity-100\" : \"opacity-0\"\n )}\n aria-hidden\n />\n )}\n </span>\n )}\n </div>\n );\n }\n);\n\nInlineEdit.displayName = \"InlineEdit\";\n\nexport { InlineEdit };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface InlineDialogProps\n extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Root> {}\n\nexport interface InlineDialogContentProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>,\n \"side\" | \"sideOffset\"\n > {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n /** Hide the built-in close button */\n hideClose?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// InlineDialog (Popover root)\n// ---------------------------------------------------------------------------\n\nconst InlineDialog = PopoverPrimitive.Root;\nInlineDialog.displayName = \"InlineDialog\";\n\n// ---------------------------------------------------------------------------\n// InlineDialogTrigger\n// ---------------------------------------------------------------------------\n\nconst InlineDialogTrigger = PopoverPrimitive.Trigger;\nInlineDialogTrigger.displayName = \"InlineDialogTrigger\";\n\n// ---------------------------------------------------------------------------\n// Arrow positioning helpers\n// ---------------------------------------------------------------------------\n\ntype ArrowSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\n/**\n * Returns Tailwind classes that position the 8×8 arrow square on the correct\n * edge of the floating card and rotate it so the corner points at the trigger.\n */\nfunction getArrowClasses(side: ArrowSide): string {\n const base =\n \"absolute size-2 bg-card border border-border pointer-events-none\";\n\n switch (side) {\n case \"top\":\n // Arrow appears on the bottom edge of the card (card is above trigger)\n return cn(\n base,\n \"bottom-0 left-1/2 -translate-x-1/2 translate-y-1/2 rotate-45\",\n \"border-t-0 border-l-0\"\n );\n case \"bottom\":\n // Arrow appears on the top edge of the card (card is below trigger)\n return cn(\n base,\n \"top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 rotate-45\",\n \"border-b-0 border-r-0\"\n );\n case \"left\":\n // Arrow appears on the right edge of the card (card is left of trigger)\n return cn(\n base,\n \"right-0 top-1/2 -translate-y-1/2 translate-x-1/2 rotate-45\",\n \"border-t-0 border-l-0\"\n );\n case \"right\":\n // Arrow appears on the left edge of the card (card is right of trigger)\n return cn(\n base,\n \"left-0 top-1/2 -translate-y-1/2 -translate-x-1/2 rotate-45\",\n \"border-b-0 border-r-0\"\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// InlineDialogContent\n// ---------------------------------------------------------------------------\n\nconst InlineDialogContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n InlineDialogContentProps\n>(\n (\n {\n className,\n side = \"bottom\",\n sideOffset = 8,\n hideClose = false,\n children,\n ...props\n },\n ref\n ) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n side={side}\n sideOffset={sideOffset}\n className={cn(\n // Base card\n \"relative z-[120] max-w-xs overflow-visible\",\n \"rounded-xl border border-border bg-card p-4 text-foreground shadow-lg\",\n // Animation\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0\",\n \"transition-opacity duration-pg-fast ease-pg-standard\",\n \"outline-none\",\n className\n )}\n {...props}\n >\n {/* Arrow pointer */}\n <span className={getArrowClasses(side)} aria-hidden=\"true\" />\n\n {/* Close button */}\n {!hideClose && (\n <PopoverPrimitive.Close\n className={cn(\n \"absolute right-2 top-2 z-10\",\n \"inline-flex size-6 items-center justify-center rounded-md\",\n \"text-muted-foreground hover:text-foreground\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\"\n )}\n aria-label=\"Close\"\n >\n <X className=\"size-3.5\" />\n </PopoverPrimitive.Close>\n )}\n\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n )\n);\nInlineDialogContent.displayName = \"InlineDialogContent\";\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport { InlineDialog, InlineDialogTrigger, InlineDialogContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Info, CheckCircle2, AlertTriangle, XCircle, X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type FlagVariant = \"info\" | \"success\" | \"warning\" | \"error\";\nexport type FlagGroupPosition = \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\nexport interface FlagAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface FlagProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Heading text shown in bold */\n title: string;\n /** Optional body copy shown below the title */\n description?: string;\n /** Visual severity / colour */\n variant?: FlagVariant;\n /** Override the default lucide icon */\n icon?: React.ReactNode;\n /** Called when the close button is pressed */\n onDismiss?: () => void;\n /** Action buttons rendered below the content. Pass `false` to disable. */\n autoDismiss?: number | false;\n /** Optional CTA buttons */\n actions?: FlagAction[];\n}\n\nexport interface FlagGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Corner to anchor the stack */\n position?: FlagGroupPosition;\n}\n\nexport interface UseFlagGroupReturn {\n flags: Array<FlagProps & { id: string }>;\n addFlag: (flag: Omit<FlagProps, \"onDismiss\"> & { id?: string }) => string;\n removeFlag: (id: string) => void;\n clearAll: () => void;\n}\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst DEFAULT_AUTO_DISMISS = 8000;\n\nconst variantBorder: Record<FlagVariant, string> = {\n info: \"border-l-blue-500\",\n success: \"border-l-green-500\",\n warning: \"border-l-amber-500\",\n error: \"border-l-red-500\",\n};\n\nconst variantProgressBar: Record<FlagVariant, string> = {\n info: \"bg-blue-500\",\n success: \"bg-green-500\",\n warning: \"bg-amber-500\",\n error: \"bg-red-500\",\n};\n\nconst variantIconColor: Record<FlagVariant, string> = {\n info: \"text-blue-500\",\n success: \"text-green-500\",\n warning: \"text-amber-500\",\n error: \"text-red-500\",\n};\n\nconst defaultIcons: Record<FlagVariant, React.ElementType> = {\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n error: XCircle,\n};\n\n// ─── Flag ─────────────────────────────────────────────────────────────────────\n\nconst Flag = React.forwardRef<HTMLDivElement, FlagProps>(\n (\n {\n className,\n title,\n description,\n variant = \"info\",\n icon,\n onDismiss,\n autoDismiss = DEFAULT_AUTO_DISMISS,\n actions,\n ...props\n },\n ref\n ) => {\n const [progress, setProgress] = React.useState(100);\n const pausedRef = React.useRef(false);\n const startTimeRef = React.useRef<number | null>(null);\n const elapsedRef = React.useRef(0);\n const rafRef = React.useRef<number | null>(null);\n const duration = autoDismiss === false ? null : autoDismiss;\n\n React.useEffect(() => {\n if (duration === null) return;\n\n const tick = (now: number) => {\n if (pausedRef.current) {\n startTimeRef.current = now;\n rafRef.current = requestAnimationFrame(tick);\n return;\n }\n if (startTimeRef.current === null) startTimeRef.current = now;\n elapsedRef.current += now - startTimeRef.current;\n startTimeRef.current = now;\n\n const remaining = Math.max(0, duration - elapsedRef.current);\n const pct = (remaining / duration) * 100;\n setProgress(pct);\n\n if (remaining <= 0) {\n onDismiss?.();\n return;\n }\n rafRef.current = requestAnimationFrame(tick);\n };\n\n rafRef.current = requestAnimationFrame(tick);\n return () => {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [duration]);\n\n const handleMouseEnter = () => {\n pausedRef.current = true;\n };\n const handleMouseLeave = () => {\n pausedRef.current = false;\n startTimeRef.current = null;\n };\n\n const DefaultIcon = defaultIcons[variant];\n const renderedIcon = icon ?? <DefaultIcon className={cn(\"size-4 shrink-0 mt-0.5\", variantIconColor[variant])} aria-hidden />;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(\n \"relative w-80 overflow-hidden rounded-xl border border-border bg-card shadow-lg\",\n \"border-l-4\",\n variantBorder[variant],\n className\n )}\n {...props}\n >\n {/* Body */}\n <div className=\"flex gap-3 p-4 pr-10\">\n {renderedIcon}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-semibold text-card-foreground leading-snug\">{title}</p>\n {description && (\n <p className=\"mt-1 text-sm text-muted-foreground leading-relaxed\">{description}</p>\n )}\n {actions && actions.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {actions.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n onClick={action.onClick}\n className=\"text-xs font-medium text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded\"\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Close button */}\n {onDismiss && (\n <button\n type=\"button\"\n aria-label=\"Dismiss notification\"\n onClick={onDismiss}\n className=\"absolute top-3 right-3 rounded p-0.5 text-muted-foreground hover:text-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <X className=\"size-3.5\" aria-hidden />\n </button>\n )}\n\n {/* Auto-dismiss progress bar */}\n {duration !== null && (\n <div className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-muted\">\n <div\n className={cn(\"h-full transition-none\", variantProgressBar[variant])}\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n </div>\n );\n }\n);\nFlag.displayName = \"Flag\";\n\n// ─── FlagGroup ────────────────────────────────────────────────────────────────\n\nconst positionClasses: Record<FlagGroupPosition, string> = {\n \"bottom-right\": \"bottom-4 right-4 flex-col-reverse\",\n \"bottom-left\": \"bottom-4 left-4 flex-col-reverse\",\n \"top-right\": \"top-4 right-4 flex-col\",\n \"top-left\": \"top-4 left-4 flex-col\",\n};\n\nconst FlagGroup = React.forwardRef<HTMLDivElement, FlagGroupProps>(\n ({ className, position = \"bottom-right\", children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"fixed z-50 flex gap-2\",\n positionClasses[position],\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n);\nFlagGroup.displayName = \"FlagGroup\";\n\n// ─── useFlagGroup ─────────────────────────────────────────────────────────────\n\nfunction useFlagGroup(): UseFlagGroupReturn {\n const [flags, setFlags] = React.useState<Array<FlagProps & { id: string }>>([]);\n\n const removeFlag = React.useCallback((id: string) => {\n setFlags((prev) => prev.filter((f) => f.id !== id));\n }, []);\n\n const addFlag = React.useCallback(\n (flag: Omit<FlagProps, \"onDismiss\"> & { id?: string }): string => {\n const id = flag.id ?? `flag-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n setFlags((prev) => [...prev, { ...flag, id, onDismiss: () => removeFlag(id) }]);\n return id;\n },\n [removeFlag]\n );\n\n const clearAll = React.useCallback(() => {\n setFlags([]);\n }, []);\n\n return { flags, addFlag, removeFlag, clearAll };\n}\n\n// ─── Exports ──────────────────────────────────────────────────────────────────\n\nexport { Flag, FlagGroup, useFlagGroup };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Breakpoint type\n// ---------------------------------------------------------------------------\n\nexport type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/** Ordered list — index used for comparison */\nconst BREAKPOINT_ORDER: Breakpoint[] = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n\n/** Tailwind min-width values aligned with default config */\nconst BREAKPOINT_MIN_WIDTH: Record<Breakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};\n\nfunction bpIndex(bp: Breakpoint): number {\n return BREAKPOINT_ORDER.indexOf(bp);\n}\n\n// ---------------------------------------------------------------------------\n// Show\n// ---------------------------------------------------------------------------\n\nexport interface ShowProps extends React.HTMLAttributes<HTMLElement> {\n /** Render children at this breakpoint and above. */\n above?: Breakpoint;\n /** Render children strictly below this breakpoint. */\n below?: Breakpoint;\n /** HTML element to render. Defaults to \"div\". */\n as?: React.ElementType;\n /** Display value to restore when visible. Defaults to \"block\". */\n display?: \"block\" | \"flex\" | \"inline\" | \"inline-block\" | \"grid\" | \"inline-flex\";\n children?: React.ReactNode;\n}\n\nconst DISPLAY_ABOVE_CLASS: Record<\n Breakpoint,\n Record<ShowProps[\"display\"] & string, string>\n> = {\n sm: {\n block: \"sm:block\",\n flex: \"sm:flex\",\n inline: \"sm:inline\",\n \"inline-block\": \"sm:inline-block\",\n grid: \"sm:grid\",\n \"inline-flex\": \"sm:inline-flex\",\n },\n md: {\n block: \"md:block\",\n flex: \"md:flex\",\n inline: \"md:inline\",\n \"inline-block\": \"md:inline-block\",\n grid: \"md:grid\",\n \"inline-flex\": \"md:inline-flex\",\n },\n lg: {\n block: \"lg:block\",\n flex: \"lg:flex\",\n inline: \"lg:inline\",\n \"inline-block\": \"lg:inline-block\",\n grid: \"lg:grid\",\n \"inline-flex\": \"lg:inline-flex\",\n },\n xl: {\n block: \"xl:block\",\n flex: \"xl:flex\",\n inline: \"xl:inline\",\n \"inline-block\": \"xl:inline-block\",\n grid: \"xl:grid\",\n \"inline-flex\": \"xl:inline-flex\",\n },\n \"2xl\": {\n block: \"2xl:block\",\n flex: \"2xl:flex\",\n inline: \"2xl:inline\",\n \"inline-block\": \"2xl:inline-block\",\n grid: \"2xl:grid\",\n \"inline-flex\": \"2xl:inline-flex\",\n },\n};\n\n/** Tailwind class to hide at a breakpoint and above */\nconst HIDDEN_ABOVE_CLASS: Record<Breakpoint, string> = {\n sm: \"sm:hidden\",\n md: \"md:hidden\",\n lg: \"lg:hidden\",\n xl: \"xl:hidden\",\n \"2xl\": \"2xl:hidden\",\n};\n\nexport const Show = React.forwardRef<HTMLElement, ShowProps>(\n (\n {\n above,\n below,\n as: Tag = \"div\",\n display = \"block\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n let visibilityClass: string;\n\n if (above) {\n // hidden by default, become visible at `above` breakpoint\n visibilityClass = cn(\"hidden\", DISPLAY_ABOVE_CLASS[above][display]);\n } else if (below) {\n // visible by default, hidden at `below` breakpoint and above\n visibilityClass = HIDDEN_ABOVE_CLASS[below];\n } else {\n visibilityClass = \"\";\n }\n\n return (\n <Tag\n ref={ref}\n className={cn(visibilityClass, className)}\n {...props}\n >\n {children}\n </Tag>\n );\n }\n);\nShow.displayName = \"Show\";\n\n// ---------------------------------------------------------------------------\n// Hide\n// ---------------------------------------------------------------------------\n\nexport interface HideProps extends React.HTMLAttributes<HTMLElement> {\n /** Hide children at this breakpoint and above. */\n above?: Breakpoint;\n /** Hide children strictly below this breakpoint (i.e. visible at/above). */\n below?: Breakpoint;\n /** HTML element to render. Defaults to \"div\". */\n as?: React.ElementType;\n /** Display value to restore when visible. Defaults to \"block\". */\n display?: \"block\" | \"flex\" | \"inline\" | \"inline-block\" | \"grid\" | \"inline-flex\";\n children?: React.ReactNode;\n}\n\nexport const Hide = React.forwardRef<HTMLElement, HideProps>(\n (\n {\n above,\n below,\n as: Tag = \"div\",\n display = \"block\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n let visibilityClass: string;\n\n if (above) {\n // visible by default, hidden at `above` breakpoint and above\n visibilityClass = HIDDEN_ABOVE_CLASS[above];\n } else if (below) {\n // hidden by default (below breakpoint), visible at/above breakpoint — inverse of Show above\n visibilityClass = cn(\"hidden\", DISPLAY_ABOVE_CLASS[below][display]);\n } else {\n visibilityClass = \"\";\n }\n\n return (\n <Tag\n ref={ref}\n className={cn(visibilityClass, className)}\n {...props}\n >\n {children}\n </Tag>\n );\n }\n);\nHide.displayName = \"Hide\";\n\n// ---------------------------------------------------------------------------\n// useBreakpoint hook\n// ---------------------------------------------------------------------------\n\nfunction getActiveBreakpoint(): Breakpoint | null {\n if (typeof window === \"undefined\") return null;\n // Walk from largest to smallest — first match wins\n for (let i = BREAKPOINT_ORDER.length - 1; i >= 0; i--) {\n const bp = BREAKPOINT_ORDER[i];\n if (window.matchMedia(`(min-width: ${BREAKPOINT_MIN_WIDTH[bp]}px)`).matches) {\n return bp;\n }\n }\n return null;\n}\n\nexport interface UseBreakpointReturn {\n /** The currently active (highest matching) breakpoint, or null on SSR / xs viewport. */\n breakpoint: Breakpoint | null;\n /** Returns true when the viewport is at or above `bp`. */\n isAbove: (bp: Breakpoint) => boolean;\n /** Returns true when the viewport is strictly below `bp`. */\n isBelow: (bp: Breakpoint) => boolean;\n /** True when no breakpoint is active (viewport < 640 px). */\n isMobile: boolean;\n /** True when active breakpoint is md (768–1023 px). */\n isTablet: boolean;\n /** True when active breakpoint is lg or above (≥ 1024 px). */\n isDesktop: boolean;\n}\n\nexport function useBreakpoint(): UseBreakpointReturn {\n const [breakpoint, setBreakpoint] = React.useState<Breakpoint | null>(() =>\n getActiveBreakpoint()\n );\n\n React.useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n // Build one MediaQueryList per breakpoint and attach listeners\n const queries = BREAKPOINT_ORDER.map((bp) =>\n window.matchMedia(`(min-width: ${BREAKPOINT_MIN_WIDTH[bp]}px)`)\n );\n\n function handleChange() {\n setBreakpoint(getActiveBreakpoint());\n }\n\n queries.forEach((mql) => mql.addEventListener(\"change\", handleChange));\n // Sync once on mount (handles SSR hydration mismatch)\n handleChange();\n\n return () => {\n queries.forEach((mql) => mql.removeEventListener(\"change\", handleChange));\n };\n }, []);\n\n const isAbove = React.useCallback(\n (bp: Breakpoint): boolean => {\n if (breakpoint === null) return false;\n return bpIndex(breakpoint) >= bpIndex(bp);\n },\n [breakpoint]\n );\n\n const isBelow = React.useCallback(\n (bp: Breakpoint): boolean => {\n if (breakpoint === null) return true;\n return bpIndex(breakpoint) < bpIndex(bp);\n },\n [breakpoint]\n );\n\n return {\n breakpoint,\n isAbove,\n isBelow,\n isMobile: breakpoint === null,\n isTablet: breakpoint === \"md\",\n isDesktop: breakpoint !== null && bpIndex(breakpoint) >= bpIndex(\"lg\"),\n };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Check, ChevronDown, Search } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface Country {\n code: string;\n name: string;\n flag: string;\n dialCode: string;\n}\n\nexport const COUNTRIES: Country[] = [\n { code: \"US\", name: \"United States\", flag: \"🇺🇸\", dialCode: \"+1\" },\n { code: \"GB\", name: \"United Kingdom\", flag: \"🇬🇧\", dialCode: \"+44\" },\n { code: \"IN\", name: \"India\", flag: \"🇮🇳\", dialCode: \"+91\" },\n { code: \"AU\", name: \"Australia\", flag: \"🇦🇺\", dialCode: \"+61\" },\n { code: \"CA\", name: \"Canada\", flag: \"🇨🇦\", dialCode: \"+1\" },\n { code: \"DE\", name: \"Germany\", flag: \"🇩🇪\", dialCode: \"+49\" },\n { code: \"FR\", name: \"France\", flag: \"🇫🇷\", dialCode: \"+33\" },\n { code: \"JP\", name: \"Japan\", flag: \"🇯🇵\", dialCode: \"+81\" },\n { code: \"SG\", name: \"Singapore\", flag: \"🇸🇬\", dialCode: \"+65\" },\n { code: \"AE\", name: \"United Arab Emirates\", flag: \"🇦🇪\", dialCode: \"+971\" },\n { code: \"CN\", name: \"China\", flag: \"🇨🇳\", dialCode: \"+86\" },\n { code: \"BR\", name: \"Brazil\", flag: \"🇧🇷\", dialCode: \"+55\" },\n { code: \"MX\", name: \"Mexico\", flag: \"🇲🇽\", dialCode: \"+52\" },\n { code: \"KR\", name: \"South Korea\", flag: \"🇰🇷\", dialCode: \"+82\" },\n { code: \"IT\", name: \"Italy\", flag: \"🇮🇹\", dialCode: \"+39\" },\n { code: \"ES\", name: \"Spain\", flag: \"🇪🇸\", dialCode: \"+34\" },\n { code: \"NL\", name: \"Netherlands\", flag: \"🇳🇱\", dialCode: \"+31\" },\n { code: \"SE\", name: \"Sweden\", flag: \"🇸🇪\", dialCode: \"+46\" },\n { code: \"NO\", name: \"Norway\", flag: \"🇳🇴\", dialCode: \"+47\" },\n { code: \"DK\", name: \"Denmark\", flag: \"🇩🇰\", dialCode: \"+45\" },\n { code: \"FI\", name: \"Finland\", flag: \"🇫🇮\", dialCode: \"+358\" },\n { code: \"CH\", name: \"Switzerland\", flag: \"🇨🇭\", dialCode: \"+41\" },\n { code: \"NZ\", name: \"New Zealand\", flag: \"🇳🇿\", dialCode: \"+64\" },\n { code: \"ZA\", name: \"South Africa\", flag: \"🇿🇦\", dialCode: \"+27\" },\n { code: \"NG\", name: \"Nigeria\", flag: \"🇳🇬\", dialCode: \"+234\" },\n { code: \"EG\", name: \"Egypt\", flag: \"🇪🇬\", dialCode: \"+20\" },\n { code: \"PK\", name: \"Pakistan\", flag: \"🇵🇰\", dialCode: \"+92\" },\n { code: \"BD\", name: \"Bangladesh\", flag: \"🇧🇩\", dialCode: \"+880\" },\n { code: \"ID\", name: \"Indonesia\", flag: \"🇮🇩\", dialCode: \"+62\" },\n { code: \"TH\", name: \"Thailand\", flag: \"🇹🇭\", dialCode: \"+66\" },\n];\n\nexport interface CountrySelectProps {\n value?: string;\n onValueChange?: (code: string) => void;\n placeholder?: string;\n showDialCode?: boolean;\n disabled?: boolean;\n className?: string;\n}\n\nconst CountrySelect = React.forwardRef<HTMLButtonElement, CountrySelectProps>(\n (\n {\n value,\n onValueChange,\n placeholder = \"Select country\",\n showDialCode = false,\n disabled = false,\n className,\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n const selected = React.useMemo(\n () => COUNTRIES.find((c) => c.code === value),\n [value]\n );\n\n const filtered = React.useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return COUNTRIES;\n return COUNTRIES.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.code.toLowerCase().includes(q) ||\n c.dialCode.includes(q)\n );\n }, [search]);\n\n React.useEffect(() => {\n if (open) {\n // Delay focus until popover has mounted\n const id = setTimeout(() => searchRef.current?.focus(), 0);\n return () => clearTimeout(id);\n } else {\n setSearch(\"\");\n }\n }, [open]);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={cn(\n \"flex h-11 min-h-11 w-full items-center justify-between gap-2.5 rounded-lg border border-border bg-card px-4 text-[15px] text-foreground shadow-sm\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n !selected && \"text-muted-foreground\",\n className\n )}\n >\n <span className=\"flex min-w-0 items-center gap-2.5\">\n {selected ? (\n <>\n <span className=\"text-base leading-none\" aria-hidden=\"true\">\n {selected.flag}\n </span>\n <span className=\"truncate\">{selected.name}</span>\n {showDialCode && (\n <span className=\"shrink-0 text-muted-foreground\">\n {selected.dialCode}\n </span>\n )}\n </>\n ) : (\n <span>{placeholder}</span>\n )}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-muted-foreground opacity-70 transition-transform duration-pg-fast ease-pg-standard\",\n open && \"rotate-180\"\n )}\n aria-hidden=\"true\"\n />\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={6}\n className={cn(\n \"z-[120] w-[var(--radix-popover-trigger-width)] min-w-[260px] rounded-xl border border-border bg-popover text-popover-foreground shadow-lg outline-none\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\"\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {/* Search */}\n <div className=\"flex items-center gap-2 border-b border-border px-3 py-2.5\">\n <Search className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search countries…\"\n className={cn(\n \"flex-1 bg-transparent text-[14px] text-foreground placeholder:text-muted-foreground\",\n \"focus-visible:outline-none\"\n )}\n aria-label=\"Search countries\"\n />\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch(\"\")}\n className=\"shrink-0 text-muted-foreground hover:text-foreground transition-colors duration-pg-fast ease-pg-standard\"\n aria-label=\"Clear search\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M10.5 3.5L3.5 10.5M3.5 3.5L10.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* List */}\n <div\n role=\"listbox\"\n aria-label=\"Countries\"\n className=\"max-h-64 overflow-y-auto p-1\"\n >\n {filtered.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No countries found\n </div>\n ) : (\n filtered.map((country) => {\n const isSelected = country.code === value;\n return (\n <button\n key={country.code}\n role=\"option\"\n aria-selected={isSelected}\n type=\"button\"\n onClick={() => {\n onValueChange?.(country.code);\n setOpen(false);\n }}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"hover:bg-muted\",\n isSelected && \"bg-muted/60\"\n )}\n >\n <span className=\"text-base leading-none\" aria-hidden=\"true\">\n {country.flag}\n </span>\n <span className=\"flex-1 truncate text-foreground\">\n {country.name}\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {country.dialCode}\n </span>\n {isSelected && (\n <Check\n className=\"h-3.5 w-3.5 shrink-0 text-primary\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n );\n })\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n }\n);\nCountrySelect.displayName = \"CountrySelect\";\n\nexport { CountrySelect };\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { Loader2 } from \"lucide-react\";\nimport { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n \"aria-label\": string;\n variant?: \"primary\" | \"secondary\" | \"ghost\" | \"outline\" | \"danger\";\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n isLoading?: boolean;\n rounded?: \"sm\" | \"md\" | \"lg\" | \"full\";\n}\n\nconst variantClasses: Record<NonNullable<IconButtonProps[\"variant\"]>, string> = {\n primary:\n \"bg-primary text-primary-foreground border border-primary shadow-sm hover:bg-[var(--primary-hover)]\",\n secondary:\n \"bg-muted text-foreground border border-border shadow-sm hover:bg-muted/85 dark:bg-muted/35 dark:text-foreground dark:border-border dark:hover:bg-muted/55\",\n ghost:\n \"bg-transparent text-foreground border border-transparent hover:bg-muted focus-visible:bg-muted/80 active:bg-muted/90\",\n outline:\n \"bg-card text-foreground border border-border shadow-sm hover:bg-muted\",\n danger:\n \"bg-red-600 text-white border border-red-600 shadow-sm hover:bg-red-700\",\n};\n\nconst sizeClasses: Record<NonNullable<IconButtonProps[\"size\"]>, string> = {\n xs: \"size-7 min-w-7\",\n sm: \"size-8 min-w-8\",\n md: \"size-9 min-w-9\",\n lg: \"size-10 min-w-10\",\n xl: \"size-11 min-w-11\",\n};\n\nconst iconSizeClasses: Record<NonNullable<IconButtonProps[\"size\"]>, string> = {\n xs: \"size-3.5\",\n sm: \"size-3.5\",\n md: \"size-4\",\n lg: \"size-[1.125rem]\",\n xl: \"size-5\",\n};\n\nconst roundedClasses: Record<NonNullable<IconButtonProps[\"rounded\"]>, string> = {\n sm: \"rounded-md\",\n md: \"rounded-lg\",\n lg: \"rounded-xl\",\n full: \"rounded-full\",\n};\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n rounded = \"lg\",\n className,\n disabled,\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n return (\n <button\n ref={ref}\n aria-label={ariaLabel}\n title={ariaLabel}\n disabled={disabled || isLoading}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center font-medium\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n variantClasses[variant],\n sizeClasses[size],\n roundedClasses[rounded],\n className\n )}\n {...props}\n >\n {isLoading ? (\n <Loader2 className={cn(\"animate-spin\", iconSizeClasses[size])} />\n ) : (\n children\n )}\n </button>\n );\n }\n);\nIconButton.displayName = \"IconButton\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Clock, ChevronDown, X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\n/* ─── Types ──────────────────────────────────────────────────────────────── */\n\nexport interface TimePickerProps {\n /** Controlled value in 24-hour \"HH:MM\" format. Pass \"\" for no selection. */\n value: string;\n /** Called with a new \"HH:MM\" string, or \"\" when cleared. */\n onValueChange: (value: string) => void;\n /** Show 12-hour (AM/PM) columns instead of 24-hour. Default: false. */\n use24Hour?: boolean;\n placeholder?: string;\n label?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/* ─── Helpers ────────────────────────────────────────────────────────────── */\n\nfunction pad(n: number) {\n return String(n).padStart(2, \"0\");\n}\n\nfunction parseHHMM(v: string): { h: number; m: number } | null {\n if (!v) return null;\n const parts = v.split(\":\");\n if (parts.length < 2) return null;\n const h = Number(parts[0]);\n const m = Number(parts[1]);\n if (isNaN(h) || isNaN(m)) return null;\n return { h, m };\n}\n\nfunction toHHMM(h: number, m: number) {\n return `${pad(h)}:${pad(m)}`;\n}\n\nfunction displayTime(value: string, use24Hour: boolean) {\n const p = parseHHMM(value);\n if (!p) return \"\";\n if (use24Hour) return `${pad(p.h)}:${pad(p.m)}`;\n const period = p.h < 12 ? \"AM\" : \"PM\";\n const displayH = p.h % 12 === 0 ? 12 : p.h % 12;\n return `${pad(displayH)}:${pad(p.m)} ${period}`;\n}\n\n/* ─── ScrollColumn ───────────────────────────────────────────────────────── */\n\nconst ITEM_H = 36; // px\nconst VISIBLE = 5; // items visible at once\nconst PAD = 2; // invisible padding rows above/below\n\ninterface ScrollColumnProps<T> {\n items: T[];\n selected: T;\n onSelect: (item: T) => void;\n renderItem: (item: T) => React.ReactNode;\n getKey: (item: T) => string | number;\n}\n\nfunction ScrollColumn<T>({\n items,\n selected,\n onSelect,\n renderItem,\n getKey,\n}: ScrollColumnProps<T>) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const debounceRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const programmaticRef = React.useRef(false);\n\n const selectedIndex = items.findIndex((item) => getKey(item) === getKey(selected));\n\n /* Scroll to selected item */\n const scrollToIndex = React.useCallback(\n (index: number, behavior: ScrollBehavior = \"smooth\") => {\n const el = containerRef.current;\n if (!el) return;\n programmaticRef.current = true;\n el.scrollTo({ top: index * ITEM_H, behavior });\n if (behavior === \"smooth\") {\n // Release flag after animation\n setTimeout(() => {\n programmaticRef.current = false;\n }, 350);\n } else {\n programmaticRef.current = false;\n }\n },\n []\n );\n\n /* Initial scroll (instant) */\n React.useEffect(() => {\n if (selectedIndex >= 0) scrollToIndex(selectedIndex, \"instant\");\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /* Scroll when selected changes from outside */\n React.useEffect(() => {\n if (selectedIndex >= 0) scrollToIndex(selectedIndex, \"smooth\");\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedIndex]);\n\n /* Snap on scroll end */\n function handleScroll() {\n if (programmaticRef.current) return;\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n const el = containerRef.current;\n if (!el) return;\n const index = Math.round(el.scrollTop / ITEM_H);\n const clamped = Math.max(0, Math.min(index, items.length - 1));\n onSelect(items[clamped]);\n scrollToIndex(clamped, \"smooth\");\n }, 80);\n }\n\n return (\n <div className=\"relative flex flex-col items-center\" style={{ width: 64 }}>\n {/* Highlight band */}\n <div\n className=\"pointer-events-none absolute left-0 right-0 rounded-lg bg-primary/10\"\n style={{\n top: PAD * ITEM_H,\n height: ITEM_H,\n zIndex: 1,\n }}\n />\n\n {/* Scroll container */}\n <div\n ref={containerRef}\n onScroll={handleScroll}\n className=\"relative z-10 overflow-y-scroll\"\n style={{\n height: VISIBLE * ITEM_H,\n scrollSnapType: \"y mandatory\",\n scrollbarWidth: \"none\",\n msOverflowStyle: \"none\",\n }}\n >\n {/* Top padding rows */}\n {Array.from({ length: PAD }).map((_, i) => (\n <div key={`pad-top-${i}`} style={{ height: ITEM_H }} />\n ))}\n\n {items.map((item) => {\n const isSelected = getKey(item) === getKey(selected);\n return (\n <div\n key={getKey(item)}\n onClick={() => {\n onSelect(item);\n scrollToIndex(items.findIndex((it) => getKey(it) === getKey(item)), \"smooth\");\n }}\n className={cn(\n \"flex cursor-pointer items-center justify-center text-[14px] font-medium transition-colors duration-150 select-none\",\n isSelected\n ? \"text-primary font-semibold\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n style={{\n height: ITEM_H,\n scrollSnapAlign: \"start\",\n }}\n >\n {renderItem(item)}\n </div>\n );\n })}\n\n {/* Bottom padding rows */}\n {Array.from({ length: PAD }).map((_, i) => (\n <div key={`pad-bot-${i}`} style={{ height: ITEM_H }} />\n ))}\n </div>\n </div>\n );\n}\n\n/* ─── TimePicker ─────────────────────────────────────────────────────────── */\n\nconst PANEL_W = 224;\nconst PANEL_H = 220;\n\nexport const TimePicker = React.forwardRef<HTMLButtonElement, TimePickerProps>(\n (\n {\n value,\n onValueChange,\n use24Hour = false,\n placeholder = \"Select time\",\n label,\n disabled = false,\n className,\n },\n ref\n ) => {\n const parsed = parseHHMM(value);\n\n /* ── Local column state (derived from value, kept in sync) ── */\n const [hour, setHour] = React.useState<number>(() => {\n if (!parsed) return use24Hour ? 0 : 12;\n if (use24Hour) return parsed.h;\n return parsed.h % 12 === 0 ? 12 : parsed.h % 12;\n });\n const [minute, setMinute] = React.useState<number>(() => parsed?.m ?? 0);\n const [period, setPeriod] = React.useState<\"AM\" | \"PM\">(() => {\n if (!parsed) return \"AM\";\n return parsed.h < 12 ? \"AM\" : \"PM\";\n });\n\n /* Sync columns when value prop changes */\n React.useEffect(() => {\n const p = parseHHMM(value);\n if (p) {\n setMinute(p.m);\n if (use24Hour) {\n setHour(p.h);\n } else {\n setHour(p.h % 12 === 0 ? 12 : p.h % 12);\n setPeriod(p.h < 12 ? \"AM\" : \"PM\");\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n /* ── Panel open/position ── */\n const [open, setOpen] = React.useState(false);\n const [panelPos, setPanelPos] = React.useState({ top: 0, left: 0 });\n const [mounted, setMounted] = React.useState(false);\n\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => { setMounted(true); }, []);\n\n function openPanel() {\n if (disabled) return;\n const el = triggerRef.current;\n if (!el) return;\n el.scrollIntoView({ block: \"nearest\", behavior: \"auto\" });\n requestAnimationFrame(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let left = rect.left;\n if (left + PANEL_W > vw - 8) left = vw - PANEL_W - 8;\n let top = rect.bottom + 6;\n if (top + PANEL_H > vh - 8) top = rect.top - PANEL_H - 6;\n setPanelPos({ top, left });\n setOpen(true);\n });\n }\n\n /* Close on outside click */\n React.useEffect(() => {\n if (!open) return;\n function handler(e: MouseEvent) {\n const inTrigger = triggerRef.current?.contains(e.target as Node);\n const inPanel = panelRef.current?.contains(e.target as Node);\n if (!inTrigger && !inPanel) setOpen(false);\n }\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open]);\n\n /* ── Emit value when columns change ── */\n function emitChange(h: number, m: number, p: \"AM\" | \"PM\") {\n let h24 = h;\n if (!use24Hour) {\n if (p === \"AM\") h24 = h === 12 ? 0 : h;\n else h24 = h === 12 ? 12 : h + 12;\n }\n onValueChange(toHHMM(h24, m));\n }\n\n function handleHourChange(h: number) {\n setHour(h);\n emitChange(h, minute, period);\n }\n function handleMinuteChange(m: number) {\n setMinute(m);\n emitChange(hour, m, period);\n }\n function handlePeriodChange(p: \"AM\" | \"PM\") {\n setPeriod(p);\n emitChange(hour, minute, p);\n }\n\n /* ── Column data ── */\n const hours = use24Hour\n ? Array.from({ length: 24 }, (_, i) => i)\n : Array.from({ length: 12 }, (_, i) => i + 1);\n\n const minutes = Array.from({ length: 60 }, (_, i) => i);\n\n /* ── Clear ── */\n function handleClear(e: React.MouseEvent) {\n e.stopPropagation();\n onValueChange(\"\");\n }\n\n /* ── Panel ── */\n const panel = open ? (\n <div\n ref={panelRef}\n className={cn(\n \"isolate rounded-xl border border-border bg-popover text-popover-foreground shadow-lg\",\n \"flex flex-col gap-0\"\n )}\n style={{\n position: \"fixed\",\n top: panelPos.top,\n left: panelPos.left,\n width: PANEL_W,\n zIndex: 20000,\n }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-1.5 border-b border-border px-4 py-2.5\">\n <Clock className=\"size-3.5 text-muted-foreground\" />\n <span className=\"text-[13px] font-medium text-muted-foreground\">\n {value ? displayTime(value, use24Hour) : \"—\"}\n </span>\n </div>\n\n {/* Column labels */}\n <div\n className=\"flex items-center justify-around px-2 pt-2 pb-0.5\"\n style={{ paddingLeft: 8, paddingRight: use24Hour ? 8 : 8 }}\n >\n <span className=\"w-16 text-center text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70\">\n Hr\n </span>\n <span className=\"w-16 text-center text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70\">\n Min\n </span>\n {!use24Hour && (\n <span className=\"w-16 text-center text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70\">\n AM/PM\n </span>\n )}\n </div>\n\n {/* Columns */}\n <div className=\"flex items-center justify-around px-2 pb-3\">\n <ScrollColumn\n items={hours}\n selected={hour}\n onSelect={handleHourChange}\n renderItem={(h) => pad(h)}\n getKey={(h) => h}\n />\n <div className=\"text-[18px] font-light text-muted-foreground/50 pb-0.5\">:</div>\n <ScrollColumn\n items={minutes}\n selected={minute}\n onSelect={handleMinuteChange}\n renderItem={(m) => pad(m)}\n getKey={(m) => m}\n />\n {!use24Hour && (\n <>\n <div className=\"w-px self-stretch bg-border mx-1\" />\n <ScrollColumn\n items={[\"AM\", \"PM\"] as const}\n selected={period}\n onSelect={handlePeriodChange}\n renderItem={(p) => p}\n getKey={(p) => p}\n />\n </>\n )}\n </div>\n </div>\n ) : null;\n\n /* ── Merge refs ── */\n function mergeRef(el: HTMLButtonElement | null) {\n (triggerRef as React.MutableRefObject<HTMLButtonElement | null>).current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = el;\n }\n\n return (\n <div className={cn(\"relative\", className)}>\n {label && (\n <p className=\"mb-1.5 text-sm font-medium text-foreground\">{label}</p>\n )}\n\n <button\n ref={mergeRef}\n type=\"button\"\n disabled={disabled}\n onClick={() => (open ? setOpen(false) : openPanel())}\n className={cn(\n \"flex h-11 min-h-11 w-full items-center gap-3 rounded-lg border border-border bg-card px-4 text-left text-[15px] shadow-sm\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n open && \"border-ring ring-2 ring-ring/35\",\n !open && !disabled && \"hover:border-muted-foreground/45\",\n disabled && \"cursor-not-allowed opacity-50\"\n )}\n >\n <Clock className=\"size-[1.0625rem] shrink-0 text-muted-foreground\" />\n <span\n className={cn(\n \"flex-1 truncate\",\n value ? \"text-foreground\" : \"text-muted-foreground\"\n )}\n >\n {value ? displayTime(value, use24Hour) : placeholder}\n </span>\n {value && !disabled ? (\n <X\n className=\"size-3.5 shrink-0 text-muted-foreground hover:text-foreground transition-colors duration-150\"\n onClick={handleClear}\n />\n ) : (\n <ChevronDown\n className={cn(\n \"size-[1.0625rem] shrink-0 text-muted-foreground transition-transform duration-150\",\n open && \"rotate-180\"\n )}\n />\n )}\n </button>\n\n {mounted && panel && createPortal(panel, document.body)}\n </div>\n );\n }\n);\n\nTimePicker.displayName = \"TimePicker\";\n","import * as React from \"react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Heading\n// ---------------------------------------------------------------------------\n\nexport interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n as?: React.ElementType;\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\n color?: \"default\" | \"subtle\" | \"primary\";\n}\n\nconst headingSizeClasses: Record<NonNullable<HeadingProps[\"size\"]>, string> = {\n xs: \"text-sm font-semibold\",\n sm: \"text-base font-semibold\",\n md: \"text-lg font-semibold\",\n lg: \"text-xl font-semibold\",\n xl: \"text-2xl font-semibold\",\n \"2xl\": \"text-3xl font-semibold tracking-tight\",\n \"3xl\": \"text-4xl font-semibold tracking-tight\",\n};\n\nconst headingColorClasses: Record<NonNullable<HeadingProps[\"color\"]>, string> = {\n default: \"text-foreground\",\n subtle: \"text-muted-foreground\",\n primary: \"text-primary\",\n};\n\nconst defaultSizeForLevel: Record<number, NonNullable<HeadingProps[\"size\"]>> = {\n 1: \"2xl\",\n 2: \"md\",\n 3: \"md\",\n 4: \"sm\",\n 5: \"xs\",\n 6: \"xs\",\n};\n\nexport const Heading = React.forwardRef<HTMLHeadingElement, HeadingProps>(\n (\n {\n level = 2,\n as,\n size,\n color = \"default\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n const Tag = (as ?? (`h${level}` as React.ElementType)) as React.ElementType;\n const resolvedSize = size ?? defaultSizeForLevel[level] ?? \"md\";\n\n return (\n <Tag\n ref={ref}\n className={cn(\n headingSizeClasses[resolvedSize],\n headingColorClasses[color],\n className\n )}\n {...props}\n >\n {children}\n </Tag>\n );\n }\n);\nHeading.displayName = \"Heading\";\n\n// ---------------------------------------------------------------------------\n// Text\n// ---------------------------------------------------------------------------\n\nexport interface TextProps extends React.HTMLAttributes<HTMLElement> {\n as?: \"p\" | \"span\" | \"div\" | \"label\";\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n weight?: \"normal\" | \"medium\" | \"semibold\";\n color?: \"default\" | \"subtle\" | \"primary\" | \"disabled\";\n truncate?: boolean;\n}\n\nconst textSizeClasses: Record<NonNullable<TextProps[\"size\"]>, string> = {\n xs: \"text-xs\",\n sm: \"text-sm\",\n md: \"text-base\",\n lg: \"text-lg\",\n};\n\nconst textWeightClasses: Record<NonNullable<TextProps[\"weight\"]>, string> = {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n};\n\nconst textColorClasses: Record<NonNullable<TextProps[\"color\"]>, string> = {\n default: \"text-foreground\",\n subtle: \"text-muted-foreground\",\n primary: \"text-primary\",\n disabled: \"text-muted-foreground opacity-50\",\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const Text = React.forwardRef<any, TextProps>(\n (\n {\n as: Tag = \"p\",\n size = \"sm\",\n weight = \"normal\",\n color = \"default\",\n truncate = false,\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <Tag\n ref={ref}\n className={cn(\n textSizeClasses[size],\n textWeightClasses[weight],\n textColorClasses[color],\n truncate && \"truncate\",\n className\n )}\n {...props}\n >\n {children}\n </Tag>\n );\n }\n);\nText.displayName = \"Text\";\n\n// ---------------------------------------------------------------------------\n// MetricText\n// ---------------------------------------------------------------------------\n\nexport interface MetricTextProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"prefix\"> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n trend?: \"up\" | \"down\" | \"neutral\";\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n}\n\nconst metricSizeClasses: Record<NonNullable<MetricTextProps[\"size\"]>, string> = {\n sm: \"text-xl\",\n md: \"text-2xl\",\n lg: \"text-3xl\",\n xl: \"text-4xl\",\n};\n\nconst metricTrendClasses: Record<NonNullable<MetricTextProps[\"trend\"]>, string> = {\n up: \"text-green-600\",\n down: \"text-red-600\",\n neutral: \"text-foreground\",\n};\n\nexport const MetricText = React.forwardRef<HTMLSpanElement, MetricTextProps>(\n (\n {\n size = \"md\",\n trend = \"neutral\",\n prefix,\n suffix,\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"font-semibold tabular-nums tracking-tight\",\n metricSizeClasses[size],\n metricTrendClasses[trend],\n className\n )}\n {...props}\n >\n {prefix != null && (\n <span className=\"mr-0.5 text-[0.75em] font-medium opacity-70\">\n {prefix}\n </span>\n )}\n {children}\n {suffix != null && (\n <span className=\"ml-0.5 text-[0.75em] font-medium opacity-70\">\n {suffix}\n </span>\n )}\n </span>\n );\n }\n);\nMetricText.displayName = \"MetricText\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\nexport type ProgressIndicatorSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressIndicatorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n selectedIndex: number;\n values: string[];\n size?: ProgressIndicatorSize;\n onChange?: (index: number) => void;\n}\n\nconst dotSizeMap: Record<ProgressIndicatorSize, { base: string; active: string }> = {\n sm: {\n base: \"h-1.5 w-1.5\",\n active: \"h-1.5 w-4\",\n },\n md: {\n base: \"h-2 w-2\",\n active: \"h-2 w-6\",\n },\n lg: {\n base: \"h-2.5 w-2.5\",\n active: \"h-2.5 w-8\",\n },\n};\n\nconst ProgressIndicator = React.forwardRef<HTMLDivElement, ProgressIndicatorProps>(\n ({ className, selectedIndex, values, size = \"md\", onChange, ...props }, ref) => {\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!onChange) return;\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n const next = Math.min(selectedIndex + 1, values.length - 1);\n if (next !== selectedIndex) onChange(next);\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n const prev = Math.max(selectedIndex - 1, 0);\n if (prev !== selectedIndex) onChange(prev);\n }\n },\n [onChange, selectedIndex, values.length]\n );\n\n const sizes = dotSizeMap[size];\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-label={props[\"aria-label\"] ?? \"Step indicator\"}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\"flex items-center gap-1.5 outline-none focus-visible:outline-none\", className)}\n {...props}\n >\n {values.map((label, index) => {\n const isActive = index === selectedIndex;\n return (\n <button\n key={index}\n type=\"button\"\n role=\"tab\"\n aria-label={label}\n aria-current={isActive ? \"step\" : undefined}\n aria-selected={isActive}\n tabIndex={-1}\n onClick={() => onChange?.(index)}\n className={cn(\n \"rounded-full transition-all duration-pg-normal ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n isActive\n ? cn(\"bg-primary\", sizes.active)\n : cn(\n \"bg-muted-foreground/30 hover:bg-muted-foreground/50\",\n sizes.base\n )\n )}\n />\n );\n })}\n </div>\n );\n }\n);\nProgressIndicator.displayName = \"ProgressIndicator\";\n\nexport { ProgressIndicator };\n","import * as React from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface VisuallyHiddenProps extends React.HTMLAttributes<HTMLElement> {\n as?: React.ElementType;\n focusable?: boolean;\n}\n\nconst VisuallyHidden = React.forwardRef<HTMLElement, VisuallyHiddenProps>(\n ({ as: Component = \"span\", focusable = false, className, ...props }, ref) => (\n <Component\n ref={ref}\n className={cn(\n focusable\n ? \"sr-only focus:not-sr-only focus:absolute focus:z-50 focus:px-4 focus:py-2 focus:bg-card focus:text-foreground focus:rounded-md focus:shadow-lg focus:ring-2 focus:ring-ring\"\n : \"sr-only\",\n className\n )}\n {...props}\n />\n )\n);\nVisuallyHidden.displayName = \"VisuallyHidden\";\n\nexport { VisuallyHidden };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,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","names":["import_jsx_runtime","gapClass","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","CheckboxPrimitive","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_class_variance_authority","React","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","React","React","Slot","child","React","import_class_variance_authority","import_jsx_runtime","import_react","import_jsx_runtime","variantClasses","sizeClasses","import_react","import_jsx_runtime","variantClasses","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","React","DialogPrimitive","import_lucide_react","import_jsx_runtime","React","PopoverPrimitive","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","Icon","React","import_lucide_react","import_jsx_runtime","variantStyles","variantIcons","Icon","React","import_lucide_react","import_jsx_runtime","Icon","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","sizeClasses","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Icon","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","sizeClasses","React","AvatarPrimitive","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","PANEL_H","React","import_jsx_runtime","config","React","import_lucide_react","import_jsx_runtime","import_react","import_sonner","import_jsx_runtime","Sonner","React","import_lucide_react","import_jsx_runtime","React","PopoverPrimitive","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","Tag","React","PopoverPrimitive","import_lucide_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","variantClasses","sizeClasses","React","import_react_dom","import_lucide_react","import_jsx_runtime","PANEL_W","React","import_jsx_runtime","Tag","React","import_jsx_runtime","sizes","React","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/layout.tsx","../src/grid-flex.tsx","../src/button.tsx","../src/button-group.tsx","../src/input.tsx","../src/password-input.tsx","../src/otp-input.tsx","../src/checkbox-select.tsx","../src/textarea.tsx","../src/label.tsx","../src/checkbox.tsx","../src/radio-group.tsx","../src/switch.tsx","../src/slider.tsx","../src/form.tsx","../src/field.tsx","../src/separator.tsx","../src/input-group.tsx","../src/currency-amount-input.tsx","../src/card.tsx","../src/scroll-area.tsx","../src/side-nav.tsx","../src/breadcrumb.tsx","../src/pagination.tsx","../src/link.tsx","../../../node_modules/@radix-ui/react-slot/src/slot.tsx","../../../node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../src/badge.tsx","../src/lozenge.tsx","../src/tag.tsx","../src/status-badge.tsx","../src/blanket.tsx","../src/spotlight.tsx","../src/dialog.tsx","../src/drawer.tsx","../src/popover.tsx","../src/tooltip.tsx","../src/menu.tsx","../src/dropdown-menu.tsx","../src/select.tsx","../src/command.tsx","../src/tabs.tsx","../src/accordion.tsx","../src/alert.tsx","../src/callout.tsx","../src/section-message.tsx","../src/spinner.tsx","../src/progress.tsx","../src/skeleton.tsx","../src/empty-state.tsx","../src/data-table.tsx","../src/page-header.tsx","../src/code.tsx","../src/avatar.tsx","../src/avatar-group.tsx","../src/avatar-tag.tsx","../src/calendar.tsx","../src/date-picker.tsx","../src/chart.tsx","../src/chart-templates.tsx","../src/sonner.tsx","../src/inline-edit.tsx","../src/inline-dialog.tsx","../src/flag.tsx","../src/responsive.tsx","../src/country-select.tsx","../src/icon-button.tsx","../src/time-picker.tsx","../src/heading.tsx","../src/progress-indicator.tsx","../src/visually-hidden.tsx"],"sourcesContent":["export { cn } from \"./utils\";\n\n// Layout\nexport { Box, Stack, Inline } from \"./layout\";\nexport type { BoxProps, StackProps, InlineProps, LayoutSpacing } from \"./layout\";\nexport { Grid, Flex } from \"./grid-flex\";\nexport type { GridProps, GridCols, GridFlow, ResponsiveCols, FlexProps, FlexDirection, FlexAlign, FlexJustify, FlexWrap } from \"./grid-flex\";\n\n// Button\nexport { Button } from \"./button\";\nexport type { ButtonProps } from \"./button\";\nexport { ButtonGroup, SplitButton, SplitButtonItem } from \"./button-group\";\nexport type { ButtonGroupProps, SplitButtonProps, SplitButtonItemProps } from \"./button-group\";\n\n// Inputs\nexport { Input } from \"./input\";\nexport { PasswordInput } from \"./password-input\";\nexport type { PasswordInputProps } from \"./password-input\";\nexport { OtpInput } from \"./otp-input\";\nexport type { OtpInputProps } from \"./otp-input\";\nexport { CheckboxSelect } from \"./checkbox-select\";\nexport type { CheckboxSelectProps, CheckboxSelectOption } from \"./checkbox-select\";\nexport { Textarea } from \"./textarea\";\nexport { Label } from \"./label\";\nexport { Checkbox } from \"./checkbox\";\nexport type { CheckboxProps } from \"./checkbox\";\nexport { RadioGroup, RadioGroupItem } from \"./radio-group\";\nexport type { RadioGroupItemProps } from \"./radio-group\";\nexport { Switch } from \"./switch\";\nexport type { SwitchProps } from \"./switch\";\nexport { Slider } from \"./slider\";\nexport type { SliderProps } from \"./slider\";\n\n// Form (validation wrapper)\nexport {\n Form,\n FormField,\n FormLabel,\n FormControl,\n FormDescription,\n FormError,\n FormItem,\n useForm,\n} from \"./form\";\nexport type {\n FormProps,\n FormFieldProps,\n FormValues,\n FormErrors,\n FieldConfig,\n FieldsConfig,\n RegisterResult,\n UseFormReturn,\n ValidatorRule,\n} from \"./form\";\n\n// Form fields\nexport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"./field\";\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"./input-group\";\nexport { CurrencyAmountInput } from \"./currency-amount-input\";\n\n// Surfaces\nexport { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from \"./card\";\nexport { Separator } from \"./separator\";\nexport { ScrollArea, ScrollBar } from \"./scroll-area\";\n\n// SideNav\nexport {\n SideNav,\n SideNavHeader,\n SideNavSection,\n SideNavItem,\n SideNavFooter,\n} from \"./side-nav\";\nexport type { SideNavProps, SideNavItemProps } from \"./side-nav\";\n\n// Navigation\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n} from \"./breadcrumb\";\nexport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n} from \"./pagination\";\nexport type {\n PaginationProps,\n PaginationContentProps,\n PaginationItemProps,\n PaginationLinkProps,\n PaginationPreviousProps,\n PaginationNextProps,\n PaginationEllipsisProps,\n} from \"./pagination\";\nexport { Link } from \"./link\";\nexport type { LinkProps } from \"./link\";\n\n// Labels & Badges\nexport { Badge } from \"./badge\";\nexport type { BadgeProps } from \"./badge\";\nexport { Lozenge } from \"./lozenge\";\nexport type { LozengeProps } from \"./lozenge\";\nexport { Tag, TagGroup } from \"./tag\";\nexport type { TagProps, TagGroupProps } from \"./tag\";\nexport { StatusBadge } from \"./status-badge\";\nexport type { StatusBadgeProps, BadgeVariant, BadgeTrailIcon } from \"./status-badge\";\n\n// Overlays\nexport { Blanket } from \"./blanket\";\nexport type { BlanketProps } from \"./blanket\";\nexport { Spotlight, SpotlightCard, useSpotlight } from \"./spotlight\";\nexport type { SpotlightProps, SpotlightCardProps, SpotlightStep, UseSpotlightReturn } from \"./spotlight\";\nexport {\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogClose,\n DialogContent,\n DialogTitle,\n DialogDescription,\n} from \"./dialog\";\nexport {\n Drawer,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n} from \"./drawer\";\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor } from \"./popover\";\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"./tooltip\";\n\n// Menu (standalone vertical)\nexport { Menu, MenuSection, MenuItem, MenuDivider } from \"./menu\";\nexport type { MenuProps, MenuSectionProps, MenuItemProps } from \"./menu\";\n\n// Menus & Select\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} from \"./dropdown-menu\";\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n} from \"./select\";\nexport { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, CommandShortcut } from \"./command\";\nexport type {\n CommandProps,\n CommandInputProps,\n CommandListProps,\n CommandEmptyProps,\n CommandGroupProps,\n CommandItemProps,\n CommandSeparatorProps,\n CommandShortcutProps,\n} from \"./command\";\n\n// Tabs & Accordion\nexport { Tabs, TabsList, TabsTrigger, TabsContent } from \"./tabs\";\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from \"./accordion\";\n\n// Messaging & Feedback\nexport { Alert, AlertTitle, AlertDescription, Banner } from \"./alert\";\nexport type { AlertProps, BannerProps } from \"./alert\";\nexport { Callout, CalloutIcon, CalloutTitle, CalloutText } from \"./callout\";\nexport type { CalloutProps, CalloutVariant } from \"./callout\";\nexport {\n SectionMessage,\n SectionMessageTitle,\n SectionMessageContent,\n SectionMessageActions,\n} from \"./section-message\";\nexport type { SectionMessageProps, SectionMessageVariant } from \"./section-message\";\nexport { Spinner } from \"./spinner\";\nexport type { SpinnerProps } from \"./spinner\";\nexport { Progress, ProgressTracker } from \"./progress\";\nexport type { ProgressProps, ProgressTrackerStep, ProgressTrackerProps } from \"./progress\";\n\n// Loading & Skeleton\nexport { Shimmer, StatCardSkeleton, TableRowSkeleton, ChartSkeleton } from \"./skeleton\";\n\n// Data display\nexport { DataTable } from \"./data-table\";\nexport type { Column, DataTableDensity, DataTableFooterSummary, DataTableHeaderStyle } from \"./data-table\";\nexport { EmptyState } from \"./empty-state\";\nexport { PageHeader } from \"./page-header\";\nexport { Code, CodeBlock } from \"./code\";\nexport type { CodeProps, CodeBlockProps } from \"./code\";\n\n// Avatar\nexport { Avatar, AvatarImage, AvatarFallback } from \"./avatar\";\nexport { AvatarGroup } from \"./avatar-group\";\nexport type { AvatarGroupProps, AvatarGroupItem } from \"./avatar-group\";\nexport { AvatarTag } from \"./avatar-tag\";\nexport type { AvatarTagProps, AvatarTagSize } from \"./avatar-tag\";\n\n// Date & Calendar\nexport { Calendar, CalendarDayButton } from \"./calendar\";\nexport type { CalendarProps } from \"./calendar\";\nexport type { DateRange } from \"react-day-picker\";\nexport { DatePicker } from \"./date-picker\";\n\n// Charts\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n} from \"./chart\";\nexport type { ChartConfig } from \"./chart\";\nexport {\n MetricSparklineCard,\n DashboardAreaChartTemplate,\n GroupedBarChartTemplate,\n RankedBarListTemplate,\n CategoryBarChartTemplate,\n MiniSparklineChartCard,\n AttentionListTemplate,\n} from \"./chart-templates\";\nexport type {\n MetricSparklinePoint,\n MetricSparklineCardProps,\n DashboardAreaChartPoint,\n DashboardAreaChartTemplateProps,\n GroupedBarSeries,\n GroupedBarChartTemplateProps,\n RankedBarItem,\n RankedBarListTemplateProps,\n CategoryBarPoint,\n CategoryBarChartTemplateProps,\n MiniSparklinePoint,\n MiniSparklineStat,\n MiniSparklineChartCardProps,\n AttentionListItem,\n AttentionListTemplateProps,\n} from \"./chart-templates\";\n\n// Toast\nexport { Toaster, toast } from \"./sonner\";\n\n// Inline Edit\nexport { InlineEdit } from \"./inline-edit\";\nexport type { InlineEditProps } from \"./inline-edit\";\n\n// Inline Dialog\nexport { InlineDialog, InlineDialogTrigger, InlineDialogContent } from \"./inline-dialog\";\nexport type { InlineDialogProps, InlineDialogContentProps } from \"./inline-dialog\";\n\n// Flag notifications\nexport { Flag, FlagGroup, useFlagGroup } from \"./flag\";\nexport type { FlagProps, FlagGroupProps, FlagVariant, FlagAction, FlagGroupPosition, UseFlagGroupReturn } from \"./flag\";\n\n// Responsive Show/Hide\nexport { Show, Hide, useBreakpoint } from \"./responsive\";\nexport type { ShowProps, HideProps, Breakpoint, UseBreakpointReturn } from \"./responsive\";\n\n// Country Select\nexport { CountrySelect, COUNTRIES } from \"./country-select\";\nexport type { CountrySelectProps, Country } from \"./country-select\";\n\n// Button variants\nexport { IconButton } from \"./icon-button\";\nexport type { IconButtonProps } from \"./icon-button\";\n\n// Inputs\nexport { TimePicker } from \"./time-picker\";\nexport type { TimePickerProps } from \"./time-picker\";\n\n// Typography\nexport { Heading, Text, MetricText } from \"./heading\";\nexport type { HeadingProps, TextProps, MetricTextProps } from \"./heading\";\n\n// Status\nexport { ProgressIndicator } from \"./progress-indicator\";\nexport type { ProgressIndicatorProps } from \"./progress-indicator\";\n\n// Utility\nexport { VisuallyHidden } from \"./visually-hidden\";\nexport type { VisuallyHiddenProps } from \"./visually-hidden\";\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cn } from \"./utils\";\n\n/** Maps to Tailwind spacing steps used across PayGlocal dashboard surfaces */\nexport type LayoutSpacing = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst gapClass: Record<LayoutSpacing, string> = {\n none: \"gap-0\",\n xs: \"gap-1\",\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-4\",\n xl: \"gap-6\",\n};\n\nconst padClass: Record<LayoutSpacing, string> = {\n none: \"p-0\",\n xs: \"p-1\",\n sm: \"p-2\",\n md: \"p-4\",\n lg: \"p-6\",\n xl: \"p-8\",\n};\n\nconst padXClass: Record<LayoutSpacing, string> = {\n none: \"px-0\",\n xs: \"px-1\",\n sm: \"px-2\",\n md: \"px-4\",\n lg: \"px-6\",\n xl: \"px-8\",\n};\n\nconst padYClass: Record<LayoutSpacing, string> = {\n none: \"py-0\",\n xs: \"py-1\",\n sm: \"py-2\",\n md: \"py-4\",\n lg: \"py-6\",\n xl: \"py-8\",\n};\n\nexport type BoxProps = React.HTMLAttributes<HTMLDivElement> & {\n as?: React.ElementType;\n p?: LayoutSpacing;\n px?: LayoutSpacing;\n py?: LayoutSpacing;\n};\n\n/** Neutral block with token-aligned padding; extend with `className` for radius, borders, flex, etc. */\nexport function Box({ as: Comp = \"div\", className, p = \"none\", px, py, ...props }: BoxProps) {\n const axis = px !== undefined || py !== undefined;\n return (\n <Comp\n className={cn(\n !axis && padClass[p],\n px !== undefined && padXClass[px],\n py !== undefined && padYClass[py],\n className\n )}\n {...props}\n />\n );\n}\n\nexport type StackProps = React.HTMLAttributes<HTMLDivElement> & {\n as?: React.ElementType;\n gap?: LayoutSpacing;\n align?: \"start\" | \"center\" | \"stretch\" | \"end\";\n};\n\n/** Vertical flex stack; default gap matches common section rhythm (`gap-4`). */\nexport function Stack({\n as: Comp = \"div\",\n className,\n gap = \"lg\",\n align = \"stretch\",\n ...props\n}: StackProps) {\n const alignCls =\n align === \"start\"\n ? \"items-start\"\n : align === \"center\"\n ? \"items-center\"\n : align === \"end\"\n ? \"items-end\"\n : \"items-stretch\";\n return <Comp className={cn(\"flex flex-col\", gapClass[gap], alignCls, className)} {...props} />;\n}\n\nexport type InlineProps = React.HTMLAttributes<HTMLDivElement> & {\n gap?: LayoutSpacing;\n wrap?: boolean;\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n};\n\n/** Horizontal flex row for toolbars and inline field groups */\nexport function Inline({\n className,\n gap = \"md\",\n wrap = false,\n justify = \"start\",\n ...props\n}: InlineProps) {\n const justifyCls =\n justify === \"center\"\n ? \"justify-center\"\n : justify === \"end\"\n ? \"justify-end\"\n : justify === \"between\"\n ? \"justify-between\"\n : \"justify-start\";\n return (\n <div\n className={cn(\"flex flex-row items-center\", gapClass[gap], justifyCls, wrap && \"flex-wrap\", className)}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"./utils\";\nimport type { LayoutSpacing } from \"./layout\";\n\n// ---------------------------------------------------------------------------\n// Shared gap map (mirrors layout.tsx)\n// ---------------------------------------------------------------------------\n\nconst gapClass: Record<LayoutSpacing, string> = {\n none: \"gap-0\",\n xs: \"gap-1\",\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-4\",\n xl: \"gap-6\",\n};\n\n// ---------------------------------------------------------------------------\n// Grid\n// ---------------------------------------------------------------------------\n\nexport type GridCols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | \"auto\";\n\nexport type ResponsiveCols = {\n base?: GridCols;\n sm?: GridCols;\n md?: GridCols;\n lg?: GridCols;\n};\n\nexport type GridFlow = \"row\" | \"col\" | \"dense\";\n\nexport type GridProps = React.HTMLAttributes<HTMLDivElement> & {\n /** Number of columns (1–12 or \"auto\"), or a responsive object */\n cols?: GridCols | ResponsiveCols;\n /** Number of explicit rows */\n rows?: 1 | 2 | 3 | 4 | 5 | 6 | \"auto\";\n /** Gap between cells */\n gap?: LayoutSpacing;\n /** Grid auto-flow direction */\n flow?: GridFlow;\n};\n\nconst colClass: Record<string, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n 6: \"grid-cols-6\",\n 7: \"grid-cols-7\",\n 8: \"grid-cols-8\",\n 9: \"grid-cols-9\",\n 10: \"grid-cols-10\",\n 11: \"grid-cols-11\",\n 12: \"grid-cols-12\",\n auto: \"grid-cols-[repeat(auto-fit,minmax(0,1fr))]\",\n};\n\nconst smColClass: Record<string, string> = {\n 1: \"sm:grid-cols-1\",\n 2: \"sm:grid-cols-2\",\n 3: \"sm:grid-cols-3\",\n 4: \"sm:grid-cols-4\",\n 5: \"sm:grid-cols-5\",\n 6: \"sm:grid-cols-6\",\n 7: \"sm:grid-cols-7\",\n 8: \"sm:grid-cols-8\",\n 9: \"sm:grid-cols-9\",\n 10: \"sm:grid-cols-10\",\n 11: \"sm:grid-cols-11\",\n 12: \"sm:grid-cols-12\",\n auto: \"sm:grid-cols-[repeat(auto-fit,minmax(0,1fr))]\",\n};\n\nconst mdColClass: Record<string, string> = {\n 1: \"md:grid-cols-1\",\n 2: \"md:grid-cols-2\",\n 3: \"md:grid-cols-3\",\n 4: \"md:grid-cols-4\",\n 5: \"md:grid-cols-5\",\n 6: \"md:grid-cols-6\",\n 7: \"md:grid-cols-7\",\n 8: \"md:grid-cols-8\",\n 9: \"md:grid-cols-9\",\n 10: \"md:grid-cols-10\",\n 11: \"md:grid-cols-11\",\n 12: \"md:grid-cols-12\",\n auto: \"md:grid-cols-[repeat(auto-fit,minmax(0,1fr))]\",\n};\n\nconst lgColClass: Record<string, string> = {\n 1: \"lg:grid-cols-1\",\n 2: \"lg:grid-cols-2\",\n 3: \"lg:grid-cols-3\",\n 4: \"lg:grid-cols-4\",\n 5: \"lg:grid-cols-5\",\n 6: \"lg:grid-cols-6\",\n 7: \"lg:grid-cols-7\",\n 8: \"lg:grid-cols-8\",\n 9: \"lg:grid-cols-9\",\n 10: \"lg:grid-cols-10\",\n 11: \"lg:grid-cols-11\",\n 12: \"lg:grid-cols-12\",\n auto: \"lg:grid-cols-[repeat(auto-fit,minmax(0,1fr))]\",\n};\n\nconst rowClass: Record<string, string> = {\n 1: \"grid-rows-1\",\n 2: \"grid-rows-2\",\n 3: \"grid-rows-3\",\n 4: \"grid-rows-4\",\n 5: \"grid-rows-5\",\n 6: \"grid-rows-6\",\n auto: \"grid-rows-none\",\n};\n\nconst flowClass: Record<GridFlow, string> = {\n row: \"grid-flow-row\",\n col: \"grid-flow-col\",\n dense: \"grid-flow-dense\",\n};\n\nfunction resolveColClasses(cols: GridCols | ResponsiveCols | undefined): string {\n if (cols === undefined) return \"\";\n if (typeof cols === \"number\" || cols === \"auto\") {\n return colClass[String(cols)] ?? \"\";\n }\n // Responsive object\n const { base, sm, md, lg } = cols as ResponsiveCols;\n return cn(\n base !== undefined && colClass[String(base)],\n sm !== undefined && smColClass[String(sm)],\n md !== undefined && mdColClass[String(md)],\n lg !== undefined && lgColClass[String(lg)],\n );\n}\n\nexport const Grid = React.forwardRef<HTMLDivElement, GridProps>(\n ({ className, cols, rows, gap = \"md\", flow, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"grid\",\n resolveColClasses(cols),\n rows !== undefined && rowClass[String(rows)],\n gapClass[gap],\n flow !== undefined && flowClass[flow],\n className,\n )}\n {...props}\n />\n );\n },\n);\nGrid.displayName = \"Grid\";\n\n// ---------------------------------------------------------------------------\n// Flex\n// ---------------------------------------------------------------------------\n\nexport type FlexDirection = \"row\" | \"col\" | \"row-reverse\" | \"col-reverse\";\nexport type FlexWrap = boolean | \"reverse\";\nexport type FlexAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type FlexJustify = \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n\nexport type FlexProps = React.HTMLAttributes<HTMLDivElement> & {\n /** Flex direction */\n direction?: FlexDirection;\n /** Whether children wrap */\n wrap?: FlexWrap;\n /** Align items (cross axis) */\n align?: FlexAlign;\n /** Justify content (main axis) */\n justify?: FlexJustify;\n /** Gap between children */\n gap?: LayoutSpacing;\n /** Render as inline-flex */\n inline?: boolean;\n};\n\nconst directionClass: Record<FlexDirection, string> = {\n row: \"flex-row\",\n col: \"flex-col\",\n \"row-reverse\": \"flex-row-reverse\",\n \"col-reverse\": \"flex-col-reverse\",\n};\n\nconst alignClass: Record<FlexAlign, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n};\n\nconst justifyClass: Record<FlexJustify, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n};\n\nexport const Flex = React.forwardRef<HTMLDivElement, FlexProps>(\n (\n {\n className,\n direction = \"row\",\n wrap = false,\n align = \"start\",\n justify = \"start\",\n gap = \"md\",\n inline = false,\n ...props\n },\n ref,\n ) => {\n const wrapCls =\n wrap === true ? \"flex-wrap\" : wrap === \"reverse\" ? \"flex-wrap-reverse\" : \"flex-nowrap\";\n\n return (\n <div\n ref={ref}\n className={cn(\n inline ? \"inline-flex\" : \"flex\",\n directionClass[direction],\n wrapCls,\n alignClass[align],\n justifyClass[justify],\n gapClass[gap],\n className,\n )}\n {...props}\n />\n );\n },\n);\nFlex.displayName = \"Flex\";\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { Loader2 } from \"lucide-react\";\nimport { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"outline\" | \"link\";\n size?: \"sm\" | \"md\" | \"lg\";\n isLoading?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\nconst variantClasses: Record<NonNullable<ButtonProps[\"variant\"]>, string> = {\n primary:\n \"bg-primary text-primary-foreground border border-primary shadow-sm hover:bg-[var(--primary-hover)]\",\n secondary:\n \"bg-muted text-foreground border border-border shadow-sm hover:bg-muted/85 dark:bg-muted/35 dark:text-foreground dark:border-border dark:hover:bg-muted/55\",\n ghost:\n \"bg-transparent text-foreground border border-transparent hover:bg-muted focus-visible:bg-muted/80 active:bg-muted/90\",\n danger:\n \"bg-red-600 text-white border border-red-600 shadow-sm hover:bg-red-700\",\n outline:\n \"bg-card text-foreground border border-border shadow-sm hover:bg-muted\",\n link:\n \"h-auto min-h-0 rounded-md border border-transparent bg-transparent px-2 py-2 text-[15px] font-medium text-primary shadow-none underline-offset-4 hover:bg-primary/5 hover:underline focus-visible:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 disabled:pointer-events-none disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:no-underline\",\n};\n\n/** Heights and padding match dashboard primary actions (~44–48px) and comfortable tap targets. */\nconst sizes = {\n sm: \"h-9 min-h-9 px-3.5 text-xs gap-1.5 rounded-lg\",\n md: \"h-10 min-h-10 px-5 text-sm gap-2 rounded-lg\",\n lg: \"h-[3.25rem] min-h-[3.25rem] px-10 text-[15px] gap-2.5 rounded-xl\",\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n className,\n disabled,\n ...props\n },\n ref\n ) => {\n return (\n <button\n ref={ref}\n disabled={disabled || isLoading}\n className={cn(\n \"inline-flex items-center justify-center font-medium transition-colors duration-pg-fast ease-pg-standard\",\n variant !== \"link\" && \"disabled:cursor-not-allowed disabled:opacity-50\",\n variant === \"link\" && \"justify-center\",\n variant !== \"link\" && \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n variantClasses[variant],\n variant !== \"link\" && sizes[size],\n className\n )}\n {...props}\n >\n {isLoading ? (\n <Loader2\n className={cn(\n \"animate-spin\",\n size === \"sm\" ? \"size-3.5\" : size === \"lg\" ? \"size-[1.125rem]\" : \"size-3.5\"\n )}\n />\n ) : (\n leftIcon\n )}\n <span className={cn(isLoading && \"opacity-70\")}>{children}</span>\n {!isLoading && rightIcon}\n </button>\n );\n }\n);\nButton.displayName = \"Button\";\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { ChevronDown } from \"lucide-react\";\nimport {\n forwardRef,\n useState,\n useRef,\n useEffect,\n type HTMLAttributes,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./button\";\nimport type { ButtonProps } from \"./button\";\n\n// ---------------------------------------------------------------------------\n// ButtonGroup\n// ---------------------------------------------------------------------------\n\nexport interface ButtonGroupProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: \"horizontal\" | \"vertical\";\n variant?: ButtonProps[\"variant\"];\n}\n\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({ orientation = \"horizontal\", variant, className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-variant={variant}\n className={cn(\n \"inline-flex\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n // Horizontal connected borders\n orientation === \"horizontal\" && [\n \"[&>*:not(:first-child)]:rounded-l-none\",\n \"[&>*:not(:last-child)]:rounded-r-none\",\n \"[&>*:not(:first-child)]:-ml-px\",\n ],\n // Vertical connected borders\n orientation === \"vertical\" && [\n \"[&>*:not(:first-child)]:rounded-t-none\",\n \"[&>*:not(:last-child)]:rounded-b-none\",\n \"[&>*:not(:first-child)]:-mt-px\",\n ],\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\nButtonGroup.displayName = \"ButtonGroup\";\n\n// ---------------------------------------------------------------------------\n// SplitButton\n// ---------------------------------------------------------------------------\n\nexport interface SplitButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\"> {\n label: ReactNode;\n onClick?: ButtonHTMLAttributes<HTMLButtonElement>[\"onClick\"];\n children?: ReactNode;\n variant?: ButtonProps[\"variant\"];\n size?: ButtonProps[\"size\"];\n isLoading?: boolean;\n}\n\nexport const SplitButton = forwardRef<HTMLDivElement, SplitButtonProps>(\n (\n {\n label,\n onClick,\n children,\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n className,\n disabled,\n ...props\n },\n ref\n ) => {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Merge forwarded ref with internal ref\n function setRefs(el: HTMLDivElement | null) {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }\n }\n\n // Close dropdown when clicking outside\n useEffect(() => {\n if (!open) return;\n function handleOutside(e: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleOutside);\n return () => document.removeEventListener(\"mousedown\", handleOutside);\n }, [open]);\n\n return (\n <div\n ref={setRefs}\n className={cn(\"relative inline-flex\", className)}\n {...(props as HTMLAttributes<HTMLDivElement>)}\n >\n {/* Primary action button */}\n <Button\n variant={variant}\n size={size}\n isLoading={isLoading}\n disabled={disabled}\n onClick={onClick}\n className=\"rounded-r-none\"\n >\n {label}\n </Button>\n\n {/* Dropdown trigger */}\n <button\n type=\"button\"\n disabled={disabled || isLoading}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className={cn(\n \"inline-flex items-center justify-center px-2 rounded-l-none -ml-px\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n // Match variant styling\n variant === \"primary\" &&\n \"bg-primary text-primary-foreground border border-primary shadow-sm hover:bg-[var(--primary-hover)] border-l border-l-primary-foreground/20\",\n variant === \"secondary\" &&\n \"bg-muted text-foreground border border-border shadow-sm hover:bg-muted/85 dark:bg-muted/35 dark:hover:bg-muted/55 border-l-0\",\n variant === \"outline\" &&\n \"bg-card text-foreground border border-border shadow-sm hover:bg-muted border-l-0\",\n variant === \"ghost\" &&\n \"bg-transparent text-foreground border border-transparent hover:bg-muted border-l-0\",\n variant === \"danger\" &&\n \"bg-red-600 text-white border border-red-600 shadow-sm hover:bg-red-700 border-l border-l-white/20\",\n // Size heights to match Button\n size === \"sm\" && \"h-9 min-h-9 rounded-lg\",\n size === \"md\" && \"h-10 min-h-10 rounded-lg\",\n size === \"lg\" && \"h-[3.25rem] min-h-[3.25rem] rounded-xl\"\n )}\n >\n <ChevronDown\n className={cn(\n \"transition-transform duration-pg-fast ease-pg-standard\",\n open && \"rotate-180\",\n size === \"sm\" ? \"size-3.5\" : size === \"lg\" ? \"size-[1.125rem]\" : \"size-4\"\n )}\n />\n </button>\n\n {/* Dropdown menu */}\n {open && children && (\n <div\n role=\"menu\"\n className={cn(\n \"absolute right-0 top-full mt-1 z-50\",\n \"bg-card border border-border rounded-lg shadow-lg py-1 min-w-32\"\n )}\n >\n {children}\n </div>\n )}\n </div>\n );\n }\n);\nSplitButton.displayName = \"SplitButton\";\n\n// ---------------------------------------------------------------------------\n// SplitButtonItem — convenience wrapper for dropdown items\n// ---------------------------------------------------------------------------\n\nexport interface SplitButtonItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n}\n\nexport const SplitButtonItem = forwardRef<HTMLButtonElement, SplitButtonItemProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <button\n ref={ref}\n role=\"menuitem\"\n type=\"button\"\n className={cn(\n \"block w-full text-left px-3 py-2 text-sm text-foreground\",\n \"hover:bg-muted transition-colors duration-pg-fast ease-pg-standard\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:outline-none focus-visible:bg-muted\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\nSplitButtonItem.displayName = \"SplitButtonItem\";\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-11 min-h-11 w-full rounded-lg border border-border bg-card px-4 py-2 text-[15px] leading-tight shadow-sm transition-colors\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n \"disabled:cursor-not-allowed disabled:bg-muted/40 disabled:opacity-60\",\n \"read-only:bg-muted/25 read-only:text-muted-foreground\",\n \"aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/25 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Eye, EyeOff } from \"lucide-react\";\nimport { cn } from \"./utils\";\nimport { Input } from \"./input\";\n\nexport type PasswordInputProps = Omit<React.ComponentProps<typeof Input>, \"type\">;\n\nexport const PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ className, ...props }, ref) => {\n const [visible, setVisible] = React.useState(false);\n return (\n <div className=\"relative\">\n <Input\n ref={ref}\n type={visible ? \"text\" : \"password\"}\n className={cn(\"pr-10\", className)}\n {...props}\n />\n <button\n type=\"button\"\n onClick={() => setVisible((v) => !v)}\n aria-label={visible ? \"Hide password\" : \"Show password\"}\n tabIndex={-1}\n className=\"absolute inset-y-0 right-0 flex w-10 items-center justify-center text-muted-foreground transition-colors hover:text-foreground\"\n >\n {visible ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n );\n }\n);\nPasswordInput.displayName = \"PasswordInput\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface OtpInputProps {\n /** Current OTP value (controlled). */\n value: string;\n /** Fires with the full joined string on every change. */\n onChange: (value: string) => void;\n /** Number of digit boxes. */\n length?: number;\n /** Fired when all boxes are filled. */\n onComplete?: (value: string) => void;\n disabled?: boolean;\n invalid?: boolean;\n autoFocus?: boolean;\n \"aria-label\"?: string;\n}\n\nexport function OtpInput({\n value,\n onChange,\n length = 6,\n onComplete,\n disabled,\n invalid,\n autoFocus,\n \"aria-label\": ariaLabel = \"One-time passcode\",\n}: OtpInputProps) {\n const refs = React.useRef<Array<HTMLInputElement | null>>([]);\n const digits = React.useMemo(() => {\n const arr = value.split(\"\").slice(0, length);\n return Array.from({ length }, (_, i) => arr[i] ?? \"\");\n }, [value, length]);\n\n const emit = (next: string) => {\n onChange(next);\n if (next.length === length && !next.includes(\" \")) onComplete?.(next);\n };\n\n const setAt = (index: number, char: string) => {\n const arr = digits.slice();\n arr[index] = char;\n emit(arr.join(\"\").replace(/\\s+$/g, \"\"));\n };\n\n const handleChange = (index: number, raw: string) => {\n const onlyDigits = raw.replace(/\\D/g, \"\");\n if (!onlyDigits) {\n setAt(index, \"\");\n return;\n }\n const chars = onlyDigits.split(\"\");\n const arr = digits.slice();\n let cursor = index;\n for (const c of chars) {\n if (cursor >= length) break;\n arr[cursor] = c;\n cursor += 1;\n }\n emit(arr.join(\"\"));\n refs.current[Math.min(cursor, length - 1)]?.focus();\n };\n\n const handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Backspace\") {\n e.preventDefault();\n if (digits[index]) {\n setAt(index, \"\");\n } else if (index > 0) {\n refs.current[index - 1]?.focus();\n setAt(index - 1, \"\");\n }\n } else if (e.key === \"ArrowLeft\" && index > 0) {\n refs.current[index - 1]?.focus();\n } else if (e.key === \"ArrowRight\" && index < length - 1) {\n refs.current[index + 1]?.focus();\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData(\"text\").replace(/\\D/g, \"\").slice(0, length);\n if (!pasted) return;\n emit(pasted);\n refs.current[Math.min(pasted.length, length - 1)]?.focus();\n };\n\n return (\n <div className=\"flex gap-2\" role=\"group\" aria-label={ariaLabel}>\n {digits.map((digit, i) => (\n <input\n key={i}\n ref={(el) => { refs.current[i] = el; }}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={i === 0 ? \"one-time-code\" : \"off\"}\n maxLength={length}\n value={digit}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n autoFocus={autoFocus && i === 0}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n className={cn(\n \"h-12 w-11 rounded-lg border bg-card text-center text-lg font-semibold text-foreground shadow-sm transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 focus-visible:border-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n invalid ? \"border-destructive ring-destructive/20\" : \"border-input\"\n )}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, ChevronDown, Search } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface CheckboxSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CheckboxSelectProps {\n options: CheckboxSelectOption[];\n value: string[];\n onChange: (values: string[]) => void;\n placeholder?: string;\n showSearch?: boolean;\n disabled?: boolean;\n maxDisplay?: number;\n className?: string;\n}\n\nfunction getTriggerLabel(\n value: string[],\n options: CheckboxSelectOption[],\n placeholder: string,\n maxDisplay: number\n): string {\n if (value.length === 0) return placeholder;\n if (value.length === options.length) return \"All\";\n if (value.length <= maxDisplay) {\n const labels = value\n .map((v) => options.find((o) => o.value === v)?.label ?? v)\n .filter(Boolean);\n return labels.join(\", \");\n }\n return `${value.length} selected`;\n}\n\nconst CheckboxSelect = React.forwardRef<HTMLButtonElement, CheckboxSelectProps>(\n (\n {\n options,\n value,\n onChange,\n placeholder = \"Select options\",\n showSearch = false,\n disabled = false,\n maxDisplay = 2,\n className,\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n\n const filtered = React.useMemo(() => {\n if (!search.trim()) return options;\n const lower = search.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(lower));\n }, [options, search]);\n\n const allFilteredValues = filtered.filter((o) => !o.disabled).map((o) => o.value);\n const allFilteredSelected =\n allFilteredValues.length > 0 && allFilteredValues.every((v) => value.includes(v));\n const someFilteredSelected = allFilteredValues.some((v) => value.includes(v));\n\n function handleSelectAll() {\n if (allFilteredSelected) {\n onChange(value.filter((v) => !allFilteredValues.includes(v)));\n } else {\n const merged = Array.from(new Set([...value, ...allFilteredValues]));\n onChange(merged);\n }\n }\n\n function handleClearAll() {\n onChange(value.filter((v) => !allFilteredValues.includes(v)));\n }\n\n function handleToggle(optValue: string) {\n if (value.includes(optValue)) {\n onChange(value.filter((v) => v !== optValue));\n } else {\n onChange([...value, optValue]);\n }\n }\n\n const triggerLabel = getTriggerLabel(value, options, placeholder, maxDisplay);\n const hasSelection = value.length > 0;\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={cn(\n \"flex h-11 w-full items-center justify-between gap-2.5 rounded-lg border border-border bg-card px-4 py-2 text-[15px] shadow-sm outline-none\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n hasSelection ? \"text-foreground\" : \"text-muted-foreground\",\n className\n )}\n >\n <span className=\"truncate\">{triggerLabel}</span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-muted-foreground opacity-70 transition-transform duration-pg-fast ease-pg-standard\",\n open && \"rotate-180\"\n )}\n />\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={6}\n className={cn(\n \"z-[120] min-w-[var(--radix-popover-trigger-width)] w-full rounded-xl border border-border bg-popover text-popover-foreground shadow-lg outline-none p-1\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\"\n )}\n >\n {showSearch && (\n <div className=\"relative mb-1 px-1 pt-1\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\" />\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search...\"\n className={cn(\n \"flex h-9 w-full rounded-md border border-border bg-card pl-8 pr-3 text-sm shadow-sm placeholder:text-muted-foreground\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n )}\n />\n </div>\n )}\n\n <div className=\"flex items-center justify-between px-2 py-1.5\">\n <button\n type=\"button\"\n onClick={handleSelectAll}\n className={cn(\n \"text-xs font-medium transition-colors duration-pg-fast ease-pg-standard\",\n allFilteredSelected\n ? \"text-primary hover:text-primary/80\"\n : someFilteredSelected\n ? \"text-primary hover:text-primary/80\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n {allFilteredSelected ? \"Deselect all\" : \"Select all\"}\n </button>\n {value.length > 0 && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"text-xs font-medium text-muted-foreground transition-colors duration-pg-fast ease-pg-standard hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"my-0.5 h-px bg-border mx-1\" />\n\n <div className=\"max-h-60 overflow-y-auto py-0.5\">\n {filtered.length === 0 ? (\n <div className=\"px-3 py-6 text-center text-sm text-muted-foreground\">\n No options found.\n </div>\n ) : (\n filtered.map((option) => {\n const checked = value.includes(option.value);\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={checked}\n aria-disabled={option.disabled}\n onClick={() => !option.disabled && handleToggle(option.value)}\n className={cn(\n \"flex items-center gap-2.5 px-3 py-2 rounded-md text-sm select-none\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n option.disabled\n ? \"cursor-not-allowed opacity-50\"\n : \"cursor-pointer hover:bg-muted\"\n )}\n >\n <CheckboxPrimitive.Root\n checked={checked}\n disabled={option.disabled}\n onCheckedChange={() => !option.disabled && handleToggle(option.value)}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-md border border-border bg-card shadow-sm\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary\"\n )}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-primary-foreground\">\n <Check className=\"size-3\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n <span\n className={cn(\n \"leading-none\",\n checked ? \"text-foreground\" : \"text-foreground\"\n )}\n >\n {option.label}\n </span>\n </div>\n );\n })\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n }\n);\n\nCheckboxSelect.displayName = \"CheckboxSelect\";\n\nexport { CheckboxSelect };\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<\"textarea\">>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[5.5rem] w-full rounded-lg border border-border bg-card px-4 py-3 text-[15px] leading-relaxed shadow-sm transition-colors\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\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\";\n\nimport { cn } from \"./utils\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, Minus } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type CheckboxSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n size?: CheckboxSize;\n}\n\nconst sizeClasses: Record<CheckboxSize, string> = {\n sm: \"h-3.5 w-3.5 rounded\",\n md: \"h-4 w-4 rounded-md\",\n lg: \"h-[1.125rem] w-[1.125rem] rounded-md\",\n};\n\nconst iconSizes: Record<CheckboxSize, string> = {\n sm: \"size-2.5\",\n md: \"size-3\",\n lg: \"size-3.5\",\n};\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, size = \"md\", ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer shrink-0 border border-border bg-card shadow-sm transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n \"data-[state=indeterminate]:bg-primary data-[state=indeterminate]:border-primary\",\n sizeClasses[size],\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-primary-foreground\">\n {props.checked === \"indeterminate\" ? (\n <Minus className={iconSizes[size]} strokeWidth={3} />\n ) : (\n <Check className={iconSizes[size]} strokeWidth={3} />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"./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\n ref={ref}\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n));\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nexport type RadioGroupItemProps = React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Item\n>;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"size-4 shrink-0 rounded-full border border-border bg-card shadow-sm\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"data-[state=checked]:border-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span className=\"block size-2 rounded-full bg-primary\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n));\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst switchRootVariants = cva(\n [\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=unchecked]:bg-muted data-[state=unchecked]:border-border\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-transparent\",\n ],\n {\n variants: {\n size: {\n sm: \"h-5 w-9\",\n md: \"h-6 w-11\",\n lg: \"h-7 w-[3.25rem]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nconst switchThumbVariants = cva(\n [\n \"pointer-events-none block rounded-full bg-white shadow-sm\",\n \"transition-transform duration-pg-fast ease-pg-standard\",\n \"ring-0\",\n ],\n {\n variants: {\n size: {\n sm: \"size-3.5 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5\",\n md: \"size-4.5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5\",\n lg: \"size-5.5 data-[state=checked]:translate-x-6 data-[state=unchecked]:translate-x-0.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n VariantProps<typeof switchRootVariants> {}\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, size, ...props }, ref) => (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(switchRootVariants({ size }), className)}\n {...props}\n >\n <SwitchPrimitive.Thumb className={cn(switchThumbVariants({ size }))} />\n </SwitchPrimitive.Root>\n));\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n\nexport { Switch };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cn } from \"./utils\";\n\nexport interface SliderProps extends React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> {}\n\nconst Slider = React.forwardRef<React.ElementRef<typeof SliderPrimitive.Root>, SliderProps>(\n ({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\"relative flex w-full touch-none select-none items-center\", className)}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-muted\">\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"block h-[18px] w-[18px] rounded-full border-2 border-primary bg-card shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n )\n);\nSlider.displayName = SliderPrimitive.Root.displayName;\n\nexport { Slider };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AlertCircle } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type FormValues = Record<string, string>;\nexport type FormErrors = Record<string, string>;\n\nexport interface ValidatorRule {\n required?: boolean | string;\n minLength?: { value: number; message: string };\n maxLength?: { value: number; message: string };\n pattern?: { value: RegExp; message: string };\n validate?: (value: string) => string | undefined;\n}\n\nexport interface FieldConfig {\n defaultValue?: string;\n rules?: ValidatorRule;\n}\n\nexport type FieldsConfig = Record<string, FieldConfig>;\n\nexport interface RegisterResult {\n name: string;\n id: string;\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;\n onBlur: () => void;\n}\n\nexport interface UseFormReturn {\n values: FormValues;\n errors: FormErrors;\n register: (name: string) => RegisterResult;\n handleSubmit: (onValid: (values: FormValues) => void, onInvalid?: (errors: FormErrors) => void) => (e: React.FormEvent) => void;\n setError: (name: string, message: string) => void;\n clearError: (name: string) => void;\n reset: () => void;\n setValue: (name: string, value: string) => void;\n}\n\nexport function useForm(fields: FieldsConfig = {}): UseFormReturn {\n const initial = Object.fromEntries(Object.entries(fields).map(([k, v]) => [k, v.defaultValue ?? \"\"]));\n const [values, setValues] = React.useState<FormValues>(initial);\n const [errors, setErrors] = React.useState<FormErrors>({});\n\n function validate(name: string, value: string): string | undefined {\n const rules = fields[name]?.rules;\n if (!rules) return undefined;\n if (rules.required && !value.trim()) return typeof rules.required === \"string\" ? rules.required : \"This field is required\";\n if (rules.minLength && value.length < rules.minLength.value) return rules.minLength.message;\n if (rules.maxLength && value.length > rules.maxLength.value) return rules.maxLength.message;\n if (rules.pattern && !rules.pattern.value.test(value)) return rules.pattern.message;\n if (rules.validate) return rules.validate(value);\n }\n\n const register = (name: string): RegisterResult => ({\n name,\n id: name,\n value: values[name] ?? \"\",\n onChange: (e) => setValues(v => ({ ...v, [name]: e.target.value })),\n onBlur: () => {\n const err = validate(name, values[name] ?? \"\");\n setErrors(e => err ? { ...e, [name]: err } : (({ [name]: _, ...rest }) => rest)(e));\n },\n });\n\n const handleSubmit = (onValid: (v: FormValues) => void, onInvalid?: (e: FormErrors) => void) => (e: React.FormEvent) => {\n e.preventDefault();\n const newErrors: FormErrors = {};\n for (const [name] of Object.entries(fields)) {\n const err = validate(name, values[name] ?? \"\");\n if (err) newErrors[name] = err;\n }\n if (Object.keys(newErrors).length > 0) {\n setErrors(newErrors);\n onInvalid?.(newErrors);\n } else {\n setErrors({});\n onValid(values);\n }\n };\n\n return {\n values,\n errors,\n register,\n handleSubmit,\n setError: (name, msg) => setErrors(e => ({ ...e, [name]: msg })),\n clearError: (name) => setErrors(e => (({ [name]: _, ...rest }) => rest)(e)),\n reset: () => { setValues(initial); setErrors({}); },\n setValue: (name, value) => setValues(v => ({ ...v, [name]: value })),\n };\n}\n\nexport interface FormProps extends React.FormHTMLAttributes<HTMLFormElement> {}\n\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ className, ...props }, ref) => (\n <form ref={ref} className={cn(\"space-y-4\", className)} {...props} />\n )\n);\nForm.displayName = \"Form\";\n\nexport interface FormItemProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FormItem = React.forwardRef<HTMLDivElement, FormItemProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5\", className)} {...props} />\n )\n);\nFormItem.displayName = \"FormItem\";\n\nexport interface FormLabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n}\n\nconst FormLabel = React.forwardRef<HTMLLabelElement, FormLabelProps>(\n ({ className, required, children, ...props }, ref) => (\n <label ref={ref} className={cn(\"text-sm font-medium text-foreground\", className)} {...props}>\n {children}\n {required && <span className=\"ml-1 text-destructive\">*</span>}\n </label>\n )\n);\nFormLabel.displayName = \"FormLabel\";\n\nexport interface FormControlProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FormControl = React.forwardRef<HTMLDivElement, FormControlProps>(\n ({ ...props }, ref) => <div ref={ref} {...props} />\n);\nFormControl.displayName = \"FormControl\";\n\nexport interface FormDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nconst FormDescription = React.forwardRef<HTMLParagraphElement, FormDescriptionProps>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-xs text-muted-foreground\", className)} {...props} />\n )\n);\nFormDescription.displayName = \"FormDescription\";\n\nexport interface FormErrorProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nconst FormError = React.forwardRef<HTMLParagraphElement, FormErrorProps>(\n ({ className, children, ...props }, ref) =>\n children ? (\n <p ref={ref} className={cn(\"flex items-center gap-1 text-xs text-destructive\", className)} {...props}>\n <AlertCircle className=\"size-3 shrink-0\" />\n {children}\n </p>\n ) : null\n);\nFormError.displayName = \"FormError\";\n\nexport interface FormFieldProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5\", className)} {...props} />\n )\n);\nFormField.displayName = \"FormField\";\n\nexport { Form, FormItem, FormLabel, FormControl, FormDescription, FormError, FormField };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\nimport { Label } from \"./label\";\nimport { Separator } from \"./separator\";\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n \"data-[variant=label]:text-sm\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nconst fieldVariants = cva(\"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\", {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start\",\n ],\n responsive: [\n \"@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n});\n\nfunction Field({\n className,\n orientation = \"vertical\",\n invalid,\n disabled,\n ...props\n}: React.ComponentProps<\"div\"> &\n VariantProps<typeof fieldVariants> & {\n invalid?: boolean;\n disabled?: boolean;\n }) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n data-invalid={invalid ? true : undefined}\n data-disabled={disabled ? true : undefined}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n );\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\", className)}\n {...props}\n />\n );\n}\n\nfunction FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border has-[>[data-slot=field]]:border-border [&>[data-slot=field]]:p-4\",\n \"has-data-[state=checked]:border-primary has-data-[state=checked]:bg-primary/5 dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm font-medium leading-snug group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-sm font-normal leading-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode;\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children ? (\n <span\n className=\"relative mx-auto block w-fit bg-background px-2 text-muted-foreground\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n ) : null}\n </div>\n );\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>;\n}) {\n const content = useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors) {\n return null;\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return errors[0].message;\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {errors.map(\n (error, index) => error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-sm font-normal text-destructive\", className)}\n {...props}\n >\n {content}\n </div>\n );\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"./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-px w-full\" : \"h-full w-px\",\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 { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group relative flex w-full items-stretch rounded-xl border border-border bg-card shadow-sm outline-none transition-[color,box-shadow] dark:bg-card/50\",\n \"min-h-11 h-11 has-[>textarea]:h-auto\",\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n \"has-[[data-slot=input-group-control]:focus-visible]:ring-1 has-[[data-slot=input-group-control]:focus-visible]:ring-ring\",\n \"has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n className\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto min-h-11 cursor-text select-none items-center justify-center gap-2 px-0 text-[15px] font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3.5 has-[>button]:-ml-[0.45rem] has-[>kbd]:-ml-[0.35rem]\",\n \"inline-end\":\n \"order-last pr-3.5 has-[>button]:-mr-[0.4rem] has-[>kbd]:-mr-[0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start border-b px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3\",\n \"block-end\":\n \"order-last w-full justify-start border-t px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n);\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva(\n \"inline-flex items-center justify-center gap-2 border border-transparent bg-transparent text-sm font-medium text-foreground shadow-none transition-colors hover:bg-muted\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5\",\n \"icon-xs\": \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n);\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n size = \"xs\",\n ...props\n}: React.ComponentProps<\"button\"> & VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <button\n type={type}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n","\"use client\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nconst CURRENCIES = [\"USD\", \"INR\", \"EUR\", \"GBP\", \"SGD\", \"AED\", \"JPY\"];\n\ninterface CurrencyAmountInputProps {\n currency: string;\n amount: string;\n onCurrencyChange: (currency: string) => void;\n onAmountChange: (amount: string) => void;\n placeholder?: string;\n disabled?: boolean;\n required?: boolean;\n currencies?: string[];\n id?: string;\n}\n\nexport function CurrencyAmountInput({\n currency,\n amount,\n onCurrencyChange,\n onAmountChange,\n placeholder = \"0.00\",\n disabled = false,\n required = false,\n currencies = CURRENCIES,\n id,\n}: CurrencyAmountInputProps) {\n return (\n <div className=\"flex h-12 min-h-12 items-stretch overflow-hidden rounded-xl border border-border bg-card text-[15px] transition-all focus-within:border-muted-foreground/50 focus-within:ring-2 focus-within:ring-ring/20\">\n <div className=\"relative flex min-w-[5.25rem] shrink-0 items-center border-r border-border bg-muted/25 px-3\">\n <select\n value={currency}\n onChange={(e) => onCurrencyChange(e.target.value)}\n disabled={disabled}\n aria-label=\"Currency\"\n className={cn(\n \"h-full min-h-0 w-full min-w-0 cursor-pointer bg-transparent py-2 pl-1 pr-9 text-[15px] font-semibold text-foreground\",\n \"focus:outline-none disabled:opacity-50\",\n \"appearance-none [-webkit-appearance:none] [-moz-appearance:none]\",\n \"[&::-ms-expand]:hidden\"\n )}\n >\n {currencies.map((c) => (\n <option key={c} value={c}>\n {c}\n </option>\n ))}\n </select>\n <ChevronDown\n className=\"pointer-events-none absolute right-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground opacity-80\"\n aria-hidden\n />\n </div>\n\n <input\n id={id}\n type=\"number\"\n value={amount}\n onChange={(e) => onAmountChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n min=\"0\"\n step=\"0.01\"\n className=\"min-h-0 min-w-0 flex-1 bg-transparent px-4 py-3 text-[15px] tabular-nums text-foreground placeholder:text-muted-foreground focus:outline-none disabled:opacity-50\"\n />\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst cardVariants = cva(\"flex flex-col rounded-xl border border-border bg-card text-card-foreground shadow-sm\", {\n variants: {\n size: {\n default: \"gap-10 px-10 py-10\",\n sm: \"gap-6 px-7 py-7\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n});\n\nfunction Card({\n className,\n size,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof cardVariants>) {\n return (\n <div\n data-slot=\"card\"\n className={cn(cardVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-4 px-0 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-lg font-semibold leading-snug tracking-tight\", className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm leading-relaxed text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"px-0\", className)} {...props} />;\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex flex-wrap items-center gap-3 border-t border-border px-0 pt-8 pb-0 sm:gap-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport { cn } from \"./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 ref={ref} className={cn(\"relative overflow-hidden\", className)} {...props}>\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">{children}</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-px\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-px\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border hover:bg-muted-foreground/30\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SideNavProps extends React.ComponentPropsWithoutRef<\"aside\"> {\n /** \"collapsed\" renders icon-only at 60px; \"expanded\" renders full at 240px (default) */\n width?: \"collapsed\" | \"expanded\";\n /** Controlled collapsed state */\n isCollapsed?: boolean;\n /** Called when the sidebar requests a collapse/expand */\n onCollapse?: (collapsed: boolean) => void;\n}\n\nexport interface SideNavItemProps extends React.ComponentPropsWithoutRef<\"a\"> {\n /** Icon element — required, rendered at size-4 shrink-0 */\n icon: React.ReactNode;\n /** Visible label — hidden when sidebar is collapsed */\n label: string;\n /** Highlights the item as the current route */\n isActive?: boolean;\n /** Navigable href — renders an <a> when provided */\n href?: string;\n /** Click handler */\n onClick?: React.MouseEventHandler<HTMLElement>;\n /** Optional badge slot rendered after the label */\n badge?: React.ReactNode;\n /** Injected by SideNavSection — consumers should not pass this */\n _collapsed?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface SideNavContextValue {\n isCollapsed: boolean;\n}\n\nconst SideNavContext = React.createContext<SideNavContextValue>({\n isCollapsed: false,\n});\n\nfunction useSideNavContext() {\n return React.useContext(SideNavContext);\n}\n\n// ---------------------------------------------------------------------------\n// SideNav\n// ---------------------------------------------------------------------------\n\nconst SideNav = React.forwardRef<HTMLElement, SideNavProps>(\n (\n {\n className,\n width = \"expanded\",\n isCollapsed: isCollapsedProp,\n onCollapse,\n children,\n ...props\n },\n ref\n ) => {\n const collapsed =\n isCollapsedProp !== undefined ? isCollapsedProp : width === \"collapsed\";\n\n return (\n <SideNavContext.Provider value={{ isCollapsed: collapsed }}>\n <aside\n ref={ref}\n data-slot=\"side-nav\"\n data-collapsed={collapsed}\n className={cn(\n \"flex flex-col bg-sidebar border-r border-sidebar-border\",\n \"transition-all duration-pg-normal ease-pg-standard\",\n collapsed ? \"w-[60px]\" : \"w-[240px]\",\n className\n )}\n {...props}\n >\n {children}\n </aside>\n </SideNavContext.Provider>\n );\n }\n);\nSideNav.displayName = \"SideNav\";\n\n// ---------------------------------------------------------------------------\n// SideNavHeader\n// ---------------------------------------------------------------------------\n\nconst SideNavHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"side-nav-header\"\n className={cn(\n \"px-4 py-4 border-b border-sidebar-border shrink-0\",\n className\n )}\n {...props}\n />\n));\nSideNavHeader.displayName = \"SideNavHeader\";\n\n// ---------------------------------------------------------------------------\n// SideNavSection\n// ---------------------------------------------------------------------------\n\ninterface SideNavSectionProps extends React.ComponentPropsWithoutRef<\"div\"> {\n /** Optional section label — hidden when sidebar is collapsed */\n label?: string;\n}\n\nconst SideNavSection = React.forwardRef<HTMLDivElement, SideNavSectionProps>(\n ({ className, label, children, ...props }, ref) => {\n const { isCollapsed } = useSideNavContext();\n\n return (\n <div\n ref={ref}\n data-slot=\"side-nav-section\"\n className={cn(\"px-3 py-2\", className)}\n {...props}\n >\n {label && !isCollapsed && (\n <p className=\"mb-1 px-3 text-xs font-medium text-muted-foreground uppercase tracking-wider select-none\">\n {label}\n </p>\n )}\n {children}\n </div>\n );\n }\n);\nSideNavSection.displayName = \"SideNavSection\";\n\n// ---------------------------------------------------------------------------\n// SideNavItem\n// ---------------------------------------------------------------------------\n\nconst SideNavItem = React.forwardRef<HTMLAnchorElement, SideNavItemProps>(\n (\n {\n className,\n icon,\n label,\n isActive = false,\n href,\n onClick,\n badge,\n _collapsed,\n children,\n ...props\n },\n ref\n ) => {\n const { isCollapsed } = useSideNavContext();\n const collapsed = _collapsed !== undefined ? _collapsed : isCollapsed;\n\n const baseClassName = cn(\n \"flex items-center gap-3 px-3 py-2 rounded-lg text-sm cursor-pointer\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n isActive\n ? \"bg-primary/10 text-primary font-medium\"\n : \"text-sidebar-foreground hover:bg-muted/50\",\n collapsed && \"justify-center px-0\",\n className\n );\n\n const content = (\n <>\n <span className=\"size-4 shrink-0 flex items-center justify-center\">\n {icon}\n </span>\n {!collapsed && (\n <>\n <span className=\"flex-1 truncate\">{label}</span>\n {badge && <span className=\"shrink-0\">{badge}</span>}\n </>\n )}\n </>\n );\n\n if (href) {\n return (\n <a\n ref={ref}\n href={href}\n title={collapsed ? label : undefined}\n aria-current={isActive ? \"page\" : undefined}\n className={baseClassName}\n onClick={onClick as React.MouseEventHandler<HTMLAnchorElement>}\n {...props}\n >\n {content}\n </a>\n );\n }\n\n return (\n <a\n ref={ref}\n role=\"button\"\n tabIndex={0}\n title={collapsed ? label : undefined}\n aria-current={isActive ? \"page\" : undefined}\n className={baseClassName}\n onClick={onClick as React.MouseEventHandler<HTMLAnchorElement>}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.(e as unknown as React.MouseEvent<HTMLElement>);\n }\n }}\n {...props}\n >\n {content}\n </a>\n );\n }\n);\nSideNavItem.displayName = \"SideNavItem\";\n\n// ---------------------------------------------------------------------------\n// SideNavFooter\n// ---------------------------------------------------------------------------\n\nconst SideNavFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"side-nav-footer\"\n className={cn(\n \"mt-auto border-t border-sidebar-border px-3 py-3 shrink-0\",\n className\n )}\n {...props}\n />\n));\nSideNavFooter.displayName = \"SideNavFooter\";\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport {\n SideNav,\n SideNavHeader,\n SideNavSection,\n SideNavItem,\n SideNavFooter,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\"> & {\n separator?: React.ReactNode;\n }\n>(({ className, ...props }, ref) => (\n <nav\n ref={ref}\n aria-label=\"breadcrumb\"\n className={cn(\"\", className)}\n {...props}\n />\n));\nBreadcrumb.displayName = \"Breadcrumb\";\n\nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n 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\",\n className\n )}\n {...props}\n />\n));\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n));\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\">\n>(({ className, ...props }, ref) => (\n <a\n ref={ref}\n className={cn(\n \"text-sm text-muted-foreground transition-colors duration-pg-fast ease-pg-standard hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 rounded-sm\",\n className\n )}\n {...props}\n />\n));\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-current=\"page\"\n aria-disabled=\"true\"\n className={cn(\"text-sm font-medium text-foreground\", className)}\n {...props}\n />\n));\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: 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 className=\"text-muted-foreground\" />}\n </li>\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4 text-muted-foreground\" />\n <span className=\"sr-only\">More</span>\n </span>\n);\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Pagination (nav wrapper)\n// ---------------------------------------------------------------------------\n\nexport interface PaginationProps extends React.ComponentPropsWithoutRef<\"nav\"> {}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n ({ className, ...props }, ref) => (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n )\n);\nPagination.displayName = \"Pagination\";\n\n// ---------------------------------------------------------------------------\n// PaginationContent (ul)\n// ---------------------------------------------------------------------------\n\nexport interface PaginationContentProps\n extends React.ComponentPropsWithoutRef<\"ul\"> {}\n\nexport const PaginationContent = forwardRef<\n HTMLUListElement,\n PaginationContentProps\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n));\nPaginationContent.displayName = \"PaginationContent\";\n\n// ---------------------------------------------------------------------------\n// PaginationItem (li)\n// ---------------------------------------------------------------------------\n\nexport interface PaginationItemProps\n extends React.ComponentPropsWithoutRef<\"li\"> {}\n\nexport const PaginationItem = forwardRef<HTMLLIElement, PaginationItemProps>(\n ({ className, ...props }, ref) => (\n <li ref={ref} className={cn(\"list-none\", className)} {...props} />\n )\n);\nPaginationItem.displayName = \"PaginationItem\";\n\n// ---------------------------------------------------------------------------\n// PaginationLink (anchor / button-like)\n// ---------------------------------------------------------------------------\n\nexport interface PaginationLinkProps\n extends React.ComponentPropsWithoutRef<\"a\"> {\n isActive?: boolean;\n}\n\nexport const PaginationLink = forwardRef<HTMLAnchorElement, PaginationLinkProps>(\n ({ className, isActive = false, ...props }, ref) => (\n <a\n ref={ref}\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n // base\n \"h-9 w-9 inline-flex items-center justify-center rounded-lg text-sm font-medium border\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"cursor-pointer select-none\",\n // active\n isActive\n ? \"bg-primary text-primary-foreground border-primary shadow-sm\"\n : \"text-muted-foreground border-border hover:bg-muted hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n);\nPaginationLink.displayName = \"PaginationLink\";\n\n// ---------------------------------------------------------------------------\n// PaginationPrevious\n// ---------------------------------------------------------------------------\n\nexport interface PaginationPreviousProps\n extends React.ComponentPropsWithoutRef<\"a\"> {\n disabled?: boolean;\n}\n\nexport const PaginationPrevious = forwardRef<\n HTMLAnchorElement,\n PaginationPreviousProps\n>(({ className, disabled, ...props }, ref) => (\n <a\n ref={ref}\n aria-label=\"Go to previous page\"\n aria-disabled={disabled}\n className={cn(\n \"h-9 px-3 inline-flex items-center justify-center gap-1.5 rounded-lg text-sm font-medium border border-border\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"cursor-pointer select-none\",\n disabled\n ? \"cursor-not-allowed opacity-50 pointer-events-none text-muted-foreground border-border\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\",\n className\n )}\n {...props}\n >\n <ChevronLeft className=\"size-4\" />\n <span>Previous</span>\n </a>\n));\nPaginationPrevious.displayName = \"PaginationPrevious\";\n\n// ---------------------------------------------------------------------------\n// PaginationNext\n// ---------------------------------------------------------------------------\n\nexport interface PaginationNextProps\n extends React.ComponentPropsWithoutRef<\"a\"> {\n disabled?: boolean;\n}\n\nexport const PaginationNext = forwardRef<\n HTMLAnchorElement,\n PaginationNextProps\n>(({ className, disabled, ...props }, ref) => (\n <a\n ref={ref}\n aria-label=\"Go to next page\"\n aria-disabled={disabled}\n className={cn(\n \"h-9 px-3 inline-flex items-center justify-center gap-1.5 rounded-lg text-sm font-medium border border-border\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"cursor-pointer select-none\",\n disabled\n ? \"cursor-not-allowed opacity-50 pointer-events-none text-muted-foreground border-border\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\",\n className\n )}\n {...props}\n >\n <span>Next</span>\n <ChevronRight className=\"size-4\" />\n </a>\n));\nPaginationNext.displayName = \"PaginationNext\";\n\n// ---------------------------------------------------------------------------\n// PaginationEllipsis\n// ---------------------------------------------------------------------------\n\nexport interface PaginationEllipsisProps\n extends React.ComponentPropsWithoutRef<\"span\"> {}\n\nexport const PaginationEllipsis = forwardRef<\n HTMLSpanElement,\n PaginationEllipsisProps\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n aria-hidden\n className={cn(\n \"h-9 w-9 inline-flex items-center justify-center text-muted-foreground\",\n className\n )}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n));\nPaginationEllipsis.displayName = \"PaginationEllipsis\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"./utils\";\n\nconst linkVariants = cva(\n [\n \"inline-flex items-center gap-1 transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 rounded-sm\",\n \"aria-disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:pointer-events-none\",\n ],\n {\n variants: {\n variant: {\n default: \"text-primary underline-offset-4 hover:underline\",\n subtle: \"text-muted-foreground hover:text-foreground\",\n nav: \"text-foreground hover:text-primary\",\n },\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\nexport interface LinkProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement>,\n VariantProps<typeof linkVariants> {\n asChild?: boolean;\n}\n\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n href,\n target,\n rel,\n children,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"a\";\n\n const isExternal =\n typeof href === \"string\" && href.startsWith(\"http\");\n\n const externalProps = isExternal\n ? {\n target: target ?? \"_blank\",\n rel: rel ?? \"noreferrer\",\n }\n : { target, rel };\n\n return (\n <Comp\n ref={ref}\n href={href}\n className={cn(linkVariants({ variant, size }), className)}\n {...externalProps}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\nLink.displayName = \"Link\";\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\n\ndeclare module 'react' {\n interface ReactElement {\n $$typeof?: symbol | string;\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\nexport type Usable<T> = PromiseLike<T> | React.Context<T>;\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n let slottableElement: React.ReactElement | null = null;\n let hasSlottable = false;\n const newChildren: React.ReactNode[] = [];\n\n if (isLazyComponent(children) && typeof use === 'function') {\n children = use(children._payload);\n }\n\n React.Children.forEach(children, (maybeSlottable) => {\n if (isSlottable(maybeSlottable)) {\n hasSlottable = true;\n const slottable = maybeSlottable;\n let child = 'child' in slottable.props ? slottable.props.child : slottable.props.children;\n\n if (isLazyComponent(child) && typeof use === 'function') {\n child = use(child._payload);\n }\n\n slottableElement = getSlottableElementFromSlottable(slottable, child);\n newChildren.push((slottableElement?.props as any)?.children);\n } else {\n newChildren.push(maybeSlottable);\n }\n });\n\n if (slottableElement) {\n slottableElement = React.cloneElement(slottableElement, undefined, newChildren);\n } else if (\n // A `Slottable` was found but it didn't resolve to a single element (e.g.\n // it wrapped multiple elements, text, or a render-prop `child` that\n // wasn't an element). Don't fall back to treating the `Slottable` wrapper\n // itself as the slot target — throw a descriptive error below instead.\n !hasSlottable &&\n React.Children.count(children) === 1 &&\n React.isValidElement(children)\n ) {\n slottableElement = children;\n }\n\n const slottableElementRef = slottableElement ? getElementRef(slottableElement) : undefined;\n const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n\n if (!slottableElement) {\n // Empty/falsy children (`null`, `undefined`, `false`, no children, etc.) are valid and\n // render nothing. Anything else is content we couldn't slot onto a single element, which\n // is a usage error, so we fail loudly with a clear message.\n if (children || children === 0) {\n throw new Error(\n hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName),\n );\n }\n return children;\n }\n\n const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n\n // do not pass ref to React.Fragment for React 19 compatibility\n if (slottableElement.type !== React.Fragment) {\n mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n }\n\n return React.cloneElement(slottableElement, mergedProps);\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol.for('radix.slottable');\n\ntype SlottableChildrenProps = { children: React.ReactNode };\ntype SlottableRenderFnProps = {\n child: React.ReactNode;\n children: (slottable: React.ReactNode) => React.ReactNode;\n};\n\ntype SlottableProps = SlottableRenderFnProps | SlottableChildrenProps;\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = (props) =>\n 'child' in props ? props.children(props.child) : props.children;\n\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* -------------------------------------------------------------------------------------------------\n * getSlottableElementFromSlottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst getSlottableElementFromSlottable = (slottable: SlottableElement, child: React.ReactNode) => {\n if ('child' in slottable.props) {\n const child = slottable.props.child;\n if (!React.isValidElement<React.PropsWithChildren>(child)) return null;\n return React.cloneElement(child, undefined, slottable.props.children(child.props.children));\n }\n\n return React.isValidElement(child) ? child : null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * mergeProps\n * -----------------------------------------------------------------------------------------------*/\n\ntype AnyProps = Record<string, any>;\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * getElementRef\n * -----------------------------------------------------------------------------------------------*/\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype SlottableElement = React.ReactElement<SlottableProps, SlottableComponent>;\n\nfunction isSlottable(\n child: React.ReactNode,\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nconst REACT_LAZY_TYPE = Symbol.for('react.lazy');\n\ninterface LazyReactElement extends React.ReactElement {\n $$typeof: typeof REACT_LAZY_TYPE;\n _payload: PromiseLike<Exclude<React.ReactNode, PromiseLike<any>>>;\n}\n\nfunction isLazyComponent(element: React.ReactNode): element is LazyReactElement {\n return (\n element != null &&\n typeof element === 'object' &&\n '$$typeof' in element &&\n element.$$typeof === REACT_LAZY_TYPE &&\n '_payload' in element &&\n isPromiseLike(element._payload)\n );\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return typeof value === 'object' && value !== null && 'then' in value;\n}\n\nconst createSlotError = (ownerName: string) => {\n return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n};\n\nconst createSlottableError = (ownerName: string) => {\n return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n};\n\nconst use: typeof React.use | undefined = (React as any)[' use '.trim().toString()];\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == 'function') {\n hasCleanup = true;\n }\n return cleanup;\n });\n\n // React <19 will log an error to the console if a callback ref returns a\n // value. We don't use ref cleanups internally so this will only happen if a\n // user's ref callback returns a value, which we only expect if they are\n // using the cleanup functionality added in React 19.\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == 'function') {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: \"default\" | \"secondary\" | \"success\" | \"warning\" | \"error\" | \"outline\";\n size?: \"sm\" | \"md\" | \"lg\";\n square?: boolean;\n dot?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n}\n\nconst variantClasses: Record<NonNullable<BadgeProps[\"variant\"]>, string> = {\n default:\n \"bg-primary/10 text-primary border border-primary/20\",\n secondary:\n \"bg-muted text-muted-foreground border border-border\",\n success:\n \"bg-green-500/10 text-green-700 border border-green-500/20 dark:text-green-400\",\n warning:\n \"bg-amber-500/10 text-amber-700 border border-amber-500/20 dark:text-amber-400\",\n error:\n \"bg-red-500/10 text-red-700 border border-red-500/20 dark:text-red-400\",\n outline:\n \"bg-transparent text-foreground border border-border\",\n};\n\nconst sizeClasses: Record<NonNullable<BadgeProps[\"size\"]>, string> = {\n sm: \"text-[10px] px-1.5 py-0.5 gap-1\",\n md: \"text-xs px-2 py-0.5 gap-1\",\n lg: \"text-sm px-2.5 py-1 gap-1.5\",\n};\n\nconst dotColorClasses: Record<NonNullable<BadgeProps[\"variant\"]>, string> = {\n default: \"bg-primary\",\n secondary: \"bg-muted-foreground\",\n success: \"bg-green-500\",\n warning: \"bg-amber-500\",\n error: \"bg-red-500\",\n outline: \"bg-foreground\",\n};\n\nconst dotSizeClasses: Record<NonNullable<BadgeProps[\"size\"]>, string> = {\n sm: \"size-1.5\",\n md: \"size-1.5\",\n lg: \"size-2\",\n};\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n variant = \"default\",\n size = \"md\",\n square = false,\n dot = false,\n leftIcon,\n rightIcon,\n children,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center font-medium whitespace-nowrap transition-colors duration-pg-fast ease-pg-standard\",\n square ? \"rounded-md\" : \"rounded-full\",\n variantClasses[variant],\n sizeClasses[size],\n className\n )}\n {...props}\n >\n {dot && (\n <span\n className={cn(\n \"rounded-full flex-shrink-0\",\n dotSizeClasses[size],\n dotColorClasses[variant]\n )}\n />\n )}\n {!dot && leftIcon && (\n <span className=\"inline-flex items-center flex-shrink-0\">{leftIcon}</span>\n )}\n {children}\n {rightIcon && (\n <span className=\"inline-flex items-center flex-shrink-0\">{rightIcon}</span>\n )}\n </span>\n );\n }\n);\nBadge.displayName = \"Badge\";\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface LozengeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: \"default\" | \"inprogress\" | \"success\" | \"moved\" | \"new\" | \"removed\";\n isBold?: boolean;\n maxWidth?: number | string;\n}\n\nconst variantClasses: Record<NonNullable<LozengeProps[\"variant\"]>, string> = {\n default: \"bg-muted text-muted-foreground\",\n inprogress: \"bg-blue-500/15 text-blue-700 dark:text-blue-300\",\n success: \"bg-green-500/15 text-green-700 dark:text-green-300\",\n moved: \"bg-purple-500/15 text-purple-700 dark:text-purple-300\",\n new: \"bg-teal-500/15 text-teal-700 dark:text-teal-300\",\n removed: \"bg-red-500/15 text-red-700 dark:text-red-300\",\n};\n\nexport const Lozenge = forwardRef<HTMLSpanElement, LozengeProps>(\n (\n {\n variant = \"default\",\n isBold = false,\n maxWidth,\n children,\n className,\n style,\n ...props\n },\n ref\n ) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center rounded-sm px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wide whitespace-nowrap transition-colors duration-pg-fast ease-pg-standard\",\n variantClasses[variant],\n isBold && \"ring-1 ring-current/30\",\n className\n )}\n style={\n maxWidth !== undefined\n ? { maxWidth, overflow: \"hidden\", textOverflow: \"ellipsis\", ...style }\n : style\n }\n {...props}\n >\n <span\n className={cn(\n maxWidth !== undefined ? \"truncate\" : undefined\n )}\n >\n {children}\n </span>\n </span>\n );\n }\n);\nLozenge.displayName = \"Lozenge\";\n","import * as React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type TagColorScheme = \"neutral\" | \"blue\" | \"green\" | \"amber\" | \"red\" | \"purple\";\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n colorScheme?: TagColorScheme;\n onRemove?: () => void;\n disabled?: boolean;\n}\n\nconst colorClasses: Record<TagColorScheme, string> = {\n neutral: \"bg-card border-border text-foreground\",\n blue: \"bg-blue-500/10 border-blue-500/20 text-blue-700 dark:text-blue-300\",\n green: \"bg-green-500/10 border-green-500/20 text-green-700 dark:text-green-300\",\n amber: \"bg-amber-500/10 border-amber-500/20 text-amber-700 dark:text-amber-300\",\n red: \"bg-red-500/10 border-red-500/20 text-red-700 dark:text-red-300\",\n purple: \"bg-purple-500/10 border-purple-500/20 text-purple-700 dark:text-purple-300\",\n};\n\nconst Tag = React.forwardRef<HTMLSpanElement, TagProps>(\n ({ className, colorScheme = \"neutral\", onRemove, disabled, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs font-medium transition-colors\", colorClasses[colorScheme], disabled && \"opacity-50 cursor-not-allowed\", className)}\n {...props}\n >\n {children}\n {onRemove && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n className=\"ml-0.5 rounded-sm opacity-60 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n aria-label=\"Remove\"\n >\n <X className=\"size-3\" />\n </button>\n )}\n </span>\n )\n);\nTag.displayName = \"Tag\";\n\nexport interface TagGroupProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst TagGroup = React.forwardRef<HTMLDivElement, TagGroupProps>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"flex flex-wrap gap-1.5\", className)} {...props} />\n);\nTagGroup.displayName = \"TagGroup\";\n\nexport { Tag, TagGroup };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check, X, RefreshCw, Clock, AlertCircle, ArrowRight, Info } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type BadgeVariant =\n | \"success\"\n | \"info\"\n | \"warning\"\n | \"refund\"\n | \"danger\"\n | \"orange\"\n | \"muted\";\n\nexport type BadgeTrailIcon =\n | \"check\"\n | \"x\"\n | \"refresh\"\n | \"clock\"\n | \"alert\"\n | \"arrow-right\"\n | \"info\";\n\n/* Light: low-opacity hue-matched borders. Dark: stronger borders for contrast on dark surfaces. */\nconst VARIANT_CLASS: Record<BadgeVariant, string> = {\n success:\n \"bg-emerald-500/10 text-emerald-800 border-emerald-600/10 dark:bg-emerald-500/35 dark:text-emerald-50 dark:border-emerald-400/70\",\n info: \"bg-blue-500/10 text-blue-800 border-blue-600/10 dark:bg-sky-500/30 dark:text-sky-50 dark:border-sky-400/65\",\n warning:\n \"bg-amber-500/10 text-amber-900 border-amber-600/10 dark:bg-amber-500/35 dark:text-amber-50 dark:border-amber-400/70\",\n refund:\n \"bg-yellow-500/10 text-yellow-900 border-yellow-600/10 dark:bg-violet-500/30 dark:text-violet-100 dark:border-violet-400/60\",\n danger:\n \"bg-red-500/10 text-red-800 border-red-600/10 dark:bg-red-500/35 dark:text-red-50 dark:border-red-400/70\",\n orange:\n \"bg-orange-500/10 text-orange-900 border-orange-600/10 dark:bg-orange-500/35 dark:text-orange-50 dark:border-orange-400/65\",\n muted:\n \"bg-muted text-muted-foreground border-border/40 dark:bg-zinc-800/90 dark:text-zinc-200 dark:border-zinc-500/45\",\n};\n\nexport interface StatusBadgeProps {\n variant: BadgeVariant;\n label: string;\n trailIcon?: BadgeTrailIcon;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nexport const StatusBadge = React.forwardRef<HTMLSpanElement, StatusBadgeProps>(\n ({ variant, label, trailIcon, size = \"md\", className }, ref) => {\n const iSize = size === \"sm\" ? 11 : 12;\n const iProps = {\n width: iSize,\n height: iSize,\n strokeWidth: 2.5,\n style: { flexShrink: 0 },\n } as const;\n\n const icon =\n trailIcon === \"check\" ? <Check {...iProps} /> :\n trailIcon === \"x\" ? <X {...iProps} strokeWidth={3} /> :\n trailIcon === \"refresh\" ? <RefreshCw {...{ ...iProps, strokeWidth: 2 }} /> :\n trailIcon === \"clock\" ? <Clock {...iProps} strokeWidth={2} /> :\n trailIcon === \"alert\" ? <AlertCircle {...iProps} strokeWidth={2} /> :\n trailIcon === \"arrow-right\" ? <ArrowRight {...iProps} strokeWidth={2.5} /> :\n trailIcon === \"info\" ? <Info {...iProps} strokeWidth={2.5} /> :\n null;\n\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-1.5 font-medium border whitespace-nowrap rounded-md\",\n VARIANT_CLASS[variant],\n size === \"sm\" ? \"text-[11px] px-2 py-[2px]\" : \"text-[13px] px-3 py-[5px]\",\n className\n )}\n >\n {label}\n {icon}\n </span>\n );\n }\n);\nStatusBadge.displayName = \"StatusBadge\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface BlanketProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controls visibility of the blanket */\n open?: boolean;\n /** Adds semi-transparent black background (default: true) */\n isTinted?: boolean;\n /** Makes blanket completely transparent — only blocks pointer events */\n isTransparent?: boolean;\n /** Called when the blanket is clicked */\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n /** When true, pointer events pass through the blanket */\n shouldAllowClickThrough?: boolean;\n}\n\nconst Blanket = React.forwardRef<HTMLDivElement, BlanketProps>(\n (\n {\n open = true,\n isTinted = true,\n isTransparent = false,\n onClick,\n shouldAllowClickThrough = false,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n data-open={open}\n aria-hidden=\"true\"\n onClick={onClick}\n className={cn(\n \"fixed inset-0 z-40\",\n // Animate in/out\n \"data-[open=true]:animate-in data-[open=false]:animate-out\",\n \"data-[open=true]:fade-in-0 data-[open=false]:fade-out-0\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n // Visibility\n !open && \"pointer-events-none\",\n // Background\n !isTransparent && isTinted && \"bg-black/50 backdrop-blur-sm\",\n isTransparent && \"bg-transparent\",\n // Click-through\n shouldAllowClickThrough && \"pointer-events-none\",\n className\n )}\n {...props}\n />\n );\n }\n);\n\nBlanket.displayName = \"Blanket\";\n\nexport { Blanket };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { X, ChevronLeft, ChevronRight, Check } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface SpotlightStep {\n title: string;\n body: string;\n image?: React.ReactNode;\n}\n\nexport interface SpotlightCardProps {\n title: string;\n body: string;\n image?: React.ReactNode;\n currentStep?: number;\n totalSteps?: number;\n onNext?: () => void;\n onBack?: () => void;\n onDismiss?: () => void;\n nextLabel?: string;\n className?: string;\n}\n\nconst SpotlightCard = React.forwardRef<HTMLDivElement, SpotlightCardProps>(\n ({ title, body, image, currentStep, totalSteps, onNext, onBack, onDismiss, nextLabel, className }, ref) => {\n const isLast = currentStep !== undefined && totalSteps !== undefined && currentStep >= totalSteps - 1;\n return (\n <div ref={ref} className={cn(\"bg-card border border-border rounded-xl shadow-xl p-5 w-72\", className)}>\n {onDismiss && (\n <button\n onClick={onDismiss}\n className=\"absolute top-3 right-3 rounded-md p-1 text-muted-foreground hover:text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n {image && <div className=\"mb-4\">{image}</div>}\n <h3 className=\"font-semibold text-base text-foreground pr-6\">{title}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground leading-relaxed\">{body}</p>\n <div className=\"flex items-center justify-between mt-4\">\n <div className=\"flex items-center gap-2\">\n {totalSteps && totalSteps > 1 && (\n <>\n <span className=\"text-xs text-muted-foreground\">{(currentStep ?? 0) + 1} of {totalSteps}</span>\n <div className=\"flex gap-1\">\n {Array.from({ length: totalSteps }).map((_, i) => (\n <span\n key={i}\n className={cn(\n \"rounded-full transition-all duration-pg-fast\",\n i === (currentStep ?? 0)\n ? \"w-4 h-1.5 bg-primary\"\n : \"w-1.5 h-1.5 bg-muted-foreground/30\"\n )}\n />\n ))}\n </div>\n </>\n )}\n </div>\n <div className=\"flex gap-2\">\n {onBack && (currentStep ?? 0) > 0 && (\n <button\n onClick={onBack}\n className=\"inline-flex items-center gap-1 h-8 px-3 rounded-lg text-xs font-medium text-muted-foreground hover:bg-muted transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n >\n <ChevronLeft className=\"size-3\" /> Back\n </button>\n )}\n {onNext && (\n <button\n onClick={onNext}\n className=\"inline-flex items-center gap-1 h-8 px-3 rounded-lg text-xs font-medium bg-primary text-primary-foreground hover:bg-[var(--primary-hover)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n >\n {isLast ? (\n <><Check className=\"size-3\" /> {nextLabel ?? \"Done\"}</>\n ) : (\n <>{nextLabel ?? \"Next\"} <ChevronRight className=\"size-3\" /></>\n )}\n </button>\n )}\n </div>\n </div>\n </div>\n );\n }\n);\nSpotlightCard.displayName = \"SpotlightCard\";\n\nexport interface SpotlightProps {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n className?: string;\n}\n\nconst Spotlight = ({ isOpen, onClose, children, className }: SpotlightProps) => {\n if (!isOpen) return null;\n return (\n <div className=\"fixed inset-0 z-50\">\n <div className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\" onClick={onClose} />\n <div className={cn(\"relative z-10 flex items-center justify-center min-h-full p-4\", className)}>\n {children}\n </div>\n </div>\n );\n};\nSpotlight.displayName = \"Spotlight\";\n\nexport interface UseSpotlightReturn {\n isOpen: boolean;\n currentStep: number;\n open: () => void;\n close: () => void;\n goNext: () => void;\n goBack: () => void;\n goTo: (step: number) => void;\n}\n\nexport function useSpotlight(steps: SpotlightStep[], initialStep = 0): UseSpotlightReturn {\n const [isOpen, setIsOpen] = React.useState(false);\n const [currentStep, setCurrentStep] = React.useState(initialStep);\n\n return {\n isOpen,\n currentStep,\n open: () => { setCurrentStep(initialStep); setIsOpen(true); },\n close: () => setIsOpen(false),\n goNext: () => {\n if (currentStep >= steps.length - 1) setIsOpen(false);\n else setCurrentStep(s => s + 1);\n },\n goBack: () => setCurrentStep(s => Math.max(0, s - 1)),\n goTo: (step) => setCurrentStep(Math.max(0, Math.min(step, steps.length - 1))),\n };\n}\n\nexport { Spotlight, SpotlightCard };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nfunction DialogOverlay({ className, ...props }: ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-[100] min-h-[100dvh] w-full bg-black/50 backdrop-blur-[2px]\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-200\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showClose = true,\n overlayClassName,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Content> & {\n showClose?: boolean;\n overlayClassName?: string;\n}) {\n return (\n <DialogPortal>\n <DialogOverlay className={overlayClassName} />\n <DialogPrimitive.Content\n className={cn(\n \"fixed left-1/2 top-1/2 z-[101] w-[calc(100%-1.5rem)] max-w-[min(100%,26rem)] -translate-x-1/2 -translate-y-1/2\",\n // Default padding reserves space for the close button.\n // Pass p-0 in className to opt out (manage padding per section).\n \"rounded-2xl border border-border bg-card p-6 pt-10 text-card-foreground shadow-2xl outline-none\",\n \"max-h-[min(90vh,720px)] overflow-y-auto\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 data-[state=open]:scale-100 data-[state=closed]:scale-[0.98]\",\n \"transition-[opacity,transform] duration-200 ease-out\",\n className\n )}\n {...props}\n >\n {children}\n {showClose && (\n <DialogPrimitive.Close\n className=\"absolute right-3 top-3 inline-flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground transition-colors\"\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogTitle({ className, ...props }: ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n className={cn(\"text-lg font-semibold text-foreground tracking-tight pr-10\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({ className, ...props }: ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description className={cn(\"text-[13px] text-muted-foreground mt-1\", className)} {...props} />\n );\n}\n\nexport { Dialog, DialogTrigger, DialogPortal, DialogClose, DialogContent, DialogTitle, DialogDescription };\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 \"./utils\";\n\ntype DrawerSide = \"right\" | \"left\" | \"top\" | \"bottom\";\nconst DrawerContext = React.createContext<{ side: DrawerSide }>({ side: \"right\" });\n\ninterface DrawerProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root> { side?: DrawerSide; }\n\nconst Drawer = ({ side = \"right\", children, ...props }: DrawerProps) => (\n <DrawerContext.Provider value={{ side }}>\n <DialogPrimitive.Root {...props}>{children}</DialogPrimitive.Root>\n </DrawerContext.Provider>\n);\nDrawer.displayName = \"Drawer\";\n\nconst DrawerTrigger = DialogPrimitive.Trigger;\nconst DrawerClose = DialogPrimitive.Close;\n\nconst DrawerOverlay = 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(\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className)}\n {...props}\n />\n));\nDrawerOverlay.displayName = \"DrawerOverlay\";\n\nconst sideClasses: Record<DrawerSide, string> = {\n right: \"inset-y-0 right-0 h-full w-80 sm:w-96 border-l data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right\",\n left: \"inset-y-0 left-0 h-full w-80 sm:w-96 border-r data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left\",\n top: \"inset-x-0 top-0 w-full border-b rounded-b-2xl data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top\",\n bottom: \"inset-x-0 bottom-0 w-full border-t rounded-t-2xl max-h-[85vh] data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom\",\n};\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n const { side } = React.useContext(DrawerContext);\n return (\n <DialogPrimitive.Portal>\n <DrawerOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\"fixed z-50 flex flex-col bg-card border-border shadow-xl transition-all duration-pg-normal ease-pg-standard data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-200\", sideClasses[side], className)}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-md p-1 text-muted-foreground opacity-70 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\">\n <X className=\"size-4\" /><span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"px-6 pt-6 pb-4 border-b border-border\", className)} {...props} />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"px-6 py-4 border-t border-border flex gap-2 justify-end mt-auto\", className)} {...props} />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} className={cn(\"text-base font-semibold text-foreground pr-6\", className)} {...props} />\n));\nDrawerTitle.displayName = \"DrawerTitle\";\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn(\"mt-1 text-sm text-muted-foreground\", className)} {...props} />\n));\nDrawerDescription.displayName = \"DrawerDescription\";\n\nexport { Drawer, DrawerTrigger, DrawerClose, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"./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 = 6, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-[120] w-72 rounded-xl border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\",\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 * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"./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 = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-[130] max-w-xs overflow-hidden rounded-lg border border-border bg-popover px-3 py-2 text-sm leading-snug text-popover-foreground shadow-md\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { forwardRef, type AnchorHTMLAttributes, type ButtonHTMLAttributes, type HTMLAttributes, type ReactNode } from \"react\";\n\n// ─── MenuDivider ─────────────────────────────────────────────────────────────\n\nexport const MenuDivider = forwardRef<HTMLHRElement, HTMLAttributes<HTMLHRElement>>(\n ({ className, ...props }, ref) => (\n <hr\n ref={ref}\n className={cn(\"h-px bg-border border-none my-1\", className)}\n {...props}\n />\n )\n);\nMenuDivider.displayName = \"MenuDivider\";\n\n// ─── MenuSection ─────────────────────────────────────────────────────────────\n\nexport interface MenuSectionProps extends HTMLAttributes<HTMLDivElement> {\n label?: string;\n children: ReactNode;\n}\n\nexport const MenuSection = forwardRef<HTMLDivElement, MenuSectionProps>(\n ({ label, children, className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col\", className)} {...props}>\n {label && (\n <span className=\"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground px-2 py-1.5 mt-2 first:mt-0 select-none\">\n {label}\n </span>\n )}\n {children}\n </div>\n )\n);\nMenuSection.displayName = \"MenuSection\";\n\n// ─── MenuItem ────────────────────────────────────────────────────────────────\n\ntype MenuItemBaseProps = {\n icon?: ReactNode;\n rightContent?: ReactNode;\n isSelected?: boolean;\n isDanger?: boolean;\n};\n\ntype MenuItemButtonProps = MenuItemBaseProps &\n ButtonHTMLAttributes<HTMLButtonElement> & {\n href?: undefined;\n };\n\ntype MenuItemAnchorProps = MenuItemBaseProps &\n AnchorHTMLAttributes<HTMLAnchorElement> & {\n href: string;\n };\n\nexport type MenuItemProps = MenuItemButtonProps | MenuItemAnchorProps;\n\nconst menuItemBaseClasses =\n \"flex items-center gap-2.5 px-2 py-2 rounded-lg text-sm transition-colors duration-pg-fast ease-pg-standard w-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\";\n\nexport const MenuItem = forwardRef<HTMLButtonElement | HTMLAnchorElement, MenuItemProps>(\n (props, ref) => {\n const {\n icon,\n rightContent,\n isSelected,\n isDanger,\n children,\n className,\n ...rest\n } = props;\n\n const resolvedClasses = cn(\n menuItemBaseClasses,\n !isDanger && !isSelected && \"text-muted-foreground hover:bg-muted hover:text-foreground\",\n isSelected && !isDanger && \"bg-muted text-foreground font-medium\",\n isDanger && \"text-destructive hover:bg-destructive/10\",\n (rest as { disabled?: boolean }).disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n className\n );\n\n const content = (\n <>\n {icon && (\n <span className=\"size-4 shrink-0 flex items-center justify-center [&>svg]:size-4\">\n {icon}\n </span>\n )}\n <span className=\"flex-1 text-left truncate\">{children}</span>\n {rightContent && (\n <span className=\"ml-auto shrink-0\">{rightContent}</span>\n )}\n </>\n );\n\n if (\"href\" in props && props.href !== undefined) {\n const { href, ...anchorRest } = rest as AnchorHTMLAttributes<HTMLAnchorElement> & { href: string };\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n className={resolvedClasses}\n {...anchorRest}\n >\n {content}\n </a>\n );\n }\n\n const { disabled, ...buttonRest } = rest as ButtonHTMLAttributes<HTMLButtonElement>;\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n disabled={disabled}\n className={resolvedClasses}\n {...buttonRest}\n >\n {content}\n </button>\n );\n }\n);\nMenuItem.displayName = \"MenuItem\";\n\n// ─── Menu ────────────────────────────────────────────────────────────────────\n\nexport interface MenuProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n}\n\nexport const Menu = forwardRef<HTMLElement, MenuProps>(\n ({ children, className, ...props }, ref) => (\n <nav\n ref={ref as React.Ref<HTMLElement>}\n className={cn(\"flex flex-col\", className)}\n {...props}\n >\n {children}\n </nav>\n )\n);\nMenu.displayName = \"Menu\";\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 \"./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> & { inset?: boolean }\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-lg px-3 py-2.5 text-[15px] outline-none\",\n \"focus:bg-muted data-[state=open]:bg-muted\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4 text-muted-foreground\" />\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-[130] min-w-[8rem] overflow-hidden rounded-xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\",\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 = 8, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-[130] min-w-[11rem] overflow-hidden rounded-xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\",\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> & { inset?: boolean }\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-lg px-3 py-2.5 text-[15px] outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-lg py-2 pl-8 pr-2 text-sm outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4 text-primary\" />\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-lg py-2 pl-8 pr-2 text-sm outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current text-primary\" />\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> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\", 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 ref={ref} className={cn(\"-mx-1 my-1 h-px bg-border\", className)} {...props} />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nfunction DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn(\"ml-auto text-[10px] tracking-wide text-muted-foreground\", className)} {...props} />;\n}\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 * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"./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-11 min-h-11 w-full items-center justify-between gap-2.5 rounded-lg border border-border bg-card px-4 py-2 text-[15px] text-foreground shadow-sm outline-none\",\n \"ring-ring/50 focus-visible:ring-2 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 shrink-0 text-muted-foreground opacity-70\" />\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 text-muted-foreground\", 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 text-muted-foreground\", 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-[120] max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[var(--radix-select-trigger-width)] overflow-hidden rounded-xl border border-border bg-popover text-popover-foreground shadow-lg\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\",\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 max-h-72 overflow-y-auto\",\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 ref={ref} className={cn(\"px-2 py-1.5 text-xs font-medium text-muted-foreground\", className)} {...props} />\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-lg py-2 pl-2 pr-8 text-sm outline-none\",\n \"focus:bg-muted focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4 text-primary\" />\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 ref={ref} className={cn(\"-mx-1 my-1 h-px bg-border\", className)} {...props} />\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 { Search } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface CommandProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CommandInputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\nexport interface CommandListProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CommandEmptyProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> { heading?: string; }\nexport interface CommandItemProps extends React.HTMLAttributes<HTMLDivElement> { selected?: boolean; disabled?: boolean; onSelect?: () => void; }\nexport interface CommandSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CommandShortcutProps extends React.HTMLAttributes<HTMLSpanElement> {}\n\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"bg-card rounded-xl border border-border shadow-lg overflow-hidden\", className)} {...props} />\n));\nCommand.displayName = \"Command\";\n\nconst CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(({ className, ...props }, ref) => (\n <div className=\"flex items-center gap-2 border-b border-border px-3 h-11\">\n <Search className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <input ref={ref} className={cn(\"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed\", className)} {...props} />\n </div>\n));\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"max-h-72 overflow-y-auto py-1\", className)} role=\"listbox\" {...props} />\n));\nCommandList.displayName = \"CommandList\";\n\nconst CommandEmpty = React.forwardRef<HTMLDivElement, CommandEmptyProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"text-sm text-muted-foreground text-center py-6\", className)} {...props} />\n));\nCommandEmpty.displayName = \"CommandEmpty\";\n\nconst CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(({ className, heading, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-1 py-1\", className)} role=\"group\" {...props}>\n {heading && <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wider\">{heading}</div>}\n {children}\n </div>\n));\nCommandGroup.displayName = \"CommandGroup\";\n\nconst CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(({ className, selected, disabled, onSelect, children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={disabled}\n onClick={disabled ? undefined : onSelect}\n className={cn(\n \"flex items-center gap-2 px-2 py-1.5 rounded-md text-sm cursor-pointer transition-colors duration-pg-fast ease-pg-standard select-none\",\n selected ? \"bg-muted text-foreground\" : \"text-foreground hover:bg-muted\",\n disabled && \"pointer-events-none opacity-50\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n));\nCommandItem.displayName = \"CommandItem\";\n\nconst CommandSeparator = React.forwardRef<HTMLDivElement, CommandSeparatorProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"h-px bg-border my-1 -mx-1\", className)} {...props} />\n));\nCommandSeparator.displayName = \"CommandSeparator\";\n\nconst CommandShortcut = React.forwardRef<HTMLSpanElement, CommandShortcutProps>(({ className, ...props }, ref) => (\n <span ref={ref} className={cn(\"ml-auto text-xs text-muted-foreground tracking-widest\", className)} {...props} />\n));\nCommandShortcut.displayName = \"CommandShortcut\";\n\nexport { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, CommandShortcut };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"./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-9 items-center justify-center gap-0.5 rounded-lg border border-border bg-muted/40 p-0.5 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-md px-3 py-1.5 text-xs font-medium transition-colors\",\n \"ring-ring/50 focus-visible:outline-none focus-visible:ring-2\",\n \"data-[state=active]:bg-card data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n \"disabled:pointer-events-none disabled:opacity-50\",\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-3 outline-none ring-ring/50 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-lg\",\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 * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b border-border last:border-b-0\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex w-full items-center justify-between py-4 text-sm font-medium text-foreground\",\n \"hover:text-primary transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"[&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-pg-fast ease-pg-standard\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className={cn(\n \"overflow-hidden text-sm text-muted-foreground\",\n \"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\",\n className\n )}\n style={\n {\n \"--accordion-content-height\": \"var(--radix-accordion-content-height)\",\n } as React.CSSProperties\n }\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { X, Info, CheckCircle2, AlertTriangle, XCircle } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type AlertVariant = \"info\" | \"success\" | \"warning\" | \"error\" | \"neutral\";\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant;\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nconst variantStyles: Record<AlertVariant, string> = {\n info: \"bg-blue-50 border-blue-200 text-blue-900 dark:bg-blue-950/30 dark:border-blue-800 dark:text-blue-200\",\n success: \"bg-green-50 border-green-200 text-green-900 dark:bg-green-950/30 dark:border-green-800 dark:text-green-200\",\n warning: \"bg-amber-50 border-amber-200 text-amber-900 dark:bg-amber-950/30 dark:border-amber-800 dark:text-amber-200\",\n error: \"bg-red-50 border-red-200 text-red-900 dark:bg-red-950/30 dark:border-red-800 dark:text-red-200\",\n neutral: \"bg-muted border-border text-foreground\",\n};\n\nconst variantIcons: Record<AlertVariant, React.ElementType> = {\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n error: XCircle,\n neutral: Info,\n};\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant = \"info\", dismissible, onDismiss, children, ...props }, ref) => {\n const Icon = variantIcons[variant];\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\"relative flex gap-3 rounded-xl border p-4 shadow-sm\", variantStyles[variant], className)}\n {...props}\n >\n <Icon className=\"mt-0.5 size-4 shrink-0\" aria-hidden />\n <div className=\"flex-1 min-w-0\">{children}</div>\n {dismissible && (\n <button\n type=\"button\"\n onClick={onDismiss}\n className=\"shrink-0 rounded-md p-0.5 opacity-60 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n );\n }\n);\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h5 ref={ref} className={cn(\"mb-1 text-sm font-semibold leading-none\", className)} {...props} />\n )\n);\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm opacity-90 leading-relaxed\", className)} {...props} />\n )\n);\nAlertDescription.displayName = \"AlertDescription\";\n\nexport interface BannerProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant;\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nconst Banner = React.forwardRef<HTMLDivElement, BannerProps>(\n ({ className, variant = \"info\", dismissible, onDismiss, children, ...props }, ref) => {\n const Icon = variantIcons[variant];\n return (\n <div\n ref={ref}\n role=\"banner\"\n className={cn(\"flex items-center gap-3 border-b px-4 py-3\", variantStyles[variant], className)}\n {...props}\n >\n <Icon className=\"size-4 shrink-0\" aria-hidden />\n <div className=\"flex-1 min-w-0 text-sm\">{children}</div>\n {dismissible && (\n <button\n type=\"button\"\n onClick={onDismiss}\n className=\"shrink-0 rounded-md p-0.5 opacity-60 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n );\n }\n);\nBanner.displayName = \"Banner\";\n\nexport { Alert, AlertTitle, AlertDescription, Banner };\n","import * as React from \"react\";\nimport { Info, CheckCircle2, AlertTriangle, XCircle, Sparkles } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type CalloutVariant = \"info\" | \"success\" | \"warning\" | \"error\" | \"neutral\" | \"discovery\";\n\nexport interface CalloutProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CalloutVariant;\n}\n\nconst variantStyles: Record<CalloutVariant, string> = {\n info: \"bg-blue-50 border-blue-200 text-blue-900 dark:bg-blue-950/30 dark:border-blue-800 dark:text-blue-200\",\n success: \"bg-green-50 border-green-200 text-green-900 dark:bg-green-950/30 dark:border-green-800 dark:text-green-200\",\n warning: \"bg-amber-50 border-amber-200 text-amber-900 dark:bg-amber-950/30 dark:border-amber-800 dark:text-amber-200\",\n error: \"bg-red-50 border-red-200 text-red-900 dark:bg-red-950/30 dark:border-red-800 dark:text-red-200\",\n neutral: \"bg-muted border-border text-foreground\",\n discovery: \"bg-purple-50 border-purple-200 text-purple-900 dark:bg-purple-950/30 dark:border-purple-800 dark:text-purple-200\",\n};\n\nconst variantIcons: Record<CalloutVariant, React.ElementType> = {\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n error: XCircle,\n neutral: Info,\n discovery: Sparkles,\n};\n\nconst Callout = React.forwardRef<HTMLDivElement, CalloutProps>(\n ({ className, variant = \"info\", children, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex gap-3 rounded-xl border p-4\", variantStyles[variant], className)} {...props}>\n {children}\n </div>\n )\n);\nCallout.displayName = \"Callout\";\n\ninterface CalloutIconProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CalloutVariant;\n}\n\nconst CalloutIcon = React.forwardRef<HTMLDivElement, CalloutIconProps>(\n ({ className, variant = \"info\", ...props }, ref) => {\n const Icon = variantIcons[variant];\n return (\n <div ref={ref} className={cn(\"mt-0.5 shrink-0\", className)} {...props}>\n <Icon className=\"size-4\" aria-hidden />\n </div>\n );\n }\n);\nCalloutIcon.displayName = \"CalloutIcon\";\n\nconst CalloutTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm font-semibold\", className)} {...props} />\n )\n);\nCalloutTitle.displayName = \"CalloutTitle\";\n\nconst CalloutText = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"mt-1 text-sm opacity-90 leading-relaxed\", className)} {...props} />\n )\n);\nCalloutText.displayName = \"CalloutText\";\n\nexport { Callout, CalloutIcon, CalloutTitle, CalloutText };\n","import * as React from \"react\";\nimport { Info, CheckCircle2, AlertTriangle, XCircle, Sparkles } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type SectionMessageVariant = \"info\" | \"success\" | \"warning\" | \"error\" | \"discovery\";\n\nexport interface SectionMessageProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: SectionMessageVariant;\n}\n\nconst variantConfig: Record<\n SectionMessageVariant,\n { border: string; bg: string; icon: React.ElementType; iconColor: string }\n> = {\n info: {\n border: \"border-l-blue-500\",\n bg: \"bg-blue-50/60 dark:bg-blue-950/20\",\n icon: Info,\n iconColor: \"text-blue-500 dark:text-blue-400\",\n },\n success: {\n border: \"border-l-green-500\",\n bg: \"bg-green-50/60 dark:bg-green-950/20\",\n icon: CheckCircle2,\n iconColor: \"text-green-500 dark:text-green-400\",\n },\n warning: {\n border: \"border-l-amber-500\",\n bg: \"bg-amber-50/60 dark:bg-amber-950/20\",\n icon: AlertTriangle,\n iconColor: \"text-amber-500 dark:text-amber-400\",\n },\n error: {\n border: \"border-l-red-500\",\n bg: \"bg-red-50/60 dark:bg-red-950/20\",\n icon: XCircle,\n iconColor: \"text-red-500 dark:text-red-400\",\n },\n discovery: {\n border: \"border-l-purple-500\",\n bg: \"bg-purple-50/60 dark:bg-purple-950/20\",\n icon: Sparkles,\n iconColor: \"text-purple-500 dark:text-purple-400\",\n },\n};\n\nconst SectionMessageVariantContext = React.createContext<SectionMessageVariant>(\"info\");\n\nconst SectionMessage = React.forwardRef<HTMLDivElement, SectionMessageProps>(\n ({ className, variant = \"info\", children, ...props }, ref) => {\n const config = variantConfig[variant];\n const Icon = config.icon;\n return (\n <SectionMessageVariantContext.Provider value={variant}>\n <div\n ref={ref}\n role=\"region\"\n className={cn(\n \"flex w-full gap-4 rounded-xl border border-l-4 border-border p-5 shadow-sm transition-colors duration-pg-fast ease-pg-standard\",\n config.border,\n config.bg,\n className\n )}\n {...props}\n >\n <Icon\n className={cn(\"mt-0.5 size-5 shrink-0\", config.iconColor)}\n aria-hidden\n />\n <div className=\"flex-1 min-w-0\">{children}</div>\n </div>\n </SectionMessageVariantContext.Provider>\n );\n }\n);\nSectionMessage.displayName = \"SectionMessage\";\n\nconst SectionMessageTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h4\n ref={ref}\n className={cn(\"text-sm font-semibold text-foreground mb-1\", className)}\n {...props}\n />\n));\nSectionMessageTitle.displayName = \"SectionMessageTitle\";\n\nconst SectionMessageContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground leading-relaxed\", className)}\n {...props}\n />\n));\nSectionMessageContent.displayName = \"SectionMessageContent\";\n\nconst SectionMessageActions = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-wrap gap-2 mt-3\", className)}\n {...props}\n />\n));\nSectionMessageActions.displayName = \"SectionMessageActions\";\n\nexport {\n SectionMessage,\n SectionMessageTitle,\n SectionMessageContent,\n SectionMessageActions,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Loader2 } from \"lucide-react\";\n\nimport { cn } from \"./utils\";\n\nconst sizeMap = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 28,\n xl: 36,\n} as const;\n\nconst colorMap = {\n primary: \"text-primary\",\n muted: \"text-muted-foreground\",\n white: \"text-white\",\n inherit: \"\",\n} as const;\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: keyof typeof sizeMap;\n color?: keyof typeof colorMap;\n}\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size = \"md\", color = \"primary\", ...props }, ref) => {\n const px = sizeMap[size];\n\n return (\n <span\n ref={ref}\n data-slot=\"spinner\"\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"inline-flex items-center justify-center\", colorMap[color], className)}\n {...props}\n >\n <Loader2\n width={px}\n height={px}\n className=\"animate-spin\"\n aria-hidden=\"true\"\n />\n <span className=\"sr-only\">Loading...</span>\n </span>\n );\n }\n);\nSpinner.displayName = \"Spinner\";\n\nexport { Spinner };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type ProgressVariant = \"default\" | \"success\" | \"warning\" | \"error\";\nexport type ProgressSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> {\n variant?: ProgressVariant;\n size?: ProgressSize;\n label?: boolean;\n}\n\nconst variantTrack: Record<ProgressVariant, string> = {\n default: \"bg-primary\",\n success: \"bg-green-500\",\n warning: \"bg-amber-500\",\n error: \"bg-red-500\",\n};\n\nconst sizeClasses: Record<ProgressSize, string> = {\n xs: \"h-1\",\n sm: \"h-1.5\",\n md: \"h-2\",\n lg: \"h-3\",\n};\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({ className, value, variant = \"default\", size = \"md\", label, ...props }, ref) => (\n <div className=\"w-full\">\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\"relative w-full overflow-hidden rounded-full bg-muted\", sizeClasses[size], className)}\n {...props}\n value={value}\n >\n <ProgressPrimitive.Indicator\n className={cn(\"h-full w-full flex-1 transition-all duration-pg-slow ease-pg-standard\", variantTrack[variant])}\n style={{ transform: `translateX(-${100 - (value ?? 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n {label && <p className=\"mt-1 text-xs text-muted-foreground text-right\">{value ?? 0}%</p>}\n </div>\n));\nProgress.displayName = \"Progress\";\n\nexport type ProgressStepStatus = \"complete\" | \"current\" | \"upcoming\";\n\nexport interface ProgressTrackerStep {\n label: string;\n description?: string;\n status: ProgressStepStatus;\n}\n\nexport interface ProgressTrackerProps extends React.HTMLAttributes<HTMLDivElement> {\n steps: ProgressTrackerStep[];\n}\n\nconst ProgressTracker = React.forwardRef<HTMLDivElement, ProgressTrackerProps>(\n ({ className, steps, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-start\", className)} {...props}>\n {steps.map((step, i) => (\n <React.Fragment key={i}>\n <div className=\"flex flex-col items-center gap-1.5 min-w-0\">\n <div className={cn(\n \"flex h-8 w-8 shrink-0 items-center justify-center rounded-full border-2 text-sm font-semibold transition-colors\",\n step.status === \"complete\" && \"bg-primary border-primary text-primary-foreground\",\n step.status === \"current\" && \"bg-primary/10 border-primary text-primary\",\n step.status === \"upcoming\" && \"bg-card border-border text-muted-foreground\"\n )}>\n {step.status === \"complete\" ? <Check className=\"size-4\" strokeWidth={2.5} /> : i + 1}\n </div>\n <div className=\"text-center px-1\">\n <p className={cn(\"text-xs font-medium\", step.status === \"upcoming\" ? \"text-muted-foreground\" : \"text-foreground\")}>{step.label}</p>\n {step.description && <p className=\"text-[11px] text-muted-foreground mt-0.5\">{step.description}</p>}\n </div>\n </div>\n {i < steps.length - 1 && (\n <div className=\"flex-1 mt-4 mx-1\">\n <div className={cn(\"h-0.5 w-full rounded-full transition-colors\", step.status === \"complete\" ? \"bg-primary\" : \"bg-border\")} />\n </div>\n )}\n </React.Fragment>\n ))}\n </div>\n )\n);\nProgressTracker.displayName = \"ProgressTracker\";\n\nexport { Progress, ProgressTracker };\n","import { cn } from \"./utils\";\n\ninterface ShimmerProps {\n className?: string;\n rounded?: \"sm\" | \"md\" | \"lg\" | \"full\";\n}\n\nexport function Shimmer({ className, rounded = \"md\" }: ShimmerProps) {\n const r = { sm: \"rounded\", md: \"rounded-lg\", lg: \"rounded-xl\", full: \"rounded-full\" }[rounded];\n return <div className={cn(\"shimmer\", r, className)} />;\n}\n\nexport function StatCardSkeleton() {\n return (\n <div className=\"bg-card text-card-foreground rounded-xl p-5 flex flex-col gap-3 border border-border shadow-sm\">\n <div className=\"flex items-center justify-between\">\n <Shimmer className=\"h-3 w-28\" />\n <Shimmer className=\"h-10 w-10\" rounded=\"full\" />\n </div>\n <Shimmer className=\"h-9 w-44 mt-1\" />\n <Shimmer className=\"h-3 w-32\" />\n </div>\n );\n}\n\nexport function TableRowSkeleton({\n cols = 6,\n comfortable = false,\n density: densityProp,\n snug = false,\n}: {\n cols?: number;\n /** @deprecated prefer `density` */\n comfortable?: boolean;\n density?: \"default\" | \"comfortable\" | \"compact\";\n snug?: boolean;\n}) {\n const density =\n densityProp ??\n (comfortable ? \"comfortable\" : \"default\");\n const cellPad =\n density === \"comfortable\"\n ? \"px-5 py-4\"\n : density === \"compact\"\n ? snug\n ? \"pl-1.5 pr-2.5 py-2.5\"\n : \"px-3 py-2.5\"\n : \"px-4 py-3.5\";\n return (\n <tr\n className={cn(\n \"border-b border-border/60\",\n density === \"comfortable\" && \"min-h-[56px]\",\n density === \"compact\" && \"min-h-[44px]\"\n )}\n >\n {Array.from({ length: cols }).map((_, i) => (\n <td key={i} className={cellPad}>\n <Shimmer className={cn(\"h-3.5\", i === 0 ? \"w-20\" : i === cols - 1 ? \"w-14\" : \"w-28\")} />\n </td>\n ))}\n </tr>\n );\n}\n\nexport function ChartSkeleton({ height = \"h-48\" }: { height?: string }) {\n return (\n <div className={cn(\"flex items-end gap-2 px-2\", height)}>\n {[55, 72, 40, 88, 65, 82, 48, 95, 60, 70].map((h, i) => (\n <div key={i} className=\"flex-1 shimmer rounded-t-md\" style={{ height: `${h}%` }} />\n ))}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"./utils\";\nimport { type LucideIcon, Inbox } from \"lucide-react\";\n\ninterface EmptyStateProps {\n icon?: LucideIcon;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n icon: Icon = Inbox,\n title,\n description,\n action,\n className,\n}: EmptyStateProps) {\n return (\n <div className={cn(\"flex flex-col items-center justify-center py-16 px-4 text-center\", className)}>\n <div className=\"w-14 h-14 rounded-2xl bg-slate-100 flex items-center justify-center mb-4\">\n <Icon className=\"w-6 h-6 text-slate-400\" />\n </div>\n <h3 className=\"text-sm font-semibold text-slate-700 mb-1\">{title}</h3>\n {description && (\n <p className=\"text-xs text-slate-500 max-w-xs leading-relaxed\">{description}</p>\n )}\n {action && <div className=\"mt-4\">{action}</div>}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"./utils\";\nimport { TableRowSkeleton } from \"./skeleton\";\nimport { EmptyState } from \"./empty-state\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { useState } from \"react\";\n\nexport type DataTableDensity = \"default\" | \"comfortable\" | \"compact\";\nexport type DataTableHeaderStyle = \"surface\" | \"minimal\";\nexport type DataTableFooterSummary = \"range\" | \"count\";\n\n/** Builds the visible page numbers including ellipsis markers */\nfunction getPageRange(current: number, total: number): (number | \"…\")[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n const pages: (number | \"…\")[] = [1];\n if (current > 3) pages.push(\"…\");\n const lo = Math.max(2, current - 1);\n const hi = Math.min(total - 1, current + 1);\n for (let p = lo; p <= hi; p++) pages.push(p);\n if (current < total - 2) pages.push(\"…\");\n pages.push(total);\n return pages;\n}\n\nexport type Column<T> = {\n key: string;\n header: ReactNode;\n /** Table column width, e.g. `48px`, `18%`, `minmax(12rem,1fr)` (fixed layout) */\n width?: string;\n minWidth?: number;\n maxWidth?: number;\n align?: \"left\" | \"right\" | \"center\";\n /** Allow cell text to wrap instead of truncating. */\n wrap?: boolean;\n /** Extra classes on `<th>` / `<td>` (e.g. wider horizontal padding per column) */\n cellClassName?: string;\n render: (row: T, index: number) => ReactNode;\n};\n\ninterface DataTableProps<T> {\n columns: Column<T>[];\n data: T[];\n isLoading?: boolean;\n skeletonRows?: number;\n emptyTitle?: string;\n emptyDescription?: string;\n pageSize?: number;\n /** Controlled page number (1-indexed). Enables server-side pagination. */\n page?: number;\n /** Called when the user changes page in controlled mode. */\n onPageChange?: (page: number) => void;\n /** Total row count for server-side pagination (overrides data.length for page calculations). */\n totalRows?: number;\n className?: string;\n rowKey: (row: T) => string;\n /** Optional hover CTA shown on the right of every row */\n rowCta?: {\n label: string;\n onClick?: (row: T) => void;\n };\n /**\n * Custom action revealed on row hover — typically a `<Button>` or\n * `<ButtonGroup>`, but any `ReactNode` is accepted. Pass a **function** to\n * render per-row: it receives `(row, index)`, so the action always has the\n * record for its row (e.g. to navigate or open a drawer for that row).\n *\n * It is not a real column: it floats as an overlay **pinned to the right edge\n * of the viewport**, so it stays in view as the table scrolls horizontally\n * (no scrolling to the end to reach it) while the last data column stays\n * flush with nothing trailing it. Takes precedence over `rowCta`.\n */\n rowAction?: ReactNode | ((row: T, index: number) => ReactNode);\n /** Row / cell vertical rhythm and horizontal gutters */\n density?: DataTableDensity;\n /**\n * Column-sizing strategy:\n * - `fixed` — widths come only from `colgroup` hints (`width`/`minWidth`/\n * `maxWidth`); content is ignored and overflow is clipped. Table fills 100%.\n * - `auto` — columns size to content but the table still fills 100%, so any\n * leftover space is distributed into the columns (they stretch).\n * - `content` — columns size to their content's intrinsic width and the table\n * shrinks to fit. Leftover space stays empty to the right of the last\n * column; it scrolls horizontally only once content exceeds the container.\n */\n tableLayout?: \"auto\" | \"fixed\" | \"content\";\n theadClassName?: string;\n headerStyle?: DataTableHeaderStyle;\n /** Footer: paginated range vs simple `n items` */\n footerSummary?: DataTableFooterSummary;\n /** Noun after the count when `footerSummary=\"count\"` (default singular / plural `item` / `items`). */\n footerCountLabels?: { singular: string; plural: string };\n /** With `density=\"compact\"`, use tighter cell gutters (`pl-1.5 pr-2.5` vs `px-3`). Footer keeps normal horizontal padding. */\n snug?: boolean;\n}\n\nexport function DataTable<T>({\n columns,\n data,\n isLoading = false,\n skeletonRows = 6,\n emptyTitle = \"No data yet\",\n emptyDescription,\n pageSize = 10,\n page: controlledPage,\n onPageChange,\n totalRows,\n className,\n rowKey,\n rowCta,\n rowAction,\n density = \"default\",\n tableLayout = \"fixed\",\n theadClassName,\n headerStyle = \"surface\",\n footerSummary = \"range\",\n footerCountLabels = { singular: \"item\", plural: \"items\" },\n snug = false,\n}: DataTableProps<T>) {\n const isControlled = controlledPage !== undefined;\n const [internalPage, setInternalPage] = useState(1);\n const page = isControlled ? controlledPage : internalPage;\n const setPage = isControlled\n ? (p: number) => onPageChange?.(p)\n : (p: number) => setInternalPage(p);\n\n // The right-pinned row action. `rowAction` takes precedence over `rowCta`.\n // It is NOT a real column: it renders as a per-row overlay floating at the\n // right edge of the viewport (sticky), so the last data column stays flush\n // and there's no reserved/empty trailing column when scrolled to the end.\n const hasAction = rowAction != null || rowCta != null;\n\n // `content` layout: a greedy, empty trailing column that absorbs leftover\n // horizontal space so the data columns stay at their content (minimum)\n // width while the table still spans the full container width.\n const hasSpacer = tableLayout === \"content\";\n\n const total = totalRows ?? data.length;\n const totalPages = Math.ceil(total / pageSize);\n const paginated = isControlled ? data : data.slice((page - 1) * pageSize, page * pageSize);\n\n // Guard against duplicate / non-unique rowKey() results. React silently fails\n // to unmount old <tr> nodes when sibling keys collide, leaving stale rows\n // rendered on top of new data (or the empty state). De-dupe by suffixing\n // repeats so every rendered row gets a unique, stable key.\n const seenKeys = new Map<string, number>();\n const rowKeys = paginated.map((row) => {\n const base = rowKey(row);\n const seen = seenKeys.get(base) ?? 0;\n seenKeys.set(base, seen + 1);\n return seen === 0 ? base : `${base}__${seen}`;\n });\n\n const comfortable = density === \"comfortable\";\n const compact = density === \"compact\";\n const compactCellPad = compact\n ? snug\n ? \"pl-1.5 pr-2.5 py-2.5\"\n : \"px-3 py-2.5\"\n : \"px-4 py-3.5\";\n const cellPad = comfortable ? \"px-5 py-4\" : compactCellPad;\n const headPad = comfortable ? \"px-5 py-4\" : compactCellPad;\n /** Footer is outside the grid; do not reuse snug cell `pl-0`-style gutters here. */\n const footerPad = comfortable\n ? \"px-5 py-4\"\n : compact\n ? \"px-4 py-2.5\"\n : \"px-4 py-3.5\";\n const headText = comfortable\n ? \"text-[12px] font-medium text-muted-foreground tracking-normal\"\n : compact\n ? \"text-[11px] font-semibold text-muted-foreground\"\n : \"text-[11px] font-semibold text-foreground/75 dark:text-foreground/85\";\n // Action overlay geometry: the action floats this many px in from the right\n // edge of the viewport (it has no reserved column — it overlays the row).\n const actionGutter = comfortable ? 20 : compact ? 12 : 16;\n\n return (\n <div\n className={cn(\n \"bg-card text-card-foreground rounded-xl overflow-hidden border border-border\",\n className\n )}\n >\n {/* scrollbar space always reserved; thumb subtle on hover */}\n <div\n className={cn(\n \"overflow-x-auto\",\n \"[&::-webkit-scrollbar]:h-[4px] [&::-webkit-scrollbar-track]:bg-transparent\",\n \"[&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-transparent\",\n \"hover:[&::-webkit-scrollbar-thumb]:bg-border dark:hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/35\"\n )}\n style={{ scrollbarWidth: \"thin\", scrollbarColor: \"var(--border) transparent\" }}\n >\n <table\n className={cn(tableLayout === \"auto\" && \"min-w-[920px]\")}\n style={{\n // `content` uses the automatic algorithm but stays 100% wide; a\n // greedy spacer column (below) soaks up the slack so the data\n // columns collapse to their content width while the table fills.\n tableLayout: tableLayout === \"fixed\" ? \"fixed\" : \"auto\",\n width: \"100%\",\n }}\n >\n {tableLayout === \"fixed\" && (\n <colgroup>\n {columns.map((col) => (\n <col\n key={col.key}\n style={{\n width: col.width ?? (col.minWidth != null ? `${col.minWidth}px` : undefined),\n minWidth: col.minWidth,\n maxWidth: col.maxWidth,\n }}\n />\n ))}\n {/* Zero-width column: the action floats out of it as an overlay,\n so the last data column stays flush and nothing trails it. */}\n {hasAction ? <col style={{ width: 0 }} /> : null}\n </colgroup>\n )}\n\n <thead\n className={cn(\n headerStyle === \"surface\" && \"bg-muted/35\",\n headerStyle === \"minimal\" && \"bg-transparent\",\n theadClassName\n )}\n >\n <tr\n className={cn(\n \"border-b\",\n headerStyle === \"surface\" ? \"border-border\" : \"border-border/70\"\n )}\n >\n {columns.map((col) => (\n <th\n key={col.key}\n className={cn(\n headPad,\n headText,\n \"whitespace-nowrap align-middle\",\n col.align === \"right\"\n ? \"text-right\"\n : col.align === \"center\"\n ? \"text-center\"\n : \"text-left\",\n col.cellClassName\n )}\n >\n {col.header}\n </th>\n ))}\n {hasSpacer ? <th className=\"w-full p-0\" aria-hidden /> : null}\n {hasAction ? (\n <th className=\"sticky right-0 z-[1] w-0 p-0\" aria-hidden />\n ) : null}\n </tr>\n </thead>\n\n <tbody>\n {isLoading ? (\n Array.from({ length: skeletonRows }).map((_, i) => (\n <TableRowSkeleton\n key={i}\n cols={columns.length}\n density={density}\n snug={snug}\n />\n ))\n ) : paginated.length === 0 ? (\n <tr>\n <td colSpan={columns.length + (hasSpacer ? 1 : 0) + (hasAction ? 1 : 0)}>\n <EmptyState title={emptyTitle} description={emptyDescription} />\n </td>\n </tr>\n ) : (\n paginated.map((row, i) => (\n <tr\n key={rowKeys[i]}\n className={cn(\n \"group transition-colors duration-150 border-b border-border/60 last:border-b-0\",\n comfortable && \"min-h-[56px]\",\n compact && \"min-h-[44px]\",\n \"hover:bg-muted/40 dark:hover:bg-muted/25\",\n hasAction &&\n \"hover:shadow-[0_1px_0_rgba(0,0,0,0.04)] dark:hover:shadow-none\"\n )}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n className={cn(\n cellPad,\n \"align-middle\",\n comfortable\n ? cn(\n \"text-[13px] leading-snug\",\n !col.wrap && \"whitespace-nowrap\"\n )\n : compact\n ? cn(\n \"text-[13px] leading-tight\",\n !col.wrap && \"whitespace-nowrap\",\n \"overflow-hidden\"\n )\n : \"whitespace-nowrap overflow-hidden\",\n col.align === \"right\"\n ? \"text-right\"\n : col.align === \"center\"\n ? \"text-center\"\n : \"text-left\",\n col.cellClassName\n )}\n >\n {col.render(row, i)}\n </td>\n ))}\n\n {hasSpacer ? <td className=\"p-0\" aria-hidden /> : null}\n\n {hasAction ? (\n // Zero-width sticky cell pinned to the right edge of the\n // viewport. Its children are positioned absolutely so they\n // float over the row (out of the 0-width cell) — the action\n // stays in view while scrolling and nothing trails the last\n // data column. Everything is revealed on hover only.\n <td className=\"sticky right-0 z-[1] w-0 p-0 align-middle\">\n {/* The action itself — `rowAction(row, i)` so it always\n receives this row's record. Vertically centered in the\n row and anchored `actionGutter`px from the right edge,\n overflowing left over the row content. Revealed on hover. */}\n <span\n className=\"absolute top-1/2 -translate-y-1/2 z-[1] inline-flex items-center opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100\"\n style={{ right: actionGutter }}\n >\n {rowAction != null ? (\n typeof rowAction === \"function\" ? (\n rowAction(row, i)\n ) : (\n rowAction\n )\n ) : (\n <button\n type=\"button\"\n onClick={() => rowCta?.onClick?.(row)}\n className={cn(\n \"inline-flex items-center font-medium text-foreground bg-card rounded-lg border border-border hover:border-muted-foreground/50 whitespace-nowrap shadow-sm\",\n compact\n ? \"px-2.5 py-1 text-[11px]\"\n : \"px-3 py-1.5 text-[12px]\"\n )}\n >\n {rowCta?.label}\n </button>\n )}\n </span>\n </td>\n ) : null}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {!isLoading && paginated.length > 0 && (\n <div\n className={cn(\n \"flex items-center gap-4 flex-wrap border-t border-border\",\n footerPad,\n footerSummary === \"count\" && totalPages <= 1\n ? \"justify-start\"\n : \"justify-between\"\n )}\n >\n {footerSummary === \"count\" ? (\n <span className=\"text-[12px] text-muted-foreground tabular-nums\">\n <span className=\"font-medium text-foreground\">{total}</span>{\" \"}\n {total === 1\n ? footerCountLabels.singular\n : footerCountLabels.plural}\n </span>\n ) : (\n <span className=\"text-[12px] text-muted-foreground tabular-nums\">\n Showing{\" \"}\n <span className=\"text-foreground font-medium\">\n {Math.min((page - 1) * pageSize + 1, total)}–\n {Math.min(page * pageSize, total)}\n </span>{\" \"}\n of{\" \"}\n <span className=\"text-foreground font-medium\">\n {total.toLocaleString()}\n </span>{\" \"}\n {total !== 1 ? \"results\" : \"result\"}\n </span>\n )}\n\n {(footerSummary === \"range\" || footerSummary === \"count\") &&\n totalPages > 1 && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => setPage(Math.max(1, page - 1))}\n disabled={page === 1}\n className=\"w-7 h-7 rounded-md flex items-center justify-center text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\n >\n <ChevronLeft className=\"w-3.5 h-3.5\" />\n </button>\n\n {getPageRange(page, totalPages).map((p, idx) =>\n p === \"…\" ? (\n <span\n key={`ellipsis-${idx}`}\n className=\"w-7 h-7 flex items-center justify-center text-[12px] text-muted-foreground select-none\"\n >\n …\n </span>\n ) : (\n <button\n key={p}\n onClick={() => setPage(p as number)}\n className={cn(\n \"w-7 h-7 rounded-md text-[12px] font-medium transition-colors tabular-nums flex items-center justify-center\",\n page === p\n ? \"bg-primary text-primary-foreground shadow-sm\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\"\n )}\n >\n {p}\n </button>\n )\n )}\n\n <button\n onClick={() => setPage(Math.min(totalPages, page + 1))}\n disabled={page === totalPages}\n className=\"w-7 h-7 rounded-md flex items-center justify-center text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\n >\n <ChevronRight className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"./utils\";\n\ninterface PageHeaderProps {\n title: ReactNode;\n /** When title is non-plain text (e.g. includes a flag), set for screen readers. */\n titleAriaLabel?: string;\n subtitle?: string;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function PageHeader({ title, titleAriaLabel, subtitle, actions, className }: PageHeaderProps) {\n return (\n <div className={cn(\"flex items-start justify-between mb-6\", className)}>\n <div>\n <h1\n className=\"text-xl font-semibold text-foreground tracking-tight flex items-center gap-2.5 flex-wrap\"\n {...(titleAriaLabel ? { \"aria-label\": titleAriaLabel } : {})}\n >\n {title}\n </h1>\n {subtitle && <p className=\"text-sm text-muted-foreground mt-0.5\">{subtitle}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { forwardRef, type HTMLAttributes, useState, useCallback } from \"react\";\nimport { Check, Copy } from \"lucide-react\";\n\n// ---------------------------------------------------------------------------\n// Code – inline\n// ---------------------------------------------------------------------------\n\nexport type CodeProps = HTMLAttributes<HTMLElement>;\n\nexport const Code = forwardRef<HTMLElement, CodeProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <code\n ref={ref}\n className={cn(\n \"rounded-md bg-muted px-1.5 py-0.5 font-mono text-[13px] text-foreground ring-1 ring-border\",\n className\n )}\n {...props}\n >\n {children}\n </code>\n );\n }\n);\nCode.displayName = \"Code\";\n\n// ---------------------------------------------------------------------------\n// CodeBlock – multi-line\n// ---------------------------------------------------------------------------\n\nexport interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {\n /** The raw code string to display and optionally copy. */\n code: string;\n /** Optional filename shown in the header. */\n filename?: string;\n /** Optional language label shown as a badge in the header. */\n language?: string;\n /** Hide the copy button. Defaults to false. */\n hideCopy?: boolean;\n}\n\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(\n (\n {\n code,\n filename,\n language,\n hideCopy = false,\n className,\n ...props\n },\n ref\n ) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n const timer = setTimeout(() => setCopied(false), 2000);\n return () => clearTimeout(timer);\n } catch {\n // Clipboard access denied — fail silently.\n }\n }, [code]);\n\n const hasHeader = Boolean(filename || language);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative overflow-hidden bg-[#0f1117] text-[#e5e7eb]\",\n hasHeader ? \"rounded-xl\" : \"rounded-xl\",\n className\n )}\n {...props}\n >\n {/* Header */}\n {hasHeader && (\n <div className=\"flex items-center justify-between bg-[#1a1f2e] px-4 py-2 border-b border-[#2a3441]\">\n <div className=\"flex items-center gap-2.5\">\n {filename && (\n <span className=\"text-[#9ca3af] text-xs font-mono\">\n {filename}\n </span>\n )}\n {language && (\n <span className=\"rounded-md bg-[#2a3441] px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-[#6b7280]\">\n {language}\n </span>\n )}\n </div>\n {!hideCopy && (\n <CopyButton copied={copied} onClick={handleCopy} inHeader />\n )}\n </div>\n )}\n\n {/* Code area */}\n <div className=\"relative\">\n <pre className=\"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed\">\n <code>{code}</code>\n </pre>\n\n {/* Copy button (no header case) */}\n {!hasHeader && !hideCopy && (\n <div className=\"absolute top-3 right-3\">\n <CopyButton copied={copied} onClick={handleCopy} />\n </div>\n )}\n </div>\n </div>\n );\n }\n);\nCodeBlock.displayName = \"CodeBlock\";\n\n// ---------------------------------------------------------------------------\n// Internal: CopyButton\n// ---------------------------------------------------------------------------\n\ninterface CopyButtonProps {\n copied: boolean;\n onClick: () => void;\n inHeader?: boolean;\n}\n\nfunction CopyButton({ copied, onClick, inHeader = false }: CopyButtonProps) {\n return (\n <button\n type=\"button\"\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n onClick={onClick}\n className={cn(\n \"inline-flex items-center justify-center rounded-md transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n inHeader\n ? \"size-6 text-[#6b7280] hover:bg-[#2a3441] hover:text-[#9ca3af]\"\n : \"size-7 bg-[#1a1f2e]/80 text-[#6b7280] hover:bg-[#1a1f2e] hover:text-[#9ca3af]\"\n )}\n >\n {copied ? (\n <Check className=\"size-3.5 text-green-400\" />\n ) : (\n <Copy className=\"size-3.5\" />\n )}\n </button>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cn } from \"./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-9 w-9 shrink-0 overflow-hidden rounded-full border border-border bg-muted\", 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 ref={ref} className={cn(\"aspect-square h-full w-full object-cover\", className)} {...props} />\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(\"flex h-full w-full items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground\", className)}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"./avatar\";\n\nexport interface AvatarGroupItem {\n src?: string;\n fallback: string;\n alt?: string;\n}\n\nexport interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n avatars: AvatarGroupItem[];\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeClasses: Record<NonNullable<AvatarGroupProps[\"size\"]>, string> = {\n sm: \"h-6 w-6\",\n md: \"h-8 w-8\",\n lg: \"h-10 w-10\",\n};\n\nconst fontSizeClasses: Record<NonNullable<AvatarGroupProps[\"size\"]>, string> = {\n sm: \"text-[10px]\",\n md: \"text-xs\",\n lg: \"text-xs\",\n};\n\nconst overlapClasses: Record<NonNullable<AvatarGroupProps[\"size\"]>, string> = {\n sm: \"-ml-2\",\n md: \"-ml-2\",\n lg: \"-ml-2\",\n};\n\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ avatars, max = 4, size = \"md\", className, ...props }, ref) => {\n const visible = avatars.slice(0, max);\n const overflowCount = avatars.length - max;\n const totalSlots = visible.length + (overflowCount > 0 ? 1 : 0);\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center\", className)}\n {...props}\n >\n {visible.map((avatar, index) => {\n const zIndex = totalSlots - index;\n return (\n <Avatar\n key={index}\n className={cn(\n sizeClasses[size],\n overlapClasses[size],\n \"ring-2 ring-background border border-border shrink-0 transition-[margin] duration-[var(--duration-pg-fast,150ms)] ease-[var(--ease-pg-standard,cubic-bezier(0.4,0,0.2,1))] first:ml-0\",\n )}\n style={{ zIndex }}\n >\n {avatar.src && (\n <AvatarImage src={avatar.src} alt={avatar.alt ?? avatar.fallback} />\n )}\n <AvatarFallback\n className={cn(\n fontSizeClasses[size],\n \"font-medium\",\n )}\n >\n {avatar.fallback}\n </AvatarFallback>\n </Avatar>\n );\n })}\n\n {overflowCount > 0 && (\n <div\n className={cn(\n sizeClasses[size],\n overlapClasses[size],\n fontSizeClasses[size],\n \"relative shrink-0 flex items-center justify-center rounded-full border border-border bg-muted text-muted-foreground font-medium ring-2 ring-background transition-[margin] duration-[var(--duration-pg-fast,150ms)] ease-[var(--ease-pg-standard,cubic-bezier(0.4,0,0.2,1))]\",\n )}\n style={{ zIndex: 0 }}\n >\n +{overflowCount}\n </div>\n )}\n </div>\n );\n }\n);\n\nAvatarGroup.displayName = \"AvatarGroup\";\n\nexport { AvatarGroup };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport type AvatarTagSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface AvatarTagProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Display label for the tag */\n label: string;\n /** Optional image src for the avatar */\n src?: string;\n /** Alt text for the avatar image */\n alt?: string;\n /** Size variant */\n size?: AvatarTagSize;\n /** Called when the remove button is clicked */\n onRemove?: () => void;\n /** Disables interaction */\n disabled?: boolean;\n}\n\nfunction getInitials(label: string): string {\n const words = label.trim().split(/\\s+/);\n if (words.length === 1) {\n return words[0].slice(0, 2).toUpperCase();\n }\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n}\n\nconst sizeConfig: Record<\n AvatarTagSize,\n { avatar: string; text: string; icon: string; padding: string }\n> = {\n sm: {\n avatar: \"h-[18px] w-[18px]\",\n text: \"text-[10px]\",\n icon: \"size-2.5\",\n padding: \"px-1.5 py-0.5 gap-1\",\n },\n md: {\n avatar: \"h-5 w-5\",\n text: \"text-xs\",\n icon: \"size-3\",\n padding: \"px-2 py-0.5 gap-1\",\n },\n lg: {\n avatar: \"h-6 w-6\",\n text: \"text-sm\",\n icon: \"size-3.5\",\n padding: \"px-2.5 py-1 gap-1.5\",\n },\n};\n\nconst AvatarTag = React.forwardRef<HTMLSpanElement, AvatarTagProps>(\n (\n {\n label,\n src,\n alt,\n size = \"md\",\n onRemove,\n disabled = false,\n className,\n ...props\n },\n ref\n ) => {\n const cfg = sizeConfig[size];\n const initials = getInitials(label);\n\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center rounded-full border border-border bg-card font-medium transition-colors duration-[var(--duration-pg-fast,150ms)] ease-[var(--ease-pg-standard,cubic-bezier(0.4,0,0.2,1))]\",\n cfg.padding,\n cfg.text,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {/* Avatar */}\n <AvatarPrimitive.Root\n className={cn(\n \"relative shrink-0 overflow-hidden rounded-full\",\n cfg.avatar\n )}\n >\n <AvatarPrimitive.Image\n src={src}\n alt={alt ?? label}\n className=\"aspect-square h-full w-full object-cover\"\n />\n <AvatarPrimitive.Fallback\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-primary/10 text-primary font-semibold leading-none\",\n cfg.text\n )}\n >\n {initials}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n\n {/* Label */}\n <span className=\"leading-none select-none\">{label}</span>\n\n {/* Remove button */}\n {onRemove && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n if (!disabled) onRemove();\n }}\n disabled={disabled}\n className={cn(\n \"flex items-center justify-center rounded-full opacity-60 transition-opacity duration-[var(--duration-pg-fast,150ms)] hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n disabled && \"pointer-events-none\"\n )}\n aria-label={`Remove ${label}`}\n >\n <X className={cfg.icon} />\n </button>\n )}\n </span>\n );\n }\n);\n\nAvatarTag.displayName = \"AvatarTag\";\n\nexport { AvatarTag };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ChevronDown, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButtonProps,\n type DayPickerProps,\n} from \"react-day-picker\";\n\nimport { Button } from \"./button\";\nimport type { ButtonProps } from \"./button\";\nimport { cn } from \"./utils\";\n\nconst cellSize = \"[--cell-size:2rem]\";\n\nfunction navButtonClasses(variant: NonNullable<ButtonProps[\"variant\"]>): string {\n const base =\n \"inline-flex items-center justify-center rounded-lg border font-medium transition-colors duration-pg-fast ease-pg-standard focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35 disabled:pointer-events-none disabled:opacity-50\";\n switch (variant) {\n case \"outline\":\n return cn(\n base,\n \"border-border bg-card text-foreground shadow-sm hover:bg-muted\"\n );\n case \"ghost\":\n default:\n return cn(\n base,\n \"border-transparent bg-transparent text-foreground hover:bg-muted focus-visible:bg-muted/80 active:bg-muted/90\"\n );\n }\n}\n\nexport type CalendarProps = DayPickerProps & {\n buttonVariant?: ButtonProps[\"variant\"];\n};\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n locale,\n formatters,\n components,\n showWeekNumber,\n ...props\n}: CalendarProps) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n showWeekNumber={showWeekNumber}\n locale={locale}\n className={cn(\n \"group/calendar bg-background p-3\",\n cellSize,\n \"[[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(locale?.code ?? \"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"relative flex flex-col gap-4 md:flex-row\",\n defaultClassNames.months\n ),\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\n nav: cn(\n \"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n navButtonClasses(buttonVariant),\n \"h-[var(--cell-size)] w-[var(--cell-size)] min-h-0 min-w-0 shrink-0 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n navButtonClasses(buttonVariant),\n \"h-[var(--cell-size)] w-[var(--cell-size)] min-h-0 min-w-0 shrink-0 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex h-[var(--cell-size)] w-full items-center justify-center px-[var(--cell-size)]\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"flex h-[var(--cell-size)] w-full items-center justify-center gap-1.5 text-sm font-medium\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative rounded-md border border-border bg-card shadow-sm focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/35\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\"absolute inset-0 cursor-pointer opacity-0\", defaultClassNames.dropdown),\n caption_label: cn(\n \"font-medium select-none\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground\",\n defaultClassNames.caption_label\n ),\n month_grid: cn(\"w-full border-collapse\", defaultClassNames.month_grid),\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"flex-1 rounded-md text-[0.8rem] font-normal text-muted-foreground select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"mt-2 flex w-full\", defaultClassNames.week),\n week_number_header: cn(\n \"w-[var(--cell-size)] select-none\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] text-muted-foreground select-none\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"group/day relative aspect-square h-full w-full p-0 text-center select-none\",\n \"[&:last-child[data-selected=true]_button]:rounded-r-md\",\n showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none bg-accent/60\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"rounded-md bg-muted text-foreground data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\"text-muted-foreground opacity-50\", defaultClassNames.disabled),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className: rootClass, rootRef, ...rootProps }) => (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(rootClass)}\n {...rootProps}\n />\n ),\n Chevron: ({ className: chClass, orientation, ...chProps }) => {\n if (orientation === \"left\") {\n return <ChevronLeft className={cn(\"size-4\", chClass)} {...chProps} />;\n }\n if (orientation === \"right\") {\n return <ChevronRight className={cn(\"size-4\", chClass)} {...chProps} />;\n }\n return <ChevronDown className={cn(\"size-4\", chClass)} {...chProps} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...weekProps }) => (\n <th {...weekProps}>\n <div className=\"flex h-[var(--cell-size)] w-[var(--cell-size)] min-h-[var(--cell-size)] min-w-[var(--cell-size)] items-center justify-center text-center text-xs tabular-nums\">\n {children}\n </div>\n </th>\n ),\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: DayButtonProps) {\n const defaultClassNames = getDefaultClassNames();\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n type=\"button\"\n variant=\"ghost\"\n {...props}\n disabled={Boolean(modifiers.disabled) || props.disabled}\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"flex aspect-square h-auto min-h-[var(--cell-size)] w-full min-w-[var(--cell-size)] flex-col gap-1 rounded-md p-0 font-normal leading-none data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground hover:bg-muted/80 dark:hover:bg-muted/50 [&>span]:text-xs [&>span]:opacity-70\",\n \"group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/35\",\n defaultClassNames.day,\n className\n )}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","\"use client\";\n\nimport { useState, useRef, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ChevronLeft, ChevronRight, ChevronDown, CalendarDays } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"./utils\";\n\n/* ─── Constants ─────────────────────────────────────────────────────────── */\nconst MONTHS = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\n \"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\nconst DAYS = [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"];\nconst PRIMARY = \"#0061E3\";\nconst PANEL_W = 296;\n\n/* ─── Helpers ────────────────────────────────────────────────────────────── */\nfunction daysInMonth(y: number, m: number) { return new Date(y, m + 1, 0).getDate(); }\nfunction firstDayOf(y: number, m: number) { return new Date(y, m, 1).getDay(); }\n\nfunction parseYMD(s: string) {\n if (!s) return null;\n const [y, m, d] = s.split(\"-\").map(Number);\n if (!y || !m || !d) return null;\n return { y, m: m - 1, d };\n}\nfunction toYMD(y: number, m: number, d: number) {\n return `${y}-${String(m + 1).padStart(2, \"0\")}-${String(d).padStart(2, \"0\")}`;\n}\nfunction displayDate(ymd: string) {\n const p = parseYMD(ymd);\n if (!p) return \"\";\n return `${String(p.d).padStart(2, \"0\")} ${MONTHS[p.m].slice(0, 3)} ${p.y}`;\n}\n\n/* ─── Props ─────────────────────────────────────────────────────────────── */\ninterface DatePickerProps {\n value: string;\n onChange: (v: string) => void;\n placeholder?: string;\n className?: string;\n min?: string;\n label?: string;\n}\n\n/* ─── DatePicker ─────────────────────────────────────────────────────────── */\nexport function DatePicker({ value, onChange, placeholder = \"Select date\", className, min, label }: DatePickerProps) {\n const today = new Date();\n const parsed = parseYMD(value);\n\n const [open, setOpen] = useState(false);\n const [panelPos, setPanelPos] = useState({ top: 0, left: 0 });\n const [viewYear, setViewYear] = useState(parsed?.y ?? today.getFullYear());\n const [viewMonth, setViewMonth] = useState(parsed?.m ?? today.getMonth());\n const [yearMenu, setYearMenu] = useState(false);\n const [monthMenu, setMonthMenu] = useState(false);\n const [mounted, setMounted] = useState(false);\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => { setMounted(true); }, []);\n\n /* Sync view when value changes */\n useEffect(() => {\n if (parsed) { setViewYear(parsed.y); setViewMonth(parsed.m); }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n /* Compute fixed position from trigger rect */\n function openPanel() {\n if (!triggerRef.current) return;\n const trigger = triggerRef.current;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const PANEL_H = 340; // approx height\n\n // Scroll trigger into view so panel can appear next to it (avoids panel far from input in scrollable forms)\n trigger.scrollIntoView({ block: \"center\", behavior: \"auto\" });\n\n requestAnimationFrame(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n\n // Horizontal: align left edge, clamp so it doesn't go off screen\n let left = rect.left;\n if (left + PANEL_W > vw - 8) left = vw - PANEL_W - 8;\n\n // Vertical: prefer below trigger; if not enough room open above\n let top = rect.bottom + 6;\n if (top + PANEL_H > vh - 8) top = rect.top - PANEL_H - 6;\n\n setPanelPos({ top, left });\n setOpen(true);\n });\n }\n\n /* Close on outside click */\n useEffect(() => {\n if (!open) return;\n function handler(e: MouseEvent) {\n const inTrigger = triggerRef.current?.contains(e.target as Node);\n const inPanel = panelRef.current?.contains(e.target as Node);\n if (!inTrigger && !inPanel) {\n setOpen(false); setYearMenu(false); setMonthMenu(false);\n }\n }\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open]);\n\n /* Navigation */\n function prevMonth() {\n if (viewMonth === 0) { setViewMonth(11); setViewYear(y => y - 1); }\n else setViewMonth(m => m - 1);\n }\n function nextMonth() {\n if (viewMonth === 11) { setViewMonth(0); setViewYear(y => y + 1); }\n else setViewMonth(m => m + 1);\n }\n\n /* Day grid */\n const totalDays = daysInMonth(viewYear, viewMonth);\n const firstDay = firstDayOf(viewYear, viewMonth);\n const prevTotal = daysInMonth(viewYear, viewMonth === 0 ? 11 : viewMonth - 1);\n const minParsed = parseYMD(min ?? \"\");\n\n function isDisabled(y: number, m: number, d: number) {\n if (!minParsed) return false;\n return new Date(y, m, d) < new Date(minParsed.y, minParsed.m, minParsed.d);\n }\n\n type Cell = { d: number; m: number; y: number; current: boolean };\n const cells: Cell[] = [];\n for (let i = 0; i < firstDay; i++) {\n const d = prevTotal - firstDay + 1 + i;\n const m = viewMonth === 0 ? 11 : viewMonth - 1;\n const y = viewMonth === 0 ? viewYear - 1 : viewYear;\n cells.push({ d, m, y, current: false });\n }\n for (let d = 1; d <= totalDays; d++) cells.push({ d, m: viewMonth, y: viewYear, current: true });\n const remaining = 42 - cells.length;\n for (let d = 1; d <= remaining; d++) {\n const m = viewMonth === 11 ? 0 : viewMonth + 1;\n const y = viewMonth === 11 ? viewYear + 1 : viewYear;\n cells.push({ d, m, y, current: false });\n }\n\n const years = Array.from({ length: 15 }, (_, i) => today.getFullYear() - 2 + i);\n\n function selectDay(cell: Cell) {\n if (!cell.current) { setViewYear(cell.y); setViewMonth(cell.m); }\n if (cell.current && isDisabled(cell.y, cell.m, cell.d)) return;\n onChange(toYMD(cell.y, cell.m, cell.d));\n setOpen(false);\n }\n\n const isToday = (c: Cell) => c.d === today.getDate() && c.m === today.getMonth() && c.y === today.getFullYear();\n const isSelected = (c: Cell) => !!parsed && c.d === parsed.d && c.m === parsed.m && c.y === parsed.y;\n\n /* ── Calendar panel (portalled) ── */\n const panel = (\n <AnimatePresence>\n {open && (\n <motion.div\n ref={panelRef}\n initial={{ opacity: 0, scale: 0.97, y: -6 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.97, y: -6 }}\n transition={{ duration: 0.16, ease: [0.16, 1, 0.3, 1] }}\n className=\"isolate rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg select-none dark:shadow-black/40\"\n style={{\n position: \"fixed\",\n top: panelPos.top,\n left: panelPos.left,\n width: PANEL_W,\n zIndex: 20000,\n backgroundColor: \"var(--popover)\",\n boxShadow: \"0 16px 40px rgba(0,0,0,0.12), 0 4px 12px rgba(0,0,0,0.07)\",\n }}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 pt-4 pb-3\">\n <button onClick={prevMonth}\n className=\"w-8 h-8 rounded-full flex items-center justify-center text-gray-500 hover:bg-gray-100 transition-colors\">\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n\n <div className=\"flex items-center gap-1\">\n {/* Month */}\n <div className=\"relative\">\n <button onClick={() => { setMonthMenu(o => !o); setYearMenu(false); }}\n className=\"flex items-center gap-1 px-2 py-1 rounded-lg text-[14px] font-semibold text-gray-900 hover:bg-gray-100 transition-colors\">\n {MONTHS[viewMonth].slice(0, 3)}\n <ChevronDown className=\"w-3 h-3 text-gray-400\" />\n </button>\n <AnimatePresence>\n {monthMenu && (\n <motion.div\n initial={{ opacity: 0, y: -4 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -4 }}\n transition={{ duration: 0.12 }}\n className=\"absolute top-full left-0 z-[10000] mt-1 max-h-[220px] min-w-[130px] overflow-y-auto rounded-xl border border-border bg-popover py-1 shadow-lg\"\n >\n {MONTHS.map((mn, mi) => (\n <button key={mn} onClick={() => { setViewMonth(mi); setMonthMenu(false); }}\n className=\"w-full px-3 py-2 text-left text-[13px] text-foreground transition-colors hover:bg-muted\"\n style={{ fontWeight: mi === viewMonth ? 600 : 400, color: mi === viewMonth ? PRIMARY : undefined }}\n >\n {mn}\n </button>\n ))}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Year */}\n <div className=\"relative\">\n <button onClick={() => { setYearMenu(o => !o); setMonthMenu(false); }}\n className=\"flex items-center gap-1 px-2 py-1 rounded-lg text-[14px] font-semibold text-gray-900 hover:bg-gray-100 transition-colors\">\n {viewYear}\n <ChevronDown className=\"w-3 h-3 text-gray-400\" />\n </button>\n <AnimatePresence>\n {yearMenu && (\n <motion.div\n initial={{ opacity: 0, y: -4 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -4 }}\n transition={{ duration: 0.12 }}\n className=\"absolute top-full left-0 z-[10000] mt-1 max-h-[200px] min-w-[90px] overflow-y-auto rounded-xl border border-border bg-popover py-1 shadow-lg\"\n >\n {years.map(yr => (\n <button key={yr} onClick={() => { setViewYear(yr); setYearMenu(false); }}\n className=\"w-full px-3 py-2 text-left text-[13px] text-foreground transition-colors hover:bg-muted\"\n style={{ fontWeight: yr === viewYear ? 600 : 400, color: yr === viewYear ? PRIMARY : undefined }}\n >\n {yr}\n </button>\n ))}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n\n <button onClick={nextMonth}\n className=\"w-8 h-8 rounded-full flex items-center justify-center text-gray-500 hover:bg-gray-100 transition-colors\">\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Day headers — explicit grid: Tailwind grid-cols-7 can be dropped from CSS output for portalled nodes */}\n <div\n className=\"px-3 pb-1\"\n style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, minmax(0, 1fr))\" }}\n >\n {DAYS.map((d) => (\n <div key={d} className=\"py-1 text-center text-[11.5px] font-semibold text-muted-foreground\">\n {d}\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div\n className=\"gap-y-0.5 px-3 pb-4\"\n style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, minmax(0, 1fr))\" }}\n >\n {cells.map((cell, i) => {\n const selected = isSelected(cell);\n const tod = isToday(cell);\n const disabled = cell.current && isDisabled(cell.y, cell.m, cell.d);\n return (\n <button key={i} onClick={() => selectDay(cell)} disabled={disabled}\n className={cn(\n \"h-9 w-9 mx-auto rounded-full text-[13px] font-medium flex items-center justify-center transition-all\",\n selected && \"text-white font-semibold\",\n !selected && tod && \"font-semibold\",\n !selected && !tod && cell.current && !disabled && \"text-gray-800 hover:bg-gray-100\",\n !selected && !cell.current && \"text-gray-300 hover:bg-gray-50\",\n disabled && \"opacity-30 cursor-not-allowed\",\n )}\n style={selected ? { background: PRIMARY } : tod ? { background: `${PRIMARY}18`, color: PRIMARY } : {}}>\n {cell.d}\n </button>\n );\n })}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n\n return (\n <div className={cn(\"relative\", className)}>\n {label && <p className=\"mb-2 text-sm font-medium text-foreground\">{label}</p>}\n\n {/* Trigger */}\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => open ? setOpen(false) : openPanel()}\n className={cn(\n \"flex h-12 min-h-12 w-full items-center gap-3 rounded-xl border border-border bg-card px-5 text-left text-[15px] shadow-sm transition-colors\",\n open ? \"border-ring ring-2 ring-ring/20\" : \"hover:border-muted-foreground/45\",\n )}\n >\n <CalendarDays className=\"size-[1.125rem] shrink-0 text-muted-foreground\" />\n <span className={cn(\"flex-1\", value ? \"text-foreground\" : \"text-muted-foreground\")}>\n {value ? displayDate(value) : placeholder}\n </span>\n <ChevronDown className={cn(\"size-[1.125rem] shrink-0 text-muted-foreground transition-transform\", open && \"rotate-180\")} />\n </button>\n\n {/* Portal */}\n {mounted && createPortal(panel, document.body)}\n </div>\n );\n}\n","\"use client\"\n\n/**\n * Chart primitives from shadcn/ui (Recharts composition layer).\n * @see https://ui.shadcn.com/docs/components/radix/chart\n */\n\nimport * as React from \"react\"\nimport * as RechartsPrimitive from \"recharts\"\nimport type { TooltipValueType } from \"recharts\"\n\nimport { cn } from \"./utils\"\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const\n\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const\ntype TooltipNameType = number | string\n\nexport type ChartConfig = Record<\n string,\n {\n label?: React.ReactNode\n icon?: React.ComponentType\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n )\n>\n\ntype ChartContextProps = {\n config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nfunction useChart() {\n const context = React.useContext(ChartContext)\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\")\n }\n\n return context\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n initialDimension = INITIAL_DIMENSION,\n ...props\n}: React.ComponentProps<\"div\"> & {\n config: ChartConfig\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >[\"children\"]\n initialDimension?: {\n width: number\n height: number\n }\n}) {\n const uniqueId = React.useId()\n const chartId = `chart-${id ?? uniqueId.replace(/:/g, \"\")}`\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer\n initialDimension={initialDimension}\n >\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n )\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme ?? config.color\n )\n\n if (!colorConfig.length) {\n return null\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ??\n itemConfig.color\n return color ? ` --color-${key}: ${color};` : null\n })\n .join(\"\\n\")}\n}\n`\n )\n .join(\"\\n\"),\n }}\n />\n )\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<\"div\"> & {\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: \"line\" | \"dot\" | \"dashed\"\n nameKey?: string\n labelKey?: string\n } & Omit<\n RechartsPrimitive.DefaultTooltipContentProps<\n TooltipValueType,\n TooltipNameType\n >,\n \"accessibilityLayer\"\n >) {\n const { config } = useChart()\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null\n }\n\n const [item] = payload\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const value =\n !labelKey && typeof label === \"string\"\n ? (config[label]?.label ?? label)\n : itemConfig?.label\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n )\n }\n\n if (!value) {\n return null\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ])\n\n if (!active || !payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\"\n\n return (\n <div\n className={cn(\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey ?? item.name ?? item.dataKey ?? \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const indicatorColor = color ?? item.payload?.fill ?? item.color\n\n return (\n <div\n key={index}\n className={cn(\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\n indicator === \"dot\" && \"items-center\"\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n }\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\"\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label ?? item.name}\n </span>\n </div>\n {item.value != null && (\n <span className=\"font-mono font-medium text-foreground tabular-nums\">\n {typeof item.value === \"number\"\n ? item.value.toLocaleString()\n : String(item.value)}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = \"bottom\",\n nameKey,\n}: React.ComponentProps<\"div\"> & {\n hideIcon?: boolean\n nameKey?: string\n} & RechartsPrimitive.DefaultLegendContentProps) {\n const { config } = useChart()\n\n if (!payload?.length) {\n return null\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className\n )}\n >\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey ?? item.dataKey ?? \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n return (\n <div\n key={index}\n className={cn(\n \"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\"\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n )\n })}\n </div>\n )\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined\n\n let configLabelKey: string = key\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key]\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Line,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport {\n ArrowDownRight,\n ArrowUpRight,\n ExternalLink,\n Info,\n Minus,\n} from \"lucide-react\";\nimport { cn } from \"./utils\";\nimport { Button } from \"./button\";\nimport { Separator } from \"./separator\";\n\nconst gridStroke = \"color-mix(in srgb, var(--border) 65%, transparent)\";\nconst tickFill = \"var(--muted-foreground)\";\n\n/** ─── KPI + sparkline (dashboard stat tiles) ─────────────────────────── */\n\nexport type MetricSparklinePoint = { x: string | number; y: number };\n\nexport type MetricSparklineCardProps = {\n title: string;\n icon?: React.ReactNode;\n value: React.ReactNode;\n /** e.g. \"+8.4% vs last month\" */\n trend?: { direction: \"up\" | \"down\" | \"flat\"; label: string };\n data: MetricSparklinePoint[];\n /** Stroke / gradient accent (CSS color) */\n accentColor?: string;\n className?: string;\n onInfoClick?: () => void;\n};\n\nexport function MetricSparklineCard({\n title,\n icon,\n value,\n trend,\n data,\n accentColor = \"var(--chart-1)\",\n className,\n onInfoClick,\n}: MetricSparklineCardProps) {\n const gid = React.useId().replace(/:/g, \"\");\n const chartData = data.map((d) => ({ ...d, y: d.y }));\n\n const trendCls =\n trend?.direction === \"up\"\n ? \"text-emerald-600 dark:text-emerald-400\"\n : trend?.direction === \"down\"\n ? \"text-red-600 dark:text-red-400\"\n : \"text-muted-foreground\";\n\n const TrendIcon =\n trend?.direction === \"up\" ? ArrowUpRight : trend?.direction === \"down\" ? ArrowDownRight : Minus;\n\n return (\n <div\n className={cn(\n \"relative overflow-hidden rounded-xl border border-border bg-card p-5 text-card-foreground shadow-sm\",\n className\n )}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {icon ? <span className=\"flex shrink-0 text-muted-foreground [&_svg]:size-4\">{icon}</span> : null}\n <span className=\"truncate text-sm font-semibold text-foreground\">{title}</span>\n </div>\n {onInfoClick ? (\n <button\n type=\"button\"\n onClick={onInfoClick}\n className=\"shrink-0 rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n aria-label=\"More info\"\n >\n <Info className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n\n <div className=\"mt-3 text-2xl font-semibold tabular-nums tracking-tight text-foreground\">{value}</div>\n\n <div className=\"pointer-events-none absolute bottom-3 right-3 h-14 w-[46%] max-w-[9rem] opacity-95\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={chartData} margin={{ top: 4, right: 0, left: 0, bottom: 0 }}>\n <defs>\n <linearGradient id={gid} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={accentColor} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={accentColor} stopOpacity={0} />\n </linearGradient>\n </defs>\n <Area\n type=\"monotone\"\n dataKey=\"y\"\n stroke={accentColor}\n strokeWidth={2}\n fill={`url(#${gid})`}\n isAnimationActive={false}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n\n {trend ? (\n <div className={cn(\"mt-10 flex items-center gap-1 text-xs font-medium\", trendCls)}>\n <TrendIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span>{trend.label}</span>\n </div>\n ) : (\n <div className=\"mt-10\" />\n )}\n </div>\n );\n}\n\n/** ─── Hero area + optional compare line + tabs + footer ──────────────── */\n\nexport type DashboardAreaChartPoint = Record<string, string | number>;\n\nexport type DashboardAreaChartTemplateProps = {\n title: string;\n tabs: { id: string; label: string }[];\n activeTabId: string;\n onTabChange: (id: string) => void;\n headline: React.ReactNode;\n delta?: React.ReactNode;\n data: DashboardAreaChartPoint[];\n xKey: string;\n areaKey: string;\n compareLineKey?: string;\n height?: number;\n formatYAxis?: (v: number) => string;\n footer?: React.ReactNode;\n className?: string;\n};\n\nexport function DashboardAreaChartTemplate({\n title,\n tabs,\n activeTabId,\n onTabChange,\n headline,\n delta,\n data,\n xKey,\n areaKey,\n compareLineKey,\n height = 220,\n formatYAxis = (v) =>\n v >= 1_000_000 ? `${(v / 1_000_000).toFixed(1)}L` : v >= 1_000 ? `${(v / 1_000).toFixed(0)}K` : `${v}`,\n footer,\n className,\n}: DashboardAreaChartTemplateProps) {\n const areaGid = React.useId().replace(/:/g, \"\");\n\n return (\n <div className={cn(\"rounded-xl border border-border bg-card text-card-foreground shadow-sm\", className)}>\n <div className=\"flex flex-col gap-4 border-b border-border px-5 pt-4 pb-3 sm:flex-row sm:items-start sm:justify-between\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n <div className=\"flex flex-wrap gap-1 rounded-lg border border-border bg-muted/30 p-0.5\">\n {tabs.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n onClick={() => onTabChange(t.id)}\n className={cn(\n \"rounded-md px-2.5 py-1 text-[11px] font-medium transition-colors\",\n activeTabId === t.id\n ? \"bg-card text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n {t.label}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"px-5 pt-4\">\n <div className=\"text-2xl font-semibold tabular-nums tracking-tight text-foreground\">{headline}</div>\n {delta ? <div className=\"mt-1 text-sm\">{delta}</div> : null}\n </div>\n\n <div className=\"px-3 pb-2 pt-2\" style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={data} margin={{ top: 8, right: 12, left: 0, bottom: 0 }}>\n <defs>\n <linearGradient id={areaGid} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"var(--chart-1)\" stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor=\"var(--chart-1)\" stopOpacity={0.02} />\n </linearGradient>\n </defs>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} vertical={false} />\n <XAxis\n dataKey={xKey}\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 10, fill: tickFill }}\n interval=\"preserveStartEnd\"\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 10, fill: tickFill }}\n tickFormatter={formatYAxis}\n width={44}\n />\n <Tooltip\n contentStyle={{\n borderRadius: 10,\n border: \"1px solid var(--border)\",\n fontSize: 12,\n background: \"var(--popover)\",\n color: \"var(--popover-foreground)\",\n }}\n />\n <Area\n type=\"monotone\"\n dataKey={areaKey}\n stroke=\"var(--chart-1)\"\n strokeWidth={2}\n fill={`url(#${areaGid})`}\n />\n {compareLineKey ? (\n <Line\n type=\"monotone\"\n dataKey={compareLineKey}\n stroke=\"var(--muted-foreground)\"\n strokeWidth={1.5}\n strokeDasharray=\"4 4\"\n dot={false}\n />\n ) : null}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n\n {footer ? (\n <>\n <Separator />\n <div className=\"px-5 py-3\">{footer}</div>\n </>\n ) : null}\n </div>\n );\n}\n\n/** ─── Grouped vertical bars + legend (e.g. volume vs settled) ───────── */\n\nexport type GroupedBarSeries = { key: string; label: string; color: string };\n\nexport type GroupedBarChartTemplateProps = {\n title: string;\n subtitle?: string;\n data: DashboardAreaChartPoint[];\n xKey: string;\n series: GroupedBarSeries[];\n height?: number;\n formatYAxis?: (v: number) => string;\n className?: string;\n};\n\nexport function GroupedBarChartTemplate({\n title,\n subtitle,\n data,\n xKey,\n series,\n height = 200,\n formatYAxis = (v) =>\n v >= 1_000_000 ? `${(v / 1_000_000).toFixed(1)}M` : v >= 1_000 ? `${(v / 1_000).toFixed(0)}K` : `${v}`,\n className,\n}: GroupedBarChartTemplateProps) {\n return (\n <div className={cn(\"rounded-xl border border-border bg-card px-5 pt-4 pb-3 text-card-foreground shadow-sm\", className)}>\n <div className=\"mb-3 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {subtitle ? <p className=\"mt-0.5 text-xs text-muted-foreground\">{subtitle}</p> : null}\n </div>\n <div className=\"flex flex-wrap items-center gap-4\">\n {series.map((s) => (\n <div key={s.key} className=\"flex items-center gap-1.5\">\n <div className=\"size-2.5 rounded-sm\" style={{ background: s.color }} />\n <span className=\"text-[11px] font-medium text-muted-foreground\">{s.label}</span>\n </div>\n ))}\n </div>\n </div>\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={data} barCategoryGap=\"22%\" barGap={4}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} vertical={false} />\n <XAxis dataKey={xKey} axisLine={false} tickLine={false} tick={{ fontSize: 11, fill: tickFill }} />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 11, fill: tickFill }}\n tickFormatter={formatYAxis}\n width={40}\n />\n <Tooltip\n contentStyle={{\n borderRadius: 10,\n border: \"1px solid var(--border)\",\n fontSize: 12,\n background: \"var(--popover)\",\n }}\n />\n {series.map((s) => (\n <Bar key={s.key} dataKey={s.key} name={s.label} fill={s.color} radius={[5, 5, 0, 0]} maxBarSize={36} />\n ))}\n </BarChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\n/** ─── Ranked rows with horizontal bar (country / state insights) ────── */\n\nexport type RankedBarItem = {\n id: string;\n leading?: React.ReactNode;\n label: string;\n value: string;\n /** 0–100 width of the filled bar */\n percent: number;\n};\n\nexport type RankedBarListTemplateProps = {\n title: string;\n subtitle?: string;\n headerRight?: React.ReactNode;\n items: RankedBarItem[];\n /** CSS colors for bar gradient */\n barFrom?: string;\n barTo?: string;\n className?: string;\n};\n\nexport function RankedBarListTemplate({\n title,\n subtitle,\n headerRight,\n items,\n barFrom = \"var(--chart-1)\",\n barTo = \"var(--chart-3)\",\n className,\n}: RankedBarListTemplateProps) {\n return (\n <div className={cn(\"rounded-xl border border-border bg-card p-5 text-card-foreground shadow-sm\", className)}>\n <div className=\"mb-4 flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {subtitle ? <p className=\"mt-0.5 text-xs text-muted-foreground\">{subtitle}</p> : null}\n </div>\n {headerRight ? <div className=\"shrink-0\">{headerRight}</div> : null}\n </div>\n <ul className=\"space-y-3\">\n {items.map((row) => (\n <li key={row.id} className=\"flex items-center gap-3 text-sm\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n {row.leading ? <span className=\"shrink-0 text-muted-foreground\">{row.leading}</span> : null}\n <span className=\"truncate font-medium text-foreground\">{row.label}</span>\n </div>\n <div className=\"relative hidden h-2 w-[min(40%,9rem)] overflow-hidden rounded-full bg-muted sm:block\">\n <div\n className=\"absolute inset-y-0 left-0 rounded-full\"\n style={{\n width: `${Math.min(100, Math.max(0, row.percent))}%`,\n background: `linear-gradient(90deg, ${barFrom}, ${barTo})`,\n }}\n />\n </div>\n <span className=\"w-14 shrink-0 text-right text-xs font-semibold tabular-nums text-foreground\">\n {row.value}\n </span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n/** ─── Vertical category bars (e.g. T+N settlement mix) ──────────────── */\n\nexport type CategoryBarPoint = { category: string; value: number };\n\nexport type CategoryBarChartTemplateProps = {\n title: string;\n subtitle?: string;\n data: CategoryBarPoint[];\n valueLabel?: string;\n barColor?: string;\n height?: number;\n className?: string;\n};\n\nexport function CategoryBarChartTemplate({\n title,\n subtitle,\n data,\n valueLabel = \"Share\",\n barColor = \"var(--chart-1)\",\n height = 200,\n className,\n}: CategoryBarChartTemplateProps) {\n const chartData = data.map((d) => ({ name: d.category, v: d.value }));\n\n return (\n <div className={cn(\"rounded-xl border border-border bg-card px-5 pt-4 pb-3 text-card-foreground shadow-sm\", className)}>\n <div className=\"mb-3\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {subtitle ? <p className=\"mt-0.5 text-xs text-muted-foreground\">{subtitle}</p> : null}\n </div>\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={chartData} barCategoryGap=\"28%\">\n <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} vertical={false} />\n <XAxis dataKey=\"name\" axisLine={false} tickLine={false} tick={{ fontSize: 11, fill: tickFill }} />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 11, fill: tickFill }}\n tickFormatter={(v) => `${v}%`}\n domain={[0, \"dataMax + 5\"]}\n width={36}\n />\n <Tooltip\n formatter={(value) => [`${value ?? 0}%`, valueLabel]}\n contentStyle={{\n borderRadius: 10,\n border: \"1px solid var(--border)\",\n fontSize: 12,\n background: \"var(--popover)\",\n }}\n />\n <Bar dataKey=\"v\" fill={barColor} radius={[6, 6, 0, 0]} maxBarSize={48} />\n </BarChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n\n/** ─── Mini sparkline + stat row (success / failed / avg) ────────────── */\n\nexport type MiniSparklinePoint = { x: string | number; y: number; compare?: number };\n\nexport type MiniSparklineStat = { label: string; value: string; dotClassName?: string };\n\nexport type MiniSparklineChartCardProps = {\n title: string;\n value: React.ReactNode;\n data: MiniSparklinePoint[];\n accentColor?: string;\n stats: MiniSparklineStat[];\n height?: number;\n className?: string;\n};\n\nexport function MiniSparklineChartCard({\n title,\n value,\n data,\n accentColor = \"var(--chart-4)\",\n height = 100,\n stats,\n className,\n}: MiniSparklineChartCardProps) {\n const gid = React.useId().replace(/:/g, \"\");\n const hasCompare = data.some((d) => d.compare != null);\n\n return (\n <div className={cn(\"rounded-xl border border-border bg-card p-5 text-card-foreground shadow-sm\", className)}>\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n <div className=\"mt-2 text-2xl font-semibold tabular-nums\">{value}</div>\n <div className=\"mt-2\" style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={data} margin={{ top: 4, right: 8, left: 0, bottom: 0 }}>\n <defs>\n <linearGradient id={gid} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={accentColor} stopOpacity={0.3} />\n <stop offset=\"100%\" stopColor={accentColor} stopOpacity={0} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"x\" hide />\n <YAxis hide domain={[\"dataMin - 1\", \"dataMax + 1\"]} />\n <Area type=\"monotone\" dataKey=\"y\" stroke={accentColor} strokeWidth={2} fill={`url(#${gid})`} />\n {hasCompare ? (\n <Line\n type=\"monotone\"\n dataKey=\"compare\"\n stroke=\"var(--muted-foreground)\"\n strokeWidth={1.5}\n strokeDasharray=\"4 4\"\n dot={false}\n connectNulls\n />\n ) : null}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n <div className=\"mt-3 flex flex-wrap gap-x-4 gap-y-2 border-t border-border pt-3 text-[11px]\">\n {stats.map((s) => (\n <div key={s.label} className=\"flex items-center gap-1.5\">\n {s.dotClassName ? <span className={cn(\"size-1.5 rounded-full\", s.dotClassName)} /> : null}\n <span className=\"text-muted-foreground\">{s.label}</span>\n <span className=\"font-semibold tabular-nums text-foreground\">{s.value}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\n/** ─── “Needs attention” list with actions ───────────────────────────── */\n\nexport type AttentionListItem = {\n id: string;\n title: string;\n value: string;\n valueTone?: \"default\" | \"warning\" | \"danger\";\n meta?: string;\n actionLabel: string;\n onAction?: () => void;\n};\n\nexport type AttentionListTemplateProps = {\n title: string;\n items: AttentionListItem[];\n className?: string;\n};\n\nconst toneCls = {\n default: \"text-foreground\",\n warning: \"text-amber-600 dark:text-amber-400\",\n danger: \"text-red-600 dark:text-red-400\",\n} as const;\n\nexport function AttentionListTemplate({ title, items, className }: AttentionListTemplateProps) {\n return (\n <div className={cn(\"rounded-xl border border-border bg-card p-5 text-card-foreground shadow-sm\", className)}>\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n <ul className=\"mt-4 space-y-4\">\n {items.map((item) => (\n <li\n key={item.id}\n className=\"flex flex-col gap-3 border-b border-border/60 pb-4 last:border-0 last:pb-0 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"min-w-0 space-y-0.5\">\n <p className=\"text-sm font-semibold text-foreground\">{item.title}</p>\n <p className={cn(\"text-lg font-semibold tabular-nums\", toneCls[item.valueTone ?? \"default\"])}>\n {item.value}\n </p>\n {item.meta ? <p className=\"text-xs text-muted-foreground\">{item.meta}</p> : null}\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"md\"\n className=\"shrink-0 gap-1.5\"\n onClick={item.onAction}\n >\n {item.actionLabel}\n <ExternalLink className=\"size-3.5 opacity-70\" aria-hidden />\n </Button>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTheme } from \"next-themes\";\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\";\nimport { useEffect, useState } from \"react\";\n\n/** Drop-in toast host; pair with `toast` from `sonner`. Resolves theme via next-themes when mounted. */\nexport function Toaster({ theme, ...props }: ToasterProps) {\n const { resolvedTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const resolved =\n theme ?? (mounted && resolvedTheme === \"dark\" ? \"dark\" : \"light\");\n\n return (\n <Sonner\n theme={resolved}\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast:\n \"bg-[var(--popover)] text-[var(--popover-foreground)] border-[var(--border)] shadow-lg rounded-[10px] text-[13px]\",\n description: \"text-[var(--muted-foreground)]\",\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from \"sonner\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check, Pencil, X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface InlineEditProps {\n value: string;\n onConfirm: (val: string) => void;\n placeholder?: string;\n multiline?: boolean;\n disabled?: boolean;\n showButtons?: boolean;\n readClassName?: string;\n inputClassName?: string;\n}\n\nconst InlineEdit = React.forwardRef<HTMLDivElement, InlineEditProps>(\n (\n {\n value,\n onConfirm,\n placeholder = \"Click to edit…\",\n multiline = false,\n disabled = false,\n showButtons = false,\n readClassName,\n inputClassName,\n },\n ref\n ) => {\n const [editing, setEditing] = React.useState(false);\n const [draft, setDraft] = React.useState(value);\n const [hovered, setHovered] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement & HTMLTextAreaElement>(null);\n\n React.useEffect(() => {\n if (!editing) setDraft(value);\n }, [value, editing]);\n\n React.useEffect(() => {\n if (editing) {\n inputRef.current?.focus();\n if (inputRef.current) {\n const el = inputRef.current;\n const len = el.value.length;\n el.setSelectionRange(len, len);\n }\n }\n }, [editing]);\n\n const confirm = React.useCallback(() => {\n setEditing(false);\n if (draft !== value) onConfirm(draft);\n }, [draft, value, onConfirm]);\n\n const cancel = React.useCallback(() => {\n setEditing(false);\n setDraft(value);\n }, [value]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !multiline) {\n e.preventDefault();\n confirm();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n cancel();\n }\n },\n [confirm, cancel, multiline]\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent) => {\n // If showButtons, don't auto-confirm on blur unless focus leaves the whole group\n if (showButtons) {\n const related = e.relatedTarget as Node | null;\n const container = (e.currentTarget as HTMLElement).closest(\n \"[data-inline-edit]\"\n );\n if (container && related && container.contains(related)) return;\n }\n confirm();\n },\n [confirm, showButtons]\n );\n\n const startEditing = () => {\n if (disabled) return;\n setEditing(true);\n };\n\n const sharedInputClass = cn(\n \"w-full rounded-md border border-border bg-card px-2 py-1 text-[15px] leading-tight text-foreground shadow-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n inputClassName\n );\n\n return (\n <div ref={ref} data-inline-edit=\"\" className=\"relative inline-flex flex-col gap-1 max-w-full\">\n {editing ? (\n <>\n {multiline ? (\n <textarea\n ref={inputRef as React.Ref<HTMLTextAreaElement>}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n rows={3}\n className={cn(sharedInputClass, \"resize-none leading-relaxed py-1.5\")}\n />\n ) : (\n <input\n ref={inputRef as React.Ref<HTMLInputElement>}\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n className={sharedInputClass}\n />\n )}\n\n {showButtons && (\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n confirm();\n }}\n className={cn(\n \"inline-flex items-center justify-center rounded-md p-1\",\n \"text-emerald-600 hover:bg-emerald-50 dark:hover:bg-emerald-950/40\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n )}\n aria-label=\"Confirm\"\n >\n <Check className=\"size-3.5\" />\n </button>\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n cancel();\n }}\n className={cn(\n \"inline-flex items-center justify-center rounded-md p-1\",\n \"text-destructive hover:bg-destructive/10\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\"\n )}\n aria-label=\"Cancel\"\n >\n <X className=\"size-3.5\" />\n </button>\n </div>\n )}\n </>\n ) : (\n <span\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={value || placeholder}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={startEditing}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n startEditing();\n }\n }}\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-md px-2 py-1 text-[15px] leading-tight\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n !disabled && \"hover:bg-muted cursor-text\",\n disabled && \"cursor-not-allowed opacity-50\",\n readClassName\n )}\n >\n <span className={cn(!value && \"text-muted-foreground\")}>\n {value || placeholder}\n </span>\n {!disabled && (\n <Pencil\n className={cn(\n \"size-3.5 shrink-0 text-muted-foreground transition-opacity duration-pg-fast ease-pg-standard\",\n hovered ? \"opacity-100\" : \"opacity-0\"\n )}\n aria-hidden\n />\n )}\n </span>\n )}\n </div>\n );\n }\n);\n\nInlineEdit.displayName = \"InlineEdit\";\n\nexport { InlineEdit };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface InlineDialogProps\n extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Root> {}\n\nexport interface InlineDialogContentProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>,\n \"side\" | \"sideOffset\"\n > {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n /** Hide the built-in close button */\n hideClose?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// InlineDialog (Popover root)\n// ---------------------------------------------------------------------------\n\nconst InlineDialog = PopoverPrimitive.Root;\nInlineDialog.displayName = \"InlineDialog\";\n\n// ---------------------------------------------------------------------------\n// InlineDialogTrigger\n// ---------------------------------------------------------------------------\n\nconst InlineDialogTrigger = PopoverPrimitive.Trigger;\nInlineDialogTrigger.displayName = \"InlineDialogTrigger\";\n\n// ---------------------------------------------------------------------------\n// Arrow positioning helpers\n// ---------------------------------------------------------------------------\n\ntype ArrowSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\n/**\n * Returns Tailwind classes that position the 8×8 arrow square on the correct\n * edge of the floating card and rotate it so the corner points at the trigger.\n */\nfunction getArrowClasses(side: ArrowSide): string {\n const base =\n \"absolute size-2 bg-card border border-border pointer-events-none\";\n\n switch (side) {\n case \"top\":\n // Arrow appears on the bottom edge of the card (card is above trigger)\n return cn(\n base,\n \"bottom-0 left-1/2 -translate-x-1/2 translate-y-1/2 rotate-45\",\n \"border-t-0 border-l-0\"\n );\n case \"bottom\":\n // Arrow appears on the top edge of the card (card is below trigger)\n return cn(\n base,\n \"top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 rotate-45\",\n \"border-b-0 border-r-0\"\n );\n case \"left\":\n // Arrow appears on the right edge of the card (card is left of trigger)\n return cn(\n base,\n \"right-0 top-1/2 -translate-y-1/2 translate-x-1/2 rotate-45\",\n \"border-t-0 border-l-0\"\n );\n case \"right\":\n // Arrow appears on the left edge of the card (card is right of trigger)\n return cn(\n base,\n \"left-0 top-1/2 -translate-y-1/2 -translate-x-1/2 rotate-45\",\n \"border-b-0 border-r-0\"\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// InlineDialogContent\n// ---------------------------------------------------------------------------\n\nconst InlineDialogContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n InlineDialogContentProps\n>(\n (\n {\n className,\n side = \"bottom\",\n sideOffset = 8,\n hideClose = false,\n children,\n ...props\n },\n ref\n ) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n side={side}\n sideOffset={sideOffset}\n className={cn(\n // Base card\n \"relative z-[120] max-w-xs overflow-visible\",\n \"rounded-xl border border-border bg-card p-4 text-foreground shadow-lg\",\n // Animation\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0\",\n \"transition-opacity duration-pg-fast ease-pg-standard\",\n \"outline-none\",\n className\n )}\n {...props}\n >\n {/* Arrow pointer */}\n <span className={getArrowClasses(side)} aria-hidden=\"true\" />\n\n {/* Close button */}\n {!hideClose && (\n <PopoverPrimitive.Close\n className={cn(\n \"absolute right-2 top-2 z-10\",\n \"inline-flex size-6 items-center justify-center rounded-md\",\n \"text-muted-foreground hover:text-foreground\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\"\n )}\n aria-label=\"Close\"\n >\n <X className=\"size-3.5\" />\n </PopoverPrimitive.Close>\n )}\n\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n )\n);\nInlineDialogContent.displayName = \"InlineDialogContent\";\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport { InlineDialog, InlineDialogTrigger, InlineDialogContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Info, CheckCircle2, AlertTriangle, XCircle, X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type FlagVariant = \"info\" | \"success\" | \"warning\" | \"error\";\nexport type FlagGroupPosition = \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\nexport interface FlagAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface FlagProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Heading text shown in bold */\n title: string;\n /** Optional body copy shown below the title */\n description?: string;\n /** Visual severity / colour */\n variant?: FlagVariant;\n /** Override the default lucide icon */\n icon?: React.ReactNode;\n /** Called when the close button is pressed */\n onDismiss?: () => void;\n /** Action buttons rendered below the content. Pass `false` to disable. */\n autoDismiss?: number | false;\n /** Optional CTA buttons */\n actions?: FlagAction[];\n}\n\nexport interface FlagGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Corner to anchor the stack */\n position?: FlagGroupPosition;\n}\n\nexport interface UseFlagGroupReturn {\n flags: Array<FlagProps & { id: string }>;\n addFlag: (flag: Omit<FlagProps, \"onDismiss\"> & { id?: string }) => string;\n removeFlag: (id: string) => void;\n clearAll: () => void;\n}\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst DEFAULT_AUTO_DISMISS = 8000;\n\nconst variantBorder: Record<FlagVariant, string> = {\n info: \"border-l-blue-500\",\n success: \"border-l-green-500\",\n warning: \"border-l-amber-500\",\n error: \"border-l-red-500\",\n};\n\nconst variantProgressBar: Record<FlagVariant, string> = {\n info: \"bg-blue-500\",\n success: \"bg-green-500\",\n warning: \"bg-amber-500\",\n error: \"bg-red-500\",\n};\n\nconst variantIconColor: Record<FlagVariant, string> = {\n info: \"text-blue-500\",\n success: \"text-green-500\",\n warning: \"text-amber-500\",\n error: \"text-red-500\",\n};\n\nconst defaultIcons: Record<FlagVariant, React.ElementType> = {\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n error: XCircle,\n};\n\n// ─── Flag ─────────────────────────────────────────────────────────────────────\n\nconst Flag = React.forwardRef<HTMLDivElement, FlagProps>(\n (\n {\n className,\n title,\n description,\n variant = \"info\",\n icon,\n onDismiss,\n autoDismiss = DEFAULT_AUTO_DISMISS,\n actions,\n ...props\n },\n ref\n ) => {\n const [progress, setProgress] = React.useState(100);\n const pausedRef = React.useRef(false);\n const startTimeRef = React.useRef<number | null>(null);\n const elapsedRef = React.useRef(0);\n const rafRef = React.useRef<number | null>(null);\n const duration = autoDismiss === false ? null : autoDismiss;\n\n React.useEffect(() => {\n if (duration === null) return;\n\n const tick = (now: number) => {\n if (pausedRef.current) {\n startTimeRef.current = now;\n rafRef.current = requestAnimationFrame(tick);\n return;\n }\n if (startTimeRef.current === null) startTimeRef.current = now;\n elapsedRef.current += now - startTimeRef.current;\n startTimeRef.current = now;\n\n const remaining = Math.max(0, duration - elapsedRef.current);\n const pct = (remaining / duration) * 100;\n setProgress(pct);\n\n if (remaining <= 0) {\n onDismiss?.();\n return;\n }\n rafRef.current = requestAnimationFrame(tick);\n };\n\n rafRef.current = requestAnimationFrame(tick);\n return () => {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [duration]);\n\n const handleMouseEnter = () => {\n pausedRef.current = true;\n };\n const handleMouseLeave = () => {\n pausedRef.current = false;\n startTimeRef.current = null;\n };\n\n const DefaultIcon = defaultIcons[variant];\n const renderedIcon = icon ?? <DefaultIcon className={cn(\"size-4 shrink-0 mt-0.5\", variantIconColor[variant])} aria-hidden />;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(\n \"relative w-80 overflow-hidden rounded-xl border border-border bg-card shadow-lg\",\n \"border-l-4\",\n variantBorder[variant],\n className\n )}\n {...props}\n >\n {/* Body */}\n <div className=\"flex gap-3 p-4 pr-10\">\n {renderedIcon}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-semibold text-card-foreground leading-snug\">{title}</p>\n {description && (\n <p className=\"mt-1 text-sm text-muted-foreground leading-relaxed\">{description}</p>\n )}\n {actions && actions.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {actions.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n onClick={action.onClick}\n className=\"text-xs font-medium text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded\"\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Close button */}\n {onDismiss && (\n <button\n type=\"button\"\n aria-label=\"Dismiss notification\"\n onClick={onDismiss}\n className=\"absolute top-3 right-3 rounded p-0.5 text-muted-foreground hover:text-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <X className=\"size-3.5\" aria-hidden />\n </button>\n )}\n\n {/* Auto-dismiss progress bar */}\n {duration !== null && (\n <div className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-muted\">\n <div\n className={cn(\"h-full transition-none\", variantProgressBar[variant])}\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n </div>\n );\n }\n);\nFlag.displayName = \"Flag\";\n\n// ─── FlagGroup ────────────────────────────────────────────────────────────────\n\nconst positionClasses: Record<FlagGroupPosition, string> = {\n \"bottom-right\": \"bottom-4 right-4 flex-col-reverse\",\n \"bottom-left\": \"bottom-4 left-4 flex-col-reverse\",\n \"top-right\": \"top-4 right-4 flex-col\",\n \"top-left\": \"top-4 left-4 flex-col\",\n};\n\nconst FlagGroup = React.forwardRef<HTMLDivElement, FlagGroupProps>(\n ({ className, position = \"bottom-right\", children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"fixed z-50 flex gap-2\",\n positionClasses[position],\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n);\nFlagGroup.displayName = \"FlagGroup\";\n\n// ─── useFlagGroup ─────────────────────────────────────────────────────────────\n\nfunction useFlagGroup(): UseFlagGroupReturn {\n const [flags, setFlags] = React.useState<Array<FlagProps & { id: string }>>([]);\n\n const removeFlag = React.useCallback((id: string) => {\n setFlags((prev) => prev.filter((f) => f.id !== id));\n }, []);\n\n const addFlag = React.useCallback(\n (flag: Omit<FlagProps, \"onDismiss\"> & { id?: string }): string => {\n const id = flag.id ?? `flag-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n setFlags((prev) => [...prev, { ...flag, id, onDismiss: () => removeFlag(id) }]);\n return id;\n },\n [removeFlag]\n );\n\n const clearAll = React.useCallback(() => {\n setFlags([]);\n }, []);\n\n return { flags, addFlag, removeFlag, clearAll };\n}\n\n// ─── Exports ──────────────────────────────────────────────────────────────────\n\nexport { Flag, FlagGroup, useFlagGroup };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Breakpoint type\n// ---------------------------------------------------------------------------\n\nexport type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/** Ordered list — index used for comparison */\nconst BREAKPOINT_ORDER: Breakpoint[] = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n\n/** Tailwind min-width values aligned with default config */\nconst BREAKPOINT_MIN_WIDTH: Record<Breakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};\n\nfunction bpIndex(bp: Breakpoint): number {\n return BREAKPOINT_ORDER.indexOf(bp);\n}\n\n// ---------------------------------------------------------------------------\n// Show\n// ---------------------------------------------------------------------------\n\nexport interface ShowProps extends React.HTMLAttributes<HTMLElement> {\n /** Render children at this breakpoint and above. */\n above?: Breakpoint;\n /** Render children strictly below this breakpoint. */\n below?: Breakpoint;\n /** HTML element to render. Defaults to \"div\". */\n as?: React.ElementType;\n /** Display value to restore when visible. Defaults to \"block\". */\n display?: \"block\" | \"flex\" | \"inline\" | \"inline-block\" | \"grid\" | \"inline-flex\";\n children?: React.ReactNode;\n}\n\nconst DISPLAY_ABOVE_CLASS: Record<\n Breakpoint,\n Record<ShowProps[\"display\"] & string, string>\n> = {\n sm: {\n block: \"sm:block\",\n flex: \"sm:flex\",\n inline: \"sm:inline\",\n \"inline-block\": \"sm:inline-block\",\n grid: \"sm:grid\",\n \"inline-flex\": \"sm:inline-flex\",\n },\n md: {\n block: \"md:block\",\n flex: \"md:flex\",\n inline: \"md:inline\",\n \"inline-block\": \"md:inline-block\",\n grid: \"md:grid\",\n \"inline-flex\": \"md:inline-flex\",\n },\n lg: {\n block: \"lg:block\",\n flex: \"lg:flex\",\n inline: \"lg:inline\",\n \"inline-block\": \"lg:inline-block\",\n grid: \"lg:grid\",\n \"inline-flex\": \"lg:inline-flex\",\n },\n xl: {\n block: \"xl:block\",\n flex: \"xl:flex\",\n inline: \"xl:inline\",\n \"inline-block\": \"xl:inline-block\",\n grid: \"xl:grid\",\n \"inline-flex\": \"xl:inline-flex\",\n },\n \"2xl\": {\n block: \"2xl:block\",\n flex: \"2xl:flex\",\n inline: \"2xl:inline\",\n \"inline-block\": \"2xl:inline-block\",\n grid: \"2xl:grid\",\n \"inline-flex\": \"2xl:inline-flex\",\n },\n};\n\n/** Tailwind class to hide at a breakpoint and above */\nconst HIDDEN_ABOVE_CLASS: Record<Breakpoint, string> = {\n sm: \"sm:hidden\",\n md: \"md:hidden\",\n lg: \"lg:hidden\",\n xl: \"xl:hidden\",\n \"2xl\": \"2xl:hidden\",\n};\n\nexport const Show = React.forwardRef<HTMLElement, ShowProps>(\n (\n {\n above,\n below,\n as: Tag = \"div\",\n display = \"block\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n let visibilityClass: string;\n\n if (above) {\n // hidden by default, become visible at `above` breakpoint\n visibilityClass = cn(\"hidden\", DISPLAY_ABOVE_CLASS[above][display]);\n } else if (below) {\n // visible by default, hidden at `below` breakpoint and above\n visibilityClass = HIDDEN_ABOVE_CLASS[below];\n } else {\n visibilityClass = \"\";\n }\n\n return (\n <Tag\n ref={ref}\n className={cn(visibilityClass, className)}\n {...props}\n >\n {children}\n </Tag>\n );\n }\n);\nShow.displayName = \"Show\";\n\n// ---------------------------------------------------------------------------\n// Hide\n// ---------------------------------------------------------------------------\n\nexport interface HideProps extends React.HTMLAttributes<HTMLElement> {\n /** Hide children at this breakpoint and above. */\n above?: Breakpoint;\n /** Hide children strictly below this breakpoint (i.e. visible at/above). */\n below?: Breakpoint;\n /** HTML element to render. Defaults to \"div\". */\n as?: React.ElementType;\n /** Display value to restore when visible. Defaults to \"block\". */\n display?: \"block\" | \"flex\" | \"inline\" | \"inline-block\" | \"grid\" | \"inline-flex\";\n children?: React.ReactNode;\n}\n\nexport const Hide = React.forwardRef<HTMLElement, HideProps>(\n (\n {\n above,\n below,\n as: Tag = \"div\",\n display = \"block\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n let visibilityClass: string;\n\n if (above) {\n // visible by default, hidden at `above` breakpoint and above\n visibilityClass = HIDDEN_ABOVE_CLASS[above];\n } else if (below) {\n // hidden by default (below breakpoint), visible at/above breakpoint — inverse of Show above\n visibilityClass = cn(\"hidden\", DISPLAY_ABOVE_CLASS[below][display]);\n } else {\n visibilityClass = \"\";\n }\n\n return (\n <Tag\n ref={ref}\n className={cn(visibilityClass, className)}\n {...props}\n >\n {children}\n </Tag>\n );\n }\n);\nHide.displayName = \"Hide\";\n\n// ---------------------------------------------------------------------------\n// useBreakpoint hook\n// ---------------------------------------------------------------------------\n\nfunction getActiveBreakpoint(): Breakpoint | null {\n if (typeof window === \"undefined\") return null;\n // Walk from largest to smallest — first match wins\n for (let i = BREAKPOINT_ORDER.length - 1; i >= 0; i--) {\n const bp = BREAKPOINT_ORDER[i];\n if (window.matchMedia(`(min-width: ${BREAKPOINT_MIN_WIDTH[bp]}px)`).matches) {\n return bp;\n }\n }\n return null;\n}\n\nexport interface UseBreakpointReturn {\n /** The currently active (highest matching) breakpoint, or null on SSR / xs viewport. */\n breakpoint: Breakpoint | null;\n /** Returns true when the viewport is at or above `bp`. */\n isAbove: (bp: Breakpoint) => boolean;\n /** Returns true when the viewport is strictly below `bp`. */\n isBelow: (bp: Breakpoint) => boolean;\n /** True when no breakpoint is active (viewport < 640 px). */\n isMobile: boolean;\n /** True when active breakpoint is md (768–1023 px). */\n isTablet: boolean;\n /** True when active breakpoint is lg or above (≥ 1024 px). */\n isDesktop: boolean;\n}\n\nexport function useBreakpoint(): UseBreakpointReturn {\n const [breakpoint, setBreakpoint] = React.useState<Breakpoint | null>(() =>\n getActiveBreakpoint()\n );\n\n React.useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n // Build one MediaQueryList per breakpoint and attach listeners\n const queries = BREAKPOINT_ORDER.map((bp) =>\n window.matchMedia(`(min-width: ${BREAKPOINT_MIN_WIDTH[bp]}px)`)\n );\n\n function handleChange() {\n setBreakpoint(getActiveBreakpoint());\n }\n\n queries.forEach((mql) => mql.addEventListener(\"change\", handleChange));\n // Sync once on mount (handles SSR hydration mismatch)\n handleChange();\n\n return () => {\n queries.forEach((mql) => mql.removeEventListener(\"change\", handleChange));\n };\n }, []);\n\n const isAbove = React.useCallback(\n (bp: Breakpoint): boolean => {\n if (breakpoint === null) return false;\n return bpIndex(breakpoint) >= bpIndex(bp);\n },\n [breakpoint]\n );\n\n const isBelow = React.useCallback(\n (bp: Breakpoint): boolean => {\n if (breakpoint === null) return true;\n return bpIndex(breakpoint) < bpIndex(bp);\n },\n [breakpoint]\n );\n\n return {\n breakpoint,\n isAbove,\n isBelow,\n isMobile: breakpoint === null,\n isTablet: breakpoint === \"md\",\n isDesktop: breakpoint !== null && bpIndex(breakpoint) >= bpIndex(\"lg\"),\n };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Check, ChevronDown, Search } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\nexport interface Country {\n code: string;\n name: string;\n flag: string;\n dialCode: string;\n}\n\nexport const COUNTRIES: Country[] = [\n { code: \"US\", name: \"United States\", flag: \"🇺🇸\", dialCode: \"+1\" },\n { code: \"GB\", name: \"United Kingdom\", flag: \"🇬🇧\", dialCode: \"+44\" },\n { code: \"IN\", name: \"India\", flag: \"🇮🇳\", dialCode: \"+91\" },\n { code: \"AU\", name: \"Australia\", flag: \"🇦🇺\", dialCode: \"+61\" },\n { code: \"CA\", name: \"Canada\", flag: \"🇨🇦\", dialCode: \"+1\" },\n { code: \"DE\", name: \"Germany\", flag: \"🇩🇪\", dialCode: \"+49\" },\n { code: \"FR\", name: \"France\", flag: \"🇫🇷\", dialCode: \"+33\" },\n { code: \"JP\", name: \"Japan\", flag: \"🇯🇵\", dialCode: \"+81\" },\n { code: \"SG\", name: \"Singapore\", flag: \"🇸🇬\", dialCode: \"+65\" },\n { code: \"AE\", name: \"United Arab Emirates\", flag: \"🇦🇪\", dialCode: \"+971\" },\n { code: \"CN\", name: \"China\", flag: \"🇨🇳\", dialCode: \"+86\" },\n { code: \"BR\", name: \"Brazil\", flag: \"🇧🇷\", dialCode: \"+55\" },\n { code: \"MX\", name: \"Mexico\", flag: \"🇲🇽\", dialCode: \"+52\" },\n { code: \"KR\", name: \"South Korea\", flag: \"🇰🇷\", dialCode: \"+82\" },\n { code: \"IT\", name: \"Italy\", flag: \"🇮🇹\", dialCode: \"+39\" },\n { code: \"ES\", name: \"Spain\", flag: \"🇪🇸\", dialCode: \"+34\" },\n { code: \"NL\", name: \"Netherlands\", flag: \"🇳🇱\", dialCode: \"+31\" },\n { code: \"SE\", name: \"Sweden\", flag: \"🇸🇪\", dialCode: \"+46\" },\n { code: \"NO\", name: \"Norway\", flag: \"🇳🇴\", dialCode: \"+47\" },\n { code: \"DK\", name: \"Denmark\", flag: \"🇩🇰\", dialCode: \"+45\" },\n { code: \"FI\", name: \"Finland\", flag: \"🇫🇮\", dialCode: \"+358\" },\n { code: \"CH\", name: \"Switzerland\", flag: \"🇨🇭\", dialCode: \"+41\" },\n { code: \"NZ\", name: \"New Zealand\", flag: \"🇳🇿\", dialCode: \"+64\" },\n { code: \"ZA\", name: \"South Africa\", flag: \"🇿🇦\", dialCode: \"+27\" },\n { code: \"NG\", name: \"Nigeria\", flag: \"🇳🇬\", dialCode: \"+234\" },\n { code: \"EG\", name: \"Egypt\", flag: \"🇪🇬\", dialCode: \"+20\" },\n { code: \"PK\", name: \"Pakistan\", flag: \"🇵🇰\", dialCode: \"+92\" },\n { code: \"BD\", name: \"Bangladesh\", flag: \"🇧🇩\", dialCode: \"+880\" },\n { code: \"ID\", name: \"Indonesia\", flag: \"🇮🇩\", dialCode: \"+62\" },\n { code: \"TH\", name: \"Thailand\", flag: \"🇹🇭\", dialCode: \"+66\" },\n];\n\nexport interface CountrySelectProps {\n value?: string;\n onValueChange?: (code: string) => void;\n placeholder?: string;\n showDialCode?: boolean;\n disabled?: boolean;\n className?: string;\n}\n\nconst CountrySelect = React.forwardRef<HTMLButtonElement, CountrySelectProps>(\n (\n {\n value,\n onValueChange,\n placeholder = \"Select country\",\n showDialCode = false,\n disabled = false,\n className,\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n const selected = React.useMemo(\n () => COUNTRIES.find((c) => c.code === value),\n [value]\n );\n\n const filtered = React.useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return COUNTRIES;\n return COUNTRIES.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.code.toLowerCase().includes(q) ||\n c.dialCode.includes(q)\n );\n }, [search]);\n\n React.useEffect(() => {\n if (open) {\n // Delay focus until popover has mounted\n const id = setTimeout(() => searchRef.current?.focus(), 0);\n return () => clearTimeout(id);\n } else {\n setSearch(\"\");\n }\n }, [open]);\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={cn(\n \"flex h-11 min-h-11 w-full items-center justify-between gap-2.5 rounded-lg border border-border bg-card px-4 text-[15px] text-foreground shadow-sm\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n !selected && \"text-muted-foreground\",\n className\n )}\n >\n <span className=\"flex min-w-0 items-center gap-2.5\">\n {selected ? (\n <>\n <span className=\"text-base leading-none\" aria-hidden=\"true\">\n {selected.flag}\n </span>\n <span className=\"truncate\">{selected.name}</span>\n {showDialCode && (\n <span className=\"shrink-0 text-muted-foreground\">\n {selected.dialCode}\n </span>\n )}\n </>\n ) : (\n <span>{placeholder}</span>\n )}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-muted-foreground opacity-70 transition-transform duration-pg-fast ease-pg-standard\",\n open && \"rotate-180\"\n )}\n aria-hidden=\"true\"\n />\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={6}\n className={cn(\n \"z-[120] w-[var(--radix-popover-trigger-width)] min-w-[260px] rounded-xl border border-border bg-popover text-popover-foreground shadow-lg outline-none\",\n \"data-[state=open]:opacity-100 data-[state=closed]:opacity-0 transition-opacity duration-150\"\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {/* Search */}\n <div className=\"flex items-center gap-2 border-b border-border px-3 py-2.5\">\n <Search className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search countries…\"\n className={cn(\n \"flex-1 bg-transparent text-[14px] text-foreground placeholder:text-muted-foreground\",\n \"focus-visible:outline-none\"\n )}\n aria-label=\"Search countries\"\n />\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch(\"\")}\n className=\"shrink-0 text-muted-foreground hover:text-foreground transition-colors duration-pg-fast ease-pg-standard\"\n aria-label=\"Clear search\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M10.5 3.5L3.5 10.5M3.5 3.5L10.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* List */}\n <div\n role=\"listbox\"\n aria-label=\"Countries\"\n className=\"max-h-64 overflow-y-auto p-1\"\n >\n {filtered.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No countries found\n </div>\n ) : (\n filtered.map((country) => {\n const isSelected = country.code === value;\n return (\n <button\n key={country.code}\n role=\"option\"\n aria-selected={isSelected}\n type=\"button\"\n onClick={() => {\n onValueChange?.(country.code);\n setOpen(false);\n }}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"hover:bg-muted\",\n isSelected && \"bg-muted/60\"\n )}\n >\n <span className=\"text-base leading-none\" aria-hidden=\"true\">\n {country.flag}\n </span>\n <span className=\"flex-1 truncate text-foreground\">\n {country.name}\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {country.dialCode}\n </span>\n {isSelected && (\n <Check\n className=\"h-3.5 w-3.5 shrink-0 text-primary\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n );\n })\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n }\n);\nCountrySelect.displayName = \"CountrySelect\";\n\nexport { CountrySelect };\n","\"use client\";\n\nimport { cn } from \"./utils\";\nimport { Loader2 } from \"lucide-react\";\nimport { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n \"aria-label\": string;\n variant?: \"primary\" | \"secondary\" | \"ghost\" | \"outline\" | \"danger\";\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n isLoading?: boolean;\n rounded?: \"sm\" | \"md\" | \"lg\" | \"full\";\n}\n\nconst variantClasses: Record<NonNullable<IconButtonProps[\"variant\"]>, string> = {\n primary:\n \"bg-primary text-primary-foreground border border-primary shadow-sm hover:bg-[var(--primary-hover)]\",\n secondary:\n \"bg-muted text-foreground border border-border shadow-sm hover:bg-muted/85 dark:bg-muted/35 dark:text-foreground dark:border-border dark:hover:bg-muted/55\",\n ghost:\n \"bg-transparent text-foreground border border-transparent hover:bg-muted focus-visible:bg-muted/80 active:bg-muted/90\",\n outline:\n \"bg-card text-foreground border border-border shadow-sm hover:bg-muted\",\n danger:\n \"bg-red-600 text-white border border-red-600 shadow-sm hover:bg-red-700\",\n};\n\nconst sizeClasses: Record<NonNullable<IconButtonProps[\"size\"]>, string> = {\n xs: \"size-7 min-w-7\",\n sm: \"size-8 min-w-8\",\n md: \"size-9 min-w-9\",\n lg: \"size-10 min-w-10\",\n xl: \"size-11 min-w-11\",\n};\n\nconst iconSizeClasses: Record<NonNullable<IconButtonProps[\"size\"]>, string> = {\n xs: \"size-3.5\",\n sm: \"size-3.5\",\n md: \"size-4\",\n lg: \"size-[1.125rem]\",\n xl: \"size-5\",\n};\n\nconst roundedClasses: Record<NonNullable<IconButtonProps[\"rounded\"]>, string> = {\n sm: \"rounded-md\",\n md: \"rounded-lg\",\n lg: \"rounded-xl\",\n full: \"rounded-full\",\n};\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n rounded = \"lg\",\n className,\n disabled,\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n return (\n <button\n ref={ref}\n aria-label={ariaLabel}\n title={ariaLabel}\n disabled={disabled || isLoading}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center font-medium\",\n \"transition-colors duration-pg-fast ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n variantClasses[variant],\n sizeClasses[size],\n roundedClasses[rounded],\n className\n )}\n {...props}\n >\n {isLoading ? (\n <Loader2 className={cn(\"animate-spin\", iconSizeClasses[size])} />\n ) : (\n children\n )}\n </button>\n );\n }\n);\nIconButton.displayName = \"IconButton\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Clock, ChevronDown, X } from \"lucide-react\";\nimport { cn } from \"./utils\";\n\n/* ─── Types ──────────────────────────────────────────────────────────────── */\n\nexport interface TimePickerProps {\n /** Controlled value in 24-hour \"HH:MM\" format. Pass \"\" for no selection. */\n value: string;\n /** Called with a new \"HH:MM\" string, or \"\" when cleared. */\n onValueChange: (value: string) => void;\n /** Show 12-hour (AM/PM) columns instead of 24-hour. Default: false. */\n use24Hour?: boolean;\n placeholder?: string;\n label?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/* ─── Helpers ────────────────────────────────────────────────────────────── */\n\nfunction pad(n: number) {\n return String(n).padStart(2, \"0\");\n}\n\nfunction parseHHMM(v: string): { h: number; m: number } | null {\n if (!v) return null;\n const parts = v.split(\":\");\n if (parts.length < 2) return null;\n const h = Number(parts[0]);\n const m = Number(parts[1]);\n if (isNaN(h) || isNaN(m)) return null;\n return { h, m };\n}\n\nfunction toHHMM(h: number, m: number) {\n return `${pad(h)}:${pad(m)}`;\n}\n\nfunction displayTime(value: string, use24Hour: boolean) {\n const p = parseHHMM(value);\n if (!p) return \"\";\n if (use24Hour) return `${pad(p.h)}:${pad(p.m)}`;\n const period = p.h < 12 ? \"AM\" : \"PM\";\n const displayH = p.h % 12 === 0 ? 12 : p.h % 12;\n return `${pad(displayH)}:${pad(p.m)} ${period}`;\n}\n\n/* ─── ScrollColumn ───────────────────────────────────────────────────────── */\n\nconst ITEM_H = 36; // px\nconst VISIBLE = 5; // items visible at once\nconst PAD = 2; // invisible padding rows above/below\n\ninterface ScrollColumnProps<T> {\n items: T[];\n selected: T;\n onSelect: (item: T) => void;\n renderItem: (item: T) => React.ReactNode;\n getKey: (item: T) => string | number;\n}\n\nfunction ScrollColumn<T>({\n items,\n selected,\n onSelect,\n renderItem,\n getKey,\n}: ScrollColumnProps<T>) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const debounceRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const programmaticRef = React.useRef(false);\n\n const selectedIndex = items.findIndex((item) => getKey(item) === getKey(selected));\n\n /* Scroll to selected item */\n const scrollToIndex = React.useCallback(\n (index: number, behavior: ScrollBehavior = \"smooth\") => {\n const el = containerRef.current;\n if (!el) return;\n programmaticRef.current = true;\n el.scrollTo({ top: index * ITEM_H, behavior });\n if (behavior === \"smooth\") {\n // Release flag after animation\n setTimeout(() => {\n programmaticRef.current = false;\n }, 350);\n } else {\n programmaticRef.current = false;\n }\n },\n []\n );\n\n /* Initial scroll (instant) */\n React.useEffect(() => {\n if (selectedIndex >= 0) scrollToIndex(selectedIndex, \"instant\");\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /* Scroll when selected changes from outside */\n React.useEffect(() => {\n if (selectedIndex >= 0) scrollToIndex(selectedIndex, \"smooth\");\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedIndex]);\n\n /* Snap on scroll end */\n function handleScroll() {\n if (programmaticRef.current) return;\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n const el = containerRef.current;\n if (!el) return;\n const index = Math.round(el.scrollTop / ITEM_H);\n const clamped = Math.max(0, Math.min(index, items.length - 1));\n onSelect(items[clamped]);\n scrollToIndex(clamped, \"smooth\");\n }, 80);\n }\n\n return (\n <div className=\"relative flex flex-col items-center\" style={{ width: 64 }}>\n {/* Highlight band */}\n <div\n className=\"pointer-events-none absolute left-0 right-0 rounded-lg bg-primary/10\"\n style={{\n top: PAD * ITEM_H,\n height: ITEM_H,\n zIndex: 1,\n }}\n />\n\n {/* Scroll container */}\n <div\n ref={containerRef}\n onScroll={handleScroll}\n className=\"relative z-10 overflow-y-scroll\"\n style={{\n height: VISIBLE * ITEM_H,\n scrollSnapType: \"y mandatory\",\n scrollbarWidth: \"none\",\n msOverflowStyle: \"none\",\n }}\n >\n {/* Top padding rows */}\n {Array.from({ length: PAD }).map((_, i) => (\n <div key={`pad-top-${i}`} style={{ height: ITEM_H }} />\n ))}\n\n {items.map((item) => {\n const isSelected = getKey(item) === getKey(selected);\n return (\n <div\n key={getKey(item)}\n onClick={() => {\n onSelect(item);\n scrollToIndex(items.findIndex((it) => getKey(it) === getKey(item)), \"smooth\");\n }}\n className={cn(\n \"flex cursor-pointer items-center justify-center text-[14px] font-medium transition-colors duration-150 select-none\",\n isSelected\n ? \"text-primary font-semibold\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n style={{\n height: ITEM_H,\n scrollSnapAlign: \"start\",\n }}\n >\n {renderItem(item)}\n </div>\n );\n })}\n\n {/* Bottom padding rows */}\n {Array.from({ length: PAD }).map((_, i) => (\n <div key={`pad-bot-${i}`} style={{ height: ITEM_H }} />\n ))}\n </div>\n </div>\n );\n}\n\n/* ─── TimePicker ─────────────────────────────────────────────────────────── */\n\nconst PANEL_W = 224;\nconst PANEL_H = 220;\n\nexport const TimePicker = React.forwardRef<HTMLButtonElement, TimePickerProps>(\n (\n {\n value,\n onValueChange,\n use24Hour = false,\n placeholder = \"Select time\",\n label,\n disabled = false,\n className,\n },\n ref\n ) => {\n const parsed = parseHHMM(value);\n\n /* ── Local column state (derived from value, kept in sync) ── */\n const [hour, setHour] = React.useState<number>(() => {\n if (!parsed) return use24Hour ? 0 : 12;\n if (use24Hour) return parsed.h;\n return parsed.h % 12 === 0 ? 12 : parsed.h % 12;\n });\n const [minute, setMinute] = React.useState<number>(() => parsed?.m ?? 0);\n const [period, setPeriod] = React.useState<\"AM\" | \"PM\">(() => {\n if (!parsed) return \"AM\";\n return parsed.h < 12 ? \"AM\" : \"PM\";\n });\n\n /* Sync columns when value prop changes */\n React.useEffect(() => {\n const p = parseHHMM(value);\n if (p) {\n setMinute(p.m);\n if (use24Hour) {\n setHour(p.h);\n } else {\n setHour(p.h % 12 === 0 ? 12 : p.h % 12);\n setPeriod(p.h < 12 ? \"AM\" : \"PM\");\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n /* ── Panel open/position ── */\n const [open, setOpen] = React.useState(false);\n const [panelPos, setPanelPos] = React.useState({ top: 0, left: 0 });\n const [mounted, setMounted] = React.useState(false);\n\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => { setMounted(true); }, []);\n\n function openPanel() {\n if (disabled) return;\n const el = triggerRef.current;\n if (!el) return;\n el.scrollIntoView({ block: \"nearest\", behavior: \"auto\" });\n requestAnimationFrame(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let left = rect.left;\n if (left + PANEL_W > vw - 8) left = vw - PANEL_W - 8;\n let top = rect.bottom + 6;\n if (top + PANEL_H > vh - 8) top = rect.top - PANEL_H - 6;\n setPanelPos({ top, left });\n setOpen(true);\n });\n }\n\n /* Close on outside click */\n React.useEffect(() => {\n if (!open) return;\n function handler(e: MouseEvent) {\n const inTrigger = triggerRef.current?.contains(e.target as Node);\n const inPanel = panelRef.current?.contains(e.target as Node);\n if (!inTrigger && !inPanel) setOpen(false);\n }\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open]);\n\n /* ── Emit value when columns change ── */\n function emitChange(h: number, m: number, p: \"AM\" | \"PM\") {\n let h24 = h;\n if (!use24Hour) {\n if (p === \"AM\") h24 = h === 12 ? 0 : h;\n else h24 = h === 12 ? 12 : h + 12;\n }\n onValueChange(toHHMM(h24, m));\n }\n\n function handleHourChange(h: number) {\n setHour(h);\n emitChange(h, minute, period);\n }\n function handleMinuteChange(m: number) {\n setMinute(m);\n emitChange(hour, m, period);\n }\n function handlePeriodChange(p: \"AM\" | \"PM\") {\n setPeriod(p);\n emitChange(hour, minute, p);\n }\n\n /* ── Column data ── */\n const hours = use24Hour\n ? Array.from({ length: 24 }, (_, i) => i)\n : Array.from({ length: 12 }, (_, i) => i + 1);\n\n const minutes = Array.from({ length: 60 }, (_, i) => i);\n\n /* ── Clear ── */\n function handleClear(e: React.MouseEvent) {\n e.stopPropagation();\n onValueChange(\"\");\n }\n\n /* ── Panel ── */\n const panel = open ? (\n <div\n ref={panelRef}\n className={cn(\n \"isolate rounded-xl border border-border bg-popover text-popover-foreground shadow-lg\",\n \"flex flex-col gap-0\"\n )}\n style={{\n position: \"fixed\",\n top: panelPos.top,\n left: panelPos.left,\n width: PANEL_W,\n zIndex: 20000,\n }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-1.5 border-b border-border px-4 py-2.5\">\n <Clock className=\"size-3.5 text-muted-foreground\" />\n <span className=\"text-[13px] font-medium text-muted-foreground\">\n {value ? displayTime(value, use24Hour) : \"—\"}\n </span>\n </div>\n\n {/* Column labels */}\n <div\n className=\"flex items-center justify-around px-2 pt-2 pb-0.5\"\n style={{ paddingLeft: 8, paddingRight: use24Hour ? 8 : 8 }}\n >\n <span className=\"w-16 text-center text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70\">\n Hr\n </span>\n <span className=\"w-16 text-center text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70\">\n Min\n </span>\n {!use24Hour && (\n <span className=\"w-16 text-center text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70\">\n AM/PM\n </span>\n )}\n </div>\n\n {/* Columns */}\n <div className=\"flex items-center justify-around px-2 pb-3\">\n <ScrollColumn\n items={hours}\n selected={hour}\n onSelect={handleHourChange}\n renderItem={(h) => pad(h)}\n getKey={(h) => h}\n />\n <div className=\"text-[18px] font-light text-muted-foreground/50 pb-0.5\">:</div>\n <ScrollColumn\n items={minutes}\n selected={minute}\n onSelect={handleMinuteChange}\n renderItem={(m) => pad(m)}\n getKey={(m) => m}\n />\n {!use24Hour && (\n <>\n <div className=\"w-px self-stretch bg-border mx-1\" />\n <ScrollColumn\n items={[\"AM\", \"PM\"] as const}\n selected={period}\n onSelect={handlePeriodChange}\n renderItem={(p) => p}\n getKey={(p) => p}\n />\n </>\n )}\n </div>\n </div>\n ) : null;\n\n /* ── Merge refs ── */\n function mergeRef(el: HTMLButtonElement | null) {\n (triggerRef as React.MutableRefObject<HTMLButtonElement | null>).current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = el;\n }\n\n return (\n <div className={cn(\"relative\", className)}>\n {label && (\n <p className=\"mb-1.5 text-sm font-medium text-foreground\">{label}</p>\n )}\n\n <button\n ref={mergeRef}\n type=\"button\"\n disabled={disabled}\n onClick={() => (open ? setOpen(false) : openPanel())}\n className={cn(\n \"flex h-11 min-h-11 w-full items-center gap-3 rounded-lg border border-border bg-card px-4 text-left text-[15px] shadow-sm\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n open && \"border-ring ring-2 ring-ring/35\",\n !open && !disabled && \"hover:border-muted-foreground/45\",\n disabled && \"cursor-not-allowed opacity-50\"\n )}\n >\n <Clock className=\"size-[1.0625rem] shrink-0 text-muted-foreground\" />\n <span\n className={cn(\n \"flex-1 truncate\",\n value ? \"text-foreground\" : \"text-muted-foreground\"\n )}\n >\n {value ? displayTime(value, use24Hour) : placeholder}\n </span>\n {value && !disabled ? (\n <X\n className=\"size-3.5 shrink-0 text-muted-foreground hover:text-foreground transition-colors duration-150\"\n onClick={handleClear}\n />\n ) : (\n <ChevronDown\n className={cn(\n \"size-[1.0625rem] shrink-0 text-muted-foreground transition-transform duration-150\",\n open && \"rotate-180\"\n )}\n />\n )}\n </button>\n\n {mounted && panel && createPortal(panel, document.body)}\n </div>\n );\n }\n);\n\nTimePicker.displayName = \"TimePicker\";\n","import * as React from \"react\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Heading\n// ---------------------------------------------------------------------------\n\nexport interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n as?: React.ElementType;\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\n color?: \"default\" | \"subtle\" | \"primary\";\n}\n\nconst headingSizeClasses: Record<NonNullable<HeadingProps[\"size\"]>, string> = {\n xs: \"text-sm font-semibold\",\n sm: \"text-base font-semibold\",\n md: \"text-lg font-semibold\",\n lg: \"text-xl font-semibold\",\n xl: \"text-2xl font-semibold\",\n \"2xl\": \"text-3xl font-semibold tracking-tight\",\n \"3xl\": \"text-4xl font-semibold tracking-tight\",\n};\n\nconst headingColorClasses: Record<NonNullable<HeadingProps[\"color\"]>, string> = {\n default: \"text-foreground\",\n subtle: \"text-muted-foreground\",\n primary: \"text-primary\",\n};\n\nconst defaultSizeForLevel: Record<number, NonNullable<HeadingProps[\"size\"]>> = {\n 1: \"2xl\",\n 2: \"md\",\n 3: \"md\",\n 4: \"sm\",\n 5: \"xs\",\n 6: \"xs\",\n};\n\nexport const Heading = React.forwardRef<HTMLHeadingElement, HeadingProps>(\n (\n {\n level = 2,\n as,\n size,\n color = \"default\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n const Tag = (as ?? (`h${level}` as React.ElementType)) as React.ElementType;\n const resolvedSize = size ?? defaultSizeForLevel[level] ?? \"md\";\n\n return (\n <Tag\n ref={ref}\n className={cn(\n headingSizeClasses[resolvedSize],\n headingColorClasses[color],\n className\n )}\n {...props}\n >\n {children}\n </Tag>\n );\n }\n);\nHeading.displayName = \"Heading\";\n\n// ---------------------------------------------------------------------------\n// Text\n// ---------------------------------------------------------------------------\n\nexport interface TextProps extends React.HTMLAttributes<HTMLElement> {\n as?: \"p\" | \"span\" | \"div\" | \"label\";\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n weight?: \"normal\" | \"medium\" | \"semibold\";\n color?: \"default\" | \"subtle\" | \"primary\" | \"disabled\";\n truncate?: boolean;\n}\n\nconst textSizeClasses: Record<NonNullable<TextProps[\"size\"]>, string> = {\n xs: \"text-xs\",\n sm: \"text-sm\",\n md: \"text-base\",\n lg: \"text-lg\",\n};\n\nconst textWeightClasses: Record<NonNullable<TextProps[\"weight\"]>, string> = {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n};\n\nconst textColorClasses: Record<NonNullable<TextProps[\"color\"]>, string> = {\n default: \"text-foreground\",\n subtle: \"text-muted-foreground\",\n primary: \"text-primary\",\n disabled: \"text-muted-foreground opacity-50\",\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const Text = React.forwardRef<any, TextProps>(\n (\n {\n as: Tag = \"p\",\n size = \"sm\",\n weight = \"normal\",\n color = \"default\",\n truncate = false,\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <Tag\n ref={ref}\n className={cn(\n textSizeClasses[size],\n textWeightClasses[weight],\n textColorClasses[color],\n truncate && \"truncate\",\n className\n )}\n {...props}\n >\n {children}\n </Tag>\n );\n }\n);\nText.displayName = \"Text\";\n\n// ---------------------------------------------------------------------------\n// MetricText\n// ---------------------------------------------------------------------------\n\nexport interface MetricTextProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"prefix\"> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n trend?: \"up\" | \"down\" | \"neutral\";\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n}\n\nconst metricSizeClasses: Record<NonNullable<MetricTextProps[\"size\"]>, string> = {\n sm: \"text-xl\",\n md: \"text-2xl\",\n lg: \"text-3xl\",\n xl: \"text-4xl\",\n};\n\nconst metricTrendClasses: Record<NonNullable<MetricTextProps[\"trend\"]>, string> = {\n up: \"text-green-600\",\n down: \"text-red-600\",\n neutral: \"text-foreground\",\n};\n\nexport const MetricText = React.forwardRef<HTMLSpanElement, MetricTextProps>(\n (\n {\n size = \"md\",\n trend = \"neutral\",\n prefix,\n suffix,\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"font-semibold tabular-nums tracking-tight\",\n metricSizeClasses[size],\n metricTrendClasses[trend],\n className\n )}\n {...props}\n >\n {prefix != null && (\n <span className=\"mr-0.5 text-[0.75em] font-medium opacity-70\">\n {prefix}\n </span>\n )}\n {children}\n {suffix != null && (\n <span className=\"ml-0.5 text-[0.75em] font-medium opacity-70\">\n {suffix}\n </span>\n )}\n </span>\n );\n }\n);\nMetricText.displayName = \"MetricText\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"./utils\";\n\nexport type ProgressIndicatorSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressIndicatorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n selectedIndex: number;\n values: string[];\n size?: ProgressIndicatorSize;\n onChange?: (index: number) => void;\n}\n\nconst dotSizeMap: Record<ProgressIndicatorSize, { base: string; active: string }> = {\n sm: {\n base: \"h-1.5 w-1.5\",\n active: \"h-1.5 w-4\",\n },\n md: {\n base: \"h-2 w-2\",\n active: \"h-2 w-6\",\n },\n lg: {\n base: \"h-2.5 w-2.5\",\n active: \"h-2.5 w-8\",\n },\n};\n\nconst ProgressIndicator = React.forwardRef<HTMLDivElement, ProgressIndicatorProps>(\n ({ className, selectedIndex, values, size = \"md\", onChange, ...props }, ref) => {\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!onChange) return;\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n const next = Math.min(selectedIndex + 1, values.length - 1);\n if (next !== selectedIndex) onChange(next);\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n const prev = Math.max(selectedIndex - 1, 0);\n if (prev !== selectedIndex) onChange(prev);\n }\n },\n [onChange, selectedIndex, values.length]\n );\n\n const sizes = dotSizeMap[size];\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-label={props[\"aria-label\"] ?? \"Step indicator\"}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\"flex items-center gap-1.5 outline-none focus-visible:outline-none\", className)}\n {...props}\n >\n {values.map((label, index) => {\n const isActive = index === selectedIndex;\n return (\n <button\n key={index}\n type=\"button\"\n role=\"tab\"\n aria-label={label}\n aria-current={isActive ? \"step\" : undefined}\n aria-selected={isActive}\n tabIndex={-1}\n onClick={() => onChange?.(index)}\n className={cn(\n \"rounded-full transition-all duration-pg-normal ease-pg-standard\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n isActive\n ? cn(\"bg-primary\", sizes.active)\n : cn(\n \"bg-muted-foreground/30 hover:bg-muted-foreground/50\",\n sizes.base\n )\n )}\n />\n );\n })}\n </div>\n );\n }\n);\nProgressIndicator.displayName = \"ProgressIndicator\";\n\nexport { ProgressIndicator };\n","import * as React from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface VisuallyHiddenProps extends React.HTMLAttributes<HTMLElement> {\n as?: React.ElementType;\n focusable?: boolean;\n}\n\nconst VisuallyHidden = React.forwardRef<HTMLElement, VisuallyHiddenProps>(\n ({ as: Component = \"span\", focusable = false, className, ...props }, ref) => (\n <Component\n ref={ref}\n className={cn(\n focusable\n ? \"sr-only focus:not-sr-only focus:absolute focus:z-50 focus:px-4 focus:py-2 focus:bg-card focus:text-foreground focus:rounded-md focus:shadow-lg focus:ring-2 focus:ring-ring\"\n : \"sr-only\",\n className\n )}\n {...props}\n />\n )\n);\nVisuallyHidden.displayName = \"VisuallyHidden\";\n\nexport { VisuallyHidden };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,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","names":["import_jsx_runtime","gapClass","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","CheckboxPrimitive","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_class_variance_authority","React","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","React","React","Slot","child","React","import_class_variance_authority","import_jsx_runtime","import_react","import_jsx_runtime","variantClasses","sizeClasses","import_react","import_jsx_runtime","variantClasses","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","React","DialogPrimitive","import_lucide_react","import_jsx_runtime","React","PopoverPrimitive","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","Icon","React","import_lucide_react","import_jsx_runtime","variantStyles","variantIcons","Icon","React","import_lucide_react","import_jsx_runtime","Icon","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","sizeClasses","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Icon","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","sizeClasses","React","AvatarPrimitive","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","PANEL_H","React","import_jsx_runtime","config","React","import_lucide_react","import_jsx_runtime","import_react","import_sonner","import_jsx_runtime","Sonner","React","import_lucide_react","import_jsx_runtime","React","PopoverPrimitive","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","Tag","React","PopoverPrimitive","import_lucide_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","variantClasses","sizeClasses","React","import_react_dom","import_lucide_react","import_jsx_runtime","PANEL_W","React","import_jsx_runtime","Tag","React","import_jsx_runtime","sizes","React","import_jsx_runtime"]}
|