better-table 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +5 -0
  3. package/dist/better-table.cjs.js +2 -0
  4. package/dist/better-table.cjs.js.map +1 -0
  5. package/dist/better-table.css +1 -0
  6. package/dist/better-table.es.js +1182 -0
  7. package/dist/better-table.es.js.map +1 -0
  8. package/dist/components/BetterTable/components/Table.d.ts +4 -0
  9. package/dist/components/BetterTable/components/TableActions.d.ts +8 -0
  10. package/dist/components/BetterTable/components/TableBody.d.ts +4 -0
  11. package/dist/components/BetterTable/components/TableCell.d.ts +9 -0
  12. package/dist/components/BetterTable/components/TableEmpty.d.ts +1 -0
  13. package/dist/components/BetterTable/components/TableHeader.d.ts +4 -0
  14. package/dist/components/BetterTable/components/TableHeaderCell.d.ts +7 -0
  15. package/dist/components/BetterTable/components/TableLoading.d.ts +6 -0
  16. package/dist/components/BetterTable/components/TableModal.d.ts +1 -0
  17. package/dist/components/BetterTable/components/TablePagination.d.ts +1 -0
  18. package/dist/components/BetterTable/components/TableRow.d.ts +8 -0
  19. package/dist/components/BetterTable/components/TableToolbar.d.ts +4 -0
  20. package/dist/components/BetterTable/components/index.d.ts +12 -0
  21. package/dist/components/BetterTable/context/TableContext.d.ts +68 -0
  22. package/dist/components/BetterTable/context/index.d.ts +2 -0
  23. package/dist/components/BetterTable/hooks/index.d.ts +5 -0
  24. package/dist/components/BetterTable/hooks/useTableFilter.d.ts +17 -0
  25. package/dist/components/BetterTable/hooks/useTablePagination.d.ts +23 -0
  26. package/dist/components/BetterTable/hooks/useTableSearch.d.ts +18 -0
  27. package/dist/components/BetterTable/hooks/useTableSelection.d.ts +23 -0
  28. package/dist/components/BetterTable/hooks/useTableSort.d.ts +15 -0
  29. package/dist/components/BetterTable/index.d.ts +13 -0
  30. package/dist/components/BetterTable/types.d.ts +236 -0
  31. package/dist/components/BetterTable/utils/filterData.d.ts +18 -0
  32. package/dist/components/BetterTable/utils/getValueFromPath.d.ts +7 -0
  33. package/dist/components/BetterTable/utils/index.d.ts +3 -0
  34. package/dist/components/BetterTable/utils/sortData.d.ts +9 -0
  35. package/dist/index.d.ts +19 -0
  36. package/dist/styles.cjs +2 -0
  37. package/dist/styles.cjs.map +1 -0
  38. package/dist/styles.d.ts +0 -0
  39. package/dist/styles.js +2 -0
  40. package/dist/styles.js.map +1 -0
  41. package/package.json +99 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"better-table.es.js","sources":["../src/components/BetterTable/types.ts","../src/components/BetterTable/context/TableContext.tsx","../node_modules/clsx/dist/clsx.mjs","../src/components/BetterTable/components/TableHeaderCell.tsx","../src/components/BetterTable/components/TableHeader.tsx","../src/components/BetterTable/utils/getValueFromPath.ts","../src/components/BetterTable/utils/sortData.ts","../src/components/BetterTable/utils/filterData.ts","../src/components/BetterTable/components/TableCell.tsx","../src/components/BetterTable/components/TableActions.tsx","../src/components/BetterTable/components/TableRow.tsx","../src/components/BetterTable/components/TableBody.tsx","../src/components/BetterTable/components/TablePagination.tsx","../src/components/BetterTable/components/TableToolbar.tsx","../src/components/BetterTable/components/TableEmpty.tsx","../src/components/BetterTable/components/TableLoading.tsx","../src/components/BetterTable/components/TableModal.tsx","../src/components/BetterTable/hooks/useTableSort.ts","../src/components/BetterTable/hooks/useTableFilter.ts","../src/components/BetterTable/hooks/useTablePagination.ts","../src/components/BetterTable/hooks/useTableSelection.ts","../src/components/BetterTable/hooks/useTableSearch.ts","../src/components/BetterTable/components/Table.tsx"],"sourcesContent":["import { ReactNode, CSSProperties } from \"react\";\n\n/**\n * Tipo base para los datos de la tabla\n * Permite extensión con tipos específicos del usuario\n */\nexport type TableData = Record<string, unknown>;\n\n/**\n * Configuración de columna con tipado genérico\n */\nexport interface Column<T extends TableData = TableData> {\n\t/** Identificador único de la columna */\n\tid: string;\n\t/** Key para acceder al dato (soporta dot notation: 'user.profile.name') */\n\taccessor: keyof T | string;\n\t/** Texto visible en el header */\n\theader: string;\n\t/** Tipo de dato para filtrado y renderizado */\n\ttype?: \"string\" | \"number\" | \"boolean\" | \"date\" | \"custom\";\n\t/** Render personalizado de celda */\n\tcell?: (value: unknown, row: T, rowIndex: number) => ReactNode;\n\t/** Render personalizado de header */\n\theaderCell?: (column: Column<T>) => ReactNode;\n\t/** ¿Columna ordenable? */\n\tsortable?: boolean;\n\t/** ¿Columna filtrable? */\n\tfilterable?: boolean;\n\t/** Ancho de columna */\n\twidth?: string | number;\n\t/** Alineación del contenido */\n\talign?: \"left\" | \"center\" | \"right\";\n\t/** Columna oculta */\n\thidden?: boolean;\n}\n\n/**\n * Acción de fila individual\n */\nexport interface RowAction<T extends TableData = TableData> {\n\t/** Identificador único */\n\tid: string;\n\t/** Etiqueta de la acción */\n\tlabel: string;\n\t/** Icono (string, emoji, o componente) */\n\ticon?: ReactNode;\n\t/** Modo de ejecución */\n\tmode: \"callback\" | \"modal\" | \"link\";\n\t/** Callback cuando mode='callback' */\n\tonClick?: (row: T, rowIndex: number) => void;\n\t/** Componente para modal cuando mode='modal' */\n\tmodalContent?: React.ComponentType<{ data: T; onClose: () => void }>;\n\t/** URL cuando mode='link' */\n\thref?: string | ((row: T) => string);\n\t/** ¿Mostrar acción condicionalmente? */\n\tvisible?: (row: T) => boolean;\n\t/** ¿Deshabilitar acción condicionalmente? */\n\tdisabled?: (row: T) => boolean;\n\t/** Variante visual */\n\tvariant?: \"default\" | \"primary\" | \"danger\" | \"ghost\";\n}\n\n/**\n * Acción global (toolbar)\n */\nexport interface GlobalAction<T extends TableData = TableData> {\n\t/** Identificador único */\n\tid: string;\n\t/** Etiqueta del botón */\n\tlabel: string;\n\t/** Icono */\n\ticon?: ReactNode;\n\t/** Callback de ejecución */\n\tonClick: (selectedRows: T[], allData: T[]) => void;\n\t/** ¿Requiere selección de filas? */\n\trequiresSelection?: boolean;\n\t/** Variante visual */\n\tvariant?: \"default\" | \"primary\" | \"danger\";\n}\n\n/**\n * Configuración de paginación\n */\nexport interface PaginationConfig {\n\t/** Página actual (controlado) */\n\tpage?: number;\n\t/** Items por página */\n\tpageSize?: number;\n\t/** Opciones de tamaño de página */\n\tpageSizeOptions?: number[];\n\t/** Total de items (para paginación del servidor) */\n\ttotalItems?: number;\n\t/** Mostrar selector de tamaño de página */\n\tshowSizeChanger?: boolean;\n\t/** Mostrar salto a página */\n\tshowQuickJumper?: boolean;\n}\n\n/**\n * Estado de ordenamiento\n */\nexport interface SortState {\n\tcolumnId: string | null;\n\tdirection: \"asc\" | \"desc\";\n}\n\n/**\n * Estado de filtros\n */\nexport interface FilterState {\n\t[columnId: string]: string | number | boolean | null;\n}\n\n/**\n * Personalización de estilos\n */\nexport interface TableClassNames {\n\t/** Clase CSS del contenedor */\n\tcontainer?: string;\n\t/** Clase CSS de la tabla */\n\ttable?: string;\n\t/** Clase CSS del header */\n\theader?: string;\n\t/** Clase CSS del body */\n\tbody?: string;\n\t/** Clase CSS de filas */\n\trow?: string;\n\t/** Clase CSS de celdas */\n\tcell?: string;\n\t/** Clase CSS de la paginación */\n\tpagination?: string;\n\t/** Clase CSS del toolbar */\n\ttoolbar?: string;\n}\n\n/**\n * Textos personalizables (i18n)\n */\nexport interface TableLocale {\n\tsearch?: string;\n\tsearchPlaceholder?: string;\n\tnoData?: string;\n\tloading?: string;\n\tpage?: string;\n\tof?: string;\n\titems?: string;\n\tselected?: string;\n\trowsPerPage?: string;\n\tactions?: string;\n\tsortAsc?: string;\n\tsortDesc?: string;\n\tfilterBy?: string;\n\tclearFilters?: string;\n\tselectAll?: string;\n\tdeselectAll?: string;\n}\n\n/**\n * Locale por defecto\n */\nexport const defaultLocale: TableLocale = {\n\tsearch: \"Buscar\",\n\tsearchPlaceholder: \"Buscar...\",\n\tnoData: \"No hay datos\",\n\tloading: \"Cargando...\",\n\tpage: \"Página\",\n\tof: \"de\",\n\titems: \"elementos\",\n\tselected: \"seleccionados\",\n\trowsPerPage: \"Filas por página\",\n\tactions: \"Acciones\",\n\tsortAsc: \"Ordenar ascendente\",\n\tsortDesc: \"Ordenar descendente\",\n\tfilterBy: \"Filtrar por\",\n\tclearFilters: \"Limpiar filtros\",\n\tselectAll: \"Seleccionar todo\",\n\tdeselectAll: \"Deseleccionar todo\",\n};\n\n/**\n * Props principales del componente BetterTable\n */\nexport interface BetterTableProps<T extends TableData = TableData> {\n\t// === Datos ===\n\t/** Array de datos a mostrar */\n\tdata: T[];\n\t/** Configuración de columnas */\n\tcolumns: Column<T>[];\n\t/** Key único para identificar filas (default: 'id') */\n\trowKey?: keyof T | ((row: T, index: number) => string);\n\n\t// === Acciones ===\n\t/** Acciones por fila */\n\trowActions?: RowAction<T>[];\n\t/** Acciones globales (toolbar) */\n\tglobalActions?: GlobalAction<T>[];\n\n\t// === Paginación ===\n\t/** Configuración de paginación (false para desactivar) */\n\tpagination?: PaginationConfig | false;\n\t/** Callback de cambio de página */\n\tonPageChange?: (page: number, pageSize: number) => void;\n\n\t// === Ordenamiento ===\n\t/** Estado de ordenamiento (controlado) */\n\tsort?: SortState;\n\t/** Callback de cambio de ordenamiento */\n\tonSortChange?: (sort: SortState) => void;\n\n\t// === Filtrado ===\n\t/** Estado de filtros (controlado) */\n\tfilters?: FilterState;\n\t/** Callback de cambio de filtros */\n\tonFilterChange?: (filters: FilterState) => void;\n\n\t// === Búsqueda Global ===\n\t/** Mostrar barra de búsqueda */\n\tsearchable?: boolean;\n\t/** Valor de búsqueda (controlado) */\n\tsearchValue?: string;\n\t/** Callback de cambio de búsqueda */\n\tonSearchChange?: (value: string) => void;\n\t/** Columnas en las que buscar (default: todas) */\n\tsearchColumns?: string[];\n\n\t// === Selección ===\n\t/** Habilitar selección de filas */\n\tselectable?: boolean;\n\t/** Filas seleccionadas (controlado) */\n\tselectedRows?: T[];\n\t/** Callback de cambio de selección */\n\tonSelectionChange?: (selectedRows: T[]) => void;\n\t/** Modo de selección */\n\tselectionMode?: \"single\" | \"multiple\";\n\n\t// === Estados ===\n\t/** Estado de carga */\n\tloading?: boolean;\n\t/** Componente de loading personalizado */\n\tloadingComponent?: ReactNode;\n\t/** Componente de estado vacío personalizado */\n\temptyComponent?: ReactNode;\n\n\t// === Personalización ===\n\t/** Clases CSS personalizadas */\n\tclassNames?: TableClassNames;\n\t/** Estilos inline personalizados */\n\tstyles?: {\n\t\tcontainer?: CSSProperties;\n\t\ttable?: CSSProperties;\n\t\theader?: CSSProperties;\n\t\tbody?: CSSProperties;\n\t\trow?: CSSProperties;\n\t\tcell?: CSSProperties;\n\t};\n\t/** Textos personalizados */\n\tlocale?: TableLocale;\n\n\t// === Características ===\n\t/** Header fijo al hacer scroll */\n\tstickyHeader?: boolean;\n\t/** Altura máxima (activa scroll interno) */\n\tmaxHeight?: string | number;\n\t/** Mostrar bordes */\n\tbordered?: boolean;\n\t/** Filas con rayas alternas */\n\tstriped?: boolean;\n\t/** Hover en filas */\n\thoverable?: boolean;\n\t/** Tamaño de la tabla */\n\tsize?: \"small\" | \"medium\" | \"large\";\n\n\t// === Callbacks ===\n\t/** Callback al hacer click en una fila */\n\tonRowClick?: (row: T, rowIndex: number) => void;\n\t/** Callback al hacer doble click en una fila */\n\tonRowDoubleClick?: (row: T, rowIndex: number) => void;\n\n\t// === Accesibilidad ===\n\t/** Descripción de la tabla para screen readers */\n\tariaLabel?: string;\n\t/** ID del elemento que describe la tabla */\n\tariaDescribedBy?: string;\n}\n","import { createContext, useContext, ReactNode } from 'react';\nimport {\n TableData,\n Column,\n SortState,\n FilterState,\n TableLocale,\n TableClassNames,\n RowAction,\n GlobalAction,\n defaultLocale,\n} from '../types';\n\nexport interface TableContextValue<T extends TableData = TableData> {\n // Data\n data: T[];\n processedData: T[];\n columns: Column<T>[];\n rowKey: keyof T | ((row: T, index: number) => string);\n\n // Actions\n rowActions?: RowAction<T>[];\n globalActions?: GlobalAction<T>[];\n\n // Sort\n sortState: SortState;\n handleSort: (columnId: string) => void;\n\n // Filter\n filters: FilterState;\n setFilter: (columnId: string, value: string | number | boolean | null) => void;\n clearFilters: () => void;\n\n // Search\n searchValue: string;\n handleSearch: (value: string) => void;\n clearSearch: () => void;\n searchable: boolean;\n\n // Selection\n selectedRows: T[];\n isSelected: (row: T, index: number) => boolean;\n toggleRow: (row: T, index: number) => void;\n selectAll: () => void;\n deselectAll: () => void;\n isAllSelected: boolean;\n isPartiallySelected: boolean;\n selectedCount: number;\n selectable: boolean;\n selectionMode: 'single' | 'multiple';\n\n // Pagination\n page: number;\n pageSize: number;\n totalPages: number;\n totalItems: number;\n goToPage: (page: number) => void;\n nextPage: () => void;\n prevPage: () => void;\n changePageSize: (size: number) => void;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n startIndex: number;\n endIndex: number;\n paginationEnabled: boolean;\n pageSizeOptions: number[];\n showSizeChanger: boolean;\n\n // UI State\n loading: boolean;\n loadingComponent?: ReactNode;\n emptyComponent?: ReactNode;\n\n // Styling\n locale: TableLocale;\n classNames: TableClassNames;\n size: 'small' | 'medium' | 'large';\n bordered: boolean;\n striped: boolean;\n hoverable: boolean;\n stickyHeader: boolean;\n\n // Callbacks\n onRowClick?: (row: T, rowIndex: number) => void;\n onRowDoubleClick?: (row: T, rowIndex: number) => void;\n\n // Modal\n openModal: (content: ReactNode) => void;\n closeModal: () => void;\n modalContent: ReactNode | null;\n isModalOpen: boolean;\n}\n\nconst TableContext = createContext<TableContextValue | null>(null);\n\nexport function useTableContext<T extends TableData>(): TableContextValue<T> {\n const context = useContext(TableContext);\n if (!context) {\n throw new Error('useTableContext must be used within a TableProvider');\n }\n return context as TableContextValue<T>;\n}\n\ninterface TableProviderProps<T extends TableData> {\n value: TableContextValue<T>;\n children: ReactNode;\n}\n\nexport function TableProvider<T extends TableData>({\n value,\n children,\n}: TableProviderProps<T>) {\n return (\n <TableContext.Provider value={value as TableContextValue}>\n {children}\n </TableContext.Provider>\n );\n}\n\n// Default context values para evitar undefined\nexport const defaultTableContext: Partial<TableContextValue> = {\n sortState: { columnId: null, direction: 'asc' },\n filters: {},\n searchValue: '',\n selectedRows: [],\n isAllSelected: false,\n isPartiallySelected: false,\n page: 1,\n pageSize: 10,\n totalPages: 1,\n totalItems: 0,\n hasNextPage: false,\n hasPrevPage: false,\n startIndex: 0,\n endIndex: 0,\n loading: false,\n locale: defaultLocale,\n classNames: {},\n size: 'medium',\n bordered: false,\n striped: false,\n hoverable: true,\n stickyHeader: false,\n selectable: false,\n selectionMode: 'multiple',\n searchable: false,\n paginationEnabled: true,\n pageSizeOptions: [10, 20, 50, 100],\n showSizeChanger: false,\n isModalOpen: false,\n modalContent: null,\n};\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React, { useCallback, KeyboardEvent } from 'react';\nimport { useTableContext } from '../context';\nimport { TableData, Column } from '../types';\nimport clsx from 'clsx';\n\ninterface TableHeaderCellProps<T extends TableData> {\n column: Column<T>;\n}\n\nfunction TableHeaderCellInner<T extends TableData>({\n column,\n}: TableHeaderCellProps<T>) {\n const {\n sortState,\n handleSort,\n filters,\n setFilter,\n locale,\n } = useTableContext<T>();\n\n const isSorted = sortState.columnId === column.id;\n const sortDirection = isSorted ? sortState.direction : null;\n\n const handleSortClick = useCallback(() => {\n if (column.sortable !== false) {\n handleSort(column.id);\n }\n }, [column.id, column.sortable, handleSort]);\n\n const handleFilterChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => {\n const value = e.target.value;\n if (column.type === 'boolean') {\n if (value === '') {\n setFilter(column.id, null);\n } else {\n setFilter(column.id, value === 'true');\n }\n } else {\n setFilter(column.id, value || null);\n }\n },\n [column.id, column.type, setFilter]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter' && column.sortable !== false) {\n handleSort(column.id);\n }\n },\n [column.id, column.sortable, handleSort]\n );\n\n const renderSortIcon = () => {\n if (column.sortable === false || column.type === 'custom') {\n return null;\n }\n\n return (\n <button\n className={clsx('bt-sort-btn', isSorted && 'bt-active')}\n onClick={handleSortClick}\n aria-label={\n sortDirection === 'asc' ? locale.sortDesc : locale.sortAsc\n }\n type=\"button\"\n >\n {isSorted ? (sortDirection === 'asc' ? '↑' : '↓') : '⇅'}\n </button>\n );\n };\n\n const renderFilterInput = () => {\n if (column.filterable === false || column.type === 'custom') {\n return null;\n }\n\n const filterValue = filters[column.id];\n\n if (column.type === 'boolean') {\n return (\n <select\n className=\"bt-filter-select\"\n value={filterValue === null || filterValue === undefined ? '' : String(filterValue)}\n onChange={handleFilterChange}\n aria-label={`${locale.filterBy} ${column.header}`}\n >\n <option value=\"\">-</option>\n <option value=\"true\">✅</option>\n <option value=\"false\">❌</option>\n </select>\n );\n }\n\n return (\n <input\n type={column.type === 'number' ? 'number' : 'text'}\n className=\"bt-filter-input\"\n placeholder={`${locale.filterBy}...`}\n value={filterValue !== null && filterValue !== undefined ? String(filterValue) : ''}\n onChange={handleFilterChange}\n aria-label={`${locale.filterBy} ${column.header}`}\n />\n );\n };\n\n // Custom header cell render\n if (column.headerCell) {\n return (\n <th\n className={clsx('bt-th', column.align && `bt-align-${column.align}`)}\n style={{ width: column.width }}\n >\n {column.headerCell(column)}\n </th>\n );\n }\n\n return (\n <th\n className={clsx('bt-th', column.align && `bt-align-${column.align}`)}\n style={{ width: column.width }}\n role=\"columnheader\"\n aria-sort={\n isSorted\n ? sortDirection === 'asc'\n ? 'ascending'\n : 'descending'\n : undefined\n }\n tabIndex={column.sortable !== false ? 0 : undefined}\n onKeyDown={column.sortable !== false ? handleKeyDown : undefined}\n >\n <div className=\"bt-th-content\">\n <div className=\"bt-th-header\">\n <span className=\"bt-th-title\">{column.header}</span>\n {renderSortIcon()}\n </div>\n {column.filterable !== false && renderFilterInput()}\n </div>\n </th>\n );\n}\n\nexport const TableHeaderCell = React.memo(\n TableHeaderCellInner\n) as typeof TableHeaderCellInner;\n","\nimport { useTableContext } from '../context';\nimport { TableData } from '../types';\nimport { TableHeaderCell } from './TableHeaderCell';\nimport clsx from 'clsx';\n\nfunction TableHeaderInner<T extends TableData>() {\n const {\n columns,\n selectable,\n selectionMode,\n rowActions,\n isAllSelected,\n isPartiallySelected,\n selectAll,\n deselectAll,\n locale,\n stickyHeader,\n } = useTableContext<T>();\n\n const visibleColumns = columns.filter((col) => !col.hidden);\n const hasActions = rowActions && rowActions.length > 0;\n\n const handleSelectAllChange = () => {\n if (isAllSelected) {\n deselectAll();\n } else {\n selectAll();\n }\n };\n\n return (\n <thead className={clsx('bt-thead', stickyHeader && 'bt-sticky')}>\n <tr className=\"bt-tr\">\n {selectable && (\n <th className=\"bt-th bt-checkbox-cell\">\n {selectionMode === 'multiple' && (\n <input\n type=\"checkbox\"\n className=\"bt-checkbox\"\n checked={isAllSelected}\n ref={(el) => {\n if (el) {\n el.indeterminate = isPartiallySelected;\n }\n }}\n onChange={handleSelectAllChange}\n aria-label={isAllSelected ? locale.deselectAll : locale.selectAll}\n />\n )}\n </th>\n )}\n {visibleColumns.map((column) => (\n <TableHeaderCell key={column.id} column={column} />\n ))}\n {hasActions && (\n <th className=\"bt-th bt-actions-cell\">{locale.actions}</th>\n )}\n </tr>\n </thead>\n );\n}\n\nexport const TableHeader = TableHeaderInner;\n","/**\n * Accede a propiedades anidadas de un objeto usando dot notation\n * @param obj - Objeto del cual extraer el valor\n * @param path - Ruta al valor (e.g., 'user.profile.name')\n * @returns El valor encontrado o undefined\n */\nexport function getValueFromPath<T = unknown>(\n\tobj: Record<string, unknown>,\n\tpath: string,\n): T | undefined {\n\tif (!obj || !path) return undefined;\n\n\tconst keys = path.split(\".\");\n\tlet result: unknown = obj;\n\n\tfor (const key of keys) {\n\t\tif (result === null || result === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (typeof result === \"object\") {\n\t\t\tresult = (result as Record<string, unknown>)[key];\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\treturn result as T;\n}\n","import { TableData } from \"../types\";\nimport { getValueFromPath } from \"./getValueFromPath\";\n\n/**\n * Ordena un array de datos por una columna específica\n * @param data - Array de datos a ordenar\n * @param columnId - ID/accessor de la columna\n * @param direction - Dirección del ordenamiento\n * @returns Array ordenado (nueva referencia)\n */\nexport function sortData<T extends TableData>(\n\tdata: T[],\n\tcolumnId: string,\n\tdirection: \"asc\" | \"desc\",\n): T[] {\n\treturn [...data].sort((a, b) => {\n\t\tconst valueA = getValueFromPath(a as Record<string, unknown>, columnId);\n\t\tconst valueB = getValueFromPath(b as Record<string, unknown>, columnId);\n\n\t\t// Manejar valores nulos/undefined\n\t\tif (valueA === null || valueA === undefined) {\n\t\t\treturn direction === \"asc\" ? 1 : -1;\n\t\t}\n\t\tif (valueB === null || valueB === undefined) {\n\t\t\treturn direction === \"asc\" ? -1 : 1;\n\t\t}\n\n\t\t// Comparar según tipo\n\t\tif (typeof valueA === \"string\" && typeof valueB === \"string\") {\n\t\t\tconst comparison = valueA.localeCompare(valueB, undefined, {\n\t\t\t\tsensitivity: \"base\",\n\t\t\t\tnumeric: true,\n\t\t\t});\n\t\t\treturn direction === \"asc\" ? comparison : -comparison;\n\t\t}\n\n\t\tif (typeof valueA === \"number\" && typeof valueB === \"number\") {\n\t\t\treturn direction === \"asc\" ? valueA - valueB : valueB - valueA;\n\t\t}\n\n\t\tif (typeof valueA === \"boolean\" && typeof valueB === \"boolean\") {\n\t\t\tconst comparison = valueA === valueB ? 0 : valueA ? -1 : 1;\n\t\t\treturn direction === \"asc\" ? comparison : -comparison;\n\t\t}\n\n\t\tif (valueA instanceof Date && valueB instanceof Date) {\n\t\t\tconst comparison = valueA.getTime() - valueB.getTime();\n\t\t\treturn direction === \"asc\" ? comparison : -comparison;\n\t\t}\n\n\t\t// Fallback: convertir a string y comparar\n\t\tconst strA = String(valueA);\n\t\tconst strB = String(valueB);\n\t\tconst comparison = strA.localeCompare(strB);\n\t\treturn direction === \"asc\" ? comparison : -comparison;\n\t});\n}\n","import { TableData, Column, FilterState } from \"../types\";\nimport { getValueFromPath } from \"./getValueFromPath\";\n\n/**\n * Filtra un array de datos basado en múltiples filtros de columna\n * @param data - Array de datos a filtrar\n * @param filters - Estado de filtros por columna\n * @param columns - Configuración de columnas\n * @returns Array filtrado (nueva referencia)\n */\nexport function filterData<T extends TableData>(\n\tdata: T[],\n\tfilters: FilterState,\n\tcolumns: Column<T>[],\n): T[] {\n\tconst activeFilters = Object.entries(filters).filter(\n\t\t([, value]) => value !== null && value !== undefined && value !== \"\",\n\t);\n\n\tif (activeFilters.length === 0) {\n\t\treturn data;\n\t}\n\n\treturn data.filter((row) => {\n\t\treturn activeFilters.every(([columnId, filterValue]) => {\n\t\t\tconst column = columns.find((col) => col.id === columnId);\n\t\t\tif (!column) return true;\n\n\t\t\tconst cellValue = getValueFromPath(\n\t\t\t\trow as Record<string, unknown>,\n\t\t\t\tString(column.accessor),\n\t\t\t);\n\n\t\t\tif (cellValue === null || cellValue === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst columnType = column.type ?? \"string\";\n\n\t\t\tswitch (columnType) {\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\treturn cellValue === filterValue;\n\n\t\t\t\tcase \"number\":\n\t\t\t\t\treturn String(cellValue) === String(filterValue);\n\n\t\t\t\tcase \"date\":\n\t\t\t\t\t// Comparación básica de fechas (mismo día)\n\t\t\t\t\tif (cellValue instanceof Date && filterValue) {\n\t\t\t\t\t\tconst filterDate = new Date(String(filterValue));\n\t\t\t\t\t\treturn cellValue.toDateString() === filterDate.toDateString();\n\t\t\t\t\t}\n\t\t\t\t\treturn String(cellValue).includes(String(filterValue));\n\n\t\t\t\tcase \"string\":\n\t\t\t\tdefault:\n\t\t\t\t\treturn String(cellValue)\n\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t.includes(String(filterValue).toLowerCase());\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Realiza una búsqueda global en los datos\n * @param data - Array de datos\n * @param searchValue - Valor a buscar\n * @param columns - Columnas en las que buscar\n * @param searchColumnIds - IDs de columnas específicas (opcional)\n * @returns Array filtrado\n */\nexport function searchData<T extends TableData>(\n\tdata: T[],\n\tsearchValue: string,\n\tcolumns: Column<T>[],\n\tsearchColumnIds?: string[],\n): T[] {\n\tif (!searchValue.trim()) {\n\t\treturn data;\n\t}\n\n\tconst searchLower = searchValue.toLowerCase().trim();\n\tconst columnsToSearch = searchColumnIds\n\t\t? columns.filter((col) => searchColumnIds.includes(col.id))\n\t\t: columns.filter((col) => col.type !== \"custom\");\n\n\treturn data.filter((row) =>\n\t\tcolumnsToSearch.some((col) => {\n\t\t\tconst value = getValueFromPath(\n\t\t\t\trow as Record<string, unknown>,\n\t\t\t\tString(col.accessor),\n\t\t\t);\n\t\t\tif (value === null || value === undefined) return false;\n\t\t\treturn String(value).toLowerCase().includes(searchLower);\n\t\t}),\n\t);\n}\n","import React from 'react';\nimport { TableData, Column } from '../types';\nimport { getValueFromPath } from '../utils';\nimport clsx from 'clsx';\n\ninterface TableCellProps<T extends TableData> {\n row: T;\n column: Column<T>;\n rowIndex: number;\n}\n\nfunction TableCellInner<T extends TableData>({\n row,\n column,\n rowIndex,\n}: TableCellProps<T>) {\n const value = getValueFromPath(\n row as Record<string, unknown>,\n String(column.accessor)\n );\n\n const renderCellContent = () => {\n // Custom cell renderer\n if (column.cell) {\n return column.cell(value, row, rowIndex);\n }\n\n // Handle null/undefined\n if (value === null || value === undefined) {\n return <span className=\"bt-cell-empty\">—</span>;\n }\n\n // Type-based rendering\n switch (column.type) {\n case 'boolean':\n return value ? '✅' : '❌';\n\n case 'date':\n if (value instanceof Date) {\n return value.toLocaleDateString();\n }\n // Try to parse string dates\n const date = new Date(String(value));\n return isNaN(date.getTime()) ? String(value) : date.toLocaleDateString();\n\n case 'number':\n return typeof value === 'number' ? value.toLocaleString() : value;\n\n case 'string':\n default:\n return String(value);\n }\n };\n\n const content = renderCellContent();\n\n return (\n <td\n className={clsx('bt-td', column.align && `bt-align-${column.align}`)}\n style={{ width: column.width }}\n >\n {content as React.ReactNode}\n </td>\n );\n}\n\nexport const TableCell = React.memo(TableCellInner) as typeof TableCellInner;\n","import React, { useCallback } from 'react';\nimport { useTableContext } from '../context';\nimport { TableData, RowAction } from '../types';\nimport clsx from 'clsx';\n\ninterface TableActionsProps<T extends TableData> {\n row: T;\n rowIndex: number;\n}\n\nfunction TableActionsInner<T extends TableData>({\n row,\n rowIndex,\n}: TableActionsProps<T>) {\n const { rowActions, openModal } = useTableContext<T>();\n\n const handleActionClick = useCallback(\n (action: RowAction<T>) => {\n if (action.mode === 'callback' && action.onClick) {\n action.onClick(row, rowIndex);\n } else if (action.mode === 'modal' && action.modalContent) {\n const ModalContent = action.modalContent;\n openModal(\n <ModalContent\n data={row}\n onClose={() => {\n // Modal will be closed by the Table component\n }}\n />\n );\n } else if (action.mode === 'link' && action.href) {\n const url = typeof action.href === 'function' ? action.href(row) : action.href;\n window.open(url, '_blank');\n }\n },\n [row, rowIndex, openModal]\n );\n\n if (!rowActions || rowActions.length === 0) {\n return null;\n }\n\n return (\n <td className=\"bt-td bt-actions-cell\">\n <div className=\"bt-actions-wrapper\">\n {rowActions.map((action) => {\n // Check visibility\n if (action.visible && !action.visible(row)) {\n return null;\n }\n\n const isDisabled = action.disabled ? action.disabled(row) : false;\n\n // Render as link if mode is 'link'\n if (action.mode === 'link' && action.href) {\n const url =\n typeof action.href === 'function' ? action.href(row) : action.href;\n return (\n <a\n key={action.id}\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={clsx(\n 'bt-action-btn',\n action.variant && `bt-variant-${action.variant}`\n )}\n aria-label={action.label}\n >\n {action.icon && <span className=\"bt-action-icon\">{action.icon}</span>}\n </a>\n );\n }\n\n return (\n <button\n key={action.id}\n className={clsx(\n 'bt-action-btn',\n action.variant && `bt-variant-${action.variant}`\n )}\n onClick={() => handleActionClick(action)}\n disabled={isDisabled}\n aria-label={action.label}\n title={action.label}\n type=\"button\"\n >\n {action.icon && <span className=\"bt-action-icon\">{action.icon}</span>}\n </button>\n );\n })}\n </div>\n </td>\n );\n}\n\nexport const TableActions = React.memo(\n TableActionsInner\n) as typeof TableActionsInner;\n","import React, { useCallback, KeyboardEvent } from 'react';\nimport { useTableContext } from '../context';\nimport { TableData } from '../types';\nimport { TableCell } from './TableCell';\nimport { TableActions } from './TableActions';\nimport clsx from 'clsx';\n\ninterface TableRowProps<T extends TableData> {\n row: T;\n rowIndex: number;\n}\n\nfunction TableRowInner<T extends TableData>({ row, rowIndex }: TableRowProps<T>) {\n const {\n columns,\n selectable,\n rowActions,\n isSelected,\n toggleRow,\n striped,\n hoverable,\n onRowClick,\n onRowDoubleClick,\n } = useTableContext<T>();\n\n const visibleColumns = columns.filter((col) => !col.hidden);\n const hasActions = rowActions && rowActions.length > 0;\n const selected = selectable && isSelected(row, rowIndex);\n const isClickable = Boolean(onRowClick);\n\n const handleRowClick = useCallback(() => {\n onRowClick?.(row, rowIndex);\n }, [row, rowIndex, onRowClick]);\n\n const handleRowDoubleClick = useCallback(() => {\n onRowDoubleClick?.(row, rowIndex);\n }, [row, rowIndex, onRowDoubleClick]);\n\n const handleCheckboxChange = useCallback(() => {\n toggleRow(row, rowIndex);\n }, [row, rowIndex, toggleRow]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter' && onRowClick) {\n handleRowClick();\n }\n },\n [handleRowClick, onRowClick]\n );\n\n return (\n <tr\n className={clsx(\n 'bt-tr',\n striped && 'bt-striped',\n hoverable && 'bt-hoverable',\n selected && 'bt-selected',\n isClickable && 'bt-clickable'\n )}\n onClick={isClickable ? handleRowClick : undefined}\n onDoubleClick={onRowDoubleClick ? handleRowDoubleClick : undefined}\n onKeyDown={isClickable ? handleKeyDown : undefined}\n tabIndex={isClickable ? 0 : undefined}\n role={isClickable ? 'button' : undefined}\n aria-selected={selectable ? selected : undefined}\n >\n {selectable && (\n <td className=\"bt-td bt-checkbox-cell\">\n <input\n type=\"checkbox\"\n className=\"bt-checkbox\"\n checked={selected}\n onChange={handleCheckboxChange}\n onClick={(e) => e.stopPropagation()}\n aria-label={`Select row ${rowIndex + 1}`}\n />\n </td>\n )}\n {visibleColumns.map((column) => (\n <TableCell\n key={column.id}\n row={row}\n column={column}\n rowIndex={rowIndex}\n />\n ))}\n {hasActions && <TableActions row={row} rowIndex={rowIndex} />}\n </tr>\n );\n}\n\nexport const TableRow = React.memo(TableRowInner) as typeof TableRowInner;\n","import { useTableContext } from '../context';\nimport { TableData } from '../types';\nimport { TableRow } from './TableRow';\n\nfunction TableBodyInner<T extends TableData>() {\n const { processedData, rowKey } = useTableContext<T>();\n\n const getRowKey = (row: T, index: number): string => {\n if (typeof rowKey === 'function') {\n return rowKey(row, index);\n }\n const keyValue = row[rowKey];\n return keyValue !== undefined ? String(keyValue) : String(index);\n };\n\n return (\n <tbody className=\"bt-tbody\">\n {processedData.map((row, index) => (\n <TableRow key={getRowKey(row, index)} row={row} rowIndex={index} />\n ))}\n </tbody>\n );\n}\n\n// Export without memo to preserve generic type parameter\nexport const TableBody = TableBodyInner;\n","import React, { useMemo, useCallback } from 'react';\nimport { useTableContext } from '../context';\n\nexport function TablePagination() {\n const {\n page,\n pageSize,\n totalPages,\n totalItems,\n goToPage,\n nextPage,\n prevPage,\n changePageSize,\n hasNextPage,\n hasPrevPage,\n startIndex,\n endIndex,\n paginationEnabled,\n pageSizeOptions,\n showSizeChanger,\n locale,\n classNames,\n } = useTableContext();\n\n const handlePageSizeChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n changePageSize(Number(e.target.value));\n },\n [changePageSize]\n );\n\n const handleQuickJump = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n const value = parseInt((e.target as HTMLInputElement).value, 10);\n if (!isNaN(value) && value >= 1 && value <= totalPages) {\n goToPage(value);\n }\n }\n },\n [goToPage, totalPages]\n );\n\n // Generate page numbers to show\n const pageNumbers = useMemo(() => {\n const pages: (number | 'ellipsis')[] = [];\n const maxVisiblePages = 5;\n\n if (totalPages <= maxVisiblePages) {\n // Show all pages\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n // Always show first page\n pages.push(1);\n\n if (page > 3) {\n pages.push('ellipsis');\n }\n\n // Pages around current\n const start = Math.max(2, page - 1);\n const end = Math.min(totalPages - 1, page + 1);\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n if (page < totalPages - 2) {\n pages.push('ellipsis');\n }\n\n // Always show last page\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n }\n\n return pages;\n }, [page, totalPages]);\n\n if (!paginationEnabled) {\n return null;\n }\n\n return (\n <div className={`bt-pagination ${classNames.pagination || ''}`}>\n <div className=\"bt-pagination-info\">\n {totalItems > 0\n ? `${startIndex}-${endIndex} ${locale.of} ${totalItems} ${locale.items}`\n : `0 ${locale.items}`}\n </div>\n\n <div className=\"bt-pagination-controls\">\n {showSizeChanger && (\n <div className=\"bt-page-size\">\n <span className=\"bt-page-size-label\">{locale.rowsPerPage}:</span>\n <select\n className=\"bt-page-size-select\"\n value={pageSize}\n onChange={handlePageSizeChange}\n aria-label={locale.rowsPerPage}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n )}\n\n <button\n className=\"bt-pagination-btn\"\n onClick={prevPage}\n disabled={!hasPrevPage}\n aria-label=\"Previous page\"\n type=\"button\"\n >\n ←\n </button>\n\n <div className=\"bt-pagination-pages\">\n {pageNumbers.map((pageNum, idx) => {\n if (pageNum === 'ellipsis') {\n return (\n <span key={`ellipsis-${idx}`} className=\"bt-pagination-ellipsis\">\n ...\n </span>\n );\n }\n return (\n <button\n key={pageNum}\n className={`bt-pagination-btn ${page === pageNum ? 'bt-active' : ''}`}\n onClick={() => goToPage(pageNum)}\n aria-label={`${locale.page} ${pageNum}`}\n aria-current={page === pageNum ? 'page' : undefined}\n type=\"button\"\n >\n {pageNum}\n </button>\n );\n })}\n </div>\n\n <button\n className=\"bt-pagination-btn\"\n onClick={nextPage}\n disabled={!hasNextPage}\n aria-label=\"Next page\"\n type=\"button\"\n >\n →\n </button>\n\n <div className=\"bt-quick-jumper\">\n <span className=\"bt-quick-jumper-label\">{locale.page}:</span>\n <input\n type=\"number\"\n className=\"bt-quick-jumper-input\"\n min={1}\n max={totalPages}\n defaultValue={page}\n onKeyDown={handleQuickJump}\n aria-label=\"Jump to page\"\n />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useCallback } from 'react';\nimport { useTableContext } from '../context';\nimport { TableData } from '../types';\nimport clsx from 'clsx';\n\nfunction TableToolbarInner<T extends TableData>() {\n const {\n searchable,\n searchValue,\n handleSearch,\n clearSearch,\n globalActions,\n selectedRows,\n selectedCount,\n deselectAll,\n data,\n locale,\n classNames,\n selectable,\n } = useTableContext<T>();\n\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleSearch(e.target.value);\n },\n [handleSearch]\n );\n\n const hasToolbar =\n searchable || (globalActions && globalActions.length > 0) || (selectable && selectedCount > 0);\n\n if (!hasToolbar) {\n return null;\n }\n\n return (\n <div className={`bt-toolbar ${classNames.toolbar || ''}`}>\n <div className=\"bt-toolbar-left\">\n {searchable && (\n <div className=\"bt-search\">\n <span className=\"bt-search-icon\">🔍</span>\n <input\n type=\"text\"\n className=\"bt-search-input\"\n placeholder={locale.searchPlaceholder}\n value={searchValue}\n onChange={handleSearchChange}\n aria-label={locale.search}\n />\n {searchValue && (\n <button\n className=\"bt-search-clear\"\n onClick={clearSearch}\n aria-label=\"Clear search\"\n type=\"button\"\n >\n ✕\n </button>\n )}\n </div>\n )}\n\n {selectable && selectedCount > 0 && (\n <div className=\"bt-selection-info\">\n <span>\n {selectedCount} {locale.selected}\n </span>\n <button\n className=\"bt-selection-clear\"\n onClick={deselectAll}\n type=\"button\"\n >\n {locale.deselectAll}\n </button>\n </div>\n )}\n </div>\n\n {globalActions && globalActions.length > 0 && (\n <div className=\"bt-toolbar-right\">\n <div className=\"bt-global-actions\">\n {globalActions.map((action) => {\n const isDisabled =\n action.requiresSelection && selectedRows.length === 0;\n\n return (\n <button\n key={action.id}\n className={clsx(\n 'bt-global-btn',\n action.variant && `bt-variant-${action.variant}`\n )}\n onClick={() => action.onClick(selectedRows, data)}\n disabled={isDisabled}\n title={action.label}\n type=\"button\"\n >\n {action.icon && (\n <span className=\"bt-global-icon\">{action.icon}</span>\n )}\n <span>{action.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport const TableToolbar = TableToolbarInner;\n","import { useTableContext } from '../context';\n\nexport function TableEmpty() {\n const { locale, emptyComponent, columns, selectable, rowActions } =\n useTableContext();\n\n const visibleColumns = columns.filter((col) => !col.hidden);\n const hasActions = rowActions && rowActions.length > 0;\n const colSpan = visibleColumns.length + (selectable ? 1 : 0) + (hasActions ? 1 : 0);\n\n if (emptyComponent) {\n return (\n <tbody className=\"bt-tbody\">\n <tr className=\"bt-tr\">\n <td className=\"bt-td\" colSpan={colSpan}>\n {emptyComponent}\n </td>\n </tr>\n </tbody>\n );\n }\n\n return (\n <tbody className=\"bt-tbody\">\n <tr className=\"bt-tr\">\n <td className=\"bt-td\" colSpan={colSpan}>\n <div className=\"bt-empty\">\n <div className=\"bt-empty-icon\">📭</div>\n <div className=\"bt-empty-text\">{locale.noData}</div>\n </div>\n </td>\n </tr>\n </tbody>\n );\n}\n","import { useTableContext } from '../context';\n\nexport function TableLoading() {\n const { locale, loadingComponent } = useTableContext();\n\n if (loadingComponent) {\n return <>{loadingComponent}</>;\n }\n\n return (\n <div className=\"bt-loading\">\n <div className=\"bt-loading-spinner\" aria-hidden=\"true\" />\n <span className=\"bt-loading-text\">{locale.loading}</span>\n </div>\n );\n}\n\ninterface TableLoadingOverlayProps {\n show: boolean;\n}\n\nexport function TableLoadingOverlay({ show }: TableLoadingOverlayProps) {\n const { loadingComponent, locale } = useTableContext();\n\n if (!show) return null;\n\n return (\n <div className=\"bt-loading-overlay\" role=\"status\" aria-live=\"polite\">\n {loadingComponent || (\n <>\n <div className=\"bt-loading-spinner\" aria-hidden=\"true\" />\n <span className=\"bt-loading-text\">{locale.loading}</span>\n </>\n )}\n </div>\n );\n}\n","import React, { useEffect, useCallback } from 'react';\nimport { useTableContext } from '../context';\n\nexport function TableModal() {\n const { isModalOpen, modalContent, closeModal } = useTableContext();\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n closeModal();\n }\n },\n [closeModal]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n closeModal();\n }\n },\n [closeModal]\n );\n\n useEffect(() => {\n if (isModalOpen) {\n document.addEventListener('keydown', handleKeyDown);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.body.style.overflow = '';\n };\n }, [isModalOpen, handleKeyDown]);\n\n if (!isModalOpen || !modalContent) {\n return null;\n }\n\n return (\n <div\n className=\"bt-modal-backdrop\"\n onClick={handleBackdropClick}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <div className=\"bt-modal bt-modal-md\">\n <div className=\"bt-modal-header\">\n <h2 className=\"bt-modal-title\">Detalles</h2>\n <button\n className=\"bt-modal-close\"\n onClick={closeModal}\n aria-label=\"Close modal\"\n type=\"button\"\n >\n ✕\n </button>\n </div>\n <div className=\"bt-modal-body\">{modalContent}</div>\n </div>\n </div>\n );\n}\n","import { useState, useCallback, useMemo } from \"react\";\nimport { SortState, TableData } from \"../types\";\nimport { sortData } from \"../utils/sortData\";\n\ninterface UseTableSortOptions<T extends TableData> {\n\tdata: T[];\n\tinitialSort?: SortState;\n\tcontrolledSort?: SortState;\n\tonSortChange?: (sort: SortState) => void;\n}\n\ninterface UseTableSortReturn<T extends TableData> {\n\tsortedData: T[];\n\tsortState: SortState;\n\thandleSort: (columnId: string) => void;\n\tclearSort: () => void;\n}\n\nexport function useTableSort<T extends TableData>({\n\tdata,\n\tinitialSort,\n\tcontrolledSort,\n\tonSortChange,\n}: UseTableSortOptions<T>): UseTableSortReturn<T> {\n\tconst [internalSort, setInternalSort] = useState<SortState>(\n\t\tinitialSort ?? { columnId: null, direction: \"asc\" },\n\t);\n\n\t// Usar estado controlado si está disponible\n\tconst sortState = controlledSort ?? internalSort;\n\n\tconst handleSort = useCallback(\n\t\t(columnId: string) => {\n\t\t\tconst newState: SortState = {\n\t\t\t\tcolumnId,\n\t\t\t\tdirection:\n\t\t\t\t\tsortState.columnId === columnId && sortState.direction === \"asc\"\n\t\t\t\t\t\t? \"desc\"\n\t\t\t\t\t\t: \"asc\",\n\t\t\t};\n\n\t\t\tif (!controlledSort) {\n\t\t\t\tsetInternalSort(newState);\n\t\t\t}\n\t\t\tonSortChange?.(newState);\n\t\t},\n\t\t[sortState, controlledSort, onSortChange],\n\t);\n\n\tconst clearSort = useCallback(() => {\n\t\tconst newState: SortState = { columnId: null, direction: \"asc\" };\n\t\tif (!controlledSort) {\n\t\t\tsetInternalSort(newState);\n\t\t}\n\t\tonSortChange?.(newState);\n\t}, [controlledSort, onSortChange]);\n\n\tconst sortedData = useMemo(() => {\n\t\tif (!sortState.columnId) return data;\n\t\treturn sortData(data, sortState.columnId, sortState.direction);\n\t}, [data, sortState]);\n\n\treturn { sortedData, sortState, handleSort, clearSort };\n}\n","import { useState, useCallback, useMemo } from \"react\";\nimport { FilterState, TableData, Column } from \"../types\";\nimport { filterData } from \"../utils/filterData\";\n\ninterface UseTableFilterOptions<T extends TableData> {\n\tdata: T[];\n\tcolumns: Column<T>[];\n\tinitialFilters?: FilterState;\n\tcontrolledFilters?: FilterState;\n\tonFilterChange?: (filters: FilterState) => void;\n}\n\ninterface UseTableFilterReturn<T extends TableData> {\n\tfilteredData: T[];\n\tfilters: FilterState;\n\tsetFilter: (\n\t\tcolumnId: string,\n\t\tvalue: string | number | boolean | null,\n\t) => void;\n\tclearFilters: () => void;\n\tclearFilter: (columnId: string) => void;\n}\n\nexport function useTableFilter<T extends TableData>({\n\tdata,\n\tcolumns,\n\tinitialFilters,\n\tcontrolledFilters,\n\tonFilterChange,\n}: UseTableFilterOptions<T>): UseTableFilterReturn<T> {\n\tconst [internalFilters, setInternalFilters] = useState<FilterState>(\n\t\tinitialFilters ?? {},\n\t);\n\n\t// Usar estado controlado si está disponible\n\tconst filters = controlledFilters ?? internalFilters;\n\n\tconst setFilter = useCallback(\n\t\t(columnId: string, value: string | number | boolean | null) => {\n\t\t\tconst newFilters = { ...filters };\n\n\t\t\tif (value === null || value === undefined || value === \"\") {\n\t\t\t\tdelete newFilters[columnId];\n\t\t\t} else {\n\t\t\t\tnewFilters[columnId] = value;\n\t\t\t}\n\n\t\t\tif (!controlledFilters) {\n\t\t\t\tsetInternalFilters(newFilters);\n\t\t\t}\n\t\t\tonFilterChange?.(newFilters);\n\t\t},\n\t\t[filters, controlledFilters, onFilterChange],\n\t);\n\n\tconst clearFilter = useCallback(\n\t\t(columnId: string) => {\n\t\t\tconst newFilters = { ...filters };\n\t\t\tdelete newFilters[columnId];\n\n\t\t\tif (!controlledFilters) {\n\t\t\t\tsetInternalFilters(newFilters);\n\t\t\t}\n\t\t\tonFilterChange?.(newFilters);\n\t\t},\n\t\t[filters, controlledFilters, onFilterChange],\n\t);\n\n\tconst clearFilters = useCallback(() => {\n\t\tif (!controlledFilters) {\n\t\t\tsetInternalFilters({});\n\t\t}\n\t\tonFilterChange?.({});\n\t}, [controlledFilters, onFilterChange]);\n\n\tconst filteredData = useMemo(() => {\n\t\treturn filterData(data, filters, columns);\n\t}, [data, filters, columns]);\n\n\treturn { filteredData, filters, setFilter, clearFilters, clearFilter };\n}\n","import { useState, useCallback, useMemo } from \"react\";\nimport { PaginationConfig, TableData } from \"../types\";\n\ninterface UseTablePaginationOptions<T extends TableData> {\n\tdata: T[];\n\tconfig?: PaginationConfig | false;\n\tonPageChange?: (page: number, pageSize: number) => void;\n}\n\ninterface UseTablePaginationReturn<T extends TableData> {\n\tpaginatedData: T[];\n\tpage: number;\n\tpageSize: number;\n\ttotalPages: number;\n\ttotalItems: number;\n\tgoToPage: (page: number) => void;\n\tnextPage: () => void;\n\tprevPage: () => void;\n\tchangePageSize: (size: number) => void;\n\thasNextPage: boolean;\n\thasPrevPage: boolean;\n\tstartIndex: number;\n\tendIndex: number;\n}\n\nexport function useTablePagination<T extends TableData>({\n\tdata,\n\tconfig,\n\tonPageChange,\n}: UseTablePaginationOptions<T>): UseTablePaginationReturn<T> {\n\tconst enabled = config !== false;\n\n\tconst initialPage =\n\t\tconfig && typeof config === \"object\" ? (config.page ?? 1) : 1;\n\tconst initialPageSize =\n\t\tconfig && typeof config === \"object\" ? (config.pageSize ?? 10) : 10;\n\tconst serverTotalItems =\n\t\tconfig && typeof config === \"object\" ? config.totalItems : undefined;\n\n\tconst [page, setPage] = useState(initialPage);\n\tconst [pageSize, setPageSize] = useState(initialPageSize);\n\n\tconst totalItems = serverTotalItems ?? data.length;\n\tconst totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n\n\tconst goToPage = useCallback(\n\t\t(newPage: number) => {\n\t\t\tconst validPage = Math.max(1, Math.min(newPage, totalPages));\n\t\t\tsetPage(validPage);\n\t\t\tonPageChange?.(validPage, pageSize);\n\t\t},\n\t\t[totalPages, pageSize, onPageChange],\n\t);\n\n\tconst nextPage = useCallback(() => {\n\t\tif (page < totalPages) {\n\t\t\tgoToPage(page + 1);\n\t\t}\n\t}, [page, totalPages, goToPage]);\n\n\tconst prevPage = useCallback(() => {\n\t\tif (page > 1) {\n\t\t\tgoToPage(page - 1);\n\t\t}\n\t}, [page, goToPage]);\n\n\tconst changePageSize = useCallback(\n\t\t(newSize: number) => {\n\t\t\tsetPageSize(newSize);\n\t\t\tsetPage(1);\n\t\t\tonPageChange?.(1, newSize);\n\t\t},\n\t\t[onPageChange],\n\t);\n\n\tconst paginatedData = useMemo(() => {\n\t\tif (!enabled || serverTotalItems !== undefined) {\n\t\t\t// Si hay paginación del servidor, devolver datos tal cual\n\t\t\treturn data;\n\t\t}\n\t\tconst start = (page - 1) * pageSize;\n\t\treturn data.slice(start, start + pageSize);\n\t}, [data, page, pageSize, enabled, serverTotalItems]);\n\n\tconst startIndex = (page - 1) * pageSize + 1;\n\tconst endIndex = Math.min(page * pageSize, totalItems);\n\n\treturn {\n\t\tpaginatedData,\n\t\tpage,\n\t\tpageSize,\n\t\ttotalPages,\n\t\ttotalItems,\n\t\tgoToPage,\n\t\tnextPage,\n\t\tprevPage,\n\t\tchangePageSize,\n\t\thasNextPage: page < totalPages,\n\t\thasPrevPage: page > 1,\n\t\tstartIndex,\n\t\tendIndex,\n\t};\n}\n","import { useState, useCallback, useMemo } from \"react\";\nimport { TableData } from \"../types\";\n\ninterface UseTableSelectionOptions<T extends TableData> {\n\tdata: T[];\n\trowKey: keyof T | ((row: T, index: number) => string);\n\tmode?: \"single\" | \"multiple\";\n\tinitialSelection?: T[];\n\tcontrolledSelection?: T[];\n\tonSelectionChange?: (selectedRows: T[]) => void;\n}\n\ninterface UseTableSelectionReturn<T extends TableData> {\n\tselectedRows: T[];\n\tisSelected: (row: T, index: number) => boolean;\n\ttoggleRow: (row: T, index: number) => void;\n\tselectRow: (row: T, index: number) => void;\n\tdeselectRow: (row: T, index: number) => void;\n\tselectAll: () => void;\n\tdeselectAll: () => void;\n\tisAllSelected: boolean;\n\tisPartiallySelected: boolean;\n\tselectedCount: number;\n}\n\nexport function useTableSelection<T extends TableData>({\n\tdata,\n\trowKey,\n\tmode = \"multiple\",\n\tinitialSelection,\n\tcontrolledSelection,\n\tonSelectionChange,\n}: UseTableSelectionOptions<T>): UseTableSelectionReturn<T> {\n\tconst [internalSelection, setInternalSelection] = useState<T[]>(\n\t\tinitialSelection ?? [],\n\t);\n\n\t// Usar estado controlado si está disponible\n\tconst selectedRows = controlledSelection ?? internalSelection;\n\n\tconst getRowKey = useCallback(\n\t\t(row: T, index: number): string => {\n\t\t\tif (typeof rowKey === \"function\") {\n\t\t\t\treturn rowKey(row, index);\n\t\t\t}\n\t\t\treturn String(row[rowKey]);\n\t\t},\n\t\t[rowKey],\n\t);\n\n\tconst selectedKeys = useMemo(() => {\n\t\treturn new Set(selectedRows.map((row, idx) => getRowKey(row, idx)));\n\t}, [selectedRows, getRowKey]);\n\n\tconst isSelected = useCallback(\n\t\t(row: T, index: number): boolean => {\n\t\t\tconst key = getRowKey(row, index);\n\t\t\treturn selectedKeys.has(key);\n\t\t},\n\t\t[getRowKey, selectedKeys],\n\t);\n\n\tconst updateSelection = useCallback(\n\t\t(newSelection: T[]) => {\n\t\t\tif (!controlledSelection) {\n\t\t\t\tsetInternalSelection(newSelection);\n\t\t\t}\n\t\t\tonSelectionChange?.(newSelection);\n\t\t},\n\t\t[controlledSelection, onSelectionChange],\n\t);\n\n\tconst toggleRow = useCallback(\n\t\t(row: T, index: number) => {\n\t\t\tconst key = getRowKey(row, index);\n\t\t\tlet newSelection: T[];\n\n\t\t\tif (mode === \"single\") {\n\t\t\t\tnewSelection = selectedKeys.has(key) ? [] : [row];\n\t\t\t} else {\n\t\t\t\tif (selectedKeys.has(key)) {\n\t\t\t\t\tnewSelection = selectedRows.filter((r, i) => getRowKey(r, i) !== key);\n\t\t\t\t} else {\n\t\t\t\t\tnewSelection = [...selectedRows, row];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tupdateSelection(newSelection);\n\t\t},\n\t\t[mode, selectedKeys, selectedRows, getRowKey, updateSelection],\n\t);\n\n\tconst selectRow = useCallback(\n\t\t(row: T, index: number) => {\n\t\t\tif (!isSelected(row, index)) {\n\t\t\t\tconst newSelection = mode === \"single\" ? [row] : [...selectedRows, row];\n\t\t\t\tupdateSelection(newSelection);\n\t\t\t}\n\t\t},\n\t\t[isSelected, mode, selectedRows, updateSelection],\n\t);\n\n\tconst deselectRow = useCallback(\n\t\t(row: T, index: number) => {\n\t\t\tconst key = getRowKey(row, index);\n\t\t\tconst newSelection = selectedRows.filter(\n\t\t\t\t(r, i) => getRowKey(r, i) !== key,\n\t\t\t);\n\t\t\tupdateSelection(newSelection);\n\t\t},\n\t\t[selectedRows, getRowKey, updateSelection],\n\t);\n\n\tconst selectAll = useCallback(() => {\n\t\tif (mode === \"multiple\") {\n\t\t\tupdateSelection([...data]);\n\t\t}\n\t}, [data, mode, updateSelection]);\n\n\tconst deselectAll = useCallback(() => {\n\t\tupdateSelection([]);\n\t}, [updateSelection]);\n\n\tconst isAllSelected = data.length > 0 && selectedRows.length === data.length;\n\tconst isPartiallySelected =\n\t\tselectedRows.length > 0 && selectedRows.length < data.length;\n\n\treturn {\n\t\tselectedRows,\n\t\tisSelected,\n\t\ttoggleRow,\n\t\tselectRow,\n\t\tdeselectRow,\n\t\tselectAll,\n\t\tdeselectAll,\n\t\tisAllSelected,\n\t\tisPartiallySelected,\n\t\tselectedCount: selectedRows.length,\n\t};\n}\n","import { useState, useCallback, useMemo } from \"react\";\nimport { TableData, Column } from \"../types\";\nimport { searchData } from \"../utils/filterData\";\n\ninterface UseTableSearchOptions<T extends TableData> {\n\tdata: T[];\n\tcolumns: Column<T>[];\n\tsearchColumns?: string[];\n\tinitialValue?: string;\n\tcontrolledValue?: string;\n\tonSearchChange?: (value: string) => void;\n\tdebounceMs?: number;\n}\n\ninterface UseTableSearchReturn<T extends TableData> {\n\tsearchedData: T[];\n\tsearchValue: string;\n\thandleSearch: (value: string) => void;\n\tclearSearch: () => void;\n}\n\nexport function useTableSearch<T extends TableData>({\n\tdata,\n\tcolumns,\n\tsearchColumns,\n\tinitialValue,\n\tcontrolledValue,\n\tonSearchChange,\n}: UseTableSearchOptions<T>): UseTableSearchReturn<T> {\n\tconst [internalValue, setInternalValue] = useState(initialValue ?? \"\");\n\n\t// Usar valor controlado si está disponible\n\tconst searchValue = controlledValue ?? internalValue;\n\n\tconst handleSearch = useCallback(\n\t\t(value: string) => {\n\t\t\tif (controlledValue === undefined) {\n\t\t\t\tsetInternalValue(value);\n\t\t\t}\n\t\t\tonSearchChange?.(value);\n\t\t},\n\t\t[controlledValue, onSearchChange],\n\t);\n\n\tconst clearSearch = useCallback(() => {\n\t\tif (controlledValue === undefined) {\n\t\t\tsetInternalValue(\"\");\n\t\t}\n\t\tonSearchChange?.(\"\");\n\t}, [controlledValue, onSearchChange]);\n\n\tconst searchedData = useMemo(() => {\n\t\treturn searchData(data, searchValue, columns, searchColumns);\n\t}, [data, searchValue, columns, searchColumns]);\n\n\treturn { searchedData, searchValue, handleSearch, clearSearch };\n}\n","import { useMemo, useState, useCallback, ReactNode } from 'react';\nimport {\n BetterTableProps,\n TableData,\n defaultLocale,\n PaginationConfig,\n} from '../types';\nimport { TableProvider, TableContextValue } from '../context';\nimport { useTableSort } from '../hooks/useTableSort';\nimport { useTableFilter } from '../hooks/useTableFilter';\nimport { useTablePagination } from '../hooks/useTablePagination';\nimport { useTableSelection } from '../hooks/useTableSelection';\nimport { useTableSearch } from '../hooks/useTableSearch';\nimport {\n TableHeader,\n TableBody,\n TablePagination,\n TableToolbar,\n TableEmpty,\n TableLoadingOverlay,\n TableModal,\n} from '../components';\nimport '../styles/index.css';\nimport clsx from 'clsx';\n\nfunction BetterTableInner<T extends TableData>(\n props: BetterTableProps<T>\n): React.ReactElement {\n const {\n // Data\n data,\n columns,\n rowKey = 'id' as keyof T,\n\n // Actions\n rowActions,\n globalActions,\n\n // Pagination\n pagination = { pageSize: 10 },\n onPageChange,\n\n // Sort\n sort: controlledSort,\n onSortChange,\n\n // Filter\n filters: controlledFilters,\n onFilterChange,\n\n // Search\n searchable = false,\n searchValue: controlledSearchValue,\n onSearchChange,\n searchColumns,\n\n // Selection - now auto-inferred if not explicitly set\n selectable: selectableProp,\n selectedRows: controlledSelectedRows,\n onSelectionChange,\n selectionMode = 'multiple',\n\n // States\n loading = false,\n loadingComponent,\n emptyComponent,\n\n // Styling\n classNames = {},\n styles = {},\n locale: userLocale,\n stickyHeader = false,\n maxHeight,\n bordered = false,\n striped = false,\n hoverable = true,\n size = 'medium',\n\n // Callbacks\n onRowClick,\n onRowDoubleClick,\n\n // Accessibility\n ariaLabel,\n ariaDescribedBy,\n } = props;\n\n // Auto-infer selectable: show selection if there's a reason to select\n // - Explicitly set by user (selectableProp)\n // - Has globalAction with requiresSelection\n // - Has onSelectionChange callback\n const selectable = useMemo(() => {\n // If explicitly set, use that value\n if (selectableProp !== undefined) {\n return selectableProp;\n }\n // Auto-infer: true if there's a functional reason to select\n const hasSelectionAction = globalActions?.some(\n (action) => action.requiresSelection\n );\n const hasSelectionCallback = onSelectionChange !== undefined;\n return hasSelectionAction || hasSelectionCallback;\n }, [selectableProp, globalActions, onSelectionChange]);\n\n // Merge locale with defaults\n const locale = useMemo(\n () => ({ ...defaultLocale, ...userLocale }),\n [userLocale]\n );\n\n // Modal state\n const [isModalOpen, setModalOpen] = useState(false);\n const [modalContent, setModalContent] = useState<ReactNode | null>(null);\n\n const openModal = useCallback((content: ReactNode) => {\n setModalContent(content);\n setModalOpen(true);\n }, []);\n\n const closeModal = useCallback(() => {\n setModalOpen(false);\n setModalContent(null);\n }, []);\n\n // Pagination config\n const paginationConfig: PaginationConfig | false = useMemo(() => {\n if (pagination === false) return false;\n return {\n pageSize: 10,\n pageSizeOptions: [10, 20, 50, 100],\n showSizeChanger: false,\n ...pagination,\n };\n }, [pagination]);\n\n // Search hook\n const {\n searchedData,\n searchValue,\n handleSearch,\n clearSearch,\n } = useTableSearch({\n data,\n columns,\n searchColumns,\n controlledValue: controlledSearchValue,\n onSearchChange,\n });\n\n // Filter hook\n const {\n filteredData,\n filters,\n setFilter,\n clearFilters,\n } = useTableFilter({\n data: searchedData,\n columns,\n controlledFilters,\n onFilterChange,\n });\n\n // Sort hook\n const { sortedData, sortState, handleSort } = useTableSort({\n data: filteredData,\n controlledSort,\n onSortChange,\n });\n\n // Selection hook\n const {\n selectedRows,\n isSelected,\n toggleRow,\n selectAll,\n deselectAll,\n isAllSelected,\n isPartiallySelected,\n selectedCount,\n } = useTableSelection({\n data: sortedData,\n rowKey,\n mode: selectionMode,\n controlledSelection: controlledSelectedRows,\n onSelectionChange,\n });\n\n // Pagination hook\n const {\n paginatedData,\n page,\n pageSize,\n totalPages,\n totalItems,\n goToPage,\n nextPage,\n prevPage,\n changePageSize,\n hasNextPage,\n hasPrevPage,\n startIndex,\n endIndex,\n } = useTablePagination({\n data: sortedData,\n config: paginationConfig,\n onPageChange,\n });\n\n // Build context value\n const contextValue: TableContextValue<T> = useMemo(\n () => ({\n // Data\n data,\n processedData: paginatedData,\n columns,\n rowKey,\n\n // Actions\n rowActions,\n globalActions,\n\n // Sort\n sortState,\n handleSort,\n\n // Filter\n filters,\n setFilter,\n clearFilters,\n\n // Search\n searchValue,\n handleSearch,\n clearSearch,\n searchable,\n\n // Selection\n selectedRows,\n isSelected,\n toggleRow,\n selectAll,\n deselectAll,\n isAllSelected,\n isPartiallySelected,\n selectable,\n selectionMode,\n selectedCount,\n\n // Pagination\n page,\n pageSize,\n totalPages,\n totalItems,\n goToPage,\n nextPage,\n prevPage,\n changePageSize,\n hasNextPage,\n hasPrevPage,\n startIndex,\n endIndex,\n paginationEnabled: pagination !== false,\n pageSizeOptions:\n paginationConfig && typeof paginationConfig === 'object'\n ? paginationConfig.pageSizeOptions ?? [10, 20, 50, 100]\n : [10, 20, 50, 100],\n showSizeChanger:\n paginationConfig && typeof paginationConfig === 'object'\n ? paginationConfig.showSizeChanger ?? false\n : false,\n\n // UI State\n loading,\n loadingComponent,\n emptyComponent,\n\n // Styling\n locale,\n classNames,\n size,\n bordered,\n striped,\n hoverable,\n stickyHeader,\n\n // Callbacks\n onRowClick,\n onRowDoubleClick,\n\n // Modal\n openModal,\n closeModal,\n modalContent,\n isModalOpen,\n }),\n [\n data,\n paginatedData,\n columns,\n rowKey,\n rowActions,\n globalActions,\n sortState,\n handleSort,\n filters,\n setFilter,\n clearFilters,\n searchValue,\n handleSearch,\n clearSearch,\n searchable,\n selectedRows,\n isSelected,\n toggleRow,\n selectAll,\n deselectAll,\n isAllSelected,\n isPartiallySelected,\n selectable,\n selectionMode,\n selectedCount,\n page,\n pageSize,\n totalPages,\n totalItems,\n goToPage,\n nextPage,\n prevPage,\n changePageSize,\n hasNextPage,\n hasPrevPage,\n startIndex,\n endIndex,\n pagination,\n paginationConfig,\n loading,\n loadingComponent,\n emptyComponent,\n locale,\n classNames,\n size,\n bordered,\n striped,\n hoverable,\n stickyHeader,\n onRowClick,\n onRowDoubleClick,\n openModal,\n closeModal,\n modalContent,\n isModalOpen,\n ]\n );\n\n const hasData = paginatedData.length > 0;\n\n return (\n <TableProvider value={contextValue}>\n <div\n className={clsx(\n 'bt-container',\n `bt-size-${size}`,\n loading && 'bt-container-loading',\n classNames.container\n )}\n style={styles.container}\n >\n <TableToolbar />\n\n <div\n className={clsx('bt-table-wrapper', bordered && 'bt-bordered')}\n style={{ maxHeight }}\n >\n <table\n className={clsx('bt-table', classNames.table)}\n style={styles.table}\n role=\"grid\"\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-busy={loading}\n >\n <TableHeader />\n {hasData ? <TableBody /> : <TableEmpty />}\n </table>\n\n <TableLoadingOverlay show={loading && hasData} />\n </div>\n\n {pagination !== false && <TablePagination />}\n\n <TableModal />\n </div>\n </TableProvider>\n );\n}\n\n// Export the generic component directly to preserve type parameters\nexport const BetterTable = BetterTableInner;\nexport default BetterTable;\n"],"names":["defaultLocale","TableContext","createContext","useTableContext","context","useContext","TableProvider","value","children","jsx","r","t","f","n","o","clsx","TableHeaderCellInner","column","sortState","handleSort","filters","setFilter","locale","isSorted","sortDirection","handleSortClick","useCallback","handleFilterChange","e","handleKeyDown","renderSortIcon","renderFilterInput","filterValue","jsxs","TableHeaderCell","React","TableHeaderInner","columns","selectable","selectionMode","rowActions","isAllSelected","isPartiallySelected","selectAll","deselectAll","stickyHeader","visibleColumns","col","hasActions","handleSelectAllChange","el","TableHeader","getValueFromPath","obj","path","keys","result","key","sortData","data","columnId","direction","a","b","valueA","valueB","comparison","strA","strB","filterData","activeFilters","row","cellValue","filterDate","searchData","searchValue","searchColumnIds","searchLower","columnsToSearch","TableCellInner","rowIndex","content","date","TableCell","TableActionsInner","openModal","handleActionClick","action","ModalContent","url","isDisabled","TableActions","TableRowInner","isSelected","toggleRow","striped","hoverable","onRowClick","onRowDoubleClick","selected","isClickable","handleRowClick","handleRowDoubleClick","handleCheckboxChange","TableRow","TableBodyInner","processedData","rowKey","getRowKey","index","keyValue","TableBody","TablePagination","page","pageSize","totalPages","totalItems","goToPage","nextPage","prevPage","changePageSize","hasNextPage","hasPrevPage","startIndex","endIndex","paginationEnabled","pageSizeOptions","showSizeChanger","classNames","handlePageSizeChange","handleQuickJump","pageNumbers","useMemo","pages","i","start","end","size","pageNum","idx","TableToolbarInner","searchable","handleSearch","clearSearch","globalActions","selectedRows","selectedCount","handleSearchChange","TableToolbar","TableEmpty","emptyComponent","colSpan","TableLoadingOverlay","show","loadingComponent","Fragment","TableModal","isModalOpen","modalContent","closeModal","handleBackdropClick","useEffect","useTableSort","initialSort","controlledSort","onSortChange","internalSort","setInternalSort","useState","newState","clearSort","useTableFilter","initialFilters","controlledFilters","onFilterChange","internalFilters","setInternalFilters","newFilters","clearFilter","clearFilters","useTablePagination","config","onPageChange","enabled","initialPage","initialPageSize","serverTotalItems","setPage","setPageSize","newPage","validPage","newSize","paginatedData","useTableSelection","mode","initialSelection","controlledSelection","onSelectionChange","internalSelection","setInternalSelection","selectedKeys","updateSelection","newSelection","selectRow","deselectRow","useTableSearch","searchColumns","initialValue","controlledValue","onSearchChange","internalValue","setInternalValue","BetterTableInner","props","pagination","controlledSearchValue","selectableProp","controlledSelectedRows","loading","styles","userLocale","maxHeight","bordered","ariaLabel","ariaDescribedBy","setModalOpen","setModalContent","paginationConfig","searchedData","filteredData","sortedData","contextValue","hasData","BetterTable"],"mappings":"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","x_google_ignoreList":[2]}
