@startsimpli/ui 0.1.3 → 0.1.4

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/unified-table/hooks/useTableState.ts","../src/components/unified-table/hooks/useSelection.ts","../src/components/unified-table/hooks/usePagination.ts","../src/components/unified-table/hooks/useFilters.ts","../src/components/unified-table/hooks/useResponsive.ts","../src/components/unified-table/hooks/useColumnVisibility.ts","../src/components/unified-table/hooks/useTablePreferences.ts","../src/components/unified-table/hooks/useTableKeyboard.ts","../src/components/unified-table/hooks/useTableURL.ts","../src/components/unified-table/hooks/useColumnReorder.ts","../src/components/unified-table/hooks/useColumnResize.ts","../src/components/ui/button.tsx","../src/components/ui/badge.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/select.tsx","../src/components/unified-table/components/TableFilters/index.tsx","../src/components/unified-table/components/BulkActionBar/index.tsx","../src/components/ui/table.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/unified-table/components/InlineEditCell/index.tsx","../src/components/unified-table/components/DataTableCore/index.tsx","../src/components/unified-table/components/TablePagination/index.tsx","../src/components/unified-table/utils/export.ts","../src/components/unified-table/components/Toolbar/ExportButton.tsx","../src/components/ui/dialog.tsx","../src/components/unified-table/components/Toolbar/SavedViewsDropdown.tsx","../src/components/unified-table/components/Toolbar/StandardTableToolbar.tsx","../src/components/unified-table/UnifiedTable.tsx","../src/components/ui/card.tsx","../src/components/unified-table/components/MobileView/CardActions.tsx","../src/components/unified-table/components/MobileView/Card.tsx","../src/components/unified-table/components/MobileView/types.ts","../src/components/unified-table/components/MobileView/index.tsx","../src/components/unified-table/utils/renderers.ts","../src/components/unified-table/utils/themes.ts","../src/components/unified-table/utils/validation.ts"],"names":["useState","useCallback","useMemo","useEffect","useRef","React","cva","jsx","React2","React3","React4","jsxs","isExpanded","ChevronUp","ChevronDown","Icon","React6","Check","React7","X","provided","Loader2","ChevronRight","exportData","Fragment","React8","comparison","React9","Card","getNestedValue"],"mappings":"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","file":"chunk-27YUQBOE.mjs","sourcesContent":["'use client'\nimport { useState, useCallback, useMemo } from 'react'\nimport { UseTableStateReturn, TableState } from '../types'\n\ninterface UseTableStateProps<TData> {\n initialData?: TData[]\n initialPageSize?: number\n}\n\nexport function useTableState<TData>({\n initialData = [],\n initialPageSize = 25,\n}: UseTableStateProps<TData>): UseTableStateReturn<TData> {\n const [data, setDataState] = useState<TData[]>(initialData)\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSizeState] = useState(initialPageSize)\n const [searchTerm, setSearchTerm] = useState('')\n const [debouncedSearchTerm, setDebouncedSearchTerm] = useState('')\n const [sortBy, setSortBy] = useState<string | null>(null)\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')\n const [loading, setLoadingState] = useState(false)\n const [loadingRows, setLoadingRowsState] = useState<Set<string>>(new Set())\n const [error, setErrorState] = useState<Error | null>(null)\n const [viewMode, setViewModeState] = useState<'table' | 'card'>('table')\n\n // Computed values\n const totalCount = data.length\n const totalPages = Math.max(1, Math.ceil(totalCount / pageSize))\n\n const state: TableState<TData> = useMemo(() => ({\n data,\n filteredData: data, // Will be computed by filters hook\n displayedData: data, // Will be computed by pagination\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n selectedIds: new Set(),\n selectAllPages: false,\n activeFilters: {},\n sortBy,\n sortDirection,\n searchTerm,\n debouncedSearchTerm,\n loading,\n loadingRows,\n error,\n viewMode,\n }), [\n data,\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n sortBy,\n sortDirection,\n searchTerm,\n debouncedSearchTerm,\n loading,\n loadingRows,\n error,\n viewMode,\n ])\n\n const setData = useCallback((newData: TData[]) => {\n setDataState(newData)\n }, [])\n\n const setPage = useCallback((page: number) => {\n setCurrentPage(page)\n }, [])\n\n const setPageSize = useCallback((size: number) => {\n setPageSizeState(size)\n setCurrentPage(1) // Reset to first page when changing page size\n }, [])\n\n const setLoading = useCallback((isLoading: boolean) => {\n setLoadingState(isLoading)\n }, [])\n\n const setLoadingRows = useCallback((ids: Set<string>) => {\n setLoadingRowsState(ids)\n }, [])\n\n const setError = useCallback((err: Error | null) => {\n setErrorState(err)\n }, [])\n\n const setViewMode = useCallback((mode: 'table' | 'card') => {\n setViewModeState(mode)\n }, [])\n\n return {\n state,\n setData,\n setPage,\n setPageSize,\n setLoading,\n setLoadingRows,\n setError,\n setViewMode,\n }\n}\n","'use client'\nimport { useState, useCallback, useEffect, useRef } from 'react'\nimport { UseSelectionReturn } from '../types'\n\ninterface UseSelectionProps {\n currentPageData: any[]\n totalCount: number\n getRowId: (row: any) => string\n onSelectionChange?: (ids: Set<string>) => void\n onSelectAllPages?: (enabled: boolean) => void\n // External controlled state\n externalSelectedIds?: Set<string>\n externalSelectAllPages?: boolean\n}\n\nexport function useSelection({\n currentPageData,\n totalCount,\n getRowId,\n onSelectionChange,\n onSelectAllPages,\n externalSelectedIds,\n externalSelectAllPages,\n}: UseSelectionProps): UseSelectionReturn {\n const [internalSelectedIds, setInternalSelectedIds] = useState<Set<string>>(new Set())\n const [internalSelectAllPages, setInternalSelectAllPages] = useState(false)\n\n // Track if we're in controlled mode\n const isControlled = externalSelectedIds !== undefined\n\n // Use external state if provided, otherwise internal\n const selectedIds = isControlled ? externalSelectedIds : internalSelectedIds\n const selectAllPages = externalSelectAllPages ?? internalSelectAllPages\n\n // Store callbacks in refs to avoid stale closures\n const onSelectionChangeRef = useRef(onSelectionChange)\n const onSelectAllPagesRef = useRef(onSelectAllPages)\n useEffect(() => {\n onSelectionChangeRef.current = onSelectionChange\n onSelectAllPagesRef.current = onSelectAllPages\n }, [onSelectionChange, onSelectAllPages])\n\n // Sync external state to internal when in controlled mode\n const prevExternalIdsRef = useRef<Set<string> | undefined>(undefined)\n useEffect(() => {\n if (externalSelectedIds !== undefined && externalSelectedIds !== prevExternalIdsRef.current) {\n setInternalSelectedIds(new Set(externalSelectedIds))\n prevExternalIdsRef.current = externalSelectedIds\n }\n }, [externalSelectedIds])\n\n useEffect(() => {\n if (externalSelectAllPages !== undefined) {\n setInternalSelectAllPages(externalSelectAllPages)\n }\n }, [externalSelectAllPages])\n\n const toggleRow = useCallback((id: string) => {\n setInternalSelectedIds(prev => {\n const next = new Set(prev)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n // Notify parent after state update\n onSelectionChangeRef.current?.(next)\n return next\n })\n\n // If we're toggling individual rows, turn off select all pages\n setInternalSelectAllPages(prev => {\n if (prev) {\n onSelectAllPagesRef.current?.(false)\n return false\n }\n return prev\n })\n }, [])\n\n const toggleAll = useCallback(() => {\n const currentPageIds = currentPageData.map(getRowId)\n\n setInternalSelectedIds(prev => {\n const allSelected = currentPageIds.every(id => prev.has(id))\n\n let next: Set<string>\n if (allSelected) {\n // Deselect all on current page\n next = new Set(prev)\n currentPageIds.forEach(id => next.delete(id))\n } else {\n // Select all on current page\n next = new Set(prev)\n currentPageIds.forEach(id => next.add(id))\n }\n\n // Notify parent\n onSelectionChangeRef.current?.(next)\n return next\n })\n\n // Turn off select all pages if toggling individual page\n setInternalSelectAllPages(prev => {\n if (prev) {\n onSelectAllPagesRef.current?.(false)\n return false\n }\n return prev\n })\n }, [currentPageData, getRowId])\n\n const selectAllPagesToggle = useCallback(() => {\n setInternalSelectAllPages(prev => {\n const next = !prev\n // Notify parent\n onSelectAllPagesRef.current?.(next)\n\n if (next) {\n // When selecting all pages, clear individual selections\n setInternalSelectedIds(new Set())\n onSelectionChangeRef.current?.(new Set())\n }\n return next\n })\n }, [])\n\n const clearSelection = useCallback(() => {\n // Update internal state\n setInternalSelectedIds(new Set())\n setInternalSelectAllPages(false)\n // Notify parent\n onSelectionChangeRef.current?.(new Set())\n onSelectAllPagesRef.current?.(false)\n }, [])\n\n const getSelectedCount = useCallback(() => {\n if (selectAllPages) {\n return totalCount\n }\n return selectedIds.size\n }, [selectAllPages, selectedIds, totalCount])\n\n return {\n selectedIds,\n selectAllPages,\n toggleRow,\n toggleAll,\n selectAllPagesToggle,\n clearSelection,\n getSelectedCount,\n }\n}\n","'use client'\nimport { useState, useCallback, useMemo } from 'react'\nimport { UsePaginationReturn } from '../types'\n\ninterface UsePaginationProps {\n totalCount: number\n initialPageSize?: number\n initialPage?: number\n serverSide?: boolean\n onPageChange?: (page: number) => void\n}\n\nexport function usePagination({\n totalCount,\n initialPageSize = 25,\n initialPage = 1,\n serverSide = false,\n onPageChange,\n}: UsePaginationProps): UsePaginationReturn {\n const [currentPage, setCurrentPage] = useState(initialPage)\n const [pageSize, setPageSize] = useState(initialPageSize)\n\n const totalPages = useMemo(() => {\n return Math.max(1, Math.ceil(totalCount / pageSize))\n }, [totalCount, pageSize])\n\n const canGoNext = useMemo(() => {\n return currentPage < totalPages\n }, [currentPage, totalPages])\n\n const canGoPrevious = useMemo(() => {\n return currentPage > 1\n }, [currentPage])\n\n const goToPage = useCallback((page: number) => {\n const validPage = Math.max(1, Math.min(page, totalPages))\n setCurrentPage(validPage)\n onPageChange?.(validPage)\n }, [totalPages, onPageChange])\n\n const goToFirstPage = useCallback(() => {\n goToPage(1)\n }, [goToPage])\n\n const goToLastPage = useCallback(() => {\n goToPage(totalPages)\n }, [goToPage, totalPages])\n\n const goToNextPage = useCallback(() => {\n if (canGoNext) {\n goToPage(currentPage + 1)\n }\n }, [canGoNext, currentPage, goToPage])\n\n const goToPreviousPage = useCallback(() => {\n if (canGoPrevious) {\n goToPage(currentPage - 1)\n }\n }, [canGoPrevious, currentPage, goToPage])\n\n const getPageNumbers = useCallback((): (number | '...')[] => {\n const maxVisible = 7 // Maximum number of page buttons to show\n\n if (totalPages <= maxVisible) {\n // Show all pages if total is small\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const pages: (number | '...')[] = []\n\n // Always show first page\n pages.push(1)\n\n if (currentPage > 3) {\n pages.push('...')\n }\n\n // Show pages around current\n const start = Math.max(2, currentPage - 1)\n const end = Math.min(totalPages - 1, currentPage + 1)\n\n for (let i = start; i <= end; i++) {\n if (!pages.includes(i)) {\n pages.push(i)\n }\n }\n\n if (currentPage < totalPages - 2) {\n pages.push('...')\n }\n\n // Always show last page\n if (!pages.includes(totalPages)) {\n pages.push(totalPages)\n }\n\n return pages\n }, [currentPage, totalPages])\n\n const getDisplayRange = useCallback(() => {\n const start = (currentPage - 1) * pageSize + 1\n const end = Math.min(currentPage * pageSize, totalCount)\n return { start, end }\n }, [currentPage, pageSize, totalCount])\n\n return {\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n canGoNext,\n canGoPrevious,\n goToPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n getPageNumbers,\n getDisplayRange,\n }\n}\n","'use client'\nimport { useState, useCallback } from 'react'\nimport { UseFiltersReturn, FilterState } from '../types'\n\ninterface UseFiltersProps {\n initialFilters?: FilterState\n onChange?: (filters: FilterState) => void\n}\n\nexport function useFilters({\n initialFilters = {},\n onChange,\n}: UseFiltersProps): UseFiltersReturn {\n const [filters, setFilters] = useState<FilterState>(initialFilters)\n\n const setFilter = useCallback((key: string, value: any) => {\n setFilters((prev) => {\n const next = { ...prev, [key]: value }\n onChange?.(next)\n return next\n })\n }, [onChange])\n\n const clearFilter = useCallback((key: string) => {\n setFilters((prev) => {\n const next = { ...prev }\n delete next[key]\n onChange?.(next)\n return next\n })\n }, [onChange])\n\n const clearAllFilters = useCallback(() => {\n setFilters({})\n onChange?.({})\n }, [onChange])\n\n const hasActiveFilters = useCallback(() => {\n return Object.keys(filters).length > 0\n }, [filters])\n\n const getActiveFilterCount = useCallback(() => {\n return Object.keys(filters).length\n }, [filters])\n\n return {\n filters,\n setFilter,\n clearFilter,\n clearAllFilters,\n hasActiveFilters,\n getActiveFilterCount,\n }\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\n\nexport interface ResponsiveBreakpoints {\n mobile: number\n tablet: number\n desktop: number\n}\n\nexport const DEFAULT_BREAKPOINTS: ResponsiveBreakpoints = {\n mobile: 768,\n tablet: 1024,\n desktop: 1280,\n}\n\nexport type ViewMode = 'mobile' | 'tablet' | 'desktop'\n\nexport function useResponsive(breakpoints: ResponsiveBreakpoints = DEFAULT_BREAKPOINTS) {\n const [viewMode, setViewMode] = useState<ViewMode>('desktop')\n const [windowWidth, setWindowWidth] = useState<number>(0)\n\n useEffect(() => {\n const handleResize = () => {\n const width = window.innerWidth\n setWindowWidth(width)\n\n if (width < breakpoints.mobile) {\n setViewMode('mobile')\n } else if (width < breakpoints.tablet) {\n setViewMode('tablet')\n } else {\n setViewMode('desktop')\n }\n }\n\n handleResize()\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [breakpoints])\n\n return {\n viewMode,\n windowWidth,\n isMobile: viewMode === 'mobile',\n isTablet: viewMode === 'tablet',\n isDesktop: viewMode === 'desktop',\n isMobileOrTablet: viewMode === 'mobile' || viewMode === 'tablet',\n }\n}\n","'use client'\n\nimport { useState, useCallback, useEffect } from 'react'\nimport { ColumnVisibilityState } from '../types'\n\nexport interface UseColumnVisibilityOptions {\n defaultVisibility?: ColumnVisibilityState\n persistKey?: string\n onVisibilityChange?: (visibility: ColumnVisibilityState) => void\n}\n\nexport function useColumnVisibility({\n defaultVisibility = {},\n persistKey,\n onVisibilityChange\n}: UseColumnVisibilityOptions = {}) {\n const [columnVisibility, setColumnVisibility] = useState<ColumnVisibilityState>(() => {\n if (persistKey && typeof window !== 'undefined') {\n const stored = localStorage.getItem(`column-visibility-${persistKey}`)\n if (stored) {\n try {\n return JSON.parse(stored)\n } catch {\n return defaultVisibility\n }\n }\n }\n return defaultVisibility\n })\n\n useEffect(() => {\n if (persistKey && typeof window !== 'undefined') {\n localStorage.setItem(`column-visibility-${persistKey}`, JSON.stringify(columnVisibility))\n }\n onVisibilityChange?.(columnVisibility)\n }, [columnVisibility, persistKey, onVisibilityChange])\n\n const toggleColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: !(prev[columnId] ?? true)\n }))\n }, [])\n\n const showColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: true\n }))\n }, [])\n\n const hideColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: false\n }))\n }, [])\n\n const showAllColumns = useCallback(() => {\n setColumnVisibility({})\n }, [])\n\n const hideAllColumns = useCallback((exceptColumns: string[] = []) => {\n setColumnVisibility((prev) => {\n const newVisibility: ColumnVisibilityState = {}\n Object.keys(prev).forEach((key) => {\n newVisibility[key] = exceptColumns.includes(key)\n })\n return newVisibility\n })\n }, [])\n\n const resetVisibility = useCallback(() => {\n setColumnVisibility(defaultVisibility)\n }, [defaultVisibility])\n\n const isColumnVisible = useCallback((columnId: string): boolean => {\n return columnVisibility[columnId] ?? true\n }, [columnVisibility])\n\n return {\n columnVisibility,\n setColumnVisibility,\n toggleColumn,\n showColumn,\n hideColumn,\n showAllColumns,\n hideAllColumns,\n resetVisibility,\n isColumnVisible,\n }\n}\n","'use client'\nimport { useState, useEffect, useCallback, useRef } from 'react'\nimport { ColumnVisibilityState, SortState } from '../types'\n\ninterface TablePreferences {\n columnVisibility: ColumnVisibilityState\n columnOrder: string[] | null\n defaultSortColumn: string | null\n defaultSortDirection: 'asc' | 'desc' | null\n pageSize: number\n}\n\ninterface UseTablePreferencesOptions {\n tableId: string\n enabled?: boolean\n defaultColumnVisibility?: ColumnVisibilityState\n defaultPageSize?: number\n debounceMs?: number\n // Custom fetch function for API calls\n // Applications should provide their own apiFetch implementation\n apiFetch?: typeof fetch\n}\n\ninterface UseTablePreferencesReturn {\n preferences: TablePreferences | null\n isLoading: boolean\n error: Error | null\n updateColumnVisibility: (visibility: ColumnVisibilityState) => void\n updateColumnOrder: (order: string[]) => void\n updateSortPreference: (sort: SortState) => void\n updatePageSize: (size: number) => void\n resetPreferences: () => Promise<void>\n}\n\nexport function useTablePreferences({\n tableId,\n enabled = true,\n defaultColumnVisibility = {},\n defaultPageSize = 25,\n debounceMs = 500,\n apiFetch = fetch // Default to native fetch if not provided\n}: UseTablePreferencesOptions): UseTablePreferencesReturn {\n const [preferences, setPreferences] = useState<TablePreferences | null>(null)\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n const saveTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const pendingUpdatesRef = useRef<Partial<TablePreferences>>({})\n\n // Load preferences on mount\n useEffect(() => {\n if (!enabled) {\n setIsLoading(false)\n return\n }\n\n const loadPreferences = async () => {\n try {\n const response = await apiFetch(`/api/v1/table-preferences/?tableId=${encodeURIComponent(tableId)}`)\n if (!response.ok) {\n throw new Error('Failed to load table preferences')\n }\n const data = await response.json()\n\n if (data) {\n setPreferences(data)\n } else {\n // Use defaults if no saved preferences\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n }\n } catch (err) {\n console.error('Error loading table preferences:', err)\n setError(err instanceof Error ? err : new Error('Unknown error'))\n // Fall back to defaults on error\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n } finally {\n setIsLoading(false)\n }\n }\n\n loadPreferences()\n }, [tableId, enabled, defaultPageSize])\n\n // Debounced save function\n const savePreferences = useCallback(async (updates: Partial<TablePreferences>) => {\n // Merge with pending updates\n pendingUpdatesRef.current = { ...pendingUpdatesRef.current, ...updates }\n\n // Clear existing timeout\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current)\n }\n\n // Set new debounced timeout\n saveTimeoutRef.current = setTimeout(async () => {\n const updatesToSave = { ...pendingUpdatesRef.current }\n pendingUpdatesRef.current = {}\n\n try {\n const response = await apiFetch('/api/v1/table-preferences/', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tableId,\n ...updatesToSave\n })\n })\n\n if (!response.ok) {\n throw new Error('Failed to save table preferences')\n }\n } catch (err) {\n console.error('Error saving table preferences:', err)\n // Don't update error state for save failures - user can continue working\n }\n }, debounceMs)\n }, [tableId, debounceMs])\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current)\n }\n }\n }, [])\n\n const updateColumnVisibility = useCallback((visibility: ColumnVisibilityState) => {\n setPreferences(prev => prev ? { ...prev, columnVisibility: visibility } : null)\n savePreferences({ columnVisibility: visibility })\n }, [savePreferences])\n\n const updateColumnOrder = useCallback((order: string[]) => {\n setPreferences(prev => prev ? { ...prev, columnOrder: order } : null)\n savePreferences({ columnOrder: order })\n }, [savePreferences])\n\n const updateSortPreference = useCallback((sort: SortState) => {\n setPreferences(prev => prev ? {\n ...prev,\n defaultSortColumn: sort.sortBy,\n defaultSortDirection: sort.sortDirection\n } : null)\n savePreferences({\n defaultSortColumn: sort.sortBy,\n defaultSortDirection: sort.sortDirection\n })\n }, [savePreferences])\n\n const updatePageSize = useCallback((size: number) => {\n setPreferences(prev => prev ? { ...prev, pageSize: size } : null)\n savePreferences({ pageSize: size })\n }, [savePreferences])\n\n const resetPreferences = useCallback(async () => {\n try {\n const response = await apiFetch(`/api/v1/table-preferences/?tableId=${encodeURIComponent(tableId)}`, {\n method: 'DELETE'\n })\n\n if (!response.ok) {\n throw new Error('Failed to reset table preferences')\n }\n\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n } catch (err) {\n console.error('Error resetting table preferences:', err)\n throw err\n }\n }, [tableId, defaultColumnVisibility, defaultPageSize])\n\n return {\n preferences,\n isLoading,\n error,\n updateColumnVisibility,\n updateColumnOrder,\n updateSortPreference,\n updatePageSize,\n resetPreferences\n }\n}\n","'use client'\nimport { useEffect, useCallback, useRef, useState, RefObject } from 'react'\n\nexport interface UseTableKeyboardProps<TData> {\n data: TData[]\n getRowId: (row: TData) => string\n selectedIds?: Set<string>\n onToggleRow?: (id: string) => void\n onToggleAll?: () => void\n onRowClick?: (row: TData) => void\n onDelete?: (ids: Set<string>) => void\n tableRef: RefObject<HTMLElement | null>\n enabled?: boolean\n}\n\nexport interface UseTableKeyboardReturn {\n focusedRowIndex: number\n setFocusedRowIndex: (index: number) => void\n handleKeyDown: (event: React.KeyboardEvent) => void\n}\n\n/**\n * Hook for handling keyboard navigation in UnifiedTable\n *\n * Features:\n * - Arrow Up/Down: Navigate between rows\n * - Enter: Expand/click row (trigger onRowClick)\n * - Space: Toggle row selection\n * - Tab: Move between interactive elements (native browser behavior)\n * - Escape: Close menus/dialogs (handled by menu components)\n * - Ctrl/Cmd+A: Select all rows\n * - Delete: Trigger delete action if available\n */\nexport function useTableKeyboard<TData>({\n data,\n getRowId,\n selectedIds,\n onToggleRow,\n onToggleAll,\n onRowClick,\n onDelete,\n tableRef,\n enabled = true,\n}: UseTableKeyboardProps<TData>): UseTableKeyboardReturn {\n // Use state for reactive updates so consumers get re-renders\n const [focusedRowIndex, setFocusedRowIndexState] = useState<number>(-1)\n // Keep a ref in sync for use in callbacks to avoid stale closures\n const focusedRowIndexRef = useRef<number>(-1)\n\n const setFocusedRowIndex = useCallback((index: number) => {\n focusedRowIndexRef.current = index\n setFocusedRowIndexState(index)\n }, [])\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n if (!enabled || data.length === 0) return\n\n const { key, ctrlKey, metaKey, shiftKey } = event\n const isModifierPressed = ctrlKey || metaKey\n\n // Ctrl/Cmd + A: Select all rows\n if (key === 'a' && isModifierPressed && onToggleAll) {\n event.preventDefault()\n onToggleAll()\n return\n }\n\n // Delete: Trigger delete action if available\n if (key === 'Delete' && onDelete && selectedIds && selectedIds.size > 0) {\n event.preventDefault()\n onDelete(selectedIds)\n return\n }\n\n // Arrow navigation\n if (key === 'ArrowDown') {\n event.preventDefault()\n const nextIndex = Math.min(focusedRowIndexRef.current + 1, data.length - 1)\n setFocusedRowIndex(nextIndex)\n\n // Focus the row element\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${nextIndex}\"]`\n ) as HTMLElement\n if (rowElement && typeof rowElement.focus === 'function') {\n rowElement.focus()\n }\n }\n return\n }\n\n if (key === 'ArrowUp') {\n event.preventDefault()\n const prevIndex = Math.max(focusedRowIndexRef.current - 1, 0)\n setFocusedRowIndex(prevIndex)\n\n // Focus the row element\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${prevIndex}\"]`\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n\n // Enter: Trigger row click\n if (key === 'Enter' && focusedRowIndexRef.current >= 0 && onRowClick) {\n event.preventDefault()\n const row = data[focusedRowIndexRef.current]\n if (row) {\n onRowClick(row)\n }\n return\n }\n\n // Space: Toggle row selection\n if (key === ' ' && focusedRowIndexRef.current >= 0 && onToggleRow) {\n event.preventDefault()\n const row = data[focusedRowIndexRef.current]\n if (row) {\n const rowId = getRowId(row)\n onToggleRow(rowId)\n }\n return\n }\n\n // Home: Focus first row\n if (key === 'Home') {\n event.preventDefault()\n setFocusedRowIndex(0)\n\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n '[data-row-index=\"0\"]'\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n\n // End: Focus last row\n if (key === 'End') {\n event.preventDefault()\n const lastIndex = data.length - 1\n setFocusedRowIndex(lastIndex)\n\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${lastIndex}\"]`\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n }, [\n enabled,\n data,\n getRowId,\n selectedIds,\n onToggleRow,\n onToggleAll,\n onRowClick,\n onDelete,\n tableRef,\n setFocusedRowIndex,\n ])\n\n // Set up keyboard event listener on the table\n useEffect(() => {\n if (!enabled || !tableRef.current) return\n\n const handleKeyboardEvent = (event: KeyboardEvent) => {\n // Convert native event to React synthetic event shape\n const syntheticEvent = {\n key: event.key,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n } as React.KeyboardEvent\n\n handleKeyDown(syntheticEvent)\n }\n\n const tableElement = tableRef.current\n tableElement.addEventListener('keydown', handleKeyboardEvent as any)\n\n return () => {\n tableElement.removeEventListener('keydown', handleKeyboardEvent as any)\n }\n }, [enabled, tableRef, handleKeyDown])\n\n return {\n focusedRowIndex,\n setFocusedRowIndex,\n handleKeyDown,\n }\n}\n","'use client'\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport { useSearchParams, useRouter, usePathname } from 'next/navigation'\nimport { SortState, FilterState } from '../types'\n\nexport interface UseTableURLConfig {\n tableId: string\n persistToUrl: boolean\n debounceMs?: number\n}\n\nexport interface TableURLState {\n sortBy: string | null\n sortDirection: 'asc' | 'desc'\n filters: FilterState\n page: number\n search: string\n}\n\nexport interface UseTableURLReturn {\n // Read state from URL\n getURLState: () => TableURLState\n\n // Update individual state pieces\n setSortToURL: (sort: SortState) => void\n setFiltersToURL: (filters: FilterState) => void\n setPageToURL: (page: number) => void\n setSearchToURL: (search: string) => void\n\n // Clear state\n clearURLState: () => void\n\n // Check if URL has state\n hasURLState: () => boolean\n}\n\n/**\n * Hook for persisting table state to URL query parameters.\n * Enables shareability and browser navigation for table state.\n *\n * URL params are namespaced with tableId prefix:\n * - {tableId}_sortBy: column ID\n * - {tableId}_sortDir: 'asc' | 'desc'\n * - {tableId}_page: current page number\n * - {tableId}_search: search term\n * - {tableId}_filter_{filterKey}: filter values (JSON encoded)\n *\n * @example\n * const urlState = useTableURL({\n * tableId: 'firms',\n * persistToUrl: true,\n * debounceMs: 300\n * })\n *\n * // Read initial state from URL\n * const initialState = urlState.getURLState()\n *\n * // Update URL when state changes\n * urlState.setSortToURL({ sortBy: 'name', sortDirection: 'asc' })\n * urlState.setSearchToURL('acme')\n */\nexport function useTableURL({\n tableId,\n persistToUrl,\n debounceMs = 300,\n}: UseTableURLConfig): UseTableURLReturn {\n const searchParams = useSearchParams()\n const router = useRouter()\n const pathname = usePathname()\n\n // Debounce timer ref\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null)\n\n // Track if we're currently applying URL changes to avoid loops\n const isApplyingURLRef = useRef(false)\n\n /**\n * Build namespaced param key\n */\n const getParamKey = useCallback((key: string): string => {\n return `${tableId}_${key}`\n }, [tableId])\n\n /**\n * Parse URL state from current search params\n */\n const getURLState = useCallback((): TableURLState => {\n if (!persistToUrl) {\n return {\n sortBy: null,\n sortDirection: 'asc',\n filters: {},\n page: 1,\n search: '',\n }\n }\n\n const sortBy = searchParams.get(getParamKey('sortBy'))\n const sortDirection = searchParams.get(getParamKey('sortDir')) as 'asc' | 'desc' | null\n const page = parseInt(searchParams.get(getParamKey('page')) || '1', 10)\n const search = searchParams.get(getParamKey('search')) || ''\n\n // Parse filters (any param starting with tableId_filter_)\n const filters: FilterState = {}\n const filterPrefix = getParamKey('filter_')\n\n searchParams.forEach((value, key) => {\n if (key.startsWith(filterPrefix)) {\n const filterKey = key.substring(filterPrefix.length)\n try {\n // Try to parse as JSON first (for complex values)\n filters[filterKey] = JSON.parse(value)\n } catch {\n // Fall back to raw string value\n filters[filterKey] = value\n }\n }\n })\n\n return {\n sortBy: sortBy || null,\n sortDirection: sortDirection || 'asc',\n filters,\n page: isNaN(page) || page < 1 ? 1 : page,\n search,\n }\n }, [searchParams, persistToUrl, getParamKey])\n\n /**\n * Update URL with new params (debounced)\n */\n const updateURL = useCallback((updates: Record<string, string | null>) => {\n if (!persistToUrl) return\n\n // Clear existing debounce timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n // Debounce the URL update\n debounceTimerRef.current = setTimeout(() => {\n const newParams = new URLSearchParams(searchParams.toString())\n\n // Apply updates\n Object.entries(updates).forEach(([key, value]) => {\n if (value === null || value === '') {\n newParams.delete(key)\n } else {\n newParams.set(key, value)\n }\n })\n\n // Only update if params actually changed\n const newParamsString = newParams.toString()\n const currentParamsString = searchParams.toString()\n\n if (newParamsString !== currentParamsString) {\n isApplyingURLRef.current = true\n const newURL = newParamsString ? `${pathname}?${newParamsString}` : pathname\n router.replace(newURL, { scroll: false })\n\n // Reset flag after a short delay\n setTimeout(() => {\n isApplyingURLRef.current = false\n }, 50)\n }\n }, debounceMs)\n }, [persistToUrl, searchParams, pathname, router, debounceMs])\n\n /**\n * Update sort state in URL\n */\n const setSortToURL = useCallback((sort: SortState) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('sortBy')]: sort.sortBy,\n [getParamKey('sortDir')]: sort.sortBy ? sort.sortDirection : null,\n // Reset to page 1 when sorting changes\n [getParamKey('page')]: '1',\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Update filters in URL\n */\n const setFiltersToURL = useCallback((filters: FilterState) => {\n if (!persistToUrl) return\n\n // Build updates object - clear old filters and set new ones\n const updates: Record<string, string | null> = {}\n const filterPrefix = getParamKey('filter_')\n\n // Clear all existing filter params\n searchParams.forEach((_, key) => {\n if (key.startsWith(filterPrefix)) {\n updates[key] = null\n }\n })\n\n // Set new filter params\n Object.entries(filters).forEach(([key, value]) => {\n const paramKey = `${filterPrefix}${key}`\n if (value === undefined || value === null || value === '') {\n updates[paramKey] = null\n } else if (typeof value === 'object') {\n // Encode complex values as JSON\n updates[paramKey] = JSON.stringify(value)\n } else {\n updates[paramKey] = String(value)\n }\n })\n\n // Reset to page 1 when filters change\n updates[getParamKey('page')] = '1'\n\n updateURL(updates)\n }, [persistToUrl, updateURL, getParamKey, searchParams])\n\n /**\n * Update page in URL\n */\n const setPageToURL = useCallback((page: number) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('page')]: page > 1 ? String(page) : null, // Remove param if page 1\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Update search term in URL\n */\n const setSearchToURL = useCallback((search: string) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('search')]: search || null,\n // Reset to page 1 when search changes\n [getParamKey('page')]: '1',\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Clear all table-related URL params\n */\n const clearURLState = useCallback(() => {\n if (!persistToUrl) return\n\n const newParams = new URLSearchParams(searchParams.toString())\n const keysToDelete: string[] = []\n\n // Find all params for this table\n newParams.forEach((_, key) => {\n if (key.startsWith(`${tableId}_`)) {\n keysToDelete.push(key)\n }\n })\n\n // Delete them\n keysToDelete.forEach(key => newParams.delete(key))\n\n const newURL = newParams.toString() ? `${pathname}?${newParams.toString()}` : pathname\n router.replace(newURL, { scroll: false })\n }, [persistToUrl, searchParams, pathname, router, tableId])\n\n /**\n * Check if URL has any state for this table\n */\n const hasURLState = useCallback((): boolean => {\n if (!persistToUrl) return false\n\n let hasState = false\n searchParams.forEach((_, key) => {\n if (key.startsWith(`${tableId}_`)) {\n hasState = true\n }\n })\n return hasState\n }, [persistToUrl, searchParams, tableId])\n\n // Cleanup debounce timer on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [])\n\n return {\n getURLState,\n setSortToURL,\n setFiltersToURL,\n setPageToURL,\n setSearchToURL,\n clearURLState,\n hasURLState,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useMemo } from 'react'\nimport { DropResult } from '@hello-pangea/dnd'\nimport { ColumnConfig } from '../types'\n\ninterface UseColumnReorderOptions<TData> {\n columns: ColumnConfig<TData>[]\n initialOrder?: string[] | null\n enabled?: boolean\n onOrderChange?: (order: string[]) => void\n}\n\ninterface UseColumnReorderReturn<TData> {\n orderedColumns: ColumnConfig<TData>[]\n columnOrder: string[]\n handleDragEnd: (result: DropResult) => void\n resetOrder: () => void\n}\n\nexport function useColumnReorder<TData>({\n columns,\n initialOrder = null,\n enabled = true,\n onOrderChange,\n}: UseColumnReorderOptions<TData>): UseColumnReorderReturn<TData> {\n // Initialize order from provided order or default to column IDs\n const defaultOrder = useMemo(() => columns.map(c => c.id), [columns])\n\n const [columnOrder, setColumnOrder] = useState<string[]>(() => {\n if (initialOrder && initialOrder.length > 0) {\n // Validate that all columns exist and add any new ones\n const validOrder = initialOrder.filter(id => columns.some(c => c.id === id))\n const newColumns = columns.filter(c => !initialOrder.includes(c.id)).map(c => c.id)\n return [...validOrder, ...newColumns]\n }\n return defaultOrder\n })\n\n // Reorder columns based on current order\n const orderedColumns = useMemo(() => {\n if (!enabled) return columns\n\n const columnMap = new Map(columns.map(c => [c.id, c]))\n const ordered: ColumnConfig<TData>[] = []\n\n // Add columns in order\n for (const id of columnOrder) {\n const column = columnMap.get(id)\n if (column) {\n ordered.push(column)\n }\n }\n\n // Add any columns not in the order (new columns)\n for (const column of columns) {\n if (!columnOrder.includes(column.id)) {\n ordered.push(column)\n }\n }\n\n return ordered\n }, [columns, columnOrder, enabled])\n\n // Handle drag end\n const handleDragEnd = useCallback((result: DropResult) => {\n if (!result.destination) return\n if (result.source.index === result.destination.index) return\n\n const newOrder = Array.from(columnOrder)\n const [removed] = newOrder.splice(result.source.index, 1)\n newOrder.splice(result.destination.index, 0, removed)\n\n setColumnOrder(newOrder)\n onOrderChange?.(newOrder)\n }, [columnOrder, onOrderChange])\n\n // Reset to default order\n const resetOrder = useCallback(() => {\n setColumnOrder(defaultOrder)\n onOrderChange?.(defaultOrder)\n }, [defaultOrder, onOrderChange])\n\n return {\n orderedColumns,\n columnOrder,\n handleDragEnd,\n resetOrder,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\ninterface ColumnWidths {\n [columnId: string]: number\n}\n\ninterface UseColumnResizeOptions {\n enabled?: boolean\n initialWidths?: ColumnWidths | null\n minWidth?: number\n onWidthChange?: (widths: ColumnWidths) => void\n}\n\ninterface UseColumnResizeReturn {\n columnWidths: ColumnWidths\n getColumnWidth: (columnId: string, defaultWidth?: number) => number | undefined\n startResize: (columnId: string, startX: number, startWidth: number) => void\n resetWidths: () => void\n isResizing: boolean\n resizingColumn: string | null\n}\n\nexport function useColumnResize({\n enabled = true,\n initialWidths = null,\n minWidth = 50,\n onWidthChange,\n}: UseColumnResizeOptions = {}): UseColumnResizeReturn {\n const [columnWidths, setColumnWidths] = useState<ColumnWidths>(() => initialWidths ?? {})\n const [resizingColumn, setResizingColumn] = useState<string | null>(null)\n const resizeRef = useRef<{\n columnId: string\n startX: number\n startWidth: number\n } | null>(null)\n\n // Store dependencies in refs to avoid useCallback recreation\n const minWidthRef = useRef(minWidth)\n const onWidthChangeRef = useRef(onWidthChange)\n useEffect(() => {\n minWidthRef.current = minWidth\n onWidthChangeRef.current = onWidthChange\n }, [minWidth, onWidthChange])\n\n // Get column width (undefined allows CSS default)\n const getColumnWidth = useCallback((columnId: string, defaultWidth?: number): number | undefined => {\n if (!enabled) return defaultWidth\n return columnWidths[columnId] ?? defaultWidth\n }, [enabled, columnWidths])\n\n // Start resizing a column\n const startResize = useCallback((columnId: string, startX: number, startWidth: number) => {\n if (!enabled) return\n resizeRef.current = { columnId, startX, startWidth }\n setResizingColumn(columnId)\n }, [enabled])\n\n // Handle pointer/mouse move during resize - uses refs to avoid recreating\n const handlePointerMove = useCallback((e: PointerEvent | MouseEvent) => {\n if (!resizeRef.current) return\n\n const { columnId, startX, startWidth } = resizeRef.current\n const diff = e.clientX - startX\n const newWidth = Math.max(minWidthRef.current, startWidth + diff)\n\n setColumnWidths(prev => ({ ...prev, [columnId]: newWidth }))\n }, [])\n\n // Handle pointer/mouse up to end resize - uses refs to avoid recreating\n const handlePointerUp = useCallback(() => {\n if (!resizeRef.current) return\n\n resizeRef.current = null\n setResizingColumn(null)\n\n // Notify parent of the final width changes\n setColumnWidths(current => {\n onWidthChangeRef.current?.(current)\n return current\n })\n }, [])\n\n // Add/remove global pointer/mouse listeners during resize\n useEffect(() => {\n if (resizingColumn) {\n // Add listeners for both pointer and mouse events for cross-browser support\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp)\n document.addEventListener('mousemove', handlePointerMove)\n document.addEventListener('mouseup', handlePointerUp)\n // Prevent text selection during resize\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n\n return () => {\n // Remove listeners\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp)\n document.removeEventListener('mousemove', handlePointerMove)\n document.removeEventListener('mouseup', handlePointerUp)\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n }\n }, [resizingColumn, handlePointerMove, handlePointerUp])\n\n // Reset all widths\n const resetWidths = useCallback(() => {\n setColumnWidths({})\n onWidthChange?.({})\n }, [onWidthChange])\n\n return {\n columnWidths,\n getColumnWidth,\n startResize,\n resetWidths,\n isResizing: resizingColumn !== null,\n resizingColumn,\n }\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent 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\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { Badge } from '../../../ui/badge'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../ui/select'\nimport { Filter, XCircle, ChevronDown, ChevronUp } from 'lucide-react'\nimport { FilterConfig, FilterSection, UseFiltersReturn } from '../../types'\nimport { cn } from '../../../../lib/utils'\nimport { useState, useCallback } from 'react'\n\ninterface TableFiltersProps {\n config: FilterConfig\n filters: UseFiltersReturn\n className?: string\n defaultExpanded?: boolean\n}\n\nexport function TableFilters({ config, filters, className, defaultExpanded = false }: TableFiltersProps) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded)\n const [expandedSections, setExpandedSections] = useState<Set<string>>(new Set())\n\n const toggleSection = (sectionId: string) => {\n setExpandedSections((prev) => {\n const next = new Set(prev)\n if (next.has(sectionId)) {\n next.delete(sectionId)\n } else {\n next.add(sectionId)\n }\n return next\n })\n }\n\n const renderChipsFilter = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'chips' || !section.filters) return null\n\n return (\n <div className=\"flex flex-wrap items-center gap-3\">\n {section.filters.map((filter) => {\n if (!filter.options) return null\n\n return (\n <div key={filter.id} className=\"flex items-center gap-2\">\n <Label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <div className=\"flex gap-1\">\n {filter.options.map((option) => {\n const isActive = filters.filters[filter.id] === option\n\n return (\n <Button\n key={option}\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => {\n if (isActive) {\n filters.clearFilter(filter.id)\n } else {\n filters.setFilter(filter.id, option)\n }\n }}\n className=\"h-7 px-2 text-xs\"\n >\n {option}\n </Button>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n )\n }\n\n const renderBucketsFilter = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'buckets' || !section.buckets) return null\n\n const currentValue = filters.filters[section.id] || 'all'\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <Label htmlFor={section.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {section.label}:\n </Label>\n <Select value={currentValue} onValueChange={(value) => filters.setFilter(section.id, value)}>\n <SelectTrigger id={section.id} className=\"w-32 h-8 text-xs\">\n <SelectValue placeholder=\"Select range\" />\n </SelectTrigger>\n <SelectContent>\n {section.buckets.map((bucket, idx) => (\n <SelectItem key={idx} value={bucket.label.toLowerCase().replace(/\\s+/g, '-')}>\n {bucket.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n const renderDropdownFilter = (filter: NonNullable<FilterConfig['sections'][0]['filters']>[0]) => {\n if (!filter.options) return null\n\n const currentValue = filters.filters[filter.id] || 'all'\n // Filter out 'all' from options since we add it explicitly below\n const filteredOptions = filter.options.filter((option: string) => option.toLowerCase() !== 'all')\n\n return (\n <div key={filter.id} className=\"flex items-center gap-1.5\">\n <Label htmlFor={filter.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <Select value={currentValue} onValueChange={(value) => filters.setFilter(filter.id, value)}>\n <SelectTrigger id={filter.id} className=\"w-28 h-8 text-xs\">\n <SelectValue placeholder=\"All\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All</SelectItem>\n {filteredOptions.map((option: string) => (\n <SelectItem key={option} value={option}>\n {option === 'null' ? 'Not Set' : option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n const renderSearchFilter = (filter: NonNullable<FilterConfig['sections'][0]['filters']>[0]) => {\n const currentValue = filters.filters[filter.id] || ''\n\n return (\n <div key={filter.id} className=\"flex items-center gap-1.5\">\n <Label htmlFor={filter.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <Input\n id={filter.id}\n type=\"text\"\n placeholder={filter.label}\n value={currentValue}\n onChange={(e) => filters.setFilter(filter.id, e.target.value)}\n className=\"w-32 h-8 text-xs\"\n />\n </div>\n )\n }\n\n const renderCollapsibleSection = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'collapsible' || !section.filters) return null\n\n const isExpanded = expandedSections.has(section.id)\n\n return (\n <div key={section.id} className=\"border rounded-lg p-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => toggleSection(section.id)}\n className=\"w-full justify-between -ml-2\"\n >\n <span className=\"font-medium\">{section.label}</span>\n {isExpanded ? <ChevronUp className=\"h-4 w-4\" /> : <ChevronDown className=\"h-4 w-4\" />}\n </Button>\n\n {isExpanded && (\n <div className=\"mt-3 space-y-3\">\n {section.filters.map((filter) => {\n if (filter.type === 'dropdown') {\n return renderDropdownFilter(filter)\n }\n if (filter.type === 'search') {\n return renderSearchFilter(filter)\n }\n return null\n })}\n </div>\n )}\n </div>\n )\n }\n\n // Render custom filter using the provided render function\n const renderCustomFilter = useCallback((section: FilterSection) => {\n if (section.type !== 'custom' || !section.customFilter) return null\n\n const currentValue = filters.filters[section.id] ?? section.customFilter.defaultValue\n const onChange = (value: any) => {\n if (value === section.customFilter?.defaultValue || value === undefined || value === null) {\n filters.clearFilter(section.id)\n } else {\n filters.setFilter(section.id, value)\n }\n }\n\n return (\n <div key={section.id} className=\"flex items-center gap-1.5\">\n {section.label && (\n <Label className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {section.label}:\n </Label>\n )}\n {section.customFilter.render(currentValue, onChange)}\n </div>\n )\n }, [filters])\n\n const hasActiveFilters = filters.hasActiveFilters()\n const activeFilterCount = filters.getActiveFilterCount()\n\n return (\n <div className={cn('rounded-lg border bg-muted/30', className)}>\n {/* Collapsible Header */}\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"w-full flex items-center justify-between px-3 py-2 hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">Filters</span>\n {hasActiveFilters && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {activeFilterCount}\n </Badge>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {hasActiveFilters && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n filters.clearAllFilters()\n }}\n className=\"gap-1 h-6 px-2 text-xs\"\n >\n <XCircle className=\"h-3 w-3\" />\n Clear\n </Button>\n )}\n {isExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </div>\n </button>\n\n {/* Expanded filter content */}\n {isExpanded && (\n <div className=\"px-3 pb-3 pt-1\">\n {/* Compact horizontal layout for all filters */}\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-2\">\n {config.sections.map((section) => {\n if (section.type === 'chips') {\n return <div key={section.id}>{renderChipsFilter(section)}</div>\n }\n\n if (section.type === 'buckets') {\n return <div key={section.id}>{renderBucketsFilter(section)}</div>\n }\n\n if (section.type === 'collapsible') {\n return renderCollapsibleSection(section)\n }\n\n if (section.type === 'dropdown' && section.filters) {\n return section.filters.map((filter) => (\n <div key={filter.id}>{renderDropdownFilter(filter)}</div>\n ))\n }\n\n if (section.type === 'search' && section.filters) {\n return section.filters.map((filter) => (\n <div key={filter.id}>{renderSearchFilter(filter)}</div>\n ))\n }\n\n if (section.type === 'custom') {\n return <div key={section.id}>{renderCustomFilter(section)}</div>\n }\n\n return null\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { X } from 'lucide-react'\nimport { BulkAction } from '../../types'\nimport { cn } from '../../../../lib/utils'\n\ninterface BulkActionBarProps {\n selectedCount: number\n selectAllPages: boolean\n totalCount: number\n bulkActions: BulkAction[]\n onClearSelection: () => void\n onExecuteAction: (action: BulkAction) => void\n className?: string\n}\n\nexport function BulkActionBar({\n selectedCount,\n selectAllPages,\n totalCount,\n bulkActions,\n onClearSelection,\n onExecuteAction,\n className,\n}: BulkActionBarProps) {\n const isVisible = selectedCount > 0\n\n const getVariantClassName = (variant: BulkAction['variant']) => {\n switch (variant) {\n case 'gradient-purple':\n return 'bg-gradient-to-r from-purple-600 to-blue-600 text-white hover:from-purple-700 hover:to-blue-700'\n case 'gradient-green':\n return 'bg-gradient-to-r from-green-600 to-teal-600 text-white hover:from-green-700 hover:to-teal-700'\n case 'gradient-indigo':\n return 'bg-gradient-to-r from-indigo-600 to-purple-600 text-white hover:from-indigo-700 hover:to-purple-700'\n case 'gradient-orange':\n return 'bg-gradient-to-r from-orange-600 to-red-600 text-white hover:from-orange-700 hover:to-red-700'\n case 'gradient-blue':\n return 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white hover:from-blue-700 hover:to-indigo-700'\n default:\n return ''\n }\n }\n\n return (\n <div\n className={cn(\n 'transition-all duration-200 ease-in-out overflow-hidden',\n isVisible\n ? 'opacity-100 max-h-20'\n : 'opacity-0 max-h-0 pointer-events-none',\n className\n )}\n aria-hidden={!isVisible}\n >\n <div className=\"flex items-center gap-2 p-3 bg-muted/50 rounded-lg border\">\n {/* Selection summary */}\n <div className=\"flex items-center gap-2 text-sm font-medium\">\n {selectAllPages ? (\n <span className=\"text-blue-600\">\n All <span className=\"font-semibold\">{totalCount}</span> items selected\n </span>\n ) : (\n <span>\n {`${selectedCount} ${selectedCount === 1 ? 'item' : 'items'} selected`}\n </span>\n )}\n </div>\n\n {/* Divider */}\n <div className=\"h-6 w-px bg-border mx-1\" />\n\n {/* Bulk action buttons */}\n <div className=\"flex items-center gap-2 flex-1\">\n {bulkActions.map((action) => {\n const Icon = action.icon\n const isDisabled = action.disabled?.(new Set()) || false\n const exceedsMaxSelection = !!(action.maxSelection && selectedCount > action.maxSelection)\n\n return (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant === 'default' ? 'default' : 'default'}\n className={cn(\n getVariantClassName(action.variant),\n 'gap-2'\n )}\n onClick={() => onExecuteAction(action)}\n disabled={isDisabled || exceedsMaxSelection}\n title={\n exceedsMaxSelection\n ? `Maximum ${action.maxSelection} items can be selected for this action`\n : action.label\n }\n >\n <Icon className=\"h-4 w-4\" />\n {action.label}\n {selectAllPages && totalCount > 0 && ` (${totalCount})`}\n </Button>\n )\n })}\n </div>\n\n {/* Clear selection button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onClearSelection}\n className=\"gap-2\"\n >\n <X className=\"h-4 w-4\" />\n Clear\n </Button>\n </div>\n </div>\n )\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }","'use client'\n\nimport * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check, ChevronRight, Circle } from 'lucide-react'\n\nimport { cn } from '../../utils'\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center 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',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n 'px-2 py-1.5 text-sm font-semibold',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest opacity-60', className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut'\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}","'use client'\n\nimport { useState, useRef, useEffect, useCallback } from 'react'\nimport { Input } from '../../../ui/input'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../../../ui/select'\nimport { Check, X, Loader2 } from 'lucide-react'\nimport { cn } from '../../../../lib/utils'\n\ninterface InlineEditCellProps {\n value: any\n columnId: string\n rowId: string\n editType?: 'text' | 'number' | 'select' | 'date'\n editOptions?: string[]\n onSave: (value: any) => Promise<void>\n onCancel: () => void\n validate?: (value: any) => string | null\n}\n\nexport function InlineEditCell({\n value: initialValue,\n columnId,\n rowId,\n editType = 'text',\n editOptions = [],\n onSave,\n onCancel,\n validate,\n}: InlineEditCellProps) {\n const [value, setValue] = useState(initialValue ?? '')\n const [error, setError] = useState<string | null>(null)\n const [isSaving, setIsSaving] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // Focus the input on mount\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus()\n inputRef.current.select()\n }\n }, [])\n\n // Handle save\n const handleSave = useCallback(async () => {\n // Validate if validator provided\n if (validate) {\n const validationError = validate(value)\n if (validationError) {\n setError(validationError)\n return\n }\n }\n\n setIsSaving(true)\n setError(null)\n\n try {\n await onSave(value)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save')\n setIsSaving(false)\n }\n }, [value, validate, onSave])\n\n // Handle keyboard events\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSave()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }, [handleSave, onCancel])\n\n // Render select editor\n if (editType === 'select') {\n return (\n <div className=\"flex items-center gap-1\">\n <Select\n value={String(value)}\n onValueChange={(newValue) => {\n setValue(newValue)\n // Auto-save on select\n onSave(newValue)\n }}\n >\n <SelectTrigger className=\"h-8 w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {editOptions.map((option) => (\n <SelectItem key={option} value={option}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <button\n onClick={onCancel}\n className=\"p-1 hover:bg-muted rounded\"\n disabled={isSaving}\n >\n <X className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </div>\n )\n }\n\n // Render text/number/date editor\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-1\">\n <Input\n ref={inputRef}\n type={editType === 'number' ? 'number' : editType === 'date' ? 'date' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value)\n setError(null)\n }}\n onKeyDown={handleKeyDown}\n className={cn(\n 'h-8 w-full',\n error && 'border-red-500 focus-visible:ring-red-500'\n )}\n disabled={isSaving}\n />\n <button\n onClick={handleSave}\n className=\"p-1 hover:bg-green-100 rounded\"\n disabled={isSaving}\n >\n {isSaving ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" />\n ) : (\n <Check className=\"h-4 w-4 text-green-600\" />\n )}\n </button>\n <button\n onClick={onCancel}\n className=\"p-1 hover:bg-red-100 rounded\"\n disabled={isSaving}\n >\n <X className=\"h-4 w-4 text-red-600\" />\n </button>\n </div>\n {error && (\n <span className=\"text-xs text-red-500\">{error}</span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useState, useCallback } from 'react'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../../ui/table'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { Button } from '../../../ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger } from '../../../ui/dropdown-menu'\nimport { ArrowUpDown, ArrowUp, ArrowDown, MoreHorizontal, Loader2, GripVertical } from 'lucide-react'\nimport { DragDropContext, Droppable, Draggable, DropResult, DragStart } from '@hello-pangea/dnd'\nimport { ColumnConfig, RowAction } from '../../types'\nimport { InlineEditCell } from '../InlineEditCell'\nimport { cn } from '../../../../lib/utils'\n\ninterface DataTableCoreProps<TData> {\n data: TData[]\n columns: ColumnConfig<TData>[]\n getRowId: (row: TData) => string\n\n // Selection\n selectionEnabled?: boolean\n selectedIds?: Set<string>\n onToggleRow?: (id: string) => void\n onToggleAll?: () => void\n allRowsSelected?: boolean\n renderSelectionCell?: (row: TData) => React.ReactNode\n\n // Sorting\n sortingEnabled?: boolean\n sortBy?: string | null\n sortDirection?: 'asc' | 'desc'\n onSort?: (columnId: string) => void\n\n // Column Reordering\n columnReorderEnabled?: boolean\n onColumnDragEnd?: (result: DropResult) => void\n\n // Column Resizing\n columnResizeEnabled?: boolean\n columnWidths?: { [columnId: string]: number }\n onColumnResizeStart?: (columnId: string, startX: number, startWidth: number) => void\n isResizing?: boolean\n\n // Inline Editing\n inlineEditEnabled?: boolean\n onCellEdit?: (rowId: string, columnId: string, value: any, row: TData) => Promise<void>\n\n // Row Actions\n rowActions?: RowAction<TData>[]\n onRowClick?: (row: TData) => void\n\n // Loading\n loadingRows?: Set<string>\n\n className?: string\n}\n\nexport function DataTableCore<TData>({\n data,\n columns,\n getRowId,\n selectionEnabled,\n selectedIds = new Set(),\n onToggleRow,\n onToggleAll,\n allRowsSelected,\n renderSelectionCell,\n sortingEnabled,\n sortBy,\n sortDirection,\n onSort,\n columnReorderEnabled,\n onColumnDragEnd,\n columnResizeEnabled,\n columnWidths = {},\n onColumnResizeStart,\n isResizing,\n inlineEditEnabled,\n onCellEdit,\n rowActions,\n onRowClick,\n loadingRows = new Set(),\n className,\n}: DataTableCoreProps<TData>) {\n // State for tracking which cell is being edited\n const [editingCell, setEditingCell] = useState<{ rowId: string; columnId: string } | null>(null)\n\n // State for tracking if a column is being dragged (to disable sorting during drag)\n const [isDraggingColumn, setIsDraggingColumn] = useState(false)\n\n // Drag handlers\n const handleDragStart = useCallback((_: DragStart) => {\n setIsDraggingColumn(true)\n }, [])\n\n const handleDragEnd = useCallback((result: DropResult) => {\n setIsDraggingColumn(false)\n onColumnDragEnd?.(result)\n }, [onColumnDragEnd])\n\n // Get effective column width (resized or default)\n const getEffectiveWidth = (column: ColumnConfig<TData>) => {\n if (columnResizeEnabled && columnWidths[column.id]) {\n return columnWidths[column.id]\n }\n return column.width\n }\n\n // Resize handle with stable callback reference\n const handleResizeMouseDown = useCallback((columnId: string, e: React.MouseEvent | React.PointerEvent) => {\n e.stopPropagation()\n e.preventDefault()\n const th = (e.target as HTMLElement).closest('th')\n if (th && onColumnResizeStart) {\n onColumnResizeStart(columnId, e.clientX, th.offsetWidth)\n }\n }, [onColumnResizeStart])\n\n // Resize handle component - wider hit area for easier grabbing\n const renderResizeHandle = (columnId: string) => {\n if (!columnResizeEnabled) return null\n\n return (\n <div\n data-resize-handle=\"true\"\n className=\"absolute right-0 top-0 h-full w-5 cursor-col-resize z-50 flex items-center justify-center group/resize pointer-events-auto\"\n style={{ marginRight: '-10px' }}\n onMouseDown={(e) => handleResizeMouseDown(columnId, e)}\n onPointerDown={(e) => handleResizeMouseDown(columnId, e)}\n onDragStart={(e) => e.preventDefault()}\n >\n {/* Visible indicator line */}\n <div className=\"w-[3px] h-full bg-transparent group-hover/resize:bg-primary transition-colors rounded-full\" />\n </div>\n )\n }\n\n const renderCellContent = (column: ColumnConfig<TData>, row: TData) => {\n if (column.cell) {\n return column.cell(row)\n }\n\n if (column.accessorFn) {\n return column.accessorFn(row)\n }\n\n if (column.accessorKey) {\n const value = (row as any)[column.accessorKey]\n return value !== null && value !== undefined ? String(value) : '-'\n }\n\n return '-'\n }\n\n // Sort indicator component for cleaner rendering\n const SortIndicator = ({ columnId }: { columnId: string }) => {\n const isSorted = sortBy === columnId\n const direction = isSorted ? sortDirection : null\n\n if (direction === 'asc') {\n return <ArrowUp className=\"ml-2 h-4 w-4\" />\n } else if (direction === 'desc') {\n return <ArrowDown className=\"ml-2 h-4 w-4\" />\n }\n return <ArrowUpDown className=\"ml-2 h-4 w-4 opacity-50\" />\n }\n\n // Handle sort click - disabled during column dragging\n const handleSortClick = useCallback((columnId: string) => {\n if (isDraggingColumn) return // Don't sort while dragging columns\n onSort?.(columnId)\n }, [isDraggingColumn, onSort])\n\n const renderHeader = (column: ColumnConfig<TData>, inDragContext = false) => {\n if (typeof column.header === 'function') {\n return column.header({})\n }\n\n // In drag context, render a simpler header (sorting handled separately)\n if (inDragContext) {\n return <span>{column.header}</span>\n }\n\n if (sortingEnabled && column.sortable !== false) {\n return (\n <Button\n variant=\"ghost\"\n onClick={() => handleSortClick(column.id)}\n className=\"-ml-4 h-8 hover:bg-transparent\"\n >\n {column.header}\n <SortIndicator columnId={column.id} />\n </Button>\n )\n }\n\n return column.header\n }\n\n const renderColumnHeaders = () => {\n if (columnReorderEnabled && onColumnDragEnd) {\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <TableHeader>\n <Droppable droppableId=\"columns\" direction=\"horizontal\">\n {(provided) => (\n <TableRow\n ref={provided.innerRef}\n {...provided.droppableProps}\n >\n {/* Selection column */}\n {selectionEnabled && (\n <TableHead className=\"w-12\">\n <Checkbox\n checked={allRowsSelected}\n onCheckedChange={onToggleAll}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n\n {/* Draggable data columns */}\n {columns.map((column, index) => (\n <Draggable key={column.id} draggableId={column.id} index={index}>\n {(provided, snapshot) => (\n <TableHead\n ref={provided.innerRef}\n {...provided.draggableProps}\n style={{\n ...provided.draggableProps.style,\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n className={cn(\n 'relative group overflow-visible',\n snapshot.isDragging && 'bg-primary/10 shadow-lg ring-2 ring-primary/20 z-50',\n columnResizeEnabled && 'select-none'\n )}\n >\n {/* Drag handle area - leaves space for resize handle on the right */}\n <div\n {...provided.dragHandleProps}\n className={cn(\n 'flex items-center gap-2 cursor-grab active:cursor-grabbing',\n 'hover:bg-muted/50 rounded px-1 -mx-1 py-1 transition-colors',\n columnResizeEnabled && 'pr-4'\n )}\n >\n <GripVertical className=\"h-4 w-4 text-muted-foreground flex-shrink-0\" />\n {/* Sortable header text */}\n <div\n className=\"flex-1 flex items-center\"\n onClick={(e) => {\n // Only trigger sort if not dragging and column is sortable\n if (!snapshot.isDragging && sortingEnabled && column.sortable !== false) {\n e.stopPropagation()\n handleSortClick(column.id)\n }\n }}\n >\n {renderHeader(column, true)}\n {sortingEnabled && column.sortable !== false && (\n <SortIndicator columnId={column.id} />\n )}\n </div>\n </div>\n {renderResizeHandle(column.id)}\n </TableHead>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n\n {/* Actions column */}\n {rowActions && rowActions.length > 0 && (\n <TableHead className=\"w-12\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n )}\n </TableRow>\n )}\n </Droppable>\n </TableHeader>\n </DragDropContext>\n )\n }\n\n // Standard non-draggable headers\n return (\n <TableHeader>\n <TableRow>\n {/* Selection column */}\n {selectionEnabled && (\n <TableHead className=\"w-12\">\n <Checkbox\n checked={allRowsSelected}\n onCheckedChange={onToggleAll}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n\n {/* Data columns */}\n {columns.map((column) => (\n <TableHead\n key={column.id}\n className={cn('relative group overflow-visible', columnResizeEnabled && 'select-none')}\n style={{\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n >\n {renderHeader(column)}\n {renderResizeHandle(column.id)}\n </TableHead>\n ))}\n\n {/* Actions column */}\n {rowActions && rowActions.length > 0 && (\n <TableHead className=\"w-12\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n )}\n </TableRow>\n </TableHeader>\n )\n }\n\n return (\n <div className={cn('rounded-md border', className)}>\n <Table>\n {renderColumnHeaders()}\n\n <TableBody>\n {data.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (selectionEnabled ? 1 : 0) + (rowActions ? 1 : 0)}\n className=\"h-24 text-center\"\n >\n No results found.\n </TableCell>\n </TableRow>\n ) : (\n data.map((row, rowIndex) => {\n const rowId = getRowId(row)\n const isSelected = selectedIds.has(rowId)\n const isLoading = loadingRows.has(rowId)\n\n return (\n <TableRow\n key={rowId}\n data-row-index={rowIndex}\n data-state={isSelected && 'selected'}\n onClick={() => onRowClick?.(row)}\n tabIndex={0}\n className={cn(\n onRowClick && 'cursor-pointer hover:bg-muted/50',\n isLoading && 'opacity-50'\n )}\n >\n {/* Selection cell */}\n {selectionEnabled && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <div className=\"flex items-center gap-1\">\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => onToggleRow?.(rowId)}\n aria-label=\"Select row\"\n />\n {renderSelectionCell?.(row)}\n </div>\n </TableCell>\n )}\n\n {/* Data cells */}\n {columns.map((column) => {\n const isEditing = editingCell?.rowId === rowId && editingCell?.columnId === column.id\n const canEdit = inlineEditEnabled && column.editable && onCellEdit\n\n // Get the cell value for editing\n const getCellValue = () => {\n if (column.accessorFn) return column.accessorFn(row)\n if (column.accessorKey) {\n const keys = column.accessorKey.split('.')\n return keys.reduce((obj, key) => obj?.[key], row as any)\n }\n return undefined\n }\n\n return (\n <TableCell\n key={column.id}\n style={{\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n className={cn(\n canEdit && !isEditing && 'cursor-pointer hover:bg-muted/50'\n )}\n onClick={(e) => {\n if (canEdit && !isEditing) {\n e.stopPropagation()\n setEditingCell({ rowId, columnId: column.id })\n }\n }}\n >\n {isEditing ? (\n <InlineEditCell\n value={getCellValue()}\n columnId={column.id}\n rowId={rowId}\n editType={column.editType}\n editOptions={column.editOptions}\n validate={column.validate ? (v) => column.validate!(v, row) : undefined}\n onSave={async (value) => {\n await onCellEdit!(rowId, column.id, value, row)\n setEditingCell(null)\n }}\n onCancel={() => setEditingCell(null)}\n />\n ) : (\n <>\n {isLoading && <Loader2 className=\"h-4 w-4 animate-spin inline-block mr-2\" />}\n {renderCellContent(column, row)}\n </>\n )}\n </TableCell>\n )\n })}\n\n {/* Actions cell */}\n {rowActions && rowActions.length > 0 && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-8 w-8 p-0\">\n <span className=\"sr-only\">Open menu</span>\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Actions</DropdownMenuLabel>\n {rowActions.map((action, idx) => {\n const isDisabled = action.disabled?.(row) || false\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={() => !isDisabled && action.onClick(row)}\n disabled={isDisabled}\n className={cn(action.destructive && 'text-red-600')}\n >\n {action.icon && <action.icon className=\"mr-2 h-4 w-4\" />}\n {action.label}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </TableCell>\n )}\n </TableRow>\n )\n })\n )}\n </TableBody>\n </Table>\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'\nimport { UsePaginationReturn } from '../../types'\n\ninterface TablePaginationProps {\n pagination: UsePaginationReturn\n showSelectAllPrompt?: boolean\n onSelectAllPages?: () => void\n totalFilteredCount?: number\n className?: string\n}\n\nexport function TablePagination({\n pagination,\n showSelectAllPrompt,\n onSelectAllPages,\n totalFilteredCount,\n className,\n}: TablePaginationProps) {\n const {\n currentPage,\n totalPages,\n totalCount,\n canGoNext,\n canGoPrevious,\n goToPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n getPageNumbers,\n getDisplayRange,\n } = pagination\n\n const { start, end } = getDisplayRange()\n const pageNumbers = getPageNumbers()\n\n return (\n <div className={className}>\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n {/* Item count display */}\n <div className=\"text-sm text-muted-foreground\">\n Showing <span className=\"font-medium\">{start}-{end}</span> of{' '}\n <span className=\"font-medium\">{totalCount}</span>\n {totalFilteredCount && totalFilteredCount !== totalCount && (\n <span> filtered items</span>\n )}\n </div>\n\n {/* Page controls */}\n {totalPages > 1 && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground hidden sm:inline\">\n Page {currentPage} of {totalPages}\n </span>\n\n <div className=\"flex gap-1\">\n {/* First page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToFirstPage}\n disabled={!canGoPrevious}\n className=\"h-8 w-8 p-0\"\n title=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Previous page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToPreviousPage}\n disabled={!canGoPrevious}\n className=\"h-8 w-8 p-0\"\n title=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Page numbers */}\n {pageNumbers.map((pageNum, idx) => {\n if (pageNum === '...') {\n return (\n <span\n key={`ellipsis-${idx}`}\n className=\"flex items-center px-2 text-muted-foreground\"\n >\n •••\n </span>\n )\n }\n\n const page = pageNum as number\n return (\n <Button\n key={page}\n variant={page === currentPage ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => goToPage(page)}\n className=\"h-8 w-8 p-0\"\n >\n {page}\n </Button>\n )\n })}\n\n {/* Next page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToNextPage}\n disabled={!canGoNext}\n className=\"h-8 w-8 p-0\"\n title=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n\n {/* Last page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToLastPage}\n disabled={!canGoNext}\n className=\"h-8 w-8 p-0\"\n title=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n )}\n </div>\n\n {/* Select all pages prompt */}\n {showSelectAllPrompt && onSelectAllPages && totalFilteredCount && totalFilteredCount > end && (\n <div className=\"mt-3 flex items-center justify-center p-3 bg-blue-50 border border-blue-200 rounded-lg\">\n <span className=\"text-sm text-blue-900 mr-2\">\n Select all <span className=\"font-semibold\">{totalFilteredCount}</span> items?\n </span>\n <Button\n size=\"sm\"\n variant=\"link\"\n onClick={onSelectAllPages}\n className=\"text-blue-700 hover:text-blue-900 font-semibold p-0 h-auto\"\n >\n Select all {totalFilteredCount} items\n </Button>\n </div>\n )}\n </div>\n )\n}\n","import * as XLSX from 'xlsx'\nimport { ColumnConfig } from '../types'\n\nexport type ExportFormat = 'csv' | 'excel'\n\nexport interface ExportOptions {\n filename: string\n format: ExportFormat\n includeHeaders?: boolean\n dateFormat?: string\n}\n\n/**\n * Extracts the value from a row using column configuration\n */\nfunction getColumnValue<TData>(row: TData, column: ColumnConfig<TData>): any {\n if (column.accessorFn) {\n return column.accessorFn(row)\n }\n\n if (column.accessorKey) {\n const keys = column.accessorKey.split('.')\n let value: any = row\n for (const key of keys) {\n value = value?.[key]\n }\n return value\n }\n\n return ''\n}\n\n/**\n * Formats a value for export (handles dates, objects, arrays)\n */\nfunction formatValueForExport(value: any): string {\n if (value == null) {\n return ''\n }\n\n if (value instanceof Date) {\n return value.toISOString()\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No'\n }\n\n return String(value)\n}\n\n/**\n * Gets the header text for a column\n */\nfunction getColumnHeader<TData>(column: ColumnConfig<TData>): string {\n if (typeof column.header === 'string') {\n return column.header\n }\n return column.id\n}\n\n/**\n * Prepares data for export based on visible columns\n */\nfunction prepareExportData<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n includeHeaders: boolean = true\n): string[][] {\n const rows: string[][] = []\n\n // Add headers\n if (includeHeaders) {\n rows.push(columns.map(getColumnHeader))\n }\n\n // Add data rows\n for (const row of data) {\n const rowData: string[] = []\n for (const column of columns) {\n const value = getColumnValue(row, column)\n rowData.push(formatValueForExport(value))\n }\n rows.push(rowData)\n }\n\n return rows\n}\n\n/**\n * Converts array data to CSV string\n */\nfunction arrayToCSV(data: string[][]): string {\n return data\n .map(row =>\n row\n .map(cell => {\n // Escape quotes and wrap in quotes if contains comma, quote, or newline\n const needsQuotes = /[,\"\\n\\r]/.test(cell)\n if (needsQuotes) {\n return `\"${cell.replace(/\"/g, '\"\"')}\"`\n }\n return cell\n })\n .join(',')\n )\n .join('\\n')\n}\n\n/**\n * Triggers a download of the given content\n */\nfunction downloadFile(content: string | Blob, filename: string, mimeType: string): void {\n const blob = content instanceof Blob ? content : new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = filename\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n}\n\n/**\n * Exports data to CSV format\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param filename Name of the file to download (without extension)\n * @param includeHeaders Whether to include header row (default: true)\n */\nexport function exportToCSV<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n filename: string,\n includeHeaders: boolean = true\n): void {\n if (!data || data.length === 0) {\n throw new Error('No data to export')\n }\n\n if (!columns || columns.length === 0) {\n throw new Error('No columns specified for export')\n }\n\n const exportData = prepareExportData(data, columns, includeHeaders)\n const csv = arrayToCSV(exportData)\n\n downloadFile(csv, `${filename}.csv`, 'text/csv;charset=utf-8;')\n}\n\n/**\n * Exports data to Excel format (XLSX)\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param filename Name of the file to download (without extension)\n * @param includeHeaders Whether to include header row (default: true)\n */\nexport function exportToExcel<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n filename: string,\n includeHeaders: boolean = true\n): void {\n if (!data || data.length === 0) {\n throw new Error('No data to export')\n }\n\n if (!columns || columns.length === 0) {\n throw new Error('No columns specified for export')\n }\n\n const exportData = prepareExportData(data, columns, includeHeaders)\n\n // Create workbook and worksheet\n const ws = XLSX.utils.aoa_to_sheet(exportData)\n const wb = XLSX.utils.book_new()\n XLSX.utils.book_append_sheet(wb, ws, 'Data')\n\n // Auto-size columns\n const columnWidths = columns.map((column, idx) => {\n const header = getColumnHeader(column)\n const maxWidth = exportData.reduce((max, row) => {\n const cellValue = row[idx] || ''\n return Math.max(max, cellValue.length)\n }, header.length)\n return { wch: Math.min(maxWidth + 2, 50) } // Max width of 50 chars\n })\n ws['!cols'] = columnWidths\n\n // Generate Excel file and trigger download\n const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })\n const blob = new Blob([excelBuffer], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n })\n\n downloadFile(blob, `${filename}.xlsx`, blob.type)\n}\n\n/**\n * Generic export function that routes to CSV or Excel based on format\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param options Export options including format and filename\n */\nexport function exportData<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n options: ExportOptions\n): void {\n const { format, filename, includeHeaders = true } = options\n\n switch (format) {\n case 'csv':\n exportToCSV(data, columns, filename, includeHeaders)\n break\n case 'excel':\n exportToExcel(data, columns, filename, includeHeaders)\n break\n default:\n throw new Error(`Unsupported export format: ${format}`)\n }\n}\n\n/**\n * Helper to generate a filename with timestamp\n */\nexport function generateExportFilename(baseFilename: string): string {\n const now = new Date()\n const timestamp = now.toISOString().replace(/[:.]/g, '-').slice(0, -5)\n return `${baseFilename}_${timestamp}`\n}\n","'use client'\n\nimport { useState, useCallback } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { Download, FileSpreadsheet, FileText, Loader2 } from 'lucide-react'\nimport { ColumnConfig } from '../../types'\nimport { exportToCSV, exportToExcel, generateExportFilename } from '../../utils/export'\n\nexport type ExportScope = 'all' | 'filtered' | 'selected'\n\nexport interface ExportButtonProps<TData> {\n data: TData[]\n filteredData?: TData[]\n selectedData?: TData[]\n columns: ColumnConfig<TData>[]\n baseFilename?: string\n disabled?: boolean\n className?: string\n showProgress?: boolean\n onExportStart?: (format: 'csv' | 'excel', scope: ExportScope) => void\n onExportComplete?: (format: 'csv' | 'excel', scope: ExportScope, rowCount: number) => void\n onExportError?: (error: Error) => void\n}\n\nexport function ExportButton<TData>({\n data,\n filteredData,\n selectedData,\n columns,\n baseFilename = 'export',\n disabled = false,\n className,\n showProgress = true,\n onExportStart,\n onExportComplete,\n onExportError,\n}: ExportButtonProps<TData>) {\n const [isExporting, setIsExporting] = useState(false)\n const [progress, setProgress] = useState(0)\n\n // Determine what export options are available\n const hasFilteredData = filteredData && filteredData.length > 0 && filteredData.length < data.length\n const hasSelectedData = selectedData && selectedData.length > 0\n\n const handleExport = useCallback(\n async (format: 'csv' | 'excel', scope: ExportScope) => {\n setIsExporting(true)\n setProgress(0)\n\n try {\n onExportStart?.(format, scope)\n\n // Determine which data to export\n let dataToExport: TData[]\n let scopeLabel: string\n\n switch (scope) {\n case 'selected':\n if (!selectedData || selectedData.length === 0) {\n throw new Error('No rows selected')\n }\n dataToExport = selectedData\n scopeLabel = 'selected'\n break\n case 'filtered':\n if (!filteredData || filteredData.length === 0) {\n throw new Error('No filtered data available')\n }\n dataToExport = filteredData\n scopeLabel = 'filtered'\n break\n case 'all':\n default:\n dataToExport = data\n scopeLabel = 'all'\n break\n }\n\n // Simulate progress for large datasets\n if (showProgress && dataToExport.length > 100) {\n setProgress(25)\n await new Promise(resolve => setTimeout(resolve, 100))\n setProgress(50)\n }\n\n // Generate filename with timestamp and scope\n const filename = `${baseFilename}_${scopeLabel}_${generateExportFilename('')}`.replace(\n /__/g,\n '_'\n )\n\n // Export based on format\n if (format === 'csv') {\n exportToCSV(dataToExport, columns, filename)\n } else {\n exportToExcel(dataToExport, columns, filename)\n }\n\n if (showProgress) {\n setProgress(100)\n }\n\n onExportComplete?.(format, scope, dataToExport.length)\n } catch (error) {\n console.error('Export failed:', error)\n const errorObj = error instanceof Error ? error : new Error('Export failed')\n onExportError?.(errorObj)\n } finally {\n // Reset state after a brief delay to show completion\n if (showProgress) {\n setTimeout(() => {\n setIsExporting(false)\n setProgress(0)\n }, 500)\n } else {\n setIsExporting(false)\n setProgress(0)\n }\n }\n },\n [\n data,\n filteredData,\n selectedData,\n columns,\n baseFilename,\n showProgress,\n onExportStart,\n onExportComplete,\n onExportError,\n ]\n )\n\n const isDisabled = disabled || isExporting || data.length === 0\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={isDisabled}\n className={className}\n aria-label=\"Export data\"\n >\n {isExporting ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Exporting{showProgress && progress > 0 ? ` ${progress}%` : '...'}\n </>\n ) : (\n <>\n <Download className=\"mr-2 h-4 w-4\" />\n Export\n </>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n {/* CSV Export Options */}\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">CSV Format</div>\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'all')}\n disabled={isExporting || data.length === 0}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export All ({data.length} rows)\n </DropdownMenuItem>\n {hasFilteredData && (\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'filtered')}\n disabled={isExporting}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export Filtered ({filteredData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n {hasSelectedData && (\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'selected')}\n disabled={isExporting}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export Selected ({selectedData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n\n <DropdownMenuSeparator />\n\n {/* Excel Export Options */}\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">\n Excel Format\n </div>\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'all')}\n disabled={isExporting || data.length === 0}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export All ({data.length} rows)\n </DropdownMenuItem>\n {hasFilteredData && (\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'filtered')}\n disabled={isExporting}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export Filtered ({filteredData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n {hasSelectedData && (\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'selected')}\n disabled={isExporting}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export Selected ({selectedData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-4 sm:p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg max-h-[95vh] max-sm:max-h-[90vh] max-sm:m-4 max-sm:w-[calc(100%-2rem)] overflow-hidden\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-3 top-3 sm:right-4 sm:top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground min-h-[44px] min-w-[44px] flex items-center justify-center\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 space-y-2 space-y-reverse sm:space-y-0\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}","'use client'\n\nimport { useState } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '../../../ui/dialog'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { BookmarkPlus, ChevronDown, Check, Trash2, Star } from 'lucide-react'\nimport { SavedView } from '../../types'\nimport { cn } from '../../../../lib/utils'\n\nexport interface SavedViewsDropdownProps {\n views: SavedView[]\n currentViewId?: string | null\n onSaveView: (view: Omit<SavedView, 'id' | 'createdAt'>) => Promise<SavedView>\n onUpdateView?: (viewId: string, updates: Partial<SavedView>) => Promise<void>\n onDeleteView?: (viewId: string) => Promise<void>\n onLoadView: (viewId: string) => void\n // Current state to save\n getCurrentViewState: () => Omit<SavedView, 'id' | 'name' | 'createdAt'>\n}\n\nexport function SavedViewsDropdown({\n views,\n currentViewId,\n onSaveView,\n onUpdateView,\n onDeleteView,\n onLoadView,\n getCurrentViewState,\n}: SavedViewsDropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [isSaveDialogOpen, setIsSaveDialogOpen] = useState(false)\n const [viewName, setViewName] = useState('')\n const [isDefault, setIsDefault] = useState(false)\n const [isSaving, setIsSaving] = useState(false)\n const [deleteConfirmId, setDeleteConfirmId] = useState<string | null>(null)\n\n const currentView = views.find(v => v.id === currentViewId)\n\n const handleSaveView = async () => {\n if (!viewName.trim()) return\n\n setIsSaving(true)\n try {\n const viewState = getCurrentViewState()\n await onSaveView({\n name: viewName.trim(),\n isDefault,\n ...viewState,\n })\n setIsSaveDialogOpen(false)\n setViewName('')\n setIsDefault(false)\n } catch (error) {\n console.error('Failed to save view:', error)\n } finally {\n setIsSaving(false)\n }\n }\n\n const handleDeleteView = async (viewId: string) => {\n if (!onDeleteView) return\n\n try {\n await onDeleteView(viewId)\n setDeleteConfirmId(null)\n } catch (error) {\n console.error('Failed to delete view:', error)\n }\n }\n\n const handleSetDefault = async (viewId: string) => {\n if (!onUpdateView) return\n\n try {\n // Remove default from all other views\n for (const view of views) {\n if (view.isDefault && view.id !== viewId) {\n await onUpdateView(view.id, { isDefault: false })\n }\n }\n // Set this view as default\n await onUpdateView(viewId, { isDefault: true })\n } catch (error) {\n console.error('Failed to set default view:', error)\n }\n }\n\n return (\n <>\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <BookmarkPlus className=\"mr-2 h-4 w-4\" />\n {currentView ? currentView.name : 'Views'}\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <DropdownMenuLabel>Saved Views</DropdownMenuLabel>\n <DropdownMenuSeparator />\n\n {views.length === 0 ? (\n <DropdownMenuItem disabled>\n No saved views\n </DropdownMenuItem>\n ) : (\n views.map((view) => (\n <DropdownMenuItem\n key={view.id}\n className=\"flex items-center justify-between cursor-pointer\"\n onSelect={(e) => {\n e.preventDefault()\n if (deleteConfirmId === view.id) return\n onLoadView(view.id)\n setIsOpen(false)\n }}\n >\n <div className=\"flex items-center gap-2\">\n {currentViewId === view.id && (\n <Check className=\"h-4 w-4 text-primary\" />\n )}\n {currentViewId !== view.id && <div className=\"w-4\" />}\n <span>{view.name}</span>\n {view.isDefault && (\n <Star className=\"h-3 w-3 text-yellow-500 fill-yellow-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n {onUpdateView && !view.isDefault && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleSetDefault(view.id)\n }}\n className=\"p-1 hover:bg-muted rounded opacity-50 hover:opacity-100\"\n title=\"Set as default\"\n >\n <Star className=\"h-3 w-3\" />\n </button>\n )}\n {onDeleteView && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n if (deleteConfirmId === view.id) {\n handleDeleteView(view.id)\n } else {\n setDeleteConfirmId(view.id)\n setTimeout(() => setDeleteConfirmId(null), 3000)\n }\n }}\n className={cn(\n 'p-1 hover:bg-muted rounded',\n deleteConfirmId === view.id\n ? 'text-red-600 hover:text-red-700'\n : 'opacity-50 hover:opacity-100'\n )}\n title={deleteConfirmId === view.id ? 'Click again to confirm' : 'Delete view'}\n >\n <Trash2 className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n </DropdownMenuItem>\n ))\n )}\n\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={(e) => {\n e.preventDefault()\n setIsSaveDialogOpen(true)\n setIsOpen(false)\n }}\n >\n <BookmarkPlus className=\"mr-2 h-4 w-4\" />\n Save Current View\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Dialog open={isSaveDialogOpen} onOpenChange={setIsSaveDialogOpen}>\n <DialogContent className=\"sm:max-w-[425px]\">\n <DialogHeader>\n <DialogTitle>Save View</DialogTitle>\n <DialogDescription>\n Save your current table configuration as a named view.\n </DialogDescription>\n </DialogHeader>\n <div className=\"grid gap-4 py-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"view-name\">View Name</Label>\n <Input\n id=\"view-name\"\n value={viewName}\n onChange={(e) => setViewName(e.target.value)}\n placeholder=\"My Custom View\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleSaveView()\n }}\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"is-default\"\n checked={isDefault}\n onCheckedChange={(checked) => setIsDefault(checked === true)}\n />\n <Label htmlFor=\"is-default\" className=\"cursor-pointer\">\n Set as default view\n </Label>\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setIsSaveDialogOpen(false)}\n disabled={isSaving}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSaveView}\n disabled={!viewName.trim() || isSaving}\n >\n {isSaving ? 'Saving...' : 'Save View'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","'use client'\n\nimport { Input } from '../../../ui/input'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuCheckboxItem,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { Columns3, ChevronDown } from 'lucide-react'\nimport { cn } from '../../../../lib/utils'\nimport { ExportButton, ExportButtonProps } from './ExportButton'\nimport { SavedViewsDropdown, SavedViewsDropdownProps } from './SavedViewsDropdown'\nimport { ColumnConfig, ColumnVisibilityState, SavedView } from '../../types'\nimport { RefObject } from 'react'\n\nexport interface StandardTableToolbarProps<TData> {\n // Search\n searchEnabled?: boolean\n searchPlaceholder?: string\n searchValue?: string\n onSearchChange?: (value: string) => void\n searchInputRef?: RefObject<HTMLInputElement | null>\n searchAutoFocus?: boolean\n\n // Column visibility\n columnVisibilityEnabled?: boolean\n hideableColumns?: ColumnConfig<TData>[]\n columnVisibility?: ColumnVisibilityState\n onToggleColumnVisibility?: (columnId: string) => void\n\n // Export\n exportEnabled?: boolean\n exportProps?: Omit<ExportButtonProps<TData>, 'data' | 'columns'>\n exportData?: TData[]\n exportColumns?: ColumnConfig<TData>[]\n\n // Saved views\n savedViewsEnabled?: boolean\n savedViews?: SavedView[]\n currentViewId?: string | null\n savedViewsProps?: Omit<SavedViewsDropdownProps, 'views' | 'currentViewId'>\n\n className?: string\n}\n\n/**\n * StandardTableToolbar provides a consistent toolbar layout across all tables.\n *\n * Layout (left to right):\n * - Search input (left)\n * - Export button\n * - Columns dropdown (right)\n */\nexport function StandardTableToolbar<TData>({\n searchEnabled,\n searchPlaceholder = 'Search...',\n searchValue = '',\n onSearchChange,\n searchInputRef,\n searchAutoFocus,\n columnVisibilityEnabled,\n hideableColumns = [],\n columnVisibility = {},\n onToggleColumnVisibility,\n exportEnabled,\n exportProps,\n exportData = [],\n exportColumns = [],\n savedViewsEnabled,\n savedViews = [],\n currentViewId,\n savedViewsProps,\n className,\n}: StandardTableToolbarProps<TData>) {\n const hasRightSideButtons = exportEnabled || columnVisibilityEnabled || savedViewsEnabled\n\n return (\n <div className={cn('flex items-center justify-between gap-4', className)}>\n {/* Left side: Search */}\n <div className=\"flex items-center gap-3 flex-1\">\n {searchEnabled ? (\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={(e) => onSearchChange?.(e.target.value)}\n ref={searchInputRef}\n autoFocus={searchAutoFocus}\n className=\"max-w-xl w-full\"\n />\n ) : (\n <div /> // Spacer\n )}\n </div>\n\n {/* Right side: Toolbar buttons */}\n {hasRightSideButtons && (\n <div className=\"flex items-center gap-2\">\n {/* Export button */}\n {exportEnabled && exportProps && (\n <ExportButton\n data={exportData}\n columns={exportColumns}\n {...exportProps}\n />\n )}\n\n {/* Column visibility dropdown */}\n {columnVisibilityEnabled && hideableColumns.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <Columns3 className=\"mr-2 h-4 w-4\" />\n Columns\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {hideableColumns.map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={columnVisibility[column.id] !== false}\n onCheckedChange={() => onToggleColumnVisibility?.(column.id)}\n >\n {typeof column.header === 'string' ? column.header : column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {/* Saved views dropdown */}\n {savedViewsEnabled && savedViewsProps && (\n <SavedViewsDropdown\n views={savedViews}\n currentViewId={currentViewId}\n {...savedViewsProps}\n />\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useMemo, useRef, useState, useCallback } from 'react'\nimport { UnifiedTableProps, ColumnVisibilityState, SortState, SavedView } from './types'\nimport { useSelection, usePagination, useFilters, useTableURL, useColumnReorder, useColumnResize } from './hooks'\nimport { useTableKeyboard } from './hooks/useTableKeyboard'\nimport { TableFilters } from './components/TableFilters'\nimport { BulkActionBar } from './components/BulkActionBar'\nimport { DataTableCore } from './components/DataTableCore'\nimport { TablePagination } from './components/TablePagination'\nimport { StandardTableToolbar } from './components/Toolbar'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '../../utils'\n\nexport function UnifiedTable<TData>({\n data,\n columns,\n tableId,\n getRowId,\n pagination: paginationConfig,\n selection: selectionConfig,\n filters: filtersConfig,\n bulkActions = [],\n rowActions = [],\n search: searchConfig,\n sorting: sortingConfig,\n columnVisibility: columnVisibilityConfig,\n columnReorder: columnReorderConfig,\n columnResize: columnResizeConfig,\n inlineEdit: inlineEditConfig,\n savedViews: savedViewsConfig,\n urlPersistence: urlPersistenceConfig,\n export: exportConfig,\n onRowClick,\n mobileConfig,\n loading = false,\n loadingRows = new Set(),\n className,\n emptyState,\n errorState,\n}: UnifiedTableProps<TData>) {\n const searchInputRef = useRef<HTMLInputElement | null>(null)\n const shouldRestoreFocusRef = useRef(false)\n const tableRef = useRef<HTMLDivElement>(null)\n\n // URL state persistence hook\n const urlState = useTableURL({\n tableId,\n persistToUrl: urlPersistenceConfig?.enabled ?? false,\n debounceMs: urlPersistenceConfig?.debounceMs ?? 300,\n })\n\n // Initialize state from URL if persistence is enabled\n const initialURLState = useMemo(() => {\n if (!urlPersistenceConfig?.enabled) return null\n return urlState.getURLState()\n }, []) // Only run once on mount\n\n // Column visibility state\n const [columnVisibility, setColumnVisibility] = useState<ColumnVisibilityState>(() => {\n // Try to load from localStorage if persistKey is set\n if (columnVisibilityConfig?.persistKey && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(`table-columns-${columnVisibilityConfig.persistKey}`)\n if (stored) {\n return JSON.parse(stored)\n }\n } catch {\n // Ignore localStorage errors\n }\n }\n\n // Initialize default visibility\n const initial: ColumnVisibilityState = {}\n columns.forEach(col => {\n if (columnVisibilityConfig?.defaultVisible) {\n initial[col.id] = columnVisibilityConfig.defaultVisible.includes(col.id)\n } else {\n initial[col.id] = true // Default all visible\n }\n })\n return initial\n })\n\n // Client-side sorting state (used when no external sorting config is provided)\n const [localSort, setLocalSort] = useState<SortState>(() => {\n // Initialize from URL if available\n if (initialURLState) {\n return {\n sortBy: initialURLState.sortBy,\n sortDirection: initialURLState.sortDirection,\n }\n }\n return { sortBy: null, sortDirection: 'asc' }\n })\n\n // Persist column visibility\n useEffect(() => {\n if (columnVisibilityConfig?.persistKey && typeof window !== 'undefined') {\n try {\n localStorage.setItem(\n `table-columns-${columnVisibilityConfig.persistKey}`,\n JSON.stringify(columnVisibility)\n )\n } catch {\n // Ignore localStorage errors\n }\n }\n }, [columnVisibility, columnVisibilityConfig?.persistKey])\n\n // Toggle column visibility\n const toggleColumnVisibility = useCallback((columnId: string) => {\n // Don't allow toggling always-visible columns\n if (columnVisibilityConfig?.alwaysVisible?.includes(columnId)) {\n return\n }\n setColumnVisibility(prev => ({\n ...prev,\n [columnId]: !prev[columnId]\n }))\n }, [columnVisibilityConfig?.alwaysVisible])\n\n // Filter visible columns\n const visibleColumns = useMemo(() => {\n if (!columnVisibilityConfig?.enabled) {\n return columns\n }\n return columns.filter(col => columnVisibility[col.id] !== false)\n }, [columns, columnVisibility, columnVisibilityConfig?.enabled])\n\n // Get hideable columns for the dropdown\n const hideableColumns = useMemo(() => {\n return columns.filter(col => {\n // Can't hide if hideable is explicitly false\n if (col.hideable === false) return false\n // Can't hide if in alwaysVisible list\n if (columnVisibilityConfig?.alwaysVisible?.includes(col.id)) return false\n return true\n })\n }, [columns, columnVisibilityConfig?.alwaysVisible])\n\n // Column reordering hook\n const columnReorder = useColumnReorder({\n columns: visibleColumns,\n initialOrder: columnReorderConfig?.initialOrder,\n enabled: columnReorderConfig?.enabled ?? false,\n onOrderChange: columnReorderConfig?.onOrderChange,\n })\n\n // Final columns to display (ordered if reorder enabled)\n const displayColumns = columnReorderConfig?.enabled\n ? columnReorder.orderedColumns\n : visibleColumns\n\n // Column resize hook\n const columnResize = useColumnResize({\n enabled: columnResizeConfig?.enabled ?? false,\n initialWidths: columnResizeConfig?.initialWidths,\n minWidth: columnResizeConfig?.minWidth ?? 50,\n onWidthChange: columnResizeConfig?.onWidthChange,\n })\n\n // Determine sorting state and handler\n const sortingEnabled = sortingConfig?.enabled ?? true // Default to enabled\n const currentSortBy = sortingConfig?.value?.sortBy ?? localSort.sortBy\n const currentSortDirection = sortingConfig?.value?.sortDirection ?? localSort.sortDirection\n\n const handleSort = useCallback((columnId: string) => {\n const newDirection = currentSortBy === columnId && currentSortDirection === 'asc' ? 'desc' : 'asc'\n const newSort = { sortBy: columnId, sortDirection: newDirection as 'asc' | 'desc' }\n\n if (sortingConfig?.onChange) {\n sortingConfig.onChange(newSort)\n } else {\n setLocalSort(newSort)\n }\n\n // Sync to URL if enabled\n urlState.setSortToURL(newSort)\n }, [currentSortBy, currentSortDirection, sortingConfig, urlState])\n\n // Ensure data is always an array\n const safeData = useMemo(() => Array.isArray(data) ? data : [], [data])\n\n // Apply client-side sorting if no server-side sorting\n const sortedData = useMemo(() => {\n if (sortingConfig?.serverSide || !currentSortBy) {\n return safeData\n }\n\n const column = columns.find(c => c.id === currentSortBy)\n if (!column) return safeData\n\n return [...safeData].sort((a, b) => {\n let valueA: any\n let valueB: any\n\n if (column.sortingFn) {\n return currentSortDirection === 'asc'\n ? column.sortingFn(a, b)\n : column.sortingFn(b, a)\n }\n\n if (column.accessorFn) {\n valueA = column.accessorFn(a)\n valueB = column.accessorFn(b)\n } else if (column.accessorKey) {\n // Handle nested keys like 'firm.name'\n const keys = column.accessorKey.split('.')\n valueA = keys.reduce((obj, key) => obj?.[key], a as any)\n valueB = keys.reduce((obj, key) => obj?.[key], b as any)\n } else {\n return 0\n }\n\n // Handle null/undefined\n if (valueA == null && valueB == null) return 0\n if (valueA == null) return currentSortDirection === 'asc' ? 1 : -1\n if (valueB == null) return currentSortDirection === 'asc' ? -1 : 1\n\n // Compare\n if (typeof valueA === 'string' && typeof valueB === 'string') {\n const comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'base' })\n return currentSortDirection === 'asc' ? comparison : -comparison\n }\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return currentSortDirection === 'asc' ? valueA - valueB : valueB - valueA\n }\n\n const comparison = String(valueA).localeCompare(String(valueB))\n return currentSortDirection === 'asc' ? comparison : -comparison\n })\n }, [safeData, columns, currentSortBy, currentSortDirection, sortingConfig?.serverSide])\n\n // Pagination hook\n const pagination = usePagination({\n totalCount: paginationConfig?.totalCount || sortedData.length,\n initialPageSize: paginationConfig?.pageSize || 25,\n initialPage: paginationConfig?.currentPage || (initialURLState?.page ?? 1),\n serverSide: paginationConfig?.serverSide || false,\n onPageChange: paginationConfig?.onPageChange,\n })\n\n // Selection hook - supports both controlled and uncontrolled modes\n const selection = useSelection({\n currentPageData: sortedData,\n totalCount: paginationConfig?.totalCount || sortedData.length,\n getRowId,\n onSelectionChange: selectionConfig?.onSelectionChange,\n onSelectAllPages: selectionConfig?.onSelectAllPages,\n // External controlled state\n externalSelectedIds: selectionConfig?.selectedIds,\n externalSelectAllPages: selectionConfig?.selectAllPages,\n })\n\n // Filters hook\n const filters = useFilters({\n initialFilters: filtersConfig?.value || (initialURLState?.filters ?? {}),\n onChange: filtersConfig?.onChange,\n })\n\n // Get current view state for saving\n const getCurrentViewState = useCallback((): Omit<SavedView, 'id' | 'name' | 'createdAt'> => {\n return {\n columnVisibility: columnVisibilityConfig?.enabled ? columnVisibility : undefined,\n columnOrder: columnReorderConfig?.enabled ? columnReorder.columnOrder : undefined,\n sortBy: currentSortBy,\n sortDirection: currentSortDirection,\n filters: filtersConfig?.enabled ? filters.filters : undefined,\n pageSize: paginationConfig?.pageSize,\n }\n }, [\n columnVisibility,\n columnVisibilityConfig?.enabled,\n columnReorder.columnOrder,\n columnReorderConfig?.enabled,\n currentSortBy,\n currentSortDirection,\n filters.filters,\n filtersConfig?.enabled,\n paginationConfig?.pageSize,\n ])\n\n // Keyboard navigation hook\n const keyboard = useTableKeyboard({\n data: sortedData,\n getRowId,\n selectedIds: selection.selectedIds,\n onToggleRow: selection.toggleRow,\n onToggleAll: selection.toggleAll,\n onRowClick,\n onDelete: bulkActions.find(action => action.id === 'delete')?.onClick\n ? (ids) => {\n const deleteAction = bulkActions.find(action => action.id === 'delete')\n if (deleteAction) {\n deleteAction.onClick(ids)\n }\n }\n : undefined,\n tableRef,\n enabled: true,\n })\n\n // Restore focus to search input after state-driven rerenders (e.g., URL sync)\n useEffect(() => {\n if (!searchConfig?.enabled || !searchConfig.preserveFocus) return\n if (!shouldRestoreFocusRef.current) return\n if (searchInputRef.current) {\n searchInputRef.current.focus()\n const len = searchConfig.value?.length ?? 0\n try {\n searchInputRef.current.setSelectionRange(len, len)\n } catch {\n // selection range may fail on some input types; ignore\n }\n }\n shouldRestoreFocusRef.current = false\n }, [searchConfig?.enabled, searchConfig?.preserveFocus, searchConfig?.value])\n\n // External selection state is now synced in useSelection hook\n\n // Sync pagination changes to URL\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!paginationConfig?.enabled) return\n\n urlState.setPageToURL(pagination.currentPage)\n }, [pagination.currentPage, urlPersistenceConfig?.enabled, paginationConfig?.enabled, urlState])\n\n // Sync filter changes to URL\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!filtersConfig?.enabled) return\n\n urlState.setFiltersToURL(filters.filters)\n }, [filters.filters, urlPersistenceConfig?.enabled, filtersConfig?.enabled, urlState])\n\n // Initialize search from URL on mount\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!searchConfig?.enabled) return\n if (!initialURLState?.search) return\n\n // Only set if search value is empty (first mount)\n if (!searchConfig.value && initialURLState.search) {\n searchConfig.onChange(initialURLState.search)\n }\n }, []) // Only run on mount\n\n // Check if all current page rows are selected\n const allRowsSelected = useMemo(() => {\n if (sortedData.length === 0) return false\n return sortedData.every(row => selection.selectedIds.has(getRowId(row)))\n }, [sortedData, selection.selectedIds, getRowId])\n\n // Prepare selected data for export\n const selectedDataForExport = useMemo(() => {\n if (!selectionConfig?.enabled || selection.selectedIds.size === 0) {\n return undefined\n }\n return sortedData.filter(row => selection.selectedIds.has(getRowId(row)))\n }, [sortedData, selection.selectedIds, getRowId, selectionConfig?.enabled])\n\n // Handle bulk action execution\n const handleExecuteBulkAction = async (action: typeof bulkActions[0]) => {\n const selectedIds = selection.selectAllPages\n ? new Set(sortedData.map(getRowId)) // In real implementation, this would fetch all IDs\n : selection.selectedIds\n\n // Show confirmation if needed\n if (action.confirmMessage) {\n const message = action.confirmMessage.replace('{count}', selectedIds.size.toString())\n if (!confirm(message)) {\n return\n }\n }\n\n // Check max selection\n if (action.maxSelection && selectedIds.size > action.maxSelection) {\n alert(`Maximum ${action.maxSelection} items can be selected for this action`)\n return\n }\n\n try {\n await action.onClick(selectedIds)\n // Clear selection after successful action\n selection.clearSelection()\n } catch (error) {\n console.error('Bulk action failed:', error)\n }\n }\n\n // Loading state\n if (loading && sortedData.length === 0) {\n return (\n <div className={cn('flex items-center justify-center p-12', className)}>\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n )\n }\n\n // Empty state\n if (!loading && sortedData.length === 0 && emptyState) {\n return <div className={className}>{emptyState}</div>\n }\n\n return (\n <div ref={tableRef} className={cn('space-y-4', className)} tabIndex={0}>\n {/* Standard Table Toolbar */}\n <StandardTableToolbar\n searchEnabled={searchConfig?.enabled}\n searchPlaceholder={searchConfig?.placeholder}\n searchValue={searchConfig?.value}\n onSearchChange={(value) => {\n if (searchConfig) {\n shouldRestoreFocusRef.current = true\n searchConfig.onChange(value)\n urlState.setSearchToURL(value)\n }\n }}\n searchInputRef={searchInputRef}\n searchAutoFocus={searchConfig?.autoFocus}\n columnVisibilityEnabled={columnVisibilityConfig?.enabled}\n hideableColumns={hideableColumns}\n columnVisibility={columnVisibility}\n onToggleColumnVisibility={toggleColumnVisibility}\n exportEnabled={exportConfig?.enabled}\n exportData={sortedData}\n exportColumns={displayColumns}\n exportProps={exportConfig?.enabled ? {\n filteredData: sortedData.length < safeData.length ? sortedData : undefined,\n selectedData: selectedDataForExport,\n baseFilename: exportConfig.baseFilename,\n showProgress: exportConfig.showProgress,\n onExportStart: exportConfig.onExportStart,\n onExportComplete: exportConfig.onExportComplete,\n onExportError: exportConfig.onExportError,\n } : undefined}\n savedViewsEnabled={savedViewsConfig?.enabled}\n savedViews={savedViewsConfig?.views}\n currentViewId={savedViewsConfig?.currentViewId}\n savedViewsProps={savedViewsConfig?.enabled ? {\n onSaveView: savedViewsConfig.onSaveView,\n onUpdateView: savedViewsConfig.onUpdateView,\n onDeleteView: savedViewsConfig.onDeleteView,\n onLoadView: savedViewsConfig.onLoadView || (() => {}),\n getCurrentViewState,\n } : undefined}\n />\n\n {/* Filters */}\n {filtersConfig?.enabled && filtersConfig.config && (\n <TableFilters config={filtersConfig.config} filters={filters} />\n )}\n\n {/* Bulk Actions Bar */}\n {selectionConfig?.enabled && bulkActions.length > 0 && (\n <BulkActionBar\n selectedCount={selection.getSelectedCount()}\n selectAllPages={selection.selectAllPages}\n totalCount={paginationConfig?.totalCount || sortedData.length}\n bulkActions={bulkActions}\n onClearSelection={selection.clearSelection}\n onExecuteAction={handleExecuteBulkAction}\n />\n )}\n\n {/* Selection summary - only show when no bulk actions (BulkActionBar handles this otherwise) */}\n {selectionConfig?.enabled && selection.getSelectedCount() > 0 && bulkActions.length === 0 && (\n <div className=\"flex items-center justify-between text-sm text-muted-foreground\">\n <div>\n {selection.selectAllPages ? (\n <span className=\"font-medium text-blue-600\">\n All {paginationConfig?.totalCount || sortedData.length} items selected\n </span>\n ) : (\n <span>\n {selection.getSelectedCount()} item{selection.getSelectedCount() === 1 ? '' : 's'} selected{allRowsSelected ? ' on this page' : ''}\n </span>\n )}\n </div>\n\n {/* Show \"Select All Pages\" button if not all pages selected and there are multiple pages */}\n {!selection.selectAllPages &&\n allRowsSelected &&\n paginationConfig &&\n (paginationConfig.totalCount || 0) > sortedData.length && (\n <button\n onClick={selection.selectAllPagesToggle}\n className=\"text-blue-600 hover:text-blue-800 font-medium\"\n >\n Select all {paginationConfig.totalCount} items\n </button>\n )}\n </div>\n )}\n\n {/* Select all pages option - shown below bulk action bar when applicable */}\n {selectionConfig?.enabled &&\n bulkActions.length > 0 &&\n !selection.selectAllPages &&\n allRowsSelected &&\n paginationConfig &&\n (paginationConfig.totalCount || 0) > sortedData.length && (\n <div className=\"flex items-center justify-center p-2 bg-blue-50 border border-blue-200 rounded-lg\">\n <button\n onClick={selection.selectAllPagesToggle}\n className=\"text-blue-600 hover:text-blue-800 font-medium text-sm\"\n >\n Select all {paginationConfig.totalCount} items across all pages\n </button>\n </div>\n )}\n\n {/* Data Table */}\n <DataTableCore\n data={sortedData}\n columns={displayColumns}\n getRowId={getRowId}\n selectionEnabled={selectionConfig?.enabled}\n selectedIds={selection.selectedIds}\n onToggleRow={selection.toggleRow}\n onToggleAll={selection.toggleAll}\n allRowsSelected={allRowsSelected}\n renderSelectionCell={selectionConfig?.renderSelectionCell}\n sortingEnabled={sortingEnabled}\n sortBy={currentSortBy}\n sortDirection={currentSortDirection}\n onSort={handleSort}\n columnReorderEnabled={columnReorderConfig?.enabled}\n onColumnDragEnd={columnReorder.handleDragEnd}\n columnResizeEnabled={columnResizeConfig?.enabled}\n columnWidths={columnResize.columnWidths}\n onColumnResizeStart={columnResize.startResize}\n isResizing={columnResize.isResizing}\n inlineEditEnabled={inlineEditConfig?.enabled}\n onCellEdit={inlineEditConfig?.onSave}\n rowActions={rowActions}\n onRowClick={onRowClick}\n loadingRows={loadingRows}\n />\n\n {/* Pagination */}\n {paginationConfig?.enabled && (\n <TablePagination\n pagination={pagination}\n totalFilteredCount={paginationConfig.totalCount}\n />\n )}\n </div>\n )\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }","'use client'\n\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { cn } from '../../../../lib/utils'\nimport { MoreVertical } from 'lucide-react'\nimport { useState } from 'react'\nimport { CardActionsProps } from './types'\n\nexport function CardActions({\n actions,\n row,\n className,\n maxVisibleActions = 2\n}: CardActionsProps) {\n const [isExecuting, setIsExecuting] = useState<string | null>(null)\n\n const visibleActions = actions.filter((action) => {\n return !(action.hidden && action.hidden(row))\n })\n\n if (visibleActions.length === 0) {\n return null\n }\n\n const handleActionClick = async (action: any) => {\n if (action.disabled && action.disabled(row)) {\n return\n }\n\n setIsExecuting(action.id)\n try {\n await action.onClick(row)\n } finally {\n setIsExecuting(null)\n }\n }\n\n const primaryActions = visibleActions.slice(0, maxVisibleActions)\n const overflowActions = visibleActions.slice(maxVisibleActions)\n\n return (\n <div className={cn('flex items-center gap-1', className)}>\n {primaryActions.map((action) => {\n const Icon = action.icon\n const isDisabled = action.disabled ? action.disabled(row) : false\n const isLoading = isExecuting === action.id\n\n return (\n <Button\n key={action.id}\n variant={action.variant || 'ghost'}\n size=\"sm\"\n className={cn(\n 'h-9 min-w-[44px]',\n Icon && !action.label && 'w-9 p-0',\n action.className\n )}\n onClick={(e) => {\n e.stopPropagation()\n handleActionClick(action)\n }}\n disabled={isDisabled || isLoading}\n >\n {Icon && (\n <Icon className={cn(\n 'h-4 w-4',\n action.label && 'mr-1.5'\n )} />\n )}\n {action.label && (\n <span className=\"text-xs font-medium\">{action.label}</span>\n )}\n </Button>\n )\n })}\n\n {overflowActions.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0\"\n onClick={(e) => e.stopPropagation()}\n >\n <MoreVertical className=\"h-4 w-4\" />\n <span className=\"sr-only\">More actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {overflowActions.map((action, index) => {\n const Icon = action.icon\n const isDisabled = action.disabled ? action.disabled(row) : false\n const isLoading = isExecuting === action.id\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={(e) => {\n e.stopPropagation()\n handleActionClick(action)\n }}\n disabled={isDisabled || isLoading}\n className={cn(\n action.variant === 'destructive' && 'text-destructive focus:text-destructive',\n action.className\n )}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{action.label || 'Action'}</span>\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Card as UICard, CardContent, CardHeader, CardFooter } from '../../../ui/card'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { cn } from '../../../../lib/utils'\nimport { Loader2 } from 'lucide-react'\nimport { CardProps, MobileCardField } from './types'\nimport { CardActions } from './CardActions'\n\nfunction getNestedValue(obj: any, path: string): any {\n if (!path || !obj) return obj\n\n const keys = path.split('.')\n let value = obj\n\n for (const key of keys) {\n if (value === null || value === undefined) return undefined\n value = value[key]\n }\n\n return value\n}\n\nfunction renderField(field: MobileCardField, row: any) {\n const value = getNestedValue(row, field.key)\n\n if (field.render) {\n return field.render(value, row)\n }\n\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground\">-</span>\n }\n\n if (typeof value === 'boolean') {\n return <span>{value ? 'Yes' : 'No'}</span>\n }\n\n return <span>{String(value)}</span>\n}\n\nexport function Card<TData = any>({\n row,\n config,\n rowId,\n isLoading = false,\n className\n}: CardProps<TData>) {\n const {\n titleKey,\n titleRender,\n subtitleKey,\n subtitleRender,\n imageKey,\n imageRender,\n primaryFields,\n secondaryFields,\n actions,\n renderCustomContent,\n renderCustomHeader,\n renderCustomFooter,\n showSelection,\n onSelectionChange,\n isSelected,\n onClick,\n headerClassName,\n contentClassName,\n footerClassName,\n } = config\n\n const handleClick = () => {\n if (onClick && !isLoading) {\n onClick(row)\n }\n }\n\n const handleSelectionChange = (checked: boolean) => {\n if (onSelectionChange && rowId) {\n onSelectionChange(rowId, checked)\n }\n }\n\n const selected = isSelected ? isSelected(row) : false\n\n return (\n <UICard\n className={cn(\n 'relative transition-all duration-200',\n onClick && !isLoading && 'cursor-pointer hover:shadow-md hover:border-primary/50',\n selected && 'ring-2 ring-primary border-primary',\n isLoading && 'opacity-60 pointer-events-none',\n className,\n config.className\n )}\n onClick={handleClick}\n >\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-background/50 rounded-lg z-10\">\n <Loader2 className=\"h-6 w-6 animate-spin text-primary\" />\n </div>\n )}\n\n <CardHeader className={cn('pb-3', headerClassName)}>\n {renderCustomHeader ? (\n renderCustomHeader(row)\n ) : (\n <div className=\"flex items-start gap-3\">\n {showSelection && (\n <div\n className=\"flex items-center pt-1\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={selected}\n onCheckedChange={handleSelectionChange}\n aria-label=\"Select row\"\n className=\"h-5 w-5\"\n />\n </div>\n )}\n\n {(imageKey || imageRender) && (\n <div className=\"flex-shrink-0\">\n {imageRender ? imageRender(row) : (\n <div className=\"h-12 w-12 rounded-full bg-gradient-to-br from-primary/20 to-primary/10 flex items-center justify-center\">\n <span className=\"text-lg font-semibold text-primary\">\n {String(getNestedValue(row, titleKey) || '?').charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"font-semibold text-base leading-tight truncate\">\n {titleRender ? titleRender(row) : getNestedValue(row, titleKey)}\n </h3>\n {subtitleKey && (\n <p className=\"text-sm text-muted-foreground mt-1 truncate\">\n {subtitleRender ? subtitleRender(row) : getNestedValue(row, subtitleKey)}\n </p>\n )}\n </div>\n\n {actions && actions.length > 0 && (\n <div onClick={(e) => e.stopPropagation()}>\n <CardActions\n actions={actions}\n row={row}\n maxVisibleActions={2}\n />\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </CardHeader>\n\n <CardContent className={cn('pt-0 space-y-4', contentClassName)}>\n {renderCustomContent ? (\n renderCustomContent(row)\n ) : (\n <>\n {primaryFields && primaryFields.length > 0 && (\n <div className=\"space-y-3\">\n {primaryFields.map((field) => (\n <div\n key={field.key}\n className={cn(\n 'flex justify-between items-center gap-2',\n field.className\n )}\n >\n <span className=\"text-sm font-medium text-muted-foreground flex-shrink-0\">\n {field.label || field.key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase())}:\n </span>\n <div className=\"text-sm font-medium text-right truncate\">\n {renderField(field, row)}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {secondaryFields && secondaryFields.length > 0 && (\n <div className=\"border-t pt-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n {secondaryFields.map((field) => (\n <div\n key={field.key}\n className={cn('space-y-1', field.className)}\n >\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n {field.label || field.key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase())}\n </div>\n <div className=\"text-sm font-semibold truncate\">\n {renderField(field, row)}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n </CardContent>\n\n {renderCustomFooter && (\n <CardFooter className={cn('pt-0', footerClassName)}>\n {renderCustomFooter(row)}\n </CardFooter>\n )}\n </UICard>\n )\n}\n","import { ReactNode } from 'react'\n\nexport interface MobileCardField {\n key: string\n label?: string\n render?: (value: any, row: any) => ReactNode\n className?: string\n}\n\nexport interface MobileCardAction {\n id: string\n label: string\n icon?: React.ComponentType<{ className?: string }>\n onClick: (row: any) => void | Promise<void>\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\n disabled?: (row: any) => boolean\n hidden?: (row: any) => boolean\n className?: string\n}\n\nexport interface MobileCardConfig<TData = any> {\n titleKey: string\n titleRender?: (row: TData) => ReactNode\n\n subtitleKey?: string\n subtitleRender?: (row: TData) => ReactNode\n\n imageKey?: string\n imageRender?: (row: TData) => ReactNode\n\n primaryFields: MobileCardField[]\n secondaryFields?: MobileCardField[]\n\n actions?: MobileCardAction[]\n\n renderCustomContent?: (row: TData) => ReactNode\n renderCustomHeader?: (row: TData) => ReactNode\n renderCustomFooter?: (row: TData) => ReactNode\n\n showSelection?: boolean\n onSelectionChange?: (id: string, selected: boolean) => void\n isSelected?: (row: TData) => boolean\n\n onClick?: (row: TData) => void\n\n className?: string\n headerClassName?: string\n contentClassName?: string\n footerClassName?: string\n}\n\nexport interface MobileViewProps<TData = any> {\n data: TData[]\n config: MobileCardConfig<TData>\n getRowId?: (row: TData) => string\n loading?: boolean\n loadingRows?: Set<string>\n emptyState?: ReactNode\n className?: string\n}\n\nexport interface CardProps<TData = any> {\n row: TData\n config: MobileCardConfig<TData>\n rowId?: string\n isLoading?: boolean\n className?: string\n}\n\nexport interface CardActionsProps {\n actions: MobileCardAction[]\n row: any\n className?: string\n maxVisibleActions?: number\n}\n\nexport const MOBILE_BREAKPOINT = 768 // px\n","'use client'\n\nimport { cn } from '../../../../lib/utils'\nimport { useEffect, useState } from 'react'\nimport { Card } from './Card'\nimport { MobileViewProps, MOBILE_BREAKPOINT } from './types'\n\nexport function MobileView<TData = any>({\n data,\n config,\n getRowId,\n loading = false,\n loadingRows,\n emptyState,\n className\n}: MobileViewProps<TData>) {\n const [isMobile, setIsMobile] = useState(false)\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n\n checkMobile()\n window.addEventListener('resize', checkMobile)\n return () => window.removeEventListener('resize', checkMobile)\n }, [])\n\n if (data.length === 0 && !loading) {\n return (\n <div className={cn('flex items-center justify-center py-12', className)}>\n {emptyState || (\n <div className=\"text-center\">\n <p className=\"text-muted-foreground text-sm\">No data to display</p>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\n 'space-y-4',\n isMobile && 'space-y-3',\n className\n )}\n >\n {data.map((row, index) => {\n const rowId = getRowId ? getRowId(row) : String(index)\n const isRowLoading = loadingRows?.has(rowId) || false\n\n return (\n <Card\n key={rowId}\n row={row}\n config={config}\n rowId={rowId}\n isLoading={isRowLoading}\n />\n )\n })}\n </div>\n )\n}\n\nexport { Card } from './Card'\nexport { CardActions } from './CardActions'\nexport type {\n MobileViewProps,\n MobileCardConfig,\n MobileCardField,\n MobileCardAction,\n CardProps,\n CardActionsProps\n} from './types'\nexport { MOBILE_BREAKPOINT } from './types'\n","import { ReactNode } from 'react'\n\nexport type CellRenderer<TData = any> = (value: any, row: TData) => ReactNode\n\nexport interface RendererConfig {\n [columnId: string]: CellRenderer\n}\n\nexport function createCellRenderer<TData = any>(\n render: (value: any, row: TData) => ReactNode\n): CellRenderer<TData> {\n return render\n}\n\nexport function getNestedValue(obj: any, path: string): any {\n if (!path || !obj) return obj\n\n const keys = path.split('.')\n let value = obj\n\n for (const key of keys) {\n if (value === null || value === undefined) return undefined\n value = value[key]\n }\n\n return value\n}\n\nexport const commonRenderers = {\n text: createCellRenderer((value) => String(value || '-')),\n\n number: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return new Intl.NumberFormat().format(Number(value))\n }),\n\n currency: createCellRenderer((value, row, options?: { currency?: string; locale?: string }) => {\n if (value === null || value === undefined) return '-'\n return new Intl.NumberFormat(options?.locale || 'en-US', {\n style: 'currency',\n currency: options?.currency || 'USD',\n }).format(Number(value))\n }),\n\n percentage: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return `${Number(value).toFixed(2)}%`\n }),\n\n date: createCellRenderer((value) => {\n if (!value) return '-'\n const date = new Date(value)\n return date.toLocaleDateString()\n }),\n\n datetime: createCellRenderer((value) => {\n if (!value) return '-'\n const date = new Date(value)\n return date.toLocaleString()\n }),\n\n boolean: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return value ? 'Yes' : 'No'\n }),\n\n badge: createCellRenderer((value, row, options?: { variant?: 'default' | 'success' | 'warning' | 'error' }) => {\n if (!value) return null\n return value\n }),\n\n truncate: createCellRenderer((value, row, options?: { maxLength?: number }) => {\n if (!value) return '-'\n const str = String(value)\n const maxLength = options?.maxLength || 50\n if (str.length <= maxLength) return str\n return `${str.substring(0, maxLength)}...`\n }),\n\n array: createCellRenderer((value, row, options?: { separator?: string; maxItems?: number }) => {\n if (!Array.isArray(value) || value.length === 0) return '-'\n const maxItems = options?.maxItems || value.length\n const items = value.slice(0, maxItems)\n const separator = options?.separator || ', '\n const display = items.join(separator)\n if (value.length > maxItems) {\n return `${display} +${value.length - maxItems} more`\n }\n return display\n }),\n}\n\nexport function combineRenderers<TData = any>(\n ...renderers: CellRenderer<TData>[]\n): CellRenderer<TData> {\n return (value, row) => {\n for (const renderer of renderers) {\n const result = renderer(value, row)\n if (result !== null && result !== undefined) {\n return result\n }\n }\n return value\n }\n}\n","export interface TableTheme {\n name: string\n container: string\n header: string\n headerCell: string\n body: string\n row: string\n rowHover: string\n rowSelected: string\n cell: string\n pagination: string\n emptyState: string\n mobileCard: string\n mobileCardHeader: string\n mobileCardContent: string\n}\n\nexport const defaultTheme: TableTheme = {\n name: 'default',\n container: 'w-full',\n header: 'bg-muted/50',\n headerCell: 'px-4 py-3 text-left text-sm font-medium text-muted-foreground',\n body: '',\n row: 'border-b transition-colors',\n rowHover: 'hover:bg-muted/50',\n rowSelected: 'bg-primary/10 border-primary',\n cell: 'px-4 py-3 text-sm',\n pagination: 'flex items-center justify-between px-4 py-3 border-t',\n emptyState: 'flex items-center justify-center py-12 text-muted-foreground',\n mobileCard: 'rounded-lg border bg-card shadow-sm',\n mobileCardHeader: 'p-4 pb-2',\n mobileCardContent: 'p-4 pt-2',\n}\n\nexport const compactTheme: TableTheme = {\n ...defaultTheme,\n name: 'compact',\n headerCell: 'px-2 py-2 text-left text-xs font-medium text-muted-foreground',\n cell: 'px-2 py-2 text-xs',\n pagination: 'flex items-center justify-between px-2 py-2 border-t',\n mobileCardHeader: 'p-3 pb-1',\n mobileCardContent: 'p-3 pt-1',\n}\n\nexport const spaciousTheme: TableTheme = {\n ...defaultTheme,\n name: 'spacious',\n headerCell: 'px-6 py-4 text-left text-sm font-medium text-muted-foreground',\n cell: 'px-6 py-4 text-sm',\n pagination: 'flex items-center justify-between px-6 py-4 border-t',\n mobileCardHeader: 'p-6 pb-3',\n mobileCardContent: 'p-6 pt-3',\n}\n\nexport const minimalTheme: TableTheme = {\n ...defaultTheme,\n name: 'minimal',\n header: '',\n headerCell: 'px-4 py-3 text-left text-sm font-semibold',\n row: 'border-b border-border/50',\n rowHover: 'hover:bg-muted/30',\n mobileCard: 'rounded-lg border border-border/50 bg-card',\n}\n\nexport const themes = {\n default: defaultTheme,\n compact: compactTheme,\n spacious: spaciousTheme,\n minimal: minimalTheme,\n}\n\nexport type ThemeName = keyof typeof themes\n\nexport function getTheme(themeName: ThemeName = 'default'): TableTheme {\n return themes[themeName] || defaultTheme\n}\n\nexport function createCustomTheme(\n baseTheme: ThemeName = 'default',\n overrides: Partial<TableTheme>\n): TableTheme {\n return {\n ...themes[baseTheme],\n ...overrides,\n name: overrides.name || `custom-${baseTheme}`,\n }\n}\n","import { MobileCardConfig } from '../components/MobileView/types'\n\nexport interface ValidationResult {\n valid: boolean\n errors: string[]\n warnings: string[]\n}\n\nexport function validateMobileCardConfig<TData = any>(\n config: MobileCardConfig<TData>\n): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n if (!config.titleKey && !config.titleRender) {\n errors.push('Mobile card config must have either titleKey or titleRender')\n }\n\n if (!config.primaryFields || config.primaryFields.length === 0) {\n warnings.push('Mobile card config has no primary fields defined')\n }\n\n if (config.primaryFields) {\n config.primaryFields.forEach((field, index) => {\n if (!field.key && !field.render) {\n errors.push(`Primary field at index ${index} must have either key or render function`)\n }\n })\n }\n\n if (config.secondaryFields) {\n config.secondaryFields.forEach((field, index) => {\n if (!field.key && !field.render) {\n errors.push(`Secondary field at index ${index} must have either key or render function`)\n }\n })\n }\n\n if (config.actions) {\n config.actions.forEach((action, index) => {\n if (!action.id) {\n errors.push(`Action at index ${index} must have an id`)\n }\n if (!action.onClick) {\n errors.push(`Action '${action.id || index}' must have an onClick handler`)\n }\n if (!action.label && !action.icon) {\n warnings.push(`Action '${action.id || index}' should have either a label or icon`)\n }\n })\n }\n\n if (config.showSelection && !config.onSelectionChange) {\n warnings.push('showSelection is enabled but onSelectionChange handler is not provided')\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\nexport function validateColumnConfig(columns: any[]): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n if (!columns || columns.length === 0) {\n errors.push('At least one column must be defined')\n return { valid: false, errors, warnings }\n }\n\n const columnIds = new Set<string>()\n\n columns.forEach((column, index) => {\n if (!column.id && !column.accessorKey) {\n errors.push(`Column at index ${index} must have either id or accessorKey`)\n }\n\n const columnId = column.id || column.accessorKey\n\n if (columnIds.has(columnId)) {\n errors.push(`Duplicate column id: '${columnId}'`)\n }\n columnIds.add(columnId)\n\n if (!column.header && !column.hideHeader) {\n warnings.push(`Column '${columnId}' has no header defined`)\n }\n\n if (!column.cell && !column.accessorKey && !column.accessorFn) {\n warnings.push(`Column '${columnId}' has no way to access data (missing cell, accessorKey, or accessorFn)`)\n }\n })\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\nexport function logValidationResults(\n configName: string,\n result: ValidationResult,\n throwOnError: boolean = false\n): void {\n if (result.errors.length > 0) {\n console.error(`[${configName}] Validation Errors:`, result.errors)\n if (throwOnError) {\n throw new Error(`${configName} validation failed: ${result.errors.join(', ')}`)\n }\n }\n\n if (result.warnings.length > 0) {\n console.warn(`[${configName}] Validation Warnings:`, result.warnings)\n }\n\n if (result.valid && result.warnings.length === 0) {\n console.log(`[${configName}] Configuration is valid`)\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/unified-table/hooks/useTableState.ts","../src/components/unified-table/hooks/useSelection.ts","../src/components/unified-table/hooks/usePagination.ts","../src/components/unified-table/hooks/useFilters.ts","../src/components/unified-table/hooks/useResponsive.ts","../src/components/unified-table/hooks/useColumnVisibility.ts","../src/components/unified-table/hooks/useTablePreferences.ts","../src/components/unified-table/hooks/useTableKeyboard.ts","../src/components/unified-table/hooks/useTableURL.ts","../src/components/unified-table/hooks/useColumnReorder.ts","../src/components/unified-table/hooks/useColumnResize.ts","../src/components/ui/button.tsx","../src/components/ui/badge.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/select.tsx","../src/components/unified-table/components/TableFilters/index.tsx","../src/components/unified-table/components/BulkActionBar/index.tsx","../src/components/ui/table.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/unified-table/components/InlineEditCell/index.tsx","../src/components/unified-table/components/DataTableCore/index.tsx","../src/components/unified-table/components/TablePagination/index.tsx","../src/components/unified-table/utils/export.ts","../src/components/unified-table/components/Toolbar/ExportButton.tsx","../src/components/ui/dialog.tsx","../src/components/unified-table/components/Toolbar/SavedViewsDropdown.tsx","../src/components/unified-table/components/Toolbar/StandardTableToolbar.tsx","../src/components/unified-table/UnifiedTable.tsx","../src/components/ui/card.tsx","../src/components/unified-table/components/MobileView/CardActions.tsx","../src/components/unified-table/components/MobileView/Card.tsx","../src/components/unified-table/components/MobileView/types.ts","../src/components/unified-table/components/MobileView/index.tsx","../src/components/unified-table/utils/renderers.ts","../src/components/unified-table/utils/themes.ts","../src/components/unified-table/utils/validation.ts"],"names":["useState","useCallback","useMemo","useEffect","useRef","React","cva","jsx","React2","React3","React4","jsxs","isExpanded","ChevronUp","ChevronDown","Icon","React6","Check","React7","X","provided","Loader2","ChevronRight","exportData","Fragment","React8","comparison","React9","Card","getNestedValue"],"mappings":"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","file":"chunk-FAPOEVMI.mjs","sourcesContent":["'use client'\nimport { useState, useCallback, useMemo } from 'react'\nimport { UseTableStateReturn, TableState } from '../types'\n\ninterface UseTableStateProps<TData> {\n initialData?: TData[]\n initialPageSize?: number\n}\n\nexport function useTableState<TData>({\n initialData = [],\n initialPageSize = 25,\n}: UseTableStateProps<TData>): UseTableStateReturn<TData> {\n const [data, setDataState] = useState<TData[]>(initialData)\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSizeState] = useState(initialPageSize)\n const [searchTerm, setSearchTerm] = useState('')\n const [debouncedSearchTerm, setDebouncedSearchTerm] = useState('')\n const [sortBy, setSortBy] = useState<string | null>(null)\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')\n const [loading, setLoadingState] = useState(false)\n const [loadingRows, setLoadingRowsState] = useState<Set<string>>(new Set())\n const [error, setErrorState] = useState<Error | null>(null)\n const [viewMode, setViewModeState] = useState<'table' | 'card'>('table')\n\n // Computed values\n const totalCount = data.length\n const totalPages = Math.max(1, Math.ceil(totalCount / pageSize))\n\n const state: TableState<TData> = useMemo(() => ({\n data,\n filteredData: data, // Will be computed by filters hook\n displayedData: data, // Will be computed by pagination\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n selectedIds: new Set(),\n selectAllPages: false,\n activeFilters: {},\n sortBy,\n sortDirection,\n searchTerm,\n debouncedSearchTerm,\n loading,\n loadingRows,\n error,\n viewMode,\n }), [\n data,\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n sortBy,\n sortDirection,\n searchTerm,\n debouncedSearchTerm,\n loading,\n loadingRows,\n error,\n viewMode,\n ])\n\n const setData = useCallback((newData: TData[]) => {\n setDataState(newData)\n }, [])\n\n const setPage = useCallback((page: number) => {\n setCurrentPage(page)\n }, [])\n\n const setPageSize = useCallback((size: number) => {\n setPageSizeState(size)\n setCurrentPage(1) // Reset to first page when changing page size\n }, [])\n\n const setLoading = useCallback((isLoading: boolean) => {\n setLoadingState(isLoading)\n }, [])\n\n const setLoadingRows = useCallback((ids: Set<string>) => {\n setLoadingRowsState(ids)\n }, [])\n\n const setError = useCallback((err: Error | null) => {\n setErrorState(err)\n }, [])\n\n const setViewMode = useCallback((mode: 'table' | 'card') => {\n setViewModeState(mode)\n }, [])\n\n return {\n state,\n setData,\n setPage,\n setPageSize,\n setLoading,\n setLoadingRows,\n setError,\n setViewMode,\n }\n}\n","'use client'\nimport { useState, useCallback, useEffect, useRef } from 'react'\nimport { UseSelectionReturn } from '../types'\n\ninterface UseSelectionProps {\n currentPageData: any[]\n totalCount: number\n getRowId: (row: any) => string\n onSelectionChange?: (ids: Set<string>) => void\n onSelectAllPages?: (enabled: boolean) => void\n // External controlled state\n externalSelectedIds?: Set<string>\n externalSelectAllPages?: boolean\n}\n\nexport function useSelection({\n currentPageData,\n totalCount,\n getRowId,\n onSelectionChange,\n onSelectAllPages,\n externalSelectedIds,\n externalSelectAllPages,\n}: UseSelectionProps): UseSelectionReturn {\n const [internalSelectedIds, setInternalSelectedIds] = useState<Set<string>>(new Set())\n const [internalSelectAllPages, setInternalSelectAllPages] = useState(false)\n\n // Track if we're in controlled mode\n const isControlled = externalSelectedIds !== undefined\n\n // Use external state if provided, otherwise internal\n const selectedIds = isControlled ? externalSelectedIds : internalSelectedIds\n const selectAllPages = externalSelectAllPages ?? internalSelectAllPages\n\n // Store callbacks in refs to avoid stale closures\n const onSelectionChangeRef = useRef(onSelectionChange)\n const onSelectAllPagesRef = useRef(onSelectAllPages)\n useEffect(() => {\n onSelectionChangeRef.current = onSelectionChange\n onSelectAllPagesRef.current = onSelectAllPages\n }, [onSelectionChange, onSelectAllPages])\n\n // Sync external state to internal when in controlled mode\n const prevExternalIdsRef = useRef<Set<string> | undefined>(undefined)\n useEffect(() => {\n if (externalSelectedIds !== undefined && externalSelectedIds !== prevExternalIdsRef.current) {\n setInternalSelectedIds(new Set(externalSelectedIds))\n prevExternalIdsRef.current = externalSelectedIds\n }\n }, [externalSelectedIds])\n\n useEffect(() => {\n if (externalSelectAllPages !== undefined) {\n setInternalSelectAllPages(externalSelectAllPages)\n }\n }, [externalSelectAllPages])\n\n const toggleRow = useCallback((id: string) => {\n setInternalSelectedIds(prev => {\n const next = new Set(prev)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n // Notify parent after state update\n onSelectionChangeRef.current?.(next)\n return next\n })\n\n // If we're toggling individual rows, turn off select all pages\n setInternalSelectAllPages(prev => {\n if (prev) {\n onSelectAllPagesRef.current?.(false)\n return false\n }\n return prev\n })\n }, [])\n\n const toggleAll = useCallback(() => {\n const currentPageIds = currentPageData.map(getRowId)\n\n setInternalSelectedIds(prev => {\n const allSelected = currentPageIds.every(id => prev.has(id))\n\n let next: Set<string>\n if (allSelected) {\n // Deselect all on current page\n next = new Set(prev)\n currentPageIds.forEach(id => next.delete(id))\n } else {\n // Select all on current page\n next = new Set(prev)\n currentPageIds.forEach(id => next.add(id))\n }\n\n // Notify parent\n onSelectionChangeRef.current?.(next)\n return next\n })\n\n // Turn off select all pages if toggling individual page\n setInternalSelectAllPages(prev => {\n if (prev) {\n onSelectAllPagesRef.current?.(false)\n return false\n }\n return prev\n })\n }, [currentPageData, getRowId])\n\n const selectAllPagesToggle = useCallback(() => {\n setInternalSelectAllPages(prev => {\n const next = !prev\n // Notify parent\n onSelectAllPagesRef.current?.(next)\n\n if (next) {\n // When selecting all pages, clear individual selections\n setInternalSelectedIds(new Set())\n onSelectionChangeRef.current?.(new Set())\n }\n return next\n })\n }, [])\n\n const clearSelection = useCallback(() => {\n // Update internal state\n setInternalSelectedIds(new Set())\n setInternalSelectAllPages(false)\n // Notify parent\n onSelectionChangeRef.current?.(new Set())\n onSelectAllPagesRef.current?.(false)\n }, [])\n\n const getSelectedCount = useCallback(() => {\n if (selectAllPages) {\n return totalCount\n }\n return selectedIds.size\n }, [selectAllPages, selectedIds, totalCount])\n\n return {\n selectedIds,\n selectAllPages,\n toggleRow,\n toggleAll,\n selectAllPagesToggle,\n clearSelection,\n getSelectedCount,\n }\n}\n","'use client'\nimport { useState, useCallback, useMemo } from 'react'\nimport { UsePaginationReturn } from '../types'\n\ninterface UsePaginationProps {\n totalCount: number\n initialPageSize?: number\n initialPage?: number\n serverSide?: boolean\n onPageChange?: (page: number) => void\n}\n\nexport function usePagination({\n totalCount,\n initialPageSize = 25,\n initialPage = 1,\n serverSide = false,\n onPageChange,\n}: UsePaginationProps): UsePaginationReturn {\n const [currentPage, setCurrentPage] = useState(initialPage)\n const [pageSize, setPageSize] = useState(initialPageSize)\n\n const totalPages = useMemo(() => {\n return Math.max(1, Math.ceil(totalCount / pageSize))\n }, [totalCount, pageSize])\n\n const canGoNext = useMemo(() => {\n return currentPage < totalPages\n }, [currentPage, totalPages])\n\n const canGoPrevious = useMemo(() => {\n return currentPage > 1\n }, [currentPage])\n\n const goToPage = useCallback((page: number) => {\n const validPage = Math.max(1, Math.min(page, totalPages))\n setCurrentPage(validPage)\n onPageChange?.(validPage)\n }, [totalPages, onPageChange])\n\n const goToFirstPage = useCallback(() => {\n goToPage(1)\n }, [goToPage])\n\n const goToLastPage = useCallback(() => {\n goToPage(totalPages)\n }, [goToPage, totalPages])\n\n const goToNextPage = useCallback(() => {\n if (canGoNext) {\n goToPage(currentPage + 1)\n }\n }, [canGoNext, currentPage, goToPage])\n\n const goToPreviousPage = useCallback(() => {\n if (canGoPrevious) {\n goToPage(currentPage - 1)\n }\n }, [canGoPrevious, currentPage, goToPage])\n\n const getPageNumbers = useCallback((): (number | '...')[] => {\n const maxVisible = 7 // Maximum number of page buttons to show\n\n if (totalPages <= maxVisible) {\n // Show all pages if total is small\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const pages: (number | '...')[] = []\n\n // Always show first page\n pages.push(1)\n\n if (currentPage > 3) {\n pages.push('...')\n }\n\n // Show pages around current\n const start = Math.max(2, currentPage - 1)\n const end = Math.min(totalPages - 1, currentPage + 1)\n\n for (let i = start; i <= end; i++) {\n if (!pages.includes(i)) {\n pages.push(i)\n }\n }\n\n if (currentPage < totalPages - 2) {\n pages.push('...')\n }\n\n // Always show last page\n if (!pages.includes(totalPages)) {\n pages.push(totalPages)\n }\n\n return pages\n }, [currentPage, totalPages])\n\n const getDisplayRange = useCallback(() => {\n const start = (currentPage - 1) * pageSize + 1\n const end = Math.min(currentPage * pageSize, totalCount)\n return { start, end }\n }, [currentPage, pageSize, totalCount])\n\n return {\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n canGoNext,\n canGoPrevious,\n goToPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n getPageNumbers,\n getDisplayRange,\n }\n}\n","'use client'\nimport { useState, useCallback } from 'react'\nimport { UseFiltersReturn, FilterState } from '../types'\n\ninterface UseFiltersProps {\n initialFilters?: FilterState\n onChange?: (filters: FilterState) => void\n}\n\nexport function useFilters({\n initialFilters = {},\n onChange,\n}: UseFiltersProps): UseFiltersReturn {\n const [filters, setFilters] = useState<FilterState>(initialFilters)\n\n const setFilter = useCallback((key: string, value: any) => {\n setFilters((prev) => {\n const next = { ...prev, [key]: value }\n onChange?.(next)\n return next\n })\n }, [onChange])\n\n const clearFilter = useCallback((key: string) => {\n setFilters((prev) => {\n const next = { ...prev }\n delete next[key]\n onChange?.(next)\n return next\n })\n }, [onChange])\n\n const clearAllFilters = useCallback(() => {\n setFilters({})\n onChange?.({})\n }, [onChange])\n\n const hasActiveFilters = useCallback(() => {\n return Object.keys(filters).length > 0\n }, [filters])\n\n const getActiveFilterCount = useCallback(() => {\n return Object.keys(filters).length\n }, [filters])\n\n return {\n filters,\n setFilter,\n clearFilter,\n clearAllFilters,\n hasActiveFilters,\n getActiveFilterCount,\n }\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\n\nexport interface ResponsiveBreakpoints {\n mobile: number\n tablet: number\n desktop: number\n}\n\nexport const DEFAULT_BREAKPOINTS: ResponsiveBreakpoints = {\n mobile: 768,\n tablet: 1024,\n desktop: 1280,\n}\n\nexport type ViewMode = 'mobile' | 'tablet' | 'desktop'\n\nexport function useResponsive(breakpoints: ResponsiveBreakpoints = DEFAULT_BREAKPOINTS) {\n const [viewMode, setViewMode] = useState<ViewMode>('desktop')\n const [windowWidth, setWindowWidth] = useState<number>(0)\n\n useEffect(() => {\n const handleResize = () => {\n const width = window.innerWidth\n setWindowWidth(width)\n\n if (width < breakpoints.mobile) {\n setViewMode('mobile')\n } else if (width < breakpoints.tablet) {\n setViewMode('tablet')\n } else {\n setViewMode('desktop')\n }\n }\n\n handleResize()\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [breakpoints])\n\n return {\n viewMode,\n windowWidth,\n isMobile: viewMode === 'mobile',\n isTablet: viewMode === 'tablet',\n isDesktop: viewMode === 'desktop',\n isMobileOrTablet: viewMode === 'mobile' || viewMode === 'tablet',\n }\n}\n","'use client'\n\nimport { useState, useCallback, useEffect } from 'react'\nimport { ColumnVisibilityState } from '../types'\n\nexport interface UseColumnVisibilityOptions {\n defaultVisibility?: ColumnVisibilityState\n persistKey?: string\n onVisibilityChange?: (visibility: ColumnVisibilityState) => void\n}\n\nexport function useColumnVisibility({\n defaultVisibility = {},\n persistKey,\n onVisibilityChange\n}: UseColumnVisibilityOptions = {}) {\n const [columnVisibility, setColumnVisibility] = useState<ColumnVisibilityState>(() => {\n if (persistKey && typeof window !== 'undefined') {\n const stored = localStorage.getItem(`column-visibility-${persistKey}`)\n if (stored) {\n try {\n return JSON.parse(stored)\n } catch {\n return defaultVisibility\n }\n }\n }\n return defaultVisibility\n })\n\n useEffect(() => {\n if (persistKey && typeof window !== 'undefined') {\n localStorage.setItem(`column-visibility-${persistKey}`, JSON.stringify(columnVisibility))\n }\n onVisibilityChange?.(columnVisibility)\n }, [columnVisibility, persistKey, onVisibilityChange])\n\n const toggleColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: !(prev[columnId] ?? true)\n }))\n }, [])\n\n const showColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: true\n }))\n }, [])\n\n const hideColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: false\n }))\n }, [])\n\n const showAllColumns = useCallback(() => {\n setColumnVisibility({})\n }, [])\n\n const hideAllColumns = useCallback((exceptColumns: string[] = []) => {\n setColumnVisibility((prev) => {\n const newVisibility: ColumnVisibilityState = {}\n Object.keys(prev).forEach((key) => {\n newVisibility[key] = exceptColumns.includes(key)\n })\n return newVisibility\n })\n }, [])\n\n const resetVisibility = useCallback(() => {\n setColumnVisibility(defaultVisibility)\n }, [defaultVisibility])\n\n const isColumnVisible = useCallback((columnId: string): boolean => {\n return columnVisibility[columnId] ?? true\n }, [columnVisibility])\n\n return {\n columnVisibility,\n setColumnVisibility,\n toggleColumn,\n showColumn,\n hideColumn,\n showAllColumns,\n hideAllColumns,\n resetVisibility,\n isColumnVisible,\n }\n}\n","'use client'\nimport { useState, useEffect, useCallback, useRef } from 'react'\nimport { ColumnVisibilityState, SortState } from '../types'\n\ninterface TablePreferences {\n columnVisibility: ColumnVisibilityState\n columnOrder: string[] | null\n defaultSortColumn: string | null\n defaultSortDirection: 'asc' | 'desc' | null\n pageSize: number\n}\n\ninterface UseTablePreferencesOptions {\n tableId: string\n enabled?: boolean\n defaultColumnVisibility?: ColumnVisibilityState\n defaultPageSize?: number\n debounceMs?: number\n // Custom fetch function for API calls\n // Applications should provide their own apiFetch implementation\n apiFetch?: typeof fetch\n}\n\ninterface UseTablePreferencesReturn {\n preferences: TablePreferences | null\n isLoading: boolean\n error: Error | null\n updateColumnVisibility: (visibility: ColumnVisibilityState) => void\n updateColumnOrder: (order: string[]) => void\n updateSortPreference: (sort: SortState) => void\n updatePageSize: (size: number) => void\n resetPreferences: () => Promise<void>\n}\n\nexport function useTablePreferences({\n tableId,\n enabled = true,\n defaultColumnVisibility = {},\n defaultPageSize = 25,\n debounceMs = 500,\n apiFetch = fetch // Default to native fetch if not provided\n}: UseTablePreferencesOptions): UseTablePreferencesReturn {\n const [preferences, setPreferences] = useState<TablePreferences | null>(null)\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n const saveTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const pendingUpdatesRef = useRef<Partial<TablePreferences>>({})\n\n // Load preferences on mount\n useEffect(() => {\n if (!enabled) {\n setIsLoading(false)\n return\n }\n\n const loadPreferences = async () => {\n try {\n const response = await apiFetch(`/api/v1/table-preferences/?tableId=${encodeURIComponent(tableId)}`)\n if (!response.ok) {\n throw new Error('Failed to load table preferences')\n }\n const data = await response.json()\n\n if (data) {\n setPreferences(data)\n } else {\n // Use defaults if no saved preferences\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n }\n } catch (err) {\n console.error('Error loading table preferences:', err)\n setError(err instanceof Error ? err : new Error('Unknown error'))\n // Fall back to defaults on error\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n } finally {\n setIsLoading(false)\n }\n }\n\n loadPreferences()\n }, [tableId, enabled, defaultPageSize])\n\n // Debounced save function\n const savePreferences = useCallback(async (updates: Partial<TablePreferences>) => {\n // Merge with pending updates\n pendingUpdatesRef.current = { ...pendingUpdatesRef.current, ...updates }\n\n // Clear existing timeout\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current)\n }\n\n // Set new debounced timeout\n saveTimeoutRef.current = setTimeout(async () => {\n const updatesToSave = { ...pendingUpdatesRef.current }\n pendingUpdatesRef.current = {}\n\n try {\n const response = await apiFetch('/api/v1/table-preferences/', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tableId,\n ...updatesToSave\n })\n })\n\n if (!response.ok) {\n throw new Error('Failed to save table preferences')\n }\n } catch (err) {\n console.error('Error saving table preferences:', err)\n // Don't update error state for save failures - user can continue working\n }\n }, debounceMs)\n }, [tableId, debounceMs])\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current)\n }\n }\n }, [])\n\n const updateColumnVisibility = useCallback((visibility: ColumnVisibilityState) => {\n setPreferences(prev => prev ? { ...prev, columnVisibility: visibility } : null)\n savePreferences({ columnVisibility: visibility })\n }, [savePreferences])\n\n const updateColumnOrder = useCallback((order: string[]) => {\n setPreferences(prev => prev ? { ...prev, columnOrder: order } : null)\n savePreferences({ columnOrder: order })\n }, [savePreferences])\n\n const updateSortPreference = useCallback((sort: SortState) => {\n setPreferences(prev => prev ? {\n ...prev,\n defaultSortColumn: sort.sortBy,\n defaultSortDirection: sort.sortDirection\n } : null)\n savePreferences({\n defaultSortColumn: sort.sortBy,\n defaultSortDirection: sort.sortDirection\n })\n }, [savePreferences])\n\n const updatePageSize = useCallback((size: number) => {\n setPreferences(prev => prev ? { ...prev, pageSize: size } : null)\n savePreferences({ pageSize: size })\n }, [savePreferences])\n\n const resetPreferences = useCallback(async () => {\n try {\n const response = await apiFetch(`/api/v1/table-preferences/?tableId=${encodeURIComponent(tableId)}`, {\n method: 'DELETE'\n })\n\n if (!response.ok) {\n throw new Error('Failed to reset table preferences')\n }\n\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n } catch (err) {\n console.error('Error resetting table preferences:', err)\n throw err\n }\n }, [tableId, defaultColumnVisibility, defaultPageSize])\n\n return {\n preferences,\n isLoading,\n error,\n updateColumnVisibility,\n updateColumnOrder,\n updateSortPreference,\n updatePageSize,\n resetPreferences\n }\n}\n","'use client'\nimport { useEffect, useCallback, useRef, useState, RefObject } from 'react'\n\nexport interface UseTableKeyboardProps<TData> {\n data: TData[]\n getRowId: (row: TData) => string\n selectedIds?: Set<string>\n onToggleRow?: (id: string) => void\n onToggleAll?: () => void\n onRowClick?: (row: TData) => void\n onDelete?: (ids: Set<string>) => void\n tableRef: RefObject<HTMLElement | null>\n enabled?: boolean\n}\n\nexport interface UseTableKeyboardReturn {\n focusedRowIndex: number\n setFocusedRowIndex: (index: number) => void\n handleKeyDown: (event: React.KeyboardEvent) => void\n}\n\n/**\n * Hook for handling keyboard navigation in UnifiedTable\n *\n * Features:\n * - Arrow Up/Down: Navigate between rows\n * - Enter: Expand/click row (trigger onRowClick)\n * - Space: Toggle row selection\n * - Tab: Move between interactive elements (native browser behavior)\n * - Escape: Close menus/dialogs (handled by menu components)\n * - Ctrl/Cmd+A: Select all rows\n * - Delete: Trigger delete action if available\n */\nexport function useTableKeyboard<TData>({\n data,\n getRowId,\n selectedIds,\n onToggleRow,\n onToggleAll,\n onRowClick,\n onDelete,\n tableRef,\n enabled = true,\n}: UseTableKeyboardProps<TData>): UseTableKeyboardReturn {\n // Use state for reactive updates so consumers get re-renders\n const [focusedRowIndex, setFocusedRowIndexState] = useState<number>(-1)\n // Keep a ref in sync for use in callbacks to avoid stale closures\n const focusedRowIndexRef = useRef<number>(-1)\n\n const setFocusedRowIndex = useCallback((index: number) => {\n focusedRowIndexRef.current = index\n setFocusedRowIndexState(index)\n }, [])\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n if (!enabled || data.length === 0) return\n\n const { key, ctrlKey, metaKey, shiftKey } = event\n const isModifierPressed = ctrlKey || metaKey\n\n // Ctrl/Cmd + A: Select all rows\n if (key === 'a' && isModifierPressed && onToggleAll) {\n event.preventDefault()\n onToggleAll()\n return\n }\n\n // Delete: Trigger delete action if available\n if (key === 'Delete' && onDelete && selectedIds && selectedIds.size > 0) {\n event.preventDefault()\n onDelete(selectedIds)\n return\n }\n\n // Arrow navigation\n if (key === 'ArrowDown') {\n event.preventDefault()\n const nextIndex = Math.min(focusedRowIndexRef.current + 1, data.length - 1)\n setFocusedRowIndex(nextIndex)\n\n // Focus the row element\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${nextIndex}\"]`\n ) as HTMLElement\n if (rowElement && typeof rowElement.focus === 'function') {\n rowElement.focus()\n }\n }\n return\n }\n\n if (key === 'ArrowUp') {\n event.preventDefault()\n const prevIndex = Math.max(focusedRowIndexRef.current - 1, 0)\n setFocusedRowIndex(prevIndex)\n\n // Focus the row element\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${prevIndex}\"]`\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n\n // Enter: Trigger row click\n if (key === 'Enter' && focusedRowIndexRef.current >= 0 && onRowClick) {\n event.preventDefault()\n const row = data[focusedRowIndexRef.current]\n if (row) {\n onRowClick(row)\n }\n return\n }\n\n // Space: Toggle row selection\n if (key === ' ' && focusedRowIndexRef.current >= 0 && onToggleRow) {\n event.preventDefault()\n const row = data[focusedRowIndexRef.current]\n if (row) {\n const rowId = getRowId(row)\n onToggleRow(rowId)\n }\n return\n }\n\n // Home: Focus first row\n if (key === 'Home') {\n event.preventDefault()\n setFocusedRowIndex(0)\n\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n '[data-row-index=\"0\"]'\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n\n // End: Focus last row\n if (key === 'End') {\n event.preventDefault()\n const lastIndex = data.length - 1\n setFocusedRowIndex(lastIndex)\n\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${lastIndex}\"]`\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n }, [\n enabled,\n data,\n getRowId,\n selectedIds,\n onToggleRow,\n onToggleAll,\n onRowClick,\n onDelete,\n tableRef,\n setFocusedRowIndex,\n ])\n\n // Set up keyboard event listener on the table\n useEffect(() => {\n if (!enabled || !tableRef.current) return\n\n const handleKeyboardEvent = (event: KeyboardEvent) => {\n // Convert native event to React synthetic event shape\n const syntheticEvent = {\n key: event.key,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n } as React.KeyboardEvent\n\n handleKeyDown(syntheticEvent)\n }\n\n const tableElement = tableRef.current\n tableElement.addEventListener('keydown', handleKeyboardEvent as any)\n\n return () => {\n tableElement.removeEventListener('keydown', handleKeyboardEvent as any)\n }\n }, [enabled, tableRef, handleKeyDown])\n\n return {\n focusedRowIndex,\n setFocusedRowIndex,\n handleKeyDown,\n }\n}\n","'use client'\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport { useSearchParams, useRouter, usePathname } from 'next/navigation'\nimport { SortState, FilterState } from '../types'\n\nexport interface UseTableURLConfig {\n tableId: string\n persistToUrl: boolean\n debounceMs?: number\n}\n\nexport interface TableURLState {\n sortBy: string | null\n sortDirection: 'asc' | 'desc'\n filters: FilterState\n page: number\n search: string\n}\n\nexport interface UseTableURLReturn {\n // Read state from URL\n getURLState: () => TableURLState\n\n // Update individual state pieces\n setSortToURL: (sort: SortState) => void\n setFiltersToURL: (filters: FilterState) => void\n setPageToURL: (page: number) => void\n setSearchToURL: (search: string) => void\n\n // Clear state\n clearURLState: () => void\n\n // Check if URL has state\n hasURLState: () => boolean\n}\n\n/**\n * Hook for persisting table state to URL query parameters.\n * Enables shareability and browser navigation for table state.\n *\n * URL params are namespaced with tableId prefix:\n * - {tableId}_sortBy: column ID\n * - {tableId}_sortDir: 'asc' | 'desc'\n * - {tableId}_page: current page number\n * - {tableId}_search: search term\n * - {tableId}_filter_{filterKey}: filter values (JSON encoded)\n *\n * @example\n * const urlState = useTableURL({\n * tableId: 'firms',\n * persistToUrl: true,\n * debounceMs: 300\n * })\n *\n * // Read initial state from URL\n * const initialState = urlState.getURLState()\n *\n * // Update URL when state changes\n * urlState.setSortToURL({ sortBy: 'name', sortDirection: 'asc' })\n * urlState.setSearchToURL('acme')\n */\nexport function useTableURL({\n tableId,\n persistToUrl,\n debounceMs = 300,\n}: UseTableURLConfig): UseTableURLReturn {\n const searchParams = useSearchParams()\n const router = useRouter()\n const pathname = usePathname()\n\n // Debounce timer ref\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null)\n\n // Track if we're currently applying URL changes to avoid loops\n const isApplyingURLRef = useRef(false)\n\n /**\n * Build namespaced param key\n */\n const getParamKey = useCallback((key: string): string => {\n return `${tableId}_${key}`\n }, [tableId])\n\n /**\n * Parse URL state from current search params\n */\n const getURLState = useCallback((): TableURLState => {\n if (!persistToUrl) {\n return {\n sortBy: null,\n sortDirection: 'asc',\n filters: {},\n page: 1,\n search: '',\n }\n }\n\n const sortBy = searchParams.get(getParamKey('sortBy'))\n const sortDirection = searchParams.get(getParamKey('sortDir')) as 'asc' | 'desc' | null\n const page = parseInt(searchParams.get(getParamKey('page')) || '1', 10)\n const search = searchParams.get(getParamKey('search')) || ''\n\n // Parse filters (any param starting with tableId_filter_)\n const filters: FilterState = {}\n const filterPrefix = getParamKey('filter_')\n\n searchParams.forEach((value, key) => {\n if (key.startsWith(filterPrefix)) {\n const filterKey = key.substring(filterPrefix.length)\n try {\n // Try to parse as JSON first (for complex values)\n filters[filterKey] = JSON.parse(value)\n } catch {\n // Fall back to raw string value\n filters[filterKey] = value\n }\n }\n })\n\n return {\n sortBy: sortBy || null,\n sortDirection: sortDirection || 'asc',\n filters,\n page: isNaN(page) || page < 1 ? 1 : page,\n search,\n }\n }, [searchParams, persistToUrl, getParamKey])\n\n /**\n * Update URL with new params (debounced)\n */\n const updateURL = useCallback((updates: Record<string, string | null>) => {\n if (!persistToUrl) return\n\n // Clear existing debounce timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n // Debounce the URL update\n debounceTimerRef.current = setTimeout(() => {\n const newParams = new URLSearchParams(searchParams.toString())\n\n // Apply updates\n Object.entries(updates).forEach(([key, value]) => {\n if (value === null || value === '') {\n newParams.delete(key)\n } else {\n newParams.set(key, value)\n }\n })\n\n // Only update if params actually changed\n const newParamsString = newParams.toString()\n const currentParamsString = searchParams.toString()\n\n if (newParamsString !== currentParamsString) {\n isApplyingURLRef.current = true\n const newURL = newParamsString ? `${pathname}?${newParamsString}` : pathname\n router.replace(newURL, { scroll: false })\n\n // Reset flag after a short delay\n setTimeout(() => {\n isApplyingURLRef.current = false\n }, 50)\n }\n }, debounceMs)\n }, [persistToUrl, searchParams, pathname, router, debounceMs])\n\n /**\n * Update sort state in URL\n */\n const setSortToURL = useCallback((sort: SortState) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('sortBy')]: sort.sortBy,\n [getParamKey('sortDir')]: sort.sortBy ? sort.sortDirection : null,\n // Reset to page 1 when sorting changes\n [getParamKey('page')]: '1',\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Update filters in URL\n */\n const setFiltersToURL = useCallback((filters: FilterState) => {\n if (!persistToUrl) return\n\n // Build updates object - clear old filters and set new ones\n const updates: Record<string, string | null> = {}\n const filterPrefix = getParamKey('filter_')\n\n // Clear all existing filter params\n searchParams.forEach((_, key) => {\n if (key.startsWith(filterPrefix)) {\n updates[key] = null\n }\n })\n\n // Set new filter params\n Object.entries(filters).forEach(([key, value]) => {\n const paramKey = `${filterPrefix}${key}`\n if (value === undefined || value === null || value === '') {\n updates[paramKey] = null\n } else if (typeof value === 'object') {\n // Encode complex values as JSON\n updates[paramKey] = JSON.stringify(value)\n } else {\n updates[paramKey] = String(value)\n }\n })\n\n // Reset to page 1 when filters change\n updates[getParamKey('page')] = '1'\n\n updateURL(updates)\n }, [persistToUrl, updateURL, getParamKey, searchParams])\n\n /**\n * Update page in URL\n */\n const setPageToURL = useCallback((page: number) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('page')]: page > 1 ? String(page) : null, // Remove param if page 1\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Update search term in URL\n */\n const setSearchToURL = useCallback((search: string) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('search')]: search || null,\n // Reset to page 1 when search changes\n [getParamKey('page')]: '1',\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Clear all table-related URL params\n */\n const clearURLState = useCallback(() => {\n if (!persistToUrl) return\n\n const newParams = new URLSearchParams(searchParams.toString())\n const keysToDelete: string[] = []\n\n // Find all params for this table\n newParams.forEach((_, key) => {\n if (key.startsWith(`${tableId}_`)) {\n keysToDelete.push(key)\n }\n })\n\n // Delete them\n keysToDelete.forEach(key => newParams.delete(key))\n\n const newURL = newParams.toString() ? `${pathname}?${newParams.toString()}` : pathname\n router.replace(newURL, { scroll: false })\n }, [persistToUrl, searchParams, pathname, router, tableId])\n\n /**\n * Check if URL has any state for this table\n */\n const hasURLState = useCallback((): boolean => {\n if (!persistToUrl) return false\n\n let hasState = false\n searchParams.forEach((_, key) => {\n if (key.startsWith(`${tableId}_`)) {\n hasState = true\n }\n })\n return hasState\n }, [persistToUrl, searchParams, tableId])\n\n // Cleanup debounce timer on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [])\n\n return {\n getURLState,\n setSortToURL,\n setFiltersToURL,\n setPageToURL,\n setSearchToURL,\n clearURLState,\n hasURLState,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useMemo } from 'react'\nimport { DropResult } from '@hello-pangea/dnd'\nimport { ColumnConfig } from '../types'\n\ninterface UseColumnReorderOptions<TData> {\n columns: ColumnConfig<TData>[]\n initialOrder?: string[] | null\n enabled?: boolean\n onOrderChange?: (order: string[]) => void\n}\n\ninterface UseColumnReorderReturn<TData> {\n orderedColumns: ColumnConfig<TData>[]\n columnOrder: string[]\n handleDragEnd: (result: DropResult) => void\n resetOrder: () => void\n}\n\nexport function useColumnReorder<TData>({\n columns,\n initialOrder = null,\n enabled = true,\n onOrderChange,\n}: UseColumnReorderOptions<TData>): UseColumnReorderReturn<TData> {\n // Initialize order from provided order or default to column IDs\n const defaultOrder = useMemo(() => columns.map(c => c.id), [columns])\n\n const [columnOrder, setColumnOrder] = useState<string[]>(() => {\n if (initialOrder && initialOrder.length > 0) {\n // Validate that all columns exist and add any new ones\n const validOrder = initialOrder.filter(id => columns.some(c => c.id === id))\n const newColumns = columns.filter(c => !initialOrder.includes(c.id)).map(c => c.id)\n return [...validOrder, ...newColumns]\n }\n return defaultOrder\n })\n\n // Reorder columns based on current order\n const orderedColumns = useMemo(() => {\n if (!enabled) return columns\n\n const columnMap = new Map(columns.map(c => [c.id, c]))\n const ordered: ColumnConfig<TData>[] = []\n\n // Add columns in order\n for (const id of columnOrder) {\n const column = columnMap.get(id)\n if (column) {\n ordered.push(column)\n }\n }\n\n // Add any columns not in the order (new columns)\n for (const column of columns) {\n if (!columnOrder.includes(column.id)) {\n ordered.push(column)\n }\n }\n\n return ordered\n }, [columns, columnOrder, enabled])\n\n // Handle drag end\n const handleDragEnd = useCallback((result: DropResult) => {\n if (!result.destination) return\n if (result.source.index === result.destination.index) return\n\n const newOrder = Array.from(columnOrder)\n const [removed] = newOrder.splice(result.source.index, 1)\n newOrder.splice(result.destination.index, 0, removed)\n\n setColumnOrder(newOrder)\n onOrderChange?.(newOrder)\n }, [columnOrder, onOrderChange])\n\n // Reset to default order\n const resetOrder = useCallback(() => {\n setColumnOrder(defaultOrder)\n onOrderChange?.(defaultOrder)\n }, [defaultOrder, onOrderChange])\n\n return {\n orderedColumns,\n columnOrder,\n handleDragEnd,\n resetOrder,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\ninterface ColumnWidths {\n [columnId: string]: number\n}\n\ninterface UseColumnResizeOptions {\n enabled?: boolean\n initialWidths?: ColumnWidths | null\n minWidth?: number\n onWidthChange?: (widths: ColumnWidths) => void\n}\n\ninterface UseColumnResizeReturn {\n columnWidths: ColumnWidths\n getColumnWidth: (columnId: string, defaultWidth?: number) => number | undefined\n startResize: (columnId: string, startX: number, startWidth: number) => void\n resetWidths: () => void\n isResizing: boolean\n resizingColumn: string | null\n}\n\nexport function useColumnResize({\n enabled = true,\n initialWidths = null,\n minWidth = 50,\n onWidthChange,\n}: UseColumnResizeOptions = {}): UseColumnResizeReturn {\n const [columnWidths, setColumnWidths] = useState<ColumnWidths>(() => initialWidths ?? {})\n const [resizingColumn, setResizingColumn] = useState<string | null>(null)\n const resizeRef = useRef<{\n columnId: string\n startX: number\n startWidth: number\n } | null>(null)\n\n // Store dependencies in refs to avoid useCallback recreation\n const minWidthRef = useRef(minWidth)\n const onWidthChangeRef = useRef(onWidthChange)\n useEffect(() => {\n minWidthRef.current = minWidth\n onWidthChangeRef.current = onWidthChange\n }, [minWidth, onWidthChange])\n\n // Get column width (undefined allows CSS default)\n const getColumnWidth = useCallback((columnId: string, defaultWidth?: number): number | undefined => {\n if (!enabled) return defaultWidth\n return columnWidths[columnId] ?? defaultWidth\n }, [enabled, columnWidths])\n\n // Start resizing a column\n const startResize = useCallback((columnId: string, startX: number, startWidth: number) => {\n if (!enabled) return\n resizeRef.current = { columnId, startX, startWidth }\n setResizingColumn(columnId)\n }, [enabled])\n\n // Handle pointer/mouse move during resize - uses refs to avoid recreating\n const handlePointerMove = useCallback((e: PointerEvent | MouseEvent) => {\n if (!resizeRef.current) return\n\n const { columnId, startX, startWidth } = resizeRef.current\n const diff = e.clientX - startX\n const newWidth = Math.max(minWidthRef.current, startWidth + diff)\n\n setColumnWidths(prev => ({ ...prev, [columnId]: newWidth }))\n }, [])\n\n // Handle pointer/mouse up to end resize - uses refs to avoid recreating\n const handlePointerUp = useCallback(() => {\n if (!resizeRef.current) return\n\n resizeRef.current = null\n setResizingColumn(null)\n\n // Notify parent of the final width changes\n setColumnWidths(current => {\n onWidthChangeRef.current?.(current)\n return current\n })\n }, [])\n\n // Add/remove global pointer/mouse listeners during resize\n useEffect(() => {\n if (resizingColumn) {\n // Add listeners for both pointer and mouse events for cross-browser support\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp)\n document.addEventListener('mousemove', handlePointerMove)\n document.addEventListener('mouseup', handlePointerUp)\n // Prevent text selection during resize\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n\n return () => {\n // Remove listeners\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp)\n document.removeEventListener('mousemove', handlePointerMove)\n document.removeEventListener('mouseup', handlePointerUp)\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n }\n }, [resizingColumn, handlePointerMove, handlePointerUp])\n\n // Reset all widths\n const resetWidths = useCallback(() => {\n setColumnWidths({})\n onWidthChange?.({})\n }, [onWidthChange])\n\n return {\n columnWidths,\n getColumnWidth,\n startResize,\n resetWidths,\n isResizing: resizingColumn !== null,\n resizingColumn,\n }\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent 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\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { Badge } from '../../../ui/badge'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../ui/select'\nimport { Filter, XCircle, ChevronDown, ChevronUp } from 'lucide-react'\nimport { FilterConfig, FilterSection, UseFiltersReturn } from '../../types'\nimport { cn } from '../../../../lib/utils'\nimport { useState, useCallback } from 'react'\n\ninterface TableFiltersProps {\n config: FilterConfig\n filters: UseFiltersReturn\n className?: string\n defaultExpanded?: boolean\n}\n\nexport function TableFilters({ config, filters, className, defaultExpanded = false }: TableFiltersProps) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded)\n const [expandedSections, setExpandedSections] = useState<Set<string>>(new Set())\n\n const toggleSection = (sectionId: string) => {\n setExpandedSections((prev) => {\n const next = new Set(prev)\n if (next.has(sectionId)) {\n next.delete(sectionId)\n } else {\n next.add(sectionId)\n }\n return next\n })\n }\n\n const renderChipsFilter = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'chips' || !section.filters) return null\n\n return (\n <div className=\"flex flex-wrap items-center gap-3\">\n {section.filters.map((filter) => {\n if (!filter.options) return null\n\n return (\n <div key={filter.id} className=\"flex items-center gap-2\">\n <Label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <div className=\"flex gap-1\">\n {filter.options.map((option) => {\n const isActive = filters.filters[filter.id] === option\n\n return (\n <Button\n key={option}\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => {\n if (isActive) {\n filters.clearFilter(filter.id)\n } else {\n filters.setFilter(filter.id, option)\n }\n }}\n className=\"h-7 px-2 text-xs\"\n >\n {option}\n </Button>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n )\n }\n\n const renderBucketsFilter = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'buckets' || !section.buckets) return null\n\n const currentValue = filters.filters[section.id] || 'all'\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <Label htmlFor={section.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {section.label}:\n </Label>\n <Select value={currentValue} onValueChange={(value) => filters.setFilter(section.id, value)}>\n <SelectTrigger id={section.id} className=\"w-32 h-8 text-xs\">\n <SelectValue placeholder=\"Select range\" />\n </SelectTrigger>\n <SelectContent>\n {section.buckets.map((bucket, idx) => (\n <SelectItem key={idx} value={bucket.label.toLowerCase().replace(/\\s+/g, '-')}>\n {bucket.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n const renderDropdownFilter = (filter: NonNullable<FilterConfig['sections'][0]['filters']>[0]) => {\n if (!filter.options) return null\n\n const currentValue = filters.filters[filter.id] || 'all'\n // Filter out 'all' from options since we add it explicitly below\n const filteredOptions = filter.options.filter((option: string) => option.toLowerCase() !== 'all')\n\n return (\n <div key={filter.id} className=\"flex items-center gap-1.5\">\n <Label htmlFor={filter.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <Select value={currentValue} onValueChange={(value) => filters.setFilter(filter.id, value)}>\n <SelectTrigger id={filter.id} className=\"w-28 h-8 text-xs\">\n <SelectValue placeholder=\"All\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All</SelectItem>\n {filteredOptions.map((option: string) => (\n <SelectItem key={option} value={option}>\n {option === 'null' ? 'Not Set' : option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n const renderSearchFilter = (filter: NonNullable<FilterConfig['sections'][0]['filters']>[0]) => {\n const currentValue = filters.filters[filter.id] || ''\n\n return (\n <div key={filter.id} className=\"flex items-center gap-1.5\">\n <Label htmlFor={filter.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <Input\n id={filter.id}\n type=\"text\"\n placeholder={filter.label}\n value={currentValue}\n onChange={(e) => filters.setFilter(filter.id, e.target.value)}\n className=\"w-32 h-8 text-xs\"\n />\n </div>\n )\n }\n\n const renderCollapsibleSection = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'collapsible' || !section.filters) return null\n\n const isExpanded = expandedSections.has(section.id)\n\n return (\n <div key={section.id} className=\"border rounded-lg p-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => toggleSection(section.id)}\n className=\"w-full justify-between -ml-2\"\n >\n <span className=\"font-medium\">{section.label}</span>\n {isExpanded ? <ChevronUp className=\"h-4 w-4\" /> : <ChevronDown className=\"h-4 w-4\" />}\n </Button>\n\n {isExpanded && (\n <div className=\"mt-3 space-y-3\">\n {section.filters.map((filter) => {\n if (filter.type === 'dropdown') {\n return renderDropdownFilter(filter)\n }\n if (filter.type === 'search') {\n return renderSearchFilter(filter)\n }\n return null\n })}\n </div>\n )}\n </div>\n )\n }\n\n // Render custom filter using the provided render function\n const renderCustomFilter = useCallback((section: FilterSection) => {\n if (section.type !== 'custom' || !section.customFilter) return null\n\n const currentValue = filters.filters[section.id] ?? section.customFilter.defaultValue\n const onChange = (value: any) => {\n if (value === section.customFilter?.defaultValue || value === undefined || value === null) {\n filters.clearFilter(section.id)\n } else {\n filters.setFilter(section.id, value)\n }\n }\n\n return (\n <div key={section.id} className=\"flex items-center gap-1.5\">\n {section.label && (\n <Label className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {section.label}:\n </Label>\n )}\n {section.customFilter.render(currentValue, onChange)}\n </div>\n )\n }, [filters])\n\n const hasActiveFilters = filters.hasActiveFilters()\n const activeFilterCount = filters.getActiveFilterCount()\n\n return (\n <div className={cn('rounded-lg border bg-muted/30', className)}>\n {/* Collapsible Header */}\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"w-full flex items-center justify-between px-3 py-2 hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">Filters</span>\n {hasActiveFilters && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {activeFilterCount}\n </Badge>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {hasActiveFilters && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n filters.clearAllFilters()\n }}\n className=\"gap-1 h-6 px-2 text-xs\"\n >\n <XCircle className=\"h-3 w-3\" />\n Clear\n </Button>\n )}\n {isExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </div>\n </button>\n\n {/* Expanded filter content */}\n {isExpanded && (\n <div className=\"px-3 pb-3 pt-1\">\n {/* Compact horizontal layout for all filters */}\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-2\">\n {config.sections.map((section) => {\n if (section.type === 'chips') {\n return <div key={section.id}>{renderChipsFilter(section)}</div>\n }\n\n if (section.type === 'buckets') {\n return <div key={section.id}>{renderBucketsFilter(section)}</div>\n }\n\n if (section.type === 'collapsible') {\n return renderCollapsibleSection(section)\n }\n\n if (section.type === 'dropdown' && section.filters) {\n return section.filters.map((filter) => (\n <div key={filter.id}>{renderDropdownFilter(filter)}</div>\n ))\n }\n\n if (section.type === 'search' && section.filters) {\n return section.filters.map((filter) => (\n <div key={filter.id}>{renderSearchFilter(filter)}</div>\n ))\n }\n\n if (section.type === 'custom') {\n return <div key={section.id}>{renderCustomFilter(section)}</div>\n }\n\n return null\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { X } from 'lucide-react'\nimport { BulkAction } from '../../types'\nimport { cn } from '../../../../lib/utils'\n\ninterface BulkActionBarProps {\n selectedCount: number\n selectAllPages: boolean\n totalCount: number\n bulkActions: BulkAction[]\n onClearSelection: () => void\n onExecuteAction: (action: BulkAction) => void\n className?: string\n}\n\nexport function BulkActionBar({\n selectedCount,\n selectAllPages,\n totalCount,\n bulkActions,\n onClearSelection,\n onExecuteAction,\n className,\n}: BulkActionBarProps) {\n const isVisible = selectedCount > 0\n\n const getVariantClassName = (variant: BulkAction['variant']) => {\n switch (variant) {\n case 'gradient-purple':\n return 'bg-gradient-to-r from-purple-600 to-blue-600 text-white hover:from-purple-700 hover:to-blue-700'\n case 'gradient-green':\n return 'bg-gradient-to-r from-green-600 to-teal-600 text-white hover:from-green-700 hover:to-teal-700'\n case 'gradient-indigo':\n return 'bg-gradient-to-r from-indigo-600 to-purple-600 text-white hover:from-indigo-700 hover:to-purple-700'\n case 'gradient-orange':\n return 'bg-gradient-to-r from-orange-600 to-red-600 text-white hover:from-orange-700 hover:to-red-700'\n case 'gradient-blue':\n return 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white hover:from-blue-700 hover:to-indigo-700'\n default:\n return ''\n }\n }\n\n return (\n <div\n className={cn(\n 'transition-all duration-200 ease-in-out overflow-hidden',\n isVisible\n ? 'opacity-100 max-h-20'\n : 'opacity-0 max-h-0 pointer-events-none',\n className\n )}\n aria-hidden={!isVisible}\n >\n <div className=\"flex items-center gap-2 p-3 bg-muted/50 rounded-lg border\">\n {/* Selection summary */}\n <div className=\"flex items-center gap-2 text-sm font-medium\">\n {selectAllPages ? (\n <span className=\"text-blue-600\">\n All <span className=\"font-semibold\">{totalCount}</span> items selected\n </span>\n ) : (\n <span>\n {`${selectedCount} ${selectedCount === 1 ? 'item' : 'items'} selected`}\n </span>\n )}\n </div>\n\n {/* Divider */}\n <div className=\"h-6 w-px bg-border mx-1\" />\n\n {/* Bulk action buttons */}\n <div className=\"flex items-center gap-2 flex-1\">\n {bulkActions.map((action) => {\n const Icon = action.icon\n const isDisabled = action.disabled?.(new Set()) || false\n const exceedsMaxSelection = !!(action.maxSelection && selectedCount > action.maxSelection)\n\n return (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant === 'default' ? 'default' : 'default'}\n className={cn(\n getVariantClassName(action.variant),\n 'gap-2'\n )}\n onClick={() => onExecuteAction(action)}\n disabled={isDisabled || exceedsMaxSelection}\n title={\n exceedsMaxSelection\n ? `Maximum ${action.maxSelection} items can be selected for this action`\n : action.label\n }\n >\n <Icon className=\"h-4 w-4\" />\n {action.label}\n {selectAllPages && totalCount > 0 && ` (${totalCount})`}\n </Button>\n )\n })}\n </div>\n\n {/* Clear selection button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onClearSelection}\n className=\"gap-2\"\n >\n <X className=\"h-4 w-4\" />\n Clear\n </Button>\n </div>\n </div>\n )\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }","'use client'\n\nimport * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check, ChevronRight, Circle } from 'lucide-react'\n\nimport { cn } from '../../utils'\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center 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',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n 'px-2 py-1.5 text-sm font-semibold',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest opacity-60', className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut'\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}","'use client'\n\nimport { useState, useRef, useEffect, useCallback } from 'react'\nimport { Input } from '../../../ui/input'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../../../ui/select'\nimport { Check, X, Loader2 } from 'lucide-react'\nimport { cn } from '../../../../lib/utils'\n\ninterface InlineEditCellProps {\n value: any\n columnId: string\n rowId: string\n editType?: 'text' | 'number' | 'select' | 'date'\n editOptions?: string[]\n onSave: (value: any) => Promise<void>\n onCancel: () => void\n validate?: (value: any) => string | null\n}\n\nexport function InlineEditCell({\n value: initialValue,\n columnId,\n rowId,\n editType = 'text',\n editOptions = [],\n onSave,\n onCancel,\n validate,\n}: InlineEditCellProps) {\n const [value, setValue] = useState(initialValue ?? '')\n const [error, setError] = useState<string | null>(null)\n const [isSaving, setIsSaving] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // Focus the input on mount\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus()\n inputRef.current.select()\n }\n }, [])\n\n // Handle save\n const handleSave = useCallback(async () => {\n // Validate if validator provided\n if (validate) {\n const validationError = validate(value)\n if (validationError) {\n setError(validationError)\n return\n }\n }\n\n setIsSaving(true)\n setError(null)\n\n try {\n await onSave(value)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save')\n setIsSaving(false)\n }\n }, [value, validate, onSave])\n\n // Handle keyboard events\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSave()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }, [handleSave, onCancel])\n\n // Render select editor\n if (editType === 'select') {\n return (\n <div className=\"flex items-center gap-1\">\n <Select\n value={String(value)}\n onValueChange={(newValue) => {\n setValue(newValue)\n // Auto-save on select\n onSave(newValue)\n }}\n >\n <SelectTrigger className=\"h-8 w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {editOptions.map((option) => (\n <SelectItem key={option} value={option}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <button\n onClick={onCancel}\n className=\"p-1 hover:bg-muted rounded\"\n disabled={isSaving}\n >\n <X className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </div>\n )\n }\n\n // Render text/number/date editor\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-1\">\n <Input\n ref={inputRef}\n type={editType === 'number' ? 'number' : editType === 'date' ? 'date' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value)\n setError(null)\n }}\n onKeyDown={handleKeyDown}\n className={cn(\n 'h-8 w-full',\n error && 'border-red-500 focus-visible:ring-red-500'\n )}\n disabled={isSaving}\n />\n <button\n onClick={handleSave}\n className=\"p-1 hover:bg-green-100 rounded\"\n disabled={isSaving}\n >\n {isSaving ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" />\n ) : (\n <Check className=\"h-4 w-4 text-green-600\" />\n )}\n </button>\n <button\n onClick={onCancel}\n className=\"p-1 hover:bg-red-100 rounded\"\n disabled={isSaving}\n >\n <X className=\"h-4 w-4 text-red-600\" />\n </button>\n </div>\n {error && (\n <span className=\"text-xs text-red-500\">{error}</span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useState, useCallback } from 'react'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../../ui/table'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { Button } from '../../../ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger } from '../../../ui/dropdown-menu'\nimport { ArrowUpDown, ArrowUp, ArrowDown, MoreHorizontal, Loader2, GripVertical } from 'lucide-react'\nimport { DragDropContext, Droppable, Draggable, DropResult, DragStart } from '@hello-pangea/dnd'\nimport { ColumnConfig, RowAction } from '../../types'\nimport { InlineEditCell } from '../InlineEditCell'\nimport { cn } from '../../../../lib/utils'\n\ninterface DataTableCoreProps<TData> {\n data: TData[]\n columns: ColumnConfig<TData>[]\n getRowId: (row: TData) => string\n\n // Selection\n selectionEnabled?: boolean\n selectedIds?: Set<string>\n onToggleRow?: (id: string) => void\n onToggleAll?: () => void\n allRowsSelected?: boolean\n renderSelectionCell?: (row: TData) => React.ReactNode\n\n // Sorting\n sortingEnabled?: boolean\n sortBy?: string | null\n sortDirection?: 'asc' | 'desc'\n onSort?: (columnId: string) => void\n\n // Column Reordering\n columnReorderEnabled?: boolean\n onColumnDragEnd?: (result: DropResult) => void\n\n // Column Resizing\n columnResizeEnabled?: boolean\n columnWidths?: { [columnId: string]: number }\n onColumnResizeStart?: (columnId: string, startX: number, startWidth: number) => void\n isResizing?: boolean\n\n // Inline Editing\n inlineEditEnabled?: boolean\n onCellEdit?: (rowId: string, columnId: string, value: any, row: TData) => Promise<void>\n\n // Row Actions\n rowActions?: RowAction<TData>[]\n onRowClick?: (row: TData) => void\n\n // Loading\n loadingRows?: Set<string>\n\n className?: string\n}\n\nexport function DataTableCore<TData>({\n data,\n columns,\n getRowId,\n selectionEnabled,\n selectedIds = new Set(),\n onToggleRow,\n onToggleAll,\n allRowsSelected,\n renderSelectionCell,\n sortingEnabled,\n sortBy,\n sortDirection,\n onSort,\n columnReorderEnabled,\n onColumnDragEnd,\n columnResizeEnabled,\n columnWidths = {},\n onColumnResizeStart,\n isResizing,\n inlineEditEnabled,\n onCellEdit,\n rowActions,\n onRowClick,\n loadingRows = new Set(),\n className,\n}: DataTableCoreProps<TData>) {\n // State for tracking which cell is being edited\n const [editingCell, setEditingCell] = useState<{ rowId: string; columnId: string } | null>(null)\n\n // State for tracking if a column is being dragged (to disable sorting during drag)\n const [isDraggingColumn, setIsDraggingColumn] = useState(false)\n\n // Drag handlers\n const handleDragStart = useCallback((_: DragStart) => {\n setIsDraggingColumn(true)\n }, [])\n\n const handleDragEnd = useCallback((result: DropResult) => {\n setIsDraggingColumn(false)\n onColumnDragEnd?.(result)\n }, [onColumnDragEnd])\n\n // Get effective column width (resized or default)\n const getEffectiveWidth = (column: ColumnConfig<TData>) => {\n if (columnResizeEnabled && columnWidths[column.id]) {\n return columnWidths[column.id]\n }\n return column.width\n }\n\n // Resize handle with stable callback reference\n const handleResizeMouseDown = useCallback((columnId: string, e: React.MouseEvent | React.PointerEvent) => {\n e.stopPropagation()\n e.preventDefault()\n const th = (e.target as HTMLElement).closest('th')\n if (th && onColumnResizeStart) {\n onColumnResizeStart(columnId, e.clientX, th.offsetWidth)\n }\n }, [onColumnResizeStart])\n\n // Resize handle component - wider hit area for easier grabbing\n const renderResizeHandle = (columnId: string) => {\n if (!columnResizeEnabled) return null\n\n return (\n <div\n data-resize-handle=\"true\"\n className=\"absolute right-0 top-0 h-full w-5 cursor-col-resize z-50 flex items-center justify-center group/resize pointer-events-auto\"\n style={{ marginRight: '-10px' }}\n onMouseDown={(e) => handleResizeMouseDown(columnId, e)}\n onPointerDown={(e) => handleResizeMouseDown(columnId, e)}\n onDragStart={(e) => e.preventDefault()}\n >\n {/* Visible indicator line */}\n <div className=\"w-[3px] h-full bg-transparent group-hover/resize:bg-primary transition-colors rounded-full\" />\n </div>\n )\n }\n\n const renderCellContent = (column: ColumnConfig<TData>, row: TData) => {\n if (column.cell) {\n return column.cell(row)\n }\n\n if (column.accessorFn) {\n return column.accessorFn(row)\n }\n\n if (column.accessorKey) {\n const value = (row as any)[column.accessorKey]\n return value !== null && value !== undefined ? String(value) : '-'\n }\n\n return '-'\n }\n\n // Sort indicator component for cleaner rendering\n const SortIndicator = ({ columnId }: { columnId: string }) => {\n const isSorted = sortBy === columnId\n const direction = isSorted ? sortDirection : null\n\n if (direction === 'asc') {\n return <ArrowUp className=\"ml-2 h-4 w-4\" />\n } else if (direction === 'desc') {\n return <ArrowDown className=\"ml-2 h-4 w-4\" />\n }\n return <ArrowUpDown className=\"ml-2 h-4 w-4 opacity-50\" />\n }\n\n // Handle sort click - disabled during column dragging\n const handleSortClick = useCallback((columnId: string) => {\n if (isDraggingColumn) return // Don't sort while dragging columns\n onSort?.(columnId)\n }, [isDraggingColumn, onSort])\n\n const renderHeader = (column: ColumnConfig<TData>, inDragContext = false) => {\n if (typeof column.header === 'function') {\n return column.header({})\n }\n\n // In drag context, render a simpler header (sorting handled separately)\n if (inDragContext) {\n return <span>{column.header}</span>\n }\n\n if (sortingEnabled && column.sortable !== false) {\n return (\n <Button\n variant=\"ghost\"\n onClick={() => handleSortClick(column.id)}\n className=\"-ml-4 h-8 hover:bg-transparent\"\n >\n {column.header}\n <SortIndicator columnId={column.id} />\n </Button>\n )\n }\n\n return column.header\n }\n\n const renderColumnHeaders = () => {\n if (columnReorderEnabled && onColumnDragEnd) {\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <TableHeader>\n <Droppable droppableId=\"columns\" direction=\"horizontal\">\n {(provided) => (\n <TableRow\n ref={provided.innerRef}\n {...provided.droppableProps}\n >\n {/* Selection column */}\n {selectionEnabled && (\n <TableHead className=\"w-12\">\n <Checkbox\n checked={allRowsSelected}\n onCheckedChange={onToggleAll}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n\n {/* Draggable data columns */}\n {columns.map((column, index) => (\n <Draggable key={column.id} draggableId={column.id} index={index}>\n {(provided, snapshot) => (\n <TableHead\n ref={provided.innerRef}\n {...provided.draggableProps}\n style={{\n ...provided.draggableProps.style,\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n className={cn(\n 'relative group overflow-visible',\n snapshot.isDragging && 'bg-primary/10 shadow-lg ring-2 ring-primary/20 z-50',\n columnResizeEnabled && 'select-none'\n )}\n >\n {/* Drag handle area - leaves space for resize handle on the right */}\n <div\n {...provided.dragHandleProps}\n className={cn(\n 'flex items-center gap-2 cursor-grab active:cursor-grabbing',\n 'hover:bg-muted/50 rounded px-1 -mx-1 py-1 transition-colors',\n columnResizeEnabled && 'pr-4'\n )}\n >\n <GripVertical className=\"h-4 w-4 text-muted-foreground flex-shrink-0\" />\n {/* Sortable header text */}\n <div\n className=\"flex-1 flex items-center\"\n onClick={(e) => {\n // Only trigger sort if not dragging and column is sortable\n if (!snapshot.isDragging && sortingEnabled && column.sortable !== false) {\n e.stopPropagation()\n handleSortClick(column.id)\n }\n }}\n >\n {renderHeader(column, true)}\n {sortingEnabled && column.sortable !== false && (\n <SortIndicator columnId={column.id} />\n )}\n </div>\n </div>\n {renderResizeHandle(column.id)}\n </TableHead>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n\n {/* Actions column */}\n {rowActions && rowActions.length > 0 && (\n <TableHead className=\"w-12\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n )}\n </TableRow>\n )}\n </Droppable>\n </TableHeader>\n </DragDropContext>\n )\n }\n\n // Standard non-draggable headers\n return (\n <TableHeader>\n <TableRow>\n {/* Selection column */}\n {selectionEnabled && (\n <TableHead className=\"w-12\">\n <Checkbox\n checked={allRowsSelected}\n onCheckedChange={onToggleAll}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n\n {/* Data columns */}\n {columns.map((column) => (\n <TableHead\n key={column.id}\n className={cn('relative group overflow-visible', columnResizeEnabled && 'select-none')}\n style={{\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n >\n {renderHeader(column)}\n {renderResizeHandle(column.id)}\n </TableHead>\n ))}\n\n {/* Actions column */}\n {rowActions && rowActions.length > 0 && (\n <TableHead className=\"w-12\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n )}\n </TableRow>\n </TableHeader>\n )\n }\n\n return (\n <div className={cn('rounded-md border', className)}>\n <Table>\n {renderColumnHeaders()}\n\n <TableBody>\n {data.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (selectionEnabled ? 1 : 0) + (rowActions ? 1 : 0)}\n className=\"h-24 text-center\"\n >\n No results found.\n </TableCell>\n </TableRow>\n ) : (\n data.map((row, rowIndex) => {\n const rowId = getRowId(row)\n const isSelected = selectedIds.has(rowId)\n const isLoading = loadingRows.has(rowId)\n\n return (\n <TableRow\n key={rowId}\n data-row-index={rowIndex}\n data-state={isSelected && 'selected'}\n onClick={() => onRowClick?.(row)}\n tabIndex={0}\n className={cn(\n onRowClick && 'cursor-pointer hover:bg-muted/50',\n isLoading && 'opacity-50'\n )}\n >\n {/* Selection cell */}\n {selectionEnabled && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <div className=\"flex items-center gap-1\">\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => onToggleRow?.(rowId)}\n aria-label=\"Select row\"\n />\n {renderSelectionCell?.(row)}\n </div>\n </TableCell>\n )}\n\n {/* Data cells */}\n {columns.map((column) => {\n const isEditing = editingCell?.rowId === rowId && editingCell?.columnId === column.id\n const canEdit = inlineEditEnabled && column.editable && onCellEdit\n\n // Get the cell value for editing\n const getCellValue = () => {\n if (column.accessorFn) return column.accessorFn(row)\n if (column.accessorKey) {\n const keys = column.accessorKey.split('.')\n return keys.reduce((obj, key) => obj?.[key], row as any)\n }\n return undefined\n }\n\n return (\n <TableCell\n key={column.id}\n style={{\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n className={cn(\n canEdit && !isEditing && 'cursor-pointer hover:bg-muted/50'\n )}\n onClick={(e) => {\n if (canEdit && !isEditing) {\n e.stopPropagation()\n setEditingCell({ rowId, columnId: column.id })\n }\n }}\n >\n {isEditing ? (\n <InlineEditCell\n value={getCellValue()}\n columnId={column.id}\n rowId={rowId}\n editType={column.editType}\n editOptions={column.editOptions}\n validate={column.validate ? (v) => column.validate!(v, row) : undefined}\n onSave={async (value) => {\n await onCellEdit!(rowId, column.id, value, row)\n setEditingCell(null)\n }}\n onCancel={() => setEditingCell(null)}\n />\n ) : (\n <>\n {isLoading && <Loader2 className=\"h-4 w-4 animate-spin inline-block mr-2\" />}\n {renderCellContent(column, row)}\n </>\n )}\n </TableCell>\n )\n })}\n\n {/* Actions cell */}\n {rowActions && rowActions.length > 0 && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-8 w-8 p-0\">\n <span className=\"sr-only\">Open menu</span>\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Actions</DropdownMenuLabel>\n {rowActions.map((action, idx) => {\n const isDisabled = action.disabled?.(row) || false\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={() => !isDisabled && action.onClick(row)}\n disabled={isDisabled}\n className={cn(action.destructive && 'text-red-600')}\n >\n {action.icon && <action.icon className=\"mr-2 h-4 w-4\" />}\n {action.label}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </TableCell>\n )}\n </TableRow>\n )\n })\n )}\n </TableBody>\n </Table>\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'\nimport { UsePaginationReturn } from '../../types'\n\ninterface TablePaginationProps {\n pagination: UsePaginationReturn\n showSelectAllPrompt?: boolean\n onSelectAllPages?: () => void\n totalFilteredCount?: number\n className?: string\n}\n\nexport function TablePagination({\n pagination,\n showSelectAllPrompt,\n onSelectAllPages,\n totalFilteredCount,\n className,\n}: TablePaginationProps) {\n const {\n currentPage,\n totalPages,\n totalCount,\n canGoNext,\n canGoPrevious,\n goToPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n getPageNumbers,\n getDisplayRange,\n } = pagination\n\n const { start, end } = getDisplayRange()\n const pageNumbers = getPageNumbers()\n\n return (\n <div className={className}>\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n {/* Item count display */}\n <div className=\"text-sm text-muted-foreground\">\n Showing <span className=\"font-medium\">{start}-{end}</span> of{' '}\n <span className=\"font-medium\">{totalCount}</span>\n {totalFilteredCount && totalFilteredCount !== totalCount && (\n <span> filtered items</span>\n )}\n </div>\n\n {/* Page controls */}\n {totalPages > 1 && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground hidden sm:inline\">\n Page {currentPage} of {totalPages}\n </span>\n\n <div className=\"flex gap-1\">\n {/* First page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToFirstPage}\n disabled={!canGoPrevious}\n className=\"h-8 w-8 p-0\"\n title=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Previous page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToPreviousPage}\n disabled={!canGoPrevious}\n className=\"h-8 w-8 p-0\"\n title=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Page numbers */}\n {pageNumbers.map((pageNum, idx) => {\n if (pageNum === '...') {\n return (\n <span\n key={`ellipsis-${idx}`}\n className=\"flex items-center px-2 text-muted-foreground\"\n >\n •••\n </span>\n )\n }\n\n const page = pageNum as number\n return (\n <Button\n key={page}\n variant={page === currentPage ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => goToPage(page)}\n className=\"h-8 w-8 p-0\"\n >\n {page}\n </Button>\n )\n })}\n\n {/* Next page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToNextPage}\n disabled={!canGoNext}\n className=\"h-8 w-8 p-0\"\n title=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n\n {/* Last page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToLastPage}\n disabled={!canGoNext}\n className=\"h-8 w-8 p-0\"\n title=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n )}\n </div>\n\n {/* Select all pages prompt */}\n {showSelectAllPrompt && onSelectAllPages && totalFilteredCount && totalFilteredCount > end && (\n <div className=\"mt-3 flex items-center justify-center p-3 bg-blue-50 border border-blue-200 rounded-lg\">\n <span className=\"text-sm text-blue-900 mr-2\">\n Select all <span className=\"font-semibold\">{totalFilteredCount}</span> items?\n </span>\n <Button\n size=\"sm\"\n variant=\"link\"\n onClick={onSelectAllPages}\n className=\"text-blue-700 hover:text-blue-900 font-semibold p-0 h-auto\"\n >\n Select all {totalFilteredCount} items\n </Button>\n </div>\n )}\n </div>\n )\n}\n","import * as XLSX from 'xlsx'\nimport { ColumnConfig } from '../types'\n\nexport type ExportFormat = 'csv' | 'excel'\n\nexport interface ExportOptions {\n filename: string\n format: ExportFormat\n includeHeaders?: boolean\n dateFormat?: string\n}\n\n/**\n * Extracts the value from a row using column configuration\n */\nfunction getColumnValue<TData>(row: TData, column: ColumnConfig<TData>): any {\n if (column.accessorFn) {\n return column.accessorFn(row)\n }\n\n if (column.accessorKey) {\n const keys = column.accessorKey.split('.')\n let value: any = row\n for (const key of keys) {\n value = value?.[key]\n }\n return value\n }\n\n return ''\n}\n\n/**\n * Formats a value for export (handles dates, objects, arrays)\n */\nfunction formatValueForExport(value: any): string {\n if (value == null) {\n return ''\n }\n\n if (value instanceof Date) {\n return value.toISOString()\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No'\n }\n\n return String(value)\n}\n\n/**\n * Gets the header text for a column\n */\nfunction getColumnHeader<TData>(column: ColumnConfig<TData>): string {\n if (typeof column.header === 'string') {\n return column.header\n }\n return column.id\n}\n\n/**\n * Prepares data for export based on visible columns\n */\nfunction prepareExportData<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n includeHeaders: boolean = true\n): string[][] {\n const rows: string[][] = []\n\n // Add headers\n if (includeHeaders) {\n rows.push(columns.map(getColumnHeader))\n }\n\n // Add data rows\n for (const row of data) {\n const rowData: string[] = []\n for (const column of columns) {\n const value = getColumnValue(row, column)\n rowData.push(formatValueForExport(value))\n }\n rows.push(rowData)\n }\n\n return rows\n}\n\n/**\n * Converts array data to CSV string\n */\nfunction arrayToCSV(data: string[][]): string {\n return data\n .map(row =>\n row\n .map(cell => {\n // Escape quotes and wrap in quotes if contains comma, quote, or newline\n const needsQuotes = /[,\"\\n\\r]/.test(cell)\n if (needsQuotes) {\n return `\"${cell.replace(/\"/g, '\"\"')}\"`\n }\n return cell\n })\n .join(',')\n )\n .join('\\n')\n}\n\n/**\n * Triggers a download of the given content\n */\nfunction downloadFile(content: string | Blob, filename: string, mimeType: string): void {\n const blob = content instanceof Blob ? content : new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = filename\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n}\n\n/**\n * Exports data to CSV format\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param filename Name of the file to download (without extension)\n * @param includeHeaders Whether to include header row (default: true)\n */\nexport function exportToCSV<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n filename: string,\n includeHeaders: boolean = true\n): void {\n if (!data || data.length === 0) {\n throw new Error('No data to export')\n }\n\n if (!columns || columns.length === 0) {\n throw new Error('No columns specified for export')\n }\n\n const exportData = prepareExportData(data, columns, includeHeaders)\n const csv = arrayToCSV(exportData)\n\n downloadFile(csv, `${filename}.csv`, 'text/csv;charset=utf-8;')\n}\n\n/**\n * Exports data to Excel format (XLSX)\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param filename Name of the file to download (without extension)\n * @param includeHeaders Whether to include header row (default: true)\n */\nexport function exportToExcel<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n filename: string,\n includeHeaders: boolean = true\n): void {\n if (!data || data.length === 0) {\n throw new Error('No data to export')\n }\n\n if (!columns || columns.length === 0) {\n throw new Error('No columns specified for export')\n }\n\n const exportData = prepareExportData(data, columns, includeHeaders)\n\n // Create workbook and worksheet\n const ws = XLSX.utils.aoa_to_sheet(exportData)\n const wb = XLSX.utils.book_new()\n XLSX.utils.book_append_sheet(wb, ws, 'Data')\n\n // Auto-size columns\n const columnWidths = columns.map((column, idx) => {\n const header = getColumnHeader(column)\n const maxWidth = exportData.reduce((max, row) => {\n const cellValue = row[idx] || ''\n return Math.max(max, cellValue.length)\n }, header.length)\n return { wch: Math.min(maxWidth + 2, 50) } // Max width of 50 chars\n })\n ws['!cols'] = columnWidths\n\n // Generate Excel file and trigger download\n const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })\n const blob = new Blob([excelBuffer], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n })\n\n downloadFile(blob, `${filename}.xlsx`, blob.type)\n}\n\n/**\n * Generic export function that routes to CSV or Excel based on format\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param options Export options including format and filename\n */\nexport function exportData<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n options: ExportOptions\n): void {\n const { format, filename, includeHeaders = true } = options\n\n switch (format) {\n case 'csv':\n exportToCSV(data, columns, filename, includeHeaders)\n break\n case 'excel':\n exportToExcel(data, columns, filename, includeHeaders)\n break\n default:\n throw new Error(`Unsupported export format: ${format}`)\n }\n}\n\n/**\n * Helper to generate a filename with timestamp\n */\nexport function generateExportFilename(baseFilename: string): string {\n const now = new Date()\n const timestamp = now.toISOString().replace(/[:.]/g, '-').slice(0, -5)\n return `${baseFilename}_${timestamp}`\n}\n","'use client'\n\nimport { useState, useCallback } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { Download, FileSpreadsheet, FileText, Loader2 } from 'lucide-react'\nimport { ColumnConfig } from '../../types'\nimport { exportToCSV, exportToExcel, generateExportFilename } from '../../utils/export'\n\nexport type ExportScope = 'all' | 'filtered' | 'selected'\n\nexport interface ExportButtonProps<TData> {\n data: TData[]\n filteredData?: TData[]\n selectedData?: TData[]\n columns: ColumnConfig<TData>[]\n baseFilename?: string\n disabled?: boolean\n className?: string\n showProgress?: boolean\n onExportStart?: (format: 'csv' | 'excel', scope: ExportScope) => void\n onExportComplete?: (format: 'csv' | 'excel', scope: ExportScope, rowCount: number) => void\n onExportError?: (error: Error) => void\n}\n\nexport function ExportButton<TData>({\n data,\n filteredData,\n selectedData,\n columns,\n baseFilename = 'export',\n disabled = false,\n className,\n showProgress = true,\n onExportStart,\n onExportComplete,\n onExportError,\n}: ExportButtonProps<TData>) {\n const [isExporting, setIsExporting] = useState(false)\n const [progress, setProgress] = useState(0)\n\n // Determine what export options are available\n const hasFilteredData = filteredData && filteredData.length > 0 && filteredData.length < data.length\n const hasSelectedData = selectedData && selectedData.length > 0\n\n const handleExport = useCallback(\n async (format: 'csv' | 'excel', scope: ExportScope) => {\n setIsExporting(true)\n setProgress(0)\n\n try {\n onExportStart?.(format, scope)\n\n // Determine which data to export\n let dataToExport: TData[]\n let scopeLabel: string\n\n switch (scope) {\n case 'selected':\n if (!selectedData || selectedData.length === 0) {\n throw new Error('No rows selected')\n }\n dataToExport = selectedData\n scopeLabel = 'selected'\n break\n case 'filtered':\n if (!filteredData || filteredData.length === 0) {\n throw new Error('No filtered data available')\n }\n dataToExport = filteredData\n scopeLabel = 'filtered'\n break\n case 'all':\n default:\n dataToExport = data\n scopeLabel = 'all'\n break\n }\n\n // Simulate progress for large datasets\n if (showProgress && dataToExport.length > 100) {\n setProgress(25)\n await new Promise(resolve => setTimeout(resolve, 100))\n setProgress(50)\n }\n\n // Generate filename with timestamp and scope\n const filename = `${baseFilename}_${scopeLabel}_${generateExportFilename('')}`.replace(\n /__/g,\n '_'\n )\n\n // Export based on format\n if (format === 'csv') {\n exportToCSV(dataToExport, columns, filename)\n } else {\n exportToExcel(dataToExport, columns, filename)\n }\n\n if (showProgress) {\n setProgress(100)\n }\n\n onExportComplete?.(format, scope, dataToExport.length)\n } catch (error) {\n console.error('Export failed:', error)\n const errorObj = error instanceof Error ? error : new Error('Export failed')\n onExportError?.(errorObj)\n } finally {\n // Reset state after a brief delay to show completion\n if (showProgress) {\n setTimeout(() => {\n setIsExporting(false)\n setProgress(0)\n }, 500)\n } else {\n setIsExporting(false)\n setProgress(0)\n }\n }\n },\n [\n data,\n filteredData,\n selectedData,\n columns,\n baseFilename,\n showProgress,\n onExportStart,\n onExportComplete,\n onExportError,\n ]\n )\n\n const isDisabled = disabled || isExporting || data.length === 0\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={isDisabled}\n className={className}\n aria-label=\"Export data\"\n >\n {isExporting ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Exporting{showProgress && progress > 0 ? ` ${progress}%` : '...'}\n </>\n ) : (\n <>\n <Download className=\"mr-2 h-4 w-4\" />\n Export\n </>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n {/* CSV Export Options */}\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">CSV Format</div>\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'all')}\n disabled={isExporting || data.length === 0}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export All ({data.length} rows)\n </DropdownMenuItem>\n {hasFilteredData && (\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'filtered')}\n disabled={isExporting}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export Filtered ({filteredData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n {hasSelectedData && (\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'selected')}\n disabled={isExporting}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export Selected ({selectedData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n\n <DropdownMenuSeparator />\n\n {/* Excel Export Options */}\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">\n Excel Format\n </div>\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'all')}\n disabled={isExporting || data.length === 0}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export All ({data.length} rows)\n </DropdownMenuItem>\n {hasFilteredData && (\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'filtered')}\n disabled={isExporting}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export Filtered ({filteredData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n {hasSelectedData && (\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'selected')}\n disabled={isExporting}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export Selected ({selectedData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-4 sm:p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg max-h-[95vh] max-sm:max-h-[90vh] max-sm:m-4 max-sm:w-[calc(100%-2rem)] overflow-hidden\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-3 top-3 sm:right-4 sm:top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground min-h-[44px] min-w-[44px] flex items-center justify-center\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 space-y-2 space-y-reverse sm:space-y-0\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}","'use client'\n\nimport { useState } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '../../../ui/dialog'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { BookmarkPlus, ChevronDown, Check, Trash2, Star } from 'lucide-react'\nimport { SavedView } from '../../types'\nimport { cn } from '../../../../lib/utils'\n\nexport interface SavedViewsDropdownProps {\n views: SavedView[]\n currentViewId?: string | null\n onSaveView: (view: Omit<SavedView, 'id' | 'createdAt'>) => Promise<SavedView>\n onUpdateView?: (viewId: string, updates: Partial<SavedView>) => Promise<void>\n onDeleteView?: (viewId: string) => Promise<void>\n onLoadView: (viewId: string) => void\n // Current state to save\n getCurrentViewState: () => Omit<SavedView, 'id' | 'name' | 'createdAt'>\n}\n\nexport function SavedViewsDropdown({\n views,\n currentViewId,\n onSaveView,\n onUpdateView,\n onDeleteView,\n onLoadView,\n getCurrentViewState,\n}: SavedViewsDropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [isSaveDialogOpen, setIsSaveDialogOpen] = useState(false)\n const [viewName, setViewName] = useState('')\n const [isDefault, setIsDefault] = useState(false)\n const [isSaving, setIsSaving] = useState(false)\n const [deleteConfirmId, setDeleteConfirmId] = useState<string | null>(null)\n\n const currentView = views.find(v => v.id === currentViewId)\n\n const handleSaveView = async () => {\n if (!viewName.trim()) return\n\n setIsSaving(true)\n try {\n const viewState = getCurrentViewState()\n await onSaveView({\n name: viewName.trim(),\n isDefault,\n ...viewState,\n })\n setIsSaveDialogOpen(false)\n setViewName('')\n setIsDefault(false)\n } catch (error) {\n console.error('Failed to save view:', error)\n } finally {\n setIsSaving(false)\n }\n }\n\n const handleDeleteView = async (viewId: string) => {\n if (!onDeleteView) return\n\n try {\n await onDeleteView(viewId)\n setDeleteConfirmId(null)\n } catch (error) {\n console.error('Failed to delete view:', error)\n }\n }\n\n const handleSetDefault = async (viewId: string) => {\n if (!onUpdateView) return\n\n try {\n // Remove default from all other views\n for (const view of views) {\n if (view.isDefault && view.id !== viewId) {\n await onUpdateView(view.id, { isDefault: false })\n }\n }\n // Set this view as default\n await onUpdateView(viewId, { isDefault: true })\n } catch (error) {\n console.error('Failed to set default view:', error)\n }\n }\n\n return (\n <>\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <BookmarkPlus className=\"mr-2 h-4 w-4\" />\n {currentView ? currentView.name : 'Views'}\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <DropdownMenuLabel>Saved Views</DropdownMenuLabel>\n <DropdownMenuSeparator />\n\n {views.length === 0 ? (\n <DropdownMenuItem disabled>\n No saved views\n </DropdownMenuItem>\n ) : (\n views.map((view) => (\n <DropdownMenuItem\n key={view.id}\n className=\"flex items-center justify-between cursor-pointer\"\n onSelect={(e) => {\n e.preventDefault()\n if (deleteConfirmId === view.id) return\n onLoadView(view.id)\n setIsOpen(false)\n }}\n >\n <div className=\"flex items-center gap-2\">\n {currentViewId === view.id && (\n <Check className=\"h-4 w-4 text-primary\" />\n )}\n {currentViewId !== view.id && <div className=\"w-4\" />}\n <span>{view.name}</span>\n {view.isDefault && (\n <Star className=\"h-3 w-3 text-yellow-500 fill-yellow-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n {onUpdateView && !view.isDefault && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleSetDefault(view.id)\n }}\n className=\"p-1 hover:bg-muted rounded opacity-50 hover:opacity-100\"\n title=\"Set as default\"\n >\n <Star className=\"h-3 w-3\" />\n </button>\n )}\n {onDeleteView && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n if (deleteConfirmId === view.id) {\n handleDeleteView(view.id)\n } else {\n setDeleteConfirmId(view.id)\n setTimeout(() => setDeleteConfirmId(null), 3000)\n }\n }}\n className={cn(\n 'p-1 hover:bg-muted rounded',\n deleteConfirmId === view.id\n ? 'text-red-600 hover:text-red-700'\n : 'opacity-50 hover:opacity-100'\n )}\n title={deleteConfirmId === view.id ? 'Click again to confirm' : 'Delete view'}\n >\n <Trash2 className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n </DropdownMenuItem>\n ))\n )}\n\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={(e) => {\n e.preventDefault()\n setIsSaveDialogOpen(true)\n setIsOpen(false)\n }}\n >\n <BookmarkPlus className=\"mr-2 h-4 w-4\" />\n Save Current View\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Dialog open={isSaveDialogOpen} onOpenChange={setIsSaveDialogOpen}>\n <DialogContent className=\"sm:max-w-[425px]\">\n <DialogHeader>\n <DialogTitle>Save View</DialogTitle>\n <DialogDescription>\n Save your current table configuration as a named view.\n </DialogDescription>\n </DialogHeader>\n <div className=\"grid gap-4 py-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"view-name\">View Name</Label>\n <Input\n id=\"view-name\"\n value={viewName}\n onChange={(e) => setViewName(e.target.value)}\n placeholder=\"My Custom View\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleSaveView()\n }}\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"is-default\"\n checked={isDefault}\n onCheckedChange={(checked) => setIsDefault(checked === true)}\n />\n <Label htmlFor=\"is-default\" className=\"cursor-pointer\">\n Set as default view\n </Label>\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setIsSaveDialogOpen(false)}\n disabled={isSaving}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSaveView}\n disabled={!viewName.trim() || isSaving}\n >\n {isSaving ? 'Saving...' : 'Save View'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","'use client'\n\nimport { Input } from '../../../ui/input'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuCheckboxItem,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { Columns3, ChevronDown } from 'lucide-react'\nimport { cn } from '../../../../lib/utils'\nimport { ExportButton, ExportButtonProps } from './ExportButton'\nimport { SavedViewsDropdown, SavedViewsDropdownProps } from './SavedViewsDropdown'\nimport { ColumnConfig, ColumnVisibilityState, SavedView } from '../../types'\nimport { RefObject } from 'react'\n\nexport interface StandardTableToolbarProps<TData> {\n // Search\n searchEnabled?: boolean\n searchPlaceholder?: string\n searchValue?: string\n onSearchChange?: (value: string) => void\n searchInputRef?: RefObject<HTMLInputElement | null>\n searchAutoFocus?: boolean\n\n // Column visibility\n columnVisibilityEnabled?: boolean\n hideableColumns?: ColumnConfig<TData>[]\n columnVisibility?: ColumnVisibilityState\n onToggleColumnVisibility?: (columnId: string) => void\n\n // Export\n exportEnabled?: boolean\n exportProps?: Omit<ExportButtonProps<TData>, 'data' | 'columns'>\n exportData?: TData[]\n exportColumns?: ColumnConfig<TData>[]\n\n // Saved views\n savedViewsEnabled?: boolean\n savedViews?: SavedView[]\n currentViewId?: string | null\n savedViewsProps?: Omit<SavedViewsDropdownProps, 'views' | 'currentViewId'>\n\n className?: string\n}\n\n/**\n * StandardTableToolbar provides a consistent toolbar layout across all tables.\n *\n * Layout (left to right):\n * - Search input (left)\n * - Export button\n * - Columns dropdown (right)\n */\nexport function StandardTableToolbar<TData>({\n searchEnabled,\n searchPlaceholder = 'Search...',\n searchValue = '',\n onSearchChange,\n searchInputRef,\n searchAutoFocus,\n columnVisibilityEnabled,\n hideableColumns = [],\n columnVisibility = {},\n onToggleColumnVisibility,\n exportEnabled,\n exportProps,\n exportData = [],\n exportColumns = [],\n savedViewsEnabled,\n savedViews = [],\n currentViewId,\n savedViewsProps,\n className,\n}: StandardTableToolbarProps<TData>) {\n const hasRightSideButtons = exportEnabled || columnVisibilityEnabled || savedViewsEnabled\n\n return (\n <div className={cn('flex items-center justify-between gap-4', className)}>\n {/* Left side: Search */}\n <div className=\"flex items-center gap-3 flex-1\">\n {searchEnabled ? (\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={(e) => onSearchChange?.(e.target.value)}\n ref={searchInputRef}\n autoFocus={searchAutoFocus}\n className=\"max-w-xl w-full\"\n />\n ) : (\n <div /> // Spacer\n )}\n </div>\n\n {/* Right side: Toolbar buttons */}\n {hasRightSideButtons && (\n <div className=\"flex items-center gap-2\">\n {/* Export button */}\n {exportEnabled && exportProps && (\n <ExportButton\n data={exportData}\n columns={exportColumns}\n {...exportProps}\n />\n )}\n\n {/* Column visibility dropdown */}\n {columnVisibilityEnabled && hideableColumns.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <Columns3 className=\"mr-2 h-4 w-4\" />\n Columns\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {hideableColumns.map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={columnVisibility[column.id] !== false}\n onCheckedChange={() => onToggleColumnVisibility?.(column.id)}\n >\n {typeof column.header === 'string' ? column.header : column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {/* Saved views dropdown */}\n {savedViewsEnabled && savedViewsProps && (\n <SavedViewsDropdown\n views={savedViews}\n currentViewId={currentViewId}\n {...savedViewsProps}\n />\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useMemo, useRef, useState, useCallback } from 'react'\nimport { UnifiedTableProps, ColumnVisibilityState, SortState, SavedView } from './types'\nimport { useSelection, usePagination, useFilters, useTableURL, useColumnReorder, useColumnResize } from './hooks'\nimport { useTableKeyboard } from './hooks/useTableKeyboard'\nimport { TableFilters } from './components/TableFilters'\nimport { BulkActionBar } from './components/BulkActionBar'\nimport { DataTableCore } from './components/DataTableCore'\nimport { TablePagination } from './components/TablePagination'\nimport { StandardTableToolbar } from './components/Toolbar'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '../../utils'\n\nexport function UnifiedTable<TData>({\n data,\n columns,\n tableId,\n getRowId,\n pagination: paginationConfig,\n selection: selectionConfig,\n filters: filtersConfig,\n bulkActions = [],\n rowActions = [],\n search: searchConfig,\n sorting: sortingConfig,\n columnVisibility: columnVisibilityConfig,\n columnReorder: columnReorderConfig,\n columnResize: columnResizeConfig,\n inlineEdit: inlineEditConfig,\n savedViews: savedViewsConfig,\n urlPersistence: urlPersistenceConfig,\n export: exportConfig,\n onRowClick,\n mobileConfig,\n loading = false,\n loadingRows = new Set(),\n className,\n emptyState,\n errorState,\n}: UnifiedTableProps<TData>) {\n const searchInputRef = useRef<HTMLInputElement | null>(null)\n const shouldRestoreFocusRef = useRef(false)\n const tableRef = useRef<HTMLDivElement>(null)\n\n // URL state persistence hook\n const urlState = useTableURL({\n tableId,\n persistToUrl: urlPersistenceConfig?.enabled ?? false,\n debounceMs: urlPersistenceConfig?.debounceMs ?? 300,\n })\n\n // Initialize state from URL if persistence is enabled\n const initialURLState = useMemo(() => {\n if (!urlPersistenceConfig?.enabled) return null\n return urlState.getURLState()\n }, []) // Only run once on mount\n\n // Column visibility state\n const [columnVisibility, setColumnVisibility] = useState<ColumnVisibilityState>(() => {\n // Try to load from localStorage if persistKey is set\n if (columnVisibilityConfig?.persistKey && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(`table-columns-${columnVisibilityConfig.persistKey}`)\n if (stored) {\n return JSON.parse(stored)\n }\n } catch {\n // Ignore localStorage errors\n }\n }\n\n // Initialize default visibility\n const initial: ColumnVisibilityState = {}\n columns.forEach(col => {\n if (columnVisibilityConfig?.defaultVisible) {\n initial[col.id] = columnVisibilityConfig.defaultVisible.includes(col.id)\n } else {\n initial[col.id] = true // Default all visible\n }\n })\n return initial\n })\n\n // Client-side sorting state (used when no external sorting config is provided)\n const [localSort, setLocalSort] = useState<SortState>(() => {\n // Initialize from URL if available\n if (initialURLState) {\n return {\n sortBy: initialURLState.sortBy,\n sortDirection: initialURLState.sortDirection,\n }\n }\n return { sortBy: null, sortDirection: 'asc' }\n })\n\n // Persist column visibility\n useEffect(() => {\n if (columnVisibilityConfig?.persistKey && typeof window !== 'undefined') {\n try {\n localStorage.setItem(\n `table-columns-${columnVisibilityConfig.persistKey}`,\n JSON.stringify(columnVisibility)\n )\n } catch {\n // Ignore localStorage errors\n }\n }\n }, [columnVisibility, columnVisibilityConfig?.persistKey])\n\n // Toggle column visibility\n const toggleColumnVisibility = useCallback((columnId: string) => {\n // Don't allow toggling always-visible columns\n if (columnVisibilityConfig?.alwaysVisible?.includes(columnId)) {\n return\n }\n setColumnVisibility(prev => ({\n ...prev,\n [columnId]: !prev[columnId]\n }))\n }, [columnVisibilityConfig?.alwaysVisible])\n\n // Filter visible columns\n const visibleColumns = useMemo(() => {\n if (!columnVisibilityConfig?.enabled) {\n return columns\n }\n return columns.filter(col => columnVisibility[col.id] !== false)\n }, [columns, columnVisibility, columnVisibilityConfig?.enabled])\n\n // Get hideable columns for the dropdown\n const hideableColumns = useMemo(() => {\n return columns.filter(col => {\n // Can't hide if hideable is explicitly false\n if (col.hideable === false) return false\n // Can't hide if in alwaysVisible list\n if (columnVisibilityConfig?.alwaysVisible?.includes(col.id)) return false\n return true\n })\n }, [columns, columnVisibilityConfig?.alwaysVisible])\n\n // Column reordering hook\n const columnReorder = useColumnReorder({\n columns: visibleColumns,\n initialOrder: columnReorderConfig?.initialOrder,\n enabled: columnReorderConfig?.enabled ?? false,\n onOrderChange: columnReorderConfig?.onOrderChange,\n })\n\n // Final columns to display (ordered if reorder enabled)\n const displayColumns = columnReorderConfig?.enabled\n ? columnReorder.orderedColumns\n : visibleColumns\n\n // Column resize hook\n const columnResize = useColumnResize({\n enabled: columnResizeConfig?.enabled ?? false,\n initialWidths: columnResizeConfig?.initialWidths,\n minWidth: columnResizeConfig?.minWidth ?? 50,\n onWidthChange: columnResizeConfig?.onWidthChange,\n })\n\n // Determine sorting state and handler\n const sortingEnabled = sortingConfig?.enabled ?? true // Default to enabled\n const currentSortBy = sortingConfig?.value?.sortBy ?? localSort.sortBy\n const currentSortDirection = sortingConfig?.value?.sortDirection ?? localSort.sortDirection\n\n const handleSort = useCallback((columnId: string) => {\n const newDirection = currentSortBy === columnId && currentSortDirection === 'asc' ? 'desc' : 'asc'\n const newSort = { sortBy: columnId, sortDirection: newDirection as 'asc' | 'desc' }\n\n if (sortingConfig?.onChange) {\n sortingConfig.onChange(newSort)\n } else {\n setLocalSort(newSort)\n }\n\n // Sync to URL if enabled\n urlState.setSortToURL(newSort)\n }, [currentSortBy, currentSortDirection, sortingConfig, urlState])\n\n // Ensure data is always an array\n const safeData = useMemo(() => Array.isArray(data) ? data : [], [data])\n\n // Apply client-side sorting if no server-side sorting\n const sortedData = useMemo(() => {\n if (sortingConfig?.serverSide || !currentSortBy) {\n return safeData\n }\n\n const column = columns.find(c => c.id === currentSortBy)\n if (!column) return safeData\n\n return [...safeData].sort((a, b) => {\n let valueA: any\n let valueB: any\n\n if (column.sortingFn) {\n return currentSortDirection === 'asc'\n ? column.sortingFn(a, b)\n : column.sortingFn(b, a)\n }\n\n if (column.accessorFn) {\n valueA = column.accessorFn(a)\n valueB = column.accessorFn(b)\n } else if (column.accessorKey) {\n // Handle nested keys like 'firm.name'\n const keys = column.accessorKey.split('.')\n valueA = keys.reduce((obj, key) => obj?.[key], a as any)\n valueB = keys.reduce((obj, key) => obj?.[key], b as any)\n } else {\n return 0\n }\n\n // Handle null/undefined\n if (valueA == null && valueB == null) return 0\n if (valueA == null) return currentSortDirection === 'asc' ? 1 : -1\n if (valueB == null) return currentSortDirection === 'asc' ? -1 : 1\n\n // Compare\n if (typeof valueA === 'string' && typeof valueB === 'string') {\n const comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'base' })\n return currentSortDirection === 'asc' ? comparison : -comparison\n }\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return currentSortDirection === 'asc' ? valueA - valueB : valueB - valueA\n }\n\n const comparison = String(valueA).localeCompare(String(valueB))\n return currentSortDirection === 'asc' ? comparison : -comparison\n })\n }, [safeData, columns, currentSortBy, currentSortDirection, sortingConfig?.serverSide])\n\n // Pagination hook\n const pagination = usePagination({\n totalCount: paginationConfig?.totalCount || sortedData.length,\n initialPageSize: paginationConfig?.pageSize || 25,\n initialPage: paginationConfig?.currentPage || (initialURLState?.page ?? 1),\n serverSide: paginationConfig?.serverSide || false,\n onPageChange: paginationConfig?.onPageChange,\n })\n\n // Selection hook - supports both controlled and uncontrolled modes\n const selection = useSelection({\n currentPageData: sortedData,\n totalCount: paginationConfig?.totalCount || sortedData.length,\n getRowId,\n onSelectionChange: selectionConfig?.onSelectionChange,\n onSelectAllPages: selectionConfig?.onSelectAllPages,\n // External controlled state\n externalSelectedIds: selectionConfig?.selectedIds,\n externalSelectAllPages: selectionConfig?.selectAllPages,\n })\n\n // Filters hook\n const filters = useFilters({\n initialFilters: filtersConfig?.value || (initialURLState?.filters ?? {}),\n onChange: filtersConfig?.onChange,\n })\n\n // Get current view state for saving\n const getCurrentViewState = useCallback((): Omit<SavedView, 'id' | 'name' | 'createdAt'> => {\n return {\n columnVisibility: columnVisibilityConfig?.enabled ? columnVisibility : undefined,\n columnOrder: columnReorderConfig?.enabled ? columnReorder.columnOrder : undefined,\n sortBy: currentSortBy,\n sortDirection: currentSortDirection,\n filters: filtersConfig?.enabled ? filters.filters : undefined,\n pageSize: paginationConfig?.pageSize,\n }\n }, [\n columnVisibility,\n columnVisibilityConfig?.enabled,\n columnReorder.columnOrder,\n columnReorderConfig?.enabled,\n currentSortBy,\n currentSortDirection,\n filters.filters,\n filtersConfig?.enabled,\n paginationConfig?.pageSize,\n ])\n\n // Keyboard navigation hook\n const keyboard = useTableKeyboard({\n data: sortedData,\n getRowId,\n selectedIds: selection.selectedIds,\n onToggleRow: selection.toggleRow,\n onToggleAll: selection.toggleAll,\n onRowClick,\n onDelete: bulkActions.find(action => action.id === 'delete')?.onClick\n ? (ids) => {\n const deleteAction = bulkActions.find(action => action.id === 'delete')\n if (deleteAction) {\n deleteAction.onClick(ids)\n }\n }\n : undefined,\n tableRef,\n enabled: true,\n })\n\n // Restore focus to search input after state-driven rerenders (e.g., URL sync)\n useEffect(() => {\n if (!searchConfig?.enabled || !searchConfig.preserveFocus) return\n if (!shouldRestoreFocusRef.current) return\n if (searchInputRef.current) {\n searchInputRef.current.focus()\n const len = searchConfig.value?.length ?? 0\n try {\n searchInputRef.current.setSelectionRange(len, len)\n } catch {\n // selection range may fail on some input types; ignore\n }\n }\n shouldRestoreFocusRef.current = false\n }, [searchConfig?.enabled, searchConfig?.preserveFocus, searchConfig?.value])\n\n // External selection state is now synced in useSelection hook\n\n // Sync pagination changes to URL\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!paginationConfig?.enabled) return\n\n urlState.setPageToURL(pagination.currentPage)\n }, [pagination.currentPage, urlPersistenceConfig?.enabled, paginationConfig?.enabled, urlState])\n\n // Sync filter changes to URL\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!filtersConfig?.enabled) return\n\n urlState.setFiltersToURL(filters.filters)\n }, [filters.filters, urlPersistenceConfig?.enabled, filtersConfig?.enabled, urlState])\n\n // Initialize search from URL on mount\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!searchConfig?.enabled) return\n if (!initialURLState?.search) return\n\n // Only set if search value is empty (first mount)\n if (!searchConfig.value && initialURLState.search) {\n searchConfig.onChange(initialURLState.search)\n }\n }, []) // Only run on mount\n\n // Check if all current page rows are selected\n const allRowsSelected = useMemo(() => {\n if (sortedData.length === 0) return false\n return sortedData.every(row => selection.selectedIds.has(getRowId(row)))\n }, [sortedData, selection.selectedIds, getRowId])\n\n // Prepare selected data for export\n const selectedDataForExport = useMemo(() => {\n if (!selectionConfig?.enabled || selection.selectedIds.size === 0) {\n return undefined\n }\n return sortedData.filter(row => selection.selectedIds.has(getRowId(row)))\n }, [sortedData, selection.selectedIds, getRowId, selectionConfig?.enabled])\n\n // Handle bulk action execution\n const handleExecuteBulkAction = async (action: typeof bulkActions[0]) => {\n const selectedIds = selection.selectAllPages\n ? new Set(sortedData.map(getRowId)) // In real implementation, this would fetch all IDs\n : selection.selectedIds\n\n // Show confirmation if needed\n if (action.confirmMessage) {\n const message = action.confirmMessage.replace('{count}', selectedIds.size.toString())\n if (!confirm(message)) {\n return\n }\n }\n\n // Check max selection\n if (action.maxSelection && selectedIds.size > action.maxSelection) {\n alert(`Maximum ${action.maxSelection} items can be selected for this action`)\n return\n }\n\n try {\n await action.onClick(selectedIds)\n // Clear selection after successful action\n selection.clearSelection()\n } catch (error) {\n console.error('Bulk action failed:', error)\n }\n }\n\n // Loading state\n if (loading && sortedData.length === 0) {\n return (\n <div className={cn('flex items-center justify-center p-12', className)}>\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n )\n }\n\n // Empty state\n if (!loading && sortedData.length === 0 && emptyState) {\n return <div className={className}>{emptyState}</div>\n }\n\n return (\n <div ref={tableRef} className={cn('space-y-4', className)} tabIndex={0}>\n {/* Standard Table Toolbar */}\n <StandardTableToolbar\n searchEnabled={searchConfig?.enabled}\n searchPlaceholder={searchConfig?.placeholder}\n searchValue={searchConfig?.value}\n onSearchChange={(value) => {\n if (searchConfig) {\n shouldRestoreFocusRef.current = true\n searchConfig.onChange(value)\n urlState.setSearchToURL(value)\n }\n }}\n searchInputRef={searchInputRef}\n searchAutoFocus={searchConfig?.autoFocus}\n columnVisibilityEnabled={columnVisibilityConfig?.enabled}\n hideableColumns={hideableColumns}\n columnVisibility={columnVisibility}\n onToggleColumnVisibility={toggleColumnVisibility}\n exportEnabled={exportConfig?.enabled}\n exportData={sortedData}\n exportColumns={displayColumns}\n exportProps={exportConfig?.enabled ? {\n filteredData: sortedData.length < safeData.length ? sortedData : undefined,\n selectedData: selectedDataForExport,\n baseFilename: exportConfig.baseFilename,\n showProgress: exportConfig.showProgress,\n onExportStart: exportConfig.onExportStart,\n onExportComplete: exportConfig.onExportComplete,\n onExportError: exportConfig.onExportError,\n } : undefined}\n savedViewsEnabled={savedViewsConfig?.enabled}\n savedViews={savedViewsConfig?.views}\n currentViewId={savedViewsConfig?.currentViewId}\n savedViewsProps={savedViewsConfig?.enabled ? {\n onSaveView: savedViewsConfig.onSaveView,\n onUpdateView: savedViewsConfig.onUpdateView,\n onDeleteView: savedViewsConfig.onDeleteView,\n onLoadView: savedViewsConfig.onLoadView || (() => {}),\n getCurrentViewState,\n } : undefined}\n />\n\n {/* Filters */}\n {filtersConfig?.enabled && filtersConfig.config && (\n <TableFilters config={filtersConfig.config} filters={filters} />\n )}\n\n {/* Bulk Actions Bar */}\n {selectionConfig?.enabled && bulkActions.length > 0 && (\n <BulkActionBar\n selectedCount={selection.getSelectedCount()}\n selectAllPages={selection.selectAllPages}\n totalCount={paginationConfig?.totalCount || sortedData.length}\n bulkActions={bulkActions}\n onClearSelection={selection.clearSelection}\n onExecuteAction={handleExecuteBulkAction}\n />\n )}\n\n {/* Selection summary - only show when no bulk actions (BulkActionBar handles this otherwise) */}\n {selectionConfig?.enabled && selection.getSelectedCount() > 0 && bulkActions.length === 0 && (\n <div className=\"flex items-center justify-between text-sm text-muted-foreground\">\n <div>\n {selection.selectAllPages ? (\n <span className=\"font-medium text-blue-600\">\n All {paginationConfig?.totalCount || sortedData.length} items selected\n </span>\n ) : (\n <span>\n {selection.getSelectedCount()} item{selection.getSelectedCount() === 1 ? '' : 's'} selected{allRowsSelected ? ' on this page' : ''}\n </span>\n )}\n </div>\n\n {/* Show \"Select All Pages\" button if not all pages selected and there are multiple pages */}\n {!selection.selectAllPages &&\n allRowsSelected &&\n paginationConfig &&\n (paginationConfig.totalCount || 0) > sortedData.length && (\n <button\n onClick={selection.selectAllPagesToggle}\n className=\"text-blue-600 hover:text-blue-800 font-medium\"\n >\n Select all {paginationConfig.totalCount} items\n </button>\n )}\n </div>\n )}\n\n {/* Select all pages option - shown below bulk action bar when applicable */}\n {selectionConfig?.enabled &&\n bulkActions.length > 0 &&\n !selection.selectAllPages &&\n allRowsSelected &&\n paginationConfig &&\n (paginationConfig.totalCount || 0) > sortedData.length && (\n <div className=\"flex items-center justify-center p-2 bg-blue-50 border border-blue-200 rounded-lg\">\n <button\n onClick={selection.selectAllPagesToggle}\n className=\"text-blue-600 hover:text-blue-800 font-medium text-sm\"\n >\n Select all {paginationConfig.totalCount} items across all pages\n </button>\n </div>\n )}\n\n {/* Data Table */}\n <DataTableCore\n data={sortedData}\n columns={displayColumns}\n getRowId={getRowId}\n selectionEnabled={selectionConfig?.enabled}\n selectedIds={selection.selectedIds}\n onToggleRow={selection.toggleRow}\n onToggleAll={selection.toggleAll}\n allRowsSelected={allRowsSelected}\n renderSelectionCell={selectionConfig?.renderSelectionCell}\n sortingEnabled={sortingEnabled}\n sortBy={currentSortBy}\n sortDirection={currentSortDirection}\n onSort={handleSort}\n columnReorderEnabled={columnReorderConfig?.enabled}\n onColumnDragEnd={columnReorder.handleDragEnd}\n columnResizeEnabled={columnResizeConfig?.enabled}\n columnWidths={columnResize.columnWidths}\n onColumnResizeStart={columnResize.startResize}\n isResizing={columnResize.isResizing}\n inlineEditEnabled={inlineEditConfig?.enabled}\n onCellEdit={inlineEditConfig?.onSave}\n rowActions={rowActions}\n onRowClick={onRowClick}\n loadingRows={loadingRows}\n />\n\n {/* Pagination */}\n {paginationConfig?.enabled && (\n <TablePagination\n pagination={pagination}\n totalFilteredCount={paginationConfig.totalCount}\n />\n )}\n </div>\n )\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }","'use client'\n\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { cn } from '../../../../lib/utils'\nimport { MoreVertical } from 'lucide-react'\nimport { useState } from 'react'\nimport { CardActionsProps } from './types'\n\nexport function CardActions({\n actions,\n row,\n className,\n maxVisibleActions = 2\n}: CardActionsProps) {\n const [isExecuting, setIsExecuting] = useState<string | null>(null)\n\n const visibleActions = actions.filter((action) => {\n return !(action.hidden && action.hidden(row))\n })\n\n if (visibleActions.length === 0) {\n return null\n }\n\n const handleActionClick = async (action: any) => {\n if (action.disabled && action.disabled(row)) {\n return\n }\n\n setIsExecuting(action.id)\n try {\n await action.onClick(row)\n } finally {\n setIsExecuting(null)\n }\n }\n\n const primaryActions = visibleActions.slice(0, maxVisibleActions)\n const overflowActions = visibleActions.slice(maxVisibleActions)\n\n return (\n <div className={cn('flex items-center gap-1', className)}>\n {primaryActions.map((action) => {\n const Icon = action.icon\n const isDisabled = action.disabled ? action.disabled(row) : false\n const isLoading = isExecuting === action.id\n\n return (\n <Button\n key={action.id}\n variant={action.variant || 'ghost'}\n size=\"sm\"\n className={cn(\n 'h-9 min-w-[44px]',\n Icon && !action.label && 'w-9 p-0',\n action.className\n )}\n onClick={(e) => {\n e.stopPropagation()\n handleActionClick(action)\n }}\n disabled={isDisabled || isLoading}\n >\n {Icon && (\n <Icon className={cn(\n 'h-4 w-4',\n action.label && 'mr-1.5'\n )} />\n )}\n {action.label && (\n <span className=\"text-xs font-medium\">{action.label}</span>\n )}\n </Button>\n )\n })}\n\n {overflowActions.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0\"\n onClick={(e) => e.stopPropagation()}\n >\n <MoreVertical className=\"h-4 w-4\" />\n <span className=\"sr-only\">More actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {overflowActions.map((action, index) => {\n const Icon = action.icon\n const isDisabled = action.disabled ? action.disabled(row) : false\n const isLoading = isExecuting === action.id\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={(e) => {\n e.stopPropagation()\n handleActionClick(action)\n }}\n disabled={isDisabled || isLoading}\n className={cn(\n action.variant === 'destructive' && 'text-destructive focus:text-destructive',\n action.className\n )}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{action.label || 'Action'}</span>\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Card as UICard, CardContent, CardHeader, CardFooter } from '../../../ui/card'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { cn } from '../../../../lib/utils'\nimport { Loader2 } from 'lucide-react'\nimport { CardProps, MobileCardField } from './types'\nimport { CardActions } from './CardActions'\n\nfunction getNestedValue(obj: any, path: string): any {\n if (!path || !obj) return obj\n\n const keys = path.split('.')\n let value = obj\n\n for (const key of keys) {\n if (value === null || value === undefined) return undefined\n value = value[key]\n }\n\n return value\n}\n\nfunction renderField(field: MobileCardField, row: any) {\n const value = getNestedValue(row, field.key)\n\n if (field.render) {\n return field.render(value, row)\n }\n\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground\">-</span>\n }\n\n if (typeof value === 'boolean') {\n return <span>{value ? 'Yes' : 'No'}</span>\n }\n\n return <span>{String(value)}</span>\n}\n\nexport function Card<TData = any>({\n row,\n config,\n rowId,\n isLoading = false,\n className\n}: CardProps<TData>) {\n const {\n titleKey,\n titleRender,\n subtitleKey,\n subtitleRender,\n imageKey,\n imageRender,\n primaryFields,\n secondaryFields,\n actions,\n renderCustomContent,\n renderCustomHeader,\n renderCustomFooter,\n showSelection,\n onSelectionChange,\n isSelected,\n onClick,\n headerClassName,\n contentClassName,\n footerClassName,\n } = config\n\n const handleClick = () => {\n if (onClick && !isLoading) {\n onClick(row)\n }\n }\n\n const handleSelectionChange = (checked: boolean) => {\n if (onSelectionChange && rowId) {\n onSelectionChange(rowId, checked)\n }\n }\n\n const selected = isSelected ? isSelected(row) : false\n\n return (\n <UICard\n className={cn(\n 'relative transition-all duration-200',\n onClick && !isLoading && 'cursor-pointer hover:shadow-md hover:border-primary/50',\n selected && 'ring-2 ring-primary border-primary',\n isLoading && 'opacity-60 pointer-events-none',\n className,\n config.className\n )}\n onClick={handleClick}\n >\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-background/50 rounded-lg z-10\">\n <Loader2 className=\"h-6 w-6 animate-spin text-primary\" />\n </div>\n )}\n\n <CardHeader className={cn('pb-3', headerClassName)}>\n {renderCustomHeader ? (\n renderCustomHeader(row)\n ) : (\n <div className=\"flex items-start gap-3\">\n {showSelection && (\n <div\n className=\"flex items-center pt-1\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={selected}\n onCheckedChange={handleSelectionChange}\n aria-label=\"Select row\"\n className=\"h-5 w-5\"\n />\n </div>\n )}\n\n {(imageKey || imageRender) && (\n <div className=\"flex-shrink-0\">\n {imageRender ? imageRender(row) : (\n <div className=\"h-12 w-12 rounded-full bg-gradient-to-br from-primary/20 to-primary/10 flex items-center justify-center\">\n <span className=\"text-lg font-semibold text-primary\">\n {String(getNestedValue(row, titleKey) || '?').charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"font-semibold text-base leading-tight truncate\">\n {titleRender ? titleRender(row) : getNestedValue(row, titleKey)}\n </h3>\n {subtitleKey && (\n <p className=\"text-sm text-muted-foreground mt-1 truncate\">\n {subtitleRender ? subtitleRender(row) : getNestedValue(row, subtitleKey)}\n </p>\n )}\n </div>\n\n {actions && actions.length > 0 && (\n <div onClick={(e) => e.stopPropagation()}>\n <CardActions\n actions={actions}\n row={row}\n maxVisibleActions={2}\n />\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </CardHeader>\n\n <CardContent className={cn('pt-0 space-y-4', contentClassName)}>\n {renderCustomContent ? (\n renderCustomContent(row)\n ) : (\n <>\n {primaryFields && primaryFields.length > 0 && (\n <div className=\"space-y-3\">\n {primaryFields.map((field) => (\n <div\n key={field.key}\n className={cn(\n 'flex justify-between items-center gap-2',\n field.className\n )}\n >\n <span className=\"text-sm font-medium text-muted-foreground flex-shrink-0\">\n {field.label || field.key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase())}:\n </span>\n <div className=\"text-sm font-medium text-right truncate\">\n {renderField(field, row)}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {secondaryFields && secondaryFields.length > 0 && (\n <div className=\"border-t pt-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n {secondaryFields.map((field) => (\n <div\n key={field.key}\n className={cn('space-y-1', field.className)}\n >\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n {field.label || field.key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase())}\n </div>\n <div className=\"text-sm font-semibold truncate\">\n {renderField(field, row)}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n </CardContent>\n\n {renderCustomFooter && (\n <CardFooter className={cn('pt-0', footerClassName)}>\n {renderCustomFooter(row)}\n </CardFooter>\n )}\n </UICard>\n )\n}\n","import { ReactNode } from 'react'\n\nexport interface MobileCardField {\n key: string\n label?: string\n render?: (value: any, row: any) => ReactNode\n className?: string\n}\n\nexport interface MobileCardAction {\n id: string\n label: string\n icon?: React.ComponentType<{ className?: string }>\n onClick: (row: any) => void | Promise<void>\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\n disabled?: (row: any) => boolean\n hidden?: (row: any) => boolean\n className?: string\n}\n\nexport interface MobileCardConfig<TData = any> {\n titleKey: string\n titleRender?: (row: TData) => ReactNode\n\n subtitleKey?: string\n subtitleRender?: (row: TData) => ReactNode\n\n imageKey?: string\n imageRender?: (row: TData) => ReactNode\n\n primaryFields: MobileCardField[]\n secondaryFields?: MobileCardField[]\n\n actions?: MobileCardAction[]\n\n renderCustomContent?: (row: TData) => ReactNode\n renderCustomHeader?: (row: TData) => ReactNode\n renderCustomFooter?: (row: TData) => ReactNode\n\n showSelection?: boolean\n onSelectionChange?: (id: string, selected: boolean) => void\n isSelected?: (row: TData) => boolean\n\n onClick?: (row: TData) => void\n\n className?: string\n headerClassName?: string\n contentClassName?: string\n footerClassName?: string\n}\n\nexport interface MobileViewProps<TData = any> {\n data: TData[]\n config: MobileCardConfig<TData>\n getRowId?: (row: TData) => string\n loading?: boolean\n loadingRows?: Set<string>\n emptyState?: ReactNode\n className?: string\n}\n\nexport interface CardProps<TData = any> {\n row: TData\n config: MobileCardConfig<TData>\n rowId?: string\n isLoading?: boolean\n className?: string\n}\n\nexport interface CardActionsProps {\n actions: MobileCardAction[]\n row: any\n className?: string\n maxVisibleActions?: number\n}\n\nexport const MOBILE_BREAKPOINT = 768 // px\n","'use client'\n\nimport { cn } from '../../../../lib/utils'\nimport { useEffect, useState } from 'react'\nimport { Card } from './Card'\nimport { MobileViewProps, MOBILE_BREAKPOINT } from './types'\n\nexport function MobileView<TData = any>({\n data,\n config,\n getRowId,\n loading = false,\n loadingRows,\n emptyState,\n className\n}: MobileViewProps<TData>) {\n const [isMobile, setIsMobile] = useState(false)\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n\n checkMobile()\n window.addEventListener('resize', checkMobile)\n return () => window.removeEventListener('resize', checkMobile)\n }, [])\n\n if (data.length === 0 && !loading) {\n return (\n <div className={cn('flex items-center justify-center py-12', className)}>\n {emptyState || (\n <div className=\"text-center\">\n <p className=\"text-muted-foreground text-sm\">No data to display</p>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\n 'space-y-4',\n isMobile && 'space-y-3',\n className\n )}\n >\n {data.map((row, index) => {\n const rowId = getRowId ? getRowId(row) : String(index)\n const isRowLoading = loadingRows?.has(rowId) || false\n\n return (\n <Card\n key={rowId}\n row={row}\n config={config}\n rowId={rowId}\n isLoading={isRowLoading}\n />\n )\n })}\n </div>\n )\n}\n\nexport { Card } from './Card'\nexport { CardActions } from './CardActions'\nexport type {\n MobileViewProps,\n MobileCardConfig,\n MobileCardField,\n MobileCardAction,\n CardProps,\n CardActionsProps\n} from './types'\nexport { MOBILE_BREAKPOINT } from './types'\n","import { ReactNode } from 'react'\n\nexport type CellRenderer<TData = any> = (value: any, row: TData) => ReactNode\n\nexport interface RendererConfig {\n [columnId: string]: CellRenderer\n}\n\nexport function createCellRenderer<TData = any>(\n render: (value: any, row: TData) => ReactNode\n): CellRenderer<TData> {\n return render\n}\n\nexport function getNestedValue(obj: any, path: string): any {\n if (!path || !obj) return obj\n\n const keys = path.split('.')\n let value = obj\n\n for (const key of keys) {\n if (value === null || value === undefined) return undefined\n value = value[key]\n }\n\n return value\n}\n\nexport const commonRenderers = {\n text: createCellRenderer((value) => String(value || '-')),\n\n number: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return new Intl.NumberFormat().format(Number(value))\n }),\n\n currency: createCellRenderer((value, row, options?: { currency?: string; locale?: string }) => {\n if (value === null || value === undefined) return '-'\n return new Intl.NumberFormat(options?.locale || 'en-US', {\n style: 'currency',\n currency: options?.currency || 'USD',\n }).format(Number(value))\n }),\n\n percentage: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return `${Number(value).toFixed(2)}%`\n }),\n\n date: createCellRenderer((value) => {\n if (!value) return '-'\n const date = new Date(value)\n return date.toLocaleDateString()\n }),\n\n datetime: createCellRenderer((value) => {\n if (!value) return '-'\n const date = new Date(value)\n return date.toLocaleString()\n }),\n\n boolean: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return value ? 'Yes' : 'No'\n }),\n\n badge: createCellRenderer((value, row, options?: { variant?: 'default' | 'success' | 'warning' | 'error' }) => {\n if (!value) return null\n return value\n }),\n\n truncate: createCellRenderer((value, row, options?: { maxLength?: number }) => {\n if (!value) return '-'\n const str = String(value)\n const maxLength = options?.maxLength || 50\n if (str.length <= maxLength) return str\n return `${str.substring(0, maxLength)}...`\n }),\n\n array: createCellRenderer((value, row, options?: { separator?: string; maxItems?: number }) => {\n if (!Array.isArray(value) || value.length === 0) return '-'\n const maxItems = options?.maxItems || value.length\n const items = value.slice(0, maxItems)\n const separator = options?.separator || ', '\n const display = items.join(separator)\n if (value.length > maxItems) {\n return `${display} +${value.length - maxItems} more`\n }\n return display\n }),\n}\n\nexport function combineRenderers<TData = any>(\n ...renderers: CellRenderer<TData>[]\n): CellRenderer<TData> {\n return (value, row) => {\n for (const renderer of renderers) {\n const result = renderer(value, row)\n if (result !== null && result !== undefined) {\n return result\n }\n }\n return value\n }\n}\n","export interface TableTheme {\n name: string\n container: string\n header: string\n headerCell: string\n body: string\n row: string\n rowHover: string\n rowSelected: string\n cell: string\n pagination: string\n emptyState: string\n mobileCard: string\n mobileCardHeader: string\n mobileCardContent: string\n}\n\nexport const defaultTheme: TableTheme = {\n name: 'default',\n container: 'w-full',\n header: 'bg-muted/50',\n headerCell: 'px-4 py-3 text-left text-sm font-medium text-muted-foreground',\n body: '',\n row: 'border-b transition-colors',\n rowHover: 'hover:bg-muted/50',\n rowSelected: 'bg-primary/10 border-primary',\n cell: 'px-4 py-3 text-sm',\n pagination: 'flex items-center justify-between px-4 py-3 border-t',\n emptyState: 'flex items-center justify-center py-12 text-muted-foreground',\n mobileCard: 'rounded-lg border bg-card shadow-sm',\n mobileCardHeader: 'p-4 pb-2',\n mobileCardContent: 'p-4 pt-2',\n}\n\nexport const compactTheme: TableTheme = {\n ...defaultTheme,\n name: 'compact',\n headerCell: 'px-2 py-2 text-left text-xs font-medium text-muted-foreground',\n cell: 'px-2 py-2 text-xs',\n pagination: 'flex items-center justify-between px-2 py-2 border-t',\n mobileCardHeader: 'p-3 pb-1',\n mobileCardContent: 'p-3 pt-1',\n}\n\nexport const spaciousTheme: TableTheme = {\n ...defaultTheme,\n name: 'spacious',\n headerCell: 'px-6 py-4 text-left text-sm font-medium text-muted-foreground',\n cell: 'px-6 py-4 text-sm',\n pagination: 'flex items-center justify-between px-6 py-4 border-t',\n mobileCardHeader: 'p-6 pb-3',\n mobileCardContent: 'p-6 pt-3',\n}\n\nexport const minimalTheme: TableTheme = {\n ...defaultTheme,\n name: 'minimal',\n header: '',\n headerCell: 'px-4 py-3 text-left text-sm font-semibold',\n row: 'border-b border-border/50',\n rowHover: 'hover:bg-muted/30',\n mobileCard: 'rounded-lg border border-border/50 bg-card',\n}\n\nexport const themes = {\n default: defaultTheme,\n compact: compactTheme,\n spacious: spaciousTheme,\n minimal: minimalTheme,\n}\n\nexport type ThemeName = keyof typeof themes\n\nexport function getTheme(themeName: ThemeName = 'default'): TableTheme {\n return themes[themeName] || defaultTheme\n}\n\nexport function createCustomTheme(\n baseTheme: ThemeName = 'default',\n overrides: Partial<TableTheme>\n): TableTheme {\n return {\n ...themes[baseTheme],\n ...overrides,\n name: overrides.name || `custom-${baseTheme}`,\n }\n}\n","import { MobileCardConfig } from '../components/MobileView/types'\n\nexport interface ValidationResult {\n valid: boolean\n errors: string[]\n warnings: string[]\n}\n\nexport function validateMobileCardConfig<TData = any>(\n config: MobileCardConfig<TData>\n): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n if (!config.titleKey && !config.titleRender) {\n errors.push('Mobile card config must have either titleKey or titleRender')\n }\n\n if (!config.primaryFields || config.primaryFields.length === 0) {\n warnings.push('Mobile card config has no primary fields defined')\n }\n\n if (config.primaryFields) {\n config.primaryFields.forEach((field, index) => {\n if (!field.key && !field.render) {\n errors.push(`Primary field at index ${index} must have either key or render function`)\n }\n })\n }\n\n if (config.secondaryFields) {\n config.secondaryFields.forEach((field, index) => {\n if (!field.key && !field.render) {\n errors.push(`Secondary field at index ${index} must have either key or render function`)\n }\n })\n }\n\n if (config.actions) {\n config.actions.forEach((action, index) => {\n if (!action.id) {\n errors.push(`Action at index ${index} must have an id`)\n }\n if (!action.onClick) {\n errors.push(`Action '${action.id || index}' must have an onClick handler`)\n }\n if (!action.label && !action.icon) {\n warnings.push(`Action '${action.id || index}' should have either a label or icon`)\n }\n })\n }\n\n if (config.showSelection && !config.onSelectionChange) {\n warnings.push('showSelection is enabled but onSelectionChange handler is not provided')\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\nexport function validateColumnConfig(columns: any[]): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n if (!columns || columns.length === 0) {\n errors.push('At least one column must be defined')\n return { valid: false, errors, warnings }\n }\n\n const columnIds = new Set<string>()\n\n columns.forEach((column, index) => {\n if (!column.id && !column.accessorKey) {\n errors.push(`Column at index ${index} must have either id or accessorKey`)\n }\n\n const columnId = column.id || column.accessorKey\n\n if (columnIds.has(columnId)) {\n errors.push(`Duplicate column id: '${columnId}'`)\n }\n columnIds.add(columnId)\n\n if (!column.header && !column.hideHeader) {\n warnings.push(`Column '${columnId}' has no header defined`)\n }\n\n if (!column.cell && !column.accessorKey && !column.accessorFn) {\n warnings.push(`Column '${columnId}' has no way to access data (missing cell, accessorKey, or accessorFn)`)\n }\n })\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\nexport function logValidationResults(\n configName: string,\n result: ValidationResult,\n throwOnError: boolean = false\n): void {\n if (result.errors.length > 0) {\n console.error(`[${configName}] Validation Errors:`, result.errors)\n if (throwOnError) {\n throw new Error(`${configName} validation failed: ${result.errors.join(', ')}`)\n }\n }\n\n if (result.warnings.length > 0) {\n console.warn(`[${configName}] Validation Warnings:`, result.warnings)\n }\n\n if (result.valid && result.warnings.length === 0) {\n console.log(`[${configName}] Configuration is valid`)\n }\n}\n"]}