react-table-craft 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/CHANGELOG.md +21 -0
- package/LICENSE +21 -0
- package/README.md +407 -0
- package/dist/index.d.mts +639 -0
- package/dist/index.d.ts +639 -0
- package/dist/index.js +3487 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3431 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-debounce.ts","../src/lib/utils.ts","../src/components/ui/table.tsx","../src/components/ui/button.tsx","../src/components/ui/select.tsx","../src/config/defaults.ts","../src/config/merge.ts","../src/config/context.ts","../src/hooks/use-table-translations.ts","../src/config/create-config.ts","../src/config/dev-warnings.ts","../src/config/use-resolved-config.ts","../src/config/use-table-config.ts","../src/components/data-table-pagination.tsx","../src/lib/csv-export.ts","../src/components/ui/input.tsx","../src/components/ui/calendar.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/label.tsx","../src/components/ui/popover.tsx","../src/components/ui/badge.tsx","../src/components/ui/command.tsx","../src/components/ui/separator.tsx","../src/components/data-table-faceted-filter.tsx","../src/components/data-table-single-select-filter.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/data-table-view-options.tsx","../src/components/ui/tooltip.tsx","../src/components/table-actions-row.tsx","../src/components/data-table-toolbar.tsx","../src/components/ui/card.tsx","../src/components/data-table-card-view.tsx","../src/components/advanced/data-table-advanced-filter.tsx","../src/components/advanced/data-table-advanced-filter-item.tsx","../src/components/advanced/data-table-multi-filter.tsx","../src/components/advanced/data-table-advanced-toolbar.tsx","../src/components/ui/drawer.tsx","../src/components/data-table-mobile-toolbar.tsx","../src/components/data-table.tsx","../src/components/data-table-column-header.tsx","../src/components/client-side-table/index.tsx","../src/components/data-table-floating-bar.tsx","../src/components/data-table-role-filter.tsx","../src/components/ui/skeleton.tsx","../src/components/data-table-loading.tsx"],"names":["React","forwardRef","jsx","React2","useMemo","jsxs","React4","React5","ChevronLeft","ChevronRight","React6","Check","React7","React8","cva","React9","CommandPrimitive","Separator","React10","useState","useEffect","Fragment","React11","DropdownMenuTrigger","React12","React14","Search","_a","PlusCircle","React15","RotateCcw","React16","ChevronDown","React17","value","Trash2","React18","option","React19","ListFilter","Plus","DrawerPrimitive","React20","React21","Filter","Sheet","Loader2","CalendarIcon","format","ar","enUS","X","_b","_c","flexRender","SearchX","React23","DataTableLoading","_"],"mappings":"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","file":"index.mjs","sourcesContent":["import { useEffect, useState } from 'react'\r\n\r\nexport function useDebounce<T>(value: T, delay: number): T {\r\n const [debouncedValue, setDebouncedValue] = useState<T>(value)\r\n\r\n useEffect(() => {\r\n const handler = setTimeout(() => {\r\n setDebouncedValue(value)\r\n }, delay)\r\n\r\n return () => {\r\n clearTimeout(handler)\r\n }\r\n }, [value, delay])\r\n\r\n return debouncedValue\r\n}\r\n","import { type ClassValue, clsx } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\r\n ({ className, ...props }, ref) => (\r\n <div className=\"relative w-full overflow-auto\">\r\n <table\r\n ref={ref}\r\n className={cn('w-full caption-bottom text-sm', className)}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n)\r\nTable.displayName = 'Table'\r\n\r\nconst TableHeader = React.forwardRef<\r\n HTMLTableSectionElement,\r\n React.HTMLAttributes<HTMLTableSectionElement>\r\n>(({ className, ...props }, ref) => (\r\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\r\n))\r\nTableHeader.displayName = 'TableHeader'\r\n\r\nconst TableBody = React.forwardRef<\r\n HTMLTableSectionElement,\r\n React.HTMLAttributes<HTMLTableSectionElement>\r\n>(({ className, ...props }, ref) => (\r\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\r\n))\r\nTableBody.displayName = 'TableBody'\r\n\r\nconst TableFooter = React.forwardRef<\r\n HTMLTableSectionElement,\r\n React.HTMLAttributes<HTMLTableSectionElement>\r\n>(({ className, ...props }, ref) => (\r\n <tfoot\r\n ref={ref}\r\n className={cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className)}\r\n {...props}\r\n />\r\n))\r\nTableFooter.displayName = 'TableFooter'\r\n\r\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\r\n ({ className, ...props }, ref) => (\r\n <tr\r\n ref={ref}\r\n className={cn(\r\n 'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n)\r\nTableRow.displayName = 'TableRow'\r\n\r\nconst TableHead = React.forwardRef<\r\n HTMLTableCellElement,\r\n React.ThHTMLAttributes<HTMLTableCellElement>\r\n>(({ className, ...props }, ref) => (\r\n <th\r\n ref={ref}\r\n className={cn(\r\n 'h-10 px-4 text-start align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]',\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nTableHead.displayName = 'TableHead'\r\n\r\nconst TableCell = React.forwardRef<\r\n HTMLTableCellElement,\r\n React.TdHTMLAttributes<HTMLTableCellElement>\r\n>(({ className, ...props }, ref) => (\r\n <td\r\n ref={ref}\r\n className={cn(\r\n 'px-4 py-2.5 align-middle [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]',\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nTableCell.displayName = 'TableCell'\r\n\r\nconst TableCaption = React.forwardRef<\r\n HTMLTableCaptionElement,\r\n React.HTMLAttributes<HTMLTableCaptionElement>\r\n>(({ className, ...props }, ref) => (\r\n <caption ref={ref} className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />\r\n))\r\nTableCaption.displayName = 'TableCaption'\r\n\r\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }\r\n","'use client'\r\n\r\nimport { forwardRef } from 'react'\r\nimport { Slot } from '@radix-ui/react-slot'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lg text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 cursor-pointer',\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n 'bg-primary text-primary-foreground hover:bg-primary/90 shadow-sm',\r\n brand:\r\n 'bg-brand text-brand-foreground hover:bg-brand/90 shadow-sm shadow-brand/25',\r\n outline:\r\n 'border border-border bg-background hover:bg-accent hover:text-accent-foreground',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n link: 'text-brand underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-10 px-4 py-2',\r\n sm: 'h-9 rounded-md px-3 text-xs',\r\n lg: 'h-12 rounded-xl px-8 text-base',\r\n icon: 'h-10 w-10',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'button'\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nButton.displayName = 'Button'\r\n\r\nexport { Button, buttonVariants }\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport * as SelectPrimitive from '@radix-ui/react-select'\r\nimport { Check, ChevronDown } from 'lucide-react'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst Select = SelectPrimitive.Root\r\nconst SelectGroup = SelectPrimitive.Group\r\nconst SelectValue = SelectPrimitive.Value\r\n\r\nconst SelectTrigger = React.forwardRef<\r\n React.ComponentRef<typeof SelectPrimitive.Trigger>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\r\n>(({ className, children, ...props }, ref) => (\r\n <SelectPrimitive.Trigger\r\n ref={ref}\r\n className={cn(\r\n 'flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <SelectPrimitive.Icon asChild>\r\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\r\n </SelectPrimitive.Icon>\r\n </SelectPrimitive.Trigger>\r\n))\r\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\r\n\r\nconst SelectContent = React.forwardRef<\r\n React.ComponentRef<typeof SelectPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\r\n>(({ className, children, position = 'popper', ...props }, ref) => (\r\n <SelectPrimitive.Portal>\r\n <SelectPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover 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',\r\n position === 'popper' &&\r\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',\r\n className\r\n )}\r\n position={position}\r\n {...props}\r\n >\r\n <SelectPrimitive.Viewport\r\n className={cn(\r\n 'p-1',\r\n position === 'popper' &&\r\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\r\n )}\r\n >\r\n {children}\r\n </SelectPrimitive.Viewport>\r\n </SelectPrimitive.Content>\r\n </SelectPrimitive.Portal>\r\n))\r\nSelectContent.displayName = SelectPrimitive.Content.displayName\r\n\r\nconst SelectItem = React.forwardRef<\r\n React.ComponentRef<typeof SelectPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\r\n>(({ className, children, ...props }, ref) => (\r\n <SelectPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pe-8 ps-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute end-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <SelectPrimitive.ItemIndicator>\r\n <Check className=\"h-4 w-4\" />\r\n </SelectPrimitive.ItemIndicator>\r\n </span>\r\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\r\n </SelectPrimitive.Item>\r\n))\r\nSelectItem.displayName = SelectPrimitive.Item.displayName\r\n\r\nconst SelectSeparator = React.forwardRef<\r\n React.ComponentRef<typeof SelectPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.Separator\r\n ref={ref}\r\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\r\n {...props}\r\n />\r\n))\r\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\r\n\r\nexport {\r\n Select,\r\n SelectGroup,\r\n SelectValue,\r\n SelectTrigger,\r\n SelectContent,\r\n SelectItem,\r\n SelectSeparator,\r\n}\r\n","import type { TableConfig } from '../types/table-config'\r\n\r\n/**\r\n * Core default config (Layer 1).\r\n * All values match the current hardcoded behavior across components.\r\n * Frozen to prevent accidental mutation.\r\n */\r\nexport const DEFAULT_TABLE_CONFIG: Readonly<TableConfig> = Object.freeze({\r\n features: Object.freeze({\r\n search: true,\r\n filter: true,\r\n pagination: true,\r\n columnVisibility: true,\r\n csvExport: true,\r\n rowSelection: true,\r\n viewToggle: true,\r\n floatingBar: false,\r\n advancedFilter: false,\r\n sorting: true,\r\n }),\r\n pagination: Object.freeze({\r\n pageSizeOptions: Object.freeze([10, 20, 30, 40, 50]) as unknown as number[],\r\n defaultPageSize: 10,\r\n }),\r\n search: Object.freeze({\r\n debounceMs: 500,\r\n minSearchLength: 0,\r\n }),\r\n i18n: Object.freeze({\r\n locale: 'en',\r\n direction: 'auto' as const,\r\n translationFn: undefined,\r\n namespace: 'table',\r\n }),\r\n performance: Object.freeze({\r\n memoStrategy: 'smart' as const,\r\n virtualizationOverscan: 5,\r\n batchUpdates: true,\r\n }),\r\n enterprise: Object.freeze({\r\n strictAccessibility: false,\r\n errorRecovery: false,\r\n debugMode: false,\r\n }),\r\n dev: Object.freeze({\r\n warnings: true,\r\n performanceHints: false,\r\n renderCostThresholdMs: 16,\r\n }),\r\n plugins: [],\r\n router: undefined,\r\n})\r\n","import type { TableConfig, DeepPartial } from '../types/table-config'\r\n\r\n/**\r\n * Deep-merge two config objects.\r\n * - Arrays replace entirely (not concatenated).\r\n * - `undefined` values in overrides are skipped.\r\n * - Only merges 2 levels deep (sufficient for TableConfig shape).\r\n */\r\nexport function deepMergeConfig(\r\n base: TableConfig,\r\n overrides: DeepPartial<TableConfig>\r\n): TableConfig {\r\n const result = { ...base }\r\n\r\n for (const key of Object.keys(overrides) as (keyof TableConfig)[]) {\r\n const overrideValue = overrides[key]\r\n\r\n if (overrideValue === undefined) continue\r\n\r\n if (Array.isArray(overrideValue)) {\r\n // Arrays replace entirely\r\n ;(result as Record<string, unknown>)[key] = overrideValue\r\n } else if (\r\n overrideValue !== null &&\r\n typeof overrideValue === 'object' &&\r\n !Array.isArray(base[key]) &&\r\n typeof base[key] === 'object' &&\r\n base[key] !== null\r\n ) {\r\n // Deep merge one level for plain objects\r\n const baseObj = base[key] as unknown as Record<string, unknown>\r\n const overrideObj = overrideValue as unknown as Record<string, unknown>\r\n const merged = { ...baseObj }\r\n\r\n for (const subKey of Object.keys(overrideObj)) {\r\n if (overrideObj[subKey] !== undefined) {\r\n merged[subKey] = overrideObj[subKey]\r\n }\r\n }\r\n\r\n ;(result as Record<string, unknown>)[key] = merged\r\n } else {\r\n ;(result as Record<string, unknown>)[key] = overrideValue\r\n }\r\n }\r\n\r\n return result\r\n}\r\n","'use client'\r\n\r\nimport { createContext, useContext, useMemo, type ReactNode } from 'react'\r\nimport React from 'react'\r\nimport type { TableConfig, TableConfigInput } from '../types/table-config'\r\nimport { DEFAULT_TABLE_CONFIG } from './defaults'\r\nimport { deepMergeConfig } from './merge'\r\n\r\nconst TableConfigContext = createContext<TableConfig | null>(null)\r\n\r\ninterface TableProviderProps {\r\n config: TableConfigInput\r\n children: ReactNode\r\n}\r\n\r\n/**\r\n * Optional global config provider (Layer 2).\r\n * Wrapping your app or page with this merges your config with defaults.\r\n * If omitted, all components fall back to DEFAULT_TABLE_CONFIG.\r\n */\r\nexport function TableProvider({ config, children }: TableProviderProps) {\r\n const resolvedConfig = useMemo(\r\n () => deepMergeConfig(DEFAULT_TABLE_CONFIG, config),\r\n [config]\r\n )\r\n\r\n return React.createElement(\r\n TableConfigContext.Provider,\r\n { value: resolvedConfig },\r\n children\r\n )\r\n}\r\n\r\n/**\r\n * Internal hook: returns the provider's config or defaults if no provider exists.\r\n */\r\nexport function useGlobalTableConfig(): TableConfig {\r\n const context = useContext(TableConfigContext)\r\n return context ?? DEFAULT_TABLE_CONFIG\r\n}\r\n","'use client'\r\n\r\nimport { useGlobalTableConfig } from '../config/context'\r\n\r\n/**\r\n * Built-in default English translation strings.\r\n * Used as fallback when no custom translationFn is provided.\r\n */\r\nconst DEFAULT_TRANSLATIONS: Record<string, string> = {\r\n // Toolbar\r\n 'Filter': 'Filter',\r\n 'filter-by': 'Filter by',\r\n 'Reset': 'Reset',\r\n 'add': 'Add',\r\n 'add-filter': 'Add filter',\r\n 'new': 'New',\r\n 'columns': 'Columns',\r\n 'Toggle-Visibility': 'Toggle Visibility',\r\n 'export-csv': 'Export CSV',\r\n 'tableView': 'Table',\r\n 'cardView': 'Cards',\r\n 'Apply': 'Apply',\r\n 'data-table-filter': 'Use filters to narrow down results.',\r\n\r\n // Search\r\n 'search': 'Search',\r\n\r\n // Sorting\r\n 'asc': 'Asc',\r\n 'desc': 'Desc',\r\n 'Hide': 'Hide',\r\n 'sorted-desc': 'Sorted descending',\r\n 'sorted-asc': 'Sorted ascending',\r\n 'not-sorted': 'Not sorted',\r\n 'sort-ascending': 'Sort ascending',\r\n 'sort-descending': 'Sort descending',\r\n 'hide-column': 'Hide column',\r\n\r\n // Pagination\r\n 'pagination': 'Pagination',\r\n 'showing': 'Showing',\r\n 'of': 'of',\r\n 'records': 'records',\r\n 'Rows Per Page': 'Rows per page',\r\n 'previous': 'Previous',\r\n 'next': 'Next',\r\n\r\n // Selection\r\n 'select': 'Select',\r\n 'clear-selection': 'Clear selection',\r\n 'row(s) selected': 'row(s) selected',\r\n 'delete-selected': 'Delete selected',\r\n\r\n // Empty state\r\n 'no-records-found': 'No records found',\r\n 'no-records-hint': 'Try adjusting your search or filter criteria.',\r\n 'reset-filters': 'Reset filters',\r\n\r\n // Filters\r\n 'no-items-found': 'No items found.',\r\n 'clear-filters': 'Clear filters',\r\n 'all': 'All',\r\n 'advanced-filter': 'Advanced filter',\r\n\r\n // Actions\r\n 'actions': 'Actions',\r\n 'edit': 'Edit',\r\n 'show': 'Show',\r\n 'delete': 'Delete',\r\n 'download': 'Download',\r\n 'cancel': 'Cancel',\r\n\r\n // Date\r\n 'datePlaceholder': 'Pick a date',\r\n\r\n // Client-side table\r\n 'row-number': '#',\r\n}\r\n\r\n/**\r\n * Translation hook for table components.\r\n *\r\n * If config provides a custom `translationFn`, uses that.\r\n * Otherwise falls back to built-in English strings.\r\n */\r\nexport function useTableTranslations(): (key: string) => string {\r\n const config = useGlobalTableConfig()\r\n\r\n if (config.i18n.translationFn) {\r\n return config.i18n.translationFn\r\n }\r\n\r\n return (key: string) => DEFAULT_TRANSLATIONS[key] ?? key\r\n}\r\n","import type { TableConfig, TableConfigInput } from '../types/table-config'\r\nimport { DEFAULT_TABLE_CONFIG } from './defaults'\r\nimport { deepMergeConfig } from './merge'\r\n\r\n/**\r\n * Factory function to create a resolved, frozen TableConfig.\r\n * Can be used outside React to pre-build configs in constants files.\r\n */\r\nexport function createTableConfig(input?: TableConfigInput): TableConfig {\r\n if (!input) return DEFAULT_TABLE_CONFIG\r\n\r\n const merged = deepMergeConfig(DEFAULT_TABLE_CONFIG, input)\r\n return Object.freeze(merged)\r\n}\r\n","import type { TableConfig } from '../types/table-config'\r\n\r\n/**\r\n * Validates the resolved config and logs warnings in development.\r\n * All warnings are gated behind process.env.NODE_ENV === 'development'.\r\n */\r\nexport function runDevValidation(config: TableConfig): void {\r\n if (process.env.NODE_ENV !== 'development') return\r\n if (!config.dev.warnings) return\r\n\r\n // Pagination sanity: defaultPageSize should be in pageSizeOptions\r\n if (!config.pagination.pageSizeOptions.includes(config.pagination.defaultPageSize)) {\r\n console.warn(\r\n `[TableCraft] defaultPageSize (${config.pagination.defaultPageSize}) is not in pageSizeOptions [${config.pagination.pageSizeOptions.join(', ')}]. The page size dropdown may not show the default selection.`\r\n )\r\n }\r\n\r\n // Search sanity: debounceMs should be non-negative\r\n if (config.search.debounceMs < 0) {\r\n console.warn(\r\n `[TableCraft] search.debounceMs is negative (${config.search.debounceMs}). This will be treated as 0.`\r\n )\r\n }\r\n\r\n // Feature flag conflict: advancedFilter requires filter\r\n if (config.features.advancedFilter && !config.features.filter) {\r\n console.warn(\r\n `[TableCraft] features.advancedFilter is enabled but features.filter is disabled. Advanced filter will have no effect.`\r\n )\r\n }\r\n\r\n // i18n: direction 'auto' with no locale hint\r\n if (config.i18n.direction === 'auto' && !config.i18n.locale) {\r\n console.warn(\r\n `[TableCraft] i18n.direction is 'auto' but i18n.locale is empty. Direction detection may not work correctly. Set an explicit direction or locale.`\r\n )\r\n }\r\n}\r\n","'use client'\r\n\r\nimport { useMemo } from 'react'\r\nimport type { TableConfig, TableConfigInput } from '../types/table-config'\r\nimport { useGlobalTableConfig } from './context'\r\nimport { deepMergeConfig } from './merge'\r\nimport { runDevValidation } from './dev-warnings'\r\n\r\n/**\r\n * Resolves config across all layers: Core Defaults -> Provider -> Instance -> Plugins.\r\n * Memoized and runs dev validation.\r\n */\r\nexport function useResolvedTableConfig(instanceConfig?: TableConfigInput): TableConfig {\r\n const globalConfig = useGlobalTableConfig()\r\n\r\n const resolved = useMemo(() => {\r\n // Layer 3: merge instance overrides into global (which already has Layer 1+2)\r\n let config = instanceConfig\r\n ? deepMergeConfig(globalConfig, instanceConfig)\r\n : globalConfig\r\n\r\n // Layer 4: apply plugins sorted by priority\r\n if (config.plugins.length > 0) {\r\n const sortedPlugins = [...config.plugins].sort((a, b) => a.priority - b.priority)\r\n for (const plugin of sortedPlugins) {\r\n config = deepMergeConfig(config, plugin.config)\r\n }\r\n // Notify plugins after resolution\r\n for (const plugin of sortedPlugins) {\r\n plugin.onResolve?.(config)\r\n }\r\n }\r\n\r\n return config\r\n }, [globalConfig, instanceConfig])\r\n\r\n // Dev-only validation (tree-shaken in production)\r\n if (process.env.NODE_ENV === 'development') {\r\n runDevValidation(resolved)\r\n }\r\n\r\n return resolved\r\n}\r\n","'use client'\r\n\r\nimport { useMemo } from 'react'\r\nimport type { TableConfig } from '../types/table-config'\r\nimport { useGlobalTableConfig } from './context'\r\n\r\n/**\r\n * Consumer hook for reading the resolved table config.\r\n *\r\n * Overloaded:\r\n * - `useTableConfig()` — returns the full config object\r\n * - `useTableConfig(selector)` — returns a derived slice (prevents unnecessary re-renders)\r\n */\r\nexport function useTableConfig(): TableConfig\r\nexport function useTableConfig<T>(selector: (config: TableConfig) => T): T\r\nexport function useTableConfig<T>(selector?: (config: TableConfig) => T): TableConfig | T {\r\n const config = useGlobalTableConfig()\r\n\r\n return useMemo(() => {\r\n if (selector) return selector(config)\r\n return config\r\n }, [config, selector])\r\n}\r\n","import { ChevronLeft, ChevronRight } from 'lucide-react'\r\nimport { Table } from '@tanstack/react-table'\r\n\r\nimport { cn } from '../lib/utils'\r\nimport { Button } from './ui/button'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from './ui/select'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\nimport { useTableConfig } from '../config'\r\nimport { Pagination } from '../types/pagination'\r\n\r\ntype BaseProps<TData> = {\r\n table: Table<TData>\r\n pageSizeOptions?: number[]\r\n}\r\n\r\ntype QueryPaginationProps<TData> = BaseProps<TData> & {\r\n isQueryPagination: true\r\n paginationData: {\r\n paginationResponse: Pagination\r\n onPageChange: (page: number) => void\r\n onPageSizeChange: (size: number) => void\r\n }\r\n}\r\n\r\ntype LocalPaginationProps<TData> = BaseProps<TData> & {\r\n isQueryPagination?: false\r\n paginationData?: never | undefined\r\n}\r\n\r\ntype DataTablePaginationProps<TData> = QueryPaginationProps<TData> | LocalPaginationProps<TData>\r\n\r\nfunction getVisiblePages(currentPage: number, totalPages: number): (number | 'ellipsis')[] {\r\n if (totalPages <= 5) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1)\r\n }\r\n\r\n const pages: (number | 'ellipsis')[] = []\r\n\r\n if (currentPage <= 3) {\r\n pages.push(1, 2, 3, 4, 'ellipsis', totalPages)\r\n } else if (currentPage >= totalPages - 2) {\r\n pages.push(1, 'ellipsis', totalPages - 3, totalPages - 2, totalPages - 1, totalPages)\r\n } else {\r\n pages.push(1, 'ellipsis', currentPage - 1, currentPage, currentPage + 1, 'ellipsis', totalPages)\r\n }\r\n\r\n return pages\r\n}\r\n\r\nexport function DataTablePagination<TData>({\r\n table,\r\n pageSizeOptions,\r\n isQueryPagination = false,\r\n paginationData,\r\n}: DataTablePaginationProps<TData>) {\r\n const t = useTableTranslations()\r\n const config = useTableConfig()\r\n const isArabic = config.i18n.direction === 'rtl' || (config.i18n.direction === 'auto' && config.i18n.locale === 'ar')\r\n const resolvedPageSizeOptions = pageSizeOptions ?? config.pagination.pageSizeOptions\r\n\r\n const currentPage = isQueryPagination\r\n ? (paginationData?.paginationResponse?.meta?.current_page ?? 1)\r\n : table.getState().pagination.pageIndex + 1\r\n const totalPages = isQueryPagination\r\n ? (paginationData?.paginationResponse?.meta?.last_page ?? 1)\r\n : table.getPageCount()\r\n const pageSize = isQueryPagination\r\n ? (paginationData?.paginationResponse?.meta?.per_page ?? 10)\r\n : table.getState().pagination.pageSize\r\n const totalItems = isQueryPagination\r\n ? (paginationData?.paginationResponse?.meta?.total ?? 0)\r\n : table.getFilteredRowModel().rows.length\r\n\r\n const from = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1\r\n const to = Math.min(currentPage * pageSize, totalItems)\r\n\r\n const goToPage = (page: number) => {\r\n if (isQueryPagination && paginationData) {\r\n paginationData.onPageChange(page)\r\n } else {\r\n table.setPageIndex(page - 1)\r\n }\r\n }\r\n\r\n const visiblePages = getVisiblePages(currentPage, totalPages)\r\n\r\n return (\r\n <nav role=\"navigation\" aria-label={t('pagination')} className=\"flex w-full flex-col gap-4 border-t px-4 py-4 sm:flex-row sm:items-center sm:justify-between\">\r\n <div className=\"flex flex-wrap items-center gap-4\">\r\n <p className=\"text-sm text-muted-foreground\">\r\n {t('showing')}{' '}\r\n <span className=\"font-semibold text-foreground\">{from}-{to}</span>{' '}\r\n {t('of')}{' '}\r\n <span className=\"font-semibold text-foreground\">{totalItems}</span>{' '}\r\n {t('records')}\r\n </p>\r\n <div className=\"flex items-center gap-2\">\r\n <p className=\"text-sm text-muted-foreground\">{t('Rows Per Page')}</p>\r\n <Select\r\n value={`${pageSize}`}\r\n onValueChange={(value) => {\r\n const newSize = Number(value)\r\n if (isQueryPagination && paginationData) {\r\n paginationData.onPageSizeChange(newSize)\r\n } else {\r\n table.setPageSize(newSize)\r\n }\r\n }}\r\n >\r\n <SelectTrigger className=\"h-8 w-[70px]\">\r\n <SelectValue placeholder={pageSize} />\r\n </SelectTrigger>\r\n <SelectContent side=\"top\">\r\n {resolvedPageSizeOptions.map((size) => (\r\n <SelectItem key={size} value={`${size}`}>\r\n {size}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n </div>\r\n\r\n {totalPages > 0 && (\r\n <div className=\"flex items-center gap-1\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"h-8 gap-1 px-3 text-sm\"\r\n onClick={(e) => {\r\n e.preventDefault()\r\n goToPage(currentPage - 1)\r\n }}\r\n disabled={currentPage === 1}\r\n >\r\n <ChevronLeft className={cn('size-4', isArabic && 'rotate-180')} />\r\n {t('previous')}\r\n </Button>\r\n\r\n <div className=\"hidden items-center gap-1 sm:flex\">\r\n {visiblePages.map((page, idx) =>\r\n page === 'ellipsis' ? (\r\n <span key={`ellipsis-${idx}`} className=\"px-1 text-sm text-muted-foreground\">\r\n ...\r\n </span>\r\n ) : (\r\n <Button\r\n key={page}\r\n variant={page === currentPage ? 'default' : 'ghost'}\r\n size=\"sm\"\r\n className={cn(\r\n 'size-8 p-0 text-sm',\r\n page === currentPage && 'bg-brand text-brand-foreground hover:bg-brand/90'\r\n )}\r\n onClick={(e) => {\r\n e.preventDefault()\r\n goToPage(page)\r\n }}\r\n {...(page === currentPage ? { 'aria-current': 'page' } : {})}\r\n >\r\n {page}\r\n </Button>\r\n )\r\n )}\r\n </div>\r\n\r\n <span className=\"text-sm text-muted-foreground sm:hidden\">\r\n {currentPage} / {totalPages}\r\n </span>\r\n\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"h-8 gap-1 px-3 text-sm\"\r\n onClick={(e) => {\r\n e.preventDefault()\r\n goToPage(currentPage + 1)\r\n }}\r\n disabled={currentPage === totalPages}\r\n >\r\n {t('next')}\r\n <ChevronRight className={cn('size-4', isArabic && 'rotate-180')} />\r\n </Button>\r\n </div>\r\n )}\r\n </nav>\r\n )\r\n}\r\n","import { Table } from '@tanstack/react-table'\r\nimport { download, generateCsv, mkConfig } from 'export-to-csv'\r\n\r\ninterface CsvExportOptions {\r\n fileName?: string\r\n ignoredCols?: string[]\r\n}\r\n\r\nconst DEFAULT_IGNORED_COLUMNS = ['actions', 'select']\r\n\r\nexport function createCsvConfig(options: CsvExportOptions = {}) {\r\n return mkConfig({\r\n fieldSeparator: ',',\r\n decimalSeparator: '.',\r\n useKeysAsHeaders: true,\r\n filename: options.fileName || 'table-export',\r\n })\r\n}\r\n\r\nexport function exportSelectedRowsCsv<TData>(\r\n table: Table<TData>,\r\n options: CsvExportOptions = {}\r\n) {\r\n const selectedRows = table.getSelectedRowModel().rows\r\n if (selectedRows.length === 0) {\r\n return\r\n }\r\n\r\n const ignoredColumns = [\r\n ...DEFAULT_IGNORED_COLUMNS,\r\n ...(options.ignoredCols || []),\r\n ]\r\n const csvConfig = createCsvConfig(options)\r\n\r\n try {\r\n const tableData = selectedRows.map((row) => {\r\n return row._getAllVisibleCells().reduce(\r\n (acc, cell) => {\r\n if (!ignoredColumns.includes(cell.column.id)) {\r\n const rawValue = cell.getValue()\r\n const original = cell.row.original as Record<string, unknown>\r\n const value = rawValue ?? original[cell.column.id]\r\n if (value !== undefined && value !== null && value !== '') {\r\n const headerKey =\r\n typeof cell.column.columnDef.header === 'string'\r\n ? cell.column.columnDef.header\r\n : cell.column.id\r\n acc[headerKey] = String(value)\r\n }\r\n }\r\n return acc\r\n },\r\n {} as Record<string, string>\r\n )\r\n })\r\n\r\n if (tableData.length === 0) {\r\n return\r\n }\r\n\r\n const csv = generateCsv(csvConfig)(tableData)\r\n download(csvConfig)(csv)\r\n } catch (error) {\r\n console.error('CSV export failed:', error)\r\n }\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(\r\n ({ className, type, ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n className={cn(\r\n 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\r\n className\r\n )}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nInput.displayName = 'Input'\r\n\r\nexport { Input }\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\r\nimport { cn } from '../../lib/utils'\r\nimport { Button } from './button'\r\n\r\ninterface CalendarProps {\r\n className?: string\r\n mode?: 'single'\r\n selected?: Date\r\n onSelect?: (date: Date | undefined) => void\r\n initialFocus?: boolean\r\n}\r\n\r\nexport function Calendar({ className, mode = 'single', selected, onSelect }: CalendarProps) {\r\n const [currentMonth, setCurrentMonth] = React.useState(() => selected || new Date())\r\n\r\n const year = currentMonth.getFullYear()\r\n const month = currentMonth.getMonth()\r\n\r\n const firstDay = new Date(year, month, 1)\r\n const lastDay = new Date(year, month + 1, 0)\r\n const startDayOfWeek = firstDay.getDay()\r\n const daysInMonth = lastDay.getDate()\r\n\r\n const prevMonth = () => setCurrentMonth(new Date(year, month - 1, 1))\r\n const nextMonth = () => setCurrentMonth(new Date(year, month + 1, 1))\r\n\r\n const monthName = currentMonth.toLocaleString('default', { month: 'long', year: 'numeric' })\r\n const dayNames = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\r\n\r\n const isSelected = (day: number) => {\r\n if (!selected) return false\r\n return (\r\n selected.getFullYear() === year &&\r\n selected.getMonth() === month &&\r\n selected.getDate() === day\r\n )\r\n }\r\n\r\n const isToday = (day: number) => {\r\n const today = new Date()\r\n return (\r\n today.getFullYear() === year && today.getMonth() === month && today.getDate() === day\r\n )\r\n }\r\n\r\n const handleSelect = (day: number) => {\r\n const date = new Date(year, month, day)\r\n onSelect?.(date)\r\n }\r\n\r\n const cells: (number | null)[] = []\r\n for (let i = 0; i < startDayOfWeek; i++) cells.push(null)\r\n for (let d = 1; d <= daysInMonth; d++) cells.push(d)\r\n\r\n return (\r\n <div className={cn('p-3', className)}>\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <Button variant=\"outline\" size=\"icon\" className=\"h-7 w-7\" onClick={prevMonth}>\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </Button>\r\n <span className=\"text-sm font-medium\">{monthName}</span>\r\n <Button variant=\"outline\" size=\"icon\" className=\"h-7 w-7\" onClick={nextMonth}>\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n <div className=\"grid grid-cols-7 gap-1 text-center text-xs text-muted-foreground mb-1\">\r\n {dayNames.map((d) => (\r\n <div key={d} className=\"py-1\">{d}</div>\r\n ))}\r\n </div>\r\n <div className=\"grid grid-cols-7 gap-1\">\r\n {cells.map((day, i) =>\r\n day === null ? (\r\n <div key={`empty-${i}`} />\r\n ) : (\r\n <button\r\n key={day}\r\n type=\"button\"\r\n onClick={() => handleSelect(day)}\r\n className={cn(\r\n 'h-8 w-8 rounded-md text-sm transition-colors hover:bg-accent mx-auto flex items-center justify-center',\r\n isSelected(day) && 'bg-primary text-primary-foreground hover:bg-primary/90',\r\n isToday(day) && !isSelected(day) && 'bg-accent text-accent-foreground'\r\n )}\r\n >\r\n {day}\r\n </button>\r\n )\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\r\nimport { Check } from 'lucide-react'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst Checkbox = React.forwardRef<\r\n React.ComponentRef<typeof CheckboxPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n <CheckboxPrimitive.Root\r\n ref={ref}\r\n className={cn(\r\n 'peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <CheckboxPrimitive.Indicator className={cn('flex items-center justify-center text-current')}>\r\n <Check className=\"h-4 w-4\" />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n))\r\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\r\n\r\nexport { Checkbox }\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst Label = React.forwardRef<HTMLLabelElement, React.LabelHTMLAttributes<HTMLLabelElement>>(\r\n ({ className, ...props }, ref) => (\r\n <label\r\n ref={ref}\r\n className={cn(\r\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n)\r\nLabel.displayName = 'Label'\r\n\r\nexport { Label }\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst Popover = PopoverPrimitive.Root\r\nconst PopoverTrigger = PopoverPrimitive.Trigger\r\nconst PopoverAnchor = PopoverPrimitive.Anchor\r\n\r\nconst PopoverContent = React.forwardRef<\r\n React.ComponentRef<typeof PopoverPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\r\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\r\n <PopoverPrimitive.Portal>\r\n <PopoverPrimitive.Content\r\n ref={ref}\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n 'z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n className\r\n )}\r\n {...props}\r\n />\r\n </PopoverPrimitive.Portal>\r\n))\r\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\r\n\r\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\r\n","import { cva, type VariantProps } from 'class-variance-authority'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst badgeVariants = cva(\r\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'border-transparent bg-primary text-primary-foreground',\r\n secondary: 'border-transparent bg-secondary text-secondary-foreground',\r\n brand: 'border-transparent bg-brand-muted text-brand',\r\n outline: 'text-foreground',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n },\r\n }\r\n)\r\n\r\nexport interface BadgeProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof badgeVariants> {}\r\n\r\nexport function Badge({ className, variant, ...props }: BadgeProps) {\r\n return (\r\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { Command as CommandPrimitive } from 'cmdk'\r\nimport { Search } from 'lucide-react'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst Command = React.forwardRef<\r\n React.ComponentRef<typeof CommandPrimitive>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive\r\n ref={ref}\r\n className={cn(\r\n 'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommand.displayName = CommandPrimitive.displayName\r\n\r\nconst CommandInput = React.forwardRef<\r\n React.ComponentRef<typeof CommandPrimitive.Input>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\r\n>(({ className, ...props }, ref) => (\r\n <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\r\n <Search className=\"me-2 h-4 w-4 shrink-0 opacity-50\" />\r\n <CommandPrimitive.Input\r\n ref={ref}\r\n className={cn(\r\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',\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n))\r\nCommandInput.displayName = CommandPrimitive.Input.displayName\r\n\r\nconst CommandList = React.forwardRef<\r\n React.ComponentRef<typeof CommandPrimitive.List>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.List\r\n ref={ref}\r\n className={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className)}\r\n {...props}\r\n />\r\n))\r\nCommandList.displayName = CommandPrimitive.List.displayName\r\n\r\nconst CommandEmpty = React.forwardRef<\r\n React.ComponentRef<typeof CommandPrimitive.Empty>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\r\n>((props, ref) => (\r\n <CommandPrimitive.Empty ref={ref} className=\"py-6 text-center text-sm\" {...props} />\r\n))\r\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\r\n\r\nconst CommandGroup = React.forwardRef<\r\n React.ComponentRef<typeof CommandPrimitive.Group>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.Group\r\n ref={ref}\r\n className={cn(\r\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',\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommandGroup.displayName = CommandPrimitive.Group.displayName\r\n\r\nconst CommandSeparator = React.forwardRef<\r\n React.ComponentRef<typeof CommandPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.Separator\r\n ref={ref}\r\n className={cn('-mx-1 h-px bg-border', className)}\r\n {...props}\r\n />\r\n))\r\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\r\n\r\nconst CommandItem = React.forwardRef<\r\n React.ComponentRef<typeof CommandPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\r\n>(({ className, ...props }, ref) => (\r\n <CommandPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nCommandItem.displayName = CommandPrimitive.Item.displayName\r\n\r\nconst CommandShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span className={cn('ms-auto text-xs tracking-widest text-muted-foreground', className)} {...props} />\r\n )\r\n}\r\nCommandShortcut.displayName = 'CommandShortcut'\r\n\r\nexport {\r\n Command,\r\n CommandInput,\r\n CommandList,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandItem,\r\n CommandShortcut,\r\n CommandSeparator,\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { cn } from '../../lib/utils'\r\n\r\ninterface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\r\n orientation?: 'horizontal' | 'vertical'\r\n decorative?: boolean\r\n}\r\n\r\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\r\n ({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n role={decorative ? 'none' : 'separator'}\r\n aria-orientation={!decorative ? orientation : undefined}\r\n className={cn(\r\n 'shrink-0 bg-border',\r\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n)\r\nSeparator.displayName = 'Separator'\r\n\r\nexport { Separator }\r\n","import { Check, CheckIcon } from 'lucide-react'\r\nimport { Column } from '@tanstack/react-table'\r\nimport { Filter } from 'lucide-react'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\nimport { useEffect, useState } from 'react'\r\nimport { cn } from '../lib/utils'\r\nimport { Badge } from './ui/badge'\r\nimport { Button } from './ui/button'\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n CommandSeparator,\r\n} from './ui/command'\r\nimport { Popover, PopoverContent, PopoverTrigger } from './ui/popover'\r\nimport { Separator } from './ui/separator'\r\nimport type { DataTableFilterableColumn, Option } from '../types/table'\r\nimport { FilterOptions } from '../types/filter-options'\r\n\r\ninterface DataTableFacetedFilterBase<TData, TValue> {\r\n title?: string\r\n options: Option[]\r\n variant?: 'popover' | 'command'\r\n className?: string\r\n}\r\n\r\ntype QueryFilterProps<TData> = {\r\n isQueryFilter: true\r\n column?: DataTableFilterableColumn<TData>\r\n handleFilterChange: (key: keyof FilterOptions, value: string | undefined) => void\r\n currentValue?: string\r\n}\r\n\r\ntype LocalFilterProps<TData, TValue> = {\r\n isQueryFilter?: false\r\n handleFilterChange?: never\r\n column?: Column<TData, TValue>\r\n currentValue?: never\r\n}\r\n\r\ntype DataTableFacetedFilterProps<TData, TValue> = DataTableFacetedFilterBase<TData, TValue> &\r\n (QueryFilterProps<TData> | LocalFilterProps<TData, TValue>)\r\n\r\nexport function DataTableFacetedFilter<TData, TValue>({\r\n column,\r\n title,\r\n options,\r\n variant = 'popover',\r\n className,\r\n isQueryFilter = false,\r\n handleFilterChange,\r\n currentValue,\r\n}: DataTableFacetedFilterProps<TData, TValue>) {\r\n const t = useTableTranslations()\r\n const [selectedValues, setSelectedValues] = useState<Set<string>>(new Set())\r\n\r\n useEffect(() => {\r\n let filterValue: string[] = []\r\n\r\n if (isQueryFilter) {\r\n filterValue = currentValue ? [currentValue] : []\r\n } else if (column) {\r\n const columnFilterValue = (column as Column<TData, TValue>)?.getFilterValue()\r\n filterValue = Array.isArray(columnFilterValue) ? (columnFilterValue as string[]) : []\r\n }\r\n\r\n setSelectedValues(new Set(filterValue))\r\n }, [currentValue, column, isQueryFilter])\r\n\r\n const handleValueChange = (value: string) => {\r\n if (isQueryFilter) {\r\n setSelectedValues(new Set([value]))\r\n } else {\r\n const newSelectedValues = new Set(selectedValues)\r\n if (newSelectedValues.has(value)) {\r\n newSelectedValues.delete(value)\r\n } else {\r\n newSelectedValues.add(value)\r\n }\r\n setSelectedValues(newSelectedValues)\r\n }\r\n\r\n if (isQueryFilter && handleFilterChange && column) {\r\n handleFilterChange(String(column.id), value)\r\n } else if (!isQueryFilter && column) {\r\n const newSelectedValues = new Set(selectedValues)\r\n if (newSelectedValues.has(value)) {\r\n newSelectedValues.delete(value)\r\n } else {\r\n newSelectedValues.add(value)\r\n }\r\n const filterValues = Array.from(newSelectedValues)\r\n const finalValue = filterValues.length > 0 ? filterValues : undefined\r\n ;(column as Column<TData, TValue>).setFilterValue(finalValue)\r\n }\r\n }\r\n\r\n const clearFilters = () => {\r\n if (isQueryFilter && handleFilterChange && column) {\r\n handleFilterChange(String(column.id), undefined)\r\n } else if (!isQueryFilter && column) {\r\n ;(column as Column<TData, TValue>).setFilterValue(undefined)\r\n }\r\n }\r\n\r\n const renderBadges = () => {\r\n if (selectedValues.size === 0) return null\r\n\r\n const filteredOptions = options.filter((option) => selectedValues.has(option.value))\r\n\r\n return (\r\n <>\r\n <Separator orientation=\"vertical\" className=\"mx-2 h-4\" />\r\n <div className=\"flex space-x-1\">\r\n {filteredOptions.map((option) => (\r\n <Badge variant=\"secondary\" key={option.value} className=\"rounded-sm px-1 font-normal\">\r\n {option.label}\r\n </Badge>\r\n ))}\r\n </div>\r\n </>\r\n )\r\n }\r\n\r\n const renderCommandItems = () => (\r\n <>\r\n <CommandGroup>\r\n {options.map((option) => {\r\n const isSelected = selectedValues.has(option.value)\r\n return (\r\n <CommandItem key={option.value} onSelect={() => handleValueChange(option.value)}>\r\n <div\r\n className={cn(\r\n 'me-2 flex size-4 items-center justify-center rounded-sm border border-primary',\r\n isSelected ? 'bg-primary text-primary-foreground' : 'opacity-50 [&_svg]:invisible'\r\n )}\r\n >\r\n <Check className={cn('size-4')} aria-hidden=\"true\" />\r\n </div>\r\n {option.icon && (\r\n <option.icon className=\"me-2 size-4 text-muted-foreground\" aria-hidden=\"true\" />\r\n )}\r\n <span>{option.label}</span>\r\n </CommandItem>\r\n )\r\n })}\r\n </CommandGroup>\r\n {selectedValues.size > 0 && (\r\n <>\r\n <CommandSeparator />\r\n <CommandGroup>\r\n <CommandItem onSelect={clearFilters} className=\"justify-center text-center\">\r\n {t('clear-filters')}\r\n </CommandItem>\r\n </CommandGroup>\r\n </>\r\n )}\r\n </>\r\n )\r\n\r\n if (variant === 'command') {\r\n return (\r\n <Command className=\"p-1\">\r\n <CommandInput\r\n placeholder={title}\r\n autoFocus\r\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\"\r\n />\r\n <CommandList className=\"mt-1\">\r\n <CommandEmpty>{t('no-items-found')}</CommandEmpty>\r\n {renderCommandItems()}\r\n </CommandList>\r\n </Command>\r\n )\r\n }\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\" className={`${className} h-8 border-dashed`}>\r\n <Filter className=\"me-2 size-4\" />\r\n {title}\r\n {renderBadges()}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[200px] p-0\" align=\"start\">\r\n <Command>\r\n <CommandInput placeholder={title} />\r\n <CommandList>\r\n <CommandEmpty>{t('no-items-found')}</CommandEmpty>\r\n {renderCommandItems()}\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n","import { Check, PlusCircle } from 'lucide-react'\r\nimport { Column } from '@tanstack/react-table'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\nimport { useEffect, useState } from 'react'\r\nimport { cn } from '../lib/utils'\r\nimport { Button } from './ui/button'\r\nimport {\r\n Command,\r\n CommandGroup,\r\n CommandItem,\r\n CommandList,\r\n CommandSeparator,\r\n} from './ui/command'\r\nimport { Popover, PopoverContent, PopoverTrigger } from './ui/popover'\r\nimport { Separator } from './ui/separator'\r\nimport { Badge } from './ui/badge'\r\nimport type { DataTableFilterableColumn, Option } from '../types/table'\r\nimport { FilterOptions } from '../types/filter-options'\r\n\r\ninterface DataTableSingleSelectFilterBase<TData, TValue> {\r\n title?: string\r\n options: Option[]\r\n className?: string\r\n placeholder?: string\r\n}\r\n\r\ntype QueryFilterProps<TData> = {\r\n isQueryFilter: true\r\n column?: DataTableFilterableColumn<TData>\r\n handleFilterChange: (key: keyof FilterOptions, value: string | undefined) => void\r\n currentValue?: string\r\n}\r\n\r\ntype LocalFilterProps<TData, TValue> = {\r\n isQueryFilter?: false\r\n handleFilterChange?: never\r\n column?: Column<TData, TValue>\r\n currentValue?: never\r\n}\r\n\r\ntype DataTableSingleSelectFilterProps<TData, TValue> = DataTableSingleSelectFilterBase<\r\n TData,\r\n TValue\r\n> &\r\n (QueryFilterProps<TData> | LocalFilterProps<TData, TValue>)\r\n\r\nexport function DataTableSingleSelectFilter<TData, TValue>({\r\n column,\r\n title,\r\n options,\r\n className,\r\n isQueryFilter = false,\r\n handleFilterChange,\r\n currentValue,\r\n}: DataTableSingleSelectFilterProps<TData, TValue>) {\r\n const t = useTableTranslations()\r\n const [open, setOpen] = useState(false)\r\n const [selectedValue, setSelectedValue] = useState<string>('')\r\n\r\n const columnFilterValue =\r\n column && 'getFilterValue' in column\r\n ? (column as Column<TData, TValue>).getFilterValue()\r\n : undefined\r\n\r\n useEffect(() => {\r\n let filterValue = ''\r\n\r\n if (isQueryFilter) {\r\n filterValue = currentValue || ''\r\n } else if (column) {\r\n if (Array.isArray(columnFilterValue) && columnFilterValue.length > 0) {\r\n filterValue = (columnFilterValue[0] as string) || ''\r\n } else if (typeof columnFilterValue === 'string') {\r\n filterValue = columnFilterValue\r\n } else {\r\n filterValue = ''\r\n }\r\n }\r\n\r\n setSelectedValue(filterValue)\r\n }, [currentValue, column, isQueryFilter, columnFilterValue])\r\n\r\n const handleValueChange = (value: string) => {\r\n const newValue = value === selectedValue ? '' : value\r\n\r\n setSelectedValue(newValue)\r\n setOpen(false)\r\n\r\n if (isQueryFilter && handleFilterChange && column) {\r\n handleFilterChange(String(column.id), newValue || undefined)\r\n } else if (!isQueryFilter && column) {\r\n const filterValue = newValue ? [newValue] : undefined\r\n ;(column as Column<TData, TValue>).setFilterValue(filterValue)\r\n }\r\n }\r\n\r\n const selectedOptionLabel = options.find((option) => option.value === selectedValue)?.label\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className={cn('h-8 border-dashed', className)}\r\n >\r\n <PlusCircle className=\"me-2 h-4 w-4\" />\r\n {title}\r\n {selectedValue && (\r\n <>\r\n <Separator orientation=\"vertical\" className=\"mx-2 h-4\" />\r\n <Badge variant=\"secondary\" className=\"rounded-sm px-1 font-normal lg:hidden\">\r\n 1\r\n </Badge>\r\n <div className=\"hidden space-x-1 lg:flex\">\r\n <Badge variant=\"secondary\" className=\"rounded-sm px-1 font-normal\">\r\n {selectedOptionLabel}\r\n </Badge>\r\n </div>\r\n </>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[200px] p-0\" align=\"start\">\r\n <Command>\r\n <CommandList>\r\n <CommandGroup>\r\n <CommandItem onSelect={() => handleValueChange('')} className=\"justify-between\">\r\n {t('all') || 'All'}\r\n <Check\r\n className={cn('h-4 w-4', selectedValue === '' ? 'opacity-100' : 'opacity-0')}\r\n />\r\n </CommandItem>\r\n\r\n <CommandSeparator />\r\n\r\n {options.map((option) => {\r\n const isSelected = selectedValue === option.value\r\n return (\r\n <CommandItem\r\n key={option.value}\r\n onSelect={() => handleValueChange(option.value)}\r\n className=\"justify-between\"\r\n >\r\n <div className=\"flex items-center\">\r\n {option.icon && (\r\n <option.icon\r\n className=\"me-2 h-4 w-4 text-muted-foreground\"\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n <span>{option.label}</span>\r\n </div>\r\n <Check className={cn('h-4 w-4', isSelected ? 'opacity-100' : 'opacity-0')} />\r\n </CommandItem>\r\n )\r\n })}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\r\nimport { Check, ChevronRight, Circle } from 'lucide-react'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst DropdownMenu = DropdownMenuPrimitive.Root\r\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\r\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\r\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\r\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\r\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\r\n\r\nconst DropdownMenuSubTrigger = React.forwardRef<\r\n React.ComponentRef<typeof DropdownMenuPrimitive.SubTrigger>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & { inset?: boolean }\r\n>(({ className, inset, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubTrigger\r\n ref={ref}\r\n className={cn(\r\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',\r\n inset && 'ps-8',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRight className=\"ms-auto h-4 w-4\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n))\r\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName\r\n\r\nconst DropdownMenuSubContent = React.forwardRef<\r\n React.ComponentRef<typeof DropdownMenuPrimitive.SubContent>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubContent\r\n ref={ref}\r\n className={cn(\r\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',\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName\r\n\r\nconst DropdownMenuContent = React.forwardRef<\r\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\r\n>(({ className, sideOffset = 4, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n className={cn(\r\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',\r\n className\r\n )}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n))\r\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\r\n\r\nconst DropdownMenuItem = React.forwardRef<\r\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { inset?: boolean }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n inset && 'ps-8',\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\r\n\r\nconst DropdownMenuCheckboxItem = React.forwardRef<\r\n React.ComponentRef<typeof DropdownMenuPrimitive.CheckboxItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\r\n>(({ className, children, checked, ...props }, ref) => (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n ref={ref}\r\n className={cn(\r\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pe-2 ps-8 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"absolute start-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Check className=\"h-4 w-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n))\r\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName\r\n\r\nconst DropdownMenuRadioItem = React.forwardRef<\r\n React.ComponentRef<typeof DropdownMenuPrimitive.RadioItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\r\n>(({ className, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.RadioItem\r\n ref={ref}\r\n className={cn(\r\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pe-2 ps-8 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute start-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Circle className=\"h-2 w-2 fill-current\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n))\r\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\r\n\r\nconst DropdownMenuLabel = React.forwardRef<\r\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Label\r\n ref={ref}\r\n className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'ps-8', className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\r\n\r\nconst DropdownMenuSeparator = React.forwardRef<\r\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Separator\r\n ref={ref}\r\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\r\n\r\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span className={cn('ms-auto text-xs tracking-widest opacity-60', className)} {...props} />\r\n )\r\n}\r\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut'\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuGroup,\r\n DropdownMenuPortal,\r\n DropdownMenuSub,\r\n DropdownMenuSubContent,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuRadioGroup,\r\n}\r\n","'use client'\r\n\r\nimport React from 'react'\r\nimport { DropdownMenuTrigger } from '@radix-ui/react-dropdown-menu'\r\nimport { Columns3 } from 'lucide-react'\r\nimport { Table } from '@tanstack/react-table'\r\n\r\nimport { cn } from '../lib/utils'\r\nimport { Button } from './ui/button'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuContent,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n} from './ui/dropdown-menu'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\nimport { useTableConfig } from '../config'\r\n\r\ninterface DataTableViewOptionsProps<TData> {\r\n table: Table<TData>\r\n}\r\n\r\nexport function DataTableViewOptions<TData>({ table }: DataTableViewOptionsProps<TData>) {\r\n const t = useTableTranslations()\r\n const config = useTableConfig()\r\n const language = config.i18n.direction === 'rtl' || (config.i18n.direction === 'auto' && config.i18n.locale === 'ar') ? 'ar' : 'en'\r\n return (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"flex h-9 items-center justify-center gap-2 px-4\"\r\n >\r\n {t('columns')}\r\n <Columns3 className=\"size-4\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"max-w-sm\">\r\n <DropdownMenuLabel\r\n style={{\r\n direction: language === 'ar' ? 'rtl' : 'ltr',\r\n }}\r\n >\r\n {t('Toggle-Visibility')}\r\n </DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n {table\r\n .getAllColumns()\r\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\r\n .map((column) => {\r\n return (\r\n <DropdownMenuCheckboxItem\r\n key={column.id}\r\n className=\"cursor-pointer capitalize\"\r\n checked={column.getIsVisible()}\r\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\r\n style={{\r\n direction: language === 'ar' ? 'rtl' : 'ltr',\r\n }}\r\n >\r\n {typeof column.columnDef.header === 'string'\r\n ? String(column.columnDef.header)\r\n : column.id}\r\n </DropdownMenuCheckboxItem>\r\n )\r\n })}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst TooltipProvider = TooltipPrimitive.Provider\r\n\r\nconst Tooltip = ({ children, ...props }: React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>) => (\r\n <TooltipProvider>\r\n <TooltipPrimitive.Root {...props}>{children}</TooltipPrimitive.Root>\r\n </TooltipProvider>\r\n)\r\n\r\nconst TooltipTrigger = TooltipPrimitive.Trigger\r\n\r\nconst TooltipContent = React.forwardRef<\r\n React.ComponentRef<typeof TooltipPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\r\n>(({ className, sideOffset = 4, ...props }, ref) => (\r\n <TooltipPrimitive.Portal>\r\n <TooltipPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n className={cn(\r\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',\r\n className\r\n )}\r\n {...props}\r\n />\r\n </TooltipPrimitive.Portal>\r\n))\r\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\r\n\r\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\r\n","import React from 'react'\r\nimport { Download, Edit, Eye, MoreVertical, Trash2Icon, XCircle } from 'lucide-react'\r\n\r\nimport { Tooltip, TooltipContent, TooltipTrigger } from './ui/tooltip'\r\nimport { Button } from './ui/button'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuGroup,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuTrigger,\r\n} from './ui/dropdown-menu'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\nimport { useTableConfig } from '../config'\r\n\r\nexport interface CustomButtonProps {\r\n text?: string\r\n function?: () => void\r\n className?: string\r\n icon?: React.ReactElement\r\n attr?: any\r\n children?: React.ReactNode\r\n toolTip?: string\r\n}\r\n\r\nexport interface MoreActionsProps {\r\n text?: string\r\n function?: () => void\r\n icon?: React.ReactElement\r\n disabled?: boolean\r\n attr?: any\r\n toolTip?: string\r\n}\r\n\r\ninterface CommonActionProps {\r\n action?: () => void\r\n disabled?: boolean\r\n tooltip?: string\r\n}\r\n\r\ninterface Props {\r\n editAction?: CommonActionProps\r\n showAction?: CommonActionProps\r\n deleteAction?: CommonActionProps\r\n cancelAction?: CommonActionProps\r\n downloadAction?: CommonActionProps\r\n className?: string\r\n customButtons?: CustomButtonProps[] | React.ReactElement\r\n text?: string\r\n dropMoreActions?: MoreActionsProps[]\r\n useDropdown?: boolean\r\n}\r\n\r\nexport const ButtonTooltip = ({ content }: { content: string }) => {\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <span className=\"absolute inset-0\" />\r\n </TooltipTrigger>\r\n <TooltipContent className=\"max-w-96 text-wrap\">{content}</TooltipContent>\r\n </Tooltip>\r\n )\r\n}\r\n\r\nconst ActionButton = ({\r\n onClick,\r\n disabled,\r\n className,\r\n icon,\r\n tooltip,\r\n variant = 'default',\r\n}: {\r\n onClick?: () => void\r\n disabled?: boolean\r\n className: string\r\n icon: React.ReactNode\r\n tooltip?: string\r\n variant?: 'default' | 'ghost'\r\n}) => {\r\n return (\r\n <Button\r\n onClick={onClick}\r\n size=\"icon\"\r\n variant={variant}\r\n className={`relative ${className} ${disabled ? 'cursor-not-allowed' : ''}`}\r\n disabled={disabled}\r\n >\r\n {icon}\r\n {tooltip && <ButtonTooltip content={tooltip} />}\r\n </Button>\r\n )\r\n}\r\n\r\nconst TableActionsRow = ({\r\n editAction,\r\n showAction,\r\n deleteAction,\r\n downloadAction,\r\n className,\r\n customButtons,\r\n text,\r\n dropMoreActions,\r\n useDropdown = true,\r\n cancelAction,\r\n}: Props) => {\r\n const t = useTableTranslations()\r\n const config = useTableConfig()\r\n const isArabic = config.i18n.direction === 'rtl' || (config.i18n.direction === 'auto' && config.i18n.locale === 'ar')\r\n\r\n const commonActions = [\r\n editAction && {\r\n text: t('edit'),\r\n icon: <Edit className=\"text-tab-teal size-4\" />,\r\n function: editAction.action,\r\n disabled: editAction.disabled,\r\n className: 'bg-tab-teal hover:bg-tab-teal-800',\r\n tooltip: t('edit'),\r\n },\r\n showAction && {\r\n text: t('show'),\r\n icon: <Eye className=\"size-4\" />,\r\n function: showAction.action,\r\n disabled: showAction.disabled,\r\n className: 'bg-tab-turquoise hover:bg-tab-turquoise-800',\r\n tooltip: t('show'),\r\n },\r\n downloadAction && {\r\n text: t('download'),\r\n icon: <Download className=\"text-main size-4\" />,\r\n function: downloadAction.action,\r\n disabled: downloadAction.disabled,\r\n className: 'outline outline-1 outline-main',\r\n tooltip: t('download'),\r\n variant: 'ghost' as const,\r\n },\r\n deleteAction && {\r\n text: t('delete'),\r\n icon: <Trash2Icon className=\"size-4 text-rose-700\" />,\r\n function: deleteAction.action,\r\n disabled: deleteAction.disabled,\r\n className: 'outline outline-1 outline-rose-700',\r\n tooltip: t('delete'),\r\n variant: 'ghost' as const,\r\n },\r\n cancelAction && {\r\n text: t('cancel'),\r\n icon: <XCircle className=\"size-4 text-rose-600\" />,\r\n function: cancelAction.action,\r\n disabled: cancelAction.disabled,\r\n className: 'outline outline-1 outline-rose-600',\r\n tooltip: cancelAction.tooltip || t('cancel'),\r\n variant: 'ghost' as const,\r\n },\r\n ].filter(Boolean)\r\n\r\n const renderActionButtons = () => {\r\n if (useDropdown) {\r\n return (\r\n <DropdownMenu dir={isArabic ? 'rtl' : 'ltr'}>\r\n <DropdownMenuTrigger asChild>\r\n <Button variant=\"outline\" size=\"icon\" type=\"button\">\r\n <MoreVertical size={20} />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"w-56\">\r\n <DropdownMenuLabel>{t('actions')}</DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuGroup>\r\n {commonActions.map((action, index) => (\r\n <DropdownMenuItem\r\n key={index}\r\n disabled={action?.disabled}\r\n className=\"flex !justify-between\"\r\n onClick={action?.function}\r\n >\r\n <span>{action?.text}</span>\r\n <DropdownMenuShortcut>{action?.icon}</DropdownMenuShortcut>\r\n </DropdownMenuItem>\r\n ))}\r\n {dropMoreActions?.map((item, index) => (\r\n <DropdownMenuItem\r\n key={`more-${index}`}\r\n disabled={item.disabled}\r\n className=\"flex !justify-between\"\r\n onClick={item.function}\r\n {...item?.attr}\r\n >\r\n <span>{item.text}</span>\r\n <DropdownMenuShortcut>{item.icon}</DropdownMenuShortcut>\r\n {item.toolTip && <ButtonTooltip content={item.toolTip} />}\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuGroup>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n {commonActions.map((action, index) => (\r\n <ActionButton\r\n key={index}\r\n onClick={action?.function}\r\n disabled={action?.disabled}\r\n className={action?.className || ''}\r\n icon={action?.icon}\r\n tooltip={action?.tooltip}\r\n variant={action?.variant}\r\n />\r\n ))}\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <div className={`${className} flex flex-row items-center gap-1 text-center md:gap-3`}>\r\n {renderActionButtons()}\r\n\r\n {customButtons && Array.isArray(customButtons)\r\n ? customButtons\r\n .filter((customButton) => Object.keys(customButton).length !== 0)\r\n .map((customButton, index) => (\r\n <Button\r\n key={index}\r\n onClick={customButton?.function}\r\n className={`${customButton.className || ''} relative flex justify-center gap-2`}\r\n {...customButton.attr}\r\n >\r\n {customButton.toolTip && <ButtonTooltip content={customButton.toolTip} />}\r\n {customButton.text}\r\n {customButton.icon}\r\n {customButton.children}\r\n </Button>\r\n ))\r\n : React.isValidElement(customButtons)\r\n ? customButtons\r\n : null}\r\n\r\n {text && <span>{text}</span>}\r\n\r\n {!useDropdown && dropMoreActions && (\r\n <DropdownMenu dir={isArabic ? 'rtl' : 'ltr'}>\r\n <DropdownMenuTrigger asChild>\r\n <Button variant=\"outline\" size=\"icon\">\r\n <MoreVertical size={20} />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"w-56\">\r\n <DropdownMenuLabel>{t('actions')}</DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuGroup>\r\n {dropMoreActions\r\n .filter((action) => Object.keys(action).length !== 0)\r\n .map((item, index) => (\r\n <DropdownMenuItem\r\n key={index}\r\n disabled={item.disabled}\r\n className=\"flex !justify-between\"\r\n onClick={item.function}\r\n >\r\n <span>{item.text}</span>\r\n <DropdownMenuShortcut>{item.icon}</DropdownMenuShortcut>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuGroup>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport default TableActionsRow\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { LayoutGrid, PlusCircle, RotateCcw, TableIcon, Trash2 } from 'lucide-react'\r\nimport type { Table } from '@tanstack/react-table'\r\nimport { format } from 'date-fns'\r\nimport { ar, enUS } from 'date-fns/locale'\r\nimport { exportSelectedRowsCsv } from '../lib/csv-export'\r\nimport { CalendarIcon, Loader2, Plus, Search, Sheet } from 'lucide-react'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\n\r\nimport type {\r\n DataTableFilterableColumn,\r\n DataTableSearchableColumn,\r\n DataTableQuerySearchable,\r\n} from '../types/table'\r\nimport { cn } from '../lib/utils'\r\nimport { useTableConfig } from '../config'\r\nimport { Button, buttonVariants } from './ui/button'\r\nimport { Input } from './ui/input'\r\nimport { Calendar } from './ui/calendar'\r\nimport { Checkbox } from './ui/checkbox'\r\nimport { Label } from './ui/label'\r\nimport { Popover, PopoverContent, PopoverTrigger } from './ui/popover'\r\nimport { DataTableFacetedFilter } from './data-table-faceted-filter'\r\nimport { DataTableSingleSelectFilter } from './data-table-single-select-filter'\r\nimport { DataTableViewOptions } from './data-table-view-options'\r\nimport { ButtonTooltip, CustomButtonProps } from './table-actions-row'\r\nimport { Card } from './ui/card'\r\nimport { FilterOptions } from '../types/filter-options'\r\nimport { DataTableRoleFilter } from './data-table-role-filter'\r\n\r\nexport type ViewMode = 'table' | 'cards'\r\n\r\ntype BaseProps<TData> = {\r\n table: Table<TData>\r\n viewMode?: ViewMode\r\n onViewModeChange?: (mode: ViewMode) => void\r\n newRowLink?: string\r\n deleteRowsAction?: React.MouseEventHandler<HTMLButtonElement>\r\n addItemPagePath?: {\r\n url: string\r\n text?: string\r\n }\r\n isShowExportButtons?: {\r\n isShow: boolean\r\n ignoredCols?: string[]\r\n fileName?: string\r\n }\r\n customButtons?: CustomButtonProps[] | React.ReactElement\r\n customCss?: string\r\n}\r\n\r\ntype QueryFilterProps<TData> = {\r\n isQueryFilter: true\r\n handleFilterChange: (key: keyof FilterOptions, value: string | number | undefined) => void\r\n filterableQuery: DataTableFilterableColumn<TData>[]\r\n filterableColumns?: never\r\n currentFilters?: FilterOptions\r\n onClearFilters?: () => void\r\n}\r\n\r\ntype LocalFilterProps<TData> = {\r\n isQueryFilter?: false\r\n handleFilterChange?: never\r\n filterableQuery?: never\r\n filterableColumns?: DataTableFilterableColumn<TData>[]\r\n currentFilters?: never\r\n onClearFilters?: never\r\n}\r\n\r\ntype QuerySearchProps<TData> = BaseProps<TData> & {\r\n isQuerySearch: true\r\n searchableQuery: DataTableQuerySearchable<TData>[]\r\n searchableColumns?: never\r\n}\r\n\r\ntype LocalQuerySearchProps<TData> = BaseProps<TData> & {\r\n isQuerySearch?: false\r\n searchableQuery?: never\r\n searchableColumns?: DataTableSearchableColumn<TData>[]\r\n}\r\n\r\ntype DataTableToolbarProps<TData> = BaseProps<TData> &\r\n (QuerySearchProps<TData> | LocalQuerySearchProps<TData>) &\r\n (QueryFilterProps<TData> | LocalFilterProps<TData>)\r\n\r\nexport function DataTableToolbar<TData>({\r\n table,\r\n viewMode,\r\n onViewModeChange,\r\n filterableColumns = [],\r\n searchableColumns = [],\r\n newRowLink,\r\n addItemPagePath,\r\n deleteRowsAction,\r\n isShowExportButtons = {\r\n isShow: true,\r\n ignoredCols: [],\r\n fileName: '',\r\n },\r\n customButtons,\r\n isQuerySearch = false,\r\n searchableQuery,\r\n isQueryFilter = false,\r\n handleFilterChange,\r\n filterableQuery,\r\n currentFilters,\r\n onClearFilters,\r\n customCss = '',\r\n}: DataTableToolbarProps<TData>) {\r\n const isFiltered = table.getState().columnFilters.length > 0\r\n const isQueryFiltered = isQueryFilter && currentFilters && Object.keys(currentFilters).length > 0\r\n const hasActiveFilters = isFiltered || isQueryFiltered\r\n const [isPending, startTransition] = React.useTransition()\r\n const [isGoPath, setGoPath] = React.useState(false)\r\n const t = useTableTranslations()\r\n const config = useTableConfig()\r\n const router = config.router\r\n const [date, setDate] = React.useState<Date>()\r\n const isArabic = config.i18n.direction === 'rtl' || (config.i18n.direction === 'auto' && config.i18n.locale === 'ar')\r\n\r\n const goAddItemPage = () => {\r\n setGoPath(true)\r\n if (addItemPagePath && router) {\r\n router.push(addItemPagePath.url)\r\n }\r\n }\r\n\r\n const handleExportSelectedRowsCSV = () => {\r\n exportSelectedRowsCsv(table, {\r\n fileName: isShowExportButtons.fileName,\r\n ignoredCols: isShowExportButtons.ignoredCols,\r\n })\r\n }\r\n\r\n const activeFilterColumns = isQueryFilter ? (filterableQuery || []) : filterableColumns\r\n const hasFilters = activeFilterColumns.length > 0\r\n const hasSearch = isQuerySearch\r\n ? (searchableQuery && searchableQuery.length > 0)\r\n : searchableColumns.length > 0\r\n\r\n return (\r\n <div className=\"flex w-full flex-col gap-3\">\r\n <div className=\"flex items-center gap-3\">\r\n {config.features.viewToggle && viewMode && onViewModeChange && (\r\n <div className=\"flex items-center rounded-lg border bg-muted/30 p-0.5\">\r\n <button\r\n onClick={() => onViewModeChange('table')}\r\n className={cn(\r\n 'inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors',\r\n viewMode === 'table'\r\n ? 'bg-primary text-primary-foreground shadow-sm'\r\n : 'text-muted-foreground hover:text-foreground'\r\n )}\r\n >\r\n <TableIcon className=\"size-4\" />\r\n {t('tableView')}\r\n </button>\r\n <button\r\n onClick={() => onViewModeChange('cards')}\r\n className={cn(\r\n 'inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors',\r\n viewMode === 'cards'\r\n ? 'bg-primary text-primary-foreground shadow-sm'\r\n : 'text-muted-foreground hover:text-foreground'\r\n )}\r\n >\r\n <LayoutGrid className=\"size-4\" />\r\n {t('cardView')}\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div className=\"flex flex-1 items-center gap-3\">\r\n {config.features.search && isQuerySearch && searchableQuery && searchableQuery.length > 0 && (\r\n <>\r\n {searchableQuery.map((column) => (\r\n <div className=\"relative flex-1 max-w-sm\" key={String(column.id)}>\r\n <Search className=\"absolute start-3 top-2.5 h-4 w-4 text-muted-foreground\" />\r\n <Input\r\n id={String(column.id)}\r\n type={column?.type || 'text'}\r\n placeholder={`${t('Filter')} ${column.title}...`}\r\n onChange={column.handleInputChange}\r\n defaultValue={column.defaultSearch || ''}\r\n className=\"ps-9\"\r\n />\r\n </div>\r\n ))}\r\n </>\r\n )}\r\n {config.features.search && !isQuerySearch &&\r\n searchableColumns.length > 0 &&\r\n searchableColumns.map(\r\n (column) =>\r\n table.getColumn(column.id ? String(column.id) : '') && (\r\n <div className=\"flex-1 max-w-sm\" key={String(column.id)}>\r\n {column?.type === 'checkbox' ? (\r\n <div className=\"flex items-center gap-2\">\r\n <Checkbox\r\n id={String(column.id)}\r\n checked={\r\n table.getColumn(String(column.id))?.getFilterValue() === 'true'\r\n }\r\n onCheckedChange={(value) =>\r\n table\r\n .getColumn(String(column.id))\r\n ?.setFilterValue(value ? 'true' : 'false')\r\n }\r\n aria-label={`Filter ${column.title}`}\r\n className=\"size-4\"\r\n />\r\n <Label className=\"cursor-pointer text-sm\" htmlFor={String(column.id)}>\r\n {column.title}\r\n </Label>\r\n </div>\r\n ) : column?.type === 'date' ? (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n className={cn(\r\n 'w-full justify-start text-start font-normal',\r\n !date && 'text-muted-foreground'\r\n )}\r\n >\r\n <CalendarIcon className=\"me-2 size-4\" />\r\n {date\r\n ? (() => {\r\n const filterValue = table\r\n .getColumn(String(column.id))\r\n ?.getFilterValue()\r\n const parsedDate = filterValue\r\n ? new Date(filterValue as string)\r\n : null\r\n\r\n return parsedDate && !isNaN(parsedDate.getTime())\r\n ? format(parsedDate, 'PPP', {\r\n locale: isArabic ? ar : enUS,\r\n })\r\n : t('datePlaceholder')\r\n })()\r\n : t('datePlaceholder')}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\">\r\n <Calendar\r\n className=\"py-2 text-sm\"\r\n mode=\"single\"\r\n selected={\r\n table.getColumn(String(column.id))?.getFilterValue()\r\n ? new Date(\r\n table\r\n .getColumn(String(column.id))\r\n ?.getFilterValue() as string\r\n )\r\n : undefined\r\n }\r\n onSelect={(selectedDate) => {\r\n if (selectedDate && !isNaN(selectedDate.getTime())) {\r\n table\r\n .getColumn(String(column.id))\r\n ?.setFilterValue(format(selectedDate, 'yyyy-MM-dd'))\r\n setDate(selectedDate)\r\n }\r\n }}\r\n initialFocus\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n ) : (\r\n <div className=\"relative\">\r\n <Search className=\"absolute start-3 top-2.5 h-4 w-4 text-muted-foreground\" />\r\n <Input\r\n id={String(column.id)}\r\n type={column?.type || 'text'}\r\n key={String(column.id)}\r\n placeholder={`${t('Filter')} ${column.title}...`}\r\n value={\r\n (table.getColumn(String(column.id))?.getFilterValue() as string) ??\r\n ''\r\n }\r\n onChange={(event) =>\r\n table\r\n .getColumn(String(column.id))\r\n ?.setFilterValue(event.target.value)\r\n }\r\n className={`ps-9 ${customCss}`}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n )}\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n {deleteRowsAction && table.getSelectedRowModel().rows.length > 0 ? (\r\n <Button\r\n aria-label=\"Delete selected rows\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"h-9\"\r\n onClick={(event) => {\r\n startTransition(() => {\r\n table.toggleAllPageRowsSelected(false)\r\n deleteRowsAction(event)\r\n })\r\n }}\r\n disabled={isPending}\r\n >\r\n <Trash2 className=\"me-2 size-4\" aria-hidden=\"true\" />\r\n {t('Delete')}\r\n </Button>\r\n ) : newRowLink ? (\r\n <a\r\n aria-label=\"Create new row\"\r\n href={newRowLink}\r\n className={cn(\r\n buttonVariants({\r\n variant: 'outline',\r\n size: 'sm',\r\n className: 'h-9',\r\n })\r\n )}\r\n >\r\n <PlusCircle className=\"me-2 size-4\" aria-hidden=\"true\" />\r\n {t('new')}\r\n </a>\r\n ) : null}\r\n {config.features.columnVisibility && <DataTableViewOptions table={table} />}\r\n {config.features.csvExport && isShowExportButtons.isShow && (\r\n <Button\r\n disabled={!table.getSelectedRowModel().rows.length}\r\n aria-label=\"Export CSV\"\r\n title=\"Export CSV\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"h-9 gap-1.5\"\r\n onClick={handleExportSelectedRowsCSV}\r\n >\r\n <Sheet className=\"size-4\" aria-hidden=\"true\" />\r\n {t('export-csv')}\r\n </Button>\r\n )}\r\n {customButtons && Array.isArray(customButtons)\r\n ? customButtons\r\n .filter((customButton) => Object.keys(customButton).length !== 0)\r\n .map((customButton, index) => (\r\n <Button\r\n key={index}\r\n onClick={customButton.function}\r\n size=\"sm\"\r\n className={`${\r\n customButton.className ? customButton.className : ''\r\n } relative h-9 gap-1.5`}\r\n {...customButton.attr}\r\n >\r\n {customButton.toolTip && (\r\n <ButtonTooltip content={customButton.toolTip}></ButtonTooltip>\r\n )}\r\n {customButton.icon}\r\n {customButton.text}\r\n {customButton.children}\r\n </Button>\r\n ))\r\n : React.isValidElement(customButtons)\r\n ? customButtons\r\n : null}\r\n {addItemPagePath ? (\r\n addItemPagePath?.url ? (\r\n <Button\r\n onClick={goAddItemPage}\r\n size=\"sm\"\r\n className=\"h-9\"\r\n disabled={isGoPath}\r\n >\r\n {isGoPath ? <Loader2 size={20} className=\"animate-spin\" /> : <Plus size={20} />}\r\n {addItemPagePath.text ? addItemPagePath.text : t('add')}\r\n </Button>\r\n ) : null\r\n ) : null}\r\n </div>\r\n </div>\r\n\r\n {config.features.filter && hasFilters && (\r\n <div className=\"flex items-center gap-3\">\r\n <span className=\"text-xs font-medium text-muted-foreground whitespace-nowrap\">\r\n {t('filter-by')}\r\n </span>\r\n <div className=\"flex flex-wrap items-center gap-2\">\r\n {!isQueryFilter && filterableColumns.length > 0 && (\r\n <>\r\n {filterableColumns.map((column) => {\r\n const columnId = String(column.id)\r\n\r\n if (column.isSingleSelect) {\r\n return (\r\n <DataTableSingleSelectFilter\r\n key={columnId}\r\n column={table.getColumn(columnId)}\r\n title={column.title}\r\n options={column.options}\r\n className=\"\"\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <DataTableFacetedFilter\r\n key={columnId}\r\n column={table.getColumn(columnId)}\r\n title={column.title}\r\n options={column.options}\r\n />\r\n )\r\n })}\r\n </>\r\n )}\r\n {isQueryFilter && filterableQuery && filterableQuery.length > 0 && (\r\n <>\r\n {filterableQuery.map((column) => {\r\n if (column.isSingleSelect) {\r\n return (\r\n <DataTableSingleSelectFilter\r\n key={String(column.id)}\r\n column={column}\r\n title={column.title}\r\n options={column.options}\r\n isQueryFilter={isQueryFilter}\r\n handleFilterChange={handleFilterChange}\r\n currentValue={currentFilters?.[column.id as keyof FilterOptions] as string}\r\n className=\"w-[180px]\"\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <DataTableFacetedFilter\r\n key={String(column.id)}\r\n column={column}\r\n title={column.title}\r\n options={column.options}\r\n isQueryFilter={isQueryFilter}\r\n handleFilterChange={handleFilterChange}\r\n currentValue={currentFilters?.[column.id as keyof FilterOptions] as string}\r\n />\r\n )\r\n })}\r\n </>\r\n )}\r\n {hasActiveFilters && (\r\n <Button\r\n aria-label=\"Reset filters\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-8 gap-1.5 text-muted-foreground hover:text-foreground\"\r\n onClick={() => {\r\n if (isQueryFilter && onClearFilters) {\r\n onClearFilters()\r\n } else {\r\n table.resetColumnFilters()\r\n }\r\n }}\r\n >\r\n <RotateCcw className=\"size-3.5\" aria-hidden=\"true\" />\r\n {t('Reset')}\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn('rounded-xl border bg-card text-card-foreground shadow-sm', className)}\r\n {...props}\r\n />\r\n )\r\n)\r\nCard.displayName = 'Card'\r\n\r\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\r\n )\r\n)\r\nCardHeader.displayName = 'CardHeader'\r\n\r\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn('font-semibold leading-none tracking-tight', className)} {...props} />\r\n )\r\n)\r\nCardTitle.displayName = 'CardTitle'\r\n\r\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\r\n )\r\n)\r\nCardDescription.displayName = 'CardDescription'\r\n\r\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\r\n )\r\n)\r\nCardContent.displayName = 'CardContent'\r\n\r\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\r\n )\r\n)\r\nCardFooter.displayName = 'CardFooter'\r\n\r\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { flexRender, Table } from '@tanstack/react-table'\r\nimport { Card, CardContent } from './ui/card'\r\nimport { Checkbox } from './ui/checkbox'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\nimport { SearchX, RotateCcw } from 'lucide-react'\r\nimport { Button } from './ui/button'\r\n\r\ninterface DataTableCardViewProps<TData> {\r\n table: Table<TData>\r\n}\r\n\r\nexport function DataTableCardView<TData>({ table }: DataTableCardViewProps<TData>) {\r\n const t = useTableTranslations()\r\n const rows = table.getRowModel().rows\r\n\r\n if (!rows.length) {\r\n return (\r\n <Card className=\"mt-3\">\r\n <CardContent className=\"py-16\">\r\n <div className=\"flex flex-col items-center gap-3\">\r\n <SearchX className=\"size-10 text-muted-foreground/50\" aria-hidden=\"true\" />\r\n <div className=\"space-y-1 text-center\">\r\n <p className=\"font-semibold\">{t('no-records-found')}</p>\r\n <p className=\"text-sm text-muted-foreground\">{t('no-records-hint')}</p>\r\n </div>\r\n {table.getState().columnFilters.length > 0 && (\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"mt-1 gap-1.5\"\r\n onClick={() => table.resetColumnFilters()}\r\n >\r\n <RotateCcw className=\"size-3.5\" aria-hidden=\"true\" />\r\n {t('reset-filters')}\r\n </Button>\r\n )}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\r\n {rows.map((row) => {\r\n const visibleCells = row.getVisibleCells()\r\n return (\r\n <Card\r\n key={row.id}\r\n data-state={row.getIsSelected() && 'selected'}\r\n className=\"transition-colors data-[state=selected]:border-primary/50 data-[state=selected]:bg-primary/5\"\r\n >\r\n <CardContent className=\"p-4\">\r\n <div className=\"mb-3 flex items-center gap-2\">\r\n <Checkbox\r\n checked={row.getIsSelected()}\r\n onCheckedChange={(value) => row.toggleSelected(!!value)}\r\n aria-label={t('select')}\r\n className=\"size-4\"\r\n />\r\n <span className=\"text-xs text-muted-foreground\">\r\n #{row.index + 1}\r\n </span>\r\n </div>\r\n <div className=\"space-y-2\">\r\n {visibleCells.map((cell) => {\r\n if (cell.column.id === 'select') return null\r\n const header = cell.column.columnDef.header\r\n const headerLabel =\r\n typeof header === 'string' ? header : cell.column.id\r\n return (\r\n <div key={cell.id} className=\"flex items-start justify-between gap-2\">\r\n <span className=\"text-xs font-medium text-muted-foreground capitalize shrink-0\">\r\n {headerLabel}\r\n </span>\r\n <span className=\"text-sm text-end\">\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </span>\r\n </div>\r\n )\r\n })}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n )\r\n })}\r\n </div>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { Check, ChevronDown, ListFilter, Rows3, Type } from 'lucide-react'\r\nimport { useTableTranslations } from '../../hooks/use-table-translations'\r\n\r\nimport type { DataTableFilterOption } from '../../types/table'\r\nimport { cn } from '../../lib/utils'\r\nimport { Button } from '../ui/button'\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandSeparator,\r\n} from '../ui/command'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../ui/popover'\r\n\r\ninterface DataTableAdvancedFilterProps<TData> {\r\n options: DataTableFilterOption<TData>[]\r\n selectedOptions: DataTableFilterOption<TData>[]\r\n setSelectedOptions: React.Dispatch<\r\n React.SetStateAction<DataTableFilterOption<TData>[]>\r\n >\r\n children?: React.ReactNode\r\n}\r\n\r\nexport function DataTableAdvancedFilter<TData>({\r\n options,\r\n selectedOptions,\r\n setSelectedOptions,\r\n children,\r\n}: DataTableAdvancedFilterProps<TData>) {\r\n const [value, setValue] = React.useState('')\r\n const [open, setOpen] = React.useState(false)\r\n const [selectedOption, setSelectedOption] = React.useState<\r\n DataTableFilterOption<TData> | undefined\r\n >(options[0])\r\n const t = useTableTranslations()\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n {children ?? (\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n role=\"combobox\"\r\n className=\"h-9 gap-1.5\"\r\n >\r\n <ListFilter className=\"size-4\" />\r\n {t('Filter')}\r\n <ChevronDown className=\"size-3.5 opacity-50\" />\r\n </Button>\r\n )}\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[220px] p-0\" align=\"end\">\r\n <Command>\r\n <CommandInput placeholder={t('filter-by')} />\r\n <CommandEmpty>{t('no-items-found')}</CommandEmpty>\r\n <CommandGroup heading={t('Filter')}>\r\n {options.map((option) => {\r\n const isSelected = selectedOptions.some(\r\n (sel) => sel.value === option.value && !sel.isMulti\r\n )\r\n\r\n return (\r\n <CommandItem\r\n key={String(option.value)}\r\n className=\"gap-2 capitalize\"\r\n value={String(option.value)}\r\n onSelect={(currentValue) => {\r\n setValue(currentValue === value ? '' : currentValue)\r\n setOpen(false)\r\n setSelectedOption(option)\r\n setSelectedOptions((prev) => {\r\n if (isSelected) {\r\n return prev.filter(\r\n (item) =>\r\n item.value !== option.value || item.isMulti\r\n )\r\n } else {\r\n return [...prev, option]\r\n }\r\n })\r\n }}\r\n >\r\n {option.items.length > 0 ? (\r\n <Rows3 className=\"size-4 text-muted-foreground\" />\r\n ) : (\r\n <Type className=\"size-4 text-muted-foreground\" />\r\n )}\r\n <span className=\"flex-1\">{option.label}</span>\r\n {isSelected && (\r\n <Check className=\"size-4 text-primary\" />\r\n )}\r\n </CommandItem>\r\n )\r\n })}\r\n </CommandGroup>\r\n <CommandSeparator />\r\n <CommandGroup>\r\n <CommandItem\r\n className=\"gap-2\"\r\n onSelect={() => {\r\n setOpen(false)\r\n setSelectedOptions([\r\n ...selectedOptions,\r\n {\r\n id: crypto.randomUUID(),\r\n label: String(selectedOption?.label),\r\n value: String(selectedOption?.value),\r\n items: selectedOption?.items ?? [],\r\n isMulti: true,\r\n },\r\n ])\r\n }}\r\n >\r\n <Rows3 className=\"size-4 text-muted-foreground\" />\r\n {t('advanced-filter')}\r\n </CommandItem>\r\n </CommandGroup>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { Trash2, X } from 'lucide-react'\r\nimport type { Table } from '@tanstack/react-table'\r\n\r\nimport type { DataTableFilterOption } from '../../types/table'\r\nimport { cn } from '../../lib/utils'\r\nimport { useDebounce } from '../../hooks/use-debounce'\r\nimport { useTableConfig } from '../../config'\r\nimport { Button } from '../ui/button'\r\nimport { Input } from '../ui/input'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../ui/popover'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectGroup,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '../ui/select'\r\n\r\nimport { DataTableFacetedFilter } from '../data-table-faceted-filter'\r\n\r\ninterface DataTableAdvancedFilterItemProps<TData> {\r\n table: Table<TData>\r\n selectedOption: DataTableFilterOption<TData>\r\n setSelectedOptions: React.Dispatch<\r\n React.SetStateAction<DataTableFilterOption<TData>[]>\r\n >\r\n}\r\n\r\nexport function DataTableAdvancedFilterItem<TData>({\r\n table,\r\n selectedOption,\r\n setSelectedOptions,\r\n}: DataTableAdvancedFilterItemProps<TData>) {\r\n const config = useTableConfig()\r\n const router = config.router\r\n const searchParams = router ? router.getSearchParams() : new URLSearchParams()\r\n const pathname = router ? router.getPathname() : ''\r\n\r\n const [value, setValue] = React.useState('')\r\n const debounceValue = useDebounce(value, 500)\r\n const [open, setOpen] = React.useState(true)\r\n\r\n const selectedValues =\r\n selectedOption.items.length > 0\r\n ? Array.from(\r\n new Set(\r\n table\r\n .getColumn(String(selectedOption.value))\r\n ?.getFilterValue() as string[]\r\n )\r\n )\r\n : []\r\n\r\n const filterVarieties =\r\n selectedOption.items.length > 0\r\n ? ['is', 'is not']\r\n : ['contains', 'does not contain', 'is', 'is not']\r\n\r\n const [filterVariety, setFilterVariety] = React.useState(filterVarieties[0])\r\n\r\n const createQueryString = React.useCallback(\r\n (params: Record<string, string | number | null>) => {\r\n const newSearchParams = new URLSearchParams(searchParams.toString())\r\n\r\n for (const [key, value] of Object.entries(params)) {\r\n if (value === null) {\r\n newSearchParams.delete(key)\r\n } else {\r\n newSearchParams.set(key, String(value))\r\n }\r\n }\r\n\r\n return newSearchParams.toString()\r\n },\r\n [searchParams]\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!router) return\r\n\r\n if (debounceValue.length > 0) {\r\n router.push(\r\n `${pathname}?${createQueryString({\r\n [selectedOption.value]: `${debounceValue}${\r\n debounceValue.length > 0 ? `.${filterVariety}` : ''\r\n }`,\r\n })}`\r\n )\r\n }\r\n\r\n if (debounceValue.length === 0) {\r\n router.push(\r\n `${pathname}?${createQueryString({\r\n [selectedOption.value]: null,\r\n })}`\r\n )\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [debounceValue, filterVariety, selectedOption.value])\r\n\r\n const handleRemove = () => {\r\n if (router) {\r\n router.push(\r\n `${pathname}?${createQueryString({\r\n [selectedOption.value]: null,\r\n })}`\r\n )\r\n }\r\n setSelectedOptions((prev) =>\r\n prev.filter((item) => item.value !== selectedOption.value)\r\n )\r\n }\r\n\r\n const hasValue = value.length > 0 || selectedValues.length > 0\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className={cn(\r\n 'h-8 gap-1.5 rounded-full border-dashed',\r\n hasValue && 'border-solid border-primary/30 bg-primary/5 text-primary hover:bg-primary/10'\r\n )}\r\n >\r\n <span className=\"font-medium capitalize\">\r\n {selectedOption.label}\r\n </span>\r\n {hasValue && (\r\n <>\r\n <span className=\"text-muted-foreground\">\r\n {filterVariety}\r\n </span>\r\n {selectedValues.length > 0 ? (\r\n <span className=\"font-semibold\">\r\n {selectedValues.length > 2\r\n ? `${selectedValues.length} selected`\r\n : selectedValues.join(', ')}\r\n </span>\r\n ) : (\r\n <span className=\"max-w-[100px] truncate font-semibold\">{value}</span>\r\n )}\r\n </>\r\n )}\r\n <X\r\n className=\"size-3.5 shrink-0 opacity-50 hover:opacity-100\"\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n handleRemove()\r\n }}\r\n />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-64 space-y-2 p-3 text-xs\" align=\"start\">\r\n <div className=\"flex items-center gap-1.5\">\r\n <span className=\"shrink-0 text-sm font-medium capitalize\">{selectedOption.label}</span>\r\n <Select onValueChange={(value) => setFilterVariety(value)}>\r\n <SelectTrigger className=\"h-7 w-fit shrink-0 gap-1 rounded-md border-none bg-muted/50 px-2 text-xs font-medium hover:bg-muted\">\r\n <SelectValue placeholder={filterVarieties[0]} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectGroup>\r\n {filterVarieties.map((variety) => (\r\n <SelectItem key={variety} value={variety} className=\"text-xs\">\r\n {variety}\r\n </SelectItem>\r\n ))}\r\n </SelectGroup>\r\n </SelectContent>\r\n </Select>\r\n <div className=\"flex-1\" />\r\n <Button\r\n aria-label=\"Remove filter\"\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"size-7 shrink-0 text-muted-foreground hover:text-destructive\"\r\n onClick={handleRemove}\r\n >\r\n <Trash2 className=\"size-3.5\" />\r\n </Button>\r\n </div>\r\n {selectedOption.items.length > 0 ? (\r\n table.getColumn(\r\n selectedOption.value ? String(selectedOption.value) : ''\r\n ) && (\r\n <DataTableFacetedFilter\r\n key={String(selectedOption.value)}\r\n column={table.getColumn(\r\n selectedOption.value ? String(selectedOption.value) : ''\r\n )}\r\n title={selectedOption.label}\r\n options={selectedOption.items}\r\n variant=\"command\"\r\n />\r\n )\r\n ) : (\r\n <Input\r\n placeholder=\"Type here...\"\r\n className=\"h-8 text-xs\"\r\n value={value}\r\n onChange={(event) => setValue(event.target.value)}\r\n autoFocus\r\n />\r\n )}\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport {\r\n Copy,\r\n GripVertical,\r\n MoreHorizontal,\r\n Trash2,\r\n} from 'lucide-react'\r\nimport type { Table } from '@tanstack/react-table'\r\nimport { useTableTranslations } from '../../hooks/use-table-translations'\r\nimport { useTableConfig } from '../../config'\r\n\r\nimport type { DataTableFilterOption } from '../../types/table'\r\nimport { useDebounce } from '../../hooks/use-debounce'\r\nimport { Button } from '../ui/button'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '../ui/dropdown-menu'\r\nimport { Input } from '../ui/input'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../ui/popover'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectGroup,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '../ui/select'\r\nimport { Separator } from '../ui/separator'\r\n\r\nimport { DataTableFacetedFilter } from '../data-table-faceted-filter'\r\n\r\nconst operators = [\r\n { label: 'And', value: 'and' },\r\n { label: 'Or', value: 'or' },\r\n]\r\n\r\ninterface DataTableMultiFilterProps<TData> {\r\n table: Table<TData>\r\n allOptions: DataTableFilterOption<TData>[]\r\n options: DataTableFilterOption<TData>[]\r\n setSelectedOptions: React.Dispatch<\r\n React.SetStateAction<DataTableFilterOption<TData>[]>\r\n >\r\n}\r\n\r\nexport function DataTableMultiFilter<TData>({\r\n table,\r\n allOptions,\r\n options,\r\n setSelectedOptions,\r\n}: DataTableMultiFilterProps<TData>) {\r\n const [open, setOpen] = React.useState(true)\r\n const [operator, setOperator] = React.useState(operators[0])\r\n const t = useTableTranslations()\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"h-8 gap-1.5 rounded-full border-dashed\"\r\n >\r\n <GripVertical className=\"size-3.5 text-muted-foreground\" />\r\n <span className=\"font-medium\">\r\n {options.length} {options.length === 1 ? 'rule' : 'rules'}\r\n </span>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-fit min-w-[420px] p-0\" align=\"start\">\r\n <div className=\"space-y-2 p-4\">\r\n {options.map((option, i) => (\r\n <MultiFilterRow\r\n key={option.id ?? i}\r\n i={i}\r\n option={option}\r\n table={table}\r\n allOptions={allOptions}\r\n options={options}\r\n setSelectedOptions={setSelectedOptions}\r\n operator={operator}\r\n setOperator={setOperator}\r\n />\r\n ))}\r\n </div>\r\n <Separator />\r\n <div className=\"p-2\">\r\n <Button\r\n aria-label=\"Delete filter\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"w-full justify-start gap-2 text-muted-foreground hover:text-destructive\"\r\n onClick={() => {\r\n setSelectedOptions((prev) => prev.filter((item) => !item.isMulti))\r\n }}\r\n >\r\n <Trash2 className=\"size-3.5\" />\r\n {t('delete')}\r\n </Button>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n\r\ninterface MultiFilterRowProps<TData> extends DataTableMultiFilterProps<TData> {\r\n i: number\r\n option: DataTableFilterOption<TData>\r\n operator?: (typeof operators)[number]\r\n setOperator: React.Dispatch<React.SetStateAction<(typeof operators)[number]>>\r\n}\r\n\r\nexport function MultiFilterRow<TData>({\r\n i,\r\n table,\r\n option,\r\n allOptions,\r\n options,\r\n setSelectedOptions,\r\n operator,\r\n setOperator,\r\n}: MultiFilterRowProps<TData>) {\r\n const config = useTableConfig()\r\n const router = config.router\r\n const searchParams = router ? router.getSearchParams() : new URLSearchParams()\r\n const pathname = router ? router.getPathname() : ''\r\n\r\n const [value, setValue] = React.useState('')\r\n const debounceValue = useDebounce(value, 500)\r\n\r\n const [selectedOption, setSelectedOption] = React.useState<\r\n DataTableFilterOption<TData> | undefined\r\n >(options[0])\r\n\r\n const filterVarieties = selectedOption?.items.length\r\n ? ['is', 'is not']\r\n : ['contains', 'does not contain', 'is', 'is not']\r\n\r\n const [filterVariety, setFilterVariety] = React.useState(filterVarieties[0])\r\n\r\n React.useEffect(() => {\r\n if (selectedOption?.items.length) {\r\n setFilterVariety('is')\r\n }\r\n }, [selectedOption?.items.length])\r\n\r\n const createQueryString = React.useCallback(\r\n (params: Record<string, string | number | null>) => {\r\n const newSearchParams = new URLSearchParams(searchParams.toString())\r\n\r\n for (const [key, value] of Object.entries(params)) {\r\n if (value === null) {\r\n newSearchParams.delete(key)\r\n } else {\r\n newSearchParams.set(key, String(value))\r\n }\r\n }\r\n\r\n return newSearchParams.toString()\r\n },\r\n [searchParams]\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!router) return\r\n\r\n if (debounceValue.length > 0) {\r\n router.push(\r\n `${pathname}?${createQueryString({\r\n [selectedOption?.value ?? '']: `${debounceValue}${\r\n debounceValue.length > 0 ? `.${filterVariety}` : ''\r\n }`,\r\n })}`\r\n )\r\n }\r\n\r\n if (debounceValue.length === 0) {\r\n router.push(\r\n `${pathname}?${createQueryString({\r\n [selectedOption?.value ?? '']: null,\r\n })}`\r\n )\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [debounceValue, filterVariety, selectedOption?.value])\r\n\r\n React.useEffect(() => {\r\n if (!router) return\r\n if (operator?.value) {\r\n router.push(\r\n `${pathname}?${createQueryString({\r\n operator: operator.value,\r\n })}`\r\n )\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [operator?.value])\r\n\r\n return (\r\n <div className=\"flex items-center gap-2\">\r\n <div className=\"w-[60px] shrink-0\">\r\n {i === 0 ? (\r\n <span className=\"text-xs font-medium text-muted-foreground\">Where</span>\r\n ) : i === 1 ? (\r\n <Select\r\n value={operator?.value}\r\n onValueChange={(value) => {\r\n const found = operators.find((o) => o.value === value)\r\n if (found) setOperator(found)\r\n }}\r\n >\r\n <SelectTrigger className=\"h-8 w-[60px] text-xs\">\r\n <SelectValue placeholder={operator?.label} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectGroup>\r\n {operators.map((op) => (\r\n <SelectItem\r\n key={op.value}\r\n value={op.value}\r\n className=\"text-xs\"\r\n >\r\n {op.label}\r\n </SelectItem>\r\n ))}\r\n </SelectGroup>\r\n </SelectContent>\r\n </Select>\r\n ) : (\r\n <span className=\"text-xs font-medium text-muted-foreground\" key={operator?.value}>\r\n {operator?.label}\r\n </span>\r\n )}\r\n </div>\r\n\r\n <Select\r\n value={String(selectedOption?.value)}\r\n onValueChange={(value) => {\r\n setSelectedOption(allOptions.find((option) => option.value === value))\r\n setSelectedOptions((prev) =>\r\n prev.map((item) => {\r\n if (item.id === option.id) {\r\n return { ...item, value }\r\n } else {\r\n return item\r\n }\r\n })\r\n )\r\n }}\r\n >\r\n <SelectTrigger className=\"h-8 w-[120px] text-xs capitalize\">\r\n <SelectValue placeholder={selectedOption?.label} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectGroup>\r\n {allOptions.map((opt) => (\r\n <SelectItem\r\n key={String(opt.value)}\r\n value={String(opt.value)}\r\n className=\"text-xs capitalize\"\r\n >\r\n {opt.label}\r\n </SelectItem>\r\n ))}\r\n </SelectGroup>\r\n </SelectContent>\r\n </Select>\r\n\r\n <Select\r\n value={filterVariety}\r\n onValueChange={(value) => setFilterVariety(value)}\r\n >\r\n <SelectTrigger className=\"h-8 w-[140px] text-xs\">\r\n <SelectValue placeholder={filterVarieties[0]} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectGroup>\r\n {filterVarieties.map((variety) => (\r\n <SelectItem key={variety} value={variety} className=\"text-xs\">\r\n {variety}\r\n </SelectItem>\r\n ))}\r\n </SelectGroup>\r\n </SelectContent>\r\n </Select>\r\n\r\n {selectedOption?.items.length ? (\r\n table.getColumn(selectedOption.value ? String(option.value) : '') && (\r\n <DataTableFacetedFilter\r\n key={selectedOption.id}\r\n column={table.getColumn(\r\n selectedOption.value ? String(selectedOption.value) : ''\r\n )}\r\n title={selectedOption.label}\r\n options={selectedOption.items}\r\n />\r\n )\r\n ) : (\r\n <Input\r\n placeholder=\"Type here...\"\r\n className=\"h-8 min-w-[120px] text-xs\"\r\n value={value}\r\n onChange={(event) => setValue(event.target.value)}\r\n autoFocus\r\n />\r\n )}\r\n\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 shrink-0\">\r\n <MoreHorizontal className=\"size-4\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\">\r\n <DropdownMenuItem\r\n className=\"gap-2 text-destructive focus:text-destructive\"\r\n onClick={() => {\r\n setSelectedOptions((prev) =>\r\n prev.filter((item) => item.id !== option.id)\r\n )\r\n }}\r\n >\r\n <Trash2 className=\"size-3.5\" />\r\n Remove\r\n </DropdownMenuItem>\r\n <DropdownMenuItem\r\n className=\"gap-2\"\r\n onClick={() => {\r\n setSelectedOptions((prev) => [\r\n ...prev,\r\n {\r\n id: crypto.randomUUID(),\r\n label: String(selectedOption?.label),\r\n value: String(selectedOption?.value),\r\n isMulti: true,\r\n items: selectedOption?.items ?? [],\r\n },\r\n ])\r\n }}\r\n >\r\n <Copy className=\"size-3.5\" />\r\n Duplicate\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport type { Table } from '@tanstack/react-table'\r\nimport { ListFilter, Plus, RotateCcw, Search, X } from 'lucide-react'\r\nimport { useTableTranslations } from '../../hooks/use-table-translations'\r\nimport { useTableConfig } from '../../config'\r\n\r\nimport type {\r\n DataTableFilterableColumn,\r\n DataTableFilterOption,\r\n DataTableSearchableColumn,\r\n} from '../../types/table'\r\nimport { cn } from '../../lib/utils'\r\nimport { Button } from '../ui/button'\r\nimport { Input } from '../ui/input'\r\n\r\nimport { DataTableViewOptions } from '../data-table-view-options'\r\nimport { DataTableAdvancedFilter } from './data-table-advanced-filter'\r\nimport { DataTableAdvancedFilterItem } from './data-table-advanced-filter-item'\r\nimport { DataTableMultiFilter } from './data-table-multi-filter'\r\n\r\ninterface DataTableAdvancedToolbarProps<TData> {\r\n table: Table<TData>\r\n searchableColumns?: DataTableSearchableColumn<TData>[]\r\n filterableColumns?: DataTableFilterableColumn<TData>[]\r\n addItemPagePath?: string\r\n}\r\n\r\nexport function DataTableAdvancedToolbar<TData>({\r\n table,\r\n filterableColumns = [],\r\n searchableColumns = [],\r\n addItemPagePath,\r\n}: DataTableAdvancedToolbarProps<TData>) {\r\n const [selectedOptions, setSelectedOptions] = React.useState<\r\n DataTableFilterOption<TData>[]\r\n >([])\r\n const [open, setOpen] = React.useState(false)\r\n const t = useTableTranslations()\r\n const config = useTableConfig()\r\n const router = config.router\r\n\r\n React.useEffect(() => {\r\n if (selectedOptions.length > 0) {\r\n setOpen(true)\r\n }\r\n }, [selectedOptions])\r\n\r\n const options: DataTableFilterOption<TData>[] = React.useMemo(() => {\r\n const searchableOptions = searchableColumns.map((column) => ({\r\n id: crypto.randomUUID(),\r\n label: column.title ?? String(column.id),\r\n value: column.id,\r\n items: [],\r\n }))\r\n const filterableOptions = filterableColumns.map((column) => ({\r\n id: crypto.randomUUID(),\r\n label: column.title,\r\n value: column.id,\r\n items: column.options,\r\n }))\r\n\r\n return [...searchableOptions, ...filterableOptions]\r\n }, [filterableColumns, searchableColumns])\r\n\r\n const goAddItemPage = () => {\r\n if (addItemPagePath && router) {\r\n router.push(addItemPagePath)\r\n }\r\n }\r\n\r\n const handleClearAll = () => {\r\n setSelectedOptions([])\r\n setOpen(false)\r\n for (const col of searchableColumns) {\r\n table.getColumn(String(col.id))?.setFilterValue('')\r\n }\r\n for (const col of filterableColumns) {\r\n table.getColumn(String(col.id))?.setFilterValue(undefined)\r\n }\r\n }\r\n\r\n const hasActiveFilters = selectedOptions.length > 0 ||\r\n searchableColumns.some(\r\n (col) => !!(table.getColumn(String(col.id))?.getFilterValue() as string)\r\n )\r\n\r\n return (\r\n <div className=\"flex w-full flex-col gap-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex flex-1 items-center gap-3\">\r\n {searchableColumns.length > 0 &&\r\n searchableColumns.map(\r\n (column) =>\r\n table.getColumn(column.id ? String(column.id) : '') && (\r\n <div className=\"relative flex-1 max-w-sm\" key={String(column.id)}>\r\n <Search className=\"absolute start-3 top-2.5 size-4 text-muted-foreground\" />\r\n <Input\r\n placeholder={`${t('Filter')} ${column.title ?? String(column.id)}...`}\r\n value={\r\n (table\r\n .getColumn(String(column.id))\r\n ?.getFilterValue() as string) ?? ''\r\n }\r\n onChange={(event) =>\r\n table\r\n .getColumn(String(column.id))\r\n ?.setFilterValue(event.target.value)\r\n }\r\n className=\"ps-9\"\r\n />\r\n </div>\r\n )\r\n )}\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n {selectedOptions.length > 0 ? (\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"h-9 gap-1.5\"\r\n onClick={() => setOpen((prev) => !prev)}\r\n >\r\n <ListFilter className=\"size-4\" />\r\n {t('Filter')}\r\n <span className=\"flex size-5 items-center justify-center rounded-full bg-primary text-[10px] font-bold text-primary-foreground\">\r\n {selectedOptions.length}\r\n </span>\r\n </Button>\r\n ) : (\r\n <DataTableAdvancedFilter\r\n options={options.filter(\r\n (option) =>\r\n !selectedOptions.some(\r\n (selectedOption) => selectedOption.value === option.value\r\n )\r\n )}\r\n selectedOptions={selectedOptions}\r\n setSelectedOptions={setSelectedOptions}\r\n />\r\n )}\r\n <DataTableViewOptions table={table} />\r\n {addItemPagePath && (\r\n <Button\r\n onClick={goAddItemPage}\r\n size=\"sm\"\r\n className=\"h-9\"\r\n >\r\n <Plus className=\"size-4\" />\r\n {t('add')}\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {open && (\r\n <div className=\"flex flex-wrap items-center gap-2\">\r\n <span className=\"text-sm font-medium text-muted-foreground whitespace-nowrap\">\r\n {t('filter-by')}\r\n </span>\r\n\r\n {selectedOptions.some((option) => option.isMulti) && (\r\n <DataTableMultiFilter\r\n table={table}\r\n allOptions={options}\r\n options={selectedOptions.filter((option) => option.isMulti)}\r\n setSelectedOptions={setSelectedOptions}\r\n />\r\n )}\r\n\r\n {selectedOptions\r\n .filter((option) => !option.isMulti)\r\n .map((selectedOption) => (\r\n <DataTableAdvancedFilterItem\r\n key={String(selectedOption.value)}\r\n table={table}\r\n selectedOption={selectedOption}\r\n setSelectedOptions={setSelectedOptions}\r\n />\r\n ))}\r\n\r\n <DataTableAdvancedFilter\r\n options={options}\r\n selectedOptions={selectedOptions}\r\n setSelectedOptions={setSelectedOptions}\r\n >\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n role=\"combobox\"\r\n className=\"h-8 gap-1.5 rounded-full border-dashed text-muted-foreground hover:text-foreground\"\r\n >\r\n <Plus className=\"size-3.5\" />\r\n {t('add-filter')}\r\n </Button>\r\n </DataTableAdvancedFilter>\r\n\r\n {hasActiveFilters && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-8 gap-1.5 text-muted-foreground hover:text-foreground\"\r\n onClick={handleClearAll}\r\n >\r\n <RotateCcw className=\"size-3.5\" />\r\n {t('Reset')}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { Drawer as DrawerPrimitive } from 'vaul'\r\nimport { cn } from '../../lib/utils'\r\n\r\nconst Drawer = ({ shouldScaleBackground = true, ...props }: React.ComponentProps<typeof DrawerPrimitive.Root>) => (\r\n <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />\r\n)\r\nDrawer.displayName = 'Drawer'\r\n\r\nconst DrawerTrigger = DrawerPrimitive.Trigger\r\nconst DrawerPortal = DrawerPrimitive.Portal\r\nconst DrawerClose = DrawerPrimitive.Close\r\n\r\nconst DrawerOverlay = React.forwardRef<\r\n React.ComponentRef<typeof DrawerPrimitive.Overlay>,\r\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\r\n>(({ className, ...props }, ref) => (\r\n <DrawerPrimitive.Overlay\r\n ref={ref}\r\n className={cn('fixed inset-0 z-50 bg-black/80', className)}\r\n {...props}\r\n />\r\n))\r\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName\r\n\r\nconst DrawerContent = React.forwardRef<\r\n React.ComponentRef<typeof DrawerPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\r\n>(({ className, children, ...props }, ref) => (\r\n <DrawerPortal>\r\n <DrawerOverlay />\r\n <DrawerPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n 'fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\" />\r\n {children}\r\n </DrawerPrimitive.Content>\r\n </DrawerPortal>\r\n))\r\nDrawerContent.displayName = 'DrawerContent'\r\n\r\nconst DrawerHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div className={cn('grid gap-1.5 p-4 text-center sm:text-start', className)} {...props} />\r\n)\r\nDrawerHeader.displayName = 'DrawerHeader'\r\n\r\nconst DrawerFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div className={cn('mt-auto flex flex-col gap-2 p-4', className)} {...props} />\r\n)\r\nDrawerFooter.displayName = 'DrawerFooter'\r\n\r\nconst DrawerTitle = React.forwardRef<\r\n React.ComponentRef<typeof DrawerPrimitive.Title>,\r\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n <DrawerPrimitive.Title\r\n ref={ref}\r\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\r\n {...props}\r\n />\r\n))\r\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName\r\n\r\nconst DrawerDescription = React.forwardRef<\r\n React.ComponentRef<typeof DrawerPrimitive.Description>,\r\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n <DrawerPrimitive.Description\r\n ref={ref}\r\n className={cn('text-sm text-muted-foreground', className)}\r\n {...props}\r\n />\r\n))\r\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName\r\n\r\nexport {\r\n Drawer,\r\n DrawerPortal,\r\n DrawerOverlay,\r\n DrawerTrigger,\r\n DrawerClose,\r\n DrawerContent,\r\n DrawerHeader,\r\n DrawerFooter,\r\n DrawerTitle,\r\n DrawerDescription,\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport type { Table } from '@tanstack/react-table'\r\nimport { format } from 'date-fns'\r\nimport { ar, enUS } from 'date-fns/locale'\r\nimport { exportSelectedRowsCsv } from '../lib/csv-export'\r\nimport { CalendarIcon, Filter, Loader2, Plus, Sheet, X } from 'lucide-react'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\n\r\nimport type { DataTableFilterableColumn, DataTableSearchableColumn } from '../types/table'\r\nimport { cn } from '../lib/utils'\r\nimport { useTableConfig } from '../config'\r\nimport { Button } from './ui/button'\r\nimport {\r\n Drawer,\r\n DrawerClose,\r\n DrawerContent,\r\n DrawerDescription,\r\n DrawerFooter,\r\n DrawerHeader,\r\n DrawerTitle,\r\n DrawerTrigger,\r\n} from './ui/drawer'\r\nimport { Input } from './ui/input'\r\nimport { Separator } from './ui/separator'\r\nimport { Calendar } from './ui/calendar'\r\nimport { Checkbox } from './ui/checkbox'\r\nimport { Label } from './ui/label'\r\nimport { Popover, PopoverContent, PopoverTrigger } from './ui/popover'\r\nimport { DataTableFacetedFilter } from './data-table-faceted-filter'\r\nimport { DataTableViewOptions } from './data-table-view-options'\r\nimport { ButtonTooltip, CustomButtonProps } from './table-actions-row'\r\n\r\ninterface DataTableToolbarProps<TData> {\r\n table: Table<TData>\r\n filterableColumns?: DataTableFilterableColumn<TData>[]\r\n searchableColumns?: DataTableSearchableColumn<TData>[]\r\n addItemPagePath?: {\r\n url: string\r\n text?: string\r\n }\r\n isShowExportButtons?: {\r\n isShow: boolean\r\n ignoredCols?: string[]\r\n fileName?: string\r\n }\r\n customButtons?: CustomButtonProps[] | React.ReactElement\r\n}\r\n\r\nexport function DataTableMobileToolbar<TData>({\r\n table,\r\n filterableColumns = [],\r\n searchableColumns = [],\r\n addItemPagePath,\r\n isShowExportButtons = {\r\n isShow: true,\r\n ignoredCols: [],\r\n fileName: '',\r\n },\r\n customButtons,\r\n}: DataTableToolbarProps<TData>) {\r\n const isFiltered = table.getState().columnFilters.length > 0\r\n const [isGoPath, setGoPath] = React.useState(false)\r\n const t = useTableTranslations()\r\n const config = useTableConfig()\r\n const router = config.router\r\n const [date, setDate] = React.useState<Date>()\r\n const isArabic = config.i18n.direction === 'rtl' || (config.i18n.direction === 'auto' && config.i18n.locale === 'ar')\r\n\r\n const goAddItemPage = () => {\r\n setGoPath(true)\r\n if (addItemPagePath && router) {\r\n router.push(addItemPagePath.url)\r\n }\r\n }\r\n const handleExportSelectedRowsCSV = () => {\r\n exportSelectedRowsCsv(table, {\r\n fileName: isShowExportButtons.fileName,\r\n ignoredCols: isShowExportButtons.ignoredCols,\r\n })\r\n }\r\n\r\n return (\r\n <Drawer>\r\n <DrawerTrigger asChild>\r\n <Button variant=\"outline\" size={'sm'} className=\"h-8 px-2\">\r\n {isFiltered ? (\r\n <span className=\"bg-main me-2 inline-flex size-3 rounded-full\" />\r\n ) : (\r\n <Filter className=\"me-2 size-4\" aria-hidden=\"true\" />\r\n )}\r\n {t('Filter')}\r\n </Button>\r\n </DrawerTrigger>\r\n {isShowExportButtons.isShow && (\r\n <Button\r\n disabled={!table.getSelectedRowModel().rows.length}\r\n aria-label={t('export-csv')}\r\n title={t('export-csv')}\r\n variant=\"outline\"\r\n className=\"h-8 px-2 text-sm\"\r\n onClick={handleExportSelectedRowsCSV}\r\n >\r\n <Sheet className=\"me-2 size-4\" aria-hidden=\"true\" />\r\n {t('export-csv')}\r\n </Button>\r\n )}\r\n {addItemPagePath ? (\r\n addItemPagePath?.url ? (\r\n <Button\r\n onClick={goAddItemPage}\r\n size=\"sm\"\r\n className=\"flex h-8 flex-row gap-3 px-2 text-sm\"\r\n disabled={isGoPath}\r\n >\r\n {isGoPath ? <Loader2 size={20} className=\"animate-spin\" /> : <Plus size={20} />}\r\n {addItemPagePath.text ? addItemPagePath.text : t('add')}\r\n </Button>\r\n ) : null\r\n ) : null}\r\n <DrawerContent>\r\n <div className=\"mx-auto size-full max-w-sm text-sm\">\r\n <DrawerHeader>\r\n <DrawerTitle>{t('Filter')}</DrawerTitle>\r\n <DrawerDescription>{t('data-table-filter')}</DrawerDescription>\r\n </DrawerHeader>\r\n <div className=\"p-4 pb-0 text-sm\">\r\n <div className=\"mt-3\">\r\n <div className=\"flex w-full flex-col gap-4\">\r\n <div className=\"flex flex-col items-end gap-2\">\r\n {searchableColumns.length > 0 &&\r\n searchableColumns.map(\r\n (column) =>\r\n table.getColumn(column.id ? String(column.id) : '') && (\r\n <div className=\"w-full space-y-2\" key={String(column.id)}>\r\n {column?.type === 'checkbox' ? (\r\n <div className=\"mb-2 flex justify-between gap-2\">\r\n <Label className=\"cursor-pointer\" htmlFor={String(column.id)}>\r\n {column.title}\r\n </Label>\r\n <Checkbox\r\n id={String(column.id)}\r\n checked={\r\n table.getColumn(String(column.id))?.getFilterValue() ===\r\n 'true'\r\n }\r\n onCheckedChange={(value) =>\r\n table\r\n .getColumn(String(column.id))\r\n ?.setFilterValue(value ? 'true' : 'false')\r\n }\r\n aria-label={`Filter ${column.title}`}\r\n className=\"size-4\"\r\n />\r\n </div>\r\n ) : column?.type === 'date' ? (\r\n <div className=\"flex flex-col items-start gap-2\">\r\n <Label htmlFor={String(column.id)}>{column.title}</Label>\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n className={cn(\r\n 'w-full justify-start text-start font-normal',\r\n !date && 'text-muted-foreground'\r\n )}\r\n >\r\n <CalendarIcon className=\"mx-2 size-4\" />\r\n {date\r\n ? (() => {\r\n const filterValue = table\r\n .getColumn(String(column.id))\r\n ?.getFilterValue()\r\n const parsedDate =\r\n filterValue &&\r\n !isNaN(new Date(filterValue as string).getTime())\r\n ? new Date(filterValue as string)\r\n : null\r\n\r\n return parsedDate\r\n ? format(parsedDate, 'PPP', {\r\n locale: isArabic ? ar : enUS,\r\n })\r\n : `${t('Filter')} ${column.title}...`\r\n })()\r\n : `${t('Filter')} ${column.title}...`}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\">\r\n <Calendar\r\n className=\"py-2 text-sm\"\r\n mode=\"single\"\r\n selected={\r\n table.getColumn(String(column.id))?.getFilterValue()\r\n ? new Date(\r\n table\r\n .getColumn(String(column.id))\r\n ?.getFilterValue() as string\r\n )\r\n : undefined\r\n }\r\n onSelect={(selectedDate) => {\r\n if (selectedDate && !isNaN(selectedDate.getTime())) {\r\n table\r\n .getColumn(String(column.id))\r\n ?.setFilterValue(format(selectedDate, 'yyyy-MM-dd'))\r\n setDate(selectedDate)\r\n }\r\n }}\r\n initialFocus\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n ) : (\r\n <>\r\n <Label htmlFor={String(column.id)}>{column.title}</Label>\r\n <Input\r\n id={String(column.id)}\r\n type={column?.type || 'text'}\r\n key={String(column.id)}\r\n placeholder={`${t('Filter')} ${column.title}...`}\r\n value={\r\n (table\r\n .getColumn(String(column.id))\r\n ?.getFilterValue() as string) ?? ''\r\n }\r\n onChange={(event) =>\r\n table\r\n .getColumn(String(column.id))\r\n ?.setFilterValue(event.target.value)\r\n }\r\n className=\"h-8 w-full py-0\"\r\n />\r\n </>\r\n )}\r\n </div>\r\n )\r\n )}\r\n <Separator className=\"bg-main-300 my-2 h-px w-full\" />\r\n <div className=\"flex w-full flex-col gap-4\">\r\n {filterableColumns.length > 0 &&\r\n filterableColumns.map(\r\n (column) =>\r\n table.getColumn(column.id ? String(column.id) : '') && (\r\n <DataTableFacetedFilter\r\n className=\"justify-start\"\r\n key={String(column.id)}\r\n column={table.getColumn(column.id ? String(column.id) : '')}\r\n title={column.title}\r\n options={column.options}\r\n />\r\n )\r\n )}\r\n </div>\r\n <Separator className=\"bg-main-300 my-2 h-px w-full\" />\r\n </div>\r\n <div className=\"grid gap-4\">\r\n <DataTableViewOptions table={table} />\r\n {customButtons && Array.isArray(customButtons)\r\n ? customButtons\r\n .filter((customButton) => Object.keys(customButton).length !== 0)\r\n .map((customButton, index) => (\r\n <Button\r\n key={index}\r\n onClick={customButton.function}\r\n variant={'outline'}\r\n className={`${customButton.className ? customButton.className : ''} relative flex justify-center gap-2 text-nowrap text-sm`}\r\n {...customButton.attr}\r\n >\r\n {customButton.toolTip && (\r\n <ButtonTooltip content={customButton.toolTip}></ButtonTooltip>\r\n )}\r\n {customButton.text}\r\n {customButton.icon}\r\n {customButton.children}\r\n </Button>\r\n ))\r\n : React.isValidElement(customButtons)\r\n ? customButtons\r\n : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <DrawerFooter className=\"grid grid-cols-2\">\r\n <Separator className=\"bg-main-300 col-span-2 my-2 h-px\" />\r\n <DrawerClose asChild>\r\n <Button disabled={!isFiltered}>{t('Apply')}</Button>\r\n </DrawerClose>\r\n <Button\r\n aria-label=\"Reset filters\"\r\n variant=\"outline\"\r\n disabled={!isFiltered}\r\n onClick={() => table.resetColumnFilters()}\r\n >\r\n {t('Reset')}\r\n <X className=\"ms-2 size-4\" aria-hidden=\"true\" />\r\n </Button>\r\n </DrawerFooter>\r\n </div>\r\n </DrawerContent>\r\n </Drawer>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\n\r\nconst EMPTY_DATA: never[] = []\r\nimport {\r\n ColumnDef,\r\n ColumnFiltersState,\r\n flexRender,\r\n getCoreRowModel,\r\n getFacetedRowModel,\r\n getFacetedUniqueValues,\r\n getFilteredRowModel,\r\n getPaginationRowModel,\r\n getSortedRowModel,\r\n PaginationState,\r\n SortingState,\r\n useReactTable,\r\n VisibilityState,\r\n} from '@tanstack/react-table'\r\n\r\nimport type {\r\n DataTableFilterableColumn,\r\n DataTableQuerySearchable,\r\n DataTableSearchableColumn,\r\n} from '../types/table'\r\nimport { FilterOptions } from '../types/filter-options'\r\nimport { useDebounce } from '../hooks/use-debounce'\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from './ui/table'\r\nimport { DataTablePagination } from './data-table-pagination'\r\nimport { DataTableToolbar, ViewMode } from './data-table-toolbar'\r\nimport { DataTableCardView } from './data-table-card-view'\r\nimport { DataTableAdvancedToolbar } from './advanced/data-table-advanced-toolbar'\r\n\r\nimport { CustomButtonProps } from './table-actions-row'\r\nimport { DataTableMobileToolbar } from './data-table-mobile-toolbar'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\nimport { useResolvedTableConfig } from '../config'\r\nimport type { TableConfigInput } from '../types/table-config'\r\nimport { Card, CardContent } from './ui/card'\r\nimport { Pagination } from '../types/pagination'\r\nimport { SearchX, RotateCcw } from 'lucide-react'\r\nimport { Button } from './ui/button'\r\n\r\ntype BaseProps<TData, TValue> = {\r\n columns: ColumnDef<TData, TValue>[]\r\n data: TData[]\r\n pageCount: number\r\n pageSize?: number\r\n filterableColumns?: DataTableFilterableColumn<TData>[]\r\n showFilter?: boolean\r\n showPagination?: boolean\r\n floatingBar?: boolean\r\n addItemPagePath?: {\r\n url: string\r\n text?: string\r\n }\r\n deleteRowsAction?: React.MouseEventHandler<HTMLButtonElement>\r\n isShowExportButtons?: {\r\n isShow: boolean\r\n ignoredCols?: string[]\r\n fileName?: string\r\n }\r\n customButtons?: CustomButtonProps[] | React.ReactElement\r\n isLoading?: boolean\r\n customCss?: string\r\n isShowAdvancedFilter?: boolean\r\n config?: TableConfigInput\r\n}\r\n\r\ntype QueryFilterProps<TData, TValue> = {\r\n isQueryFilter: true\r\n handleFilterChange: (key: keyof FilterOptions, value: string | number | undefined) => void\r\n filterableQuery: DataTableFilterableColumn<TData>[]\r\n filterableColumns?: never\r\n currentFilters?: FilterOptions\r\n onClearFilters?: () => void\r\n}\r\n\r\ntype LocalFilterProps<TData, TValue> = {\r\n isQueryFilter?: false\r\n handleFilterChange?: never\r\n filterableQuery?: never\r\n filterableColumns?: DataTableFilterableColumn<TData>[]\r\n currentFilters?: never\r\n onClearFilters?: never\r\n}\r\n\r\ntype QuerySearchProps<TData, TValue> = {\r\n isQuerySearch: true\r\n searchableQuery: DataTableQuerySearchable<TData>[]\r\n searchableColumns?: never\r\n}\r\n\r\ntype LocalSearchProps<TData, TValue> = {\r\n isQuerySearch?: false\r\n searchableQuery?: never\r\n searchableColumns?: DataTableSearchableColumn<TData>[]\r\n}\r\n\r\ntype QueryPaginationProps<TData, TValue> = {\r\n isQueryPagination: true\r\n paginationData: {\r\n paginationResponse: Pagination\r\n onPageChange: (page: number) => void\r\n onPageSizeChange: (size: number) => void\r\n }\r\n}\r\ntype LocalPaginationProps<TData, TValue> = {\r\n isQueryPagination?: false\r\n paginationData?: never\r\n}\r\n\r\ntype DataTableProps<TData, TValue> = BaseProps<TData, TValue> &\r\n (QuerySearchProps<TData, TValue> | LocalSearchProps<TData, TValue>) &\r\n (QueryPaginationProps<TData, TValue> | LocalPaginationProps<TData, TValue>) &\r\n (QueryFilterProps<TData, TValue> | LocalFilterProps<TData, TValue>)\r\n\r\nexport function DataTable<TData, TValue>({\r\n columns,\r\n data,\r\n pageCount,\r\n pageSize: defaultPageSize,\r\n filterableColumns = [],\r\n searchableColumns = [],\r\n showFilter,\r\n showPagination,\r\n floatingBar,\r\n deleteRowsAction,\r\n addItemPagePath,\r\n isShowExportButtons = {\r\n isShow: true,\r\n ignoredCols: [],\r\n fileName: '',\r\n },\r\n customButtons,\r\n isQueryPagination = false,\r\n paginationData,\r\n isQuerySearch = false,\r\n searchableQuery = [],\r\n isLoading,\r\n isQueryFilter = false,\r\n handleFilterChange,\r\n filterableQuery,\r\n currentFilters,\r\n onClearFilters,\r\n customCss,\r\n isShowAdvancedFilter,\r\n config: instanceConfig,\r\n}: DataTableProps<TData, TValue>) {\r\n const t = useTableTranslations()\r\n const resolvedConfig = useResolvedTableConfig(instanceConfig)\r\n const router = resolvedConfig.router\r\n\r\n // Resolve prop vs config\r\n const shouldShowFilter = showFilter ?? resolvedConfig.features.filter\r\n const shouldShowPagination = showPagination ?? resolvedConfig.features.pagination\r\n const shouldShowFloatingBar = floatingBar ?? resolvedConfig.features.floatingBar\r\n const shouldShowAdvancedFilter = isShowAdvancedFilter ?? resolvedConfig.features.advancedFilter\r\n const resolvedPageSize = defaultPageSize ?? resolvedConfig.pagination.defaultPageSize\r\n\r\n const isManualFiltering = isQuerySearch || isQueryFilter\r\n const isManualPagination = isQueryPagination\r\n const isManualSorting = isQueryPagination || isQuerySearch || isQueryFilter\r\n\r\n // Read URL params via router adapter (or use defaults)\r\n const searchParams = router ? router.getSearchParams() : new URLSearchParams()\r\n const pathname = router ? router.getPathname() : ''\r\n\r\n const page = searchParams.get('page') ?? '1'\r\n const pageAsNumber = Number(page)\r\n const fallbackPage = isNaN(pageAsNumber) || pageAsNumber < 1 ? 1 : pageAsNumber\r\n const per_page = searchParams.get('per_page') ?? '10'\r\n const perPageAsNumber = Number(per_page)\r\n const fallbackPerPage = isNaN(perPageAsNumber) ? resolvedPageSize : perPageAsNumber\r\n const sort = searchParams.get('sort')\r\n const [column, order] = sort?.split('.') ?? []\r\n\r\n const createQueryString = React.useCallback(\r\n (params: Record<string, string | number | null>) => {\r\n const newSearchParams = new URLSearchParams(searchParams.toString())\r\n for (const [key, value] of Object.entries(params)) {\r\n if (value === null) {\r\n newSearchParams.delete(key)\r\n } else {\r\n newSearchParams.set(key, String(value))\r\n }\r\n }\r\n return newSearchParams.toString()\r\n },\r\n [searchParams]\r\n )\r\n\r\n const [viewMode, setViewMode] = React.useState<ViewMode>('table')\r\n const [rowSelection, setRowSelection] = React.useState({})\r\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\r\n\r\n const initializeColumnFilters = React.useCallback((): ColumnFiltersState => {\r\n const filters: ColumnFiltersState = []\r\n if (!isQuerySearch && searchableColumns.length > 0) {\r\n for (const col of searchableColumns) {\r\n const urlValue = searchParams.get(String(col.id))\r\n if (urlValue) {\r\n filters.push({ id: String(col.id), value: urlValue })\r\n }\r\n }\r\n }\r\n if (!isQueryFilter && filterableColumns.length > 0) {\r\n for (const col of filterableColumns) {\r\n const urlValue = searchParams.get(String(col.id))\r\n if (urlValue) {\r\n filters.push({ id: String(col.id), value: urlValue.split('.') })\r\n }\r\n }\r\n }\r\n return filters\r\n }, [searchParams, searchableColumns, filterableColumns, isQuerySearch, isQueryFilter])\r\n\r\n const [columnFilters, setColumnFilters] =\r\n React.useState<ColumnFiltersState>(initializeColumnFilters)\r\n\r\n React.useEffect(() => {\r\n const urlFilters = initializeColumnFilters()\r\n setColumnFilters((prevFilters) => {\r\n const urlFilterString = JSON.stringify(urlFilters)\r\n const prevFilterString = JSON.stringify(prevFilters)\r\n if (urlFilterString !== prevFilterString) {\r\n return urlFilters\r\n }\r\n return prevFilters\r\n })\r\n }, [initializeColumnFilters])\r\n\r\n const [{ pageIndex, pageSize }, setPagination] = React.useState<PaginationState>({\r\n pageIndex: fallbackPage - 1,\r\n pageSize: fallbackPerPage,\r\n })\r\n\r\n const pagination = React.useMemo(\r\n () => ({ pageIndex, pageSize }),\r\n [pageIndex, pageSize]\r\n )\r\n\r\n React.useEffect(() => {\r\n setPagination({\r\n pageIndex: fallbackPage - 1,\r\n pageSize: fallbackPerPage,\r\n })\r\n }, [fallbackPage, fallbackPerPage])\r\n\r\n // Sync pagination to URL via router adapter\r\n const paginationMountRef = React.useRef(true)\r\n React.useEffect(() => {\r\n if (isQueryPagination || !router) return\r\n if (paginationMountRef.current) {\r\n paginationMountRef.current = false\r\n return\r\n }\r\n const replaceUrl = router.replace || router.push\r\n replaceUrl(`${pathname}?${createQueryString({ page: pageIndex + 1, per_page: pageSize })}`)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [pageIndex, pageSize, isQueryPagination])\r\n\r\n const [sorting, setSorting] = React.useState<SortingState>(\r\n column ? [{ id: column, desc: order === 'desc' }] : []\r\n )\r\n\r\n const sortingMountRef = React.useRef(true)\r\n React.useEffect(() => {\r\n if (!router) return\r\n if (sortingMountRef.current) {\r\n sortingMountRef.current = false\r\n return\r\n }\r\n const replaceUrl = router.replace || router.push\r\n replaceUrl(\r\n `${pathname}?${createQueryString({\r\n page,\r\n sort: sorting[0]?.id ? `${sorting[0]?.id}.${sorting[0]?.desc ? 'desc' : 'asc'}` : null,\r\n })}`\r\n )\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [sorting])\r\n\r\n const searchableColumnFilters = React.useMemo(\r\n () => columnFilters.filter((filter) => searchableColumns.find((col) => col.id === filter.id)),\r\n [columnFilters, searchableColumns]\r\n )\r\n\r\n const debouncedSearchableColumnFilters = useDebounce(searchableColumnFilters, resolvedConfig.search.debounceMs)\r\n\r\n const filterableColumnFilters = React.useMemo(\r\n () => columnFilters.filter((filter) => filterableColumns.find((col) => col.id === filter.id)),\r\n [columnFilters, filterableColumns]\r\n )\r\n\r\n const debouncedSearchableString = JSON.stringify(debouncedSearchableColumnFilters)\r\n const filterableString = JSON.stringify(filterableColumnFilters)\r\n\r\n // Sync searchable filters to URL\r\n React.useEffect(() => {\r\n if (isQuerySearch || !router) return\r\n\r\n const currentDebouncedFilters = JSON.parse(debouncedSearchableString) as ColumnFiltersState\r\n const updates: Record<string, string | number | null> = {}\r\n let hasChanges = false\r\n\r\n for (const col of currentDebouncedFilters) {\r\n if (typeof col.value === 'string' && col.value.trim()) {\r\n const newValue = col.value.trim()\r\n updates[col.id] = newValue\r\n if (searchParams.get(String(col.id)) !== newValue) {\r\n hasChanges = true\r\n }\r\n }\r\n }\r\n\r\n for (const key of Array.from(searchParams.keys())) {\r\n if (\r\n searchableColumns.find((col) => String(col.id) === key) &&\r\n !currentDebouncedFilters.find((col) => col.id === key)\r\n ) {\r\n updates[key] = null\r\n hasChanges = true\r\n }\r\n }\r\n\r\n if (hasChanges) {\r\n updates.page = 1\r\n }\r\n\r\n const newQueryString = createQueryString(updates)\r\n const currentQueryString = searchParams.toString() || ''\r\n\r\n if (newQueryString !== currentQueryString && hasChanges) {\r\n const replaceUrl = router.replace || router.push\r\n replaceUrl(`${pathname}?${newQueryString}`)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [debouncedSearchableString, isQuerySearch])\r\n\r\n // Sync filterable filters to URL\r\n React.useEffect(() => {\r\n if (isQueryFilter || !router) return\r\n\r\n const currentFilterableFilters = JSON.parse(filterableString) as ColumnFiltersState\r\n const updates: Record<string, string | number | null> = {}\r\n let hasChanges = false\r\n\r\n for (const col of currentFilterableFilters) {\r\n if (\r\n typeof col.value === 'object' &&\r\n Array.isArray(col.value) &&\r\n col.value.length > 0\r\n ) {\r\n const newValue = col.value.join('.')\r\n updates[col.id] = newValue\r\n if (searchParams.get(String(col.id)) !== newValue) {\r\n hasChanges = true\r\n }\r\n }\r\n }\r\n\r\n for (const key of Array.from(searchParams.keys())) {\r\n if (\r\n filterableColumns.find((col) => String(col.id) === key) &&\r\n !currentFilterableFilters.find((col) => col.id === key)\r\n ) {\r\n updates[key] = null\r\n hasChanges = true\r\n }\r\n }\r\n\r\n if (hasChanges) {\r\n updates.page = 1\r\n }\r\n\r\n const newQueryString = createQueryString(updates)\r\n const currentQueryString = searchParams.toString() || ''\r\n\r\n if (newQueryString !== currentQueryString && hasChanges) {\r\n const replaceUrl = router.replace || router.push\r\n replaceUrl(`${pathname}?${newQueryString}`)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filterableString, isQueryFilter])\r\n\r\n const table = useReactTable({\r\n data: data ?? EMPTY_DATA,\r\n columns,\r\n pageCount: pageCount ?? -1,\r\n state: {\r\n pagination,\r\n sorting,\r\n columnVisibility,\r\n rowSelection,\r\n columnFilters,\r\n },\r\n enableRowSelection: resolvedConfig.features.rowSelection,\r\n enableSorting: resolvedConfig.features.sorting,\r\n onRowSelectionChange: setRowSelection,\r\n onPaginationChange: setPagination,\r\n onSortingChange: setSorting,\r\n onColumnFiltersChange: setColumnFilters,\r\n onColumnVisibilityChange: setColumnVisibility,\r\n getCoreRowModel: getCoreRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n getPaginationRowModel: getPaginationRowModel(),\r\n getSortedRowModel: getSortedRowModel(),\r\n getFacetedRowModel: getFacetedRowModel(),\r\n getFacetedUniqueValues: getFacetedUniqueValues(),\r\n manualPagination: isManualPagination,\r\n manualSorting: isManualSorting,\r\n manualFiltering: isManualFiltering,\r\n })\r\n\r\n return (\r\n <>\r\n {shouldShowFilter ? (\r\n <>\r\n <div className=\"max-md:hidden\">\r\n {shouldShowAdvancedFilter && !isQuerySearch && !isQueryFilter ? (\r\n <DataTableAdvancedToolbar\r\n table={table}\r\n searchableColumns={searchableColumns}\r\n filterableColumns={filterableColumns}\r\n addItemPagePath={addItemPagePath?.url}\r\n />\r\n ) : (\r\n <DataTableToolbar\r\n table={table}\r\n viewMode={viewMode}\r\n onViewModeChange={setViewMode}\r\n addItemPagePath={addItemPagePath}\r\n isShowExportButtons={isShowExportButtons}\r\n customButtons={customButtons}\r\n customCss={customCss}\r\n {...(isQuerySearch === true\r\n ? {\r\n isQuerySearch: isQuerySearch,\r\n searchableQuery: searchableQuery,\r\n }\r\n : {\r\n isQuerySearch: isQuerySearch,\r\n searchableColumns: searchableColumns,\r\n })}\r\n {...(isQueryFilter && handleFilterChange\r\n ? {\r\n isQueryFilter: true as const,\r\n handleFilterChange,\r\n filterableQuery: filterableQuery || [],\r\n currentFilters: currentFilters,\r\n onClearFilters: onClearFilters,\r\n }\r\n : {\r\n isQueryFilter: false,\r\n filterableColumns: filterableColumns,\r\n })}\r\n />\r\n )}\r\n </div>\r\n <div className=\"flex items-center justify-between md:hidden\">\r\n <DataTableMobileToolbar\r\n table={table}\r\n filterableColumns={filterableColumns}\r\n searchableColumns={searchableColumns}\r\n addItemPagePath={addItemPagePath}\r\n isShowExportButtons={isShowExportButtons}\r\n customButtons={customButtons}\r\n />\r\n </div>\r\n </>\r\n ) : null}\r\n {viewMode === 'cards' ? (\r\n <>\r\n <DataTableCardView table={table} />\r\n {shouldShowPagination ? (\r\n <Card className=\"mt-3 overflow-hidden\">\r\n <div className=\"space-y-2.5\">\r\n {isQueryPagination && paginationData ? (\r\n <DataTablePagination\r\n table={table}\r\n isQueryPagination={true}\r\n paginationData={paginationData}\r\n />\r\n ) : (\r\n <DataTablePagination table={table} isQueryPagination={false} />\r\n )}\r\n </div>\r\n </Card>\r\n ) : null}\r\n </>\r\n ) : (\r\n <Card className=\"mt-3 overflow-hidden\">\r\n <CardContent className=\"p-0\">\r\n <Table>\r\n <TableHeader className=\"bg-muted/50\">\r\n {table.getHeaderGroups().map((headerGroup) => (\r\n <TableRow key={headerGroup.id}>\r\n {headerGroup.headers.map((header) => {\r\n const sortDirection = header.column.getIsSorted()\r\n return (\r\n <TableHead\r\n className=\"text-nowrap\"\r\n key={header.id}\r\n aria-sort={\r\n sortDirection === 'asc'\r\n ? 'ascending'\r\n : sortDirection === 'desc'\r\n ? 'descending'\r\n : undefined\r\n }\r\n >\r\n {header.isPlaceholder\r\n ? null\r\n : flexRender(header.column.columnDef.header, header.getContext())}\r\n </TableHead>\r\n )\r\n })}\r\n </TableRow>\r\n ))}\r\n </TableHeader>\r\n <TableBody>\r\n {table.getRowModel()?.rows?.length ? (\r\n table.getRowModel()?.rows.map((row, rowIndex) => (\r\n <TableRow\r\n key={row.id}\r\n data-state={row.getIsSelected() && 'selected'}\r\n aria-rowindex={pageIndex * pageSize + rowIndex + 2}\r\n >\r\n {row.getVisibleCells().map((cell) => (\r\n <TableCell className=\"max-w-60 text-ellipsis text-nowrap\" key={cell.id}>\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))\r\n ) : (\r\n <TableRow>\r\n <TableCell colSpan={columns.length} className=\"py-16 text-center\">\r\n <div className=\"flex flex-col items-center gap-3\">\r\n <SearchX className=\"size-10 text-muted-foreground/50\" aria-hidden=\"true\" />\r\n <div className=\"space-y-1\">\r\n <p className=\"font-semibold\">{t('no-records-found')}</p>\r\n <p className=\"text-sm text-muted-foreground\">{t('no-records-hint')}</p>\r\n </div>\r\n {(table.getState().columnFilters.length > 0 || (isQueryFilter && currentFilters && Object.keys(currentFilters).length > 0)) && (\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"mt-1 gap-1.5\"\r\n onClick={() => {\r\n if (isQueryFilter && onClearFilters) {\r\n onClearFilters()\r\n } else {\r\n table.resetColumnFilters()\r\n }\r\n }}\r\n >\r\n <RotateCcw className=\"size-3.5\" aria-hidden=\"true\" />\r\n {t('reset-filters')}\r\n </Button>\r\n )}\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </TableBody>\r\n </Table>\r\n </CardContent>\r\n {shouldShowPagination ? (\r\n <div className=\"space-y-2.5\">\r\n {isQueryPagination && paginationData ? (\r\n <DataTablePagination\r\n table={table}\r\n isQueryPagination={true}\r\n paginationData={paginationData}\r\n />\r\n ) : (\r\n <DataTablePagination table={table} isQueryPagination={false} />\r\n )}\r\n </div>\r\n ) : null}\r\n </Card>\r\n )}\r\n </>\r\n )\r\n}\r\n","import { ArrowUp, ArrowDown, ArrowDownIcon, ArrowUpIcon, SortAsc, EyeOffIcon } from 'lucide-react'\r\nimport { type Column } from '@tanstack/react-table'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\n\r\nimport { cn } from '../lib/utils'\r\nimport { Button } from './ui/button'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from './ui/dropdown-menu'\r\n\r\ninterface DataTableColumnHeaderProps<TData, TValue> extends React.HTMLAttributes<HTMLDivElement> {\r\n column: Column<TData, TValue>\r\n title: string\r\n}\r\n\r\nexport function DataTableColumnHeader<TData, TValue>({\r\n column,\r\n title,\r\n className,\r\n}: DataTableColumnHeaderProps<TData, TValue>) {\r\n const t = useTableTranslations()\r\n\r\n if (!column.getCanSort()) {\r\n return <div className={cn(className)}>{title}</div>\r\n }\r\n\r\n return (\r\n <div className={cn('flex items-center gap-2', className)}>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n aria-label={\r\n column.getIsSorted() === 'desc'\r\n ? t('sorted-desc')\r\n : column.getIsSorted() === 'asc'\r\n ? t('sorted-asc')\r\n : t('not-sorted')\r\n }\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"-ms-3 h-8 data-[state=open]:bg-accent\"\r\n >\r\n <span>{title}</span>\r\n {column.getIsSorted() === 'desc' ? (\r\n <ArrowDown className=\"ms-2 size-4\" aria-hidden=\"true\" />\r\n ) : column.getIsSorted() === 'asc' ? (\r\n <ArrowUp className=\"ms-2 size-4\" aria-hidden=\"true\" />\r\n ) : (\r\n <SortAsc className=\"ms-2 size-4\" aria-hidden=\"true\" />\r\n )}\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"start\">\r\n <DropdownMenuItem aria-label={t('sort-ascending')} onClick={() => column.toggleSorting(false)}>\r\n <ArrowUpIcon className=\"me-2 size-3.5 text-muted-foreground/70\" aria-hidden=\"true\" />\r\n {t('asc')}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem aria-label={t('sort-descending')} onClick={() => column.toggleSorting(true)}>\r\n <ArrowDownIcon className=\"me-2 size-3.5 text-muted-foreground/70\" aria-hidden=\"true\" />\r\n {t('desc')}\r\n </DropdownMenuItem>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuItem aria-label={t('hide-column')} onClick={() => column.toggleVisibility(false)}>\r\n <EyeOffIcon className=\"me-2 size-3.5 text-muted-foreground/70\" aria-hidden=\"true\" />\r\n {t('Hide')}\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { Column, ColumnDef, Row, Table } from '@tanstack/react-table'\r\nimport { DataTable } from '../data-table'\r\nimport { DataTableColumnHeader } from '../data-table-column-header'\r\nimport { CustomButtonProps } from '../table-actions-row'\r\nimport { useTableTranslations } from '../../hooks/use-table-translations'\r\nimport type { TableConfigInput } from '../../types/table-config'\r\nimport { Pagination } from '../../types/pagination'\r\nimport {\r\n DataTableFilterableColumn,\r\n DataTableQuerySearchable,\r\n DataTableSearchableColumn,\r\n} from '../../types/table'\r\nimport { FilterOptions } from '../../types/filter-options'\r\n\r\ntype BaseProps<TData, TValue> = {\r\n data: TData[]\r\n pageCount: number\r\n pageSize?: number\r\n columns: ColumnDef<TData, TValue>[]\r\n showFilter?: boolean\r\n showPagination?: boolean\r\n addItemPagePath?: {\r\n url: string\r\n text?: string\r\n }\r\n isShowExportButtons?: {\r\n isShow: boolean\r\n ignoredCols?: string[]\r\n fileName?: string\r\n }\r\n customButtons?: CustomButtonProps[] | React.ReactElement\r\n withIndex?: boolean\r\n isLoading?: boolean\r\n customCss?: string\r\n isShowAdvancedFilter?: boolean\r\n config?: TableConfigInput\r\n}\r\n\r\ntype QueryFilterProps<TData, TValue> = {\r\n isQueryFilter: true\r\n handleFilterChange: (key: keyof FilterOptions, value: string | number | undefined) => void\r\n filterableQuery: DataTableFilterableColumn<TData>[]\r\n filterableColumns?: never\r\n currentFilters?: FilterOptions\r\n onClearFilters?: () => void\r\n}\r\n\r\ntype LocalFilterProps<TData, TValue> = {\r\n isQueryFilter?: false\r\n handleFilterChange?: never\r\n filterableQuery?: never\r\n filterableColumns?: DataTableFilterableColumn<TData>[]\r\n currentFilters?: never\r\n onClearFilters?: never\r\n}\r\n\r\ntype QuerySearchProps<TData, TValue> = {\r\n isQuerySearch: true\r\n searchableQuery: DataTableQuerySearchable<TData>[]\r\n searchableColumns?: never\r\n}\r\n\r\ntype LocalSearchProps<TData, TValue> = {\r\n isQuerySearch?: false\r\n searchableQuery?: never\r\n searchableColumns?: DataTableSearchableColumn<TData>[]\r\n}\r\n\r\ntype QueryPaginationProps<TData, TValue> = {\r\n isQueryPagination: true\r\n paginationData: {\r\n paginationResponse: Pagination\r\n onPageChange: (page: number) => void\r\n onPageSizeChange: (size: number) => void\r\n }\r\n}\r\n\r\ntype LocalPaginationProps<TData, TValue> = {\r\n isQueryPagination?: false\r\n paginationData?: never\r\n}\r\n\r\ntype TasksTableShellProps<TData, TValue> = BaseProps<TData, TValue> &\r\n (QuerySearchProps<TData, TValue> | LocalSearchProps<TData, TValue>) &\r\n (QueryPaginationProps<TData, TValue> | LocalPaginationProps<TData, TValue>) &\r\n (QueryFilterProps<TData, TValue> | LocalFilterProps<TData, TValue>)\r\n\r\nexport function ClientSideTable<TData, TValue>({\r\n data,\r\n pageCount,\r\n pageSize = 10,\r\n columns: initialColumns,\r\n searchableColumns = [],\r\n showFilter = true,\r\n showPagination = true,\r\n filterableColumns = [],\r\n addItemPagePath,\r\n isShowExportButtons = {\r\n isShow: true,\r\n ignoredCols: [],\r\n fileName: '',\r\n },\r\n customButtons,\r\n withIndex = true,\r\n isQueryPagination = false,\r\n paginationData,\r\n isLoading = false,\r\n isQuerySearch = false,\r\n searchableQuery = [],\r\n isQueryFilter = false,\r\n handleFilterChange,\r\n filterableQuery,\r\n currentFilters,\r\n onClearFilters,\r\n customCss,\r\n isShowAdvancedFilter = false,\r\n config,\r\n}: TasksTableShellProps<TData, TValue>) {\r\n const t = useTableTranslations()\r\n\r\n const columns = React.useMemo<ColumnDef<TData, TValue>[]>(() => {\r\n return [\r\n ...(withIndex\r\n ? [\r\n {\r\n accessorKey: 'i',\r\n header: ({ column }: { column: Column<TData> }) => (\r\n <DataTableColumnHeader column={column} title={t('row-number')} />\r\n ),\r\n cell: ({ row, table }: { row: Row<TData>; table: Table<TData> }) => (\r\n <div className=\"w-full\">\r\n {table.getState().pagination.pageIndex + 1 === 1\r\n ? row.index + 1\r\n : table.getState().pagination.pageIndex + 1 > 1\r\n ? table.getState().pagination.pageIndex *\r\n table.getState().pagination.pageSize +\r\n (row.index + 1)\r\n : row.index + 1}\r\n </div>\r\n ),\r\n enableSorting: false,\r\n enableHiding: false,\r\n },\r\n ]\r\n : []),\r\n ...initialColumns,\r\n ]\r\n }, [initialColumns, withIndex, t])\r\n\r\n return (\r\n <DataTable\r\n columns={columns}\r\n data={data}\r\n pageCount={pageCount}\r\n pageSize={pageSize}\r\n showFilter={showFilter}\r\n showPagination={showPagination}\r\n addItemPagePath={addItemPagePath}\r\n isShowExportButtons={isShowExportButtons}\r\n customButtons={customButtons}\r\n floatingBar={true}\r\n isLoading={isLoading}\r\n customCss={customCss}\r\n isShowAdvancedFilter={isShowAdvancedFilter}\r\n config={config}\r\n {...(isQuerySearch\r\n ? { isQuerySearch: true as const, searchableQuery: searchableQuery }\r\n : {\r\n isQuerySearch: false as const,\r\n searchableColumns: searchableColumns,\r\n })}\r\n {...(isQueryPagination && paginationData\r\n ? { isQueryPagination: true as const, paginationData }\r\n : { isQueryPagination: false as const })}\r\n {...(isQueryFilter && handleFilterChange\r\n ? {\r\n isQueryFilter: true as const,\r\n handleFilterChange,\r\n filterableQuery: filterableQuery || [],\r\n currentFilters: currentFilters,\r\n onClearFilters: onClearFilters,\r\n }\r\n : {\r\n isQueryFilter: false as const,\r\n filterableColumns: filterableColumns || [],\r\n })}\r\n />\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { TrashIcon, X } from 'lucide-react'\r\nimport { type Table } from '@tanstack/react-table'\r\n\r\nimport { cn } from '../lib/utils'\r\nimport { Button } from './ui/button'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\n\r\ninterface DataTableFloatingBarProps<TData> extends React.HTMLAttributes<HTMLElement> {\r\n table: Table<TData>\r\n deleteRowsAction?: React.MouseEventHandler<HTMLButtonElement>\r\n}\r\n\r\nexport function DataTableFloatingBar<TData>({\r\n table,\r\n deleteRowsAction,\r\n className,\r\n ...props\r\n}: DataTableFloatingBarProps<TData>) {\r\n const t = useTableTranslations()\r\n if (table.getFilteredSelectedRowModel().rows.length <= 0) return null\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'mx-auto flex w-fit items-center gap-2 rounded-md bg-zinc-900 px-4 py-2 text-white',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <Button\r\n aria-label={t('clear-selection')}\r\n title={t('clear-selection')}\r\n className=\"h-auto bg-transparent p-1 text-white hover:bg-zinc-700\"\r\n onClick={() => table.toggleAllRowsSelected(false)}\r\n >\r\n <X className=\"size-4\" aria-hidden=\"true\" />\r\n </Button>\r\n <span>\r\n {table.getFilteredSelectedRowModel().rows.length} {t('row(s) selected')}\r\n </span>\r\n {deleteRowsAction && (\r\n <Button\r\n aria-label={t('delete-selected')}\r\n title={t('delete')}\r\n className=\"h-auto bg-transparent p-1 text-white hover:bg-zinc-700\"\r\n onClick={(event) => {\r\n table.toggleAllPageRowsSelected(false)\r\n deleteRowsAction(event)\r\n }}\r\n >\r\n <TrashIcon className=\"size-4\" aria-hidden=\"true\" />\r\n </Button>\r\n )}\r\n </div>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport * as React from 'react'\r\nimport { Check, ChevronsUpDown } from 'lucide-react'\r\nimport { Column } from '@tanstack/react-table'\r\nimport { useTableTranslations } from '../hooks/use-table-translations'\r\nimport { useTableConfig } from '../config'\r\n\r\nimport { cn } from '../lib/utils'\r\nimport { Button } from './ui/button'\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n} from './ui/command'\r\nimport { Popover, PopoverContent, PopoverTrigger } from './ui/popover'\r\nimport { Badge } from './ui/badge'\r\n\r\ninterface DataTableRoleFilterProps<TData> {\r\n column?: Column<TData, unknown>\r\n title?: string\r\n options: {\r\n label: string\r\n value: string\r\n }[]\r\n paramKey?: string\r\n}\r\n\r\nexport function DataTableRoleFilter<TData>({\r\n column,\r\n title,\r\n options,\r\n paramKey,\r\n}: DataTableRoleFilterProps<TData>) {\r\n const config = useTableConfig()\r\n const router = config.router\r\n const t = useTableTranslations()\r\n\r\n const resolvedParamKey = paramKey ?? (column ? String(column.id) : 'role')\r\n\r\n // Get current value from URL params via router adapter, or fall back to column filter\r\n const searchParams = router ? router.getSearchParams() : new URLSearchParams()\r\n const currentValue = router\r\n ? (searchParams.get(resolvedParamKey) || undefined)\r\n : (column?.getFilterValue() as string | undefined)\r\n\r\n const handleSelect = (value: string | undefined) => {\r\n if (router) {\r\n const newParams = new URLSearchParams(searchParams.toString())\r\n if (value) {\r\n newParams.set(resolvedParamKey, value)\r\n } else {\r\n newParams.delete(resolvedParamKey)\r\n }\r\n newParams.set('page', '1')\r\n router.push(`?${newParams.toString()}`)\r\n }\r\n column?.setFilterValue(value)\r\n }\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\" className=\"h-8 border-dashed\">\r\n <ChevronsUpDown className=\"me-2 h-4 w-4 opacity-50\" />\r\n {title}\r\n {currentValue && (\r\n <>\r\n <span className=\"mx-2 text-muted-foreground\">|</span>\r\n <Badge variant=\"secondary\" className=\"rounded-sm px-1 font-normal\">\r\n {options.find((opt) => opt.value === currentValue)?.label}\r\n </Badge>\r\n </>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[200px] p-0\" align=\"start\">\r\n <Command>\r\n <CommandInput placeholder={`${t('Filter')} ${title}...`} />\r\n <CommandEmpty>{t('no-items-found')}</CommandEmpty>\r\n <CommandGroup className=\"max-h-64 overflow-auto\">\r\n <CommandItem onSelect={() => handleSelect(undefined)} className=\"cursor-pointer\">\r\n <div\r\n className={cn(\r\n 'me-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary',\r\n !currentValue\r\n ? 'bg-primary text-primary-foreground'\r\n : 'opacity-50 [&_svg]:invisible'\r\n )}\r\n >\r\n <Check className=\"h-4 w-4\" />\r\n </div>\r\n <span>{t('all')}</span>\r\n </CommandItem>\r\n\r\n {options.map((option) => {\r\n const isSelected = currentValue === option.value\r\n\r\n return (\r\n <CommandItem\r\n key={option.value}\r\n onSelect={() => handleSelect(option.value)}\r\n className=\"cursor-pointer\"\r\n >\r\n <div\r\n className={cn(\r\n 'me-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary',\r\n isSelected\r\n ? 'bg-primary text-primary-foreground'\r\n : 'opacity-50 [&_svg]:invisible'\r\n )}\r\n >\r\n <Check className=\"h-4 w-4\" />\r\n </div>\r\n <span>{option.label}</span>\r\n </CommandItem>\r\n )\r\n })}\r\n </CommandGroup>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n","'use client'\r\n\r\nimport { cn } from '../../lib/utils'\r\n\r\nfunction Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return <div className={cn('animate-pulse rounded-md bg-primary/10', className)} {...props} />\r\n}\r\n\r\nexport { Skeleton }\r\n","import React from 'react'\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from './ui/table'\r\nimport { Skeleton } from './ui/skeleton'\r\n\r\ninterface DataTableLoadingProps {\r\n columnCount: number\r\n rowCount?: number\r\n}\r\n\r\nexport const DataTableLoading = React.memo(function DataTableLoading({ columnCount, rowCount = 10 }: DataTableLoadingProps) {\r\n return (\r\n <div className=\"w-full space-y-3 overflow-auto\" role=\"status\" aria-busy=\"true\" aria-label=\"Loading data\">\r\n <div className=\"flex w-full items-center justify-between gap-2 overflow-auto p-1\">\r\n <div className=\"flex flex-1 items-center gap-2\">\r\n <Skeleton className=\"h-7 w-[150px] lg:w-[250px]\" />\r\n <Skeleton className=\"h-7 w-[70px] border-dashed\" />\r\n </div>\r\n <Skeleton className=\"ms-auto hidden h-7 w-[70px] lg:flex\" />\r\n </div>\r\n <div className=\"rounded-md border\">\r\n <Table>\r\n <TableHeader>\r\n {Array.from({ length: 1 }).map((_, i) => (\r\n <TableRow key={i} className=\"hover:bg-transparent\">\r\n {Array.from({ length: columnCount }).map((_, j) => (\r\n <TableHead key={j}>\r\n <Skeleton className=\"h-6 w-full\" />\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n ))}\r\n </TableHeader>\r\n <TableBody>\r\n {Array.from({ length: rowCount }).map((_, i) => (\r\n <TableRow key={i} className=\"hover:bg-transparent\">\r\n {Array.from({ length: columnCount }).map((_, j) => (\r\n <TableCell key={j}>\r\n <Skeleton className=\"h-6 w-full\" />\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n <div className=\"flex w-full flex-col items-center justify-between gap-4 overflow-auto px-2 py-1 sm:flex-row sm:gap-8\">\r\n <div className=\"flex-1\">\r\n <Skeleton className=\"h-8 w-40\" />\r\n </div>\r\n <div className=\"flex flex-col items-center gap-4 sm:flex-row sm:gap-6 lg:gap-8\">\r\n <div className=\"flex items-center gap-2\">\r\n <Skeleton className=\"h-8 w-24\" />\r\n <Skeleton className=\"h-8 w-[70px]\" />\r\n </div>\r\n <div className=\"flex w-[100px] items-center justify-center text-sm font-medium\">\r\n <Skeleton className=\"h-8 w-20\" />\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <Skeleton className=\"hidden size-8 lg:block\" />\r\n <Skeleton className=\"size-8\" />\r\n <Skeleton className=\"size-8\" />\r\n <Skeleton className=\"hidden size-8 lg:block\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n})\r\n"]}
|