shadcn-datagrid 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1599 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +173 -0
- package/dist/index.d.ts +173 -0
- package/dist/index.js +1569 -0
- package/dist/index.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/checkbox.tsx","../src/components/ui/table.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/button.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/DataGrid/DataGridActions.tsx","../src/components/DataGrid/formatters.ts","../src/components/DataGrid/DataGridChildRow.tsx","../src/components/ui/context-menu.tsx","../src/components/DataGrid/DataGridContextMenu.tsx","../src/components/ui/select.tsx","../src/components/DataGrid/DataGridPagination.tsx","../src/components/ui/skeleton.tsx","../src/components/DataGrid/DataGridSkeleton.tsx","../src/components/DataGrid/exportUtils.ts","../src/components/DataGrid/DataGridExport.tsx","../src/components/DataGrid/DataGridToolbar.tsx","../src/components/DataGrid/index.tsx"],"names":["CheckboxPrimitive","jsx","jsxs","formatDate","ContextMenuPrimitive","SelectPrimitive","CheckIcon","useCallback","useEffect","ChevronRight","_","Fragment","useState","useRef","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","'use client'\n\nimport * as React from 'react'\nimport { CheckIcon } from 'lucide-react'\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui'\n\nimport { cn } from '../../lib/utils'\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-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 size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import * as React from 'react'\n\nimport { cn } from '../../lib/utils'\n\nfunction Table({ className, ...props }: React.ComponentProps<'table'>) {\n return (\n <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\">\n <table data-slot=\"table\" className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return (\n <thead data-slot=\"table-header\" className={cn('[&_tr]:border-b', className)} {...props} />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn('bg-muted/50 border-t font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n 'hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn('text-muted-foreground mt-4 text-sm', className)}\n {...props}\n />\n )\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }\n","import * as React from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\n\nimport { cn } from '../../lib/utils'\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'bg-foreground text-background 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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance',\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../../lib/utils'\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium 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 hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white 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 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 },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n 'icon-xs': \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'\n\nimport { cn } from '../../lib/utils'\n\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: 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}: 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 }: 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}: 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({\n ...props\n}: 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}: 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}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }) {\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}: 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 }: 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}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & { inset?: boolean }) {\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 [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\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}: 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 { MoreHorizontal } from 'lucide-react'\n\nimport { Button } from '../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/tooltip'\nimport { type ActionConfig, type ActionItem } from '../../types/dataGrid'\n\ninterface ActionIconButtonProps<T> {\n action: ActionItem<T>\n data: T\n}\n\nfunction ActionIconButton<T>({ action, data }: ActionIconButtonProps<T>) {\n const isDisabled = action.disabled?.(data) ?? false\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n disabled={isDisabled}\n className={`dg-action-btn h-7 w-7 ${action.variant === 'destructive' ? 'hover:text-destructive' : ''}`}\n onClick={(e) => {\n e.stopPropagation()\n action.onClick(data)\n }}\n >\n {action.icon}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{action.label}</p>\n </TooltipContent>\n </Tooltip>\n )\n}\n\ninterface DataGridActionsProps<T> {\n config: ActionConfig<T>\n data: T\n isHovered?: boolean\n}\n\nexport function DataGridActions<T>({ config, data, isHovered = true }: DataGridActionsProps<T>) {\n const { mode, showOnHover, actions } = config\n const visibleActions = actions.filter((action) => !action.hidden || !action.hidden(data))\n\n if (visibleActions.length === 0) return null\n\n if (mode === 'dropdown') {\n const shouldShow = !showOnHover || isHovered\n return (\n <div\n className=\"dg-actions dg-actions--dropdown flex justify-end\"\n style={{ opacity: shouldShow ? 1 : 0, transition: 'opacity 0.15s' }}\n >\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"dg-actions__trigger h-8 w-8 p-0\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"dg-actions__content\">\n {visibleActions.map((action, index) => {\n const isDisabled = action.disabled?.(data) ?? false\n return (\n <div key={action.label}>\n {index > 0 &&\n visibleActions[index - 1]?.variant !== action.variant &&\n action.variant === 'destructive' && <DropdownMenuSeparator />}\n <DropdownMenuItem\n disabled={isDisabled}\n onClick={() => action.onClick(data)}\n className={\n action.variant === 'destructive'\n ? 'text-destructive focus:text-destructive'\n : ''\n }\n >\n {action.icon && <span className=\"mr-2\">{action.icon}</span>}\n {action.label}\n </DropdownMenuItem>\n </div>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n }\n\n return (\n <TooltipProvider>\n <div className=\"dg-actions dg-actions--icons flex justify-end gap-1\">\n {visibleActions.map((action) => (\n <ActionIconButton key={action.label} action={action} data={data} />\n ))}\n </div>\n </TooltipProvider>\n )\n}\n","import { format as formatDate, parseISO } from 'date-fns'\n\nimport { type FormatType } from '../../types/dataGrid'\n\nexport function formatCurrency(value: unknown, locale = 'en-US', currency = 'USD'): string {\n const num = typeof value === 'number' ? value : parseFloat(String(value))\n if (Number.isNaN(num)) return '-'\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(num)\n}\n\nexport function formatNumber(value: unknown, locale = 'en-US'): string {\n const num = typeof value === 'number' ? value : parseFloat(String(value))\n if (Number.isNaN(num)) return '-'\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(num)\n}\n\nexport function formatDateValue(value: unknown, dateFormat = 'dd MMM yyyy'): string {\n if (!value) return '-'\n try {\n const date = typeof value === 'string' ? parseISO(value) : (value as Date)\n return formatDate(date, dateFormat)\n } catch {\n return String(value)\n }\n}\n\nexport function formatValue(value: unknown, formatType?: FormatType, type?: string): string {\n if (value === null || value === undefined) return '-'\n\n if (type === 'date' || formatType?.includes('MMM') || formatType?.includes('yyyy')) {\n return formatDateValue(value, formatType || 'dd MMM yyyy')\n }\n if (formatType === 'C2') return formatCurrency(value)\n if (formatType === 'N2') return formatNumber(value)\n if (type === 'boolean') return value ? 'Yes' : 'No'\n\n return String(value)\n}\n","import { useCallback, useEffect, useReducer } from 'react'\n\nimport { ChevronRight, Loader2 } from 'lucide-react'\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../ui/table'\nimport { cn } from '../../lib/utils'\nimport { type ChildRowConfig } from '../../types/dataGrid'\n\nimport { formatValue } from './formatters'\n\ninterface AsyncState {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any[] | null\n isLoading: boolean\n error: string | null\n}\n\ntype AsyncAction =\n | { type: 'FETCH_START' }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | { type: 'FETCH_SUCCESS'; data: any[] }\n | { type: 'FETCH_ERROR'; error: string }\n\nfunction asyncReducer(_state: AsyncState, action: AsyncAction): AsyncState {\n switch (action.type) {\n case 'FETCH_START':\n return { data: null, isLoading: true, error: null }\n case 'FETCH_SUCCESS':\n return { data: action.data, isLoading: false, error: null }\n case 'FETCH_ERROR':\n return { data: null, isLoading: false, error: action.error }\n }\n}\n\ninterface DataGridChildRowProps<T> {\n parentRow: T\n config: ChildRowConfig<T>\n parentColSpan: number\n className?: string\n}\n\nexport function DataGridChildRow<T>({\n parentRow,\n config,\n parentColSpan,\n className,\n}: DataGridChildRowProps<T>) {\n const [asyncState, dispatch] = useReducer(asyncReducer, {\n data: null,\n isLoading: false,\n error: null,\n })\n\n const { childColumns, getChildData, fetchChildData, childKeyField = 'id' } = config\n const inlineData = getChildData?.(parentRow)\n\n useEffect(() => {\n if (!inlineData && fetchChildData) {\n dispatch({ type: 'FETCH_START' })\n fetchChildData(parentRow)\n .then((result) => dispatch({ type: 'FETCH_SUCCESS', data: result }))\n .catch(() => dispatch({ type: 'FETCH_ERROR', error: 'Failed to load child data' }))\n }\n }, [parentRow, fetchChildData, inlineData])\n\n const childData = inlineData ?? asyncState.data\n const columns = childColumns ?? []\n\n if (asyncState.isLoading) {\n return (\n <TableRow className={cn('dg-child-row dg-child-row--loading hover:bg-transparent', className)}>\n <TableCell colSpan={parentColSpan}>\n <div className=\"flex items-center gap-2 py-4 px-8 text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n <span className=\"text-sm\">Loading...</span>\n </div>\n </TableCell>\n </TableRow>\n )\n }\n\n if (asyncState.error) {\n return (\n <TableRow className={cn('dg-child-row dg-child-row--error hover:bg-transparent', className)}>\n <TableCell colSpan={parentColSpan}>\n <div className=\"py-4 px-8 text-sm text-destructive\">{asyncState.error}</div>\n </TableCell>\n </TableRow>\n )\n }\n\n if (!childData || childData.length === 0) {\n return (\n <TableRow className={cn('dg-child-row dg-child-row--empty hover:bg-transparent', className)}>\n <TableCell colSpan={parentColSpan}>\n <div className=\"py-4 px-8 text-sm text-muted-foreground italic\">No child records</div>\n </TableCell>\n </TableRow>\n )\n }\n\n return (\n <TableRow className={cn('dg-child-row hover:bg-transparent', className)}>\n <TableCell colSpan={parentColSpan} className=\"p-0\">\n <div className=\"dg-child-row__container ml-10 mr-4 my-2\">\n <div className=\"rounded-md border border-border/50 overflow-hidden shadow-[0_1px_3px_rgba(0,0,0,0.04)] bg-muted/30\">\n <Table className=\"dg-child-row__table\">\n <TableHeader>\n <TableRow className=\"dg-child-row__header-row bg-muted/80 hover:bg-muted/80 border-b border-border\">\n {columns.map((col) => (\n <TableHead\n key={String(col.field)}\n className=\"dg-child-row__header-cell text-[11px] font-bold text-muted-foreground/90 uppercase tracking-wider h-8\"\n style={{\n width: typeof col.width === 'number' ? `${col.width}px` : col.width,\n minWidth: col.minWidth,\n maxWidth: col.maxWidth,\n }}\n >\n {col.headerText}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {childData.map(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (childRow: Record<string, any>, childIndex: number) => (\n <TableRow\n key={\n childRow[childKeyField] != null\n ? String(childRow[childKeyField])\n : childIndex\n }\n className={cn('dg-child-row__row', childIndex % 2 === 1 && 'bg-muted/20')}\n >\n {columns.map((col) => {\n const value = childRow[col.field as string]\n return (\n <TableCell\n key={String(col.field)}\n className=\"dg-child-row__cell text-xs py-2\"\n style={{\n width: typeof col.width === 'number' ? `${col.width}px` : col.width,\n minWidth: col.minWidth,\n maxWidth: col.maxWidth,\n }}\n >\n {col.template\n ? col.template(childRow as never, childIndex)\n : formatValue(value, col.format, col.type)}\n </TableCell>\n )\n })}\n </TableRow>\n )\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n </TableCell>\n </TableRow>\n )\n}\n\ninterface DataGridExpanderProps {\n isExpanded: boolean\n onToggle: () => void\n className?: string\n}\n\nexport function DataGridExpander({ isExpanded, onToggle, className }: DataGridExpanderProps) {\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n onToggle()\n },\n [onToggle]\n )\n\n return (\n <button\n type=\"button\"\n className={cn(\n 'dg-expander inline-flex items-center justify-center h-6 w-6 rounded-sm hover:bg-muted transition-transform duration-200',\n className\n )}\n onClick={handleClick}\n aria-label={isExpanded ? 'Collapse row' : 'Expand row'}\n >\n <ChevronRight\n className={cn('h-4 w-4 transition-transform duration-200', isExpanded && 'rotate-90')}\n />\n </button>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'\nimport { ContextMenu as ContextMenuPrimitive } from 'radix-ui'\n\nimport { cn } from '../../lib/utils'\n\nfunction ContextMenu({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n}\n\nfunction ContextMenuGroup({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n}\n\nfunction ContextMenuSub({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return <ContextMenuPrimitive.RadioGroup data-slot=\"context-menu-radio-group\" {...props} />\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & { inset?: boolean }) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-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 [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n )\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-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-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-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 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md',\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n variant?: 'default' | 'destructive'\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-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 ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-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 <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-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 <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & { inset?: boolean }) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn('text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className)}\n {...props}\n />\n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n )\n}\n\nfunction ContextMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)}\n {...props}\n />\n )\n}\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 { type ReactNode } from 'react'\n\nimport {\n ContextMenu,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuTrigger,\n} from '../ui/context-menu'\nimport { cn } from '../../lib/utils'\nimport { type ContextMenuItem as ContextMenuItemType } from '../../types/dataGrid'\n\ninterface DataGridContextMenuProps<T> {\n items: ContextMenuItemType<T>[]\n data: T\n children: ReactNode\n className?: string\n}\n\nexport function DataGridContextMenu<T>({\n items,\n data,\n children,\n className,\n}: DataGridContextMenuProps<T>) {\n if (items.length === 0) return <>{children}</>\n\n const processedItems = items.map((item, index) => {\n if (item.type === 'separator' || item.type === 'label') {\n return { item, index, isVisible: true }\n }\n const isHidden = item.hidden?.(data) ?? false\n return { item, index, isVisible: !isHidden }\n })\n\n const visibleItems = processedItems.filter((processedItem, idx) => {\n const { item, isVisible } = processedItem\n if (item.type !== 'separator') return isVisible\n\n const hasVisibleItemsAfter = processedItems\n .slice(idx + 1)\n .some((pi) => pi.item.type !== 'separator' && pi.isVisible)\n const hasVisibleItemsBefore = processedItems\n .slice(0, idx)\n .some((pi) => pi.item.type !== 'separator' && pi.isVisible)\n\n return hasVisibleItemsAfter && hasVisibleItemsBefore\n })\n\n return (\n <ContextMenu>\n <ContextMenuTrigger asChild>{children}</ContextMenuTrigger>\n <ContextMenuContent className={cn('dg-context-menu w-56', className)}>\n {visibleItems.map(({ item, index }) => {\n if (item.type === 'separator') {\n return (\n <ContextMenuSeparator\n key={`sep-${String(index)}`}\n className=\"dg-context-menu__separator\"\n />\n )\n }\n if (item.type === 'label') {\n return (\n <ContextMenuLabel key={`label-${String(index)}`} className=\"dg-context-menu__label\">\n {item.label}\n </ContextMenuLabel>\n )\n }\n const isDisabled = item.disabled?.(data) ?? false\n return (\n <ContextMenuItem\n key={`item-${item.label}`}\n disabled={isDisabled}\n onClick={() => item.onClick(data)}\n className={cn(\n 'dg-context-menu__item',\n item.variant === 'destructive' && 'text-destructive focus:text-destructive'\n )}\n >\n {item.icon && <span className=\"dg-context-menu__item-icon mr-2\">{item.icon}</span>}\n {item.label}\n </ContextMenuItem>\n )\n })}\n </ContextMenuContent>\n </ContextMenu>\n )\n}\n","import * as React from 'react'\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\nimport { Select as SelectPrimitive } from 'radix-ui'\n\nimport { cn } from '../../lib/utils'\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\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\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & { size?: 'sm' | 'default' }) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground 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 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: 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\nfunction SelectContent({\n className,\n children,\n position = 'item-aligned',\n align = 'center',\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 position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n align={align}\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({\n className,\n ...props\n}: 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\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\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-sm py-1.5 pr-8 pl-2 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 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\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({\n className,\n ...props\n}: 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\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'\n\nimport { Button } from '../ui/button'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../ui/select'\nimport { cn } from '../../lib/utils'\nimport { type PaginationConfig } from '../../types/dataGrid'\n\ninterface DataGridPaginationProps {\n config: PaginationConfig\n className?: string\n}\n\ntype PaginationLayout = 'full' | 'compact' | 'minimal'\n\nfunction getLayout(width: number): PaginationLayout {\n if (width >= 600) return 'full'\n if (width >= 400) return 'compact'\n return 'minimal'\n}\n\nexport function DataGridPagination({ config, className }: DataGridPaginationProps) {\n const {\n page,\n pageSize,\n total,\n pageSizeOptions = [5, 10, 15, 20, 25],\n onPageChange,\n onPageSizeChange,\n } = config\n\n const totalPages = Math.ceil(total / pageSize) || 1\n const containerRef = useRef<HTMLDivElement>(null)\n const [layout, setLayout] = useState<PaginationLayout>('full')\n\n const updateLayout = useCallback(() => {\n if (containerRef.current) {\n setLayout(getLayout(containerRef.current.offsetWidth))\n }\n }, [])\n\n useEffect(() => {\n updateLayout()\n const observer = new ResizeObserver(updateLayout)\n if (containerRef.current) observer.observe(containerRef.current)\n return () => observer.disconnect()\n }, [updateLayout])\n\n return (\n <div\n ref={containerRef}\n className={cn(\n 'dg-pagination flex flex-wrap items-center gap-4 mt-4 pb-2 px-2',\n layout === 'minimal' ? 'justify-center' : 'justify-between',\n className\n )}\n >\n {layout !== 'minimal' && (\n <div className=\"dg-pagination__page-size flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {layout === 'full' ? 'Rows per page:' : 'Rows:'}\n </span>\n <Select\n value={pageSize.toString()}\n onValueChange={(value) => {\n onPageSizeChange(Number(value))\n onPageChange(1)\n }}\n >\n <SelectTrigger className=\"dg-pagination__page-size-trigger w-[80px] h-8\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((size) => (\n <SelectItem key={size} value={size.toString()}>\n {size}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {layout !== 'minimal' && (\n <div className=\"dg-pagination__info flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {(page - 1) * pageSize + 1}–{Math.min(page * pageSize, total)} of {total}\n </span>\n </div>\n )}\n\n <div className=\"dg-pagination__nav flex items-center gap-1\">\n {layout === 'full' && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"dg-pagination__btn h-8 w-8\"\n onClick={() => onPageChange(1)}\n disabled={page === 1}\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n )}\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"dg-pagination__btn h-8 w-8\"\n onClick={() => onPageChange(Math.max(page - 1, 1))}\n disabled={page === 1}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <span className=\"dg-pagination__page-info text-sm px-2 whitespace-nowrap\">\n {layout === 'full'\n ? `Page ${String(page)} of ${String(totalPages)}`\n : `${String(page)}/${String(totalPages)}`}\n </span>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"dg-pagination__btn h-8 w-8\"\n onClick={() => onPageChange(Math.min(page + 1, totalPages))}\n disabled={page === totalPages}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n {layout === 'full' && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"dg-pagination__btn h-8 w-8\"\n onClick={() => onPageChange(totalPages)}\n disabled={page === totalPages}\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '../../lib/utils'\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn('bg-accent animate-pulse rounded-md', className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import { useMemo } from 'react'\n\nimport { Skeleton } from '../ui/skeleton'\nimport { TableCell, TableRow } from '../ui/table'\nimport { type ColumnConfig } from '../../types/dataGrid'\n\ninterface DataGridSkeletonProps<T> {\n columns: ColumnConfig<T>[]\n rowCount?: number\n showCheckbox?: boolean\n showActions?: boolean\n showExpander?: boolean\n}\n\nexport function DataGridSkeleton<T>({\n columns,\n rowCount = 5,\n showCheckbox = false,\n showActions = false,\n showExpander = false,\n}: DataGridSkeletonProps<T>) {\n const visibleColumns = columns.filter((col) => col.visible !== false)\n\n const skeletonWidths = useMemo(\n () =>\n Array.from({ length: rowCount }, (_, rowIdx) =>\n visibleColumns.map((_, colIdx) => `${(((rowIdx + 1) * 37 + (colIdx + 1) * 53) % 40) + 50}%`)\n ),\n [rowCount, visibleColumns]\n )\n\n return (\n <>\n {Array.from({ length: rowCount }).map((_, rowIndex) => (\n <TableRow\n key={`skeleton-row-${String(rowIndex)}`}\n className=\"dg-row dg-row--skeleton hover:bg-transparent\"\n >\n {showExpander && (\n <TableCell className=\"dg-cell dg-cell--expander w-[40px]\">\n <Skeleton className=\"h-4 w-4\" />\n </TableCell>\n )}\n {showCheckbox && (\n <TableCell className=\"dg-cell dg-cell--checkbox w-[40px]\">\n <Skeleton className=\"h-4 w-4\" />\n </TableCell>\n )}\n {visibleColumns.map((column, colIndex) => {\n const width = typeof column.width === 'number' ? `${column.width}px` : column.width\n return (\n <TableCell\n key={`skeleton-cell-${String(column.field)}`}\n className=\"dg-cell\"\n style={{ width, minWidth: column.minWidth, maxWidth: column.maxWidth }}\n >\n <Skeleton\n className=\"h-4\"\n style={{ width: skeletonWidths[rowIndex]?.[colIndex] ?? '60%' }}\n />\n </TableCell>\n )\n })}\n {showActions && (\n <TableCell className=\"dg-cell dg-cell--actions w-[80px]\">\n <Skeleton className=\"h-6 w-6 ml-auto\" />\n </TableCell>\n )}\n </TableRow>\n ))}\n </>\n )\n}\n","import { isValidElement, type ReactNode } from 'react'\n\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nimport { type ColumnConfig } from '../../types/dataGrid'\n\nimport { formatValue } from './formatters'\n\nfunction stripHtml(html: string): string {\n const doc = new DOMParser().parseFromString(html, 'text/html')\n return doc.body.textContent?.trim() ?? ''\n}\n\nfunction reactNodeToText(node: ReactNode): string {\n if (node === null || node === undefined) return ''\n if (typeof node === 'string') return node\n if (typeof node === 'number' || typeof node === 'boolean') return String(node)\n if (isValidElement(node)) {\n try {\n return stripHtml(renderToStaticMarkup(node))\n } catch {\n return ''\n }\n }\n return String(node)\n}\n\nexport function getCellExportValue<T extends object>(\n row: T,\n col: ColumnConfig<T>,\n rowIndex: number\n): string {\n if (col.exportFormatter) return col.exportFormatter(row)\n if (col.template) {\n const rendered = col.template(row, rowIndex)\n return reactNodeToText(rendered)\n }\n const value = row[col.field as keyof T]\n return String(formatValue(value, col.format, col.type))\n}\n\nexport function exportToCsv<T extends object>(\n data: T[],\n columns: ColumnConfig<T>[],\n fileName: string\n) {\n const visibleColumns = columns.filter((col) => col.visible !== false)\n const headerRow = visibleColumns.map((col) => `\"${col.headerText}\"`).join(',')\n const dataRows = data.map((row, rowIndex) =>\n visibleColumns\n .map((col) => {\n const formatted = getCellExportValue(row, col, rowIndex)\n return `\"${formatted.replace(/\"/g, '\"\"')}\"`\n })\n .join(',')\n )\n const csv = [headerRow, ...dataRows].join('\\n')\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' })\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = `${fileName}.csv`\n link.click()\n URL.revokeObjectURL(url)\n}\n\nexport function exportToPrint<T extends object>(data: T[], columns: ColumnConfig<T>[]) {\n const visibleColumns = columns.filter((col) => col.visible !== false)\n\n const tableHtml = `\n <!DOCTYPE html>\n <html>\n <head>\n <title>Print</title>\n <style>\n body { font-family: Inter, Arial, sans-serif; padding: 20px; }\n table { border-collapse: collapse; width: 100%; font-size: 12px; }\n th, td { border: 1px solid #ddd; padding: 8px 12px; text-align: left; }\n th { background-color: #f5f5f5; font-weight: 600; }\n tr:nth-child(even) { background-color: #fafafa; }\n @media print {\n body { padding: 0; }\n th { background-color: #f5f5f5 !important; -webkit-print-color-adjust: exact; }\n }\n </style>\n </head>\n <body>\n <table>\n <thead>\n <tr>${visibleColumns.map((col) => `<th>${col.headerText}</th>`).join('')}</tr>\n </thead>\n <tbody>\n ${data\n .map(\n (row, rowIndex) => `\n <tr>\n ${visibleColumns.map((col) => `<td>${getCellExportValue(row, col, rowIndex)}</td>`).join('')}\n </tr>\n `\n )\n .join('')}\n </tbody>\n </table>\n </body>\n </html>\n `\n\n const iframe = document.createElement('iframe')\n iframe.style.cssText = 'position:fixed;width:0;height:0;border:none;opacity:0'\n document.body.appendChild(iframe)\n\n const iframeDoc = iframe.contentDocument ?? iframe.contentWindow?.document\n if (!iframeDoc) {\n document.body.removeChild(iframe)\n return\n }\n\n iframeDoc.open()\n iframeDoc.write(tableHtml)\n iframeDoc.close()\n\n iframe.onload = () => {\n iframe.contentWindow?.print()\n setTimeout(() => document.body.removeChild(iframe), 1000)\n }\n}\n","import { useCallback } from 'react'\n\nimport { Download, FileSpreadsheet, Printer } from 'lucide-react'\n\nimport { Button } from '../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu'\nimport { cn } from '../../lib/utils'\nimport { type ColumnConfig, type ExportConfig, type ExportFormat } from '../../types/dataGrid'\n\nimport { exportToCsv, exportToPrint } from './exportUtils'\n\ninterface DataGridExportProps<T extends object> {\n config: ExportConfig<T>\n data: T[]\n columns: ColumnConfig<T>[]\n className?: string\n}\n\nfunction getExportIcon(format: ExportFormat) {\n switch (format) {\n case 'csv':\n return <FileSpreadsheet className=\"h-4 w-4\" />\n case 'print':\n return <Printer className=\"h-4 w-4\" />\n default:\n return <Download className=\"h-4 w-4\" />\n }\n}\n\nfunction getExportLabel(format: ExportFormat) {\n switch (format) {\n case 'csv':\n return 'Export as CSV'\n case 'print':\n return 'Print'\n default:\n return `Export as ${format.toUpperCase()}`\n }\n}\n\nexport function DataGridExport<T extends object>({\n config,\n data,\n columns,\n className,\n}: DataGridExportProps<T>) {\n const { formats = ['csv', 'print'], fileName = 'export' } = config\n\n const handleExport = useCallback(\n (format: ExportFormat) => {\n switch (format) {\n case 'csv':\n exportToCsv(data, columns, fileName)\n break\n case 'print':\n exportToPrint(data, columns)\n break\n default:\n config.onCustomExport?.(format, data, columns)\n break\n }\n },\n [data, columns, fileName, config]\n )\n\n if (formats.length === 1) {\n const format = formats[0]!\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className={cn('dg-export__btn gap-2', className)}\n onClick={() => handleExport(format)}\n >\n {getExportIcon(format)}\n {getExportLabel(format)}\n </Button>\n )\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className={cn('dg-export__btn gap-2', className)}>\n <Download className=\"h-4 w-4\" />\n Export\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"dg-export__content\">\n {formats.map((format) => (\n <DropdownMenuItem\n key={format}\n onClick={() => handleExport(format)}\n className=\"dg-export__item gap-2\"\n >\n {getExportIcon(format)}\n {getExportLabel(format)}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { type ReactNode } from 'react'\n\nimport { cn } from '../../lib/utils'\nimport { type BulkActionConfig, type ColumnConfig, type ExportConfig } from '../../types/dataGrid'\n\nimport { DataGridExport } from './DataGridExport'\n\ninterface DataGridToolbarProps<T extends object> {\n showExport: boolean\n showBulkActions: boolean\n selectedCount: number\n bulkActionConfig?: BulkActionConfig<T>\n exportConfig?: ExportConfig<T>\n data: T[]\n columns: ColumnConfig<T>[]\n getSelectedData: () => T[]\n classNames?: {\n toolbar?: string\n exportToolbar?: string\n }\n}\n\nexport function DataGridToolbar<T extends object>({\n showExport,\n showBulkActions,\n selectedCount,\n bulkActionConfig,\n exportConfig,\n data,\n columns,\n getSelectedData,\n classNames = {},\n}: DataGridToolbarProps<T>): ReactNode {\n if (!showExport && !(showBulkActions && selectedCount > 0)) return null\n\n return (\n <div className={cn('dg-toolbar flex items-center justify-between gap-2', classNames.toolbar)}>\n {showBulkActions && selectedCount > 0 && bulkActionConfig && (\n <div className=\"dg-toolbar__bulk flex items-center gap-2 p-2 bg-muted/50 rounded-md flex-1\">\n <span className=\"text-sm text-muted-foreground\">{selectedCount} item(s) selected</span>\n <div className=\"flex gap-2 ml-auto\">\n {bulkActionConfig.actions.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n className={cn(\n 'dg-toolbar__bulk-btn inline-flex items-center gap-1 px-3 py-1.5 text-sm rounded-md transition-colors',\n action.variant === 'destructive'\n ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90'\n : 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={() => action.onClick(getSelectedData())}\n >\n {action.icon}\n {action.label}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {showExport && exportConfig && (\n <div className={cn('dg-toolbar__export ml-auto', classNames.exportToolbar)}>\n <DataGridExport config={exportConfig} data={data} columns={columns} />\n </div>\n )}\n </div>\n )\n}\n","/* eslint-disable max-lines */\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { ChevronDown, ChevronUp, ChevronsUpDown } from 'lucide-react'\n\nimport { Checkbox } from '../ui/checkbox'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../ui/table'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip'\nimport { cn } from '../../lib/utils'\nimport {\n type ColumnConfig,\n type DataGridProps,\n type SortConfig,\n type TextAlign,\n type TooltipConfig,\n} from '../../types/dataGrid'\n\nimport { DataGridActions } from './DataGridActions'\nimport { DataGridChildRow, DataGridExpander } from './DataGridChildRow'\nimport { DataGridContextMenu } from './DataGridContextMenu'\nimport { DataGridPagination } from './DataGridPagination'\nimport { DataGridSkeleton } from './DataGridSkeleton'\nimport { DataGridToolbar } from './DataGridToolbar'\nimport { formatValue } from './formatters'\n\nfunction getTextAlign(align?: TextAlign): 'left' | 'right' | 'center' {\n switch (align) {\n case 'Right':\n return 'right'\n case 'Center':\n return 'center'\n default:\n return 'left'\n }\n}\n\nfunction getJustifyContent(align?: TextAlign): 'flex-start' | 'flex-end' | 'center' {\n switch (align) {\n case 'Right':\n return 'flex-end'\n case 'Center':\n return 'center'\n default:\n return 'flex-start'\n }\n}\n\ninterface DataGridCellContentProps<T> {\n row: T\n column: ColumnConfig<T>\n children: React.ReactNode\n}\n\nfunction DataGridCellContentInner<T extends object>({\n row,\n column,\n children,\n}: DataGridCellContentProps<T>) {\n const tooltipCfg = column.tooltip\n\n if (!tooltipCfg || tooltipCfg === true) {\n return <span className=\"block truncate\">{children}</span>\n }\n\n const config = tooltipCfg as TooltipConfig<T>\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"block truncate\">{children}</span>\n </TooltipTrigger>\n <TooltipContent side={config.side ?? 'top'} className={config.className}>\n {config.content ? config.content(row) : children}\n </TooltipContent>\n </Tooltip>\n )\n}\n\nexport function DataGrid<T extends object>({\n columns,\n data,\n isLoading = false,\n skeletonRowCount = 5,\n pagination,\n actionConfig,\n bulkActionConfig,\n contextMenuItems,\n exportConfig,\n childRowConfig,\n emptyMessage = 'No data found',\n emptyComponent,\n onRowClick,\n className,\n classNames = {},\n keyField = 'id' as keyof T,\n sortConfig: externalSortConfig,\n onSort,\n tableContainerRef: externalContainerRef,\n stickyHeader = false,\n rowHeight,\n maxBodyHeight,\n alternatingRows = true,\n enableColumnResize = false,\n showHeaderBorder = false,\n}: DataGridProps<T>) {\n const [internalSortConfig, setInternalSortConfig] = useState<SortConfig>({\n field: '',\n direction: null,\n })\n const sortConfig = externalSortConfig ?? internalSortConfig\n\n const [selectedRows, setSelectedRows] = useState<Set<string | number>>(new Set())\n const [hoveredRow, setHoveredRow] = useState<string | number | null>(null)\n const [expandedRows, setExpandedRows] = useState<Set<string | number>>(new Set())\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({})\n const [resizingColumn, setResizingColumn] = useState<string | null>(null)\n const resizeStartX = useRef(0)\n const resizeStartWidth = useRef(0)\n const justResized = useRef(false)\n\n const internalContainerRef = useRef<HTMLDivElement>(null)\n const tableContainerRef = externalContainerRef ?? internalContainerRef\n\n const sortedData = useMemo(() => {\n if (onSort || !sortConfig.field || !sortConfig.direction) return data\n return [...data].sort((a, b) => {\n const field = sortConfig.field as keyof T\n const aVal = a[field]\n const bVal = b[field]\n if (aVal == null || bVal == null) return 0\n let cmp = 0\n if (aVal < bVal) cmp = -1\n else if (aVal > bVal) cmp = 1\n return sortConfig.direction === 'desc' ? -cmp : cmp\n })\n }, [data, sortConfig, onSort])\n\n const visibleColumns = useMemo(() => columns.filter((col) => col.visible !== false), [columns])\n\n const showBulkActions = bulkActionConfig?.enabled ?? false\n const showActionColumn = !!actionConfig && actionConfig.actions.length > 0\n const showExpanderColumn = childRowConfig?.enabled ?? false\n const showContextMenu = !!contextMenuItems && contextMenuItems.length > 0\n const showExport = exportConfig?.enabled ?? false\n\n const totalColSpan =\n visibleColumns.length +\n (showBulkActions ? 1 : 0) +\n (showActionColumn ? 1 : 0) +\n (showExpanderColumn ? 1 : 0)\n\n const columnsToRender = visibleColumns.map((column, index) => ({ column, index }))\n\n const handleSort = useCallback(\n (field: string, allowSorting?: boolean) => {\n if (allowSorting === false) return\n setExpandedRows(new Set())\n\n let nextSortConfig: SortConfig\n if (sortConfig.field !== field) {\n nextSortConfig = { field, direction: 'asc' }\n } else if (sortConfig.direction === 'asc') {\n nextSortConfig = { field, direction: 'desc' }\n } else {\n nextSortConfig = { field: '', direction: null }\n }\n\n if (onSort) {\n if (!nextSortConfig.field || !nextSortConfig.direction) {\n onSort(null)\n } else {\n const ordering =\n nextSortConfig.direction === 'desc' ? `-${nextSortConfig.field}` : nextSortConfig.field\n onSort(ordering)\n }\n } else {\n setInternalSortConfig(nextSortConfig)\n }\n },\n [sortConfig, onSort]\n )\n\n const handleSelectAll = useCallback(() => {\n if (selectedRows.size === data.length) {\n setSelectedRows(new Set())\n } else {\n const allKeys = data.map((row) => row[keyField] as string | number)\n setSelectedRows(new Set(allKeys))\n }\n }, [data, keyField, selectedRows.size])\n\n const handleSelectRow = useCallback((key: string | number) => {\n setSelectedRows((prev) => {\n const next = new Set(prev)\n if (next.has(key)) next.delete(key)\n else next.add(key)\n return next\n })\n }, [])\n\n const handleToggleExpand = useCallback((key: string | number) => {\n setExpandedRows((prev) => {\n const next = new Set(prev)\n if (next.has(key)) next.delete(key)\n else next.add(key)\n return next\n })\n }, [])\n\n const getSelectedData = useCallback(\n () => data.filter((row) => selectedRows.has(row[keyField] as string | number)),\n [data, keyField, selectedRows]\n )\n\n const getColumnWidth = useCallback(\n (column: ColumnConfig<T>): number => {\n const field = String(column.field)\n if (columnWidths[field] !== undefined) return columnWidths[field]\n if (typeof column.width === 'number') return column.width\n if (typeof column.width === 'string') {\n const parsed = parseInt(column.width, 10)\n return isNaN(parsed) ? 150 : parsed\n }\n return 150\n },\n [columnWidths]\n )\n\n const handleResizeStart = useCallback(\n (e: React.MouseEvent, column: ColumnConfig<T>) => {\n e.preventDefault()\n e.stopPropagation()\n\n const field = String(column.field)\n const currentWidth = getColumnWidth(column)\n resizeStartX.current = e.clientX\n resizeStartWidth.current = currentWidth\n setResizingColumn(field)\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const diff = moveEvent.clientX - resizeStartX.current\n const minW = column.minWidth ?? 20\n const newWidth = Math.max(minW, resizeStartWidth.current + diff)\n setColumnWidths((prev) => ({ ...prev, [field]: newWidth }))\n }\n\n const handleMouseUp = () => {\n setResizingColumn(null)\n justResized.current = true\n requestAnimationFrame(() => {\n justResized.current = false\n })\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n },\n [getColumnWidth]\n )\n\n useEffect(() => {\n const root = document.documentElement\n if (resizingColumn) root.classList.add('dg-resizing')\n else root.classList.remove('dg-resizing')\n return () => root.classList.remove('dg-resizing')\n }, [resizingColumn])\n\n const getColumnWidthStr = (column: ColumnConfig<T>): string | undefined => {\n if (enableColumnResize) return `${getColumnWidth(column)}px`\n if (typeof column.width === 'number') return `${column.width}px`\n if (typeof column.width === 'string') return column.width\n return undefined\n }\n\n const renderSortIcon = (column: ColumnConfig<T>) => {\n if (column.allowSorting === false) return null\n const field = String(column.field)\n if (sortConfig.field !== field) {\n return <ChevronsUpDown className=\"dg-sort-icon ml-1 h-3.5 w-3.5 opacity-30\" strokeWidth={2.5} />\n }\n if (sortConfig.direction === 'asc') {\n return <ChevronUp className=\"dg-sort-icon ml-1 h-3.5 w-3.5 text-primary\" strokeWidth={2.5} />\n }\n if (sortConfig.direction === 'desc') {\n return <ChevronDown className=\"dg-sort-icon ml-1 h-3.5 w-3.5 text-primary\" strokeWidth={2.5} />\n }\n return <ChevronsUpDown className=\"dg-sort-icon ml-1 h-3.5 w-3.5 opacity-30\" strokeWidth={2.5} />\n }\n\n const renderCellValue = (row: T, column: ColumnConfig<T>, rowIndex: number) => {\n if (column.template) return column.template(row, rowIndex)\n const value = row[column.field as keyof T]\n const formatted = formatValue(value, column.format, column.type)\n return (\n <DataGridCellContentInner row={row} column={column}>\n {formatted}\n </DataGridCellContentInner>\n )\n }\n\n const renderRow = (row: T, rowIndex: number) => {\n const rowKey = (row[keyField] as string | number) ?? rowIndex\n const isSelected = selectedRows.has(rowKey)\n const isHovered = hoveredRow === rowKey\n const isExpanded = expandedRows.has(rowKey)\n\n const tableRowElement = (\n <TableRow\n key={rowKey}\n className={cn(\n 'dg-row transition-colors',\n isSelected && 'dg-row--selected bg-muted',\n isExpanded && 'dg-row--expanded',\n onRowClick && 'cursor-pointer',\n classNames.row,\n isSelected && classNames.rowSelected,\n isExpanded && classNames.rowExpanded\n )}\n data-state={isSelected ? 'selected' : undefined}\n onClick={() => onRowClick?.(row)}\n onMouseEnter={() => setHoveredRow(rowKey)}\n onMouseLeave={() => setHoveredRow(null)}\n style={rowHeight ? { height: rowHeight } : undefined}\n >\n {showExpanderColumn && (\n <TableCell className={cn('dg-cell dg-cell--expander w-[40px]', classNames.cellExpander)}>\n <DataGridExpander isExpanded={isExpanded} onToggle={() => handleToggleExpand(rowKey)} />\n </TableCell>\n )}\n\n {showBulkActions && (\n <TableCell className={cn('dg-cell dg-cell--checkbox w-[40px]', classNames.cellCheckbox)}>\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => handleSelectRow(rowKey)}\n onClick={(e) => e.stopPropagation()}\n aria-label={`Select row ${rowIndex + 1}`}\n />\n </TableCell>\n )}\n\n {columnsToRender.map(({ column, index: colIndex }) => {\n const widthStr = getColumnWidthStr(column)\n return (\n <TableCell\n key={String(column.field)}\n className={cn('dg-cell', column.className, classNames.cell)}\n style={{\n width: widthStr,\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n textAlign: getTextAlign(column.textAlign),\n }}\n data-column={String(column.field)}\n data-col-index={colIndex}\n >\n {renderCellValue(row, column, rowIndex)}\n </TableCell>\n )\n })}\n\n {showActionColumn && actionConfig && (\n <TableCell\n className={cn('dg-cell dg-cell--actions', classNames.cellActions)}\n style={{ width: actionConfig.width || 80 }}\n onClick={(e) => e.stopPropagation()}\n >\n <DataGridActions config={actionConfig} data={row} isHovered={isHovered} />\n </TableCell>\n )}\n </TableRow>\n )\n\n const wrappedRow =\n showContextMenu && contextMenuItems ? (\n <DataGridContextMenu\n key={rowKey}\n items={contextMenuItems}\n data={row}\n className={classNames.contextMenu}\n >\n {tableRowElement}\n </DataGridContextMenu>\n ) : (\n tableRowElement\n )\n\n return (\n <>\n {wrappedRow}\n {showExpanderColumn && isExpanded && childRowConfig && (\n <DataGridChildRow\n parentRow={row}\n config={childRowConfig}\n parentColSpan={totalColSpan}\n className={classNames.childRow}\n />\n )}\n </>\n )\n }\n\n return (\n <div\n className={cn(\n 'dg-root h-full flex flex-col gap-4 w-full min-w-0 overflow-hidden',\n classNames.root,\n className\n )}\n >\n <DataGridToolbar\n showExport={showExport}\n showBulkActions={showBulkActions}\n selectedCount={selectedRows.size}\n bulkActionConfig={bulkActionConfig}\n exportConfig={exportConfig}\n data={data}\n columns={columns}\n getSelectedData={getSelectedData}\n classNames={classNames}\n />\n\n <div\n ref={tableContainerRef as React.RefObject<HTMLDivElement>}\n className={cn(\n 'dg-table-container custom-scrollbar relative overflow-auto rounded-md border flex-1 min-h-0 [&_[data-slot=table-container]]:overflow-visible',\n classNames.tableContainer\n )}\n style={{\n width: 0,\n minWidth: '100%',\n ...(maxBodyHeight ? { maxHeight: maxBodyHeight } : {}),\n }}\n >\n <Table className={cn('dg-table', classNames.table)}>\n <TableHeader\n className={cn(\n 'dg-header',\n stickyHeader && 'sticky top-0 z-10 bg-background',\n classNames.header\n )}\n >\n <TableRow\n className={cn(\n 'dg-header-row bg-muted/50',\n showHeaderBorder && 'dg-header-bordered',\n classNames.headerRow\n )}\n >\n {showExpanderColumn && (\n <TableHead className=\"dg-header-cell dg-header-cell--expander w-[40px]\" />\n )}\n\n {showBulkActions && (\n <TableHead className=\"dg-header-cell dg-header-cell--checkbox w-[40px]\">\n <Checkbox\n checked={data.length > 0 && selectedRows.size === data.length}\n onCheckedChange={handleSelectAll}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n\n {columnsToRender.map(({ column }) => {\n const widthStr = getColumnWidthStr(column)\n const canResize = enableColumnResize && column.allowResizing !== false\n\n return (\n <TableHead\n key={String(column.field)}\n className={cn(\n 'dg-header-cell select-none',\n column.headerClassName,\n classNames.headerCell\n )}\n style={{\n width: widthStr,\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n textAlign: getTextAlign(column.textAlign),\n }}\n data-column={String(column.field)}\n >\n {column.headerTemplate ? (\n column.headerTemplate()\n ) : (\n <div\n className={cn(\n 'flex items-center',\n column.allowSorting !== false && 'cursor-pointer'\n )}\n style={{ justifyContent: getJustifyContent(column.textAlign) }}\n role=\"button\"\n tabIndex={0}\n onClick={() => handleSort(String(column.field), column.allowSorting)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleSort(String(column.field), column.allowSorting)\n }\n }}\n >\n {column.headerText}\n {renderSortIcon(column)}\n </div>\n )}\n {canResize && (\n <div\n className={cn(\n 'dg-resize-handle',\n resizingColumn === String(column.field) && 'dg-resize-handle--active'\n )}\n onMouseDown={(e) => handleResizeStart(e, column)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n )}\n </TableHead>\n )\n })}\n\n {showActionColumn && actionConfig && (\n <TableHead\n className=\"dg-header-cell dg-header-cell--actions text-right\"\n style={{ width: actionConfig.width || 80 }}\n >\n {actionConfig.showHeader !== false ? actionConfig.headerText || 'Actions' : ''}\n </TableHead>\n )}\n </TableRow>\n </TableHeader>\n\n <TableBody\n className={cn('dg-body', alternatingRows && 'dg-alternating', classNames.body)}\n >\n {isLoading && (\n <DataGridSkeleton\n columns={columns}\n rowCount={skeletonRowCount}\n showCheckbox={showBulkActions}\n showActions={showActionColumn}\n showExpander={showExpanderColumn}\n />\n )}\n\n {!isLoading && data.length === 0 && (\n <TableRow className=\"dg-row dg-row--empty\">\n <TableCell\n colSpan={totalColSpan}\n className={cn('dg-cell dg-cell--empty h-24 text-center', classNames.empty)}\n >\n {emptyComponent || <span className=\"text-muted-foreground\">{emptyMessage}</span>}\n </TableCell>\n </TableRow>\n )}\n\n {!isLoading && sortedData.map((row, rowIndex) => renderRow(row, rowIndex))}\n </TableBody>\n </Table>\n </div>\n\n {pagination && <DataGridPagination config={pagination} className={classNames.pagination} />}\n </div>\n )\n}\n\nexport type {\n ActionConfig,\n ActionItem,\n ActionMode,\n ActionVariant,\n BulkActionConfig,\n BulkActionItem,\n ChildRowConfig,\n ColumnConfig,\n ColumnType,\n ContextMenuItem,\n DataGridClassNames,\n DataGridProps,\n ExportConfig,\n ExportFormat,\n FormatType,\n PaginationConfig,\n SortConfig,\n SortDirection,\n TextAlign,\n TooltipConfig,\n} from '../../types/dataGrid'\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "shadcn-datagrid",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A feature-rich DataGrid component for shadcn/ui + Tailwind CSS projects",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsup",
|
|
21
|
+
"dev": "tsup --watch",
|
|
22
|
+
"type-check": "tsc --noEmit"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"react",
|
|
26
|
+
"datagrid",
|
|
27
|
+
"table",
|
|
28
|
+
"shadcn",
|
|
29
|
+
"shadcn-ui",
|
|
30
|
+
"tailwindcss",
|
|
31
|
+
"typescript",
|
|
32
|
+
"pagination",
|
|
33
|
+
"sorting",
|
|
34
|
+
"data-table"
|
|
35
|
+
],
|
|
36
|
+
"author": "",
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"react": ">=18",
|
|
40
|
+
"react-dom": ">=18",
|
|
41
|
+
"tailwindcss": ">=3"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
45
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
46
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
47
|
+
"class-variance-authority": "^0.7.1",
|
|
48
|
+
"clsx": "^2.1.1",
|
|
49
|
+
"date-fns": "^4.1.0",
|
|
50
|
+
"lucide-react": "^0.563.0",
|
|
51
|
+
"radix-ui": "^1.4.3",
|
|
52
|
+
"tailwind-merge": "^3.4.0"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@types/react": "^19.2.5",
|
|
56
|
+
"@types/react-dom": "^19.2.3",
|
|
57
|
+
"tsup": "^8.5.0",
|
|
58
|
+
"typescript": "~5.9.3"
|
|
59
|
+
}
|
|
60
|
+
}
|