@postxl/ui-components 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +172 -0
- package/dist/index.d.ts +1603 -0
- package/dist/index.js +6483 -0
- package/dist/index.js.map +1 -0
- package/package.json +131 -0
- package/src/data-grid/styles.css +3 -0
- package/src/styles/theme.css +211 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["day: Date","modifiers: any","e: React.MouseEvent<Element>","fromMonth: Date | undefined","toMonth: Date | undefined","date: Date","months: number","event: React.KeyboardEvent<HTMLDivElement>","props: Readonly<React.ComponentProps<typeof DialogPrimitive.Root>>","props: Readonly<React.ComponentProps<typeof DialogPrimitive.Trigger>>","props: Readonly<React.ComponentProps<typeof DialogPrimitive.Portal>>","props: Readonly<React.ComponentProps<typeof DialogPrimitive.Close>>","iso?: string","r?: { from?: Date; to?: Date } | undefined","PRESETS: Preset[]","presetName: string","timelineStart?: Date","timelineEnd?: Date","value: { from?: Date; to?: Date } | undefined","variant?: Cell['variant']","direction: SortDirection","prev: SortingState","newSort: ColumnSort","event: React.PointerEvent<HTMLButtonElement>","value: React.ReactNode | ColumnMenuRendererFunction<TData, TValue>","HeaderComponents: Record<string, (props: any) => React.ReactNode | null>","rowIndex: number","columnId: string","cellKey: string","rowHeight: RowHeightValue","lineCountMap: Record<RowHeightValue, number>","onCloseAutoFocus: NonNullable<React.ComponentProps<typeof DropdownMenuContent>['onCloseAutoFocus']>","columnIds: string[]","updates: UpdateCell[]","ref: PossibleRef<T>","value: T","callback: T | undefined","callback: T","delay: number","event: KeyboardEvent","event: React.KeyboardEvent","query: string","event: React.ChangeEvent<HTMLInputElement>","event: React.PointerEvent<HTMLButtonElement>","event: React.MouseEvent<HTMLDivElement>","event: React.KeyboardEvent<HTMLDivElement>","align: 'left' | 'right' | 'center'","event: React.MouseEvent<HTMLDivElement>","event: React.MouseEvent","event: React.KeyboardEvent<HTMLDivElement>","checked: boolean","event: React.KeyboardEvent<HTMLDivElement>","event: React.MouseEvent","event: React.MouseEvent<HTMLInputElement>","value: string | Date | null | undefined","date: Date","date: Date | undefined","isOpen: boolean","event: React.KeyboardEvent<HTMLDivElement>","newValue: string","event: React.ChangeEvent<HTMLTextAreaElement>","isOpen: boolean","onOpenAutoFocus: NonNullable<React.ComponentProps<typeof PopoverContent>['onOpenAutoFocus']>","event: React.KeyboardEvent<HTMLDivElement>","event: React.KeyboardEvent<HTMLTextAreaElement>","value: string","valueToRemove: string","event?: React.MouseEvent","isOpen: boolean","onOpenAutoFocus: NonNullable<React.ComponentProps<typeof PopoverContent>['onOpenAutoFocus']>","event: React.KeyboardEvent<HTMLDivElement>","event: React.KeyboardEvent<HTMLInputElement>","event: React.ChangeEvent<HTMLInputElement>","options?: { moveToNextRow?: boolean; direction?: 'left' | 'right' }","event: React.KeyboardEvent<HTMLDivElement>","newValue: string","isOpen: boolean","onOpenAutoFocus: NonNullable<React.ComponentProps<typeof PopoverContent>['onOpenAutoFocus']>","event: React.KeyboardEvent<HTMLDivElement>","editingContent: React.ReactNode","event: React.ChangeEvent<HTMLInputElement>","event: React.KeyboardEvent<HTMLDivElement>","ordered: ReturnType<typeof table.getAllColumns>[0][]","clientY: number","dragId: string","toIndex: number","e: React.PointerEvent","id: string","ev: PointerEvent","targetIndex: number | null","keys: string[]","fn: () => T","data: T","store: DataGridStore","selector: (state: DataGridState) => T","updates: UpdateCell | UpdateCell[]","rowIndex: number","columnId: string","start: CellPosition","end: CellPosition","rowIndices: number[]","rowsToDelete: TData[]","direction: NavigationDirection","opts?: { moveToNextRow?: boolean; direction?: NavigationDirection }","open: boolean","query: string","matches: CellPosition[]","event?: React.MouseEvent","event: React.MouseEvent","_event: React.MouseEvent","event: KeyboardEvent","direction: NavigationDirection | null","updates: {\n rowIndex: number\n columnId: string\n value: unknown\n }[]","updater: Updater<SortingState>","updater: Updater<RowSelectionState>","selected: boolean","shiftKey: boolean","newRowSelection: RowSelectionState","updater: Updater<RowHeightValue>","defaultColumn: Partial<ColumnDef<TData>>","colSizes: Record<string, number>","opts: Partial<CellPosition>","event?: React.MouseEvent<HTMLDivElement>","event: MouseEvent","event: Event"],"sources":["../src/lib/utils.ts","../src/accordion/accordion.tsx","../src/alert/alert.tsx","../src/button/button.tsx","../src/alert-dialog/alert-dialog.tsx","../src/avatar/avatar.tsx","../src/badge/badge.tsx","../src/breadcrumb/breadcrumb.tsx","../src/calendar/calendar.tsx","../src/card/card.tsx","../src/card-hover/card-hover.tsx","../src/carousel/carousel.tsx","../src/checkbox/checkbox.tsx","../src/collapse/collapse.tsx","../src/dialog/dialog.tsx","../src/command-palette/command-palette.tsx","../src/popover/popover.tsx","../src/combobox/combobox.tsx","../src/command/command.tsx","../src/spinner/spinner.tsx","../src/content-frame/content-frame.tsx","../src/context-menu/context-menu.tsx","../src/dropdown-menu/dropdown-menu.tsx","../src/tooltip/tooltip.tsx","../src/select/select.tsx","../src/data-grid/cell-variants/utils/gantt-timerange-picker.tsx","../src/data-grid/cell-variants/utils/gantt-timeline.tsx","../src/data-grid/data-grid-column-header.tsx","../src/data-grid/data-grid-utils.ts","../src/data-grid/data-grid-context-menu.tsx","../src/lib/compose-refs.ts","../src/data-grid/data-grid-row.tsx","../src/input/input.tsx","../src/data-grid/hooks/use-callback-ref.ts","../src/data-grid/hooks/use-debounced-callback.ts","../src/data-grid/data-grid-search.tsx","../src/data-grid/data-grid.tsx","../src/data-grid/data-grid-cell-wrapper.tsx","../src/data-grid/cell-variants/checkbox-cell.tsx","../src/data-grid/cell-variants/date-cell.tsx","../src/data-grid/cell-variants/gantt-cell.tsx","../src/textarea/textarea.tsx","../src/data-grid/cell-variants/long-text-cell.tsx","../src/data-grid/cell-variants/multi-select-cell.tsx","../src/data-grid/cell-variants/number-cell.tsx","../src/data-grid/cell-variants/react-node-cell.tsx","../src/data-grid/cell-variants/select-cell.tsx","../src/data-grid/cell-variants/short-text-cell.tsx","../src/data-grid/data-grid-cell.tsx","../src/data-grid/data-grid-view-menu.tsx","../src/data-grid/hooks/use-data-grid.tsx","../src/date-picker/date-picker.tsx","../src/drawer/drawer.tsx","../src/label/label.tsx","../src/separator/separator.tsx","../src/field/field.tsx","../src/mark-value-renderer/mark-value-renderer.tsx","../src/menubar/menubar.tsx","../src/modal/modal.tsx","../src/navigation-menu/navigation-menu.tsx","../src/pagination/pagination.tsx","../src/progress/progress.tsx","../src/radio-group/radio-group.tsx","../src/resizable/resizeable.tsx","../src/scroll-area/scroll-area.tsx","../src/sheet/sheet.tsx","../src/skeleton/skeleton.tsx","../src/slider/slider.tsx","../src/switch/switch.tsx","../src/tabs/tabs.tsx","../src/toggle/toggle.tsx","../src/toggle-group/toggle-group.tsx"],"sourcesContent":["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 AccordionPrimitive from '@radix-ui/react-accordion'\nimport { ChevronDownIcon } from '@radix-ui/react-icons'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/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 ref={ref} className={cn('border-b', className)} {...props} />\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 flex-1 items-center cursor-pointer justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\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=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn('pb-4 pt-0', className)}>{children}</div>\n </AccordionPrimitive.Content>\n))\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst alertVariants = cva(\n 'relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7',\n {\n variants: {\n variant: {\n default: 'bg-background text-foreground',\n destructive: 'border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />\n))\nAlert.displayName = 'Alert'\n\nconst AlertTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) => (\n <h5 ref={ref} className={cn('mb-1 font-medium leading-none tracking-tight', className)} {...props}>\n {children}\n </h5>\n ),\n)\nAlertTitle.displayName = 'AlertTitle'\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm [&_p]:leading-relaxed', className)} {...props} />\n ),\n)\nAlertDescription.displayName = 'AlertDescription'\n\nexport { Alert, AlertTitle, AlertDescription }\n","import { Slot } from '@radix-ui/react-slot'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md cursor-pointer text-base font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline:\n 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n outlineInvert:\n 'border border-muted-foreground bg-background shadow-xs text-muted-foreground hover:bg-muted-foreground hover:text-background dark:bg-input/30 dark:border-input dark:hover:bg-input/70 dark:hover:text-foreground/80',\n extraGhost: 'bg-none hover:text-accent-foreground text-muted-foreground hover:text-foreground',\n extraGhost2: 'bg-none text-foreground hover:text-muted-foreground',\n neutral: 'bg-background',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 px-6 has-[>svg]:px-4',\n xs: 'py-1 px-2',\n xs2: 'px-2 py-0.5',\n icon: 'size-9',\n iconSm: 'size-7.5',\n smLow: 'h-7.5 gap-1.5 px-3 has-[>svg]:px-2.5',\n max: 'h-full w-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nexport type ButtonProps = React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n /**\n * E2E test_id to identify the button.\n */\n __e2e_test_id__?: string\n }\n\nfunction Button({ className, variant, size, asChild = false, __e2e_test_id__, ...props }: ButtonProps) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"button\"\n {...props}\n data-test-id={__e2e_test_id__}\n className={cn(buttonVariants({ variant, size, className }))}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog'\n\nimport * as React from 'react'\n\nimport { buttonVariants } from '../button/button'\nimport { cn } from '../lib/utils'\n\nconst AlertDialog = AlertDialogPrimitive.Root\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n ref={ref}\n />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n)\nAlertDialogHeader.displayName = 'AlertDialogHeader'\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} {...props} />\n)\nAlertDialogFooter.displayName = 'AlertDialogFooter'\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title ref={ref} className={cn('text-lg font-semibold', className)} {...props} />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n))\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: 'outline' }), 'mt-2 sm:mt-0', className)}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","import * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image ref={ref} className={cn('aspect-square h-full w-full', 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', className)}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import { Slot } from '@radix-ui/react-slot'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-base font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90',\n secondary: 'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n destructive:\n 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n filter: 'bg-primary text-background border-0',\n info: 'bg-yellow-500 text-foreground border-0',\n },\n size: {\n default: '',\n xs: 'h-3.5 text-sm',\n sm: 'h-4.5 text-xs',\n md: 'h-6 text-md',\n lg: 'h-8 text-lg',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nfunction Badge({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'span'\n\n return <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant, size }), className)} {...props} />\n}\n\nexport { Badge, badgeVariants }\n","import { ChevronRightIcon, DotsHorizontalIcon } from '@radix-ui/react-icons'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<'nav'> & {\n separator?: React.ReactNode\n }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />)\nBreadcrumb.displayName = 'Breadcrumb'\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentPropsWithoutRef<'ol'>>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className,\n )}\n {...props}\n />\n ),\n)\nBreadcrumbList.displayName = 'BreadcrumbList'\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<'li'>>(\n ({ className, ...props }, ref) => (\n <li ref={ref} className={cn('inline-flex items-center gap-1.5', className)} {...props} />\n ),\n)\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<'a'> & {\n asChild?: boolean\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a'\n\n return <Comp ref={ref} className={cn('transition-colors hover:text-foreground', className)} {...props} />\n})\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentPropsWithoutRef<'span'>>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n ),\n)\nBreadcrumbPage.displayName = 'BreadcrumbPage'\n\nconst BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<'li'>) => (\n <li aria-hidden=\"true\" className={cn('[&>svg]:size-3.5', className)} {...props}>\n {children ?? <ChevronRightIcon />}\n </li>\n)\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\n\nconst BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<'span'>) => (\n <span aria-hidden=\"true\" className={cn('flex h-9 w-9 items-center justify-center', className)} {...props}>\n <DotsHorizontalIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n)\nBreadcrumbEllipsis.displayName = 'BreadcrumbElipssis'\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","import {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n DoubleArrowLeftIcon,\n DoubleArrowRightIcon,\n} from '@radix-ui/react-icons'\n\nimport * as React from 'react'\nimport { DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker'\n\nimport { Button, buttonVariants } from '../button/button'\nimport { cn } from '../lib/utils'\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n showYearNavigation = false,\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant']\n showYearNavigation?: boolean\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n // Track last selected field for range mode\n const [rangeSelectionStep, setRangeSelectionStep] = React.useState<'from' | 'to'>('from')\n // Custom onDayClick for range mode to make sure 'from' and 'to' are always set alternatingly\n const handleDayClick = React.useCallback(\n (day: Date, modifiers: any, e: React.MouseEvent<Element>) => {\n if (props.mode === 'range') {\n const range = props.selected as { from?: Date; to?: Date } | undefined\n\n // Always start a new range when selecting 'from'\n if (rangeSelectionStep === 'from') {\n props.onSelect?.({ from: day, to: undefined }, day, modifiers, e)\n setRangeSelectionStep('to')\n return\n }\n\n // Only set 'to' if 'from' is set and not the same day\n if (rangeSelectionStep === 'to') {\n if (range?.from && day.getTime() !== range.from.getTime()) {\n props.onSelect?.({ from: range.from, to: day }, day, modifiers, e)\n setRangeSelectionStep('from')\n }\n return\n }\n } else {\n props.onDayClick?.(day, modifiers, e)\n }\n },\n [props, rangeSelectionStep],\n )\n\n // default year range if caption layout has year dropdown: 100 years past and 100 years future unless user overrides\n // with the dropdown a range is required. if we don't set it manually it will be -100 years until now which is impractical for future events\n let fromMonth: Date | undefined\n let toMonth: Date | undefined\n if (captionLayout === 'dropdown-years' || captionLayout === 'dropdown') {\n const nowYear = new Date().getFullYear()\n fromMonth = props.startMonth ?? new Date(nowYear - 100, 0)\n toMonth = props.endMonth ?? new Date(nowYear + 100, 11)\n }\n\n // controlled month state so we can programmatically change months (and years)\n const [currentMonth, setCurrentMonth] = React.useState<Date>(props.defaultMonth ?? props.month ?? new Date())\n React.useEffect(() => {\n if (props.month) {\n setCurrentMonth(props.month)\n }\n }, [props.month])\n\n const addMonths = (date: Date, months: number) => {\n const d = new Date(date)\n d.setMonth(d.getMonth() + months)\n if (fromMonth && d < fromMonth) {\n return fromMonth\n }\n if (toMonth && d > toMonth) {\n return toMonth\n }\n return d\n }\n\n return (\n <DayPicker\n month={currentMonth}\n onMonthChange={(m) => {\n setCurrentMonth(m)\n props.onMonthChange?.(m)\n }}\n showOutsideDays={showOutsideDays}\n className={cn(\n 'bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[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) => date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('flex gap-4 flex-col md:flex-row relative', defaultClassNames.months),\n month: cn('flex flex-col w-full gap-4', defaultClassNames.month),\n nav: cn('flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between', defaultClassNames.nav),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)',\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n 'w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5',\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n 'relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn('absolute bg-popover inset-0 opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'select-none font-medium',\n captionLayout === 'label'\n ? 'text-sm'\n : 'rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5',\n defaultClassNames.caption_label,\n ),\n table: 'w-full border-collapse',\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn(\n 'text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none',\n defaultClassNames.weekday,\n ),\n week: cn('flex w-full mt-2', defaultClassNames.week),\n week_number_header: cn('select-none w-(--cell-size)', defaultClassNames.week_number_header),\n week_number: cn('text-[0.8rem] select-none text-muted-foreground', defaultClassNames.week_number),\n day: cn(\n 'relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none',\n defaultClassNames.day,\n ),\n range_start: cn('rounded-l-md bg-accent', defaultClassNames.range_start),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn('rounded-r-md bg-accent', defaultClassNames.range_end),\n today: cn(\n 'bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none',\n defaultClassNames.today,\n ),\n outside: cn('text-muted-foreground aria-selected:text-muted-foreground', defaultClassNames.outside),\n disabled: cn('text-muted-foreground opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n // prefer startMonth/toMonth instead of deprecated fromYear/toYear\n startMonth={fromMonth}\n endMonth={toMonth}\n components={{\n // custom navigation: to add double-chevron year skip buttons\n // prettier-ignore\n Nav: ({ className }) => { //NOSONAR - inline component is intentional to access closure variables\n const btnClassNames = captionLayout === 'dropdown' && showYearNavigation ? 'size-6.5' : ''\n return (\n <div className={cn('mt-0.5', className)}>\n <div className=\"flex items-center\">\n {showYearNavigation && (\n <Button\n aria-label=\"previous year\"\n variant={buttonVariant}\n size=\"iconSm\"\n disabled={fromMonth && currentMonth <= fromMonth}\n className={btnClassNames}\n onClick={() => setCurrentMonth((m) => addMonths(m ?? new Date(), -12))}\n >\n <DoubleArrowLeftIcon className=\"\" />\n </Button>\n )}\n <Button\n aria-label=\"previous month\"\n variant={buttonVariant}\n size=\"iconSm\"\n disabled={fromMonth && currentMonth <= fromMonth}\n className={btnClassNames}\n onClick={() => setCurrentMonth((m) => addMonths(m ?? new Date(), -1))}\n >\n <ChevronLeftIcon />\n </Button>\n </div>\n\n <div className=\"flex items-center\">\n <Button\n aria-label=\"next month\"\n variant={buttonVariant}\n size=\"iconSm\"\n disabled={toMonth && currentMonth >= toMonth}\n className={btnClassNames}\n onClick={() => setCurrentMonth((m) => addMonths(m ?? new Date(), 1))}\n >\n <ChevronRightIcon />\n </Button>\n {showYearNavigation && (\n <Button\n aria-label=\"next year\"\n variant={buttonVariant}\n size=\"iconSm\"\n disabled={toMonth && currentMonth >= toMonth}\n className={btnClassNames}\n onClick={() => setCurrentMonth((m) => addMonths(m ?? new Date(), 12))}\n >\n <DoubleArrowRightIcon />\n </Button>\n )}\n </div>\n </div>\n )\n },\n // prettier-ignore\n Root: ({ className, rootRef, ...props }) => { //NOSONAR - default shadeCn\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />\n },\n // prettier-ignore\n Chevron: ({ className, orientation, ...props }) => { //NOSONAR - default shadeCn\n if (orientation === 'left') {\n return <ChevronLeftIcon className={cn('size-4', className)} {...props} />\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('size-4', className)} {...props} />\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...props} />\n },\n DayButton: CalendarDayButton,\n // prettier-ignore\n WeekNumber: ({ children, ...props }) => { //NOSONAR - default shadeCn\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">{children}</div>\n </td>\n )\n },\n ...components,\n }}\n onDayClick={handleDayClick}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) {\n ref.current?.focus()\n }\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected && !modifiers.range_start && !modifiers.range_end && !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 'data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","import * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('rounded-xl border bg-card text-card-foreground shadow', className)} {...props} />\n))\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n)\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) => (\n <h3 ref={ref} className={cn('font-semibold leading-none tracking-tight', className)} {...props}>\n {children}\n </h3>\n ),\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n ),\n)\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />,\n)\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n ),\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as HoverCardPrimitive from '@radix-ui/react-hover-card'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst HoverCard = HoverCardPrimitive.Root\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n))\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","import { ArrowLeftIcon, ArrowRightIcon } from '@radix-ui/react-icons'\n\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport { Button } from '../button/button'\nimport { cn } from '../lib/utils'\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: 'horizontal' | 'vertical'\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />')\n }\n\n return context\n}\n\nconst Carousel = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & CarouselProps>(\n ({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }, ref) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback(() => {\n if (!api) {\n return\n }\n\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [api])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === 'ArrowRight') {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext],\n )\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return\n }\n\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) {\n return\n }\n\n onSelect()\n api.on('reInit', onSelect)\n api.on('select', onSelect)\n\n return () => {\n api?.off('select', onSelect)\n }\n }, [api, onSelect])\n\n const memoizedValue = useMemo(\n () => ({\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }),\n [api, canScrollNext, canScrollPrev, carouselRef, opts, orientation, scrollNext, scrollPrev],\n )\n\n return (\n <CarouselContext.Provider value={memoizedValue}>\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n },\n)\nCarousel.displayName = 'Carousel'\n\nconst CarouselContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)}\n {...props}\n />\n </div>\n )\n },\n)\nCarouselContent.displayName = 'CarouselContent'\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel()\n\n return (\n <div\n ref={ref}\n aria-roledescription=\"slide\"\n className={cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className)}\n {...props}\n />\n )\n },\n)\nCarouselItem.displayName = 'CarouselItem'\n\nconst CarouselPrevious = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button>>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? '-left-12 top-1/2 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeftIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n },\n)\nCarouselPrevious.displayName = 'CarouselPrevious'\n\nconst CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button>>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? '-right-12 top-1/2 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRightIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n },\n)\nCarouselNext.displayName = 'CarouselNext'\n\nexport { type CarouselApi, type CarouselProps, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext }\n","import { CheckIcon, Cross1Icon } from '@radix-ui/react-icons'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { SquareIcon } from 'lucide-react'\n\nimport { cn } from '../lib/utils'\n\ntype CheckboxProps = React.ComponentProps<'input'> &\n VariantProps<typeof checkboxVariants> & {\n label?: string\n /**\n * E2E test_id to identify the checkbox.\n */\n __e2e_test_id__?: string\n }\n\nconst checkboxVariants = cva(\n 'cursor-pointer peer appearance-none rounded border focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive shrink-0 shadow-xs transition-shadow',\n {\n variants: {\n variant: {\n default: '',\n simple: ' border-input checked:bg-muted-foreground checked:border-muted-foreground',\n iconSolo: 'border-transparent shadow-none',\n },\n checkboxSize: {\n default: 'size-4 [&_svg]:size-3.5',\n sm: 'size-3.5 [&_svg]:size-3',\n lg: 'size-4.5 [&_svg]:size-4',\n },\n checkIcon: {\n default: 'cross',\n check: 'check',\n square: 'square',\n },\n iconStyle: {\n default: 'text-foreground',\n simple: 'text-primary-foreground',\n solo: 'text-muted-foreground shadow-none',\n },\n },\n defaultVariants: {\n variant: 'default',\n checkIcon: 'default',\n iconStyle: 'default',\n checkboxSize: 'default',\n },\n },\n)\n\nfunction Checkbox({\n label,\n className,\n variant,\n checkIcon,\n checkboxSize,\n iconStyle,\n __e2e_test_id__,\n ...props\n}: CheckboxProps) {\n const inputId = props.id ?? (label ? `${label}-checkbox` : undefined)\n\n let icon = <Cross1Icon />\n if (checkIcon === 'check') {\n icon = <CheckIcon />\n } else if (checkIcon === 'square') {\n icon = <SquareIcon fill=\"var(--muted-foreground)\" className=\"size-1/3\" />\n }\n\n return (\n <div className={cn('relative flex gap-2 items-center', className)} data-test-id={__e2e_test_id__}>\n <input {...props} type=\"checkbox\" id={inputId} className={cn(checkboxVariants({ variant, checkboxSize }))} />\n <span\n className={cn(\n checkboxVariants({ iconStyle, checkboxSize }),\n 'absolute opacity-0 peer-checked:opacity-100 top-1/2 left-0 transform -translate-y-1/2 pointer-events-none flex items-center justify-center border-transparent',\n )}\n >\n {icon}\n </span>\n <label htmlFor={inputId} className=\"cursor-pointer select-none\">\n {label}\n </label>\n </div>\n )\n}\n\nexport { Checkbox, checkboxVariants }\n","import * as CollapsePrimitive from '@radix-ui/react-collapsible'\n\nconst Collapse = CollapsePrimitive.Root\n\nconst CollapseTrigger = CollapsePrimitive.CollapsibleTrigger\n\nconst CollapseContent = CollapsePrimitive.CollapsibleContent\n\nexport { Collapse, CollapseTrigger, CollapseContent }\n","import * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { Cross2Icon } from '@radix-ui/react-icons'\n\nimport * as React from 'react'\n\nimport { Button } from '../button/button'\nimport { cn } from '../lib/utils'\n\nfunction Dialog(props: Readonly<React.ComponentProps<typeof DialogPrimitive.Root>>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger(props: Readonly<React.ComponentProps<typeof DialogPrimitive.Trigger>>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal(props: Readonly<React.ComponentProps<typeof DialogPrimitive.Portal>>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose(props: Readonly<React.ComponentProps<typeof DialogPrimitive.Close>>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 dark:bg-gray-500/30',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n __e2e_test_id__,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n __e2e_test_id__?: string\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\" data-test-id={__e2e_test_id__}>\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n title=\"Close\"\n data-slot=\"dialog-close\"\n className=\"flex ring-offset-background focus:ring-transparent data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-3 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 cursor-pointer\"\n >\n <Button\n asChild\n variant=\"outline\"\n size=\"icon\"\n className=\"size-6 rounded\"\n __e2e_test_id__={__e2e_test_id__ ? `${__e2e_test_id__}-close` : undefined}\n >\n <Cross2Icon />\n </Button>\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn('text-lg leading-none font-semibold', className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import { type DialogProps } from '@radix-ui/react-dialog'\nimport { MagnifyingGlassIcon } from '@radix-ui/react-icons'\n\nimport { Command as CommandPalettePrimitive } from 'cmdk'\nimport * as React from 'react'\n\nimport { Dialog, DialogContent } from '../dialog/dialog'\nimport { cn } from '../lib/utils'\n\nconst CommandPalette = React.forwardRef<\n React.ElementRef<typeof CommandPalettePrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPalettePrimitive\n ref={ref}\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',\n className,\n )}\n {...props}\n />\n))\nCommandPalette.displayName = CommandPalettePrimitive.displayName\n\ntype CommandPaletteDialogProps = DialogProps\n\nconst CommandPaletteDialog = ({ children, ...props }: CommandPaletteDialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0\">\n <CommandPalette className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </CommandPalette>\n </DialogContent>\n </Dialog>\n )\n}\n\nconst CommandPaletteInput = React.forwardRef<\n React.ElementRef<typeof CommandPalettePrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\" data-cmdk-input-wrapper=\"\">\n <MagnifyingGlassIcon className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPalettePrimitive.Input\n ref={ref}\n className={cn(\n 'flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n))\n\nCommandPaletteInput.displayName = CommandPalettePrimitive.Input.displayName\n\nconst CommandPaletteList = React.forwardRef<\n React.ElementRef<typeof CommandPalettePrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPalettePrimitive.List\n ref={ref}\n className={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className)}\n {...props}\n />\n))\n\nCommandPaletteList.displayName = CommandPalettePrimitive.List.displayName\n\nconst CommandPaletteEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPalettePrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Empty>\n>((props, ref) => <CommandPalettePrimitive.Empty ref={ref} className=\"py-6 text-center text-sm\" {...props} />)\n\nCommandPaletteEmpty.displayName = CommandPalettePrimitive.Empty.displayName\n\nconst CommandPaletteGroup = React.forwardRef<\n React.ElementRef<typeof CommandPalettePrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPalettePrimitive.Group\n ref={ref}\n className={cn(\n 'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground',\n className,\n )}\n {...props}\n />\n))\n\nCommandPaletteGroup.displayName = CommandPalettePrimitive.Group.displayName\n\nconst CommandPaletteSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPalettePrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPalettePrimitive.Separator ref={ref} className={cn('-mx-1 h-px bg-border', className)} {...props} />\n))\nCommandPaletteSeparator.displayName = CommandPalettePrimitive.Separator.displayName\n\nconst CommandPaletteItem = React.forwardRef<\n React.ElementRef<typeof CommandPalettePrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPalettePrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50',\n className,\n )}\n {...props}\n />\n))\n\nCommandPaletteItem.displayName = CommandPalettePrimitive.Item.displayName\n\nconst CommandPaletteShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn('ml-auto text-xs tracking-widest text-muted-foreground', className)} {...props} />\n}\nCommandPaletteShortcut.displayName = 'CommandPaletteShortcut'\n\nexport {\n CommandPalette,\n CommandPaletteDialog,\n CommandPaletteInput,\n CommandPaletteList,\n CommandPaletteEmpty,\n CommandPaletteGroup,\n CommandPaletteItem,\n CommandPaletteShortcut,\n CommandPaletteSeparator,\n}\n","import * as PopoverPrimitive from '@radix-ui/react-popover'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nfunction Popover({ ...props }: Readonly<React.ComponentProps<typeof PopoverPrimitive.Root>>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({ ...props }: Readonly<React.ComponentProps<typeof PopoverPrimitive.Trigger>>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nconst popoverVariants = cva(\n 'outline-hidden border z-50 origin-(--radix-popover-content-transform-origin) data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n {\n variants: {\n variant: {\n default: 'bg-popover text-popover-foreground w-72 rounded p-4 shadow-md',\n simple: 'bg-background text-foreground w-auto border-(--discreet-border) shadow-lg',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nfunction PopoverContent({\n className,\n variant,\n align = 'center',\n sideOffset = 4,\n ...props\n}: Readonly<React.ComponentProps<typeof PopoverPrimitive.Content> & VariantProps<typeof popoverVariants>>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(popoverVariants({ variant }), className)}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","import { CaretSortIcon, CheckIcon } from '@radix-ui/react-icons'\n\nimport * as React from 'react'\n\nimport { Button } from '../button/button'\nimport {\n CommandPalette,\n CommandPaletteEmpty,\n CommandPaletteGroup,\n CommandPaletteInput,\n CommandPaletteItem,\n CommandPaletteList,\n} from '../command-palette/command-palette'\nimport { cn } from '../lib/utils'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover/popover'\n\nconst frameworks = [\n {\n value: 'next.js',\n label: 'Next.js',\n },\n {\n value: 'sveltekit',\n label: 'SvelteKit',\n },\n {\n value: 'nuxt.js',\n label: 'Nuxt.js',\n },\n {\n value: 'remix',\n label: 'Remix',\n },\n {\n value: 'astro',\n label: 'Astro',\n },\n]\n\nexport function ComboboxDemo() {\n const [open, setOpen] = React.useState(false)\n const [value, setValue] = React.useState('')\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" aria-expanded={open} className=\"w-[200px] justify-between\">\n {value ? frameworks.find((framework) => framework.value === value)?.label : 'Select framework...'}\n <CaretSortIcon className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[200px] p-0\">\n <CommandPalette>\n <CommandPaletteInput placeholder=\"Search framework...\" className=\"h-9\" />\n <CommandPaletteList>\n <CommandPaletteEmpty>No framework found.</CommandPaletteEmpty>\n <CommandPaletteGroup>\n {frameworks.map((framework) => (\n <CommandPaletteItem\n key={framework.value}\n value={framework.value}\n onSelect={(currentValue) => {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n <CheckIcon\n className={cn('ml-auto h-4 w-4', value === framework.value ? 'opacity-100' : 'opacity-0')}\n />\n </CommandPaletteItem>\n ))}\n </CommandPaletteGroup>\n </CommandPaletteList>\n </CommandPalette>\n </PopoverContent>\n </Popover>\n )\n}\n","import { MagnifyingGlassIcon } from '@radix-ui/react-icons'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Command as CommandPrimitive } from 'cmdk'\nimport React from 'react'\n\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../dialog/dialog'\nimport { cn } from '../lib/utils'\n\nfunction Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent className={cn('overflow-hidden p-0', className)} showCloseButton={showCloseButton}>\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nconst commandInputVariants = cva('', {\n variants: {\n variant: { default: '', borderless: 'border-none' },\n inputSize: {\n sm: 'h-7.5 py-2',\n md: 'h-9 py-3',\n lg: 'h-12 py-4',\n },\n },\n defaultVariants: { variant: 'default', inputSize: 'md' },\n})\n\nexport type CommandInputProps = Omit<React.ComponentProps<typeof CommandPrimitive.Input>, 'size'> &\n VariantProps<typeof commandInputVariants> & {\n wrapperClassName?: string\n }\n\nexport const CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(\n ({ className, wrapperClassName, variant, inputSize, ...props }, ref) => {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className={cn(\n 'flex items-center gap-2 border-b px-3',\n commandInputVariants({ variant, inputSize }),\n wrapperClassName,\n )}\n >\n <MagnifyingGlassIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n data-slot=\"command-input\"\n className={cn(\n 'placeholder:text-muted-foreground flex w-full rounded bg-transparent text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n )\n },\n)\nCommandInput.displayName = 'CommandInput'\n\nfunction CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', className)}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({ ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return <CommandPrimitive.Empty data-slot=\"command-empty\" className=\"py-6 text-center text-sm\" {...props} />\n}\n\nfunction CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('bg-border -mx-1 h-px', className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n commandInputVariants,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","import { cn } from '../lib/utils'\n\nexport function Spinner({ classNames }: Readonly<{ classNames?: string }>) {\n return (\n <div className={cn('flex justify-center items-center w-full h-full', classNames)}>\n <svg\n className=\"w-auto text-[inherit] h-full animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n </div>\n )\n}\n\ntype LoaderProps = Readonly<{\n label?: string\n disabled?: boolean\n}>\n\nexport function Loader({ label, disabled }: LoaderProps) {\n if (disabled) {\n return null\n }\n\n return (\n <div className=\"flex absolute z-1 left-0 top-0 bottom-0 right-0 bg-secondary/50\">\n <div className=\"flex items-center justify-center flex-1 flex-col\">\n <Spinner classNames=\"w-[24px] h-[25px]\" />\n {label && <h3 className=\"pb-0 pt-3 font-medium text-xl mb-2 text-muted-foreground\">{label}</h3>}\n </div>\n </div>\n )\n}\n","import { EnterFullScreenIcon } from '@radix-ui/react-icons'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { type PropsWithChildren, type ReactNode } from 'react'\n\nimport { Button } from '../button/button'\nimport { cn } from '../lib/utils'\nimport { Loader } from '../spinner/spinner'\n\nconst gridContentFrameVariants = cva('flex flex-col border-1 border-(--discreet-border) h-full w-full', {\n variants: {\n variant: {\n default: '',\n inverted: 'bg-sidebar-border border-background border-e-transparent border-t-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n})\n\nconst gridContentFrameHeaderVariants = cva('flex items-center overflow-hidden p-3 min-h-10 border-b-1', {\n variants: {\n variant: {\n default: 'border-(--discreet-border)',\n inverted: 'border-t-0 border-t-sidebar-border border-b-background',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n})\n\ntype Props = PropsWithChildren<{\n title: string\n controls?: ReactNode[]\n indicators?: ReactNode[]\n onExpand?: () => void\n collapsed?: boolean\n titleLink?: ReactNode\n isLoading?: boolean\n}> &\n VariantProps<typeof gridContentFrameVariants>\n\nexport const ContentFrame = ({\n title = '',\n controls = [],\n indicators = [],\n children,\n onExpand,\n variant,\n collapsed,\n titleLink,\n isLoading = false,\n}: Props) => {\n return (\n <div className={cn(gridContentFrameVariants({ variant }))}>\n {collapsed ? (\n <div className=\"flex gap-2.5 min-w-0 items-center [writing-mode:vertical-lr]\">\n <h2 className=\"text-xl flex self-center ms-4\">{title}</h2>\n {indicators.length > 0 && <div className=\"flex gap-2 whitespace-nowrap\">{indicators}</div>}\n </div>\n ) : (\n <>\n {/* header */}\n <div className={cn(gridContentFrameHeaderVariants({ variant }))}>\n {/* Title + Indicators */}\n <div className=\"flex flex-grow gap-2 overflow-hidden\">\n <h2 className=\"text-xl overflow-hidden text-ellipsis whitespace-nowrap\">{titleLink ?? title}</h2>\n {indicators.length > 0 && <div className=\"flex gap-2 whitespace-nowrap\">{indicators}</div>}\n </div>\n\n {/* Controls */}\n {controls.length > 0 && <div className=\"flex gap-2 whitespace-nowrap\">{controls}</div>}\n\n {/* Expand button */}\n {onExpand && (\n <Button\n title=\"Expand\"\n onClick={onExpand}\n variant=\"outline\"\n size=\"icon\"\n className=\"size-6 ml-2\"\n __e2e_test_id__={`${title.toLowerCase().replaceAll(' ', '-')}-modal-button`}\n >\n <EnterFullScreenIcon />\n </Button>\n )}\n </div>\n\n {/* content */}\n <div className=\"h-full min-h-0 overflow-auto relative\">\n {children}\n {isLoading && <Loader label=\"Loading...\" />}\n </div>\n </>\n )}\n </div>\n )\n}\n","import * as ContextMenuPrimitive from '@radix-ui/react-context-menu'\nimport { CheckIcon, ChevronRightIcon, DotFilledIcon } from '@radix-ui/react-icons'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst ContextMenu = ContextMenuPrimitive.Root\n\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger\n\nconst ContextMenuGroup = ContextMenuPrimitive.Group\n\nconst ContextMenuPortal = ContextMenuPrimitive.Portal\n\nconst ContextMenuSub = ContextMenuPrimitive.Sub\n\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup\n\nconst ContextMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </ContextMenuPrimitive.SubTrigger>\n))\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName\n\nconst ContextMenuSubContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n))\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName\n\nconst ContextMenuContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n))\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName\n\nconst ContextMenuItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n))\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n))\nContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName\n\nconst ContextMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <DotFilledIcon className=\"h-4 w-4 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n))\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName\n\nconst ContextMenuLabel = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-sm font-semibold text-foreground', inset && 'pl-8', className)}\n {...props}\n />\n))\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName\n\nconst ContextMenuSeparator = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Separator ref={ref} className={cn('-mx-1 my-1 h-px bg-border', className)} {...props} />\n))\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName\n\nconst ContextMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn('ml-auto text-xs tracking-widest text-muted-foreground', className)} {...props} />\n}\nContextMenuShortcut.displayName = 'ContextMenuShortcut'\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n","import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from '@radix-ui/react-icons'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nfunction DropdownMenu({ ...props }: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.Root>>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.Portal>>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.Content>>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.Group>>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: 'default' | 'destructive'\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: Readonly<\n React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.Separator>>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.Sub>>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: Readonly<\n React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n 'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: Readonly<React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import * as TooltipPrimitive from '@radix-ui/react-tooltip'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from '@radix-ui/react-icons'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\ntype SelectProps = React.ComponentProps<typeof SelectPrimitive.Root> & {\n /**\n * E2E test_id to identify the select.\n */\n __e2e_test_id__?: string\n}\n\nfunction Select({ __e2e_test_id__, ...rest }: SelectProps) {\n return <SelectPrimitive.Root data-test-id={__e2e_test_id__} {...rest} />\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nconst selectTriggerVariants = cva(\n \"data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex items-center gap-2 rounded-md border text-md shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n size: {\n default: 'h-9 px-3 py-2',\n sm: 'h-8 px-2.5 py-1.5',\n lg: 'h-10 px-4 py-2.5',\n xs: 'h-7 px-2 py-1',\n },\n variant: {\n default:\n 'justify-between border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 bg-transparent',\n simple:\n 'justify-start bg-background cursor-pointer border-foreground text-left data-[placeholder]:border-(--discreet-border)',\n },\n },\n defaultVariants: {\n size: 'default',\n variant: 'default',\n },\n },\n)\nconst selectTriggerTextVariants = cva('', {\n variants: {\n variant: {\n default: '',\n simple: 'overflow-hidden whitespace-nowrap text-ellipsis',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n})\n\nfunction SelectTrigger({\n className,\n size,\n variant,\n children,\n asChild = false,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> &\n VariantProps<typeof selectTriggerVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : SelectPrimitive.Trigger\n\n return (\n <Comp\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(selectTriggerVariants({ size, variant, className }), '[&[data-state=open]>svg]:rotate-180')}\n {...props}\n >\n <span className={cn('flex-1', selectTriggerTextVariants({ variant }))}>{children}</span>\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"flex-none size-4 opacity-50 \" />\n </SelectPrimitive.Icon>\n </Comp>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md',\n className,\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 )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1',\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}\n {...props}\n />\n )\n}\n\nconst selectItemVariants = cva(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded pr-8 pl-2 text-md outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n {\n variants: {\n type: {\n default: '',\n deselect: 'italic text-muted-foreground focus:text-muted-foreground',\n },\n spacing: {\n sm: 'py-1',\n md: 'py-1.5',\n lg: 'py-2.5',\n },\n },\n defaultVariants: {\n type: 'default',\n spacing: 'md',\n },\n },\n)\n\nfunction SelectItem({\n className,\n children,\n type,\n spacing,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item> & VariantProps<typeof selectItemVariants>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(selectItemVariants({ type, spacing, className }))}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4 \" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","/* Modified DateRangePicker based DateRangePicker by John Polacek (https://github.com/johnpolacek/date-range-picker-for-shadcn) (MIT License) */\n\nimport { CalendarIcon, Cross2Icon } from '@radix-ui/react-icons'\n\nimport React, { useEffect, useState } from 'react'\n\nimport { Button } from '../../../button/button'\nimport { Calendar } from '../../../calendar/calendar'\nimport { cn } from '../../../lib/utils'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../popover/popover'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../select/select'\n\nexport type GanttTimerangePickerProps = {\n initialDateFrom?: Date\n initialDateTo?: Date\n // onRangeChange now receives ISO string date range (UTC-normalized) or undefined\n onRangeChange?: (values: ISODateRange | undefined) => void\n timelineStart?: Date\n timelineEnd?: Date\n}\n\ntype DateRange = {\n from?: Date\n to?: Date\n}\n\n// ISODateRange with ISO string dates for UTC-normalized range for querying\nexport type ISODateRange = {\n from?: string\n to?: string\n}\n\n// reusable helper: convert an ISO UTC-normalized date string back to a local Date\nexport const isoToLocalDate = (iso?: string): Date | undefined => {\n if (!iso) {\n return undefined\n }\n const d = new Date(iso) // parse ISO instant\n // build a local Date that has the same calendar day as the UTC date parts\n return new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate())\n}\n\n// helper to convert internal Date range to ISO strings normalized to UTC start/end of day\nconst convertRangeToISO = (r?: { from?: Date; to?: Date } | undefined): ISODateRange | undefined => {\n if (!(r?.from && r?.to)) {\n return undefined\n }\n const from = r.from\n const to = r.to\n\n const fromIso = new Date(\n Date.UTC(from.getUTCFullYear(), from.getUTCMonth(), from.getUTCDate(), 0, 0, 0, 0),\n ).toISOString()\n const toIso = new Date(\n Date.UTC(to.getUTCFullYear(), to.getUTCMonth(), to.getUTCDate(), 23, 59, 59, 999),\n ).toISOString()\n\n return { from: fromIso, to: toIso }\n}\n\ntype Preset = {\n name: string\n label: string\n}\n\nconst PRESETS: Preset[] = [\n { name: 'sinceStart', label: 'Since timeline start' },\n { name: 'thisYear', label: 'This year' },\n { name: 'nextFullYear', label: 'Next full year' },\n { name: 'next1Year', label: 'Next 1 year' },\n { name: 'next2Year', label: 'Next 2 years' },\n { name: 'next3Year', label: 'Next 3 years' },\n { name: 'untilEnd', label: 'Until timeline end' },\n]\n\nexport const GanttTimerangePicker = ({\n initialDateFrom,\n initialDateTo,\n onRangeChange,\n timelineStart,\n timelineEnd,\n}: GanttTimerangePickerProps) => {\n const [range, setRange] = useState<DateRange | undefined>(\n initialDateFrom || initialDateTo ? { from: initialDateFrom, to: initialDateTo } : undefined,\n )\n const [isOpen, setIsOpen] = useState(false)\n const [selectedPreset, setSelectedPreset] = useState<string | undefined>(undefined)\n const [isSmallScreen, setIsSmallScreen] = useState(\n globalThis.window === undefined ? false : globalThis.window.innerWidth < 960,\n )\n\n // listen to window resize events to enable a small screen mode\n useEffect(() => {\n const handleResize = (): void => {\n setIsSmallScreen(globalThis.window.innerWidth < 960)\n }\n globalThis.window.addEventListener('resize', handleResize)\n // Clean up event listener on unmount\n return () => {\n globalThis.window.removeEventListener('resize', handleResize)\n }\n }, [])\n\n const getPresetRange = (presetName: string, timelineStart?: Date, timelineEnd?: Date): DateRange => {\n const preset = PRESETS.find(({ name }) => name === presetName)\n if (!preset) {\n throw new Error(`Unknown date range preset: ${presetName}`)\n }\n const from = new Date()\n const to = new Date()\n\n switch (preset.name) {\n case 'sinceStart':\n if (timelineStart) {\n from.setFullYear(timelineStart.getFullYear(), timelineStart.getMonth(), timelineStart.getDate())\n }\n from.setHours(0, 0, 0, 0)\n to.setHours(23, 59, 59, 999)\n break\n case 'thisYear':\n from.setFullYear(from.getFullYear(), 0, 1)\n from.setHours(0, 0, 0, 0)\n to.setFullYear(to.getFullYear(), 11, 31)\n to.setHours(23, 59, 59, 999)\n break\n case 'nextFullYear':\n from.setFullYear(from.getFullYear() + 1, 0, 1)\n from.setHours(0, 0, 0, 0)\n to.setFullYear(to.getFullYear() + 1, 11, 31)\n to.setHours(23, 59, 59, 999)\n break\n case 'next1Year':\n from.setHours(0, 0, 0, 0)\n to.setFullYear(to.getFullYear() + 1)\n to.setHours(23, 59, 59, 999)\n break\n case 'next2Year':\n from.setHours(0, 0, 0, 0)\n to.setFullYear(to.getFullYear() + 2)\n to.setHours(23, 59, 59, 999)\n break\n case 'next3Year':\n from.setHours(0, 0, 0, 0)\n to.setFullYear(to.getFullYear() + 3)\n to.setHours(23, 59, 59, 999)\n break\n case 'untilEnd':\n from.setHours(0, 0, 0, 0)\n if (timelineEnd) {\n to.setFullYear(timelineEnd.getFullYear(), timelineEnd.getMonth(), timelineEnd.getDate())\n }\n to.setHours(23, 59, 59, 999)\n break\n }\n\n return { from, to }\n }\n\n // automatically detect selected preset when range changes (internal Date range)\n useEffect(() => {\n if (!range?.from || !range.to) {\n setSelectedPreset(undefined)\n return\n }\n for (const preset of PRESETS) {\n const presetRange = getPresetRange(preset.name, timelineStart, timelineEnd)\n if (!presetRange.from || !presetRange.to) {\n continue\n }\n\n const normalizedRangeFrom = new Date(range.from)\n normalizedRangeFrom.setHours(0, 0, 0, 0)\n const normalizedPresetFrom = new Date(presetRange.from)\n normalizedPresetFrom.setHours(0, 0, 0, 0)\n\n const normalizedRangeTo = new Date(range.to)\n normalizedRangeTo.setHours(0, 0, 0, 0)\n const normalizedPresetTo = new Date(presetRange.to)\n normalizedPresetTo.setHours(0, 0, 0, 0)\n\n if (\n normalizedRangeFrom.getTime() === normalizedPresetFrom.getTime() &&\n normalizedRangeTo.getTime() === normalizedPresetTo.getTime()\n ) {\n setSelectedPreset(preset.name)\n return\n }\n }\n setSelectedPreset(undefined)\n }, [range, timelineStart, timelineEnd])\n\n return (\n <Popover\n modal={true}\n open={isOpen}\n onOpenChange={(isOpen) => {\n setIsOpen(isOpen)\n // on close, emit ISO-normalized range\n if (!isOpen) {\n onRangeChange?.(convertRangeToISO(range))\n }\n }}\n >\n <PopoverTrigger asChild>\n <Button size=\"iconSm\" variant=\"extraGhost2\">\n <CalendarIcon className=\"size-3\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2 m-2 relative\">\n <div className=\"flex justify-between items-center\">\n <span className=\"pl-2\">\n {range?.from && range?.to\n ? `${range.from.toLocaleDateString()} - ${range.to.toLocaleDateString()} selected`\n : 'No range selected'}\n </span>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-6 rounded\"\n onClick={() => {\n setIsOpen(false)\n }}\n >\n <Cross2Icon className=\"size-5\" />\n </Button>\n </div>\n <div className=\"flex\">\n <div className=\"flex\">\n <div className=\"flex flex-col\">\n {isSmallScreen && (\n <Select\n defaultValue={selectedPreset}\n onValueChange={(value) => {\n setRange(getPresetRange(value))\n }}\n >\n <SelectTrigger size=\"xs\" className=\"w-[180px] mx-auto mt-2\">\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n {PRESETS.map((preset) => (\n <SelectItem key={preset.name} value={preset.name}>\n {preset.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n <div className={cn('h-[325px]', isSmallScreen && 'mb-8')}>\n <Calendar\n mode=\"range\"\n showYearNavigation={true}\n disabled={(date) =>\n (timelineStart ? date < timelineStart : false) || (timelineEnd ? date > timelineEnd : false)\n }\n onSelect={(value: { from?: Date; to?: Date } | undefined) => {\n if (value?.from != null) {\n const from = value.from\n const to = value.to ?? value.from\n // Normalize the range so that from <= to\n setRange(to < from ? { from: to, to: from } : { from, to })\n }\n }}\n selected={range?.from && range?.to ? { from: range.from, to: range.to } : undefined}\n numberOfMonths={isSmallScreen ? 1 : 2}\n defaultMonth={new Date(new Date().setMonth(new Date().getMonth() - (isSmallScreen ? 0 : 1)))}\n />\n </div>\n </div>\n </div>\n {!isSmallScreen && (\n <div className=\"flex flex-col items-start gap-1 pr-2 pl-12 py-3\">\n {PRESETS.map((preset) => (\n <PresetButton\n key={preset.name}\n preset={preset.name}\n label={preset.label}\n isSelected={selectedPreset === preset.name}\n onSelect={(presetName) => setRange(getPresetRange(presetName))}\n />\n ))}\n </div>\n )}\n </div>\n <div className=\"flex gap-2 absolute bottom-3 right-3\">\n <Button\n variant=\"outlineInvert\"\n size=\"smLow\"\n className=\"\"\n onClick={() => {\n setRange(undefined)\n }}\n >\n Clear Range\n </Button>\n <Button\n size=\"smLow\"\n onClick={() => {\n setIsOpen(false)\n onRangeChange?.(convertRangeToISO(range))\n }}\n >\n Apply\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\nconst PresetButton = ({\n preset,\n label,\n isSelected,\n onSelect,\n}: {\n preset: string\n label: string\n isSelected: boolean\n onSelect: (preset: string) => void\n}): React.ReactNode => (\n <Button\n className={`w-full justify-start ${isSelected ? 'pointer-events-none bg-accent' : ''}`}\n variant=\"ghost\"\n size=\"smLow\"\n onClick={() => onSelect(preset)}\n >\n {label}\n </Button>\n)\n","import { useRef } from 'react'\n\nimport { GanttTimerangePicker } from './gantt-timerange-picker'\n\n// Gantt header component rendering the timeline scale\nexport const GanttTimeline = ({ header }: { header: any }) => {\n const cellOpts = header.column.columnDef.meta?.cell\n const containerRef = useRef<HTMLDivElement>(null)\n if (!cellOpts) {\n return null\n }\n const ts = cellOpts.dateRangeFrom ?? cellOpts.timelineStart\n const te = cellOpts.dateRangeTo ?? cellOpts.timelineEnd\n if (!(ts instanceof Date) || !(te instanceof Date)) {\n return null\n }\n const timelineStartMs = ts.getTime()\n const timelineEndMs = te.getTime()\n if (timelineEndMs <= timelineStartMs) {\n return null\n }\n const firstFullYear = ts.getFullYear() + 1\n const totalYears = te.getFullYear() - ts.getFullYear() + 1\n\n const scale = containerRef.current?.getBoundingClientRect().width\n ? containerRef.current.getBoundingClientRect().width / (totalYears ?? 1)\n : 1\n const showMonths = scale / 12 >= 5\n\n const timelineDurationMs = timelineEndMs - timelineStartMs\n const firstYearPartialMs = new Date(firstFullYear, 0, 1).getTime() - timelineStartMs\n const lastYearPartialMs = timelineEndMs - new Date(te.getFullYear(), 0, 1).getTime()\n\n const firstMonthPartialMs = new Date(ts.getFullYear(), ts.getMonth() + 1, 1).getTime() - timelineStartMs\n const lastMonthPartialMs = timelineEndMs - new Date(te.getFullYear(), te.getMonth(), 1).getTime()\n\n return (\n <>\n <div className=\"absolute right-8 top-1/2 z-10 -translate-y-1/2\">\n <GanttTimerangePicker\n initialDateFrom={cellOpts.dateRangeFrom ?? undefined}\n initialDateTo={cellOpts.dateRangeTo ?? undefined}\n onRangeChange={cellOpts.onRangeChange ?? undefined}\n timelineStart={cellOpts.timelineStart}\n timelineEnd={cellOpts.timelineEnd}\n />\n </div>\n <div ref={containerRef} className=\"pointer-events-none absolute left-0 right-0 bottom-0 z-0 h-3 flex px-1\">\n {Array.from({ length: totalYears }, (_, i) => firstFullYear + i - 1).map((year, index) => (\n /* distribute space between years with flex-grow except for first and last as they might only be partial */\n <div\n key={year}\n className=\"h-full relative flex grow border-l border-muted-foreground/30 first:border-none first:grow-0 last:grow-0 overflow-hidden\"\n style={\n // index == 0: first year, index == totalYears -1: last year\n index == 0 || index == totalYears - 1\n ? { width: `${((index == 0 ? firstYearPartialMs : lastYearPartialMs) / timelineDurationMs) * 100}%` }\n : undefined\n }\n >\n {showMonths && (\n /* first month with calculated width as it might only be partial */\n <div className=\"absolute bottom-0 left-0 right-0 flex h-1.5 w-full\">\n {index == 0 && ts.getMonth() < 11 && (\n <div\n className=\"h-full border-r border-dashed border-muted-foreground/30\"\n style={{ width: `${(firstMonthPartialMs / firstYearPartialMs) * 100}%` }}\n />\n )}\n {/* distribute rest of space between months with flex-grow */}\n {Array.from({\n length: (index == totalYears - 1 ? te.getMonth() : 12) - (index == 0 ? ts.getMonth() + 1 : 0),\n }).map((_, monthIndex) => (\n <div\n key={`${year}-${monthIndex}`}\n className=\"grow h-full border-r border-dashed border-muted-foreground/30 last:border-0\"\n />\n ))}\n {/* last month with calculated width as it might only be partial */}\n {index == totalYears - 1 && te.getMonth() > 0 && (\n <div className=\"h-full\" style={{ width: `${(lastMonthPartialMs / lastYearPartialMs) * 100}%` }} />\n )}\n </div>\n )}\n\n <span className=\"ps-0.5 -mt-px text-xs text-muted-foreground select-none z-1\">{year}</span>\n </div>\n ))}\n </div>\n </>\n )\n}\n","import type { ColumnSort, Header, SortDirection, SortingState, Table } from '@tanstack/react-table'\n\nimport {\n BaselineIcon,\n CalendarIcon,\n CheckSquareIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n EyeOffIcon,\n HashIcon,\n ListChecksIcon,\n ListIcon,\n PinIcon,\n PinOffIcon,\n TextInitialIcon,\n XIcon,\n} from 'lucide-react'\nimport * as React from 'react'\n\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu/dropdown-menu'\nimport { cn } from '../lib/utils'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../tooltip/tooltip'\n\nimport { GanttTimeline } from './cell-variants/utils/gantt-timeline'\nimport type { Cell, ColumnMenuRendererFunction } from './data-grid-types'\n\nfunction getColumnVariant(variant?: Cell['variant']): {\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>\n label: string\n} | null {\n switch (variant) {\n case 'short-text':\n return { icon: BaselineIcon, label: 'Short text' }\n case 'long-text':\n return { icon: TextInitialIcon, label: 'Long text' }\n case 'number':\n return { icon: HashIcon, label: 'Number' }\n case 'select':\n return { icon: ListIcon, label: 'Select' }\n case 'multi-select':\n return { icon: ListChecksIcon, label: 'Multi-select' }\n case 'checkbox':\n return { icon: CheckSquareIcon, label: 'Checkbox' }\n case 'date':\n return { icon: CalendarIcon, label: 'Date' }\n default:\n return null\n }\n}\n\ntype DataGridColumnHeaderProps<TData, TValue> = {\n header: Header<TData, TValue>\n table: Table<TData>\n} & React.ComponentProps<typeof DropdownMenuTrigger>\n\nexport function DataGridColumnHeader<TData, TValue>({\n header,\n table,\n className,\n onPointerDown,\n ...props\n}: DataGridColumnHeaderProps<TData, TValue>) {\n const [open, setOpen] = React.useState(false)\n\n const column = header.column\n const label = column.columnDef.meta?.label\n ? column.columnDef.meta.label\n : typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id\n\n const isAnyColumnResizing = table.getState().columnSizingInfo.isResizingColumn\n\n const cellVariant = column.columnDef.meta?.cell\n const columnVariant = getColumnVariant(cellVariant?.variant)\n\n const pinnedPosition = column.getIsPinned()\n const isPinnedLeft = pinnedPosition === 'left'\n const isPinnedRight = pinnedPosition === 'right'\n\n const onSortingChange = React.useCallback(\n (direction: SortDirection) => {\n table.setSorting((prev: SortingState) => {\n const existingSortIndex = prev.findIndex((sort) => sort.id === column.id)\n const newSort: ColumnSort = {\n id: column.id,\n desc: direction === 'desc',\n }\n\n if (existingSortIndex >= 0) {\n const updated = [...prev]\n updated[existingSortIndex] = newSort\n return updated\n } else {\n return [...prev, newSort]\n }\n })\n },\n [column.id, table],\n )\n\n const onSortRemove = React.useCallback(() => {\n table.setSorting((prev: SortingState) => prev.filter((sort) => sort.id !== column.id))\n }, [column.id, table])\n\n const onLeftPin = React.useCallback(() => {\n column.pin('left')\n }, [column])\n\n const onRightPin = React.useCallback(() => {\n column.pin('right')\n }, [column])\n\n const onUnpin = React.useCallback(() => {\n column.pin(false)\n }, [column])\n\n const onTriggerPointerDown = React.useCallback(\n (event: React.PointerEvent<HTMLButtonElement>) => {\n onPointerDown?.(event)\n if (event.defaultPrevented) {\n return\n }\n\n if (event.button !== 0) {\n return\n }\n table.options.meta?.onColumnClick?.(column.id)\n },\n [table.options.meta, column.id, onPointerDown],\n )\n\n return (\n <>\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger\n className={cn(\n 'flex size-full items-center justify-between gap-2 p-2 text-sm bg-sidebar-accent/80 font-bold hover:bg-secondary/40 data-[state=open]:bg-secondary/40 [&_svg]:size-4',\n isAnyColumnResizing && 'pointer-events-none',\n className,\n )}\n onPointerDown={onTriggerPointerDown}\n {...props}\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-1.5\">\n {columnVariant && (\n <TooltipProvider>\n <Tooltip delayDuration={100}>\n <TooltipTrigger asChild>\n <columnVariant.icon className=\"size-3.5 shrink-0 text-muted-foreground\" />\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>{columnVariant.label}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n <span className=\"truncate\">{label}</span>\n </div>\n <ChevronDownIcon className=\"shrink-0 text-muted-foreground\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" sideOffset={0} className=\"w-60\">\n {column.getCanSort() && (\n <>\n <DropdownMenuCheckboxItem\n className=\"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\"\n checked={column.getIsSorted() === 'asc'}\n onClick={() => onSortingChange('asc')}\n >\n <ChevronUpIcon />\n Sort asc\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n className=\"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\"\n checked={column.getIsSorted() === 'desc'}\n onClick={() => onSortingChange('desc')}\n >\n <ChevronDownIcon />\n Sort desc\n </DropdownMenuCheckboxItem>\n {column.getIsSorted() && (\n <DropdownMenuItem onClick={onSortRemove}>\n <XIcon />\n Remove sort\n </DropdownMenuItem>\n )}\n </>\n )}\n {column.getCanPin() && (\n <>\n {column.getCanSort() && <DropdownMenuSeparator />}\n\n {isPinnedLeft ? (\n <DropdownMenuItem className=\"[&_svg]:text-muted-foreground\" onClick={onUnpin}>\n <PinOffIcon />\n Unpin from left\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem className=\"[&_svg]:text-muted-foreground\" onClick={onLeftPin}>\n <PinIcon />\n Pin to left\n </DropdownMenuItem>\n )}\n {isPinnedRight ? (\n <DropdownMenuItem className=\"[&_svg]:text-muted-foreground\" onClick={onUnpin}>\n <PinOffIcon />\n Unpin from right\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem className=\"[&_svg]:text-muted-foreground\" onClick={onRightPin}>\n <PinIcon />\n Pin to right\n </DropdownMenuItem>\n )}\n </>\n )}\n {column.getCanHide() && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuCheckboxItem\n className=\"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\"\n checked={!column.getIsVisible()}\n onClick={() => column.toggleVisibility(false)}\n >\n <EyeOffIcon />\n Hide column\n </DropdownMenuCheckboxItem>\n </>\n )}\n\n {/* Render header menu footer (custom optional component) */}\n {column.columnDef.meta?.headerMenuFooter && (\n <>\n <DropdownMenuSeparator />\n <div className=\"dropdown-footer\">\n {isMenuRendererFunction(column.columnDef.meta.headerMenuFooter)\n ? column.columnDef.meta.headerMenuFooter({ column, open, onOpenChange: setOpen })\n : column.columnDef.meta.headerMenuFooter}\n </div>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n {/* Render any variant-provided header component from HeaderComponents. */}\n {(() => {\n const variant = column.columnDef.meta?.cell?.variant\n const variantHeader = variant ? HeaderComponents[variant] : undefined\n if (variantHeader) {\n return variantHeader({ header, table })\n }\n\n return null\n })()}\n\n {/* Render custom column header component (optional columnDef.meta) */}\n {column.columnDef.meta?.headerCustomComponent && (\n <>\n {isMenuRendererFunction(column.columnDef.meta.headerCustomComponent)\n ? column.columnDef.meta.headerCustomComponent({ column })\n : column.columnDef.meta.headerCustomComponent}\n </>\n )}\n\n {header.column.getCanResize() && <DataGridColumnResizer header={header} table={table} label={label} />}\n </>\n )\n}\n\nconst DataGridColumnResizer = React.memo(DataGridColumnResizerImpl, (prev, next) => {\n const prevColumn = prev.header.column\n const nextColumn = next.header.column\n\n if (prevColumn.getIsResizing() !== nextColumn.getIsResizing() || prevColumn.getSize() !== nextColumn.getSize()) {\n return false\n }\n\n if (prev.label !== next.label) {\n return false\n }\n\n return true\n}) as typeof DataGridColumnResizerImpl\n\ntype DataGridColumnResizerProps<TData, TValue> = {\n label: string\n} & DataGridColumnHeaderProps<TData, TValue>\n\nfunction DataGridColumnResizerImpl<TData, TValue>({ header, table, label }: DataGridColumnResizerProps<TData, TValue>) {\n const defaultColumnDef = table._getDefaultColumnDef()\n\n const onDoubleClick = React.useCallback(() => {\n header.column.resetSize()\n }, [header.column])\n\n return (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize ${label} column`}\n aria-valuenow={header.column.getSize()}\n aria-valuemin={defaultColumnDef.minSize}\n aria-valuemax={defaultColumnDef.maxSize}\n tabIndex={0}\n className={cn(\n 'right-0 absolute top-0 z-50 h-full w-0 touch-none select-none cursor-ew-resize focus:outline-none',\n // visible thin line (use right positioning and a stable 1px width)\n \"before:content-[''] before:absolute before:inset-y-0 before:right-0 before:translate-x-1/2 before:w-px before:h-full before:bg-accent-foreground/70 before:opacity-0 before:transition-opacity before:duration-150\",\n // large invisible hit area\n \"after:content-[''] after:absolute after:inset-y-0 after:right-0 after:translate-x-1/2 after:w-[18px] after:h-full after:bg-transparent\",\n header.column.getIsResizing() ? 'before:opacity-100 before:bg-accent-foreground' : 'hover:before:opacity-100',\n )}\n style={{ willChange: 'transform, opacity', transform: 'translateZ(0)' }}\n onDoubleClick={onDoubleClick}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n />\n )\n}\n\nfunction isMenuRendererFunction<TData, TValue>(\n value: React.ReactNode | ColumnMenuRendererFunction<TData, TValue>,\n): value is ColumnMenuRendererFunction<TData, TValue> {\n return typeof value === 'function'\n}\n\n/**\n * Optional header components keyed by cell variant. Components receive { header, table } and\n * should return a React node (or null). This allows the column header to render variant-specific\n * header visuals without coupling the header implementation to variants.\n */\nexport const HeaderComponents: Record<string, (props: any) => React.ReactNode | null> = {\n gantt: (props) => <GanttTimeline {...props} />,\n}\n","import type { Column } from '@tanstack/react-table'\n\nimport type { CellPosition, RowHeightValue } from './data-grid-types'\n\nexport function getCellKey(rowIndex: number, columnId: string) {\n return `${rowIndex}:${columnId}`\n}\n\nexport function parseCellKey(cellKey: string): Required<CellPosition> {\n const parts = cellKey.split(':')\n const rowIndexStr = parts[0]\n const columnId = parts[1]\n if (rowIndexStr && columnId) {\n const rowIndex = parseInt(rowIndexStr, 10)\n if (!Number.isNaN(rowIndex)) {\n return { rowIndex, columnId }\n }\n }\n return { rowIndex: 0, columnId: '' }\n}\n\nexport function getRowHeightValue(rowHeight: RowHeightValue): number {\n // TODO: Make lineHeight configurable / use css variable: --data-grid-line-height\n const lineHeight = 16\n\n return lineHeight * getLineCount(rowHeight) + 12\n}\n\nexport function getLineCount(rowHeight: RowHeightValue): number {\n const lineCountMap: Record<RowHeightValue, number> = {\n short: 1,\n medium: 2,\n tall: 3,\n 'extra-tall': 4,\n }\n\n return lineCountMap[rowHeight]\n}\n\nexport function getCommonPinningStyles<TData>({\n column,\n withBorder = false,\n}: {\n column: Column<TData>\n withBorder?: boolean\n}): React.CSSProperties {\n const isPinned = column.getIsPinned()\n const isLastLeftPinnedColumn = isPinned === 'left' && column.getIsLastColumn('left')\n const isFirstRightPinnedColumn = isPinned === 'right' && column.getIsFirstColumn('right')\n\n return {\n boxShadow: withBorder\n ? isLastLeftPinnedColumn\n ? '-4px 0 4px var(--border) inset'\n : isFirstRightPinnedColumn\n ? '4px 0 -4px var(--border) inset'\n : undefined\n : undefined,\n left: isPinned === 'left' ? `${column.getStart('left')}px` : undefined,\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n opacity: isPinned ? 0.97 : 1,\n position: isPinned ? 'sticky' : 'relative',\n background: isPinned ? 'var(--background)' : 'var(--background)',\n width: column.getSize(),\n zIndex: isPinned ? 1 : undefined,\n }\n}\n","import { CopyIcon, EraserIcon, TrashIcon } from '@radix-ui/react-icons'\nimport type { Table, TableMeta } from '@tanstack/react-table'\n\nimport * as React from 'react'\nimport { toast } from 'sonner'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu/dropdown-menu'\n\nimport type { UpdateCell } from './data-grid-types'\nimport { parseCellKey } from './data-grid-utils'\n\ntype DataGridContextMenuProps<TData> = {\n table: Table<TData>\n}\n\nexport function DataGridContextMenu<TData>({ table }: DataGridContextMenuProps<TData>) {\n const meta = table.options.meta\n const contextMenu = meta?.contextMenu\n const onContextMenuOpenChange = meta?.onContextMenuOpenChange\n const selectionState = meta?.selectionState\n const dataGridRef = meta?.dataGridRef\n const onDataUpdate = meta?.onDataUpdate\n const onRowsDelete = meta?.onRowsDelete\n\n if (!contextMenu) {\n return null\n }\n\n return (\n <ContextMenu\n table={table}\n dataGridRef={dataGridRef}\n contextMenu={contextMenu}\n onContextMenuOpenChange={onContextMenuOpenChange}\n selectionState={selectionState}\n onDataUpdate={onDataUpdate}\n onRowsDelete={onRowsDelete}\n />\n )\n}\n\ntype ContextMenuProps<TData> = {\n table: Table<TData>\n} & Pick<\n TableMeta<TData>,\n 'dataGridRef' | 'onContextMenuOpenChange' | 'selectionState' | 'onDataUpdate' | 'onRowsDelete'\n> &\n Required<Pick<TableMeta<TData>, 'contextMenu'>>\n\nconst ContextMenu = React.memo(ContextMenuImpl, (prev, next) => {\n if (prev.contextMenu.open !== next.contextMenu.open) {\n return false\n }\n if (!next.contextMenu.open) {\n return true\n }\n if (prev.contextMenu.x !== next.contextMenu.x) {\n return false\n }\n if (prev.contextMenu.y !== next.contextMenu.y) {\n return false\n }\n\n const prevSize = prev.selectionState?.selectedCells?.size ?? 0\n const nextSize = next.selectionState?.selectedCells?.size ?? 0\n if (prevSize !== nextSize) {\n return false\n }\n\n return true\n}) as typeof ContextMenuImpl\n\nfunction ContextMenuImpl<TData>({\n table,\n dataGridRef,\n contextMenu,\n onContextMenuOpenChange,\n selectionState,\n onDataUpdate,\n onRowsDelete,\n}: ContextMenuProps<TData>) {\n const triggerStyle = React.useMemo<React.CSSProperties>(\n () => ({\n position: 'fixed',\n left: `${contextMenu.x}px`,\n top: `${contextMenu.y}px`,\n width: '1px',\n height: '1px',\n padding: 0,\n margin: 0,\n border: 'none',\n background: 'transparent',\n pointerEvents: 'none',\n opacity: 0,\n }),\n [contextMenu.x, contextMenu.y],\n )\n\n const onCloseAutoFocus: NonNullable<React.ComponentProps<typeof DropdownMenuContent>['onCloseAutoFocus']> =\n React.useCallback(\n (event) => {\n event.preventDefault()\n dataGridRef?.current?.focus()\n },\n [dataGridRef],\n )\n\n const onCopy = React.useCallback(async () => {\n if (!selectionState?.selectedCells || selectionState.selectedCells.size === 0) {\n return\n }\n\n const rows = table.getRowModel().rows\n const columnIds: string[] = []\n\n const selectedCellsArray = Array.from(selectionState.selectedCells)\n for (const cellKey of selectedCellsArray) {\n const { columnId } = parseCellKey(cellKey)\n if (columnId && !columnIds.includes(columnId)) {\n columnIds.push(columnId)\n }\n }\n\n const cellData = new Map<string, string>()\n for (const cellKey of selectedCellsArray) {\n const { rowIndex, columnId } = parseCellKey(cellKey)\n const row = rows[rowIndex]\n if (row) {\n const cell = row.getVisibleCells().find((c) => c.column.id === columnId)\n if (cell) {\n const value = cell.getValue()\n cellData.set(cellKey, String(value ?? ''))\n }\n }\n }\n\n const rowIndices = new Set<number>()\n const colIndices = new Set<number>()\n\n for (const cellKey of selectedCellsArray) {\n const { rowIndex, columnId } = parseCellKey(cellKey)\n rowIndices.add(rowIndex)\n const colIndex = columnIds.indexOf(columnId)\n if (colIndex >= 0) {\n colIndices.add(colIndex)\n }\n }\n\n const sortedRowIndices = Array.from(rowIndices).sort((a, b) => a - b)\n const sortedColIndices = Array.from(colIndices).sort((a, b) => a - b)\n const sortedColumnIds = sortedColIndices.map((i) => columnIds[i])\n\n const tsvData = sortedRowIndices\n .map((rowIndex) =>\n sortedColumnIds\n .map((columnId) => {\n const cellKey = `${rowIndex}:${columnId}`\n return cellData.get(cellKey) ?? ''\n })\n .join('\\t'),\n )\n .join('\\n')\n\n await navigator.clipboard.writeText(tsvData)\n toast.success(\n `${selectionState.selectedCells.size} cell${selectionState.selectedCells.size !== 1 ? 's' : ''} copied`,\n )\n }, [table, selectionState])\n\n // Determine whether the selected cells are all editable. If any selected cell belongs to a non-editable column (meta.editable === false), disable the Clear action.\n const canClear = React.useMemo(() => {\n if (!selectionState?.selectedCells || selectionState.selectedCells.size === 0) {\n return false\n }\n\n const visibleCols = table.getVisibleLeafColumns()\n const rows = table.getRowModel().rows\n\n for (const cellKey of selectionState.selectedCells) {\n const { rowIndex, columnId } = parseCellKey(cellKey)\n if (!columnId) {\n continue\n }\n const col = visibleCols.find((c) => c.id === columnId)\n const editable = col?.columnDef?.meta?.editable\n\n if (editable === false) {\n return false\n }\n\n if (typeof editable === 'function') {\n const row = rows[rowIndex]\n if (row && !editable(row.original)) {\n return false\n }\n }\n }\n\n return true\n }, [selectionState, table])\n\n const onClear = React.useCallback(() => {\n if (!selectionState?.selectedCells || selectionState.selectedCells.size === 0) {\n return\n }\n\n if (!canClear) {\n return\n }\n\n const updates: UpdateCell[] = []\n\n for (const cellKey of selectionState.selectedCells) {\n const { rowIndex, columnId } = parseCellKey(cellKey)\n updates.push({ rowIndex, columnId, value: '' })\n }\n\n onDataUpdate?.(updates)\n\n toast.success(`${updates.length} cell${updates.length !== 1 ? 's' : ''} cleared`)\n }, [onDataUpdate, selectionState, canClear])\n\n const onDelete = React.useCallback(async () => {\n if (!selectionState?.selectedCells || selectionState.selectedCells.size === 0) {\n return\n }\n\n const rowIndices = new Set<number>()\n for (const cellKey of selectionState.selectedCells) {\n const { rowIndex } = parseCellKey(cellKey)\n rowIndices.add(rowIndex)\n }\n\n const rowIndicesArray = Array.from(rowIndices).sort((a, b) => a - b)\n const rowCount = rowIndicesArray.length\n\n await onRowsDelete?.(rowIndicesArray)\n\n toast.success(`${rowCount} row${rowCount !== 1 ? 's' : ''} deleted`)\n }, [onRowsDelete, selectionState])\n\n return (\n <DropdownMenu open={contextMenu.open} onOpenChange={onContextMenuOpenChange}>\n <DropdownMenuTrigger style={triggerStyle} />\n <DropdownMenuContent data-grid-popover=\"\" align=\"start\" className=\"w-48\" onCloseAutoFocus={onCloseAutoFocus}>\n <DropdownMenuItem onSelect={onCopy}>\n <CopyIcon />\n Copy\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={onClear} disabled={!canClear}>\n <EraserIcon />\n Clear\n </DropdownMenuItem>\n {onRowsDelete && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem variant=\"destructive\" onSelect={onDelete}>\n <TrashIcon />\n Delete rows\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\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 }\n\n 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 return undefined\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 return React.useCallback(composeRefs(...refs), refs)\n}\n\nexport { composeRefs, useComposedRefs }\n","import { flexRender, type Row } from '@tanstack/react-table'\nimport type { Virtualizer } from '@tanstack/react-virtual'\n\nimport * as React from 'react'\n\nimport { useComposedRefs } from '../lib/compose-refs'\nimport { cn } from '../lib/utils'\n\nimport type { CellPosition, RowHeightValue } from './data-grid-types'\nimport { getCommonPinningStyles, getLineCount } from './data-grid-utils'\n\ntype DataGridRowProps<TData> = {\n row: Row<TData>\n rowVirtualizer: Virtualizer<HTMLDivElement, Element>\n virtualRowIndex: number\n rowMapRef: React.RefObject<Map<number, HTMLDivElement>>\n rowHeight: RowHeightValue\n focusedCell: CellPosition | null\n} & React.ComponentProps<'div'>\n\nexport const DataGridRow = React.memo(DataGridRowImpl, (prev, next) => {\n if (prev.row.id !== next.row.id) {\n return false\n }\n\n // Check if the actual row data has changed\n if (prev.row.original !== next.row.original) {\n return false\n }\n\n const prevRowIndex = prev.virtualRowIndex\n const nextRowIndex = next.virtualRowIndex\n\n const prevHasFocus = prev.focusedCell?.rowIndex === prevRowIndex\n const nextHasFocus = next.focusedCell?.rowIndex === nextRowIndex\n\n if (prevHasFocus !== nextHasFocus) {\n return false\n }\n\n if (nextHasFocus && prevHasFocus) {\n const prevFocusedCol = prev.focusedCell?.columnId\n const nextFocusedCol = next.focusedCell?.columnId\n if (prevFocusedCol !== nextFocusedCol) {\n return false\n }\n }\n\n return next.rowVirtualizer.isScrolling\n}) as typeof DataGridRowImpl\n\nfunction DataGridRowImpl<TData>({\n row,\n virtualRowIndex,\n rowVirtualizer,\n rowMapRef,\n rowHeight,\n focusedCell,\n ref,\n className,\n ...props\n}: DataGridRowProps<TData>) {\n const rowRef = useComposedRefs(ref, (node) => {\n if (node && typeof virtualRowIndex !== 'undefined') {\n rowVirtualizer.measureElement(node)\n rowMapRef.current.set(virtualRowIndex, node)\n }\n })\n\n const isRowSelected = row.getIsSelected()\n\n return (\n <div\n key={row.id}\n role=\"row\"\n aria-rowindex={virtualRowIndex + 2}\n aria-selected={isRowSelected}\n data-index={virtualRowIndex}\n data-slot=\"grid-row\"\n ref={rowRef}\n tabIndex={-1}\n className={cn(\n 'absolute flex w-full border-b h-[calc(var(--data-grid-line-height)*(var(--line-count))+12px)]',\n className,\n )}\n style={{ '--line-count': `${getLineCount(rowHeight)}` } as React.CSSProperties}\n {...props}\n >\n {row.getVisibleCells().map((cell, colIndex) => {\n const isCellFocused = focusedCell?.rowIndex === virtualRowIndex && focusedCell?.columnId === cell.column.id\n\n return (\n <div\n key={cell.id}\n role=\"gridcell\"\n aria-colindex={colIndex + 1}\n data-highlighted={isCellFocused ? '' : undefined}\n data-slot=\"grid-cell\"\n tabIndex={-1}\n className={cn({\n 'border-r': cell.column.id !== 'select',\n })}\n style={{\n ...getCommonPinningStyles({ column: cell.column }),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n }}\n >\n {typeof cell.column.columnDef.header === 'function' ? (\n <div\n className={cn('size-full px-3 py-1.5', {\n 'bg-accent-foreground/10': isRowSelected,\n })}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </div>\n ) : (\n flexRender(cell.column.columnDef.cell, cell.getContext())\n )}\n </div>\n )\n })}\n </div>\n )\n}\n","import { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst inputVariants = cva(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n {\n variants: {\n variant: {\n default: 'h-9 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n simple: 'h-8',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\ntype InputProps = React.ComponentProps<'input'> &\n VariantProps<typeof inputVariants> & {\n /**\n * E2E test_id to identify the input.\n */\n __e2e_test_id__?: string\n onEnter?: () => void\n }\nfunction Input({ className, type, variant, __e2e_test_id__, onEnter, ...props }: InputProps) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ variant, className }))}\n data-test-id={__e2e_test_id__}\n onKeyDown={(e) => {\n props.onKeyDown?.(e)\n if (e.key === 'Enter') {\n onEnter?.()\n }\n }}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from 'react'\n\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/use-callback-ref/src/useCallbackRef.tsx\n */\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: never[]) => unknown>(callback: T | undefined): T {\n const callbackRef = React.useRef(callback)\n\n React.useEffect(() => {\n callbackRef.current = callback\n })\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, [])\n}\n\nexport { useCallbackRef }\n","import * as React from 'react'\n\nimport { useCallbackRef } from './use-callback-ref'\n\nexport function useDebouncedCallback<T extends (...args: never[]) => unknown>(callback: T, delay: number) {\n const handleCallback = useCallbackRef(callback)\n const debounceTimerRef = React.useRef(0)\n React.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), [])\n\n const setValue = React.useCallback(\n (...args: Parameters<T>) => {\n window.clearTimeout(debounceTimerRef.current)\n debounceTimerRef.current = window.setTimeout(() => handleCallback(...args), delay)\n },\n [handleCallback, delay],\n )\n\n return setValue\n}\n","import { ChevronDownIcon, ChevronUpIcon, Cross2Icon } from '@radix-ui/react-icons'\n\nimport * as React from 'react'\n\nimport { Button } from '../button/button'\nimport { Input } from '../input/input'\n\nimport { useDebouncedCallback } from './hooks/use-debounced-callback'\nimport type { SearchState } from './data-grid-types'\n\ntype DataGridSearchProps = {} & SearchState\n\nexport const DataGridSearch = React.memo(DataGridSearchImpl, (prev, next) => {\n if (prev.searchOpen !== next.searchOpen) {\n return false\n }\n\n if (!next.searchOpen) {\n return true\n }\n\n if (prev.searchQuery !== next.searchQuery || prev.matchIndex !== next.matchIndex) {\n return false\n }\n\n if (prev.searchMatches.length !== next.searchMatches.length) {\n return false\n }\n\n for (let i = 0; i < prev.searchMatches.length; i++) {\n const prevMatch = prev.searchMatches[i]\n const nextMatch = next.searchMatches[i]\n\n if (!prevMatch || !nextMatch) {\n return false\n }\n\n if (prevMatch.rowIndex !== nextMatch.rowIndex || prevMatch.columnId !== nextMatch.columnId) {\n return false\n }\n }\n\n return true\n})\n\nfunction DataGridSearchImpl({\n searchMatches,\n matchIndex,\n searchOpen,\n onSearchOpenChange,\n searchQuery,\n onSearchQueryChange,\n onSearch,\n onNavigateToNextMatch,\n onNavigateToPrevMatch,\n}: DataGridSearchProps) {\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (searchOpen) {\n requestAnimationFrame(() => {\n inputRef.current?.focus()\n })\n }\n }, [searchOpen])\n\n React.useEffect(() => {\n if (!searchOpen) {\n return\n }\n\n function onEscape(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault()\n onSearchOpenChange(false)\n }\n }\n\n document.addEventListener('keydown', onEscape)\n return () => document.removeEventListener('keydown', onEscape)\n }, [searchOpen, onSearchOpenChange])\n\n const onKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n event.stopPropagation()\n\n if (event.key === 'Enter') {\n event.preventDefault()\n if (event.shiftKey) {\n onNavigateToPrevMatch()\n } else {\n onNavigateToNextMatch()\n }\n }\n },\n [onNavigateToNextMatch, onNavigateToPrevMatch],\n )\n\n const debouncedSearch = useDebouncedCallback((query: string) => {\n onSearch(query)\n }, 150)\n\n const onChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value\n onSearchQueryChange(value)\n debouncedSearch(value)\n },\n [onSearchQueryChange, debouncedSearch],\n )\n\n const onTriggerPointerDown = React.useCallback((event: React.PointerEvent<HTMLButtonElement>) => {\n // prevent implicit pointer capture\n const target = event.target\n if (!(target instanceof HTMLElement)) {\n return\n }\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId)\n }\n\n // Only prevent default if we're not clicking on the input\n // This allows text selection in the input while still preventing focus stealing elsewhere\n if (\n event.button === 0 &&\n event.ctrlKey === false &&\n event.pointerType === 'mouse' &&\n !(event.target instanceof HTMLInputElement)\n ) {\n event.preventDefault()\n }\n }, [])\n\n const onPrevMatchPointerDown = React.useCallback(\n (event: React.PointerEvent<HTMLButtonElement>) => onTriggerPointerDown(event),\n [onTriggerPointerDown],\n )\n\n const onNextMatchPointerDown = React.useCallback(\n (event: React.PointerEvent<HTMLButtonElement>) => onTriggerPointerDown(event),\n [onTriggerPointerDown],\n )\n\n const onClose = React.useCallback(() => {\n onSearchOpenChange(false)\n }, [onSearchOpenChange])\n\n if (!searchOpen) {\n return null\n }\n\n return (\n <div\n role=\"search\"\n data-slot=\"grid-search\"\n className=\"fade-in-0 slide-in-from-top-2 absolute top-4 right-4 z-50 flex animate-in flex-col gap-2 rounded-lg border border-border bg-background p-2 shadow-lg\"\n >\n <div className=\"flex items-center gap-2\">\n <Input\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n placeholder=\"Find in table...\"\n className=\"h-8 w-64\"\n ref={inputRef}\n value={searchQuery}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n <div className=\"flex items-center gap-1\">\n <Button\n aria-label=\"Previous match\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n onClick={onNavigateToPrevMatch}\n onPointerDown={onPrevMatchPointerDown}\n disabled={searchMatches.length === 0}\n >\n <ChevronUpIcon />\n </Button>\n <Button\n aria-label=\"Next match\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n onClick={onNavigateToNextMatch}\n onPointerDown={onNextMatchPointerDown}\n disabled={searchMatches.length === 0}\n >\n <ChevronDownIcon />\n </Button>\n <Button aria-label=\"Close search\" variant=\"ghost\" size=\"icon\" className=\"size-7\" onClick={onClose}>\n <Cross2Icon />\n </Button>\n </div>\n </div>\n <div className=\"flex items-center gap-1 whitespace-nowrap text-muted-foreground\">\n {searchMatches.length > 0 ? (\n <span>\n {matchIndex + 1} of {searchMatches.length}\n </span>\n ) : searchQuery ? (\n <span>No results</span>\n ) : (\n <span>Type to search</span>\n )}\n </div>\n </div>\n )\n}\n","import { PlusIcon } from '@radix-ui/react-icons'\nimport { flexRender } from '@tanstack/react-table'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nimport type { useDataGrid } from './hooks/use-data-grid'\nimport { DataGridColumnHeader } from './data-grid-column-header'\nimport { DataGridContextMenu } from './data-grid-context-menu'\nimport { DataGridRow } from './data-grid-row'\nimport { DataGridSearch } from './data-grid-search'\nimport { getCommonPinningStyles } from './data-grid-utils'\n\ntype DataGridProps<TData> = {\n height?: number\n} & ReturnType<typeof useDataGrid<TData>> &\n React.ComponentProps<'div'>\n\nexport function DataGrid<TData>({\n dataGridRef,\n headerRef,\n rowMapRef,\n footerRef,\n table,\n rowVirtualizer,\n height,\n searchState,\n columnSizeVars,\n onRowAdd,\n className,\n ...props\n}: DataGridProps<TData>) {\n const rows = table.getRowModel().rows\n const columns = table.getAllColumns()\n\n const meta = table.options.meta\n const rowHeight = meta?.rowHeight ?? 'short'\n const focusedCell = meta?.focusedCell ?? null\n\n const onGridContextMenu = React.useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n event.preventDefault()\n }, [])\n\n const onAddRowKeyDown = React.useCallback(\n async (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!onRowAdd) {\n return\n }\n\n if (event.key === 'Enter' || event.key === '') {\n event.preventDefault()\n await onRowAdd()\n }\n },\n [onRowAdd],\n )\n\n // calculate header/footer heights using simple measurements (no observers)\n // previous fallbacks were header ~58 and footer ~13\n const headerHeight = headerRef?.current?.clientHeight ?? 58\n const footerHeight = onRowAdd ? (footerRef?.current?.clientHeight ?? 12) + 1 : 0\n\n // if the grid has a horizontal scrollbar, measure its height so it doesn't overlap content\n let scrollbarHeight = 0\n if (dataGridRef?.current) {\n const el = dataGridRef.current\n if (el.scrollWidth > el.clientWidth) {\n // offsetHeight - clientHeight approximates the scrollbar thickness (includes borders)\n scrollbarHeight = Math.max(0, el.offsetHeight - el.clientHeight)\n }\n }\n\n return (\n <div data-slot=\"grid-wrapper\" className={cn('relative flex w-full flex-col', className)} {...props}>\n {searchState && <DataGridSearch {...searchState} />}\n <DataGridContextMenu table={table} />\n <div\n role=\"grid\"\n aria-label=\"Data grid\"\n aria-rowcount={rows.length + (onRowAdd ? 1 : 0)}\n aria-colcount={columns.length}\n data-slot=\"grid\"\n tabIndex={0}\n ref={dataGridRef}\n className=\"relative grid select-none overflow-auto rounded-md border border-border focus:outline-none\"\n style={{\n ...columnSizeVars,\n // dynamically include measured header/footer heights (falling back to previous magic numbers)\n // include horizontal scrollbar height when present, and add a small buffer of 3px\n height: `${Math.min(\n rowVirtualizer.getTotalSize() + headerHeight + footerHeight + scrollbarHeight + 3,\n height ?? Infinity,\n )}px`,\n }}\n onContextMenu={onGridContextMenu}\n >\n <div\n role=\"rowgroup\"\n data-slot=\"grid-header\"\n ref={headerRef}\n className=\"sticky top-0 z-10 grid border-b bg-background\"\n >\n {table.getHeaderGroups().map((headerGroup, rowIndex) => (\n <div\n key={headerGroup.id}\n role=\"row\"\n aria-rowindex={rowIndex + 1}\n data-slot=\"grid-header-row\"\n tabIndex={-1}\n className=\"flex w-full\"\n >\n {headerGroup.headers.map((header, colIndex) => {\n const sorting = table.getState().sorting\n const currentSort = sorting.find((sort) => sort.id === header.column.id)\n const isSortable = header.column.getCanSort()\n\n return (\n <div\n key={header.id}\n role=\"columnheader\"\n aria-colindex={colIndex + 1}\n aria-sort={\n currentSort?.desc === false\n ? 'ascending'\n : currentSort?.desc === true\n ? 'descending'\n : isSortable\n ? 'none'\n : undefined\n }\n data-slot=\"grid-header-cell\"\n tabIndex={-1}\n className={cn('relative', {\n 'border-r': header.column.id !== 'select',\n })}\n style={{\n ...getCommonPinningStyles({ column: header.column }),\n width: `calc(var(--header-${header.id}-size) * 1px)`,\n }}\n >\n {header.isPlaceholder ? null : typeof header.column.columnDef.header === 'function' ? (\n <div className=\"size-full px-3 py-1.5 bg-secondary/80 hover:bg-secondary/40\">\n {flexRender(header.column.columnDef.header, header.getContext())}\n </div>\n ) : (\n <DataGridColumnHeader header={header} table={table} />\n )}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n <div\n role=\"rowgroup\"\n data-slot=\"grid-body\"\n className=\"relative grid\"\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n }}\n >\n {rowVirtualizer.getVirtualIndexes().map((virtualRowIndex) => {\n const row = rows[virtualRowIndex]\n if (!row) {\n return null\n }\n\n return (\n <DataGridRow\n key={row.id}\n row={row}\n rowMapRef={rowMapRef}\n virtualRowIndex={virtualRowIndex}\n rowVirtualizer={rowVirtualizer}\n rowHeight={rowHeight}\n focusedCell={focusedCell}\n />\n )\n })}\n </div>\n {onRowAdd && (\n <div\n role=\"rowgroup\"\n data-slot=\"grid-footer\"\n ref={footerRef}\n className=\"sticky bottom-0 z-10 grid border-t bg-background\"\n >\n <div\n role=\"row\"\n aria-rowindex={rows.length + 2}\n data-slot=\"grid-add-row\"\n tabIndex={-1}\n className=\"flex w-full\"\n >\n <div\n role=\"gridcell\"\n tabIndex={0}\n className=\"relative flex h-9 grow items-center bg-secondary/30 transition-colors hover:bg-secondary/50 focus:bg-secondary/50 focus:outline-none\"\n style={{\n width: table.getTotalSize(),\n minWidth: table.getTotalSize(),\n }}\n onClick={onRowAdd}\n onKeyDown={onAddRowKeyDown}\n >\n <div className=\"sticky left-0 flex items-center gap-2 px-3 text-muted-foreground\">\n <PlusIcon className=\"size-3.5\" />\n <span className=\"text-sm\">Add row</span>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n","import type { Cell, Table } from '@tanstack/react-table'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\ntype DataGridCellWrapperProps<TData> = {\n cell: Cell<TData, unknown>\n table: Table<TData>\n rowIndex: number\n columnId: string\n isEditing: boolean\n isFocused: boolean\n isSelected: boolean\n} & React.ComponentProps<'div'>\n\nexport function DataGridCellWrapper<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isEditing,\n isFocused,\n isSelected,\n className,\n onClick: onClickProp,\n onKeyDown: onKeyDownProp,\n ...props\n}: DataGridCellWrapperProps<TData>) {\n const meta = table.options.meta\n\n const rowOriginal = (cell?.row?.original ?? {}) as any\n const colCellMeta = cell?.column?.columnDef?.meta as any\n const align: 'left' | 'right' | 'center' = colCellMeta?.align ?? 'left'\n\n // Normalize editable to a resolver function and memoize to avoid typeof checks per cell\n const editableResolver = React.useMemo(() => {\n const v = colCellMeta?.editable\n if (v === undefined) {\n return () => true\n }\n return typeof v === 'function' ? (v as (row: TData) => boolean) : () => Boolean(v)\n }, [colCellMeta?.editable])\n const isEditable = editableResolver(rowOriginal)\n\n // Normalize className to a resolver function and memoize to avoid typeof checks per cell\n const classNameResolver = React.useMemo(() => {\n const v = colCellMeta?.className\n return typeof v === 'function' ? (v as (row: any) => string | undefined) : () => v as string | undefined\n }, [colCellMeta?.className])\n const colCellClassName = classNameResolver(rowOriginal)\n\n const isSearchMatch = meta?.getIsSearchMatch?.(rowIndex, columnId) ?? false\n const isActiveSearchMatch = meta?.getIsActiveSearchMatch?.(rowIndex, columnId) ?? false\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!isEditing) {\n event.preventDefault()\n onClickProp?.(event)\n if (isFocused) {\n if (isEditable) {\n meta?.onCellEditingStart?.(rowIndex, columnId)\n }\n } else {\n meta?.onCellClick?.(rowIndex, columnId, event)\n }\n }\n },\n [meta, rowIndex, columnId, isEditing, isFocused, onClickProp, isEditable],\n )\n\n const onContextMenu = React.useCallback(\n (event: React.MouseEvent) => {\n if (!isEditing) {\n meta?.onCellContextMenu?.(rowIndex, columnId, event)\n }\n },\n [meta, rowIndex, columnId, isEditing],\n )\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent) => {\n if (!isEditing) {\n meta?.onCellMouseDown?.(rowIndex, columnId, event)\n }\n },\n [meta, rowIndex, columnId, isEditing],\n )\n\n const onMouseEnter = React.useCallback(\n (event: React.MouseEvent) => {\n if (!isEditing) {\n meta?.onCellMouseEnter?.(rowIndex, columnId, event)\n }\n },\n [meta, rowIndex, columnId, isEditing],\n )\n\n const onMouseUp = React.useCallback(() => {\n if (!isEditing) {\n meta?.onCellMouseUp?.()\n }\n }, [meta, isEditing])\n\n const onDoubleClick = React.useCallback(\n (event: React.MouseEvent) => {\n if (!isEditing) {\n event.preventDefault()\n if (isEditable) {\n meta?.onCellDoubleClick?.(rowIndex, columnId)\n }\n }\n },\n [meta, rowIndex, columnId, isEditing, isEditable],\n )\n\n const onKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDownProp?.(event)\n\n if (event.defaultPrevented) {\n return\n }\n\n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight' ||\n event.key === 'Home' ||\n event.key === 'End' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Tab'\n ) {\n return\n }\n\n if (isFocused && !isEditing) {\n if (event.key === 'F2' || event.key === 'Enter') {\n event.preventDefault()\n event.stopPropagation()\n if (isEditable) {\n meta?.onCellEditingStart?.(rowIndex, columnId)\n }\n return\n }\n\n if (event.key === '') {\n event.preventDefault()\n event.stopPropagation()\n meta?.onCellEditingStart?.(rowIndex, columnId)\n return\n }\n\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) {\n event.preventDefault()\n event.stopPropagation()\n if (isEditable) {\n meta?.onCellEditingStart?.(rowIndex, columnId)\n }\n }\n }\n },\n [onKeyDownProp, isFocused, isEditing, meta, rowIndex, columnId, isEditable],\n )\n\n const rowHeight = meta?.rowHeight ?? 'short'\n\n return (\n <div\n role=\"button\"\n data-slot=\"grid-cell-wrapper\"\n data-editing={isEditing ? '' : undefined}\n data-focused={isFocused ? '' : undefined}\n data-selected={isSelected ? '' : undefined}\n tabIndex={isFocused && !isEditing ? 0 : -1}\n className={cn(\n 'size-full px-2 py-1.5 text-sm outline-none -has-data-[slot=checkbox]:pt-2.5', // why has-data-[slot=checkbox] ?\n {\n 'text-left': align === 'left',\n 'text-right': align === 'right',\n 'text-center': align === 'center',\n },\n {\n 'ring-1 ring-foreground ring-inset dark:ring-secondary-foreground': isFocused,\n 'bg-yellow-100 dark:bg-yellow-900/30': isSearchMatch && !isActiveSearchMatch,\n 'bg-orange-200 dark:bg-orange-900/50': isActiveSearchMatch,\n 'bg-accent-foreground/10': isSelected && !isEditing,\n 'cursor-default': !isEditing,\n '**:data-[slot=grid-cell-content]:line-clamp-1': !isEditing && rowHeight === 'short',\n '**:data-[slot=grid-cell-content]:line-clamp-2': !isEditing && rowHeight === 'medium',\n '**:data-[slot=grid-cell-content]:line-clamp-3': !isEditing && rowHeight === 'tall',\n '**:data-[slot=grid-cell-content]:line-clamp-4': !isEditing && rowHeight === 'extra-tall',\n },\n colCellClassName,\n className,\n )}\n onClick={onClick}\n onContextMenu={onContextMenu}\n onDoubleClick={onDoubleClick}\n onMouseDown={onMouseDown}\n onMouseEnter={onMouseEnter}\n onMouseUp={onMouseUp}\n onKeyDown={onKeyDown}\n {...props}\n />\n )\n}\n","import * as React from 'react'\n\nimport { Checkbox } from '../../checkbox/checkbox'\nimport { DataGridCellWrapper } from '../data-grid-cell-wrapper'\n\nimport { CellVariantProps } from './cell-variant-types'\n\nexport function CheckboxCell<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isFocused,\n isSelected,\n}: Readonly<CellVariantProps<TData, boolean>>) {\n const initialValue = cell.getValue()\n const [value, setValue] = React.useState(Boolean(initialValue))\n const containerRef = React.useRef<HTMLDivElement>(null)\n const meta = table.options.meta\n const colMeta = cell.column.columnDef.meta\n // Normalize editable to a resolver function and memoize to avoid typeof checks per cell\n const editableResolver = React.useMemo(() => {\n const v = colMeta?.editable\n if (v === undefined) {\n return () => true\n }\n return typeof v === 'function' ? (v as (row: TData) => boolean) : () => Boolean(v)\n }, [colMeta?.editable])\n const isEditable = editableResolver(cell.row.original)\n\n const onCheckedChange = React.useCallback(\n (checked: boolean) => {\n setValue(checked)\n meta?.onDataUpdate?.({ rowIndex, columnId, value: checked })\n },\n [meta, rowIndex, columnId],\n )\n\n const onWrapperKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!isEditable) {\n return\n }\n if (isFocused && (event.key === '' || event.key === 'Enter')) {\n event.preventDefault()\n event.stopPropagation()\n onCheckedChange(!value)\n }\n },\n [isFocused, value, onCheckedChange, isEditable],\n )\n\n React.useEffect(() => {\n setValue(Boolean(initialValue))\n }, [initialValue])\n\n React.useEffect(() => {\n if (isFocused && !meta?.searchOpen && !meta?.isScrolling && containerRef.current) {\n containerRef.current.focus()\n }\n }, [isFocused, meta?.searchOpen, meta?.isScrolling])\n\n const onWrapperClick = React.useCallback(\n (event: React.MouseEvent) => {\n if (!isEditable) {\n return\n }\n if (isFocused) {\n event.preventDefault()\n event.stopPropagation()\n onCheckedChange(!value)\n }\n },\n [isFocused, value, onCheckedChange, isEditable],\n )\n\n const onCheckboxClick = React.useCallback((event: React.MouseEvent<HTMLInputElement>) => {\n event.stopPropagation()\n }, [])\n\n const onCheckboxMouseDown = React.useCallback((event: React.MouseEvent<HTMLInputElement>) => {\n event.stopPropagation()\n }, [])\n\n const onCheckboxDoubleClick = React.useCallback((event: React.MouseEvent<HTMLInputElement>) => {\n event.stopPropagation()\n }, [])\n\n return (\n <DataGridCellWrapper\n ref={containerRef}\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={false}\n isFocused={isFocused}\n isSelected={isSelected}\n onClick={onWrapperClick}\n onKeyDown={onWrapperKeyDown}\n className=\"flex size-full justify-center\"\n >\n <Checkbox\n variant=\"simple\"\n iconStyle=\"simple\"\n checkIcon=\"check\"\n checked={value}\n onChange={(event) => onCheckedChange(event.target.checked)}\n onClick={onCheckboxClick}\n onMouseDown={onCheckboxMouseDown}\n onDoubleClick={onCheckboxDoubleClick}\n className=\"border-secondary-foreground\"\n />\n </DataGridCellWrapper>\n )\n}\n","import * as React from 'react'\n\nimport { Calendar } from '../../calendar/calendar'\nimport { cn } from '../../lib/utils'\nimport { Popover, PopoverAnchor, PopoverContent } from '../../popover/popover'\nimport { DataGridCellWrapper } from '../data-grid-cell-wrapper'\n\nimport { CellVariantProps } from './cell-variant-types'\n\n/**\n * Parse a date value (Date object or ISO string YYYY-MM-DD) as a local date, not UTC.\n * new Date('2025-12-01') interprets as UTC, causing timezone shifts.\n */\nfunction parseToLocalDate(value: string | Date | null | undefined): Date | undefined {\n if (!value) {\n return undefined\n }\n if (value instanceof Date) {\n return value\n }\n if (typeof value !== 'string') {\n return undefined\n }\n\n // Parse ISO date string in local timezone by explicitly setting year, month, day\n const regex = /^(\\d{4})-(\\d{2})-(\\d{2})$/\n const match = regex.exec(value)\n if (!match) {\n return undefined\n }\n\n const year = Number.parseInt(match[1]!, 10)\n const month = Number.parseInt(match[2]!, 10) - 1 // months are 0-indexed\n const day = Number.parseInt(match[3]!, 10)\n\n return new Date(year, month, day)\n}\n\nfunction formatDateToISOString(date: Date): string {\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nexport function DateCell<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isFocused,\n isEditing,\n isSelected,\n}: Readonly<CellVariantProps<TData, string>>) {\n const initialValue = cell.getValue() as string | Date | null | undefined\n const [value, setValue] = React.useState<Date | undefined>(parseToLocalDate(initialValue))\n const [open, setOpen] = React.useState(false)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const meta = table.options.meta\n\n const prevInitialValueRef = React.useRef(initialValue)\n if (initialValue !== prevInitialValueRef.current) {\n prevInitialValueRef.current = initialValue\n setValue(parseToLocalDate(initialValue))\n }\n\n const onDateSelect = React.useCallback(\n (date: Date | undefined) => {\n if (!date) {\n return\n }\n\n setValue(date)\n meta?.onDataUpdate?.({ rowIndex, columnId, value: formatDateToISOString(date) })\n setOpen(false)\n meta?.onCellEditingStop?.()\n },\n [meta, rowIndex, columnId],\n )\n\n const onOpenChange = React.useCallback(\n (isOpen: boolean) => {\n setOpen(isOpen)\n if (!isOpen && isEditing) {\n meta?.onCellEditingStop?.()\n }\n },\n [isEditing, meta],\n )\n\n const onWrapperKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isEditing) {\n if (event.key === 'Escape') {\n event.preventDefault()\n setValue(parseToLocalDate(initialValue))\n setOpen(false)\n } else if (event.key === 'Tab') {\n event.preventDefault()\n setOpen(false)\n meta?.onCellEditingStop?.({\n direction: event.shiftKey ? 'left' : 'right',\n })\n }\n }\n },\n [isEditing, initialValue, meta],\n )\n\n React.useEffect(() => {\n setOpen(isEditing)\n }, [isEditing])\n\n React.useEffect(() => {\n if (isFocused && !isEditing && !meta?.searchOpen && !meta?.isScrolling && containerRef.current) {\n containerRef.current.focus()\n }\n }, [isFocused, isEditing, meta?.searchOpen, meta?.isScrolling])\n\n return (\n <DataGridCellWrapper\n ref={containerRef}\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n onKeyDown={onWrapperKeyDown}\n >\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverAnchor asChild>\n <span\n data-slot=\"grid-cell-content\"\n className={cn('tabular-nums', (cell.column.columnDef.meta as any)?.align ?? 'text-right')}\n >\n {value?.toLocaleDateString() ?? ''}\n </span>\n </PopoverAnchor>\n {isEditing && (\n <PopoverContent data-grid-cell-editor=\"\" align=\"start\" sideOffset={10} className=\"w-auto p-0\">\n <Calendar\n showYearNavigation={true}\n autoFocus\n captionLayout=\"dropdown\"\n mode=\"single\"\n className=\"rounded-md border border-border shadow-sm\"\n defaultMonth={value}\n selected={value}\n onSelect={onDateSelect}\n />\n </PopoverContent>\n )}\n </Popover>\n </DataGridCellWrapper>\n )\n}\n","import type { Cell, Table } from '@tanstack/react-table'\n\nimport * as React from 'react'\n\nimport { cn } from '../../lib/utils'\nimport { DataGridCellWrapper } from '../data-grid-cell-wrapper'\n\nexport type GanttCellProps<TData> = {\n cell: Cell<TData, { start: Date; end: Date; barClassName?: string } | null>\n table: Table<TData>\n rowIndex: number\n columnId: string\n isEditing: boolean\n isFocused: boolean\n isSelected: boolean\n}\n\nexport function GanttCell<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isFocused,\n isEditing,\n isSelected,\n}: Readonly<GanttCellProps<TData>>) {\n const initialValue = cell.getValue() as { start: Date; end: Date; barClassName?: string } | null\n const containerRef = React.useRef<HTMLDivElement>(null)\n const cellOpts = (cell.column.columnDef.meta as any)?.cell\n\n const ts = cellOpts?.dateRangeFrom ?? cellOpts?.timelineStart\n const te = cellOpts?.dateRangeTo ?? cellOpts?.timelineEnd\n\n const timelineStartMs = ts instanceof Date ? ts.getTime() : undefined\n const timelineEndMs = te instanceof Date ? te.getTime() : undefined\n\n if (!timelineStartMs || !timelineEndMs) {\n return null\n }\n\n const timelineDurationMs = timelineEndMs - timelineStartMs\n const hasValidDates = initialValue && initialValue.start instanceof Date && initialValue.end instanceof Date\n\n const msUntilStart = hasValidDates ? initialValue.start.getTime() - timelineStartMs : 0\n // end - start time considering timeline bounds\n const barWidthMs = hasValidDates\n ? Math.min(initialValue.end.getTime(), timelineEndMs) - Math.max(initialValue.start.getTime(), timelineStartMs)\n : 0\n\n return (\n <DataGridCellWrapper\n ref={containerRef}\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n className=\"px-1\"\n >\n <div className=\"size-full flex overflow-hidden\">\n {hasValidDates && (\n <>\n <div\n className=\"shrink-0\"\n style={{\n width: `${Math.max(0, (msUntilStart / timelineDurationMs) * 100)}%`,\n }}\n />\n <div\n className={cn('shrink-0 h-full rounded-sm bg-primary', initialValue.barClassName)}\n style={{\n width: `${(barWidthMs / timelineDurationMs) * 100}%`,\n }}\n />\n </>\n )}\n </div>\n </DataGridCellWrapper>\n )\n}\n","import { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst textareaVariants = cva(\n 'border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n simple: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\ntype TextareaProps = React.ComponentProps<'textarea'> &\n VariantProps<typeof textareaVariants> & {\n /**\n * E2E test_id to identify the input.\n */\n __e2e_test_id__?: string\n }\n\nfunction Textarea({ className, variant, __e2e_test_id__, ...props }: TextareaProps) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ variant, className }))}\n {...props}\n data-test-id={__e2e_test_id__}\n />\n )\n}\n\nexport { Textarea }\n","import * as React from 'react'\n\nimport { Popover, PopoverAnchor, PopoverContent } from '../../popover/popover'\nimport { Textarea } from '../../textarea/textarea'\nimport { DataGridCellWrapper } from '../data-grid-cell-wrapper'\nimport { useDebouncedCallback } from '../hooks/use-debounced-callback'\n\nimport { CellVariantProps } from './cell-variant-types'\n\nexport function LongTextCell<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isFocused,\n isEditing,\n isSelected,\n}: Readonly<CellVariantProps<TData, string>>) {\n const initialValue = cell.getValue()\n const [value, setValue] = React.useState(initialValue ?? '')\n const [open, setOpen] = React.useState(false)\n const textareaRef = React.useRef<HTMLTextAreaElement>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const meta = table.options.meta\n const sideOffset = -(containerRef.current?.clientHeight ?? 0)\n\n const prevInitialValueRef = React.useRef(initialValue)\n if (initialValue !== prevInitialValueRef.current) {\n prevInitialValueRef.current = initialValue\n setValue(initialValue ?? '')\n }\n\n // Debounced auto-save (300ms delay)\n const debouncedSave = useDebouncedCallback((newValue: string) => {\n meta?.onDataUpdate?.({ rowIndex, columnId, value: newValue })\n }, 300)\n\n const onSave = React.useCallback(() => {\n // Immediately save any pending changes and close the popover\n if (value !== initialValue) {\n meta?.onDataUpdate?.({ rowIndex, columnId, value })\n }\n setOpen(false)\n meta?.onCellEditingStop?.()\n }, [meta, value, initialValue, rowIndex, columnId])\n\n const onCancel = React.useCallback(() => {\n // Restore the original value\n setValue(initialValue ?? '')\n meta?.onDataUpdate?.({ rowIndex, columnId, value: initialValue })\n setOpen(false)\n meta?.onCellEditingStop?.()\n }, [meta, initialValue, rowIndex, columnId])\n\n const onChange = React.useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = event.target.value\n setValue(newValue)\n // Debounced auto-save\n debouncedSave(newValue)\n },\n [debouncedSave],\n )\n\n const onOpenChange = React.useCallback(\n (isOpen: boolean) => {\n setOpen(isOpen)\n if (!isOpen) {\n // Immediately save any pending changes when closing\n if (value !== initialValue) {\n meta?.onDataUpdate?.({ rowIndex, columnId, value })\n }\n meta?.onCellEditingStop?.()\n }\n },\n [meta, value, initialValue, rowIndex, columnId],\n )\n\n const onOpenAutoFocus: NonNullable<React.ComponentProps<typeof PopoverContent>['onOpenAutoFocus']> =\n React.useCallback((event) => {\n event.preventDefault()\n if (textareaRef.current) {\n textareaRef.current.focus()\n const length = textareaRef.current.value.length\n textareaRef.current.setSelectionRange(length, length)\n }\n }, [])\n\n const onWrapperKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isEditing && !open) {\n if (event.key === 'Escape') {\n event.preventDefault()\n meta?.onCellEditingStop?.()\n } else if (event.key === 'Tab') {\n event.preventDefault()\n // Save any pending changes\n if (value !== initialValue) {\n meta?.onDataUpdate?.({ rowIndex, columnId, value })\n }\n meta?.onCellEditingStop?.({\n direction: event.shiftKey ? 'left' : 'right',\n })\n }\n }\n },\n [isEditing, open, meta, value, initialValue, rowIndex, columnId],\n )\n\n const onTextareaKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n onCancel()\n } else if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault()\n onSave()\n }\n // Stop propagation to prevent grid navigation\n event.stopPropagation()\n },\n [onCancel, onSave],\n )\n\n const onTextareaBlur = React.useCallback(() => {\n // Immediately save any pending changes on blur\n if (value !== initialValue) {\n meta?.onDataUpdate?.({ rowIndex, columnId, value })\n }\n setOpen(false)\n meta?.onCellEditingStop?.()\n }, [meta, value, initialValue, rowIndex, columnId])\n\n React.useEffect(() => {\n if (isEditing && !open) {\n setOpen(true)\n }\n if (isFocused && !isEditing && !meta?.searchOpen && !meta?.isScrolling && containerRef.current) {\n containerRef.current.focus()\n }\n }, [isFocused, isEditing, open, meta?.searchOpen, meta?.isScrolling])\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverAnchor asChild>\n <DataGridCellWrapper\n ref={containerRef}\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n onKeyDown={onWrapperKeyDown}\n >\n <span data-slot=\"grid-cell-content\">{value}</span>\n </DataGridCellWrapper>\n </PopoverAnchor>\n <PopoverContent\n data-grid-cell-editor=\"\"\n align=\"start\"\n side=\"bottom\"\n sideOffset={sideOffset}\n className=\"w-[400px] rounded-none p-0\"\n onOpenAutoFocus={onOpenAutoFocus}\n >\n <Textarea\n ref={textareaRef}\n value={value}\n onChange={onChange}\n onKeyDown={onTextareaKeyDown}\n onBlur={onTextareaBlur}\n className=\"min-h-[150px] resize-none rounded-none border-0 shadow-none focus-visible:ring-0\"\n placeholder=\"Enter text...\"\n />\n </PopoverContent>\n </Popover>\n )\n}\n","import { CheckIcon, Cross2Icon } from '@radix-ui/react-icons'\n\nimport * as React from 'react'\n\nimport { Badge } from '../../badge/badge'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from '../../command/command'\nimport { cn } from '../../lib/utils'\nimport { Popover, PopoverAnchor, PopoverContent } from '../../popover/popover'\nimport { DataGridCellWrapper } from '../data-grid-cell-wrapper'\nimport { getLineCount } from '../data-grid-utils'\n\nimport { CellVariantProps } from './cell-variant-types'\n\nexport function MultiSelectCell<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isFocused,\n isEditing,\n isSelected,\n}: Readonly<CellVariantProps<TData, string[]>>) {\n const cellValue = React.useMemo(() => cell.getValue() ?? [], [cell])\n\n const cellId = `${rowIndex}-${columnId}`\n const prevCellIdRef = React.useRef(cellId)\n\n const [selectedValues, setSelectedValues] = React.useState<string[]>(cellValue)\n const [open, setOpen] = React.useState(false)\n const [searchValue, setSearchValue] = React.useState('')\n const containerRef = React.useRef<HTMLDivElement>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n const meta = table.options.meta\n const cellOpts = cell.column.columnDef.meta?.cell\n const options = cellOpts?.variant === 'multi-select' ? cellOpts.options : []\n const sideOffset = -(containerRef.current?.clientHeight ?? 0)\n\n if (prevCellIdRef.current !== cellId) {\n prevCellIdRef.current = cellId\n setSelectedValues(cellValue)\n setOpen(false)\n setSearchValue('')\n }\n\n const onValueChange = React.useCallback(\n (value: string) => {\n const newValues = selectedValues.includes(value)\n ? selectedValues.filter((v) => v !== value)\n : [...selectedValues, value]\n\n setSelectedValues(newValues)\n meta?.onDataUpdate?.({ rowIndex, columnId, value: newValues })\n // Clear search input and focus back on input after selection\n setSearchValue('')\n queueMicrotask(() => inputRef.current?.focus())\n },\n [selectedValues, meta, rowIndex, columnId],\n )\n\n const removeValue = React.useCallback(\n (valueToRemove: string, event?: React.MouseEvent) => {\n event?.stopPropagation()\n event?.preventDefault()\n const newValues = selectedValues.filter((v) => v !== valueToRemove)\n setSelectedValues(newValues)\n meta?.onDataUpdate?.({ rowIndex, columnId, value: newValues })\n // Focus back on input after removing\n setTimeout(() => inputRef.current?.focus(), 0)\n },\n [selectedValues, meta, rowIndex, columnId],\n )\n\n const clearAll = React.useCallback(() => {\n setSelectedValues([])\n meta?.onDataUpdate?.({ rowIndex, columnId, value: [] })\n queueMicrotask(() => inputRef.current?.focus())\n }, [meta, rowIndex, columnId])\n\n const onOpenChange = React.useCallback(\n (isOpen: boolean) => {\n setOpen(isOpen)\n if (!isOpen) {\n setSearchValue('')\n meta?.onCellEditingStop?.()\n }\n },\n [meta],\n )\n\n const onOpenAutoFocus: NonNullable<React.ComponentProps<typeof PopoverContent>['onOpenAutoFocus']> =\n React.useCallback((event) => {\n event.preventDefault()\n inputRef.current?.focus()\n }, [])\n\n const onWrapperKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isEditing) {\n if (event.key === 'Escape') {\n event.preventDefault()\n setSelectedValues(cellValue)\n setSearchValue('')\n setOpen(false)\n meta?.onCellEditingStop?.()\n } else if (event.key === 'Tab') {\n event.preventDefault()\n setSearchValue('')\n setOpen(false)\n meta?.onCellEditingStop?.({\n direction: event.shiftKey ? 'left' : 'right',\n })\n }\n }\n },\n [isEditing, cellValue, meta],\n )\n\n const onInputKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n // Handle backspace when input is empty - remove last selected item\n if (event.key === 'Backspace' && searchValue === '' && selectedValues.length > 0) {\n event.preventDefault()\n const lastValue = selectedValues.at(-1)\n if (lastValue) {\n removeValue(lastValue)\n }\n }\n // Prevent escape from propagating to close the popover immediately\n // Let the command handle it first\n if (event.key === 'Escape') {\n event.stopPropagation()\n }\n },\n [searchValue, selectedValues, removeValue],\n )\n\n React.useEffect(() => {\n if (isEditing && !open) {\n setOpen(true)\n }\n if (isFocused && !isEditing && !meta?.searchOpen && !meta?.isScrolling && containerRef.current) {\n containerRef.current.focus()\n }\n }, [isFocused, isEditing, open, meta?.searchOpen, meta?.isScrolling])\n\n // Focus input when popover opens\n React.useEffect(() => {\n if (open && inputRef.current) {\n setTimeout(() => inputRef.current?.focus(), 0)\n }\n }, [open])\n\n const displayLabels = selectedValues\n .map((val) => options.find((opt) => opt.value === val)?.label ?? val)\n .filter(Boolean)\n\n const rowHeight = table.options.meta?.rowHeight ?? 'short'\n\n const lineCount = getLineCount(rowHeight)\n const maxVisibleBadgeCount = lineCount * 3\n\n const visibleLabels = displayLabels.slice(0, maxVisibleBadgeCount)\n const hiddenBadgeCount = Math.max(0, displayLabels.length - maxVisibleBadgeCount)\n\n return (\n <DataGridCellWrapper\n ref={containerRef}\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n onKeyDown={onWrapperKeyDown}\n >\n {isEditing ? (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverAnchor asChild>\n <div className=\"absolute inset-0\" />\n </PopoverAnchor>\n <PopoverContent\n data-grid-cell-editor=\"\"\n align=\"start\"\n sideOffset={sideOffset}\n className=\"w-[300px] rounded-none p-0\"\n onOpenAutoFocus={onOpenAutoFocus}\n >\n <Command className=\"[&_[data-slot=command-input-wrapper]]:h-auto [&_[data-slot=command-input-wrapper]]:border-none [&_[data-slot=command-input-wrapper]]:p-0 [&_[data-slot=command-input-wrapper]_svg]:hidden\">\n <div className=\"flex min-h-9 flex-wrap items-center gap-1 border-b px-3 py-1.5\">\n {selectedValues.map((value) => {\n const option = options.find((opt) => opt.value === value)\n const label = option?.label ?? value\n\n return (\n <Badge key={value} variant=\"secondary\" className=\"h-5 gap-1 px-1.5 text-xs\">\n {label}\n <button\n type=\"button\"\n onClick={(event) => removeValue(value, event)}\n onPointerDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n >\n <Cross2Icon className=\"size-3\" />\n </button>\n </Badge>\n )\n })}\n <CommandInput\n ref={inputRef}\n value={searchValue}\n onValueChange={setSearchValue}\n onKeyDown={onInputKeyDown}\n placeholder=\"Search...\"\n className=\"h-auto flex-1 p-0\"\n />\n </div>\n <CommandList className=\"max-h-full\">\n <CommandEmpty>No options found.</CommandEmpty>\n <CommandGroup className=\"max-h-[300px] scroll-py-1 overflow-y-auto overflow-x-hidden\">\n {options.map((option) => {\n const isSelected = selectedValues.includes(option.value)\n\n return (\n <CommandItem key={option.value} value={option.label} onSelect={() => onValueChange(option.value)}>\n <div\n className={cn(\n 'flex size-4 items-center justify-center rounded-sm border border-border',\n isSelected ? 'bg-accent-foreground text-secondary' : 'opacity-50 [&_svg]:invisible',\n )}\n >\n <CheckIcon className=\"size-3\" />\n </div>\n <span>{option.label}</span>\n </CommandItem>\n )\n })}\n </CommandGroup>\n {selectedValues.length > 0 && (\n <>\n <CommandSeparator />\n <CommandGroup>\n <CommandItem onSelect={clearAll} className=\"justify-center text-muted-foreground\">\n Clear all\n </CommandItem>\n </CommandGroup>\n </>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n ) : null}\n {displayLabels.length > 0 ? (\n <div className=\"flex flex-wrap items-center gap-1 overflow-hidden\">\n {visibleLabels.map((label, index) => (\n <Badge key={selectedValues[index]} variant=\"secondary\" className=\"h-5 shrink-0 px-1.5 text-xs\">\n {label}\n </Badge>\n ))}\n {hiddenBadgeCount > 0 && (\n <Badge variant=\"outline\" className=\"h-5 shrink-0 px-1.5 text-muted-foreground text-xs\">\n +{hiddenBadgeCount}\n </Badge>\n )}\n </div>\n ) : null}\n </DataGridCellWrapper>\n )\n}\n","import type { ColumnMeta } from '@tanstack/react-table'\n\nimport * as React from 'react'\n\nimport { cn } from '../../lib/utils'\nimport { DataGridCellWrapper } from '../data-grid-cell-wrapper'\n\nimport { CellVariantProps } from './cell-variant-types'\n\nexport function NumberCell<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isFocused,\n isEditing,\n isSelected,\n}: Readonly<CellVariantProps<TData, number>>) {\n const initialValue = cell.getValue() as number | null\n const inputRef = React.useRef<HTMLInputElement>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const meta = table.options.meta\n const colMeta = cell.column.columnDef.meta as ColumnMeta<TData, number>\n const cellOptions = colMeta?.cell\n // Normalize editable to a resolver function and memoize to avoid typeof checks per cell\n const editableResolver = React.useMemo(() => {\n const v = colMeta?.editable\n if (v === undefined) {\n return () => true\n }\n return typeof v === 'function' ? (v as (row: TData) => boolean) : () => Boolean(v)\n }, [colMeta?.editable])\n const isEditable = editableResolver(cell.row.original)\n const {\n min,\n max,\n step,\n prefix = '',\n suffix = '',\n fallbackValue = '',\n } = cellOptions?.variant === 'number' ? cellOptions : {}\n\n // Keep an unformatted string for editing (no grouping separators)\n const [editValue, setEditValue] = React.useState<string>(\n initialValue !== null && initialValue !== undefined ? String(initialValue) : '',\n )\n\n const onBlur = React.useCallback(() => {\n const numValue = editValue === '' ? null : Number(editValue)\n if (numValue !== initialValue) {\n meta?.onDataUpdate?.({ rowIndex, columnId, value: numValue })\n }\n meta?.onCellEditingStop?.()\n }, [meta, rowIndex, columnId, initialValue, editValue])\n\n const onChange = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setEditValue(event.target.value)\n }, [])\n const parseNumValue = React.useCallback((): number | null => {\n return editValue === '' ? null : Number(editValue)\n }, [editValue])\n\n const saveAndStop = React.useCallback(\n (options?: { moveToNextRow?: boolean; direction?: 'left' | 'right' }) => {\n const numValue = parseNumValue()\n if (numValue !== initialValue) {\n meta?.onDataUpdate?.({ rowIndex, columnId, value: numValue })\n }\n meta?.onCellEditingStop?.(options)\n },\n [parseNumValue, initialValue, meta, rowIndex, columnId],\n )\n\n const handleEditingKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n saveAndStop({ moveToNextRow: true })\n } else if (event.key === 'Tab') {\n event.preventDefault()\n saveAndStop({ direction: event.shiftKey ? 'left' : 'right' })\n } else if (event.key === 'Escape') {\n event.preventDefault()\n setEditValue(initialValue !== null && initialValue !== undefined ? String(initialValue) : '')\n inputRef.current?.blur()\n }\n },\n [saveAndStop, initialValue],\n )\n\n const handleFocusedKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!isEditable) {\n return\n }\n\n if (event.key === 'Backspace') {\n setEditValue('')\n } else if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) {\n setEditValue(event.key)\n }\n },\n [isEditable],\n )\n const onWrapperKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isEditing) {\n handleEditingKeyDown(event)\n } else if (isFocused) {\n handleFocusedKeyDown(event)\n }\n },\n [isEditing, isFocused, handleEditingKeyDown, handleFocusedKeyDown],\n )\n\n React.useEffect(() => {\n setEditValue(initialValue !== null && initialValue !== undefined ? String(initialValue) : '')\n }, [initialValue])\n\n React.useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus()\n inputRef.current.select()\n }\n if (isFocused && !isEditing && !meta?.searchOpen && !meta?.isScrolling && containerRef.current) {\n containerRef.current.focus()\n }\n }, [isFocused, isEditing, meta?.searchOpen, meta?.isScrolling])\n\n return (\n <DataGridCellWrapper\n ref={containerRef}\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n onKeyDown={onWrapperKeyDown}\n >\n {isEditing ? (\n <input\n ref={inputRef}\n type=\"number\"\n value={editValue}\n min={min}\n max={max}\n step={step}\n onBlur={onBlur}\n onChange={onChange}\n className=\"w-full border-none bg-transparent p-0 outline-none\"\n />\n ) : (\n <span data-slot=\"grid-cell-content\" className={cn('tabular-nums', colMeta?.align ?? 'text-right')}>\n {initialValue === null || initialValue === undefined || editValue === '' ? (\n fallbackValue\n ) : (\n <>\n {prefix}\n {initialValue.toLocaleString()}\n {suffix}\n </>\n )}\n </span>\n )}\n </DataGridCellWrapper>\n )\n}\n","import * as React from 'react'\n\nimport { DataGridCellWrapper } from '../data-grid-cell-wrapper'\n\nimport { CellVariantProps } from './cell-variant-types'\n\nexport function ReactNodeCell<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isFocused,\n isSelected,\n}: Readonly<CellVariantProps<TData, React.ReactNode>>) {\n const children = cell.getValue()\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DataGridCellWrapper\n ref={containerRef}\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={false}\n isFocused={isFocused}\n isSelected={isSelected}\n className=\"flex size-full justify-center p-0\"\n >\n {children ?? null}\n </DataGridCellWrapper>\n )\n}\n","import { CheckIcon } from '@radix-ui/react-icons'\n\nimport * as React from 'react'\n\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '../../command/command'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../popover/popover'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../select/select'\nimport { DataGridCellWrapper } from '../data-grid-cell-wrapper'\n\nimport { CellVariantProps } from './cell-variant-types'\n\nexport function SelectCell<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isFocused,\n isEditing,\n isSelected,\n}: Readonly<CellVariantProps<TData, string>>) {\n const initialValue = cell.getValue()\n const [value, setValue] = React.useState(initialValue)\n const [open, setOpen] = React.useState(false)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n const meta = table.options.meta\n const cellOpts = cell.column.columnDef.meta?.cell\n const options = cellOpts?.variant === 'select' ? cellOpts.options : []\n const hasSearch = (cellOpts?.variant === 'select' && cellOpts?.hasSearch) ?? false\n const sideOffset = -(inputRef.current?.clientHeight ?? 0)\n\n const onValueChange = React.useCallback(\n (newValue: string) => {\n setValue(newValue)\n meta?.onDataUpdate?.({ rowIndex, columnId, value: newValue })\n meta?.onCellEditingStop?.()\n },\n [meta, rowIndex, columnId],\n )\n\n const onOpenChange = React.useCallback(\n (isOpen: boolean) => {\n setOpen(isOpen)\n if (!isOpen) {\n meta?.onCellEditingStop?.()\n }\n },\n [meta],\n )\n\n const onOpenAutoFocus: NonNullable<React.ComponentProps<typeof PopoverContent>['onOpenAutoFocus']> =\n React.useCallback((event) => {\n event.preventDefault()\n inputRef.current?.focus()\n }, [])\n\n const onWrapperKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isEditing) {\n if (event.key === 'Escape') {\n event.preventDefault()\n setValue(initialValue)\n setOpen(false)\n meta?.onCellEditingStop?.()\n } else if (event.key === 'Tab') {\n event.preventDefault()\n setOpen(false)\n meta?.onCellEditingStop?.({\n direction: event.shiftKey ? 'left' : 'right',\n })\n }\n }\n },\n [isEditing, initialValue, meta],\n )\n\n React.useEffect(() => {\n setValue(initialValue)\n }, [initialValue])\n\n React.useEffect(() => {\n if (isEditing && !open) {\n setOpen(true)\n }\n if (isFocused && !isEditing && !meta?.searchOpen && !meta?.isScrolling && containerRef.current) {\n containerRef.current.focus()\n }\n }, [isFocused, isEditing, open, meta?.searchOpen, meta?.isScrolling])\n\n const displayLabel = options.find((opt) => opt.value === value)?.label ?? value\n let editingContent: React.ReactNode\n\n if (hasSearch) {\n editingContent = (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <div className=\"size-full items-start text-start border-none p-0 shadow-none focus-visible:ring-0 dark:bg-transparent [&_svg]:hidden line-clamp-1\">\n {displayLabel}\n </div>\n </PopoverTrigger>\n <PopoverContent\n data-grid-cell-editor=\"\"\n align=\"start\"\n sideOffset={sideOffset}\n className=\"max-w-[500px] w-full rounded-none p-0\"\n onOpenAutoFocus={onOpenAutoFocus}\n >\n <Command>\n <CommandList>\n <CommandInput ref={inputRef} placeholder=\"Search...\" className=\"h-auto flex-1 p-0\" />\n <CommandEmpty>No results found.</CommandEmpty>\n <CommandGroup>\n {options.map((option) => (\n <CommandItem\n key={option.value}\n onSelect={() => {\n onValueChange(option.value)\n }}\n >\n <span>{option.label}</span>\n {value === option.value ? <CheckIcon className=\"ml-auto h-4 w-4\" /> : null}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n } else {\n editingContent = (\n <Select value={value} onValueChange={onValueChange} open={open} onOpenChange={onOpenChange}>\n <SelectTrigger className=\"size-full items-start text-start border-none p-0 shadow-none focus-visible:ring-0 dark:bg-transparent [&_svg]:hidden\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent\n data-grid-cell-editor=\"\"\n // compensate for the wrapper padding\n align=\"start\"\n alignOffset={-8}\n sideOffset={-2}\n className=\"min-w-[calc(var(--radix-select-trigger-width)+16px)]\"\n >\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value} spacing=\"sm\">\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n return (\n <DataGridCellWrapper\n ref={containerRef}\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n onKeyDown={onWrapperKeyDown}\n >\n {isEditing ? editingContent : <span data-slot=\"grid-cell-content\">{displayLabel}</span>}\n </DataGridCellWrapper>\n )\n}\n","import * as React from 'react'\n\nimport { DataGridCellWrapper } from '../data-grid-cell-wrapper'\n\nimport { CellVariantProps } from './cell-variant-types'\n\nexport function ShortTextCell<TData>({\n cell,\n table,\n rowIndex,\n columnId,\n isEditing,\n isFocused,\n isSelected,\n}: Readonly<CellVariantProps<TData, string>>) {\n const initialValue = cell.getValue()\n const [value, setValue] = React.useState(initialValue)\n const inputRef = React.useRef<HTMLInputElement>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const meta = table.options.meta\n const colMeta = cell.column.columnDef.meta\n // Normalize editable to a resolver function and memoize to avoid typeof checks per cell\n const editableResolver = React.useMemo(() => {\n const v = colMeta?.editable\n if (v === undefined) {\n return () => true\n }\n return typeof v === 'function' ? (v as (row: TData) => boolean) : () => Boolean(v)\n }, [colMeta?.editable])\n const isEditable = editableResolver(cell.row.original)\n\n const onBlur = React.useCallback(() => {\n const currentValue = inputRef.current?.value ?? ''\n if (currentValue !== initialValue) {\n meta?.onDataUpdate?.({ rowIndex, columnId, value: currentValue })\n }\n meta?.onCellEditingStop?.()\n }, [meta, rowIndex, columnId, initialValue])\n const onChange = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setValue(event.target.value)\n }, [])\n const handleEditingKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n const currentValue = inputRef.current?.value ?? ''\n if (currentValue !== initialValue) {\n meta?.onDataUpdate?.({ rowIndex, columnId, value: currentValue })\n }\n meta?.onCellEditingStop?.({ moveToNextRow: true })\n } else if (event.key === 'Tab') {\n event.preventDefault()\n const currentValue = inputRef.current?.value ?? ''\n if (currentValue !== initialValue) {\n meta?.onDataUpdate?.({ rowIndex, columnId, value: currentValue })\n }\n meta?.onCellEditingStop?.({\n direction: event.shiftKey ? 'left' : 'right',\n })\n } else if (event.key === 'Escape') {\n event.preventDefault()\n setValue(initialValue)\n inputRef.current?.blur()\n }\n },\n [initialValue, meta, rowIndex, columnId],\n )\n\n const handleFocusedKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) {\n // For non-editable columns we must not change the displayed value when the user types while focused.\n if (!isEditable) {\n return\n }\n\n // Handle typing to pre-fill the value when editing starts\n setValue(event.key)\n }\n },\n [isEditable],\n )\n\n const onWrapperKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isEditing) {\n handleEditingKeyDown(event)\n } else if (isFocused) {\n handleFocusedKeyDown(event)\n }\n },\n [isEditing, isFocused, handleEditingKeyDown, handleFocusedKeyDown],\n )\n\n React.useEffect(() => {\n setValue(initialValue)\n }, [initialValue])\n\n React.useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus()\n inputRef.current.setSelectionRange(inputRef.current.value.length, inputRef.current.value.length)\n }\n // Don't focus if we're in the middle of a scroll operation\n if (isFocused && !isEditing && !meta?.searchOpen && !meta?.isScrolling && containerRef.current) {\n containerRef.current.focus()\n }\n }, [isFocused, isEditing, meta?.searchOpen, meta?.isScrolling])\n\n return (\n <DataGridCellWrapper\n ref={containerRef}\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n onKeyDown={onWrapperKeyDown}\n >\n {isEditing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={value ?? ''}\n onBlur={onBlur}\n onChange={onChange}\n className=\"size-full bg-transparent outline-none\"\n />\n ) : (\n <div data-slot=\"grid-cell-content\" className=\"size-full overflow-hidden outline-none\">\n {value}\n </div>\n )}\n </DataGridCellWrapper>\n )\n}\n","import type { Cell, Table } from '@tanstack/react-table'\n\nimport { CheckboxCell } from './cell-variants/checkbox-cell'\nimport { DateCell } from './cell-variants/date-cell'\nimport { GanttCell } from './cell-variants/gantt-cell'\nimport { LongTextCell } from './cell-variants/long-text-cell'\nimport { MultiSelectCell } from './cell-variants/multi-select-cell'\nimport { NumberCell } from './cell-variants/number-cell'\nimport { ReactNodeCell } from './cell-variants/react-node-cell'\nimport { SelectCell } from './cell-variants/select-cell'\nimport { ShortTextCell } from './cell-variants/short-text-cell'\n\ntype DataGridCellProps<TData> = {\n cell: Cell<TData, unknown>\n table: Table<TData>\n}\n\nexport function DataGridCell<TData>({ cell, table }: DataGridCellProps<TData>) {\n const meta = table.options.meta\n const originalRowIndex = cell.row.index\n\n const rows = table.getRowModel().rows\n const displayRowIndex = rows.findIndex((row) => row.original === cell.row.original)\n const rowIndex = displayRowIndex >= 0 ? displayRowIndex : originalRowIndex\n const columnId = cell.column.id\n\n const isFocused = meta?.focusedCell?.rowIndex === rowIndex && meta?.focusedCell?.columnId === columnId\n const isEditing = meta?.editingCell?.rowIndex === rowIndex && meta?.editingCell?.columnId === columnId\n const isSelected = meta?.getIsCellSelected?.(rowIndex, columnId) ?? false\n\n const cellOpts = cell.column.columnDef.meta?.cell\n const variant = cellOpts?.variant ?? 'text'\n\n switch (variant) {\n case 'short-text':\n return (\n <ShortTextCell\n cell={cell as Cell<TData, string>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n case 'long-text':\n return (\n <LongTextCell\n cell={cell as Cell<TData, string>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n case 'number':\n return (\n <NumberCell\n cell={cell as Cell<TData, number>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n case 'select':\n return (\n <SelectCell\n cell={cell as Cell<TData, string>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n case 'multi-select':\n return (\n <MultiSelectCell\n cell={cell as Cell<TData, string[]>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n case 'checkbox':\n return (\n <CheckboxCell\n cell={cell as Cell<TData, boolean>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n case 'date':\n return (\n <DateCell\n cell={cell as Cell<TData, string>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n case 'react-node':\n return (\n <ReactNodeCell\n cell={cell as Cell<TData, React.ReactNode>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n case 'gantt':\n return (\n <GanttCell\n cell={cell as Cell<TData, { start: Date; end: Date } | null>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n\n default:\n return (\n <ShortTextCell\n cell={cell as Cell<TData, string>}\n table={table}\n rowIndex={rowIndex}\n columnId={columnId}\n isEditing={isEditing}\n isFocused={isFocused}\n isSelected={isSelected}\n />\n )\n }\n}\n","import { CheckIcon, DragHandleHorizontalIcon, MixerHorizontalIcon } from '@radix-ui/react-icons'\nimport type { Table } from '@tanstack/react-table'\n\nimport * as React from 'react'\n\nimport { Button } from '../button/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '../command/command'\nimport { cn } from '../lib/utils'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover/popover'\n\ntype DataGridViewMenuProps<TData> = {\n table: Table<TData>\n} & React.ComponentProps<typeof PopoverContent>\n\nexport function DataGridViewMenu<TData>({ table, ...props }: DataGridViewMenuProps<TData>) {\n // Columns that are shown in the view menu. We include any column with an accessor\n // so users can see the full column list, even when a column cannot be hidden.\n const viewableColumns = React.useMemo(\n () => table.getAllColumns().filter((column) => typeof column.accessorFn !== 'undefined'),\n [table],\n )\n\n // Local order state for displaying items in the menu\n const [order, setOrder] = React.useState<string[]>(() => {\n const stateOrder = table.getState().columnOrder ?? []\n if (stateOrder && stateOrder.length > 0) {\n return stateOrder\n }\n return table.getAllColumns().map((c) => c.id)\n })\n\n // Search state for the CommandInput — used to conditionally show the empty state\n const [searchQuery, setSearchQuery] = React.useState<string>('')\n\n // Drag state\n const [isDragging, setIsDragging] = React.useState(false)\n const [insertionIndex, setInsertionIndex] = React.useState<number | null>(null)\n\n // Keep order in sync with external changes to table state\n React.useEffect(() => {\n const stateOrder = table.getState().columnOrder ?? []\n if (stateOrder && stateOrder.length > 0) {\n setOrder(stateOrder)\n return\n }\n setOrder(table.getAllColumns().map((c) => c.id))\n }, [table])\n\n const visibleSet = React.useMemo(() => new Set(viewableColumns.map((c) => c.id)), [viewableColumns])\n\n // Derive the ordered columns we will show in the menu (filter to hideable ones)\n const orderedColumns = React.useMemo(() => {\n const ordered: ReturnType<typeof table.getAllColumns>[0][] = []\n for (const id of order) {\n const col = viewableColumns.find((c) => c.id === id)\n if (col) {\n ordered.push(col)\n }\n }\n // Add any missing viewable columns at the end\n for (const col of viewableColumns) {\n if (!ordered.find((c) => c.id === col.id)) {\n ordered.push(col)\n }\n }\n return ordered\n }, [order, viewableColumns, table])\n\n const draggingRef = React.useRef<string | null>(null)\n const groupRef = React.useRef<HTMLDivElement | null>(null)\n\n const getBaseOrder = React.useCallback((): string[] => {\n return (\n table.getState().columnOrder && table.getState().columnOrder.length\n ? table.getState().columnOrder.slice()\n : table.getAllColumns().map((c) => c.id)\n ) as string[]\n }, [table])\n\n const computeInsertionIndex = React.useCallback(\n (clientY: number) => {\n const baseOrder = getBaseOrder()\n\n const el = groupRef.current\n if (!el) {\n return baseOrder.length\n }\n\n const nodes = Array.from(el.querySelectorAll('[data-col-id]')) as HTMLElement[]\n for (const node of nodes) {\n const rect = node.getBoundingClientRect()\n const mid = rect.top + rect.height / 2\n if (clientY < mid) {\n const id = node.dataset.colId as string\n const pos = baseOrder.indexOf(id)\n const newIndex = pos === -1 ? baseOrder.length : pos\n return newIndex\n }\n }\n return baseOrder.length\n },\n [getBaseOrder],\n )\n\n // moveItemInArray was removed; we compute insertion index directly on pointer drag\n\n function onDragEnd() {\n draggingRef.current = null\n setIsDragging(false)\n setInsertionIndex(null)\n }\n\n const doDrop = React.useCallback(\n (dragId: string, toIndex: number) => {\n // Build a base order that includes all columns (so hidden columns are preserved)\n const baseOrder = (\n table.getState().columnOrder && table.getState().columnOrder.length\n ? table.getState().columnOrder.slice()\n : table.getAllColumns().map((c) => c.id)\n ) as string[]\n\n const fromIndex = baseOrder.indexOf(dragId)\n if (fromIndex === -1) {\n onDragEnd()\n return\n }\n\n const copy = baseOrder.slice()\n copy.splice(fromIndex, 1)\n\n // If the dragged element came from before the target index,\n // removing it shifts indices left by 1, so adjust insertion index.\n let insertAt = toIndex\n if (fromIndex < toIndex) {\n insertAt = toIndex - 1\n }\n insertAt = Math.min(Math.max(0, insertAt), copy.length)\n copy.splice(insertAt, 0, dragId)\n\n table.setColumnOrder(copy)\n\n // Update our local order view (only for hideable columns)\n setOrder(copy.filter((id) => visibleSet.has(id)))\n onDragEnd()\n },\n [table, visibleSet],\n )\n\n const startPointerDrag = React.useCallback(\n (e: React.PointerEvent, id: string) => {\n e.preventDefault()\n draggingRef.current = id\n setIsDragging(true)\n // initialize insertion index\n setInsertionIndex(computeInsertionIndex(e.clientY))\n\n const onMove = (ev: PointerEvent) => {\n const idx = computeInsertionIndex(ev.clientY)\n setInsertionIndex(idx)\n }\n\n const onUp = (ev: PointerEvent) => {\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onUp)\n const dragId = draggingRef.current\n const toIndex = computeInsertionIndex(ev.clientY)\n if (dragId) {\n doDrop(dragId, toIndex)\n }\n draggingRef.current = null\n setIsDragging(false)\n setInsertionIndex(null)\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n },\n [computeInsertionIndex, doDrop],\n )\n\n function insertionWouldBeNoOp(targetIndex: number | null) {\n if (targetIndex === null) {\n return false\n }\n const dragId = draggingRef.current\n if (!dragId) {\n return false\n }\n const base = getBaseOrder()\n const fromIndex = base.indexOf(dragId)\n if (fromIndex === -1) {\n return false\n }\n let insertAt = targetIndex\n if (fromIndex < targetIndex) {\n insertAt = targetIndex - 1\n }\n return insertAt === fromIndex\n }\n\n const dragFromHandle = React.useRef(false)\n\n function resetTableView() {\n const defaultOrder = table.getAllColumns().map((c) => c.id)\n\n try {\n table.reset()\n } finally {\n // Clear persisted localStorage keys for this path\n try {\n if (typeof window !== 'undefined') {\n const path = window.location.pathname || 'unknown'\n const prefix = `pxl.dataGrid:${path}:`\n const keys: string[] = []\n for (let i = 0; i < localStorage.length; i++) {\n const k = localStorage.key(i)\n if (k && k.startsWith(prefix)) {\n keys.push(k)\n }\n }\n for (const k of keys) {\n localStorage.removeItem(k)\n }\n // Also update the local menu order so the UI reflects the reset immediately\n try {\n setOrder(defaultOrder.filter((id) => visibleSet.has(id)))\n } catch (_) {\n // ignore\n }\n }\n } catch (_) {\n // ignore storage errors\n }\n }\n }\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n aria-label=\"Toggle columns\"\n role=\"combobox\"\n variant=\"outline\"\n size=\"sm\"\n className=\"ml-auto hidden h-8 font-normal lg:flex\"\n >\n <MixerHorizontalIcon className=\"text-muted-foreground\" />\n View\n </Button>\n </PopoverTrigger>\n <PopoverContent className={cn('w-56 p-0 m-4 mt-0', isDragging ? 'cursor-grabbing' : '')} {...props}>\n <Command>\n <CommandInput placeholder=\"Search columns...\" onValueChange={setSearchQuery} />\n <CommandList>\n {searchQuery.trim() ? <CommandEmpty>No columns found.</CommandEmpty> : null}\n <div ref={groupRef}>\n <CommandGroup className=\"p-1\">\n {/* Insertion indicator at top */}\n {isDragging && insertionIndex === 0 && !insertionWouldBeNoOp(0) ? (\n <div className=\"h-0.5 bg-accent w-full my-1 rounded\" />\n ) : null}\n {orderedColumns.map((column) => {\n const currentBase = (\n table.getState().columnOrder && table.getState().columnOrder.length\n ? table.getState().columnOrder.slice()\n : table.getAllColumns().map((c) => c.id)\n ) as string[]\n const pos = currentBase.indexOf(column.id)\n const isHideable = column.getCanHide()\n return (\n <React.Fragment key={column.id}>\n <CommandItem\n value={column.id}\n data-col-id={column.id}\n className={cn(\n 'flex items-center gap-2 px-2 py-1 rounded',\n !isDragging\n ? 'data-[selected=true]:bg-accent'\n : 'data-[selected=true]:bg-transparent cursor-grabbing',\n draggingRef.current === column.id && isDragging && 'bg-accent data-[selected=true]:bg-accent',\n )}\n onSelect={() => {\n if (dragFromHandle.current) {\n dragFromHandle.current = false\n return\n }\n if (!isHideable) {\n // Column cannot be hidden; do nothing when clicked.\n return\n }\n column.toggleVisibility(!column.getIsVisible())\n }}\n >\n <span\n onPointerDown={(e) => {\n if (searchQuery.trim() !== '') {\n return\n }\n\n dragFromHandle.current = true\n e.stopPropagation()\n e.preventDefault()\n startPointerDrag(e, column.id)\n }}\n className={cn(\n 'size-4 text-muted-foreground',\n searchQuery.trim() !== '' && 'opacity-10',\n searchQuery.trim() === '' && (isDragging ? 'cursor-grabbing' : 'cursor-grab'),\n )}\n >\n <DragHandleHorizontalIcon />\n </span>\n <span className=\"truncate\">{(column.columnDef.meta as any)?.label ?? column.id}</span>\n <CheckIcon\n className={cn(\n 'ml-auto size-4 shrink-0',\n // Visible columns show the check; non-hideable columns show a muted check\n isHideable\n ? column.getIsVisible()\n ? 'opacity-100'\n : 'opacity-0'\n : 'opacity-50 text-muted-foreground',\n )}\n />\n </CommandItem>\n\n {/* Insertion indicator after the item (between items) */}\n {isDragging && insertionIndex === pos + 1 && !insertionWouldBeNoOp(pos + 1) ? (\n <div className=\"h-0.5 bg-accent w-full my-1 rounded\" />\n ) : null}\n </React.Fragment>\n )\n })}\n </CommandGroup>\n </div>\n </CommandList>\n </Command>\n <div className=\"border-t px-3 py-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n // Reset table state: order, visibility, pinning and sizing\n resetTableView()\n }}\n >\n Reset view\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n","import {\n type ColumnDef,\n getCoreRowModel,\n getSortedRowModel,\n type RowSelectionState,\n type SortingState,\n type TableOptions,\n type Updater,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useVirtualizer, type Virtualizer } from '@tanstack/react-virtual'\n\nimport * as React from 'react'\n\nimport { DataGridCell } from '../data-grid-cell'\nimport type {\n CellPosition,\n ContextMenuState,\n NavigationDirection,\n RowHeightValue,\n SearchState,\n SelectionState,\n UpdateCell,\n} from '../data-grid-types'\nimport { getCellKey, getRowHeightValue, parseCellKey } from '../data-grid-utils'\n\nconst DEFAULT_ROW_HEIGHT = 'short'\nconst OVERSCAN = 3\nconst VIEWPORT_OFFSET = 1\nconst MIN_COLUMN_SIZE = 60\nconst MAX_COLUMN_SIZE = 800\nconst SEARCH_SHORTCUT_KEY = 'f'\nconst NON_NAVIGABLE_COLUMN_IDS = ['select', 'actions']\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nfunction useLazyRef<T>(fn: () => T): React.RefObject<T> {\n const ref = React.useRef<T | null>(null)\n if (ref.current === null) {\n ref.current = fn()\n }\n return ref as React.RefObject<T>\n}\n\nfunction useAsRef<T>(data: T) {\n const ref = React.useRef<T>(data)\n\n useIsomorphicLayoutEffect(() => {\n ref.current = data\n })\n\n return ref\n}\n\ntype DataGridState = {\n sorting: SortingState\n rowHeight: RowHeightValue\n rowSelection: RowSelectionState\n selectionState: SelectionState\n focusedCell: CellPosition | null\n editingCell: CellPosition | null\n contextMenu: ContextMenuState\n searchQuery: string\n searchMatches: CellPosition[]\n matchIndex: number\n searchOpen: boolean\n lastClickedRowIndex: number | null\n isScrolling: boolean\n}\n\ntype DataGridStore = {\n subscribe: (callback: () => void) => () => void\n getState: () => DataGridState\n setState: <K extends keyof DataGridState>(key: K, value: DataGridState[K]) => void\n notify: () => void\n batch: (fn: () => void) => void\n}\n\nfunction useStore<T>(store: DataGridStore, selector: (state: DataGridState) => T): T {\n const getSnapshot = React.useCallback(() => selector(store.getState()), [store, selector])\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot)\n}\n\ntype UseDataGridProps<TData> = {\n onDataChange?: (data: TData[]) => void\n onRowAdd?: (event?: React.MouseEvent<HTMLDivElement>) =>\n | Partial<CellPosition>\n | Promise<Partial<CellPosition>>\n | null\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n | void // void is needed here to allow functions without explicit return\n onRowsDelete?: (rows: TData[], rowIndices: number[]) => void | Promise<void>\n onCellFocus?: (args: { rowIndex: number; columnId: string }) => void\n rowHeight?: RowHeightValue\n overscan?: number\n autoFocus?: boolean | Partial<CellPosition>\n enableColumnSelection?: boolean\n enableSearch?: boolean\n} & Omit<TableOptions<TData>, 'pageCount' | 'getCoreRowModel'>\n\nfunction useDataGrid<TData>({\n columns,\n data,\n onDataChange,\n onRowAdd: onRowAddProp,\n onRowsDelete: onRowsDeleteProp,\n onCellFocus: onCellFocusProp,\n rowHeight: rowHeightProp = DEFAULT_ROW_HEIGHT,\n overscan = OVERSCAN,\n initialState,\n autoFocus = false,\n enableColumnSelection = false,\n enableSearch = false,\n ...dataGridProps\n}: UseDataGridProps<TData>) {\n const dataGridRef = React.useRef<HTMLDivElement>(null)\n const tableRef = React.useRef<ReturnType<typeof useReactTable<TData>>>(null)\n const rowVirtualizerRef = React.useRef<Virtualizer<HTMLDivElement, Element>>(null)\n const headerRef = React.useRef<HTMLDivElement>(null)\n const rowMapRef = React.useRef<Map<number, HTMLDivElement>>(new Map())\n const footerRef = React.useRef<HTMLDivElement>(null)\n\n const dataGridPropsRef = useAsRef(dataGridProps)\n const listenersRef = useLazyRef(() => new Set<() => void>())\n\n const stateRef = useLazyRef<DataGridState>(() => {\n return {\n sorting: initialState?.sorting ?? [],\n rowHeight: rowHeightProp,\n rowSelection: initialState?.rowSelection ?? {},\n selectionState: {\n selectedCells: new Set(),\n selectionRange: null,\n isSelecting: false,\n },\n focusedCell: null,\n editingCell: null,\n contextMenu: {\n open: false,\n x: 0,\n y: 0,\n },\n searchQuery: '',\n searchMatches: [],\n matchIndex: -1,\n searchOpen: false,\n lastClickedRowIndex: null,\n isScrolling: false,\n }\n })\n\n const store = React.useMemo<DataGridStore>(() => {\n let isBatching = false\n let pendingNotification = false\n\n return {\n subscribe: (callback) => {\n listenersRef.current.add(callback)\n return () => listenersRef.current.delete(callback)\n },\n getState: () => stateRef.current,\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) {\n return\n }\n stateRef.current[key] = value\n\n if (isBatching) {\n pendingNotification = true\n } else {\n if (!pendingNotification) {\n pendingNotification = true\n queueMicrotask(() => {\n pendingNotification = false\n store.notify()\n })\n }\n }\n },\n notify: () => {\n for (const listener of listenersRef.current) {\n listener()\n }\n },\n batch: (fn) => {\n if (isBatching) {\n fn()\n return\n }\n\n isBatching = true\n const wasPending = pendingNotification\n pendingNotification = false\n\n try {\n fn()\n } finally {\n isBatching = false\n if (pendingNotification || wasPending) {\n pendingNotification = false\n store.notify()\n }\n }\n },\n }\n }, [listenersRef, stateRef])\n\n React.useEffect(() => {\n store.setState('rowHeight', rowHeightProp)\n }, [rowHeightProp, store])\n\n const focusedCell = useStore(store, (state) => state.focusedCell)\n const editingCell = useStore(store, (state) => state.editingCell)\n const selectionState = useStore(store, (state) => state.selectionState)\n const searchQuery = useStore(store, (state) => state.searchQuery)\n const searchMatches = useStore(store, (state) => state.searchMatches)\n const matchIndex = useStore(store, (state) => state.matchIndex)\n const searchOpen = useStore(store, (state) => state.searchOpen)\n const sorting = useStore(store, (state) => state.sorting)\n const rowSelection = useStore(store, (state) => state.rowSelection)\n const contextMenu = useStore(store, (state) => state.contextMenu)\n const rowHeight = useStore(store, (state) => state.rowHeight)\n const isScrolling = useStore(store, (state) => state.isScrolling)\n\n const rowHeightValue = getRowHeightValue(rowHeight)\n\n const columnIds = React.useMemo(() => {\n return columns\n .map((c) => {\n if (c.id) {\n return c.id\n }\n if ('accessorKey' in c) {\n return c.accessorKey as string\n }\n return undefined\n })\n .filter((id): id is string => Boolean(id))\n }, [columns])\n\n // Build a storage key for this table. We use the current pathname plus the column ids so different tables/pages get separate storage slots\n const storageKey = React.useMemo(() => {\n if (typeof window === 'undefined') {\n return undefined\n }\n const path = window.location.pathname || 'unknown'\n const cols = columnIds.join('|')\n return `pxl.dataGrid:${path}:${cols}`\n }, [columnIds])\n\n // Try to load persisted table state (order/visibility/pinning) from localStorage and merge it into the initial state the table will be created with.\n const persistedState = React.useMemo(() => {\n if (!storageKey) {\n return undefined\n }\n try {\n const raw = localStorage.getItem(storageKey)\n if (!raw) {\n return undefined\n }\n const parsed = JSON.parse(raw)\n return parsed\n } catch (_) {\n return undefined\n }\n }, [storageKey])\n\n // Merge persisted state (if any) into the table initial state so stored column order / visibility / pinning get reapplied on load.\n const mergedInitialState = React.useMemo(() => {\n const base = { ...(initialState ?? {}) } as Record<string, unknown>\n\n if (persistedState) {\n try {\n if (persistedState.columnOrder) {\n base.columnOrder = persistedState.columnOrder\n }\n if (persistedState.columnVisibility) {\n base.columnVisibility = persistedState.columnVisibility\n }\n if (persistedState.columnPinning) {\n base.columnPinning = persistedState.columnPinning\n }\n } catch (_) {\n // ignore malformed persisted state\n }\n }\n\n return base as typeof initialState\n }, [initialState, persistedState])\n\n // Derive the current visible, ordered column ids from the table when available.\n // This respects `table.setColumnOrder(...)` and column visibility.\n const getNavigableColumnIds = React.useCallback(() => {\n const t = tableRef.current\n if (t) {\n return t\n .getVisibleLeafColumns()\n .map((c) => c.id)\n .filter((c) => !NON_NAVIGABLE_COLUMN_IDS.includes(c))\n }\n return columnIds.filter((c) => !NON_NAVIGABLE_COLUMN_IDS.includes(c))\n }, [columnIds])\n\n const onDataUpdate = React.useCallback(\n (updates: UpdateCell | UpdateCell[]) => {\n const updateArray = Array.isArray(updates) ? updates : [updates]\n\n if (updateArray.length === 0) {\n return\n }\n\n const currentTable = tableRef.current\n const rows = currentTable?.getRowModel().rows\n\n const rowUpdatesMap = new Map<number, Omit<UpdateCell, 'rowIndex'>[]>()\n\n for (const update of updateArray) {\n if (!rows || !currentTable) {\n const existingUpdates = rowUpdatesMap.get(update.rowIndex) ?? []\n existingUpdates.push({\n columnId: update.columnId,\n value: update.value,\n })\n rowUpdatesMap.set(update.rowIndex, existingUpdates)\n } else {\n const row = rows[update.rowIndex]\n if (!row) {\n continue\n }\n\n const originalData = row.original\n const originalRowIndex = data.indexOf(originalData)\n if (originalRowIndex === -1) {\n continue\n }\n\n const existingUpdates = rowUpdatesMap.get(originalRowIndex) ?? []\n existingUpdates.push({\n columnId: update.columnId,\n value: update.value,\n })\n rowUpdatesMap.set(originalRowIndex, existingUpdates)\n }\n }\n // Also notify any per-cell change handler if present on the table meta.\n const currentMeta = tableRef.current?.options.meta\n if (currentMeta?.onCellChange) {\n for (const u of updateArray) {\n try {\n currentMeta.onCellChange(u)\n } catch (_) {\n // Ignore handler errors here to avoid breaking the grid behavior\n }\n }\n }\n\n const newData = data.map((row, index) => {\n const updates = rowUpdatesMap.get(index)\n if (!updates) {\n return row\n }\n\n const updatedRow = { ...row } as Record<string, unknown>\n for (const { columnId, value } of updates) {\n updatedRow[columnId] = value\n }\n return updatedRow as TData\n })\n\n onDataChange?.(newData)\n },\n [data, onDataChange],\n )\n\n const getIsCellSelected = React.useCallback(\n (rowIndex: number, columnId: string) => {\n return selectionState.selectedCells.has(getCellKey(rowIndex, columnId))\n },\n [selectionState.selectedCells],\n )\n\n const clearSelection = React.useCallback(() => {\n store.batch(() => {\n store.setState('selectionState', {\n selectedCells: new Set(),\n selectionRange: null,\n isSelecting: false,\n })\n store.setState('rowSelection', {})\n })\n }, [store])\n\n const selectAll = React.useCallback(() => {\n const allCells = new Set<string>()\n const currentTable = tableRef.current\n const rows = currentTable?.getRowModel().rows ?? []\n const rowCount = rows.length ?? data.length\n\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n for (const columnId of columnIds) {\n allCells.add(getCellKey(rowIndex, columnId))\n }\n }\n\n const firstColumnId = columnIds[0]\n const lastColumnId = columnIds[columnIds.length - 1]\n\n store.setState('selectionState', {\n selectedCells: allCells,\n selectionRange:\n columnIds.length > 0 && rowCount > 0 && firstColumnId && lastColumnId\n ? {\n start: { rowIndex: 0, columnId: firstColumnId },\n end: { rowIndex: rowCount - 1, columnId: lastColumnId },\n }\n : null,\n isSelecting: false,\n })\n }, [columnIds, data.length, store])\n\n const selectColumn = React.useCallback(\n (columnId: string) => {\n const currentTable = tableRef.current\n const rows = currentTable?.getRowModel().rows ?? []\n const rowCount = rows.length ?? data.length\n\n if (rowCount === 0) {\n return\n }\n\n const selectedCells = new Set<string>()\n\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n selectedCells.add(getCellKey(rowIndex, columnId))\n }\n\n store.setState('selectionState', {\n selectedCells,\n selectionRange: {\n start: { rowIndex: 0, columnId },\n end: { rowIndex: rowCount - 1, columnId },\n },\n isSelecting: false,\n })\n },\n [data.length, store],\n )\n\n const selectRange = React.useCallback(\n (start: CellPosition, end: CellPosition, isSelecting = false) => {\n // Use the current visible/displayed column order so drag selection\n // follows the UI when users reorder columns.\n const visibleCols = getNavigableColumnIds()\n const startColIndex = visibleCols.indexOf(start.columnId)\n const endColIndex = visibleCols.indexOf(end.columnId)\n\n const minRow = Math.min(start.rowIndex, end.rowIndex)\n const maxRow = Math.max(start.rowIndex, end.rowIndex)\n const minCol = Math.min(startColIndex, endColIndex)\n const maxCol = Math.max(startColIndex, endColIndex)\n\n const selectedCells = new Set<string>()\n\n for (let rowIndex = minRow; rowIndex <= maxRow; rowIndex++) {\n for (let colIndex = minCol; colIndex <= maxCol; colIndex++) {\n const columnId = visibleCols[colIndex]\n if (columnId) {\n selectedCells.add(getCellKey(rowIndex, columnId))\n }\n }\n }\n\n store.setState('selectionState', {\n selectedCells,\n selectionRange: { start, end },\n isSelecting,\n })\n },\n [getNavigableColumnIds, store],\n )\n\n const focusCell = React.useCallback(\n (rowIndex: number, columnId: string) => {\n store.batch(() => {\n store.setState('focusedCell', { rowIndex, columnId })\n store.setState('editingCell', null)\n })\n\n // Notify parent component about cell focus change\n onCellFocusProp?.({ rowIndex, columnId })\n\n const currentState = store.getState()\n\n if (currentState.searchOpen) {\n return\n }\n\n if (dataGridRef.current && document.activeElement !== dataGridRef.current) {\n dataGridRef.current.focus()\n }\n },\n [store, onCellFocusProp],\n )\n\n const onRowsDelete = React.useCallback(\n async (rowIndices: number[]) => {\n if (!onRowsDeleteProp || rowIndices.length === 0) {\n return\n }\n\n const currentTable = tableRef.current\n const rows = currentTable?.getRowModel().rows\n\n if (!rows || rows.length === 0) {\n return\n }\n\n const currentState = store.getState()\n const currentFocusedColumn = currentState.focusedCell?.columnId ?? getNavigableColumnIds()[0]\n\n const minDeletedRowIndex = Math.min(...rowIndices)\n\n const rowsToDelete: TData[] = []\n for (const rowIndex of rowIndices) {\n const row = rows[rowIndex]\n if (row) {\n rowsToDelete.push(row.original)\n }\n }\n\n await onRowsDeleteProp(rowsToDelete, rowIndices)\n\n store.batch(() => {\n store.setState('selectionState', {\n selectedCells: new Set(),\n selectionRange: null,\n isSelecting: false,\n })\n store.setState('rowSelection', {})\n store.setState('editingCell', null)\n })\n\n requestAnimationFrame(() => {\n const currentTable = tableRef.current\n const currentRows = currentTable?.getRowModel().rows ?? []\n const newRowCount = currentRows.length ?? data.length\n\n if (newRowCount > 0 && currentFocusedColumn) {\n const targetRowIndex = Math.min(minDeletedRowIndex, newRowCount - 1)\n focusCell(targetRowIndex, currentFocusedColumn)\n }\n })\n },\n [onRowsDeleteProp, data.length, store, getNavigableColumnIds, focusCell],\n )\n\n const navigateCell = React.useCallback(\n (direction: NavigationDirection) => {\n const currentState = store.getState()\n if (!currentState.focusedCell) {\n return\n }\n\n const { rowIndex, columnId } = currentState.focusedCell\n const _navCols = getNavigableColumnIds()\n const currentColIndex = _navCols.indexOf(columnId)\n const rowVirtualizer = rowVirtualizerRef.current\n const currentTable = tableRef.current\n const rows = currentTable?.getRowModel().rows ?? []\n const rowCount = rows.length ?? data.length\n\n let newRowIndex = rowIndex\n let newColumnId = columnId\n\n switch (direction) {\n case 'up':\n newRowIndex = Math.max(0, rowIndex - 1)\n break\n case 'down':\n newRowIndex = Math.min(rowCount - 1, rowIndex + 1)\n break\n case 'left':\n if (currentColIndex > 0) {\n const prevColumnId = _navCols[currentColIndex - 1]\n if (prevColumnId) {\n newColumnId = prevColumnId\n }\n }\n break\n case 'right':\n if (currentColIndex < _navCols.length - 1) {\n const nextColumnId = _navCols[currentColIndex + 1]\n if (nextColumnId) {\n newColumnId = nextColumnId\n }\n }\n break\n case 'home': {\n const _navCols2 = getNavigableColumnIds()\n if (_navCols2.length > 0) {\n newColumnId = _navCols2[0] ?? columnId\n }\n break\n }\n case 'end': {\n const _navCols3 = getNavigableColumnIds()\n if (_navCols3.length > 0) {\n newColumnId = _navCols3[_navCols3.length - 1] ?? columnId\n }\n break\n }\n case 'ctrl+home': {\n newRowIndex = 0\n const _navCols4 = getNavigableColumnIds()\n if (_navCols4.length > 0) {\n newColumnId = _navCols4[0] ?? columnId\n }\n break\n }\n case 'ctrl+end': {\n newRowIndex = Math.max(0, rowCount - 1)\n const _navCols5 = getNavigableColumnIds()\n if (_navCols5.length > 0) {\n newColumnId = _navCols5[_navCols5.length - 1] ?? columnId\n }\n break\n }\n case 'pageup':\n if (rowVirtualizer) {\n const visibleRange = rowVirtualizer.getVirtualItems()\n const pageSize = visibleRange.length ?? 10\n newRowIndex = Math.max(0, rowIndex - pageSize)\n } else {\n newRowIndex = Math.max(0, rowIndex - 10)\n }\n break\n case 'pagedown':\n if (rowVirtualizer) {\n const visibleRange = rowVirtualizer.getVirtualItems()\n const pageSize = visibleRange.length ?? 10\n newRowIndex = Math.min(rowCount - 1, rowIndex + pageSize)\n } else {\n newRowIndex = Math.min(rowCount - 1, rowIndex + 10)\n }\n break\n }\n\n if (newRowIndex !== rowIndex || newColumnId !== columnId) {\n const rowDiff = newRowIndex - rowIndex\n\n // For single-row vertical navigation (up/down arrows)\n if (Math.abs(rowDiff) === 1 && (direction === 'up' || direction === 'down')) {\n const container = dataGridRef.current\n const currentRow = rowMapRef.current.get(rowIndex)\n const targetRow = rowMapRef.current.get(newRowIndex)\n\n if (!container || !currentRow) {\n // Fallback to simple focus if we can't find elements\n focusCell(newRowIndex, newColumnId)\n return\n }\n\n // Check viewport boundaries\n const containerRect = container.getBoundingClientRect()\n const headerHeight = headerRef.current?.getBoundingClientRect().height ?? 0\n const footerHeight = footerRef.current?.getBoundingClientRect().height ?? 0\n\n const viewportTop = containerRect.top + headerHeight + VIEWPORT_OFFSET\n const viewportBottom = containerRect.bottom - footerHeight - VIEWPORT_OFFSET\n\n // If target row already exists, check if it's visible\n if (targetRow) {\n const rowRect = targetRow.getBoundingClientRect()\n const isFullyVisible = rowRect.top >= viewportTop && rowRect.bottom <= viewportBottom\n\n if (isFullyVisible) {\n // Row is fully visible, just focus it\n focusCell(newRowIndex, newColumnId)\n return\n }\n\n // Row exists but not fully visible, scroll it into view\n focusCell(newRowIndex, newColumnId)\n\n if (direction === 'down') {\n // Scroll just enough to show the row at the bottom\n const scrollNeeded = rowRect.bottom - viewportBottom\n container.scrollTop += scrollNeeded\n } else {\n // Scroll just enough to show the row at the top\n const scrollNeeded = viewportTop - rowRect.top\n container.scrollTop -= scrollNeeded\n }\n return\n }\n\n // Target row is not rendered yet\n // Focus immediately so the ring appears as the row is revealed\n focusCell(newRowIndex, newColumnId)\n\n // Scroll by exactly one row height to reveal it smoothly\n if (direction === 'down') {\n container.scrollTop += rowHeightValue\n } else {\n // For arrow up, ensure we don't go below 0\n const currentScrollTop = container.scrollTop\n const targetScrollTop = Math.max(0, currentScrollTop - rowHeightValue)\n container.scrollTop = targetScrollTop\n }\n return\n }\n\n // For larger jumps (page up/down, ctrl+home/end, etc.)\n if (rowVirtualizer && Math.abs(rowDiff) > 1) {\n const align =\n direction === 'pageup' || direction === 'ctrl+home'\n ? 'start'\n : direction === 'pagedown' || direction === 'ctrl+end'\n ? 'end'\n : 'center'\n rowVirtualizer.scrollToIndex(newRowIndex, { align })\n requestAnimationFrame(() => {\n focusCell(newRowIndex, newColumnId)\n })\n return\n }\n\n // For horizontal navigation or when row is already visible\n focusCell(newRowIndex, newColumnId)\n }\n },\n [store, getNavigableColumnIds, focusCell, data.length, rowHeightValue],\n )\n\n const onCellEditingStart = React.useCallback(\n (rowIndex: number, columnId: string) => {\n store.batch(() => {\n store.setState('focusedCell', { rowIndex, columnId })\n store.setState('editingCell', { rowIndex, columnId })\n })\n },\n [store],\n )\n\n const onCellEditingStop = React.useCallback(\n (opts?: { moveToNextRow?: boolean; direction?: NavigationDirection }) => {\n const currentState = store.getState()\n const currentEditing = currentState.editingCell\n\n store.setState('editingCell', null)\n\n if (opts?.moveToNextRow && currentEditing) {\n const { rowIndex, columnId } = currentEditing\n const currentTable = tableRef.current\n const rows = currentTable?.getRowModel().rows ?? []\n const rowCount = rows.length ?? data.length\n\n const nextRowIndex = rowIndex + 1\n if (nextRowIndex < rowCount) {\n requestAnimationFrame(() => {\n focusCell(nextRowIndex, columnId)\n })\n }\n } else if (opts?.direction && currentEditing) {\n // Focus the current editing cell first, then navigate\n const { rowIndex, columnId } = currentEditing\n focusCell(rowIndex, columnId)\n requestAnimationFrame(() => {\n navigateCell(opts.direction ?? 'right')\n })\n }\n },\n [store, data.length, focusCell, navigateCell],\n )\n\n const onSearchOpenChange = React.useCallback(\n (open: boolean) => {\n if (open) {\n store.setState('searchOpen', true)\n return\n }\n\n const currentState = store.getState()\n const currentMatch = currentState.matchIndex >= 0 && currentState.searchMatches[currentState.matchIndex]\n\n store.batch(() => {\n store.setState('searchOpen', false)\n store.setState('searchQuery', '')\n store.setState('searchMatches', [])\n store.setState('matchIndex', -1)\n\n if (currentMatch) {\n store.setState('focusedCell', {\n rowIndex: currentMatch.rowIndex,\n columnId: currentMatch.columnId,\n })\n }\n })\n\n if (dataGridRef.current && document.activeElement !== dataGridRef.current) {\n dataGridRef.current.focus()\n }\n },\n [store],\n )\n\n const onSearch = React.useCallback(\n (query: string) => {\n if (!query.trim()) {\n store.batch(() => {\n store.setState('searchMatches', [])\n store.setState('matchIndex', -1)\n })\n return\n }\n\n const matches: CellPosition[] = []\n const currentTable = tableRef.current\n const rows = currentTable?.getRowModel().rows ?? []\n\n const lowerQuery = query.toLowerCase()\n\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row = rows[rowIndex]\n if (!row) {\n continue\n }\n\n for (const columnId of columnIds) {\n const cell = row.getVisibleCells().find((c) => c.column.id === columnId)\n if (!cell) {\n continue\n }\n\n const value = cell.getValue()\n const stringValue = String(value ?? '').toLowerCase()\n\n if (stringValue.includes(lowerQuery)) {\n matches.push({ rowIndex, columnId })\n }\n }\n }\n\n store.batch(() => {\n store.setState('searchMatches', matches)\n store.setState('matchIndex', matches.length > 0 ? 0 : -1)\n })\n\n // Scroll to first match but don't focus it (to keep focus in search input)\n if (matches.length > 0 && matches[0]) {\n const firstMatch = matches[0]\n rowVirtualizerRef.current?.scrollToIndex(firstMatch.rowIndex, {\n align: 'center',\n })\n }\n },\n [columnIds, store],\n )\n\n const onSearchQueryChange = React.useCallback((query: string) => store.setState('searchQuery', query), [store])\n\n const onNavigateToPrevMatch = React.useCallback(() => {\n const currentState = store.getState()\n if (currentState.searchMatches.length === 0) {\n return\n }\n\n const prevIndex =\n currentState.matchIndex - 1 < 0 ? currentState.searchMatches.length - 1 : currentState.matchIndex - 1\n const match = currentState.searchMatches[prevIndex]\n\n if (match) {\n rowVirtualizerRef.current?.scrollToIndex(match.rowIndex, {\n align: 'center',\n })\n\n requestAnimationFrame(() => {\n store.setState('matchIndex', prevIndex)\n requestAnimationFrame(() => {\n focusCell(match.rowIndex, match.columnId)\n })\n })\n }\n }, [store, focusCell])\n\n const onNavigateToNextMatch = React.useCallback(() => {\n const currentState = store.getState()\n if (currentState.searchMatches.length === 0) {\n return\n }\n\n const nextIndex = (currentState.matchIndex + 1) % currentState.searchMatches.length\n const match = currentState.searchMatches[nextIndex]\n\n if (match) {\n rowVirtualizerRef.current?.scrollToIndex(match.rowIndex, {\n align: 'center',\n })\n\n requestAnimationFrame(() => {\n store.setState('matchIndex', nextIndex)\n requestAnimationFrame(() => {\n focusCell(match.rowIndex, match.columnId)\n })\n })\n }\n }, [store, focusCell])\n\n const getIsSearchMatch = React.useCallback(\n (rowIndex: number, columnId: string) => {\n return searchMatches.some((match) => match.rowIndex === rowIndex && match.columnId === columnId)\n },\n [searchMatches],\n )\n\n const getIsActiveSearchMatch = React.useCallback(\n (rowIndex: number, columnId: string) => {\n if (matchIndex < 0) {\n return false\n }\n const currentMatch = searchMatches[matchIndex]\n return currentMatch?.rowIndex === rowIndex && currentMatch?.columnId === columnId\n },\n [searchMatches, matchIndex],\n )\n\n const blurCell = React.useCallback(() => {\n const currentState = store.getState()\n if (currentState.editingCell && document.activeElement instanceof HTMLElement) {\n document.activeElement.blur()\n }\n\n store.batch(() => {\n store.setState('focusedCell', null)\n store.setState('editingCell', null)\n })\n }, [store])\n\n const onCellClick = React.useCallback(\n (rowIndex: number, columnId: string, event?: React.MouseEvent) => {\n // Ignore right-click (button 2) - let onCellContextMenu handle it\n if (event?.button === 2) {\n return\n }\n\n const currentState = store.getState()\n const currentFocused = currentState.focusedCell\n\n if (event) {\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault()\n const cellKey = getCellKey(rowIndex, columnId)\n const newSelectedCells = new Set(currentState.selectionState.selectedCells)\n\n if (newSelectedCells.has(cellKey)) {\n newSelectedCells.delete(cellKey)\n } else {\n newSelectedCells.add(cellKey)\n }\n\n store.setState('selectionState', {\n selectedCells: newSelectedCells,\n selectionRange: null,\n isSelecting: false,\n })\n focusCell(rowIndex, columnId)\n return\n }\n\n if (event.shiftKey && currentState.focusedCell) {\n event.preventDefault()\n selectRange(currentState.focusedCell, { rowIndex, columnId })\n return\n }\n }\n\n // Clear selection if there are selected cells or rows\n const hasSelectedCells = currentState.selectionState.selectedCells.size > 0\n const hasSelectedRows = Object.keys(currentState.rowSelection).length > 0\n\n if (hasSelectedCells && !currentState.selectionState.isSelecting) {\n // If there's a cell selection but we're not actively selecting (drag just finished),\n // don't clear it - keep the selection\n // Only clear if clicking elsewhere\n const cellKey = getCellKey(rowIndex, columnId)\n const isClickingSelectedCell = currentState.selectionState.selectedCells.has(cellKey)\n\n if (!isClickingSelectedCell) {\n clearSelection()\n } else {\n // Clicking on an already selected cell - just focus it\n focusCell(rowIndex, columnId)\n return\n }\n } else if (hasSelectedRows && columnId !== 'select') {\n // If there are selected rows but we're clicking on a non-checkbox cell, clear selections\n clearSelection()\n }\n\n if (currentFocused?.rowIndex === rowIndex && currentFocused?.columnId === columnId) {\n onCellEditingStart(rowIndex, columnId)\n } else {\n focusCell(rowIndex, columnId)\n }\n },\n [store, focusCell, onCellEditingStart, selectRange, clearSelection],\n )\n\n const onCellDoubleClick = React.useCallback(\n (rowIndex: number, columnId: string, event?: React.MouseEvent) => {\n if (event?.defaultPrevented) {\n return\n }\n\n onCellEditingStart(rowIndex, columnId)\n },\n [onCellEditingStart],\n )\n\n const onCellMouseDown = React.useCallback(\n (rowIndex: number, columnId: string, event: React.MouseEvent) => {\n // Ignore right-click (button 2) - let onCellContextMenu handle it\n if (event.button === 2) {\n return\n }\n\n event.preventDefault()\n\n // Only start drag selection if no modifier keys are pressed\n // Clear any existing selection and prepare for potential drag\n if (!event.ctrlKey && !event.metaKey && !event.shiftKey) {\n store.batch(() => {\n store.setState('selectionState', {\n selectedCells: new Set(),\n selectionRange: {\n start: { rowIndex, columnId },\n end: { rowIndex, columnId },\n },\n isSelecting: true,\n })\n store.setState('rowSelection', {})\n })\n }\n },\n [store],\n )\n\n const onCellMouseEnter = React.useCallback(\n (rowIndex: number, columnId: string, _event: React.MouseEvent) => {\n const currentState = store.getState()\n if (currentState.selectionState.isSelecting && currentState.selectionState.selectionRange) {\n const start = currentState.selectionState.selectionRange.start\n const end = { rowIndex, columnId }\n\n if (\n currentState.focusedCell?.rowIndex !== start.rowIndex ||\n currentState.focusedCell?.columnId !== start.columnId\n ) {\n focusCell(start.rowIndex, start.columnId)\n }\n\n selectRange(start, end, true)\n }\n },\n [store, selectRange, focusCell],\n )\n\n const onCellMouseUp = React.useCallback(() => {\n const currentState = store.getState()\n store.setState('selectionState', {\n ...currentState.selectionState,\n isSelecting: false,\n })\n }, [store])\n\n const onCellContextMenu = React.useCallback(\n (rowIndex: number, columnId: string, event: React.MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n const currentState = store.getState()\n const cellKey = getCellKey(rowIndex, columnId)\n const isTargetCellSelected = currentState.selectionState.selectedCells.has(cellKey)\n\n // If right-clicking on a non-selected cell, select only that cell\n if (!isTargetCellSelected) {\n store.batch(() => {\n store.setState('selectionState', {\n selectedCells: new Set([cellKey]),\n selectionRange: {\n start: { rowIndex, columnId },\n end: { rowIndex, columnId },\n },\n isSelecting: false,\n })\n store.setState('focusedCell', { rowIndex, columnId })\n })\n }\n\n // Open context menu at cursor position\n store.setState('contextMenu', {\n open: true,\n x: event.clientX,\n y: event.clientY,\n })\n },\n [store],\n )\n\n const onContextMenuOpenChange = React.useCallback(\n (open: boolean) => {\n if (!open) {\n const currentMenu = store.getState().contextMenu\n store.setState('contextMenu', {\n open: false,\n x: currentMenu.x,\n y: currentMenu.y,\n })\n }\n },\n [store],\n )\n\n const onDataGridKeyDown = React.useCallback(\n (event: KeyboardEvent) => {\n const currentState = store.getState()\n const { key, ctrlKey, metaKey, shiftKey } = event\n const isCtrlPressed = ctrlKey || metaKey\n\n // Handle Cmd+F / Ctrl+F to open search (highest priority, works even when editing)\n if (enableSearch && isCtrlPressed && key === SEARCH_SHORTCUT_KEY) {\n event.preventDefault()\n onSearchOpenChange(true)\n return\n }\n\n // Handle search navigation when search is open\n if (enableSearch && currentState.searchOpen && !currentState.editingCell) {\n if (key === 'Enter') {\n event.preventDefault()\n if (shiftKey) {\n onNavigateToPrevMatch()\n } else {\n onNavigateToNextMatch()\n }\n return\n }\n if (key === 'Escape') {\n event.preventDefault()\n onSearchOpenChange(false)\n return\n }\n // When search is open, don't let data grid handle any other keys\n // (they should only affect the search input)\n return\n }\n\n if (currentState.editingCell) {\n return\n }\n\n if (!currentState.focusedCell) {\n return\n }\n\n let direction: NavigationDirection | null = null\n\n if (isCtrlPressed && key === 'a') {\n event.preventDefault()\n selectAll()\n return\n }\n\n if (key === 'Delete' || key === 'Backspace') {\n if (currentState.selectionState.selectedCells.size > 0) {\n event.preventDefault()\n // If any selected cell is not editable, do nothing (mirror context-menu Clear behavior)\n const currentTable = tableRef.current\n const visibleCols = currentTable?.getVisibleLeafColumns() ?? []\n let canClear = true\n for (const cellKey of currentState.selectionState.selectedCells) {\n if (!canClear) {\n break\n }\n const { columnId } = parseCellKey(cellKey)\n const col = visibleCols.find((c) => c.id === columnId)\n const editable = col?.columnDef?.meta?.editable\n if (editable === false) {\n canClear = false\n }\n }\n\n if (!canClear) {\n return\n }\n\n const updates: {\n rowIndex: number\n columnId: string\n value: unknown\n }[] = []\n\n currentState.selectionState.selectedCells.forEach((cellKey) => {\n const { rowIndex, columnId } = parseCellKey(cellKey)\n updates.push({ rowIndex, columnId, value: '' })\n })\n\n onDataUpdate(updates)\n clearSelection()\n }\n return\n }\n\n switch (key) {\n case 'ArrowUp':\n direction = 'up'\n break\n case 'ArrowDown':\n direction = 'down'\n break\n case 'ArrowLeft':\n direction = 'left'\n break\n case 'ArrowRight':\n direction = 'right'\n break\n case 'Home':\n direction = isCtrlPressed ? 'ctrl+home' : 'home'\n break\n case 'End':\n direction = isCtrlPressed ? 'ctrl+end' : 'end'\n break\n case 'PageUp':\n direction = 'pageup'\n break\n case 'PageDown':\n direction = 'pagedown'\n break\n case 'Escape':\n event.preventDefault()\n if (currentState.selectionState.selectedCells.size > 0 || Object.keys(currentState.rowSelection).length > 0) {\n clearSelection()\n } else {\n blurCell()\n }\n return\n case 'Tab':\n event.preventDefault()\n direction = event.shiftKey ? 'left' : 'right'\n break\n }\n\n if (direction) {\n event.preventDefault()\n\n // Tab navigation should not trigger selection, even with Shift\n if (shiftKey && key !== 'Tab' && currentState.focusedCell) {\n const _navCols = getNavigableColumnIds()\n const currentColIndex = _navCols.indexOf(currentState.focusedCell.columnId)\n let newRowIndex = currentState.focusedCell.rowIndex\n let newColumnId = currentState.focusedCell.columnId\n\n switch (direction) {\n case 'up':\n newRowIndex = Math.max(0, currentState.focusedCell.rowIndex - 1)\n break\n case 'down':\n newRowIndex = Math.min(\n (tableRef.current?.getRowModel().rows.length || data.length) - 1,\n currentState.focusedCell.rowIndex + 1,\n )\n break\n case 'left':\n if (currentColIndex > 0) {\n const prevColumnId = _navCols[currentColIndex - 1]\n if (prevColumnId) {\n newColumnId = prevColumnId\n }\n }\n break\n case 'right':\n if (currentColIndex < _navCols.length - 1) {\n const nextColumnId = _navCols[currentColIndex + 1]\n if (nextColumnId) {\n newColumnId = nextColumnId\n }\n }\n break\n }\n\n const selectionStart = currentState.selectionState.selectionRange?.start || currentState.focusedCell\n selectRange(selectionStart, {\n rowIndex: newRowIndex,\n columnId: newColumnId,\n })\n focusCell(newRowIndex, newColumnId)\n } else {\n if (currentState.selectionState.selectedCells.size > 0) {\n clearSelection()\n }\n navigateCell(direction)\n }\n }\n },\n [\n store,\n blurCell,\n navigateCell,\n selectAll,\n onDataUpdate,\n clearSelection,\n getNavigableColumnIds,\n data.length,\n selectRange,\n focusCell,\n onSearchOpenChange,\n onNavigateToNextMatch,\n onNavigateToPrevMatch,\n enableSearch,\n ],\n )\n\n const onSortingChange = React.useCallback(\n (updater: Updater<SortingState>) => {\n const currentState = store.getState()\n const newSorting = typeof updater === 'function' ? updater(currentState.sorting) : updater\n store.setState('sorting', newSorting)\n },\n [store],\n )\n\n const onRowSelectionChange = React.useCallback(\n (updater: Updater<RowSelectionState>) => {\n const currentState = store.getState()\n const newRowSelection = typeof updater === 'function' ? updater(currentState.rowSelection) : updater\n\n const selectedRows = Object.keys(newRowSelection).filter((key) => newRowSelection[key])\n\n const selectedCells = new Set<string>()\n const rows = tableRef.current?.getRowModel().rows ?? []\n\n for (const rowId of selectedRows) {\n const rowIndex = rows.findIndex((r) => r.id === rowId)\n if (rowIndex === -1) {\n continue\n }\n\n for (const columnId of columnIds) {\n selectedCells.add(getCellKey(rowIndex, columnId))\n }\n }\n\n store.batch(() => {\n store.setState('rowSelection', newRowSelection)\n store.setState('selectionState', {\n selectedCells,\n selectionRange: null,\n isSelecting: false,\n })\n store.setState('focusedCell', null)\n store.setState('editingCell', null)\n })\n },\n [store, columnIds],\n )\n\n const onRowSelect = React.useCallback(\n (rowIndex: number, selected: boolean, shiftKey: boolean) => {\n const currentState = store.getState()\n const rows = tableRef.current?.getRowModel().rows ?? []\n const currentRow = rows[rowIndex]\n if (!currentRow) {\n return\n }\n\n if (shiftKey && currentState.lastClickedRowIndex !== null) {\n const startIndex = Math.min(currentState.lastClickedRowIndex, rowIndex)\n const endIndex = Math.max(currentState.lastClickedRowIndex, rowIndex)\n\n const newRowSelection: RowSelectionState = {\n ...currentState.rowSelection,\n }\n\n for (let i = startIndex; i <= endIndex; i++) {\n const row = rows[i]\n if (row) {\n newRowSelection[row.id] = selected\n }\n }\n\n onRowSelectionChange(newRowSelection)\n } else {\n onRowSelectionChange({\n ...currentState.rowSelection,\n [currentRow.id]: selected,\n })\n }\n\n store.setState('lastClickedRowIndex', rowIndex)\n },\n [store, onRowSelectionChange],\n )\n\n const onRowHeightChange = React.useCallback(\n (updater: Updater<RowHeightValue>) => {\n const currentState = store.getState()\n const newRowHeight = typeof updater === 'function' ? updater(currentState.rowHeight) : updater\n store.setState('rowHeight', newRowHeight)\n },\n [store],\n )\n\n const onColumnClick = React.useCallback(\n (columnId: string) => {\n if (!enableColumnSelection) {\n clearSelection()\n return\n }\n\n selectColumn(columnId)\n },\n [enableColumnSelection, selectColumn, clearSelection],\n )\n\n const defaultColumn: Partial<ColumnDef<TData>> = React.useMemo(\n () => ({\n cell: DataGridCell,\n minSize: MIN_COLUMN_SIZE,\n maxSize: MAX_COLUMN_SIZE,\n }),\n [],\n )\n\n const tableOptions = React.useMemo<TableOptions<TData>>(\n () => ({\n ...dataGridPropsRef.current,\n data,\n columns,\n defaultColumn,\n initialState: mergedInitialState,\n state: {\n ...dataGridPropsRef.current.state,\n sorting,\n rowSelection,\n },\n onRowSelectionChange,\n onSortingChange,\n columnResizeMode: 'onChange',\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n meta: {\n ...dataGridPropsRef.current.meta,\n dataGridRef,\n focusedCell,\n editingCell,\n selectionState,\n searchOpen,\n rowHeight,\n isScrolling,\n getIsCellSelected,\n getIsSearchMatch,\n getIsActiveSearchMatch,\n onRowHeightChange,\n onRowSelect,\n onRowsDelete: onRowsDeleteProp ? onRowsDelete : undefined,\n onDataUpdate,\n onColumnClick,\n onCellClick,\n onCellDoubleClick,\n onCellMouseDown,\n onCellMouseEnter,\n onCellMouseUp,\n onCellContextMenu,\n onCellEditingStart,\n onCellEditingStop,\n contextMenu,\n onContextMenuOpenChange,\n },\n }),\n [\n dataGridPropsRef,\n data,\n columns,\n defaultColumn,\n mergedInitialState,\n sorting,\n rowSelection,\n onRowSelectionChange,\n onSortingChange,\n focusedCell,\n editingCell,\n selectionState,\n searchOpen,\n isScrolling,\n getIsCellSelected,\n getIsSearchMatch,\n getIsActiveSearchMatch,\n onDataUpdate,\n onRowsDeleteProp,\n onRowsDelete,\n onColumnClick,\n onCellClick,\n onCellDoubleClick,\n onCellMouseDown,\n onCellMouseEnter,\n onCellMouseUp,\n onCellContextMenu,\n onCellEditingStart,\n onCellEditingStop,\n contextMenu,\n onContextMenuOpenChange,\n rowHeight,\n onRowHeightChange,\n onRowSelect,\n ],\n )\n\n const table = useReactTable(tableOptions)\n\n if (!tableRef.current) {\n tableRef.current = table\n }\n\n // Extract columnSizing once so it can be used in hook dependency arrays\n const columnSizing = table.getState().columnSizing\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: we need to memoize the column size vars\n const columnSizeVars = React.useMemo(() => {\n // reference columnSizing so it is a used dependency (recomputes when column sizing changes)\n void columnSizing\n const headers = table.getFlatHeaders()\n const colSizes: Record<string, number> = {}\n for (const header of headers) {\n // Prefer the current header size, but fall back to the columnDef `size`\n // or the MIN_COLUMN_SIZE so the CSS variables exist on first render.\n const headerSize =\n (typeof header.getSize === 'function' ? header.getSize() : undefined) ??\n (header.column.columnDef as any)?.size ??\n MIN_COLUMN_SIZE\n const colSize =\n (typeof header.column.getSize === 'function' ? header.column.getSize() : undefined) ??\n (header.column.columnDef as any)?.size ??\n MIN_COLUMN_SIZE\n\n colSizes[`--header-${header.id}-size`] = headerSize\n colSizes[`--col-${header.column.id}-size`] = colSize\n }\n return colSizes\n // Recompute whenever the table's column sizing state changes so CSS vars reflect new sizes\n }, [table, columnSizing])\n\n const rowVirtualizer = useVirtualizer({\n count: table.getRowModel().rows.length,\n getScrollElement: () => dataGridRef.current,\n estimateSize: () => rowHeightValue,\n overscan,\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n onChange: (instance) => {\n // Sync virtualizer's isScrolling state to our store\n const virtualizerIsScrolling = instance.isScrolling\n const currentIsScrolling = store.getState().isScrolling\n\n if (virtualizerIsScrolling !== currentIsScrolling) {\n store.setState('isScrolling', virtualizerIsScrolling)\n }\n\n // Batch DOM updates in a single animation frame\n const virtualItems = instance.getVirtualItems()\n if (virtualItems.length === 0) {\n return\n }\n\n requestAnimationFrame(() => {\n for (const virtualRow of virtualItems) {\n if (!virtualRow) {\n continue\n }\n const rowRef = rowMapRef.current.get(virtualRow.index)\n if (rowRef) {\n rowRef.style.transform = `translateY(${virtualRow.start}px)`\n }\n }\n })\n },\n })\n\n if (!rowVirtualizerRef.current) {\n rowVirtualizerRef.current = rowVirtualizer\n }\n\n const onScrollToRow = React.useCallback(\n (opts: Partial<CellPosition>) => {\n const rowIndex = opts?.rowIndex ?? 0\n const columnId = opts?.columnId\n\n rowVirtualizer.scrollToIndex(rowIndex, {\n align: 'center',\n })\n\n const targetColumnId = columnId ?? getNavigableColumnIds()[0]\n\n if (!targetColumnId) {\n return\n }\n\n queueMicrotask(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n store.batch(() => {\n store.setState('focusedCell', {\n rowIndex,\n columnId: targetColumnId,\n })\n store.setState('editingCell', null)\n })\n })\n })\n })\n },\n [rowVirtualizer, getNavigableColumnIds, store],\n )\n\n const onRowAdd = React.useCallback(\n async (event?: React.MouseEvent<HTMLDivElement>) => {\n if (!onRowAddProp) {\n return\n }\n\n const result = await onRowAddProp(event)\n\n if (event?.defaultPrevented || result === null) {\n return\n }\n\n const currentTable = tableRef.current\n const rows = currentTable?.getRowModel().rows ?? []\n\n if (result) {\n const adjustedRowIndex = (result.rowIndex ?? 0) >= rows.length ? rows.length : result.rowIndex\n\n onScrollToRow({\n rowIndex: adjustedRowIndex,\n columnId: result.columnId,\n })\n return\n }\n\n onScrollToRow({ rowIndex: rows.length })\n },\n [onRowAddProp, onScrollToRow],\n )\n\n // Persist table column state (order, visibility, pinning) whenever it changes.\n // Use a layout effect so persistence stays in sync with table layout updates.\n useIsomorphicLayoutEffect(() => {\n if (!storageKey) {\n return\n }\n\n try {\n const state = table.getState()\n const payload = {\n columnOrder: state.columnOrder,\n columnVisibility: state.columnVisibility,\n columnPinning: state.columnPinning,\n }\n localStorage.setItem(storageKey, JSON.stringify(payload))\n } catch (_) {\n // ignore storage errors\n }\n }, [storageKey, table.getState().columnOrder, table.getState().columnVisibility, table.getState().columnPinning])\n\n const searchState = React.useMemo<SearchState | undefined>(() => {\n if (!enableSearch) {\n return undefined\n }\n\n return {\n searchMatches,\n matchIndex,\n searchOpen,\n onSearchOpenChange,\n searchQuery,\n onSearchQueryChange,\n onSearch,\n onNavigateToNextMatch,\n onNavigateToPrevMatch,\n }\n }, [\n enableSearch,\n searchMatches,\n matchIndex,\n searchOpen,\n onSearchOpenChange,\n searchQuery,\n onSearchQueryChange,\n onSearch,\n onNavigateToNextMatch,\n onNavigateToPrevMatch,\n ])\n\n React.useEffect(() => {\n const dataGridElement = dataGridRef.current\n if (!dataGridElement) {\n return\n }\n\n dataGridElement.addEventListener('keydown', onDataGridKeyDown)\n return () => {\n dataGridElement.removeEventListener('keydown', onDataGridKeyDown)\n }\n }, [onDataGridKeyDown])\n\n React.useEffect(() => {\n function onGlobalKeyDown(event: KeyboardEvent) {\n const dataGridElement = dataGridRef.current\n if (!dataGridElement) {\n return\n }\n\n const target = event.target\n if (!(target instanceof HTMLElement)) {\n return\n }\n\n const { key, ctrlKey, metaKey } = event\n const isCtrlPressed = ctrlKey || metaKey\n\n if (enableSearch && isCtrlPressed && key === SEARCH_SHORTCUT_KEY) {\n const isInInput = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA'\n const isInDataGrid = dataGridElement.contains(target)\n const isInSearchInput = target.closest('[role=search]') !== null\n\n if (isInDataGrid || isInSearchInput || !isInInput) {\n event.preventDefault()\n event.stopPropagation()\n onSearchOpenChange(true)\n\n if (!isInDataGrid && !isInSearchInput) {\n requestAnimationFrame(() => {\n dataGridElement.focus()\n })\n }\n return\n }\n }\n\n const isInDataGrid = dataGridElement.contains(target)\n if (!isInDataGrid) {\n return\n }\n\n if (key === 'Escape') {\n const currentState = store.getState()\n const hasSelections =\n currentState.selectionState.selectedCells.size > 0 || Object.keys(currentState.rowSelection).length > 0\n\n if (hasSelections) {\n event.preventDefault()\n event.stopPropagation()\n clearSelection()\n }\n }\n }\n\n window.addEventListener('keydown', onGlobalKeyDown, true)\n return () => {\n window.removeEventListener('keydown', onGlobalKeyDown, true)\n }\n }, [enableSearch, onSearchOpenChange, store, clearSelection])\n\n React.useEffect(() => {\n const currentState = store.getState()\n if (autoFocus && data.length > 0 && columns.length > 0 && !currentState.focusedCell) {\n const _nav = getNavigableColumnIds()\n if (_nav.length > 0) {\n const rafId = requestAnimationFrame(() => {\n if (typeof autoFocus === 'object') {\n const { rowIndex, columnId } = autoFocus\n if (columnId) {\n focusCell(rowIndex ?? 0, columnId)\n }\n return\n }\n\n const firstColumnId = _nav[0]\n if (firstColumnId) {\n focusCell(0, firstColumnId)\n }\n })\n return () => cancelAnimationFrame(rafId)\n }\n }\n return undefined\n }, [autoFocus, data.length, columns.length, store, getNavigableColumnIds, focusCell])\n\n React.useEffect(() => {\n function onOutsideClick(event: MouseEvent) {\n if (event.button === 2) {\n return\n }\n\n if (dataGridRef.current && !dataGridRef.current.contains(event.target as Node)) {\n const target = event.target\n const isInsidePopover =\n target instanceof HTMLElement &&\n (target.closest('[data-grid-cell-editor]') || target.closest('[data-grid-popover]'))\n\n if (!isInsidePopover) {\n blurCell()\n const currentState = store.getState()\n if (currentState.selectionState.selectedCells.size > 0 || Object.keys(currentState.rowSelection).length > 0) {\n clearSelection()\n }\n }\n }\n }\n\n document.addEventListener('mousedown', onOutsideClick)\n return () => {\n document.removeEventListener('mousedown', onOutsideClick)\n }\n }, [store, blurCell, clearSelection])\n\n React.useEffect(() => {\n function onCleanup() {\n document.removeEventListener('selectstart', preventSelection)\n document.removeEventListener('contextmenu', preventContextMenu)\n document.body.style.userSelect = ''\n }\n\n function preventSelection(event: Event) {\n event.preventDefault()\n }\n function preventContextMenu(event: Event) {\n event.preventDefault()\n }\n\n const onUnsubscribe = store.subscribe(() => {\n const currentState = store.getState()\n if (currentState.selectionState.isSelecting) {\n document.addEventListener('selectstart', preventSelection)\n document.addEventListener('contextmenu', preventContextMenu)\n document.body.style.userSelect = 'none'\n } else {\n onCleanup()\n }\n })\n\n return () => {\n onCleanup()\n onUnsubscribe()\n }\n }, [store])\n\n useIsomorphicLayoutEffect(() => {\n const rafId = requestAnimationFrame(() => {\n rowVirtualizer.measure()\n })\n return () => cancelAnimationFrame(rafId)\n }, [\n data,\n table.getState().columnFilters,\n table.getState().columnOrder,\n table.getState().columnPinning,\n table.getState().columnSizing,\n table.getState().columnVisibility,\n table.getState().expanded,\n table.getState().globalFilter,\n table.getState().grouping,\n table.getState().rowSelection,\n table.getState().sorting,\n rowHeight,\n ])\n\n return {\n dataGridRef,\n headerRef,\n rowMapRef,\n footerRef,\n table,\n rowVirtualizer,\n searchState,\n columnSizeVars,\n onRowAdd: onRowAddProp ? onRowAdd : undefined,\n }\n}\n\nexport { useDataGrid, type UseDataGridProps }\n","import { CalendarIcon } from '@radix-ui/react-icons'\n\nimport { format } from 'date-fns'\nimport * as React from 'react'\n\nimport { Button } from '../button/button'\nimport { Calendar } from '../calendar/calendar'\nimport { cn } from '../lib/utils'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover/popover'\n\nexport function DatePickerDemo() {\n const [date, setDate] = React.useState<Date>()\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant={'outline'}\n className={cn('w-[240px] justify-start text-left font-normal', !date && 'text-muted-foreground')}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {date ? format(date, 'PPP') : <span>Pick a date</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar mode=\"single\" selected={date} onSelect={setDate} initialFocus />\n </PopoverContent>\n </Popover>\n )\n}\n","import * as React from 'react'\nimport { Drawer as DrawerPrimitive } from 'vaul'\n\nimport { cn } from '../lib/utils'\n\nconst Drawer = ({ shouldScaleBackground = true, ...props }: React.ComponentProps<typeof DrawerPrimitive.Root>) => (\n <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />\n)\nDrawer.displayName = 'Drawer'\n\nconst DrawerTrigger = DrawerPrimitive.Trigger\n\nconst DrawerPortal = DrawerPrimitive.Portal\n\nconst DrawerClose = DrawerPrimitive.Close\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay ref={ref} className={cn('fixed inset-0 z-50 bg-black/80', className)} {...props} />\n))\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background',\n className,\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n))\nDrawerContent.displayName = 'DrawerContent'\n\nconst DrawerHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('grid gap-1.5 p-4 text-center sm:text-left', className)} {...props} />\n)\nDrawerHeader.displayName = 'DrawerHeader'\n\nconst DrawerFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('mt-auto flex flex-col gap-2 p-4', className)} {...props} />\n)\nDrawerFooter.displayName = 'DrawerFooter'\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n))\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n))\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","import * as LabelPrimitive from '@radix-ui/react-label'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'flex items-center gap-2 text-base leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as SeparatorPrimitive from '@radix-ui/react-separator'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn('shrink-0 bg-border', orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]', className)}\n {...props}\n />\n))\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","import { cva, type VariantProps } from 'class-variance-authority'\nimport { useMemo } from 'react'\n\nimport { Label } from '../label/label'\nimport { cn } from '../lib/utils'\nimport { Separator } from '../separator/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('mb-3 font-medium', 'data-[variant=legend]:text-base', 'data-[variant=label]:text-sm', className)}\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]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n responsive: [\n 'flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]: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 ...props\n}: React.ComponentProps<'fieldset'> & VariantProps<typeof fieldVariants>) {\n return (\n <fieldset\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), 'border-0 p-0 m-0', 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 [&>*]:data-[slot=field]:p-4',\n 'has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary 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 leading-snug font-medium 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-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance',\n 'last:mt-0 nth-last-2:-mt-1 [[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('relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2', className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<'div'> & {\n errors?: ({ message?: string } | undefined)[]\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map((error) => error?.message && <li key={error.message}>{error.message}</li>)}\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-destructive text-sm font-normal', 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","import { memo } from 'react'\n\n/**\n * Adds a mark tag around all search hits in the text,\n * so that the given searchValues are highlighted in the text\n */\nconst MarkValueRenderer = memo(({ text, searchValues }: { text: string; searchValues: string[] | undefined }) => {\n if (!searchValues || searchValues.length === 0) {\n return <span>{text}</span>\n }\n\n // escape special characters; empty strings are removed using .filter(Boolean)\n const escapedFilterValues = searchValues\n .map((value) => {\n return value.replaceAll(/[|\\\\{}()[\\]^$+*?.]/g, String.raw`\\$&`)\n })\n .filter(Boolean)\n\n // no words to highlight\n if (escapedFilterValues.length === 0) {\n return <span>{text}</span>\n }\n\n // The split method is used to divide the \"text\" string into parts based on the regular expression.\n // This results in an array (\"parts\") where the matching words and the non-matching segments are separated.\n const regex = new RegExp(`(${escapedFilterValues.join('|')})`, 'gi')\n const parts = text.split(regex)\n\n return (\n <span>\n {parts.map((part, index) => {\n // to compare the parts with the words, the parts also have to be escaped\n const escapedPart = part.replaceAll(/[|\\\\{}()[\\]^$+*?.]/g, String.raw`\\$&`)\n return escapedFilterValues.some((escapedWord) => escapedPart.toLowerCase() === escapedWord.toLowerCase()) ? (\n <mark key={`${part}_${index}`} className=\"text-primary font-semibold bg-transparent\">\n {part}\n </mark>\n ) : (\n part\n )\n })}\n </span>\n )\n})\n\nMarkValueRenderer.displayName = 'MarkCellValueRenderer'\n\nexport { MarkValueRenderer }\n","import { CheckIcon, ChevronRightIcon, DotFilledIcon } from '@radix-ui/react-icons'\nimport * as MenubarPrimitive from '@radix-ui/react-menubar'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst MenubarMenu = MenubarPrimitive.Menu\n\nconst MenubarGroup = MenubarPrimitive.Group\n\nconst MenubarPortal = MenubarPrimitive.Portal\n\nconst MenubarSub = MenubarPrimitive.Sub\n\nconst MenubarRadioGroup = MenubarPrimitive.RadioGroup\n\nconst Menubar = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Root\n ref={ref}\n className={cn('flex h-9 items-center space-x-1 rounded-md border bg-background p-1 shadow-sm', className)}\n {...props}\n />\n))\nMenubar.displayName = MenubarPrimitive.Root.displayName\n\nconst MenubarTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground',\n className,\n )}\n {...props}\n />\n))\nMenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName\n\nconst MenubarSubTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <MenubarPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n))\nMenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName\n\nconst MenubarSubContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n))\nMenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName\n\nconst MenubarContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content>\n>(({ className, align = 'start', alignOffset = -4, sideOffset = 8, ...props }, ref) => (\n <MenubarPrimitive.Portal>\n <MenubarPrimitive.Content\n ref={ref}\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n </MenubarPrimitive.Portal>\n))\nMenubarContent.displayName = MenubarPrimitive.Content.displayName\n\nconst MenubarItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <MenubarPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n))\nMenubarItem.displayName = MenubarPrimitive.Item.displayName\n\nconst MenubarCheckboxItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <MenubarPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n))\nMenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName\n\nconst MenubarRadioItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <MenubarPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <DotFilledIcon className=\"h-4 w-4 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n))\nMenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName\n\nconst MenubarLabel = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <MenubarPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}\n {...props}\n />\n))\nMenubarLabel.displayName = MenubarPrimitive.Label.displayName\n\nconst MenubarSeparator = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Separator ref={ref} className={cn('-mx-1 my-1 h-px bg-muted', className)} {...props} />\n))\nMenubarSeparator.displayName = MenubarPrimitive.Separator.displayName\n\nconst MenubarShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn('ml-auto text-xs tracking-widest text-muted-foreground', className)} {...props} />\n}\nMenubarShortcut.displayname = 'MenubarShortcut'\n\nexport {\n Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarItem,\n MenubarSeparator,\n MenubarLabel,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarPortal,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarGroup,\n MenubarSub,\n MenubarShortcut,\n}\n","import { type Dispatch, type PropsWithChildren, type ReactNode, type SetStateAction } from 'react'\n\nimport { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '../dialog/dialog'\nimport { cn } from '../lib/utils'\n\ntype ModalProps = {\n title?: ReactNode | string\n subtitle?: ReactNode\n showCloseButton?: boolean\n isOpen: boolean\n setIsOpen: Dispatch<SetStateAction<boolean>>\n __e2e_test_id__?: string\n footer?: ReactNode\n controls?: ReactNode[]\n preventClickOutsideToDismiss?: boolean\n size?: 'fit-content' | 'full-height' | 'full-size' | 'fit-content-width'\n contentClass?: string\n onOpenAutoFocus?: (event: Event) => void\n}\n\nexport const Modal = ({\n title = '',\n subtitle,\n isOpen,\n showCloseButton = true,\n setIsOpen,\n children,\n controls = [],\n footer,\n preventClickOutsideToDismiss,\n size = 'fit-content',\n contentClass = '',\n __e2e_test_id__,\n onOpenAutoFocus,\n}: PropsWithChildren<ModalProps>) => {\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogContent\n onOpenAutoFocus={onOpenAutoFocus}\n className={cn(\n 'sm:max-w-xl min-w-[425px] max-h-[95vh] flex flex-col p-0 gap-0 border-(--discreet-border) rounded',\n size === 'full-height' && 'h-[95vh]',\n size === 'full-size' && 'w-[95vw] h-[95vh] sm:max-w-[95vw]',\n size === 'fit-content-width' && 'max-w-fit w-auto sm:max-w-fit',\n contentClass,\n )}\n showCloseButton={showCloseButton}\n __e2e_test_id__={__e2e_test_id__}\n onInteractOutside={preventClickOutsideToDismiss ? (e) => e.preventDefault() : undefined}\n onEscapeKeyDown={preventClickOutsideToDismiss ? (e) => e.preventDefault() : undefined}\n >\n <DialogHeader\n className={cn(\n 'flex flex-row flex-shrink-0 items-center gap-2 p-3 min-h-10 border-b-1 border-(--discreet-border)',\n showCloseButton ? 'pr-12' : '',\n subtitle ? 'pb-0' : '',\n )}\n >\n <div className=\"overflow-hidden\">\n {title && (\n <DialogTitle className=\"text-xl overflow-hidden text-ellipsis whitespace-nowrap\">{title}</DialogTitle>\n )}\n {subtitle}\n </div>\n {controls.length > 0 && (\n <div className=\"flex flex-grow justify-end items-baseline gap-2 whitespace-nowrap flex-1\">{controls}</div>\n )}\n </DialogHeader>\n\n <div className=\"max-h-full h-full overflow-auto flex-grow\">{children}</div>\n\n {footer && (\n <DialogFooter className=\"sm:justify-center flex-shrink-0 p-3 border-t-1 border-(--discreet-border)\">\n {footer}\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n","import { ChevronDownIcon } from '@radix-ui/react-icons'\nimport * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu'\n\nimport { cva } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n className={cn('group/navigation-menu relative flex max-w-max flex-1 items-center justify-center', className)}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n )\n}\n\nfunction NavigationMenuList({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn('group flex flex-1 list-none items-center justify-center gap-1', className)}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuItem({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item data-slot=\"navigation-menu-item\" className={cn('relative', className)} {...props} />\n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n 'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1',\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), 'group', className)}\n {...props}\n >\n {children}{' '}\n <ChevronDownIcon\n className=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n )\n}\n\nfunction NavigationMenuContent({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto',\n 'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div className={cn('absolute top-full left-0 isolate z-50 flex justify-center')}>\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n 'origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]',\n className,\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction NavigationMenuLink({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n 'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden',\n className,\n )}\n {...props}\n >\n <div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n )\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n}\n","import { ChevronLeftIcon, ChevronRightIcon, DotsHorizontalIcon } from '@radix-ui/react-icons'\n\nimport * as React from 'react'\n\nimport { ButtonProps, buttonVariants } from '../button/button'\nimport { cn } from '../lib/utils'\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<'nav'>) => (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn('mx-auto flex w-full justify-center', className)}\n {...props}\n />\n)\nPagination.displayName = 'Pagination'\n\nconst PaginationContent = React.forwardRef<HTMLUListElement, React.ComponentProps<'ul'>>(\n ({ className, ...props }, ref) => (\n <ul ref={ref} className={cn('flex flex-row items-center gap-1', className)} {...props} />\n ),\n)\nPaginationContent.displayName = 'PaginationContent'\n\nconst PaginationItem = React.forwardRef<HTMLLIElement, React.ComponentProps<'li'>>(({ className, ...props }, ref) => (\n <li ref={ref} className={cn('', className)} {...props} />\n))\nPaginationItem.displayName = 'PaginationItem'\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<ButtonProps, 'size'> &\n React.ComponentProps<'a'>\n\nconst PaginationLink = ({ className, isActive, size = 'icon', children, ...props }: PaginationLinkProps) => (\n <a\n aria-current={isActive ? 'page' : undefined}\n className={cn(\n buttonVariants({\n variant: isActive ? 'outline' : 'ghost',\n size,\n }),\n className,\n )}\n {...props}\n >\n {children}\n </a>\n)\nPaginationLink.displayName = 'PaginationLink'\n\nconst PaginationPrevious = ({ className, ...props }: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink aria-label=\"Go to previous page\" size=\"default\" className={cn('gap-1 pl-2.5', className)} {...props}>\n <ChevronLeftIcon className=\"h-4 w-4\" />\n <span>Previous</span>\n </PaginationLink>\n)\nPaginationPrevious.displayName = 'PaginationPrevious'\n\nconst PaginationNext = ({ className, ...props }: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink aria-label=\"Go to next page\" size=\"default\" className={cn('gap-1 pr-2.5', className)} {...props}>\n <span>Next</span>\n <ChevronRightIcon className=\"h-4 w-4\" />\n </PaginationLink>\n)\nPaginationNext.displayName = 'PaginationNext'\n\nconst PaginationEllipsis = ({ className, ...props }: React.ComponentProps<'span'>) => (\n <span aria-hidden className={cn('flex h-9 w-9 items-center justify-center', className)} {...props}>\n <DotsHorizontalIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n)\nPaginationEllipsis.displayName = 'PaginationEllipsis'\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","import type { CSSProperties } from 'react'\n\nexport const Progress = ({ value, size = '100%' }: { value: number; size?: string }) => {\n return (\n <div\n style={{ '--parent-width': size } as CSSProperties}\n className=\"w-(--parent-width) flex justify-center relative rounded-md overflow-hidden h-2 mt-8\"\n >\n <div className=\"w-full absolute top-0 left-0 h-2.5 bg-(--discreet-border)\" data-testid=\"progress-bg\" />\n <div\n style={{ '--child-width': `calc(${value}*100%)` } as CSSProperties}\n className=\"w-(--child-width) absolute h-2.5 top-0 left-0 bg-primary\"\n data-testid=\"progress-filled\"\n />\n </div>\n )\n}\n","import * as RadioGroupPrimitive from '@radix-ui/react-radio-group'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nfunction RadioGroup({\n className,\n __e2e_test_id__,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root> & { __e2e_test_id__?: string }) {\n return (\n <RadioGroupPrimitive.Root\n data-test-id={__e2e_test_id__}\n data-slot=\"radio-group\"\n className={cn('grid gap-3', className)}\n {...props}\n />\n )\n}\n\nconst radioGroupVariants = cva(\n 'cursor-pointer border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n {\n variants: {\n circleVariant: {\n default: '',\n grayThick: 'aria-checked:border-muted-foreground aria-checked:border-2',\n },\n size: {\n default: 'size-4',\n sm: 'size-3.5',\n },\n },\n defaultVariants: {\n circleVariant: 'default',\n size: 'default',\n },\n },\n)\n\ntype RadioGroupItemProps = React.ComponentProps<typeof RadioGroupPrimitive.Item> &\n VariantProps<typeof radioGroupVariants>\n\nfunction RadioGroupItem({ className, circleVariant, size, ...props }: RadioGroupItemProps) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(radioGroupVariants({ circleVariant, size, className }))}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <div\n className={`absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full ${\n circleVariant === 'grayThick' ? 'bg-muted-foreground' : 'bg-primary'\n }\n ${size === 'sm' ? 'size-2' : 'size-2.25'}`}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","import { DragHandleDots2Icon } from '@radix-ui/react-icons'\n\nimport * as ResizablePrimitive from 'react-resizable-panels'\n\nimport { cn } from '../lib/utils'\n\nconst ResizablePanelGroup = ({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => (\n <ResizablePrimitive.PanelGroup\n className={cn('flex h-full w-full data-[panel-group-direction=vertical]:flex-col', className)}\n {...props}\n />\n)\n\nconst ResizablePanel = ResizablePrimitive.Panel\n\nconst ResizableHandle = ({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) => (\n <ResizablePrimitive.PanelResizeHandle\n className={cn(\n 'relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90',\n className,\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border\">\n <DragHandleDots2Icon className=\"h-2.5 w-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n)\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n","import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root 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-[1px]',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent p-[1px]',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import * as SheetPrimitive from '@radix-ui/react-dialog'\nimport { Cross2Icon } from '@radix-ui/react-icons'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Sheet = SheetPrimitive.Root\n\nconst SheetTrigger = SheetPrimitive.Trigger\n\nconst SheetClose = SheetPrimitive.Close\n\nconst SheetPortal = SheetPrimitive.Portal\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n ref={ref}\n />\n))\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName\n\nconst sheetVariants = cva(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out',\n {\n variants: {\n side: {\n top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom:\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n right:\n 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n },\n },\n defaultVariants: {\n side: 'right',\n },\n },\n)\n\ntype SheetContentProps = React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content> &\n VariantProps<typeof sheetVariants>\n\nconst SheetContent = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Content>, SheetContentProps>(\n ({ side = 'right', className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content ref={ref} className={cn(sheetVariants({ side }), className)} {...props}>\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <Cross2Icon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n {children}\n </SheetPrimitive.Content>\n </SheetPortal>\n ),\n)\nSheetContent.displayName = SheetPrimitive.Content.displayName\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n)\nSheetHeader.displayName = 'SheetHeader'\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} {...props} />\n)\nSheetFooter.displayName = 'SheetFooter'\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title ref={ref} className={cn('text-lg font-semibold text-foreground', className)} {...props} />\n))\nSheetTitle.displayName = SheetPrimitive.Title.displayName\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n))\nSheetDescription.displayName = SheetPrimitive.Description.displayName\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import { cn } from '../lib/utils'\n\nfunction Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('animate-pulse rounded-md bg-primary/10', className)} {...props} />\n}\n\nexport { Skeleton }\n","import * as SliderPrimitive from '@radix-ui/react-slider'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport type { CSSProperties } from 'react'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst sliderVariants = cva('absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full', {\n variants: {\n sliderVariant: {\n default: 'bg-primary',\n gray: 'bg-muted-foreground',\n },\n },\n defaultVariants: {\n sliderVariant: 'default',\n },\n})\n\nconst knobVariants = cva(\n 'bg-background block size-4 shrink-0 rounded-full border shadow-sm transition-[color,box-shadow] focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n knobVariant: {\n default: 'border-primary ring-ring/50 hover:ring-4 focus-visible:ring-4',\n gray: 'border-muted-foreground border-2',\n },\n },\n defaultVariants: {\n knobVariant: 'default',\n },\n },\n)\n\ntype SliderProps = React.ComponentProps<typeof SliderPrimitive.Root> &\n VariantProps<typeof sliderVariants> &\n VariantProps<typeof knobVariants> & { knobSize?: number }\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n sliderVariant,\n knobVariant,\n knobSize,\n ...props\n}: SliderProps) {\n const _values = React.useMemo(() => {\n if (Array.isArray(value)) {\n return value\n } else if (Array.isArray(defaultValue)) {\n return defaultValue\n }\n return [min, max]\n }, [value, defaultValue, min, max])\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n 'cursor-pointer relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col',\n className,\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n 'bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5',\n )}\n >\n <SliderPrimitive.Range data-slot=\"slider-range\" className={cn(sliderVariants({ sliderVariant }))} />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className={cn(\n knobVariants({\n knobVariant,\n }),\n knobSize ? 'size-(--knob-size)' : '',\n )}\n style={{ '--knob-size': `${knobSize}px` } as CSSProperties}\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider, sliderVariants, knobVariants }\n","import * as SwitchPrimitives from '@radix-ui/react-switch'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","import { Slot } from '@radix-ui/react-slot'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport type { ComponentProps } from 'react'\n\nimport { cn } from '../lib/utils'\n\nfunction Tabs({ className, ...props }: ComponentProps<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" className={cn('flex flex-col gap-2', className)} {...props} />\n}\n\nconst tabsListVariants = cva('w-fit text-muted-foreground inline-flex items-center justify-center rounded-lg', {\n variants: {\n variant: {\n default: 'bg-muted p-[3px]',\n protocol: 'bg-transparent',\n },\n size: {\n default: 'h-9',\n sm: 'h-6',\n lg: 'h-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n})\n\nfunction TabsList({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: ComponentProps<typeof TabsPrimitive.List> & VariantProps<typeof tabsListVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : TabsPrimitive.List\n return <Comp data-slot=\"tabs-list\" className={cn(tabsListVariants({ variant, size, className }))} {...props} />\n}\n\nconst tabsTriggerVariants = cva(\n \"h-[100%] text-lg inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 text-foreground\",\n {\n variants: {\n variant: {\n default:\n 'h-[calc(100%-1px)] flex-1 rounded-md border border-transparent px-2 py-1 transition-[color,box-shadow] dark:text-muted-foreground data-[state=active]:bg-background dark:data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 data-[state=active]:shadow-sm',\n protocol:\n 'bg-transparent border-b-2 border-b-transparent hover:text-primary hover:border-b-primary data-[state=active]:border-b-primary data-[state=active]:text-primary',\n },\n },\n },\n)\n\nfunction TabsTrigger({\n className,\n variant,\n asChild = false,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Trigger> & VariantProps<typeof tabsTriggerVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : TabsPrimitive.Trigger\n return <Comp data-slot=\"tabs-trigger\" className={cn(tabsTriggerVariants({ variant, className }))} {...props} />\n}\n\nfunction TabsContent({ className, ...props }: ComponentProps<typeof TabsPrimitive.Content>) {\n return <TabsPrimitive.Content data-slot=\"tabs-content\" className={cn('flex-1 outline-none', className)} {...props} />\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import * as TogglePrimitive from '@radix-ui/react-toggle'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst toggleVariants = cva(\n 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline: 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n default: 'h-9 px-3',\n sm: 'h-8 px-2',\n lg: 'h-10 px-3',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nconst Toggle = React.forwardRef<\n React.ElementRef<typeof TogglePrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n <TogglePrimitive.Root ref={ref} className={cn(toggleVariants({ variant, size, className }))} {...props} />\n))\n\nToggle.displayName = TogglePrimitive.Root.displayName\n\nexport { Toggle, toggleVariants }\n","import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group'\n\nimport { type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport { cn } from '../lib/utils'\nimport { toggleVariants } from '../toggle/toggle'\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n size: 'default',\n variant: 'default',\n})\n\nconst ToggleGroup = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => {\n const memoizedValue = useMemo(() => ({ variant, size }), [size, variant])\n return (\n <ToggleGroupPrimitive.Root ref={ref} className={cn('flex items-center justify-center gap-1', className)} {...props}>\n <ToggleGroupContext.Provider value={memoizedValue}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n})\n\nToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName\n\nconst ToggleGroupItem = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>\n>(({ className, children, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className,\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n})\n\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName\n\nexport { ToggleGroup, ToggleGroupItem }\n"],"mappings":"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"}
|