@@ -0,0 +1,4 @@
1
+ import { BetterTableProps, TableData } from '../types';
2
+ declare function BetterTableInner<T extends TableData>(props: BetterTableProps<T>): React.ReactElement;
3
+ export declare const BetterTable: typeof BetterTableInner;
4
+ export default BetterTable;
@@ -0,0 +1,8 @@
1
+ import { TableData } from '../types';
2
+ interface TableActionsProps<T extends TableData> {
3
+ row: T;
4
+ rowIndex: number;
5
+ }
6
+ declare function TableActionsInner<T extends TableData>({ row, rowIndex, }: TableActionsProps<T>): import("react/jsx-runtime").JSX.Element | null;
7
+ export declare const TableActions: typeof TableActionsInner;
8
+ export {};
@@ -0,0 +1,4 @@
1
+ import { TableData } from '../types';
2
+ declare function TableBodyInner<T extends TableData>(): import("react/jsx-runtime").JSX.Element;
3
+ export declare const TableBody: typeof TableBodyInner;
4
+ export {};
@@ -0,0 +1,9 @@
1
+ import { TableData, Column } from '../types';
2
+ interface TableCellProps<T extends TableData> {
3
+ row: T;
4
+ column: Column<T>;
5
+ rowIndex: number;
6
+ }
7
+ declare function TableCellInner<T extends TableData>({ row, column, rowIndex, }: TableCellProps<T>): import("react/jsx-runtime").JSX.Element;
8
+ export declare const TableCell: typeof TableCellInner;
9
+ export {};
@@ -0,0 +1 @@
1
+ export declare function TableEmpty(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { TableData } from '../types';
2
+ declare function TableHeaderInner<T extends TableData>(): import("react/jsx-runtime").JSX.Element;
3
+ export declare const TableHeader: typeof TableHeaderInner;
4
+ export {};
@@ -0,0 +1,7 @@
1
+ import { TableData, Column } from '../types';
2
+ interface TableHeaderCellProps<T extends TableData> {
3
+ column: Column<T>;
4
+ }
5
+ declare function TableHeaderCellInner<T extends TableData>({ column, }: TableHeaderCellProps<T>): import("react/jsx-runtime").JSX.Element;
6
+ export declare const TableHeaderCell: typeof TableHeaderCellInner;
7
+ export {};
@@ -0,0 +1,6 @@
1
+ export declare function TableLoading(): import("react/jsx-runtime").JSX.Element;
2
+ interface TableLoadingOverlayProps {
3
+ show: boolean;
4
+ }
5
+ export declare function TableLoadingOverlay({ show }: TableLoadingOverlayProps): import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
@@ -0,0 +1 @@
1
+ export declare function TableModal(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1 @@
1
+ export declare function TablePagination(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,8 @@
1
+ import { TableData } from '../types';
2
+ interface TableRowProps<T extends TableData> {
3
+ row: T;
4
+ rowIndex: number;
5
+ }
6
+ declare function TableRowInner<T extends TableData>({ row, rowIndex }: TableRowProps<T>): import("react/jsx-runtime").JSX.Element;
7
+ export declare const TableRow: typeof TableRowInner;
8
+ export {};
@@ -0,0 +1,4 @@
1
+ import { TableData } from '../types';
2
+ declare function TableToolbarInner<T extends TableData>(): import("react/jsx-runtime").JSX.Element | null;
3
+ export declare const TableToolbar: typeof TableToolbarInner;
4
+ export {};
@@ -0,0 +1,12 @@
1
+ export { TableHeader } from './TableHeader';
2
+ export { TableHeaderCell } from './TableHeaderCell';
3
+ export { TableBody } from './TableBody';
4
+ export { TableRow } from './TableRow';
5
+ export { TableCell } from './TableCell';
6
+ export { TableActions } from './TableActions';
7
+ export { TablePagination } from './TablePagination';
8
+ export { TableToolbar } from './TableToolbar';
9
+ export { TableEmpty } from './TableEmpty';
10
+ export { TableLoading, TableLoadingOverlay } from './TableLoading';
11
+ export { TableModal } from './TableModal';
12
+ export { BetterTable, default } from './Table';
@@ -0,0 +1,68 @@
1
+ import { ReactNode } from 'react';
2
+ import { TableData, Column, SortState, FilterState, TableLocale, TableClassNames, RowAction, GlobalAction } from '../types';
3
+ export interface TableContextValue<T extends TableData = TableData> {
4
+ data: T[];
5
+ processedData: T[];
6
+ columns: Column<T>[];
7
+ rowKey: keyof T | ((row: T, index: number) => string);
8
+ rowActions?: RowAction<T>[];
9
+ globalActions?: GlobalAction<T>[];
10
+ sortState: SortState;
11
+ handleSort: (columnId: string) => void;
12
+ filters: FilterState;
13
+ setFilter: (columnId: string, value: string | number | boolean | null) => void;
14
+ clearFilters: () => void;
15
+ searchValue: string;
16
+ handleSearch: (value: string) => void;
17
+ clearSearch: () => void;
18
+ searchable: boolean;
19
+ selectedRows: T[];
20
+ isSelected: (row: T, index: number) => boolean;
21
+ toggleRow: (row: T, index: number) => void;
22
+ selectAll: () => void;
23
+ deselectAll: () => void;
24
+ isAllSelected: boolean;
25
+ isPartiallySelected: boolean;
26
+ selectedCount: number;
27
+ selectable: boolean;
28
+ selectionMode: 'single' | 'multiple';
29
+ page: number;
30
+ pageSize: number;
31
+ totalPages: number;
32
+ totalItems: number;
33
+ goToPage: (page: number) => void;
34
+ nextPage: () => void;
35
+ prevPage: () => void;
36
+ changePageSize: (size: number) => void;
37
+ hasNextPage: boolean;
38
+ hasPrevPage: boolean;
39
+ startIndex: number;
40
+ endIndex: number;
41
+ paginationEnabled: boolean;
42
+ pageSizeOptions: number[];
43
+ showSizeChanger: boolean;
44
+ loading: boolean;
45
+ loadingComponent?: ReactNode;
46
+ emptyComponent?: ReactNode;
47
+ locale: TableLocale;
48
+ classNames: TableClassNames;
49
+ size: 'small' | 'medium' | 'large';
50
+ bordered: boolean;
51
+ striped: boolean;
52
+ hoverable: boolean;
53
+ stickyHeader: boolean;
54
+ onRowClick?: (row: T, rowIndex: number) => void;
55
+ onRowDoubleClick?: (row: T, rowIndex: number) => void;
56
+ openModal: (content: ReactNode) => void;
57
+ closeModal: () => void;
58
+ modalContent: ReactNode | null;
59
+ isModalOpen: boolean;
60
+ }
61
+ export declare function useTableContext<T extends TableData>(): TableContextValue<T>;
62
+ interface TableProviderProps<T extends TableData> {
63
+ value: TableContextValue<T>;
64
+ children: ReactNode;
65
+ }
66
+ export declare function TableProvider<T extends TableData>({ value, children, }: TableProviderProps<T>): import("react/jsx-runtime").JSX.Element;
67
+ export declare const defaultTableContext: Partial<TableContextValue>;
68
+ export {};
@@ -0,0 +1,2 @@
1
+ export { TableProvider, useTableContext, defaultTableContext, } from './TableContext';
2
+ export type { TableContextValue } from './TableContext';
@@ -0,0 +1,5 @@
1
+ export { useTableSort } from './useTableSort';
2
+ export { useTableFilter } from './useTableFilter';
3
+ export { useTablePagination } from './useTablePagination';
4
+ export { useTableSelection } from './useTableSelection';
5
+ export { useTableSearch } from './useTableSearch';
@@ -0,0 +1,17 @@
1
+ import { FilterState, TableData, Column } from '../types';
2
+ interface UseTableFilterOptions<T extends TableData> {
3
+ data: T[];
4
+ columns: Column<T>[];
5
+ initialFilters?: FilterState;
6
+ controlledFilters?: FilterState;
7
+ onFilterChange?: (filters: FilterState) => void;
8
+ }
9
+ interface UseTableFilterReturn<T extends TableData> {
10
+ filteredData: T[];
11
+ filters: FilterState;
12
+ setFilter: (columnId: string, value: string | number | boolean | null) => void;
13
+ clearFilters: () => void;
14
+ clearFilter: (columnId: string) => void;
15
+ }
16
+ export declare function useTableFilter<T extends TableData>({ data, columns, initialFilters, controlledFilters, onFilterChange, }: UseTableFilterOptions<T>): UseTableFilterReturn<T>;
17
+ export {};
@@ -0,0 +1,23 @@
1
+ import { PaginationConfig, TableData } from '../types';
2
+ interface UseTablePaginationOptions<T extends TableData> {
3
+ data: T[];
4
+ config?: PaginationConfig | false;
5
+ onPageChange?: (page: number, pageSize: number) => void;
6
+ }
7
+ interface UseTablePaginationReturn<T extends TableData> {
8
+ paginatedData: T[];
9
+ page: number;
10
+ pageSize: number;
11
+ totalPages: number;
12
+ totalItems: number;
13
+ goToPage: (page: number) => void;
14
+ nextPage: () => void;
15
+ prevPage: () => void;
16
+ changePageSize: (size: number) => void;
17
+ hasNextPage: boolean;
18
+ hasPrevPage: boolean;
19
+ startIndex: number;
20
+ endIndex: number;
21
+ }
22
+ export declare function useTablePagination<T extends TableData>({ data, config, onPageChange, }: UseTablePaginationOptions<T>): UseTablePaginationReturn<T>;
23
+ export {};
@@ -0,0 +1,18 @@
1
+ import { TableData, Column } from '../types';
2
+ interface UseTableSearchOptions<T extends TableData> {
3
+ data: T[];
4
+ columns: Column<T>[];
5
+ searchColumns?: string[];
6
+ initialValue?: string;
7
+ controlledValue?: string;
8
+ onSearchChange?: (value: string) => void;
9
+ debounceMs?: number;
10
+ }
11
+ interface UseTableSearchReturn<T extends TableData> {
12
+ searchedData: T[];
13
+ searchValue: string;
14
+ handleSearch: (value: string) => void;
15
+ clearSearch: () => void;
16
+ }
17
+ export declare function useTableSearch<T extends TableData>({ data, columns, searchColumns, initialValue, controlledValue, onSearchChange, }: UseTableSearchOptions<T>): UseTableSearchReturn<T>;
18
+ export {};
@@ -0,0 +1,23 @@
1
+ import { TableData } from '../types';
2
+ interface UseTableSelectionOptions<T extends TableData> {
3
+ data: T[];
4
+ rowKey: keyof T | ((row: T, index: number) => string);
5
+ mode?: "single" | "multiple";
6
+ initialSelection?: T[];
7
+ controlledSelection?: T[];
8
+ onSelectionChange?: (selectedRows: T[]) => void;
9
+ }
10
+ interface UseTableSelectionReturn<T extends TableData> {
11
+ selectedRows: T[];
12
+ isSelected: (row: T, index: number) => boolean;
13
+ toggleRow: (row: T, index: number) => void;
14
+ selectRow: (row: T, index: number) => void;
15
+ deselectRow: (row: T, index: number) => void;
16
+ selectAll: () => void;
17
+ deselectAll: () => void;
18
+ isAllSelected: boolean;
19
+ isPartiallySelected: boolean;
20
+ selectedCount: number;
21
+ }
22
+ export declare function useTableSelection<T extends TableData>({ data, rowKey, mode, initialSelection, controlledSelection, onSelectionChange, }: UseTableSelectionOptions<T>): UseTableSelectionReturn<T>;
23
+ export {};
@@ -0,0 +1,15 @@
1
+ import { SortState, TableData } from '../types';
2
+ interface UseTableSortOptions<T extends TableData> {
3
+ data: T[];
4
+ initialSort?: SortState;
5
+ controlledSort?: SortState;
6
+ onSortChange?: (sort: SortState) => void;
7
+ }
8
+ interface UseTableSortReturn<T extends TableData> {
9
+ sortedData: T[];
10
+ sortState: SortState;
11
+ handleSort: (columnId: string) => void;
12
+ clearSort: () => void;
13
+ }
14
+ export declare function useTableSort<T extends TableData>({ data, initialSort, controlledSort, onSortChange, }: UseTableSortOptions<T>): UseTableSortReturn<T>;
15
+ export {};
@@ -0,0 +1,13 @@
1
+ export { BetterTable, default } from './components';
2
+ export { defaultLocale } from './types';
3
+ export type { BetterTableProps, Column, RowAction, GlobalAction, PaginationConfig, SortState, FilterState, TableClassNames, TableLocale, TableData, } from './types';
4
+ export { useTableSort } from './hooks/useTableSort';
5
+ export { useTableFilter } from './hooks/useTableFilter';
6
+ export { useTablePagination } from './hooks/useTablePagination';
7
+ export { useTableSelection } from './hooks/useTableSelection';
8
+ export { useTableSearch } from './hooks/useTableSearch';
9
+ export { useTableContext, TableProvider } from './context';
10
+ export type { TableContextValue } from './context';
11
+ export { getValueFromPath } from './utils/getValueFromPath';
12
+ export { sortData } from './utils/sortData';
13
+ export { filterData, searchData } from './utils/filterData';