diff --git a/CHANGELOG.md b/CHANGELOG.md index 40a2427..4db92e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,172 @@ No changes yet. +## 4.4.0 - 2026-08-09 + +Version 4.4.0 completes the core Phase 2–4 modernization work with additive, +opt-in APIs. It removes no public prop, type, or package entrypoint. + +### Features + +- Added local faceted option counts, searchable faceted multi-select filters, + server-supplied facet options, and automatically derived numeric facet + bounds when range limits are not configured. +- Added controlled and manual grouping, grouped-column modes, built-in and + custom aggregation functions, grouped/aggregated/placeholder rendering, + accessible group/ungroup controls, and a reorderable grouping bar. +- Expanded `data-table-pro/data-source` requests with global filtering, + grouping, aggregation, and expansion paths, and results with stable row IDs, + aggregates, facets, and metadata. The generated `tableProps` now wires the + corresponding manual table contracts. +- Added opt-in ARIA grid semantics with one roving cell tab stop, complete + arrow/Home/End/Page navigation, virtual/server row and column metadata, and + focus restoration from interactive descendants. +- Added controlled or uncontrolled rectangular cell-range selection through + pointer drag and Shift+keyboard navigation, selection styling/ARIA state, + imperative selection commands, app-owned undo/redo command hooks, and + suppression of native text dragging while a pointer range is active. +- Added formula-safe TSV/CSV clipboard copy, selected-range copy, opt-in parsed + paste callbacks, and flattened expanded-row ordering. +- Added asynchronous row validation, field/general errors, dirty and pending + states, Enter/Escape commit policy, optimistic updates, rollback, and save + lifecycle callbacks to row editing. +- Added opt-in toolbar data operations: a searchable column chooser, bulk + visibility, group-safe reordering, pinning, layout reset, active-filter + chips/counts, and create/apply/rename/delete controls for named saved views. +- Added opt-in viewport-driven automatic page sizing, explicit + empty/error/retry state handling, and print/fullscreen toolbar controls and + API commands. + +### Performance and accessibility + +- Cached normalized search values by immutable row/column identity and + deferred only client-owned filtering, leaving controlled server callbacks + immediate. +- Dynamically measured variable-height virtual table rows and retained stable + row keys and scroll anchors. +- Added development diagnostics for actual array-wrapper identity churn and a + reproducible 1k–100k row / 20–500 column benchmark matrix. +- Moved clipboard handling, enhanced toolbar operations, automatic page-size + observation, and error overlays behind first-use chunks. Default tables do + not request those opt-in implementations. +- Added real-browser interactive-grid navigation and pointer range-selection + coverage alongside the existing adapter/theme screenshots and axe audits. +- Pinned patched transitive releases of brace-expansion, fast-uri, Hono, + js-yaml, and nanoid after newly published advisories; `pnpm audit` reports no + known vulnerabilities. + +### Compatibility + +- No public prop, type, package entrypoint, default semantic mode, or default + toolbar behavior was removed or changed. +- `DataTableState.grouping` is optional so existing complete state object + literals remain source-compatible. All new behaviors are disabled unless + their corresponding prop or controlled state is supplied. +- `DataTableApi.copyToClipboard()` already returned a promise; loading its + implementation asynchronously does not change that contract. +- Column virtualization remains intentionally deferred. A partial body-only + implementation would break native grouped headers, pinned/resized columns, + detail rows, and screen-reader geometry; the wide-column benchmark remains + the supported decision tool for responsive visibility/server projection. +- A standalone per-cell commit model, built-in runtime filter-operator builder, + and XLSX plugin remain optional future work. Existing row editing exposes + per-cell editors and app-owned validation/commit hooks. + +### Validation + +- 310 unit/integration tests with enforced coverage +- lint and package/demo typechecks +- deterministic package build and public API snapshot +- packed-consumer and demo production builds +- clean `pnpm audit` +- base, adapter, URL-state, data-source, demo JavaScript, and CSS budgets +- browser keyboard/range tests plus six adapter/theme screenshot and axe cases +- The measured base static graph is 46.1 KiB gzip. The ceiling moves from + 42 KiB to 48 KiB to cover the grouping, grid-navigation, range-selection, + editing, and state coordination that must remain in the shared runtime while + retaining 1.9 KiB of regression headroom. Clipboard (2.04 KB minified), + toolbar operations (4.60 KB), auto sizing (1.34 KB), error overlays + (1.01 KB), virtualization, and the data source remain separately loaded or + independently importable. + +## 4.3.0 - 2026-08-09 + +### Features + +- Added boolean, numeric-range, and date-range column filters with inclusive + client filtering, serializable values, operators, bounds, steps, and + localized labels. +- Added the optional `data-table-pro/data-source` entrypoint with typed offset + and cursor requests, manual-table props, cancellation, stale-response + protection, in-flight deduplication, cache policies, retry, refresh, and + invalidation. +- Added true hierarchical rows through `getSubRows`, manual expansion, + expanded-row pagination policy, leaf-first/depth-limited filtering, tree + indentation, accessible expand controls, and card-renderer tree context. +- Added independent `detailPanel` state while retaining + `renderExpandedRow` as a deprecated compatibility bridge. +- Added controlled/uncontrolled row pinning, top/bottom regions, per-row pin + predicates, filtering/pagination visibility policy, row-menu actions, + imperative API methods, persistence, saved views, and styling slots. +- Added explicit single/multi/sub-row selection policies, per-row + selectability, page/filtered select-all scope, and cross-page selected IDs + for manual/server data. +- Added package-owned container-responsive toolbar primitives and filter + layouts, using the table's allocated inline size rather than viewport media + queries. + +### Column groups + +- Groups now remain intact during pointer and keyboard reordering by default; + `freeReordering` explicitly opts both boundaries into cross-group moves. +- Added group descriptions, table-wide and per-group header heights, and + group-specific class and inline-style hooks. + +### Fixes + +- Kept utility controls, striped-row indexes, detail rows, nested selections, + and expanded child IDs coherent when tree expansion and row pinning are + enabled together. +- Prevented a disabled data-source hook from reporting an obsolete active + request as fetching. +- Quantized JavaScript container-width observation to the same fixed + breakpoints used by the package CSS container queries. + +### Compatibility + +- No public prop or existing entrypoint was removed. +- Card view keeps ordinary card ordering when row pinning is configured; + separate pinned regions are a table-view feature. +- Server/manual tables must include a pinned record in the current `data` + window for it to render. + +### Validation + +- 281 unit/integration tests +- lint, package/demo typechecks, coverage, deterministic build, public API + snapshot, packed-consumer build, demo build, and bundle budgets +- The measured base graph is 39.3 KiB gzip, up from 33.7 KiB for the added + filter, tree/detail, selection, grouping, and row-pinning runtime. The base + CI ceiling is now 42 KiB; the 2.0 KiB data-source entry has its own 3 KiB + ceiling and neither graph statically imports TanStack Virtual. + +## 4.2.0 - 2026-08-08 + +### Features + +- Added first-class nested column groups with multi-row shared headings, + visible-leaf spans, nested custom renderers, group class/inline-style hooks, + proportional group resizing, and semantic `colgroup`/`col` header scopes. + +### Fixes + +- Made visibility controls, column filters, responsive hiding, ordering, + pinning, sizing, editing defaults, card-title detection, and custom-cell + handling resolve nested leaf definitions instead of assuming every + top-level definition is a data column. +- Prevented placeholder and group headings from being individually reordered, + while retaining leaf reordering and group splitting behavior. + ## 4.1.0 - 2026-07-29 ### Fixes diff --git a/README.md b/README.md index 6192210..03e444d 100644 --- a/README.md +++ b/README.md @@ -21,17 +21,22 @@ All adapter entrypoints export the same table runtime API: Dedicated subpath exports are also available: - `data-table-pro/url-state`: `useDataTableUrlState` +- `data-table-pro/data-source`: typed server data source hook with manual table props - `data-table-pro/adapter`: stable non-virtual adapter-authoring factory - `data-table-pro/adapter/virtual`: virtual adapter-authoring factory - `data-table-pro/advanced`: advanced composition hooks, panels, and adapter helpers - `data-table-pro/types`: public TypeScript types -The current 4.0 feature set includes client/manual filtering, sorting and -pagination, unknown-total pagination, selection, detail panels, table/card -views, row/card virtualization, column sizing/order/pinning/visibility, -versioned persistence, named saved views, versioned URL state, CSV export, -inline row editing, density controls, loading/empty states, summary rows, -infinite loading, and host-owned drag/upload integrations. See +The current feature set includes client/manual filtering with local or +server-provided facets, grouping and aggregation, sorting and pagination, +unknown-total and automatic page sizing, row and cell-range selection, +interactive-grid keyboard navigation, detail panels, table/card views, +row/card virtualization, nested column groups, column +sizing/order/pinning/visibility, versioned persistence, named saved views, +versioned URL state, CSV and clipboard export, inline row editing, density +controls, loading/empty/error states, summary rows, alternate row shading, +infinite loading, typed server data sources, and host-owned drag/upload +integrations. See [`docs/API.md`](./docs/API.md) for the complete contract. ## Breaking Changes In 3.0.0 @@ -40,7 +45,7 @@ infinite loading, and host-owned drag/upload integrations. See - React peers are now `react@^19.2.0` and `react-dom@^19.2.0` - `nuqs` is an optional peer used only by `data-table-pro/url-state` - toolbar search now filters client-side tables by default; disable with `manualFiltering` or `enableToolbarQueryFiltering={false}` -- column filters, CSV export, row expansion, density, column pinning/reordering, labels, and column preference persistence were added +- column filters, CSV export, row expansion, density, column pinning/reordering, selection policies, labels, and column preference persistence were added ## 4.0.0 Compatibility @@ -49,14 +54,22 @@ compatibility-first major that releases the accumulated state, persistence, quality, dependency, accessibility, and package-splitting work after 3.0.9. The previously planned API cleanup is deferred to a future 5.0 release. +## 4.4.0 Compatibility + +Version 4.4.0 is an additive minor release. Native table semantics and the +existing toolbar remain the defaults; grouping, interactive-grid navigation, +cell ranges, clipboard/paste, enhanced data operations, auto page sizing, +print/fullscreen controls, and error overlays are individually opt-in. No +public prop, type, or entrypoint was removed. + ## Installation ```bash -pnpm add github:Dastari/data-table-pro#v4.0.0 +pnpm add github:Dastari/data-table-pro#v4.4.0 ``` This package is installed from GitHub refs. It is not published to npm. -Release tags such as `v4.0.0` include committed `dist/` output, so consumers +Release tags such as `v4.4.0` include committed `dist/` output, so consumers do not need to allow package build scripts during install. Peer dependencies: @@ -116,9 +129,9 @@ import { DataTable } from "data-table-pro/virtual"; The existing base entrypoints remain source-compatible with `virtualization`. They load the virtual row/card implementation only when the -prop enables it and render the complete non-virtual view as the Suspense -fallback. Applications that never enable virtualization do not statically -load `@tanstack/react-virtual`. +prop enables it and render a bounded initial set as the Suspense fallback +(20 rows or 12 cards by default). Applications that never enable +virtualization do not statically load `@tanstack/react-virtual`. Custom adapter authors should use `createDataTable` from `data-table-pro/adapter`, or `createVirtualDataTable` from @@ -162,8 +175,14 @@ Always import: `data-table-pro/styles.css` provides: -- Tailwind package scanning for the built output -- the package-owned container query helpers used by column `hideOn` +- Tailwind package scanning for built JavaScript output +- package-owned inline-size container queries used by column `hideOn` and the toolbar + +Responsive behavior is based on the table's allocated width, not the browser +viewport. The package uses fixed `sm`/`md`/`lg`/`xl`/`2xl` thresholds of +640/768/1024/1280/1536px for both CSS presentation and TanStack column state; +host Tailwind breakpoint customization and root font-size changes do not alter +these thresholds. It does not provide: @@ -215,6 +234,7 @@ Card mode can virtualize large card sets: card: { enabled: true, estimateCardHeight: 280, + fallbackCardCount: 12, overscan: 4, lanes: "auto", }, @@ -222,7 +242,16 @@ Card mode can virtualize large card sets: /> ``` -`virtualization.card.lanes` accepts a positive number or `"auto"`. `"auto"` derives lanes from the card viewport width, and the table renders the full card set until the scroll viewport is measurable so first paint is never blank. +`virtualization.card.lanes` accepts a positive number or `"auto"`. `"auto"` derives lanes from the card viewport width. Before the scroll viewport is measurable, `fallbackCardCount` bounds first-paint work so large card collections do not mount in full. + +Virtual rows are measured after mount, including variable-height wrapped table +cells and card lanes. Keep `getRowId`, row objects, and column definitions +stable and immutable: row ids are the virtual scroll keys and built-in search +indexes values by row/column identity. Development builds warn about duplicate +row ids and common identity churn. See [the benchmark harness](benchmarks/README.md) +for repeatable row- and column-scale measurements. Column virtualization is not +currently offered because it would compromise the native table's grouped-header, +pinned-column, resize, detail-row, and accessibility contracts. ## Adapter Requirements @@ -280,6 +309,51 @@ export function PeopleTable({ rows }: { rows: Array }) { } ``` +### Grouped column headers + +Define a group with an `id`, a `header`, and nested `columns`. Groups can be +nested to any depth and use the same TanStack-compatible definition shape as +leaf columns: + +```tsx +import type { + DataTableColumnDef, + DataTableColumnGroupDef, +} from "data-table-pro"; + +const contactGroup: DataTableColumnGroupDef = { + id: "contact", + header: "Contact", + meta: { + align: "center", + headerClassName: "bg-muted/50 font-semibold", + }, + columns: [ + { accessorKey: "name", header: "Name" }, + { accessorKey: "email", header: "Email" }, + ], +}; + +const columns: Array> = [contactGroup]; +``` + +The table creates one header row per nesting level and gives every group +header the span of its visible leaf columns. `header` may be a string or a +TanStack header render function. Use `meta.headerClassName`, +`meta.headerStyle`, and `meta.align` for group styling, or the group-specific +`headerClassName`, `headerStyle`, and `headerHeight` fields. `description` +provides an accessible description and native tooltip for the group heading. +Set `columnGroupHeaderHeight` to establish a table-wide group-heading height; +a group's `headerHeight` takes precedence. + +Visibility, filters, ordering, pinning, sizing, editing, responsive hiding, +and CSV export continue to operate on leaf columns. Groups preserve their +shared headings during drag and keyboard reordering: by default a leaf may move +only within the same nested group. Set `freeReordering: true` on every group +boundary that a leaf should be able to cross (both groups when moving between +groups) to permit splitting or joining groups. A group resize handle resizes its +visible descendants proportionally. + ### Controlled toolbar query ```tsx @@ -292,6 +366,40 @@ export function PeopleTable({ rows }: { rows: Array }) { /> ``` +### Row pinning + +Enable first-class row pinning to keep important records at the top or bottom +of the table. `rowPinning` and `onRowPinningChange` follow TanStack's +`{ top: string[]; bottom: string[] }` state shape and also participate in +`initialState`, unified `state`, persistence, saved views, and `apiRef`. + +```tsx +const apiRef = React.createRef>(); + + row.id} + enableRowPinning + initialState={{ rowPinning: { top: ["important-id"], bottom: [] } }} +/>; + +apiRef.current?.pinRow("important-id", "top"); +apiRef.current?.unpinRow("important-id"); +``` + +When enabled, each row's action menu includes top, bottom, and unpin actions. +Pinned rows render outside the virtualized center list and receive +`data-dtp-slot="data-table-pinned-row"` plus `data-row-pinned="top"` or +`"bottom"`; use `classNames.rowPinnedTop` and `classNames.rowPinnedBottom` +for adapter styling. `keepPinnedRows` defaults to `true`, keeping supplied rows +visible after client filtering or pagination; set it to `false` to hide pinned +rows that are not in the current model. For server/manual pagination, the +caller must still provide a pinned row in `data` for it to render. Card view +preserves the ordinary card order; it does not provide separate top/bottom +pinned regions. + Toolbar search filters local/client-side data by default. Server-side tables can keep filtering consumer-owned: ```tsx @@ -400,7 +508,8 @@ const url = useDataTableUrlState({ Grouping and row selection are also available as URL slices, but selection is never written unless `"rowSelection"` is explicitly enabled. -Named saved views use versioned storage without imposing toolbar UI: +Named saved views use versioned storage. Applications can keep their own UI, +or opt into the built-in table-options controls: ```tsx setSavedViews(views), }} + toolbarDataOperations={{ + columnChooser: true, + resetLayout: true, + savedViews: true, + }} />; const saved = apiRef.current?.createSavedView("My view"); @@ -420,6 +534,11 @@ apiRef.current?.applySavedView(saved?.id ?? ""); apiRef.current?.resetState({ clearPersistence: true }); ``` +The enhanced column chooser is searchable and includes bulk show/hide, +keyboard-accessible move-earlier/move-later actions, and pin controls when +`enableColumnPinning` is enabled. Active search and column filters are also +shown as removable chips. + ### Column filters Declare toolbar filters on column meta: @@ -439,6 +558,70 @@ const columns: Array> = [ ]; ``` +### Facets, grouping, and aggregation + +Use `type: "faceted"` for a searchable multi-select filter with local +TanStack option counts. Supply `faceting.options` when counts come from the +server. Grouping is controlled with `grouping` / `onGroupingChange` (or stored +in `initialState.grouping`); set `enableGrouping` to expose the accessible +group/ungroup menu and removable grouping bar. + +```tsx +const columns: Array> = [ + { + accessorKey: "team", + header: "Team", + enableGrouping: true, + meta: { filter: { type: "faceted" } }, + }, + { + accessorKey: "hours", + header: "Hours", + aggregationFn: "sum", + }, +]; + + person.id} + enableGrouping + initialState={{ grouping: ["team"] }} +/>; +``` + +### Interactive grid, ranges, and data operations + +Keep the default native table for reading/browsing. Opt into grid mode for a +keyboard-operated data workspace, then enable rectangular selection and +clipboard handling independently: + +```tsx + row.id} + interactiveGrid + enableCellSelection + clipboard={{ + copy: true, + paste: { + onPaste: ({ values }) => applyPastedValues(values), + }, + }} + toolbarDataOperations + autoPageSize + enablePrint + enableFullscreen + stateOverlay={{ error, onRetry: reload }} +/> +``` + +Grid mode provides roving cell focus and arrow/Home/End/Page navigation. Shift +extends the cell range, Ctrl/Cmd+C copies the range as formula-safe TSV, and +optional undo/redo callbacks remain application-owned. Enhanced toolbar, +clipboard, auto-size, and error-overlay implementations are first-use chunks. + ## Demo App Run the bundled demo workbench: @@ -483,9 +666,9 @@ pnpm test:browser with layout assertions, axe audits, and screenshot baselines. `test:consumer` packs the repository and builds a clean consumer fixture against the resulting tarball, including every supported adapter and subpath. -`bundle:check` enforces the base/adapter/URL-state/demo gzip budgets and fails -if a base or stable adapter-authoring entrypoint statically reaches TanStack -Virtual. +`bundle:check` enforces the base/adapter/URL-state/data-source/demo gzip budgets +and fails if a base, stable adapter-authoring, or data-source entrypoint +statically reaches TanStack Virtual. `api-snapshots/public-api.md` is the generated, reviewable declaration reference for this TypeScript package; the repository does not contain a Rust crate or Rustdoc output. When a reviewed public declaration change is @@ -496,7 +679,7 @@ intentional, regenerate the snapshot with Toolbar query note: - `toolbarQueryValue` and `onToolbarQueryValueChange` control the toolbar search input only -- toolbar query and `column.meta.filter` controls filter client-side rows by default +- toolbar query and `column.meta.filter` controls filter client-side rows by default, including text, option, boolean, numeric-range, and date-range filters - use `manualFiltering` for server-side filtering Cell overflow note: diff --git a/api-snapshots/public-api.md b/api-snapshots/public-api.md index 2938d23..229dc93 100644 --- a/api-snapshots/public-api.md +++ b/api-snapshots/public-api.md @@ -34,6 +34,10 @@ This file is generated by `pnpm api:update`. Review changes to it as public API "types": "./dist/url-state.d.ts", "import": "./dist/url-state.js" }, + "./data-source": { + "types": "./dist/data-source.d.ts", + "import": "./dist/data-source.js" + }, "./advanced": { "types": "./dist/advanced.d.ts", "import": "./dist/advanced.js" @@ -64,10 +68,10 @@ This file is generated by `pnpm api:update`. Review changes to it as public API ```ts import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; ``` @@ -77,10 +81,10 @@ export { DataTable, DataTableProps }; ```ts import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; ``` @@ -90,10 +94,10 @@ export { DataTable, DataTableProps }; ```ts import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; ``` @@ -103,10 +107,10 @@ export { DataTable, DataTableProps }; ```ts import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; ``` @@ -116,10 +120,10 @@ export { DataTable, DataTableProps }; ```ts import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; ``` @@ -129,10 +133,10 @@ export { DataTable, DataTableProps }; ```ts import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; ``` @@ -216,17 +220,19 @@ export { type DataTableUrlEnhancedState, type DataTableUrlStateMigrationPayload, export { createDataTable, primitiveUiKit } from './adapter.js'; import * as React from 'react'; import * as _tanstack_react_table from '@tanstack/react-table'; -import { Row, ColumnSizingState, Column, Table, Cell, PaginationState, SortingState, Header, Updater, ColumnDef, ColumnFiltersState, ColumnOrderState, ColumnPinningState, ExpandedState, VisibilityState, FilterFnOption, OnChangeFn } from '@tanstack/react-table'; -import { DataTableProps, DataTableLabels, DataTableColumnDef, DataTableDensity, DataTableRowLoadingState, DataTableEditableRowsConfig, DataTableRowAction } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDragAndDropConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; -import { D as DataTableUiKit, a as DataTableUiClassNames } from './ui-kit-DPJDIPrF.js'; +import { ExpandedState, Row, OnChangeFn, ColumnSizingState, Column, RowPinningPosition, Cell, Table, PaginationState, SortingState, Header, Updater, ColumnDef, ColumnFiltersState, ColumnOrderState, ColumnPinningState, RowPinningState, GroupingState, VisibilityState, FilterFnOption } from '@tanstack/react-table'; +import { DataTableProps, DataTableLabels, DataTableColumnDef, DataTableDensity, DataTableRowLoadingState, DataTableCellSelection, DataTableSavedView, DataTableEditableRowsConfig, DataTableRowAction, DataTableDetailPanel } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDragAndDropConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowClassNameContext, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +import { D as DataTableUiKit, a as DataTableUiClassNames } from './ui-kit-C6Z8X6oi.js'; type DataTableCardPanelProps = { cardClassName: string | undefined; cardGridClassName: string | undefined; cardSizing: DataTableProps["cardSizing"]; cardRenderer: NonNullable["cardRenderer"]>; + containerWidth: number; currentRowSelection: Record; + currentDetailExpanded: ExpandedState; DataTableCardView: React.ElementType; DataTableEmptyState: React.ElementType; dragAndDrop: DataTableProps["dragAndDrop"]; @@ -241,15 +247,17 @@ type DataTableCardPanelProps = { localSearchValue: string; onRowClick: DataTableProps["onRowClick"]; renderedRows: Array>; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableProps["detailPanel"]; resolvedLabels: DataTableLabels; resolvedLoadingRowCount: number; rowActions: DataTableProps["rowActions"]; ScrollArea: DataTableUiKit["ScrollArea"]; sentinelRef: React.RefObject; setCurrentRowSelection: (rowSelection: Record) => void; + setCurrentDetailExpanded: OnChangeFn; setEditingRowId: React.Dispatch>; shouldRenderInitialLoading: boolean; + stateOverlayNode?: React.ReactNode; tableContainerClassName: string | undefined; uiClassNames: DataTableUiClassNames; virtualization: DataTableProps["virtualization"]; @@ -288,22 +296,93 @@ declare function useColumnLayout({ columns, columnSizing, editableRows, e getColumnLayout: (columnId: string) => DataTableColumnLayout; }; +type DataTableRowEditingContext = { + cancel: () => void; + clearError: (columnId: string) => void; + commit: (row: TData) => void; + errors: Record; + isDirty: boolean; + isPending: boolean; + cancelOnEscape: boolean; + commitOnEnter: boolean; +}; +type DataTableBodyRowProps = { + columnLayouts: ReadonlyMap; + components: Pick; + currentDensity: DataTableDensity; + draftValues: Record; + editingContext?: DataTableRowEditingContext; + dragAndDrop: DataTableProps["dragAndDrop"]; + explicitCustomCellColumnIds: ReadonlySet; + getRowClassName: DataTableProps["getRowClassName"]; + groupToggleLabel: string; + gridMode: boolean; + gridRowAriaIndex: number; + gridRowIndex: number; + activeGridCell: { + row: number; + column: number; + }; + cellSelectionEnabled: boolean; + isGridCellSelected: (row: number, column: number) => boolean; + onGridCellFocus: (cell: { + row: number; + column: number; + }) => void; + onGridCellKeyDown: (event: React.KeyboardEvent, row: number, column: number) => void; + onGridCellPointerDown: (event: React.PointerEvent, row: number, column: number) => void; + onGridCellPointerEnter: (event: React.PointerEvent, row: number, column: number) => void; + isDraggable: boolean; + isDetailExpanded: boolean; + isEditing: boolean; + isExpanded: boolean; + isInitialLoadingRow: boolean; + isSelected: boolean; + loadingState: DataTableRowLoadingState | undefined; + onRowClick: DataTableProps["onRowClick"]; + pinnedPosition?: Exclude; + originalRow: TData; + detailPanel: DataTableProps["detailPanel"]; + row: Row; + rowIndex: number; + setDraftValues: React.Dispatch>>; + stripedRows: boolean; + uiClassNames: DataTableUiClassNames; + visibleCells: Array>; + visibleLeafColumnCount: number; +}; +declare function DataTableBodyRowInner({ columnLayouts, components, currentDensity, draftValues, editingContext, dragAndDrop, explicitCustomCellColumnIds, getRowClassName, groupToggleLabel, gridMode, gridRowAriaIndex, gridRowIndex, activeGridCell, cellSelectionEnabled, isGridCellSelected, onGridCellFocus, onGridCellKeyDown, onGridCellPointerDown, onGridCellPointerEnter, isDraggable, isDetailExpanded, isEditing, isExpanded, isInitialLoadingRow, isSelected, loadingState, onRowClick, pinnedPosition, originalRow, detailPanel, row, rowIndex, setDraftValues, stripedRows, uiClassNames, visibleCells, visibleLeafColumnCount, }: DataTableBodyRowProps): React.JSX.Element; +declare const DataTableBodyRow: typeof DataTableBodyRowInner; + type DataTableTablePanelProps = { + ariaDescribedBy: string | undefined; + ariaLabelledBy: string | undefined; bodyRowComponents: Pick; + cellSelection: DataTableCellSelection | null; + cellSelectionEnabled: boolean; columnLayouts: ReadonlyMap; + columnGroupHeaderHeight: DataTableProps["columnGroupHeaderHeight"]; currentDensity: DataTableDensity; + currentDetailExpanded: ExpandedState; currentSorting: DataTableProps["sorting"]; + dir: NonNullable["dir"]>; DataTableEmptyState: React.ElementType; dragAndDrop: DataTableProps["dragAndDrop"]; draggedColumnIdRef: React.RefObject; draftValues: Record; editingRowId: string | null; + editingContext?: DataTableRowEditingContext; emptyNode: React.ReactNode; enableColumnReordering: boolean; enableColumnResizing: boolean; explicitCustomCellColumnIds: ReadonlySet; fillMinWidth: number; flexGrow: boolean; + gridMode: boolean; + gridPageSize?: number; + gridRowOffset: number; + onGridActiveRowIndexChange?: (rowIndex: number) => void; + onCellSelectionChange: (selection: DataTableCellSelection | null) => void; getColumnLayout: (columnId: string) => DataTableColumnLayout; getRowClassName: DataTableProps["getRowClassName"]; getRowLoadingState: DataTableProps["getRowLoadingState"]; @@ -313,7 +392,9 @@ type DataTableTablePanelProps = { onRowClick: DataTableProps["onRowClick"]; primeColumnForResize: (columnId: string, currentSize: number) => void; renderedRows: Array>; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableProps["detailPanel"]; + topPinnedRows: Array>; + bottomPinnedRows: Array>; reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; resetColumnSize: (columnId: string) => void; resolvedLabels: DataTableLabels; @@ -326,7 +407,9 @@ type DataTableTablePanelProps = { sentinelRef: React.RefObject; setDraftValues: React.Dispatch>>; shouldRenderInitialLoading: boolean; + stateOverlayNode?: React.ReactNode; stickyHeader: boolean; + stripedRows: boolean; summaryRows: NonNullable["summaryRows"]>; table: Table; tableClassName: string | undefined; @@ -340,6 +423,7 @@ type DataTableTablePanelProps = { TableRow: DataTableUiKit["TableRow"]; tableScrollContainerRef: React.RefObject; tableScrollElement?: HTMLElement | null; + totalRowCount?: number; uiClassNames: DataTableUiClassNames; viewportHeight?: number; virtualization?: DataTableProps["virtualization"]; @@ -348,34 +432,7 @@ type DataTableTablePanelProps = { visibleLeafColumnCount: number; visibleLeafColumns: Array>; }; -declare function DataTableTablePanel({ bodyRowComponents, columnLayouts, currentDensity, currentSorting, DataTableEmptyState, dragAndDrop, draggedColumnIdRef, draftValues, editingRowId, emptyNode, enableColumnReordering, enableColumnResizing, explicitCustomCellColumnIds, fillMinWidth, flexGrow, getColumnLayout, getRowClassName, getRowLoadingState, infiniteScroll, layoutMode, localSearchValue, onRowClick, primeColumnForResize, renderedRows, renderExpandedRow, reorderColumn, resetColumnSize, resolvedLabels, rowsToRender, ScrollArea, ScrollBar, sentinelRef, setDraftValues, shouldRenderInitialLoading, stickyHeader, summaryRows, table, tableClassName, tableContainerClassName, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, tableScrollContainerRef, uiClassNames, virtualPaddingBottom, virtualPaddingTop, visibleLeafColumnCount, visibleLeafColumns, }: DataTableTablePanelProps): React.JSX.Element; - -type DataTableBodyRowProps = { - columnLayouts: ReadonlyMap; - components: Pick; - currentDensity: DataTableDensity; - draftValues: Record; - dragAndDrop: DataTableProps["dragAndDrop"]; - explicitCustomCellColumnIds: ReadonlySet; - getRowClassName: DataTableProps["getRowClassName"]; - isDraggable: boolean; - isEditing: boolean; - isExpanded: boolean; - isInitialLoadingRow: boolean; - isSelected: boolean; - loadingState: DataTableRowLoadingState | undefined; - onRowClick: DataTableProps["onRowClick"]; - originalRow: TData; - renderExpandedRow: DataTableProps["renderExpandedRow"]; - row: Row; - rowIndex: number; - setDraftValues: React.Dispatch>>; - uiClassNames: DataTableUiClassNames; - visibleCells: Array>; - visibleLeafColumnCount: number; -}; -declare function DataTableBodyRowInner({ columnLayouts, components, currentDensity, draftValues, dragAndDrop, explicitCustomCellColumnIds, getRowClassName, isDraggable, isEditing, isExpanded, isInitialLoadingRow, isSelected, loadingState, onRowClick, originalRow, renderExpandedRow, row, setDraftValues, uiClassNames, visibleCells, visibleLeafColumnCount, }: DataTableBodyRowProps): React.JSX.Element; -declare const DataTableBodyRow: typeof DataTableBodyRowInner; +declare function DataTableTablePanel({ ariaDescribedBy, ariaLabelledBy, bodyRowComponents, cellSelection, cellSelectionEnabled, columnLayouts, columnGroupHeaderHeight, currentDensity, currentDetailExpanded, currentSorting, dir, DataTableEmptyState, dragAndDrop, draggedColumnIdRef, draftValues, editingRowId, editingContext, emptyNode, enableColumnReordering, enableColumnResizing, explicitCustomCellColumnIds, fillMinWidth, flexGrow, gridMode, gridPageSize, gridRowOffset, onGridActiveRowIndexChange, onCellSelectionChange, getColumnLayout, getRowClassName, getRowLoadingState, infiniteScroll, layoutMode, localSearchValue, onRowClick, primeColumnForResize, renderedRows, detailPanel, topPinnedRows, bottomPinnedRows, reorderColumn, resetColumnSize, resolvedLabels, rowsToRender, ScrollArea, ScrollBar, sentinelRef, setDraftValues, shouldRenderInitialLoading, stateOverlayNode, stickyHeader, stripedRows, summaryRows, table, tableClassName, tableContainerClassName, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, tableScrollContainerRef, tableScrollElement, totalRowCount, uiClassNames, virtualPaddingBottom, virtualPaddingTop, visibleLeafColumnCount, visibleLeafColumns, }: DataTableTablePanelProps): React.JSX.Element; type DataTableFooterSectionProps = { children?: React.ReactNode; @@ -393,22 +450,27 @@ type DataTableFooterSectionProps = { declare function DataTableFooterSection({ children, currentPagination, DataTableFooter, effectivePageCount, footerTotalRowCount, handleFooterPageIndexChange, handleFooterPageSizeChange, labels, pageCountKnown, rowsPerPageOptions, showFooter, }: DataTableFooterSectionProps): React.JSX.Element | null; type DataTableHeaderCellProps = { + columnGroupHeaderHeight: DataTableProps["columnGroupHeaderHeight"]; currentDensity: DataTableDensity; currentSorting: SortingState; + dir: NonNullable["dir"]>; draggedColumnIdRef: React.MutableRefObject; enableColumnReordering: boolean; enableColumnResizing: boolean; + gridColumnIndex?: number; + gridMode: boolean; header: Header; headerGroupHeaders: Array>; layout: DataTableColumnLayout; primeColumnForResize: (columnId: string, currentSize: number) => void; reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; + resizeColumnLabel: string; resetColumnSize: (columnId: string) => void; selectionState?: boolean | "indeterminate"; TableHead: DataTableUiKit["TableHead"]; uiClassNames: DataTableUiClassNames; }; -declare function DataTableHeaderCellInner({ currentDensity, currentSorting, draggedColumnIdRef, enableColumnReordering, enableColumnResizing, header, headerGroupHeaders, layout, primeColumnForResize, reorderColumn, resetColumnSize, TableHead, uiClassNames, }: DataTableHeaderCellProps): React.JSX.Element; +declare function DataTableHeaderCellInner({ columnGroupHeaderHeight, currentDensity, currentSorting, dir, draggedColumnIdRef, enableColumnReordering, enableColumnResizing, gridColumnIndex, gridMode, header, headerGroupHeaders, layout, primeColumnForResize, reorderColumn, resizeColumnLabel, resetColumnSize, TableHead, uiClassNames, }: DataTableHeaderCellProps): React.JSX.Element; declare const DataTableHeaderCell: typeof DataTableHeaderCellInner; type DataTableToolbarSectionProps = { @@ -419,8 +481,14 @@ type DataTableToolbarSectionProps = { customToolbar: React.ReactNode; DataTableToolbar: React.ElementType; description: string | undefined; + descriptionId: string | undefined; effectiveToolbarActions: Array; enableColumnPinning: boolean; + enableGrouping: boolean; + enableToolbarColumnChooser: boolean; + enableToolbarFilterChips: boolean; + enableToolbarResetLayout: boolean; + enableToolbarSavedViews: boolean; enableDensityToggle: boolean; enableViewToggle: boolean; hiddenRowsLabel: string | undefined; @@ -431,20 +499,29 @@ type DataTableToolbarSectionProps = { onDensityChange: (density: "compact" | "comfortable" | "spacious") => void; onShowHiddenRowsChange: (showHiddenRows: boolean) => void; onToolbarQueryValueChange: (value: string) => void; + reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; + onResetColumnLayout: () => void; + onCreateSavedView: (name: string) => DataTableSavedView | undefined; + onApplySavedView: (id: string) => boolean; + onRenameSavedView: (id: string, name: string) => DataTableSavedView | undefined; + onDeleteSavedView: (id: string) => boolean; onViewModeChange: (viewMode: "table" | "card") => void; openFileDialog: (() => void) | undefined; + selectedRowIds: Array; selectedRows: Array; selectionActions: DataTableProps["selectionActions"]; + savedViews: Array; showHiddenRows: boolean; table: Table; title: string | undefined; + titleId: string | undefined; toolbarQueryPlaceholder: string; toolbarQueryValue: string; toolbarVisibility: DataTableProps["toolbarVisibility"]; density: "compact" | "comfortable" | "spacious"; viewMode: "table" | "card"; }; -declare function DataTableToolbarSection({ allRows, columnFilters, columnVisibilityOptions, compactToolbar, customToolbar, DataTableToolbar, description, effectiveToolbarActions, enableColumnPinning, enableDensityToggle, enableViewToggle, hiddenRowsLabel, labels, onClearColumnFilters, onColumnFilterChange, onColumnPinningChange, onDensityChange, onShowHiddenRowsChange, onToolbarQueryValueChange, onViewModeChange, openFileDialog, selectedRows, selectionActions, showHiddenRows, table, title, toolbarQueryPlaceholder, toolbarQueryValue, toolbarVisibility, density, viewMode, }: DataTableToolbarSectionProps): React.JSX.Element; +declare function DataTableToolbarSection({ allRows, columnFilters, columnVisibilityOptions, compactToolbar, customToolbar, DataTableToolbar, description, descriptionId, effectiveToolbarActions, enableColumnPinning, enableGrouping, enableToolbarColumnChooser, enableToolbarFilterChips, enableToolbarResetLayout, enableToolbarSavedViews, enableDensityToggle, enableViewToggle, hiddenRowsLabel, labels, onClearColumnFilters, onColumnFilterChange, onColumnPinningChange, onDensityChange, onShowHiddenRowsChange, onToolbarQueryValueChange, reorderColumn, onResetColumnLayout, onCreateSavedView, onApplySavedView, onRenameSavedView, onDeleteSavedView, onViewModeChange, openFileDialog, selectedRowIds, selectedRows, selectionActions, savedViews, showHiddenRows, table, title, titleId, toolbarQueryPlaceholder, toolbarQueryValue, toolbarVisibility, density, viewMode, }: DataTableToolbarSectionProps): React.JSX.Element; declare function useControllableState({ defaultValue, onChange, value, }: { defaultValue: T | (() => T); @@ -460,8 +537,13 @@ type DataTableRowActionsComponentProps = { onStartEditing: () => void; row: TData; rowActions: Array>; + rowPinning?: { + canPin: boolean; + position: RowPinningPosition; + pin: (position: RowPinningPosition) => void; + }; }; -declare function useDataTableColumns({ Button, Checkbox, DataTableRowActions, Tooltip, TooltipContent, TooltipTrigger, cancelEditing, columns, editableRows, editingRowId, enableRowSelection, getRowCanExpand, isSavingEdit, labels, lastSelectedRowIdRef, renderExpandedRow, rowActions, saveEdit, startEditingRow, tableRef, }: { +declare function useDataTableColumns({ Button, Checkbox, DataTableRowActions, Tooltip, TooltipContent, TooltipTrigger, cancelEditing, columns, editableRows, editingRowId, editErrors, enableRowSelection, enableRowPinning, hasTreeExpansion, isSavingEdit, isEditDirty, labels, lastSelectedRowIdRef, detailPanel, detailExpanded, onDetailExpandedChange, rowSelectionSelectAllScope, rowActions, saveEdit, startEditingRow, tableRef, }: { Button: DataTableUiKit["Button"]; Checkbox: DataTableUiKit["Checkbox"]; DataTableRowActions: React.ComponentType>; @@ -472,26 +554,42 @@ declare function useDataTableColumns({ Button, Checkbox, DataTableRowActi columns: DataTableProps["columns"]; editableRows: DataTableProps["editableRows"]; editingRowId: string | null; + editErrors: Record; enableRowSelection: boolean; - getRowCanExpand: DataTableProps["getRowCanExpand"]; + enableRowPinning: DataTableProps["enableRowPinning"]; + hasTreeExpansion: boolean; isSavingEdit: boolean; + isEditDirty: boolean; labels: DataTableLabels; lastSelectedRowIdRef: React.MutableRefObject; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableDetailPanel | undefined; + detailExpanded: ExpandedState; + onDetailExpandedChange: OnChangeFn; + rowSelectionSelectAllScope: NonNullable["rowSelectionSelectAllScope"]>; rowActions: Array>; - saveEdit: (row: TData) => Promise; + saveEdit: (row: TData) => Promise; startEditingRow: (row: TData, rowId: string) => void; tableRef: React.RefObject | null>; }): ColumnDef[]; -declare function useDataTableInstance({ autoResetPageIndex, columnResizeMode, currentColumnFilters, currentColumnOrder, currentColumnPinning, currentColumnSizing, currentExpanded, currentPagination, currentRowSelection, currentSorting, defaultColumn, effectiveColumnVisibility, enableColumnResizing, enableRowSelection, getRowCanExpand, globalFilterFn, globalFilterValue, hasNextPage, handleColumnFiltersChange, handleColumnOrderChange, handleColumnPinningChange, handleColumnVisibilityChange, handleExpandedChange, infiniteScroll, manualFiltering, manualPagination, manualSorting, onActionError, onPageIndexChange, onPageSizeChange, pageCount, pageIndex, pageSize, renderExpandedRow, setCurrentRowSelection, setCurrentSorting, setLocalColumnSizing, setLocalPagination, shouldRenderInitialLoading, tableColumns, tableData, tableGetRowId, tableRef, totalRowCount, }: { +type DataTableColumnGroupPathSegment = { + id: string; + freeReordering: boolean; +}; +type DataTableColumnGroupPaths = ReadonlyMap>; + +declare function useDataTableInstance({ autoResetPageIndex, columnGroupPaths, columnResizeMode, dir, currentColumnFilters, currentColumnOrder, currentColumnPinning, currentRowPinning, currentColumnSizing, currentExpanded, currentGrouping, currentPagination, currentRowSelection, currentSorting, currentViewMode, defaultColumn, effectiveColumnVisibility, enableColumnResizing, enableMultiRowSelection, enableRowPinning, enableRowSelection, enableSubRowSelection, getRowCanSelect, getRowCanExpand, getSubRows, aggregationFns, groupedColumnMode, globalFilterFn, globalFilterValue, hasNextPage, handleColumnFiltersChange, handleColumnOrderChange, handleColumnPinningChange, handleRowPinningChange, handleColumnVisibilityChange, handleExpandedChange, handleGroupingChange, infiniteScroll, keepPinnedRows, manualFiltering, manualGrouping, manualExpanding, manualPagination, manualSorting, onActionError, onPageIndexChange, onPageSizeChange, pageCount, pageIndex, pageSize, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, setCurrentRowSelection, setCurrentSorting, setLocalColumnSizing, setLocalPagination, shouldRenderInitialLoading, tableColumns, tableData, tableGetRowId, tableRef, totalRowCount, virtualization, }: { autoResetPageIndex: boolean; + columnGroupPaths: DataTableColumnGroupPaths; columnResizeMode: DataTableProps["columnResizeMode"]; + dir: NonNullable["dir"]>; currentColumnFilters: ColumnFiltersState; currentColumnOrder: ColumnOrderState; currentColumnPinning: ColumnPinningState; + currentRowPinning: RowPinningState; currentColumnSizing: ColumnSizingState; currentExpanded: ExpandedState; + currentGrouping: GroupingState; currentPagination: PaginationState; currentRowSelection: Record; currentSorting: SortingState; @@ -499,18 +597,30 @@ declare function useDataTableInstance({ autoResetPageIndex, columnResizeM defaultColumn: Partial>; effectiveColumnVisibility: VisibilityState; enableColumnResizing: boolean; + enableMultiRowSelection: NonNullable["enableMultiRowSelection"]>; + enableRowPinning: DataTableProps["enableRowPinning"]; enableRowSelection: boolean; + enableSubRowSelection: NonNullable["enableSubRowSelection"]>; + getRowCanSelect: DataTableProps["getRowCanSelect"]; getRowCanExpand: DataTableProps["getRowCanExpand"]; + getSubRows: DataTableProps["getSubRows"]; + aggregationFns: DataTableProps["aggregationFns"]; + groupedColumnMode: DataTableProps["groupedColumnMode"]; globalFilterFn: FilterFnOption | undefined; globalFilterValue: string; hasNextPage?: DataTableProps["hasNextPage"]; handleColumnFiltersChange: OnChangeFn; handleColumnOrderChange: OnChangeFn; handleColumnPinningChange: OnChangeFn; + handleRowPinningChange: OnChangeFn; handleColumnVisibilityChange: OnChangeFn; handleExpandedChange: OnChangeFn; + handleGroupingChange: OnChangeFn; infiniteScroll: DataTableProps["infiniteScroll"]; + keepPinnedRows: boolean; manualFiltering: boolean; + manualGrouping: boolean; + manualExpanding: boolean; manualPagination: boolean; manualSorting: boolean; onActionError?: DataTableProps["onActionError"]; @@ -519,7 +629,9 @@ declare function useDataTableInstance({ autoResetPageIndex, columnResizeM pageCount: DataTableProps["pageCount"]; pageIndex: DataTableProps["pageIndex"]; pageSize: DataTableProps["pageSize"]; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + paginateExpandedRows: DataTableProps["paginateExpandedRows"]; + filterFromLeafRows: DataTableProps["filterFromLeafRows"]; + maxLeafRowFilterDepth: DataTableProps["maxLeafRowFilterDepth"]; setCurrentRowSelection: OnChangeFn>; setCurrentSorting: OnChangeFn; setLocalColumnSizing: OnChangeFn; @@ -545,6 +657,8 @@ declare function useDataTableInstance({ autoResetPageIndex, columnResizeM handleFooterPageSizeChange: (nextPageSize: number) => void; isPageCountKnown: boolean; renderedRows: Row[]; + topPinnedRows: Row[]; + bottomPinnedRows: Row[]; reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; rowsToRender: { row: Row; @@ -561,10 +675,11 @@ type DataTableRowsToRender = Array<{ rowIndex: number; }>; -declare function useDataTableState({ columnFilters, columnOrder, columnPinning, columnSizing, columnPrefsKey, persistence, columnVisibility, columns, data, density, enableRowSelection, enableToolbarQueryFiltering, expanded, getRowId, hiddenRows, initialState, isLoading, loadingRowCount, manualFiltering, onColumnFiltersChange, onColumnOrderChange, onColumnPinningChange, onColumnSizingChange, onColumnVisibilityChange, onDensityChange, onExpandedChange, onPageIndexChange, onRowSelectionChange, onShowHiddenRowsChange, onSortingChange, onToolbarQueryValueChange, onViewModeChange, pageIndex, pageSize, resolvedLabels, rowSelection, rowsPerPageOptions, selectionActions, showHiddenRows, sorting, toolbarQueryDebounceMs, toolbarQueryPlaceholder, toolbarQueryValue, viewMode, containerRef, }: { +declare function useDataTableState({ columnFilters, columnOrder, columnPinning, rowPinning, columnSizing, columnPrefsKey, persistence, columnVisibility, columns, data, density, enableRowSelection, enableToolbarQueryFiltering, expanded, grouping, getSubRows, getRowId, hiddenRows, initialState, isLoading, loadingRowCount, manualFiltering, onColumnFiltersChange, onColumnOrderChange, onColumnPinningChange, onRowPinningChange, onColumnSizingChange, onColumnVisibilityChange, onDensityChange, onExpandedChange, onGroupingChange, onPageIndexChange, onRowSelectionChange, onShowHiddenRowsChange, onSortingChange, onToolbarQueryValueChange, onViewModeChange, pageIndex, pageSize, resolvedLabels, rowSelection, rowsPerPageOptions, selectionActions, showHiddenRows, sorting, toolbarQueryDebounceMs, toolbarQueryPlaceholder, toolbarQueryValue, viewMode, containerRef, }: { columnFilters: DataTableProps["columnFilters"]; columnOrder: DataTableProps["columnOrder"]; columnPinning: DataTableProps["columnPinning"]; + rowPinning: DataTableProps["rowPinning"]; columnSizing?: DataTableProps["columnSizing"]; columnPrefsKey: DataTableProps["columnPrefsKey"]; persistence?: DataTableProps["persistence"]; @@ -575,6 +690,8 @@ declare function useDataTableState({ columnFilters, columnOrder, columnPi enableRowSelection: boolean; enableToolbarQueryFiltering: boolean; expanded: DataTableProps["expanded"]; + grouping: DataTableProps["grouping"]; + getSubRows: DataTableProps["getSubRows"]; getRowId: DataTableProps["getRowId"]; hiddenRows: DataTableProps["hiddenRows"]; initialState?: DataTableProps["initialState"]; @@ -584,10 +701,12 @@ declare function useDataTableState({ columnFilters, columnOrder, columnPi onColumnFiltersChange: DataTableProps["onColumnFiltersChange"]; onColumnOrderChange: DataTableProps["onColumnOrderChange"]; onColumnPinningChange: DataTableProps["onColumnPinningChange"]; + onRowPinningChange: DataTableProps["onRowPinningChange"]; onColumnSizingChange?: DataTableProps["onColumnSizingChange"]; onColumnVisibilityChange: DataTableProps["onColumnVisibilityChange"]; onDensityChange: DataTableProps["onDensityChange"]; onExpandedChange: DataTableProps["onExpandedChange"]; + onGroupingChange: DataTableProps["onGroupingChange"]; onPageIndexChange: DataTableProps["onPageIndexChange"]; onRowSelectionChange: DataTableProps["onRowSelectionChange"]; onShowHiddenRowsChange: DataTableProps["onShowHiddenRowsChange"]; @@ -608,13 +727,16 @@ declare function useDataTableState({ columnFilters, columnOrder, columnPi viewMode: DataTableProps["viewMode"]; containerRef: React.RefObject; }): { + containerWidth: number; currentColumnFilters: ColumnFiltersState; currentColumnOrder: ColumnOrderState; currentColumnPinning: ColumnPinningState; + currentRowPinning: RowPinningState; currentColumnSizing: ColumnSizingState; currentColumnVisibility: VisibilityState; currentDensity: DataTableDensity; currentExpanded: ExpandedState; + currentGrouping: GroupingState; currentPagination: PaginationState; currentRowSelection: Record; currentShowHiddenRows: boolean; @@ -628,12 +750,15 @@ declare function useDataTableState({ columnFilters, columnOrder, columnPi localSearchValue: string; resolvedLoadingRowCount: number; resolvedToolbarQueryPlaceholder: string; + selectedRowIds: string[]; selectedRows: TData[]; setCurrentColumnFilters: (updater: _tanstack_react_table.Updater) => void; setCurrentColumnOrder: (updater: _tanstack_react_table.Updater) => void; setCurrentColumnPinning: (updater: _tanstack_react_table.Updater) => void; + setCurrentRowPinning: (updater: _tanstack_react_table.Updater) => void; setCurrentColumnVisibility: (updater: _tanstack_react_table.Updater) => void; setCurrentExpanded: (updater: _tanstack_react_table.Updater) => void; + setCurrentGrouping: (updater: _tanstack_react_table.Updater) => void; setCurrentRowSelection: (updater: _tanstack_react_table.Updater>) => void; setCurrentSorting: (updater: _tanstack_react_table.Updater) => void; setLocalColumnSizing: (updater: _tanstack_react_table.Updater) => void; @@ -656,10 +781,13 @@ declare function useRowEditing({ columns, editableRows, onError, }: { onError?: (error: unknown, row: TData) => void; }): { cancelEditing: () => void; + clearEditError: (columnId: string) => void; draftValues: Record; + editErrors: Record; editingRowId: string | null; + isEditDirty: boolean; isSavingEdit: boolean; - saveEdit: (row: TData) => Promise; + saveEdit: (row: TData) => Promise; setDraftValues: React.Dispatch>>; setEditingRowId: React.Dispatch>; startEditingRow: (row: TData, rowId: string) => void; @@ -667,7 +795,7 @@ declare function useRowEditing({ columns, editableRows, onError, }: { declare function useStableCallback, TResult>(callback: ((...args: TArgs) => TResult) | undefined): (...args: TArgs) => TResult | undefined; -export { DataTableBodyRow, DataTableCardPanel, DataTableColumnDef, type DataTableColumnLayout, DataTableDensity, DataTableEditableRowsConfig, DataTableFooterSection, DataTableHeaderCell, DataTableLabels, DataTableProps, DataTableRowAction, DataTableRowLoadingState, type DataTableRowsToRender, DataTableTablePanel, DataTableToolbarSection, DataTableUiClassNames, DataTableUiKit, useColumnLayout, useControllableState, useDataTableColumns, useDataTableInstance, useDataTableState, useRowEditing, useStableCallback }; +export { DataTableBodyRow, DataTableCardPanel, DataTableCellSelection, DataTableColumnDef, type DataTableColumnLayout, DataTableDensity, DataTableDetailPanel, DataTableEditableRowsConfig, DataTableFooterSection, DataTableHeaderCell, DataTableLabels, DataTableProps, DataTableRowAction, DataTableRowLoadingState, type DataTableRowsToRender, DataTableSavedView, DataTableTablePanel, DataTableToolbarSection, DataTableUiClassNames, DataTableUiKit, useColumnLayout, useControllableState, useDataTableColumns, useDataTableInstance, useDataTableState, useRowEditing, useStableCallback }; ``` ## adapter.d.ts @@ -675,11 +803,11 @@ export { DataTableBodyRow, DataTableCardPanel, DataTableColumnDef, type DataTabl ```ts import * as React from 'react'; import { DataTableProps } from './types.js'; -import { D as DataTableUiKit } from './ui-kit-DPJDIPrF.js'; -export { a as DataTableUiClassNames } from './ui-kit-DPJDIPrF.js'; +import { D as DataTableUiKit } from './ui-kit-C6Z8X6oi.js'; +export { a as DataTableUiClassNames } from './ui-kit-C6Z8X6oi.js'; import '@tanstack/react-table'; -declare function createDataTable(ui: DataTableUiKit): ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare function createDataTable(ui: DataTableUiKit): ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; declare const primitiveUiKit: DataTableUiKit; @@ -691,11 +819,11 @@ export { DataTableUiKit, createDataTable, primitiveUiKit }; ```ts import * as React from 'react'; import { DataTableProps } from './types.js'; -import { D as DataTableUiKit } from './ui-kit-DPJDIPrF.js'; -export { a as DataTableUiClassNames } from './ui-kit-DPJDIPrF.js'; +import { D as DataTableUiKit } from './ui-kit-C6Z8X6oi.js'; +export { a as DataTableUiClassNames } from './ui-kit-C6Z8X6oi.js'; import '@tanstack/react-table'; -declare function createVirtualDataTable(ui: DataTableUiKit): ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare function createVirtualDataTable(ui: DataTableUiKit): ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTableUiKit, createVirtualDataTable }; ``` @@ -704,9 +832,40 @@ export { DataTableUiKit, createVirtualDataTable }; ```ts import * as React from 'react'; -import { ColumnDef, CellContext, FilterFnOption, ColumnFiltersState, SortingState, ExpandedState, Row, ColumnOrderState, ColumnPinningState, VisibilityState, PaginationState, ColumnSizingState, Updater, Table, HeaderContext } from '@tanstack/react-table'; +import { ColumnDef, CellContext, FilterFnOption, ColumnFiltersState, SortingState, GroupingState, AggregationFn, ExpandedState, Row, ColumnOrderState, ColumnPinningState, RowPinningState, Table, VisibilityState, PaginationState, ColumnSizingState, Updater, HeaderContext } from '@tanstack/react-table'; type DataTableViewMode = "table" | "card"; +/** Accessibility behavior for the table view. Native table semantics remain the default. */ +type DataTableAccessibilityOptions = { + /** + * `grid` enables spreadsheet-like roving focus and keyboard navigation. + * `native` (the default) retains ordinary HTML table keyboard behavior. + */ + mode?: "native" | "grid"; + /** Number of rows moved by PageUp/PageDown when layout cannot be measured. */ + pageSize?: number; +}; +/** Shorthand configuration for the interactive ARIA grid mode. */ +type DataTableInteractiveGridOptions = Omit; +/** A stable grid coordinate used for cell and rectangular range selection. */ +type DataTableCellCoordinate = { + rowId: string; + columnId: string; +}; +/** The two corners of a cell selection. A single-cell selection has equal corners. */ +type DataTableCellSelection = { + anchor: DataTableCellCoordinate; + focus: DataTableCellCoordinate; +}; +type DataTableGridCommandContext = { + table: Table; + cellSelection: DataTableCellSelection | null; +}; +/** Commands are delegated to the application; the table never records app data. */ +type DataTableGridCommands = { + undo?: (context: DataTableGridCommandContext) => void | Promise; + redo?: (context: DataTableGridCommandContext) => void | Promise; +}; type DataTableAlign = "start" | "center" | "end"; type DataTableColumnType = "text" | "numeric" | "date"; type DataTableColumnFixed = "left" | "right"; @@ -714,9 +873,44 @@ type DataTableContainerBreakpoint = "sm" | "md" | "lg" | "xl" | "2xl"; type DataTableDensity = "compact" | "comfortable" | "spacious"; type DataTableCardSizing = "fixed" | "content" | "fluid"; type DataTableCellOverflow = "truncate" | "clip" | "wrap" | "visible"; -type DataTableColumnFilterType = "text" | "select" | "multi"; +type DataTableColumnFilterType = "text" | "select" | "multi" | "faceted" | "boolean" | "numberRange" | "dateRange"; +type DataTableColumnFilterOperator = "contains" | "equals" | "startsWith" | "endsWith"; type DataTableCsvExportScope = "filtered" | "page" | "selected" | "all"; -type DataTableActionErrorSource = "toolbarAction" | "selectionAction" | "rowAction" | "rowClick" | "edit" | "fileUpload" | "infiniteScroll"; +type DataTableClipboardCopyScope = DataTableCsvExportScope | "cellSelection"; +type DataTableClipboardCopyOptions = { + includeHeaders?: boolean; + columns?: Array; + scope?: DataTableClipboardCopyScope; + /** Defaults to tab-separated text. */ + delimiter?: "\t" | ","; + escapeFormulaValues?: boolean; + getCellValue?: (context: { + row: TData; + rowId: string; + columnId: string; + value: unknown; + }) => unknown; + /** Host-owned clipboard delivery for non-browser or permission-managed apps. */ + onCopy?: (context: { + text: string; + rows: Array; + scope: DataTableClipboardCopyScope; + }) => void | Promise; +}; +type DataTableClipboardPasteContext = { + text: string; + values: Array>; + table: Table; +}; +type DataTableClipboardConfig = { + copy?: boolean | DataTableClipboardCopyOptions; + paste?: { + enabled?: boolean; + preventDefault?: boolean; + onPaste: (context: DataTableClipboardPasteContext) => void | Promise; + }; +}; +type DataTableActionErrorSource = "toolbarAction" | "selectionAction" | "rowAction" | "rowClick" | "edit" | "undo" | "redo" | "clipboardCopy" | "clipboardPaste" | "fileUpload" | "infiniteScroll" | "retry"; declare const DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS: Record; type DataTableRowLoadingState = { isLoading: boolean; @@ -726,16 +920,59 @@ type DataTableLoadingState = { isLoading: boolean; loadingRowCount?: number; }; +type DataTableAutoPageSizeConfig = { + minRows?: number; + maxRows?: number; + estimateRowHeight?: number; +}; +type DataTableStateOverlayContext = { + rows: Array; + toolbarQueryValue: string; + error: unknown; + isRetrying: boolean; + retry: (() => void | Promise) | undefined; +}; +type DataTableStateOverlay = { + empty?: React.ReactNode | ((context: DataTableEmptyStateContext) => React.ReactNode); + error?: unknown; + isRetrying?: boolean; + onRetry?: () => void | Promise; + renderError?: (context: DataTableStateOverlayContext) => React.ReactNode; +}; type DataTableCellEditRenderProps = { cell: CellContext; row: TData; value: TValue | undefined; draftValue: unknown; setDraftValue: (value: unknown) => void; + error?: string; + isDirty: boolean; + isPending: boolean; }; type DataTableColumnFilterOption = { label: string; value: string; + /** Number of matching records. Omit when the count is not known. */ + count?: number; + disabled?: boolean; +}; +type DataTableFacetedFilterOptions = { + /** + * Server-provided facet values. When supplied, these take precedence over + * locally calculated unique values and their counts. + */ + options?: Array | ((context: { + rows: Array; + }) => Array); + /** Render a readable label for values discovered from the local row model. */ + getOptionLabel?: (value: TValue | undefined) => string; + /** Enables an in-menu search input. Defaults to true. */ + searchable?: boolean; + searchPlaceholder?: string; +}; +type DataTableColumnFilterRangeValue = { + from?: TValue; + to?: TValue; }; type DataTableColumnFilterConfig = { type: DataTableColumnFilterType; @@ -745,6 +982,14 @@ type DataTableColumnFilterConfig = { rows: Array; }) => Array); getOptionValue?: (value: TValue | undefined, row: TData) => string; + /** Settings for `type: "faceted"`, including server-provided facet data. */ + faceting?: DataTableFacetedFilterOptions; + operator?: DataTableColumnFilterOperator; + trueLabel?: string; + falseLabel?: string; + min?: number | string; + max?: number | string; + step?: number; }; type DataTableColumnMeta = { type?: DataTableColumnType; @@ -758,6 +1003,7 @@ type DataTableColumnMeta = { value: TValue | undefined; }) => DataTableCellOverflow | undefined); headerClassName?: string; + headerStyle?: React.CSSProperties; cellClassName?: string | ((args: { row: TData; value: TValue | undefined; @@ -771,6 +1017,27 @@ type DataTableColumnMeta = { }; type DataTableColumnDef = ColumnDef & { meta?: DataTableColumnMeta; + columns?: Array>; +}; +type DataTableColumnGroupDef = DataTableColumnDef & { + id: string; + columns: Array>; + /** + * A concise explanation of the columns in this group. It is exposed as an + * accessible description and native tooltip on the shared header. + */ + description?: string; + /** + * Allows leaves to cross this group's boundary during column reordering. + * Groups are locked by default so a shared heading remains intact. + */ + freeReordering?: boolean; + /** Additional class name for this shared group header. */ + headerClassName?: string; + /** Additional inline styles for this shared group header. */ + headerStyle?: React.CSSProperties; + /** Height for this shared group header, overriding `columnGroupHeaderHeight`. */ + headerHeight?: React.CSSProperties["height"]; }; type DataTableToolbarAction = { key: string; @@ -787,6 +1054,12 @@ type DataTableToolbarAction = { variant?: "default" | "secondary" | "outline" | "ghost" | "destructive"; disabled?: boolean; }; +type DataTableSelectionActionContext = { + /** Selected row objects that are present in the currently loaded data. */ + rows: Array; + /** Every selected row id, including ids retained across server pages. */ + rowIds: Array; +}; type DataTableSelectionAction = { key: string; label: string; @@ -794,11 +1067,9 @@ type DataTableSelectionAction = { className?: string; }>; iconOnly?: boolean; - onClick: (context: { - rows: Array; - }) => void | Promise; + onClick: (context: DataTableSelectionActionContext) => void | Promise; variant?: "default" | "secondary" | "outline" | "ghost" | "destructive"; - disabled?: boolean | ((rows: Array) => boolean); + disabled?: boolean | ((rows: Array, context: DataTableSelectionActionContext) => boolean); }; type DataTableRowAction = { key: string; @@ -827,9 +1098,22 @@ type DataTableToolbarVisibility = { viewToggle?: boolean; customToolbar?: boolean; }; +/** Optional toolbar controls for working with the current table layout and views. */ +type DataTableToolbarDataOperations = { + /** Search, bulk show/hide, pin, and keyboard-accessible column move controls. */ + columnChooser?: boolean; + /** Create, apply, rename, and delete saved views when `savedViews` is configured. */ + savedViews?: boolean; + /** Adds a reset-layout action using the table's initial layout. */ + resetLayout?: boolean; +}; type DataTableCardRendererProps = { row: TData; rowId: string; + depth: number; + canExpandSubRows: boolean; + isSubRowsExpanded: boolean; + toggleSubRowsExpanded: () => void; isSelected: boolean; onSelectedChange: (nextValue: boolean) => void; actions: Array>; @@ -840,7 +1124,16 @@ type DataTableCardRendererProps = { type DataTableEditableRowsConfig = { canEditRow?: (row: TData) => boolean; getInitialValues?: (row: TData) => Record; + validateRow?: (row: TData, draftValues: Record) => void | string | Record | Promise>; + /** Apply an optimistic host update and optionally return a rollback callback. */ + onOptimisticUpdate?: (row: TData, draftValues: Record) => void | (() => void); onSaveRow: (row: TData, draftValues: Record) => void | Promise; + onSaveSuccess?: (row: TData, draftValues: Record) => void; + onSaveError?: (error: unknown, row: TData, draftValues: Record) => void; + /** Defaults to true for inputs owned by the table. */ + commitOnEnter?: boolean; + /** Defaults to true for inputs owned by the table. */ + cancelOnEscape?: boolean; }; type DataTableInfiniteScroll = { enabled: boolean; @@ -883,12 +1176,14 @@ type DataTableFileUploadConfig = { type DataTableVirtualizationConfig = { enabled?: boolean; estimateRowHeight?: number; + fallbackRowCount?: number; overscan?: number; card?: DataTableCardVirtualizationConfig; }; type DataTableCardVirtualizationConfig = { enabled?: boolean; estimateCardHeight?: number; + fallbackCardCount?: number; overscan?: number; lanes?: number | "auto"; }; @@ -897,6 +1192,13 @@ type DataTableExpandedRowProps = { rowId: string; tableRow: Row; }; +/** A separately controlled application detail panel rendered beneath a row. */ +type DataTableDetailPanel = { + expanded?: ExpandedState; + onExpandedChange?: (expanded: ExpandedState) => void; + getRowCanExpand?: (row: TData) => boolean; + render: (props: DataTableExpandedRowProps) => React.ReactNode; +}; type DataTableCsvExportOptions = { filename?: string; includeHeaders?: boolean; @@ -928,6 +1230,7 @@ type DataTableColumnPrefs = { sizing?: Record; order?: ColumnOrderState; pinning?: ColumnPinningState; + rowPinning?: RowPinningState; density?: DataTableDensity; }; type DataTablePersistenceSlice = keyof DataTableColumnPrefs; @@ -963,7 +1266,10 @@ type DataTableState = { expanded: ExpandedState; columnOrder: ColumnOrderState; columnPinning: ColumnPinningState; + rowPinning: RowPinningState; columnSizing: ColumnSizingState; + /** Present in snapshots produced by 4.4+; optional for 4.x object-literal compatibility. */ + grouping?: GroupingState; density: DataTableDensity; viewMode: DataTableViewMode; showHiddenRows: boolean; @@ -1018,10 +1324,18 @@ type DataTableApi = { renameSavedView: (id: string, name: string) => DataTableSavedView | undefined; deleteSavedView: (id: string) => boolean; clearSavedViews: () => boolean; + pinRow: (rowId: string, position?: "top" | "bottom") => boolean; + unpinRow: (rowId: string) => boolean; focus: () => void; scrollToRow: (rowId: string) => boolean; scrollToColumn: (columnId: string) => boolean; exportCsv: (options?: boolean | DataTableCsvExportOptions) => Promise; + copyToClipboard: (options?: boolean | DataTableClipboardCopyOptions) => Promise; + getCellSelection: () => DataTableCellSelection | null; + setCellSelection: (selection: DataTableCellSelection | null) => void; + clearCellSelection: () => void; + print: () => boolean; + toggleFullscreen: () => Promise; }; type DataTableLabels = { searchPlaceholder: string; @@ -1035,6 +1349,10 @@ type DataTableLabels = { columns: string; filters: string; clearFilters: string; + filterFrom?: string; + filterTo?: string; + filterTrue?: string; + filterFalse?: string; selectedRows: (count: number) => string; showHiddenRows: (label: string) => string; recordsPerPage: string; @@ -1048,6 +1366,7 @@ type DataTableLabels = { nextPage: string; lastPage: string; selectAllVisibleRows?: string; + selectAllFilteredRows?: string; selectRow?: string; selectCardRow?: (rowId: string) => string; switchToTableView?: string; @@ -1062,7 +1381,15 @@ type DataTableLabels = { cancelEdit: string; expandRow: string; collapseRow: string; + expandRowDetails?: string; + collapseRowDetails?: string; exportCsv: string; + print?: string; + enterFullscreen?: string; + exitFullscreen?: string; + errorTitle?: string; + errorDescription?: string; + retry?: string; density: string; compactDensity: string; comfortableDensity: string; @@ -1070,6 +1397,30 @@ type DataTableLabels = { pinLeft: string; pinRight: string; unpin: string; + pinRowToTop: string; + pinRowToBottom: string; + unpinRow: string; + resizeColumn: (columnLabel: string) => string; + grouping?: string; + groupBy?: (columnLabel: string) => string; + ungroup?: (columnLabel: string) => string; + removeGrouping?: (columnLabel: string) => string; + moveGroupingEarlier?: (columnLabel: string) => string; + moveGroupingLater?: (columnLabel: string) => string; + facetSearch?: (columnLabel: string) => string; + searchColumns?: string; + showAllColumns?: string; + hideAllColumns?: string; + moveColumnEarlier?: (columnLabel: string) => string; + moveColumnLater?: (columnLabel: string) => string; + resetColumnLayout?: string; + savedViews?: string; + createSavedView?: string; + savedViewName?: string; + applySavedView?: (name: string) => string; + renameSavedView?: (name: string) => string; + deleteSavedView?: (name: string) => string; + saveSavedView?: string; }; type DataTableSummaryRow = { key: string; @@ -1079,6 +1430,16 @@ type DataTableSummaryRow = { columnId: string; }) => React.ReactNode)>; }; +type DataTableRowClassNameContext = { + row: TData; + rowId: string; + rowIndex: number; + isEditing: boolean; + isExpanded: boolean; + isLoading: boolean; + isSelected: boolean; + pinnedPosition: false | "top" | "bottom"; +}; type DataTableProps = { columns: Array>; data: Array; @@ -1104,8 +1465,20 @@ type DataTableProps = { sorting?: SortingState; onSortingChange?: (sorting: SortingState) => void; manualSorting?: boolean; + grouping?: GroupingState; + onGroupingChange?: (grouping: GroupingState) => void; + /** Use rows already grouped by the server instead of TanStack's grouping model. */ + manualGrouping?: boolean; + /** Show group/ungroup controls in the table options menu and grouping bar. */ + enableGrouping?: boolean; + /** Controls whether grouped columns are reordered, removed, or left in place. */ + groupedColumnMode?: false | "reorder" | "remove"; + /** Named aggregation functions available to column `aggregationFn` definitions. */ + aggregationFns?: Record>; pageIndex?: number; pageSize?: number; + /** Sizes an opt-in page from the measurable table scroll viewport. */ + autoPageSize?: boolean | DataTableAutoPageSizeConfig; onPageIndexChange?: (pageIndex: number) => void; onPageSizeChange?: (pageSize: number) => void; pageCount?: number; @@ -1113,20 +1486,60 @@ type DataTableProps = { rowSelection?: Record; onRowSelectionChange?: (rowSelection: Record) => void; enableRowSelection?: boolean; + /** Allows multiple selected rows globally or per row. Defaults to true. */ + enableMultiRowSelection?: boolean | ((row: TData) => boolean); + /** Cascades parent selection to sub-rows globally or per row. Defaults to true. */ + enableSubRowSelection?: boolean | ((row: TData) => boolean); + /** Prevents individual rows from being selected. */ + getRowCanSelect?: (row: TData) => boolean; + /** Select-all affects the current page or all loaded filtered rows. */ + rowSelectionSelectAllScope?: "page" | "filtered"; expanded?: ExpandedState; onExpandedChange?: (expanded: ExpandedState) => void; + /** Resolve nested records for tree expansion. */ + getSubRows?: (row: TData, index: number) => Array | undefined; + /** Keep expansion state controlled by the host; useful for server-loaded children. */ + manualExpanding?: boolean; + /** Keep child rows with their parent when paginating. Defaults to TanStack's behavior. */ + paginateExpandedRows?: boolean; + /** Include parents when a descendant matches a filter. */ + filterFromLeafRows?: boolean; + /** Limit descendant traversal while filtering. */ + maxLeafRowFilterDepth?: number; + /** New, independently controlled detail-panel contract. */ + detailPanel?: DataTableDetailPanel; getRowCanExpand?: (row: TData) => boolean; + /** @deprecated Use `detailPanel={{ render }}`. Kept as a detail-panel bridge. */ renderExpandedRow?: (props: DataTableExpandedRowProps) => React.ReactNode; columnOrder?: ColumnOrderState; onColumnOrderChange?: (columnOrder: ColumnOrderState) => void; enableColumnReordering?: boolean; + /** Default height for shared column-group header cells. */ + columnGroupHeaderHeight?: React.CSSProperties["height"]; columnPinning?: ColumnPinningState; onColumnPinningChange?: (columnPinning: ColumnPinningState) => void; enableColumnPinning?: boolean; + rowPinning?: RowPinningState; + onRowPinningChange?: (rowPinning: RowPinningState) => void; + /** Enables row actions that pin a row to the top or bottom of the table. */ + enableRowPinning?: boolean | ((row: TData) => boolean); + /** Keep pinned rows visible when filtering or paginating them out. */ + keepPinnedRows?: boolean; toolbarActions?: Array>; selectionActions?: Array>; rowActions?: Array>; csvExport?: boolean | DataTableCsvExportOptions; + /** Opt-in TSV/CSV copy and application-owned paste handling. */ + clipboard?: DataTableClipboardConfig; + /** Enables pointer and Shift+keyboard rectangular cell selection in grid mode. */ + enableCellSelection?: boolean; + /** Controlled cell/range selection. Supplying a value also enables it in grid mode. */ + cellSelection?: DataTableCellSelection | null; + /** Initial cell/range selection when uncontrolled. */ + defaultCellSelection?: DataTableCellSelection | null; + onCellSelectionChange?: (selection: DataTableCellSelection | null) => void; + /** Host-owned undo/redo commands invoked by Ctrl/Cmd+Z and Ctrl/Cmd+Shift+Z. */ + gridCommands?: DataTableGridCommands; density?: DataTableDensity; onDensityChange?: (density: DataTableDensity) => void; enableDensityToggle?: boolean; @@ -1146,7 +1559,11 @@ type DataTableProps = { viewMode?: DataTableViewMode; onViewModeChange?: (viewMode: DataTableViewMode) => void; enableViewToggle?: boolean; + enablePrint?: boolean; + enableFullscreen?: boolean; emptyState?: React.ReactNode | ((context: DataTableEmptyStateContext) => React.ReactNode); + /** Explicit empty/error/retry rendering contract. */ + stateOverlay?: DataTableStateOverlay; isLoading?: boolean; loadingRowCount?: number; getRowLoadingState?: (row: TData, index: number) => boolean | DataTableRowLoadingState; @@ -1168,10 +1585,13 @@ type DataTableProps = { dir?: "ltr" | "rtl"; flexGrow?: boolean; toolbarVisibility?: DataTableToolbarVisibility; + /** Opts into enhanced layout and saved-view toolbar controls. */ + toolbarDataOperations?: boolean | DataTableToolbarDataOperations; className?: string; tableClassName?: string; tableContainerClassName?: string; - getRowClassName?: (row: TData) => string | undefined; + stripedRows?: boolean; + getRowClassName?: (row: TData, context: DataTableRowClassNameContext) => string | undefined; onRowClick?: (context: { row: TData; rowId: string; @@ -1180,6 +1600,10 @@ type DataTableProps = { dragAndDrop?: DataTableDragAndDropConfig; fileUpload?: DataTableFileUploadConfig; virtualization?: boolean | DataTableVirtualizationConfig; + /** Opt in to ARIA grid semantics and roving keyboard navigation. */ + accessibility?: DataTableAccessibilityOptions; + /** Shorthand for `accessibility={{ mode: "grid" }}`. */ + interactiveGrid?: boolean | DataTableInteractiveGridOptions; }; declare function isRowVisible(row: TData, hiddenRows: DataTableHiddenRowsConfig | undefined, showHiddenRows: boolean): boolean; declare function resolveRowActionLabel(label: DataTableRowAction["label"], row: TData): string; @@ -1193,5 +1617,5 @@ declare function hideOnClassName(hideOn: DataTableContainerBreakpoint | Array | undefined, containerWidth: number): boolean; declare function rowSelectionStateFromRows(rows: Array>): TData[]; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, type DataTableActionErrorContext, type DataTableActionErrorSource, type DataTableAlign, type DataTableApi, type DataTableCardRendererProps, type DataTableCardSizing, type DataTableCardVirtualizationConfig, type DataTableCellEditRenderProps, type DataTableCellOverflow, type DataTableColumnDef, type DataTableColumnFilterConfig, type DataTableColumnFilterOption, type DataTableColumnFilterType, type DataTableColumnFixed, type DataTableColumnMeta, type DataTableColumnPrefs, type DataTableColumnType, type DataTableColumnVisibilityOption, type DataTableContainerBreakpoint, type DataTableCsvExportOptions, type DataTableCsvExportScope, type DataTableDensity, type DataTableDragAndDropConfig, type DataTableEditableRowsConfig, type DataTableEmptyStateContext, type DataTableExpandedRowProps, type DataTableFileUploadConfig, type DataTableHiddenRowsConfig, type DataTableInfiniteScroll, type DataTableInitialState, type DataTableLabels, type DataTableLoadingState, type DataTablePersistenceConfig, type DataTablePersistenceOperation, type DataTablePersistencePayload, type DataTablePersistenceSlice, type DataTablePersistenceStorage, type DataTableProps, type DataTableResetOptions, type DataTableRowAction, type DataTableRowLoadingState, type DataTableSavedView, type DataTableSavedViewSlice, type DataTableSavedViewsChangeOperation, type DataTableSavedViewsConfig, type DataTableSavedViewsPayload, type DataTableSelectionAction, type DataTableState, type DataTableSummaryRow, type DataTableToolbarAction, type DataTableToolbarVisibility, type DataTableViewMode, type DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows }; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, type DataTableAccessibilityOptions, type DataTableActionErrorContext, type DataTableActionErrorSource, type DataTableAlign, type DataTableApi, type DataTableAutoPageSizeConfig, type DataTableCardRendererProps, type DataTableCardSizing, type DataTableCardVirtualizationConfig, type DataTableCellCoordinate, type DataTableCellEditRenderProps, type DataTableCellOverflow, type DataTableCellSelection, type DataTableClipboardConfig, type DataTableClipboardCopyOptions, type DataTableClipboardCopyScope, type DataTableClipboardPasteContext, type DataTableColumnDef, type DataTableColumnFilterConfig, type DataTableColumnFilterOperator, type DataTableColumnFilterOption, type DataTableColumnFilterRangeValue, type DataTableColumnFilterType, type DataTableColumnFixed, type DataTableColumnGroupDef, type DataTableColumnMeta, type DataTableColumnPrefs, type DataTableColumnType, type DataTableColumnVisibilityOption, type DataTableContainerBreakpoint, type DataTableCsvExportOptions, type DataTableCsvExportScope, type DataTableDensity, type DataTableDetailPanel, type DataTableDragAndDropConfig, type DataTableEditableRowsConfig, type DataTableEmptyStateContext, type DataTableExpandedRowProps, type DataTableFacetedFilterOptions, type DataTableFileUploadConfig, type DataTableGridCommandContext, type DataTableGridCommands, type DataTableHiddenRowsConfig, type DataTableInfiniteScroll, type DataTableInitialState, type DataTableInteractiveGridOptions, type DataTableLabels, type DataTableLoadingState, type DataTablePersistenceConfig, type DataTablePersistenceOperation, type DataTablePersistencePayload, type DataTablePersistenceSlice, type DataTablePersistenceStorage, type DataTableProps, type DataTableResetOptions, type DataTableRowAction, type DataTableRowClassNameContext, type DataTableRowLoadingState, type DataTableSavedView, type DataTableSavedViewSlice, type DataTableSavedViewsChangeOperation, type DataTableSavedViewsConfig, type DataTableSavedViewsPayload, type DataTableSelectionAction, type DataTableSelectionActionContext, type DataTableState, type DataTableStateOverlay, type DataTableStateOverlayContext, type DataTableSummaryRow, type DataTableToolbarAction, type DataTableToolbarDataOperations, type DataTableToolbarVisibility, type DataTableViewMode, type DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows }; ``` diff --git a/benchmarks/README.md b/benchmarks/README.md new file mode 100644 index 0000000..b6e1836 --- /dev/null +++ b/benchmarks/README.md @@ -0,0 +1,31 @@ +# Performance benchmark harness + +Run the browser harness with `pnpm bench`. It starts the benchmark Vite page, +uses Playwright Chromium, and prints one JSON record per scenario. It is a +measurement tool, not a pass/fail CI performance threshold: hardware and +browser versions materially affect the numbers. + +The fixture covers these row/column scales: + +| Scenario | Rows | Columns | Interaction | +| --- | ---: | ---: | --- | +| `rows-1k` | 1,000 | 20 | client search and virtual scroll | +| `rows-10k` | 10,000 | 20 | client search and virtual scroll | +| `rows-50k` | 50,000 | 20 | client search and virtual scroll | +| `rows-100k` | 100,000 | 20 | client search and virtual scroll | +| `columns-20` | 1,000 | 20 | horizontal layout baseline | +| `columns-100` | 1,000 | 100 | horizontal layout stress | +| `columns-500` | 1,000 | 500 | wide-table constraint evidence | + +Each JSON record includes first-render time, search-settle time, DOM node +count, heap when Chromium exposes it, long-task count/duration, and a sampled +scroll-frame interval. Repeat each scenario several times and compare medians +on the same machine/browser. Use `?scenario=columns-500` in the benchmark page +to inspect a scenario manually. + +The harness intentionally measures full native table columns. Column +virtualization is not implemented because a body-only slice would violate this +package's grouped-header, pinning, resizing, detail-row, and accessibility +contracts. For very wide production datasets, prefer responsive column +visibility, server projection, or a narrower table view until a correct +two-axis design can be introduced. diff --git a/benchmarks/fixtures.ts b/benchmarks/fixtures.ts new file mode 100644 index 0000000..6b1c3a3 --- /dev/null +++ b/benchmarks/fixtures.ts @@ -0,0 +1,22 @@ +export const benchmarkScenarios = [ + { name: "rows-1k", rows: 1_000, columns: 20 }, + { name: "rows-10k", rows: 10_000, columns: 20 }, + { name: "rows-50k", rows: 50_000, columns: 20 }, + { name: "rows-100k", rows: 100_000, columns: 20 }, + { name: "columns-20", rows: 1_000, columns: 20 }, + { name: "columns-100", rows: 1_000, columns: 100 }, + { name: "columns-500", rows: 1_000, columns: 500 }, +] as const; + +export type BenchmarkScenario = (typeof benchmarkScenarios)[number]; + +export function makeBenchmarkRows(rowCount: number, columnCount: number) { + return Array.from({ length: rowCount }, (_, rowIndex) => { + const row: Record = { id: `row-${rowIndex}` }; + for (let columnIndex = 0; columnIndex < columnCount; columnIndex += 1) { + row[`column-${columnIndex}`] = + `Row ${rowIndex} column ${columnIndex} searchable ${rowIndex % 97}`; + } + return row; + }); +} diff --git a/benchmarks/index.html b/benchmarks/index.html new file mode 100644 index 0000000..71edcb7 --- /dev/null +++ b/benchmarks/index.html @@ -0,0 +1,12 @@ + + + + + + data-table-pro benchmark + + +
+ + + diff --git a/benchmarks/performance.spec.ts b/benchmarks/performance.spec.ts new file mode 100644 index 0000000..3a5dcf8 --- /dev/null +++ b/benchmarks/performance.spec.ts @@ -0,0 +1,43 @@ +import { expect, test } from "@playwright/test"; +import { benchmarkScenarios } from "./fixtures"; + +for (const scenario of benchmarkScenarios) { + test(`measures ${scenario.name}`, async ({ page }) => { + await page.goto(`/?scenario=${scenario.name}`); + await page.waitForFunction(() => Boolean(window.__DTP_BENCHMARK__)); + + const searchStartedAt = await page.evaluate(() => performance.now()); + await page.getByPlaceholder("Search rows...").fill("searchable 42"); + await page.waitForTimeout(50); + const searchSettleMs = await page.evaluate( + (startedAt) => performance.now() - startedAt, + searchStartedAt, + ); + const scrollFrameMs = await page.evaluate(async () => { + const viewport = document.querySelector( + '[data-radix-scroll-area-viewport]', + ); + const startedAt = performance.now(); + viewport?.scrollTo({ top: 12_000 }); + await new Promise(requestAnimationFrame); + return performance.now() - startedAt; + }); + const metrics = await page.evaluate(() => window.__DTP_BENCHMARK__!.readMetrics()); + const initialRenderMs = await page.evaluate( + () => window.__DTP_BENCHMARK__!.initialRenderMs, + ); + + expect(metrics.domNodes).toBeGreaterThan(0); + console.log( + JSON.stringify({ + scenario: scenario.name, + rows: scenario.rows, + columns: scenario.columns, + initialRenderMs, + searchSettleMs, + scrollFrameMs, + ...metrics, + }), + ); + }); +} diff --git a/benchmarks/playwright.config.ts b/benchmarks/playwright.config.ts new file mode 100644 index 0000000..45ef8e6 --- /dev/null +++ b/benchmarks/playwright.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from "@playwright/test"; + +export default defineConfig({ + testDir: ".", + testMatch: "performance.spec.ts", + reporter: "list", + use: { browserName: "chromium", headless: true }, + webServer: { + command: + "corepack pnpm exec vite --config vite.config.ts --host 127.0.0.1", + port: 4177, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/benchmarks/src/main.tsx b/benchmarks/src/main.tsx new file mode 100644 index 0000000..5868ec7 --- /dev/null +++ b/benchmarks/src/main.tsx @@ -0,0 +1,89 @@ +import * as React from "react"; +import { createRoot } from "react-dom/client"; +import type { DataTableColumnDef } from "../../src"; +import { DataTable } from "../../src"; +import "../../styles.css"; +import { + benchmarkScenarios, + makeBenchmarkRows, + type BenchmarkScenario, +} from "../fixtures"; + +declare global { + interface Window { + __DTP_BENCHMARK__?: { + initialRenderMs: number; + readMetrics: () => { + domNodes: number; + heapBytes: number | null; + longTaskCount: number; + longTaskMs: number; + }; + }; + } +} + +const scenario = resolveScenario(new URLSearchParams(location.search).get("scenario")); +const rows = makeBenchmarkRows(scenario.rows, scenario.columns); +const columns: Array, unknown>> = + Array.from({ length: scenario.columns }, (_, index) => ({ + accessorKey: `column-${index}`, + header: `Column ${index}`, + size: 160, + })); +const renderStartedAt = performance.now(); +let longTaskCount = 0; +let longTaskMs = 0; + +try { + new PerformanceObserver((entries) => { + for (const entry of entries.getEntries()) { + longTaskCount += 1; + longTaskMs += entry.duration; + } + }).observe({ type: "longtask", buffered: true }); +} catch { + // Long Task timing is not exposed by every browser or privacy mode. +} + +function Benchmark() { + React.useEffect(() => { + window.__DTP_BENCHMARK__ = { + initialRenderMs: performance.now() - renderStartedAt, + readMetrics: () => ({ + domNodes: document.querySelectorAll("*").length, + heapBytes: + "memory" in performance + ? (performance as Performance & { + memory?: { usedJSHeapSize?: number }; + }).memory?.usedJSHeapSize ?? null + : null, + longTaskCount, + longTaskMs, + }), + }; + }, []); + + return ( +
+

Benchmark: {scenario.name}

+ row.id} + pageSize={scenario.rows} + rowsPerPageOptions={[scenario.rows]} + virtualization={{ enabled: true, overscan: 8 }} + /> +
+ ); +} + +createRoot(document.getElementById("root")!).render(); + +function resolveScenario(name: string | null): BenchmarkScenario { + return ( + benchmarkScenarios.find((candidate) => candidate.name === name) ?? + benchmarkScenarios[0] + ); +} diff --git a/benchmarks/vite.config.ts b/benchmarks/vite.config.ts new file mode 100644 index 0000000..b3db4b4 --- /dev/null +++ b/benchmarks/vite.config.ts @@ -0,0 +1,15 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; + +const rootDir = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + "..", +); + +export default defineConfig({ + root: path.join(rootDir, "benchmarks"), + plugins: [react()], + server: { port: 4177, strictPort: true }, +}); diff --git a/browser-tests/data-table.spec.ts b/browser-tests/data-table.spec.ts index 762071b..30dbe17 100644 --- a/browser-tests/data-table.spec.ts +++ b/browser-tests/data-table.spec.ts @@ -1,5 +1,5 @@ import AxeBuilder from "@axe-core/playwright"; -import { expect, test } from "@playwright/test"; +import { expect, test, type Page } from "@playwright/test"; const adapters = [ { key: "shadcn", label: "shadcn" }, @@ -8,6 +8,17 @@ const adapters = [ ] as const; const themes = ["light", "dark"] as const; +const hideContentSizedCards = async (page: Page) => { + await page + .getByRole("heading", { name: "Content-sized cards" }) + .evaluate((heading) => { + const section = heading.closest("section"); + if (section) { + section.hidden = true; + } + }); +}; + for (const adapter of adapters) { for (const theme of themes) { test(`${adapter.label} renders an accessible ${theme} layout`, async ({ @@ -22,14 +33,7 @@ for (const adapter of adapters) { name: `${theme === "light" ? "Light" : "Dark"} theme`, }) .click(); - await page - .getByRole("heading", { name: "Content-sized cards" }) - .evaluate((heading) => { - const section = heading.closest("section"); - if (section) { - section.hidden = true; - } - }); + await hideContentSizedCards(page); const shell = page.locator("main.demo-shell"); const table = page @@ -43,6 +47,14 @@ for (const adapter of adapters) { name: `${adapter.label} employees`, }), ).toBeVisible(); + // These controls are loaded from an optional chunk. Waiting for them + // keeps every adapter/theme screenshot on the same settled UI state. + await expect( + table.getByRole("button", { name: "Print table" }), + ).toBeVisible(); + await expect( + table.getByRole("button", { name: "Enter fullscreen" }), + ).toBeVisible(); const layout = await table.evaluate((element) => { const root = element.getBoundingClientRect(); @@ -131,3 +143,102 @@ for (const adapter of adapters) { }); } } + +test("responsive behavior follows table container boundaries", async ({ + page, +}) => { + await page.goto("/"); + + const table = page.locator('[data-dtp-slot="data-table-root"]').first(); + const setContainerWidth = async (width: number) => { + await table.evaluate((element, nextWidth) => { + element.style.flex = "none"; + element.style.maxWidth = "none"; + element.style.width = `${nextWidth}px`; + }, width); + await expect(table).toHaveCSS("width", `${width}px`); + }; + const header = (columnId: string) => + table.locator(`thead [data-column-id="${columnId}"]`); + + await setContainerWidth(639); + await expect(header("department")).toHaveCount(0); + + await setContainerWidth(640); + await expect(header("department")).toBeVisible(); + + await setContainerWidth(767); + await expect(header("role")).toHaveCount(0); + await expect( + table.getByRole("button", { name: "Search table" }), + ).toBeVisible(); + + await setContainerWidth(768); + await expect(header("role")).toBeVisible(); + await expect( + table.getByPlaceholder("Search name, role, status, manager..."), + ).toBeVisible(); + + await setContainerWidth(1023); + await expect(header("location")).toHaveCount(0); + + await setContainerWidth(1024); + await expect(header("location")).toBeVisible(); + + await page.evaluate(() => { + document.documentElement.style.fontSize = "20px"; + }); + await setContainerWidth(768); + await expect(header("role")).toBeVisible(); + await expect(header("location")).toHaveCount(0); +}); + +test("interactive grid navigation follows the rendered cell geometry", async ({ + page, +}) => { + await page.goto("/"); + const grid = page.getByRole("grid").first(); + await expect(grid).toHaveAttribute("aria-colcount", /[1-9]/); + await expect(grid).toHaveAttribute("aria-rowcount", /[1-9]/); + + const firstCell = grid.getByRole("gridcell").first(); + await firstCell.focus(); + await page.keyboard.press("ArrowRight"); + await expect(grid.getByRole("gridcell").nth(1)).toBeFocused(); + await page.keyboard.press("PageDown"); + const focused = await page.locator(':focus').evaluate((element) => ({ + row: element.getAttribute("data-grid-row-index"), + column: element.getAttribute("data-grid-column-index"), + })); + expect(focused.row).not.toBe("0"); + expect(focused.column).toBe("1"); +}); + +test("interactive grid selects a pointer-dragged cell range", async ({ page }) => { + await page.goto("/"); + await hideContentSizedCards(page); + const grid = page.getByRole("grid").first(); + // The demo's first two cells are detail and row-selection utilities. Range + // selection intentionally begins only from data cells. + const firstCell = grid.locator( + '[role="gridcell"][data-grid-row-index="0"][data-grid-column-index="2"]', + ); + const fourthCell = grid.locator( + '[role="gridcell"][data-grid-row-index="0"][data-grid-column-index="5"]', + ); + const start = await firstCell.boundingBox(); + const end = await fourthCell.boundingBox(); + expect(start).not.toBeNull(); + expect(end).not.toBeNull(); + await page.mouse.move( + start!.x + start!.width / 2, + start!.y + start!.height / 2, + ); + await page.mouse.down(); + await page.mouse.move(end!.x + end!.width / 2, end!.y + end!.height / 2, { + steps: 4, + }); + await page.mouse.up(); + await expect(firstCell).toHaveAttribute("aria-selected", "true"); + await expect(fourthCell).toHaveAttribute("aria-selected", "true"); +}); diff --git a/browser-tests/data-table.spec.ts-snapshots/heroui-dark-table-chromium-linux.png b/browser-tests/data-table.spec.ts-snapshots/heroui-dark-table-chromium-linux.png index a43f894..00385b9 100644 Binary files a/browser-tests/data-table.spec.ts-snapshots/heroui-dark-table-chromium-linux.png and b/browser-tests/data-table.spec.ts-snapshots/heroui-dark-table-chromium-linux.png differ diff --git a/browser-tests/data-table.spec.ts-snapshots/heroui-light-table-chromium-linux.png b/browser-tests/data-table.spec.ts-snapshots/heroui-light-table-chromium-linux.png index 4131155..20d2ef4 100644 Binary files a/browser-tests/data-table.spec.ts-snapshots/heroui-light-table-chromium-linux.png and b/browser-tests/data-table.spec.ts-snapshots/heroui-light-table-chromium-linux.png differ diff --git a/browser-tests/data-table.spec.ts-snapshots/shadcn-dark-table-chromium-linux.png b/browser-tests/data-table.spec.ts-snapshots/shadcn-dark-table-chromium-linux.png index 0468047..c3789da 100644 Binary files a/browser-tests/data-table.spec.ts-snapshots/shadcn-dark-table-chromium-linux.png and b/browser-tests/data-table.spec.ts-snapshots/shadcn-dark-table-chromium-linux.png differ diff --git a/browser-tests/data-table.spec.ts-snapshots/shadcn-light-table-chromium-linux.png b/browser-tests/data-table.spec.ts-snapshots/shadcn-light-table-chromium-linux.png index 5d6baad..93be151 100644 Binary files a/browser-tests/data-table.spec.ts-snapshots/shadcn-light-table-chromium-linux.png and b/browser-tests/data-table.spec.ts-snapshots/shadcn-light-table-chromium-linux.png differ diff --git a/browser-tests/data-table.spec.ts-snapshots/thegridcn-dark-table-chromium-linux.png b/browser-tests/data-table.spec.ts-snapshots/thegridcn-dark-table-chromium-linux.png index a730f05..69f486b 100644 Binary files a/browser-tests/data-table.spec.ts-snapshots/thegridcn-dark-table-chromium-linux.png and b/browser-tests/data-table.spec.ts-snapshots/thegridcn-dark-table-chromium-linux.png differ diff --git a/browser-tests/data-table.spec.ts-snapshots/thegridcn-light-table-chromium-linux.png b/browser-tests/data-table.spec.ts-snapshots/thegridcn-light-table-chromium-linux.png index f10fd78..654e9a8 100644 Binary files a/browser-tests/data-table.spec.ts-snapshots/thegridcn-light-table-chromium-linux.png and b/browser-tests/data-table.spec.ts-snapshots/thegridcn-light-table-chromium-linux.png differ diff --git a/demo/src/DemoApp.tsx b/demo/src/DemoApp.tsx index d5d9006..47f1640 100644 --- a/demo/src/DemoApp.tsx +++ b/demo/src/DemoApp.tsx @@ -403,6 +403,10 @@ export function DemoApp() { rowSelection={rowSelection} onRowSelectionChange={setRowSelection} enableRowSelection + interactiveGrid + enableCellSelection + enablePrint + enableFullscreen toolbarActions={[ { key: "refresh", diff --git a/dist/adapter-virtual.d.ts b/dist/adapter-virtual.d.ts index 62d0fc7..bef68b8 100644 --- a/dist/adapter-virtual.d.ts +++ b/dist/adapter-virtual.d.ts @@ -1,9 +1,9 @@ import * as React from 'react'; import { DataTableProps } from './types.js'; -import { D as DataTableUiKit } from './ui-kit-DPJDIPrF.js'; -export { a as DataTableUiClassNames } from './ui-kit-DPJDIPrF.js'; +import { D as DataTableUiKit } from './ui-kit-C6Z8X6oi.js'; +export { a as DataTableUiClassNames } from './ui-kit-C6Z8X6oi.js'; import '@tanstack/react-table'; -declare function createVirtualDataTable(ui: DataTableUiKit): ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare function createVirtualDataTable(ui: DataTableUiKit): ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTableUiKit, createVirtualDataTable }; diff --git a/dist/adapter-virtual.js b/dist/adapter-virtual.js index 44aef3b..7d4d93c 100644 --- a/dist/adapter-virtual.js +++ b/dist/adapter-virtual.js @@ -1,2 +1,2 @@ -export{a as createVirtualDataTable}from'./chunk-RJOEF7NA.js';import'./chunk-EAV5MZCW.js';import'./chunk-Y5JNRFE4.js';import'./chunk-3CYYXB7K.js';import'./chunk-ACKI7LST.js';import'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';//# sourceMappingURL=adapter-virtual.js.map +export{a as createVirtualDataTable}from'./chunk-QFLMV3CT.js';import'./chunk-K7SNDVV2.js';import'./chunk-YPKN2W27.js';import'./chunk-JNI3CH7M.js';import'./chunk-EJHT5JBZ.js';import'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';//# sourceMappingURL=adapter-virtual.js.map //# sourceMappingURL=adapter-virtual.js.map \ No newline at end of file diff --git a/dist/adapter.d.ts b/dist/adapter.d.ts index ac4f328..3dc49bd 100644 --- a/dist/adapter.d.ts +++ b/dist/adapter.d.ts @@ -1,10 +1,10 @@ import * as React from 'react'; import { DataTableProps } from './types.js'; -import { D as DataTableUiKit } from './ui-kit-DPJDIPrF.js'; -export { a as DataTableUiClassNames } from './ui-kit-DPJDIPrF.js'; +import { D as DataTableUiKit } from './ui-kit-C6Z8X6oi.js'; +export { a as DataTableUiClassNames } from './ui-kit-C6Z8X6oi.js'; import '@tanstack/react-table'; -declare function createDataTable(ui: DataTableUiKit): ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare function createDataTable(ui: DataTableUiKit): ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; declare const primitiveUiKit: DataTableUiKit; diff --git a/dist/adapter.js b/dist/adapter.js index 77cfd48..e6282d3 100644 --- a/dist/adapter.js +++ b/dist/adapter.js @@ -1,2 +1,2 @@ -export{X as primitiveUiKit}from'./chunk-2V6RVOWX.js';export{i as createDataTable}from'./chunk-3CYYXB7K.js';import'./chunk-ACKI7LST.js';import'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';//# sourceMappingURL=adapter.js.map +export{X as primitiveUiKit}from'./chunk-7FUCHMMB.js';export{i as createDataTable}from'./chunk-JNI3CH7M.js';import'./chunk-EJHT5JBZ.js';import'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';//# sourceMappingURL=adapter.js.map //# sourceMappingURL=adapter.js.map \ No newline at end of file diff --git a/dist/advanced.d.ts b/dist/advanced.d.ts index ea9f714..1bc5f8e 100644 --- a/dist/advanced.d.ts +++ b/dist/advanced.d.ts @@ -1,17 +1,19 @@ export { createDataTable, primitiveUiKit } from './adapter.js'; import * as React from 'react'; import * as _tanstack_react_table from '@tanstack/react-table'; -import { Row, ColumnSizingState, Column, Table, Cell, PaginationState, SortingState, Header, Updater, ColumnDef, ColumnFiltersState, ColumnOrderState, ColumnPinningState, ExpandedState, VisibilityState, FilterFnOption, OnChangeFn } from '@tanstack/react-table'; -import { DataTableProps, DataTableLabels, DataTableColumnDef, DataTableDensity, DataTableRowLoadingState, DataTableEditableRowsConfig, DataTableRowAction } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDragAndDropConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; -import { D as DataTableUiKit, a as DataTableUiClassNames } from './ui-kit-DPJDIPrF.js'; +import { ExpandedState, Row, OnChangeFn, ColumnSizingState, Column, RowPinningPosition, Cell, Table, PaginationState, SortingState, Header, Updater, ColumnDef, ColumnFiltersState, ColumnOrderState, ColumnPinningState, RowPinningState, GroupingState, VisibilityState, FilterFnOption } from '@tanstack/react-table'; +import { DataTableProps, DataTableLabels, DataTableColumnDef, DataTableDensity, DataTableRowLoadingState, DataTableCellSelection, DataTableSavedView, DataTableEditableRowsConfig, DataTableRowAction, DataTableDetailPanel } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDragAndDropConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowClassNameContext, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +import { D as DataTableUiKit, a as DataTableUiClassNames } from './ui-kit-C6Z8X6oi.js'; type DataTableCardPanelProps = { cardClassName: string | undefined; cardGridClassName: string | undefined; cardSizing: DataTableProps["cardSizing"]; cardRenderer: NonNullable["cardRenderer"]>; + containerWidth: number; currentRowSelection: Record; + currentDetailExpanded: ExpandedState; DataTableCardView: React.ElementType; DataTableEmptyState: React.ElementType; dragAndDrop: DataTableProps["dragAndDrop"]; @@ -26,15 +28,17 @@ type DataTableCardPanelProps = { localSearchValue: string; onRowClick: DataTableProps["onRowClick"]; renderedRows: Array>; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableProps["detailPanel"]; resolvedLabels: DataTableLabels; resolvedLoadingRowCount: number; rowActions: DataTableProps["rowActions"]; ScrollArea: DataTableUiKit["ScrollArea"]; sentinelRef: React.RefObject; setCurrentRowSelection: (rowSelection: Record) => void; + setCurrentDetailExpanded: OnChangeFn; setEditingRowId: React.Dispatch>; shouldRenderInitialLoading: boolean; + stateOverlayNode?: React.ReactNode; tableContainerClassName: string | undefined; uiClassNames: DataTableUiClassNames; virtualization: DataTableProps["virtualization"]; @@ -73,22 +77,93 @@ declare function useColumnLayout({ columns, columnSizing, editableRows, e getColumnLayout: (columnId: string) => DataTableColumnLayout; }; +type DataTableRowEditingContext = { + cancel: () => void; + clearError: (columnId: string) => void; + commit: (row: TData) => void; + errors: Record; + isDirty: boolean; + isPending: boolean; + cancelOnEscape: boolean; + commitOnEnter: boolean; +}; +type DataTableBodyRowProps = { + columnLayouts: ReadonlyMap; + components: Pick; + currentDensity: DataTableDensity; + draftValues: Record; + editingContext?: DataTableRowEditingContext; + dragAndDrop: DataTableProps["dragAndDrop"]; + explicitCustomCellColumnIds: ReadonlySet; + getRowClassName: DataTableProps["getRowClassName"]; + groupToggleLabel: string; + gridMode: boolean; + gridRowAriaIndex: number; + gridRowIndex: number; + activeGridCell: { + row: number; + column: number; + }; + cellSelectionEnabled: boolean; + isGridCellSelected: (row: number, column: number) => boolean; + onGridCellFocus: (cell: { + row: number; + column: number; + }) => void; + onGridCellKeyDown: (event: React.KeyboardEvent, row: number, column: number) => void; + onGridCellPointerDown: (event: React.PointerEvent, row: number, column: number) => void; + onGridCellPointerEnter: (event: React.PointerEvent, row: number, column: number) => void; + isDraggable: boolean; + isDetailExpanded: boolean; + isEditing: boolean; + isExpanded: boolean; + isInitialLoadingRow: boolean; + isSelected: boolean; + loadingState: DataTableRowLoadingState | undefined; + onRowClick: DataTableProps["onRowClick"]; + pinnedPosition?: Exclude; + originalRow: TData; + detailPanel: DataTableProps["detailPanel"]; + row: Row; + rowIndex: number; + setDraftValues: React.Dispatch>>; + stripedRows: boolean; + uiClassNames: DataTableUiClassNames; + visibleCells: Array>; + visibleLeafColumnCount: number; +}; +declare function DataTableBodyRowInner({ columnLayouts, components, currentDensity, draftValues, editingContext, dragAndDrop, explicitCustomCellColumnIds, getRowClassName, groupToggleLabel, gridMode, gridRowAriaIndex, gridRowIndex, activeGridCell, cellSelectionEnabled, isGridCellSelected, onGridCellFocus, onGridCellKeyDown, onGridCellPointerDown, onGridCellPointerEnter, isDraggable, isDetailExpanded, isEditing, isExpanded, isInitialLoadingRow, isSelected, loadingState, onRowClick, pinnedPosition, originalRow, detailPanel, row, rowIndex, setDraftValues, stripedRows, uiClassNames, visibleCells, visibleLeafColumnCount, }: DataTableBodyRowProps): React.JSX.Element; +declare const DataTableBodyRow: typeof DataTableBodyRowInner; + type DataTableTablePanelProps = { + ariaDescribedBy: string | undefined; + ariaLabelledBy: string | undefined; bodyRowComponents: Pick; + cellSelection: DataTableCellSelection | null; + cellSelectionEnabled: boolean; columnLayouts: ReadonlyMap; + columnGroupHeaderHeight: DataTableProps["columnGroupHeaderHeight"]; currentDensity: DataTableDensity; + currentDetailExpanded: ExpandedState; currentSorting: DataTableProps["sorting"]; + dir: NonNullable["dir"]>; DataTableEmptyState: React.ElementType; dragAndDrop: DataTableProps["dragAndDrop"]; draggedColumnIdRef: React.RefObject; draftValues: Record; editingRowId: string | null; + editingContext?: DataTableRowEditingContext; emptyNode: React.ReactNode; enableColumnReordering: boolean; enableColumnResizing: boolean; explicitCustomCellColumnIds: ReadonlySet; fillMinWidth: number; flexGrow: boolean; + gridMode: boolean; + gridPageSize?: number; + gridRowOffset: number; + onGridActiveRowIndexChange?: (rowIndex: number) => void; + onCellSelectionChange: (selection: DataTableCellSelection | null) => void; getColumnLayout: (columnId: string) => DataTableColumnLayout; getRowClassName: DataTableProps["getRowClassName"]; getRowLoadingState: DataTableProps["getRowLoadingState"]; @@ -98,7 +173,9 @@ type DataTableTablePanelProps = { onRowClick: DataTableProps["onRowClick"]; primeColumnForResize: (columnId: string, currentSize: number) => void; renderedRows: Array>; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableProps["detailPanel"]; + topPinnedRows: Array>; + bottomPinnedRows: Array>; reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; resetColumnSize: (columnId: string) => void; resolvedLabels: DataTableLabels; @@ -111,7 +188,9 @@ type DataTableTablePanelProps = { sentinelRef: React.RefObject; setDraftValues: React.Dispatch>>; shouldRenderInitialLoading: boolean; + stateOverlayNode?: React.ReactNode; stickyHeader: boolean; + stripedRows: boolean; summaryRows: NonNullable["summaryRows"]>; table: Table; tableClassName: string | undefined; @@ -125,6 +204,7 @@ type DataTableTablePanelProps = { TableRow: DataTableUiKit["TableRow"]; tableScrollContainerRef: React.RefObject; tableScrollElement?: HTMLElement | null; + totalRowCount?: number; uiClassNames: DataTableUiClassNames; viewportHeight?: number; virtualization?: DataTableProps["virtualization"]; @@ -133,34 +213,7 @@ type DataTableTablePanelProps = { visibleLeafColumnCount: number; visibleLeafColumns: Array>; }; -declare function DataTableTablePanel({ bodyRowComponents, columnLayouts, currentDensity, currentSorting, DataTableEmptyState, dragAndDrop, draggedColumnIdRef, draftValues, editingRowId, emptyNode, enableColumnReordering, enableColumnResizing, explicitCustomCellColumnIds, fillMinWidth, flexGrow, getColumnLayout, getRowClassName, getRowLoadingState, infiniteScroll, layoutMode, localSearchValue, onRowClick, primeColumnForResize, renderedRows, renderExpandedRow, reorderColumn, resetColumnSize, resolvedLabels, rowsToRender, ScrollArea, ScrollBar, sentinelRef, setDraftValues, shouldRenderInitialLoading, stickyHeader, summaryRows, table, tableClassName, tableContainerClassName, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, tableScrollContainerRef, uiClassNames, virtualPaddingBottom, virtualPaddingTop, visibleLeafColumnCount, visibleLeafColumns, }: DataTableTablePanelProps): React.JSX.Element; - -type DataTableBodyRowProps = { - columnLayouts: ReadonlyMap; - components: Pick; - currentDensity: DataTableDensity; - draftValues: Record; - dragAndDrop: DataTableProps["dragAndDrop"]; - explicitCustomCellColumnIds: ReadonlySet; - getRowClassName: DataTableProps["getRowClassName"]; - isDraggable: boolean; - isEditing: boolean; - isExpanded: boolean; - isInitialLoadingRow: boolean; - isSelected: boolean; - loadingState: DataTableRowLoadingState | undefined; - onRowClick: DataTableProps["onRowClick"]; - originalRow: TData; - renderExpandedRow: DataTableProps["renderExpandedRow"]; - row: Row; - rowIndex: number; - setDraftValues: React.Dispatch>>; - uiClassNames: DataTableUiClassNames; - visibleCells: Array>; - visibleLeafColumnCount: number; -}; -declare function DataTableBodyRowInner({ columnLayouts, components, currentDensity, draftValues, dragAndDrop, explicitCustomCellColumnIds, getRowClassName, isDraggable, isEditing, isExpanded, isInitialLoadingRow, isSelected, loadingState, onRowClick, originalRow, renderExpandedRow, row, setDraftValues, uiClassNames, visibleCells, visibleLeafColumnCount, }: DataTableBodyRowProps): React.JSX.Element; -declare const DataTableBodyRow: typeof DataTableBodyRowInner; +declare function DataTableTablePanel({ ariaDescribedBy, ariaLabelledBy, bodyRowComponents, cellSelection, cellSelectionEnabled, columnLayouts, columnGroupHeaderHeight, currentDensity, currentDetailExpanded, currentSorting, dir, DataTableEmptyState, dragAndDrop, draggedColumnIdRef, draftValues, editingRowId, editingContext, emptyNode, enableColumnReordering, enableColumnResizing, explicitCustomCellColumnIds, fillMinWidth, flexGrow, gridMode, gridPageSize, gridRowOffset, onGridActiveRowIndexChange, onCellSelectionChange, getColumnLayout, getRowClassName, getRowLoadingState, infiniteScroll, layoutMode, localSearchValue, onRowClick, primeColumnForResize, renderedRows, detailPanel, topPinnedRows, bottomPinnedRows, reorderColumn, resetColumnSize, resolvedLabels, rowsToRender, ScrollArea, ScrollBar, sentinelRef, setDraftValues, shouldRenderInitialLoading, stateOverlayNode, stickyHeader, stripedRows, summaryRows, table, tableClassName, tableContainerClassName, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, tableScrollContainerRef, tableScrollElement, totalRowCount, uiClassNames, virtualPaddingBottom, virtualPaddingTop, visibleLeafColumnCount, visibleLeafColumns, }: DataTableTablePanelProps): React.JSX.Element; type DataTableFooterSectionProps = { children?: React.ReactNode; @@ -178,22 +231,27 @@ type DataTableFooterSectionProps = { declare function DataTableFooterSection({ children, currentPagination, DataTableFooter, effectivePageCount, footerTotalRowCount, handleFooterPageIndexChange, handleFooterPageSizeChange, labels, pageCountKnown, rowsPerPageOptions, showFooter, }: DataTableFooterSectionProps): React.JSX.Element | null; type DataTableHeaderCellProps = { + columnGroupHeaderHeight: DataTableProps["columnGroupHeaderHeight"]; currentDensity: DataTableDensity; currentSorting: SortingState; + dir: NonNullable["dir"]>; draggedColumnIdRef: React.MutableRefObject; enableColumnReordering: boolean; enableColumnResizing: boolean; + gridColumnIndex?: number; + gridMode: boolean; header: Header; headerGroupHeaders: Array>; layout: DataTableColumnLayout; primeColumnForResize: (columnId: string, currentSize: number) => void; reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; + resizeColumnLabel: string; resetColumnSize: (columnId: string) => void; selectionState?: boolean | "indeterminate"; TableHead: DataTableUiKit["TableHead"]; uiClassNames: DataTableUiClassNames; }; -declare function DataTableHeaderCellInner({ currentDensity, currentSorting, draggedColumnIdRef, enableColumnReordering, enableColumnResizing, header, headerGroupHeaders, layout, primeColumnForResize, reorderColumn, resetColumnSize, TableHead, uiClassNames, }: DataTableHeaderCellProps): React.JSX.Element; +declare function DataTableHeaderCellInner({ columnGroupHeaderHeight, currentDensity, currentSorting, dir, draggedColumnIdRef, enableColumnReordering, enableColumnResizing, gridColumnIndex, gridMode, header, headerGroupHeaders, layout, primeColumnForResize, reorderColumn, resizeColumnLabel, resetColumnSize, TableHead, uiClassNames, }: DataTableHeaderCellProps): React.JSX.Element; declare const DataTableHeaderCell: typeof DataTableHeaderCellInner; type DataTableToolbarSectionProps = { @@ -204,8 +262,14 @@ type DataTableToolbarSectionProps = { customToolbar: React.ReactNode; DataTableToolbar: React.ElementType; description: string | undefined; + descriptionId: string | undefined; effectiveToolbarActions: Array; enableColumnPinning: boolean; + enableGrouping: boolean; + enableToolbarColumnChooser: boolean; + enableToolbarFilterChips: boolean; + enableToolbarResetLayout: boolean; + enableToolbarSavedViews: boolean; enableDensityToggle: boolean; enableViewToggle: boolean; hiddenRowsLabel: string | undefined; @@ -216,20 +280,29 @@ type DataTableToolbarSectionProps = { onDensityChange: (density: "compact" | "comfortable" | "spacious") => void; onShowHiddenRowsChange: (showHiddenRows: boolean) => void; onToolbarQueryValueChange: (value: string) => void; + reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; + onResetColumnLayout: () => void; + onCreateSavedView: (name: string) => DataTableSavedView | undefined; + onApplySavedView: (id: string) => boolean; + onRenameSavedView: (id: string, name: string) => DataTableSavedView | undefined; + onDeleteSavedView: (id: string) => boolean; onViewModeChange: (viewMode: "table" | "card") => void; openFileDialog: (() => void) | undefined; + selectedRowIds: Array; selectedRows: Array; selectionActions: DataTableProps["selectionActions"]; + savedViews: Array; showHiddenRows: boolean; table: Table; title: string | undefined; + titleId: string | undefined; toolbarQueryPlaceholder: string; toolbarQueryValue: string; toolbarVisibility: DataTableProps["toolbarVisibility"]; density: "compact" | "comfortable" | "spacious"; viewMode: "table" | "card"; }; -declare function DataTableToolbarSection({ allRows, columnFilters, columnVisibilityOptions, compactToolbar, customToolbar, DataTableToolbar, description, effectiveToolbarActions, enableColumnPinning, enableDensityToggle, enableViewToggle, hiddenRowsLabel, labels, onClearColumnFilters, onColumnFilterChange, onColumnPinningChange, onDensityChange, onShowHiddenRowsChange, onToolbarQueryValueChange, onViewModeChange, openFileDialog, selectedRows, selectionActions, showHiddenRows, table, title, toolbarQueryPlaceholder, toolbarQueryValue, toolbarVisibility, density, viewMode, }: DataTableToolbarSectionProps): React.JSX.Element; +declare function DataTableToolbarSection({ allRows, columnFilters, columnVisibilityOptions, compactToolbar, customToolbar, DataTableToolbar, description, descriptionId, effectiveToolbarActions, enableColumnPinning, enableGrouping, enableToolbarColumnChooser, enableToolbarFilterChips, enableToolbarResetLayout, enableToolbarSavedViews, enableDensityToggle, enableViewToggle, hiddenRowsLabel, labels, onClearColumnFilters, onColumnFilterChange, onColumnPinningChange, onDensityChange, onShowHiddenRowsChange, onToolbarQueryValueChange, reorderColumn, onResetColumnLayout, onCreateSavedView, onApplySavedView, onRenameSavedView, onDeleteSavedView, onViewModeChange, openFileDialog, selectedRowIds, selectedRows, selectionActions, savedViews, showHiddenRows, table, title, titleId, toolbarQueryPlaceholder, toolbarQueryValue, toolbarVisibility, density, viewMode, }: DataTableToolbarSectionProps): React.JSX.Element; declare function useControllableState({ defaultValue, onChange, value, }: { defaultValue: T | (() => T); @@ -245,8 +318,13 @@ type DataTableRowActionsComponentProps = { onStartEditing: () => void; row: TData; rowActions: Array>; + rowPinning?: { + canPin: boolean; + position: RowPinningPosition; + pin: (position: RowPinningPosition) => void; + }; }; -declare function useDataTableColumns({ Button, Checkbox, DataTableRowActions, Tooltip, TooltipContent, TooltipTrigger, cancelEditing, columns, editableRows, editingRowId, enableRowSelection, getRowCanExpand, isSavingEdit, labels, lastSelectedRowIdRef, renderExpandedRow, rowActions, saveEdit, startEditingRow, tableRef, }: { +declare function useDataTableColumns({ Button, Checkbox, DataTableRowActions, Tooltip, TooltipContent, TooltipTrigger, cancelEditing, columns, editableRows, editingRowId, editErrors, enableRowSelection, enableRowPinning, hasTreeExpansion, isSavingEdit, isEditDirty, labels, lastSelectedRowIdRef, detailPanel, detailExpanded, onDetailExpandedChange, rowSelectionSelectAllScope, rowActions, saveEdit, startEditingRow, tableRef, }: { Button: DataTableUiKit["Button"]; Checkbox: DataTableUiKit["Checkbox"]; DataTableRowActions: React.ComponentType>; @@ -257,26 +335,42 @@ declare function useDataTableColumns({ Button, Checkbox, DataTableRowActi columns: DataTableProps["columns"]; editableRows: DataTableProps["editableRows"]; editingRowId: string | null; + editErrors: Record; enableRowSelection: boolean; - getRowCanExpand: DataTableProps["getRowCanExpand"]; + enableRowPinning: DataTableProps["enableRowPinning"]; + hasTreeExpansion: boolean; isSavingEdit: boolean; + isEditDirty: boolean; labels: DataTableLabels; lastSelectedRowIdRef: React.MutableRefObject; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableDetailPanel | undefined; + detailExpanded: ExpandedState; + onDetailExpandedChange: OnChangeFn; + rowSelectionSelectAllScope: NonNullable["rowSelectionSelectAllScope"]>; rowActions: Array>; - saveEdit: (row: TData) => Promise; + saveEdit: (row: TData) => Promise; startEditingRow: (row: TData, rowId: string) => void; tableRef: React.RefObject | null>; }): ColumnDef[]; -declare function useDataTableInstance({ autoResetPageIndex, columnResizeMode, currentColumnFilters, currentColumnOrder, currentColumnPinning, currentColumnSizing, currentExpanded, currentPagination, currentRowSelection, currentSorting, defaultColumn, effectiveColumnVisibility, enableColumnResizing, enableRowSelection, getRowCanExpand, globalFilterFn, globalFilterValue, hasNextPage, handleColumnFiltersChange, handleColumnOrderChange, handleColumnPinningChange, handleColumnVisibilityChange, handleExpandedChange, infiniteScroll, manualFiltering, manualPagination, manualSorting, onActionError, onPageIndexChange, onPageSizeChange, pageCount, pageIndex, pageSize, renderExpandedRow, setCurrentRowSelection, setCurrentSorting, setLocalColumnSizing, setLocalPagination, shouldRenderInitialLoading, tableColumns, tableData, tableGetRowId, tableRef, totalRowCount, }: { +type DataTableColumnGroupPathSegment = { + id: string; + freeReordering: boolean; +}; +type DataTableColumnGroupPaths = ReadonlyMap>; + +declare function useDataTableInstance({ autoResetPageIndex, columnGroupPaths, columnResizeMode, dir, currentColumnFilters, currentColumnOrder, currentColumnPinning, currentRowPinning, currentColumnSizing, currentExpanded, currentGrouping, currentPagination, currentRowSelection, currentSorting, currentViewMode, defaultColumn, effectiveColumnVisibility, enableColumnResizing, enableMultiRowSelection, enableRowPinning, enableRowSelection, enableSubRowSelection, getRowCanSelect, getRowCanExpand, getSubRows, aggregationFns, groupedColumnMode, globalFilterFn, globalFilterValue, hasNextPage, handleColumnFiltersChange, handleColumnOrderChange, handleColumnPinningChange, handleRowPinningChange, handleColumnVisibilityChange, handleExpandedChange, handleGroupingChange, infiniteScroll, keepPinnedRows, manualFiltering, manualGrouping, manualExpanding, manualPagination, manualSorting, onActionError, onPageIndexChange, onPageSizeChange, pageCount, pageIndex, pageSize, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, setCurrentRowSelection, setCurrentSorting, setLocalColumnSizing, setLocalPagination, shouldRenderInitialLoading, tableColumns, tableData, tableGetRowId, tableRef, totalRowCount, virtualization, }: { autoResetPageIndex: boolean; + columnGroupPaths: DataTableColumnGroupPaths; columnResizeMode: DataTableProps["columnResizeMode"]; + dir: NonNullable["dir"]>; currentColumnFilters: ColumnFiltersState; currentColumnOrder: ColumnOrderState; currentColumnPinning: ColumnPinningState; + currentRowPinning: RowPinningState; currentColumnSizing: ColumnSizingState; currentExpanded: ExpandedState; + currentGrouping: GroupingState; currentPagination: PaginationState; currentRowSelection: Record; currentSorting: SortingState; @@ -284,18 +378,30 @@ declare function useDataTableInstance({ autoResetPageIndex, columnResizeM defaultColumn: Partial>; effectiveColumnVisibility: VisibilityState; enableColumnResizing: boolean; + enableMultiRowSelection: NonNullable["enableMultiRowSelection"]>; + enableRowPinning: DataTableProps["enableRowPinning"]; enableRowSelection: boolean; + enableSubRowSelection: NonNullable["enableSubRowSelection"]>; + getRowCanSelect: DataTableProps["getRowCanSelect"]; getRowCanExpand: DataTableProps["getRowCanExpand"]; + getSubRows: DataTableProps["getSubRows"]; + aggregationFns: DataTableProps["aggregationFns"]; + groupedColumnMode: DataTableProps["groupedColumnMode"]; globalFilterFn: FilterFnOption | undefined; globalFilterValue: string; hasNextPage?: DataTableProps["hasNextPage"]; handleColumnFiltersChange: OnChangeFn; handleColumnOrderChange: OnChangeFn; handleColumnPinningChange: OnChangeFn; + handleRowPinningChange: OnChangeFn; handleColumnVisibilityChange: OnChangeFn; handleExpandedChange: OnChangeFn; + handleGroupingChange: OnChangeFn; infiniteScroll: DataTableProps["infiniteScroll"]; + keepPinnedRows: boolean; manualFiltering: boolean; + manualGrouping: boolean; + manualExpanding: boolean; manualPagination: boolean; manualSorting: boolean; onActionError?: DataTableProps["onActionError"]; @@ -304,7 +410,9 @@ declare function useDataTableInstance({ autoResetPageIndex, columnResizeM pageCount: DataTableProps["pageCount"]; pageIndex: DataTableProps["pageIndex"]; pageSize: DataTableProps["pageSize"]; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + paginateExpandedRows: DataTableProps["paginateExpandedRows"]; + filterFromLeafRows: DataTableProps["filterFromLeafRows"]; + maxLeafRowFilterDepth: DataTableProps["maxLeafRowFilterDepth"]; setCurrentRowSelection: OnChangeFn>; setCurrentSorting: OnChangeFn; setLocalColumnSizing: OnChangeFn; @@ -330,6 +438,8 @@ declare function useDataTableInstance({ autoResetPageIndex, columnResizeM handleFooterPageSizeChange: (nextPageSize: number) => void; isPageCountKnown: boolean; renderedRows: Row[]; + topPinnedRows: Row[]; + bottomPinnedRows: Row[]; reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; rowsToRender: { row: Row; @@ -346,10 +456,11 @@ type DataTableRowsToRender = Array<{ rowIndex: number; }>; -declare function useDataTableState({ columnFilters, columnOrder, columnPinning, columnSizing, columnPrefsKey, persistence, columnVisibility, columns, data, density, enableRowSelection, enableToolbarQueryFiltering, expanded, getRowId, hiddenRows, initialState, isLoading, loadingRowCount, manualFiltering, onColumnFiltersChange, onColumnOrderChange, onColumnPinningChange, onColumnSizingChange, onColumnVisibilityChange, onDensityChange, onExpandedChange, onPageIndexChange, onRowSelectionChange, onShowHiddenRowsChange, onSortingChange, onToolbarQueryValueChange, onViewModeChange, pageIndex, pageSize, resolvedLabels, rowSelection, rowsPerPageOptions, selectionActions, showHiddenRows, sorting, toolbarQueryDebounceMs, toolbarQueryPlaceholder, toolbarQueryValue, viewMode, containerRef, }: { +declare function useDataTableState({ columnFilters, columnOrder, columnPinning, rowPinning, columnSizing, columnPrefsKey, persistence, columnVisibility, columns, data, density, enableRowSelection, enableToolbarQueryFiltering, expanded, grouping, getSubRows, getRowId, hiddenRows, initialState, isLoading, loadingRowCount, manualFiltering, onColumnFiltersChange, onColumnOrderChange, onColumnPinningChange, onRowPinningChange, onColumnSizingChange, onColumnVisibilityChange, onDensityChange, onExpandedChange, onGroupingChange, onPageIndexChange, onRowSelectionChange, onShowHiddenRowsChange, onSortingChange, onToolbarQueryValueChange, onViewModeChange, pageIndex, pageSize, resolvedLabels, rowSelection, rowsPerPageOptions, selectionActions, showHiddenRows, sorting, toolbarQueryDebounceMs, toolbarQueryPlaceholder, toolbarQueryValue, viewMode, containerRef, }: { columnFilters: DataTableProps["columnFilters"]; columnOrder: DataTableProps["columnOrder"]; columnPinning: DataTableProps["columnPinning"]; + rowPinning: DataTableProps["rowPinning"]; columnSizing?: DataTableProps["columnSizing"]; columnPrefsKey: DataTableProps["columnPrefsKey"]; persistence?: DataTableProps["persistence"]; @@ -360,6 +471,8 @@ declare function useDataTableState({ columnFilters, columnOrder, columnPi enableRowSelection: boolean; enableToolbarQueryFiltering: boolean; expanded: DataTableProps["expanded"]; + grouping: DataTableProps["grouping"]; + getSubRows: DataTableProps["getSubRows"]; getRowId: DataTableProps["getRowId"]; hiddenRows: DataTableProps["hiddenRows"]; initialState?: DataTableProps["initialState"]; @@ -369,10 +482,12 @@ declare function useDataTableState({ columnFilters, columnOrder, columnPi onColumnFiltersChange: DataTableProps["onColumnFiltersChange"]; onColumnOrderChange: DataTableProps["onColumnOrderChange"]; onColumnPinningChange: DataTableProps["onColumnPinningChange"]; + onRowPinningChange: DataTableProps["onRowPinningChange"]; onColumnSizingChange?: DataTableProps["onColumnSizingChange"]; onColumnVisibilityChange: DataTableProps["onColumnVisibilityChange"]; onDensityChange: DataTableProps["onDensityChange"]; onExpandedChange: DataTableProps["onExpandedChange"]; + onGroupingChange: DataTableProps["onGroupingChange"]; onPageIndexChange: DataTableProps["onPageIndexChange"]; onRowSelectionChange: DataTableProps["onRowSelectionChange"]; onShowHiddenRowsChange: DataTableProps["onShowHiddenRowsChange"]; @@ -393,13 +508,16 @@ declare function useDataTableState({ columnFilters, columnOrder, columnPi viewMode: DataTableProps["viewMode"]; containerRef: React.RefObject; }): { + containerWidth: number; currentColumnFilters: ColumnFiltersState; currentColumnOrder: ColumnOrderState; currentColumnPinning: ColumnPinningState; + currentRowPinning: RowPinningState; currentColumnSizing: ColumnSizingState; currentColumnVisibility: VisibilityState; currentDensity: DataTableDensity; currentExpanded: ExpandedState; + currentGrouping: GroupingState; currentPagination: PaginationState; currentRowSelection: Record; currentShowHiddenRows: boolean; @@ -413,12 +531,15 @@ declare function useDataTableState({ columnFilters, columnOrder, columnPi localSearchValue: string; resolvedLoadingRowCount: number; resolvedToolbarQueryPlaceholder: string; + selectedRowIds: string[]; selectedRows: TData[]; setCurrentColumnFilters: (updater: _tanstack_react_table.Updater) => void; setCurrentColumnOrder: (updater: _tanstack_react_table.Updater) => void; setCurrentColumnPinning: (updater: _tanstack_react_table.Updater) => void; + setCurrentRowPinning: (updater: _tanstack_react_table.Updater) => void; setCurrentColumnVisibility: (updater: _tanstack_react_table.Updater) => void; setCurrentExpanded: (updater: _tanstack_react_table.Updater) => void; + setCurrentGrouping: (updater: _tanstack_react_table.Updater) => void; setCurrentRowSelection: (updater: _tanstack_react_table.Updater>) => void; setCurrentSorting: (updater: _tanstack_react_table.Updater) => void; setLocalColumnSizing: (updater: _tanstack_react_table.Updater) => void; @@ -441,10 +562,13 @@ declare function useRowEditing({ columns, editableRows, onError, }: { onError?: (error: unknown, row: TData) => void; }): { cancelEditing: () => void; + clearEditError: (columnId: string) => void; draftValues: Record; + editErrors: Record; editingRowId: string | null; + isEditDirty: boolean; isSavingEdit: boolean; - saveEdit: (row: TData) => Promise; + saveEdit: (row: TData) => Promise; setDraftValues: React.Dispatch>>; setEditingRowId: React.Dispatch>; startEditingRow: (row: TData, rowId: string) => void; @@ -452,4 +576,4 @@ declare function useRowEditing({ columns, editableRows, onError, }: { declare function useStableCallback, TResult>(callback: ((...args: TArgs) => TResult) | undefined): (...args: TArgs) => TResult | undefined; -export { DataTableBodyRow, DataTableCardPanel, DataTableColumnDef, type DataTableColumnLayout, DataTableDensity, DataTableEditableRowsConfig, DataTableFooterSection, DataTableHeaderCell, DataTableLabels, DataTableProps, DataTableRowAction, DataTableRowLoadingState, type DataTableRowsToRender, DataTableTablePanel, DataTableToolbarSection, DataTableUiClassNames, DataTableUiKit, useColumnLayout, useControllableState, useDataTableColumns, useDataTableInstance, useDataTableState, useRowEditing, useStableCallback }; +export { DataTableBodyRow, DataTableCardPanel, DataTableCellSelection, DataTableColumnDef, type DataTableColumnLayout, DataTableDensity, DataTableDetailPanel, DataTableEditableRowsConfig, DataTableFooterSection, DataTableHeaderCell, DataTableLabels, DataTableProps, DataTableRowAction, DataTableRowLoadingState, type DataTableRowsToRender, DataTableSavedView, DataTableTablePanel, DataTableToolbarSection, DataTableUiClassNames, DataTableUiKit, useColumnLayout, useControllableState, useDataTableColumns, useDataTableInstance, useDataTableState, useRowEditing, useStableCallback }; diff --git a/dist/advanced.js b/dist/advanced.js index e43522b..2627400 100644 --- a/dist/advanced.js +++ b/dist/advanced.js @@ -1,2 +1,2 @@ -export{X as primitiveUiKit}from'./chunk-2V6RVOWX.js';export{a as DataTableCardPanel,b as DataTableFooterSection,c as DataTableToolbarSection,i as createDataTable,h as useColumnLayout,f as useControllableState,d as useDataTableColumns,e as useDataTableInstance,g as useDataTableState}from'./chunk-3CYYXB7K.js';import'./chunk-ACKI7LST.js';export{N as DataTableBodyRow,O as DataTableHeaderCell,P as DataTableTablePanel,M as useRowEditing}from'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';import*as e from'react';function R(a){let t=e.useRef(a);return e.useLayoutEffect(()=>{t.current=a;}),e.useCallback((...o)=>t.current?.(...o),[])}export{R as useStableCallback};//# sourceMappingURL=advanced.js.map +export{X as primitiveUiKit}from'./chunk-7FUCHMMB.js';export{a as DataTableCardPanel,b as DataTableFooterSection,c as DataTableToolbarSection,i as createDataTable,h as useColumnLayout,e as useControllableState,d as useDataTableColumns,f as useDataTableInstance,g as useDataTableState}from'./chunk-JNI3CH7M.js';import'./chunk-EJHT5JBZ.js';export{c as DataTableBodyRow,d as DataTableHeaderCell,e as DataTableTablePanel,a as useRowEditing}from'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';import*as e from'react';function R(a){let t=e.useRef(a);return e.useLayoutEffect(()=>{t.current=a;}),e.useCallback((...o)=>t.current?.(...o),[])}export{R as useStableCallback};//# sourceMappingURL=advanced.js.map //# sourceMappingURL=advanced.js.map \ No newline at end of file diff --git a/dist/advanced.js.map b/dist/advanced.js.map index 856bc8f..1afd1af 100644 --- a/dist/advanced.js.map +++ b/dist/advanced.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/core/data-table/use-stable-callback.ts"],"names":["useStableCallback","callback","callbackRef","args"],"mappings":"igBAEO,SAASA,CAAAA,CACdC,CAAAA,CACA,CACA,IAAMC,CAAAA,CAAoB,CAAA,CAAA,MAAA,CAAOD,CAAQ,CAAA,CAEzC,OAAM,kBAAgB,IAAM,CAC1BC,CAAAA,CAAY,OAAA,CAAUD,EACxB,CAAC,CAAA,CAEY,CAAA,CAAA,WAAA,CAAY,CAAA,GAAIE,CAAAA,GACpBD,CAAAA,CAAY,OAAA,GAAU,GAAGC,CAAI,CAAA,CACnC,EAAE,CACP","file":"advanced.js","sourcesContent":["import * as React from \"react\";\n\nexport function useStableCallback, TResult>(\n callback: ((...args: TArgs) => TResult) | undefined,\n) {\n const callbackRef = React.useRef(callback);\n\n React.useLayoutEffect(() => {\n callbackRef.current = callback;\n });\n\n return React.useCallback((...args: TArgs) => {\n return callbackRef.current?.(...args);\n }, []);\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../src/core/data-table/use-stable-callback.ts"],"names":["useStableCallback","callback","callbackRef","args"],"mappings":"qlBAEO,SAASA,CAAAA,CACdC,CAAAA,CACA,CACA,IAAMC,CAAAA,CAAoB,CAAA,CAAA,MAAA,CAAOD,CAAQ,CAAA,CAEzC,OAAM,kBAAgB,IAAM,CAC1BC,CAAAA,CAAY,OAAA,CAAUD,EACxB,CAAC,CAAA,CAEY,CAAA,CAAA,WAAA,CAAY,CAAA,GAAIE,CAAAA,GACpBD,CAAAA,CAAY,OAAA,GAAU,GAAGC,CAAI,CAAA,CACnC,EAAE,CACP","file":"advanced.js","sourcesContent":["import * as React from \"react\";\n\nexport function useStableCallback, TResult>(\n callback: ((...args: TArgs) => TResult) | undefined,\n) {\n const callbackRef = React.useRef(callback);\n\n React.useLayoutEffect(() => {\n callbackRef.current = callback;\n });\n\n return React.useCallback((...args: TArgs) => {\n return callbackRef.current?.(...args);\n }, []);\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-7NEQYX7P.js b/dist/chunk-2NQXDLBI.js similarity index 63% rename from dist/chunk-7NEQYX7P.js rename to dist/chunk-2NQXDLBI.js index d0f28c2..e5a46e8 100644 --- a/dist/chunk-7NEQYX7P.js +++ b/dist/chunk-2NQXDLBI.js @@ -1,2 +1,2 @@ -import {X as X$1,a as a$1,c,e,g,h,i,j as j$1,k,l,m,n,p,o,q as q$1,u,s,z as z$1,w,y,x,H,I,J as J$1,L,K as K$1,M,b,N as N$1,R,T,W as W$1}from'./chunk-2V6RVOWX.js';import {a}from'./chunk-ZF4EP4WP.js';import'react';import {jsx}from'react/jsx-runtime';function r(L,A){return function({className:H,...R}){return jsx(L,{className:a(A,H),...R})}}var U=r(a$1,"rounded-md text-foreground data-[variant=default]:border-primary data-[variant=default]:bg-primary data-[variant=default]:text-primary-foreground data-[variant=outline]:border-input data-[variant=outline]:bg-card data-[variant=outline]:hover:bg-accent data-[variant=outline]:hover:text-accent-foreground data-[variant=secondary]:border-secondary data-[variant=secondary]:bg-secondary data-[variant=secondary]:text-secondary-foreground data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:hover:bg-accent data-[variant=ghost]:hover:text-accent-foreground data-[variant=destructive]:border-destructive data-[variant=destructive]:bg-destructive data-[variant=destructive]:text-destructive-foreground data-[variant=link]:border-transparent data-[variant=link]:bg-transparent"),N=r(c,"rounded-xl border-border bg-card text-card-foreground shadow-sm ring-0"),z=r(e,"text-muted-foreground"),K=r(g,"border-t border-border/60 bg-muted/50"),_=r(h,"border-input bg-card ring-ring/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-checked:ring-primary"),O=r(i,"border-border bg-popover text-popover-foreground shadow-md"),V=r(j$1,"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10"),W=r(k,"focus:bg-accent focus:text-accent-foreground"),q=r(l,"focus:bg-accent focus:text-accent-foreground"),J=r(m,"text-muted-foreground"),Q=r(n,"bg-border"),X=r(p,"border-border bg-popover text-popover-foreground shadow-md"),Y=r(o,"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground"),Z=r(q$1,"rounded-2xl border-border/60 bg-background/70"),$=r(u,"text-muted-foreground"),j=r(s,"[&[data-variant=icon]]:bg-muted [&[data-variant=icon]]:text-foreground"),rr=r(z$1,"rounded-md border-input bg-card text-foreground placeholder:text-muted-foreground"),er=r(w,"rounded-md border-input bg-card text-foreground"),tr=r(y,"text-muted-foreground"),or=r(x,"bg-transparent"),ar=r(H,"[&>[data-slot=scroll-area-thumb]]:bg-border"),nr=r(I,"rounded-md border-input bg-card text-foreground"),dr=r(J$1,"border-border bg-popover text-popover-foreground shadow-md"),ir=r(L,"focus:bg-accent focus:text-accent-foreground"),cr=r(K$1,"text-muted-foreground"),ur=r(M,"bg-border"),pr=r(b,"bg-border"),br=r(N$1,"bg-muted"),sr=r(R,"border-border bg-muted/50"),gr=r(T,"text-foreground"),mr=r(W$1,"bg-foreground text-background ring-1 ring-foreground/10 [&>svg]:bg-foreground [&>svg]:fill-foreground"),xr={...X$1,rootClassName:"dtp-shadcn",classNames:{card:"hover:bg-muted/50 data-[state=selected]:bg-primary/10",cardGrid:"bg-transparent",cardItem:"min-w-0",cardOverlay:"from-background/95 via-background/85 to-transparent",cardScrollArea:"bg-transparent",cardSelected:"bg-primary/10 ring-primary",cardUnselected:"border-border",cardViewport:"bg-transparent",cellBorder:"border-border/40",dragActive:"rounded-md border-dashed border-primary",emptyState:"border-border/60 bg-background/70",footer:"border-border bg-card",headerSortIcon:"text-muted-foreground",mutedText:"text-muted-foreground",paginationSelectTrigger:"border-input bg-card",paginationTotal:"text-muted-foreground",pinnedColumn:"border-border",pinnedUtilityColumn:"bg-card",resizeHandle:"after:bg-border hover:after:bg-primary",resizeHandleActive:"after:bg-primary",row:"hover:bg-muted/50 data-[state=selected]:!bg-primary/10",rowSelected:"!bg-primary/10",tableContainer:"border-border bg-card text-card-foreground",tableStickyHeader:"sticky top-0 z-30 bg-card/95 backdrop-blur [&_th]:border-border [&_th]:bg-card/95",toolbarCompactIconButton:"size-7",toolbarIconButton:"text-muted-foreground hover:text-foreground",toolbarInputButton:"border-input bg-card"},Button:U,Card:N,CardDescription:z,CardFooter:K,Checkbox:_,DropdownMenuCheckboxItem:W,DropdownMenuContent:O,DropdownMenuItem:V,DropdownMenuLabel:J,DropdownMenuRadioItem:q,DropdownMenuSeparator:Q,DropdownMenuSubContent:X,DropdownMenuSubTrigger:Y,Empty:Z,EmptyDescription:$,EmptyMedia:j,Input:rr,InputGroup:er,InputGroupAddon:tr,InputGroupInput:or,ScrollBar:ar,SelectContent:dr,SelectItem:ir,SelectLabel:cr,SelectSeparator:ur,SelectTrigger:nr,Separator:pr,Skeleton:br,TableFooter:sr,TableHead:gr,TooltipContent:mr};export{xr as a};//# sourceMappingURL=chunk-7NEQYX7P.js.map -//# sourceMappingURL=chunk-7NEQYX7P.js.map \ No newline at end of file +import {X as X$1,a as a$1,c,e,g,h,i,j as j$1,k,l,m,n,p,o,q as q$1,u,s,z as z$1,w,y,x,H,I,J as J$1,L,K as K$1,M,b,N as N$1,R,T,W as W$1}from'./chunk-7FUCHMMB.js';import {a}from'./chunk-XTVBESM5.js';import'react';import {jsx}from'react/jsx-runtime';function r(H,L){return function({className:A,...R}){return jsx(H,{className:a(L,A),...R})}}var U=r(a$1,"rounded-md text-foreground data-[variant=default]:border-primary data-[variant=default]:bg-primary data-[variant=default]:text-primary-foreground data-[variant=outline]:border-input data-[variant=outline]:bg-card data-[variant=outline]:hover:bg-accent data-[variant=outline]:hover:text-accent-foreground data-[variant=secondary]:border-secondary data-[variant=secondary]:bg-secondary data-[variant=secondary]:text-secondary-foreground data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:hover:bg-accent data-[variant=ghost]:hover:text-accent-foreground data-[variant=destructive]:border-destructive data-[variant=destructive]:bg-destructive data-[variant=destructive]:text-destructive-foreground data-[variant=link]:border-transparent data-[variant=link]:bg-transparent"),N=r(c,"rounded-xl border-border bg-card text-card-foreground shadow-sm ring-0"),z=r(e,"text-muted-foreground"),K=r(g,"border-t border-border/60 bg-muted/50"),_=r(h,"border-input bg-card ring-ring/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-checked:ring-primary"),O=r(i,"border-border bg-popover text-popover-foreground shadow-md"),V=r(j$1,"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10"),W=r(k,"focus:bg-accent focus:text-accent-foreground"),q=r(l,"focus:bg-accent focus:text-accent-foreground"),J=r(m,"text-muted-foreground"),Q=r(n,"bg-border"),X=r(p,"border-border bg-popover text-popover-foreground shadow-md"),Y=r(o,"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground"),Z=r(q$1,"rounded-2xl border-border/60 bg-background/70"),$=r(u,"text-muted-foreground"),j=r(s,"[&[data-variant=icon]]:bg-muted [&[data-variant=icon]]:text-foreground"),rr=r(z$1,"rounded-md border-input bg-card text-foreground placeholder:text-muted-foreground"),er=r(w,"rounded-md border-input bg-card text-foreground"),tr=r(y,"text-muted-foreground"),or=r(x,"bg-transparent"),ar=r(H,"[&>[data-slot=scroll-area-thumb]]:bg-border"),nr=r(I,"rounded-md border-input bg-card text-foreground"),dr=r(J$1,"border-border bg-popover text-popover-foreground shadow-md"),ir=r(L,"focus:bg-accent focus:text-accent-foreground"),cr=r(K$1,"text-muted-foreground"),ur=r(M,"bg-border"),pr=r(b,"bg-border"),br=r(N$1,"bg-muted"),sr=r(R,"border-border bg-muted/50"),gr=r(T,"text-foreground"),mr=r(W$1,"bg-foreground text-background ring-1 ring-foreground/10 [&>svg]:bg-foreground [&>svg]:fill-foreground"),xr={...X$1,rootClassName:"dtp-shadcn",classNames:{card:"hover:bg-muted/50 data-[state=selected]:bg-primary/10",cardGrid:"bg-transparent",cardItem:"min-w-0",cardOverlay:"from-background/95 via-background/85 to-transparent",cardScrollArea:"bg-transparent",cardSelected:"bg-primary/10 ring-primary",cardUnselected:"border-border",cardViewport:"bg-transparent",cellBorder:"border-border/40",cellSelected:"!bg-primary/10 ring-1 ring-inset ring-primary/40",columnGroupHeader:"bg-muted/50 font-semibold",dragActive:"rounded-md border-dashed border-primary",emptyState:"border-border/60 bg-background/70",footer:"border-border bg-card",headerSortIcon:"text-muted-foreground",mutedText:"text-muted-foreground",paginationSelectTrigger:"border-input bg-card",paginationTotal:"text-muted-foreground",pinnedColumn:"border-border",pinnedUtilityColumn:"bg-card",resizeHandle:"after:bg-border hover:after:bg-primary",resizeHandleActive:"after:bg-primary",row:"hover:bg-muted/50 data-[state=selected]:!bg-primary/10",rowSelected:"!bg-primary/10",tableContainer:"border-border bg-card text-card-foreground",tableStickyHeader:"sticky top-0 z-30 bg-card/95 backdrop-blur [&_th]:border-border [&_th]:bg-card/95",toolbarCompactIconButton:"size-7",toolbarIconButton:"text-muted-foreground hover:text-foreground",toolbarInputButton:"border-input bg-card"},Button:U,Card:N,CardDescription:z,CardFooter:K,Checkbox:_,DropdownMenuCheckboxItem:W,DropdownMenuContent:O,DropdownMenuItem:V,DropdownMenuLabel:J,DropdownMenuRadioItem:q,DropdownMenuSeparator:Q,DropdownMenuSubContent:X,DropdownMenuSubTrigger:Y,Empty:Z,EmptyDescription:$,EmptyMedia:j,Input:rr,InputGroup:er,InputGroupAddon:tr,InputGroupInput:or,ScrollBar:ar,SelectContent:dr,SelectItem:ir,SelectLabel:cr,SelectSeparator:ur,SelectTrigger:nr,Separator:pr,Skeleton:br,TableFooter:sr,TableHead:gr,TooltipContent:mr};export{xr as a};//# sourceMappingURL=chunk-2NQXDLBI.js.map +//# sourceMappingURL=chunk-2NQXDLBI.js.map \ No newline at end of file diff --git a/dist/chunk-2NQXDLBI.js.map b/dist/chunk-2NQXDLBI.js.map new file mode 100644 index 0000000..620b6be --- /dev/null +++ b/dist/chunk-2NQXDLBI.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/adapters/shadcn/index.tsx"],"names":["withClassName","Component","defaultClassName","className","props","jsx","cn","ShadcnButton","Button","ShadcnCard","Card","ShadcnCardDescription","CardDescription","ShadcnCardFooter","CardFooter","ShadcnCheckbox","Checkbox","ShadcnDropdownMenuContent","DropdownMenuContent","ShadcnDropdownMenuItem","DropdownMenuItem","ShadcnDropdownMenuCheckboxItem","DropdownMenuCheckboxItem","ShadcnDropdownMenuRadioItem","DropdownMenuRadioItem","ShadcnDropdownMenuLabel","DropdownMenuLabel","ShadcnDropdownMenuSeparator","DropdownMenuSeparator","ShadcnDropdownMenuSubContent","DropdownMenuSubContent","ShadcnDropdownMenuSubTrigger","DropdownMenuSubTrigger","ShadcnEmpty","Empty","ShadcnEmptyDescription","EmptyDescription","ShadcnEmptyMedia","EmptyMedia","ShadcnInput","Input","ShadcnInputGroup","InputGroup","ShadcnInputGroupAddon","InputGroupAddon","ShadcnInputGroupInput","InputGroupInput","ShadcnScrollBar","ScrollBar","ShadcnSelectTrigger","SelectTrigger","ShadcnSelectContent","SelectContent","ShadcnSelectItem","SelectItem","ShadcnSelectLabel","SelectLabel","ShadcnSelectSeparator","SelectSeparator","ShadcnSeparator","Separator","ShadcnSkeleton","Skeleton","ShadcnTableFooter","TableFooter","ShadcnTableHead","TableHead","ShadcnTooltipContent","TooltipContent","shadcnUiKit","primitiveUiKit"],"mappings":"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","file":"chunk-2NQXDLBI.js","sourcesContent":["import * as React from \"react\";\nimport type { DataTableUiKit } from \"../../core/ui-kit\";\nimport {\n Button as PrimitiveButton,\n Card as PrimitiveCard,\n CardDescription as PrimitiveCardDescription,\n CardFooter as PrimitiveCardFooter,\n Checkbox as PrimitiveCheckbox,\n DropdownMenuCheckboxItem as PrimitiveDropdownMenuCheckboxItem,\n DropdownMenuContent as PrimitiveDropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n DropdownMenuLabel as PrimitiveDropdownMenuLabel,\n DropdownMenuRadioItem as PrimitiveDropdownMenuRadioItem,\n DropdownMenuSeparator as PrimitiveDropdownMenuSeparator,\n DropdownMenuSubContent as PrimitiveDropdownMenuSubContent,\n DropdownMenuSubTrigger as PrimitiveDropdownMenuSubTrigger,\n Empty as PrimitiveEmpty,\n EmptyDescription as PrimitiveEmptyDescription,\n EmptyMedia as PrimitiveEmptyMedia,\n Input as PrimitiveInput,\n InputGroup as PrimitiveInputGroup,\n InputGroupAddon as PrimitiveInputGroupAddon,\n InputGroupInput as PrimitiveInputGroupInput,\n ScrollBar as PrimitiveScrollBar,\n SelectContent as PrimitiveSelectContent,\n SelectItem as PrimitiveSelectItem,\n SelectLabel as PrimitiveSelectLabel,\n SelectSeparator as PrimitiveSelectSeparator,\n SelectTrigger as PrimitiveSelectTrigger,\n Separator as PrimitiveSeparator,\n Skeleton as PrimitiveSkeleton,\n TableFooter as PrimitiveTableFooter,\n TableHead as PrimitiveTableHead,\n TooltipContent as PrimitiveTooltipContent,\n primitiveUiKit,\n} from \"../../core/primitive-ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nfunction withClassName(\n Component: React.ComponentType,\n defaultClassName: string,\n) {\n return function Wrapped({ className, ...props }: TProps) {\n return (\n \n );\n };\n}\n\nconst ShadcnButton = withClassName(\n PrimitiveButton,\n \"rounded-md text-foreground data-[variant=default]:border-primary data-[variant=default]:bg-primary data-[variant=default]:text-primary-foreground data-[variant=outline]:border-input data-[variant=outline]:bg-card data-[variant=outline]:hover:bg-accent data-[variant=outline]:hover:text-accent-foreground data-[variant=secondary]:border-secondary data-[variant=secondary]:bg-secondary data-[variant=secondary]:text-secondary-foreground data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:hover:bg-accent data-[variant=ghost]:hover:text-accent-foreground data-[variant=destructive]:border-destructive data-[variant=destructive]:bg-destructive data-[variant=destructive]:text-destructive-foreground data-[variant=link]:border-transparent data-[variant=link]:bg-transparent\",\n);\nconst ShadcnCard = withClassName(\n PrimitiveCard,\n \"rounded-xl border-border bg-card text-card-foreground shadow-sm ring-0\",\n);\nconst ShadcnCardDescription = withClassName(\n PrimitiveCardDescription,\n \"text-muted-foreground\",\n);\nconst ShadcnCardFooter = withClassName(\n PrimitiveCardFooter,\n \"border-t border-border/60 bg-muted/50\",\n);\nconst ShadcnCheckbox = withClassName(\n PrimitiveCheckbox,\n \"border-input bg-card ring-ring/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-checked:ring-primary\",\n);\nconst ShadcnDropdownMenuContent = withClassName(\n PrimitiveDropdownMenuContent,\n \"border-border bg-popover text-popover-foreground shadow-md\",\n);\nconst ShadcnDropdownMenuItem = withClassName(\n PrimitiveDropdownMenuItem,\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10\",\n);\nconst ShadcnDropdownMenuCheckboxItem = withClassName(\n PrimitiveDropdownMenuCheckboxItem,\n \"focus:bg-accent focus:text-accent-foreground\",\n);\nconst ShadcnDropdownMenuRadioItem = withClassName(\n PrimitiveDropdownMenuRadioItem,\n \"focus:bg-accent focus:text-accent-foreground\",\n);\nconst ShadcnDropdownMenuLabel = withClassName(\n PrimitiveDropdownMenuLabel,\n \"text-muted-foreground\",\n);\nconst ShadcnDropdownMenuSeparator = withClassName(\n PrimitiveDropdownMenuSeparator,\n \"bg-border\",\n);\nconst ShadcnDropdownMenuSubContent = withClassName(\n PrimitiveDropdownMenuSubContent,\n \"border-border bg-popover text-popover-foreground shadow-md\",\n);\nconst ShadcnDropdownMenuSubTrigger = withClassName(\n PrimitiveDropdownMenuSubTrigger,\n \"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground\",\n);\nconst ShadcnEmpty = withClassName(\n PrimitiveEmpty,\n \"rounded-2xl border-border/60 bg-background/70\",\n);\nconst ShadcnEmptyDescription = withClassName(\n PrimitiveEmptyDescription,\n \"text-muted-foreground\",\n);\nconst ShadcnEmptyMedia = withClassName(\n PrimitiveEmptyMedia,\n \"[&[data-variant=icon]]:bg-muted [&[data-variant=icon]]:text-foreground\",\n);\nconst ShadcnInput = withClassName(\n PrimitiveInput,\n \"rounded-md border-input bg-card text-foreground placeholder:text-muted-foreground\",\n);\nconst ShadcnInputGroup = withClassName(\n PrimitiveInputGroup,\n \"rounded-md border-input bg-card text-foreground\",\n);\nconst ShadcnInputGroupAddon = withClassName(\n PrimitiveInputGroupAddon,\n \"text-muted-foreground\",\n);\nconst ShadcnInputGroupInput = withClassName(\n PrimitiveInputGroupInput,\n \"bg-transparent\",\n);\nconst ShadcnScrollBar = withClassName(\n PrimitiveScrollBar,\n \"[&>[data-slot=scroll-area-thumb]]:bg-border\",\n);\nconst ShadcnSelectTrigger = withClassName(\n PrimitiveSelectTrigger,\n \"rounded-md border-input bg-card text-foreground\",\n);\nconst ShadcnSelectContent = withClassName(\n PrimitiveSelectContent,\n \"border-border bg-popover text-popover-foreground shadow-md\",\n);\nconst ShadcnSelectItem = withClassName(\n PrimitiveSelectItem,\n \"focus:bg-accent focus:text-accent-foreground\",\n);\nconst ShadcnSelectLabel = withClassName(\n PrimitiveSelectLabel,\n \"text-muted-foreground\",\n);\nconst ShadcnSelectSeparator = withClassName(\n PrimitiveSelectSeparator,\n \"bg-border\",\n);\nconst ShadcnSeparator = withClassName(PrimitiveSeparator, \"bg-border\");\nconst ShadcnSkeleton = withClassName(PrimitiveSkeleton, \"bg-muted\");\nconst ShadcnTableFooter = withClassName(\n PrimitiveTableFooter,\n \"border-border bg-muted/50\",\n);\nconst ShadcnTableHead = withClassName(\n PrimitiveTableHead,\n \"text-foreground\",\n);\nconst ShadcnTooltipContent = withClassName(\n PrimitiveTooltipContent,\n \"bg-foreground text-background ring-1 ring-foreground/10 [&>svg]:bg-foreground [&>svg]:fill-foreground\",\n);\n\nexport const shadcnUiKit: DataTableUiKit = {\n ...primitiveUiKit,\n rootClassName: \"dtp-shadcn\",\n classNames: {\n card: \"hover:bg-muted/50 data-[state=selected]:bg-primary/10\",\n cardGrid: \"bg-transparent\",\n cardItem: \"min-w-0\",\n cardOverlay: \"from-background/95 via-background/85 to-transparent\",\n cardScrollArea: \"bg-transparent\",\n cardSelected: \"bg-primary/10 ring-primary\",\n cardUnselected: \"border-border\",\n cardViewport: \"bg-transparent\",\n cellBorder: \"border-border/40\",\n cellSelected: \"!bg-primary/10 ring-1 ring-inset ring-primary/40\",\n columnGroupHeader: \"bg-muted/50 font-semibold\",\n dragActive: \"rounded-md border-dashed border-primary\",\n emptyState: \"border-border/60 bg-background/70\",\n footer: \"border-border bg-card\",\n headerSortIcon: \"text-muted-foreground\",\n mutedText: \"text-muted-foreground\",\n paginationSelectTrigger: \"border-input bg-card\",\n paginationTotal: \"text-muted-foreground\",\n pinnedColumn: \"border-border\",\n pinnedUtilityColumn: \"bg-card\",\n resizeHandle: \"after:bg-border hover:after:bg-primary\",\n resizeHandleActive: \"after:bg-primary\",\n row: \"hover:bg-muted/50 data-[state=selected]:!bg-primary/10\",\n rowSelected: \"!bg-primary/10\",\n tableContainer: \"border-border bg-card text-card-foreground\",\n tableStickyHeader:\n \"sticky top-0 z-30 bg-card/95 backdrop-blur [&_th]:border-border [&_th]:bg-card/95\",\n toolbarCompactIconButton: \"size-7\",\n toolbarIconButton: \"text-muted-foreground hover:text-foreground\",\n toolbarInputButton: \"border-input bg-card\",\n },\n Button: ShadcnButton,\n Card: ShadcnCard,\n CardDescription: ShadcnCardDescription,\n CardFooter: ShadcnCardFooter,\n Checkbox: ShadcnCheckbox,\n DropdownMenuCheckboxItem: ShadcnDropdownMenuCheckboxItem,\n DropdownMenuContent: ShadcnDropdownMenuContent,\n DropdownMenuItem: ShadcnDropdownMenuItem,\n DropdownMenuLabel: ShadcnDropdownMenuLabel,\n DropdownMenuRadioItem: ShadcnDropdownMenuRadioItem,\n DropdownMenuSeparator: ShadcnDropdownMenuSeparator,\n DropdownMenuSubContent: ShadcnDropdownMenuSubContent,\n DropdownMenuSubTrigger: ShadcnDropdownMenuSubTrigger,\n Empty: ShadcnEmpty,\n EmptyDescription: ShadcnEmptyDescription,\n EmptyMedia: ShadcnEmptyMedia,\n Input: ShadcnInput,\n InputGroup: ShadcnInputGroup,\n InputGroupAddon: ShadcnInputGroupAddon,\n InputGroupInput: ShadcnInputGroupInput,\n ScrollBar: ShadcnScrollBar,\n SelectContent: ShadcnSelectContent,\n SelectItem: ShadcnSelectItem,\n SelectLabel: ShadcnSelectLabel,\n SelectSeparator: ShadcnSelectSeparator,\n SelectTrigger: ShadcnSelectTrigger,\n Separator: ShadcnSeparator,\n Skeleton: ShadcnSkeleton,\n TableFooter: ShadcnTableFooter,\n TableHead: ShadcnTableHead,\n TooltipContent: ShadcnTooltipContent,\n};\n"]} \ No newline at end of file diff --git a/dist/chunk-2V6RVOWX.js b/dist/chunk-2V6RVOWX.js deleted file mode 100644 index ae2abfb..0000000 --- a/dist/chunk-2V6RVOWX.js +++ /dev/null @@ -1,2 +0,0 @@ -import {n,m,b,e,d,g as g$1,h as h$1,j,s,f,c}from'./chunk-HOUWU4KF.js';import {a}from'./chunk-ZF4EP4WP.js';import*as M from'react';import {cva}from'class-variance-authority';import {Slot,Separator,Checkbox,DropdownMenu,ScrollArea,Select,Tooltip}from'radix-ui';import {jsx,jsxs}from'react/jsx-runtime';var ce=cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:outline-none active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"",outline:"",secondary:"",ghost:"",destructive:"",link:"underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function g({className:t,variant:e="default",size:n="default",asChild:a$1=false,...s}){let d=a$1?Slot.Root:"button";return jsx(d,{"data-slot":"button","data-variant":e,"data-size":n,className:a(ce({variant:e,size:n,className:t})),...s})}function N({className:t,orientation:e="horizontal",decorative:n=true,...a$1}){return jsx(Separator.Root,{"data-slot":"separator",decorative:n,orientation:e,className:a("shrink-0 data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",t),...a$1})}var ve=cva("flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",{variants:{orientation:{horizontal:"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!",vertical:"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!"}},defaultVariants:{orientation:"horizontal"}});function Y({className:t,orientation:e,...n}){return jsx("div",{role:"group","data-slot":"button-group","data-orientation":e,className:a(ve({orientation:e}),t),...n})}function Z({className:t,asChild:e=false,...n}){let a$1=e?Slot.Root:"div";return jsx(a$1,{className:a("flex items-center gap-2 rounded-lg border px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",t),...n})}function $({className:t,orientation:e="vertical",...n}){return jsx(N,{"data-slot":"button-group-separator",orientation:e,className:a("relative self-stretch data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto",t),...n})}function tt({className:t,size:e="default",...n}){return jsx("div",{"data-slot":"card","data-size":e,className:a("group/card flex flex-col gap-4 overflow-hidden rounded-xl border py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",t),...n})}function et({className:t,...e}){return jsx("div",{"data-slot":"card-header",className:a("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",t),...e})}function ot({className:t,...e}){return jsx("div",{"data-slot":"card-title",className:a("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",t),...e})}function nt({className:t,...e}){return jsx("div",{"data-slot":"card-description",className:a("text-sm opacity-80",t),...e})}function at({className:t,...e}){return jsx("div",{"data-slot":"card-action",className:a("col-start-2 row-span-2 row-start-1 self-start justify-self-end",t),...e})}function rt({className:t,...e}){return jsx("div",{"data-slot":"card-content",className:a("px-4 group-data-[size=sm]/card:px-3",t),...e})}function it({className:t,...e}){return jsx("div",{"data-slot":"card-footer",className:a("flex items-center rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3",t),...e})}function lt({className:t,...e}){return jsx(Checkbox.Root,{"data-slot":"checkbox",className:a("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border ring-2 transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-checked:ring-2",t),...e,children:jsx(Checkbox.Indicator,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none [&>svg]:size-3.5",children:jsx(b,{})})})}function dt({...t}){return jsx(DropdownMenu.Root,{"data-slot":"dropdown-menu",...t})}function pt({...t}){return jsx(DropdownMenu.Portal,{"data-slot":"dropdown-menu-portal",...t})}function ct({...t}){return jsx(DropdownMenu.Trigger,{"data-slot":"dropdown-menu-trigger",...t})}function ut({className:t,align:e="start",sideOffset:n=4,...a$1}){return jsx(DropdownMenu.Portal,{children:jsx(DropdownMenu.Content,{"data-slot":"dropdown-menu-content",sideOffset:n,align:e,className:a("relative z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) animate-none! overflow-x-hidden overflow-y-auto rounded-lg border p-1 shadow-md duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] 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 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...a$1})})}function mt({...t}){return jsx(DropdownMenu.Group,{"data-slot":"dropdown-menu-group",...t})}function ft({className:t,inset:e,variant:n="default",...a$1}){return jsx(DropdownMenu.Item,{"data-slot":"dropdown-menu-item","data-inset":e,"data-variant":n,className:a("group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:outline-none data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...a$1})}function gt({className:t,children:e,checked:n,inset:a$1,...s}){return jsxs(DropdownMenu.CheckboxItem,{"data-slot":"dropdown-menu-checkbox-item","data-inset":a$1,className:a("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:outline-none data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),checked:n,...s,children:[jsx("span",{className:"pointer-events-none absolute right-2 flex items-center justify-center","data-slot":"dropdown-menu-checkbox-item-indicator",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(b,{})})}),e]})}function bt({...t}){return jsx(DropdownMenu.RadioGroup,{"data-slot":"dropdown-menu-radio-group",...t})}function vt({className:t,children:e,inset:n,...a$1}){return jsxs(DropdownMenu.RadioItem,{"data-slot":"dropdown-menu-radio-item","data-inset":n,className:a("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:outline-none data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...a$1,children:[jsx("span",{className:"pointer-events-none absolute right-2 flex items-center justify-center","data-slot":"dropdown-menu-radio-item-indicator",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(b,{})})}),e]})}function ht({className:t,inset:e,...n}){return jsx(DropdownMenu.Label,{"data-slot":"dropdown-menu-label","data-inset":e,className:a("px-1.5 py-1 text-xs font-medium opacity-80 data-inset:pl-7",t),...n})}function Pt({className:t,...e}){return jsx(DropdownMenu.Separator,{"data-slot":"dropdown-menu-separator",className:a("-mx-1 my-1 h-px",t),...e})}function xt({className:t,...e}){return jsx("span",{"data-slot":"dropdown-menu-shortcut",className:a("ml-auto text-xs tracking-widest opacity-75",t),...e})}function wt({...t}){return jsx(DropdownMenu.Sub,{"data-slot":"dropdown-menu-sub",...t})}function yt({className:t,inset:e$1,children:n,...a$1}){return jsxs(DropdownMenu.SubTrigger,{"data-slot":"dropdown-menu-sub-trigger","data-inset":e$1,className:a("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:outline-none data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...a$1,children:[n,jsx(e,{className:"ml-auto"})]})}function Ct({className:t,...e}){return jsx(DropdownMenu.SubContent,{"data-slot":"dropdown-menu-sub-content",className:a("relative z-50 min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) animate-none! overflow-hidden rounded-lg border p-1 shadow-lg duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...e})}function Rt({className:t,...e}){return jsx("div",{"data-slot":"empty",className:a("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance",t),...e})}function St({className:t,...e}){return jsx("div",{"data-slot":"empty-header",className:a("flex max-w-sm flex-col items-center gap-2",t),...e})}var Pe=cva("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",{variants:{variant:{default:"bg-transparent",icon:"flex size-8 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-4"}},defaultVariants:{variant:"default"}});function zt({className:t,variant:e="default",...n}){return jsx("div",{"data-slot":"empty-icon","data-variant":e,className:a(Pe({variant:e,className:t})),...n})}function Nt({className:t,...e}){return jsx("div",{"data-slot":"empty-title",className:a("font-heading text-sm font-medium tracking-tight",t),...e})}function It({className:t,...e}){return jsx("div",{"data-slot":"empty-description",className:a("text-sm/relaxed opacity-80 [&>a]:underline [&>a]:underline-offset-4",t),...e})}function kt({className:t,...e}){return jsx("div",{"data-slot":"empty-content",className:a("flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance",t),...e})}var I="h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:opacity-70 focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm";function k({className:t,...e}){return jsx("div",{role:"group","data-slot":"input-group",className:a("group/input-group flex w-full min-w-0 items-stretch rounded-lg border transition-colors outline-none focus-within:outline-none has-[>[data-slot=input-group-addon][data-align=block-start]]:flex-col has-[>[data-slot=input-group-addon][data-align=block-end]]:flex-col has-[>[data-slot=input-group-control]:disabled]:cursor-not-allowed has-[>[data-slot=input-group-control]:disabled]:opacity-50",t),...e})}var x=M.forwardRef(function({className:e,...n},a$1){return jsx("input",{ref:a$1,"data-slot":"input-group-control",type:n.type,className:a(I,"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:border-0 focus-visible:ring-0",e),...n})});function T({align:t="inline-start",className:e,...n}){return jsx("div",{"data-slot":"input-group-addon","data-align":t,className:a("flex shrink-0 items-center gap-1.5 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",t==="inline-start"&&"order-first pl-2.5 pr-1",t==="inline-end"&&"order-last pl-1 pr-2.5",t==="block-start"&&"order-first w-full justify-between border-b px-2.5 py-1.5 text-sm",t==="block-end"&&"order-last w-full justify-between border-t px-2.5 py-1.5 text-sm",e),...n})}function Dt({className:t,...e}){return jsx("span",{"data-slot":"input-group-text",className:a("whitespace-nowrap text-sm",t),...e})}x.displayName="InputGroupInput";var A=M.forwardRef(function({className:e,passwordToggle:n$1=false,type:a$1,...s},d){let[S,le]=M.useState(false);return n$1&&a$1==="password"?jsxs(k,{className:e,children:[jsx(x,{ref:d,type:S?"text":"password","data-slot":"input-group-control",className:"pr-0",...s}),jsx(T,{align:"inline-end",children:jsx(g,{type:"button",variant:"ghost",size:"icon-xs","aria-label":S?"Hide password":"Show password","aria-pressed":S,className:"hover:bg-transparent",onMouseDown:G=>G.preventDefault(),onClick:()=>le(G=>!G),children:S?jsx(n,{"data-icon":"inline-start"}):jsx(m,{"data-icon":"inline-start"})})})]}):jsx("input",{ref:d,type:a$1,"data-slot":"input",className:a(I,e),...s})});A.displayName="Input";function Mt({className:t,...e}){return jsx("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:a("mx-auto flex w-full justify-center",t),...e})}function Gt({className:t,...e}){return jsx("ul",{"data-slot":"pagination-content",className:a("flex items-center gap-1",t),...e})}function _t({...t}){return jsx("li",{"data-slot":"pagination-item",...t})}function h({className:t,isActive:e,disabled:n=false,variant:a$1,size:s="icon",...d}){return jsx(g,{asChild:true,variant:a$1??(e?"outline":"ghost"),size:s,className:a(n&&"pointer-events-none opacity-50",t),children:jsx("a",{"aria-current":e?"page":void 0,"aria-disabled":n?true:void 0,"data-slot":"pagination-link","data-active":e,tabIndex:n?-1:d.tabIndex,...d})})}function Bt({className:t,disabled:e,showText:n=true,size:a$1="default",text:s="Previous",...d$1}){return jsxs(h,{"aria-label":"Go to previous page",disabled:e,size:a$1,variant:"outline",className:a("pl-1.5!",t),...d$1,children:[jsx(d,{"data-icon":"inline-start"}),n?jsx("span",{className:"hidden sm:block",children:s}):null]})}function Lt({className:t,disabled:e,showText:n=true,size:a$1="default",text:s="First",...d}){return jsxs(h,{"aria-label":"Go to first page",disabled:e,size:a$1,variant:"outline",className:a("pl-1.5!",t),...d,children:[jsx(g$1,{"data-icon":"inline-start"}),n?jsx("span",{className:"hidden sm:block",children:s}):null]})}function At({className:t,disabled:e$1,showText:n=true,size:a$1="default",text:s="Next",...d}){return jsxs(h,{"aria-label":"Go to next page",disabled:e$1,size:a$1,variant:"outline",className:a("pr-1.5!",t),...d,children:[n?jsx("span",{className:"hidden sm:block",children:s}):null,jsx(e,{"data-icon":"inline-end"})]})}function Vt({className:t,disabled:e,showText:n=true,size:a$1="default",text:s="Last",...d}){return jsxs(h,{"aria-label":"Go to last page",disabled:e,size:a$1,variant:"outline",className:a("pr-1.5!",t),...d,children:[n?jsx("span",{className:"hidden sm:block",children:s}):null,jsx(h$1,{"data-icon":"inline-end"})]})}function Et({className:t,text:e="More pages",...n}){return jsxs("span",{"aria-hidden":true,"data-slot":"pagination-ellipsis",className:a("flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4",t),...n,children:[jsx(j,{}),jsx("span",{className:"sr-only",children:e})]})}function Ht({className:t,children:e,...n}){return jsxs(ScrollArea.Root,{"data-slot":"scroll-area",className:a("relative",t),...n,children:[jsx(ScrollArea.Viewport,{"data-slot":"scroll-area-viewport",className:"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:outline-none",children:e}),jsx(V,{className:"z-100"}),jsx(ScrollArea.Corner,{})]})}function V({className:t,orientation:e="vertical",...n}){return jsx(ScrollArea.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar","data-orientation":e,orientation:e,className:a("flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",t),...n,children:jsx(ScrollArea.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"relative flex-1 rounded-full"})})}function Ut({...t}){return jsx(Select.Root,{"data-slot":"select",...t})}function Ft({className:t,...e}){return jsx(Select.Group,{"data-slot":"select-group",className:a("scroll-my-1 p-1",t),...e})}function Kt({...t}){return jsx(Select.Value,{"data-slot":"select-value",...t})}function Ot({className:t,size:e="default",children:n,...a$1}){return jsxs(Select.Trigger,{"data-slot":"select-trigger","data-size":e,className:a("flex w-fit items-center justify-between gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...a$1,children:[n,jsx(Select.Icon,{asChild:true,children:jsx(s,{className:"pointer-events-none size-4"})})]})}function jt({className:t,children:e,position:n="item-aligned",align:a$1="center",...s}){return jsx(Select.Portal,{children:jsxs(Select.Content,{"data-slot":"select-content","data-align-trigger":n==="item-aligned",className:a("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) animate-none! overflow-x-hidden overflow-y-auto rounded-lg border shadow-md duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] data-[align-trigger=true]:animate-none 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:n,align:a$1,...s,children:[jsx(E,{}),jsx(Select.Viewport,{"data-position":n,className:a("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)",n==="popper"&&""),children:e}),jsx(H,{})]})})}function qt({className:t,...e}){return jsx(Select.Label,{"data-slot":"select-label",className:a("px-1.5 py-1 text-xs opacity-80",t),...e})}function Jt({className:t,children:e,...n}){return jsxs(Select.Item,{"data-slot":"select-item",className:a("relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:outline-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...n,children:[jsx("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:jsx(Select.ItemIndicator,{children:jsx(b,{className:"pointer-events-none"})})}),jsx(Select.ItemText,{children:e})]})}function Qt({className:t,...e}){return jsx(Select.Separator,{"data-slot":"select-separator",className:a("pointer-events-none -mx-1 my-1 h-px",t),...e})}function E({className:t,...e}){return jsx(Select.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:a("z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4",t),...e,children:jsx(f,{})})}function H({className:t,...e}){return jsx(Select.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:a("z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4",t),...e,children:jsx(c,{})})}function Wt({className:t,...e}){return jsx("div",{"data-slot":"skeleton",className:a("animate-pulse rounded-md",t),...e})}function Xt({className:t,...e}){return jsx("table",{"data-slot":"table",className:a("w-full border-collapse caption-bottom text-sm",t),...e})}function Yt({className:t,...e}){return jsx("thead",{"data-slot":"table-header",className:a("[&_tr]:border-b",t),...e})}function Zt({className:t,...e}){return jsx("tbody",{"data-slot":"table-body",className:a("[&_tr:last-child]:border-0",t),...e})}function $t({className:t,...e}){return jsx("tfoot",{"data-slot":"table-footer",className:a("border-t font-medium [&>tr]:last:border-b-0",t),...e})}function te({className:t,...e}){return jsx("tr",{"data-slot":"table-row",className:a("border-b transition-colors",t),...e})}function ee({className:t,...e}){return jsx("th",{"data-slot":"table-head",className:a("h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0",t),...e})}function oe({className:t,...e}){return jsx("td",{"data-slot":"table-cell",className:a("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",t),...e})}function ne({className:t,...e}){return jsx("caption",{"data-slot":"table-caption",className:a("mt-4 text-sm opacity-80",t),...e})}function ae({delayDuration:t=0,...e}){return jsx(Tooltip.Provider,{"data-slot":"tooltip-provider",delayDuration:t,...e})}function re({...t}){return jsx(Tooltip.Root,{"data-slot":"tooltip",...t})}function ie({...t}){return jsx(Tooltip.Trigger,{"data-slot":"tooltip-trigger",...t})}function se({className:t,sideOffset:e=0,children:n,...a$1}){return jsx(Tooltip.Portal,{children:jsxs(Tooltip.Content,{"data-slot":"tooltip-content",sideOffset:e,className:a("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md border px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...a$1,children:[n,jsx(Tooltip.Arrow,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}var un={Button:g,ButtonGroup:Y,ButtonGroupSeparator:$,ButtonGroupText:Z,Card:tt,CardAction:at,CardContent:rt,CardDescription:nt,CardFooter:it,CardHeader:et,CardTitle:ot,Checkbox:lt,DropdownMenu:dt,DropdownMenuCheckboxItem:gt,DropdownMenuContent:ut,DropdownMenuGroup:mt,DropdownMenuItem:ft,DropdownMenuLabel:ht,DropdownMenuPortal:pt,DropdownMenuRadioGroup:bt,DropdownMenuRadioItem:vt,DropdownMenuSeparator:Pt,DropdownMenuShortcut:xt,DropdownMenuSub:wt,DropdownMenuSubContent:Ct,DropdownMenuSubTrigger:yt,DropdownMenuTrigger:ct,Empty:Rt,EmptyContent:kt,EmptyDescription:It,EmptyHeader:St,EmptyMedia:zt,EmptyTitle:Nt,Input:A,InputGroup:k,InputGroupAddon:T,InputGroupInput:x,InputGroupText:Dt,Pagination:Mt,PaginationContent:Gt,PaginationEllipsis:Et,PaginationFirst:Lt,PaginationItem:_t,PaginationLast:Vt,PaginationLink:h,PaginationNext:At,PaginationPrevious:Bt,ScrollArea:Ht,ScrollBar:V,Select:Ut,SelectContent:jt,SelectGroup:Ft,SelectItem:Jt,SelectLabel:qt,SelectScrollDownButton:H,SelectScrollUpButton:E,SelectSeparator:Qt,SelectTrigger:Ot,SelectValue:Kt,Separator:N,Skeleton:Wt,Table:Xt,TableBody:Zt,TableCaption:ne,TableCell:oe,TableFooter:$t,TableHead:ee,TableHeader:Yt,TableRow:te,Tooltip:re,TooltipContent:se,TooltipProvider:ae,TooltipTrigger:ie};export{Mt as A,h as B,Bt as C,Lt as D,At as E,Vt as F,Ht as G,V as H,Ot as I,jt as J,qt as K,Jt as L,Qt as M,Wt as N,Xt as O,Yt as P,Zt as Q,$t as R,te as S,ee as T,oe as U,ne as V,se as W,un as X,g as a,N as b,tt as c,et as d,nt as e,rt as f,it as g,lt as h,ut as i,ft as j,gt as k,vt as l,ht as m,Pt as n,yt as o,Ct as p,Rt as q,St as r,zt as s,Nt as t,It as u,kt as v,k as w,x,T as y,A as z};//# sourceMappingURL=chunk-2V6RVOWX.js.map -//# sourceMappingURL=chunk-2V6RVOWX.js.map \ No newline at end of file diff --git a/dist/chunk-3CYYXB7K.js b/dist/chunk-3CYYXB7K.js deleted file mode 100644 index a669956..0000000 --- a/dist/chunk-3CYYXB7K.js +++ /dev/null @@ -1,2 +0,0 @@ -import {a as a$1,b}from'./chunk-ACKI7LST.js';import {w,u,c,z,F,J,C,K,E,v as v$1,x,y,H,I,M,D,P,o,t,j as j$1,l,r,a as a$2,q,p,G,L,A,B,k,i}from'./chunk-HOUWU4KF.js';import {a,j,c as c$1,e,f,d}from'./chunk-ZF4EP4WP.js';import*as v from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useReactTable,getPaginationRowModel,getExpandedRowModel,getSortedRowModel,getFilteredRowModel,getCoreRowModel}from'@tanstack/react-table';import {flushSync}from'react-dom';function Et({cardClassName:e,cardGridClassName:a$1,cardSizing:n,cardRenderer:t,currentRowSelection:o,DataTableCardView:c,DataTableEmptyState:l,dragAndDrop:u,editableRows:g,editingRowId:f,emptyNode:P,enableRowSelection:x,flexGrow:S,getRowClassName:R,hasCardTitle:k,infiniteScroll:E,localSearchValue:O,onRowClick:T,renderedRows:b,renderExpandedRow:d,resolvedLabels:h,resolvedLoadingRowCount:m,rowActions:r=[],ScrollArea:C,sentinelRef:D,setCurrentRowSelection:z,setEditingRowId:N,shouldRenderInitialLoading:U,tableContainerClassName:F,uiClassNames:I}){let w=U||b.length>0,j=v.useRef(null),K=(ae,oe)=>jsx(c,{rows:ae,cardRenderer:t,cardGridClassName:a$1,cardClassName:e,cardSizing:n,rowActions:r,editableRows:g,renderExpandedRow:d,hasCardTitle:k,rowSelection:o,onRowSelectionChange:z,enableRowSelection:x,editingRowId:f,onEditingRowIdChange:N,getRowClassName:R,onRowClick:T,getRowDraggable:u?.getRowDraggable,onRowDragStart:u?.onRowDragStart,onRowDragEnd:u?.onRowDragEnd,isLoading:oe?.isLoading,loadingRowCount:oe?.loadingRowCount,labels:h});return jsx("div",{ref:j,"data-dtp-slot":"data-table-card-shell",className:a("box-border border-2 border-transparent transition-colors",S?"flex min-h-0 flex-1 flex-col":"h-full",u?.isDragging&&(I.dragActive??"rounded-md border-dashed")),children:jsx(C,{className:a(S?"min-h-0 flex-1":"h-full",I.cardScrollArea,F),children:jsxs("div",{"data-dtp-slot":"data-table-card-viewport",className:a("flex min-h-full min-w-0 flex-col",S&&"min-h-0 flex-1",I.cardViewport),children:[w?U?K([],{isLoading:true,loadingRowCount:m}):K(b):jsx("div",{className:"flex min-h-0 flex-1 items-center justify-center p-4",children:P??jsx(l,{title:O?h.noMatchingRowsTitle:h.noRowsTitle,description:O?h.noMatchingRowsDescription:h.noRowsDescription})}),E?.enabled&&!U?jsx("div",{className:"shrink-0 px-4 pb-4",children:jsx("div",{ref:D,className:"h-4 w-full"})}):null]})})})}var ur=v.lazy(async()=>({default:(await import('./data-table-virtual-card-panel-RWD765II.js')).DataTableVirtualCardPanel}));function Wn(e){return (typeof e.virtualization=="object"?e.virtualization.card:void 0)?.enabled!==true?jsx(Et,{...e}):jsx(v.Suspense,{fallback:jsx(Et,{...e}),children:jsx(ur,{...e})})}function Jn({children:e,currentPagination:a,DataTableFooter:n,effectivePageCount:t,footerTotalRowCount:o,handleFooterPageIndexChange:c,handleFooterPageSizeChange:l,labels:u,pageCountKnown:g=true,rowsPerPageOptions:f,showFooter:P}){return !P&&!e?null:jsxs("div",{"data-dtp-slot":"data-table-footer",className:"shrink-0",children:[P?jsx(n,{pageIndex:a.pageIndex,pageCount:t,pageCountKnown:g,pageSize:a.pageSize,totalRowCount:o,rowsPerPageOptions:f,onPageIndexChange:c,onPageSizeChange:l,labels:u}):null,e]})}function Xn({allRows:e,columnFilters:a,columnVisibilityOptions:n,compactToolbar:t,customToolbar:o,DataTableToolbar:c,description:l,effectiveToolbarActions:u,enableColumnPinning:g,enableDensityToggle:f,enableViewToggle:P,hiddenRowsLabel:x,labels:S,onClearColumnFilters:R,onColumnFilterChange:k,onColumnPinningChange:E,onDensityChange:O,onShowHiddenRowsChange:T,onToolbarQueryValueChange:b,onViewModeChange:d,openFileDialog:h,selectedRows:m,selectionActions:r,showHiddenRows:C,table:D,title:z,toolbarQueryPlaceholder:N,toolbarQueryValue:U,toolbarVisibility:F,density:I,viewMode:w}){return jsx("div",{"data-dtp-slot":"data-table-toolbar",className:"shrink-0",children:jsx(c,{title:z,description:l,toolbarQueryValue:U,toolbarQueryPlaceholder:N,onToolbarQueryValueChange:b,customToolbar:o,compactToolbar:t,viewMode:w,onViewModeChange:d,enableViewToggle:P,toolbarActions:u,selectionActions:r,selectedRows:m,showHiddenRows:C,hiddenRowsLabel:x,onShowHiddenRowsChange:T,allRows:e,columnVisibilityOptions:n,onColumnVisibilityChange:(j,K)=>{D.getColumn(j)?.toggleVisibility(K);},enableColumnPinning:g,onColumnPinningChange:E,columnFilters:a,onColumnFilterChange:k,onClearColumnFilters:R,density:I,onDensityChange:O,enableDensityToggle:f,labels:S,toolbarVisibility:F,openFileDialog:h})})}var de={searchPlaceholder:"Search rows...",searchTable:"Search table",clearSearch:"Clear search",noRowsTitle:"No rows yet",noRowsDescription:"Create a record or refresh this view once data exists.",noMatchingRowsTitle:"No matching rows",noMatchingRowsDescription:"Try a different search term or clear filters.",tableOptions:"Show table options",columns:"Columns",filters:"Filters",clearFilters:"Clear filters",selectedRows:e=>`${e} record${e===1?"":"s"} selected`,showHiddenRows:e=>`Show ${e}`,recordsPerPage:"Records per page",totalRecords:e=>`Total records: ${e}`,pageStatus:(e,a)=>`Page ${e+1} of ${a}`,pageStatusUnknown:e=>`Page ${e+1}`,pagination:"Pagination",morePages:"More pages",firstPage:"First page",previousPage:"Previous page",nextPage:"Next page",lastPage:"Last page",selectAllVisibleRows:"Select all visible rows",selectRow:"Select row",selectCardRow:e=>`Select row ${e}`,switchToTableView:"Switch to table view",switchToCardView:"Switch to card view",tableView:"Table view",cardView:"Card view",allFilterOptions:"All",actions:"Actions",rowActions:"Row actions",editRow:"Edit row",saveEdit:"Save",cancelEdit:"Cancel editing",expandRow:"Expand row",collapseRow:"Collapse row",exportCsv:"Export CSV",density:"Density",compactDensity:"Compact",comfortableDensity:"Comfortable",spaciousDensity:"Spacious",pinLeft:"Pin left",pinRight:"Pin right",unpin:"Unpin"};function Yn(e){return {...de,...e}}function Zn({Button:e,Checkbox:a$1,DataTableRowActions:n,Tooltip:t,TooltipContent:o,TooltipTrigger:c$1,cancelEditing:l,columns:u$1,editableRows:g,editingRowId:f,enableRowSelection:P,getRowCanExpand:x,isSavingEdit:S,labels:R,lastSelectedRowIdRef:k,renderExpandedRow:E,rowActions:O,saveEdit:T,startEditingRow:b,tableRef:d}){let h=v.useCallback((m,r)=>{let C=d.current;if(!C||!k.current)return;let D=C.getRowModel().rows.filter(I=>!w(I.original)),z=D.findIndex(I=>I.id===k.current),N=D.findIndex(I=>I.id===m);if(z<0||N<0)return;let U=Math.min(z,N),F=Math.max(z,N);C.setRowSelection(I=>{let w={...I};for(let j of D.slice(U,F+1))r?w[j.id]=true:delete w[j.id];return w});},[k,d]);return v.useMemo(()=>{let m=[];return E&&m.push({id:"__expand__",enableResizing:false,enableSorting:false,enableHiding:false,size:u,minSize:u,maxSize:u,header:()=>jsx("span",{className:"sr-only",children:R.expandRow}),cell:({row:r})=>{if(!(x?.(r.original)??!!E))return null;let D=r.getIsExpanded();return jsx("div",{className:"flex items-center justify-center",children:jsx(e,{type:"button",variant:"ghost",size:"icon-sm","aria-label":D?R.collapseRow:R.expandRow,"aria-expanded":D,onClick:()=>r.toggleExpanded(),children:jsx(c,{className:a("transition-transform",D?"rotate-0":"-rotate-90")})})})}}),P&&m.push({id:"__select__",enableResizing:false,enableSorting:false,enableHiding:false,size:u,minSize:u,maxSize:u,header:({table:r})=>jsx("div",{className:"flex items-center justify-center",children:jsx(a$1,{className:"my-0.5",checked:r.getIsAllPageRowsSelected(),onCheckedChange:C=>{r.toggleAllPageRowsSelected(C===true);},"aria-label":R.selectAllVisibleRows??de.selectAllVisibleRows})}),cell:({row:r})=>jsx("div",{className:"flex items-center justify-center",children:jsx(a$1,{className:"my-0.5",checked:r.getIsSelected(),onClick:C=>{if(!C.shiftKey||!k.current){k.current=r.id;return}C.preventDefault(),C.stopPropagation(),h(r.id,!r.getIsSelected()),k.current=r.id;},onCheckedChange:C=>{k.current=r.id,r.toggleSelected(C===true);},"aria-label":R.selectRow??de.selectRow})})}),m.push(...u$1.map(r=>z(r))),(O.length||g)&&m.push({id:"__actions__",enableSorting:false,enableResizing:false,enableHiding:false,size:u,minSize:u,maxSize:u,header:()=>jsx("span",{className:"sr-only",children:R.actions}),cell:({row:r})=>{let C=r.id;return f===C?jsxs("div",{className:"flex w-full items-center justify-end gap-2",children:[jsx(e,{type:"button",size:"sm",disabled:S,onClick:()=>{T(r.original);},children:R.saveEdit}),jsxs(t,{children:[jsx(c$1,{asChild:true,children:jsxs(e,{type:"button",size:"icon-sm",variant:"ghost",onClick:l,children:[jsx(c,{className:"rotate-45"}),jsx("span",{className:"sr-only",children:R.cancelEdit})]})}),jsx(o,{children:R.cancelEdit})]})]}):jsx("div",{className:"flex w-full items-center justify-center",children:jsx(n,{row:r.original,rowActions:O,editableRows:g,isEditing:false,onStartEditing:()=>{b(r.original,r.id);},onCancelEditing:()=>{},labels:R})})}}),m},[e,a$1,n,t,o,c$1,l,u$1,g,f,P,x,S,R,k,E,O,T,h,b])}function eo({enabled:e,hasMore:a,isLoadingMore:n,onLoadMore:t,onError:o}){let c=v.useRef(null),l=v.useRef(false),u=v.useEffectEvent(t),g=v.useEffectEvent(f=>{o?.(f);});return v.useEffect(()=>{if(!e||!a||n)return;let f=c.current;if(!f)return;let P=new IntersectionObserver(x=>{if(x[0].isIntersecting&&!l.current){l.current=true;let R;try{R=u();}catch(k){l.current=false,g(k);return}Promise.resolve(R).catch(k=>{g(k);}).finally(()=>{l.current=false;});}},{rootMargin:"200px 0px 200px 0px"});return P.observe(f),()=>{P.disconnect();}},[e,a,n]),c}function to({enabled:e,maxPageIndex:a,onPageIndexChange:n,pageIndex:t,setLocalPageIndex:o}){v.useEffect(()=>{if(!e||t>=0&&t<=a)return;let c=Math.min(Math.max(t,0),a);o(c),n?.(c);},[e,a,n,t,o]);}function no({autoResetPageIndex:e,columnResizeMode:a,currentColumnFilters:n,currentColumnOrder:t,currentColumnPinning:o,currentColumnSizing:c,currentExpanded:l,currentPagination:u,currentRowSelection:g,currentSorting:f,defaultColumn:P,effectiveColumnVisibility:x,enableColumnResizing:S,enableRowSelection:R,getRowCanExpand:k,globalFilterFn:E,globalFilterValue:O,hasNextPage:T,handleColumnFiltersChange:b,handleColumnOrderChange:d,handleColumnPinningChange:h,handleColumnVisibilityChange:m,handleExpandedChange:r,infiniteScroll:C$1,manualFiltering:D,manualPagination:z,manualSorting:N,onActionError:U,onPageIndexChange:F$1,onPageSizeChange:I,pageCount:w,pageIndex:j,pageSize:K$1,renderExpandedRow:ae,setCurrentRowSelection:oe,setCurrentSorting:A,setLocalColumnSizing:G,setLocalPagination:W,shouldRenderInitialLoading:De,tableColumns:be,tableData:ge,tableGetRowId:Ae,tableRef:Le,totalRowCount:Se}){let J$1=v.useMemo(()=>be.map((y,V)=>F(y,V)),[be]),ve=v.useMemo(()=>{let y=J$1,V=y.filter(q=>!J(q)&&q!=="__spacer__"),me=new Set(V),Re=t.filter(q=>me.has(q)),X=V.filter(q=>!Re.includes(q));return [...y.filter(q=>q==="__expand__"||q==="__select__"),...Re,...X,...y.filter(q=>q==="__spacer__"),...y.filter(q=>q==="__actions__")]},[t,J$1]),we=v.useMemo(()=>{let y=new Set(J$1),V=new Set(J$1.filter(X=>!J(X)&&X!=="__spacer__")),me=(o.left??[]).filter(X=>V.has(X)),Re=(o.right??[]).filter(X=>V.has(X));return {left:[...["__expand__","__select__"].filter(X=>y.has(X)),...me],right:[...Re,...["__actions__"].filter(X=>y.has(X))]}},[o,J$1]),M=v.useMemo(()=>({sorting:f,pagination:u,rowSelection:g,columnVisibility:x,columnFilters:n,globalFilter:O,expanded:l,columnOrder:ve,columnPinning:we,columnSizing:c}),[n,c,l,u,g,f,x,ve,we,O]),ie=v.useCallback(y=>{let V=typeof y=="function"?y(u):y;(j===void 0||K$1===void 0)&&W(me=>({pageIndex:j===void 0?V.pageIndex:me.pageIndex,pageSize:K$1===void 0?V.pageSize:me.pageSize})),V.pageIndex!==u.pageIndex&&F$1?.(V.pageIndex),V.pageSize!==u.pageSize&&I?.(V.pageSize);},[u,F$1,I,j,K$1,W]),We=v.useCallback(y=>{G(y);},[G]),ue=useReactTable({data:ge,columns:be,getCoreRowModel:getCoreRowModel(),getFilteredRowModel:D?void 0:getFilteredRowModel(),getSortedRowModel:N?void 0:getSortedRowModel(),getExpandedRowModel:ae?getExpandedRowModel():void 0,getPaginationRowModel:z||C$1?.enabled?void 0:getPaginationRowModel(),enableRowSelection:R,enableMultiRowSelection:R,enableColumnResizing:S,columnResizeMode:a,getRowId:Ae,getRowCanExpand:ae?y=>k?.(y.original)??true:void 0,globalFilterFn:E??C,getColumnCanGlobalFilter:y=>y.columnDef.enableGlobalFilter!==false&&typeof y.accessorFn=="function",manualSorting:N,manualFiltering:D,manualPagination:z||!!C$1?.enabled,defaultColumn:P,autoResetPageIndex:e,state:M,onSortingChange:A,onPaginationChange:ie,onRowSelectionChange:oe,onColumnVisibilityChange:m,onColumnFiltersChange:b,onExpandedChange:r,onColumnOrderChange:d,onColumnPinningChange:h,onColumnSizingChange:We});Le.current=ue;let pe=ue.getVisibleLeafColumns(),oa=v.useCallback((y,V)=>{if(y===V)return;let me=ue.getAllLeafColumns().map(X=>X.id).filter(X=>!J(X)),Re=K(t.length?t:me,y,V);d(Re);},[t,d,ue]),ee=ue.getRowModel().rows,Oe=ee.map((y,V)=>({row:y,rowIndex:V})),he=z||!!C$1?.enabled,_e=he?void 0:ue.getFilteredRowModel().rows.length,Pe=Se??_e,He=!he||w!==void 0||Se!==void 0,Be=Pe,$e=De?1:w??(Pe!==void 0?Math.max(1,Math.ceil(Pe/u.pageSize)):he?u.pageIndex+(T?2:1):ue.getPageCount()),Ue=Math.max(0,$e-1),ye=v.useCallback(y=>{j===void 0&&W(V=>V.pageIndex===y?V:{...V,pageIndex:y});},[j,W]);to({enabled:!De&&!C$1?.enabled&&He,maxPageIndex:Ue,onPageIndexChange:F$1,pageIndex:u.pageIndex,setLocalPageIndex:ye});let Ke=v.useCallback(y=>{y!==u.pageIndex&&(F$1?.(y),j===void 0&&W(V=>V.pageIndex===y?V:{...V,pageIndex:y}));},[u.pageIndex,F$1,j,W]),ia=v.useCallback(y=>{u.pageIndex!==0&&F$1?.(0),y!==u.pageSize&&I?.(y),K$1===void 0&&W({pageIndex:0,pageSize:y});},[u.pageIndex,u.pageSize,F$1,I,K$1,W]),Je=eo({enabled:!!C$1?.enabled,hasMore:!!C$1?.hasMore,isLoadingMore:C$1?.isLoadingMore,onLoadMore:()=>C$1?.onLoadMore(),onError:y=>{U?.({error:y,source:"infiniteScroll"});}});return {effectivePageCount:$e,footerTotalRowCount:Be,handleFooterPageIndexChange:Ke,handleFooterPageSizeChange:ia,isPageCountKnown:He,renderedRows:ee,reorderColumn:oa,rowsToRender:Oe,sentinelRef:Je,table:ue,virtualPaddingBottom:0,virtualPaddingTop:0,visibleLeafColumns:pe}}function Ee({defaultValue:e,onChange:a,value:n}){let[t,o]=v.useState(e),c=n??t,l=v.useRef(c);v.useEffect(()=>{l.current=c;},[c]);let u=v.useCallback(g=>{let f=typeof g=="function"?g(l.current):g;l.current=f,a?.(f),n===void 0&&o(f);},[a,n]);return [c,u]}var wr="data-table-pro:column-prefs:",io=1,oo=["visibility","sizing","order","pinning","density"];function ro(e){let a=Vt(e);if(!a)return {};let n=Ft(a);if(!n)return {};let t=It(a.key),o;try{o=n.getItem(t);}catch(g){return a.onError?.({error:g,operation:"read"}),{}}if(!o)return {};let c;try{c=(a.deserialize??JSON.parse)(o);}catch(g){return a.onError?.({error:g,operation:"deserialize"}),{}}let l=a.version??io,u;if(hr(c))if(c.version===l)u=c.state;else if(a.migrate)try{u=a.migrate({version:c.version,state:c.state},l);}catch(g){return a.onError?.({error:g,operation:"migrate"}),{}}else return {};else u=c;return co(yr(u),a.slices)}function lo(e){let a=Vt(e);if(!a)return false;let n=Ft(a);if(!n)return false;try{return n.removeItem(It(a.key)),!0}catch(t){return a.onError?.({error:t,operation:"remove"}),false}}function so({key:e,persistence:a,prefs:n}){let t=a??Vt(e),o=t?Ft(t):void 0,c=t?It(t.key):void 0,l=t?.version??io,u=Math.max(0,t?.debounceMs??100),g=co(n,t?.slices),f=v.useMemo(()=>{if(!t)return {value:void 0};try{let x={version:l,state:g};return {value:(t.serialize??JSON.stringify)(x)}}catch(x){return {error:x,value:void 0}}},[t,g,l]),P=v.useEffectEvent((x,S)=>{t?.onError?.({error:x,operation:S});});v.useEffect(()=>{f.error!==void 0&&P(f.error,"serialize");},[f.error]),v.useEffect(()=>{if(!o||!c||f.value===void 0)return;let x=()=>{try{if(o.getItem(c)===f.value)return;o.setItem(c,f.value);}catch(R){P(R,"write");}};if(u===0){x();return}let S=globalThis.setTimeout(x,u);return ()=>{globalThis.clearTimeout(S);}},[u,f.value,o,c]);}function Vt(e){if(e)return typeof e=="string"?{key:e}:e}function Ft(e){if(e.storage)return e.storage;if(!(typeof window>"u"))try{return window.localStorage}catch(a){e.onError?.({error:a,operation:"read"});return}}function It(e){return `${wr}${e}`}function hr(e){return Ia(e)&&Object.prototype.hasOwnProperty.call(e,"version")&&Object.prototype.hasOwnProperty.call(e,"state")}function co(e,a){let n=new Set(a??oo),t={};for(let o of oo)n.has(o)&&e[o]!==void 0&&Object.assign(t,{[o]:e[o]});return t}function yr(e){if(!Ia(e))return {};let a={},n=Rr(e.visibility);n&&(a.visibility=n);let t=Sr(e.sizing);t&&(a.sizing=t);let o=At(e.order);if(o&&(a.order=o),Ia(e.pinning)){let c=At(e.pinning.left)??[],l=At(e.pinning.right)??[];a.pinning={left:c,right:l};}return vr(e.density)&&(a.density=e.density),a}function Rr(e){if(Ia(e))return Object.fromEntries(Object.entries(e).filter(a=>typeof a[1]=="boolean"))}function Sr(e){if(Ia(e))return Object.fromEntries(Object.entries(e).filter(a=>typeof a[1]=="number"&&Number.isFinite(a[1])&&a[1]>=0))}function At(e){if(Array.isArray(e))return e.filter(a=>typeof a=="string")}function vr(e){return e==="compact"||e==="comfortable"||e==="spacious"}function Ia(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function uo({columnFilters:e,columnOrder:a,columnPinning:n,columnSizing:t,columnPrefsKey:o,persistence:c,columnVisibility:l,columns:u,data:g,density:f,enableRowSelection:P,enableToolbarQueryFiltering:x$1,expanded:S,getRowId:R,hiddenRows:k,initialState:E$1,isLoading:O,loadingRowCount:T,manualFiltering:b,onColumnFiltersChange:d,onColumnOrderChange:h,onColumnPinningChange:m,onColumnSizingChange:r,onColumnVisibilityChange:C,onDensityChange:D,onExpandedChange:z,onPageIndexChange:N,onRowSelectionChange:U,onShowHiddenRowsChange:F$1,onSortingChange:I,onToolbarQueryValueChange:w$1,onViewModeChange:j$1,pageIndex:K,pageSize:ae,resolvedLabels:oe,rowSelection:A,rowsPerPageOptions:G,selectionActions:W,showHiddenRows:De,sorting:be,toolbarQueryDebounceMs:ge,toolbarQueryPlaceholder:Ae,toolbarQueryValue:Le,viewMode:Se,containerRef:J}){let ve=v.useMemo(()=>c??(o?{key:o}:void 0),[o,c]),we=v.useMemo(()=>ro(ve),[ve]),[M,ie]=v.useState({pageIndex:E$1?.pagination?.pageIndex??0,pageSize:E$1?.pagination?.pageSize??G[0]??20}),[We,ue]=Ee({value:be,onChange:I,defaultValue:()=>E$1?.sorting??[]}),[pe,oa]=Ee({value:A,onChange:U,defaultValue:()=>E$1?.rowSelection??{}}),[ee,Oe]=Ee({value:l,onChange:C,defaultValue:()=>E$1?.columnVisibility??we.visibility??{}}),[he,_e]=Ee({value:e,onChange:d,defaultValue:()=>E$1?.columnFilters??[]}),[Pe,He]=Ee({value:S,onChange:z,defaultValue:()=>E$1?.expanded??{}}),[Be,$e]=Ee({value:a,onChange:h,defaultValue:()=>E$1?.columnOrder??we.order??[]}),[Ue,ye]=Ee({value:n,onChange:m,defaultValue:()=>E$1?.columnPinning??we.pinning??E(u)}),[Ke,ia]=Ee({value:t,onChange:r,defaultValue:()=>E$1?.columnSizing??we.sizing??{}}),[Je,y]=Ee({value:Se,onChange:j$1,defaultValue:()=>E$1?.viewMode??"table"}),[V,me]=Ee({value:De,onChange:F$1,defaultValue:()=>E$1?.showHiddenRows??false}),[Re,X]=Ee({value:f,onChange:D,defaultValue:()=>E$1?.density??we.density??"comfortable"}),q=Le??E$1?.globalFilter??"",ya=Ae??oe.searchPlaceholder,i=ge??250,[$,fe]=v.useState(q),ca=a$1(J),Ra=!!w$1,Sa=v.useRef(q),lt=v.useEffectEvent(_=>{Sa.current=_,w$1?.(_);});v.useEffect(()=>{Sa.current=q,fe(q);},[q]),v.useEffect(()=>{if(!Ra||$===q||$===Sa.current)return;let _=window.setTimeout(()=>{lt($);},i);return ()=>{window.clearTimeout(_);}},[Ra,$,i,q]);let ua=v.useMemo(()=>({pageIndex:K??M.pageIndex,pageSize:ae??M.pageSize}),[M.pageIndex,M.pageSize,K,ae]),ra=Math.max(1,T??Math.min(5,ua.pageSize)),re=x$1?$:"",Y=v.useCallback(_=>{y(_);},[y]),le=v.useCallback(_=>{me(_);},[me]),ne=v.useCallback(_=>{X(_);},[X]),Na=v.useCallback(()=>{N?.(0),K===void 0&&ie(_=>_.pageIndex===0?_:{..._,pageIndex:0});},[N,K]),qe=v.useMemo(()=>JSON.stringify({globalFilterValue:re,columnFilters:he}),[he,re]),va=v.useRef(qe);v.useEffect(()=>{if(b){va.current=qe;return}va.current!==qe&&(va.current=qe,Na());},[qe,b,Na]),so({persistence:ve,prefs:{visibility:l?void 0:ee,sizing:t===void 0?Ke:void 0,order:a?void 0:Be,pinning:n?void 0:Ue,density:f?void 0:Re}});let pa=v.useMemo(()=>u.reduce((_,Fe,Ha)=>{let pt=F(Fe,Ha);return j(Fe.meta?.hideOn,ca)&&(_[pt]=false),_},{}),[u,ca]),st=v.useMemo(()=>({...ee,...pa}),[ee,pa]),Xe=v.useMemo(()=>g.filter(_=>c$1(_,k,V)),[V,g,k]),La=O&&Xe.length===0,Oa=v.useMemo(()=>v$1(ra),[ra]),dt=La?Oa:Xe,ct=v.useCallback((_,Fe)=>w(_)?x(Fe):R(_,Fe),[R]),Ye=P||(W?.length??0)>0||Object.values(pe).some(Boolean),_a=v.useMemo(()=>Ye?new Map(Xe.map((_,Fe)=>[R(_,Fe),_])):new Map,[R,Ye,Xe]),ut=v.useMemo(()=>Ye?Object.entries(pe).filter(([,_])=>_).map(([_])=>_a.get(_)).filter(_=>!!_):[],[pe,_a,Ye]);return {currentColumnFilters:he,currentColumnOrder:Be,currentColumnPinning:Ue,currentColumnSizing:Ke,currentColumnVisibility:ee,currentDensity:Re,currentExpanded:Pe,currentPagination:ua,currentRowSelection:pe,currentShowHiddenRows:V,currentSorting:We,currentViewMode:Je,effectiveColumnVisibility:st,globalFilterValue:re,handleDensityChange:ne,handleShowHiddenRowsChange:le,handleViewModeChange:Y,localSearchValue:$,resolvedLoadingRowCount:ra,resolvedToolbarQueryPlaceholder:ya,selectedRows:ut,setCurrentColumnFilters:_e,setCurrentColumnOrder:$e,setCurrentColumnPinning:ye,setCurrentColumnVisibility:Oe,setCurrentExpanded:He,setCurrentRowSelection:oa,setCurrentSorting:ue,setLocalColumnSizing:ia,setLocalPagination:ie,setLocalSearchValue:fe,shouldRenderInitialLoading:La,tableData:dt,tableGetRowId:ct,toolbarFilteredData:Xe,visibleData:Xe}}var Pr={cellStyle:void 0,colStyle:void 0,fixedSide:void 0,headerStyle:void 0,isActionsColumn:false,isExpansionColumn:false,isSelectionColumn:false,isSpacerColumn:false,isUtilityColumn:false,pinnedClassName:void 0,utilityClassName:void 0};function mo({columns:e,columnSizing:a,editableRows:n,enableRowSelection:t,hasRowActions:o,hasRowExpansion:c,layoutMode:l,uiClassNames:u$1,visibleLeafColumns:g}){let f=v.useMemo(()=>{let T=new Set;for(let[b,d]of e.entries())Object.prototype.hasOwnProperty.call(d,"size")&&T.add(F(d,b));return t&&T.add("__select__"),c&&T.add("__expand__"),(o||n)&&T.add("__actions__"),T},[e,n,t,o,c]),P=v.useMemo(()=>{let T=new Map;for(let[b,d]of e.entries()){let h=y(d);h!==void 0&&T.set(F(d,b),h);}return T},[e]),x=v.useMemo(()=>{let T=new Map,b=new Map,d=0;for(let m of g)H(m)==="left"&&(T.set(m.id,d),d+=po(m));let h=0;for(let m of [...g].reverse())H(m)==="right"&&(b.set(m.id,h),h+=po(m));return {left:T,right:b}},[g]),S=v.useMemo(()=>{if(l!=="fill")return;let T=g.filter(d=>!J(d.id));return T.length&&T.every(d=>f.has(d.id)||Object.prototype.hasOwnProperty.call(a,d.id))?T[T.length-1]?.id:void 0},[a,f,l,g]),R=v.useMemo(()=>{let T=new Set([...f,...Object.keys(a)]);return S&&T.delete(S),T},[a,f,S]),k=v.useMemo(()=>{let T=new Map;for(let b of g){let d=b.id==="__select__",h=b.id==="__expand__",m=b.id==="__actions__",r=d||h||m,C=b.id==="__spacer__",D=P.get(b.id),z=b.id===S,N=D??(z?b.getSize():void 0),U=!C&&(l==="fit"||r||R.has(b.id)),F=U||N!==void 0?{width:U?r?u:b.getSize():void 0,minWidth:r?u:U?b.getSize():N,maxWidth:U?r?u:b.getSize():void 0}:void 0,I$1=H(b),w=I$1?{insetInlineStart:I$1==="left"?x.left.get(b.id):void 0,insetInlineEnd:I$1==="right"?x.right.get(b.id):void 0}:void 0,j=F||w?{...F,...w}:void 0;T.set(b.id,{cellStyle:j,colStyle:F,fixedSide:I$1,headerStyle:j,isActionsColumn:m,isExpansionColumn:h,isSelectionColumn:d,isSpacerColumn:C,isUtilityColumn:r,pinnedClassName:I$1?I(I$1,u$1,{isUtilityColumn:r}):void 0,utilityClassName:r?"w-[50px] max-w-[50px] min-w-[50px] px-0":void 0});}return T},[S,R,l,P,x,u$1,g]),E=v.useMemo(()=>g.reduce((T,b)=>{let d=k.get(b.id),h=P.get(b.id),m=b.id===S;return d?.isUtilityColumn?T+u:R.has(b.id)?T+b.getSize():T+(h??(m?b.getSize():0))},0),[k,S,R,P,g]),O=v.useCallback(T=>k.get(T)??Pr,[k]);return {columnLayouts:k,explicitlySizedColumnIds:f,fillMinWidth:E,getColumnLayout:O}}function po(e){return J(e.id)?u:e.getSize()}function go(e,a$1){let n=e.classNames??{},{Card:t,CardContent:o,CardHeader:c,Checkbox:l,Skeleton:u}=e;return function({rows:f,cardRenderer:P,cardSizing:x="fixed",cardGridClassName:S,cardClassName:R,rowActions:k,editableRows:E,renderExpandedRow:O,hasCardTitle:T,rowSelection:b,onRowSelectionChange:d,enableRowSelection:h,editingRowId:m,onEditingRowIdChange:r,getRowClassName:C,onRowClick:D,getRowDraggable:z,onRowDragStart:N,onRowDragEnd:U,isLoading:F=false,loadingRowCount:I=5,labels:w}){let j=x??"fixed",K=S?a("grid",S):xr(j),ae=a("min-h-0 w-full gap-4 p-1",n.cardGrid,K),oe=A=>a("relative min-w-0 max-w-full gap-0 overflow-hidden bg-transparent p-0",kr(j),n.cardItem,R,A);return F?jsx("div",{role:"list","data-dtp-slot":"data-table-card-grid",className:ae,children:Array.from({length:Math.max(1,I)},(A,G)=>jsxs(t,{role:"listitem","aria-hidden":"true","data-dtp-slot":"data-table-card-item",className:oe("min-h-52"),children:[T?jsxs(c,{className:"px-4 pt-4 pb-3",children:[jsx(u,{className:"h-5 w-40 max-w-[70%]"}),jsx(u,{className:"h-4 w-24 max-w-[40%]"})]}):null,jsxs(o,{className:a("space-y-3 pb-4",T?"":"pt-4"),children:[jsx(u,{className:"h-4 w-full"}),jsx(u,{className:"h-4 w-[82%]"}),jsx(u,{className:"h-4 w-[68%]"}),jsx(u,{className:"h-24 w-full rounded-xl"})]})]},`loading-card-${G}`))}):jsx("div",{role:"list","data-dtp-slot":"data-table-card-grid",className:ae,children:f.map(A=>{let G=A.id,W=A.original,De=!!b[G],be=m===G,ge=k.length>0||!!E,Ae=h||ge||T,Le=h||ge,Se=()=>{D&&D({row:W,rowId:G});};return jsxs(t,{role:"listitem","data-row-id":G,draggable:z?.(W)??false,"data-dtp-slot":"data-table-card-item","data-state":De?"selected":void 0,className:oe(a([C?.(W)].filter(Boolean).join(" "),"transition transition-colors hover:scale-101 data-[state=selected]:scale-101",n.card,De?n.cardSelected:n.cardUnselected)),onDragStart:J=>{N?.({row:W,rowId:G,event:J});},onDragEnd:J=>{U?.({row:W,rowId:G,event:J});},children:[Ae?jsx("div",{"aria-hidden":"true",className:a("pointer-events-none absolute inset-x-0 top-0 z-10 h-24 bg-linear-to-b opacity-0 transition-opacity group-hover/card:opacity-100",n.cardOverlay??"from-transparent via-transparent to-transparent")}):null,jsxs("div",{"data-dtp-slot":"data-table-card-renderer",role:D?"button":void 0,tabIndex:D?0:void 0,className:a("flex min-h-0 max-w-full min-w-0 overflow-hidden rounded-[inherit] [&>*]:min-w-0",Er(j),D&&"cursor-pointer focus-visible:outline-none"),onClick:J=>{J.target?.closest("[data-row-click-ignore='true']")||Se();},onKeyDown:J=>{J.target?.closest("[data-row-click-ignore='true']")||(J.key==="Enter"||J.key===" ")&&(J.preventDefault(),Se());},children:[P({row:W,rowId:G,isSelected:De,onSelectedChange:J=>{d(bo(b,G,J));},actions:k,isEditing:be,startEditing:()=>{r(G);},cancelEditing:()=>{r(null);}}),be||!O||!A.getIsExpanded()?null:O({row:W,rowId:G,tableRow:A})]}),Le?jsxs(c,{className:"absolute inset-x-0 top-0 z-20 flex flex-row items-center gap-3 space-y-0 px-4 pt-4 pb-8",children:[h?jsx("div",{"data-row-click-ignore":"true",className:"pointer-events-auto",children:jsx(l,{checked:De,"aria-label":(w.selectCardRow??de.selectCardRow)(G),onCheckedChange:J=>{d(bo(b,G,J===true));}})}):null,jsx("div",{className:"pointer-events-none min-w-0 flex-1"}),ge?jsx("div",{"data-row-click-ignore":"true",className:"pointer-events-auto",children:jsx(a$1,{row:W,rowActions:k,editableRows:E,isEditing:be,onStartEditing:()=>{r(G);},onCancelEditing:()=>{r(null);},labels:w})}):null]}):null]},G)})})}}function xr(e){switch(e){case "content":return "flex flex-wrap items-start justify-start";case "fluid":return "grid grid-cols-[repeat(auto-fit,minmax(min(18rem,100%),1fr))]";default:return "grid grid-cols-[repeat(auto-fill,minmax(min(18rem,100%),18rem))] justify-start"}}function kr(e){switch(e){case "content":return "w-fit";case "fluid":return "w-full";default:return}}function Er(e){switch(e){case "content":return "w-fit";case "fluid":return "w-full flex-1 [&>*]:w-full";default:return "flex-1"}}function bo(e,a,n){if(n)return {...e,[a]:true};if(!e[a])return e;let t={...e};return delete t[a],t}function To(e){let a=e.classNames??{},{Empty:n,EmptyContent:t,EmptyDescription:o$1,EmptyHeader:c,EmptyMedia:l,EmptyTitle:u}=e;return function({title:f="No rows found",description:P="Adjust your filters or create a new record to populate this table."}){return jsxs(n,{className:`min-h-60 rounded-2xl ${a.emptyState??"border bg-transparent"}`,children:[jsxs(c,{children:[jsx(l,{variant:"icon",children:jsx(o,{})}),jsx(u,{children:f}),jsx(o$1,{children:P})]}),jsx(t,{})]})}}function Co(e){let a=e.classNames??{},{Pagination:n,PaginationContent:t,PaginationEllipsis:o,PaginationFirst:c,PaginationItem:l,PaginationLast:u,PaginationLink:g,PaginationNext:f,PaginationPrevious:P,Select:x,SelectContent:S,SelectGroup:R,SelectItem:k,SelectTrigger:E,SelectValue:O,Tooltip:T,TooltipContent:b,TooltipTrigger:d}=e;function h({pageIndex:r,pageCount:C,pageCountKnown:D,pageSize:z,totalRowCount:N,rowsPerPageOptions:U,onPageIndexChange:F,onPageSizeChange:I,labels:w}){let j=D?Mr(r,Math.max(1,C)):[],K=r>0,ae=r+1{I(Number(A));},children:[jsx(E,{"aria-label":w.recordsPerPage,className:`w-22 ${a.paginationSelectTrigger??""}`,children:jsx(O,{})}),jsx(S,{children:jsx(R,{children:U.map(A=>jsx(k,{value:String(A),children:A},A))})})]})]}),N!==void 0?jsx("div",{className:"flex shrink-0 items-center justify-center",children:jsxs("div",{className:`inline-flex items-center gap-2 px-2.5 py-1.5 text-sm ${a.paginationTotal??""}`,"aria-label":w.totalRecords(N),children:[jsx(i,{className:"size-4"}),jsx("span",{className:"@md/data-table:hidden",children:N}),jsx("span",{className:"hidden @md/data-table:inline",children:w.totalRecords(N)})]})}):null,jsxs("div",{className:"flex flex-1 items-center justify-end gap-4",children:[jsx("div",{className:`hidden text-sm @md/data-table:inline ${a.mutedText??"opacity-70"}`,children:D?w.pageStatus(r,Math.max(1,C)):(w.pageStatusUnknown??de.pageStatusUnknown)(r)}),jsx(n,{"aria-label":w.pagination??de.pagination,className:"mx-0 w-auto justify-end",children:jsxs(t,{children:[jsx(l,{className:"@md/data-table:hidden",children:jsxs(T,{children:[jsx(d,{asChild:true,children:jsx(c,{"aria-label":w.firstPage,href:"#",size:"icon-sm",showText:false,disabled:!K,onClick:A=>{A.preventDefault(),K&&F(0);},text:w.firstPage})}),jsx(b,{children:w.firstPage})]})}),jsx(l,{children:jsxs(T,{children:[jsx(d,{asChild:true,children:jsx(P,{"aria-label":w.previousPage,href:"#",size:"icon-sm",showText:false,disabled:!K,onClick:A=>{A.preventDefault(),K&&F(r-1);},text:w.previousPage})}),jsx(b,{children:w.previousPage})]})}),j.map((A,G)=>jsx(l,{className:"hidden @md/data-table:block",children:A==="ellipsis"?jsx(o,{text:w.morePages??de.morePages}):jsx(g,{href:"#",isActive:A===r+1,size:"icon-sm",onClick:W=>{W.preventDefault(),F(A-1);},children:A})},`${A}-${G}`)),jsx(l,{children:jsxs(T,{children:[jsx(d,{asChild:true,children:jsx(f,{"aria-label":w.nextPage,href:"#",size:"icon-sm",showText:false,disabled:!ae,onClick:A=>{A.preventDefault(),ae&&F(r+1);},text:w.nextPage})}),jsx(b,{children:w.nextPage})]})}),D?jsx(l,{className:"@md/data-table:hidden",children:jsxs(T,{children:[jsx(d,{asChild:true,children:jsx(u,{"aria-label":w.lastPage,href:"#",size:"icon-sm",showText:false,text:w.lastPage,disabled:!ae,onClick:A=>{A.preventDefault(),ae&&F(oe);}})}),jsx(b,{children:w.lastPage})]})}):null]})})]})]})}function m(r){return jsx("div",{className:`rounded-md border px-2 py-1 ${a.footer??""}`,children:jsx(h,{...r})})}return {DataTableFooter:m,DataTablePagination:h}}function Mr(e,a){let n=e+1,t=new Set([1,a]);for(let l=Math.max(1,n-2);l<=Math.min(a,n+2);l+=1)t.add(l);let o=Array.from(t).sort((l,u)=>l-u),c=[];for(let l=0;l1&&c.push("ellipsis"),c.push(u);}return c}function wo(e$1){let{Button:a,DropdownMenu:n,DropdownMenuContent:t$1,DropdownMenuGroup:o,DropdownMenuItem:c,DropdownMenuSeparator:l$1,DropdownMenuTrigger:u,Tooltip:g,TooltipContent:f$1,TooltipTrigger:P}=e$1;return function({row:S,rowActions:R,editableRows:k,isEditing:E,onStartEditing:O,onCancelEditing:T,labels:b}){let d$1=R.filter(r=>e(r,S)),h=v.useCallback(r=>{r.stopPropagation();},[]);if(E)return jsxs(g,{children:[jsx(P,{asChild:true,children:jsxs(a,{type:"button",variant:"ghost",size:"icon-sm",onPointerDown:h,onClick:T,children:[jsx(t,{}),jsx("span",{className:"sr-only",children:b.cancelEdit})]})}),jsx(f$1,{children:b.cancelEdit})]});let m=f(k,S);return !d$1.length&&!m?null:jsxs(n,{children:[jsxs(g,{children:[jsx(P,{asChild:true,children:jsx(u,{asChild:true,children:jsxs(a,{type:"button",variant:"ghost",size:"icon-sm",onPointerDown:h,onClick:h,children:[jsx(j$1,{}),jsx("span",{className:"sr-only",children:b.rowActions})]})})}),jsx(f$1,{children:b.rowActions})]}),jsxs(t$1,{align:"end",className:"w-52",children:[m?jsx(o,{children:jsxs(c,{onClick:r=>{r.stopPropagation(),O();},children:[jsx(l,{"data-icon":"inline-start"}),b.editRow]})}):null,m&&d$1.length?jsx(l$1,{}):null,d$1.length?jsx(o,{children:d$1.map(r=>{let C=r.icon;return jsxs(c,{disabled:r.disabled?.(S),variant:r.variant==="destructive"?"destructive":void 0,onClick:D=>{D.stopPropagation(),r.onClick(S);},children:[C?jsx(C,{"data-icon":"inline-start"}):null,d(r.label,S)]},r.key)})}):null]})]})}}function ho(e){let a=e.classNames??{},{Button:n,ButtonGroup:t$1,DropdownMenu:o,DropdownMenuCheckboxItem:c,DropdownMenuContent:l,DropdownMenuGroup:u,DropdownMenuItem:g,DropdownMenuLabel:f,DropdownMenuSeparator:P,DropdownMenuTrigger:x,InputGroup:S,InputGroupAddon:R,InputGroupInput:k,Tooltip:E,TooltipContent:O,TooltipTrigger:T}=e;return function({title:h,description:m,toolbarQueryValue:r$1,toolbarQueryPlaceholder:C,onToolbarQueryValueChange:D,customToolbar:z,compactToolbar:N,viewMode:U,onViewModeChange:F,enableViewToggle:I,toolbarActions:w,selectionActions:j,selectedRows:K,showHiddenRows:ae,hiddenRowsLabel:oe,onShowHiddenRowsChange:A,allRows:G,columnVisibilityOptions:W,onColumnVisibilityChange:De,enableColumnPinning:be,onColumnPinningChange:ge,columnFilters:Ae,onColumnFilterChange:Le,onClearColumnFilters:Se,density:J,onDensityChange:ve,enableDensityToggle:we,labels:M,toolbarVisibility:ie,openFileDialog:We}){let ue=v.useRef(null),[pe,oa]=v.useState(false),ee=a.toolbarCompactIconButton??"",Oe=w.filter(i=>(i.placement??"primary")==="primary"),he=w.filter(i=>i.placement==="trailing"),_e=ie?.title??true,Pe=ie?.search??true,He=ie?.actions??true,Be=ie?.trailingActions??true,$e=ie?.options??true,Ue=ie?.viewToggle??true,ye=ie?.customToolbar??true,Ke=_e&&!!(h||m),ia=Pe,Je=He&&Oe.length>0,y=K.length>0&&j.length>0,V=$e&&(W.some(i=>i.canHide)||!!(A&&oe)||be||we),me=Ue&&I&&!!F,Re=Be&&he.length>0,X=ye&&!!z,q$1=ye&&!!(N??z),ya=M.selectedRows(K.length);return v.useEffect(()=>{pe&&ue.current?.focus();},[pe]),!Ke&&!ia&&!Je&&!y&&!V&&!me&&!Re&&!X&&!q$1?null:jsxs("div",{className:"flex flex-col gap-4 pb-0",children:[_e&&(h||m)?jsxs("div",{className:"flex flex-col gap-1",children:[h?jsx("h2",{className:"text-lg font-semibold tracking-tight",children:h}):null,m?jsx("p",{className:`max-w-3xl text-sm ${a.mutedText??"opacity-70"}`,children:m}):null]}):null,jsxs("div",{className:"flex flex-col gap-3",children:[jsxs("div",{"data-dtp-slot":"data-table-toolbar-controls",className:"flex items-center gap-2 overflow-x-auto px-1 @md/data-table:gap-3 @md/data-table:overflow-visible",children:[Pe?jsxs(Fragment,{children:[jsx("div",{className:"hidden min-w-0 grow max-w-md @md/data-table:block",children:jsxs(S,{className:"min-w-0",children:[jsx(k,{value:r$1,onChange:i=>{D(i.target.value);},placeholder:C}),jsx(R,{align:"inline-start","aria-hidden":"true",children:jsx(r,{})}),r$1?jsx(R,{align:"inline-end",children:jsx("button",{type:"button",className:`inline-flex size-5 items-center justify-center rounded-md transition-colors focus-visible:outline-none ${a.toolbarIconButton??"opacity-70 hover:opacity-100"}`,onClick:()=>{D("");},"aria-label":M.clearSearch,title:M.clearSearch,children:jsx(t,{})})}):null]})}),jsxs(E,{children:[jsx(T,{asChild:true,children:jsxs(n,{type:"button",variant:pe||r$1?"secondary":"outline",size:"icon-sm","aria-label":M.searchTable,"aria-pressed":pe,className:`shrink-0 @md/data-table:hidden ${ee} ${a.toolbarInputButton??""}`,onClick:()=>{oa(i=>!i);},children:[jsx(r,{}),jsx("span",{className:"sr-only",children:M.searchTable})]})}),jsx(O,{children:M.searchTable})]})]}):null,He?jsx("div",{className:"flex shrink-0 items-center gap-2",children:Oe.map(i=>{let $=!i.iconOnly&&!!i.icon,fe=jsxs(n,{type:"button",className:$?`size-7 shrink-0 px-0 @md/data-table:h-8 @md/data-table:w-fit @md/data-table:px-2.5 ${ee}`:i.iconOnly?`size-7 shrink-0 @md/data-table:size-8 ${ee}`:"size-7 shrink-0 @md/data-table:h-8 @md/data-table:w-fit",variant:i.variant??"outline",size:i.iconOnly?"icon":"default",onClick:()=>{i.onClick({rows:G,openFileDialog:We});},disabled:i.disabled,"aria-label":i.label,title:i.iconOnly?void 0:i.label,children:[i.icon?jsx(i.icon,{}):null,i.iconOnly?jsx("span",{className:"sr-only",children:i.label}):$?jsx("span",{className:"hidden @md/data-table:inline",children:i.label}):jsx("span",{children:i.label})]},i.key);return i.iconOnly?jsxs(E,{children:[jsx(T,{asChild:true,children:fe}),jsx(O,{children:i.label})]},i.key):fe})}):null,q$1?jsx("div",{"data-dtp-slot":"data-table-toolbar-compact-custom",className:"flex shrink-0 items-center gap-2 @lg/data-table:hidden",children:N??z}):null,jsx("div",{className:"grow","aria-hidden":"true"}),jsxs("div",{"data-dtp-slot":"data-table-toolbar-end-controls",className:"flex shrink-0 items-center gap-2",children:[K.length?jsx("div",{className:`hidden text-sm @md/data-table:block ${a.mutedText??"opacity-70"}`,children:ya}):null,K.length?j.map(i=>{let $=i.icon,fe=typeof i.disabled=="function"?i.disabled(K):i.disabled;return jsxs(E,{children:[jsx(T,{asChild:true,children:jsxs(n,{type:"button",variant:i.variant??"secondary",size:"icon-sm",className:ee,disabled:fe,onClick:()=>{i.onClick({rows:K});},"aria-label":i.label,children:[$?jsx($,{}):null,jsx("span",{className:"sr-only",children:i.label})]})}),jsx(O,{children:i.label})]},i.key)}):null,V?jsxs(o,{children:[jsx(x,{asChild:true,children:jsxs(n,{type:"button",variant:"outline",size:"icon-sm","aria-label":M.tableOptions,className:`${ee} ${a.toolbarInputButton??""}`,title:M.tableOptions,children:[jsx(a$2,{}),jsx("span",{className:"sr-only",children:M.tableOptions})]})}),jsxs(l,{align:"end",className:"w-56",children:[jsx(f,{children:M.tableOptions}),jsx(u,{children:A&&oe?jsx(c,{checked:ae,onCheckedChange:i=>{A(i===true);},children:M.showHiddenRows(oe)}):null}),we?jsxs(Fragment,{children:[jsx(P,{}),jsx(f,{children:M.density}),jsx(u,{children:[["compact",M.compactDensity],["comfortable",M.comfortableDensity],["spacious",M.spaciousDensity]].map(([i,$])=>jsx(c,{checked:J===i,onCheckedChange:()=>{ve(i);},children:$},i))})]}):null,W.some(i=>i.canHide)?jsxs(Fragment,{children:[jsx(P,{}),jsx(f,{children:M.columns}),jsx(u,{children:W.filter(i=>i.canHide).map(i=>jsx(c,{checked:i.visible,onCheckedChange:$=>{De?.(i.id,$===true);},children:i.label},i.id))})]}):null,be?jsxs(Fragment,{children:[jsx(P,{}),jsxs(f,{children:[M.pinLeft," / ",M.pinRight]}),jsx(u,{children:W.map(i=>jsxs(g,{onSelect:$=>{$.preventDefault();},children:[jsx("span",{className:"min-w-0 flex-1 truncate",children:i.label}),jsx("button",{type:"button",className:"px-1 text-xs","aria-label":`${M.pinLeft}: ${i.label}`,onClick:$=>{$.stopPropagation(),ge(i.id,"left");},children:"L"}),jsx("button",{type:"button",className:"px-1 text-xs","aria-label":`${M.pinRight}: ${i.label}`,onClick:$=>{$.stopPropagation(),ge(i.id,"right");},children:"R"}),jsx("button",{type:"button",className:"px-1 text-xs","aria-label":`${M.unpin}: ${i.label}`,onClick:$=>{$.stopPropagation(),ge(i.id,false);},children:"-"})]},`pin-${i.id}`))})]}):null]})]}):null,Ue&&I&&F?jsxs(t$1,{children:[jsxs(E,{children:[jsx(T,{asChild:true,children:jsxs(n,{type:"button",variant:U==="table"?"default":"outline","aria-pressed":U==="table",className:U==="table"?ee:`${ee} ${a.toolbarInputButton??""}`,size:"icon-sm",onClick:()=>{F("table");},children:[jsx(q,{}),jsx("span",{className:"sr-only",children:M.switchToTableView??de.switchToTableView})]})}),jsx(O,{children:M.tableView??de.tableView})]}),jsxs(E,{children:[jsx(T,{asChild:true,children:jsxs(n,{type:"button",variant:U==="card"?"default":"outline","aria-pressed":U==="card",className:U==="table"?`${ee} ${a.toolbarInputButton??""}`:ee,size:"icon-sm",onClick:()=>{F("card");},children:[jsx(p,{}),jsx("span",{className:"sr-only",children:M.switchToCardView??de.switchToCardView})]})}),jsx(O,{children:M.cardView??de.cardView})]})]}):null,Be?he.map(i=>{let $=!i.iconOnly&&!!i.icon,fe=jsxs(n,{type:"button",variant:i.variant??"outline",size:i.iconOnly?"icon-sm":"default",onClick:()=>{i.onClick({rows:G,openFileDialog:We});},disabled:i.disabled,"aria-label":i.label,title:i.iconOnly?void 0:i.label,className:`size-7 shrink-0 ${i.iconOnly?"":`${$?"px-0 @md/data-table:px-2.5":""} @md/data-table:h-8 @md/data-table:w-fit`} ${i.iconOnly||$?ee:""} ${a.toolbarInputButton??""}`,children:[i.icon?jsx(i.icon,{"data-icon":i.iconOnly?void 0:"inline-start"}):null,i.iconOnly?jsx("span",{className:"sr-only",children:i.label}):$?jsx("span",{className:"hidden @md/data-table:inline",children:i.label}):jsx("span",{children:i.label})]},i.key);return i.iconOnly?jsxs(E,{children:[jsx(T,{asChild:true,children:fe}),jsx(O,{children:i.label})]},i.key):fe}):null]})]}),Pe&&pe?jsx("div",{"data-dtp-slot":"data-table-toolbar-compact-search",className:"min-w-0 @md/data-table:hidden",children:jsxs(S,{children:[jsx(k,{ref:ue,value:r$1,onChange:i=>{D(i.target.value);},placeholder:C}),jsx(R,{align:"inline-start","aria-hidden":"true",children:jsx(r,{})}),r$1?jsx(R,{align:"inline-end",children:jsx("button",{type:"button",className:`inline-flex size-5 items-center justify-center rounded-md transition-colors focus-visible:outline-none ${a.toolbarIconButton??"opacity-70 hover:opacity-100"}`,onClick:()=>{D("");},"aria-label":M.clearSearch,title:M.clearSearch,children:jsx(t,{})})}):null]})}):null,Ae.length?jsxs("div",{"data-dtp-slot":"data-table-toolbar-filters",className:"flex min-w-0 flex-wrap items-center gap-2",children:[Ae.map(i=>jsx(b,{filter:i,labels:M,onColumnFilterChange:Le},i.id)),Ae.some(i=>Ar(i.value))?jsx(n,{type:"button",variant:"ghost",size:"sm",onClick:Se,children:M.clearFilters}):null]}):null]}),ye&&z?jsx("div",{"data-dtp-slot":"data-table-toolbar-desktop-custom",className:"hidden flex-row items-center gap-3 @lg/data-table:flex",children:z}):null]})};function b({filter:d,labels:h,onColumnFilterChange:m}){if(d.type==="text")return jsxs(S,{className:"min-w-48 max-w-64",children:[jsx(k,{value:typeof d.value=="string"?d.value:"",onChange:D=>{m(d.id,D.target.value);},placeholder:d.placeholder??d.label,"aria-label":`${h.filters}: ${d.label}`}),jsx(R,{align:"inline-start","aria-hidden":"true",children:jsx(r,{})})]});let r$1=Array.isArray(d.value)?d.value.map(String):typeof d.value=="string"&&d.value?[d.value]:[],C=r$1.length===0?d.label:`${d.label}: ${r$1.length===1?d.options.find(D=>D.value===r$1[0])?.label??r$1[0]:r$1.length}`;return jsxs(o,{children:[jsx(x,{asChild:true,children:jsx(n,{type:"button",variant:"outline",size:"sm",children:C})}),jsxs(l,{align:"start",className:"w-56",children:[jsx(f,{children:d.label}),jsxs(u,{children:[d.type==="select"?jsx(g,{onClick:()=>{m(d.id,"");},children:h.allFilterOptions??de.allFilterOptions}):null,d.options.map(D=>jsx(c,{checked:r$1.includes(D.value),onCheckedChange:z=>{if(d.type==="select"){m(d.id,z===true?D.value:"");return}let N=new Set(r$1);z===true?N.add(D.value):N.delete(D.value),m(d.id,Array.from(N));},children:D.label},D.value))]})]})]})}}function Ar(e){return Array.isArray(e)?e.length>0:e!=null&&e!==""}var Vr=v.lazy(async()=>({default:(await import('./data-table-virtual-table-panel-ASNINA6M.js')).DataTableVirtualTablePanel}));function yo(e){let a=typeof e.virtualization=="object"?e.virtualization:void 0;return e.virtualization===true||a?.enabled===true?jsx(v.Suspense,{fallback:jsx(P,{...e}),children:jsx(Vr,{...e})}):jsx(P,{...e})}var Fr="data-table-pro:saved-views:";var So=["sorting","columnVisibility","columnFilters","columnOrder","columnPinning","columnSizing","density","viewMode","showHiddenRows","globalFilter"],Ro=0;function ha(e){let a=_t(e);if(!e||!a)return [];let n;try{n=a.getItem(Ht(e.key));}catch(l){return e.onError?.({error:l,operation:"read"}),[]}if(!n)return [];let t;try{t=(e.deserialize??JSON.parse)(n);}catch(l){return e.onError?.({error:l,operation:"deserialize"}),[]}if(!Ve(t)||!("version"in t)||!("views"in t))return [];let o=e.version??1,c=t.views;if(t.version!==o){if(!e.migrate)return [];try{c=e.migrate({version:t.version,views:t.views},o);}catch(l){return e.onError?.({error:l,operation:"migrate"}),[]}}return Array.isArray(c)?c.map(l=>zr(l,e.slices)).filter(l=>!!l):[]}function vo(e,a,n){let t=a.trim();if(!e||!t)return;let o=new Date().toISOString(),c={id:$r(),name:t,createdAt:o,updatedAt:o,state:Ir(n,e.slices)},l=[...ha(e),c];return Lt(e,l,"create")?Ot(c):void 0}function Po(e,a,n){let t=n.trim();if(!e||!t)return;let o,c=ha(e).map(l=>l.id!==a?l:(o={...l,name:t,updatedAt:new Date().toISOString()},o));if(o)return Lt(e,c,"rename")?Ot(o):void 0}function xo(e,a){if(!e)return false;let n=ha(e),t=n.filter(o=>o.id!==a);return t.length!==n.length&&Lt(e,t,"delete")}function ko(e){let a=_t(e);if(!e||!a)return false;try{a.removeItem(Ht(e.key));}catch(n){return e.onError?.({error:n,operation:"remove"}),false}return e.onChange?.([],"clear"),true}function Lt(e,a,n){let t=_t(e);if(!t)return false;let o;try{let l={version:e.version??1,views:a};o=(e.serialize??JSON.stringify)(l);}catch(l){return e.onError?.({error:l,operation:"serialize"}),false}try{t.setItem(Ht(e.key),o);}catch(l){return e.onError?.({error:l,operation:"write"}),false}let c=a.map(Ot);return e.onChange?.(c,n),true}function Ir(e,a){let n=new Set(a??So),t={};for(let o of Object.keys(e))n.has(o)&&Object.assign(t,{[o]:Nr(o,e[o])});return t}function zr(e,a){if(!(!Ve(e)||typeof e.id!="string"||!e.id||typeof e.name!="string"||!e.name.trim()||typeof e.createdAt!="string"||typeof e.updatedAt!="string"))return {id:e.id,name:e.name.trim(),createdAt:e.createdAt,updatedAt:e.updatedAt,state:Eo(e.state,a)}}function Eo(e,a){if(!Ve(e))return {};let n=new Set(a??So),t={},o=Lr(e.sorting);n.has("sorting")&&o&&(t.sorting=o);let c=Or(e.pagination);n.has("pagination")&&c&&(t.pagination=c);let l=zt(e.rowSelection);n.has("rowSelection")&&l&&(t.rowSelection=l);let u=zt(e.columnVisibility);n.has("columnVisibility")&&u&&(t.columnVisibility=u);let g=_r(e.columnFilters);n.has("columnFilters")&&g&&(t.columnFilters=g);let f=e.expanded===true?true:zt(e.expanded);n.has("expanded")&&f!==void 0&&(t.expanded=f);let P=Nt(e.columnOrder);n.has("columnOrder")&&P&&(t.columnOrder=P);let x=Hr(e.columnPinning);n.has("columnPinning")&&x&&(t.columnPinning=x);let S=Br(e.columnSizing);return n.has("columnSizing")&&S&&(t.columnSizing=S),n.has("density")&&(e.density==="compact"||e.density==="comfortable"||e.density==="spacious")&&(t.density=e.density),n.has("viewMode")&&(e.viewMode==="table"||e.viewMode==="card")&&(t.viewMode=e.viewMode),n.has("showHiddenRows")&&typeof e.showHiddenRows=="boolean"&&(t.showHiddenRows=e.showHiddenRows),n.has("globalFilter")&&typeof e.globalFilter=="string"&&(t.globalFilter=e.globalFilter),t}function Ot(e){return {...e,state:Eo(e.state,Object.keys(e.state))}}function Nr(e,a){return Array.isArray(a)?a.map(n=>Ve(n)?{...n}:n):Ve(a)?e==="columnPinning"?{left:Array.isArray(a.left)?[...a.left]:void 0,right:Array.isArray(a.right)?[...a.right]:void 0}:{...a}:a}function Lr(e){if(Array.isArray(e))return e.filter(a=>Ve(a)&&typeof a.id=="string").map(a=>({id:a.id,desc:!!a.desc}))}function Or(e){if(!(!Ve(e)||!Number.isInteger(e.pageIndex)||e.pageIndex<0||!Number.isInteger(e.pageSize)||e.pageSize<1))return {pageIndex:e.pageIndex,pageSize:e.pageSize}}function _r(e){if(Array.isArray(e))return e.filter(a=>Ve(a)&&typeof a.id=="string"&&Object.prototype.hasOwnProperty.call(a,"value")).map(a=>({id:a.id,value:a.value}))}function Hr(e){if(Ve(e))return {left:Nt(e.left)??[],right:Nt(e.right)??[]}}function zt(e){if(Ve(e))return Object.fromEntries(Object.entries(e).filter(a=>typeof a[1]=="boolean"))}function Br(e){if(Ve(e))return Object.fromEntries(Object.entries(e).filter(a=>typeof a[1]=="number"&&Number.isFinite(a[1])&&a[1]>=0))}function Nt(e){if(Array.isArray(e))return e.filter(a=>typeof a=="string")}function _t(e){if(e){if(e.storage)return e.storage;if(!(typeof window>"u"))try{return window.localStorage}catch(a){e.onError?.({error:a,operation:"read"});return}}}function $r(){return typeof globalThis.crypto?.randomUUID=="function"?globalThis.crypto.randomUUID():(Ro+=1,`view-${Date.now().toString(36)}-${Ro.toString(36)}`)}function Ht(e){return `${Fr}${e}`}function Ve(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Mo({columns:e,currentColumnFilters:a,currentColumnPinning:n,effectiveColumnVisibility:t,enableColumnFilters:o,handleColumnFiltersChange:c,handleColumnPinningChange:l,labels:u,table:g,toolbarActions:f,visibleData:P,csvExport:x}){let S=v.useMemo(()=>e.map((d,h)=>{let m=F(d,h),r=d.header,C=G(d),D=typeof r=="string"?r:C?L(C):L(m),z=n.left?.includes(m)===true?"left":n.right?.includes(m)===true?"right":false;return {id:m,label:D,visible:t[m]!==false,canHide:d.enableHiding!==false,pinned:z}}),[e,n,t]),R=v.useMemo(()=>o===false?[]:e.flatMap((d,h)=>{let m=d.meta?.filter;if(!m)return [];let r=F(d,h),C=d.header,D=G(d),z=m.label??(typeof C=="string"?C:D?L(D):L(r)),N=a.find(F=>F.id===r),U=typeof m.options=="function"?m.options({rows:P}):m.options??[];return [{id:r,label:z,type:m.type,value:N?.value,placeholder:m.placeholder,options:A(U)}]}),[e,a,o,P]),k$1=v.useCallback((d,h)=>{c(m=>{let r=m.filter(C=>C.id!==d);return B(h)&&r.push({id:d,value:h}),r});},[c]),E=v.useCallback(()=>{c([]);},[c]),O=v.useCallback((d,h)=>{l(m=>{let r=(m.left??[]).filter(D=>D!==d),C=(m.right??[]).filter(D=>D!==d);return h==="left"&&r.push(d),h==="right"&&C.push(d),{left:r,right:C}});},[l]),T=v.useCallback(()=>{if(x)return D({csvExport:x,table:g,labels:u})},[x,u,g]),b=v.useMemo(()=>x?[...f??[],{key:"__csv_export__",label:u.exportCsv,icon:k,placement:"trailing",onClick:T}]:f??[],[x,T,u.exportCsv,f]);return {columnVisibilityOptions:S,effectiveToolbarActions:b,handleClearColumnFilters:E,handleToolbarColumnFilterChange:k$1,handleToolbarColumnPinningChange:O,toolbarColumnFilters:R}}function xs(e){return Kr(e)}function Kr(e,a$1={}){let n=a$1.CardPanel??Wn,t=a$1.TablePanel??yo,o=e.classNames??{},{rootClassName:c,Button:l,Checkbox:u,Input:g,ScrollArea:f,ScrollBar:P,Skeleton:x,Table:S,TableBody:R,TableCell:k,TableFooter:E$1="tfoot",TableHead:O,TableHeader:T,TableRow:b$1,Tooltip:d,TooltipContent:h,TooltipProvider:m=v.Fragment,TooltipTrigger:r}=e,C=To(e),D$1=wo(e),{DataTableFooter:z}=Co(e),N=ho(e),U=go(e,D$1),F$1={minSize:80,size:180,maxSize:720};return function({columns:w,data:j,getRowId:K,children:ae,title:oe,description:A,toolbarQueryValue:G,onToolbarQueryValueChange:W,toolbarQueryPlaceholder:De,toolbarQueryDebounceMs:be,manualFiltering:ge=false,enableToolbarQueryFiltering:Ae=true,globalFilterFn:Le,columnFilters:Se,onColumnFiltersChange:J,enableColumnFilters:ve,customToolbar:we,compactToolbar:M$1,rowsPerPageOptions:ie=[10,20,50,100],totalRowCount:We,hasNextPage:ue,sorting:pe,onSortingChange:oa,manualSorting:ee=false,pageIndex:Oe,pageSize:he,onPageIndexChange:_e,onPageSizeChange:Pe,pageCount:He,manualPagination:Be=false,rowSelection:$e,onRowSelectionChange:Ue,enableRowSelection:ye=false,expanded:Ke,onExpandedChange:ia,getRowCanExpand:Je,renderExpandedRow:y,columnOrder:V,onColumnOrderChange:me,enableColumnReordering:Re=false,columnPinning:X,onColumnPinningChange:q,enableColumnPinning:ya=false,toolbarActions:i=[],selectionActions:$=[],rowActions:fe=[],csvExport:ca,density:Ra,onDensityChange:Sa,enableDensityToggle:lt=false,columnPrefsKey:ua,persistence:ra,savedViews:re,initialState:Y,state:le,onStateChange:ne,apiRef:Na,labels:qe,summaryRows:va=[],cardRenderer:pa,cardSizing:st,cardGridClassName:Xe,cardClassName:La,viewMode:Oa,onViewModeChange:dt,enableViewToggle:ct=false,emptyState:Ye,isLoading:_a=false,loadingRowCount:ut,getRowLoadingState:_,hiddenRows:Fe,showHiddenRows:Ha,onShowHiddenRowsChange:pt,infiniteScroll:Ba,editableRows:$a,columnVisibility:Bt,onColumnVisibilityChange:Fo,columnSizing:$t,onColumnSizingChange:Io,enableColumnResizing:Ut=false,columnResizeMode:zo="onChange",layoutMode:Kt="fill",stickyHeader:No=true,showFooter:Lo=true,showToolbar:Oo=true,dir:_o="ltr",flexGrow:ma=true,toolbarVisibility:Ho,className:Bo,tableClassName:$o,tableContainerClassName:jt,getRowClassName:Gt,onRowClick:mt,onActionError:Pa,dragAndDrop:ba,fileUpload:je,virtualization:bt}){let xa=v.useRef(null),Qt=v.useRef(null),Wt=v.useRef(null),Uo=v.useRef(null),gt=v.useRef(null),Ko=v.useRef(null),Ge=v.useMemo(()=>Yn(qe),[qe]),jo=G??le?.globalFilter,Go=pe??le?.sorting,Ua=Oe??le?.pagination?.pageIndex,Ka=he??le?.pagination?.pageSize,Qo=$e??le?.rowSelection,Wo=Bt??le?.columnVisibility,Jo=Se??le?.columnFilters,qo=Ke??le?.expanded,Xo=V??le?.columnOrder,Yo=X??le?.columnPinning,Zo=$t??le?.columnSizing,ei=Ra??le?.density,ai=Oa??le?.viewMode,ti=Ha??le?.showHiddenRows;Gr(le,{columnFilters:Se!==void 0,columnOrder:V!==void 0,columnPinning:X!==void 0,columnSizing:$t!==void 0,columnVisibility:Bt!==void 0,density:Ra!==void 0,expanded:Ke!==void 0,globalFilter:G!==void 0,pagination:Oe!==void 0||he!==void 0,rowSelection:$e!==void 0,showHiddenRows:Ha!==void 0,sorting:pe!==void 0,viewMode:Oa!==void 0});let ni=Me("globalFilter",W,ne),oi=Me("sorting",oa,ne),ii=Me("rowSelection",Ue,ne),ri=Me("columnVisibility",Fo,ne),li=Me("columnFilters",J,ne),si=Me("expanded",ia,ne),di=Me("columnOrder",me,ne),ci=Me("columnPinning",q,ne),ui=Me("columnSizing",Io,ne),pi=Me("density",Sa,ne),mi=Me("viewMode",dt,ne),bi=Me("showHiddenRows",pt,ne),Jt=v.useCallback(s=>{_e?.(s),ne?.(H=>({...H,pagination:{pageIndex:s,pageSize:Ka??H.pagination.pageSize}}));},[_e,ne,Ka]),gi=v.useCallback(s=>{Pe?.(s),ne?.(H=>({...H,pagination:{pageIndex:Ua??H.pagination.pageIndex,pageSize:s}}));},[Pe,ne,Ua]),Ie=v.useCallback((s,H)=>{jr(H,s,Pa);},[Pa]),qt=v.useMemo(()=>fe.map(s=>({...s,onClick:H=>{Ie({actionKey:s.key,row:H,source:"rowAction"},()=>s.onClick(H));}})),[fe,Ie]),Xt=v.useMemo(()=>mt?s=>{Ie({row:s.row,source:"rowClick"},()=>mt(s));}:void 0,[mt,Ie]),fi=v.useCallback((s,H)=>{Pa?.({error:s,row:H,source:"edit"});},[Pa]),{currentColumnFilters:ja,currentColumnOrder:ft,currentColumnPinning:Ga,currentColumnSizing:Qa,currentColumnVisibility:Yt,currentDensity:ka,currentExpanded:Tt,currentPagination:Wa,currentRowSelection:Ja,currentShowHiddenRows:Ct,currentSorting:qa,currentViewMode:ga,effectiveColumnVisibility:Zt,globalFilterValue:Ti,handleDensityChange:Dt,handleShowHiddenRowsChange:wt,handleViewModeChange:ht,localSearchValue:fa,resolvedLoadingRowCount:Ci,resolvedToolbarQueryPlaceholder:Di,selectedRows:wi,setCurrentColumnFilters:en,setCurrentColumnOrder:hi,setCurrentColumnPinning:an,setCurrentColumnVisibility:yi,setCurrentExpanded:Ri,setCurrentRowSelection:tn,setCurrentSorting:Si,setLocalColumnSizing:vi,setLocalPagination:Pi,setLocalSearchValue:yt,shouldRenderInitialLoading:Rt,tableData:xi,tableGetRowId:ki,visibleData:Ei}=uo({columnFilters:Jo,columnOrder:Xo,columnPinning:Yo,columnSizing:Zo,columnPrefsKey:ua,persistence:ra,columnVisibility:Wo,columns:w,containerRef:xa,data:j,density:ei,enableRowSelection:ye,enableToolbarQueryFiltering:Ae,expanded:qo,getRowId:K,hiddenRows:Fe,isLoading:_a,loadingRowCount:ut,manualFiltering:ge,initialState:Y,onColumnFiltersChange:li,onColumnOrderChange:di,onColumnPinningChange:ci,onColumnSizingChange:ui,onColumnVisibilityChange:ri,onDensityChange:pi,onExpandedChange:si,onPageIndexChange:Jt,onRowSelectionChange:ii,onShowHiddenRowsChange:bi,onSortingChange:oi,onToolbarQueryValueChange:ni,onViewModeChange:mi,pageIndex:Ua,pageSize:Ka,resolvedLabels:Ge,rowSelection:Qo,rowsPerPageOptions:ie,selectionActions:$,showHiddenRows:ti,sorting:Go,toolbarQueryDebounceMs:be,toolbarQueryPlaceholder:De,toolbarQueryValue:jo,viewMode:ai}),{cancelEditing:Mi,draftValues:Ai,editingRowId:St,isSavingEdit:Vi,saveEdit:Fi,setDraftValues:Ii,setEditingRowId:zi,startEditingRow:Ni}=M({columns:w,editableRows:$a,onError:fi}),{viewportElement:nn,viewportHeight:on}=b(Wt,ga),Li=v.useCallback(()=>{je?.disabled||Qt.current?.click();},[je?.disabled]),Oi=v.useCallback(s=>{Ie({source:"fileUpload"},()=>je?.onFilesSelected(s));},[je,Ie]),_i=Zn({Button:l,Checkbox:u,DataTableRowActions:D$1,Tooltip:d,TooltipContent:h,TooltipTrigger:r,cancelEditing:Mi,columns:w,editableRows:$a,editingRowId:St,enableRowSelection:ye,getRowCanExpand:Je,isSavingEdit:Vi,labels:Ge,lastSelectedRowIdRef:Ko,renderExpandedRow:y,rowActions:qt,saveEdit:Fi,startEditingRow:Ni,tableRef:gt}),{effectivePageCount:Hi,footerTotalRowCount:Bi,handleFooterPageIndexChange:$i,handleFooterPageSizeChange:Ui,isPageCountKnown:Ki,renderedRows:rn,reorderColumn:ji,rowsToRender:Gi,sentinelRef:ln,table:Z,virtualPaddingBottom:Qi,virtualPaddingTop:Wi,visibleLeafColumns:vt}=no({autoResetPageIndex:false,columnResizeMode:zo,currentColumnFilters:ja,currentColumnOrder:ft,currentColumnPinning:Ga,currentColumnSizing:Qa,currentExpanded:Tt,currentPagination:Wa,currentRowSelection:Ja,currentSorting:qa,defaultColumn:F$1,effectiveColumnVisibility:Zt,enableColumnResizing:Ut,enableRowSelection:ye,getRowCanExpand:Je,globalFilterFn:Le,globalFilterValue:Ti,hasNextPage:ue,handleColumnFiltersChange:en,handleColumnOrderChange:hi,handleColumnPinningChange:an,handleColumnVisibilityChange:yi,handleExpandedChange:Ri,infiniteScroll:Ba,manualFiltering:ge,manualPagination:Be,manualSorting:ee,onActionError:Pa,onPageIndexChange:Jt,onPageSizeChange:gi,pageCount:He,pageIndex:Ua,pageSize:Ka,renderExpandedRow:y,setCurrentRowSelection:tn,setCurrentSorting:Si,setLocalColumnSizing:vi,setLocalPagination:Pi,shouldRenderInitialLoading:Rt,tableColumns:_i,tableData:xi,tableGetRowId:ki,tableRef:gt,totalRowCount:We}),sn=mo({columns:w,columnSizing:Qa,editableRows:!!$a,enableRowSelection:ye,hasRowActions:fe.length>0,hasRowExpansion:!!y,layoutMode:Kt,uiClassNames:o,visibleLeafColumns:vt}),{explicitlySizedColumnIds:Xa,fillMinWidth:Ji,getColumnLayout:qi}=sn,Xi=v.useMemo(()=>new Set(w.flatMap((s,H)=>Object.prototype.hasOwnProperty.call(s,"cell")&&typeof s.cell=="function"?[F(s,H)]:[])),[w]),Yi=vt.length,Zi=v.useMemo(()=>({Checkbox:u,Input:g,Skeleton:x,TableCell:k,TableRow:b$1}),[]),er=v.useMemo(()=>w.some(s=>s.meta?.cardTitle),[w]),ar=v.useCallback((s,H)=>{Xa.has(s)||Object.prototype.hasOwnProperty.call(Z.getState().columnSizing,s)||flushSync(()=>{Z.setColumnSizing(Ca=>({...Ca,[s]:H}));});},[Xa,Z]),tr=v.useCallback(s=>{if(Xa.has(s)){Z.getColumn(s)?.resetSize();return}Z.setColumnSizing(H=>{if(!Object.prototype.hasOwnProperty.call(H,s))return H;let Ca={...H};return delete Ca[s],Ca});},[Xa,Z]),dn=Z.getFilteredRowModel().rows.map(s=>s.original),cn=typeof Ye=="function"?Ye({rows:dn,toolbarQueryValue:fa}):Ye,{columnVisibilityOptions:nr,effectiveToolbarActions:un,handleClearColumnFilters:or,handleToolbarColumnFilterChange:ir,handleToolbarColumnPinningChange:rr,toolbarColumnFilters:lr}=Mo({columns:w,currentColumnFilters:ja,currentColumnPinning:Ga,csvExport:ca,effectiveColumnVisibility:Zt,enableColumnFilters:ve,handleColumnFiltersChange:en,handleColumnPinningChange:an,labels:Ge,table:Z,toolbarActions:i,visibleData:Ei}),sr=v.useMemo(()=>un.map(s=>({...s,onClick:H=>{Ie({actionKey:s.key,source:"toolbarAction"},()=>s.onClick(H));}})),[un,Ie]),dr=v.useMemo(()=>$.map(s=>({...s,onClick:H=>{Ie({actionKey:s.key,source:"selectionAction"},()=>s.onClick(H));}})),[Ie,$]),pn=v.useMemo(()=>({sorting:qa,pagination:Wa,rowSelection:Ja,columnVisibility:Yt,columnFilters:ja,expanded:Tt,columnOrder:ft,columnPinning:Ga,columnSizing:Qa,density:ka,viewMode:ga,showHiddenRows:Ct,globalFilter:fa}),[ja,ft,Ga,Qa,Yt,ka,Tt,Wa,Ja,Ct,qa,ga,fa]),Ea=v.useCallback(()=>Wr(pn),[pn]),Ze=v.useCallback(s=>{s.sorting!==void 0&&Z.setSorting(s.sorting),s.pagination!==void 0&&Z.setPagination(s.pagination),s.rowSelection!==void 0&&Z.setRowSelection(s.rowSelection),s.columnVisibility!==void 0&&Z.setColumnVisibility(s.columnVisibility),s.columnFilters!==void 0&&Z.setColumnFilters(s.columnFilters),s.expanded!==void 0&&Z.setExpanded(s.expanded),s.columnOrder!==void 0&&Z.setColumnOrder(s.columnOrder),s.columnPinning!==void 0&&Z.setColumnPinning(s.columnPinning),s.columnSizing!==void 0&&Z.setColumnSizing(s.columnSizing),s.density!==void 0&&Dt(s.density),s.viewMode!==void 0&&ht(s.viewMode),s.showHiddenRows!==void 0&&wt(s.showHiddenRows),s.globalFilter!==void 0&&yt(s.globalFilter);},[Dt,wt,ht,yt,Z]),Ta=v.useCallback(()=>lo(ra??ua),[ua,ra]),mn=v.useCallback(s=>{s?.clearPersistence&&Ta(),Ze({columnVisibility:Y?.columnVisibility??{},columnOrder:Y?.columnOrder??[],columnPinning:Y?.columnPinning??E(w),columnSizing:Y?.columnSizing??{}});},[Ta,w,Y,Ze]),bn=v.useCallback(s=>{s?.clearPersistence&&Ta(),Ze({sorting:Y?.sorting??[],pagination:Y?.pagination??{pageIndex:0,pageSize:ie[0]??20},rowSelection:Y?.rowSelection??{},columnVisibility:Y?.columnVisibility??{},columnFilters:Y?.columnFilters??[],expanded:Y?.expanded??{},columnOrder:Y?.columnOrder??[],columnPinning:Y?.columnPinning??E(w),columnSizing:Y?.columnSizing??{},density:Y?.density??"comfortable",viewMode:Y?.viewMode??"table",showHiddenRows:Y?.showHiddenRows??false,globalFilter:Y?.globalFilter??""});},[Ta,w,Y,Ze,ie]),gn=v.useCallback(()=>ha(re),[re]),fn=v.useCallback(s=>vo(re,s,Ea()),[Ea,re]),Tn=v.useCallback(s=>{let H=ha(re).find(Ca=>Ca.id===s);return H?(Ze(H.state),re?.onApply?.(H),true):false},[Ze,re]),Cn=v.useCallback((s,H)=>Po(re,s,H),[re]),Dn=v.useCallback(s=>xo(re,s),[re]),wn=v.useCallback(()=>ko(re),[re]),hn=v.useCallback(s=>D({csvExport:s??(ca||true),labels:Ge,table:Z}),[ca,Ge,Z]);return v.useImperativeHandle(Na,()=>({getTable:()=>gt.current,getState:Ea,snapshot:Ea,restore:Ze,resetColumnLayout:mn,resetState:bn,clearPersistedState:Ta,getSavedViews:gn,createSavedView:fn,applySavedView:Tn,renameSavedView:Cn,deleteSavedView:Dn,clearSavedViews:wn,focus:()=>{xa.current?.focus();},scrollToRow:s=>Ao(xa.current,"row",s),scrollToColumn:s=>Ao(xa.current,"column",s),exportCsv:hn}),[Tn,Ta,wn,fn,Dn,hn,gn,Ea,Cn,mn,bn,Ze]),jsx(m,{children:jsxs("div",{ref:xa,"data-dtp-slot":"data-table-root","data-density":ka,dir:_o,tabIndex:-1,className:a("@container/data-table data-table-container-query flex flex-col",ma?"h-full min-h-0 flex-1":"grow",c),onDragEnter:ba?.onDragEnter,onDragOver:ba?.onDragOver,onDragLeave:ba?.onDragLeave,onDrop:ba?.onDrop,children:[je?jsx("input",{ref:Qt,className:"hidden",type:"file",accept:je.accept,multiple:je.multiple??true,disabled:je.disabled,onChange:s=>{let H=s.currentTarget.files;H?.length&&Oi(H),s.currentTarget.value="";}}):null,jsx("div",{"data-dtp-slot":"data-table-layout",className:a("flex w-full flex-col",ma?"min-h-0 flex-1":"grow"),children:jsxs("div",{"data-dtp-slot":"data-table-main",className:a("flex w-full flex-col gap-4",ma?"min-h-0 flex-1":"grow",Bo),children:[Oo?jsx(Xn,{allRows:dn,columnFilters:lr,columnVisibilityOptions:nr,compactToolbar:M$1,customToolbar:we,DataTableToolbar:N,density:ka,description:A,effectiveToolbarActions:sr,enableColumnPinning:ya,enableDensityToggle:lt,enableViewToggle:ct&&!!pa,hiddenRowsLabel:Fe?.label,labels:Ge,onClearColumnFilters:or,onColumnFilterChange:ir,onColumnPinningChange:rr,onDensityChange:Dt,onShowHiddenRowsChange:wt,onToolbarQueryValueChange:yt,onViewModeChange:ht,openFileDialog:je?Li:void 0,selectedRows:wi,selectionActions:dr,showHiddenRows:Ct,table:Z,title:oe,toolbarQueryPlaceholder:Di,toolbarQueryValue:fa,toolbarVisibility:Ho,viewMode:ga}):null,jsx("div",{"data-dtp-slot":"data-table-content",className:a(ma?"flex min-h-0 flex-1 flex-col":""),children:ga==="card"&&pa?jsx(n,{cardClassName:La,cardGridClassName:Xe,cardSizing:st,cardRenderer:pa,currentRowSelection:Ja,DataTableCardView:U,DataTableEmptyState:C,dragAndDrop:ba,editableRows:$a,editingRowId:St,emptyNode:cn,enableRowSelection:ye,flexGrow:ma,getRowClassName:Gt,hasCardTitle:er,infiniteScroll:Ba,localSearchValue:fa,onRowClick:Xt,renderedRows:rn,renderExpandedRow:y,resolvedLabels:Ge,resolvedLoadingRowCount:Ci,rowActions:qt,ScrollArea:f,sentinelRef:ln,setCurrentRowSelection:tn,setEditingRowId:zi,shouldRenderInitialLoading:Rt,tableContainerClassName:jt,uiClassNames:o,virtualization:bt}):jsx(t,{bodyRowComponents:Zi,columnLayouts:sn.columnLayouts,currentDensity:ka,currentSorting:qa,DataTableEmptyState:C,dragAndDrop:ba,draggedColumnIdRef:Uo,draftValues:Ai,editingRowId:St,emptyNode:cn,enableColumnReordering:Re,enableColumnResizing:Ut,explicitCustomCellColumnIds:Xi,fillMinWidth:Ji,flexGrow:ma,getColumnLayout:qi,getRowClassName:Gt,getRowLoadingState:_,infiniteScroll:Ba,layoutMode:Kt,localSearchValue:fa,onRowClick:Xt,primeColumnForResize:ar,renderedRows:rn,renderExpandedRow:y,reorderColumn:ji,resetColumnSize:tr,resolvedLabels:Ge,rowsToRender:Gi,ScrollArea:f,ScrollBar:P,sentinelRef:ln,setDraftValues:Ii,shouldRenderInitialLoading:Rt,stickyHeader:No,summaryRows:va,table:Z,tableClassName:$o,tableContainerClassName:jt,Table:S,TableBody:R,TableCell:k,TableFooter:E$1,TableHead:O,TableHeader:T,TableRow:b$1,tableScrollContainerRef:Wt,tableScrollElement:nn,uiClassNames:o,viewportHeight:on,virtualization:bt,virtualPaddingBottom:Qi,virtualPaddingTop:Wi,visibleLeafColumnCount:Yi,visibleLeafColumns:vt})}),jsx(Jn,{currentPagination:Wa,DataTableFooter:z,effectivePageCount:Hi,footerTotalRowCount:Bi,handleFooterPageIndexChange:$i,handleFooterPageSizeChange:Ui,labels:Ge,pageCountKnown:Ki,rowsPerPageOptions:ie,showFooter:Lo&&!Ba?.enabled,children:ae})]})})]})})}}function jr(e,a,n){let t;try{t=e();}catch(o){n?.({...a,error:o});return}Promise.resolve(t).catch(o=>{n?.({...a,error:o});});}function Me(e,a,n){let t=v.useCallback(o=>{a?.(o),n?.(c=>({...c,[e]:o}));},[e,a,n]);return a||n?t:void 0}function Gr(e,a){let n=v.useRef(new Set);v.useEffect(()=>{if(!(!e||!Qr()))for(let t of Object.keys(a))e[t]===void 0||!a[t]||n.current.has(t)||(n.current.add(t),console.warn(`[data-table-pro] Both state.${t} and its legacy controlled prop were provided. The legacy prop takes precedence during the 4.x compatibility window.`));},[a,e]);}function Qr(){return globalThis.process?.env?.NODE_ENV!=="production"}function Wr(e){return {sorting:e.sorting.map(a=>({...a})),pagination:{...e.pagination},rowSelection:{...e.rowSelection},columnVisibility:{...e.columnVisibility},columnFilters:e.columnFilters.map(a=>({...a})),expanded:typeof e.expanded=="boolean"?e.expanded:{...e.expanded},columnOrder:[...e.columnOrder],columnPinning:{left:e.columnPinning.left?[...e.columnPinning.left]:void 0,right:e.columnPinning.right?[...e.columnPinning.right]:void 0},columnSizing:{...e.columnSizing},density:e.density,viewMode:e.viewMode,showHiddenRows:e.showHiddenRows,globalFilter:e.globalFilter}}function Ao(e,a,n){if(!e)return false;let t=a==="row"?"data-row-id":"data-column-id",o=Array.from(e.querySelectorAll(`[${t}]`)).find(c=>c.getAttribute(t)===n);return o?(o.scrollIntoView?.({block:"nearest",inline:"nearest"}),true):false}export{Wn as a,Jn as b,Xn as c,Zn as d,no as e,Ee as f,uo as g,mo as h,xs as i,Kr as j};//# sourceMappingURL=chunk-3CYYXB7K.js.map -//# sourceMappingURL=chunk-3CYYXB7K.js.map \ No newline at end of file diff --git a/dist/chunk-3CYYXB7K.js.map b/dist/chunk-3CYYXB7K.js.map deleted file mode 100644 index a50a31f..0000000 --- a/dist/chunk-3CYYXB7K.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/core/data-table/data-table-base-card-panel.tsx","../src/core/data-table/data-table-card-panel.tsx","../src/core/data-table/data-table-footer-section.tsx","../src/core/data-table/data-table-toolbar-section.tsx","../src/core/data-table/data-table-labels.ts","../src/core/data-table/use-data-table-columns.tsx","../src/core/data-table/use-data-table-infinite-scroll.ts","../src/core/data-table/use-data-table-pagination-clamp.ts","../src/core/data-table/use-data-table-instance.ts","../src/core/data-table/use-controllable-state.ts","../src/core/data-table/use-data-table-column-prefs.ts","../src/core/data-table/use-data-table-state.ts","../src/core/data-table/use-column-layout.ts","../src/core/data-table/create-data-table-card-view.tsx","../src/core/data-table/create-data-table-empty-state.tsx","../src/core/data-table/create-data-table-pagination.tsx","../src/core/data-table/create-data-table-row-actions.tsx","../src/core/data-table/create-data-table-toolbar.tsx","../src/core/data-table/data-table-table-panel-router.tsx","../src/core/data-table/data-table-saved-views.ts","../src/core/data-table/use-data-table-toolbar-features.ts","../src/core/data-table/create-data-table.tsx"],"names":["DataTableBaseCardPanel","cardClassName","cardGridClassName","cardSizing","cardRenderer","currentRowSelection","DataTableCardView","DataTableEmptyState","dragAndDrop","editableRows","editingRowId","emptyNode","enableRowSelection","flexGrow","getRowClassName","hasCardTitle","infiniteScroll","localSearchValue","onRowClick","renderedRows","renderExpandedRow","resolvedLabels","resolvedLoadingRowCount","rowActions","ScrollArea","sentinelRef","setCurrentRowSelection","setEditingRowId","shouldRenderInitialLoading","tableContainerClassName","uiClassNames","shouldRenderCards","cardScrollContainerRef","Qn","renderCardView","rows","options","jsx","cn","jsxs","LazyDataTableVirtualCardPanel","tt","DataTableCardPanel","props","DataTableFooterSection","children","currentPagination","DataTableFooter","effectivePageCount","footerTotalRowCount","handleFooterPageIndexChange","handleFooterPageSizeChange","labels","pageCountKnown","rowsPerPageOptions","showFooter","DataTableToolbarSection","allRows","columnFilters","columnVisibilityOptions","compactToolbar","customToolbar","DataTableToolbar","description","effectiveToolbarActions","enableColumnPinning","enableDensityToggle","enableViewToggle","hiddenRowsLabel","onClearColumnFilters","onColumnFilterChange","onColumnPinningChange","onDensityChange","onShowHiddenRowsChange","onToolbarQueryValueChange","onViewModeChange","openFileDialog","selectedRows","selectionActions","showHiddenRows","table","title","toolbarQueryPlaceholder","toolbarQueryValue","toolbarVisibility","density","viewMode","columnId","visible","DATA_TABLE_DEFAULT_LABELS","count","label","pageIndex","pageCount","rowId","resolveDataTableLabels","useDataTableColumns","Button","Checkbox","DataTableRowActions","Tooltip","TooltipContent","TooltipTrigger","cancelEditing","columns","getRowCanExpand","isSavingEdit","lastSelectedRowIdRef","saveEdit","startEditingRow","tableRef","selectRowRange","nt","targetRowId","selected","tableInstance","row","isDataTableLoadingRow","startIndex","endIndex","from","to","current","next","defs","UTILITY_COLUMN_SIZE","isExpanded","IconChevronDown","checked","event","column","decorateFilterableColumn","useDataTableInfiniteScroll","enabled","hasMore","isLoadingMore","onLoadMore","onError","ea","isRequestInFlightRef","onLoadMoreEvent","onErrorEvent","error","target","observer","entries","result","useDataTablePaginationClamp","maxPageIndex","onPageIndexChange","setLocalPageIndex","ao","nextPageIndex","useDataTableInstance","autoResetPageIndex","columnResizeMode","currentColumnFilters","currentColumnOrder","currentColumnPinning","currentColumnSizing","currentExpanded","currentSorting","defaultColumn","effectiveColumnVisibility","enableColumnResizing","globalFilterFn","globalFilterValue","hasNextPage","handleColumnFiltersChange","handleColumnOrderChange","handleColumnPinningChange","handleColumnVisibilityChange","handleExpandedChange","manualFiltering","manualPagination","manualSorting","onActionError","onPageSizeChange","pageSize","setCurrentSorting","setLocalColumnSizing","setLocalPagination","tableColumns","tableData","tableGetRowId","totalRowCount","generatedColumnIds","ke","index","getColumnId","effectiveColumnOrder","columnIds","dataColumnIds","isUtilityColumnId","dataColumnIdSet","orderedDataColumnIds","unorderedDataColumnIds","effectiveColumnPinning","columnIdSet","dataLeft","dataRight","tableState","handlePaginationChange","updater","nextValue","handleColumnSizingChange","useReactTable","getCoreRowModel","getFilteredRowModel","getSortedRowModel","getExpandedRowModel","getPaginationRowModel","dataTableGlobalFilterFn","visibleLeafColumns","reorderColumn","sourceColumnId","targetColumnId","defaultOrder","nextOrder","moveColumnInOrder","rowsToRender","rowIndex","usesManualRows","derivedTotalRowCount","effectiveTotalRowCount","isPageCountKnown","nextPageSize","useControllableState","defaultValue","onChange","value","uncontrolledValue","setUncontrolledValue","aa","currentValue","currentValueRef","setValue","STORAGE_PREFIX","DEFAULT_VERSION","ALL_SLICES","readDataTableColumnPrefs","input","config","resolvePersistenceConfig","storage","resolveStorage","storageKey","getStorageKey","parsed","targetVersion","candidate","isPersistencePayload","selectPersistenceSlices","validateDataTableColumnPrefs","clearDataTableColumnPrefs","usePersistDataTableColumnPrefs","key","persistence","prefs","version","debounceMs","selectedState","serialized","da","payload","operation","write","timeout","isRecord","slices","slice","visibility","validateBooleanRecord","sizing","validateSizingRecord","order","validateStringArray","left","right","isDataTableDensity","entry","item","useDataTableState","columnOrder","columnPinning","columnSizing","columnPrefsKey","columnVisibility","data","enableToolbarQueryFiltering","expanded","getRowId","hiddenRows","initialState","isLoading","loadingRowCount","onColumnFiltersChange","onColumnOrderChange","onColumnSizingChange","onColumnVisibilityChange","onExpandedChange","onRowSelectionChange","onSortingChange","rowSelection","sorting","toolbarQueryDebounceMs","containerRef","persistenceConfig","Q","persistedColumnPrefs","localPagination","currentColumnVisibility","setCurrentColumnVisibility","setCurrentColumnFilters","setCurrentExpanded","setCurrentColumnOrder","setCurrentColumnPinning","getInitialColumnPinning","setCurrentColumnSizing","currentViewMode","setCurrentViewMode","currentShowHiddenRows","setCurrentShowHiddenRows","currentDensity","setCurrentDensity","resolvedToolbarQueryValue","resolvedToolbarQueryPlaceholder","resolvedToolbarQueryDebounceMs","setLocalSearchValue","containerWidth","useDataTableContainerWidth","hasOnSearchValueChange","lastReportedSearchValueRef","onToolbarQueryValueChangeEvent","handleViewModeChange","nextViewMode","handleShowHiddenRowsChange","nextShowHiddenRows","handleDensityChange","nextDensity","resetPageIndexForFilterChange","filterResetSignature","lastFilterResetSignatureRef","responsiveColumnVisibility","isHiddenAtContainerWidth","visibleData","isRowVisible","loadingRows","createDataTableLoadingRows","getDataTableLoadingRowId","shouldResolveSelectedRows","rowById","EMPTY_COLUMN_LAYOUT","useColumnLayout","hasRowActions","hasRowExpansion","layoutMode","explicitlySizedColumnIds","ze","ids","minimumColumnWidths","widths","configuredMinWidth","getConfiguredColumnMinWidth","pinnedColumns","leftOffset","getFixedSide","getColumnLayoutSize","rightOffset","fillColumnId","dataColumns","fixedWidthColumnIds","columnLayouts","layouts","isSelectionColumn","isExpansionColumn","isActionsColumn","isUtilityColumn","isSpacerColumn","isFlexibleFillColumn","columnMinWidth","shouldFixWidth","baseStyle","fixedSide","pinnedStyle","cellStyle","getPinnedColumnClassName","fillMinWidth","total","layout","getColumnLayout","createDataTableCardView","ui","Card","CardContent","CardHeader","Skeleton","onEditingRowIdChange","getRowDraggable","onRowDragStart","onRowDragEnd","resolvedCardSizing","resolvedCardGridClassName","getCardGridClassName","cardGridClasses","cardItemClasses","stateClassName","getCardItemClassName","_","originalRow","isSelected","isEditing","hasCardActions","showCardGradient","showCardOverlayControls","handleCardActivate","getCardRendererClassName","updateRowSelection","nextSelection","createDataTableEmptyState","Empty","EmptyContent","EmptyDescription","EmptyHeader","EmptyMedia","EmptyTitle","IconInbox","createDataTablePagination","Pagination","PaginationContent","PaginationEllipsis","PaginationFirst","PaginationItem","PaginationLast","PaginationLink","PaginationNext","PaginationPrevious","Select","SelectContent","SelectGroup","SelectItem","SelectTrigger","SelectValue","DataTablePagination","pages","getVisiblePages","canGoPrevious","canGoNext","lastPageIndex","option","IconDatabase","currentPageIndex","currentPage","page","orderedPages","items","previous","createDataTableRowActions","DropdownMenu","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","onStartEditing","onCancelEditing","actions","action","canUseRowAction","stopRowClickPropagation","Do","IconX","allowEdit","canEditRow","IconDots","IconEdit","Icon","resolveRowActionLabel","createDataTableToolbar","ButtonGroup","DropdownMenuCheckboxItem","DropdownMenuLabel","InputGroup","InputGroupAddon","InputGroupInput","toolbarActions","compactSearchInputRef","wa","isCompactSearchVisible","setIsCompactSearchVisible","compactToolbarIconButtonClassName","primaryActions","trailingActions","showTitle","showSearch","showActions","showTrailingActions","showOptions","showViewToggle","showCustomToolbar","hasVisibleTitle","hasVisibleSearch","hasVisiblePrimaryActions","hasVisibleSelectionActions","hasVisibleOptions","hasVisibleViewToggle","hasVisibleTrailingActions","hasVisibleCustomToolbar","hasVisibleCompactToolbar","selectedRowCountLabel","Fragment","IconSearch","collapsesToIcon","button","disabled","IconAdjustmentsHorizontal","IconList","IconLayoutGrid","filter","ToolbarColumnFilterControl","hasColumnFilterValue","selectedValues","selectedLabel","nextValues","LazyDataTableVirtualTablePanel","rt","DataTableTablePanelRouter","DataTableTablePanel","DEFAULT_SLICES","fallbackId","readDataTableSavedViews","view","validateSavedView","createDataTableSavedView","name","state","normalizedName","now","createSavedViewId","selectSavedViewSlices","views","writeViews","cloneSavedView","renameDataTableSavedView","id","renamed","deleteDataTableSavedView","clearDataTableSavedViews","snapshots","snapshot","cloneStateSlice","validateState","validateSorting","pagination","validatePagination","filters","validateFilters","pinning","validatePinning","useDataTableToolbarFeatures","enableColumnFilters","csvExport","Qe","header","accessorKey","getAccessorKey","startCase","pinned","toolbarColumnFilters","rawOptions","normalizeColumnFilterOptions","handleToolbarColumnFilterChange","hasFilterValue","handleClearColumnFilters","handleToolbarColumnPinningChange","side","handleCsvExport","exportDataTableCsv","IconDownload","createDataTable","createDataTableWithPanels","rootClassName","Input","ScrollBar","Table","TableBody","TableCell","TableFooter","TableHead","TableHeader","TableRow","TooltipProvider","enableColumnReordering","savedViews","unifiedState","onStateChange","apiRef","summaryRows","emptyState","getRowLoadingState","stickyHeader","showToolbar","dir","className","tableClassName","fileUpload","virtualization","fileInputRef","tableScrollContainerRef","draggedColumnIdRef","resolvedSorting","resolvedPageIndex","resolvedPageSize","resolvedRowSelection","resolvedColumnVisibility","resolvedColumnFilters","resolvedExpanded","resolvedColumnOrder","resolvedColumnPinning","resolvedColumnSizing","resolvedDensity","resolvedViewMode","resolvedShowHiddenRows","useDataTableStateConflictWarnings","handleToolbarQueryValueChange","useDataTableStateSliceChange","handleSortingPropChange","handleRowSelectionPropChange","handleColumnVisibilityPropChange","handleColumnFiltersPropChange","handleExpandedPropChange","handleColumnOrderPropChange","handleColumnPinningPropChange","handleColumnSizingPropChange","handleDensityPropChange","handleViewModePropChange","handleShowHiddenRowsPropChange","handlePageIndexPropChange","handlePageSizePropChange","runAction","context","runDataTableAction","guardedRowActions","guardedOnRowClick","handleEditError","draftValues","setDraftValues","useRowEditing","tableScrollElement","viewportHeight","useDataTableScrollViewport","handleSelectedFiles","files","virtualPaddingBottom","virtualPaddingTop","columnLayout","explicitCustomCellColumnIds","visibleLeafColumnCount","bodyRowComponents","primeColumnForResize","currentSize","flushSync","resetColumnSize","filteredData","guardedToolbarActions","guardedSelectionActions","currentDataTableState","getCurrentState","cloneDataTableState","restoreState","nextState","clearPersistedState","resetColumnLayout","resetState","getSavedViews","createSavedView","applySavedView","renameSavedView","deleteSavedView","clearSavedViews","exportCsvFromApi","scrollDataTableElementIntoView","onLegacyChange","handleChange","legacySlices","warnedSlicesRef","isDevelopmentEnvironment","container","kind","attribute","element"],"mappings":"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","file":"chunk-3CYYXB7K.js","sourcesContent":["import * as React from \"react\";\nimport type { Row } from \"@tanstack/react-table\";\nimport { cn } from \"../../lib/utils\";\nimport type { DataTableCardPanelProps } from \"./data-table-card-panel-types\";\n\nexport function DataTableBaseCardPanel({\n cardClassName,\n cardGridClassName,\n cardSizing,\n cardRenderer,\n currentRowSelection,\n DataTableCardView,\n DataTableEmptyState,\n dragAndDrop,\n editableRows,\n editingRowId,\n emptyNode,\n enableRowSelection,\n flexGrow,\n getRowClassName,\n hasCardTitle,\n infiniteScroll,\n localSearchValue,\n onRowClick,\n renderedRows,\n renderExpandedRow,\n resolvedLabels,\n resolvedLoadingRowCount,\n rowActions = [],\n ScrollArea,\n sentinelRef,\n setCurrentRowSelection,\n setEditingRowId,\n shouldRenderInitialLoading,\n tableContainerClassName,\n uiClassNames,\n}: DataTableCardPanelProps) {\n const shouldRenderCards =\n shouldRenderInitialLoading || renderedRows.length > 0;\n const cardScrollContainerRef = React.useRef(null);\n\n const renderCardView = (\n rows: Array>,\n options?: {\n isLoading?: boolean;\n loadingRowCount?: number;\n },\n ) => (\n \n );\n\n return (\n \n \n \n {shouldRenderCards ? (\n shouldRenderInitialLoading ? (\n renderCardView([], {\n isLoading: true,\n loadingRowCount: resolvedLoadingRowCount,\n })\n ) : (\n renderCardView(renderedRows)\n )\n ) : (\n
\n {emptyNode ?? (\n \n )}\n
\n )}\n\n {infiniteScroll?.enabled && !shouldRenderInitialLoading ? (\n
\n
\n
\n ) : null}\n
\n \n \n );\n}\n","import * as React from \"react\";\nimport { DataTableBaseCardPanel } from \"./data-table-base-card-panel\";\nimport type { DataTableCardPanelProps } from \"./data-table-card-panel-types\";\n\nconst LazyDataTableVirtualCardPanel = React.lazy(async () => {\n const module = await import(\"./data-table-virtual-card-panel\");\n return { default: module.DataTableVirtualCardPanel };\n}) as unknown as typeof DataTableBaseCardPanel;\n\nexport function DataTableCardPanel(\n props: DataTableCardPanelProps,\n) {\n const config =\n typeof props.virtualization === \"object\"\n ? props.virtualization.card\n : undefined;\n\n if (config?.enabled !== true) {\n return ;\n }\n\n return (\n }>\n \n \n );\n}\n\nexport type { DataTableCardPanelProps };\n","import * as React from \"react\";\nimport type { PaginationState } from \"@tanstack/react-table\";\nimport type { DataTableLabels } from \"../types\";\n\ntype DataTableFooterSectionProps = {\n children?: React.ReactNode;\n currentPagination: PaginationState;\n DataTableFooter: React.ElementType;\n effectivePageCount: number;\n footerTotalRowCount: number | undefined;\n handleFooterPageIndexChange: (pageIndex: number) => void;\n handleFooterPageSizeChange: (pageSize: number) => void;\n labels: DataTableLabels;\n pageCountKnown?: boolean;\n rowsPerPageOptions: Array;\n showFooter: boolean;\n};\n\nexport function DataTableFooterSection({\n children,\n currentPagination,\n DataTableFooter,\n effectivePageCount,\n footerTotalRowCount,\n handleFooterPageIndexChange,\n handleFooterPageSizeChange,\n labels,\n pageCountKnown = true,\n rowsPerPageOptions,\n showFooter,\n}: DataTableFooterSectionProps) {\n if (!showFooter && !children) {\n return null;\n }\n\n return (\n
\n {showFooter ? (\n \n ) : null}\n {children}\n
\n );\n}\n","import * as React from \"react\";\nimport type { Table as TanStackTable } from \"@tanstack/react-table\";\nimport type { DataTableLabels, DataTableProps } from \"../types\";\n\ntype DataTableToolbarSectionProps = {\n allRows: Array;\n columnFilters: Array;\n columnVisibilityOptions: Array;\n compactToolbar: React.ReactNode;\n customToolbar: React.ReactNode;\n DataTableToolbar: React.ElementType;\n description: string | undefined;\n effectiveToolbarActions: Array;\n enableColumnPinning: boolean;\n enableDensityToggle: boolean;\n enableViewToggle: boolean;\n hiddenRowsLabel: string | undefined;\n labels: DataTableLabels;\n onClearColumnFilters: () => void;\n onColumnFilterChange: (columnId: string, value: unknown) => void;\n onColumnPinningChange: (columnId: string, side: \"left\" | \"right\" | false) => void;\n onDensityChange: (density: \"compact\" | \"comfortable\" | \"spacious\") => void;\n onShowHiddenRowsChange: (showHiddenRows: boolean) => void;\n onToolbarQueryValueChange: (value: string) => void;\n onViewModeChange: (viewMode: \"table\" | \"card\") => void;\n openFileDialog: (() => void) | undefined;\n selectedRows: Array;\n selectionActions: DataTableProps[\"selectionActions\"];\n showHiddenRows: boolean;\n table: TanStackTable;\n title: string | undefined;\n toolbarQueryPlaceholder: string;\n toolbarQueryValue: string;\n toolbarVisibility: DataTableProps[\"toolbarVisibility\"];\n density: \"compact\" | \"comfortable\" | \"spacious\";\n viewMode: \"table\" | \"card\";\n};\n\nexport function DataTableToolbarSection({\n allRows,\n columnFilters,\n columnVisibilityOptions,\n compactToolbar,\n customToolbar,\n DataTableToolbar,\n description,\n effectiveToolbarActions,\n enableColumnPinning,\n enableDensityToggle,\n enableViewToggle,\n hiddenRowsLabel,\n labels,\n onClearColumnFilters,\n onColumnFilterChange,\n onColumnPinningChange,\n onDensityChange,\n onShowHiddenRowsChange,\n onToolbarQueryValueChange,\n onViewModeChange,\n openFileDialog,\n selectedRows,\n selectionActions,\n showHiddenRows,\n table,\n title,\n toolbarQueryPlaceholder,\n toolbarQueryValue,\n toolbarVisibility,\n density,\n viewMode,\n}: DataTableToolbarSectionProps) {\n return (\n
\n {\n table.getColumn(columnId)?.toggleVisibility(visible);\n }}\n enableColumnPinning={enableColumnPinning}\n onColumnPinningChange={onColumnPinningChange}\n columnFilters={columnFilters}\n onColumnFilterChange={onColumnFilterChange}\n onClearColumnFilters={onClearColumnFilters}\n density={density}\n onDensityChange={onDensityChange}\n enableDensityToggle={enableDensityToggle}\n labels={labels}\n toolbarVisibility={toolbarVisibility}\n openFileDialog={openFileDialog}\n />\n
\n );\n}\n","import type { DataTableLabels } from \"../types\";\n\ntype ResolvedDataTableLabels = Required;\n\nexport const DATA_TABLE_DEFAULT_LABELS: ResolvedDataTableLabels = {\n searchPlaceholder: \"Search rows...\",\n searchTable: \"Search table\",\n clearSearch: \"Clear search\",\n noRowsTitle: \"No rows yet\",\n noRowsDescription: \"Create a record or refresh this view once data exists.\",\n noMatchingRowsTitle: \"No matching rows\",\n noMatchingRowsDescription: \"Try a different search term or clear filters.\",\n tableOptions: \"Show table options\",\n columns: \"Columns\",\n filters: \"Filters\",\n clearFilters: \"Clear filters\",\n selectedRows: (count) =>\n `${count} record${count === 1 ? \"\" : \"s\"} selected`,\n showHiddenRows: (label) => `Show ${label}`,\n recordsPerPage: \"Records per page\",\n totalRecords: (count) => `Total records: ${count}`,\n pageStatus: (pageIndex, pageCount) => `Page ${pageIndex + 1} of ${pageCount}`,\n pageStatusUnknown: (pageIndex) => `Page ${pageIndex + 1}`,\n pagination: \"Pagination\",\n morePages: \"More pages\",\n firstPage: \"First page\",\n previousPage: \"Previous page\",\n nextPage: \"Next page\",\n lastPage: \"Last page\",\n selectAllVisibleRows: \"Select all visible rows\",\n selectRow: \"Select row\",\n selectCardRow: (rowId) => `Select row ${rowId}`,\n switchToTableView: \"Switch to table view\",\n switchToCardView: \"Switch to card view\",\n tableView: \"Table view\",\n cardView: \"Card view\",\n allFilterOptions: \"All\",\n actions: \"Actions\",\n rowActions: \"Row actions\",\n editRow: \"Edit row\",\n saveEdit: \"Save\",\n cancelEdit: \"Cancel editing\",\n expandRow: \"Expand row\",\n collapseRow: \"Collapse row\",\n exportCsv: \"Export CSV\",\n density: \"Density\",\n compactDensity: \"Compact\",\n comfortableDensity: \"Comfortable\",\n spaciousDensity: \"Spacious\",\n pinLeft: \"Pin left\",\n pinRight: \"Pin right\",\n unpin: \"Unpin\",\n};\n\nexport function resolveDataTableLabels(\n labels?: Partial,\n): ResolvedDataTableLabels {\n return {\n ...DATA_TABLE_DEFAULT_LABELS,\n ...labels,\n } as ResolvedDataTableLabels;\n}\n","import * as React from \"react\";\nimport type { ColumnDef, Table as TanStackTable } from \"@tanstack/react-table\";\nimport { IconChevronDown } from \"../icons\";\nimport type {\n DataTableEditableRowsConfig,\n DataTableLabels,\n DataTableProps,\n DataTableRowAction,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport {\n UTILITY_COLUMN_SIZE,\n decorateFilterableColumn,\n isDataTableLoadingRow,\n} from \"./data-table-utils\";\nimport { DATA_TABLE_DEFAULT_LABELS } from \"./data-table-labels\";\n\ntype DataTableRowActionsComponentProps = {\n editableRows?: DataTableEditableRowsConfig;\n isEditing: boolean;\n labels: DataTableLabels;\n onCancelEditing: () => void;\n onStartEditing: () => void;\n row: TData;\n rowActions: Array>;\n};\n\nexport function useDataTableColumns({\n Button,\n Checkbox,\n DataTableRowActions,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cancelEditing,\n columns,\n editableRows,\n editingRowId,\n enableRowSelection,\n getRowCanExpand,\n isSavingEdit,\n labels,\n lastSelectedRowIdRef,\n renderExpandedRow,\n rowActions,\n saveEdit,\n startEditingRow,\n tableRef,\n}: {\n Button: DataTableUiKit[\"Button\"];\n Checkbox: DataTableUiKit[\"Checkbox\"];\n DataTableRowActions: React.ComponentType<\n DataTableRowActionsComponentProps\n >;\n Tooltip: DataTableUiKit[\"Tooltip\"];\n TooltipContent: DataTableUiKit[\"TooltipContent\"];\n TooltipTrigger: DataTableUiKit[\"TooltipTrigger\"];\n cancelEditing: () => void;\n columns: DataTableProps[\"columns\"];\n editableRows: DataTableProps[\"editableRows\"];\n editingRowId: string | null;\n enableRowSelection: boolean;\n getRowCanExpand: DataTableProps[\"getRowCanExpand\"];\n isSavingEdit: boolean;\n labels: DataTableLabels;\n lastSelectedRowIdRef: React.MutableRefObject;\n renderExpandedRow: DataTableProps[\"renderExpandedRow\"];\n rowActions: Array>;\n saveEdit: (row: TData) => Promise;\n startEditingRow: (row: TData, rowId: string) => void;\n tableRef: React.RefObject | null>;\n}) {\n const selectRowRange = React.useCallback(\n (targetRowId: string, selected: boolean) => {\n const tableInstance = tableRef.current;\n if (!tableInstance || !lastSelectedRowIdRef.current) {\n return;\n }\n\n const rows = tableInstance\n .getRowModel()\n .rows.filter((row) => !isDataTableLoadingRow(row.original));\n const startIndex = rows.findIndex(\n (row) => row.id === lastSelectedRowIdRef.current,\n );\n const endIndex = rows.findIndex((row) => row.id === targetRowId);\n\n if (startIndex < 0 || endIndex < 0) {\n return;\n }\n\n const from = Math.min(startIndex, endIndex);\n const to = Math.max(startIndex, endIndex);\n tableInstance.setRowSelection((current) => {\n const next = { ...current };\n for (const row of rows.slice(from, to + 1)) {\n if (selected) {\n next[row.id] = true;\n } else {\n delete next[row.id];\n }\n }\n return next;\n });\n },\n [lastSelectedRowIdRef, tableRef],\n );\n\n return React.useMemo>>(() => {\n const defs: Array> = [];\n\n if (renderExpandedRow) {\n defs.push({\n id: \"__expand__\",\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n size: UTILITY_COLUMN_SIZE,\n minSize: UTILITY_COLUMN_SIZE,\n maxSize: UTILITY_COLUMN_SIZE,\n header: () => {labels.expandRow},\n cell: ({ row }) => {\n const canExpand =\n getRowCanExpand?.(row.original) ?? Boolean(renderExpandedRow);\n if (!canExpand) {\n return null;\n }\n\n const isExpanded = row.getIsExpanded();\n return (\n
\n row.toggleExpanded()}\n >\n \n \n
\n );\n },\n });\n }\n\n if (enableRowSelection) {\n defs.push({\n id: \"__select__\",\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n size: UTILITY_COLUMN_SIZE,\n minSize: UTILITY_COLUMN_SIZE,\n maxSize: UTILITY_COLUMN_SIZE,\n header: ({ table }) => (\n
\n {\n table.toggleAllPageRowsSelected(checked === true);\n }}\n aria-label={\n labels.selectAllVisibleRows ??\n DATA_TABLE_DEFAULT_LABELS.selectAllVisibleRows\n }\n />\n
\n ),\n cell: ({ row }) => (\n
\n ) => {\n if (!event.shiftKey || !lastSelectedRowIdRef.current) {\n lastSelectedRowIdRef.current = row.id;\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n selectRowRange(row.id, !row.getIsSelected());\n lastSelectedRowIdRef.current = row.id;\n }}\n onCheckedChange={(checked: boolean | \"indeterminate\") => {\n lastSelectedRowIdRef.current = row.id;\n row.toggleSelected(checked === true);\n }}\n aria-label={\n labels.selectRow ?? DATA_TABLE_DEFAULT_LABELS.selectRow\n }\n />\n
\n ),\n });\n }\n\n defs.push(...columns.map((column) => decorateFilterableColumn(column)));\n\n if (rowActions.length || editableRows) {\n defs.push({\n id: \"__actions__\",\n enableSorting: false,\n enableResizing: false,\n enableHiding: false,\n size: UTILITY_COLUMN_SIZE,\n minSize: UTILITY_COLUMN_SIZE,\n maxSize: UTILITY_COLUMN_SIZE,\n header: () => {labels.actions},\n cell: ({ row }) => {\n const rowId = row.id;\n const isEditing = editingRowId === rowId;\n\n if (isEditing) {\n return (\n
\n {\n void saveEdit(row.original);\n }}\n >\n {labels.saveEdit}\n \n \n \n \n \n {labels.cancelEdit}\n \n \n {labels.cancelEdit}\n \n
\n );\n }\n\n return (\n
\n {\n startEditingRow(row.original, row.id);\n }}\n onCancelEditing={() => {}}\n labels={labels}\n />\n
\n );\n },\n });\n }\n\n return defs;\n }, [\n Button,\n Checkbox,\n DataTableRowActions,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cancelEditing,\n columns,\n editableRows,\n editingRowId,\n enableRowSelection,\n getRowCanExpand,\n isSavingEdit,\n labels,\n lastSelectedRowIdRef,\n renderExpandedRow,\n rowActions,\n saveEdit,\n selectRowRange,\n startEditingRow,\n ]);\n}\n","import * as React from \"react\";\n\nexport function useDataTableInfiniteScroll({\n enabled,\n hasMore,\n isLoadingMore,\n onLoadMore,\n onError,\n}: {\n enabled: boolean;\n hasMore: boolean;\n isLoadingMore?: boolean;\n onLoadMore: () => void | Promise;\n onError?: (error: unknown) => void;\n}) {\n const sentinelRef = React.useRef(null);\n const isRequestInFlightRef = React.useRef(false);\n const onLoadMoreEvent = React.useEffectEvent(onLoadMore);\n const onErrorEvent = React.useEffectEvent((error: unknown) => {\n onError?.(error);\n });\n\n React.useEffect(() => {\n if (!enabled || !hasMore || isLoadingMore) {\n return;\n }\n\n const target = sentinelRef.current;\n if (!target) {\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && !isRequestInFlightRef.current) {\n isRequestInFlightRef.current = true;\n\n let result: void | Promise;\n try {\n result = onLoadMoreEvent();\n } catch (error) {\n isRequestInFlightRef.current = false;\n onErrorEvent(error);\n return;\n }\n\n void Promise.resolve(result)\n .catch((error: unknown) => {\n onErrorEvent(error);\n })\n .finally(() => {\n isRequestInFlightRef.current = false;\n });\n }\n },\n {\n rootMargin: \"200px 0px 200px 0px\",\n },\n );\n\n observer.observe(target);\n\n return () => {\n observer.disconnect();\n };\n }, [enabled, hasMore, isLoadingMore]);\n\n return sentinelRef;\n}\n","import * as React from \"react\";\n\nexport function useDataTablePaginationClamp({\n enabled,\n maxPageIndex,\n onPageIndexChange,\n pageIndex,\n setLocalPageIndex,\n}: {\n enabled: boolean;\n maxPageIndex: number;\n onPageIndexChange?: (pageIndex: number) => void;\n pageIndex: number;\n setLocalPageIndex: (pageIndex: number) => void;\n}) {\n React.useEffect(() => {\n if (!enabled) {\n return;\n }\n\n if (pageIndex >= 0 && pageIndex <= maxPageIndex) {\n return;\n }\n\n const nextPageIndex = Math.min(Math.max(pageIndex, 0), maxPageIndex);\n setLocalPageIndex(nextPageIndex);\n onPageIndexChange?.(nextPageIndex);\n }, [enabled, maxPageIndex, onPageIndexChange, pageIndex, setLocalPageIndex]);\n}\n","import * as React from \"react\";\nimport {\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport type {\n ColumnDef,\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n FilterFnOption,\n OnChangeFn,\n PaginationState,\n Row,\n SortingState,\n Table as TanStackTable,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport type { DataTableProps } from \"../types\";\nimport {\n dataTableGlobalFilterFn,\n getColumnId,\n isUtilityColumnId,\n moveColumnInOrder,\n} from \"./data-table-utils\";\nimport { useDataTableInfiniteScroll } from \"./use-data-table-infinite-scroll\";\nimport { useDataTablePaginationClamp } from \"./use-data-table-pagination-clamp\";\n\nexport function useDataTableInstance({\n autoResetPageIndex,\n columnResizeMode,\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentColumnSizing,\n currentExpanded,\n currentPagination,\n currentRowSelection,\n currentSorting,\n defaultColumn,\n effectiveColumnVisibility,\n enableColumnResizing,\n enableRowSelection,\n getRowCanExpand,\n globalFilterFn,\n globalFilterValue,\n hasNextPage,\n handleColumnFiltersChange,\n handleColumnOrderChange,\n handleColumnPinningChange,\n handleColumnVisibilityChange,\n handleExpandedChange,\n infiniteScroll,\n manualFiltering,\n manualPagination,\n manualSorting,\n onActionError,\n onPageIndexChange,\n onPageSizeChange,\n pageCount,\n pageIndex,\n pageSize,\n renderExpandedRow,\n setCurrentRowSelection,\n setCurrentSorting,\n setLocalColumnSizing,\n setLocalPagination,\n shouldRenderInitialLoading,\n tableColumns,\n tableData,\n tableGetRowId,\n tableRef,\n totalRowCount,\n}: {\n autoResetPageIndex: boolean;\n columnResizeMode: DataTableProps[\"columnResizeMode\"];\n currentColumnFilters: ColumnFiltersState;\n currentColumnOrder: ColumnOrderState;\n currentColumnPinning: ColumnPinningState;\n currentColumnSizing: ColumnSizingState;\n currentExpanded: ExpandedState;\n currentPagination: PaginationState;\n currentRowSelection: Record;\n currentSorting: SortingState;\n currentViewMode: \"table\" | \"card\";\n defaultColumn: Partial>;\n effectiveColumnVisibility: VisibilityState;\n enableColumnResizing: boolean;\n enableRowSelection: boolean;\n getRowCanExpand: DataTableProps[\"getRowCanExpand\"];\n globalFilterFn: FilterFnOption | undefined;\n globalFilterValue: string;\n hasNextPage?: DataTableProps[\"hasNextPage\"];\n handleColumnFiltersChange: OnChangeFn;\n handleColumnOrderChange: OnChangeFn;\n handleColumnPinningChange: OnChangeFn;\n handleColumnVisibilityChange: OnChangeFn;\n handleExpandedChange: OnChangeFn;\n infiniteScroll: DataTableProps[\"infiniteScroll\"];\n manualFiltering: boolean;\n manualPagination: boolean;\n manualSorting: boolean;\n onActionError?: DataTableProps[\"onActionError\"];\n onPageIndexChange: DataTableProps[\"onPageIndexChange\"];\n onPageSizeChange: DataTableProps[\"onPageSizeChange\"];\n pageCount: DataTableProps[\"pageCount\"];\n pageIndex: DataTableProps[\"pageIndex\"];\n pageSize: DataTableProps[\"pageSize\"];\n renderExpandedRow: DataTableProps[\"renderExpandedRow\"];\n setCurrentRowSelection: OnChangeFn>;\n setCurrentSorting: OnChangeFn;\n setLocalColumnSizing: OnChangeFn;\n setLocalPagination: React.Dispatch>;\n shouldRenderInitialLoading: boolean;\n tableColumns: Array>;\n tableData: Array;\n tableGetRowId: DataTableProps[\"getRowId\"];\n tableRef: React.RefObject | null>;\n tableScrollElement: HTMLElement | null;\n /**\n * @deprecated Filtering now runs through TanStack Table. Retained so\n * advanced 4.x hook callers remain source-compatible.\n */\n toolbarFilteredData?: Array;\n totalRowCount: DataTableProps[\"totalRowCount\"];\n virtualization: DataTableProps[\"virtualization\"];\n viewportHeight: number;\n}) {\n const generatedColumnIds = React.useMemo(() => {\n return tableColumns.map((column, index) =>\n getColumnId(column as DataTableProps[\"columns\"][number], index),\n );\n }, [tableColumns]);\n\n const effectiveColumnOrder = React.useMemo(() => {\n const columnIds = generatedColumnIds;\n const dataColumnIds = columnIds.filter(\n (columnId) =>\n !isUtilityColumnId(columnId) && columnId !== \"__spacer__\",\n );\n const dataColumnIdSet = new Set(dataColumnIds);\n const orderedDataColumnIds = currentColumnOrder.filter((columnId) =>\n dataColumnIdSet.has(columnId),\n );\n const unorderedDataColumnIds = dataColumnIds.filter(\n (columnId) => !orderedDataColumnIds.includes(columnId),\n );\n\n return [\n ...columnIds.filter(\n (columnId) => columnId === \"__expand__\" || columnId === \"__select__\",\n ),\n ...orderedDataColumnIds,\n ...unorderedDataColumnIds,\n ...columnIds.filter((columnId) => columnId === \"__spacer__\"),\n ...columnIds.filter((columnId) => columnId === \"__actions__\"),\n ];\n }, [currentColumnOrder, generatedColumnIds]);\n\n const effectiveColumnPinning = React.useMemo(() => {\n const columnIdSet = new Set(generatedColumnIds);\n const dataColumnIdSet = new Set(\n generatedColumnIds.filter(\n (columnId) =>\n !isUtilityColumnId(columnId) && columnId !== \"__spacer__\",\n ),\n );\n const dataLeft = (currentColumnPinning.left ?? []).filter((columnId) =>\n dataColumnIdSet.has(columnId),\n );\n const dataRight = (currentColumnPinning.right ?? []).filter((columnId) =>\n dataColumnIdSet.has(columnId),\n );\n\n return {\n left: [\n ...[\"__expand__\", \"__select__\"].filter((columnId) =>\n columnIdSet.has(columnId),\n ),\n ...dataLeft,\n ],\n right: [\n ...dataRight,\n ...[\"__actions__\"].filter((columnId) => columnIdSet.has(columnId)),\n ],\n };\n }, [currentColumnPinning, generatedColumnIds]);\n\n const tableState = React.useMemo(\n () => ({\n sorting: currentSorting,\n pagination: currentPagination,\n rowSelection: currentRowSelection,\n columnVisibility: effectiveColumnVisibility,\n columnFilters: currentColumnFilters,\n globalFilter: globalFilterValue,\n expanded: currentExpanded,\n columnOrder: effectiveColumnOrder,\n columnPinning: effectiveColumnPinning,\n columnSizing: currentColumnSizing,\n }),\n [\n currentColumnFilters,\n currentColumnSizing,\n currentExpanded,\n currentPagination,\n currentRowSelection,\n currentSorting,\n effectiveColumnVisibility,\n effectiveColumnOrder,\n effectiveColumnPinning,\n globalFilterValue,\n ],\n );\n\n const handlePaginationChange = React.useCallback<\n OnChangeFn\n >(\n (updater) => {\n const nextValue =\n typeof updater === \"function\" ? updater(currentPagination) : updater;\n\n if (pageIndex === undefined || pageSize === undefined) {\n setLocalPagination((current) => ({\n pageIndex:\n pageIndex === undefined ? nextValue.pageIndex : current.pageIndex,\n pageSize:\n pageSize === undefined ? nextValue.pageSize : current.pageSize,\n }));\n }\n\n if (nextValue.pageIndex !== currentPagination.pageIndex) {\n onPageIndexChange?.(nextValue.pageIndex);\n }\n if (nextValue.pageSize !== currentPagination.pageSize) {\n onPageSizeChange?.(nextValue.pageSize);\n }\n },\n [\n currentPagination,\n onPageIndexChange,\n onPageSizeChange,\n pageIndex,\n pageSize,\n setLocalPagination,\n ],\n );\n\n const handleColumnSizingChange = React.useCallback<\n OnChangeFn\n >(\n (updater) => {\n setLocalColumnSizing(updater);\n },\n [setLocalColumnSizing],\n );\n\n // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Table owns its instance functions.\n const table = useReactTable({\n data: tableData,\n columns: tableColumns,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: manualFiltering ? undefined : getFilteredRowModel(),\n getSortedRowModel: manualSorting ? undefined : getSortedRowModel(),\n getExpandedRowModel: renderExpandedRow ? getExpandedRowModel() : undefined,\n getPaginationRowModel:\n manualPagination || infiniteScroll?.enabled\n ? undefined\n : getPaginationRowModel(),\n enableRowSelection,\n enableMultiRowSelection: enableRowSelection,\n enableColumnResizing,\n columnResizeMode,\n getRowId: tableGetRowId,\n getRowCanExpand: renderExpandedRow\n ? (row) => getRowCanExpand?.(row.original) ?? true\n : undefined,\n globalFilterFn: globalFilterFn ?? dataTableGlobalFilterFn,\n getColumnCanGlobalFilter: (column) =>\n column.columnDef.enableGlobalFilter !== false &&\n typeof column.accessorFn === \"function\",\n manualSorting,\n manualFiltering,\n manualPagination: manualPagination || Boolean(infiniteScroll?.enabled),\n defaultColumn,\n autoResetPageIndex,\n state: tableState,\n onSortingChange: setCurrentSorting,\n onPaginationChange: handlePaginationChange,\n onRowSelectionChange: setCurrentRowSelection,\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnFiltersChange: handleColumnFiltersChange,\n onExpandedChange: handleExpandedChange,\n onColumnOrderChange: handleColumnOrderChange,\n onColumnPinningChange: handleColumnPinningChange,\n onColumnSizingChange: handleColumnSizingChange,\n });\n tableRef.current = table;\n\n const visibleLeafColumns = table.getVisibleLeafColumns();\n const reorderColumn = React.useCallback(\n (sourceColumnId: string, targetColumnId: string) => {\n if (sourceColumnId === targetColumnId) {\n return;\n }\n\n const defaultOrder = table\n .getAllLeafColumns()\n .map((column) => column.id)\n .filter((columnId) => !isUtilityColumnId(columnId));\n const nextOrder = moveColumnInOrder(\n currentColumnOrder.length ? currentColumnOrder : defaultOrder,\n sourceColumnId,\n targetColumnId,\n );\n handleColumnOrderChange(nextOrder);\n },\n [currentColumnOrder, handleColumnOrderChange, table],\n );\n\n const renderedRows = table.getRowModel().rows;\n const rowsToRender = renderedRows.map((row, rowIndex) => ({\n row,\n rowIndex,\n }));\n\n const usesManualRows = manualPagination || Boolean(infiniteScroll?.enabled);\n const derivedTotalRowCount = usesManualRows\n ? undefined\n : table.getFilteredRowModel().rows.length;\n const effectiveTotalRowCount = totalRowCount ?? derivedTotalRowCount;\n const isPageCountKnown =\n !usesManualRows || pageCount !== undefined || totalRowCount !== undefined;\n const footerTotalRowCount = effectiveTotalRowCount;\n const effectivePageCount = shouldRenderInitialLoading\n ? 1\n : (pageCount ??\n (effectiveTotalRowCount !== undefined\n ? Math.max(\n 1,\n Math.ceil(effectiveTotalRowCount / currentPagination.pageSize),\n )\n : usesManualRows\n ? currentPagination.pageIndex + (hasNextPage ? 2 : 1)\n : table.getPageCount()));\n const maxPageIndex = Math.max(0, effectivePageCount - 1);\n\n const setLocalPageIndex = React.useCallback(\n (nextPageIndex: number) => {\n if (pageIndex !== undefined) {\n return;\n }\n\n setLocalPagination((current) =>\n current.pageIndex === nextPageIndex\n ? current\n : { ...current, pageIndex: nextPageIndex },\n );\n },\n [pageIndex, setLocalPagination],\n );\n useDataTablePaginationClamp({\n enabled:\n !shouldRenderInitialLoading &&\n !infiniteScroll?.enabled &&\n isPageCountKnown,\n maxPageIndex,\n onPageIndexChange,\n pageIndex: currentPagination.pageIndex,\n setLocalPageIndex,\n });\n\n const handleFooterPageIndexChange = React.useCallback(\n (nextPageIndex: number) => {\n if (nextPageIndex === currentPagination.pageIndex) {\n return;\n }\n\n onPageIndexChange?.(nextPageIndex);\n if (pageIndex === undefined) {\n setLocalPagination((current) =>\n current.pageIndex === nextPageIndex\n ? current\n : { ...current, pageIndex: nextPageIndex },\n );\n }\n },\n [\n currentPagination.pageIndex,\n onPageIndexChange,\n pageIndex,\n setLocalPagination,\n ],\n );\n const handleFooterPageSizeChange = React.useCallback(\n (nextPageSize: number) => {\n if (currentPagination.pageIndex !== 0) {\n onPageIndexChange?.(0);\n }\n if (nextPageSize !== currentPagination.pageSize) {\n onPageSizeChange?.(nextPageSize);\n }\n if (pageSize === undefined) {\n setLocalPagination({\n pageIndex: 0,\n pageSize: nextPageSize,\n });\n }\n },\n [\n currentPagination.pageIndex,\n currentPagination.pageSize,\n onPageIndexChange,\n onPageSizeChange,\n pageSize,\n setLocalPagination,\n ],\n );\n\n const sentinelRef = useDataTableInfiniteScroll({\n enabled: Boolean(infiniteScroll?.enabled),\n hasMore: Boolean(infiniteScroll?.hasMore),\n isLoadingMore: infiniteScroll?.isLoadingMore,\n onLoadMore: () => infiniteScroll?.onLoadMore(),\n onError: (error) => {\n onActionError?.({\n error,\n source: \"infiniteScroll\",\n });\n },\n });\n\n return {\n effectivePageCount,\n footerTotalRowCount,\n handleFooterPageIndexChange,\n handleFooterPageSizeChange,\n isPageCountKnown,\n renderedRows,\n reorderColumn,\n rowsToRender,\n sentinelRef,\n table,\n virtualPaddingBottom: 0,\n virtualPaddingTop: 0,\n visibleLeafColumns,\n };\n}\n\nexport type DataTableRowsToRender = Array<{\n row: Row;\n rowIndex: number;\n}>;\n","import * as React from \"react\";\nimport type { Updater } from \"@tanstack/react-table\";\n\nexport function useControllableState({\n defaultValue,\n onChange,\n value,\n}: {\n defaultValue: T | (() => T);\n onChange?: (value: T) => void;\n value: T | undefined;\n}) {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n const currentValue = value ?? uncontrolledValue;\n const currentValueRef = React.useRef(currentValue);\n\n React.useEffect(() => {\n currentValueRef.current = currentValue;\n }, [currentValue]);\n\n const setValue = React.useCallback(\n (updater: Updater) => {\n const nextValue =\n typeof updater === \"function\"\n ? (updater as (current: T) => T)(currentValueRef.current)\n : updater;\n currentValueRef.current = nextValue;\n\n onChange?.(nextValue);\n\n if (value === undefined) {\n setUncontrolledValue(nextValue);\n }\n },\n [onChange, value],\n );\n\n return [currentValue, setValue] as const;\n}\n","import * as React from \"react\";\nimport type {\n DataTableColumnPrefs,\n DataTableDensity,\n DataTablePersistenceConfig,\n DataTablePersistencePayload,\n DataTablePersistenceSlice,\n DataTablePersistenceStorage,\n} from \"../types\";\n\nconst STORAGE_PREFIX = \"data-table-pro:column-prefs:\";\nconst DEFAULT_VERSION = 1;\nconst ALL_SLICES: Array = [\n \"visibility\",\n \"sizing\",\n \"order\",\n \"pinning\",\n \"density\",\n];\n\nexport function readDataTableColumnPrefs(\n input: string | DataTablePersistenceConfig | undefined,\n): DataTableColumnPrefs {\n const config = resolvePersistenceConfig(input);\n if (!config) {\n return {};\n }\n\n const storage = resolveStorage(config);\n if (!storage) {\n return {};\n }\n const storageKey = getStorageKey(config.key);\n\n let value: string | null;\n try {\n value = storage.getItem(storageKey);\n } catch (error) {\n config.onError?.({ error, operation: \"read\" });\n return {};\n }\n if (!value) {\n return {};\n }\n\n let parsed: unknown;\n try {\n parsed = (config.deserialize ?? JSON.parse)(value);\n } catch (error) {\n config.onError?.({ error, operation: \"deserialize\" });\n return {};\n }\n\n const targetVersion = config.version ?? DEFAULT_VERSION;\n let candidate: unknown;\n if (isPersistencePayload(parsed)) {\n if (parsed.version === targetVersion) {\n candidate = parsed.state;\n } else if (config.migrate) {\n try {\n candidate = config.migrate(\n {\n version: parsed.version,\n state: parsed.state,\n },\n targetVersion,\n );\n } catch (error) {\n config.onError?.({ error, operation: \"migrate\" });\n return {};\n }\n } else {\n return {};\n }\n } else {\n // Raw objects are the legacy columnPrefsKey format. They are validated and\n // upgraded to a versioned envelope on the next successful write.\n candidate = parsed;\n }\n\n return selectPersistenceSlices(\n validateDataTableColumnPrefs(candidate),\n config.slices,\n );\n}\n\nexport function clearDataTableColumnPrefs(\n input: string | DataTablePersistenceConfig | undefined,\n) {\n const config = resolvePersistenceConfig(input);\n if (!config) {\n return false;\n }\n\n const storage = resolveStorage(config);\n if (!storage) {\n return false;\n }\n\n try {\n storage.removeItem(getStorageKey(config.key));\n return true;\n } catch (error) {\n config.onError?.({ error, operation: \"remove\" });\n return false;\n }\n}\n\nexport function usePersistDataTableColumnPrefs({\n key,\n persistence,\n prefs,\n}: {\n key?: string;\n persistence?: DataTablePersistenceConfig;\n prefs: DataTableColumnPrefs;\n}) {\n const config = persistence ?? resolvePersistenceConfig(key);\n const storage = config ? resolveStorage(config) : undefined;\n const storageKey = config ? getStorageKey(config.key) : undefined;\n const version = config?.version ?? DEFAULT_VERSION;\n const debounceMs = Math.max(0, config?.debounceMs ?? 100);\n const selectedState = selectPersistenceSlices(prefs, config?.slices);\n const serialized = React.useMemo(() => {\n if (!config) {\n return { value: undefined };\n }\n\n try {\n const payload: DataTablePersistencePayload = {\n version,\n state: selectedState,\n };\n return {\n value: (config.serialize ?? JSON.stringify)(payload),\n };\n } catch (error) {\n return { error, value: undefined };\n }\n }, [config, selectedState, version]);\n const onErrorEvent = React.useEffectEvent(\n (\n error: unknown,\n operation: \"serialize\" | \"write\",\n ) => {\n config?.onError?.({ error, operation });\n },\n );\n\n React.useEffect(() => {\n if (serialized.error !== undefined) {\n onErrorEvent(serialized.error, \"serialize\");\n }\n }, [serialized.error]);\n\n React.useEffect(() => {\n if (!storage || !storageKey || serialized.value === undefined) {\n return;\n }\n\n const write = () => {\n try {\n if (storage.getItem(storageKey) === serialized.value) {\n return;\n }\n storage.setItem(storageKey, serialized.value);\n } catch (error) {\n onErrorEvent(error, \"write\");\n }\n };\n\n if (debounceMs === 0) {\n write();\n return;\n }\n\n const timeout = globalThis.setTimeout(write, debounceMs);\n return () => {\n globalThis.clearTimeout(timeout);\n };\n }, [debounceMs, serialized.value, storage, storageKey]);\n}\n\nfunction resolvePersistenceConfig(\n input: string | DataTablePersistenceConfig | undefined,\n): DataTablePersistenceConfig | undefined {\n if (!input) {\n return undefined;\n }\n\n return typeof input === \"string\" ? { key: input } : input;\n}\n\nfunction resolveStorage(\n config: DataTablePersistenceConfig,\n): DataTablePersistenceStorage | undefined {\n if (config.storage) {\n return config.storage;\n }\n\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n try {\n return window.localStorage;\n } catch (error) {\n config.onError?.({ error, operation: \"read\" });\n return undefined;\n }\n}\n\nfunction getStorageKey(key: string) {\n return `${STORAGE_PREFIX}${key}`;\n}\n\nfunction isPersistencePayload(\n value: unknown,\n): value is { version: unknown; state: unknown } {\n return (\n isRecord(value) &&\n Object.prototype.hasOwnProperty.call(value, \"version\") &&\n Object.prototype.hasOwnProperty.call(value, \"state\")\n );\n}\n\nfunction selectPersistenceSlices(\n prefs: DataTableColumnPrefs,\n slices: Array | undefined,\n) {\n const selected = new Set(slices ?? ALL_SLICES);\n const result: DataTableColumnPrefs = {};\n\n for (const slice of ALL_SLICES) {\n if (selected.has(slice) && prefs[slice] !== undefined) {\n Object.assign(result, { [slice]: prefs[slice] });\n }\n }\n\n return result;\n}\n\nfunction validateDataTableColumnPrefs(value: unknown): DataTableColumnPrefs {\n if (!isRecord(value)) {\n return {};\n }\n\n const prefs: DataTableColumnPrefs = {};\n const visibility = validateBooleanRecord(value.visibility);\n if (visibility) {\n prefs.visibility = visibility;\n }\n const sizing = validateSizingRecord(value.sizing);\n if (sizing) {\n prefs.sizing = sizing;\n }\n const order = validateStringArray(value.order);\n if (order) {\n prefs.order = order;\n }\n if (isRecord(value.pinning)) {\n const left = validateStringArray(value.pinning.left) ?? [];\n const right = validateStringArray(value.pinning.right) ?? [];\n prefs.pinning = { left, right };\n }\n if (isDataTableDensity(value.density)) {\n prefs.density = value.density;\n }\n\n return prefs;\n}\n\nfunction validateBooleanRecord(value: unknown) {\n if (!isRecord(value)) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, boolean] => typeof entry[1] === \"boolean\",\n ),\n );\n}\n\nfunction validateSizingRecord(value: unknown) {\n if (!isRecord(value)) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, number] =>\n typeof entry[1] === \"number\" &&\n Number.isFinite(entry[1]) &&\n entry[1] >= 0,\n ),\n );\n}\n\nfunction validateStringArray(value: unknown) {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction isDataTableDensity(value: unknown): value is DataTableDensity {\n return (\n value === \"compact\" ||\n value === \"comfortable\" ||\n value === \"spacious\"\n );\n}\n\nfunction isRecord(value: unknown): value is Record {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n","import * as React from \"react\";\nimport type {\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n PaginationState,\n SortingState,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableDensity,\n DataTableLabels,\n DataTableProps,\n} from \"../types\";\nimport {\n createDataTableLoadingRows,\n getColumnId,\n getDataTableLoadingRowId,\n getInitialColumnPinning,\n isDataTableLoadingRow,\n} from \"./data-table-utils\";\nimport {\n readDataTableColumnPrefs,\n usePersistDataTableColumnPrefs,\n} from \"./use-data-table-column-prefs\";\nimport { useControllableState } from \"./use-controllable-state\";\nimport { useDataTableContainerWidth } from \"./use-data-table-container-width\";\nimport { isHiddenAtContainerWidth, isRowVisible } from \"../types\";\n\nexport function useDataTableState({\n columnFilters,\n columnOrder,\n columnPinning,\n columnSizing,\n columnPrefsKey,\n persistence,\n columnVisibility,\n columns,\n data,\n density,\n enableRowSelection,\n enableToolbarQueryFiltering,\n expanded,\n getRowId,\n hiddenRows,\n initialState,\n isLoading,\n loadingRowCount,\n manualFiltering,\n onColumnFiltersChange,\n onColumnOrderChange,\n onColumnPinningChange,\n onColumnSizingChange,\n onColumnVisibilityChange,\n onDensityChange,\n onExpandedChange,\n onPageIndexChange,\n onRowSelectionChange,\n onShowHiddenRowsChange,\n onSortingChange,\n onToolbarQueryValueChange,\n onViewModeChange,\n pageIndex,\n pageSize,\n resolvedLabels,\n rowSelection,\n rowsPerPageOptions,\n selectionActions,\n showHiddenRows,\n sorting,\n toolbarQueryDebounceMs,\n toolbarQueryPlaceholder,\n toolbarQueryValue,\n viewMode,\n containerRef,\n}: {\n columnFilters: DataTableProps[\"columnFilters\"];\n columnOrder: DataTableProps[\"columnOrder\"];\n columnPinning: DataTableProps[\"columnPinning\"];\n columnSizing?: DataTableProps[\"columnSizing\"];\n columnPrefsKey: DataTableProps[\"columnPrefsKey\"];\n persistence?: DataTableProps[\"persistence\"];\n columnVisibility: DataTableProps[\"columnVisibility\"];\n columns: DataTableProps[\"columns\"];\n data: DataTableProps[\"data\"];\n density: DataTableProps[\"density\"];\n enableRowSelection: boolean;\n enableToolbarQueryFiltering: boolean;\n expanded: DataTableProps[\"expanded\"];\n getRowId: DataTableProps[\"getRowId\"];\n hiddenRows: DataTableProps[\"hiddenRows\"];\n initialState?: DataTableProps[\"initialState\"];\n isLoading: boolean;\n loadingRowCount: DataTableProps[\"loadingRowCount\"];\n manualFiltering: boolean;\n onColumnFiltersChange: DataTableProps[\"onColumnFiltersChange\"];\n onColumnOrderChange: DataTableProps[\"onColumnOrderChange\"];\n onColumnPinningChange: DataTableProps[\"onColumnPinningChange\"];\n onColumnSizingChange?: DataTableProps[\"onColumnSizingChange\"];\n onColumnVisibilityChange: DataTableProps[\"onColumnVisibilityChange\"];\n onDensityChange: DataTableProps[\"onDensityChange\"];\n onExpandedChange: DataTableProps[\"onExpandedChange\"];\n onPageIndexChange: DataTableProps[\"onPageIndexChange\"];\n onRowSelectionChange: DataTableProps[\"onRowSelectionChange\"];\n onShowHiddenRowsChange: DataTableProps[\"onShowHiddenRowsChange\"];\n onSortingChange: DataTableProps[\"onSortingChange\"];\n onToolbarQueryValueChange: DataTableProps[\"onToolbarQueryValueChange\"];\n onViewModeChange: DataTableProps[\"onViewModeChange\"];\n pageIndex: DataTableProps[\"pageIndex\"];\n pageSize: DataTableProps[\"pageSize\"];\n resolvedLabels: DataTableLabels;\n rowSelection: DataTableProps[\"rowSelection\"];\n rowsPerPageOptions: Array;\n selectionActions: DataTableProps[\"selectionActions\"];\n showHiddenRows: DataTableProps[\"showHiddenRows\"];\n sorting: DataTableProps[\"sorting\"];\n toolbarQueryDebounceMs: DataTableProps[\"toolbarQueryDebounceMs\"];\n toolbarQueryPlaceholder: DataTableProps[\"toolbarQueryPlaceholder\"];\n toolbarQueryValue: DataTableProps[\"toolbarQueryValue\"];\n viewMode: DataTableProps[\"viewMode\"];\n containerRef: React.RefObject;\n}) {\n const persistenceConfig = React.useMemo(\n () => persistence ?? (columnPrefsKey ? { key: columnPrefsKey } : undefined),\n [columnPrefsKey, persistence],\n );\n const persistedColumnPrefs = React.useMemo(\n () => readDataTableColumnPrefs(persistenceConfig),\n [persistenceConfig],\n );\n const [localPagination, setLocalPagination] =\n React.useState({\n pageIndex: initialState?.pagination?.pageIndex ?? 0,\n pageSize:\n initialState?.pagination?.pageSize ??\n rowsPerPageOptions[0] ??\n 20,\n });\n const [currentSorting, setCurrentSorting] =\n useControllableState({\n value: sorting,\n onChange: onSortingChange,\n defaultValue: () => initialState?.sorting ?? [],\n });\n const [currentRowSelection, setCurrentRowSelection] = useControllableState<\n Record\n >({\n value: rowSelection,\n onChange: onRowSelectionChange,\n defaultValue: () => initialState?.rowSelection ?? {},\n });\n const [currentColumnVisibility, setCurrentColumnVisibility] =\n useControllableState({\n value: columnVisibility,\n onChange: onColumnVisibilityChange,\n defaultValue: () =>\n initialState?.columnVisibility ??\n persistedColumnPrefs.visibility ??\n {},\n });\n const [currentColumnFilters, setCurrentColumnFilters] =\n useControllableState({\n value: columnFilters,\n onChange: onColumnFiltersChange,\n defaultValue: () => initialState?.columnFilters ?? [],\n });\n const [currentExpanded, setCurrentExpanded] =\n useControllableState({\n value: expanded,\n onChange: onExpandedChange,\n defaultValue: () => initialState?.expanded ?? {},\n });\n const [currentColumnOrder, setCurrentColumnOrder] =\n useControllableState({\n value: columnOrder,\n onChange: onColumnOrderChange,\n defaultValue: () =>\n initialState?.columnOrder ?? persistedColumnPrefs.order ?? [],\n });\n const [currentColumnPinning, setCurrentColumnPinning] =\n useControllableState({\n value: columnPinning,\n onChange: onColumnPinningChange,\n defaultValue: () =>\n initialState?.columnPinning ??\n persistedColumnPrefs.pinning ??\n getInitialColumnPinning(columns),\n });\n const [currentColumnSizing, setCurrentColumnSizing] =\n useControllableState({\n value: columnSizing,\n onChange: onColumnSizingChange,\n defaultValue: () =>\n initialState?.columnSizing ?? persistedColumnPrefs.sizing ?? {},\n });\n const [currentViewMode, setCurrentViewMode] = useControllableState<\n \"table\" | \"card\"\n >({\n value: viewMode,\n onChange: onViewModeChange,\n defaultValue: () => initialState?.viewMode ?? \"table\",\n });\n const [currentShowHiddenRows, setCurrentShowHiddenRows] =\n useControllableState({\n value: showHiddenRows,\n onChange: onShowHiddenRowsChange,\n defaultValue: () => initialState?.showHiddenRows ?? false,\n });\n const [currentDensity, setCurrentDensity] =\n useControllableState({\n value: density,\n onChange: onDensityChange,\n defaultValue: () =>\n initialState?.density ??\n persistedColumnPrefs.density ??\n \"comfortable\",\n });\n const resolvedToolbarQueryValue =\n toolbarQueryValue ?? initialState?.globalFilter ?? \"\";\n const resolvedToolbarQueryPlaceholder =\n toolbarQueryPlaceholder ?? resolvedLabels.searchPlaceholder;\n const resolvedToolbarQueryDebounceMs = toolbarQueryDebounceMs ?? 250;\n const [localSearchValue, setLocalSearchValue] = React.useState(\n resolvedToolbarQueryValue,\n );\n const containerWidth = useDataTableContainerWidth(containerRef);\n const hasOnSearchValueChange = Boolean(onToolbarQueryValueChange);\n const lastReportedSearchValueRef = React.useRef(resolvedToolbarQueryValue);\n const onToolbarQueryValueChangeEvent = React.useEffectEvent(\n (value: string) => {\n lastReportedSearchValueRef.current = value;\n onToolbarQueryValueChange?.(value);\n },\n );\n\n React.useEffect(() => {\n lastReportedSearchValueRef.current = resolvedToolbarQueryValue;\n // A controlled query change must replace any pending debounced draft.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setLocalSearchValue(resolvedToolbarQueryValue);\n }, [resolvedToolbarQueryValue]);\n\n React.useEffect(() => {\n if (!hasOnSearchValueChange) {\n return;\n }\n\n if (localSearchValue === resolvedToolbarQueryValue) {\n return;\n }\n\n if (localSearchValue === lastReportedSearchValueRef.current) {\n return;\n }\n\n const timeout = window.setTimeout(() => {\n onToolbarQueryValueChangeEvent(localSearchValue);\n }, resolvedToolbarQueryDebounceMs);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [\n hasOnSearchValueChange,\n localSearchValue,\n resolvedToolbarQueryDebounceMs,\n resolvedToolbarQueryValue,\n ]);\n\n const currentPagination = React.useMemo(\n () => ({\n pageIndex: pageIndex ?? localPagination.pageIndex,\n pageSize: pageSize ?? localPagination.pageSize,\n }),\n [\n localPagination.pageIndex,\n localPagination.pageSize,\n pageIndex,\n pageSize,\n ],\n );\n const resolvedLoadingRowCount = Math.max(\n 1,\n loadingRowCount ?? Math.min(5, currentPagination.pageSize),\n );\n const globalFilterValue = enableToolbarQueryFiltering\n ? localSearchValue\n : \"\";\n const handleViewModeChange = React.useCallback(\n (nextViewMode: \"table\" | \"card\") => {\n setCurrentViewMode(nextViewMode);\n },\n [setCurrentViewMode],\n );\n const handleShowHiddenRowsChange = React.useCallback(\n (nextShowHiddenRows: boolean) => {\n setCurrentShowHiddenRows(nextShowHiddenRows);\n },\n [setCurrentShowHiddenRows],\n );\n const handleDensityChange = React.useCallback(\n (nextDensity: DataTableDensity) => {\n setCurrentDensity(nextDensity);\n },\n [setCurrentDensity],\n );\n const resetPageIndexForFilterChange = React.useCallback(() => {\n onPageIndexChange?.(0);\n if (pageIndex === undefined) {\n setLocalPagination((current) =>\n current.pageIndex === 0 ? current : { ...current, pageIndex: 0 },\n );\n }\n }, [onPageIndexChange, pageIndex]);\n const filterResetSignature = React.useMemo(\n () =>\n JSON.stringify({\n globalFilterValue,\n columnFilters: currentColumnFilters,\n }),\n [currentColumnFilters, globalFilterValue],\n );\n const lastFilterResetSignatureRef = React.useRef(filterResetSignature);\n\n React.useEffect(() => {\n if (manualFiltering) {\n lastFilterResetSignatureRef.current = filterResetSignature;\n return;\n }\n\n if (lastFilterResetSignatureRef.current === filterResetSignature) {\n return;\n }\n\n lastFilterResetSignatureRef.current = filterResetSignature;\n resetPageIndexForFilterChange();\n }, [filterResetSignature, manualFiltering, resetPageIndexForFilterChange]);\n\n usePersistDataTableColumnPrefs({\n persistence: persistenceConfig,\n prefs: {\n visibility: columnVisibility ? undefined : currentColumnVisibility,\n sizing:\n columnSizing === undefined ? currentColumnSizing : undefined,\n order: columnOrder ? undefined : currentColumnOrder,\n pinning: columnPinning ? undefined : currentColumnPinning,\n density: density ? undefined : currentDensity,\n },\n });\n const responsiveColumnVisibility = React.useMemo(() => {\n return columns.reduce((visibility, column, index) => {\n const columnId = getColumnId(column, index);\n if (isHiddenAtContainerWidth(column.meta?.hideOn, containerWidth)) {\n visibility[columnId] = false;\n }\n return visibility;\n }, {});\n }, [columns, containerWidth]);\n const effectiveColumnVisibility = React.useMemo(() => {\n return {\n ...currentColumnVisibility,\n ...responsiveColumnVisibility,\n };\n }, [currentColumnVisibility, responsiveColumnVisibility]);\n const visibleData = React.useMemo(\n () =>\n data.filter((row) =>\n isRowVisible(row, hiddenRows, currentShowHiddenRows),\n ),\n [currentShowHiddenRows, data, hiddenRows],\n );\n const shouldRenderInitialLoading = isLoading && visibleData.length === 0;\n const loadingRows = React.useMemo(\n () => createDataTableLoadingRows(resolvedLoadingRowCount),\n [resolvedLoadingRowCount],\n );\n const tableData = shouldRenderInitialLoading\n ? loadingRows\n : visibleData;\n const tableGetRowId = React.useCallback(\n (row: TData, index: number) => {\n if (isDataTableLoadingRow(row)) {\n return getDataTableLoadingRowId(index);\n }\n\n return getRowId(row, index);\n },\n [getRowId],\n );\n const shouldResolveSelectedRows =\n enableRowSelection ||\n (selectionActions?.length ?? 0) > 0 ||\n Object.values(currentRowSelection).some(Boolean);\n const rowById = React.useMemo(() => {\n if (!shouldResolveSelectedRows) {\n return new Map();\n }\n\n return new Map(\n visibleData.map((row, index) => [getRowId(row, index), row]),\n );\n }, [getRowId, shouldResolveSelectedRows, visibleData]);\n const selectedRows = React.useMemo(() => {\n if (!shouldResolveSelectedRows) {\n return [];\n }\n\n return Object.entries(currentRowSelection)\n .filter(([, selected]) => selected)\n .map(([rowId]) => rowById.get(rowId))\n .filter((row): row is TData => Boolean(row));\n }, [currentRowSelection, rowById, shouldResolveSelectedRows]);\n\n return {\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentColumnSizing,\n currentColumnVisibility,\n currentDensity,\n currentExpanded,\n currentPagination,\n currentRowSelection,\n currentShowHiddenRows,\n currentSorting,\n currentViewMode,\n effectiveColumnVisibility,\n globalFilterValue,\n handleDensityChange,\n handleShowHiddenRowsChange,\n handleViewModeChange,\n localSearchValue,\n resolvedLoadingRowCount,\n resolvedToolbarQueryPlaceholder,\n selectedRows,\n setCurrentColumnFilters,\n setCurrentColumnOrder,\n setCurrentColumnPinning,\n setCurrentColumnVisibility,\n setCurrentExpanded,\n setCurrentRowSelection,\n setCurrentSorting,\n setLocalColumnSizing: setCurrentColumnSizing,\n setLocalPagination,\n setLocalSearchValue,\n shouldRenderInitialLoading,\n tableData,\n tableGetRowId,\n /**\n * @deprecated Read the filtered TanStack row model from the table\n * instance. This alias remains for advanced 4.x callers.\n */\n toolbarFilteredData: visibleData,\n visibleData,\n };\n}\n","import * as React from \"react\";\nimport type { Column, ColumnSizingState } from \"@tanstack/react-table\";\nimport type { DataTableColumnDef } from \"../types\";\nimport type { DataTableUiClassNames } from \"../ui-kit\";\nimport {\n UTILITY_COLUMN_SIZE,\n getColumnId,\n getConfiguredColumnMinWidth,\n getFixedSide,\n getPinnedColumnClassName,\n isUtilityColumnId,\n} from \"./data-table-utils\";\n\ntype ColumnLayoutMode = \"fill\" | \"fit\";\n\nexport type DataTableColumnLayout = {\n cellStyle: React.CSSProperties | undefined;\n colStyle: React.CSSProperties | undefined;\n fixedSide: \"left\" | \"right\" | false | undefined;\n headerStyle: React.CSSProperties | undefined;\n isActionsColumn: boolean;\n isExpansionColumn: boolean;\n isSelectionColumn: boolean;\n isSpacerColumn: boolean;\n isUtilityColumn: boolean;\n pinnedClassName: string | undefined;\n utilityClassName: string | undefined;\n};\n\nconst EMPTY_COLUMN_LAYOUT: DataTableColumnLayout = {\n cellStyle: undefined,\n colStyle: undefined,\n fixedSide: undefined,\n headerStyle: undefined,\n isActionsColumn: false,\n isExpansionColumn: false,\n isSelectionColumn: false,\n isSpacerColumn: false,\n isUtilityColumn: false,\n pinnedClassName: undefined,\n utilityClassName: undefined,\n};\n\nexport function useColumnLayout({\n columns,\n columnSizing,\n editableRows,\n enableRowSelection,\n hasRowActions,\n hasRowExpansion,\n layoutMode,\n uiClassNames,\n visibleLeafColumns,\n}: {\n columns: Array>;\n columnSizing: ColumnSizingState;\n editableRows: boolean;\n enableRowSelection: boolean;\n hasRowActions: boolean;\n hasRowExpansion: boolean;\n layoutMode: ColumnLayoutMode;\n uiClassNames: DataTableUiClassNames;\n visibleLeafColumns: Array>;\n}) {\n const explicitlySizedColumnIds = React.useMemo(() => {\n const ids = new Set();\n\n for (const [index, column] of columns.entries()) {\n if (Object.prototype.hasOwnProperty.call(column, \"size\")) {\n ids.add(getColumnId(column, index));\n }\n }\n\n if (enableRowSelection) {\n ids.add(\"__select__\");\n }\n\n if (hasRowExpansion) {\n ids.add(\"__expand__\");\n }\n\n if (hasRowActions || editableRows) {\n ids.add(\"__actions__\");\n }\n\n return ids;\n }, [\n columns,\n editableRows,\n enableRowSelection,\n hasRowActions,\n hasRowExpansion,\n ]);\n\n const minimumColumnWidths = React.useMemo(() => {\n const widths = new Map();\n\n for (const [index, column] of columns.entries()) {\n const configuredMinWidth = getConfiguredColumnMinWidth(column);\n\n if (configuredMinWidth !== undefined) {\n widths.set(getColumnId(column, index), configuredMinWidth);\n }\n }\n\n return widths;\n }, [columns]);\n\n const pinnedColumns = React.useMemo(() => {\n const left = new Map();\n const right = new Map();\n\n let leftOffset = 0;\n for (const column of visibleLeafColumns) {\n if (getFixedSide(column) === \"left\") {\n left.set(column.id, leftOffset);\n leftOffset += getColumnLayoutSize(column);\n }\n }\n\n let rightOffset = 0;\n for (const column of [...visibleLeafColumns].reverse()) {\n if (getFixedSide(column) === \"right\") {\n right.set(column.id, rightOffset);\n rightOffset += getColumnLayoutSize(column);\n }\n }\n\n return { left, right };\n }, [visibleLeafColumns]);\n\n const fillColumnId = React.useMemo(() => {\n if (layoutMode !== \"fill\") {\n return undefined;\n }\n\n const dataColumns = visibleLeafColumns.filter(\n (column) => !isUtilityColumnId(column.id),\n );\n\n if (!dataColumns.length) {\n return undefined;\n }\n\n const allDataColumnsAreFixed = dataColumns.every(\n (column) =>\n explicitlySizedColumnIds.has(column.id) ||\n Object.prototype.hasOwnProperty.call(columnSizing, column.id),\n );\n\n return allDataColumnsAreFixed\n ? dataColumns[dataColumns.length - 1]?.id\n : undefined;\n }, [\n columnSizing,\n explicitlySizedColumnIds,\n layoutMode,\n visibleLeafColumns,\n ]);\n\n const fixedWidthColumnIds = React.useMemo(() => {\n const ids = new Set([\n ...explicitlySizedColumnIds,\n ...Object.keys(columnSizing),\n ]);\n\n if (fillColumnId) {\n ids.delete(fillColumnId);\n }\n\n return ids;\n }, [columnSizing, explicitlySizedColumnIds, fillColumnId]);\n\n const columnLayouts = React.useMemo(() => {\n const layouts = new Map();\n\n for (const column of visibleLeafColumns) {\n const isSelectionColumn = column.id === \"__select__\";\n const isExpansionColumn = column.id === \"__expand__\";\n const isActionsColumn = column.id === \"__actions__\";\n const isUtilityColumn =\n isSelectionColumn || isExpansionColumn || isActionsColumn;\n const isSpacerColumn = column.id === \"__spacer__\";\n const configuredMinWidth = minimumColumnWidths.get(column.id);\n const isFlexibleFillColumn = column.id === fillColumnId;\n const columnMinWidth =\n configuredMinWidth ??\n (isFlexibleFillColumn ? column.getSize() : undefined);\n const shouldFixWidth =\n !isSpacerColumn &&\n (layoutMode === \"fit\" ||\n isUtilityColumn ||\n fixedWidthColumnIds.has(column.id));\n const baseStyle =\n shouldFixWidth || columnMinWidth !== undefined\n ? {\n width: shouldFixWidth\n ? isUtilityColumn\n ? UTILITY_COLUMN_SIZE\n : column.getSize()\n : undefined,\n minWidth: isUtilityColumn\n ? UTILITY_COLUMN_SIZE\n : shouldFixWidth\n ? column.getSize()\n : columnMinWidth,\n maxWidth: shouldFixWidth\n ? isUtilityColumn\n ? UTILITY_COLUMN_SIZE\n : column.getSize()\n : undefined,\n }\n : undefined;\n const fixedSide = getFixedSide(column);\n const pinnedStyle = fixedSide\n ? {\n insetInlineStart:\n fixedSide === \"left\" ? pinnedColumns.left.get(column.id) : undefined,\n insetInlineEnd:\n fixedSide === \"right\"\n ? pinnedColumns.right.get(column.id)\n : undefined,\n }\n : undefined;\n const cellStyle =\n baseStyle || pinnedStyle ? { ...baseStyle, ...pinnedStyle } : undefined;\n\n layouts.set(column.id, {\n cellStyle,\n colStyle: baseStyle,\n fixedSide,\n headerStyle: cellStyle,\n isActionsColumn,\n isExpansionColumn,\n isSelectionColumn,\n isSpacerColumn,\n isUtilityColumn,\n pinnedClassName: fixedSide\n ? getPinnedColumnClassName(fixedSide, uiClassNames, {\n isUtilityColumn,\n })\n : undefined,\n utilityClassName: isUtilityColumn\n ? \"w-[50px] max-w-[50px] min-w-[50px] px-0\"\n : undefined,\n });\n }\n\n return layouts;\n }, [\n fillColumnId,\n fixedWidthColumnIds,\n layoutMode,\n minimumColumnWidths,\n pinnedColumns,\n uiClassNames,\n visibleLeafColumns,\n ]);\n\n const fillMinWidth = React.useMemo(() => {\n return visibleLeafColumns.reduce((total, column) => {\n const layout = columnLayouts.get(column.id);\n const configuredMinWidth = minimumColumnWidths.get(column.id);\n const isFlexibleFillColumn = column.id === fillColumnId;\n\n if (layout?.isUtilityColumn) {\n return total + UTILITY_COLUMN_SIZE;\n }\n\n if (fixedWidthColumnIds.has(column.id)) {\n return total + column.getSize();\n }\n\n return (\n total +\n (configuredMinWidth ?? (isFlexibleFillColumn ? column.getSize() : 0))\n );\n }, 0);\n }, [\n columnLayouts,\n fillColumnId,\n fixedWidthColumnIds,\n minimumColumnWidths,\n visibleLeafColumns,\n ]);\n\n const getColumnLayout = React.useCallback(\n (columnId: string) => columnLayouts.get(columnId) ?? EMPTY_COLUMN_LAYOUT,\n [columnLayouts],\n );\n\n return {\n columnLayouts,\n explicitlySizedColumnIds,\n fillMinWidth,\n getColumnLayout,\n };\n}\n\nfunction getColumnLayoutSize(column: Column) {\n return isUtilityColumnId(column.id) ? UTILITY_COLUMN_SIZE : column.getSize();\n}\n","import * as React from \"react\";\nimport type { Row } from \"@tanstack/react-table\";\nimport type {\n DataTableCardRendererProps,\n DataTableCardSizing,\n DataTableEditableRowsConfig,\n DataTableExpandedRowProps,\n DataTableLabels,\n DataTableRowAction,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport { DATA_TABLE_DEFAULT_LABELS } from \"./data-table-labels\";\n\ntype DataTableCardViewProps = {\n rows: Array>;\n cardRenderer: (props: DataTableCardRendererProps) => React.ReactNode;\n cardSizing?: DataTableCardSizing;\n cardGridClassName?: string;\n cardClassName?: string;\n rowActions: Array>;\n editableRows?: DataTableEditableRowsConfig;\n renderExpandedRow?: (\n props: DataTableExpandedRowProps,\n ) => React.ReactNode;\n hasCardTitle: boolean;\n rowSelection: Record;\n onRowSelectionChange: (rowSelection: Record) => void;\n enableRowSelection: boolean;\n editingRowId: string | null;\n onEditingRowIdChange: (rowId: string | null) => void;\n getRowClassName?: (row: TData) => string | undefined;\n onRowClick?: (context: { row: TData; rowId: string }) => void | Promise;\n getRowDraggable?: (row: TData) => boolean;\n onRowDragStart?: (context: {\n row: TData;\n rowId: string;\n event: React.DragEvent;\n }) => void;\n onRowDragEnd?: (context: {\n row: TData;\n rowId: string;\n event: React.DragEvent;\n }) => void;\n isLoading?: boolean;\n loadingRowCount?: number;\n labels: DataTableLabels;\n};\n\ntype DataTableRowActionsComponent = (props: {\n row: TData;\n rowActions: Array>;\n editableRows?: DataTableEditableRowsConfig;\n isEditing: boolean;\n onStartEditing: () => void;\n onCancelEditing: () => void;\n labels: DataTableLabels;\n}) => React.ReactElement | null;\n\nexport function createDataTableCardView(\n ui: DataTableUiKit,\n DataTableRowActions: DataTableRowActionsComponent,\n) {\n const uiClassNames = ui.classNames ?? {};\n const { Card, CardContent, CardHeader, Checkbox, Skeleton } = ui;\n\n return function DataTableCardView({\n rows,\n cardRenderer,\n cardSizing = \"fixed\",\n cardGridClassName,\n cardClassName,\n rowActions,\n editableRows,\n renderExpandedRow,\n hasCardTitle,\n rowSelection,\n onRowSelectionChange,\n enableRowSelection,\n editingRowId,\n onEditingRowIdChange,\n getRowClassName,\n onRowClick,\n getRowDraggable,\n onRowDragStart,\n onRowDragEnd,\n isLoading = false,\n loadingRowCount = 5,\n labels,\n }: DataTableCardViewProps) {\n const resolvedCardSizing = cardSizing ?? \"fixed\";\n const resolvedCardGridClassName =\n cardGridClassName\n ? cn(\"grid\", cardGridClassName)\n : getCardGridClassName(resolvedCardSizing);\n const cardGridClasses = cn(\n \"min-h-0 w-full gap-4 p-1\",\n uiClassNames.cardGrid,\n resolvedCardGridClassName,\n );\n const cardItemClasses = (stateClassName?: string) =>\n cn(\n \"relative min-w-0 max-w-full gap-0 overflow-hidden bg-transparent p-0\",\n getCardItemClassName(resolvedCardSizing),\n uiClassNames.cardItem,\n cardClassName,\n stateClassName,\n );\n\n if (isLoading) {\n return (\n \n {Array.from({ length: Math.max(1, loadingRowCount) }, (_, index) => (\n \n {hasCardTitle ? (\n \n \n \n \n ) : null}\n \n \n \n \n \n \n \n ))}\n \n );\n }\n\n return (\n \n {rows.map((row) => {\n const rowId = row.id;\n const originalRow = row.original;\n const isSelected = Boolean(rowSelection[rowId]);\n const isEditing = editingRowId === rowId;\n const hasCardActions = rowActions.length > 0 || Boolean(editableRows);\n const showCardGradient =\n enableRowSelection || hasCardActions || hasCardTitle;\n const showCardOverlayControls = enableRowSelection || hasCardActions;\n const handleCardActivate = () => {\n if (!onRowClick) {\n return;\n }\n\n void onRowClick({ row: originalRow, rowId });\n };\n\n return (\n ) => {\n onRowDragStart?.({ row: originalRow, rowId, event });\n }}\n onDragEnd={(event: React.DragEvent) => {\n onRowDragEnd?.({ row: originalRow, rowId, event });\n }}\n >\n {showCardGradient ? (\n \n ) : null}\n *]:min-w-0\",\n getCardRendererClassName(resolvedCardSizing),\n onRowClick && \"cursor-pointer focus-visible:outline-none\",\n )}\n onClick={(event: React.MouseEvent) => {\n const target = event.target as HTMLElement | null;\n if (target?.closest(\"[data-row-click-ignore='true']\")) {\n return;\n }\n\n handleCardActivate();\n }}\n onKeyDown={(event: React.KeyboardEvent) => {\n const target = event.target as HTMLElement | null;\n if (target?.closest(\"[data-row-click-ignore='true']\")) {\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleCardActivate();\n }\n }}\n >\n {cardRenderer({\n row: originalRow,\n rowId,\n isSelected,\n onSelectedChange: (nextValue) => {\n onRowSelectionChange(\n updateRowSelection(rowSelection, rowId, nextValue),\n );\n },\n actions: rowActions,\n isEditing,\n startEditing: () => {\n onEditingRowIdChange(rowId);\n },\n cancelEditing: () => {\n onEditingRowIdChange(null);\n },\n })}\n {isEditing || !renderExpandedRow || !row.getIsExpanded()\n ? null\n : renderExpandedRow({\n row: originalRow,\n rowId,\n tableRow: row,\n })}\n \n {showCardOverlayControls ? (\n \n {enableRowSelection ? (\n \n {\n onRowSelectionChange(\n updateRowSelection(\n rowSelection,\n rowId,\n checked === true,\n ),\n );\n }}\n />\n \n ) : null}\n
\n {hasCardActions ? (\n \n {\n onEditingRowIdChange(rowId);\n }}\n onCancelEditing={() => {\n onEditingRowIdChange(null);\n }}\n labels={labels}\n />\n
\n ) : null}\n
\n ) : null}\n \n );\n })}\n \n );\n };\n}\n\nfunction getCardGridClassName(cardSizing: DataTableCardSizing) {\n switch (cardSizing) {\n case \"content\":\n return \"flex flex-wrap items-start justify-start\";\n case \"fluid\":\n return \"grid grid-cols-[repeat(auto-fit,minmax(min(18rem,100%),1fr))]\";\n case \"fixed\":\n default:\n return \"grid grid-cols-[repeat(auto-fill,minmax(min(18rem,100%),18rem))] justify-start\";\n }\n}\n\nfunction getCardItemClassName(cardSizing: DataTableCardSizing) {\n switch (cardSizing) {\n case \"content\":\n return \"w-fit\";\n case \"fluid\":\n return \"w-full\";\n case \"fixed\":\n default:\n return undefined;\n }\n}\n\nfunction getCardRendererClassName(cardSizing: DataTableCardSizing) {\n switch (cardSizing) {\n case \"content\":\n return \"w-fit\";\n case \"fluid\":\n return \"w-full flex-1 [&>*]:w-full\";\n case \"fixed\":\n default:\n return \"flex-1\";\n }\n}\n\nfunction updateRowSelection(\n rowSelection: Record,\n rowId: string,\n isSelected: boolean,\n) {\n if (isSelected) {\n return {\n ...rowSelection,\n [rowId]: true,\n };\n }\n\n if (!rowSelection[rowId]) {\n return rowSelection;\n }\n\n const nextSelection = { ...rowSelection };\n delete nextSelection[rowId];\n return nextSelection;\n}\n","import { IconInbox } from \"../icons\";\nimport type { DataTableUiKit } from \"../ui-kit\";\n\nexport function createDataTableEmptyState(ui: DataTableUiKit) {\n const uiClassNames = ui.classNames ?? {};\n const {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n } = ui;\n\n return function DataTableEmptyState({\n title = \"No rows found\",\n description = \"Adjust your filters or create a new record to populate this table.\",\n }: {\n title?: string;\n description?: string;\n }) {\n return (\n \n \n \n \n \n {title}\n {description}\n \n \n \n );\n };\n}\n","import * as React from \"react\";\nimport { IconDatabase } from \"../icons\";\nimport type { DataTableLabels } from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { DATA_TABLE_DEFAULT_LABELS } from \"./data-table-labels\";\n\ntype DataTablePaginationProps = {\n pageIndex: number;\n pageCount: number;\n pageCountKnown: boolean;\n pageSize: number;\n totalRowCount?: number;\n rowsPerPageOptions: Array;\n onPageIndexChange: (pageIndex: number) => void;\n onPageSizeChange: (pageSize: number) => void;\n labels: DataTableLabels;\n};\n\nexport function createDataTablePagination(ui: DataTableUiKit) {\n const uiClassNames = ui.classNames ?? {};\n const {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n } = ui;\n\n function DataTablePagination({\n pageIndex,\n pageCount,\n pageCountKnown,\n pageSize,\n totalRowCount,\n rowsPerPageOptions,\n onPageIndexChange,\n onPageSizeChange,\n labels,\n }: DataTablePaginationProps) {\n const pages = pageCountKnown\n ? getVisiblePages(pageIndex, Math.max(1, pageCount))\n : [];\n const canGoPrevious = pageIndex > 0;\n const canGoNext = pageIndex + 1 < pageCount;\n const lastPageIndex = Math.max(0, pageCount - 1);\n\n return (\n
\n \n \n {labels.recordsPerPage}\n \n {\n onPageSizeChange(Number(value));\n }}\n >\n \n \n \n \n \n {rowsPerPageOptions.map((option) => (\n \n {option}\n \n ))}\n \n \n \n
\n\n {totalRowCount !== undefined ? (\n
\n \n \n {totalRowCount}\n \n {labels.totalRecords(totalRowCount)}\n \n
\n \n ) : null}\n\n
\n \n {pageCountKnown\n ? labels.pageStatus(pageIndex, Math.max(1, pageCount))\n : (\n labels.pageStatusUnknown ??\n DATA_TABLE_DEFAULT_LABELS.pageStatusUnknown\n )(pageIndex)}\n
\n \n \n \n \n \n ) => {\n event.preventDefault();\n if (canGoPrevious) {\n onPageIndexChange(0);\n }\n }}\n text={labels.firstPage}\n />\n \n {labels.firstPage}\n \n \n \n \n \n ) => {\n event.preventDefault();\n if (canGoPrevious) {\n onPageIndexChange(pageIndex - 1);\n }\n }}\n text={labels.previousPage}\n />\n \n {labels.previousPage}\n \n \n {pages.map((item, index) => (\n \n {item === \"ellipsis\" ? (\n \n ) : (\n ) => {\n event.preventDefault();\n onPageIndexChange(item - 1);\n }}\n >\n {item}\n \n )}\n \n ))}\n \n \n \n ) => {\n event.preventDefault();\n if (canGoNext) {\n onPageIndexChange(pageIndex + 1);\n }\n }}\n text={labels.nextPage}\n />\n \n {labels.nextPage}\n \n \n {pageCountKnown ? (\n \n \n \n ,\n ) => {\n event.preventDefault();\n if (canGoNext) {\n onPageIndexChange(lastPageIndex);\n }\n }}\n />\n \n {labels.lastPage}\n \n \n ) : null}\n \n \n \n \n );\n }\n\n function DataTableFooter(props: DataTablePaginationProps) {\n return (\n \n \n \n );\n }\n\n return {\n DataTableFooter,\n DataTablePagination,\n };\n}\n\nfunction getVisiblePages(currentPageIndex: number, pageCount: number) {\n const currentPage = currentPageIndex + 1;\n const pages = new Set([1, pageCount]);\n\n for (\n let page = Math.max(1, currentPage - 2);\n page <= Math.min(pageCount, currentPage + 2);\n page += 1\n ) {\n pages.add(page);\n }\n\n const orderedPages = Array.from(pages).sort((left, right) => left - right);\n const items: Array = [];\n\n for (let index = 0; index < orderedPages.length; index += 1) {\n const page = orderedPages[index];\n const previous = orderedPages[index - 1];\n\n if (previous && page - previous > 1) {\n items.push(\"ellipsis\");\n }\n\n items.push(page);\n }\n\n return items;\n}\n","import * as React from \"react\";\nimport { IconDots, IconEdit, IconX } from \"../icons\";\nimport type {\n DataTableEditableRowsConfig,\n DataTableLabels,\n DataTableRowAction,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { canEditRow, canUseRowAction, resolveRowActionLabel } from \"../types\";\n\ntype DataTableRowActionsProps = {\n row: TData;\n rowActions: Array>;\n editableRows?: DataTableEditableRowsConfig;\n isEditing: boolean;\n onStartEditing: () => void;\n onCancelEditing: () => void;\n labels: DataTableLabels;\n};\n\nexport function createDataTableRowActions(ui: DataTableUiKit) {\n const {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n } = ui;\n\n return function DataTableRowActions({\n row,\n rowActions,\n editableRows,\n isEditing,\n onStartEditing,\n onCancelEditing,\n labels,\n }: DataTableRowActionsProps) {\n const actions = rowActions.filter((action) => canUseRowAction(action, row));\n const stopRowClickPropagation = React.useCallback(\n (event: React.SyntheticEvent) => {\n event.stopPropagation();\n },\n [],\n );\n\n if (isEditing) {\n return (\n \n \n \n \n {labels.cancelEdit}\n \n \n {labels.cancelEdit}\n \n );\n }\n\n const allowEdit = canEditRow(editableRows, row);\n if (!actions.length && !allowEdit) {\n return null;\n }\n\n return (\n \n \n \n \n \n \n {labels.rowActions}\n \n \n \n {labels.rowActions}\n \n \n {allowEdit ? (\n \n ) => {\n event.stopPropagation();\n onStartEditing();\n }}\n >\n \n {labels.editRow}\n \n \n ) : null}\n {allowEdit && actions.length ? : null}\n {actions.length ? (\n \n {actions.map((action) => {\n const Icon = action.icon;\n return (\n ) => {\n event.stopPropagation();\n void action.onClick(row);\n }}\n >\n {Icon ? : null}\n {resolveRowActionLabel(action.label, row)}\n \n );\n })}\n \n ) : null}\n \n \n );\n };\n}\n","import * as React from \"react\";\nimport {\n IconAdjustmentsHorizontal,\n IconLayoutGrid,\n IconList,\n IconSearch,\n IconX,\n} from \"../icons\";\nimport type {\n DataTableColumnFilterType,\n DataTableColumnFixed,\n DataTableColumnVisibilityOption,\n DataTableDensity,\n DataTableLabels,\n DataTableSelectionAction,\n DataTableToolbarAction,\n DataTableToolbarVisibility,\n DataTableViewMode,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { DATA_TABLE_DEFAULT_LABELS } from \"./data-table-labels\";\n\nexport type DataTableToolbarColumnFilter = {\n id: string;\n label: string;\n type: DataTableColumnFilterType;\n value: unknown;\n placeholder?: string;\n options: Array<{ label: string; value: string }>;\n};\n\ntype DataTableToolbarProps = {\n title?: string;\n description?: string;\n toolbarQueryValue: string;\n toolbarQueryPlaceholder: string;\n onToolbarQueryValueChange: (value: string) => void;\n customToolbar?: React.ReactNode;\n compactToolbar?: React.ReactNode;\n viewMode: DataTableViewMode;\n onViewModeChange?: (viewMode: DataTableViewMode) => void;\n enableViewToggle: boolean;\n toolbarActions: Array>;\n selectionActions: Array>;\n selectedRows: Array;\n showHiddenRows: boolean;\n hiddenRowsLabel?: string;\n onShowHiddenRowsChange?: (showHiddenRows: boolean) => void;\n allRows: Array;\n columnVisibilityOptions: Array;\n onColumnVisibilityChange?: (columnId: string, visible: boolean) => void;\n enableColumnPinning: boolean;\n onColumnPinningChange: (columnId: string, side: DataTableColumnFixed | false) => void;\n columnFilters: Array;\n onColumnFilterChange: (columnId: string, value: unknown) => void;\n onClearColumnFilters: () => void;\n density: DataTableDensity;\n onDensityChange: (density: DataTableDensity) => void;\n enableDensityToggle: boolean;\n labels: DataTableLabels;\n toolbarVisibility?: DataTableToolbarVisibility;\n openFileDialog?: () => void;\n};\n\nexport function createDataTableToolbar(ui: DataTableUiKit) {\n const uiClassNames = ui.classNames ?? {};\n const {\n Button,\n ButtonGroup,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n } = ui;\n\n return function DataTableToolbar({\n title,\n description,\n toolbarQueryValue,\n toolbarQueryPlaceholder,\n onToolbarQueryValueChange,\n customToolbar,\n compactToolbar,\n viewMode,\n onViewModeChange,\n enableViewToggle,\n toolbarActions,\n selectionActions,\n selectedRows,\n showHiddenRows,\n hiddenRowsLabel,\n onShowHiddenRowsChange,\n allRows,\n columnVisibilityOptions,\n onColumnVisibilityChange,\n enableColumnPinning,\n onColumnPinningChange,\n columnFilters,\n onColumnFilterChange,\n onClearColumnFilters,\n density,\n onDensityChange,\n enableDensityToggle,\n labels,\n toolbarVisibility,\n openFileDialog,\n }: DataTableToolbarProps) {\n const compactSearchInputRef = React.useRef(null);\n const [isCompactSearchVisible, setIsCompactSearchVisible] =\n React.useState(false);\n const compactToolbarIconButtonClassName =\n uiClassNames.toolbarCompactIconButton ?? \"\";\n const primaryActions = toolbarActions.filter(\n (action) => (action.placement ?? \"primary\") === \"primary\",\n );\n const trailingActions = toolbarActions.filter(\n (action) => action.placement === \"trailing\",\n );\n const showTitle = toolbarVisibility?.title ?? true;\n const showSearch = toolbarVisibility?.search ?? true;\n const showActions = toolbarVisibility?.actions ?? true;\n const showTrailingActions = toolbarVisibility?.trailingActions ?? true;\n const showOptions = toolbarVisibility?.options ?? true;\n const showViewToggle = toolbarVisibility?.viewToggle ?? true;\n const showCustomToolbar = toolbarVisibility?.customToolbar ?? true;\n const hasVisibleTitle = showTitle && Boolean(title || description);\n const hasVisibleSearch = showSearch;\n const hasVisiblePrimaryActions = showActions && primaryActions.length > 0;\n const hasVisibleSelectionActions =\n selectedRows.length > 0 && selectionActions.length > 0;\n const hasVisibleOptions =\n showOptions &&\n (columnVisibilityOptions.some((column) => column.canHide) ||\n Boolean(onShowHiddenRowsChange && hiddenRowsLabel) ||\n enableColumnPinning ||\n enableDensityToggle);\n const hasVisibleViewToggle =\n showViewToggle && enableViewToggle && Boolean(onViewModeChange);\n const hasVisibleTrailingActions =\n showTrailingActions && trailingActions.length > 0;\n const hasVisibleCustomToolbar = showCustomToolbar && Boolean(customToolbar);\n const hasVisibleCompactToolbar =\n showCustomToolbar && Boolean(compactToolbar ?? customToolbar);\n const selectedRowCountLabel = labels.selectedRows(selectedRows.length);\n\n React.useEffect(() => {\n if (!isCompactSearchVisible) {\n return;\n }\n\n compactSearchInputRef.current?.focus();\n }, [isCompactSearchVisible]);\n\n if (\n !hasVisibleTitle &&\n !hasVisibleSearch &&\n !hasVisiblePrimaryActions &&\n !hasVisibleSelectionActions &&\n !hasVisibleOptions &&\n !hasVisibleViewToggle &&\n !hasVisibleTrailingActions &&\n !hasVisibleCustomToolbar &&\n !hasVisibleCompactToolbar\n ) {\n return null;\n }\n\n return (\n
\n {showTitle && (title || description) ? (\n
\n {title ? (\n

{title}

\n ) : null}\n {description ? (\n \n {description}\n

\n ) : null}\n
\n ) : null}\n\n
\n \n {showSearch ? (\n <>\n
\n \n ) => {\n onToolbarQueryValueChange(event.target.value);\n }}\n placeholder={toolbarQueryPlaceholder}\n />\n \n \n \n {toolbarQueryValue ? (\n \n {\n onToolbarQueryValueChange(\"\");\n }}\n aria-label={labels.clearSearch}\n title={labels.clearSearch}\n >\n \n \n \n ) : null}\n \n
\n \n \n {\n setIsCompactSearchVisible((current) => !current);\n }}\n >\n \n {labels.searchTable}\n \n \n {labels.searchTable}\n \n \n ) : null}\n\n {showActions ? (\n
\n {primaryActions.map((action) => {\n const collapsesToIcon =\n !action.iconOnly && Boolean(action.icon);\n const button = (\n {\n void action.onClick({\n rows: allRows,\n openFileDialog,\n });\n }}\n disabled={action.disabled}\n aria-label={action.label}\n title={action.iconOnly ? undefined : action.label}\n >\n {action.icon ? : null}\n {action.iconOnly ? (\n {action.label}\n ) : collapsesToIcon ? (\n \n {action.label}\n \n ) : (\n {action.label}\n )}\n \n );\n\n return action.iconOnly ? (\n \n {button}\n {action.label}\n \n ) : (\n button\n );\n })}\n
\n ) : null}\n\n {hasVisibleCompactToolbar ? (\n \n {compactToolbar ?? customToolbar}\n
\n ) : null}\n\n
\n\n \n {selectedRows.length ? (\n \n {selectedRowCountLabel}\n
\n ) : null}\n {selectedRows.length\n ? selectionActions.map((action) => {\n const Icon = action.icon;\n const disabled =\n typeof action.disabled === \"function\"\n ? action.disabled(selectedRows)\n : action.disabled;\n\n return (\n \n \n {\n void action.onClick({ rows: selectedRows });\n }}\n aria-label={action.label}\n >\n {Icon ? : null}\n {action.label}\n \n \n {action.label}\n \n );\n })\n : null}\n\n {hasVisibleOptions ? (\n \n \n \n \n {labels.tableOptions}\n \n \n \n {labels.tableOptions}\n \n {onShowHiddenRowsChange && hiddenRowsLabel ? (\n {\n onShowHiddenRowsChange(checked === true);\n }}\n >\n {labels.showHiddenRows(hiddenRowsLabel)}\n \n ) : null}\n \n {enableDensityToggle ? (\n <>\n \n {labels.density}\n \n {(\n [\n [\"compact\", labels.compactDensity],\n [\"comfortable\", labels.comfortableDensity],\n [\"spacious\", labels.spaciousDensity],\n ] as const\n ).map(([nextDensity, label]) => (\n {\n onDensityChange(nextDensity);\n }}\n >\n {label}\n \n ))}\n \n \n ) : null}\n {columnVisibilityOptions.some((column) => column.canHide) ? (\n <>\n \n {labels.columns}\n \n {columnVisibilityOptions\n .filter((column) => column.canHide)\n .map((column) => (\n {\n onColumnVisibilityChange?.(\n column.id,\n checked === true,\n );\n }}\n >\n {column.label}\n \n ))}\n \n \n ) : null}\n {enableColumnPinning ? (\n <>\n \n \n {labels.pinLeft} / {labels.pinRight}\n \n \n {columnVisibilityOptions.map((column) => (\n {\n event.preventDefault();\n }}\n >\n \n {column.label}\n \n {\n event.stopPropagation();\n onColumnPinningChange(column.id, \"left\");\n }}\n >\n L\n \n {\n event.stopPropagation();\n onColumnPinningChange(column.id, \"right\");\n }}\n >\n R\n \n {\n event.stopPropagation();\n onColumnPinningChange(column.id, false);\n }}\n >\n -\n \n \n ))}\n \n \n ) : null}\n \n \n ) : null}\n\n {showViewToggle && enableViewToggle && onViewModeChange ? (\n \n \n \n {\n onViewModeChange(\"table\");\n }}\n >\n \n \n {labels.switchToTableView ??\n DATA_TABLE_DEFAULT_LABELS.switchToTableView}\n \n \n \n \n {labels.tableView ??\n DATA_TABLE_DEFAULT_LABELS.tableView}\n \n \n \n \n {\n onViewModeChange(\"card\");\n }}\n >\n \n \n {labels.switchToCardView ??\n DATA_TABLE_DEFAULT_LABELS.switchToCardView}\n \n \n \n \n {labels.cardView ??\n DATA_TABLE_DEFAULT_LABELS.cardView}\n \n \n \n ) : null}\n\n {showTrailingActions\n ? trailingActions.map((action) => {\n const collapsesToIcon =\n !action.iconOnly && Boolean(action.icon);\n const button = (\n {\n void action.onClick({\n rows: allRows,\n openFileDialog,\n });\n }}\n disabled={action.disabled}\n aria-label={action.label}\n title={action.iconOnly ? undefined : action.label}\n className={`size-7 shrink-0 ${action.iconOnly ? \"\" : `${collapsesToIcon ? \"px-0 @md/data-table:px-2.5\" : \"\"} @md/data-table:h-8 @md/data-table:w-fit`} ${action.iconOnly || collapsesToIcon ? compactToolbarIconButtonClassName : \"\"} ${uiClassNames.toolbarInputButton ?? \"\"}`}\n >\n {action.icon ? (\n \n ) : null}\n {action.iconOnly ? (\n {action.label}\n ) : collapsesToIcon ? (\n \n {action.label}\n \n ) : (\n {action.label}\n )}\n \n );\n\n return action.iconOnly ? (\n \n {button}\n {action.label}\n \n ) : (\n button\n );\n })\n : null}\n
\n \n\n {showSearch && isCompactSearchVisible ? (\n \n \n ) => {\n onToolbarQueryValueChange(event.target.value);\n }}\n placeholder={toolbarQueryPlaceholder}\n />\n \n \n \n {toolbarQueryValue ? (\n \n {\n onToolbarQueryValueChange(\"\");\n }}\n aria-label={labels.clearSearch}\n title={labels.clearSearch}\n >\n \n \n \n ) : null}\n \n \n ) : null}\n\n {columnFilters.length ? (\n \n {columnFilters.map((filter) => (\n \n ))}\n {columnFilters.some((filter) =>\n hasColumnFilterValue(filter.value),\n ) ? (\n \n {labels.clearFilters}\n \n ) : null}\n \n ) : null}\n\n \n\n {showCustomToolbar && customToolbar ? (\n \n {customToolbar}\n \n ) : null}\n \n );\n };\n\n function ToolbarColumnFilterControl({\n filter,\n labels,\n onColumnFilterChange,\n }: {\n filter: DataTableToolbarColumnFilter;\n labels: DataTableLabels;\n onColumnFilterChange: (columnId: string, value: unknown) => void;\n }) {\n if (filter.type === \"text\") {\n return (\n \n ) => {\n onColumnFilterChange(filter.id, event.target.value);\n }}\n placeholder={filter.placeholder ?? filter.label}\n aria-label={`${labels.filters}: ${filter.label}`}\n />\n \n \n \n \n );\n }\n\n const selectedValues = Array.isArray(filter.value)\n ? filter.value.map(String)\n : typeof filter.value === \"string\" && filter.value\n ? [filter.value]\n : [];\n const selectedLabel =\n selectedValues.length === 0\n ? filter.label\n : `${filter.label}: ${\n selectedValues.length === 1\n ? (filter.options.find(\n (option) => option.value === selectedValues[0],\n )?.label ?? selectedValues[0])\n : selectedValues.length\n }`;\n\n return (\n \n \n \n \n \n {filter.label}\n \n {filter.type === \"select\" ? (\n {\n onColumnFilterChange(filter.id, \"\");\n }}\n >\n {labels.allFilterOptions ??\n DATA_TABLE_DEFAULT_LABELS.allFilterOptions}\n \n ) : null}\n {filter.options.map((option) => (\n {\n if (filter.type === \"select\") {\n onColumnFilterChange(\n filter.id,\n checked === true ? option.value : \"\",\n );\n return;\n }\n\n const nextValues = new Set(selectedValues);\n if (checked === true) {\n nextValues.add(option.value);\n } else {\n nextValues.delete(option.value);\n }\n onColumnFilterChange(filter.id, Array.from(nextValues));\n }}\n >\n {option.label}\n \n ))}\n \n \n \n );\n }\n}\n\nfunction hasColumnFilterValue(value: unknown) {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n return value !== undefined && value !== null && value !== \"\";\n}\n","import * as React from \"react\";\nimport { DataTableTablePanel } from \"./data-table-table-panel\";\nimport type { DataTableTablePanelProps } from \"./data-table-table-panel\";\n\nconst LazyDataTableVirtualTablePanel = React.lazy(async () => {\n const module = await import(\"./data-table-virtual-table-panel\");\n return { default: module.DataTableVirtualTablePanel };\n}) as unknown as typeof DataTableTablePanel;\n\nexport function DataTableTablePanelRouter(\n props: DataTableTablePanelProps,\n) {\n const config =\n typeof props.virtualization === \"object\"\n ? props.virtualization\n : undefined;\n const enabled =\n props.virtualization === true || config?.enabled === true;\n\n if (!enabled) {\n return ;\n }\n\n return (\n }>\n \n \n );\n}\n","import type {\n DataTableSavedView,\n DataTableSavedViewSlice,\n DataTableSavedViewsChangeOperation,\n DataTableSavedViewsConfig,\n DataTableSavedViewsPayload,\n DataTableState,\n} from \"../types\";\n\nconst STORAGE_PREFIX = \"data-table-pro:saved-views:\";\nconst DEFAULT_VERSION = 1;\nconst DEFAULT_SLICES: Array = [\n \"sorting\",\n \"columnVisibility\",\n \"columnFilters\",\n \"columnOrder\",\n \"columnPinning\",\n \"columnSizing\",\n \"density\",\n \"viewMode\",\n \"showHiddenRows\",\n \"globalFilter\",\n];\nlet fallbackId = 0;\n\nexport function readDataTableSavedViews(\n config: DataTableSavedViewsConfig | undefined,\n): Array {\n const storage = resolveStorage(config);\n if (!config || !storage) {\n return [];\n }\n\n let serialized: string | null;\n try {\n serialized = storage.getItem(getStorageKey(config.key));\n } catch (error) {\n config.onError?.({ error, operation: \"read\" });\n return [];\n }\n if (!serialized) {\n return [];\n }\n\n let parsed: unknown;\n try {\n parsed = (config.deserialize ?? JSON.parse)(serialized);\n } catch (error) {\n config.onError?.({ error, operation: \"deserialize\" });\n return [];\n }\n\n if (!isRecord(parsed) || !(\"version\" in parsed) || !(\"views\" in parsed)) {\n return [];\n }\n\n const targetVersion = config.version ?? DEFAULT_VERSION;\n let candidate: unknown = parsed.views;\n if (parsed.version !== targetVersion) {\n if (!config.migrate) {\n return [];\n }\n try {\n candidate = config.migrate(\n { version: parsed.version, views: parsed.views },\n targetVersion,\n );\n } catch (error) {\n config.onError?.({ error, operation: \"migrate\" });\n return [];\n }\n }\n\n if (!Array.isArray(candidate)) {\n return [];\n }\n\n return candidate\n .map((view) => validateSavedView(view, config.slices))\n .filter((view): view is DataTableSavedView => Boolean(view));\n}\n\nexport function createDataTableSavedView(\n config: DataTableSavedViewsConfig | undefined,\n name: string,\n state: DataTableState,\n) {\n const normalizedName = name.trim();\n if (!config || !normalizedName) {\n return undefined;\n }\n\n const now = new Date().toISOString();\n const view: DataTableSavedView = {\n id: createSavedViewId(),\n name: normalizedName,\n createdAt: now,\n updatedAt: now,\n state: selectSavedViewSlices(state, config.slices),\n };\n const views = [...readDataTableSavedViews(config), view];\n return writeViews(config, views, \"create\") ? cloneSavedView(view) : undefined;\n}\n\nexport function renameDataTableSavedView(\n config: DataTableSavedViewsConfig | undefined,\n id: string,\n name: string,\n) {\n const normalizedName = name.trim();\n if (!config || !normalizedName) {\n return undefined;\n }\n\n let renamed: DataTableSavedView | undefined;\n const views = readDataTableSavedViews(config).map((view) => {\n if (view.id !== id) {\n return view;\n }\n renamed = {\n ...view,\n name: normalizedName,\n updatedAt: new Date().toISOString(),\n };\n return renamed;\n });\n if (!renamed) {\n return undefined;\n }\n\n return writeViews(config, views, \"rename\")\n ? cloneSavedView(renamed)\n : undefined;\n}\n\nexport function deleteDataTableSavedView(\n config: DataTableSavedViewsConfig | undefined,\n id: string,\n) {\n if (!config) {\n return false;\n }\n\n const current = readDataTableSavedViews(config);\n const views = current.filter((view) => view.id !== id);\n return views.length !== current.length && writeViews(config, views, \"delete\");\n}\n\nexport function clearDataTableSavedViews(\n config: DataTableSavedViewsConfig | undefined,\n) {\n const storage = resolveStorage(config);\n if (!config || !storage) {\n return false;\n }\n\n try {\n storage.removeItem(getStorageKey(config.key));\n } catch (error) {\n config.onError?.({ error, operation: \"remove\" });\n return false;\n }\n config.onChange?.([], \"clear\");\n return true;\n}\n\nfunction writeViews(\n config: DataTableSavedViewsConfig,\n views: Array,\n operation: DataTableSavedViewsChangeOperation,\n) {\n const storage = resolveStorage(config);\n if (!storage) {\n return false;\n }\n\n let serialized: string;\n try {\n const payload: DataTableSavedViewsPayload = {\n version: config.version ?? DEFAULT_VERSION,\n views,\n };\n serialized = (config.serialize ?? JSON.stringify)(payload);\n } catch (error) {\n config.onError?.({ error, operation: \"serialize\" });\n return false;\n }\n\n try {\n storage.setItem(getStorageKey(config.key), serialized);\n } catch (error) {\n config.onError?.({ error, operation: \"write\" });\n return false;\n }\n const snapshots = views.map(cloneSavedView);\n config.onChange?.(snapshots, operation);\n return true;\n}\n\nfunction selectSavedViewSlices(\n state: DataTableState,\n slices: Array | undefined,\n) {\n const selected = new Set(slices ?? DEFAULT_SLICES);\n const snapshot: Partial = {};\n for (const slice of Object.keys(state) as Array) {\n if (selected.has(slice)) {\n Object.assign(snapshot, {\n [slice]: cloneStateSlice(slice, state[slice]),\n });\n }\n }\n return snapshot;\n}\n\nfunction validateSavedView(\n value: unknown,\n slices: Array | undefined,\n): DataTableSavedView | undefined {\n if (\n !isRecord(value) ||\n typeof value.id !== \"string\" ||\n !value.id ||\n typeof value.name !== \"string\" ||\n !value.name.trim() ||\n typeof value.createdAt !== \"string\" ||\n typeof value.updatedAt !== \"string\"\n ) {\n return undefined;\n }\n\n return {\n id: value.id,\n name: value.name.trim(),\n createdAt: value.createdAt,\n updatedAt: value.updatedAt,\n state: validateState(value.state, slices),\n };\n}\n\nfunction validateState(\n value: unknown,\n slices: Array | undefined,\n) {\n if (!isRecord(value)) {\n return {};\n }\n\n const selected = new Set(slices ?? DEFAULT_SLICES);\n const state: Partial = {};\n const sorting = validateSorting(value.sorting);\n if (selected.has(\"sorting\") && sorting) state.sorting = sorting;\n const pagination = validatePagination(value.pagination);\n if (selected.has(\"pagination\") && pagination) state.pagination = pagination;\n const rowSelection = validateBooleanRecord(value.rowSelection);\n if (selected.has(\"rowSelection\") && rowSelection) {\n state.rowSelection = rowSelection;\n }\n const visibility = validateBooleanRecord(value.columnVisibility);\n if (selected.has(\"columnVisibility\") && visibility) {\n state.columnVisibility = visibility;\n }\n const filters = validateFilters(value.columnFilters);\n if (selected.has(\"columnFilters\") && filters) state.columnFilters = filters;\n const expanded =\n value.expanded === true\n ? true\n : validateBooleanRecord(value.expanded);\n if (selected.has(\"expanded\") && expanded !== undefined) {\n state.expanded = expanded;\n }\n const order = validateStringArray(value.columnOrder);\n if (selected.has(\"columnOrder\") && order) state.columnOrder = order;\n const pinning = validatePinning(value.columnPinning);\n if (selected.has(\"columnPinning\") && pinning) {\n state.columnPinning = pinning;\n }\n const sizing = validateSizingRecord(value.columnSizing);\n if (selected.has(\"columnSizing\") && sizing) state.columnSizing = sizing;\n if (\n selected.has(\"density\") &&\n (value.density === \"compact\" ||\n value.density === \"comfortable\" ||\n value.density === \"spacious\")\n ) {\n state.density = value.density;\n }\n if (\n selected.has(\"viewMode\") &&\n (value.viewMode === \"table\" || value.viewMode === \"card\")\n ) {\n state.viewMode = value.viewMode;\n }\n if (selected.has(\"showHiddenRows\") && typeof value.showHiddenRows === \"boolean\") {\n state.showHiddenRows = value.showHiddenRows;\n }\n if (selected.has(\"globalFilter\") && typeof value.globalFilter === \"string\") {\n state.globalFilter = value.globalFilter;\n }\n return state;\n}\n\nfunction cloneSavedView(view: DataTableSavedView): DataTableSavedView {\n return {\n ...view,\n state: validateState(view.state, Object.keys(view.state) as Array),\n };\n}\n\nfunction cloneStateSlice(\n slice: DataTableSavedViewSlice,\n value: unknown,\n) {\n if (Array.isArray(value)) {\n return (value as Array).map((item) =>\n isRecord(item) ? { ...item } : item,\n );\n }\n if (isRecord(value)) {\n if (slice === \"columnPinning\") {\n return {\n left: Array.isArray(value.left)\n ? [...(value.left as Array)]\n : undefined,\n right: Array.isArray(value.right)\n ? [...(value.right as Array)]\n : undefined,\n };\n }\n return { ...value };\n }\n return value;\n}\n\nfunction validateSorting(value: unknown) {\n if (!Array.isArray(value)) return undefined;\n return value\n .filter(\n (item): item is { id: string; desc?: boolean } =>\n isRecord(item) && typeof item.id === \"string\",\n )\n .map((item) => ({ id: item.id, desc: Boolean(item.desc) }));\n}\n\nfunction validatePagination(value: unknown) {\n if (\n !isRecord(value) ||\n !Number.isInteger(value.pageIndex) ||\n (value.pageIndex as number) < 0 ||\n !Number.isInteger(value.pageSize) ||\n (value.pageSize as number) < 1\n ) {\n return undefined;\n }\n return {\n pageIndex: value.pageIndex as number,\n pageSize: value.pageSize as number,\n };\n}\n\nfunction validateFilters(value: unknown) {\n if (!Array.isArray(value)) return undefined;\n return value\n .filter(\n (item): item is { id: string; value: unknown } =>\n isRecord(item) &&\n typeof item.id === \"string\" &&\n Object.prototype.hasOwnProperty.call(item, \"value\"),\n )\n .map((item) => ({ id: item.id, value: item.value }));\n}\n\nfunction validatePinning(value: unknown) {\n if (!isRecord(value)) return undefined;\n return {\n left: validateStringArray(value.left) ?? [],\n right: validateStringArray(value.right) ?? [],\n };\n}\n\nfunction validateBooleanRecord(value: unknown) {\n if (!isRecord(value)) return undefined;\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, boolean] => typeof entry[1] === \"boolean\",\n ),\n );\n}\n\nfunction validateSizingRecord(value: unknown) {\n if (!isRecord(value)) return undefined;\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, number] =>\n typeof entry[1] === \"number\" &&\n Number.isFinite(entry[1]) &&\n entry[1] >= 0,\n ),\n );\n}\n\nfunction validateStringArray(value: unknown) {\n if (!Array.isArray(value)) return undefined;\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction resolveStorage(config: DataTableSavedViewsConfig | undefined) {\n if (!config) {\n return undefined;\n }\n if (config.storage) {\n return config.storage;\n }\n if (typeof window === \"undefined\") {\n return undefined;\n }\n try {\n return window.localStorage;\n } catch (error) {\n config.onError?.({ error, operation: \"read\" });\n return undefined;\n }\n}\n\nfunction createSavedViewId() {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n fallbackId += 1;\n return `view-${Date.now().toString(36)}-${fallbackId.toString(36)}`;\n}\n\nfunction getStorageKey(key: string) {\n return `${STORAGE_PREFIX}${key}`;\n}\n\nfunction isRecord(value: unknown): value is Record {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import * as React from \"react\";\nimport { IconDownload } from \"../icons\";\nimport type {\n ColumnFiltersState,\n ColumnPinningState,\n OnChangeFn,\n Table as TanStackTable,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableColumnFixed,\n DataTableLabels,\n DataTableProps,\n} from \"../types\";\nimport {\n exportDataTableCsv,\n getAccessorKey,\n getColumnId,\n hasFilterValue,\n normalizeColumnFilterOptions,\n startCase,\n} from \"./data-table-utils\";\n\nexport function useDataTableToolbarFeatures({\n columns,\n currentColumnFilters,\n currentColumnPinning,\n effectiveColumnVisibility,\n enableColumnFilters,\n handleColumnFiltersChange,\n handleColumnPinningChange,\n labels,\n table,\n toolbarActions,\n visibleData,\n csvExport,\n}: {\n columns: DataTableProps[\"columns\"];\n currentColumnFilters: ColumnFiltersState;\n currentColumnPinning: ColumnPinningState;\n effectiveColumnVisibility: VisibilityState;\n enableColumnFilters: boolean | undefined;\n handleColumnFiltersChange: OnChangeFn;\n handleColumnPinningChange: OnChangeFn;\n labels: DataTableLabels;\n table: TanStackTable;\n toolbarActions: DataTableProps[\"toolbarActions\"];\n visibleData: Array;\n csvExport: DataTableProps[\"csvExport\"];\n}) {\n const columnVisibilityOptions = React.useMemo(() => {\n return columns.map((column, index) => {\n const id = getColumnId(column, index);\n const header = column.header;\n const accessorKey = getAccessorKey(column);\n const label =\n typeof header === \"string\"\n ? header\n : accessorKey\n ? startCase(accessorKey)\n : startCase(id);\n\n const pinned: false | DataTableColumnFixed =\n currentColumnPinning.left?.includes(id) === true\n ? \"left\"\n : currentColumnPinning.right?.includes(id) === true\n ? \"right\"\n : false;\n\n return {\n id,\n label,\n visible: effectiveColumnVisibility[id] !== false,\n canHide: column.enableHiding !== false,\n pinned,\n };\n });\n }, [columns, currentColumnPinning, effectiveColumnVisibility]);\n\n const toolbarColumnFilters = React.useMemo(() => {\n if (enableColumnFilters === false) {\n return [];\n }\n\n return columns.flatMap((column, index) => {\n const filter = column.meta?.filter;\n if (!filter) {\n return [];\n }\n\n const id = getColumnId(column, index);\n const header = column.header;\n const accessorKey = getAccessorKey(column);\n const label =\n filter.label ??\n (typeof header === \"string\"\n ? header\n : accessorKey\n ? startCase(accessorKey)\n : startCase(id));\n const state = currentColumnFilters.find((item) => item.id === id);\n const rawOptions =\n typeof filter.options === \"function\"\n ? filter.options({ rows: visibleData })\n : (filter.options ?? []);\n\n return [\n {\n id,\n label,\n type: filter.type,\n value: state?.value,\n placeholder: filter.placeholder,\n options: normalizeColumnFilterOptions(rawOptions),\n },\n ];\n });\n }, [columns, currentColumnFilters, enableColumnFilters, visibleData]);\n\n const handleToolbarColumnFilterChange = React.useCallback(\n (columnId: string, value: unknown) => {\n handleColumnFiltersChange((current) => {\n const next = current.filter((filter) => filter.id !== columnId);\n if (hasFilterValue(value)) {\n next.push({ id: columnId, value });\n }\n return next;\n });\n },\n [handleColumnFiltersChange],\n );\n\n const handleClearColumnFilters = React.useCallback(() => {\n handleColumnFiltersChange([]);\n }, [handleColumnFiltersChange]);\n\n const handleToolbarColumnPinningChange = React.useCallback(\n (columnId: string, side: DataTableColumnFixed | false) => {\n handleColumnPinningChange((current) => {\n const left = (current.left ?? []).filter((id) => id !== columnId);\n const right = (current.right ?? []).filter((id) => id !== columnId);\n\n if (side === \"left\") {\n left.push(columnId);\n }\n if (side === \"right\") {\n right.push(columnId);\n }\n\n return { left, right };\n });\n },\n [handleColumnPinningChange],\n );\n\n const handleCsvExport = React.useCallback(() => {\n if (!csvExport) {\n return;\n }\n\n return exportDataTableCsv({\n csvExport,\n table,\n labels,\n });\n }, [csvExport, labels, table]);\n\n const effectiveToolbarActions = React.useMemo(() => {\n if (!csvExport) {\n return toolbarActions ?? [];\n }\n\n return [\n ...(toolbarActions ?? []),\n {\n key: \"__csv_export__\",\n label: labels.exportCsv,\n icon: IconDownload,\n placement: \"trailing\" as const,\n onClick: handleCsvExport,\n },\n ];\n }, [csvExport, handleCsvExport, labels.exportCsv, toolbarActions]);\n\n return {\n columnVisibilityOptions,\n effectiveToolbarActions,\n handleClearColumnFilters,\n handleToolbarColumnFilterChange,\n handleToolbarColumnPinningChange,\n toolbarColumnFilters,\n };\n}\n","import * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport type {\n Table as TanStackTable,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableActionErrorContext,\n DataTableApi,\n DataTableProps,\n DataTableState,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport { createDataTableCardView } from \"./create-data-table-card-view\";\nimport { createDataTableEmptyState } from \"./create-data-table-empty-state\";\nimport { createDataTablePagination } from \"./create-data-table-pagination\";\nimport { createDataTableRowActions } from \"./create-data-table-row-actions\";\nimport { createDataTableToolbar } from \"./create-data-table-toolbar\";\nimport { DataTableCardPanel as DefaultDataTableCardPanel } from \"./data-table-card-panel\";\nimport { DataTableFooterSection } from \"./data-table-footer-section\";\nimport { DataTableTablePanelRouter as DefaultDataTableTablePanel } from \"./data-table-table-panel-router\";\nimport { DataTableToolbarSection } from \"./data-table-toolbar-section\";\nimport {\n clearDataTableSavedViews,\n createDataTableSavedView,\n deleteDataTableSavedView,\n readDataTableSavedViews,\n renameDataTableSavedView,\n} from \"./data-table-saved-views\";\nimport { resolveDataTableLabels } from \"./data-table-labels\";\nimport { useDataTableColumns } from \"./use-data-table-columns\";\nimport { useDataTableInstance } from \"./use-data-table-instance\";\nimport { useDataTableScrollViewport } from \"./use-data-table-scroll-viewport\";\nimport {\n exportDataTableCsv,\n getColumnId,\n getInitialColumnPinning,\n} from \"./data-table-utils\";\nimport { useDataTableState } from \"./use-data-table-state\";\nimport { clearDataTableColumnPrefs } from \"./use-data-table-column-prefs\";\nimport { useDataTableToolbarFeatures } from \"./use-data-table-toolbar-features\";\nimport { useColumnLayout } from \"./use-column-layout\";\nimport { useRowEditing } from \"./use-row-editing\";\n\ntype CreateDataTableOptions = {\n CardPanel?: typeof DefaultDataTableCardPanel;\n TablePanel?: typeof DefaultDataTableTablePanel;\n};\n\nexport function createDataTable(ui: DataTableUiKit) {\n return createDataTableWithPanels(ui);\n}\n\nexport function createDataTableWithPanels(\n ui: DataTableUiKit,\n options: CreateDataTableOptions = {},\n) {\n const DataTableCardPanel =\n options.CardPanel ?? DefaultDataTableCardPanel;\n const DataTableTablePanel =\n options.TablePanel ?? DefaultDataTableTablePanel;\n const uiClassNames = ui.classNames ?? {};\n const {\n rootClassName,\n Button,\n Checkbox,\n Input,\n ScrollArea,\n ScrollBar,\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableFooter = \"tfoot\",\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider = React.Fragment,\n TooltipTrigger,\n } = ui;\n const DataTableEmptyState = createDataTableEmptyState(ui);\n const DataTableRowActions = createDataTableRowActions(ui);\n const { DataTableFooter } = createDataTablePagination(ui);\n const DataTableToolbar = createDataTableToolbar(ui);\n const DataTableCardView = createDataTableCardView(ui, DataTableRowActions);\n const defaultColumn = {\n minSize: 80,\n size: 180,\n maxSize: 720,\n };\n\n return function DataTable({\n columns,\n data,\n getRowId,\n children,\n title,\n description,\n toolbarQueryValue,\n onToolbarQueryValueChange,\n toolbarQueryPlaceholder,\n toolbarQueryDebounceMs,\n manualFiltering = false,\n enableToolbarQueryFiltering = true,\n globalFilterFn,\n columnFilters,\n onColumnFiltersChange,\n enableColumnFilters,\n customToolbar,\n compactToolbar,\n rowsPerPageOptions = [10, 20, 50, 100],\n totalRowCount,\n hasNextPage,\n sorting,\n onSortingChange,\n manualSorting = false,\n pageIndex,\n pageSize,\n onPageIndexChange,\n onPageSizeChange,\n pageCount,\n manualPagination = false,\n rowSelection,\n onRowSelectionChange,\n enableRowSelection = false,\n expanded,\n onExpandedChange,\n getRowCanExpand,\n renderExpandedRow,\n columnOrder,\n onColumnOrderChange,\n enableColumnReordering = false,\n columnPinning,\n onColumnPinningChange,\n enableColumnPinning = false,\n toolbarActions = [],\n selectionActions = [],\n rowActions = [],\n csvExport,\n density,\n onDensityChange,\n enableDensityToggle = false,\n columnPrefsKey,\n persistence,\n savedViews,\n initialState,\n state: unifiedState,\n onStateChange,\n apiRef,\n labels,\n summaryRows = [],\n cardRenderer,\n cardSizing,\n cardGridClassName,\n cardClassName,\n viewMode,\n onViewModeChange,\n enableViewToggle = false,\n emptyState,\n isLoading = false,\n loadingRowCount,\n getRowLoadingState,\n hiddenRows,\n showHiddenRows,\n onShowHiddenRowsChange,\n infiniteScroll,\n editableRows,\n columnVisibility,\n onColumnVisibilityChange,\n columnSizing,\n onColumnSizingChange,\n enableColumnResizing = false,\n columnResizeMode = \"onChange\",\n layoutMode = \"fill\",\n stickyHeader = true,\n showFooter = true,\n showToolbar = true,\n dir = \"ltr\",\n flexGrow = true,\n toolbarVisibility,\n className,\n tableClassName,\n tableContainerClassName,\n getRowClassName,\n onRowClick,\n onActionError,\n dragAndDrop,\n fileUpload,\n virtualization,\n }: DataTableProps) {\n const containerRef = React.useRef(null);\n const fileInputRef = React.useRef(null);\n const tableScrollContainerRef = React.useRef(null);\n const draggedColumnIdRef = React.useRef(null);\n const tableRef = React.useRef | null>(null);\n const lastSelectedRowIdRef = React.useRef(null);\n const resolvedLabels = React.useMemo(\n () => resolveDataTableLabels(labels),\n [labels],\n );\n const resolvedToolbarQueryValue =\n toolbarQueryValue ?? unifiedState?.globalFilter;\n const resolvedSorting = sorting ?? unifiedState?.sorting;\n const resolvedPageIndex =\n pageIndex ?? unifiedState?.pagination?.pageIndex;\n const resolvedPageSize = pageSize ?? unifiedState?.pagination?.pageSize;\n const resolvedRowSelection =\n rowSelection ?? unifiedState?.rowSelection;\n const resolvedColumnVisibility =\n columnVisibility ?? unifiedState?.columnVisibility;\n const resolvedColumnFilters =\n columnFilters ?? unifiedState?.columnFilters;\n const resolvedExpanded = expanded ?? unifiedState?.expanded;\n const resolvedColumnOrder =\n columnOrder ?? unifiedState?.columnOrder;\n const resolvedColumnPinning =\n columnPinning ?? unifiedState?.columnPinning;\n const resolvedColumnSizing =\n columnSizing ?? unifiedState?.columnSizing;\n const resolvedDensity = density ?? unifiedState?.density;\n const resolvedViewMode = viewMode ?? unifiedState?.viewMode;\n const resolvedShowHiddenRows =\n showHiddenRows ?? unifiedState?.showHiddenRows;\n useDataTableStateConflictWarnings(unifiedState, {\n columnFilters: columnFilters !== undefined,\n columnOrder: columnOrder !== undefined,\n columnPinning: columnPinning !== undefined,\n columnSizing: columnSizing !== undefined,\n columnVisibility: columnVisibility !== undefined,\n density: density !== undefined,\n expanded: expanded !== undefined,\n globalFilter: toolbarQueryValue !== undefined,\n pagination: pageIndex !== undefined || pageSize !== undefined,\n rowSelection: rowSelection !== undefined,\n showHiddenRows: showHiddenRows !== undefined,\n sorting: sorting !== undefined,\n viewMode: viewMode !== undefined,\n });\n const handleToolbarQueryValueChange = useDataTableStateSliceChange(\n \"globalFilter\",\n onToolbarQueryValueChange,\n onStateChange,\n );\n const handleSortingPropChange = useDataTableStateSliceChange(\n \"sorting\",\n onSortingChange,\n onStateChange,\n );\n const handleRowSelectionPropChange = useDataTableStateSliceChange(\n \"rowSelection\",\n onRowSelectionChange,\n onStateChange,\n );\n const handleColumnVisibilityPropChange = useDataTableStateSliceChange(\n \"columnVisibility\",\n onColumnVisibilityChange,\n onStateChange,\n );\n const handleColumnFiltersPropChange = useDataTableStateSliceChange(\n \"columnFilters\",\n onColumnFiltersChange,\n onStateChange,\n );\n const handleExpandedPropChange = useDataTableStateSliceChange(\n \"expanded\",\n onExpandedChange,\n onStateChange,\n );\n const handleColumnOrderPropChange = useDataTableStateSliceChange(\n \"columnOrder\",\n onColumnOrderChange,\n onStateChange,\n );\n const handleColumnPinningPropChange = useDataTableStateSliceChange(\n \"columnPinning\",\n onColumnPinningChange,\n onStateChange,\n );\n const handleColumnSizingPropChange = useDataTableStateSliceChange(\n \"columnSizing\",\n onColumnSizingChange,\n onStateChange,\n );\n const handleDensityPropChange = useDataTableStateSliceChange(\n \"density\",\n onDensityChange,\n onStateChange,\n );\n const handleViewModePropChange = useDataTableStateSliceChange(\n \"viewMode\",\n onViewModeChange,\n onStateChange,\n );\n const handleShowHiddenRowsPropChange = useDataTableStateSliceChange(\n \"showHiddenRows\",\n onShowHiddenRowsChange,\n onStateChange,\n );\n const handlePageIndexPropChange = React.useCallback(\n (nextPageIndex: number) => {\n onPageIndexChange?.(nextPageIndex);\n onStateChange?.((current) => ({\n ...current,\n pagination: {\n pageIndex: nextPageIndex,\n pageSize:\n resolvedPageSize ?? current.pagination.pageSize,\n },\n }));\n },\n [onPageIndexChange, onStateChange, resolvedPageSize],\n );\n const handlePageSizePropChange = React.useCallback(\n (nextPageSize: number) => {\n onPageSizeChange?.(nextPageSize);\n onStateChange?.((current) => ({\n ...current,\n pagination: {\n pageIndex:\n resolvedPageIndex ?? current.pagination.pageIndex,\n pageSize: nextPageSize,\n },\n }));\n },\n [onPageSizeChange, onStateChange, resolvedPageIndex],\n );\n const runAction = React.useCallback(\n (\n context: Omit, \"error\">,\n action: () => void | Promise,\n ) => {\n runDataTableAction(action, context, onActionError);\n },\n [onActionError],\n );\n const guardedRowActions = React.useMemo(\n () =>\n rowActions.map((action) => ({\n ...action,\n onClick: (row: TData) => {\n runAction(\n {\n actionKey: action.key,\n row,\n source: \"rowAction\",\n },\n () => action.onClick(row),\n );\n },\n })),\n [rowActions, runAction],\n );\n const guardedOnRowClick = React.useMemo<\n DataTableProps[\"onRowClick\"]\n >(\n () =>\n onRowClick\n ? (context) => {\n runAction(\n {\n row: context.row,\n source: \"rowClick\",\n },\n () => onRowClick(context),\n );\n }\n : undefined,\n [onRowClick, runAction],\n );\n const handleEditError = React.useCallback(\n (error: unknown, row: TData) => {\n onActionError?.({\n error,\n row,\n source: \"edit\",\n });\n },\n [onActionError],\n );\n const {\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentColumnSizing,\n currentColumnVisibility,\n currentDensity,\n currentExpanded,\n currentPagination,\n currentRowSelection,\n currentShowHiddenRows,\n currentSorting,\n currentViewMode,\n effectiveColumnVisibility,\n globalFilterValue,\n handleDensityChange,\n handleShowHiddenRowsChange,\n handleViewModeChange,\n localSearchValue,\n resolvedLoadingRowCount,\n resolvedToolbarQueryPlaceholder,\n selectedRows,\n setCurrentColumnFilters,\n setCurrentColumnOrder,\n setCurrentColumnPinning,\n setCurrentColumnVisibility,\n setCurrentExpanded,\n setCurrentRowSelection,\n setCurrentSorting,\n setLocalColumnSizing,\n setLocalPagination,\n setLocalSearchValue,\n shouldRenderInitialLoading,\n tableData,\n tableGetRowId,\n visibleData,\n } = useDataTableState({\n columnFilters: resolvedColumnFilters,\n columnOrder: resolvedColumnOrder,\n columnPinning: resolvedColumnPinning,\n columnSizing: resolvedColumnSizing,\n columnPrefsKey,\n persistence,\n columnVisibility: resolvedColumnVisibility,\n columns,\n containerRef,\n data,\n density: resolvedDensity,\n enableRowSelection,\n enableToolbarQueryFiltering,\n expanded: resolvedExpanded,\n getRowId,\n hiddenRows,\n isLoading,\n loadingRowCount,\n manualFiltering,\n initialState,\n onColumnFiltersChange: handleColumnFiltersPropChange,\n onColumnOrderChange: handleColumnOrderPropChange,\n onColumnPinningChange: handleColumnPinningPropChange,\n onColumnSizingChange: handleColumnSizingPropChange,\n onColumnVisibilityChange: handleColumnVisibilityPropChange,\n onDensityChange: handleDensityPropChange,\n onExpandedChange: handleExpandedPropChange,\n onPageIndexChange: handlePageIndexPropChange,\n onRowSelectionChange: handleRowSelectionPropChange,\n onShowHiddenRowsChange: handleShowHiddenRowsPropChange,\n onSortingChange: handleSortingPropChange,\n onToolbarQueryValueChange: handleToolbarQueryValueChange,\n onViewModeChange: handleViewModePropChange,\n pageIndex: resolvedPageIndex,\n pageSize: resolvedPageSize,\n resolvedLabels,\n rowSelection: resolvedRowSelection,\n rowsPerPageOptions,\n selectionActions,\n showHiddenRows: resolvedShowHiddenRows,\n sorting: resolvedSorting,\n toolbarQueryDebounceMs,\n toolbarQueryPlaceholder,\n toolbarQueryValue: resolvedToolbarQueryValue,\n viewMode: resolvedViewMode,\n });\n const {\n cancelEditing,\n draftValues,\n editingRowId,\n isSavingEdit,\n saveEdit,\n setDraftValues,\n setEditingRowId,\n startEditingRow,\n } = useRowEditing({\n columns,\n editableRows,\n onError: handleEditError,\n });\n const { viewportElement: tableScrollElement, viewportHeight } =\n useDataTableScrollViewport(tableScrollContainerRef, currentViewMode);\n const openFileDialog = React.useCallback(() => {\n if (fileUpload?.disabled) {\n return;\n }\n\n fileInputRef.current?.click();\n }, [fileUpload?.disabled]);\n const handleSelectedFiles = React.useCallback(\n (files: FileList | Array) => {\n runAction(\n {\n source: \"fileUpload\",\n },\n () => fileUpload?.onFilesSelected(files),\n );\n },\n [fileUpload, runAction],\n );\n\n const tableColumns = useDataTableColumns({\n Button,\n Checkbox,\n DataTableRowActions,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cancelEditing,\n columns,\n editableRows,\n editingRowId,\n enableRowSelection,\n getRowCanExpand,\n isSavingEdit,\n labels: resolvedLabels,\n lastSelectedRowIdRef,\n renderExpandedRow,\n rowActions: guardedRowActions,\n saveEdit,\n startEditingRow,\n tableRef,\n });\n\n const {\n effectivePageCount,\n footerTotalRowCount,\n handleFooterPageIndexChange,\n handleFooterPageSizeChange,\n isPageCountKnown,\n renderedRows,\n reorderColumn,\n rowsToRender,\n sentinelRef,\n table,\n virtualPaddingBottom,\n virtualPaddingTop,\n visibleLeafColumns,\n } = useDataTableInstance({\n autoResetPageIndex: false,\n columnResizeMode,\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentColumnSizing,\n currentExpanded,\n currentPagination,\n currentRowSelection,\n currentSorting,\n currentViewMode,\n defaultColumn,\n effectiveColumnVisibility,\n enableColumnResizing,\n enableRowSelection,\n getRowCanExpand,\n globalFilterFn,\n globalFilterValue,\n hasNextPage,\n handleColumnFiltersChange: setCurrentColumnFilters,\n handleColumnOrderChange: setCurrentColumnOrder,\n handleColumnPinningChange: setCurrentColumnPinning,\n handleColumnVisibilityChange: setCurrentColumnVisibility,\n handleExpandedChange: setCurrentExpanded,\n infiniteScroll,\n manualFiltering,\n manualPagination,\n manualSorting,\n onActionError,\n onPageIndexChange: handlePageIndexPropChange,\n onPageSizeChange: handlePageSizePropChange,\n pageCount,\n pageIndex: resolvedPageIndex,\n pageSize: resolvedPageSize,\n renderExpandedRow,\n setCurrentRowSelection,\n setCurrentSorting,\n setLocalColumnSizing,\n setLocalPagination,\n shouldRenderInitialLoading,\n tableColumns,\n tableData,\n tableGetRowId,\n tableRef,\n tableScrollElement,\n totalRowCount,\n virtualization,\n viewportHeight,\n });\n const columnLayout = useColumnLayout({\n columns,\n columnSizing: currentColumnSizing,\n editableRows: Boolean(editableRows),\n enableRowSelection,\n hasRowActions: rowActions.length > 0,\n hasRowExpansion: Boolean(renderExpandedRow),\n layoutMode,\n uiClassNames,\n visibleLeafColumns,\n });\n const { explicitlySizedColumnIds, fillMinWidth, getColumnLayout } =\n columnLayout;\n const explicitCustomCellColumnIds = React.useMemo(() => {\n return new Set(\n columns.flatMap((column, index) => {\n return Object.prototype.hasOwnProperty.call(column, \"cell\") &&\n typeof column.cell === \"function\"\n ? [getColumnId(column, index)]\n : [];\n }),\n );\n }, [columns]);\n const visibleLeafColumnCount = visibleLeafColumns.length;\n const bodyRowComponents = React.useMemo(\n () => ({\n Checkbox,\n Input,\n Skeleton,\n TableCell,\n TableRow,\n }),\n [],\n );\n const hasCardTitle = React.useMemo(\n () => columns.some((column) => column.meta?.cardTitle),\n [columns],\n );\n const primeColumnForResize = React.useCallback(\n (columnId: string, currentSize: number) => {\n if (\n explicitlySizedColumnIds.has(columnId) ||\n Object.prototype.hasOwnProperty.call(\n table.getState().columnSizing,\n columnId,\n )\n ) {\n return;\n }\n\n flushSync(() => {\n table.setColumnSizing((current) => ({\n ...current,\n [columnId]: currentSize,\n }));\n });\n },\n [explicitlySizedColumnIds, table],\n );\n const resetColumnSize = React.useCallback(\n (columnId: string) => {\n if (explicitlySizedColumnIds.has(columnId)) {\n table.getColumn(columnId)?.resetSize();\n return;\n }\n\n table.setColumnSizing((current) => {\n if (!Object.prototype.hasOwnProperty.call(current, columnId)) {\n return current;\n }\n\n const next = { ...current };\n delete next[columnId];\n return next;\n });\n },\n [explicitlySizedColumnIds, table],\n );\n\n const filteredData = table\n .getFilteredRowModel()\n .rows.map((row) => row.original);\n const emptyNode =\n typeof emptyState === \"function\"\n ? emptyState({\n rows: filteredData,\n toolbarQueryValue: localSearchValue,\n })\n : emptyState;\n const {\n columnVisibilityOptions,\n effectiveToolbarActions,\n handleClearColumnFilters,\n handleToolbarColumnFilterChange,\n handleToolbarColumnPinningChange,\n toolbarColumnFilters,\n } = useDataTableToolbarFeatures({\n columns,\n currentColumnFilters,\n currentColumnPinning,\n csvExport,\n effectiveColumnVisibility,\n enableColumnFilters,\n handleColumnFiltersChange: setCurrentColumnFilters,\n handleColumnPinningChange: setCurrentColumnPinning,\n labels: resolvedLabels,\n table,\n toolbarActions,\n visibleData,\n });\n const guardedToolbarActions = React.useMemo(\n () =>\n effectiveToolbarActions.map((action) => ({\n ...action,\n onClick: (context: {\n rows: Array;\n openFileDialog?: () => void;\n }) => {\n runAction(\n {\n actionKey: action.key,\n source: \"toolbarAction\",\n },\n () => action.onClick(context),\n );\n },\n })),\n [effectiveToolbarActions, runAction],\n );\n const guardedSelectionActions = React.useMemo(\n () =>\n selectionActions.map((action) => ({\n ...action,\n onClick: (context: Parameters[0]) => {\n runAction(\n {\n actionKey: action.key,\n source: \"selectionAction\",\n },\n () => action.onClick(context),\n );\n },\n })),\n [runAction, selectionActions],\n );\n const currentDataTableState = React.useMemo(\n () => ({\n sorting: currentSorting,\n pagination: currentPagination,\n rowSelection: currentRowSelection,\n columnVisibility: currentColumnVisibility,\n columnFilters: currentColumnFilters,\n expanded: currentExpanded,\n columnOrder: currentColumnOrder,\n columnPinning: currentColumnPinning,\n columnSizing: currentColumnSizing,\n density: currentDensity,\n viewMode: currentViewMode,\n showHiddenRows: currentShowHiddenRows,\n globalFilter: localSearchValue,\n }),\n [\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentColumnSizing,\n currentColumnVisibility,\n currentDensity,\n currentExpanded,\n currentPagination,\n currentRowSelection,\n currentShowHiddenRows,\n currentSorting,\n currentViewMode,\n localSearchValue,\n ],\n );\n const getCurrentState = React.useCallback(\n () => cloneDataTableState(currentDataTableState),\n [currentDataTableState],\n );\n const restoreState = React.useCallback(\n (nextState: Partial) => {\n if (nextState.sorting !== undefined) {\n table.setSorting(nextState.sorting);\n }\n if (nextState.pagination !== undefined) {\n table.setPagination(nextState.pagination);\n }\n if (nextState.rowSelection !== undefined) {\n table.setRowSelection(nextState.rowSelection);\n }\n if (nextState.columnVisibility !== undefined) {\n table.setColumnVisibility(nextState.columnVisibility);\n }\n if (nextState.columnFilters !== undefined) {\n table.setColumnFilters(nextState.columnFilters);\n }\n if (nextState.expanded !== undefined) {\n table.setExpanded(nextState.expanded);\n }\n if (nextState.columnOrder !== undefined) {\n table.setColumnOrder(nextState.columnOrder);\n }\n if (nextState.columnPinning !== undefined) {\n table.setColumnPinning(nextState.columnPinning);\n }\n if (nextState.columnSizing !== undefined) {\n table.setColumnSizing(nextState.columnSizing);\n }\n if (nextState.density !== undefined) {\n handleDensityChange(nextState.density);\n }\n if (nextState.viewMode !== undefined) {\n handleViewModeChange(nextState.viewMode);\n }\n if (nextState.showHiddenRows !== undefined) {\n handleShowHiddenRowsChange(nextState.showHiddenRows);\n }\n if (nextState.globalFilter !== undefined) {\n setLocalSearchValue(nextState.globalFilter);\n }\n },\n [\n handleDensityChange,\n handleShowHiddenRowsChange,\n handleViewModeChange,\n setLocalSearchValue,\n table,\n ],\n );\n const clearPersistedState = React.useCallback(\n () => clearDataTableColumnPrefs(persistence ?? columnPrefsKey),\n [columnPrefsKey, persistence],\n );\n const resetColumnLayout = React.useCallback<\n DataTableApi[\"resetColumnLayout\"]\n >(\n (options) => {\n if (options?.clearPersistence) {\n clearPersistedState();\n }\n restoreState({\n columnVisibility: initialState?.columnVisibility ?? {},\n columnOrder: initialState?.columnOrder ?? [],\n columnPinning:\n initialState?.columnPinning ?? getInitialColumnPinning(columns),\n columnSizing: initialState?.columnSizing ?? {},\n });\n },\n [\n clearPersistedState,\n columns,\n initialState,\n restoreState,\n ],\n );\n const resetState = React.useCallback[\"resetState\"]>(\n (options) => {\n if (options?.clearPersistence) {\n clearPersistedState();\n }\n restoreState({\n sorting: initialState?.sorting ?? [],\n pagination: initialState?.pagination ?? {\n pageIndex: 0,\n pageSize: rowsPerPageOptions[0] ?? 20,\n },\n rowSelection: initialState?.rowSelection ?? {},\n columnVisibility: initialState?.columnVisibility ?? {},\n columnFilters: initialState?.columnFilters ?? [],\n expanded: initialState?.expanded ?? {},\n columnOrder: initialState?.columnOrder ?? [],\n columnPinning:\n initialState?.columnPinning ?? getInitialColumnPinning(columns),\n columnSizing: initialState?.columnSizing ?? {},\n density: initialState?.density ?? \"comfortable\",\n viewMode: initialState?.viewMode ?? \"table\",\n showHiddenRows: initialState?.showHiddenRows ?? false,\n globalFilter: initialState?.globalFilter ?? \"\",\n });\n },\n [\n clearPersistedState,\n columns,\n initialState,\n restoreState,\n rowsPerPageOptions,\n ],\n );\n const getSavedViews = React.useCallback(\n () => readDataTableSavedViews(savedViews),\n [savedViews],\n );\n const createSavedView = React.useCallback<\n DataTableApi[\"createSavedView\"]\n >(\n (name) =>\n createDataTableSavedView(savedViews, name, getCurrentState()),\n [getCurrentState, savedViews],\n );\n const applySavedView = React.useCallback<\n DataTableApi[\"applySavedView\"]\n >(\n (id) => {\n const view = readDataTableSavedViews(savedViews).find(\n (candidate) => candidate.id === id,\n );\n if (!view) {\n return false;\n }\n restoreState(view.state);\n savedViews?.onApply?.(view);\n return true;\n },\n [restoreState, savedViews],\n );\n const renameSavedView = React.useCallback<\n DataTableApi[\"renameSavedView\"]\n >(\n (id, name) => renameDataTableSavedView(savedViews, id, name),\n [savedViews],\n );\n const deleteSavedView = React.useCallback<\n DataTableApi[\"deleteSavedView\"]\n >(\n (id) => deleteDataTableSavedView(savedViews, id),\n [savedViews],\n );\n const clearSavedViews = React.useCallback(\n () => clearDataTableSavedViews(savedViews),\n [savedViews],\n );\n const exportCsvFromApi = React.useCallback<\n DataTableApi[\"exportCsv\"]\n >(\n (options) =>\n exportDataTableCsv({\n csvExport: options ?? (csvExport || true),\n labels: resolvedLabels,\n table,\n }),\n [csvExport, resolvedLabels, table],\n );\n React.useImperativeHandle(\n apiRef,\n () => ({\n getTable: () => tableRef.current,\n getState: getCurrentState,\n snapshot: getCurrentState,\n restore: restoreState,\n resetColumnLayout,\n resetState,\n clearPersistedState,\n getSavedViews,\n createSavedView,\n applySavedView,\n renameSavedView,\n deleteSavedView,\n clearSavedViews,\n focus: () => {\n containerRef.current?.focus();\n },\n scrollToRow: (rowId) =>\n scrollDataTableElementIntoView(containerRef.current, \"row\", rowId),\n scrollToColumn: (columnId) =>\n scrollDataTableElementIntoView(\n containerRef.current,\n \"column\",\n columnId,\n ),\n exportCsv: exportCsvFromApi,\n }),\n [\n applySavedView,\n clearPersistedState,\n clearSavedViews,\n createSavedView,\n deleteSavedView,\n exportCsvFromApi,\n getSavedViews,\n getCurrentState,\n renameSavedView,\n resetColumnLayout,\n resetState,\n restoreState,\n ],\n );\n\n return (\n \n \n {fileUpload ? (\n {\n const files = event.currentTarget.files;\n if (files?.length) {\n handleSelectedFiles(files);\n }\n event.currentTarget.value = \"\";\n }}\n />\n ) : null}\n \n \n {showToolbar ? (\n \n ) : null}\n\n \n {currentViewMode === \"card\" && cardRenderer ? (\n \n ) : (\n \n )}\n \n \n {children}\n \n \n \n \n \n );\n };\n}\n\nfunction runDataTableAction(\n action: () => void | Promise,\n context: Omit, \"error\">,\n onActionError: DataTableProps[\"onActionError\"],\n) {\n let result: void | Promise;\n try {\n result = action();\n } catch (error) {\n onActionError?.({ ...context, error });\n return;\n }\n\n void Promise.resolve(result).catch((error: unknown) => {\n onActionError?.({ ...context, error });\n });\n}\n\nfunction useDataTableStateSliceChange(\n key: K,\n onLegacyChange: ((value: DataTableState[K]) => void) | undefined,\n onStateChange: DataTableProps[\"onStateChange\"],\n) {\n const handleChange = React.useCallback(\n (value: DataTableState[K]) => {\n onLegacyChange?.(value);\n onStateChange?.((current) => ({\n ...current,\n [key]: value,\n }));\n },\n [key, onLegacyChange, onStateChange],\n );\n\n return onLegacyChange || onStateChange ? handleChange : undefined;\n}\n\nfunction useDataTableStateConflictWarnings(\n state: Partial | undefined,\n legacySlices: Record,\n) {\n const warnedSlicesRef = React.useRef(new Set());\n\n React.useEffect(() => {\n if (!state || !isDevelopmentEnvironment()) {\n return;\n }\n\n for (const key of Object.keys(legacySlices) as Array<\n keyof DataTableState\n >) {\n if (\n state[key] === undefined ||\n !legacySlices[key] ||\n warnedSlicesRef.current.has(key)\n ) {\n continue;\n }\n\n warnedSlicesRef.current.add(key);\n console.warn(\n `[data-table-pro] Both state.${key} and its legacy controlled prop were provided. The legacy prop takes precedence during the 4.x compatibility window.`,\n );\n }\n }, [legacySlices, state]);\n}\n\nfunction isDevelopmentEnvironment() {\n const nodeEnvironment = (\n globalThis as {\n process?: { env?: { NODE_ENV?: string } };\n }\n ).process?.env?.NODE_ENV;\n\n return nodeEnvironment !== \"production\";\n}\n\nfunction cloneDataTableState(state: DataTableState): DataTableState {\n return {\n sorting: state.sorting.map((item) => ({ ...item })),\n pagination: { ...state.pagination },\n rowSelection: { ...state.rowSelection },\n columnVisibility: { ...state.columnVisibility },\n columnFilters: state.columnFilters.map((item) => ({ ...item })),\n expanded:\n typeof state.expanded === \"boolean\"\n ? state.expanded\n : { ...state.expanded },\n columnOrder: [...state.columnOrder],\n columnPinning: {\n left: state.columnPinning.left\n ? [...state.columnPinning.left]\n : undefined,\n right: state.columnPinning.right\n ? [...state.columnPinning.right]\n : undefined,\n },\n columnSizing: { ...state.columnSizing },\n density: state.density,\n viewMode: state.viewMode,\n showHiddenRows: state.showHiddenRows,\n globalFilter: state.globalFilter,\n };\n}\n\nfunction scrollDataTableElementIntoView(\n container: HTMLDivElement | null,\n kind: \"row\" | \"column\",\n value: string,\n) {\n if (!container) {\n return false;\n }\n\n const attribute = kind === \"row\" ? \"data-row-id\" : \"data-column-id\";\n const element = Array.from(\n container.querySelectorAll(`[${attribute}]`),\n ).find((candidate) => candidate.getAttribute(attribute) === value);\n if (!element) {\n return false;\n }\n\n element.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n return true;\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-4P45F2OY.js b/dist/chunk-4P45F2OY.js new file mode 100644 index 0000000..47dba7a --- /dev/null +++ b/dist/chunk-4P45F2OY.js @@ -0,0 +1,3 @@ +import {a}from'./chunk-XTVBESM5.js';var _=Symbol("data-table-loading-row"),F=50;function U(e,t,n){if(e===true)return Object.fromEntries(n.flatMap(a=>a===t?[]:[[a,true]]));let r={...e};return r[t]?delete r[t]:r[t]=true,r}function z(e){return Array.from({length:e},(t,n)=>({[_]:true,index:n}))}function j(e){return !!(e&&typeof e=="object"&&_ in e)}function G(e){return `__loading__${e}`}function V(e){if(typeof e.meta?.minWidth=="number")return e.meta.minWidth;if(Object.prototype.hasOwnProperty.call(e,"minSize")){let t=e.minSize;if(typeof t=="number")return t}}function A(e){if("columns"in e&&Array.isArray(e.columns))return {...e,columns:e.columns.map(n=>A(n))};let t=e.meta?.filter;return !t||e.filterFn?e:{...e,filterFn:(n,r,a)=>{if(!x(a))return true;let o=n.getValue(r),i=t.getOptionValue?.(o,n.original)??g(o);if(t.type==="multi"||t.type==="faceted")return Array.isArray(a)?a.map(String).includes(i):true;if(t.type==="select"||t.type==="boolean")return i===String(a);if(t.type==="numberRange"){let u=C(a),c=Number(i),p=u.from===""?void 0:Number(u.from),d=u.to===""?void 0:Number(u.to);return Number.isNaN(c)?false:(p===void 0||Number.isNaN(p)||c>=p)&&(d===void 0||Number.isNaN(d)||c<=d)}if(t.type==="dateRange"){let u=C(a),c=k(i);return c?(!u.from||c>=String(u.from))&&(!u.to||c<=String(u.to)):false}let l=i.toLowerCase(),f=String(a).toLowerCase();switch(t.operator??"contains"){case "equals":return l===f;case "startsWith":return l.startsWith(f);case "endsWith":return l.endsWith(f);default:return l.includes(f)}}}}function M(e){let t=new Map,n=(r,a)=>{r.forEach((o,i)=>{if("columns"in o&&o.columns?.length){let l=o;n(o.columns,[...a,{id:D(o),freeReordering:l.freeReordering===true}]);return}t.set(D(o),a);});};return n(e,[]),t}function W(e,t,n){let r=n.get(e)??[],a=n.get(t)??[],o=0;for(;oi.freeReordering)}function S(e){let t=[],n=r=>{r.forEach((a,o)=>{if("columns"in a&&a.columns?.length){n(a.columns);return}t.push({column:a,index:o});});};return n(e),t}function B(e){return e.map(t=>typeof t=="string"?{label:h(t),value:t}:t)}function g(e){if(e==null)return "";if(e instanceof Date)return e.toISOString();if(typeof e=="object")try{return JSON.stringify(e)}catch{return ""}return typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="bigint"||typeof e=="symbol"?String(e):""}function x(e){return Array.isArray(e)?e.length>0:e&&typeof e=="object"?"from"in e||"to"in e?Object.values(e).some(x):true:e!=null&&e!==""}function C(e){if(!e||typeof e!="object"||Array.isArray(e))return {};let t=e;return {...typeof t.from=="string"||typeof t.from=="number"?{from:t.from}:{},...typeof t.to=="string"||typeof t.to=="number"?{to:t.to}:{}}}function k(e){if(e instanceof Date&&!Number.isNaN(e.getTime()))return e.toISOString().slice(0,10);let t=g(e);if(/^\d{4}-\d{2}-\d{2}/.test(t))return t.slice(0,10);let n=Date.parse(t);return Number.isNaN(n)?"":new Date(n).toISOString().slice(0,10)}function $(e){return g(e).trim().toLowerCase()}async function K({csvExport:e,table:t}){if(e===false)return;let n=e===true?{}:e,r=n.filename??"data-table.csv",a=n.scope??"filtered",o=n.columns?new Set(n.columns):void 0,i=t.getVisibleLeafColumns().filter(s=>!O(s.id)&&s.id!=="__spacer__"&&(!o||o.has(s.id))),l=R(t,a),f=[];(n.includeHeaders??true)&&f.push(i.map(s=>typeof s.columnDef.header=="string"?s.columnDef.header:h(s.id)));for(let s of l)f.push(i.map(m=>{let y=s.getValue(m.id);return n.getCellValue?n.getCellValue({row:s.original,rowId:s.id,columnId:m.id,value:y}):y}));let u=n.lineEnding??`\r +`,c=n.escapeFormulaValues??true,p=f.map(s=>s.map(m=>E(m,c)).join(",")).join(u);if(n.onExport){await n.onExport({csv:p,filename:r,rows:l.map(s=>s.original),scope:a});return}if(typeof window>"u")return;let d=new Blob([p],{type:"text/csv;charset=utf-8"}),T=window.URL.createObjectURL(d),b=window.document.createElement("a");b.href=T,b.download=r,b.click(),window.URL.revokeObjectURL(T);}function R(e,t){switch(t){case "page":return e.getRowModel().rows;case "selected":return e.getPrePaginationRowModel().rows.filter(n=>n.getIsSelected());case "all":return e.getCoreRowModel().rows;default:return e.getPrePaginationRowModel().rows}}function E(e,t){let n=g(e);return t&&typeof e=="string"&&/^[\t\r ]*[=+\-@]/.test(e)&&(n=`'${n}`),/[",\n\r]/.test(n)?`"${n.replace(/"/g,'""')}"`:n}function q(e){let t=[],n=[];for(let{column:r,index:a}of S(e)){let o=D(r);r.meta?.fixed==="left"&&t.push(o),r.meta?.fixed==="right"&&n.push(o);}return {left:t,right:n}}function D(e,t){if(e.id)return e.id;let n=N(e);if(n)return n.replace(/\./g,"_");if(typeof e.header=="string")return e.header;throw new Error("Data table columns using an accessor function or non-string header must define a unique id.")}var L=new Set(["__select__","__expand__","__actions__","__spacer__"]);function H(e){let t=new Set,n=r=>{r.forEach((a,o)=>{let i=D(a);if(L.has(i))throw new Error(`Data table column id "${i}" is reserved for an internal column.`);if(t.has(i))throw new Error(`Duplicate data table column id "${i}".`);t.add(i),"columns"in a&&a.columns?.length&&n(a.columns);});};n(e);}function N(e){if("accessorKey"in e&&typeof e.accessorKey=="string")return e.accessorKey}function Q(e){let t=e.getIsPinned();return t||(e.id==="__select__"||e.id==="__expand__"?"left":e.id==="__actions__"?"right":e.columnDef.meta?.fixed)}function Z(e,t,n){let r=n?.isUtilityColumn??false;return a("sticky backdrop-blur box-border",t.pinnedColumn,!r&&"border-dotted",r?t.pinnedUtilityColumn:void 0,e==="left"?"border-r-1":"border-l")}function O(e){return e==="__select__"||e==="__expand__"||e==="__actions__"}var P=["[data-row-click-ignore='true']","a[href]","button","input","select","summary","textarea","[contenteditable='true']","[role='button']","[role='link']"].join(",");function J(e,t){if(!(e instanceof Element))return false;let n=e.closest(P);return !!(n&&n!==t&&t.contains(n))}function Y(e){switch(e){case "compact":return "h-8 py-1";case "spacious":return "h-14 py-4";default:return}}function X(e){switch(e){case "compact":return "py-1.5";case "spacious":return "py-4";default:return}}function v(e,t,n){let r=e.includes(t)?e.slice():[...e,t],a=r.indexOf(t),o=r.indexOf(n);if(a<0||o<0||a===o)return r;let[i]=r.splice(a,1);return r.splice(o,0,i),r}function h(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}export{v as A,h as B,F as a,U as b,z as c,j as d,G as e,V as f,A as g,M as h,W as i,S as j,B as k,g as l,x as m,$ as n,K as o,R as p,q,D as r,H as s,N as t,Q as u,Z as v,O as w,J as x,Y as y,X as z};//# sourceMappingURL=chunk-4P45F2OY.js.map +//# sourceMappingURL=chunk-4P45F2OY.js.map \ No newline at end of file diff --git a/dist/chunk-4P45F2OY.js.map b/dist/chunk-4P45F2OY.js.map new file mode 100644 index 0000000..8f9bc06 --- /dev/null +++ b/dist/chunk-4P45F2OY.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/data-table-utils.ts"],"names":["DATA_TABLE_LOADING_ROW","UTILITY_COLUMN_SIZE","toggleDataTableExpandedState","current","rowId","loadedRowIds","loadedRowId","next","createDataTableLoadingRows","count","_","index","isDataTableLoadingRow","row","getDataTableLoadingRowId","getConfiguredColumnMinWidth","column","minSize","decorateFilterableColumn","childColumn","filter","columnId","filterValue","hasFilterValue","value","optionValue","normalizeFilterValue","range","normalizeRangeFilterValue","numericValue","from","to","dateValue","normalizeDateFilterValue","normalizedValue","normalizedQuery","getDataTableColumnGroupPaths","columns","paths","visit","currentColumns","parentPath","group","getColumnId","canReorderDataTableColumn","sourceColumnId","targetColumnId","groupPaths","sourcePath","targetPath","commonLength","getDataTableLeafColumns","leaves","normalizeColumnFilterOptions","options","option","startCase","normalized","timestamp","normalizeDataTableSearchText","exportDataTableCsv","csvExport","table","filename","scope","exportColumnIds","isUtilityColumnId","rows","getDataTableExportRows","csvRows","lineEnding","escapeFormulaValues","csv","escapeCsvCell","blob","url","anchor","text","getInitialColumnPinning","left","right","_index","accessorKey","getAccessorKey","RESERVED_DATA_TABLE_COLUMN_IDS","validateDataTableColumnIds","ids","id","getFixedSide","pinnedSide","getPinnedColumnClassName","side","uiClassNames","isUtilityColumn","cn","DATA_TABLE_INTERACTIVE_TARGET_SELECTOR","isDataTableInteractiveTarget","target","boundary","interactiveTarget","getDensityHeaderClassName","density","getDensityCellClassName","moveColumnInOrder","currentOrder","order","sourceIndex","targetIndex","source","character"],"mappings":"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","file":"chunk-4P45F2OY.js","sourcesContent":["import type {\n Column,\n ColumnDef,\n ColumnPinningState,\n ExpandedState,\n Row,\n Table as TanStackTable,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableColumnDef,\n DataTableColumnFilterOption,\n DataTableCsvExportOptions,\n DataTableCsvExportScope,\n DataTableDensity,\n DataTableLabels,\n} from \"../types\";\nimport type { DataTableUiClassNames } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nconst DATA_TABLE_LOADING_ROW = Symbol(\"data-table-loading-row\");\n\nexport const UTILITY_COLUMN_SIZE = 50;\n\nexport function toggleDataTableExpandedState(\n current: ExpandedState,\n rowId: string,\n loadedRowIds: Array,\n): ExpandedState {\n if (current === true) {\n return Object.fromEntries(\n loadedRowIds.flatMap((loadedRowId) =>\n loadedRowId === rowId ? [] : [[loadedRowId, true]],\n ),\n );\n }\n\n const next = { ...current };\n if (next[rowId]) {\n delete next[rowId];\n } else {\n next[rowId] = true;\n }\n return next;\n}\n\ntype DataTableLoadingRow = {\n [DATA_TABLE_LOADING_ROW]: true;\n index: number;\n};\n\nexport function createDataTableLoadingRows(count: number) {\n return Array.from({ length: count }, (_, index) => {\n return {\n [DATA_TABLE_LOADING_ROW]: true,\n index,\n } as DataTableLoadingRow as TData;\n });\n}\n\nexport function isDataTableLoadingRow(\n row: unknown,\n): row is DataTableLoadingRow {\n return Boolean(\n row &&\n typeof row === \"object\" &&\n DATA_TABLE_LOADING_ROW in (row as Record),\n );\n}\n\nexport function getDataTableLoadingRowId(index: number) {\n return `__loading__${index}`;\n}\n\nexport function getConfiguredColumnMinWidth(\n column: DataTableColumnDef,\n) {\n if (typeof column.meta?.minWidth === \"number\") {\n return column.meta.minWidth;\n }\n\n if (Object.prototype.hasOwnProperty.call(column, \"minSize\")) {\n const minSize = (column as { minSize?: unknown }).minSize;\n\n if (typeof minSize === \"number\") {\n return minSize;\n }\n }\n\n return undefined;\n}\n\nexport function decorateFilterableColumn(\n column: DataTableColumnDef,\n): ColumnDef {\n if (\"columns\" in column && Array.isArray(column.columns)) {\n return {\n ...column,\n columns: column.columns.map((childColumn) =>\n decorateFilterableColumn(\n childColumn as DataTableColumnDef,\n ),\n ),\n };\n }\n\n const filter = column.meta?.filter;\n if (!filter || column.filterFn) {\n return column;\n }\n\n return {\n ...column,\n filterFn: (row, columnId, filterValue) => {\n if (!hasFilterValue(filterValue)) {\n return true;\n }\n\n const value = row.getValue(columnId);\n const optionValue =\n filter.getOptionValue?.(value, row.original) ??\n normalizeFilterValue(value);\n\n if (filter.type === \"multi\" || filter.type === \"faceted\") {\n return Array.isArray(filterValue)\n ? filterValue.map(String).includes(optionValue)\n : true;\n }\n\n if (filter.type === \"select\") {\n return optionValue === String(filterValue);\n }\n\n if (filter.type === \"boolean\") {\n return optionValue === String(filterValue);\n }\n\n if (filter.type === \"numberRange\") {\n const range = normalizeRangeFilterValue(filterValue);\n const numericValue = Number(optionValue);\n const from = range.from === \"\" ? undefined : Number(range.from);\n const to = range.to === \"\" ? undefined : Number(range.to);\n\n if (Number.isNaN(numericValue)) {\n return false;\n }\n\n return (\n (from === undefined || Number.isNaN(from) || numericValue >= from) &&\n (to === undefined || Number.isNaN(to) || numericValue <= to)\n );\n }\n\n if (filter.type === \"dateRange\") {\n const range = normalizeRangeFilterValue(filterValue);\n const dateValue = normalizeDateFilterValue(optionValue);\n\n if (!dateValue) {\n return false;\n }\n\n return (\n (!range.from || dateValue >= String(range.from)) &&\n (!range.to || dateValue <= String(range.to))\n );\n }\n\n const normalizedValue = optionValue.toLowerCase();\n const normalizedQuery = String(filterValue).toLowerCase();\n\n switch (filter.operator ?? \"contains\") {\n case \"equals\":\n return normalizedValue === normalizedQuery;\n case \"startsWith\":\n return normalizedValue.startsWith(normalizedQuery);\n case \"endsWith\":\n return normalizedValue.endsWith(normalizedQuery);\n default:\n return normalizedValue.includes(normalizedQuery);\n }\n },\n };\n}\n\nexport type DataTableLeafColumn = {\n column: DataTableColumnDef;\n index: number;\n};\n\nexport type DataTableColumnGroupPathSegment = {\n id: string;\n freeReordering: boolean;\n};\n\nexport type DataTableColumnGroupPaths = ReadonlyMap<\n string,\n ReadonlyArray\n>;\n\n/**\n * Returns the nested shared-header path for every leaf. The path deliberately\n * uses stable column ids rather than header text so it also works with custom\n * header render functions.\n */\nexport function getDataTableColumnGroupPaths(\n columns: Array>,\n): DataTableColumnGroupPaths {\n const paths = new Map<\n string,\n ReadonlyArray\n >();\n\n const visit = (\n currentColumns: Array>,\n parentPath: ReadonlyArray,\n ) => {\n currentColumns.forEach((column, index) => {\n if (\"columns\" in column && column.columns?.length) {\n const group = column as DataTableColumnDef & {\n freeReordering?: boolean;\n };\n visit(column.columns, [\n ...parentPath,\n {\n id: getColumnId(column, index),\n freeReordering: group.freeReordering === true,\n },\n ]);\n return;\n }\n\n paths.set(getColumnId(column, index), parentPath);\n });\n };\n\n visit(columns, []);\n return paths;\n}\n\n/**\n * Locked groups preserve their shared heading by default. Reordering within a\n * common group path is always allowed; leaving or entering a group requires\n * each crossed group to explicitly opt into `freeReordering`.\n */\nexport function canReorderDataTableColumn(\n sourceColumnId: string,\n targetColumnId: string,\n groupPaths: DataTableColumnGroupPaths,\n) {\n const sourcePath = groupPaths.get(sourceColumnId) ?? [];\n const targetPath = groupPaths.get(targetColumnId) ?? [];\n let commonLength = 0;\n\n while (\n commonLength < sourcePath.length &&\n commonLength < targetPath.length &&\n sourcePath[commonLength]?.id === targetPath[commonLength]?.id\n ) {\n commonLength += 1;\n }\n\n return [\n ...sourcePath.slice(commonLength),\n ...targetPath.slice(commonLength),\n ].every((group) => group.freeReordering);\n}\n\nexport function getDataTableLeafColumns(\n columns: Array>,\n) {\n const leaves: Array> = [];\n\n const visit = (currentColumns: Array>) => {\n currentColumns.forEach((column, index) => {\n if (\"columns\" in column && column.columns?.length) {\n visit(column.columns);\n return;\n }\n\n leaves.push({ column, index });\n });\n };\n\n visit(columns);\n return leaves;\n}\n\nexport function normalizeColumnFilterOptions(\n options: Array,\n) {\n return options.map((option) =>\n typeof option === \"string\"\n ? { label: startCase(option), value: option }\n : option,\n );\n}\n\nexport function normalizeFilterValue(value: unknown) {\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 try {\n return JSON.stringify(value);\n } catch {\n return \"\";\n }\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\" ||\n typeof value === \"symbol\"\n ) {\n return String(value);\n }\n\n return \"\";\n}\n\nexport function hasFilterValue(value: unknown) {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n if (value && typeof value === \"object\") {\n if (\"from\" in value || \"to\" in value) {\n return Object.values(value).some(hasFilterValue);\n }\n\n return true;\n }\n\n return value !== undefined && value !== null && value !== \"\";\n}\n\nfunction normalizeRangeFilterValue(value: unknown): {\n from?: string | number;\n to?: string | number;\n} {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return {};\n }\n\n const range = value as { from?: unknown; to?: unknown };\n return {\n ...(typeof range.from === \"string\" || typeof range.from === \"number\"\n ? { from: range.from }\n : {}),\n ...(typeof range.to === \"string\" || typeof range.to === \"number\"\n ? { to: range.to }\n : {}),\n };\n}\n\nfunction normalizeDateFilterValue(value: unknown) {\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n return value.toISOString().slice(0, 10);\n }\n\n const normalized = normalizeFilterValue(value);\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(normalized)) {\n return normalized.slice(0, 10);\n }\n\n const timestamp = Date.parse(normalized);\n return Number.isNaN(timestamp)\n ? \"\"\n : new Date(timestamp).toISOString().slice(0, 10);\n}\n\nexport function dataTableGlobalFilterFn(\n row: Row,\n columnId: string,\n filterValue: unknown,\n) {\n const normalizedQuery = normalizeFilterValue(filterValue)\n .trim()\n .toLowerCase();\n\n if (!normalizedQuery) {\n return true;\n }\n\n return normalizeFilterValue(row.getValue(columnId))\n .toLowerCase()\n .includes(normalizedQuery);\n}\n\nexport function normalizeDataTableSearchText(value: unknown) {\n return normalizeFilterValue(value).trim().toLowerCase();\n}\n\nexport async function exportDataTableCsv({\n csvExport,\n table,\n}: {\n csvExport: boolean | DataTableCsvExportOptions;\n table: TanStackTable;\n labels: DataTableLabels;\n}) {\n if (csvExport === false) {\n return;\n }\n\n const options: DataTableCsvExportOptions =\n csvExport === true ? {} : csvExport;\n const filename = options.filename ?? \"data-table.csv\";\n const scope = options.scope ?? \"filtered\";\n const exportColumnIds = options.columns\n ? new Set(options.columns)\n : undefined;\n const columns = table\n .getVisibleLeafColumns()\n .filter(\n (column) =>\n !isUtilityColumnId(column.id) &&\n column.id !== \"__spacer__\" &&\n (!exportColumnIds || exportColumnIds.has(column.id)),\n );\n const rows = getDataTableExportRows(table, scope);\n const csvRows: Array> = [];\n\n if (options.includeHeaders ?? true) {\n csvRows.push(\n columns.map((column) =>\n typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : startCase(column.id),\n ),\n );\n }\n\n for (const row of rows) {\n csvRows.push(\n columns.map((column) => {\n const value = row.getValue(column.id);\n return options.getCellValue\n ? options.getCellValue({\n row: row.original,\n rowId: row.id,\n columnId: column.id,\n value,\n })\n : value;\n }),\n );\n }\n\n const lineEnding = options.lineEnding ?? \"\\r\\n\";\n const escapeFormulaValues = options.escapeFormulaValues ?? true;\n const csv = csvRows\n .map((row) =>\n row\n .map((value) => escapeCsvCell(value, escapeFormulaValues))\n .join(\",\"),\n )\n .join(lineEnding);\n\n if (options.onExport) {\n await options.onExport({\n csv,\n filename,\n rows: rows.map((row) => row.original),\n scope,\n });\n return;\n }\n\n if (typeof window === \"undefined\") {\n return;\n }\n\n const blob = new Blob([csv], { type: \"text/csv;charset=utf-8\" });\n const url = window.URL.createObjectURL(blob);\n const anchor = window.document.createElement(\"a\");\n anchor.href = url;\n anchor.download = filename;\n anchor.click();\n window.URL.revokeObjectURL(url);\n}\n\nexport function getDataTableExportRows(\n table: TanStackTable,\n scope: DataTableCsvExportScope,\n) {\n switch (scope) {\n case \"page\":\n return table.getRowModel().rows;\n case \"selected\":\n return table\n .getPrePaginationRowModel()\n .rows.filter((row) => row.getIsSelected());\n case \"all\":\n return table.getCoreRowModel().rows;\n default:\n return table.getPrePaginationRowModel().rows;\n }\n}\n\nfunction escapeCsvCell(value: unknown, escapeFormulaValues: boolean) {\n let text = normalizeFilterValue(value);\n if (\n escapeFormulaValues &&\n typeof value === \"string\" &&\n /^[\\t\\r ]*[=+\\-@]/.test(value)\n ) {\n text = `'${text}`;\n }\n if (/[\",\\n\\r]/.test(text)) {\n return `\"${text.replace(/\"/g, '\"\"')}\"`;\n }\n return text;\n}\n\nexport function getInitialColumnPinning(\n columns: Array>,\n): ColumnPinningState {\n const left: Array = [];\n const right: Array = [];\n\n for (const { column, index } of getDataTableLeafColumns(columns)) {\n const columnId = getColumnId(column, index);\n if (column.meta?.fixed === \"left\") {\n left.push(columnId);\n }\n if (column.meta?.fixed === \"right\") {\n right.push(columnId);\n }\n }\n\n return { left, right };\n}\n\nexport function getColumnId(\n column: DataTableColumnDef,\n _index?: number,\n) {\n if (column.id) {\n return column.id;\n }\n\n const accessorKey = getAccessorKey(column);\n if (accessorKey) {\n return accessorKey.replace(/\\./g, \"_\");\n }\n\n if (typeof column.header === \"string\") {\n return column.header;\n }\n\n throw new Error(\n \"Data table columns using an accessor function or non-string header must define a unique id.\",\n );\n}\n\nconst RESERVED_DATA_TABLE_COLUMN_IDS = new Set([\n \"__select__\",\n \"__expand__\",\n \"__actions__\",\n \"__spacer__\",\n]);\n\nexport function validateDataTableColumnIds(\n columns: Array>,\n) {\n const ids = new Set();\n\n const visit = (currentColumns: Array>) => {\n currentColumns.forEach((column, index) => {\n const id = getColumnId(column, index);\n if (RESERVED_DATA_TABLE_COLUMN_IDS.has(id)) {\n throw new Error(\n `Data table column id \"${id}\" is reserved for an internal column.`,\n );\n }\n if (ids.has(id)) {\n throw new Error(`Duplicate data table column id \"${id}\".`);\n }\n ids.add(id);\n\n if (\"columns\" in column && column.columns?.length) {\n visit(column.columns);\n }\n });\n };\n\n visit(columns);\n}\n\nexport function getAccessorKey(\n column: DataTableColumnDef,\n) {\n if (\"accessorKey\" in column && typeof column.accessorKey === \"string\") {\n return column.accessorKey;\n }\n\n return undefined;\n}\n\nexport function getFixedSide(column: Column) {\n const pinnedSide = column.getIsPinned();\n if (pinnedSide) {\n return pinnedSide;\n }\n\n if (column.id === \"__select__\") {\n return \"left\" as const;\n }\n\n if (column.id === \"__expand__\") {\n return \"left\" as const;\n }\n\n if (column.id === \"__actions__\") {\n return \"right\" as const;\n }\n\n const meta = (column.columnDef as DataTableColumnDef).meta;\n return meta?.fixed;\n}\n\nexport function getPinnedColumnClassName(\n side: \"left\" | \"right\",\n uiClassNames: DataTableUiClassNames,\n options?: { isUtilityColumn?: boolean },\n) {\n const isUtilityColumn = options?.isUtilityColumn ?? false;\n return cn(\n \"sticky backdrop-blur box-border\",\n uiClassNames.pinnedColumn,\n !isUtilityColumn && \"border-dotted\",\n isUtilityColumn ? uiClassNames.pinnedUtilityColumn : undefined,\n side === \"left\" ? \"border-r-1\" : \"border-l\",\n );\n}\n\nexport function isUtilityColumnId(columnId: string) {\n return (\n columnId === \"__select__\" ||\n columnId === \"__expand__\" ||\n columnId === \"__actions__\"\n );\n}\n\nconst DATA_TABLE_INTERACTIVE_TARGET_SELECTOR = [\n \"[data-row-click-ignore='true']\",\n \"a[href]\",\n \"button\",\n \"input\",\n \"select\",\n \"summary\",\n \"textarea\",\n \"[contenteditable='true']\",\n \"[role='button']\",\n \"[role='link']\",\n].join(\",\");\n\nexport function isDataTableInteractiveTarget(\n target: EventTarget | null,\n boundary: Element,\n) {\n if (!(target instanceof Element)) {\n return false;\n }\n\n const interactiveTarget = target.closest(\n DATA_TABLE_INTERACTIVE_TARGET_SELECTOR,\n );\n return Boolean(\n interactiveTarget &&\n interactiveTarget !== boundary &&\n boundary.contains(interactiveTarget),\n );\n}\n\nexport function getDensityHeaderClassName(density: DataTableDensity) {\n switch (density) {\n case \"compact\":\n return \"h-8 py-1\";\n case \"spacious\":\n return \"h-14 py-4\";\n case \"comfortable\":\n default:\n return undefined;\n }\n}\n\nexport function getDensityCellClassName(density: DataTableDensity) {\n switch (density) {\n case \"compact\":\n return \"py-1.5\";\n case \"spacious\":\n return \"py-4\";\n case \"comfortable\":\n default:\n return undefined;\n }\n}\n\nexport function moveColumnInOrder(\n currentOrder: Array,\n sourceColumnId: string,\n targetColumnId: string,\n) {\n const order = currentOrder.includes(sourceColumnId)\n ? currentOrder.slice()\n : [...currentOrder, sourceColumnId];\n const sourceIndex = order.indexOf(sourceColumnId);\n const targetIndex = order.indexOf(targetColumnId);\n\n if (sourceIndex < 0 || targetIndex < 0 || sourceIndex === targetIndex) {\n return order;\n }\n\n const [source] = order.splice(sourceIndex, 1);\n order.splice(targetIndex, 0, source);\n return order;\n}\n\nexport function startCase(value: string) {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-7FUCHMMB.js b/dist/chunk-7FUCHMMB.js new file mode 100644 index 0000000..f5db9d9 --- /dev/null +++ b/dist/chunk-7FUCHMMB.js @@ -0,0 +1,2 @@ +import {o,n,b,e,d,g as g$1,h as h$1,k as k$1,t,f,c}from'./chunk-CVR2ZXHQ.js';import {a}from'./chunk-XTVBESM5.js';import*as M from'react';import {cva}from'class-variance-authority';import {Slot,Separator,Checkbox,DropdownMenu,ScrollArea,Select,Tooltip}from'radix-ui';import {jsx,jsxs}from'react/jsx-runtime';var ce=cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:outline-none active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"",outline:"",secondary:"",ghost:"",destructive:"",link:"underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function g({className:t,variant:e="default",size:n="default",asChild:a$1=false,...s}){let d=a$1?Slot.Root:"button";return jsx(d,{"data-slot":"button","data-variant":e,"data-size":n,className:a(ce({variant:e,size:n,className:t})),...s})}function N({className:t,orientation:e="horizontal",decorative:n=true,...a$1}){return jsx(Separator.Root,{"data-slot":"separator",decorative:n,orientation:e,className:a("shrink-0 data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",t),...a$1})}var ve=cva("flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",{variants:{orientation:{horizontal:"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!",vertical:"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!"}},defaultVariants:{orientation:"horizontal"}});function Y({className:t,orientation:e,...n}){return jsx("div",{role:"group","data-slot":"button-group","data-orientation":e,className:a(ve({orientation:e}),t),...n})}function Z({className:t,asChild:e=false,...n}){let a$1=e?Slot.Root:"div";return jsx(a$1,{className:a("flex items-center gap-2 rounded-lg border px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",t),...n})}function $({className:t,orientation:e="vertical",...n}){return jsx(N,{"data-slot":"button-group-separator",orientation:e,className:a("relative self-stretch data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto",t),...n})}function tt({className:t,size:e="default",...n}){return jsx("div",{"data-slot":"card","data-size":e,className:a("group/card flex flex-col gap-4 overflow-hidden rounded-xl border py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",t),...n})}function et({className:t,...e}){return jsx("div",{"data-slot":"card-header",className:a("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",t),...e})}function ot({className:t,...e}){return jsx("div",{"data-slot":"card-title",className:a("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",t),...e})}function nt({className:t,...e}){return jsx("div",{"data-slot":"card-description",className:a("text-sm opacity-80",t),...e})}function at({className:t,...e}){return jsx("div",{"data-slot":"card-action",className:a("col-start-2 row-span-2 row-start-1 self-start justify-self-end",t),...e})}function rt({className:t,...e}){return jsx("div",{"data-slot":"card-content",className:a("px-4 group-data-[size=sm]/card:px-3",t),...e})}function it({className:t,...e}){return jsx("div",{"data-slot":"card-footer",className:a("flex items-center rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3",t),...e})}function lt({className:t,...e}){return jsx(Checkbox.Root,{"data-slot":"checkbox",className:a("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border ring-2 transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-checked:ring-2",t),...e,children:jsx(Checkbox.Indicator,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none [&>svg]:size-3.5",children:jsx(b,{})})})}function dt({...t}){return jsx(DropdownMenu.Root,{"data-slot":"dropdown-menu",...t})}function pt({...t}){return jsx(DropdownMenu.Portal,{"data-slot":"dropdown-menu-portal",...t})}function ct({...t}){return jsx(DropdownMenu.Trigger,{"data-slot":"dropdown-menu-trigger",...t})}function ut({className:t,align:e="start",sideOffset:n=4,...a$1}){return jsx(DropdownMenu.Portal,{children:jsx(DropdownMenu.Content,{"data-slot":"dropdown-menu-content",sideOffset:n,align:e,className:a("relative z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) animate-none! overflow-x-hidden overflow-y-auto rounded-lg border p-1 shadow-md duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] 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 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...a$1})})}function mt({...t}){return jsx(DropdownMenu.Group,{"data-slot":"dropdown-menu-group",...t})}function ft({className:t,inset:e,variant:n="default",...a$1}){return jsx(DropdownMenu.Item,{"data-slot":"dropdown-menu-item","data-inset":e,"data-variant":n,className:a("group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:outline-none data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...a$1})}function gt({className:t,children:e,checked:n,inset:a$1,...s}){return jsxs(DropdownMenu.CheckboxItem,{"data-slot":"dropdown-menu-checkbox-item","data-inset":a$1,className:a("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:outline-none data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),checked:n,...s,children:[jsx("span",{className:"pointer-events-none absolute right-2 flex items-center justify-center","data-slot":"dropdown-menu-checkbox-item-indicator",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(b,{})})}),e]})}function bt({...t}){return jsx(DropdownMenu.RadioGroup,{"data-slot":"dropdown-menu-radio-group",...t})}function vt({className:t,children:e,inset:n,...a$1}){return jsxs(DropdownMenu.RadioItem,{"data-slot":"dropdown-menu-radio-item","data-inset":n,className:a("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:outline-none data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...a$1,children:[jsx("span",{className:"pointer-events-none absolute right-2 flex items-center justify-center","data-slot":"dropdown-menu-radio-item-indicator",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(b,{})})}),e]})}function ht({className:t,inset:e,...n}){return jsx(DropdownMenu.Label,{"data-slot":"dropdown-menu-label","data-inset":e,className:a("px-1.5 py-1 text-xs font-medium opacity-80 data-inset:pl-7",t),...n})}function xt({className:t,...e}){return jsx(DropdownMenu.Separator,{"data-slot":"dropdown-menu-separator",className:a("-mx-1 my-1 h-px",t),...e})}function Pt({className:t,...e}){return jsx("span",{"data-slot":"dropdown-menu-shortcut",className:a("ml-auto text-xs tracking-widest opacity-75",t),...e})}function wt({...t}){return jsx(DropdownMenu.Sub,{"data-slot":"dropdown-menu-sub",...t})}function yt({className:t,inset:e$1,children:n,...a$1}){return jsxs(DropdownMenu.SubTrigger,{"data-slot":"dropdown-menu-sub-trigger","data-inset":e$1,className:a("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:outline-none data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...a$1,children:[n,jsx(e,{className:"ml-auto"})]})}function Ct({className:t,...e}){return jsx(DropdownMenu.SubContent,{"data-slot":"dropdown-menu-sub-content",className:a("relative z-50 min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) animate-none! overflow-hidden rounded-lg border p-1 shadow-lg duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...e})}function Rt({className:t,...e}){return jsx("div",{"data-slot":"empty",className:a("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance",t),...e})}function St({className:t,...e}){return jsx("div",{"data-slot":"empty-header",className:a("flex max-w-sm flex-col items-center gap-2",t),...e})}var xe=cva("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",{variants:{variant:{default:"bg-transparent",icon:"flex size-8 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-4"}},defaultVariants:{variant:"default"}});function zt({className:t,variant:e="default",...n}){return jsx("div",{"data-slot":"empty-icon","data-variant":e,className:a(xe({variant:e,className:t})),...n})}function Nt({className:t,...e}){return jsx("div",{"data-slot":"empty-title",className:a("font-heading text-sm font-medium tracking-tight",t),...e})}function It({className:t,...e}){return jsx("div",{"data-slot":"empty-description",className:a("text-sm/relaxed opacity-80 [&>a]:underline [&>a]:underline-offset-4",t),...e})}function kt({className:t,...e}){return jsx("div",{"data-slot":"empty-content",className:a("flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance",t),...e})}var I="h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:opacity-70 focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 @min-[768px]/data-table:text-sm";function k({className:t,...e}){return jsx("div",{role:"group","data-slot":"input-group",className:a("group/input-group flex w-full min-w-0 items-stretch rounded-lg border transition-colors outline-none focus-within:outline-none has-[>[data-slot=input-group-addon][data-align=block-start]]:flex-col has-[>[data-slot=input-group-addon][data-align=block-end]]:flex-col has-[>[data-slot=input-group-control]:disabled]:cursor-not-allowed has-[>[data-slot=input-group-control]:disabled]:opacity-50",t),...e})}var P=M.forwardRef(function({className:e,...n},a$1){return jsx("input",{ref:a$1,"data-slot":"input-group-control",type:n.type,className:a(I,"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:border-0 focus-visible:ring-0",e),...n})});function T({align:t="inline-start",className:e,...n}){return jsx("div",{"data-slot":"input-group-addon","data-align":t,className:a("flex shrink-0 items-center gap-1.5 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",t==="inline-start"&&"order-first pl-2.5 pr-1",t==="inline-end"&&"order-last pl-1 pr-2.5",t==="block-start"&&"order-first w-full justify-between border-b px-2.5 py-1.5 text-sm",t==="block-end"&&"order-last w-full justify-between border-t px-2.5 py-1.5 text-sm",e),...n})}function Dt({className:t,...e}){return jsx("span",{"data-slot":"input-group-text",className:a("whitespace-nowrap text-sm",t),...e})}P.displayName="InputGroupInput";var A=M.forwardRef(function({className:e,passwordToggle:n$1=false,type:a$1,...s},d){let[S,le]=M.useState(false);return n$1&&a$1==="password"?jsxs(k,{className:e,children:[jsx(P,{ref:d,type:S?"text":"password","data-slot":"input-group-control",className:"pr-0",...s}),jsx(T,{align:"inline-end",children:jsx(g,{type:"button",variant:"ghost",size:"icon-xs","aria-label":S?"Hide password":"Show password","aria-pressed":S,className:"hover:bg-transparent",onMouseDown:G=>G.preventDefault(),onClick:()=>le(G=>!G),children:S?jsx(o,{"data-icon":"inline-start"}):jsx(n,{"data-icon":"inline-start"})})})]}):jsx("input",{ref:d,type:a$1,"data-slot":"input",className:a(I,e),...s})});A.displayName="Input";function Mt({className:t,...e}){return jsx("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:a("mx-auto flex w-full justify-center",t),...e})}function Gt({className:t,...e}){return jsx("ul",{"data-slot":"pagination-content",className:a("flex items-center gap-1",t),...e})}function _t({...t}){return jsx("li",{"data-slot":"pagination-item",...t})}function h({className:t,isActive:e,disabled:n=false,variant:a$1,size:s="icon",...d}){return jsx(g,{asChild:true,variant:a$1??(e?"outline":"ghost"),size:s,className:a(n&&"pointer-events-none opacity-50",t),children:jsx("a",{"aria-current":e?"page":void 0,"aria-disabled":n?true:void 0,"data-slot":"pagination-link","data-active":e,tabIndex:n?-1:d.tabIndex,...d})})}function Bt({className:t,disabled:e,showText:n=true,size:a$1="default",text:s="Previous",...d$1}){return jsxs(h,{"aria-label":"Go to previous page",disabled:e,size:a$1,variant:"outline",className:a("pl-1.5!",t),...d$1,children:[jsx(d,{"data-icon":"inline-start"}),n?jsx("span",{className:"hidden @min-[640px]/data-table:block",children:s}):null]})}function Lt({className:t,disabled:e,showText:n=true,size:a$1="default",text:s="First",...d}){return jsxs(h,{"aria-label":"Go to first page",disabled:e,size:a$1,variant:"outline",className:a("pl-1.5!",t),...d,children:[jsx(g$1,{"data-icon":"inline-start"}),n?jsx("span",{className:"hidden @min-[640px]/data-table:block",children:s}):null]})}function At({className:t,disabled:e$1,showText:n=true,size:a$1="default",text:s="Next",...d}){return jsxs(h,{"aria-label":"Go to next page",disabled:e$1,size:a$1,variant:"outline",className:a("pr-1.5!",t),...d,children:[n?jsx("span",{className:"hidden @min-[640px]/data-table:block",children:s}):null,jsx(e,{"data-icon":"inline-end"})]})}function Vt({className:t,disabled:e,showText:n=true,size:a$1="default",text:s="Last",...d}){return jsxs(h,{"aria-label":"Go to last page",disabled:e,size:a$1,variant:"outline",className:a("pr-1.5!",t),...d,children:[n?jsx("span",{className:"hidden @min-[640px]/data-table:block",children:s}):null,jsx(h$1,{"data-icon":"inline-end"})]})}function Et({className:t,text:e="More pages",...n}){return jsxs("span",{"aria-hidden":true,"data-slot":"pagination-ellipsis",className:a("flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4",t),...n,children:[jsx(k$1,{}),jsx("span",{className:"sr-only",children:e})]})}function Ht({className:t,children:e,...n}){return jsxs(ScrollArea.Root,{"data-slot":"scroll-area",className:a("relative",t),...n,children:[jsx(ScrollArea.Viewport,{"data-slot":"scroll-area-viewport",className:"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:outline-none",children:e}),jsx(V,{className:"z-100"}),jsx(ScrollArea.Corner,{})]})}function V({className:t,orientation:e="vertical",...n}){return jsx(ScrollArea.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar","data-orientation":e,orientation:e,className:a("flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",t),...n,children:jsx(ScrollArea.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"relative flex-1 rounded-full"})})}function Ut({...t}){return jsx(Select.Root,{"data-slot":"select",...t})}function Ft({className:t,...e}){return jsx(Select.Group,{"data-slot":"select-group",className:a("scroll-my-1 p-1",t),...e})}function Kt({...t}){return jsx(Select.Value,{"data-slot":"select-value",...t})}function Ot({className:t$1,size:e="default",children:n,...a$1}){return jsxs(Select.Trigger,{"data-slot":"select-trigger","data-size":e,className:a("flex w-fit items-center justify-between gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t$1),...a$1,children:[n,jsx(Select.Icon,{asChild:true,children:jsx(t,{className:"pointer-events-none size-4"})})]})}function jt({className:t,children:e,position:n="item-aligned",align:a$1="center",...s}){return jsx(Select.Portal,{children:jsxs(Select.Content,{"data-slot":"select-content","data-align-trigger":n==="item-aligned",className:a("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) animate-none! overflow-x-hidden overflow-y-auto rounded-lg border shadow-md duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] data-[align-trigger=true]:animate-none 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:n,align:a$1,...s,children:[jsx(E,{}),jsx(Select.Viewport,{"data-position":n,className:a("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)",n==="popper"&&""),children:e}),jsx(H,{})]})})}function qt({className:t,...e}){return jsx(Select.Label,{"data-slot":"select-label",className:a("px-1.5 py-1 text-xs opacity-80",t),...e})}function Jt({className:t,children:e,...n}){return jsxs(Select.Item,{"data-slot":"select-item",className:a("relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:outline-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...n,children:[jsx("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:jsx(Select.ItemIndicator,{children:jsx(b,{className:"pointer-events-none"})})}),jsx(Select.ItemText,{children:e})]})}function Qt({className:t,...e}){return jsx(Select.Separator,{"data-slot":"select-separator",className:a("pointer-events-none -mx-1 my-1 h-px",t),...e})}function E({className:t,...e}){return jsx(Select.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:a("z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4",t),...e,children:jsx(f,{})})}function H({className:t,...e}){return jsx(Select.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:a("z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4",t),...e,children:jsx(c,{})})}function Wt({className:t,...e}){return jsx("div",{"data-slot":"skeleton",className:a("animate-pulse rounded-md",t),...e})}function Xt({className:t,...e}){return jsx("table",{"data-slot":"table",className:a("w-full border-collapse caption-bottom text-sm",t),...e})}function Yt({className:t,...e}){return jsx("thead",{"data-slot":"table-header",className:a("[&_tr]:border-b",t),...e})}function Zt({className:t,...e}){return jsx("tbody",{"data-slot":"table-body",className:a("[&_tr:last-child]:border-0",t),...e})}function $t({className:t,...e}){return jsx("tfoot",{"data-slot":"table-footer",className:a("border-t font-medium [&>tr]:last:border-b-0",t),...e})}function te({className:t,...e}){return jsx("tr",{"data-slot":"table-row",className:a("border-b transition-colors",t),...e})}function ee({className:t,...e}){return jsx("th",{"data-slot":"table-head",className:a("h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0",t),...e})}function oe({className:t,...e}){return jsx("td",{"data-slot":"table-cell",className:a("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",t),...e})}function ne({className:t,...e}){return jsx("caption",{"data-slot":"table-caption",className:a("mt-4 text-sm opacity-80",t),...e})}function ae({delayDuration:t=0,...e}){return jsx(Tooltip.Provider,{"data-slot":"tooltip-provider",delayDuration:t,...e})}function re({...t}){return jsx(Tooltip.Root,{"data-slot":"tooltip",...t})}function ie({...t}){return jsx(Tooltip.Trigger,{"data-slot":"tooltip-trigger",...t})}function se({className:t,sideOffset:e=0,children:n,...a$1}){return jsx(Tooltip.Portal,{children:jsxs(Tooltip.Content,{"data-slot":"tooltip-content",sideOffset:e,className:a("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md border px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...a$1,children:[n,jsx(Tooltip.Arrow,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}var un={Button:g,ButtonGroup:Y,ButtonGroupSeparator:$,ButtonGroupText:Z,Card:tt,CardAction:at,CardContent:rt,CardDescription:nt,CardFooter:it,CardHeader:et,CardTitle:ot,Checkbox:lt,DropdownMenu:dt,DropdownMenuCheckboxItem:gt,DropdownMenuContent:ut,DropdownMenuGroup:mt,DropdownMenuItem:ft,DropdownMenuLabel:ht,DropdownMenuPortal:pt,DropdownMenuRadioGroup:bt,DropdownMenuRadioItem:vt,DropdownMenuSeparator:xt,DropdownMenuShortcut:Pt,DropdownMenuSub:wt,DropdownMenuSubContent:Ct,DropdownMenuSubTrigger:yt,DropdownMenuTrigger:ct,Empty:Rt,EmptyContent:kt,EmptyDescription:It,EmptyHeader:St,EmptyMedia:zt,EmptyTitle:Nt,Input:A,InputGroup:k,InputGroupAddon:T,InputGroupInput:P,InputGroupText:Dt,Pagination:Mt,PaginationContent:Gt,PaginationEllipsis:Et,PaginationFirst:Lt,PaginationItem:_t,PaginationLast:Vt,PaginationLink:h,PaginationNext:At,PaginationPrevious:Bt,ScrollArea:Ht,ScrollBar:V,Select:Ut,SelectContent:jt,SelectGroup:Ft,SelectItem:Jt,SelectLabel:qt,SelectScrollDownButton:H,SelectScrollUpButton:E,SelectSeparator:Qt,SelectTrigger:Ot,SelectValue:Kt,Separator:N,Skeleton:Wt,Table:Xt,TableBody:Zt,TableCaption:ne,TableCell:oe,TableFooter:$t,TableHead:ee,TableHeader:Yt,TableRow:te,Tooltip:re,TooltipContent:se,TooltipProvider:ae,TooltipTrigger:ie};export{Mt as A,h as B,Bt as C,Lt as D,At as E,Vt as F,Ht as G,V as H,Ot as I,jt as J,qt as K,Jt as L,Qt as M,Wt as N,Xt as O,Yt as P,Zt as Q,$t as R,te as S,ee as T,oe as U,ne as V,se as W,un as X,g as a,N as b,tt as c,et as d,nt as e,rt as f,it as g,lt as h,ut as i,ft as j,gt as k,vt as l,ht as m,xt as n,yt as o,Ct as p,Rt as q,St as r,zt as s,Nt as t,It as u,kt as v,k as w,P as x,T as y,A as z};//# sourceMappingURL=chunk-7FUCHMMB.js.map +//# sourceMappingURL=chunk-7FUCHMMB.js.map \ No newline at end of file diff --git a/dist/chunk-2V6RVOWX.js.map b/dist/chunk-7FUCHMMB.js.map similarity index 61% rename from dist/chunk-2V6RVOWX.js.map rename to dist/chunk-7FUCHMMB.js.map index f1a922a..254125f 100644 --- a/dist/chunk-2V6RVOWX.js.map +++ b/dist/chunk-7FUCHMMB.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/components/ui/button.tsx","../src/components/ui/separator.tsx","../src/components/ui/button-group.tsx","../src/components/ui/card.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/empty.tsx","../src/components/ui/input-base.ts","../src/components/ui/input-group.tsx","../src/components/ui/input.tsx","../src/components/ui/pagination.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/select.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/table.tsx","../src/components/ui/tooltip.tsx","../src/core/primitive-ui-kit.ts"],"names":["buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","Slot","jsx","cn","Separator","orientation","decorative","SeparatorPrimitive","buttonGroupVariants","ButtonGroup","ButtonGroupText","ButtonGroupSeparator","Card","CardHeader","CardTitle","CardDescription","CardAction","CardContent","CardFooter","Checkbox","CheckboxPrimitive","IconCheck","DropdownMenu","DropdownMenuPrimitive","DropdownMenuPortal","DropdownMenuTrigger","DropdownMenuContent","align","sideOffset","DropdownMenuGroup","DropdownMenuItem","inset","DropdownMenuCheckboxItem","children","checked","jsxs","DropdownMenuRadioGroup","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuSub","DropdownMenuSubTrigger","IconChevronRight","DropdownMenuSubContent","Empty","EmptyHeader","emptyMediaVariants","EmptyMedia","EmptyTitle","EmptyDescription","EmptyContent","inputClassName","InputGroup","InputGroupInput","Tt","ref","InputGroupAddon","InputGroupText","Input","passwordToggle","type","showPassword","setShowPassword","event","current","IconEyeOff","IconEye","Pagination","PaginationContent","PaginationItem","PaginationLink","isActive","disabled","PaginationPrevious","showText","text","IconChevronLeft","PaginationFirst","IconChevronsLeft","PaginationNext","PaginationLast","IconChevronsRight","PaginationEllipsis","IconDots","ScrollArea","ScrollAreaPrimitive","ScrollBar","Select","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","IconSelector","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","SelectSeparator","IconChevronUp","IconChevronDown","Skeleton","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","TooltipProvider","delayDuration","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","primitiveUiKit"],"mappings":"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","file":"chunk-2V6RVOWX.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:outline-none active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"\",\n outline: \"\",\n secondary: \"\",\n ghost: \"\",\n destructive: \"\",\n link: \"underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3\",\n icon: \"size-8\",\n \"icon-xs\":\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n \n );\n}\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { Separator as SeparatorPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nexport { Separator };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Separator } from \"./separator\";\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\n {\n variants: {\n orientation: {\n horizontal:\n \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!\",\n vertical:\n \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n },\n);\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps) {\n return (\n \n );\n}\n\nfunction ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : \"div\";\n\n return (\n \n );\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n","import * as React from \"react\";\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\nimport { IconCheck } from \"../../core/icons\";\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n svg]:size-3.5\"\n >\n \n \n \n );\n}\n\nexport { Checkbox };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\nimport { IconCheck, IconChevronRight } from \"../../core/icons\";\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n );\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n \n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n}) {\n return (\n \n \n \n \n \n \n {children}\n \n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n}) {\n return (\n \n \n \n \n \n \n {children}\n \n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n}) {\n return (\n \n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n );\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n}) {\n return (\n \n {children}\n \n \n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nconst emptyMediaVariants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"flex size-8 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps) {\n return (\n \n );\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n a]:underline [&>a]:underline-offset-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n};\n","export const inputClassName =\n \"h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:opacity-70 focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\";\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { inputClassName } from \"./input-base\";\n\ntype InputGroupAddonAlign =\n | \"inline-start\"\n | \"inline-end\"\n | \"block-start\"\n | \"block-end\";\n\nfunction InputGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n [data-slot=input-group-addon][data-align=block-start]]:flex-col has-[>[data-slot=input-group-addon][data-align=block-end]]:flex-col has-[>[data-slot=input-group-control]:disabled]:cursor-not-allowed has-[>[data-slot=input-group-control]:disabled]:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nconst InputGroupInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<\"input\">\n>(function InputGroupInput({ className, ...props }, ref) {\n return (\n \n );\n});\n\ntype InputGroupAddonProps = React.ComponentProps<\"div\"> & {\n align?: InputGroupAddonAlign;\n};\n\nfunction InputGroupAddon({\n align = \"inline-start\",\n className,\n ...props\n}: InputGroupAddonProps) {\n return (\n \n );\n}\n\nfunction InputGroupText({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n );\n}\n\nInputGroupInput.displayName = \"InputGroupInput\";\n\nexport { InputGroup, InputGroupAddon, InputGroupInput, InputGroupText };\n","import * as React from \"react\";\nimport { IconEye, IconEyeOff } from \"../../core/icons\";\n\nimport { Button } from \"./button\";\nimport { inputClassName } from \"./input-base\";\nimport { InputGroup, InputGroupAddon, InputGroupInput } from \"./input-group\";\nimport { cn } from \"../../lib/utils\";\n\ntype InputProps = React.ComponentProps<\"input\"> & {\n passwordToggle?: boolean;\n};\n\nconst Input = React.forwardRef(function Input(\n { className, passwordToggle = false, type, ...props },\n ref,\n) {\n const [showPassword, setShowPassword] = React.useState(false);\n const canTogglePassword = passwordToggle && type === \"password\";\n\n if (!canTogglePassword) {\n return (\n \n );\n }\n\n return (\n \n \n \n event.preventDefault()}\n onClick={() => setShowPassword((current) => !current)}\n >\n {showPassword ? (\n \n ) : (\n \n )}\n \n \n \n );\n});\n\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport {\n IconChevronsLeft,\n IconChevronsRight,\n IconChevronLeft,\n IconChevronRight,\n IconDots,\n} from \"../../core/icons\";\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n );\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n \n );\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return
  • ;\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n disabled?: boolean;\n variant?: React.ComponentProps[\"variant\"];\n} & Pick, \"size\"> &\n React.ComponentProps<\"a\">;\n\nfunction PaginationLink({\n className,\n isActive,\n disabled = false,\n variant,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n \n \n \n );\n}\n\nfunction PaginationPrevious({\n className,\n disabled,\n showText = true,\n size = \"default\",\n text = \"Previous\",\n ...props\n}: React.ComponentProps & {\n showText?: boolean;\n text?: string;\n}) {\n return (\n \n \n {showText ? {text} : null}\n \n );\n}\n\nfunction PaginationFirst({\n className,\n disabled,\n showText = true,\n size = \"default\",\n text = \"First\",\n ...props\n}: React.ComponentProps & {\n showText?: boolean;\n text?: string;\n}) {\n return (\n \n \n {showText ? {text} : null}\n \n );\n}\n\nfunction PaginationNext({\n className,\n disabled,\n showText = true,\n size = \"default\",\n text = \"Next\",\n ...props\n}: React.ComponentProps & {\n showText?: boolean;\n text?: string;\n}) {\n return (\n \n {showText ? {text} : null}\n \n \n );\n}\n\nfunction PaginationLast({\n className,\n disabled,\n showText = true,\n size = \"default\",\n text = \"Last\",\n ...props\n}: React.ComponentProps & {\n showText?: boolean;\n text?: string;\n}) {\n return (\n \n {showText ? {text} : null}\n \n \n );\n}\n\nfunction PaginationEllipsis({\n className,\n text = \"More pages\",\n ...props\n}: React.ComponentProps<\"span\"> & { text?: string }) {\n return (\n \n \n {text}\n \n );\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n};\n","import * as React from \"react\";\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n {children}\n \n \n \n \n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n );\n}\n\nexport { ScrollArea, ScrollBar };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Select as SelectPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n IconSelector,\n IconCheck,\n IconChevronUp,\n IconChevronDown,\n} from \"../../core/icons\";\n\nfunction Select({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction SelectGroup({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n \n {children}\n \n \n \n \n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n {children}\n \n \n \n \n );\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { cn } from \"../../lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nexport { Skeleton };\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n \n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n \n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n \n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n \n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n \n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n \n );\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n \n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n {children}\n \n \n \n );\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","import type { DataTableUiKit } from \"./ui-kit\";\nimport { Button } from \"../components/ui/button\";\nimport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n} from \"../components/ui/button-group\";\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"../components/ui/card\";\nimport { Checkbox } from \"../components/ui/checkbox\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"../components/ui/dropdown-menu\";\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"../components/ui/empty\";\nimport { Input } from \"../components/ui/input\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupText,\n} from \"../components/ui/input-group\";\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"../components/ui/pagination\";\nimport { ScrollArea, ScrollBar } from \"../components/ui/scroll-area\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"../components/ui/select\";\nimport { Separator } from \"../components/ui/separator\";\nimport { Skeleton } from \"../components/ui/skeleton\";\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../components/ui/table\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip\";\n\nexport const primitiveUiKit: DataTableUiKit = {\n Button,\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Checkbox,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n Input,\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupText,\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n ScrollArea,\n ScrollBar,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n Separator,\n Skeleton,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n};\n\nexport {\n Button,\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Checkbox,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n Input,\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupText,\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n ScrollArea,\n ScrollBar,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n Separator,\n Skeleton,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../src/components/ui/button.tsx","../src/components/ui/separator.tsx","../src/components/ui/button-group.tsx","../src/components/ui/card.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/empty.tsx","../src/components/ui/input-base.ts","../src/components/ui/input-group.tsx","../src/components/ui/input.tsx","../src/components/ui/pagination.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/select.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/table.tsx","../src/components/ui/tooltip.tsx","../src/core/primitive-ui-kit.ts"],"names":["buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","Slot","jsx","cn","Separator","orientation","decorative","SeparatorPrimitive","buttonGroupVariants","ButtonGroup","ButtonGroupText","ButtonGroupSeparator","Card","CardHeader","CardTitle","CardDescription","CardAction","CardContent","CardFooter","Checkbox","CheckboxPrimitive","IconCheck","DropdownMenu","DropdownMenuPrimitive","DropdownMenuPortal","DropdownMenuTrigger","DropdownMenuContent","align","sideOffset","DropdownMenuGroup","DropdownMenuItem","inset","DropdownMenuCheckboxItem","children","checked","jsxs","DropdownMenuRadioGroup","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuSub","DropdownMenuSubTrigger","IconChevronRight","DropdownMenuSubContent","Empty","EmptyHeader","emptyMediaVariants","EmptyMedia","EmptyTitle","EmptyDescription","EmptyContent","inputClassName","InputGroup","InputGroupInput","Tt","ref","InputGroupAddon","InputGroupText","Input","passwordToggle","type","showPassword","setShowPassword","event","current","IconEyeOff","IconEye","Pagination","PaginationContent","PaginationItem","PaginationLink","isActive","disabled","PaginationPrevious","showText","text","IconChevronLeft","PaginationFirst","IconChevronsLeft","PaginationNext","PaginationLast","IconChevronsRight","PaginationEllipsis","IconDots","ScrollArea","ScrollAreaPrimitive","ScrollBar","Select","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","IconSelector","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","SelectSeparator","IconChevronUp","IconChevronDown","Skeleton","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","TooltipProvider","delayDuration","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","primitiveUiKit"],"mappings":"mTAMA,IAAMA,GAAiBC,GAAAA,CACrB,0YAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,QAAS,EAAA,CACT,OAAA,CAAS,EAAA,CACT,SAAA,CAAW,GACX,KAAA,CAAO,EAAA,CACP,WAAA,CAAa,EAAA,CACb,KAAM,oCACR,CAAA,CACA,KAAM,CACJ,OAAA,CACE,uFACF,EAAA,CAAI,+MAAA,CACJ,EAAA,CAAI,yNAAA,CACJ,GAAI,sFAAA,CACJ,IAAA,CAAM,QAAA,CACN,SAAA,CACE,0HACF,SAAA,CACE,oFAAA,CACF,SAAA,CAAW,QACb,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SAAA,CACT,KAAM,SACR,CACF,CACF,CAAA,CAEA,SAASC,CAAAA,CAAO,CACd,UAAAC,CAAAA,CACA,OAAA,CAAAC,EAAU,SAAA,CACV,IAAA,CAAAC,CAAAA,CAAO,SAAA,CACP,QAAAC,GAAAA,CAAU,KAAA,CACV,GAAGC,CACL,CAAA,CAGK,CACH,IAAMC,CAAAA,CAAOF,GAAAA,CAAUG,IAAAA,CAAK,KAAO,QAAA,CAEnC,OACEC,GAAAA,CAACF,CAAAA,CAAA,CACC,WAAA,CAAU,QAAA,CACV,cAAA,CAAcJ,CAAAA,CACd,YAAWC,CAAAA,CACX,SAAA,CAAWM,EAAGX,EAAAA,CAAe,CAAE,QAAAI,CAAAA,CAAS,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAF,CAAU,CAAC,CAAC,EACzD,GAAGI,CAAAA,CACN,CAEJ,CCvDA,SAASK,CAAAA,CAAU,CACjB,SAAA,CAAAT,CAAAA,CACA,WAAA,CAAAU,CAAAA,CAAc,aACd,UAAA,CAAAC,CAAAA,CAAa,KACb,GAAGP,GACL,EAAyD,CACvD,OACEG,GAAAA,CAACK,SAAAA,CAAmB,KAAnB,CACC,WAAA,CAAU,YACV,UAAA,CAAYD,CAAAA,CACZ,YAAaD,CAAAA,CACb,SAAA,CAAWF,CAAAA,CACT,oGAAA,CACAR,CACF,CAAA,CACC,GAAGI,IACN,CAEJ,CCjBA,IAAMS,EAAAA,CAAsBf,IAC1B,0RAAA,CACA,CACE,QAAA,CAAU,CACR,YAAa,CACX,UAAA,CACE,uKAAA,CACF,QAAA,CACE,gLACJ,CACF,CAAA,CACA,gBAAiB,CACf,WAAA,CAAa,YACf,CACF,CACF,CAAA,CAEA,SAASgB,EAAY,CACnB,SAAA,CAAAd,CAAAA,CACA,WAAA,CAAAU,EACA,GAAGN,CACL,CAAA,CAA2E,CACzE,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,KAAK,OAAA,CACL,WAAA,CAAU,eACV,kBAAA,CAAkBG,CAAAA,CAClB,SAAA,CAAWF,CAAAA,CAAGK,GAAoB,CAAE,WAAA,CAAAH,CAAY,CAAC,EAAGV,CAAS,CAAA,CAC5D,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASW,EAAgB,CACvB,SAAA,CAAAf,EACA,OAAA,CAAAG,CAAAA,CAAU,KAAA,CACV,GAAGC,CACL,CAAA,CAEG,CACD,IAAMC,GAAAA,CAAOF,CAAAA,CAAUG,KAAK,IAAA,CAAO,KAAA,CAEnC,OACEC,GAAAA,CAACF,IAAA,CACC,SAAA,CAAWG,EACT,uIAAA,CACAR,CACF,EACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASY,CAAAA,CAAqB,CAC5B,SAAA,CAAAhB,CAAAA,CACA,YAAAU,CAAAA,CAAc,UAAA,CACd,GAAGN,CACL,EAA2C,CACzC,OACEG,IAACE,CAAAA,CAAA,CACC,YAAU,wBAAA,CACV,WAAA,CAAaC,CAAAA,CACb,SAAA,CAAWF,EACT,6GAAA,CACAR,CACF,EACC,GAAGI,CAAAA,CACN,CAEJ,CCvEA,SAASa,GAAK,CACZ,SAAA,CAAAjB,EACA,IAAA,CAAAE,CAAAA,CAAO,SAAA,CACP,GAAGE,CACL,CAAA,CAA8D,CAC5D,OACEG,GAAAA,CAAC,OACC,WAAA,CAAU,MAAA,CACV,WAAA,CAAWL,CAAAA,CACX,UAAWM,CAAAA,CACT,6SAAA,CACAR,CACF,CAAA,CACC,GAAGI,EACN,CAEJ,CAEA,SAASc,EAAAA,CAAW,CAAE,SAAA,CAAAlB,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAgC,CACxE,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,WAAA,CAAU,cACV,SAAA,CAAWC,CAAAA,CACT,qSACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASe,GAAU,CAAE,SAAA,CAAAnB,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAgC,CACvE,OACEG,GAAAA,CAAC,OACC,WAAA,CAAU,YAAA,CACV,UAAWC,CAAAA,CACT,mFAAA,CACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASgB,EAAAA,CAAgB,CAAE,SAAA,CAAApB,EAAW,GAAGI,CAAM,CAAA,CAAgC,CAC7E,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,YAAU,kBAAA,CACV,SAAA,CAAWC,EAAG,oBAAA,CAAsBR,CAAS,CAAA,CAC5C,GAAGI,EACN,CAEJ,CAEA,SAASiB,EAAAA,CAAW,CAAE,SAAA,CAAArB,CAAAA,CAAW,GAAGI,CAAM,EAAgC,CACxE,OACEG,IAAC,KAAA,CAAA,CACC,WAAA,CAAU,cACV,SAAA,CAAWC,CAAAA,CACT,gEAAA,CACAR,CACF,EACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASkB,GAAY,CAAE,SAAA,CAAAtB,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAgC,CACzE,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,YAAU,cAAA,CACV,SAAA,CAAWC,CAAAA,CAAG,qCAAA,CAAuCR,CAAS,CAAA,CAC7D,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASmB,EAAAA,CAAW,CAAE,SAAA,CAAAvB,EAAW,GAAGI,CAAM,EAAgC,CACxE,OACEG,IAAC,KAAA,CAAA,CACC,WAAA,CAAU,aAAA,CACV,SAAA,CAAWC,EACT,2EAAA,CACAR,CACF,EACC,GAAGI,CAAAA,CACN,CAEJ,CCtFA,SAASoB,EAAAA,CAAS,CAChB,SAAA,CAAAxB,CAAAA,CACA,GAAGI,CACL,CAAA,CAAwD,CACtD,OACEG,IAACkB,QAAAA,CAAkB,IAAA,CAAlB,CACC,WAAA,CAAU,WACV,SAAA,CAAWjB,CAAAA,CACT,gTACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CAEJ,QAAA,CAAAG,GAAAA,CAACkB,QAAAA,CAAkB,UAAlB,CACC,WAAA,CAAU,qBACV,SAAA,CAAU,yEAAA,CAEV,SAAAlB,GAAAA,CAACmB,CAAAA,CAAA,EAAU,CAAA,CACb,EACF,CAEJ,CCnBA,SAASC,EAAAA,CAAa,CACpB,GAAGvB,CACL,CAAA,CAA4D,CAC1D,OAAOG,GAAAA,CAACqB,YAAAA,CAAsB,KAAtB,CAA2B,WAAA,CAAU,gBAAiB,GAAGxB,CAAAA,CAAO,CAC1E,CAEA,SAASyB,EAAAA,CAAmB,CAC1B,GAAGzB,CACL,EAA8D,CAC5D,OACEG,GAAAA,CAACqB,YAAAA,CAAsB,OAAtB,CAA6B,WAAA,CAAU,uBAAwB,GAAGxB,CAAAA,CAAO,CAE9E,CAEA,SAAS0B,EAAAA,CAAoB,CAC3B,GAAG1B,CACL,CAAA,CAA+D,CAC7D,OACEG,IAACqB,YAAAA,CAAsB,OAAA,CAAtB,CACC,WAAA,CAAU,wBACT,GAAGxB,CAAAA,CACN,CAEJ,CAEA,SAAS2B,GAAoB,CAC3B,SAAA,CAAA/B,CAAAA,CACA,KAAA,CAAAgC,EAAQ,OAAA,CACR,UAAA,CAAAC,EAAa,CAAA,CACb,GAAG7B,GACL,CAAA,CAA+D,CAC7D,OACEG,GAAAA,CAACqB,aAAsB,MAAA,CAAtB,CACC,SAAArB,GAAAA,CAACqB,YAAAA,CAAsB,QAAtB,CACC,WAAA,CAAU,uBAAA,CACV,UAAA,CAAYK,EACZ,KAAA,CAAOD,CAAAA,CACP,SAAA,CAAWxB,CAAAA,CACT,irBACAR,CACF,CAAA,CACC,GAAGI,GAAAA,CACN,EACF,CAEJ,CAEA,SAAS8B,EAAAA,CAAkB,CACzB,GAAG9B,CACL,CAAA,CAA6D,CAC3D,OACEG,IAACqB,YAAAA,CAAsB,KAAA,CAAtB,CAA4B,WAAA,CAAU,qBAAA,CAAuB,GAAGxB,CAAAA,CAAO,CAE5E,CAEA,SAAS+B,GAAiB,CACxB,SAAA,CAAAnC,EACA,KAAA,CAAAoC,CAAAA,CACA,QAAAnC,CAAAA,CAAU,SAAA,CACV,GAAGG,GACL,EAGG,CACD,OACEG,GAAAA,CAACqB,YAAAA,CAAsB,KAAtB,CACC,WAAA,CAAU,oBAAA,CACV,YAAA,CAAYQ,EACZ,cAAA,CAAcnC,CAAAA,CACd,UAAWO,CAAAA,CACT,sTAAA,CACAR,CACF,CAAA,CACC,GAAGI,GAAAA,CACN,CAEJ,CAEA,SAASiC,EAAAA,CAAyB,CAChC,SAAA,CAAArC,CAAAA,CACA,SAAAsC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAH,IACA,GAAGhC,CACL,EAEG,CACD,OACEoC,KAACZ,YAAAA,CAAsB,YAAA,CAAtB,CACC,WAAA,CAAU,8BACV,YAAA,CAAYQ,GAAAA,CACZ,SAAA,CAAW5B,CAAAA,CACT,mSACAR,CACF,CAAA,CACA,OAAA,CAASuC,CAAAA,CACR,GAAGnC,CAAAA,CAEJ,QAAA,CAAA,CAAAG,IAAC,MAAA,CAAA,CACC,SAAA,CAAU,wEACV,WAAA,CAAU,uCAAA,CAEV,QAAA,CAAAA,GAAAA,CAACqB,aAAsB,aAAA,CAAtB,CACC,QAAA,CAAArB,GAAAA,CAACmB,EAAA,EAAU,CAAA,CACb,CAAA,CACF,CAAA,CACCY,GACH,CAEJ,CAEA,SAASG,EAAAA,CAAuB,CAC9B,GAAGrC,CACL,CAAA,CAAkE,CAChE,OACEG,IAACqB,YAAAA,CAAsB,UAAA,CAAtB,CACC,WAAA,CAAU,4BACT,GAAGxB,CAAAA,CACN,CAEJ,CAEA,SAASsC,EAAAA,CAAsB,CAC7B,UAAA1C,CAAAA,CACA,QAAA,CAAAsC,EACA,KAAA,CAAAF,CAAAA,CACA,GAAGhC,GACL,EAEG,CACD,OACEoC,KAACZ,YAAAA,CAAsB,SAAA,CAAtB,CACC,WAAA,CAAU,0BAAA,CACV,YAAA,CAAYQ,CAAAA,CACZ,UAAW5B,CAAAA,CACT,kSAAA,CACAR,CACF,CAAA,CACC,GAAGI,IAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,wEACV,WAAA,CAAU,oCAAA,CAEV,QAAA,CAAAA,GAAAA,CAACqB,aAAsB,aAAA,CAAtB,CACC,QAAA,CAAArB,GAAAA,CAACmB,EAAA,EAAU,CAAA,CACb,EACF,CAAA,CACCY,CAAAA,CAAAA,CACH,CAEJ,CAEA,SAASK,EAAAA,CAAkB,CACzB,UAAA3C,CAAAA,CACA,KAAA,CAAAoC,EACA,GAAGhC,CACL,EAEG,CACD,OACEG,GAAAA,CAACqB,YAAAA,CAAsB,MAAtB,CACC,WAAA,CAAU,sBACV,YAAA,CAAYQ,CAAAA,CACZ,UAAW5B,CAAAA,CACT,4DAAA,CACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASwC,GAAsB,CAC7B,SAAA,CAAA5C,CAAAA,CACA,GAAGI,CACL,CAAA,CAAiE,CAC/D,OACEG,GAAAA,CAACqB,YAAAA,CAAsB,UAAtB,CACC,WAAA,CAAU,yBAAA,CACV,SAAA,CAAWpB,EAAG,iBAAA,CAAmBR,CAAS,EACzC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASyC,EAAAA,CAAqB,CAC5B,UAAA7C,CAAAA,CACA,GAAGI,CACL,CAAA,CAAiC,CAC/B,OACEG,GAAAA,CAAC,MAAA,CAAA,CACC,WAAA,CAAU,wBAAA,CACV,UAAWC,CAAAA,CACT,4CAAA,CACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAAS0C,GAAgB,CACvB,GAAG1C,CACL,CAAA,CAA2D,CACzD,OAAOG,GAAAA,CAACqB,YAAAA,CAAsB,GAAA,CAAtB,CAA0B,YAAU,mBAAA,CAAqB,GAAGxB,CAAAA,CAAO,CAC7E,CAEA,SAAS2C,EAAAA,CAAuB,CAC9B,SAAA,CAAA/C,EACA,KAAA,CAAAoC,GAAAA,CACA,SAAAE,CAAAA,CACA,GAAGlC,GACL,CAAA,CAEG,CACD,OACEoC,IAAAA,CAACZ,aAAsB,UAAA,CAAtB,CACC,WAAA,CAAU,2BAAA,CACV,aAAYQ,GAAAA,CACZ,SAAA,CAAW5B,CAAAA,CACT,yNAAA,CACAR,CACF,CAAA,CACC,GAAGI,IAEH,QAAA,CAAA,CAAAkC,CAAAA,CACD/B,IAACyC,CAAAA,CAAA,CAAiB,SAAA,CAAU,SAAA,CAAU,GACxC,CAEJ,CAEA,SAASC,EAAAA,CAAuB,CAC9B,UAAAjD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAkE,CAChE,OACEG,GAAAA,CAACqB,aAAsB,UAAA,CAAtB,CACC,YAAU,2BAAA,CACV,SAAA,CAAWpB,CAAAA,CACT,+hBAAA,CACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CC1PA,SAAS8C,EAAAA,CAAM,CAAE,UAAAlD,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAgC,CACnE,OACEG,GAAAA,CAAC,OACC,WAAA,CAAU,OAAA,CACV,UAAWC,CAAAA,CACT,6HAAA,CACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAAS+C,EAAAA,CAAY,CAAE,SAAA,CAAAnD,CAAAA,CAAW,GAAGI,CAAM,EAAgC,CACzE,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,YAAU,cAAA,CACV,SAAA,CAAWC,CAAAA,CAAG,2CAAA,CAA6CR,CAAS,CAAA,CACnE,GAAGI,EACN,CAEJ,CAEA,IAAMgD,EAAAA,CAAqBtD,GAAAA,CACzB,6FAAA,CACA,CACE,SAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,gBAAA,CACT,KAAM,kGACR,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CAEA,SAASuD,EAAAA,CAAW,CAClB,SAAA,CAAArD,CAAAA,CACA,QAAAC,CAAAA,CAAU,SAAA,CACV,GAAGG,CACL,EAA0E,CACxE,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,YAAU,YAAA,CACV,cAAA,CAAcN,EACd,SAAA,CAAWO,CAAAA,CAAG4C,GAAmB,CAAE,OAAA,CAAAnD,CAAAA,CAAS,SAAA,CAAAD,CAAU,CAAC,CAAC,CAAA,CACvD,GAAGI,EACN,CAEJ,CAEA,SAASkD,EAAAA,CAAW,CAAE,SAAA,CAAAtD,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAgC,CACxE,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,WAAA,CAAU,cACV,SAAA,CAAWC,CAAAA,CACT,iDAAA,CACAR,CACF,EACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASmD,EAAAA,CAAiB,CAAE,UAAAvD,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAA8B,CAC5E,OACEG,GAAAA,CAAC,OACC,WAAA,CAAU,mBAAA,CACV,UAAWC,CAAAA,CACT,qEAAA,CACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASoD,EAAAA,CAAa,CAAE,SAAA,CAAAxD,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAgC,CAC1E,OACEG,IAAC,KAAA,CAAA,CACC,WAAA,CAAU,eAAA,CACV,SAAA,CAAWC,EACT,iFAAA,CACAR,CACF,CAAA,CACC,GAAGI,EACN,CAEJ,CC9FO,IAAMqD,CAAAA,CACX,oVAAA,CCUF,SAASC,CAAAA,CAAW,CAClB,SAAA,CAAA1D,CAAAA,CACA,GAAGI,CACL,EAAgC,CAC9B,OACEG,IAAC,KAAA,CAAA,CACC,IAAA,CAAK,QACL,WAAA,CAAU,aAAA,CACV,SAAA,CAAWC,CAAAA,CACT,yYACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,IAAMuD,CAAAA,CAAwBC,CAAA,CAAA,UAAA,CAG5B,SAAyB,CAAE,SAAA,CAAA5D,EAAW,GAAGI,CAAM,EAAGyD,GAAAA,CAAK,CACvD,OACEtD,GAAAA,CAAC,SACC,GAAA,CAAKsD,GAAAA,CACL,YAAU,qBAAA,CACV,IAAA,CAAMzD,EAAM,IAAA,CACZ,SAAA,CAAWI,CAAAA,CACTiD,CAAAA,CACA,sGACAzD,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAAC,EAMD,SAAS0D,CAAAA,CAAgB,CACvB,MAAA9B,CAAAA,CAAQ,cAAA,CACR,SAAA,CAAAhC,CAAAA,CACA,GAAGI,CACL,CAAA,CAAyB,CACvB,OACEG,IAAC,KAAA,CAAA,CACC,WAAA,CAAU,oBACV,YAAA,CAAYyB,CAAAA,CACZ,UAAWxB,CAAAA,CACT,qGAAA,CACAwB,CAAAA,GAAU,cAAA,EAAkB,0BAC5BA,CAAAA,GAAU,YAAA,EAAgB,yBAC1BA,CAAAA,GAAU,aAAA,EACR,oEACFA,CAAAA,GAAU,WAAA,EACR,kEAAA,CACFhC,CACF,EACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAAS2D,GAAe,CACtB,SAAA,CAAA/D,CAAAA,CACA,GAAGI,CACL,CAAA,CAAiC,CAC/B,OACEG,GAAAA,CAAC,QACC,WAAA,CAAU,kBAAA,CACV,SAAA,CAAWC,CAAAA,CAAG,4BAA6BR,CAAS,CAAA,CACnD,GAAGI,CAAAA,CACN,CAEJ,CAEAuD,CAAAA,CAAgB,WAAA,CAAc,iBAAA,CC5E9B,IAAMK,CAAAA,CAAc,aAAyC,SAC3D,CAAE,SAAA,CAAAhE,CAAAA,CAAW,eAAAiE,GAAAA,CAAiB,KAAA,CAAO,KAAAC,GAAAA,CAAM,GAAG9D,CAAM,CAAA,CACpDyD,CAAAA,CACA,CACA,GAAM,CAACM,CAAAA,CAAcC,EAAe,CAAA,CAAU,CAAA,CAAA,QAAA,CAAS,KAAK,CAAA,CAG5D,OAF0BH,GAAAA,EAAkBC,GAAAA,GAAS,WAenD1B,IAAAA,CAACkB,CAAAA,CAAA,CAAW,SAAA,CAAW1D,CAAAA,CACrB,UAAAO,GAAAA,CAACoD,CAAAA,CAAA,CACC,GAAA,CAAKE,EACL,IAAA,CAAMM,CAAAA,CAAe,OAAS,UAAA,CAC9B,WAAA,CAAU,sBACV,SAAA,CAAU,MAAA,CACT,GAAG/D,CAAAA,CACN,EACAG,GAAAA,CAACuD,CAAAA,CAAA,CAAgB,KAAA,CAAM,YAAA,CACrB,SAAAvD,GAAAA,CAACR,CAAAA,CAAA,CACC,IAAA,CAAK,SACL,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,SAAA,CACL,aAAYoE,CAAAA,CAAe,eAAA,CAAkB,eAAA,CAC7C,cAAA,CAAcA,EACd,SAAA,CAAU,sBAAA,CACV,YAAcE,CAAAA,EAAUA,CAAAA,CAAM,gBAAe,CAC7C,OAAA,CAAS,IAAMD,EAAAA,CAAiBE,GAAY,CAACA,CAAO,EAEnD,QAAA,CAAAH,CAAAA,CACC5D,IAACgE,CAAAA,CAAA,CAAW,WAAA,CAAU,cAAA,CAAe,EAErChE,GAAAA,CAACiE,CAAAA,CAAA,CAAQ,WAAA,CAAU,cAAA,CAAe,EAEtC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CArCEjE,GAAAA,CAAC,SACC,GAAA,CAAKsD,CAAAA,CACL,IAAA,CAAMK,GAAAA,CACN,YAAU,OAAA,CACV,SAAA,CAAW1D,CAAAA,CAAGiD,CAAAA,CAAgBzD,CAAS,CAAA,CACtC,GAAGI,EACN,CAiCN,CAAC,EAED4D,CAAAA,CAAM,WAAA,CAAc,OAAA,CClDpB,SAASS,EAAAA,CAAW,CAAE,SAAA,CAAAzE,EAAW,GAAGI,CAAM,EAAgC,CACxE,OACEG,IAAC,KAAA,CAAA,CACC,IAAA,CAAK,YAAA,CACL,YAAA,CAAW,aACX,WAAA,CAAU,YAAA,CACV,SAAA,CAAWC,CAAAA,CAAG,qCAAsCR,CAAS,CAAA,CAC5D,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASsE,GAAkB,CACzB,SAAA,CAAA1E,EACA,GAAGI,CACL,CAAA,CAA+B,CAC7B,OACEG,GAAAA,CAAC,IAAA,CAAA,CACC,YAAU,oBAAA,CACV,SAAA,CAAWC,EAAG,yBAAA,CAA2BR,CAAS,CAAA,CACjD,GAAGI,EACN,CAEJ,CAEA,SAASuE,EAAAA,CAAe,CAAE,GAAGvE,CAAM,CAAA,CAA+B,CAChE,OAAOG,IAAC,IAAA,CAAA,CAAG,WAAA,CAAU,iBAAA,CAAmB,GAAGH,EAAO,CACpD,CASA,SAASwE,CAAAA,CAAe,CACtB,SAAA,CAAA5E,CAAAA,CACA,SAAA6E,CAAAA,CACA,QAAA,CAAAC,EAAW,KAAA,CACX,OAAA,CAAA7E,GAAAA,CACA,IAAA,CAAAC,EAAO,MAAA,CACP,GAAGE,CACL,CAAA,CAAwB,CACtB,OACEG,GAAAA,CAACR,CAAAA,CAAA,CACC,OAAA,CAAO,KACP,OAAA,CAASE,GAAAA,GAAY4E,EAAW,SAAA,CAAY,OAAA,CAAA,CAC5C,KAAM3E,CAAAA,CACN,SAAA,CAAWM,CAAAA,CAAGsE,CAAAA,EAAY,iCAAkC9E,CAAS,CAAA,CAErE,QAAA,CAAAO,GAAAA,CAAC,KACC,cAAA,CAAcsE,CAAAA,CAAW,MAAA,CAAS,MAAA,CAClC,gBAAeC,CAAAA,CAAW,IAAA,CAAO,OACjC,WAAA,CAAU,iBAAA,CACV,cAAaD,CAAAA,CACb,QAAA,CAAUC,CAAAA,CAAW,EAAA,CAAK1E,EAAM,QAAA,CAC/B,GAAGA,EACN,CAAA,CACF,CAEJ,CAEA,SAAS2E,EAAAA,CAAmB,CAC1B,SAAA,CAAA/E,EACA,QAAA,CAAA8E,CAAAA,CACA,SAAAE,CAAAA,CAAW,IAAA,CACX,KAAA9E,GAAAA,CAAO,SAAA,CACP,IAAA,CAAA+E,CAAAA,CAAO,WACP,GAAG7E,GACL,CAAA,CAGG,CACD,OACEoC,IAAAA,CAACoC,CAAAA,CAAA,CACC,YAAA,CAAW,sBACX,QAAA,CAAUE,CAAAA,CACV,KAAM5E,GAAAA,CACN,OAAA,CAAQ,UACR,SAAA,CAAWM,CAAAA,CAAG,SAAA,CAAWR,CAAS,EACjC,GAAGI,GAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC2E,EAAA,CAAgB,WAAA,CAAU,cAAA,CAAe,CAAA,CACzCF,EACCzE,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,sCAAA,CAAwC,QAAA,CAAA0E,EAAK,CAAA,CAC3D,IAAA,CAAA,CACN,CAEJ,CAEA,SAASE,EAAAA,CAAgB,CACvB,SAAA,CAAAnF,CAAAA,CACA,SAAA8E,CAAAA,CACA,QAAA,CAAAE,CAAAA,CAAW,IAAA,CACX,KAAA9E,GAAAA,CAAO,SAAA,CACP,KAAA+E,CAAAA,CAAO,OAAA,CACP,GAAG7E,CACL,CAAA,CAGG,CACD,OACEoC,KAACoC,CAAAA,CAAA,CACC,aAAW,kBAAA,CACX,QAAA,CAAUE,EACV,IAAA,CAAM5E,GAAAA,CACN,OAAA,CAAQ,SAAA,CACR,UAAWM,CAAAA,CAAG,SAAA,CAAWR,CAAS,CAAA,CACjC,GAAGI,EAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC6E,GAAAA,CAAA,CAAiB,YAAU,cAAA,CAAe,CAAA,CAC1CJ,CAAAA,CACCzE,GAAAA,CAAC,QAAK,SAAA,CAAU,sCAAA,CAAwC,QAAA,CAAA0E,CAAAA,CAAK,EAC3D,IAAA,CAAA,CACN,CAEJ,CAEA,SAASI,EAAAA,CAAe,CACtB,SAAA,CAAArF,CAAAA,CACA,QAAA,CAAA8E,GAAAA,CACA,SAAAE,CAAAA,CAAW,IAAA,CACX,KAAA9E,GAAAA,CAAO,SAAA,CACP,KAAA+E,CAAAA,CAAO,MAAA,CACP,GAAG7E,CACL,EAGG,CACD,OACEoC,KAACoC,CAAAA,CAAA,CACC,aAAW,iBAAA,CACX,QAAA,CAAUE,GAAAA,CACV,IAAA,CAAM5E,IACN,OAAA,CAAQ,SAAA,CACR,SAAA,CAAWM,CAAAA,CAAG,UAAWR,CAAS,CAAA,CACjC,GAAGI,CAAAA,CAEH,UAAA4E,CAAAA,CACCzE,GAAAA,CAAC,QAAK,SAAA,CAAU,sCAAA,CAAwC,SAAA0E,CAAAA,CAAK,CAAA,CAC3D,IAAA,CACJ1E,GAAAA,CAACyC,EAAA,CAAiB,WAAA,CAAU,aAAa,CAAA,CAAA,CAC3C,CAEJ,CAEA,SAASsC,EAAAA,CAAe,CACtB,SAAA,CAAAtF,EACA,QAAA,CAAA8E,CAAAA,CACA,SAAAE,CAAAA,CAAW,IAAA,CACX,KAAA9E,GAAAA,CAAO,SAAA,CACP,IAAA,CAAA+E,CAAAA,CAAO,OACP,GAAG7E,CACL,CAAA,CAGG,CACD,OACEoC,IAAAA,CAACoC,CAAAA,CAAA,CACC,YAAA,CAAW,kBACX,QAAA,CAAUE,CAAAA,CACV,KAAM5E,GAAAA,CACN,OAAA,CAAQ,UACR,SAAA,CAAWM,CAAAA,CAAG,SAAA,CAAWR,CAAS,EACjC,GAAGI,CAAAA,CAEH,QAAA,CAAA,CAAA4E,CAAAA,CACCzE,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sCAAA,CAAwC,QAAA,CAAA0E,EAAK,CAAA,CAC3D,IAAA,CACJ1E,IAACgF,GAAAA,CAAA,CAAkB,YAAU,YAAA,CAAa,CAAA,CAAA,CAC5C,CAEJ,CAEA,SAASC,EAAAA,CAAmB,CAC1B,SAAA,CAAAxF,CAAAA,CACA,KAAAiF,CAAAA,CAAO,YAAA,CACP,GAAG7E,CACL,EAAqD,CACnD,OACEoC,KAAC,MAAA,CAAA,CACC,aAAA,CAAW,KACX,WAAA,CAAU,qBAAA,CACV,SAAA,CAAWhC,CAAAA,CACT,+EACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CAEJ,QAAA,CAAA,CAAAG,IAACkF,GAAAA,CAAA,EAAS,CAAA,CACVlF,GAAAA,CAAC,QAAK,SAAA,CAAU,SAAA,CAAW,SAAA0E,CAAAA,CAAK,CAAA,CAAA,CAClC,CAEJ,CCzMA,SAASS,GAAW,CAClB,SAAA,CAAA1F,EACA,QAAA,CAAAsC,CAAAA,CACA,GAAGlC,CACL,CAAA,CAA0D,CACxD,OACEoC,KAACmD,UAAAA,CAAoB,IAAA,CAApB,CACC,WAAA,CAAU,aAAA,CACV,UAAWnF,CAAAA,CAAG,UAAA,CAAYR,CAAS,CAAA,CAClC,GAAGI,CAAAA,CAEJ,QAAA,CAAA,CAAAG,IAACoF,UAAAA,CAAoB,QAAA,CAApB,CACC,WAAA,CAAU,sBAAA,CACV,SAAA,CAAU,mGAAA,CAET,SAAArD,CAAAA,CACH,CAAA,CACA/B,GAAAA,CAACqF,CAAAA,CAAA,CAAU,SAAA,CAAU,OAAA,CAAQ,CAAA,CAC7BrF,GAAAA,CAACoF,WAAoB,MAAA,CAApB,EAA2B,GAC9B,CAEJ,CAEA,SAASC,CAAAA,CAAU,CACjB,SAAA,CAAA5F,CAAAA,CACA,YAAAU,CAAAA,CAAc,UAAA,CACd,GAAGN,CACL,CAAA,CAAyE,CACvE,OACEG,GAAAA,CAACoF,UAAAA,CAAoB,mBAAA,CAApB,CACC,WAAA,CAAU,uBAAA,CACV,mBAAkBjF,CAAAA,CAClB,WAAA,CAAaA,EACb,SAAA,CAAWF,CAAAA,CACT,oQAAA,CACAR,CACF,EACC,GAAGI,CAAAA,CAEJ,QAAA,CAAAG,GAAAA,CAACoF,WAAoB,eAAA,CAApB,CACC,WAAA,CAAU,mBAAA,CACV,UAAU,8BAAA,CACZ,CAAA,CACF,CAEJ,CCrCA,SAASE,EAAAA,CAAO,CACd,GAAGzF,CACL,EAAsD,CACpD,OAAOG,IAACuF,MAAAA,CAAgB,IAAA,CAAhB,CAAqB,WAAA,CAAU,QAAA,CAAU,GAAG1F,CAAAA,CAAO,CAC7D,CAEA,SAAS2F,EAAAA,CAAY,CACnB,UAAA/F,CAAAA,CACA,GAAGI,CACL,CAAA,CAAuD,CACrD,OACEG,GAAAA,CAACuF,OAAgB,KAAA,CAAhB,CACC,YAAU,cAAA,CACV,SAAA,CAAWtF,CAAAA,CAAG,iBAAA,CAAmBR,CAAS,CAAA,CACzC,GAAGI,EACN,CAEJ,CAEA,SAAS4F,EAAAA,CAAY,CACnB,GAAG5F,CACL,EAAuD,CACrD,OAAOG,IAACuF,MAAAA,CAAgB,KAAA,CAAhB,CAAsB,WAAA,CAAU,cAAA,CAAgB,GAAG1F,CAAAA,CAAO,CACpE,CAEA,SAAS6F,EAAAA,CAAc,CACrB,UAAAjG,GAAAA,CACA,IAAA,CAAAE,CAAAA,CAAO,SAAA,CACP,SAAAoC,CAAAA,CACA,GAAGlC,GACL,CAAA,CAEG,CACD,OACEoC,IAAAA,CAACsD,MAAAA,CAAgB,OAAA,CAAhB,CACC,YAAU,gBAAA,CACV,WAAA,CAAW5F,EACX,SAAA,CAAWM,CAAAA,CACT,wjBACAR,GACF,CAAA,CACC,GAAGI,GAAAA,CAEH,UAAAkC,CAAAA,CACD/B,GAAAA,CAACuF,OAAgB,IAAA,CAAhB,CAAqB,QAAO,IAAA,CAC3B,QAAA,CAAAvF,GAAAA,CAAC2F,CAAAA,CAAA,CAAa,SAAA,CAAU,4BAAA,CAA6B,CAAA,CACvD,CAAA,CAAA,CACF,CAEJ,CAEA,SAASC,EAAAA,CAAc,CACrB,UAAAnG,CAAAA,CACA,QAAA,CAAAsC,EACA,QAAA,CAAA8D,CAAAA,CAAW,eACX,KAAA,CAAApE,GAAAA,CAAQ,QAAA,CACR,GAAG5B,CACL,CAAA,CAAyD,CACvD,OACEG,GAAAA,CAACuF,MAAAA,CAAgB,OAAhB,CACC,QAAA,CAAAtD,IAAAA,CAACsD,MAAAA,CAAgB,QAAhB,CACC,WAAA,CAAU,iBACV,oBAAA,CAAoBM,CAAAA,GAAa,eACjC,SAAA,CAAW5F,CAAAA,CACT,ynBAAA,CACA4F,CAAAA,GAAa,UACX,iIAAA,CACFpG,CACF,CAAA,CACA,QAAA,CAAUoG,EACV,KAAA,CAAOpE,GAAAA,CACN,GAAG5B,CAAAA,CAEJ,UAAAG,GAAAA,CAAC8F,CAAAA,CAAA,EAAqB,CAAA,CACtB9F,GAAAA,CAACuF,OAAgB,QAAA,CAAhB,CACC,eAAA,CAAeM,CAAAA,CACf,UAAW5F,CAAAA,CACT,oJAAA,CACA4F,CAAAA,GAAa,QAAA,EAAY,EAC3B,CAAA,CAEC,QAAA,CAAA9D,CAAAA,CACH,CAAA,CACA/B,IAAC+F,CAAAA,CAAA,EAAuB,GAC1B,CAAA,CACF,CAEJ,CAEA,SAASC,EAAAA,CAAY,CACnB,SAAA,CAAAvG,EACA,GAAGI,CACL,CAAA,CAAuD,CACrD,OACEG,GAAAA,CAACuF,MAAAA,CAAgB,KAAA,CAAhB,CACC,YAAU,cAAA,CACV,SAAA,CAAWtF,EAAG,gCAAA,CAAkCR,CAAS,EACxD,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASoG,EAAAA,CAAW,CAClB,UAAAxG,CAAAA,CACA,QAAA,CAAAsC,EACA,GAAGlC,CACL,CAAA,CAAsD,CACpD,OACEoC,IAAAA,CAACsD,MAAAA,CAAgB,KAAhB,CACC,WAAA,CAAU,cACV,SAAA,CAAWtF,CAAAA,CACT,2VAAA,CACAR,CACF,EACC,GAAGI,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,QAAK,SAAA,CAAU,8EAAA,CACd,QAAA,CAAAA,GAAAA,CAACuF,OAAgB,aAAA,CAAhB,CACC,SAAAvF,GAAAA,CAACmB,CAAAA,CAAA,CAAU,SAAA,CAAU,qBAAA,CAAsB,CAAA,CAC7C,CAAA,CACF,EACAnB,GAAAA,CAACuF,MAAAA,CAAgB,SAAhB,CAA0B,QAAA,CAAAxD,EAAS,CAAA,CAAA,CACtC,CAEJ,CAEA,SAASmE,GAAgB,CACvB,SAAA,CAAAzG,EACA,GAAGI,CACL,EAA2D,CACzD,OACEG,GAAAA,CAACuF,MAAAA,CAAgB,UAAhB,CACC,WAAA,CAAU,kBAAA,CACV,SAAA,CAAWtF,EAAG,qCAAA,CAAuCR,CAAS,CAAA,CAC7D,GAAGI,EACN,CAEJ,CAEA,SAASiG,CAAAA,CAAqB,CAC5B,UAAArG,CAAAA,CACA,GAAGI,CACL,CAAA,CAAgE,CAC9D,OACEG,GAAAA,CAACuF,OAAgB,cAAA,CAAhB,CACC,YAAU,yBAAA,CACV,SAAA,CAAWtF,CAAAA,CACT,gGAAA,CACAR,CACF,CAAA,CACC,GAAGI,EAEJ,QAAA,CAAAG,GAAAA,CAACmG,EAAA,EAAc,CAAA,CACjB,CAEJ,CAEA,SAASJ,CAAAA,CAAuB,CAC9B,SAAA,CAAAtG,CAAAA,CACA,GAAGI,CACL,CAAA,CAAkE,CAChE,OACEG,IAACuF,MAAAA,CAAgB,gBAAA,CAAhB,CACC,WAAA,CAAU,2BAAA,CACV,UAAWtF,CAAAA,CACT,gGAAA,CACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CAEJ,QAAA,CAAAG,GAAAA,CAACoG,CAAAA,CAAA,EAAgB,CAAA,CACnB,CAEJ,CCxLA,SAASC,GAAS,CAAE,SAAA,CAAA5G,EAAW,GAAGI,CAAM,CAAA,CAAgC,CACtE,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,WAAA,CAAU,UAAA,CACV,UAAWC,CAAAA,CAAG,0BAAA,CAA4BR,CAAS,CAAA,CAClD,GAAGI,CAAAA,CACN,CAEJ,CCNA,SAASyG,EAAAA,CAAM,CAAE,SAAA,CAAA7G,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAkC,CACrE,OACEG,GAAAA,CAAC,OAAA,CAAA,CACC,WAAA,CAAU,QACV,SAAA,CAAWC,CAAAA,CAAG,gDAAiDR,CAAS,CAAA,CACvE,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAAS0G,GAAY,CAAE,SAAA,CAAA9G,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAkC,CAC3E,OACEG,GAAAA,CAAC,SACC,WAAA,CAAU,cAAA,CACV,UAAWC,CAAAA,CAAG,iBAAA,CAAmBR,CAAS,CAAA,CACzC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAAS2G,EAAAA,CAAU,CAAE,SAAA,CAAA/G,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAkC,CACzE,OACEG,IAAC,OAAA,CAAA,CACC,WAAA,CAAU,aACV,SAAA,CAAWC,CAAAA,CAAG,6BAA8BR,CAAS,CAAA,CACpD,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAAS4G,EAAAA,CAAY,CAAE,UAAAhH,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAAkC,CAC3E,OACEG,GAAAA,CAAC,SACC,WAAA,CAAU,cAAA,CACV,UAAWC,CAAAA,CACT,6CAAA,CACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAAS6G,EAAAA,CAAS,CAAE,SAAA,CAAAjH,CAAAA,CAAW,GAAGI,CAAM,EAA+B,CACrE,OACEG,IAAC,IAAA,CAAA,CACC,WAAA,CAAU,YACV,SAAA,CAAWC,CAAAA,CACT,4BAAA,CACAR,CACF,EACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAAS8G,EAAAA,CAAU,CAAE,SAAA,CAAAlH,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAA+B,CACtE,OACEG,GAAAA,CAAC,MACC,WAAA,CAAU,YAAA,CACV,SAAA,CAAWC,CAAAA,CACT,+FACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAAS+G,EAAAA,CAAU,CAAE,UAAAnH,CAAAA,CAAW,GAAGI,CAAM,CAAA,CAA+B,CACtE,OACEG,GAAAA,CAAC,IAAA,CAAA,CACC,WAAA,CAAU,YAAA,CACV,UAAWC,CAAAA,CACT,kEAAA,CACAR,CACF,CAAA,CACC,GAAGI,CAAAA,CACN,CAEJ,CAEA,SAASgH,GAAa,CACpB,SAAA,CAAApH,EACA,GAAGI,CACL,EAAoC,CAClC,OACEG,GAAAA,CAAC,SAAA,CAAA,CACC,YAAU,eAAA,CACV,SAAA,CAAWC,EAAG,yBAAA,CAA2BR,CAAS,EACjD,GAAGI,CAAAA,CACN,CAEJ,CC1FA,SAASiH,EAAAA,CAAgB,CACvB,aAAA,CAAAC,CAAAA,CAAgB,EAChB,GAAGlH,CACL,CAAA,CAA2D,CACzD,OACEG,GAAAA,CAACgH,OAAAA,CAAiB,SAAjB,CACC,WAAA,CAAU,mBACV,aAAA,CAAeD,CAAAA,CACd,GAAGlH,CAAAA,CACN,CAEJ,CAEA,SAASoH,GAAQ,CACf,GAAGpH,CACL,CAAA,CAAuD,CACrD,OAAOG,GAAAA,CAACgH,QAAiB,IAAA,CAAjB,CAAsB,YAAU,SAAA,CAAW,GAAGnH,EAAO,CAC/D,CAEA,SAASqH,EAAAA,CAAe,CACtB,GAAGrH,CACL,CAAA,CAA0D,CACxD,OAAOG,GAAAA,CAACgH,OAAAA,CAAiB,OAAA,CAAjB,CAAyB,YAAU,iBAAA,CAAmB,GAAGnH,EAAO,CAC1E,CAEA,SAASsH,EAAAA,CAAe,CACtB,SAAA,CAAA1H,CAAAA,CACA,WAAAiC,CAAAA,CAAa,CAAA,CACb,SAAAK,CAAAA,CACA,GAAGlC,GACL,CAAA,CAA0D,CACxD,OACEG,GAAAA,CAACgH,QAAiB,MAAA,CAAjB,CACC,SAAA/E,IAAAA,CAAC+E,OAAAA,CAAiB,QAAjB,CACC,WAAA,CAAU,iBAAA,CACV,UAAA,CAAYtF,EACZ,SAAA,CAAWzB,CAAAA,CACT,qqBAAA,CACAR,CACF,EACC,GAAGI,GAAAA,CAEH,QAAA,CAAA,CAAAkC,CAAAA,CACD/B,IAACgH,OAAAA,CAAiB,KAAA,CAAjB,CAAuB,SAAA,CAAU,sEAAA,CAAuE,GAC3G,CAAA,CACF,CAEJ,CCsCO,IAAMI,GAAiC,CAC5C,MAAA,CAAA5H,EACA,WAAA,CAAAe,CAAAA,CACA,qBAAAE,CAAAA,CACA,eAAA,CAAAD,CAAAA,CACA,IAAA,CAAAE,GACA,UAAA,CAAAI,EAAAA,CACA,YAAAC,EAAAA,CACA,eAAA,CAAAF,GACA,UAAA,CAAAG,EAAAA,CACA,UAAA,CAAAL,EAAAA,CACA,UAAAC,EAAAA,CACA,QAAA,CAAAK,EAAAA,CACA,YAAA,CAAAG,GACA,wBAAA,CAAAU,EAAAA,CACA,mBAAA,CAAAN,EAAAA,CACA,kBAAAG,EAAAA,CACA,gBAAA,CAAAC,GACA,iBAAA,CAAAQ,EAAAA,CACA,mBAAAd,EAAAA,CACA,sBAAA,CAAAY,EAAAA,CACA,qBAAA,CAAAC,GACA,qBAAA,CAAAE,EAAAA,CACA,qBAAAC,EAAAA,CACA,eAAA,CAAAC,GACA,sBAAA,CAAAG,EAAAA,CACA,sBAAA,CAAAF,EAAAA,CACA,oBAAAjB,EAAAA,CACA,KAAA,CAAAoB,GACA,YAAA,CAAAM,EAAAA,CACA,iBAAAD,EAAAA,CACA,WAAA,CAAAJ,EAAAA,CACA,UAAA,CAAAE,GACA,UAAA,CAAAC,EAAAA,CACA,KAAA,CAAAU,CAAAA,CACA,WAAAN,CAAAA,CACA,eAAA,CAAAI,CAAAA,CACA,eAAA,CAAAH,EACA,cAAA,CAAAI,EAAAA,CACA,WAAAU,EAAAA,CACA,iBAAA,CAAAC,GACA,kBAAA,CAAAc,EAAAA,CACA,eAAA,CAAAL,EAAAA,CACA,eAAAR,EAAAA,CACA,cAAA,CAAAW,GACA,cAAA,CAAAV,CAAAA,CACA,eAAAS,EAAAA,CACA,kBAAA,CAAAN,EAAAA,CACA,UAAA,CAAAW,GACA,SAAA,CAAAE,CAAAA,CACA,OAAAC,EAAAA,CACA,aAAA,CAAAM,GACA,WAAA,CAAAJ,EAAAA,CACA,UAAA,CAAAS,EAAAA,CACA,YAAAD,EAAAA,CACA,sBAAA,CAAAD,CAAAA,CACA,oBAAA,CAAAD,EACA,eAAA,CAAAI,EAAAA,CACA,aAAA,CAAAR,EAAAA,CACA,YAAAD,EAAAA,CACA,SAAA,CAAAvF,EACA,QAAA,CAAAmG,EAAAA,CACA,MAAAC,EAAAA,CACA,SAAA,CAAAE,EAAAA,CACA,YAAA,CAAAK,GACA,SAAA,CAAAD,EAAAA,CACA,YAAAH,EAAAA,CACA,SAAA,CAAAE,GACA,WAAA,CAAAJ,EAAAA,CACA,QAAA,CAAAG,EAAAA,CACA,QAAAO,EAAAA,CACA,cAAA,CAAAE,GACA,eAAA,CAAAL,EAAAA,CACA,eAAAI,EACF","file":"chunk-7FUCHMMB.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:outline-none active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"\",\n outline: \"\",\n secondary: \"\",\n ghost: \"\",\n destructive: \"\",\n link: \"underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3\",\n icon: \"size-8\",\n \"icon-xs\":\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n \n );\n}\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { Separator as SeparatorPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nexport { Separator };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Separator } from \"./separator\";\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\n {\n variants: {\n orientation: {\n horizontal:\n \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!\",\n vertical:\n \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n },\n);\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps) {\n return (\n \n );\n}\n\nfunction ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : \"div\";\n\n return (\n \n );\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n","import * as React from \"react\";\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\nimport { IconCheck } from \"../../core/icons\";\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n svg]:size-3.5\"\n >\n \n \n \n );\n}\n\nexport { Checkbox };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\nimport { IconCheck, IconChevronRight } from \"../../core/icons\";\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n );\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n \n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n}) {\n return (\n \n \n \n \n \n \n {children}\n \n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n}) {\n return (\n \n \n \n \n \n \n {children}\n \n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n}) {\n return (\n \n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n );\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps & {\n inset?: boolean;\n}) {\n return (\n \n {children}\n \n \n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nconst emptyMediaVariants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"flex size-8 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps) {\n return (\n \n );\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n a]:underline [&>a]:underline-offset-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n};\n","export const inputClassName =\n \"h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:opacity-70 focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 @min-[768px]/data-table:text-sm\";\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { inputClassName } from \"./input-base\";\n\ntype InputGroupAddonAlign =\n | \"inline-start\"\n | \"inline-end\"\n | \"block-start\"\n | \"block-end\";\n\nfunction InputGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n [data-slot=input-group-addon][data-align=block-start]]:flex-col has-[>[data-slot=input-group-addon][data-align=block-end]]:flex-col has-[>[data-slot=input-group-control]:disabled]:cursor-not-allowed has-[>[data-slot=input-group-control]:disabled]:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nconst InputGroupInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<\"input\">\n>(function InputGroupInput({ className, ...props }, ref) {\n return (\n \n );\n});\n\ntype InputGroupAddonProps = React.ComponentProps<\"div\"> & {\n align?: InputGroupAddonAlign;\n};\n\nfunction InputGroupAddon({\n align = \"inline-start\",\n className,\n ...props\n}: InputGroupAddonProps) {\n return (\n \n );\n}\n\nfunction InputGroupText({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n );\n}\n\nInputGroupInput.displayName = \"InputGroupInput\";\n\nexport { InputGroup, InputGroupAddon, InputGroupInput, InputGroupText };\n","import * as React from \"react\";\nimport { IconEye, IconEyeOff } from \"../../core/icons\";\n\nimport { Button } from \"./button\";\nimport { inputClassName } from \"./input-base\";\nimport { InputGroup, InputGroupAddon, InputGroupInput } from \"./input-group\";\nimport { cn } from \"../../lib/utils\";\n\ntype InputProps = React.ComponentProps<\"input\"> & {\n passwordToggle?: boolean;\n};\n\nconst Input = React.forwardRef(function Input(\n { className, passwordToggle = false, type, ...props },\n ref,\n) {\n const [showPassword, setShowPassword] = React.useState(false);\n const canTogglePassword = passwordToggle && type === \"password\";\n\n if (!canTogglePassword) {\n return (\n \n );\n }\n\n return (\n \n \n \n event.preventDefault()}\n onClick={() => setShowPassword((current) => !current)}\n >\n {showPassword ? (\n \n ) : (\n \n )}\n \n \n \n );\n});\n\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport {\n IconChevronsLeft,\n IconChevronsRight,\n IconChevronLeft,\n IconChevronRight,\n IconDots,\n} from \"../../core/icons\";\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n );\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n \n );\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return
  • ;\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n disabled?: boolean;\n variant?: React.ComponentProps[\"variant\"];\n} & Pick, \"size\"> &\n React.ComponentProps<\"a\">;\n\nfunction PaginationLink({\n className,\n isActive,\n disabled = false,\n variant,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n \n \n \n );\n}\n\nfunction PaginationPrevious({\n className,\n disabled,\n showText = true,\n size = \"default\",\n text = \"Previous\",\n ...props\n}: React.ComponentProps & {\n showText?: boolean;\n text?: string;\n}) {\n return (\n \n \n {showText ? (\n {text}\n ) : null}\n \n );\n}\n\nfunction PaginationFirst({\n className,\n disabled,\n showText = true,\n size = \"default\",\n text = \"First\",\n ...props\n}: React.ComponentProps & {\n showText?: boolean;\n text?: string;\n}) {\n return (\n \n \n {showText ? (\n {text}\n ) : null}\n \n );\n}\n\nfunction PaginationNext({\n className,\n disabled,\n showText = true,\n size = \"default\",\n text = \"Next\",\n ...props\n}: React.ComponentProps & {\n showText?: boolean;\n text?: string;\n}) {\n return (\n \n {showText ? (\n {text}\n ) : null}\n \n \n );\n}\n\nfunction PaginationLast({\n className,\n disabled,\n showText = true,\n size = \"default\",\n text = \"Last\",\n ...props\n}: React.ComponentProps & {\n showText?: boolean;\n text?: string;\n}) {\n return (\n \n {showText ? (\n {text}\n ) : null}\n \n \n );\n}\n\nfunction PaginationEllipsis({\n className,\n text = \"More pages\",\n ...props\n}: React.ComponentProps<\"span\"> & { text?: string }) {\n return (\n \n \n {text}\n \n );\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n};\n","import * as React from \"react\";\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n {children}\n \n \n \n \n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n );\n}\n\nexport { ScrollArea, ScrollBar };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Select as SelectPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n IconSelector,\n IconCheck,\n IconChevronUp,\n IconChevronDown,\n} from \"../../core/icons\";\n\nfunction Select({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction SelectGroup({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n \n {children}\n \n \n \n \n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n {children}\n \n \n \n \n );\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { cn } from \"../../lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\nexport { Skeleton };\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n \n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n \n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n \n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n \n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n \n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n \n );\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n \n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n {children}\n \n \n \n );\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","import type { DataTableUiKit } from \"./ui-kit\";\nimport { Button } from \"../components/ui/button\";\nimport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n} from \"../components/ui/button-group\";\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"../components/ui/card\";\nimport { Checkbox } from \"../components/ui/checkbox\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"../components/ui/dropdown-menu\";\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"../components/ui/empty\";\nimport { Input } from \"../components/ui/input\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupText,\n} from \"../components/ui/input-group\";\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"../components/ui/pagination\";\nimport { ScrollArea, ScrollBar } from \"../components/ui/scroll-area\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"../components/ui/select\";\nimport { Separator } from \"../components/ui/separator\";\nimport { Skeleton } from \"../components/ui/skeleton\";\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../components/ui/table\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip\";\n\nexport const primitiveUiKit: DataTableUiKit = {\n Button,\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Checkbox,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n Input,\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupText,\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n ScrollArea,\n ScrollBar,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n Separator,\n Skeleton,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n};\n\nexport {\n Button,\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Checkbox,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n Input,\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupText,\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n ScrollArea,\n ScrollBar,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n Separator,\n Skeleton,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n};\n"]} \ No newline at end of file diff --git a/dist/chunk-7NEQYX7P.js.map b/dist/chunk-7NEQYX7P.js.map deleted file mode 100644 index 772391b..0000000 --- a/dist/chunk-7NEQYX7P.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/adapters/shadcn/index.tsx"],"names":["withClassName","Component","defaultClassName","className","props","jsx","cn","ShadcnButton","Button","ShadcnCard","Card","ShadcnCardDescription","CardDescription","ShadcnCardFooter","CardFooter","ShadcnCheckbox","Checkbox","ShadcnDropdownMenuContent","DropdownMenuContent","ShadcnDropdownMenuItem","DropdownMenuItem","ShadcnDropdownMenuCheckboxItem","DropdownMenuCheckboxItem","ShadcnDropdownMenuRadioItem","DropdownMenuRadioItem","ShadcnDropdownMenuLabel","DropdownMenuLabel","ShadcnDropdownMenuSeparator","DropdownMenuSeparator","ShadcnDropdownMenuSubContent","DropdownMenuSubContent","ShadcnDropdownMenuSubTrigger","DropdownMenuSubTrigger","ShadcnEmpty","Empty","ShadcnEmptyDescription","EmptyDescription","ShadcnEmptyMedia","EmptyMedia","ShadcnInput","Input","ShadcnInputGroup","InputGroup","ShadcnInputGroupAddon","InputGroupAddon","ShadcnInputGroupInput","InputGroupInput","ShadcnScrollBar","ScrollBar","ShadcnSelectTrigger","SelectTrigger","ShadcnSelectContent","SelectContent","ShadcnSelectItem","SelectItem","ShadcnSelectLabel","SelectLabel","ShadcnSelectSeparator","SelectSeparator","ShadcnSeparator","Separator","ShadcnSkeleton","Skeleton","ShadcnTableFooter","TableFooter","ShadcnTableHead","TableHead","ShadcnTooltipContent","TooltipContent","shadcnUiKit","primitiveUiKit"],"mappings":"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","file":"chunk-7NEQYX7P.js","sourcesContent":["import * as React from \"react\";\nimport type { DataTableUiKit } from \"../../core/ui-kit\";\nimport {\n Button as PrimitiveButton,\n Card as PrimitiveCard,\n CardDescription as PrimitiveCardDescription,\n CardFooter as PrimitiveCardFooter,\n Checkbox as PrimitiveCheckbox,\n DropdownMenuCheckboxItem as PrimitiveDropdownMenuCheckboxItem,\n DropdownMenuContent as PrimitiveDropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n DropdownMenuLabel as PrimitiveDropdownMenuLabel,\n DropdownMenuRadioItem as PrimitiveDropdownMenuRadioItem,\n DropdownMenuSeparator as PrimitiveDropdownMenuSeparator,\n DropdownMenuSubContent as PrimitiveDropdownMenuSubContent,\n DropdownMenuSubTrigger as PrimitiveDropdownMenuSubTrigger,\n Empty as PrimitiveEmpty,\n EmptyDescription as PrimitiveEmptyDescription,\n EmptyMedia as PrimitiveEmptyMedia,\n Input as PrimitiveInput,\n InputGroup as PrimitiveInputGroup,\n InputGroupAddon as PrimitiveInputGroupAddon,\n InputGroupInput as PrimitiveInputGroupInput,\n ScrollBar as PrimitiveScrollBar,\n SelectContent as PrimitiveSelectContent,\n SelectItem as PrimitiveSelectItem,\n SelectLabel as PrimitiveSelectLabel,\n SelectSeparator as PrimitiveSelectSeparator,\n SelectTrigger as PrimitiveSelectTrigger,\n Separator as PrimitiveSeparator,\n Skeleton as PrimitiveSkeleton,\n TableFooter as PrimitiveTableFooter,\n TableHead as PrimitiveTableHead,\n TooltipContent as PrimitiveTooltipContent,\n primitiveUiKit,\n} from \"../../core/primitive-ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nfunction withClassName(\n Component: React.ComponentType,\n defaultClassName: string,\n) {\n return function Wrapped({ className, ...props }: TProps) {\n return (\n \n );\n };\n}\n\nconst ShadcnButton = withClassName(\n PrimitiveButton,\n \"rounded-md text-foreground data-[variant=default]:border-primary data-[variant=default]:bg-primary data-[variant=default]:text-primary-foreground data-[variant=outline]:border-input data-[variant=outline]:bg-card data-[variant=outline]:hover:bg-accent data-[variant=outline]:hover:text-accent-foreground data-[variant=secondary]:border-secondary data-[variant=secondary]:bg-secondary data-[variant=secondary]:text-secondary-foreground data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:hover:bg-accent data-[variant=ghost]:hover:text-accent-foreground data-[variant=destructive]:border-destructive data-[variant=destructive]:bg-destructive data-[variant=destructive]:text-destructive-foreground data-[variant=link]:border-transparent data-[variant=link]:bg-transparent\",\n);\nconst ShadcnCard = withClassName(\n PrimitiveCard,\n \"rounded-xl border-border bg-card text-card-foreground shadow-sm ring-0\",\n);\nconst ShadcnCardDescription = withClassName(\n PrimitiveCardDescription,\n \"text-muted-foreground\",\n);\nconst ShadcnCardFooter = withClassName(\n PrimitiveCardFooter,\n \"border-t border-border/60 bg-muted/50\",\n);\nconst ShadcnCheckbox = withClassName(\n PrimitiveCheckbox,\n \"border-input bg-card ring-ring/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-checked:ring-primary\",\n);\nconst ShadcnDropdownMenuContent = withClassName(\n PrimitiveDropdownMenuContent,\n \"border-border bg-popover text-popover-foreground shadow-md\",\n);\nconst ShadcnDropdownMenuItem = withClassName(\n PrimitiveDropdownMenuItem,\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10\",\n);\nconst ShadcnDropdownMenuCheckboxItem = withClassName(\n PrimitiveDropdownMenuCheckboxItem,\n \"focus:bg-accent focus:text-accent-foreground\",\n);\nconst ShadcnDropdownMenuRadioItem = withClassName(\n PrimitiveDropdownMenuRadioItem,\n \"focus:bg-accent focus:text-accent-foreground\",\n);\nconst ShadcnDropdownMenuLabel = withClassName(\n PrimitiveDropdownMenuLabel,\n \"text-muted-foreground\",\n);\nconst ShadcnDropdownMenuSeparator = withClassName(\n PrimitiveDropdownMenuSeparator,\n \"bg-border\",\n);\nconst ShadcnDropdownMenuSubContent = withClassName(\n PrimitiveDropdownMenuSubContent,\n \"border-border bg-popover text-popover-foreground shadow-md\",\n);\nconst ShadcnDropdownMenuSubTrigger = withClassName(\n PrimitiveDropdownMenuSubTrigger,\n \"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground\",\n);\nconst ShadcnEmpty = withClassName(\n PrimitiveEmpty,\n \"rounded-2xl border-border/60 bg-background/70\",\n);\nconst ShadcnEmptyDescription = withClassName(\n PrimitiveEmptyDescription,\n \"text-muted-foreground\",\n);\nconst ShadcnEmptyMedia = withClassName(\n PrimitiveEmptyMedia,\n \"[&[data-variant=icon]]:bg-muted [&[data-variant=icon]]:text-foreground\",\n);\nconst ShadcnInput = withClassName(\n PrimitiveInput,\n \"rounded-md border-input bg-card text-foreground placeholder:text-muted-foreground\",\n);\nconst ShadcnInputGroup = withClassName(\n PrimitiveInputGroup,\n \"rounded-md border-input bg-card text-foreground\",\n);\nconst ShadcnInputGroupAddon = withClassName(\n PrimitiveInputGroupAddon,\n \"text-muted-foreground\",\n);\nconst ShadcnInputGroupInput = withClassName(\n PrimitiveInputGroupInput,\n \"bg-transparent\",\n);\nconst ShadcnScrollBar = withClassName(\n PrimitiveScrollBar,\n \"[&>[data-slot=scroll-area-thumb]]:bg-border\",\n);\nconst ShadcnSelectTrigger = withClassName(\n PrimitiveSelectTrigger,\n \"rounded-md border-input bg-card text-foreground\",\n);\nconst ShadcnSelectContent = withClassName(\n PrimitiveSelectContent,\n \"border-border bg-popover text-popover-foreground shadow-md\",\n);\nconst ShadcnSelectItem = withClassName(\n PrimitiveSelectItem,\n \"focus:bg-accent focus:text-accent-foreground\",\n);\nconst ShadcnSelectLabel = withClassName(\n PrimitiveSelectLabel,\n \"text-muted-foreground\",\n);\nconst ShadcnSelectSeparator = withClassName(\n PrimitiveSelectSeparator,\n \"bg-border\",\n);\nconst ShadcnSeparator = withClassName(PrimitiveSeparator, \"bg-border\");\nconst ShadcnSkeleton = withClassName(PrimitiveSkeleton, \"bg-muted\");\nconst ShadcnTableFooter = withClassName(\n PrimitiveTableFooter,\n \"border-border bg-muted/50\",\n);\nconst ShadcnTableHead = withClassName(\n PrimitiveTableHead,\n \"text-foreground\",\n);\nconst ShadcnTooltipContent = withClassName(\n PrimitiveTooltipContent,\n \"bg-foreground text-background ring-1 ring-foreground/10 [&>svg]:bg-foreground [&>svg]:fill-foreground\",\n);\n\nexport const shadcnUiKit: DataTableUiKit = {\n ...primitiveUiKit,\n rootClassName: \"dtp-shadcn\",\n classNames: {\n card: \"hover:bg-muted/50 data-[state=selected]:bg-primary/10\",\n cardGrid: \"bg-transparent\",\n cardItem: \"min-w-0\",\n cardOverlay: \"from-background/95 via-background/85 to-transparent\",\n cardScrollArea: \"bg-transparent\",\n cardSelected: \"bg-primary/10 ring-primary\",\n cardUnselected: \"border-border\",\n cardViewport: \"bg-transparent\",\n cellBorder: \"border-border/40\",\n dragActive: \"rounded-md border-dashed border-primary\",\n emptyState: \"border-border/60 bg-background/70\",\n footer: \"border-border bg-card\",\n headerSortIcon: \"text-muted-foreground\",\n mutedText: \"text-muted-foreground\",\n paginationSelectTrigger: \"border-input bg-card\",\n paginationTotal: \"text-muted-foreground\",\n pinnedColumn: \"border-border\",\n pinnedUtilityColumn: \"bg-card\",\n resizeHandle: \"after:bg-border hover:after:bg-primary\",\n resizeHandleActive: \"after:bg-primary\",\n row: \"hover:bg-muted/50 data-[state=selected]:!bg-primary/10\",\n rowSelected: \"!bg-primary/10\",\n tableContainer: \"border-border bg-card text-card-foreground\",\n tableStickyHeader:\n \"sticky top-0 z-30 bg-card/95 backdrop-blur [&_th]:border-border [&_th]:bg-card/95\",\n toolbarCompactIconButton: \"size-7\",\n toolbarIconButton: \"text-muted-foreground hover:text-foreground\",\n toolbarInputButton: \"border-input bg-card\",\n },\n Button: ShadcnButton,\n Card: ShadcnCard,\n CardDescription: ShadcnCardDescription,\n CardFooter: ShadcnCardFooter,\n Checkbox: ShadcnCheckbox,\n DropdownMenuCheckboxItem: ShadcnDropdownMenuCheckboxItem,\n DropdownMenuContent: ShadcnDropdownMenuContent,\n DropdownMenuItem: ShadcnDropdownMenuItem,\n DropdownMenuLabel: ShadcnDropdownMenuLabel,\n DropdownMenuRadioItem: ShadcnDropdownMenuRadioItem,\n DropdownMenuSeparator: ShadcnDropdownMenuSeparator,\n DropdownMenuSubContent: ShadcnDropdownMenuSubContent,\n DropdownMenuSubTrigger: ShadcnDropdownMenuSubTrigger,\n Empty: ShadcnEmpty,\n EmptyDescription: ShadcnEmptyDescription,\n EmptyMedia: ShadcnEmptyMedia,\n Input: ShadcnInput,\n InputGroup: ShadcnInputGroup,\n InputGroupAddon: ShadcnInputGroupAddon,\n InputGroupInput: ShadcnInputGroupInput,\n ScrollBar: ShadcnScrollBar,\n SelectContent: ShadcnSelectContent,\n SelectItem: ShadcnSelectItem,\n SelectLabel: ShadcnSelectLabel,\n SelectSeparator: ShadcnSelectSeparator,\n SelectTrigger: ShadcnSelectTrigger,\n Separator: ShadcnSeparator,\n Skeleton: ShadcnSkeleton,\n TableFooter: ShadcnTableFooter,\n TableHead: ShadcnTableHead,\n TooltipContent: ShadcnTooltipContent,\n};\n"]} \ No newline at end of file diff --git a/dist/chunk-ACKI7LST.js b/dist/chunk-ACKI7LST.js deleted file mode 100644 index 099c6d7..0000000 --- a/dist/chunk-ACKI7LST.js +++ /dev/null @@ -1,2 +0,0 @@ -import {b as b$1}from'./chunk-ZF4EP4WP.js';import*as u from'react';var b=Object.values(b$1).slice().sort((e,t)=>e-t);function T(e){let t=u.useRef(0),[o,s]=u.useState(0);return u.useEffect(()=>{let c=e.current;if(!c)return;let n=null,i=()=>{let l=R(c.clientWidth);l!==t.current&&(t.current=l,s(l));};if(i(),typeof ResizeObserver>"u")return;let r=new ResizeObserver(()=>{n!==null&&window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{n=null,i();});});return r.observe(c),()=>{n!==null&&window.cancelAnimationFrame(n),r.disconnect();}},[e]),o}function R(e){if(e<=0)return 0;let t=1;for(let o of b){if(e{let i=e.current?.querySelector("[data-slot='scroll-area-viewport']")??null;if(s(i),!i){n(0);return}let r=null,l=()=>{n(m=>{let d=i.clientHeight;return m===d?m:d});};if(l(),typeof ResizeObserver>"u")return;let f=new ResizeObserver(()=>{r!==null&&window.cancelAnimationFrame(r),r=window.requestAnimationFrame(()=>{r=null,l();});});return f.observe(i),()=>{r!==null&&window.cancelAnimationFrame(r),f.disconnect();}},[e,t]),{viewportElement:o,viewportHeight:c}}export{T as a,v as b};//# sourceMappingURL=chunk-ACKI7LST.js.map -//# sourceMappingURL=chunk-ACKI7LST.js.map \ No newline at end of file diff --git a/dist/chunk-ACKI7LST.js.map b/dist/chunk-ACKI7LST.js.map deleted file mode 100644 index 14be162..0000000 --- a/dist/chunk-ACKI7LST.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/core/data-table/use-data-table-container-width.ts","../src/core/data-table/use-data-table-scroll-viewport.ts"],"names":["BREAKPOINT_WIDTHS","DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS","first","second","useDataTableContainerWidth","containerRef","widthRef","width","setWidth","element","frameId","updateWidth","nextWidth","quantizeContainerWidth","observer","bucket","breakpointWidth","useDataTableScrollViewport","refreshKey","viewportElement","setViewportElement","a","viewportHeight","setViewportHeight","updateHeight","currentHeight","nextHeight"],"mappings":"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","file":"chunk-ACKI7LST.js","sourcesContent":["import * as React from \"react\";\nimport { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS } from \"../types\";\n\nconst BREAKPOINT_WIDTHS = Object.values(DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS)\n .slice()\n .sort((first, second) => first - second);\n\nexport function useDataTableContainerWidth(\n containerRef: React.RefObject,\n) {\n const widthRef = React.useRef(0);\n const [width, setWidth] = React.useState(0);\n\n React.useEffect(() => {\n const element = containerRef.current;\n if (!element) {\n return;\n }\n\n let frameId: number | null = null;\n const updateWidth = () => {\n const nextWidth = quantizeContainerWidth(element.clientWidth);\n if (nextWidth === widthRef.current) {\n return;\n }\n\n widthRef.current = nextWidth;\n setWidth(nextWidth);\n };\n\n updateWidth();\n\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver(() => {\n if (frameId !== null) {\n window.cancelAnimationFrame(frameId);\n }\n\n frameId = window.requestAnimationFrame(() => {\n frameId = null;\n updateWidth();\n });\n });\n\n observer.observe(element);\n\n return () => {\n if (frameId !== null) {\n window.cancelAnimationFrame(frameId);\n }\n observer.disconnect();\n };\n }, [containerRef]);\n\n return width;\n}\n\nfunction quantizeContainerWidth(width: number) {\n if (width <= 0) {\n return 0;\n }\n\n let bucket = 1;\n for (const breakpointWidth of BREAKPOINT_WIDTHS) {\n if (width < breakpointWidth) {\n break;\n }\n bucket = breakpointWidth;\n }\n\n return bucket;\n}\n","import * as React from \"react\";\n\nexport function useDataTableScrollViewport(\n containerRef: React.RefObject,\n refreshKey: unknown,\n) {\n const [viewportElement, setViewportElement] =\n React.useState(null);\n const [viewportHeight, setViewportHeight] = React.useState(0);\n\n React.useEffect(() => {\n const element =\n containerRef.current?.querySelector(\n \"[data-slot='scroll-area-viewport']\",\n ) ?? null;\n\n setViewportElement(element);\n if (!element) {\n setViewportHeight(0);\n return;\n }\n\n let frameId: number | null = null;\n const updateHeight = () => {\n setViewportHeight((currentHeight) => {\n const nextHeight = element.clientHeight;\n return currentHeight === nextHeight ? currentHeight : nextHeight;\n });\n };\n\n updateHeight();\n\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver(() => {\n if (frameId !== null) {\n window.cancelAnimationFrame(frameId);\n }\n\n frameId = window.requestAnimationFrame(() => {\n frameId = null;\n updateHeight();\n });\n });\n\n observer.observe(element);\n\n return () => {\n if (frameId !== null) {\n window.cancelAnimationFrame(frameId);\n }\n observer.disconnect();\n };\n }, [containerRef, refreshKey]);\n\n return { viewportElement, viewportHeight };\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-CVR2ZXHQ.js b/dist/chunk-CVR2ZXHQ.js new file mode 100644 index 0000000..c6b7812 --- /dev/null +++ b/dist/chunk-CVR2ZXHQ.js @@ -0,0 +1,2 @@ +import'react';import {jsxs,jsx}from'react/jsx-runtime';function t({children:n,viewBox:c="0 0 24 24",...p}){return jsx("svg",{"aria-hidden":"true",focusable:"false",width:"1em",height:"1em",viewBox:c,fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...p,children:n})}function e(n){return jsxs(t,{...n,children:[jsx("path",{d:"M4 7h4"}),jsx("path",{d:"M14 7h6"}),jsx("path",{d:"M10 5v4"}),jsx("path",{d:"M4 17h10"}),jsx("path",{d:"M18 17h2"}),jsx("path",{d:"M16 15v4"})]})}function a(n){return jsx(t,{...n,children:jsx("path",{d:"M5 12l4 4L19 6"})})}function I(n){return jsx(t,{...n,children:jsx("path",{d:"M6 9l6 6 6-6"})})}function d(n){return jsx(t,{...n,children:jsx("path",{d:"M15 6l-6 6 6 6"})})}function M(n){return jsx(t,{...n,children:jsx("path",{d:"M9 6l6 6-6 6"})})}function u(n){return jsx(t,{...n,children:jsx("path",{d:"M6 15l6-6 6 6"})})}function l(n){return jsxs(t,{...n,children:[jsx("path",{d:"M11 6l-6 6 6 6"}),jsx("path",{d:"M19 6l-6 6 6 6"})]})}function s(n){return jsxs(t,{...n,children:[jsx("path",{d:"M5 6l6 6-6 6"}),jsx("path",{d:"M13 6l6 6-6 6"})]})}function i(n){return jsxs(t,{...n,children:[jsx("circle",{cx:"12",cy:"12",r:"9"}),jsx("path",{d:"M12 7v5l3 2"})]})}function f(n){return jsxs(t,{...n,children:[jsx("ellipse",{cx:"12",cy:"5",rx:"7",ry:"3"}),jsx("path",{d:"M5 5v6c0 1.7 3.1 3 7 3s7-1.3 7-3V5"}),jsx("path",{d:"M5 11v6c0 1.7 3.1 3 7 3s7-1.3 7-3v-6"})]})}function x(n){return jsxs(t,{...n,children:[jsx("path",{d:"M5 12h.01"}),jsx("path",{d:"M12 12h.01"}),jsx("path",{d:"M19 12h.01"})]})}function v(n){return jsxs(t,{...n,children:[jsx("path",{d:"M12 3v12"}),jsx("path",{d:"M7 10l5 5 5-5"}),jsx("path",{d:"M5 21h14"})]})}function P(n){return jsxs(t,{...n,children:[jsx("path",{d:"M4 20h4l11-11-4-4L4 16v4z"}),jsx("path",{d:"M13 7l4 4"})]})}function L(n){return jsxs(t,{...n,children:[jsx("path",{d:"M2 12s4-7 10-7 10 7 10 7-4 7-10 7S2 12 2 12z"}),jsx("circle",{cx:"12",cy:"12",r:"3"})]})}function z(n){return jsxs(t,{...n,children:[jsx("path",{d:"M3 3l18 18"}),jsx("path",{d:"M10.6 10.6a2 2 0 0 0 2.8 2.8"}),jsx("path",{d:"M9.9 5.3A10.5 10.5 0 0 1 12 5c6 0 10 7 10 7a18 18 0 0 1-3.2 4"}),jsx("path",{d:"M6.6 6.6C3.8 8.4 2 12 2 12s4 7 10 7a10.6 10.6 0 0 0 4.1-.8"})]})}function C(n){return jsxs(t,{...n,children:[jsx("path",{d:"M4 13l2-8h12l2 8"}),jsx("path",{d:"M4 13h5l2 3h2l2-3h5v6H4z"})]})}function y(n){return jsxs(t,{...n,children:[jsx("path",{d:"M4 4h6v6H4z"}),jsx("path",{d:"M14 4h6v6h-6z"}),jsx("path",{d:"M4 14h6v6H4z"}),jsx("path",{d:"M14 14h6v6h-6z"})]})}function k(n){return jsxs(t,{...n,children:[jsx("path",{d:"M8 6h13"}),jsx("path",{d:"M8 12h13"}),jsx("path",{d:"M8 18h13"}),jsx("path",{d:"M3 6h.01"}),jsx("path",{d:"M3 12h.01"}),jsx("path",{d:"M3 18h.01"})]})}function S(n){return jsxs(t,{...n,children:[jsx("circle",{cx:"11",cy:"11",r:"7"}),jsx("path",{d:"M16 16l5 5"})]})}function H(n){return jsxs(t,{...n,children:[jsx("path",{d:"M8 9l4-4 4 4"}),jsx("path",{d:"M16 15l-4 4-4-4"})]})}function R(n){return jsxs(t,{...n,children:[jsx("path",{d:"M18 6L6 18"}),jsx("path",{d:"M6 6l12 12"})]})}export{e as a,a as b,I as c,d,M as e,u as f,l as g,s as h,i,f as j,x as k,v as l,P as m,L as n,z as o,C as p,y as q,k as r,S as s,H as t,R as u};//# sourceMappingURL=chunk-CVR2ZXHQ.js.map +//# sourceMappingURL=chunk-CVR2ZXHQ.js.map \ No newline at end of file diff --git a/dist/chunk-CVR2ZXHQ.js.map b/dist/chunk-CVR2ZXHQ.js.map new file mode 100644 index 0000000..8bacd6b --- /dev/null +++ b/dist/chunk-CVR2ZXHQ.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/icons.tsx"],"names":["Icon","children","viewBox","props","jsx","IconAdjustmentsHorizontal","jsxs","IconCheck","IconChevronDown","IconChevronLeft","IconChevronRight","IconChevronUp","IconChevronsLeft","IconChevronsRight","IconClock","IconDatabase","IconDots","IconDownload","IconEdit","IconEye","IconEyeOff","IconInbox","IconLayoutGrid","IconList","IconSearch","IconSelector","IconX"],"mappings":"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","file":"chunk-CVR2ZXHQ.js","sourcesContent":["import * as React from \"react\";\n\ntype IconProps = React.SVGProps;\n\nfunction Icon({\n children,\n viewBox = \"0 0 24 24\",\n ...props\n}: IconProps & { children: React.ReactNode }) {\n return (\n \n {children}\n \n );\n}\n\nexport function IconAdjustmentsHorizontal(props: IconProps) {\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nexport function IconArchive(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconBell(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconBriefcase(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconCheck(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronDown(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronLeft(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronRight(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronUp(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronsLeft(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconChevronsRight(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconClock(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconDatabase(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconDots(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconDownload(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconEdit(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconEye(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconEyeOff(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconFileUpload(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconInbox(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconLayoutGrid(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconList(props: IconProps) {\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nexport function IconRefresh(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconSearch(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconSelector(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconSparkles(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconStar(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconUserCheck(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconX(props: IconProps) {\n return (\n \n \n \n \n );\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-EAV5MZCW.js b/dist/chunk-EAV5MZCW.js deleted file mode 100644 index a8c3e3d..0000000 --- a/dist/chunk-EAV5MZCW.js +++ /dev/null @@ -1,2 +0,0 @@ -import {b,a}from'./chunk-ACKI7LST.js';import {a as a$1}from'./chunk-ZF4EP4WP.js';import*as S from'react';import {useVirtualizer}from'@tanstack/react-virtual';import {jsx,jsxs}from'react/jsx-runtime';function nt({cardClassName:o,cardGridClassName:e,cardSizing:y,cardRenderer:V,currentRowSelection:z,DataTableCardView:E,DataTableEmptyState:N,dragAndDrop:l,editableRows:M,editingRowId:k,emptyNode:P,enableRowSelection:H,flexGrow:m,getRowClassName:A,hasCardTitle:j,infiniteScroll:B,localSearchValue:h,onRowClick:I,renderedRows:r,renderExpandedRow:U,resolvedLabels:n,resolvedLoadingRowCount:Y,rowActions:$=[],ScrollArea:q,sentinelRef:F,setCurrentRowSelection:J,setEditingRowId:K,shouldRenderInitialLoading:s,tableContainerClassName:O,uiClassNames:u,virtualization:C}){let R=s||r.length>0,f=S.useRef(null),{viewportElement:v,viewportHeight:Q}=b(f,R),X=a(f),d=typeof C=="object"?C.card:void 0,x=!s&&r.length>0&&d?.enabled===true,p=L(d?.lanes,X),Z=Math.ceil(r.length/p),g=x&&!!v&&Q>0,w=useVirtualizer({count:x?Z:0,enabled:g,estimateSize:()=>d?.estimateCardHeight??280,getScrollElement:()=>v,overscan:d?.overscan??4}),_=g?w.getVirtualItems():[],b$1=(a,i)=>jsx(E,{rows:a,cardRenderer:V,cardGridClassName:e,cardClassName:o,cardSizing:y,rowActions:$,editableRows:M,renderExpandedRow:U,hasCardTitle:j,rowSelection:z,onRowSelectionChange:J,enableRowSelection:H,editingRowId:k,onEditingRowIdChange:K,getRowClassName:A,onRowClick:I,getRowDraggable:l?.getRowDraggable,onRowDragStart:l?.onRowDragStart,onRowDragEnd:l?.onRowDragEnd,isLoading:i?.isLoading,loadingRowCount:i?.loadingRowCount,labels:n});return jsx("div",{ref:f,"data-dtp-slot":"data-table-card-shell",className:a$1("box-border border-2 border-transparent transition-colors",m?"flex min-h-0 flex-1 flex-col":"h-full",l?.isDragging&&(u.dragActive??"rounded-md border-dashed")),children:jsx(q,{className:a$1(m?"min-h-0 flex-1":"h-full",u.cardScrollArea,O),children:jsxs("div",{"data-dtp-slot":"data-table-card-viewport",className:a$1("flex min-h-full min-w-0 flex-col",m&&"min-h-0 flex-1",u.cardViewport),children:[R?s?b$1([],{isLoading:true,loadingRowCount:Y}):g?jsx("div",{"data-dtp-slot":"data-table-card-virtualizer",style:{height:w.getTotalSize(),position:"relative",width:"100%"},children:_.map(a=>{let i=a.index*p,G=r.slice(i,i+p);return jsx("div",{"data-index":a.index,ref:w.measureElement,style:{left:0,position:"absolute",top:0,transform:`translateY(${a.start}px)`,width:"100%"},children:b$1(G)},a.key)})}):b$1(r):jsx("div",{className:"flex min-h-0 flex-1 items-center justify-center p-4",children:P??jsx(N,{title:h?n.noMatchingRowsTitle:n.noRowsTitle,description:h?n.noMatchingRowsDescription:n.noRowsDescription})}),B?.enabled&&!s?jsx("div",{className:"shrink-0 px-4 pb-4",children:jsx("div",{ref:F,className:"h-4 w-full"})}):null]})})})}function L(o,e){return typeof o=="number"?Math.max(1,Math.floor(o)):o!=="auto"?1:e>=1536?5:e>=1280?4:e>=1024?3:e>=640?2:1}export{nt as a};//# sourceMappingURL=chunk-EAV5MZCW.js.map -//# sourceMappingURL=chunk-EAV5MZCW.js.map \ No newline at end of file diff --git a/dist/chunk-EAV5MZCW.js.map b/dist/chunk-EAV5MZCW.js.map deleted file mode 100644 index 28edb53..0000000 --- a/dist/chunk-EAV5MZCW.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/core/data-table/data-table-virtual-card-panel.tsx"],"names":["DataTableVirtualCardPanel","cardClassName","cardGridClassName","cardSizing","cardRenderer","currentRowSelection","DataTableCardView","DataTableEmptyState","dragAndDrop","editableRows","editingRowId","emptyNode","enableRowSelection","flexGrow","getRowClassName","hasCardTitle","infiniteScroll","localSearchValue","onRowClick","renderedRows","renderExpandedRow","resolvedLabels","resolvedLoadingRowCount","rowActions","ScrollArea","sentinelRef","setCurrentRowSelection","setEditingRowId","shouldRenderInitialLoading","tableContainerClassName","uiClassNames","virtualization","shouldRenderCards","cardScrollContainerRef","viewportElement","viewportHeight","useDataTableScrollViewport","containerWidth","useDataTableContainerWidth","virtualizationConfig","enableCardVirtualization","lanes","resolveCardVirtualizationLanes","virtualRowCount","shouldUseVirtualCardRows","cardVirtualizer","useVirtualizer","virtualCardRows","renderCardView","rows","options","jsx","cn","jsxs","virtualRow","startIndex","configuredLanes"],"mappings":"uMAQO,SAASA,EAAAA,CAAiC,CAC/C,aAAA,CAAAC,CAAAA,CACA,iBAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,mBAAA,CAAAC,CAAAA,CACA,iBAAA,CAAAC,EACA,mBAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,YAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,kBAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,EACA,gBAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,kBAAAC,CAAAA,CACA,cAAA,CAAAC,EACA,uBAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CAAa,EAAC,CACd,UAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,EACA,sBAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,0BAAA,CAAAC,CAAAA,CACA,wBAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CACF,CAAA,CAAmC,CACjC,IAAMC,CAAAA,CAAoBJ,CAAAA,EAA8BT,CAAAA,CAAa,MAAA,CAAS,CAAA,CACxEc,EAA+B,CAAA,CAAA,MAAA,CAA8B,IAAI,CAAA,CACjE,CAAE,eAAA,CAAAC,CAAAA,CAAiB,eAAAC,CAAe,CAAA,CAAIC,CAAAA,CAC1CH,CAAAA,CACAD,CACF,CAAA,CACMK,EAAiBC,CAAAA,CAA2BL,CAAsB,CAAA,CAClEM,CAAAA,CACJ,OAAOR,CAAAA,EAAmB,SAAWA,CAAAA,CAAe,IAAA,CAAO,OACvDS,CAAAA,CACJ,CAACZ,GACDT,CAAAA,CAAa,MAAA,CAAS,CAAA,EACtBoB,CAAAA,EAAsB,OAAA,GAAY,IAAA,CAC9BE,EAAQC,CAAAA,CACZH,CAAAA,EAAsB,KAAA,CACtBF,CACF,CAAA,CACMM,CAAAA,CAAkB,KAAK,IAAA,CAAKxB,CAAAA,CAAa,MAAA,CAASsB,CAAK,CAAA,CACvDG,CAAAA,CACJJ,GAA4B,CAAA,CAAQN,CAAAA,EAAoBC,EAAiB,CAAA,CAErEU,CAAAA,CAAkBC,eAAe,CACrC,KAAA,CAAON,CAAAA,CAA2BG,CAAAA,CAAkB,CAAA,CACpD,OAAA,CAASC,EACT,YAAA,CAAc,IAAML,CAAAA,EAAsB,kBAAA,EAAsB,GAAA,CAChE,gBAAA,CAAkB,IAAML,CAAAA,CACxB,QAAA,CAAUK,CAAAA,EAAsB,QAAA,EAAY,CAC9C,CAAC,EACKQ,CAAAA,CAAkBH,CAAAA,CACpBC,EAAgB,eAAA,EAAgB,CAChC,EAAC,CAECG,GAAAA,CAAiB,CACrBC,CAAAA,CACAC,CAAAA,GAKAC,GAAAA,CAAC7C,EAAA,CACC,IAAA,CAAM2C,CAAAA,CACN,YAAA,CAAc7C,CAAAA,CACd,iBAAA,CAAmBF,EACnB,aAAA,CAAeD,CAAAA,CACf,UAAA,CAAYE,CAAAA,CACZ,UAAA,CAAYoB,CAAAA,CACZ,aAAcd,CAAAA,CACd,iBAAA,CAAmBW,CAAAA,CACnB,YAAA,CAAcL,CAAAA,CACd,YAAA,CAAcV,EACd,oBAAA,CAAsBqB,CAAAA,CACtB,kBAAA,CAAoBd,CAAAA,CACpB,YAAA,CAAcF,CAAAA,CACd,qBAAsBiB,CAAAA,CACtB,eAAA,CAAiBb,CAAAA,CACjB,UAAA,CAAYI,CAAAA,CACZ,eAAA,CAAiBV,GAAa,eAAA,CAC9B,cAAA,CAAgBA,CAAAA,EAAa,cAAA,CAC7B,YAAA,CAAcA,CAAAA,EAAa,aAC3B,SAAA,CAAW0C,CAAAA,EAAS,UACpB,eAAA,CAAiBA,CAAAA,EAAS,gBAC1B,MAAA,CAAQ7B,CAAAA,CACV,CAAA,CAGF,OACE8B,GAAAA,CAAC,KAAA,CAAA,CACC,IAAKlB,CAAAA,CACL,eAAA,CAAc,uBAAA,CACd,SAAA,CAAWmB,GAAAA,CACT,0DAAA,CACAvC,EAAW,8BAAA,CAAiC,QAAA,CAC5CL,CAAAA,EAAa,UAAA,GACVsB,CAAAA,CAAa,UAAA,EAAc,2BAChC,CAAA,CAEA,QAAA,CAAAqB,IAAC3B,CAAAA,CAAA,CACC,UAAW4B,GAAAA,CACTvC,CAAAA,CAAW,gBAAA,CAAmB,QAAA,CAC9BiB,CAAAA,CAAa,cAAA,CACbD,CACF,CAAA,CAEA,QAAA,CAAAwB,IAAAA,CAAC,KAAA,CAAA,CACC,eAAA,CAAc,0BAAA,CACd,UAAWD,GAAAA,CACT,kCAAA,CACAvC,CAAAA,EAAY,gBAAA,CACZiB,CAAAA,CAAa,YACf,EAEC,QAAA,CAAA,CAAAE,CAAAA,CACCJ,EACEoB,GAAAA,CAAe,GAAI,CACjB,SAAA,CAAW,IAAA,CACX,eAAA,CAAiB1B,CACnB,CAAC,EACCsB,CAAAA,CACFO,GAAAA,CAAC,KAAA,CAAA,CACC,eAAA,CAAc,6BAAA,CACd,KAAA,CAAO,CACL,MAAA,CAAQN,CAAAA,CAAgB,YAAA,EAAa,CACrC,QAAA,CAAU,UAAA,CACV,MAAO,MACT,CAAA,CAEC,QAAA,CAAAE,CAAAA,CAAgB,GAAA,CAAKO,CAAAA,EAAe,CACnC,IAAMC,CAAAA,CAAaD,CAAAA,CAAW,KAAA,CAAQb,CAAAA,CAChCQ,CAAAA,CAAO9B,EAAa,KAAA,CACxBoC,CAAAA,CACAA,CAAAA,CAAad,CACf,CAAA,CAEA,OACEU,IAAC,KAAA,CAAA,CAEC,YAAA,CAAYG,CAAAA,CAAW,KAAA,CACvB,GAAA,CAAKT,CAAAA,CAAgB,eACrB,KAAA,CAAO,CACL,KAAM,CAAA,CACN,QAAA,CAAU,WACV,GAAA,CAAK,CAAA,CACL,SAAA,CAAW,CAAA,WAAA,EAAcS,CAAAA,CAAW,KAAK,MACzC,KAAA,CAAO,MACT,CAAA,CAEC,QAAA,CAAAN,GAAAA,CAAeC,CAAI,GAXfK,CAAAA,CAAW,GAYlB,CAEJ,CAAC,CAAA,CACH,CAAA,CAEAN,IAAe7B,CAAY,CAAA,CAG7BgC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sDACZ,QAAA,CAAAxC,CAAAA,EACCwC,GAAAA,CAAC5C,CAAAA,CAAA,CACC,KAAA,CACEU,EACII,CAAAA,CAAe,mBAAA,CACfA,CAAAA,CAAe,WAAA,CAErB,WAAA,CACEJ,CAAAA,CACII,EAAe,yBAAA,CACfA,CAAAA,CAAe,iBAAA,CAEvB,CAAA,CAEJ,CAAA,CAGDL,CAAAA,EAAgB,SAAW,CAACY,CAAAA,CAC3BuB,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAK1B,CAAAA,CAAa,SAAA,CAAU,aAAa,CAAA,CAChD,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACF,CAAA,CACF,CAEJ,CAEA,SAASiB,CAAAA,CACPc,CAAAA,CACAnB,CAAAA,CACA,CACA,OAAI,OAAOmB,CAAAA,EAAoB,QAAA,CACtB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,MAAMA,CAAe,CAAC,CAAA,CAG5CA,CAAAA,GAAoB,MAAA,CACf,CAAA,CAGLnB,GAAkB,IAAA,CACb,CAAA,CAELA,CAAAA,EAAkB,IAAA,CACb,CAAA,CAELA,CAAAA,EAAkB,KACb,CAAA,CAELA,CAAAA,EAAkB,GAAA,CACb,CAAA,CAEF,CACT","file":"chunk-EAV5MZCW.js","sourcesContent":["import * as React from \"react\";\nimport type { Row } from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { cn } from \"../../lib/utils\";\nimport type { DataTableCardPanelProps } from \"./data-table-card-panel-types\";\nimport { useDataTableContainerWidth } from \"./use-data-table-container-width\";\nimport { useDataTableScrollViewport } from \"./use-data-table-scroll-viewport\";\n\nexport function DataTableVirtualCardPanel({\n cardClassName,\n cardGridClassName,\n cardSizing,\n cardRenderer,\n currentRowSelection,\n DataTableCardView,\n DataTableEmptyState,\n dragAndDrop,\n editableRows,\n editingRowId,\n emptyNode,\n enableRowSelection,\n flexGrow,\n getRowClassName,\n hasCardTitle,\n infiniteScroll,\n localSearchValue,\n onRowClick,\n renderedRows,\n renderExpandedRow,\n resolvedLabels,\n resolvedLoadingRowCount,\n rowActions = [],\n ScrollArea,\n sentinelRef,\n setCurrentRowSelection,\n setEditingRowId,\n shouldRenderInitialLoading,\n tableContainerClassName,\n uiClassNames,\n virtualization,\n}: DataTableCardPanelProps) {\n const shouldRenderCards = shouldRenderInitialLoading || renderedRows.length > 0;\n const cardScrollContainerRef = React.useRef(null);\n const { viewportElement, viewportHeight } = useDataTableScrollViewport(\n cardScrollContainerRef,\n shouldRenderCards,\n );\n const containerWidth = useDataTableContainerWidth(cardScrollContainerRef);\n const virtualizationConfig =\n typeof virtualization === \"object\" ? virtualization.card : undefined;\n const enableCardVirtualization =\n !shouldRenderInitialLoading &&\n renderedRows.length > 0 &&\n virtualizationConfig?.enabled === true;\n const lanes = resolveCardVirtualizationLanes(\n virtualizationConfig?.lanes,\n containerWidth,\n );\n const virtualRowCount = Math.ceil(renderedRows.length / lanes);\n const shouldUseVirtualCardRows =\n enableCardVirtualization && Boolean(viewportElement) && viewportHeight > 0;\n // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Virtual owns its instance functions.\n const cardVirtualizer = useVirtualizer({\n count: enableCardVirtualization ? virtualRowCount : 0,\n enabled: shouldUseVirtualCardRows,\n estimateSize: () => virtualizationConfig?.estimateCardHeight ?? 280,\n getScrollElement: () => viewportElement,\n overscan: virtualizationConfig?.overscan ?? 4,\n });\n const virtualCardRows = shouldUseVirtualCardRows\n ? cardVirtualizer.getVirtualItems()\n : [];\n\n const renderCardView = (\n rows: Array>,\n options?: {\n isLoading?: boolean;\n loadingRowCount?: number;\n },\n ) => (\n \n );\n\n return (\n \n \n \n {shouldRenderCards ? (\n shouldRenderInitialLoading ? (\n renderCardView([], {\n isLoading: true,\n loadingRowCount: resolvedLoadingRowCount,\n })\n ) : shouldUseVirtualCardRows ? (\n \n {virtualCardRows.map((virtualRow) => {\n const startIndex = virtualRow.index * lanes;\n const rows = renderedRows.slice(\n startIndex,\n startIndex + lanes,\n );\n\n return (\n \n {renderCardView(rows)}\n \n );\n })}\n \n ) : (\n renderCardView(renderedRows)\n )\n ) : (\n
    \n {emptyNode ?? (\n \n )}\n
    \n )}\n\n {infiniteScroll?.enabled && !shouldRenderInitialLoading ? (\n
    \n
    \n
    \n ) : null}\n
    \n \n \n );\n}\n\nfunction resolveCardVirtualizationLanes(\n configuredLanes: number | \"auto\" | undefined,\n containerWidth: number,\n) {\n if (typeof configuredLanes === \"number\") {\n return Math.max(1, Math.floor(configuredLanes));\n }\n\n if (configuredLanes !== \"auto\") {\n return 1;\n }\n\n if (containerWidth >= 1536) {\n return 5;\n }\n if (containerWidth >= 1280) {\n return 4;\n }\n if (containerWidth >= 1024) {\n return 3;\n }\n if (containerWidth >= 640) {\n return 2;\n }\n return 1;\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-EJHT5JBZ.js b/dist/chunk-EJHT5JBZ.js new file mode 100644 index 0000000..4304cfc --- /dev/null +++ b/dist/chunk-EJHT5JBZ.js @@ -0,0 +1,2 @@ +import*as t from'react';function f(r,c){let[s,m]=t.useState(null),[w,l]=t.useState(0);return t.useEffect(()=>{let n=r.current?.querySelector("[data-slot='scroll-area-viewport']")??null;if(m(n),!n){l(0);return}let e=null,o=()=>{l(u=>{let a=n.clientHeight;return u===a?u:a});};if(o(),typeof ResizeObserver>"u")return;let i=new ResizeObserver(()=>{e!==null&&window.cancelAnimationFrame(e),e=window.requestAnimationFrame(()=>{e=null,o();});});return i.observe(n),()=>{e!==null&&window.cancelAnimationFrame(e),i.disconnect();}},[r,c]),{viewportElement:s,viewportHeight:w}}export{f as a};//# sourceMappingURL=chunk-EJHT5JBZ.js.map +//# sourceMappingURL=chunk-EJHT5JBZ.js.map \ No newline at end of file diff --git a/dist/chunk-EJHT5JBZ.js.map b/dist/chunk-EJHT5JBZ.js.map new file mode 100644 index 0000000..e1ecbf8 --- /dev/null +++ b/dist/chunk-EJHT5JBZ.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/use-data-table-scroll-viewport.ts"],"names":["useDataTableScrollViewport","containerRef","refreshKey","viewportElement","setViewportElement","viewportHeight","setViewportHeight","element","frameId","updateHeight","currentHeight","nextHeight","observer"],"mappings":"wBAEO,SAASA,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACA,CACA,GAAM,CAACC,CAAAA,CAAiBC,CAAkB,CAAA,CAClC,CAAA,CAAA,QAAA,CAA6B,IAAI,CAAA,CACnC,CAACC,CAAAA,CAAgBC,CAAiB,CAAA,CAAU,CAAA,CAAA,QAAA,CAAS,CAAC,CAAA,CAE5D,OAAM,CAAA,CAAA,SAAA,CAAU,IAAM,CACpB,IAAMC,CAAAA,CACJN,CAAAA,CAAa,OAAA,EAAS,aAAA,CACpB,oCACF,CAAA,EAAK,IAAA,CAGP,GADAG,CAAAA,CAAmBG,CAAO,CAAA,CACtB,CAACA,CAAAA,CAAS,CACZD,CAAAA,CAAkB,CAAC,CAAA,CACnB,MACF,CAEA,IAAIE,CAAAA,CAAyB,IAAA,CACvBC,CAAAA,CAAe,IAAM,CACzBH,CAAAA,CAAmBI,CAAAA,EAAkB,CACnC,IAAMC,CAAAA,CAAaJ,CAAAA,CAAQ,YAAA,CAC3B,OAAOG,IAAkBC,CAAAA,CAAaD,CAAAA,CAAgBC,CACxD,CAAC,EACH,CAAA,CAIA,GAFAF,CAAAA,EAAa,CAET,OAAO,cAAA,CAAmB,GAAA,CAC5B,OAGF,IAAMG,CAAAA,CAAW,IAAI,cAAA,CAAe,IAAM,CACpCJ,CAAAA,GAAY,IAAA,EACd,MAAA,CAAO,oBAAA,CAAqBA,CAAO,CAAA,CAGrCA,CAAAA,CAAU,MAAA,CAAO,qBAAA,CAAsB,IAAM,CAC3CA,CAAAA,CAAU,IAAA,CACVC,IACF,CAAC,EACH,CAAC,CAAA,CAED,OAAAG,CAAAA,CAAS,OAAA,CAAQL,CAAO,CAAA,CAEjB,IAAM,CACPC,CAAAA,GAAY,IAAA,EACd,MAAA,CAAO,oBAAA,CAAqBA,CAAO,CAAA,CAErCI,CAAAA,CAAS,UAAA,GACX,CACF,CAAA,CAAG,CAACX,CAAAA,CAAcC,CAAU,CAAC,CAAA,CAEtB,CAAE,eAAA,CAAAC,CAAAA,CAAiB,cAAA,CAAAE,CAAe,CAC3C","file":"chunk-EJHT5JBZ.js","sourcesContent":["import * as React from \"react\";\n\nexport function useDataTableScrollViewport(\n containerRef: React.RefObject,\n refreshKey: unknown,\n) {\n const [viewportElement, setViewportElement] =\n React.useState(null);\n const [viewportHeight, setViewportHeight] = React.useState(0);\n\n React.useEffect(() => {\n const element =\n containerRef.current?.querySelector(\n \"[data-slot='scroll-area-viewport']\",\n ) ?? null;\n\n setViewportElement(element);\n if (!element) {\n setViewportHeight(0);\n return;\n }\n\n let frameId: number | null = null;\n const updateHeight = () => {\n setViewportHeight((currentHeight) => {\n const nextHeight = element.clientHeight;\n return currentHeight === nextHeight ? currentHeight : nextHeight;\n });\n };\n\n updateHeight();\n\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver(() => {\n if (frameId !== null) {\n window.cancelAnimationFrame(frameId);\n }\n\n frameId = window.requestAnimationFrame(() => {\n frameId = null;\n updateHeight();\n });\n });\n\n observer.observe(element);\n\n return () => {\n if (frameId !== null) {\n window.cancelAnimationFrame(frameId);\n }\n observer.disconnect();\n };\n }, [containerRef, refreshKey]);\n\n return { viewportElement, viewportHeight };\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-GTOBHZ7L.js.map b/dist/chunk-GTOBHZ7L.js.map deleted file mode 100644 index 015864e..0000000 --- a/dist/chunk-GTOBHZ7L.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/adapters/heroui/index.tsx"],"names":["withClassName","Component","defaultClassName","className","props","jsx","cn","HeroButton","Button","HeroCard","Card","HeroCardHeader","CardHeader","HeroCardContent","CardContent","HeroCheckbox","Checkbox","HeroDropdownMenuContent","DropdownMenuContent","HeroDropdownMenuItem","DropdownMenuItem","HeroDropdownMenuCheckboxItem","DropdownMenuCheckboxItem","HeroDropdownMenuRadioItem","DropdownMenuRadioItem","HeroDropdownMenuLabel","DropdownMenuLabel","HeroDropdownMenuSeparator","DropdownMenuSeparator","HeroDropdownMenuSubContent","DropdownMenuSubContent","HeroDropdownMenuSubTrigger","DropdownMenuSubTrigger","HeroInput","Input","HeroInputGroup","InputGroup","HeroInputGroupAddon","InputGroupAddon","HeroInputGroupInput","InputGroupInput","HeroPagination","Pagination","HeroPaginationLink","PaginationLink","HeroPaginationFirst","PaginationFirst","HeroPaginationPrevious","PaginationPrevious","HeroPaginationNext","PaginationNext","HeroPaginationLast","PaginationLast","HeroScrollArea","ScrollArea","HeroScrollBar","ScrollBar","HeroSelectTrigger","SelectTrigger","HeroSelectContent","SelectContent","HeroSelectItem","SelectItem","HeroSeparator","Separator","HeroSkeleton","Skeleton","HeroTable","Table","HeroTableHeader","TableHeader","HeroTableBody","TableBody","HeroTableFooter","TableFooter","HeroTableHead","TableHead","HeroTableRow","TableRow","HeroTableCell","TableCell","HeroTooltipContent","TooltipContent","HeroEmpty","Empty","HeroEmptyHeader","EmptyHeader","HeroEmptyMedia","EmptyMedia","HeroEmptyTitle","EmptyTitle","HeroEmptyDescription","EmptyDescription","HeroEmptyContent","EmptyContent","heroUiKit","primitiveUiKit"],"mappings":"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","file":"chunk-GTOBHZ7L.js","sourcesContent":["import * as React from \"react\";\nimport type { DataTableUiKit } from \"../../core/ui-kit\";\nimport {\n Button as PrimitiveButton,\n Card as PrimitiveCard,\n CardContent as PrimitiveCardContent,\n CardHeader as PrimitiveCardHeader,\n Checkbox as PrimitiveCheckbox,\n DropdownMenuCheckboxItem as PrimitiveDropdownMenuCheckboxItem,\n DropdownMenuContent as PrimitiveDropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n DropdownMenuLabel as PrimitiveDropdownMenuLabel,\n DropdownMenuRadioItem as PrimitiveDropdownMenuRadioItem,\n DropdownMenuSeparator as PrimitiveDropdownMenuSeparator,\n DropdownMenuSubContent as PrimitiveDropdownMenuSubContent,\n DropdownMenuSubTrigger as PrimitiveDropdownMenuSubTrigger,\n Empty as PrimitiveEmpty,\n EmptyContent as PrimitiveEmptyContent,\n EmptyDescription as PrimitiveEmptyDescription,\n EmptyHeader as PrimitiveEmptyHeader,\n EmptyMedia as PrimitiveEmptyMedia,\n EmptyTitle as PrimitiveEmptyTitle,\n Input as PrimitiveInput,\n InputGroup as PrimitiveInputGroup,\n InputGroupAddon as PrimitiveInputGroupAddon,\n InputGroupInput as PrimitiveInputGroupInput,\n Pagination as PrimitivePagination,\n PaginationFirst as PrimitivePaginationFirst,\n PaginationLast as PrimitivePaginationLast,\n PaginationLink as PrimitivePaginationLink,\n PaginationNext as PrimitivePaginationNext,\n PaginationPrevious as PrimitivePaginationPrevious,\n ScrollArea as PrimitiveScrollArea,\n ScrollBar as PrimitiveScrollBar,\n SelectContent as PrimitiveSelectContent,\n SelectItem as PrimitiveSelectItem,\n SelectTrigger as PrimitiveSelectTrigger,\n Separator as PrimitiveSeparator,\n Skeleton as PrimitiveSkeleton,\n Table as PrimitiveTable,\n TableBody as PrimitiveTableBody,\n TableCell as PrimitiveTableCell,\n TableFooter as PrimitiveTableFooter,\n TableHead as PrimitiveTableHead,\n TableHeader as PrimitiveTableHeader,\n TableRow as PrimitiveTableRow,\n TooltipContent as PrimitiveTooltipContent,\n primitiveUiKit,\n} from \"../../core/primitive-ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nfunction withClassName(\n Component: React.ComponentType,\n defaultClassName: string,\n) {\n return function Wrapped({ className, ...props }: TProps) {\n return (\n \n );\n };\n}\n\nconst HeroButton = withClassName(\n PrimitiveButton,\n \"rounded-field border-field-border shadow-field data-[variant=default]:bg-accent data-[variant=default]:text-accent-foreground data-[variant=outline]:border-field-border data-[variant=outline]:bg-field data-[variant=outline]:hover:bg-field-hover data-[variant=secondary]:bg-default data-[variant=secondary]:text-default-foreground data-[variant=ghost]:hover:bg-default data-[variant=destructive]:bg-danger-soft data-[variant=destructive]:text-danger\",\n);\nconst HeroCard = withClassName(\n PrimitiveCard,\n \"rounded-2xl border border-separator bg-surface text-surface-foreground shadow-surface ring-0\",\n);\nconst HeroCardHeader = withClassName(PrimitiveCardHeader, \"px-5 pt-5 pb-3\");\nconst HeroCardContent = withClassName(PrimitiveCardContent, \"px-5 pb-5\");\nconst HeroCheckbox = withClassName(\n PrimitiveCheckbox,\n \"rounded-field border-field-border bg-field ring-focus/40 data-checked:bg-accent data-checked:text-accent-foreground data-checked:ring-focus\",\n);\nconst HeroDropdownMenuContent = withClassName(\n PrimitiveDropdownMenuContent,\n \"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden **:data-[slot$=-item]:focus:bg-default **:data-[slot$=-item]:data-highlighted:bg-default **:data-[slot$=-separator]:bg-separator **:data-[slot$=-trigger]:focus:bg-default\",\n);\nconst HeroDropdownMenuItem = withClassName(\n PrimitiveDropdownMenuItem,\n \"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground data-[variant=destructive]:text-danger data-[variant=destructive]:focus:bg-danger-soft\",\n);\nconst HeroDropdownMenuCheckboxItem = withClassName(\n PrimitiveDropdownMenuCheckboxItem,\n \"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground\",\n);\nconst HeroDropdownMenuRadioItem = withClassName(\n PrimitiveDropdownMenuRadioItem,\n \"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground\",\n);\nconst HeroDropdownMenuLabel = withClassName(\n PrimitiveDropdownMenuLabel,\n \"text-muted\",\n);\nconst HeroDropdownMenuSeparator = withClassName(\n PrimitiveDropdownMenuSeparator,\n \"bg-separator\",\n);\nconst HeroDropdownMenuSubContent = withClassName(\n PrimitiveDropdownMenuSubContent,\n \"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden\",\n);\nconst HeroDropdownMenuSubTrigger = withClassName(\n PrimitiveDropdownMenuSubTrigger,\n \"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground data-open:bg-default data-open:text-overlay-foreground\",\n);\nconst HeroInput = withClassName(\n PrimitiveInput,\n \"rounded-field border-field-border bg-field text-field-foreground shadow-field placeholder:text-field-placeholder\",\n);\nconst HeroInputGroup = withClassName(\n PrimitiveInputGroup,\n \"rounded-field border-field-border bg-field text-field-foreground shadow-field\",\n);\nconst HeroInputGroupAddon = withClassName(\n PrimitiveInputGroupAddon,\n \"text-muted\",\n);\nconst HeroInputGroupInput = withClassName(PrimitiveInputGroupInput, \"bg-transparent\");\nconst HeroPagination = withClassName(PrimitivePagination, \"justify-end\");\nconst HeroPaginationLink = withClassName(\n PrimitivePaginationLink,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover data-[active=true]:bg-accent data-[active=true]:text-accent-foreground\",\n);\nconst HeroPaginationFirst = withClassName(\n PrimitivePaginationFirst,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover\",\n);\nconst HeroPaginationPrevious = withClassName(\n PrimitivePaginationPrevious,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover\",\n);\nconst HeroPaginationNext = withClassName(\n PrimitivePaginationNext,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover\",\n);\nconst HeroPaginationLast = withClassName(\n PrimitivePaginationLast,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover\",\n);\nconst HeroScrollArea = withClassName(PrimitiveScrollArea, \"rounded-2xl\");\nconst HeroScrollBar = withClassName(\n PrimitiveScrollBar,\n \"[&>[data-slot=scroll-area-thumb]]:bg-default-500\",\n);\nconst HeroSelectTrigger = withClassName(\n PrimitiveSelectTrigger,\n \"rounded-field border-field-border bg-field text-field-foreground shadow-field\",\n);\nconst HeroSelectContent = withClassName(\n PrimitiveSelectContent,\n \"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden\",\n);\nconst HeroSelectItem = withClassName(\n PrimitiveSelectItem,\n \"rounded-xl focus:bg-default\",\n);\nconst HeroSeparator = withClassName(PrimitiveSeparator, \"bg-separator\");\nconst HeroSkeleton = withClassName(\n PrimitiveSkeleton,\n \"rounded-xl bg-default\",\n);\nconst HeroTable = withClassName(PrimitiveTable, \"rounded-2xl text-foreground\");\nconst HeroTableHeader = withClassName(\n PrimitiveTableHeader,\n \"[&_tr]:border-separator\",\n);\nconst HeroTableBody = withClassName(PrimitiveTableBody, \"\");\nconst HeroTableFooter = withClassName(\n PrimitiveTableFooter,\n \"border-separator bg-surface-secondary\",\n);\nconst HeroTableHead = withClassName(\n PrimitiveTableHead,\n \"h-11 border-separator text-muted font-semibold\",\n);\nconst HeroTableRow = withClassName(\n PrimitiveTableRow,\n \"border-separator hover:bg-default data-[state=selected]:bg-accent-soft\",\n);\nconst HeroTableCell = withClassName(PrimitiveTableCell, \"py-2.5\");\nconst HeroTooltipContent = withClassName(\n PrimitiveTooltipContent,\n \"rounded-xl bg-overlay text-overlay-foreground ring-1 ring-separator shadow-overlay [&>svg]:bg-overlay [&>svg]:fill-overlay\",\n);\nconst HeroEmpty = withClassName(\n PrimitiveEmpty,\n \"rounded-2xl border-separator bg-surface shadow-surface\",\n);\nconst HeroEmptyHeader = withClassName(PrimitiveEmptyHeader, \"\");\nconst HeroEmptyMedia = withClassName(\n PrimitiveEmptyMedia,\n \"[&[data-variant=icon]]:rounded-2xl [&[data-variant=icon]]:bg-accent-soft [&[data-variant=icon]]:text-accent-soft-foreground\",\n);\nconst HeroEmptyTitle = withClassName(PrimitiveEmptyTitle, \"text-foreground\");\nconst HeroEmptyDescription = withClassName(\n PrimitiveEmptyDescription,\n \"text-muted\",\n);\nconst HeroEmptyContent = withClassName(PrimitiveEmptyContent, \"\");\n\nexport const heroUiKit: DataTableUiKit = {\n ...primitiveUiKit,\n rootClassName: \"dtp-heroui\",\n classNames: {\n card: \"hover:bg-default data-[state=selected]:bg-accent-soft\",\n cardGrid: \"bg-transparent\",\n cardItem: \"min-w-0\",\n cardOverlay: \"from-surface/95 via-surface/85 to-transparent\",\n cardScrollArea: \"bg-transparent\",\n cardSelected: \"bg-accent-soft ring-accent\",\n cardUnselected: \"border-separator\",\n cardViewport: \"bg-transparent\",\n cellBorder: \"border-separator/70\",\n dragActive: \"rounded-2xl border-dashed border-accent\",\n emptyState: \"border-separator bg-surface\",\n footer: \"border-separator bg-surface text-surface-foreground\",\n headerSortIcon: \"text-muted\",\n mutedText: \"text-muted\",\n paginationSelectTrigger: \"border-field-border bg-field\",\n paginationTotal: \"text-muted\",\n pinnedColumn: \"border-separator\",\n pinnedUtilityColumn: \"bg-surface\",\n resizeHandle: \"after:bg-separator hover:after:bg-accent\",\n resizeHandleActive: \"after:bg-accent\",\n row: \"hover:bg-default data-[state=selected]:!bg-accent-soft\",\n rowSelected: \"!bg-accent-soft\",\n tableContainer: \"border-separator bg-surface text-surface-foreground\",\n tableScrollArea: \"bg-surface\",\n tableStickyHeader:\n \"sticky top-0 z-30 bg-surface/95 backdrop-blur [&_th]:border-separator [&_th]:bg-surface/95\",\n toolbarCompactIconButton: \"size-7\",\n toolbarIconButton: \"text-muted hover:text-foreground\",\n toolbarInputButton: \"bg-field\",\n },\n Button: HeroButton,\n Card: HeroCard,\n CardContent: HeroCardContent,\n CardHeader: HeroCardHeader,\n Checkbox: HeroCheckbox,\n DropdownMenuCheckboxItem: HeroDropdownMenuCheckboxItem,\n DropdownMenuContent: HeroDropdownMenuContent,\n DropdownMenuItem: HeroDropdownMenuItem,\n DropdownMenuLabel: HeroDropdownMenuLabel,\n DropdownMenuRadioItem: HeroDropdownMenuRadioItem,\n DropdownMenuSeparator: HeroDropdownMenuSeparator,\n DropdownMenuSubContent: HeroDropdownMenuSubContent,\n DropdownMenuSubTrigger: HeroDropdownMenuSubTrigger,\n Empty: HeroEmpty,\n EmptyContent: HeroEmptyContent,\n EmptyDescription: HeroEmptyDescription,\n EmptyHeader: HeroEmptyHeader,\n EmptyMedia: HeroEmptyMedia,\n EmptyTitle: HeroEmptyTitle,\n Input: HeroInput,\n InputGroup: HeroInputGroup,\n InputGroupAddon: HeroInputGroupAddon,\n InputGroupInput: HeroInputGroupInput,\n Pagination: HeroPagination,\n PaginationFirst: HeroPaginationFirst,\n PaginationLast: HeroPaginationLast,\n PaginationLink: HeroPaginationLink,\n PaginationNext: HeroPaginationNext,\n PaginationPrevious: HeroPaginationPrevious,\n ScrollArea: HeroScrollArea,\n ScrollBar: HeroScrollBar,\n SelectContent: HeroSelectContent,\n SelectItem: HeroSelectItem,\n SelectTrigger: HeroSelectTrigger,\n Separator: HeroSeparator,\n Skeleton: HeroSkeleton,\n Table: HeroTable,\n TableBody: HeroTableBody,\n TableCell: HeroTableCell,\n TableFooter: HeroTableFooter,\n TableHead: HeroTableHead,\n TableHeader: HeroTableHeader,\n TableRow: HeroTableRow,\n TooltipContent: HeroTooltipContent,\n};\n"]} \ No newline at end of file diff --git a/dist/chunk-HOUWU4KF.js b/dist/chunk-HOUWU4KF.js deleted file mode 100644 index db62933..0000000 --- a/dist/chunk-HOUWU4KF.js +++ /dev/null @@ -1,3 +0,0 @@ -import {i,a,h,g}from'./chunk-ZF4EP4WP.js';import*as k from'react';import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {flexRender}from'@tanstack/react-table';function Dt({columns:e,editableRows:t,onError:a}){let[r,l]=k.useState(null),[n,d]=k.useState({}),i=k.useRef(n),[h,f]=k.useState(false);k.useEffect(()=>{i.current=n;},[n]);let s=k.useCallback(()=>{l(null),d({});},[]),S=k.useCallback((u,m)=>{let c=t?.getInitialValues?.(u)??Oe(u,e);d(c),l(m);},[e,t]),C=k.useCallback(async u=>{if(t){f(true);try{await t.onSaveRow(u,i.current),k.startTransition(s);}catch(m){a?.(m,u);}finally{f(false);}}},[s,t,a]);return {cancelEditing:s,draftValues:n,editingRowId:r,isSavingEdit:h,saveEdit:C,setDraftValues:d,setEditingRowId:l,startEditingRow:S}}function Oe(e,t){return t.reduce((a,r)=>("accessorKey"in r&&typeof r.accessorKey=="string"&&(a[r.accessorKey]=e[r.accessorKey]),a),{})}function pe(e,t,a,r){let{Checkbox:l,Input:n}=r,d=e.column.columnDef,i=d.meta,h="accessorKey"in d&&typeof d.accessorKey=="string"?d.accessorKey:e.column.id,f=t[h],s=C=>{a(u=>({...u,[h]:C}));};if(i?.renderEditCell)return i.renderEditCell({cell:e,row:e.row.original,value:e.getValue(),draftValue:f,setDraftValue:s});let S=Ke(i?.type,f);return typeof f=="boolean"?jsx(l,{checked:f,onCheckedChange:C=>{s(C===true);}}):jsx(n,{type:S,value:i?.formatEditValue?i.formatEditValue(f,e):Be(f,S),onChange:C=>{let u=C.target.value,m=i?.parseEditValue?i.parseEditValue(u,e):Fe(u,S,f);s(m);}})}function Ke(e,t){return e==="numeric"||typeof t=="number"?"number":e==="date"||t instanceof Date?"datetime-local":"text"}function Be(e,t="text"){return e==null?"":e instanceof Date?t==="datetime-local"?e.toISOString().slice(0,16):e.toISOString():typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="bigint"?String(e):""}function Fe(e,t,a){return t==="number"?e===""?null:Number(e):t==="datetime-local"?e?a instanceof Date?new Date(e):e:null:e}function T({children:e,viewBox:t="0 0 24 24",...a}){return jsx("svg",{"aria-hidden":"true",focusable:"false",width:"1em",height:"1em",viewBox:t,fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:e})}function yt(e){return jsxs(T,{...e,children:[jsx("path",{d:"M4 7h4"}),jsx("path",{d:"M14 7h6"}),jsx("path",{d:"M10 5v4"}),jsx("path",{d:"M4 17h10"}),jsx("path",{d:"M18 17h2"}),jsx("path",{d:"M16 15v4"})]})}function ht(e){return jsx(T,{...e,children:jsx("path",{d:"M5 12l4 4L19 6"})})}function be(e){return jsx(T,{...e,children:jsx("path",{d:"M6 9l6 6 6-6"})})}function wt(e){return jsx(T,{...e,children:jsx("path",{d:"M15 6l-6 6 6 6"})})}function Rt(e){return jsx(T,{...e,children:jsx("path",{d:"M9 6l6 6-6 6"})})}function St(e){return jsx(T,{...e,children:jsx("path",{d:"M6 15l6-6 6 6"})})}function It(e){return jsxs(T,{...e,children:[jsx("path",{d:"M11 6l-6 6 6 6"}),jsx("path",{d:"M19 6l-6 6 6 6"})]})}function kt(e){return jsxs(T,{...e,children:[jsx("path",{d:"M5 6l6 6-6 6"}),jsx("path",{d:"M13 6l6 6-6 6"})]})}function De(e){return jsxs(T,{...e,children:[jsx("circle",{cx:"12",cy:"12",r:"9"}),jsx("path",{d:"M12 7v5l3 2"})]})}function xt(e){return jsxs(T,{...e,children:[jsx("ellipse",{cx:"12",cy:"5",rx:"7",ry:"3"}),jsx("path",{d:"M5 5v6c0 1.7 3.1 3 7 3s7-1.3 7-3V5"}),jsx("path",{d:"M5 11v6c0 1.7 3.1 3 7 3s7-1.3 7-3v-6"})]})}function Mt(e){return jsxs(T,{...e,children:[jsx("path",{d:"M5 12h.01"}),jsx("path",{d:"M12 12h.01"}),jsx("path",{d:"M19 12h.01"})]})}function Lt(e){return jsxs(T,{...e,children:[jsx("path",{d:"M12 3v12"}),jsx("path",{d:"M7 10l5 5 5-5"}),jsx("path",{d:"M5 21h14"})]})}function Et(e){return jsxs(T,{...e,children:[jsx("path",{d:"M4 20h4l11-11-4-4L4 16v4z"}),jsx("path",{d:"M13 7l4 4"})]})}function Nt(e){return jsxs(T,{...e,children:[jsx("path",{d:"M2 12s4-7 10-7 10 7 10 7-4 7-10 7S2 12 2 12z"}),jsx("circle",{cx:"12",cy:"12",r:"3"})]})}function Pt(e){return jsxs(T,{...e,children:[jsx("path",{d:"M3 3l18 18"}),jsx("path",{d:"M10.6 10.6a2 2 0 0 0 2.8 2.8"}),jsx("path",{d:"M9.9 5.3A10.5 10.5 0 0 1 12 5c6 0 10 7 10 7a18 18 0 0 1-3.2 4"}),jsx("path",{d:"M6.6 6.6C3.8 8.4 2 12 2 12s4 7 10 7a10.6 10.6 0 0 0 4.1-.8"})]})}function At(e){return jsxs(T,{...e,children:[jsx("path",{d:"M4 13l2-8h12l2 8"}),jsx("path",{d:"M4 13h5l2 3h2l2-3h5v6H4z"})]})}function Ht(e){return jsxs(T,{...e,children:[jsx("path",{d:"M4 4h6v6H4z"}),jsx("path",{d:"M14 4h6v6h-6z"}),jsx("path",{d:"M4 14h6v6H4z"}),jsx("path",{d:"M14 14h6v6h-6z"})]})}function _t(e){return jsxs(T,{...e,children:[jsx("path",{d:"M8 6h13"}),jsx("path",{d:"M8 12h13"}),jsx("path",{d:"M8 18h13"}),jsx("path",{d:"M3 6h.01"}),jsx("path",{d:"M3 12h.01"}),jsx("path",{d:"M3 18h.01"})]})}function zt(e){return jsxs(T,{...e,children:[jsx("circle",{cx:"11",cy:"11",r:"7"}),jsx("path",{d:"M16 16l5 5"})]})}function ge(e){return jsxs(T,{...e,children:[jsx("path",{d:"M8 9l4-4 4 4"}),jsx("path",{d:"M16 15l-4 4-4-4"})]})}function vt(e){return jsxs(T,{...e,children:[jsx("path",{d:"M18 6L6 18"}),jsx("path",{d:"M6 6l12 12"})]})}function ye(e,t,a$1){let r=e.column.columnDef,l=r.meta,n=e.getValue(),d=a$1?.hasCustomCell??false,i=d&&r.cell?flexRender(r.cell,e):void 0,h=Ge(i),f=je({context:e,useCustomOverflowDefaults:a$1?.useCustomOverflowDefaults??false,value:n});if(l?.type==="date"&&!d)return jsxs("div",{"data-dtp-slot":"data-table-cell-content","data-dtp-overflow":f,className:a(Te(f),"flex w-full min-w-0 items-center justify-end gap-2"),children:[jsx(De,{className:a("shrink-0",t?.mutedText??"opacity-70")}),jsx("span",{className:"min-w-0 truncate",children:$e(n)})]});let s=i!=null&&i!==""?i:n==null||n===""?jsx("span",{className:t?.mutedText??"opacity-70",children:"-"}):qe(n);return jsx("div",{"data-dtp-slot":"data-table-cell-content","data-dtp-overflow":f,className:a(Te(f),"w-full min-w-0 max-w-full",h&&"[&>*]:max-w-full [&>*]:min-w-0"),children:s})}function je({context:e,useCustomOverflowDefaults:t,value:a}){let r=e.column.columnDef,l=typeof r.meta?.overflow=="function"?r.meta.overflow({row:e.row.original,value:a}):r.meta?.overflow;return l||(t?"clip":"truncate")}function Te(e){switch(e){case "clip":return "block overflow-hidden whitespace-nowrap";case "wrap":return "block overflow-hidden whitespace-normal break-words";case "visible":return "block overflow-visible whitespace-normal";default:return "block overflow-hidden text-ellipsis whitespace-nowrap"}}function Ge(e){return e==null?false:k.isValidElement(e)||Array.isArray(e)||typeof e=="object"}function $e(e){return typeof e=="number"?new Date(e*1e3).toLocaleString():typeof e=="string"&&e?e:"-"}function qe(e){if(e instanceof Date)return e.toLocaleString();if(typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return String(e);try{return JSON.stringify(e)}catch{return "-"}}var he=Symbol("data-table-loading-row"),Gt=50;function $t(e){return Array.from({length:e},(t,a)=>({[he]:true,index:a}))}function ae(e){return !!(e&&typeof e=="object"&&he in e)}function qt(e){return `__loading__${e}`}function Jt(e){if(typeof e.meta?.minWidth=="number")return e.meta.minWidth;if(Object.prototype.hasOwnProperty.call(e,"minSize")){let t=e.minSize;if(typeof t=="number")return t}}function Ze(e){if("columns"in e&&Array.isArray(e.columns))return {...e,columns:e.columns.map(a=>Ze(a))};let t=e.meta?.filter;return !t||e.filterFn?e:{...e,filterFn:(a,r,l)=>{if(!Qe(l))return true;let n=a.getValue(r),d=t.getOptionValue?.(n,a.original)??G(n);return t.type==="multi"?Array.isArray(l)?l.map(String).includes(d):true:t.type==="select"?d===String(l):G(n).toLowerCase().includes(String(l).toLowerCase())}}}function Zt(e){return e.map(t=>typeof t=="string"?{label:Re(t),value:t}:t)}function G(e){if(e==null)return "";if(e instanceof Date)return e.toISOString();if(typeof e=="object")try{return JSON.stringify(e)}catch{return ""}return typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="bigint"||typeof e=="symbol"?String(e):""}function Qe(e){return Array.isArray(e)?e.length>0:e!=null&&e!==""}function Qt(e,t,a){let r=G(a).trim().toLowerCase();return r?G(e.getValue(t)).toLowerCase().includes(r):true}async function Xt({csvExport:e,table:t}){if(e===false)return;let a=e===true?{}:e,r=a.filename??"data-table.csv",l=a.scope??"filtered",n=a.columns?new Set(a.columns):void 0,d=t.getVisibleLeafColumns().filter(c=>!le(c.id)&&c.id!=="__spacer__"&&(!n||n.has(c.id))),i=Xe(t,l),h=[];(a.includeHeaders??true)&&h.push(d.map(c=>typeof c.columnDef.header=="string"?c.columnDef.header:Re(c.id)));for(let c of i)h.push(d.map(w=>{let x=c.getValue(w.id);return a.getCellValue?a.getCellValue({row:c.original,rowId:c.id,columnId:w.id,value:x}):x}));let f=a.lineEnding??`\r -`,s=a.escapeFormulaValues??true,S=h.map(c=>c.map(w=>Ye(w,s)).join(",")).join(f);if(a.onExport){await a.onExport({csv:S,filename:r,rows:i.map(c=>c.original),scope:l});return}if(typeof window>"u")return;let C=new Blob([S],{type:"text/csv;charset=utf-8"}),u=window.URL.createObjectURL(C),m=window.document.createElement("a");m.href=u,m.download=r,m.click(),window.URL.revokeObjectURL(u);}function Xe(e,t){switch(t){case "page":return e.getRowModel().rows;case "selected":return e.getPrePaginationRowModel().rows.filter(a=>a.getIsSelected());case "all":return e.getCoreRowModel().rows;default:return e.getPrePaginationRowModel().rows}}function Ye(e,t){let a=G(e);return t&&typeof e=="string"&&/^[\t\r ]*[=+\-@]/.test(e)&&(a=`'${a}`),/[",\n\r]/.test(a)?`"${a.replace(/"/g,'""')}"`:a}function Yt(e){let t=[],a=[];for(let[r,l]of e.entries()){let n=et(l,r);l.meta?.fixed==="left"&&t.push(n),l.meta?.fixed==="right"&&a.push(n);}return {left:t,right:a}}function et(e,t){if(e.id)return e.id;let a=tt(e);return a||`column-${t}`}function tt(e){if("accessorKey"in e&&typeof e.accessorKey=="string")return e.accessorKey}function ea(e){let t=e.getIsPinned();return t||(e.id==="__select__"||e.id==="__expand__"?"left":e.id==="__actions__"?"right":e.columnDef.meta?.fixed)}function ta(e,t,a$1){let r=a$1?.isUtilityColumn??false;return a("sticky backdrop-blur box-border",t.pinnedColumn,!r&&"border-dotted",r?t.pinnedUtilityColumn:void 0,e==="left"?"border-r-1":"border-l")}function le(e){return e==="__select__"||e==="__expand__"||e==="__actions__"}function we(e){switch(e){case "compact":return "h-8 py-1";case "spacious":return "h-14 py-4";default:return}}function ie(e){switch(e){case "compact":return "py-1.5";case "spacious":return "py-4";default:return}}function aa(e,t,a){let r=e.includes(t)?e.slice():[...e,t],l=r.indexOf(t),n=r.indexOf(a);if(l<0||n<0||l===n)return r;let[d]=r.splice(l,1);return r.splice(n,0,d),r}function Re(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function at({columnLayouts:e,components:t,currentDensity:a$1,draftValues:r,dragAndDrop:l,explicitCustomCellColumnIds:n,getRowClassName:d,isDraggable:i$1,isEditing:h$1,isExpanded:f,isInitialLoadingRow:s,isSelected:S,loadingState:C,onRowClick:u,originalRow:m,renderExpandedRow:c,row:w,setDraftValues:x,uiClassNames:N,visibleCells:D,visibleLeafColumnCount:L}){let{Checkbox:z,Input:v,Skeleton:P,TableCell:q,TableRow:J}=t;return jsxs(k.Fragment,{children:[jsx(J,{"data-row-id":w.id,draggable:s?false:i$1,"data-loading":C?.isLoading||void 0,"data-state":s?void 0:S?"selected":void 0,tabIndex:u&&!s?0:void 0,className:a(!s&&d?.(m),N.row,S&&!s&&N.rowSelected,u&&!s&&"cursor-pointer",s&&"pointer-events-none"),onClick:g=>{s||g.target?.closest("[data-row-click-ignore='true']")||u?.({row:m,rowId:w.id});},onKeyDown:g=>{s||!u||g.key!=="Enter"&&g.key!==" "||g.target?.closest("[data-row-click-ignore='true']")||(g.preventDefault(),u({row:m,rowId:w.id}));},onDragStart:g=>{s||l?.onRowDragStart?.({row:m,rowId:w.id,event:g});},onDragEnd:g=>{s||l?.onRowDragEnd?.({row:m,rowId:w.id,event:g});},children:D.map(g=>{let I=g.column.columnDef.meta,U=g.getContext(),oe=g.getValue(),E=e.get(g.column.id),K=E?.isSelectionColumn??false,B=E?.isExpansionColumn??false,F=E?.isActionsColumn??false,Z=E?.isSpacerColumn??false,Q=i(I?.hideOn),A=s||ae(m)?void 0:typeof I?.cellClassName=="function"?I.cellClassName({row:m,value:oe}):I?.cellClassName;return jsx(q,{className:a("border-b",ie(a$1),N.cellBorder,E?.utilityClassName,E?.isSpacerColumn&&"border-b-0 bg-transparent p-0",E?.pinnedClassName,Q,h(U),I?.responsiveClassName,A),style:E?.cellStyle,children:jsx("div",{"data-row-click-ignore":K||B||F?"true":void 0,className:"min-w-0 max-w-full",children:C?.isLoading?I?.skeleton?.(U)??C.skeleton??jsx(P,{className:a("h-4 rounded",I?.type==="numeric"?"ml-auto w-16":I?.type==="date"?"ml-auto w-28":"w-full")}):h$1&&g.column.id!=="__select__"&&g.column.id!=="__expand__"&&g.column.id!=="__actions__"?pe(U,r,x,{Checkbox:z,Input:v}):ye(U,N,{hasCustomCell:n.has(g.column.id)||K||B||F||Z,useCustomOverflowDefaults:n.has(g.column.id)||K||B||F||Z})})},g.id)})}),!s&&c&&f?jsx(J,{children:jsx(q,{colSpan:Math.max(1,L),className:a("border-b",ie(a$1),N.cellBorder),children:c({row:m,rowId:w.id,tableRow:w})})}):null]})}function nt(e,t){return e.row.id===t.row.id&&e.row.original===t.row.original&&e.rowIndex===t.rowIndex&&e.isSelected===t.isSelected&&e.isInitialLoadingRow===t.isInitialLoadingRow&&e.isEditing===t.isEditing&&e.isExpanded===t.isExpanded&&e.isDraggable===t.isDraggable&&ot(e.loadingState,t.loadingState)&&rt(e.visibleCells,t.visibleCells)&&e.components===t.components&<(e.columnLayouts,t.columnLayouts,t.visibleCells)&&e.currentDensity===t.currentDensity&&e.renderExpandedRow===t.renderExpandedRow&&e.onRowClick===t.onRowClick&&e.dragAndDrop===t.dragAndDrop&&e.getRowClassName===t.getRowClassName&&e.uiClassNames===t.uiClassNames&&e.explicitCustomCellColumnIds===t.explicitCustomCellColumnIds&&(!e.isEditing||e.draftValues===t.draftValues)}function ot(e,t){return e?.isLoading===t?.isLoading&&e?.skeleton===t?.skeleton}function rt(e,t){return e.length===t.length&&e.every((a,r)=>{let l=t[r];return l?.id===a.id&&l.column.id===a.column.id})}function lt(e,t,a){return a.every(r=>{let l=e.get(r.column.id),n=t.get(r.column.id);return l?.fixedSide===n?.fixedSide&&l?.isActionsColumn===n?.isActionsColumn&&l?.isExpansionColumn===n?.isExpansionColumn&&l?.isSelectionColumn===n?.isSelectionColumn&&l?.isSpacerColumn===n?.isSpacerColumn&&l?.isUtilityColumn===n?.isUtilityColumn&&l?.pinnedClassName===n?.pinnedClassName&&l?.utilityClassName===n?.utilityClassName&&it(l?.cellStyle,n?.cellStyle)})}function it(e,t){return e?.width===t?.width&&e?.minWidth===t?.minWidth&&e?.maxWidth===t?.maxWidth&&e?.insetInlineStart===t?.insetInlineStart&&e?.insetInlineEnd===t?.insetInlineEnd}var Se=k.memo(at,nt);function ct({currentDensity:e,currentSorting:t,draggedColumnIdRef:a$1,enableColumnReordering:r,enableColumnResizing:l,header:n,headerGroupHeaders:d,layout:i$1,primeColumnForResize:h,reorderColumn:f,resetColumnSize:s,TableHead:S,uiClassNames:C}){let u=n.column.columnDef.meta,m=n.column.getCanSort(),c=n.column.getIsSorted(),w=t.findIndex(D=>D.id===n.column.id),x=r&&!i$1.isUtilityColumn&&!i$1.isSpacerColumn,N=i(u?.hideOn);return jsxs(S,{colSpan:n.colSpan,"data-column-id":n.column.id,className:a("relative border-b",we(e),i$1.utilityClassName,i$1.isSpacerColumn&&"border-b-1 bg-transparent p-0",i$1.pinnedClassName,N,g(n.getContext()),u?.headerClassName,u?.responsiveClassName),style:i$1.headerStyle,"aria-sort":c==="asc"?"ascending":c==="desc"?"descending":m?"none":void 0,draggable:x,tabIndex:x?0:void 0,onDragStart:x?D=>{a$1.current=n.column.id,D.dataTransfer.effectAllowed="move";}:void 0,onDragOver:x?D=>{D.preventDefault(),D.dataTransfer.dropEffect="move";}:void 0,onDrop:x?D=>{D.preventDefault();let L=a$1.current;a$1.current=null,L&&f(L,n.column.id);}:void 0,onKeyDown:x?D=>{if(!D.altKey||D.key!=="ArrowLeft"&&D.key!=="ArrowRight")return;D.preventDefault();let L=d.filter(P=>!le(P.column.id)&&P.column.id!=="__spacer__"),z=L.findIndex(P=>P.column.id===n.column.id),v=L[D.key==="ArrowLeft"?z-1:z+1];v&&f(n.column.id,v.column.id);}:void 0,children:[n.isPlaceholder?null:m?jsxs("button",{type:"button",className:a("flex w-full items-center gap-2 font-medium",g(n.getContext())),onClick:n.column.getToggleSortingHandler(),children:[jsx("span",{className:"truncate",children:flexRender(n.column.columnDef.header,n.getContext())}),c?jsxs(Fragment,{children:[jsx(be,{className:a("size-4 shrink-0 transition-transform",c==="desc"?"rotate-0":"rotate-180")}),t.length>1&&w>=0?jsx("span",{className:"inline-flex size-4 shrink-0 items-center justify-center rounded-full text-[10px] leading-none",children:w+1}):null]}):jsx(ge,{className:a("size-4 shrink-0",C.headerSortIcon??"opacity-70")})]}):flexRender(n.column.columnDef.header,n.getContext()),l&&n.column.getCanResize()?jsx("div",{onDoubleClick:()=>{s(n.column.id);},onMouseDown:D=>{h(n.column.id,n.getSize()),n.getResizeHandler()(D);},onTouchStart:D=>{h(n.column.id,n.getSize()),n.getResizeHandler()(D);},className:a("absolute inset-y-0 right-0 z-50 h-full w-3 translate-x-1/2 cursor-col-resize touch-none select-none after:absolute after:top-0 after:left-1/2 after:h-full after:w-px after:-translate-x-1/2",C.resizeHandle??"after:bg-current after:opacity-20 hover:after:opacity-70",n.column.getIsResizing()&&(C.resizeHandleActive??"after:opacity-100"))}):null]},n.id)}function dt(e,t){return e.header.id===t.header.id&&e.header.column.id===t.header.column.id&&e.currentDensity===t.currentDensity&&e.enableColumnReordering===t.enableColumnReordering&&e.enableColumnResizing===t.enableColumnResizing&&e.TableHead===t.TableHead&&e.uiClassNames===t.uiClassNames&&e.draggedColumnIdRef===t.draggedColumnIdRef&&e.primeColumnForResize===t.primeColumnForResize&&e.reorderColumn===t.reorderColumn&&e.resetColumnSize===t.resetColumnSize&&e.selectionState===t.selectionState&&ut(e.currentSorting,t.currentSorting)&&mt(e.headerGroupHeaders,t.headerGroupHeaders)&&ft(e.layout,t.layout)}function ut(e,t){return e.length===t.length&&e.every((a,r)=>{let l=t[r];return l?.id===a.id&&l.desc===a.desc})}function mt(e,t){return e.length===t.length&&e.every((a,r)=>t[r]?.id===a.id)}function ft(e,t){return e.fixedSide===t.fixedSide&&e.isSpacerColumn===t.isSpacerColumn&&e.isUtilityColumn===t.isUtilityColumn&&e.pinnedClassName===t.pinnedClassName&&e.utilityClassName===t.utilityClassName&&e.headerStyle?.width===t.headerStyle?.width&&e.headerStyle?.minWidth===t.headerStyle?.minWidth&&e.headerStyle?.maxWidth===t.headerStyle?.maxWidth&&e.headerStyle?.insetInlineStart===t.headerStyle?.insetInlineStart&&e.headerStyle?.insetInlineEnd===t.headerStyle?.insetInlineEnd}var xe=k.memo(ct,dt);function Ra({bodyRowComponents:e,columnLayouts:t,currentDensity:a$1,currentSorting:r=[],DataTableEmptyState:l,dragAndDrop:n,draggedColumnIdRef:d,draftValues:i,editingRowId:h,emptyNode:f,enableColumnReordering:s,enableColumnResizing:S,explicitCustomCellColumnIds:C,fillMinWidth:u,flexGrow:m,getColumnLayout:c,getRowClassName:w,getRowLoadingState:x,infiniteScroll:N,layoutMode:D,localSearchValue:L,onRowClick:z,primeColumnForResize:v,renderedRows:P,renderExpandedRow:q,reorderColumn:J,resetColumnSize:g,resolvedLabels:I,rowsToRender:U,ScrollArea:oe,ScrollBar:E,sentinelRef:K,setDraftValues:B,shouldRenderInitialLoading:F,stickyHeader:Z,summaryRows:Q,table:A,tableClassName:Me,tableContainerClassName:Le,Table:Ee,TableBody:Ne,TableCell:X,TableFooter:Pe="tfoot",TableHead:Ae,TableHeader:He,TableRow:W,tableScrollContainerRef:_e,uiClassNames:H,virtualPaddingBottom:de,virtualPaddingTop:ue,visibleLeafColumnCount:Y,visibleLeafColumns:ze}){let ve=A.getIsAllPageRowsSelected()?true:A.getIsSomePageRowsSelected()?"indeterminate":false;return jsx("div",{"data-dtp-slot":"data-table-table-shell",className:a("box-border border-2 border-transparent transition-colors",m?"flex min-h-0 flex-1 flex-col":"h-full",n?.isDragging&&(H.dragActive??"rounded-md border-dashed")),children:jsx("div",{ref:_e,className:a(m?"flex min-h-0 flex-1 flex-col":"h-full"),children:jsxs(oe,{className:a("rounded-md border",m?"min-h-0 flex-1":"h-full",H.tableContainer,H.tableScrollArea,Le),children:[jsx("div",{className:"min-h-full",children:jsxs(Ee,{className:a("w-full table-fixed border-separate border-spacing-0",Me),style:{minWidth:D==="fill"&&u||void 0,width:D==="fit"?A.getTotalSize():"100%"},children:[jsx("colgroup",{children:A.getVisibleLeafColumns().map(y=>{let M=c(y.id);return jsx("col",{style:M.colStyle},y.id)})}),jsx(He,{className:a(Z?H.tableStickyHeader??"sticky top-0 z-30 backdrop-blur":void 0),children:A.getHeaderGroups().map(y=>jsx(W,{children:y.headers.map(M=>jsx(xe,{currentDensity:a$1,currentSorting:r,draggedColumnIdRef:d,enableColumnReordering:s,enableColumnResizing:S,header:M,headerGroupHeaders:y.headers,layout:c(M.column.id),primeColumnForResize:v,reorderColumn:J,resetColumnSize:g,selectionState:M.column.id==="__select__"?ve:void 0,TableHead:Ae,uiClassNames:H},M.id))},y.id))}),jsx(Ne,{children:P.length?jsxs(Fragment,{children:[ue>0?jsx(W,{"aria-hidden":"true",children:jsx(X,{colSpan:Math.max(1,Y),className:"border-b-0 p-0",style:{height:ue}})}):null,U.map(({row:y,rowIndex:M})=>{let V=y.original,_=ae(V),j=_?{isLoading:true}:x?.(V,M),Ue=typeof j=="boolean"?{isLoading:j}:j,Ve=_?false:n?.getRowDraggable?.(V)??false;return jsx(Se,{columnLayouts:t,components:e,currentDensity:a$1,draftValues:i,dragAndDrop:n,explicitCustomCellColumnIds:C,getRowClassName:w,isDraggable:Ve,isEditing:h===y.id,isExpanded:y.getIsExpanded(),isInitialLoadingRow:_,isSelected:y.getIsSelected(),loadingState:Ue,onRowClick:z,originalRow:V,renderExpandedRow:q,row:y,rowIndex:M,setDraftValues:B,uiClassNames:H,visibleCells:y.getVisibleCells(),visibleLeafColumnCount:Y},y.id)}),de>0?jsx(W,{"aria-hidden":"true",children:jsx(X,{colSpan:Math.max(1,Y),className:"border-b-0 p-0",style:{height:de}})}):null]}):jsx(W,{children:jsx(X,{colSpan:Math.max(1,Y),className:"h-full grow",children:jsx("div",{className:"flex h-full min-h-full w-full grow items-center justify-center",children:f??jsx(l,{title:L?I.noMatchingRowsTitle:I.noRowsTitle,description:L?I.noMatchingRowsDescription:I.noRowsDescription})})})})}),Q.length?jsx(Pe,{children:Q.map(y=>jsx(W,{children:ze.map((M,V)=>{let _=y.cells[M.id]??(V===0?y.label:null);return jsx(X,{className:a("border-b font-medium",H.cellBorder),children:typeof _=="function"?_({rows:A.getFilteredRowModel().rows.map(j=>j.original),columnId:M.id}):_},`${y.key}-${M.id}`)})},y.key))}):null]})}),N?.enabled&&P.length&&!F?jsx("div",{className:"px-4 pb-4",children:jsx("div",{ref:K,className:"h-4 w-full"})}):null,jsx(E,{orientation:"horizontal"})]})})})}export{Zt as A,Qe as B,Qt as C,Xt as D,Yt as E,et as F,tt as G,ea as H,ta as I,le as J,aa as K,Re as L,Dt as M,Se as N,xe as O,Ra as P,yt as a,ht as b,be as c,wt as d,Rt as e,St as f,It as g,kt as h,xt as i,Mt as j,Lt as k,Et as l,Nt as m,Pt as n,At as o,Ht as p,_t as q,zt as r,ge as s,vt as t,Gt as u,$t as v,ae as w,qt as x,Jt as y,Ze as z};//# sourceMappingURL=chunk-HOUWU4KF.js.map -//# sourceMappingURL=chunk-HOUWU4KF.js.map \ No newline at end of file diff --git a/dist/chunk-HOUWU4KF.js.map b/dist/chunk-HOUWU4KF.js.map deleted file mode 100644 index 3dec8da..0000000 --- a/dist/chunk-HOUWU4KF.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/core/data-table/use-row-editing.tsx","../src/core/icons.tsx","../src/core/data-table/data-table-cell-content.tsx","../src/core/data-table/data-table-utils.ts","../src/core/data-table/data-table-body-row.tsx","../src/core/data-table/data-table-header-cell.tsx","../src/core/data-table/data-table-table-panel.tsx"],"names":["useRowEditing","columns","editableRows","onError","editingRowId","setEditingRowId","draftValues","setDraftValues","draftValuesRef","isSavingEdit","setIsSavingEdit","cancelEditing","startEditingRow","row","rowId","initialValues","defaultDraftValues","saveEdit","error","draft","column","renderEditableCell","context","components","Checkbox","Input","meta","accessorKey","draftValue","setDraftValue","value","current","inputType","getEditableInputType","jsx","checked","getEditableInputValue","event","rawValue","parsedValue","parseEditableInputValue","type","previousValue","Icon","children","viewBox","props","IconAdjustmentsHorizontal","jsxs","IconCheck","IconChevronDown","IconChevronLeft","IconChevronRight","IconChevronUp","IconChevronsLeft","IconChevronsRight","IconClock","IconDatabase","IconDots","IconDownload","IconEdit","IconEye","IconEyeOff","IconInbox","IconLayoutGrid","IconList","IconSearch","IconSelector","IconX","renderDataTableCellContent","classNames","options","hasCustomCell","renderedCellContent","flexRender","hasComplexRenderedContent","isComplexRenderedCellContent","resolvedOverflow","resolveDataTableCellOverflow","cn","getCellOverflowClassName","formatDateValue","content","formatCellValue","useCustomOverflowDefaults","overflow","Ce","DATA_TABLE_LOADING_ROW","UTILITY_COLUMN_SIZE","createDataTableLoadingRows","count","_","index","isDataTableLoadingRow","getDataTableLoadingRowId","getConfiguredColumnMinWidth","minSize","decorateFilterableColumn","childColumn","filter","columnId","filterValue","hasFilterValue","optionValue","normalizeFilterValue","normalizeColumnFilterOptions","option","startCase","dataTableGlobalFilterFn","normalizedQuery","exportDataTableCsv","csvExport","table","filename","scope","exportColumnIds","isUtilityColumnId","rows","getCsvExportRows","csvRows","lineEnding","escapeFormulaValues","csv","escapeCsvCell","blob","url","anchor","text","getInitialColumnPinning","left","right","getColumnId","getAccessorKey","getFixedSide","pinnedSide","getPinnedColumnClassName","side","uiClassNames","isUtilityColumn","getDensityHeaderClassName","density","getDensityCellClassName","moveColumnInOrder","currentOrder","sourceColumnId","targetColumnId","order","sourceIndex","targetIndex","source","character","DataTableBodyRowInner","columnLayouts","currentDensity","dragAndDrop","explicitCustomCellColumnIds","getRowClassName","isDraggable","isEditing","isExpanded","isInitialLoadingRow","isSelected","loadingState","onRowClick","originalRow","renderExpandedRow","visibleCells","visibleLeafColumnCount","Skeleton","TableCell","TableRow","ne","cell","cellContext","layout","isSelectionColumn","isExpansionColumn","isActionsColumn","isSpacerColumn","hideClassName","hideOnClassName","cellClassName","cellAlignClassName","areDataTableBodyRowsEqual","previous","next","sameLoadingState","sameVisibleCells","sameColumnLayouts","nextCell","cells","previousLayout","nextLayout","sameCellStyle","DataTableBodyRow","DataTableHeaderCellInner","currentSorting","draggedColumnIdRef","enableColumnReordering","enableColumnResizing","header","headerGroupHeaders","primeColumnForResize","reorderColumn","resetColumnSize","TableHead","canSort","sortingState","sortingIndex","sort","canReorderColumn","headerAlignClassName","headers","item","currentIndex","target","Fragment","areDataTableHeaderCellsEqual","sameSorting","sameHeaderGroupHeaders","sameHeaderLayout","nextSort","DataTableHeaderCell","ke","DataTableTablePanel","bodyRowComponents","DataTableEmptyState","emptyNode","fillMinWidth","flexGrow","getColumnLayout","getRowLoadingState","infiniteScroll","layoutMode","localSearchValue","renderedRows","resolvedLabels","rowsToRender","ScrollArea","ScrollBar","sentinelRef","shouldRenderInitialLoading","stickyHeader","summaryRows","tableClassName","tableContainerClassName","Table","TableBody","TableFooter","TableHeader","tableScrollContainerRef","virtualPaddingBottom","virtualPaddingTop","visibleLeafColumns","selectionState","headerGroup","rowIndex","resolvedLoadingState","summaryRow"],"mappings":"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","file":"chunk-HOUWU4KF.js","sourcesContent":["import * as React from \"react\";\nimport type { CellContext } from \"@tanstack/react-table\";\nimport type {\n DataTableColumnDef,\n DataTableColumnType,\n DataTableEditableRowsConfig,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\n\nexport function useRowEditing({\n columns,\n editableRows,\n onError,\n}: {\n columns: Array>;\n editableRows: DataTableEditableRowsConfig | undefined;\n onError?: (error: unknown, row: TData) => void;\n}) {\n const [editingRowId, setEditingRowId] = React.useState(null);\n const [draftValues, setDraftValues] = React.useState<\n Record\n >({});\n const draftValuesRef = React.useRef(draftValues);\n const [isSavingEdit, setIsSavingEdit] = React.useState(false);\n\n React.useEffect(() => {\n draftValuesRef.current = draftValues;\n }, [draftValues]);\n\n const cancelEditing = React.useCallback(() => {\n setEditingRowId(null);\n setDraftValues({});\n }, []);\n\n const startEditingRow = React.useCallback(\n (row: TData, rowId: string) => {\n const initialValues =\n editableRows?.getInitialValues?.(row) ??\n defaultDraftValues(row, columns);\n setDraftValues(initialValues);\n setEditingRowId(rowId);\n },\n [columns, editableRows],\n );\n\n const saveEdit = React.useCallback(\n async (row: TData) => {\n if (!editableRows) {\n return;\n }\n\n setIsSavingEdit(true);\n try {\n await editableRows.onSaveRow(row, draftValuesRef.current);\n React.startTransition(cancelEditing);\n } catch (error) {\n onError?.(error, row);\n } finally {\n setIsSavingEdit(false);\n }\n },\n [cancelEditing, editableRows, onError],\n );\n\n return {\n cancelEditing,\n draftValues,\n editingRowId,\n isSavingEdit,\n saveEdit,\n setDraftValues,\n setEditingRowId,\n startEditingRow,\n };\n}\n\nfunction defaultDraftValues(\n row: TData,\n columns: Array>,\n) {\n return columns.reduce>((draft, column) => {\n if (\"accessorKey\" in column && typeof column.accessorKey === \"string\") {\n draft[column.accessorKey] = (row as Record)[\n column.accessorKey\n ];\n }\n return draft;\n }, {});\n}\n\nexport function renderEditableCell(\n context: CellContext,\n draftValues: Record,\n setDraftValues: React.Dispatch>>,\n components: Pick,\n) {\n const { Checkbox, Input } = components;\n const column = context.column.columnDef as DataTableColumnDef;\n const meta = column.meta;\n const accessorKey =\n \"accessorKey\" in column && typeof column.accessorKey === \"string\"\n ? column.accessorKey\n : context.column.id;\n const draftValue = draftValues[accessorKey];\n const setDraftValue = (value: unknown) => {\n setDraftValues((current) => ({\n ...current,\n [accessorKey]: value,\n }));\n };\n\n if (meta?.renderEditCell) {\n return meta.renderEditCell({\n cell: context,\n row: context.row.original,\n value: context.getValue(),\n draftValue,\n setDraftValue,\n });\n }\n\n const inputType = getEditableInputType(meta?.type, draftValue);\n\n if (typeof draftValue === \"boolean\") {\n return (\n {\n setDraftValue(checked === true);\n }}\n />\n );\n }\n\n return (\n ) => {\n const rawValue = event.target.value;\n const parsedValue = meta?.parseEditValue\n ? meta.parseEditValue(rawValue, context)\n : parseEditableInputValue(rawValue, inputType, draftValue);\n setDraftValue(parsedValue);\n }}\n />\n );\n}\n\nfunction getEditableInputType(\n type: DataTableColumnType | undefined,\n value: unknown,\n) {\n if (type === \"numeric\" || typeof value === \"number\") {\n return \"number\";\n }\n\n if (type === \"date\" || value instanceof Date) {\n return \"datetime-local\";\n }\n\n return \"text\";\n}\n\nfunction getEditableInputValue(value: unknown, inputType = \"text\") {\n if (value == null) {\n return \"\";\n }\n\n if (value instanceof Date) {\n return inputType === \"datetime-local\"\n ? value.toISOString().slice(0, 16)\n : value.toISOString();\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n return \"\";\n}\n\nfunction parseEditableInputValue(\n value: string,\n inputType: string,\n previousValue: unknown,\n) {\n if (inputType === \"number\") {\n return value === \"\" ? null : Number(value);\n }\n\n if (inputType === \"datetime-local\") {\n if (!value) {\n return null;\n }\n return previousValue instanceof Date ? new Date(value) : value;\n }\n\n return value;\n}\n","import * as React from \"react\";\n\ntype IconProps = React.SVGProps;\n\nfunction Icon({\n children,\n viewBox = \"0 0 24 24\",\n ...props\n}: IconProps & { children: React.ReactNode }) {\n return (\n \n {children}\n \n );\n}\n\nexport function IconAdjustmentsHorizontal(props: IconProps) {\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nexport function IconArchive(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconBell(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconBriefcase(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconCheck(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronDown(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronLeft(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronRight(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronUp(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconChevronsLeft(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconChevronsRight(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconClock(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconDatabase(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconDots(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconDownload(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconEdit(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconEye(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconEyeOff(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconFileUpload(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconInbox(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconLayoutGrid(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconList(props: IconProps) {\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nexport function IconRefresh(props: IconProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport function IconSearch(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconSelector(props: IconProps) {\n return (\n \n \n \n \n );\n}\n\nexport function IconSparkles(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconStar(props: IconProps) {\n return (\n \n \n \n );\n}\n\nexport function IconUserCheck(props: IconProps) {\n return (\n \n \n \n \n \n );\n}\n\nexport function IconX(props: IconProps) {\n return (\n \n \n \n \n );\n}\n","import * as React from \"react\";\nimport { flexRender, type CellContext } from \"@tanstack/react-table\";\nimport { IconClock } from \"../icons\";\nimport type {\n DataTableCellOverflow,\n DataTableColumnDef,\n} from \"../types\";\nimport type { DataTableUiClassNames } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nexport function renderDataTableCellContent(\n context: CellContext,\n classNames?: DataTableUiClassNames,\n options?: {\n hasCustomCell?: boolean;\n useCustomOverflowDefaults?: boolean;\n },\n) {\n const column = context.column.columnDef as DataTableColumnDef;\n const meta = column.meta;\n const value = context.getValue();\n const hasCustomCell = options?.hasCustomCell ?? false;\n const renderedCellContent = hasCustomCell && column.cell\n ? flexRender(column.cell, context)\n : undefined;\n const hasComplexRenderedContent = isComplexRenderedCellContent(\n renderedCellContent,\n );\n const resolvedOverflow = resolveDataTableCellOverflow({\n context,\n useCustomOverflowDefaults: options?.useCustomOverflowDefaults ?? false,\n value,\n });\n\n if (meta?.type === \"date\" && !hasCustomCell) {\n return (\n \n \n {formatDateValue(value)}\n \n );\n }\n\n const content =\n renderedCellContent !== undefined &&\n renderedCellContent !== null &&\n renderedCellContent !== \"\"\n ? renderedCellContent\n : value == null || value === \"\"\n ? -\n : formatCellValue(value);\n\n return (\n *]:max-w-full [&>*]:min-w-0\",\n )}\n >\n {content}\n \n );\n}\n\nfunction resolveDataTableCellOverflow({\n context,\n useCustomOverflowDefaults,\n value,\n}: {\n context: CellContext;\n useCustomOverflowDefaults: boolean;\n value: unknown;\n}): DataTableCellOverflow {\n const column = context.column.columnDef as DataTableColumnDef;\n const resolvedOverflow =\n typeof column.meta?.overflow === \"function\"\n ? column.meta.overflow({\n row: context.row.original,\n value,\n })\n : column.meta?.overflow;\n\n if (resolvedOverflow) {\n return resolvedOverflow;\n }\n\n return useCustomOverflowDefaults ? \"clip\" : \"truncate\";\n}\n\nfunction getCellOverflowClassName(overflow: DataTableCellOverflow) {\n switch (overflow) {\n case \"clip\":\n return \"block overflow-hidden whitespace-nowrap\";\n case \"wrap\":\n return \"block overflow-hidden whitespace-normal break-words\";\n case \"visible\":\n return \"block overflow-visible whitespace-normal\";\n case \"truncate\":\n default:\n return \"block overflow-hidden text-ellipsis whitespace-nowrap\";\n }\n}\n\nfunction isComplexRenderedCellContent(content: React.ReactNode) {\n if (content == null) {\n return false;\n }\n\n return (\n React.isValidElement(content) ||\n Array.isArray(content) ||\n typeof content === \"object\"\n );\n}\n\nfunction formatDateValue(value: unknown) {\n if (typeof value === \"number\") {\n return new Date(value * 1000).toLocaleString();\n }\n\n if (typeof value === \"string\" && value) {\n return value;\n }\n\n return \"-\";\n}\n\nfunction formatCellValue(value: unknown) {\n if (value instanceof Date) {\n return value.toLocaleString();\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value);\n } catch {\n return \"-\";\n }\n}\n","import type {\n Column,\n ColumnDef,\n ColumnPinningState,\n Row,\n Table as TanStackTable,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableColumnDef,\n DataTableColumnFilterOption,\n DataTableCsvExportOptions,\n DataTableCsvExportScope,\n DataTableDensity,\n DataTableLabels,\n} from \"../types\";\nimport type { DataTableUiClassNames } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nconst DATA_TABLE_LOADING_ROW = Symbol(\"data-table-loading-row\");\n\nexport const UTILITY_COLUMN_SIZE = 50;\n\ntype DataTableLoadingRow = {\n [DATA_TABLE_LOADING_ROW]: true;\n index: number;\n};\n\nexport function createDataTableLoadingRows(count: number) {\n return Array.from({ length: count }, (_, index) => {\n return {\n [DATA_TABLE_LOADING_ROW]: true,\n index,\n } as DataTableLoadingRow as TData;\n });\n}\n\nexport function isDataTableLoadingRow(\n row: unknown,\n): row is DataTableLoadingRow {\n return Boolean(\n row &&\n typeof row === \"object\" &&\n DATA_TABLE_LOADING_ROW in (row as Record),\n );\n}\n\nexport function getDataTableLoadingRowId(index: number) {\n return `__loading__${index}`;\n}\n\nexport function getConfiguredColumnMinWidth(\n column: DataTableColumnDef,\n) {\n if (typeof column.meta?.minWidth === \"number\") {\n return column.meta.minWidth;\n }\n\n if (Object.prototype.hasOwnProperty.call(column, \"minSize\")) {\n const minSize = (column as { minSize?: unknown }).minSize;\n\n if (typeof minSize === \"number\") {\n return minSize;\n }\n }\n\n return undefined;\n}\n\nexport function decorateFilterableColumn(\n column: DataTableColumnDef,\n): ColumnDef {\n if (\"columns\" in column && Array.isArray(column.columns)) {\n return {\n ...column,\n columns: column.columns.map((childColumn) =>\n decorateFilterableColumn(\n childColumn as DataTableColumnDef,\n ),\n ),\n };\n }\n\n const filter = column.meta?.filter;\n if (!filter || column.filterFn) {\n return column;\n }\n\n return {\n ...column,\n filterFn: (row, columnId, filterValue) => {\n if (!hasFilterValue(filterValue)) {\n return true;\n }\n\n const value = row.getValue(columnId);\n const optionValue =\n filter.getOptionValue?.(value, row.original) ??\n normalizeFilterValue(value);\n\n if (filter.type === \"multi\") {\n return Array.isArray(filterValue)\n ? filterValue.map(String).includes(optionValue)\n : true;\n }\n\n if (filter.type === \"select\") {\n return optionValue === String(filterValue);\n }\n\n return normalizeFilterValue(value)\n .toLowerCase()\n .includes(String(filterValue).toLowerCase());\n },\n };\n}\n\nexport function normalizeColumnFilterOptions(\n options: Array,\n) {\n return options.map((option) =>\n typeof option === \"string\"\n ? { label: startCase(option), value: option }\n : option,\n );\n}\n\nexport function normalizeFilterValue(value: unknown) {\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 try {\n return JSON.stringify(value);\n } catch {\n return \"\";\n }\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\" ||\n typeof value === \"symbol\"\n ) {\n return String(value);\n }\n\n return \"\";\n}\n\nexport function hasFilterValue(value: unknown) {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n return value !== undefined && value !== null && value !== \"\";\n}\n\nexport function dataTableGlobalFilterFn(\n row: Row,\n columnId: string,\n filterValue: unknown,\n) {\n const normalizedQuery = normalizeFilterValue(filterValue)\n .trim()\n .toLowerCase();\n\n if (!normalizedQuery) {\n return true;\n }\n\n return normalizeFilterValue(row.getValue(columnId))\n .toLowerCase()\n .includes(normalizedQuery);\n}\n\nexport async function exportDataTableCsv({\n csvExport,\n table,\n}: {\n csvExport: boolean | DataTableCsvExportOptions;\n table: TanStackTable;\n labels: DataTableLabels;\n}) {\n if (csvExport === false) {\n return;\n }\n\n const options: DataTableCsvExportOptions =\n csvExport === true ? {} : csvExport;\n const filename = options.filename ?? \"data-table.csv\";\n const scope = options.scope ?? \"filtered\";\n const exportColumnIds = options.columns\n ? new Set(options.columns)\n : undefined;\n const columns = table\n .getVisibleLeafColumns()\n .filter(\n (column) =>\n !isUtilityColumnId(column.id) &&\n column.id !== \"__spacer__\" &&\n (!exportColumnIds || exportColumnIds.has(column.id)),\n );\n const rows = getCsvExportRows(table, scope);\n const csvRows: Array> = [];\n\n if (options.includeHeaders ?? true) {\n csvRows.push(\n columns.map((column) =>\n typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : startCase(column.id),\n ),\n );\n }\n\n for (const row of rows) {\n csvRows.push(\n columns.map((column) => {\n const value = row.getValue(column.id);\n return options.getCellValue\n ? options.getCellValue({\n row: row.original,\n rowId: row.id,\n columnId: column.id,\n value,\n })\n : value;\n }),\n );\n }\n\n const lineEnding = options.lineEnding ?? \"\\r\\n\";\n const escapeFormulaValues = options.escapeFormulaValues ?? true;\n const csv = csvRows\n .map((row) =>\n row\n .map((value) => escapeCsvCell(value, escapeFormulaValues))\n .join(\",\"),\n )\n .join(lineEnding);\n\n if (options.onExport) {\n await options.onExport({\n csv,\n filename,\n rows: rows.map((row) => row.original),\n scope,\n });\n return;\n }\n\n if (typeof window === \"undefined\") {\n return;\n }\n\n const blob = new Blob([csv], { type: \"text/csv;charset=utf-8\" });\n const url = window.URL.createObjectURL(blob);\n const anchor = window.document.createElement(\"a\");\n anchor.href = url;\n anchor.download = filename;\n anchor.click();\n window.URL.revokeObjectURL(url);\n}\n\nfunction getCsvExportRows(\n table: TanStackTable,\n scope: DataTableCsvExportScope,\n) {\n switch (scope) {\n case \"page\":\n return table.getRowModel().rows;\n case \"selected\":\n return table\n .getPrePaginationRowModel()\n .rows.filter((row) => row.getIsSelected());\n case \"all\":\n return table.getCoreRowModel().rows;\n default:\n return table.getPrePaginationRowModel().rows;\n }\n}\n\nfunction escapeCsvCell(value: unknown, escapeFormulaValues: boolean) {\n let text = normalizeFilterValue(value);\n if (\n escapeFormulaValues &&\n typeof value === \"string\" &&\n /^[\\t\\r ]*[=+\\-@]/.test(value)\n ) {\n text = `'${text}`;\n }\n if (/[\",\\n\\r]/.test(text)) {\n return `\"${text.replace(/\"/g, '\"\"')}\"`;\n }\n return text;\n}\n\nexport function getInitialColumnPinning(\n columns: Array>,\n): ColumnPinningState {\n const left: Array = [];\n const right: Array = [];\n\n for (const [index, column] of columns.entries()) {\n const columnId = getColumnId(column, index);\n if (column.meta?.fixed === \"left\") {\n left.push(columnId);\n }\n if (column.meta?.fixed === \"right\") {\n right.push(columnId);\n }\n }\n\n return { left, right };\n}\n\nexport function getColumnId(\n column: DataTableColumnDef,\n index: number,\n) {\n if (column.id) {\n return column.id;\n }\n\n const accessorKey = getAccessorKey(column);\n if (accessorKey) {\n return accessorKey;\n }\n\n return `column-${index}`;\n}\n\nexport function getAccessorKey(\n column: DataTableColumnDef,\n) {\n if (\"accessorKey\" in column && typeof column.accessorKey === \"string\") {\n return column.accessorKey;\n }\n\n return undefined;\n}\n\nexport function getFixedSide(column: Column) {\n const pinnedSide = column.getIsPinned();\n if (pinnedSide) {\n return pinnedSide;\n }\n\n if (column.id === \"__select__\") {\n return \"left\" as const;\n }\n\n if (column.id === \"__expand__\") {\n return \"left\" as const;\n }\n\n if (column.id === \"__actions__\") {\n return \"right\" as const;\n }\n\n const meta = (column.columnDef as DataTableColumnDef).meta;\n return meta?.fixed;\n}\n\nexport function getPinnedColumnClassName(\n side: \"left\" | \"right\",\n uiClassNames: DataTableUiClassNames,\n options?: { isUtilityColumn?: boolean },\n) {\n const isUtilityColumn = options?.isUtilityColumn ?? false;\n return cn(\n \"sticky backdrop-blur box-border\",\n uiClassNames.pinnedColumn,\n !isUtilityColumn && \"border-dotted\",\n isUtilityColumn ? uiClassNames.pinnedUtilityColumn : undefined,\n side === \"left\" ? \"border-r-1\" : \"border-l\",\n );\n}\n\nexport function isUtilityColumnId(columnId: string) {\n return (\n columnId === \"__select__\" ||\n columnId === \"__expand__\" ||\n columnId === \"__actions__\"\n );\n}\n\nexport function getDensityHeaderClassName(density: DataTableDensity) {\n switch (density) {\n case \"compact\":\n return \"h-8 py-1\";\n case \"spacious\":\n return \"h-14 py-4\";\n case \"comfortable\":\n default:\n return undefined;\n }\n}\n\nexport function getDensityCellClassName(density: DataTableDensity) {\n switch (density) {\n case \"compact\":\n return \"py-1.5\";\n case \"spacious\":\n return \"py-4\";\n case \"comfortable\":\n default:\n return undefined;\n }\n}\n\nexport function moveColumnInOrder(\n currentOrder: Array,\n sourceColumnId: string,\n targetColumnId: string,\n) {\n const order = currentOrder.includes(sourceColumnId)\n ? currentOrder.slice()\n : [...currentOrder, sourceColumnId];\n const sourceIndex = order.indexOf(sourceColumnId);\n const targetIndex = order.indexOf(targetColumnId);\n\n if (sourceIndex < 0 || targetIndex < 0 || sourceIndex === targetIndex) {\n return order;\n }\n\n const [source] = order.splice(sourceIndex, 1);\n order.splice(targetIndex, 0, source);\n return order;\n}\n\nexport function startCase(value: string) {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n","import * as React from \"react\";\nimport type { Cell, Row } from \"@tanstack/react-table\";\nimport type {\n DataTableColumnDef,\n DataTableDensity,\n DataTableProps,\n DataTableRowLoadingState,\n} from \"../types\";\nimport type { DataTableUiClassNames, DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport { renderDataTableCellContent } from \"./data-table-cell-content\";\nimport type { DataTableColumnLayout } from \"./use-column-layout\";\nimport {\n getDensityCellClassName,\n isDataTableLoadingRow,\n} from \"./data-table-utils\";\nimport { renderEditableCell } from \"./use-row-editing\";\nimport { cellAlignClassName, hideOnClassName } from \"../types\";\n\ntype DataTableBodyRowProps = {\n columnLayouts: ReadonlyMap;\n components: Pick<\n DataTableUiKit,\n \"Checkbox\" | \"Input\" | \"Skeleton\" | \"TableCell\" | \"TableRow\"\n >;\n currentDensity: DataTableDensity;\n draftValues: Record;\n dragAndDrop: DataTableProps[\"dragAndDrop\"];\n explicitCustomCellColumnIds: ReadonlySet;\n getRowClassName: DataTableProps[\"getRowClassName\"];\n isDraggable: boolean;\n isEditing: boolean;\n isExpanded: boolean;\n isInitialLoadingRow: boolean;\n isSelected: boolean;\n loadingState: DataTableRowLoadingState | undefined;\n onRowClick: DataTableProps[\"onRowClick\"];\n originalRow: TData;\n renderExpandedRow: DataTableProps[\"renderExpandedRow\"];\n row: Row;\n rowIndex: number;\n setDraftValues: React.Dispatch>>;\n uiClassNames: DataTableUiClassNames;\n visibleCells: Array>;\n visibleLeafColumnCount: number;\n};\n\nfunction DataTableBodyRowInner({\n columnLayouts,\n components,\n currentDensity,\n draftValues,\n dragAndDrop,\n explicitCustomCellColumnIds,\n getRowClassName,\n isDraggable,\n isEditing,\n isExpanded,\n isInitialLoadingRow,\n isSelected,\n loadingState,\n onRowClick,\n originalRow,\n renderExpandedRow,\n row,\n setDraftValues,\n uiClassNames,\n visibleCells,\n visibleLeafColumnCount,\n}: DataTableBodyRowProps) {\n const { Checkbox, Input, Skeleton, TableCell, TableRow } = components;\n\n return (\n \n ) => {\n if (isInitialLoadingRow) {\n return;\n }\n\n const target = event.target as HTMLElement | null;\n if (target?.closest(\"[data-row-click-ignore='true']\")) {\n return;\n }\n\n void onRowClick?.({ row: originalRow, rowId: row.id });\n }}\n onKeyDown={(event: React.KeyboardEvent) => {\n if (\n isInitialLoadingRow ||\n !onRowClick ||\n (event.key !== \"Enter\" && event.key !== \" \")\n ) {\n return;\n }\n\n const target = event.target as HTMLElement | null;\n if (target?.closest(\"[data-row-click-ignore='true']\")) {\n return;\n }\n\n event.preventDefault();\n void onRowClick({ row: originalRow, rowId: row.id });\n }}\n onDragStart={(event: React.DragEvent) => {\n if (isInitialLoadingRow) {\n return;\n }\n\n dragAndDrop?.onRowDragStart?.({\n row: originalRow,\n rowId: row.id,\n event,\n });\n }}\n onDragEnd={(event: React.DragEvent) => {\n if (isInitialLoadingRow) {\n return;\n }\n\n dragAndDrop?.onRowDragEnd?.({\n row: originalRow,\n rowId: row.id,\n event,\n });\n }}\n >\n {visibleCells.map((cell) => {\n const meta = (\n cell.column.columnDef as DataTableColumnDef\n ).meta;\n const cellContext = cell.getContext();\n const value = cell.getValue();\n const layout = columnLayouts.get(cell.column.id);\n const isSelectionColumn = layout?.isSelectionColumn ?? false;\n const isExpansionColumn = layout?.isExpansionColumn ?? false;\n const isActionsColumn = layout?.isActionsColumn ?? false;\n const isSpacerColumn = layout?.isSpacerColumn ?? false;\n const hideClassName = hideOnClassName(meta?.hideOn);\n const cellClassName =\n isInitialLoadingRow || isDataTableLoadingRow(originalRow)\n ? undefined\n : typeof meta?.cellClassName === \"function\"\n ? meta.cellClassName({\n row: originalRow,\n value,\n })\n : meta?.cellClassName;\n\n return (\n \n \n {loadingState?.isLoading ? (\n (meta?.skeleton?.(cellContext) ??\n loadingState.skeleton ?? (\n \n ))\n ) : isEditing &&\n cell.column.id !== \"__select__\" &&\n cell.column.id !== \"__expand__\" &&\n cell.column.id !== \"__actions__\" ? (\n renderEditableCell(cellContext, draftValues, setDraftValues, {\n Checkbox,\n Input,\n })\n ) : (\n renderDataTableCellContent(cellContext, uiClassNames, {\n hasCustomCell:\n explicitCustomCellColumnIds.has(cell.column.id) ||\n isSelectionColumn ||\n isExpansionColumn ||\n isActionsColumn ||\n isSpacerColumn,\n useCustomOverflowDefaults:\n explicitCustomCellColumnIds.has(cell.column.id) ||\n isSelectionColumn ||\n isExpansionColumn ||\n isActionsColumn ||\n isSpacerColumn,\n })\n )}\n \n \n );\n })}\n \n {!isInitialLoadingRow && renderExpandedRow && isExpanded ? (\n \n \n {renderExpandedRow({\n row: originalRow,\n rowId: row.id,\n tableRow: row,\n })}\n \n \n ) : null}\n \n );\n}\n\nfunction areDataTableBodyRowsEqual(\n previous: DataTableBodyRowProps,\n next: DataTableBodyRowProps,\n) {\n return (\n previous.row.id === next.row.id &&\n previous.row.original === next.row.original &&\n previous.rowIndex === next.rowIndex &&\n previous.isSelected === next.isSelected &&\n previous.isInitialLoadingRow === next.isInitialLoadingRow &&\n previous.isEditing === next.isEditing &&\n previous.isExpanded === next.isExpanded &&\n previous.isDraggable === next.isDraggable &&\n sameLoadingState(previous.loadingState, next.loadingState) &&\n sameVisibleCells(previous.visibleCells, next.visibleCells) &&\n previous.components === next.components &&\n sameColumnLayouts(\n previous.columnLayouts,\n next.columnLayouts,\n next.visibleCells,\n ) &&\n previous.currentDensity === next.currentDensity &&\n previous.renderExpandedRow === next.renderExpandedRow &&\n previous.onRowClick === next.onRowClick &&\n previous.dragAndDrop === next.dragAndDrop &&\n previous.getRowClassName === next.getRowClassName &&\n previous.uiClassNames === next.uiClassNames &&\n previous.explicitCustomCellColumnIds === next.explicitCustomCellColumnIds &&\n (!previous.isEditing || previous.draftValues === next.draftValues)\n );\n}\n\nfunction sameLoadingState(\n previous: DataTableRowLoadingState | undefined,\n next: DataTableRowLoadingState | undefined,\n) {\n return (\n previous?.isLoading === next?.isLoading &&\n previous?.skeleton === next?.skeleton\n );\n}\n\nfunction sameVisibleCells(\n previous: Array>,\n next: Array>,\n) {\n return (\n previous.length === next.length &&\n previous.every((cell, index) => {\n const nextCell = next[index];\n return nextCell?.id === cell.id && nextCell.column.id === cell.column.id;\n })\n );\n}\n\nfunction sameColumnLayouts(\n previous: ReadonlyMap,\n next: ReadonlyMap,\n cells: Array>,\n) {\n return cells.every((cell) => {\n const previousLayout = previous.get(cell.column.id);\n const nextLayout = next.get(cell.column.id);\n\n return (\n previousLayout?.fixedSide === nextLayout?.fixedSide &&\n previousLayout?.isActionsColumn === nextLayout?.isActionsColumn &&\n previousLayout?.isExpansionColumn === nextLayout?.isExpansionColumn &&\n previousLayout?.isSelectionColumn === nextLayout?.isSelectionColumn &&\n previousLayout?.isSpacerColumn === nextLayout?.isSpacerColumn &&\n previousLayout?.isUtilityColumn === nextLayout?.isUtilityColumn &&\n previousLayout?.pinnedClassName === nextLayout?.pinnedClassName &&\n previousLayout?.utilityClassName === nextLayout?.utilityClassName &&\n sameCellStyle(previousLayout?.cellStyle, nextLayout?.cellStyle)\n );\n });\n}\n\nfunction sameCellStyle(\n previous: React.CSSProperties | undefined,\n next: React.CSSProperties | undefined,\n) {\n return (\n previous?.width === next?.width &&\n previous?.minWidth === next?.minWidth &&\n previous?.maxWidth === next?.maxWidth &&\n previous?.insetInlineStart === next?.insetInlineStart &&\n previous?.insetInlineEnd === next?.insetInlineEnd\n );\n}\n\nexport const DataTableBodyRow = React.memo(\n DataTableBodyRowInner,\n areDataTableBodyRowsEqual,\n) as typeof DataTableBodyRowInner;\n","import * as React from \"react\";\nimport { flexRender } from \"@tanstack/react-table\";\nimport { IconChevronDown, IconSelector } from \"../icons\";\nimport type { Header, SortingState } from \"@tanstack/react-table\";\nimport type {\n DataTableColumnDef,\n DataTableDensity,\n} from \"../types\";\nimport type { DataTableUiClassNames, DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport type { DataTableColumnLayout } from \"./use-column-layout\";\nimport {\n getDensityHeaderClassName,\n isUtilityColumnId,\n} from \"./data-table-utils\";\nimport { headerAlignClassName, hideOnClassName } from \"../types\";\n\ntype DataTableHeaderCellProps = {\n currentDensity: DataTableDensity;\n currentSorting: SortingState;\n draggedColumnIdRef: React.MutableRefObject;\n enableColumnReordering: boolean;\n enableColumnResizing: boolean;\n header: Header;\n headerGroupHeaders: Array>;\n layout: DataTableColumnLayout;\n primeColumnForResize: (columnId: string, currentSize: number) => void;\n reorderColumn: (sourceColumnId: string, targetColumnId: string) => void;\n resetColumnSize: (columnId: string) => void;\n // Rendered through flexRender inside the header def; carried as a prop so\n // the memo comparator re-renders the selection header when it changes.\n selectionState?: boolean | \"indeterminate\";\n TableHead: DataTableUiKit[\"TableHead\"];\n uiClassNames: DataTableUiClassNames;\n};\n\nfunction DataTableHeaderCellInner({\n currentDensity,\n currentSorting,\n draggedColumnIdRef,\n enableColumnReordering,\n enableColumnResizing,\n header,\n headerGroupHeaders,\n layout,\n primeColumnForResize,\n reorderColumn,\n resetColumnSize,\n TableHead,\n uiClassNames,\n}: DataTableHeaderCellProps) {\n const meta = (header.column.columnDef as DataTableColumnDef)\n .meta;\n const canSort = header.column.getCanSort();\n const sortingState = header.column.getIsSorted();\n const sortingIndex = currentSorting.findIndex(\n (sort) => sort.id === header.column.id,\n );\n const canReorderColumn =\n enableColumnReordering &&\n !layout.isUtilityColumn &&\n !layout.isSpacerColumn;\n const hideClassName = hideOnClassName(meta?.hideOn);\n\n return (\n ) => {\n draggedColumnIdRef.current = header.column.id;\n event.dataTransfer.effectAllowed = \"move\";\n }\n : undefined\n }\n onDragOver={\n canReorderColumn\n ? (event: React.DragEvent) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canReorderColumn\n ? (event: React.DragEvent) => {\n event.preventDefault();\n const sourceColumnId = draggedColumnIdRef.current;\n draggedColumnIdRef.current = null;\n if (sourceColumnId) {\n reorderColumn(sourceColumnId, header.column.id);\n }\n }\n : undefined\n }\n onKeyDown={\n canReorderColumn\n ? (event: React.KeyboardEvent) => {\n if (\n !event.altKey ||\n (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\")\n ) {\n return;\n }\n\n event.preventDefault();\n const headers = headerGroupHeaders.filter(\n (item) =>\n !isUtilityColumnId(item.column.id) &&\n item.column.id !== \"__spacer__\",\n );\n const currentIndex = headers.findIndex(\n (item) => item.column.id === header.column.id,\n );\n const target =\n headers[\n event.key === \"ArrowLeft\"\n ? currentIndex - 1\n : currentIndex + 1\n ];\n if (target) {\n reorderColumn(header.column.id, target.column.id);\n }\n }\n : undefined\n }\n >\n {header.isPlaceholder ? null : canSort ? (\n \n \n {flexRender(header.column.columnDef.header, header.getContext())}\n \n {sortingState ? (\n <>\n \n {currentSorting.length > 1 && sortingIndex >= 0 ? (\n \n {sortingIndex + 1}\n \n ) : null}\n \n ) : (\n \n )}\n \n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n\n {enableColumnResizing && header.column.getCanResize() ? (\n {\n resetColumnSize(header.column.id);\n }}\n onMouseDown={(event) => {\n primeColumnForResize(header.column.id, header.getSize());\n header.getResizeHandler()(event);\n }}\n onTouchStart={(event) => {\n primeColumnForResize(header.column.id, header.getSize());\n header.getResizeHandler()(event);\n }}\n className={cn(\n \"absolute inset-y-0 right-0 z-50 h-full w-3 translate-x-1/2 cursor-col-resize touch-none select-none after:absolute after:top-0 after:left-1/2 after:h-full after:w-px after:-translate-x-1/2\",\n uiClassNames.resizeHandle ??\n \"after:bg-current after:opacity-20 hover:after:opacity-70\",\n header.column.getIsResizing() &&\n (uiClassNames.resizeHandleActive ?? \"after:opacity-100\"),\n )}\n />\n ) : null}\n \n );\n}\n\nfunction areDataTableHeaderCellsEqual(\n previous: DataTableHeaderCellProps,\n next: DataTableHeaderCellProps,\n) {\n return (\n previous.header.id === next.header.id &&\n previous.header.column.id === next.header.column.id &&\n previous.currentDensity === next.currentDensity &&\n previous.enableColumnReordering === next.enableColumnReordering &&\n previous.enableColumnResizing === next.enableColumnResizing &&\n previous.TableHead === next.TableHead &&\n previous.uiClassNames === next.uiClassNames &&\n previous.draggedColumnIdRef === next.draggedColumnIdRef &&\n previous.primeColumnForResize === next.primeColumnForResize &&\n previous.reorderColumn === next.reorderColumn &&\n previous.resetColumnSize === next.resetColumnSize &&\n previous.selectionState === next.selectionState &&\n sameSorting(previous.currentSorting, next.currentSorting) &&\n sameHeaderGroupHeaders(\n previous.headerGroupHeaders,\n next.headerGroupHeaders,\n ) &&\n sameHeaderLayout(previous.layout, next.layout)\n );\n}\n\nfunction sameSorting(previous: SortingState, next: SortingState) {\n return (\n previous.length === next.length &&\n previous.every((sort, index) => {\n const nextSort = next[index];\n return nextSort?.id === sort.id && nextSort.desc === sort.desc;\n })\n );\n}\n\nfunction sameHeaderGroupHeaders(\n previous: Array>,\n next: Array>,\n) {\n return (\n previous.length === next.length &&\n previous.every((header, index) => next[index]?.id === header.id)\n );\n}\n\nfunction sameHeaderLayout(\n previous: DataTableColumnLayout,\n next: DataTableColumnLayout,\n) {\n return (\n previous.fixedSide === next.fixedSide &&\n previous.isSpacerColumn === next.isSpacerColumn &&\n previous.isUtilityColumn === next.isUtilityColumn &&\n previous.pinnedClassName === next.pinnedClassName &&\n previous.utilityClassName === next.utilityClassName &&\n previous.headerStyle?.width === next.headerStyle?.width &&\n previous.headerStyle?.minWidth === next.headerStyle?.minWidth &&\n previous.headerStyle?.maxWidth === next.headerStyle?.maxWidth &&\n previous.headerStyle?.insetInlineStart ===\n next.headerStyle?.insetInlineStart &&\n previous.headerStyle?.insetInlineEnd === next.headerStyle?.insetInlineEnd\n );\n}\n\nexport const DataTableHeaderCell = React.memo(\n DataTableHeaderCellInner,\n areDataTableHeaderCellsEqual,\n) as typeof DataTableHeaderCellInner;\n","import * as React from \"react\";\nimport type {\n Column,\n Row,\n Table as TanStackTable,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableDensity,\n DataTableProps,\n DataTableRowLoadingState,\n} from \"../types\";\nimport type { DataTableUiClassNames, DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport { DataTableBodyRow } from \"./data-table-body-row\";\nimport { DataTableHeaderCell } from \"./data-table-header-cell\";\nimport type { DataTableColumnLayout } from \"./use-column-layout\";\nimport { isDataTableLoadingRow } from \"./data-table-utils\";\nimport type { DataTableLabels } from \"../types\";\n\nexport type DataTableTablePanelProps = {\n bodyRowComponents: Pick<\n DataTableUiKit,\n \"Checkbox\" | \"Input\" | \"Skeleton\" | \"TableCell\" | \"TableRow\"\n >;\n columnLayouts: ReadonlyMap;\n currentDensity: DataTableDensity;\n currentSorting: DataTableProps[\"sorting\"];\n DataTableEmptyState: React.ElementType;\n dragAndDrop: DataTableProps[\"dragAndDrop\"];\n draggedColumnIdRef: React.RefObject;\n draftValues: Record;\n editingRowId: string | null;\n emptyNode: React.ReactNode;\n enableColumnReordering: boolean;\n enableColumnResizing: boolean;\n explicitCustomCellColumnIds: ReadonlySet;\n fillMinWidth: number;\n flexGrow: boolean;\n getColumnLayout: (columnId: string) => DataTableColumnLayout;\n getRowClassName: DataTableProps[\"getRowClassName\"];\n getRowLoadingState: DataTableProps[\"getRowLoadingState\"];\n infiniteScroll: DataTableProps[\"infiniteScroll\"];\n layoutMode: \"fill\" | \"fit\";\n localSearchValue: string;\n onRowClick: DataTableProps[\"onRowClick\"];\n primeColumnForResize: (columnId: string, currentSize: number) => void;\n renderedRows: Array>;\n renderExpandedRow: DataTableProps[\"renderExpandedRow\"];\n reorderColumn: (sourceColumnId: string, targetColumnId: string) => void;\n resetColumnSize: (columnId: string) => void;\n resolvedLabels: DataTableLabels;\n rowsToRender: Array<{ row: Row; rowIndex: number }>;\n ScrollArea: DataTableUiKit[\"ScrollArea\"];\n ScrollBar: DataTableUiKit[\"ScrollBar\"];\n sentinelRef: React.RefObject;\n setDraftValues: React.Dispatch>>;\n shouldRenderInitialLoading: boolean;\n stickyHeader: boolean;\n summaryRows: NonNullable[\"summaryRows\"]>;\n table: TanStackTable;\n tableClassName: string | undefined;\n tableContainerClassName: string | undefined;\n Table: DataTableUiKit[\"Table\"];\n TableBody: DataTableUiKit[\"TableBody\"];\n TableCell: DataTableUiKit[\"TableCell\"];\n TableFooter: DataTableUiKit[\"TableFooter\"];\n TableHead: DataTableUiKit[\"TableHead\"];\n TableHeader: DataTableUiKit[\"TableHeader\"];\n TableRow: DataTableUiKit[\"TableRow\"];\n tableScrollContainerRef: React.RefObject;\n tableScrollElement?: HTMLElement | null;\n uiClassNames: DataTableUiClassNames;\n viewportHeight?: number;\n virtualization?: DataTableProps[\"virtualization\"];\n virtualPaddingBottom: number;\n virtualPaddingTop: number;\n visibleLeafColumnCount: number;\n visibleLeafColumns: Array>;\n};\n\nexport function DataTableTablePanel({\n bodyRowComponents,\n columnLayouts,\n currentDensity,\n currentSorting = [],\n DataTableEmptyState,\n dragAndDrop,\n draggedColumnIdRef,\n draftValues,\n editingRowId,\n emptyNode,\n enableColumnReordering,\n enableColumnResizing,\n explicitCustomCellColumnIds,\n fillMinWidth,\n flexGrow,\n getColumnLayout,\n getRowClassName,\n getRowLoadingState,\n infiniteScroll,\n layoutMode,\n localSearchValue,\n onRowClick,\n primeColumnForResize,\n renderedRows,\n renderExpandedRow,\n reorderColumn,\n resetColumnSize,\n resolvedLabels,\n rowsToRender,\n ScrollArea,\n ScrollBar,\n sentinelRef,\n setDraftValues,\n shouldRenderInitialLoading,\n stickyHeader,\n summaryRows,\n table,\n tableClassName,\n tableContainerClassName,\n Table,\n TableBody,\n TableCell,\n TableFooter = \"tfoot\",\n TableHead,\n TableHeader,\n TableRow,\n tableScrollContainerRef,\n uiClassNames,\n virtualPaddingBottom,\n virtualPaddingTop,\n visibleLeafColumnCount,\n visibleLeafColumns,\n}: DataTableTablePanelProps) {\n const selectionState: boolean | \"indeterminate\" =\n table.getIsAllPageRowsSelected()\n ? true\n : table.getIsSomePageRowsSelected()\n ? \"indeterminate\"\n : false;\n\n return (\n \n \n \n
    \n \n \n {table.getVisibleLeafColumns().map((column) => {\n const layout = getColumnLayout(column.id);\n return ;\n })}\n \n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => (\n \n ))}\n \n ))}\n \n \n {renderedRows.length ? (\n <>\n {virtualPaddingTop > 0 ? (\n \n \n \n ) : null}\n {rowsToRender.map(({ row, rowIndex }) => {\n const originalRow = row.original;\n const isInitialLoadingRow =\n isDataTableLoadingRow(originalRow);\n const loadingState = isInitialLoadingRow\n ? { isLoading: true }\n : getRowLoadingState?.(originalRow, rowIndex);\n const resolvedLoadingState: DataTableRowLoadingState | undefined =\n typeof loadingState === \"boolean\"\n ? { isLoading: loadingState }\n : loadingState;\n const isDraggable = isInitialLoadingRow\n ? false\n : (dragAndDrop?.getRowDraggable?.(originalRow) ?? false);\n\n return (\n \n );\n })}\n {virtualPaddingBottom > 0 ? (\n \n \n \n ) : null}\n \n ) : (\n \n \n
    \n {emptyNode ?? (\n \n )}\n
    \n \n
    \n )}\n
    \n {summaryRows.length ? (\n \n {summaryRows.map((summaryRow) => (\n \n {visibleLeafColumns.map((column, index) => {\n const content =\n summaryRow.cells[column.id] ??\n (index === 0 ? summaryRow.label : null);\n return (\n \n {typeof content === \"function\"\n ? content({\n rows: table\n .getFilteredRowModel()\n .rows.map((row) => row.original),\n columnId: column.id,\n })\n : content}\n \n );\n })}\n \n ))}\n \n ) : null}\n \n
    \n\n {infiniteScroll?.enabled &&\n renderedRows.length &&\n !shouldRenderInitialLoading ? (\n
    \n
    \n
    \n ) : null}\n \n \n
    \n \n );\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-JNI3CH7M.js b/dist/chunk-JNI3CH7M.js new file mode 100644 index 0000000..3cdef63 --- /dev/null +++ b/dist/chunk-JNI3CH7M.js @@ -0,0 +1,2 @@ +import {a as a$4}from'./chunk-EJHT5JBZ.js';import {a as a$3,e as e$1}from'./chunk-THSY57Y7.js';import {d,a as a$1,b,g,j,r,w,i,A,q,c as c$1,e,f as f$1,u,v,s,h,o,n,x,t,B,k as k$1,m as m$1}from'./chunk-4P45F2OY.js';import {c,p,u as u$1,k,m,s as s$1,a as a$5,r as r$1,q as q$1,l,j as j$1}from'./chunk-CVR2ZXHQ.js';import {a,i as i$1,b as b$1,d as d$1,e as e$2,c as c$2}from'./chunk-KDHJA6AH.js';import {a as a$2}from'./chunk-XTVBESM5.js';import*as f from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useReactTable,getPaginationRowModel,getExpandedRowModel,getSortedRowModel,getGroupedRowModel,getFacetedMinMaxValues,getFacetedUniqueValues,getFacetedRowModel,getFilteredRowModel,getCoreRowModel}from'@tanstack/react-table';import {flushSync}from'react-dom';function zn({cardClassName:e,cardGridClassName:t,cardSizing:n,cardRenderer:i,currentRowSelection:r,currentDetailExpanded:l,DataTableCardView:d,DataTableEmptyState:m,dragAndDrop:p,editableRows:h,editingRowId:E,emptyNode:S,enableRowSelection:A,flexGrow:V,getRowClassName:B,hasCardTitle:q,infiniteScroll:F,localSearchValue:T,onRowClick:u,renderedRows:s,detailPanel:y,resolvedLabels:g,resolvedLoadingRowCount:C,rowActions:N=[],ScrollArea:D,sentinelRef:K,setCurrentDetailExpanded:W,setCurrentRowSelection:O,setEditingRowId:R,shouldRenderInitialLoading:v,stateOverlayNode:w,tableContainerClassName:k,uiClassNames:M}){let I=v||s.length>0,G=f.useRef(null),x=(Z,j)=>jsx(d,{rows:Z,cardRenderer:i,cardGridClassName:t,cardClassName:e,cardSizing:n,rowActions:N,editableRows:h,detailPanel:y,detailExpanded:l,onDetailExpandedChange:W,hasCardTitle:q,rowSelection:r,onRowSelectionChange:O,enableRowSelection:A,editingRowId:E,onEditingRowIdChange:R,getRowClassName:B,onRowClick:u,getRowDraggable:p?.getRowDraggable,onRowDragStart:p?.onRowDragStart,onRowDragEnd:p?.onRowDragEnd,isLoading:j?.isLoading,loadingRowCount:j?.loadingRowCount,labels:g});return jsxs("div",{ref:G,"data-dtp-slot":"data-table-card-shell",className:a$2("relative box-border border-2 border-transparent transition-colors",V?"flex min-h-0 flex-1 flex-col":"h-full",p?.isDragging&&(M.dragActive??"rounded-md border-dashed")),children:[jsx(D,{className:a$2(V?"min-h-0 flex-1":"h-full",M.cardScrollArea,k),children:jsxs("div",{"data-dtp-slot":"data-table-card-viewport",className:a$2("flex min-h-full min-w-0 flex-col",V&&"min-h-0 flex-1",M.cardViewport),children:[I?v?x([],{isLoading:true,loadingRowCount:C}):x(s):jsx("div",{className:"flex min-h-0 flex-1 items-center justify-center p-4",children:S??jsx(m,{title:T?g.noMatchingRowsTitle:g.noRowsTitle,description:T?g.noMatchingRowsDescription:g.noRowsDescription})}),F?.enabled&&!v?jsx("div",{className:"shrink-0 px-4 pb-4",children:jsx("div",{ref:K,className:"h-4 w-full"})}):null]})}),w]})}var rs=f.lazy(async()=>({default:(await import('./data-table-virtual-card-panel-KF2P5D3K.js')).DataTableVirtualCardPanel}));function Ti(e){let t=typeof e.virtualization=="object"?e.virtualization.card:void 0;return t?.enabled!==true?jsx(zn,{...e}):jsx(f.Suspense,{fallback:jsx(zn,{...e,renderedRows:e.renderedRows.slice(0,Math.max(1,Math.floor(t.fallbackCardCount??12)))}),children:jsx(rs,{...e})})}function wi({children:e,currentPagination:t,DataTableFooter:n,effectivePageCount:i,footerTotalRowCount:r,handleFooterPageIndexChange:l,handleFooterPageSizeChange:d,labels:m,pageCountKnown:p=true,rowsPerPageOptions:h,showFooter:E}){return !E&&!e?null:jsxs("div",{"data-dtp-slot":"data-table-footer",className:"shrink-0",children:[E?jsx(n,{pageIndex:t.pageIndex,pageCount:i,pageCountKnown:p,pageSize:t.pageSize,totalRowCount:r,rowsPerPageOptions:h,onPageIndexChange:l,onPageSizeChange:d,labels:m}):null,e]})}function Di({allRows:e,columnFilters:t,columnVisibilityOptions:n,compactToolbar:i,customToolbar:r,DataTableToolbar:l,description:d,descriptionId:m,effectiveToolbarActions:p,enableColumnPinning:h,enableGrouping:E,enableToolbarColumnChooser:S,enableToolbarFilterChips:A,enableToolbarResetLayout:V,enableToolbarSavedViews:B,enableDensityToggle:q,enableViewToggle:F,hiddenRowsLabel:T,labels:u,onClearColumnFilters:s,onColumnFilterChange:y,onColumnPinningChange:g,onDensityChange:C,onShowHiddenRowsChange:N,onToolbarQueryValueChange:D,reorderColumn:K,onResetColumnLayout:W,onCreateSavedView:O,onApplySavedView:R,onRenameSavedView:v,onDeleteSavedView:w,onViewModeChange:k,openFileDialog:M,selectedRowIds:I,selectedRows:G,selectionActions:x,savedViews:Z,showHiddenRows:j,table:z,title:Y,titleId:ne,toolbarQueryPlaceholder:be,toolbarQueryValue:fe,toolbarVisibility:De,density:Se,viewMode:Te}){return jsx("div",{"data-dtp-slot":"data-table-toolbar",className:"shrink-0",children:jsx(l,{title:Y,titleId:ne,description:d,descriptionId:m,toolbarQueryValue:fe,toolbarQueryPlaceholder:be,onToolbarQueryValueChange:D,reorderColumn:K,customToolbar:r,compactToolbar:i,viewMode:Te,onViewModeChange:k,enableViewToggle:F,toolbarActions:p,selectionActions:x,selectedRowIds:I,selectedRows:G,showHiddenRows:j,hiddenRowsLabel:T,onShowHiddenRowsChange:N,allRows:e,columnVisibilityOptions:n,onColumnVisibilityChange:(Ee,Ne)=>{z.getColumn(Ee)?.toggleVisibility(Ne);},enableColumnPinning:h,enableGrouping:E,enableToolbarColumnChooser:S,enableToolbarFilterChips:A,enableToolbarResetLayout:V,enableToolbarSavedViews:B,onColumnPinningChange:g,columnFilters:t,onColumnFilterChange:y,onClearColumnFilters:s,onResetColumnLayout:W,onCreateSavedView:O,onApplySavedView:R,onRenameSavedView:v,onDeleteSavedView:w,density:Se,onDensityChange:C,enableDensityToggle:q,labels:u,toolbarVisibility:De,openFileDialog:M,savedViews:Z,table:z})})}var oe={searchPlaceholder:"Search rows...",searchTable:"Search table",clearSearch:"Clear search",noRowsTitle:"No rows yet",noRowsDescription:"Create a record or refresh this view once data exists.",noMatchingRowsTitle:"No matching rows",noMatchingRowsDescription:"Try a different search term or clear filters.",tableOptions:"Show table options",columns:"Columns",filters:"Filters",clearFilters:"Clear filters",filterFrom:"From",filterTo:"To",filterTrue:"Yes",filterFalse:"No",selectedRows:e=>`${e} record${e===1?"":"s"} selected`,showHiddenRows:e=>`Show ${e}`,recordsPerPage:"Records per page",totalRecords:e=>`Total records: ${e}`,pageStatus:(e,t)=>`Page ${e+1} of ${t}`,pageStatusUnknown:e=>`Page ${e+1}`,pagination:"Pagination",morePages:"More pages",firstPage:"First page",previousPage:"Previous page",nextPage:"Next page",lastPage:"Last page",selectAllVisibleRows:"Select all visible rows",selectAllFilteredRows:"Select all filtered rows",selectRow:"Select row",selectCardRow:e=>`Select row ${e}`,switchToTableView:"Switch to table view",switchToCardView:"Switch to card view",tableView:"Table view",cardView:"Card view",allFilterOptions:"All",actions:"Actions",rowActions:"Row actions",editRow:"Edit row",saveEdit:"Save",cancelEdit:"Cancel editing",expandRow:"Expand row",collapseRow:"Collapse row",expandRowDetails:"Expand row details",collapseRowDetails:"Collapse row details",exportCsv:"Export CSV",print:"Print table",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",errorTitle:"Unable to load this table",errorDescription:"Try again or check your connection.",retry:"Retry",density:"Density",compactDensity:"Compact",comfortableDensity:"Comfortable",spaciousDensity:"Spacious",pinLeft:"Pin left",pinRight:"Pin right",unpin:"Unpin",pinRowToTop:"Pin row to top",pinRowToBottom:"Pin row to bottom",unpinRow:"Unpin row",resizeColumn:e=>`Resize ${e}`,grouping:"Grouping",groupBy:e=>`Group by ${e}`,ungroup:e=>`Ungroup ${e}`,removeGrouping:e=>`Remove ${e} grouping`,moveGroupingEarlier:e=>`Move ${e} grouping earlier`,moveGroupingLater:e=>`Move ${e} grouping later`,facetSearch:e=>`Search ${e} options`,searchColumns:"Search columns",showAllColumns:"Show all columns",hideAllColumns:"Hide all columns",moveColumnEarlier:e=>`Move ${e} earlier`,moveColumnLater:e=>`Move ${e} later`,resetColumnLayout:"Reset column layout",savedViews:"Saved views",createSavedView:"Create saved view",savedViewName:"View name",applySavedView:e=>`Apply saved view ${e}`,renameSavedView:e=>`Rename saved view ${e}`,deleteSavedView:e=>`Delete saved view ${e}`,saveSavedView:"Save view"};function hi(e){return {...oe,...e}}function yi({Button:e,Checkbox:t,DataTableRowActions:n,Tooltip:i,TooltipContent:r,TooltipTrigger:l,cancelEditing:d$1,columns:m,editableRows:p,editingRowId:h,editErrors:E,enableRowSelection:S,enableRowPinning:A,hasTreeExpansion:V,isSavingEdit:B,isEditDirty:q,labels:F,lastSelectedRowIdRef:T,detailPanel:u,detailExpanded:s,onDetailExpandedChange:y,rowSelectionSelectAllScope:g$1,rowActions:C,saveEdit:N,startEditingRow:D,tableRef:K}){let W=f.useCallback((O,R)=>{let v=K.current;if(!v||!T.current)return;let w=v.getRowModel().rows.filter(x=>!d(x.original)),k=w.findIndex(x=>x.id===T.current),M=w.findIndex(x=>x.id===O);if(k<0||M<0)return;let I=Math.min(k,M),G=Math.max(k,M);v.setRowSelection(x=>{let Z={...x};for(let j of w.slice(I,G+1).filter(z=>z.getCanSelect()&&z.getCanMultiSelect()))R?Z[j.id]=true:delete Z[j.id];return Z});},[T,K]);return f.useMemo(()=>{let O=[];if(V||u){let R=V&&u?80:a$1;O.push({id:"__expand__",enableResizing:false,enableSorting:false,enableHiding:false,size:R,minSize:R,maxSize:R,header:()=>jsx("span",{className:"sr-only",children:F.expandRow}),cell:({row:v,table:w})=>{let k=V&&v.getCanExpand(),M=!!(u&&(u.getRowCanExpand?.(v.original)??true));if(!k&&!M)return null;let I=v.getIsExpanded(),G=s===true||!!s[v.id];return jsxs("div",{className:"flex items-center justify-center gap-1",children:[k?jsx(e,{type:"button",variant:"ghost",size:"icon-sm","aria-label":I?F.collapseRow:F.expandRow,"aria-expanded":I,"data-tree-toggle":"true",onClick:()=>v.toggleExpanded(),children:jsx(c,{className:a$2("transition-transform",I?"rotate-0":"-rotate-90")})}):null,M?jsx(e,{type:"button",variant:"ghost",size:"icon-sm","aria-label":G?V?F.collapseRowDetails??oe.collapseRowDetails:F.collapseRow:V?F.expandRowDetails??oe.expandRowDetails:F.expandRow,"aria-expanded":G,"data-detail-toggle":"true",onClick:()=>{y(x=>b(x,v.id,w.getCoreRowModel().flatRows.map(Z=>Z.id)));},children:jsx(c,{className:a$2("transition-transform",G?"rotate-0":"-rotate-90")})}):null]})}});}return S&&O.push({id:"__select__",enableResizing:false,enableSorting:false,enableHiding:false,size:a$1,minSize:a$1,maxSize:a$1,header:({table:R})=>{let v=g$1==="filtered",w=(v?R.getFilteredRowModel().flatRows:R.getRowModel().flatRows).filter(G=>G.getCanSelect()&&G.getCanMultiSelect()),k=w.length>0&&w.every(G=>G.getIsSelected()),M=w.some(G=>G.getIsSelected()),I=v?F.selectAllFilteredRows??oe.selectAllFilteredRows:F.selectAllVisibleRows??oe.selectAllVisibleRows;return w.length===0?jsx("span",{className:"sr-only",children:I}):jsx("div",{className:"flex items-center justify-center",children:jsx(t,{className:"my-0.5",checked:k?true:M?"indeterminate":false,onCheckedChange:G=>{R.setRowSelection(x=>{let Z={...x};for(let j of w)G===true?Z[j.id]=true:delete Z[j.id];return Z});},"aria-label":I})})},cell:({row:R})=>jsx("div",{className:"flex items-center justify-center",children:jsx(t,{className:"my-0.5",checked:R.getIsSelected(),disabled:!R.getCanSelect(),onClick:v=>{if(!v.shiftKey||!T.current||!R.getCanMultiSelect()){T.current=R.id;return}v.preventDefault(),v.stopPropagation(),W(R.id,!R.getIsSelected()),T.current=R.id;},onCheckedChange:v=>{T.current=R.id,R.toggleSelected(v===true);},"aria-label":F.selectRow??oe.selectRow})})}),O.push(...m.map(R=>g(R))),(C.length||p||A)&&O.push({id:"__actions__",enableSorting:false,enableResizing:false,enableHiding:false,size:a$1,minSize:a$1,maxSize:a$1,header:()=>jsx("span",{className:"sr-only",children:F.actions}),cell:({row:R})=>{let v=R.id;return h===v?jsxs("div",{className:"flex w-full items-center justify-end gap-2",children:[E._row?jsx("span",{className:"sr-only",role:"alert",children:E._row}):null,jsx(e,{type:"button",size:"sm",disabled:B||!q,onClick:()=>{N(R.original);},children:F.saveEdit}),jsxs(i,{children:[jsx(l,{asChild:true,children:jsxs(e,{type:"button",size:"icon-sm",variant:"ghost",onClick:d$1,children:[jsx(c,{className:"rotate-45"}),jsx("span",{className:"sr-only",children:F.cancelEdit})]})}),jsx(r,{children:F.cancelEdit})]})]}):jsx("div",{className:"flex w-full items-center justify-center",children:jsx(n,{row:R.original,rowActions:C,editableRows:p,isEditing:false,onStartEditing:()=>{D(R.original,R.id);},onCancelEditing:()=>{},labels:F,rowPinning:A?{canPin:R.getCanPin(),position:R.getIsPinned(),pin:k=>R.pin(k)}:void 0})})}}),O},[e,t,n,i,r,l,d$1,m,p,s,u,E,h,S,A,V,B,q,F,T,y,g$1,C,N,W,D])}function Re({defaultValue:e,onChange:t,value:n}){let[i,r]=f.useState(e),l=n??i,d=f.useRef(l);f.useEffect(()=>{d.current=l;},[l]);let m=f.useCallback(p=>{let h=typeof p=="function"?p(d.current):p;d.current=h,t?.(h),n===void 0&&r(h);},[t,n]);return [l,m]}function Ri({enabled:e,hasMore:t,isLoadingMore:n,onLoadMore:i,onError:r}){let l=f.useRef(null),d=f.useRef(false),m=f.useEffectEvent(i),p=f.useEffectEvent(h=>{r?.(h);});return f.useEffect(()=>{if(!e||!t||n)return;let h=l.current;if(!h)return;let E=new IntersectionObserver(S=>{if(S[0].isIntersecting&&!d.current){d.current=true;let V;try{V=m();}catch(B){d.current=false,p(B);return}Promise.resolve(V).catch(B=>{p(B);}).finally(()=>{d.current=false;});}},{rootMargin:"200px 0px 200px 0px"});return E.observe(h),()=>{E.disconnect();}},[e,t,n]),l}function vi({enabled:e,maxPageIndex:t,onPageIndexChange:n,pageIndex:i,setLocalPageIndex:r}){f.useEffect(()=>{if(!e||i>=0&&i<=t)return;let l=Math.min(Math.max(i,0),t);r(l),n?.(l);},[e,t,n,i,r]);}function xi(){return f.useMemo(()=>{let e=new WeakMap;return (t,n$1,i)=>{let r=n(i);if(!r)return true;let l=t.original;if(typeof l!="object"||l===null)return n(t.getValue(n$1)).includes(r);let d=e.get(l);d||(d=new Map,e.set(l,d));let m=d.get(n$1);if(m===void 0){let p=t.getValue(n$1);m=n(p),d.set(n$1,m);}return m.includes(r)}},[])}function Ei({autoResetPageIndex:e,columnGroupPaths:t,columnResizeMode:n,dir:i$1,currentColumnFilters:r$1,currentColumnOrder:l,currentColumnPinning:d$1,currentRowPinning:m,currentColumnSizing:p,currentExpanded:h,currentGrouping:E,currentPagination:S,currentRowSelection:A$1,currentSorting:V,currentViewMode:B,defaultColumn:q,effectiveColumnVisibility:F,enableColumnResizing:T,enableMultiRowSelection:u,enableRowPinning:s,enableRowSelection:y,enableSubRowSelection:g,getRowCanSelect:C,getRowCanExpand:N,getSubRows:D,aggregationFns:K,groupedColumnMode:W,globalFilterFn:O,globalFilterValue:R,hasNextPage:v,handleColumnFiltersChange:w$1,handleColumnOrderChange:k,handleColumnPinningChange:M,handleRowPinningChange:I,handleColumnVisibilityChange:G,handleExpandedChange:x,handleGroupingChange:Z,infiniteScroll:j$1,keepPinnedRows:z,manualFiltering:Y,manualGrouping:ne,manualExpanding:be,manualPagination:fe,manualSorting:De,onActionError:Se,onPageIndexChange:Te,onPageSizeChange:Ee,pageCount:Ne,pageIndex:J,pageSize:he,paginateExpandedRows:L,filterFromLeafRows:we,maxLeafRowFilterDepth:Ge,setCurrentRowSelection:nt,setCurrentSorting:Ye,setLocalColumnSizing:ot,setLocalPagination:se,shouldRenderInitialLoading:it,tableColumns:Ve,tableData:gt,tableGetRowId:Oe,tableRef:Rt,totalRowCount:mt,virtualization:Je}){let bt=xi(),ye=f.useMemo(()=>j(Ve).map(({column:a,index:b})=>r(a,b)),[Ve]),rt=f.useMemo(()=>{let a=ye,b=a.filter(_=>!w(_)&&_!=="__spacer__"),U=new Set(b),ce=l.filter(_=>U.has(_)),ae=b.filter(_=>!ce.includes(_));return [...a.filter(_=>_==="__expand__"||_==="__select__"),...ce,...ae,...a.filter(_=>_==="__spacer__"),...a.filter(_=>_==="__actions__")]},[l,ye]),_e=f.useMemo(()=>{let a=new Set(ye),b=new Set(ye.filter(ae=>!w(ae)&&ae!=="__spacer__")),U=(d$1.left??[]).filter(ae=>b.has(ae)),ce=(d$1.right??[]).filter(ae=>b.has(ae));return {left:[...["__expand__","__select__"].filter(ae=>a.has(ae)),...U],right:[...ce,...["__actions__"].filter(ae=>a.has(ae))]}},[d$1,ye]),lt=f.useMemo(()=>{let a=new Set,b=_=>{_.forEach((et,Ot)=>{if(a.add(Oe(et,Ot)),!d(et)){let _t=D?.(et,Ot);_t?.length&&b(_t);}});};b(gt);let U=(m.top??[]).filter(_=>a.has(_)),ce=new Set(U),ae=(m.bottom??[]).filter(_=>a.has(_)&&!ce.has(_));return {top:U,bottom:ae}},[m.bottom,m.top,D,gt,Oe]),ve=f.useMemo(()=>({sorting:V,pagination:S,rowSelection:A$1,columnVisibility:F,columnFilters:r$1,globalFilter:R,expanded:h,grouping:E,columnOrder:rt,columnPinning:_e,rowPinning:lt,columnSizing:p}),[r$1,p,h,E,S,A$1,V,F,rt,_e,lt,R]),He=f.useCallback(a=>{let b=typeof a=="function"?a(S):a;(J===void 0||he===void 0)&&se(U=>({pageIndex:J===void 0?b.pageIndex:U.pageIndex,pageSize:he===void 0?b.pageSize:U.pageSize})),b.pageIndex!==S.pageIndex&&Te?.(b.pageIndex),b.pageSize!==S.pageSize&&Ee?.(b.pageSize);},[S,Te,Ee,J,he,se]),St=f.useCallback(a=>{ot(a);},[ot]),Xe=f.useMemo(()=>{let a=false,b=false;for(let{column:U}of j(Ve))a||=U.meta?.filter?.type==="faceted",b||=U.meta?.filter?.type==="numberRange";return {minMaxValues:b,uniqueValues:a}},[Ve]),de=useReactTable({data:gt,columns:Ve,getCoreRowModel:getCoreRowModel(),getFilteredRowModel:Y?void 0:getFilteredRowModel(),getFacetedRowModel:(Xe.uniqueValues||Xe.minMaxValues)&&!Y?getFacetedRowModel():void 0,getFacetedUniqueValues:Xe.uniqueValues&&!Y?getFacetedUniqueValues():void 0,getFacetedMinMaxValues:Xe.minMaxValues&&!Y?getFacetedMinMaxValues():void 0,getGroupedRowModel:E.length&&!ne?getGroupedRowModel():void 0,getSortedRowModel:De?void 0:getSortedRowModel(),getExpandedRowModel:(D||E.length)&&!be?getExpandedRowModel():void 0,getPaginationRowModel:fe||j$1?.enabled?void 0:getPaginationRowModel(),enableRowSelection:C?a=>y&&C(a.original):y,enableRowPinning:typeof s=="function"?a=>s(a.original):s,keepPinnedRows:z,enableMultiRowSelection:typeof u=="function"?a=>u(a.original):u,enableSubRowSelection:typeof g=="function"?a=>g(a.original):g,enableColumnResizing:T,columnResizeMode:n,columnResizeDirection:i$1,getRowId:Oe,getSubRows:D,getRowCanExpand:D?a=>N?.(a.original)??a.subRows.length>0:void 0,globalFilterFn:O??bt,getColumnCanGlobalFilter:a=>a.columnDef.enableGlobalFilter!==false&&typeof a.accessorFn=="function",manualSorting:De,manualGrouping:ne,manualFiltering:Y,manualExpanding:be,manualPagination:fe||!!j$1?.enabled,paginateExpandedRows:L,filterFromLeafRows:we,maxLeafRowFilterDepth:Ge,defaultColumn:q,autoResetPageIndex:e,state:ve,onSortingChange:Ye,onPaginationChange:He,onRowSelectionChange:nt,onColumnVisibilityChange:G,onColumnFiltersChange:w$1,onExpandedChange:x,onGroupingChange:Z,onColumnOrderChange:k,onColumnPinningChange:M,onRowPinningChange:I,onColumnSizingChange:St,aggregationFns:K,groupedColumnMode:W});Rt.current=de;let vt=de.getVisibleLeafColumns(),ft=f.useCallback((a,b)=>{if(a===b||!i(a,b,t))return;let U=de.getAllLeafColumns().map(ae=>ae.id).filter(ae=>!w(ae)),ce=A(l.length?l:U,a,b);k(ce);},[t,l,k,de]),Tt=de.getTopRows(),Ae=de.getBottomRows(),$e=B==="table"?de.getCenterRows():de.getRowModel().rows,wt=typeof Je=="object"?Je:void 0,Be=Je===true||wt?.enabled===true,Lt=Math.max(1,Math.floor(wt?.fallbackRowCount??20)),ke=(Be?$e.slice(0,Lt):$e).map((a,b)=>({row:a,rowIndex:b})),Ue=fe||!!j$1?.enabled,st=Ue?void 0:de.getFilteredRowModel().rows.length,dt=mt??st,Ze=!Ue||Ne!==void 0||mt!==void 0,xt=dt,je=it?1:Ne??(dt!==void 0?Math.max(1,Math.ceil(dt/S.pageSize)):Ue?S.pageIndex+(v?2:1):de.getPageCount()),Ct=Math.max(0,je-1),Nt=f.useCallback(a=>{J===void 0&&se(b=>b.pageIndex===a?b:{...b,pageIndex:a});},[J,se]);vi({enabled:!it&&!j$1?.enabled&&Ze,maxPageIndex:Ct,onPageIndexChange:Te,pageIndex:S.pageIndex,setLocalPageIndex:Nt});let Ke=f.useCallback(a=>{a!==S.pageIndex&&(Te?.(a),J===void 0&&se(b=>b.pageIndex===a?b:{...b,pageIndex:a}));},[S.pageIndex,Te,J,se]),Et=f.useCallback(a=>{S.pageIndex!==0&&Te?.(0),a!==S.pageSize&&Ee?.(a),he===void 0&&se({pageIndex:0,pageSize:a});},[S.pageIndex,S.pageSize,Te,Ee,he,se]),kt=Ri({enabled:!!j$1?.enabled,hasMore:!!j$1?.hasMore,isLoadingMore:j$1?.isLoadingMore,onLoadMore:()=>j$1?.onLoadMore(),onError:a=>{Se?.({error:a,source:"infiniteScroll"});}});return {effectivePageCount:je,footerTotalRowCount:xt,handleFooterPageIndexChange:Ke,handleFooterPageSizeChange:Et,isPageCountKnown:Ze,renderedRows:$e,topPinnedRows:Tt,bottomPinnedRows:Ae,reorderColumn:ft,rowsToRender:ke,sentinelRef:kt,table:de,virtualPaddingBottom:0,virtualPaddingTop:0,visibleLeafColumns:vt}}var Cs="data-table-pro:column-prefs:",Mi=1,ki=["visibility","sizing","order","pinning","rowPinning","density"];function Vi(e){let t=Ln(e);if(!t)return {};let n=Nn(t);if(!n)return {};let i=On(t.key),r;try{r=n.getItem(i);}catch(p){return t.onError?.({error:p,operation:"read"}),{}}if(!r)return {};let l;try{l=(t.deserialize??JSON.parse)(r);}catch(p){return t.onError?.({error:p,operation:"deserialize"}),{}}let d=t.version??Mi,m;if(Ds(l))if(l.version===d)m=l.state;else if(t.migrate)try{m=t.migrate({version:l.version,state:l.state},d);}catch(p){return t.onError?.({error:p,operation:"migrate"}),{}}else return {};else m=l;return Ii(hs(m),t.slices)}function Ai(e){let t=Ln(e);if(!t)return false;let n=Nn(t);if(!n)return false;try{return n.removeItem(On(t.key)),!0}catch(i){return t.onError?.({error:i,operation:"remove"}),false}}function Fi({key:e,persistence:t,prefs:n}){let i=t??Ln(e),r=i?Nn(i):void 0,l=i?On(i.key):void 0,d=i?.version??Mi,m=Math.max(0,i?.debounceMs??100),p=Ii(n,i?.slices),h=f.useMemo(()=>{if(!i)return {value:void 0};try{let S={version:d,state:p};return {value:(i.serialize??JSON.stringify)(S)}}catch(S){return {error:S,value:void 0}}},[i,p,d]),E=f.useEffectEvent((S,A)=>{i?.onError?.({error:S,operation:A});});f.useEffect(()=>{h.error!==void 0&&E(h.error,"serialize");},[h.error]),f.useEffect(()=>{if(!r||!l||h.value===void 0)return;let S=()=>{try{if(r.getItem(l)===h.value)return;r.setItem(l,h.value);}catch(V){E(V,"write");}};if(m===0){S();return}let A=globalThis.setTimeout(S,m);return ()=>{globalThis.clearTimeout(A);}},[m,h.value,r,l]);}function Ln(e){if(e)return typeof e=="string"?{key:e}:e}function Nn(e){if(e.storage)return e.storage;if(!(typeof window>"u"))try{return window.localStorage}catch(t){e.onError?.({error:t,operation:"read"});return}}function On(e){return `${Cs}${e}`}function Ds(e){return aa(e)&&Object.prototype.hasOwnProperty.call(e,"version")&&Object.prototype.hasOwnProperty.call(e,"state")}function Ii(e,t){let n=new Set(t??ki),i={};for(let r of ki)n.has(r)&&e[r]!==void 0&&Object.assign(i,{[r]:e[r]});return i}function hs(e){if(!aa(e))return {};let t={},n=ys(e.visibility);n&&(t.visibility=n);let i=Rs(e.sizing);i&&(t.sizing=i);let r=pa(e.order);if(r&&(t.order=r),aa(e.pinning)){let d=pa(e.pinning.left)??[],m=pa(e.pinning.right)??[];t.pinning={left:d,right:m};}let l=Ss(e.rowPinning);return l&&(t.rowPinning=l),vs(e.density)&&(t.density=e.density),t}function ys(e){if(aa(e))return Object.fromEntries(Object.entries(e).filter(t=>typeof t[1]=="boolean"))}function Rs(e){if(aa(e))return Object.fromEntries(Object.entries(e).filter(t=>typeof t[1]=="number"&&Number.isFinite(t[1])&&t[1]>=0))}function pa(e){if(Array.isArray(e))return e.filter(t=>typeof t=="string")}function Ss(e){if(aa(e))return {top:pa(e.top)??[],bottom:pa(e.bottom)??[]}}function vs(e){return e==="compact"||e==="comfortable"||e==="spacious"}function aa(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}var Ps=Object.values(a).slice().sort((e,t)=>e-t);function zi(e){let t=f.useRef(0),[n,i]=f.useState(0);return f.useEffect(()=>{let r=e.current;if(!r)return;let l=(m=r.clientWidth)=>{let p=xs(m);p!==t.current&&(t.current=p,i(p));};if(l(),typeof ResizeObserver>"u")return;let d=new ResizeObserver(m=>{let p=m[0];l(p?Es(p):void 0);});return d.observe(r),()=>{d.disconnect();}},[e]),n}function xs(e){if(e<=0)return 0;let t=1;for(let n of Ps){if(ed$1??(l?{key:l}:void 0),[l,d$1]),we=f.useMemo(()=>Vi(L),[L]),[Ge,nt]=f.useState({pageIndex:u?.pagination?.pageIndex??0,pageSize:u?.pagination?.pageSize??be[0]??20}),[Ye,ot]=Re({value:Se,onChange:G,defaultValue:()=>u?.sorting??[]}),[se,it]=Re({value:ne,onChange:M,defaultValue:()=>u?.rowSelection??{}}),[Ve,gt]=Re({value:m,onChange:O,defaultValue:()=>u?.columnVisibility??we.visibility??{}}),[Oe,Rt]=Re({value:e$1,onChange:C,defaultValue:()=>u?.columnFilters??[]}),[mt,Je]=Re({value:V,onChange:v,defaultValue:()=>u?.expanded??{}}),[bt,ye]=Re({value:t,onChange:N,defaultValue:()=>u?.columnOrder??we.order??[]}),[rt,_e]=Re({value:n,onChange:D,defaultValue:()=>u?.columnPinning??we.pinning??q(p)}),[lt,ve]=Re({value:i,onChange:K,defaultValue:()=>u?.rowPinning??we.rowPinning??{top:[],bottom:[]}}),[He,St]=Re({value:r$1,onChange:W,defaultValue:()=>u?.columnSizing??we.sizing??{}}),[Xe,de]=Re({value:J,onChange:Z,defaultValue:()=>u?.viewMode??"table"}),[vt,ft]=Re({value:B,onChange:w,defaultValue:()=>u?.grouping??[]}),[Tt,Ae]=Re({value:De,onChange:I,defaultValue:()=>u?.showHiddenRows??false}),[$e,wt]=Re({value:E,onChange:R,defaultValue:()=>u?.density??we.density??"comfortable"}),Be=Ne??u?.globalFilter??"",Lt=Ee??Y.searchPlaceholder,Pt=Te??250,[ke,Ue]=f.useState(Be),st=zi(he),dt=!!x,Ze=f.useRef(Be),xt=f.useEffectEvent($=>{Ze.current=$,x?.($);});f.useEffect(()=>{Ze.current=Be,Ue(Be);},[Be]),f.useEffect(()=>{if(!dt||ke===Be||ke===Ze.current)return;let $=window.setTimeout(()=>{xt(ke);},Pt);return ()=>{window.clearTimeout($);}},[dt,ke,Pt,Be]);let je=f.useMemo(()=>({pageIndex:j$1??Ge.pageIndex,pageSize:z??Ge.pageSize}),[Ge.pageIndex,Ge.pageSize,j$1,z]),Ct=Math.max(1,y??Math.min(5,je.pageSize)),Nt=f.useDeferredValue(ke),Ke=A?g?ke:Nt:"",Et=f.useCallback($=>{de($);},[de]),kt=f.useCallback($=>{Ae($);},[Ae]),a=f.useCallback($=>{wt($);},[wt]),b=f.useCallback(()=>{k?.(0),j$1===void 0&&nt($=>$.pageIndex===0?$:{...$,pageIndex:0});},[k,j$1]),U=f.useRef({columnFilters:Oe,globalFilterValue:Ke});f.useEffect(()=>{let $=U.current,Pe=$.columnFilters!==Oe,ie=$.globalFilterValue!==Ke;U.current={columnFilters:Oe,globalFilterValue:Ke},!g&&(!Pe&&!ie||b());},[Oe,Ke,g,b]),Fi({persistence:L,prefs:{visibility:m?void 0:Ve,sizing:r$1===void 0?He:void 0,order:t?void 0:bt,pinning:n?void 0:rt,rowPinning:i===void 0?lt:void 0,density:E?void 0:$e}});let ce=f.useMemo(()=>j(p).reduce(($,{column:Pe,index:ie})=>{let ct=r(Pe,ie);return i$1(Pe.meta?.hideOn,st)&&($[ct]=false),$},{}),[p,st]),ae=f.useMemo(()=>({...Ve,...ce}),[Ve,ce]),_=f.useMemo(()=>h.filter($=>b$1($,T,Tt)),[Tt,h,T]),et=s&&_.length===0,Ot=f.useMemo(()=>c$1(Ct),[Ct]),_t=et?Ot:_,Ka=f.useCallback(($,Pe)=>d($)?e(Pe):F($,Pe),[F]),Mt=S||(fe?.length??0)>0||Object.values(se).some(Boolean),ia=f.useMemo(()=>{if(!Mt)return new Map;let $=new Map,Pe=ie=>{ie.forEach((ct,te)=>{$.set(F(ct,te),ct);let ue=q$1?.(ct,te);ue?.length&&Pe(ue);});};return Pe(_),$},[F,q$1,Mt,_]),Wa=f.useMemo(()=>Mt?Object.entries(se).filter(([,$])=>$).map(([$])=>ia.get($)).filter($=>!!$):[],[se,ia,Mt]),Qa=f.useMemo(()=>Object.entries(se).flatMap(([$,Pe])=>Pe?[$]:[]),[se]);return {containerWidth:st,currentColumnFilters:Oe,currentColumnOrder:bt,currentColumnPinning:rt,currentRowPinning:lt,currentColumnSizing:He,currentColumnVisibility:Ve,currentDensity:$e,currentExpanded:mt,currentGrouping:vt,currentPagination:je,currentRowSelection:se,currentShowHiddenRows:Tt,currentSorting:Ye,currentViewMode:Xe,effectiveColumnVisibility:ae,globalFilterValue:Ke,handleDensityChange:a,handleShowHiddenRowsChange:kt,handleViewModeChange:Et,localSearchValue:ke,resolvedLoadingRowCount:Ct,resolvedToolbarQueryPlaceholder:Lt,selectedRowIds:Qa,selectedRows:Wa,setCurrentColumnFilters:Rt,setCurrentColumnOrder:ye,setCurrentColumnPinning:_e,setCurrentRowPinning:ve,setCurrentColumnVisibility:gt,setCurrentExpanded:Je,setCurrentGrouping:ft,setCurrentRowSelection:it,setCurrentSorting:ot,setLocalColumnSizing:St,setLocalPagination:nt,setLocalSearchValue:Ue,shouldRenderInitialLoading:et,tableData:_t,tableGetRowId:Ka,toolbarFilteredData:_,visibleData:_}}var Ms={cellStyle:void 0,colStyle:void 0,fixedSide:void 0,headerStyle:void 0,isActionsColumn:false,isExpansionColumn:false,isSelectionColumn:false,isSpacerColumn:false,isUtilityColumn:false,pinnedClassName:void 0,utilityClassName:void 0};function Oi({columns:e,columnSizing:t,editableRows:n,enableRowSelection:i,hasRowActions:r$1,hasRowExpansion:l,layoutMode:d,uiClassNames:m,visibleLeafColumns:p}){let h=f.useMemo(()=>{let T=new Set;for(let{column:u,index:s}of j(e))Object.prototype.hasOwnProperty.call(u,"size")&&T.add(r(u,s));return i&&T.add("__select__"),l&&T.add("__expand__"),(r$1||n)&&T.add("__actions__"),T},[e,n,i,r$1,l]),E=f.useMemo(()=>{let T=new Map;for(let{column:u,index:s}of j(e)){let y=f$1(u);y!==void 0&&T.set(r(u,s),y);}return T},[e]),S=f.useMemo(()=>{let T=new Map,u$1=new Map,s=0;for(let g of p)u(g)==="left"&&(T.set(g.id,s),s+=Ni(g));let y=0;for(let g of [...p].reverse())u(g)==="right"&&(u$1.set(g.id,y),y+=Ni(g));return {left:T,right:u$1}},[p]),A=f.useMemo(()=>{if(d!=="fill")return;let T=p.filter(s=>!w(s.id));return T.length&&T.every(s=>h.has(s.id)||Object.prototype.hasOwnProperty.call(t,s.id))?T[T.length-1]?.id:void 0},[t,h,d,p]),V=f.useMemo(()=>{let T=new Set([...h,...Object.keys(t)]);return A&&T.delete(A),T},[t,h,A]),B=f.useMemo(()=>{let T=new Map;for(let u$1 of p){let s=u$1.id==="__select__",y=u$1.id==="__expand__",g=u$1.id==="__actions__",C=s||y||g,N=u$1.id==="__spacer__",D=E.get(u$1.id),K=u$1.id===A,W=D??(K?u$1.getSize():void 0),O=!N&&(d==="fit"||C||V.has(u$1.id)),R=O||W!==void 0?{width:O?C?a$1:u$1.getSize():void 0,minWidth:C?a$1:O?u$1.getSize():W,maxWidth:O?C?a$1:u$1.getSize():void 0}:void 0,v$1=u(u$1),w=v$1?{left:v$1==="left"?S.left.get(u$1.id):void 0,right:v$1==="right"?S.right.get(u$1.id):void 0}:void 0,k=R||w?{...R,...w}:void 0;T.set(u$1.id,{cellStyle:k,colStyle:R,fixedSide:v$1,headerStyle:k,isActionsColumn:g,isExpansionColumn:y,isSelectionColumn:s,isSpacerColumn:N,isUtilityColumn:C,pinnedClassName:v$1?v(v$1,m,{isUtilityColumn:C}):void 0,utilityClassName:C?"w-[50px] max-w-[50px] min-w-[50px] px-0":void 0});}return T},[A,V,d,E,S,m,p]),q=f.useMemo(()=>p.reduce((T,u)=>{let s=B.get(u.id),y=E.get(u.id),g=u.id===A;return s?.isUtilityColumn?T+a$1:V.has(u.id)?T+u.getSize():T+(y??(g?u.getSize():0))},0),[B,A,V,E,p]),F=f.useCallback(T=>B.get(T)??Ms,[B]);return {columnLayouts:B,explicitlySizedColumnIds:h,fillMinWidth:q,getColumnLayout:F}}function Ni(e){return w(e.id)?a$1:e.getSize()}function Hi(e,t){let n=e.classNames??{},{Button:i,Card:r,CardContent:l,CardHeader:d,Checkbox:m,Skeleton:p}=e;return function({rows:E,cardRenderer:S,cardSizing:A="fixed",cardGridClassName:V,cardClassName:B,rowActions:q,editableRows:F,detailPanel:T,detailExpanded:u,onDetailExpandedChange:s,hasCardTitle:y,rowSelection:g,onRowSelectionChange:C,enableRowSelection:N,editingRowId:D,onEditingRowIdChange:K,getRowClassName:W,onRowClick:O,getRowDraggable:R,onRowDragStart:v,onRowDragEnd:w,isLoading:k=false,loadingRowCount:M=5,labels:I}){let G=A??"fixed",x$1=V?a$2("grid",V):Vs(G),Z=a$2("min-h-0 w-full gap-4 p-1",n.cardGrid,x$1),j=z=>a$2("relative min-w-0 max-w-full gap-0 overflow-hidden bg-transparent p-0",As(G),n.cardItem,B,z);return k?jsx("div",{role:"list","data-dtp-slot":"data-table-card-grid",className:Z,children:Array.from({length:Math.max(1,M)},(z,Y)=>jsxs(r,{role:"listitem","aria-hidden":"true","data-dtp-slot":"data-table-card-item",className:j("min-h-52"),children:[y?jsxs(d,{className:"px-4 pt-4 pb-3",children:[jsx(p,{className:"h-5 w-40 max-w-[70%]"}),jsx(p,{className:"h-4 w-24 max-w-[40%]"})]}):null,jsxs(l,{className:a$2("space-y-3 pb-4",y?"":"pt-4"),children:[jsx(p,{className:"h-4 w-full"}),jsx(p,{className:"h-4 w-[82%]"}),jsx(p,{className:"h-4 w-[68%]"}),jsx(p,{className:"h-24 w-full rounded-xl"})]})]},`loading-card-${Y}`))}):jsx("div",{role:"list","data-dtp-slot":"data-table-card-grid",className:Z,children:E.map(z=>{let Y=z.id,ne=z.original,be=!!g[Y],fe=D===Y,De=q.length>0||!!F,Se=!!(T&&(T.getRowCanExpand?.(ne)??true)),Te=N||De||y,Ee=N||De||z.getCanExpand()||Se,Ne=()=>{O&&O({row:ne,rowId:Y});};return jsxs(r,{role:"listitem","data-row-id":Y,"data-tree-depth":z.depth,draggable:R?.(ne)??false,"data-dtp-slot":"data-table-card-item","data-state":be?"selected":void 0,className:j(a$2([W?.(ne,{row:ne,rowId:Y,rowIndex:z.index,isEditing:fe,isExpanded:z.getIsExpanded(),isLoading:false,isSelected:be,pinnedPosition:false})].filter(Boolean).join(" "),"transition transition-colors hover:scale-101 data-[state=selected]:scale-101",n.card,be?n.cardSelected:n.cardUnselected)),onDragStart:J=>{v?.({row:ne,rowId:Y,event:J});},onDragEnd:J=>{w?.({row:ne,rowId:Y,event:J});},children:[Te?jsx("div",{"aria-hidden":"true",className:a$2("pointer-events-none absolute inset-x-0 top-0 z-10 h-24 bg-linear-to-b opacity-0 transition-opacity group-hover/card:opacity-100",n.cardOverlay??"from-transparent via-transparent to-transparent")}):null,jsx("div",{"data-dtp-slot":"data-table-card-renderer",role:O?"button":void 0,tabIndex:O?0:void 0,className:a$2("flex min-h-0 max-w-full min-w-0 overflow-hidden rounded-[inherit] [&>*]:min-w-0",Fs(G),O&&"cursor-pointer focus-visible:outline-none"),onClick:J=>{x(J.target,J.currentTarget)||Ne();},onKeyDown:J=>{x(J.target,J.currentTarget)||(J.key==="Enter"||J.key===" ")&&(J.preventDefault(),Ne());},children:S({row:ne,rowId:Y,depth:z.depth,canExpandSubRows:z.getCanExpand(),isSubRowsExpanded:z.getIsExpanded(),toggleSubRowsExpanded:()=>z.toggleExpanded(),isSelected:be,onSelectedChange:J=>{C(_i(g,Y,J,z.getCanSelect(),z.getCanMultiSelect()));},actions:q,isEditing:fe,startEditing:()=>{K(Y);},cancelEditing:()=>{K(null);}})}),fe||!T||!(u===true||u[z.id])?null:jsx("div",{"data-dtp-slot":"data-table-card-detail-panel",className:"relative z-20 min-w-0",children:T.render({row:ne,rowId:Y,tableRow:z})}),Ee?jsxs(d,{className:"absolute inset-x-0 top-0 z-20 flex flex-row items-center gap-3 space-y-0 px-4 pt-4 pb-8",children:[N?jsx("div",{"data-row-click-ignore":"true",className:"pointer-events-auto",children:jsx(m,{checked:be,disabled:!z.getCanSelect(),"aria-label":(I.selectCardRow??oe.selectCardRow)(Y),onCheckedChange:J=>{C(_i(g,Y,J===true,z.getCanSelect(),z.getCanMultiSelect()));}})}):null,z.getCanExpand()?jsx("div",{"data-row-click-ignore":"true",className:"pointer-events-auto",children:jsx(i,{type:"button",size:"icon-sm",variant:"ghost","aria-label":z.getIsExpanded()?I.collapseRow:I.expandRow,"aria-expanded":z.getIsExpanded(),onClick:()=>z.toggleExpanded(),children:jsx(c,{className:a$2("transition-transform",z.getIsExpanded()?"rotate-0":"-rotate-90")})})}):null,Se?jsx("div",{"data-row-click-ignore":"true",className:"pointer-events-auto",children:jsx(i,{type:"button",size:"icon-sm",variant:"ghost","aria-label":u===true||u[z.id]?z.getCanExpand()?I.collapseRowDetails??oe.collapseRowDetails:I.collapseRow:z.getCanExpand()?I.expandRowDetails??oe.expandRowDetails:I.expandRow,"aria-expanded":u===true||!!u[z.id],"data-detail-toggle":"true",onClick:()=>{s(J=>b(J,z.id,E.map(he=>he.id)));},children:jsx(c,{className:a$2("transition-transform",u===true||u[z.id]?"rotate-0":"-rotate-90")})})}):null,jsx("div",{className:"pointer-events-none min-w-0 flex-1"}),De?jsx("div",{"data-row-click-ignore":"true",className:"pointer-events-auto",children:jsx(t,{row:ne,rowActions:q,editableRows:F,isEditing:fe,onStartEditing:()=>{K(Y);},onCancelEditing:()=>{K(null);},labels:I})}):null]}):null]},Y)})})}}function Vs(e){switch(e){case "content":return "flex flex-wrap items-start justify-start";case "fluid":return "grid grid-cols-[repeat(auto-fit,minmax(min(18rem,100%),1fr))]";default:return "grid grid-cols-[repeat(auto-fill,minmax(min(18rem,100%),18rem))] justify-start"}}function As(e){switch(e){case "content":return "w-fit";case "fluid":return "w-full";default:return}}function Fs(e){switch(e){case "content":return "w-fit";case "fluid":return "w-full flex-1 [&>*]:w-full";default:return "flex-1"}}function _i(e,t,n,i,r){if(!i)return e;if(n)return r?{...e,[t]:true}:{[t]:true};if(!e[t])return e;let l={...e};return delete l[t],l}function Gi(e){let t=e.classNames??{},{Empty:n,EmptyContent:i,EmptyDescription:r,EmptyHeader:l,EmptyMedia:d,EmptyTitle:m}=e;return function({title:h="No rows found",description:E="Adjust your filters or create a new record to populate this table."}){return jsxs(n,{className:`min-h-60 rounded-2xl ${t.emptyState??"border bg-transparent"}`,children:[jsxs(l,{children:[jsx(d,{variant:"icon",children:jsx(p,{})}),jsx(m,{children:h}),jsx(r,{children:E})]}),jsx(i,{})]})}}function $i(e){let t=e.classNames??{},{Pagination:n,PaginationContent:i,PaginationEllipsis:r,PaginationFirst:l,PaginationItem:d,PaginationLast:m,PaginationLink:p,PaginationNext:h,PaginationPrevious:E,Select:S,SelectContent:A,SelectGroup:V,SelectItem:B,SelectTrigger:q,SelectValue:F,Tooltip:T,TooltipContent:u,TooltipTrigger:s}=e;function y({pageIndex:C,pageCount:N,pageCountKnown:D,pageSize:K,totalRowCount:W,rowsPerPageOptions:O,onPageIndexChange:R,onPageSizeChange:v,labels:w}){let k=D?Is(C,Math.max(1,N)):[],M=C>0,I=C+1{v(Number(x));},children:[jsx(q,{"aria-label":w.recordsPerPage,className:`w-22 ${t.paginationSelectTrigger??""}`,children:jsx(F,{})}),jsx(A,{children:jsx(V,{children:O.map(x=>jsx(B,{value:String(x),children:x},x))})})]})]}),W!==void 0?jsx("div",{className:"flex shrink-0 items-center justify-center",children:jsxs("div",{className:`inline-flex items-center gap-2 px-2.5 py-1.5 text-sm ${t.paginationTotal??""}`,"aria-label":w.totalRecords(W),children:[jsx(j$1,{className:"size-4"}),jsx("span",{className:"@min-[768px]/data-table:hidden",children:W}),jsx("span",{className:"hidden @min-[768px]/data-table:inline",children:w.totalRecords(W)})]})}):null,jsxs("div",{className:"flex flex-1 items-center justify-end gap-4",children:[jsx("div",{className:`hidden text-sm @min-[768px]/data-table:inline ${t.mutedText??"opacity-70"}`,children:D?w.pageStatus(C,Math.max(1,N)):(w.pageStatusUnknown??oe.pageStatusUnknown)(C)}),jsx(n,{"aria-label":w.pagination??oe.pagination,className:"mx-0 w-auto justify-end",children:jsxs(i,{children:[jsx(d,{className:"@min-[768px]/data-table:hidden",children:jsxs(T,{children:[jsx(s,{asChild:true,children:jsx(l,{"aria-label":w.firstPage,href:"#",size:"icon-sm",showText:false,disabled:!M,onClick:x=>{x.preventDefault(),M&&R(0);},text:w.firstPage})}),jsx(u,{children:w.firstPage})]})}),jsx(d,{children:jsxs(T,{children:[jsx(s,{asChild:true,children:jsx(E,{"aria-label":w.previousPage,href:"#",size:"icon-sm",showText:false,disabled:!M,onClick:x=>{x.preventDefault(),M&&R(C-1);},text:w.previousPage})}),jsx(u,{children:w.previousPage})]})}),k.map((x,Z)=>jsx(d,{className:"hidden @min-[768px]/data-table:block",children:x==="ellipsis"?jsx(r,{text:w.morePages??oe.morePages}):jsx(p,{href:"#",isActive:x===C+1,size:"icon-sm",onClick:j=>{j.preventDefault(),R(x-1);},children:x})},`${x}-${Z}`)),jsx(d,{children:jsxs(T,{children:[jsx(s,{asChild:true,children:jsx(h,{"aria-label":w.nextPage,href:"#",size:"icon-sm",showText:false,disabled:!I,onClick:x=>{x.preventDefault(),I&&R(C+1);},text:w.nextPage})}),jsx(u,{children:w.nextPage})]})}),D?jsx(d,{className:"@min-[768px]/data-table:hidden",children:jsxs(T,{children:[jsx(s,{asChild:true,children:jsx(m,{"aria-label":w.lastPage,href:"#",size:"icon-sm",showText:false,text:w.lastPage,disabled:!I,onClick:x=>{x.preventDefault(),I&&R(G);}})}),jsx(u,{children:w.lastPage})]})}):null]})})]})]})}function g(C){return jsx("div",{className:`rounded-md border px-2 py-1 ${t.footer??""}`,children:jsx(y,{...C})})}return {DataTableFooter:g,DataTablePagination:y}}function Is(e,t){let n=e+1,i=new Set([1,t]);for(let d=Math.max(1,n-2);d<=Math.min(t,n+2);d+=1)i.add(d);let r=Array.from(i).sort((d,m)=>d-m),l=[];for(let d=0;d1&&l.push("ellipsis"),l.push(m);}return l}function ji(e){let{Button:t,DropdownMenu:n,DropdownMenuContent:i,DropdownMenuGroup:r,DropdownMenuItem:l,DropdownMenuSeparator:d,DropdownMenuTrigger:m$1,Tooltip:p,TooltipContent:h,TooltipTrigger:E}=e;return function({row:A,rowActions:V,editableRows:B,isEditing:q,onStartEditing:F,onCancelEditing:T,labels:u,rowPinning:s}){let y=V.filter(D=>d$1(D,A)),g=f.useCallback(D=>{D.stopPropagation();},[]);if(q)return jsxs(p,{children:[jsx(E,{asChild:true,children:jsxs(t,{type:"button",variant:"ghost",size:"icon-sm",onPointerDown:g,onClick:T,children:[jsx(u$1,{}),jsx("span",{className:"sr-only",children:u.cancelEdit})]})}),jsx(h,{children:u.cancelEdit})]});let C=e$2(B,A),N=s?.canPin??false;return !y.length&&!C&&!N?null:jsxs(n,{children:[jsxs(p,{children:[jsx(E,{asChild:true,children:jsx(m$1,{asChild:true,children:jsxs(t,{type:"button",variant:"ghost",size:"icon-sm",onPointerDown:g,onClick:g,children:[jsx(k,{}),jsx("span",{className:"sr-only",children:u.rowActions})]})})}),jsx(h,{children:u.rowActions})]}),jsxs(i,{align:"end",className:"w-52",children:[C?jsx(r,{children:jsxs(l,{onClick:D=>{D.stopPropagation(),F();},children:[jsx(m,{"data-icon":"inline-start"}),u.editRow]})}):null,C&&(y.length||N)?jsx(d,{}):null,N?jsx(r,{children:s?.position?jsx(l,{onClick:D=>{D.stopPropagation(),s.pin(false);},children:u.unpinRow}):jsxs(Fragment,{children:[jsx(l,{onClick:D=>{D.stopPropagation(),s?.pin("top");},children:u.pinRowToTop}),jsx(l,{onClick:D=>{D.stopPropagation(),s?.pin("bottom");},children:u.pinRowToBottom})]})}):null,N&&y.length?jsx(d,{}):null,y.length?jsx(r,{children:y.map(D=>{let K=D.icon;return jsxs(l,{disabled:D.disabled?.(A),variant:D.variant==="destructive"?"destructive":void 0,onClick:W=>{W.stopPropagation(),D.onClick(A);},children:[K?jsx(K,{"data-icon":"inline-start"}):null,c$2(D.label,A)]},D.key)})}):null]})]})}}var Ls=f.lazy(()=>import('./data-table-toolbar-operations-IDEGCKBK.js'));function Wi(e){let t=e.classNames??{},{Button:n,ButtonGroup:i,DropdownMenu:r,DropdownMenuCheckboxItem:l,DropdownMenuContent:d,DropdownMenuGroup:m,DropdownMenuItem:p,DropdownMenuLabel:h,DropdownMenuSeparator:E,DropdownMenuTrigger:S,InputGroup:A,InputGroupAddon:V,InputGroupInput:B,Tooltip:q,TooltipContent:F,TooltipTrigger:T}=e;return function({title:y,titleId:g,description:C,descriptionId:N,toolbarQueryValue:D,toolbarQueryPlaceholder:K,onToolbarQueryValueChange:W,customToolbar:O,compactToolbar:R,viewMode:v,onViewModeChange:w,enableViewToggle:k,toolbarActions:M,selectionActions:I,selectedRows:G,selectedRowIds:x,showHiddenRows:Z,hiddenRowsLabel:j,onShowHiddenRowsChange:z,allRows:Y,columnVisibilityOptions:ne,onColumnVisibilityChange:be,enableColumnPinning:fe,onColumnPinningChange:De,columnFilters:Se,onColumnFilterChange:Te,onClearColumnFilters:Ee,density:Ne,onDensityChange:J,enableDensityToggle:he,labels:L,toolbarVisibility:we,openFileDialog:Ge,enableGrouping:nt,enableToolbarColumnChooser:Ye,enableToolbarFilterChips:ot,enableToolbarResetLayout:se,enableToolbarSavedViews:it,savedViews:Ve,onResetColumnLayout:gt,onCreateSavedView:Oe,onApplySavedView:Rt,onRenameSavedView:mt,onDeleteSavedView:Je,reorderColumn:bt,table:ye}){let rt=f.useRef(null),[_e,lt]=f.useState(false),ve=t.toolbarCompactIconButton??"",He=M.filter(a=>(a.placement??"primary")==="primary"),St=M.filter(a=>a.placement==="trailing"),Xe=we?.title??true,de=we?.search??true,vt=we?.actions??true,ft=we?.trailingActions??true,Tt=we?.options??true,Ae=we?.viewToggle??true,$e=we?.customToolbar??true,wt=Xe&&!!(y||C),Be=de,Lt=vt&&He.length>0,Pt=x.length>0&&I.length>0,ke=Tt&&(ne.some(a=>a.canHide)||!!(z&&j)||fe||he||nt||Ye||se||it),Ue=Ye||se||it,st=Se.filter(a=>_n(a.value)),dt={Button:n,DropdownMenuCheckboxItem:l,DropdownMenuGroup:m,DropdownMenuItem:p,DropdownMenuLabel:h,DropdownMenuSeparator:E,InputGroup:A,InputGroupAddon:V,InputGroupInput:B},Ze=a=>jsx(f.Suspense,{fallback:null,children:jsx(Ls,{placement:a,ui:dt,labels:L,enableColumnChooser:Ye,enableFilterChips:ot,enableResetLayout:se,enableSavedViews:it,enableColumnPinning:fe,columnVisibilityOptions:ne,onColumnVisibilityChange:be,onColumnPinningChange:De,reorderColumn:bt,table:ye,onResetColumnLayout:gt,savedViews:Ve,onCreateSavedView:Oe,onApplySavedView:Rt,onRenameSavedView:mt,onDeleteSavedView:Je,toolbarQueryValue:D,onToolbarQueryValueChange:W,activeColumnFilters:st,onColumnFilterChange:Te,onClearColumnFilters:Ee})}),xt=ye.getAllLeafColumns().filter(a=>!a.id.startsWith("__")&&a.getCanGroup()),je=ye.getState().grouping.flatMap(a=>{let b=ye.getColumn(a);return b?[b]:[]}),Ct=Ae&&k&&!!w,Nt=ft&&St.length>0,Ke=$e&&!!O,Et=$e&&!!(R??O),kt=L.selectedRows(x.length);return f.useEffect(()=>{_e&&rt.current?.focus();},[_e]),!wt&&!Be&&!Lt&&!Pt&&!ke&&!Ct&&!Nt&&!Ke&&!Et?null:jsxs("div",{className:"flex flex-col gap-4 pb-0",children:[Xe&&(y||C)?jsxs("div",{className:"flex flex-col gap-1",children:[y?jsx("h2",{id:g,className:"text-lg font-semibold tracking-tight",children:y}):null,C?jsx("p",{id:N,className:`max-w-3xl text-sm ${t.mutedText??"opacity-70"}`,children:C}):null]}):null,jsxs("div",{className:"flex flex-col gap-3",children:[jsxs("div",{"data-dtp-slot":"data-table-toolbar-controls",className:"flex items-center gap-2 overflow-x-auto px-1 @min-[768px]/data-table:gap-3 @min-[768px]/data-table:overflow-visible",children:[de?jsxs(Fragment,{children:[jsx("div",{className:"hidden min-w-0 grow max-w-md @min-[768px]/data-table:block",children:jsxs(A,{className:"min-w-0",children:[jsx(B,{value:D,onChange:a=>{W(a.target.value);},placeholder:K}),jsx(V,{align:"inline-start","aria-hidden":"true",children:jsx(s$1,{})}),D?jsx(V,{align:"inline-end",children:jsx("button",{type:"button",className:`inline-flex size-5 items-center justify-center rounded-md transition-colors focus-visible:outline-none ${t.toolbarIconButton??"opacity-70 hover:opacity-100"}`,onClick:()=>{W("");},"aria-label":L.clearSearch,title:L.clearSearch,children:jsx(u$1,{})})}):null]})}),jsxs(q,{children:[jsx(T,{asChild:true,children:jsxs(n,{type:"button",variant:_e||D?"secondary":"outline",size:"icon-sm","aria-label":L.searchTable,"aria-pressed":_e,className:`shrink-0 @min-[768px]/data-table:hidden ${ve} ${t.toolbarInputButton??""}`,onClick:()=>{lt(a=>!a);},children:[jsx(s$1,{}),jsx("span",{className:"sr-only",children:L.searchTable})]})}),jsx(F,{children:L.searchTable})]})]}):null,vt?jsx("div",{className:"flex shrink-0 items-center gap-2",children:He.map(a=>{let b=!a.iconOnly&&!!a.icon,U=jsxs(n,{type:"button",className:b?`size-7 shrink-0 px-0 @min-[768px]/data-table:h-8 @min-[768px]/data-table:w-fit @min-[768px]/data-table:px-2.5 ${ve}`:a.iconOnly?`size-7 shrink-0 @min-[768px]/data-table:size-8 ${ve}`:"size-7 shrink-0 @min-[768px]/data-table:h-8 @min-[768px]/data-table:w-fit",variant:a.variant??"outline",size:a.iconOnly?"icon":"default",onClick:()=>{a.onClick({rows:Y,openFileDialog:Ge});},disabled:a.disabled,"aria-label":a.label,title:a.iconOnly?void 0:a.label,children:[a.icon?jsx(a.icon,{}):null,a.iconOnly?jsx("span",{className:"sr-only",children:a.label}):b?jsx("span",{className:"hidden @min-[768px]/data-table:inline",children:a.label}):jsx("span",{children:a.label})]},a.key);return a.iconOnly?jsxs(q,{children:[jsx(T,{asChild:true,children:U}),jsx(F,{children:a.label})]},a.key):U})}):null,Et?jsx("div",{"data-dtp-slot":"data-table-toolbar-compact-custom",className:"flex shrink-0 items-center gap-2 @min-[1024px]/data-table:hidden",children:R??O}):null,jsx("div",{className:"grow","aria-hidden":"true"}),jsxs("div",{"data-dtp-slot":"data-table-toolbar-end-controls",className:"flex shrink-0 items-center gap-2",children:[x.length?jsx("div",{className:`hidden text-sm @min-[768px]/data-table:block ${t.mutedText??"opacity-70"}`,children:kt}):null,x.length?I.map(a=>{let b=a.icon,U={rows:G,rowIds:x},ce=typeof a.disabled=="function"?a.disabled(G,U):a.disabled;return jsxs(q,{children:[jsx(T,{asChild:true,children:jsxs(n,{type:"button",variant:a.variant??"secondary",size:"icon-sm",className:ve,disabled:ce,onClick:()=>{a.onClick(U);},"aria-label":a.label,children:[b?jsx(b,{}):null,jsx("span",{className:"sr-only",children:a.label})]})}),jsx(F,{children:a.label})]},a.key)}):null,ke?jsxs(r,{children:[jsx(S,{asChild:true,children:jsxs(n,{type:"button",variant:"outline",size:"icon-sm","aria-label":L.tableOptions,className:`${ve} ${t.toolbarInputButton??""}`,title:L.tableOptions,children:[jsx(a$5,{}),jsx("span",{className:"sr-only",children:L.tableOptions})]})}),jsxs(d,{align:"end",className:"w-56",children:[jsx(h,{children:L.tableOptions}),jsx(m,{children:z&&j?jsx(l,{checked:Z,onCheckedChange:a=>{z(a===true);},children:L.showHiddenRows(j)}):null}),he?jsxs(Fragment,{children:[jsx(E,{}),jsx(h,{children:L.density}),jsx(m,{children:[["compact",L.compactDensity],["comfortable",L.comfortableDensity],["spacious",L.spaciousDensity]].map(([a,b])=>jsx(l,{checked:Ne===a,onCheckedChange:()=>{J(a);},children:b},a))})]}):null,Ue?Ze("menu"):null,!Ye&&ne.some(a=>a.canHide)?jsxs(Fragment,{children:[jsx(E,{}),jsx(h,{children:L.columns}),jsx(m,{children:ne.filter(a=>a.canHide).map(a=>jsx(l,{checked:a.visible,onCheckedChange:b=>{be?.(a.id,b===true);},children:a.label},a.id))})]}):null,fe&&!Ye?jsxs(Fragment,{children:[jsx(E,{}),jsxs(h,{children:[L.pinLeft," / ",L.pinRight]}),jsx(m,{children:ne.map(a=>jsxs(p,{onSelect:b=>{b.preventDefault();},children:[jsx("span",{className:"min-w-0 flex-1 truncate",children:a.label}),jsx("button",{type:"button",className:"px-1 text-xs","aria-label":`${L.pinLeft}: ${a.label}`,onClick:b=>{b.stopPropagation(),De(a.id,"left");},children:"L"}),jsx("button",{type:"button",className:"px-1 text-xs","aria-label":`${L.pinRight}: ${a.label}`,onClick:b=>{b.stopPropagation(),De(a.id,"right");},children:"R"}),jsx("button",{type:"button",className:"px-1 text-xs","aria-label":`${L.unpin}: ${a.label}`,onClick:b=>{b.stopPropagation(),De(a.id,false);},children:"-"})]},`pin-${a.id}`))})]}):null,nt&&xt.length?jsxs(Fragment,{children:[jsx(E,{}),jsx(h,{children:L.grouping}),jsx(m,{children:xt.map(a=>{let b=typeof a.columnDef.header=="string"?a.columnDef.header:a.id,U=a.getIsGrouped();return jsx(l,{checked:U,onCheckedChange:()=>{a.toggleGrouping();},children:U?L.ungroup(b):L.groupBy(b)},`group-${a.id}`)})})]}):null]})]}):null,Ae&&k&&w?jsxs(i,{children:[jsxs(q,{children:[jsx(T,{asChild:true,children:jsxs(n,{type:"button",variant:v==="table"?"default":"outline","aria-pressed":v==="table",className:v==="table"?ve:`${ve} ${t.toolbarInputButton??""}`,size:"icon-sm",onClick:()=>{w("table");},children:[jsx(r$1,{}),jsx("span",{className:"sr-only",children:L.switchToTableView??oe.switchToTableView})]})}),jsx(F,{children:L.tableView??oe.tableView})]}),jsxs(q,{children:[jsx(T,{asChild:true,children:jsxs(n,{type:"button",variant:v==="card"?"default":"outline","aria-pressed":v==="card",className:v==="table"?`${ve} ${t.toolbarInputButton??""}`:ve,size:"icon-sm",onClick:()=>{w("card");},children:[jsx(q$1,{}),jsx("span",{className:"sr-only",children:L.switchToCardView??oe.switchToCardView})]})}),jsx(F,{children:L.cardView??oe.cardView})]})]}):null,ft?St.map(a=>{let b=!a.iconOnly&&!!a.icon,U=jsxs(n,{type:"button",variant:a.variant??"outline",size:a.iconOnly?"icon-sm":"default",onClick:()=>{a.onClick({rows:Y,openFileDialog:Ge});},disabled:a.disabled,"aria-label":a.label,title:a.iconOnly?void 0:a.label,className:`size-7 shrink-0 ${a.iconOnly?"":`${b?"px-0 @min-[768px]/data-table:px-2.5":""} @min-[768px]/data-table:h-8 @min-[768px]/data-table:w-fit`} ${a.iconOnly||b?ve:""} ${t.toolbarInputButton??""}`,children:[a.icon?jsx(a.icon,{"data-icon":a.iconOnly?void 0:"inline-start"}):null,a.iconOnly?jsx("span",{className:"sr-only",children:a.label}):b?jsx("span",{className:"hidden @min-[768px]/data-table:inline",children:a.label}):jsx("span",{children:a.label})]},a.key);return a.iconOnly?jsxs(q,{children:[jsx(T,{asChild:true,children:U}),jsx(F,{children:a.label})]},a.key):U}):null]})]}),de&&_e?jsx("div",{"data-dtp-slot":"data-table-toolbar-compact-search",className:"min-w-0 @min-[768px]/data-table:hidden",children:jsxs(A,{children:[jsx(B,{ref:rt,value:D,onChange:a=>{W(a.target.value);},placeholder:K}),jsx(V,{align:"inline-start","aria-hidden":"true",children:jsx(s$1,{})}),D?jsx(V,{align:"inline-end",children:jsx("button",{type:"button",className:`inline-flex size-5 items-center justify-center rounded-md transition-colors focus-visible:outline-none ${t.toolbarIconButton??"opacity-70 hover:opacity-100"}`,onClick:()=>{W("");},"aria-label":L.clearSearch,title:L.clearSearch,children:jsx(u$1,{})})}):null]})}):null,Se.length?jsxs("div",{"data-dtp-slot":"data-table-toolbar-filters",className:"flex min-w-0 flex-wrap items-center gap-2",children:[Se.map(a=>jsx(u,{filter:a,labels:L,onColumnFilterChange:Te},a.id)),Se.some(a=>_n(a.value))?jsx(n,{type:"button",variant:"ghost",size:"sm",onClick:Ee,children:L.clearFilters}):null]}):null,ot?Ze("chips"):null,nt&&je.length?jsxs("div",{"data-dtp-slot":"data-table-grouping-bar","aria-label":L.grouping,className:"flex flex-wrap items-center gap-2",children:[jsxs("span",{className:"text-sm opacity-70",children:[L.grouping,":"]}),je.map((a,b)=>{let U=typeof a.columnDef.header=="string"?a.columnDef.header:a.id,ce=ae=>{let _=[...ye.getState().grouping],[et]=_.splice(b,1);et!==void 0&&(_.splice(ae,0,et),ye.setGrouping(_));};return jsxs("div",{className:"inline-flex items-center rounded-md border",children:[jsx(n,{type:"button",variant:"ghost",size:"sm",disabled:b===0,onClick:()=>ce(b-1),"aria-label":L.moveGroupingEarlier(U),children:jsx("span",{"aria-hidden":"true",children:"\u2190"})}),jsxs(n,{type:"button",variant:"secondary",size:"sm",onClick:()=>a.toggleGrouping(),"aria-label":L.removeGrouping(U),children:[U," ",jsx("span",{"aria-hidden":"true",children:"\xD7"})]}),jsx(n,{type:"button",variant:"ghost",size:"sm",disabled:b===je.length-1,onClick:()=>ce(b+1),"aria-label":L.moveGroupingLater(U),children:jsx("span",{"aria-hidden":"true",children:"\u2192"})})]},`grouping-bar-${a.id}`)})]}):null]}),$e&&O?jsx("div",{"data-dtp-slot":"data-table-toolbar-desktop-custom",className:"hidden flex-row items-center gap-3 @min-[1024px]/data-table:flex",children:O}):null]})};function u({filter:s,labels:y,onColumnFilterChange:g}){let[C,N]=f.useState("");if(s.type==="text")return jsxs(A,{className:"min-w-48 max-w-64",children:[jsx(B,{value:typeof s.value=="string"?s.value:"",onChange:M=>{g(s.id,M.target.value);},placeholder:s.placeholder??s.label,"aria-label":`${y.filters}: ${s.label}`}),jsx(V,{align:"inline-start","aria-hidden":"true",children:jsx(s$1,{})})]});if(s.type==="numberRange"||s.type==="dateRange"){let M=Ns(s.value),I=s.type==="numberRange"?"number":"date",G=y.filterFrom??oe.filterFrom,x=y.filterTo??oe.filterTo;return jsxs("div",{role:"group","aria-label":`${y.filters}: ${s.label}`,className:"flex min-w-0 items-center gap-1.5",children:[jsxs(A,{className:"min-w-32 max-w-44",children:[jsx(B,{type:I,inputMode:I==="number"?"decimal":void 0,value:M.from??"",min:s.min,max:s.max,step:I==="number"?s.step:void 0,onChange:Z=>{g(s.id,{...M,from:Ki(Z.target.value,I)});},"aria-label":`${s.label}: ${G}`}),jsx(V,{align:"inline-start",children:G})]}),jsxs(A,{className:"min-w-32 max-w-44",children:[jsx(B,{type:I,inputMode:I==="number"?"decimal":void 0,value:M.to??"",min:s.min,max:s.max,step:I==="number"?s.step:void 0,onChange:Z=>{g(s.id,{...M,to:Ki(Z.target.value,I)});},"aria-label":`${s.label}: ${x}`}),jsx(V,{align:"inline-start",children:x})]})]})}let D=s.type==="boolean",K=s.type==="faceted",W=[{label:s.trueLabel??y.filterTrue??oe.filterTrue,value:"true"},{label:s.falseLabel??y.filterFalse??oe.filterFalse,value:"false"}],O=D?W:s.options,R=K&&C?O.filter(M=>M.label.toLocaleLowerCase().includes(C.toLocaleLowerCase())):O,v=typeof s.value=="string"||typeof s.value=="boolean"?String(s.value):"",w=Array.isArray(s.value)?s.value.map(String):v?[v]:[],k=w.length===0?s.label:`${s.label}: ${w.length===1?O.find(M=>M.value===String(w[0]))?.label??w[0]:w.length}`;return jsxs(r,{children:[jsx(S,{asChild:true,children:jsx(n,{type:"button",variant:"outline",size:"sm",children:k})}),jsxs(d,{align:"start",className:"w-56",children:[jsx(h,{children:s.label}),K&&s.searchable!==false?jsx("div",{className:"px-2 pb-2",children:jsxs(A,{children:[jsx(B,{value:C,onChange:M=>{N(M.target.value);},placeholder:s.searchPlaceholder??y.facetSearch(s.label),"aria-label":y.facetSearch(s.label)}),jsx(V,{align:"inline-start","aria-hidden":"true",children:jsx(s$1,{})})]})}):null,jsxs(m,{children:[s.type==="select"||D||K?jsx(p,{onClick:()=>{g(s.id,"");},children:y.allFilterOptions??oe.allFilterOptions}):null,R.map(M=>jsxs(l,{checked:w.includes(M.value),disabled:M.disabled,onCheckedChange:I=>{if(s.type==="select"||D){g(s.id,I===true?M.value:"");return}let G=new Set(w);I===true?G.add(M.value):G.delete(M.value),g(s.id,Array.from(G));},children:[jsx("span",{className:"min-w-0 flex-1 truncate",children:M.label}),M.count!==void 0?jsx("span",{className:"ml-3 tabular-nums opacity-70",children:M.count}):null]},M.value))]})]})]})}}function _n(e){return Array.isArray(e)?e.length>0:e&&typeof e=="object"?"from"in e||"to"in e?Object.values(e).some(_n):true:e!=null&&e!==""}function Ns(e){if(!e||typeof e!="object"||Array.isArray(e))return {};let t=e;return {...typeof t.from=="number"||typeof t.from=="string"?{from:t.from}:{},...typeof t.to=="number"||typeof t.to=="string"?{to:t.to}:{}}}function Ki(e,t){if(e)return t==="number"?Number(e):e}var Os=f.lazy(async()=>({default:(await import('./data-table-virtual-table-panel-GCAMBHTG.js')).DataTableVirtualTablePanel}));function Qi(e){let t=typeof e.virtualization=="object"?e.virtualization:void 0;return e.virtualization===true||t?.enabled===true?jsx(f.Suspense,{fallback:jsx(e$1,{...e,rowsToRender:e.rowsToRender.slice(0,Math.max(1,Math.floor(t?.fallbackRowCount??20)))}),children:jsx(Os,{...e})}):jsx(e$1,{...e})}var _s="data-table-pro:saved-views:";var Yi=["sorting","columnVisibility","columnFilters","grouping","columnOrder","columnPinning","rowPinning","columnSizing","density","viewMode","showHiddenRows","globalFilter"],qi=0;function jt(e){let t=$n(e);if(!e||!t)return [];let n;try{n=t.getItem(Un(e.key));}catch(d){return e.onError?.({error:d,operation:"read"}),[]}if(!n)return [];let i;try{i=(e.deserialize??JSON.parse)(n);}catch(d){return e.onError?.({error:d,operation:"deserialize"}),[]}if(!Qe(i)||!("version"in i)||!("views"in i))return [];let r=e.version??1,l=i.views;if(i.version!==r){if(!e.migrate)return [];try{l=e.migrate({version:i.version,views:i.views},r);}catch(d){return e.onError?.({error:d,operation:"migrate"}),[]}}return Array.isArray(l)?l.map(d=>Bs(d,e.slices)).filter(d=>!!d):[]}function Ji(e,t,n){let i=t.trim();if(!e||!i)return;let r=new Date().toISOString(),l={id:qs(),name:i,createdAt:r,updatedAt:r,state:Hs(n,e.slices)},d=[...jt(e),l];return Bn(e,d,"create")?Gn(l):void 0}function Xi(e,t,n){let i=n.trim();if(!e||!i)return;let r,l=jt(e).map(d=>d.id!==t?d:(r={...d,name:i,updatedAt:new Date().toISOString()},r));if(r)return Bn(e,l,"rename")?Gn(r):void 0}function Zi(e,t){if(!e)return false;let n=jt(e),i=n.filter(r=>r.id!==t);return i.length!==n.length&&Bn(e,i,"delete")}function er(e){let t=$n(e);if(!e||!t)return false;try{t.removeItem(Un(e.key));}catch(n){return e.onError?.({error:n,operation:"remove"}),false}return e.onChange?.([],"clear"),true}function Bn(e,t,n){let i=$n(e);if(!i)return false;let r;try{let d={version:e.version??1,views:t};r=(e.serialize??JSON.stringify)(d);}catch(d){return e.onError?.({error:d,operation:"serialize"}),false}try{i.setItem(Un(e.key),r);}catch(d){return e.onError?.({error:d,operation:"write"}),false}let l=t.map(Gn);return e.onChange?.(l,n),true}function Hs(e,t){let n=new Set(t??Yi),i={};for(let r of Object.keys(e))n.has(r)&&Object.assign(i,{[r]:Gs(r,e[r])});return i}function Bs(e,t){if(!(!Qe(e)||typeof e.id!="string"||!e.id||typeof e.name!="string"||!e.name.trim()||typeof e.createdAt!="string"||typeof e.updatedAt!="string"))return {id:e.id,name:e.name.trim(),createdAt:e.createdAt,updatedAt:e.updatedAt,state:tr(e.state,t)}}function tr(e,t){if(!Qe(e))return {};let n=new Set(t??Yi),i={},r=$s(e.sorting);n.has("sorting")&&r&&(i.sorting=r);let l=Us(e.pagination);n.has("pagination")&&l&&(i.pagination=l);let d=Hn(e.rowSelection);n.has("rowSelection")&&d&&(i.rowSelection=d);let m=Hn(e.columnVisibility);n.has("columnVisibility")&&m&&(i.columnVisibility=m);let p=js(e.columnFilters);n.has("columnFilters")&&p&&(i.columnFilters=p);let h=oa(e.grouping);n.has("grouping")&&h&&(i.grouping=h);let E=e.expanded===true?true:Hn(e.expanded);n.has("expanded")&&E!==void 0&&(i.expanded=E);let S=oa(e.columnOrder);n.has("columnOrder")&&S&&(i.columnOrder=S);let A=Ks(e.columnPinning);n.has("columnPinning")&&A&&(i.columnPinning=A);let V=Ws(e.rowPinning);n.has("rowPinning")&&V&&(i.rowPinning=V);let B=Qs(e.columnSizing);return n.has("columnSizing")&&B&&(i.columnSizing=B),n.has("density")&&(e.density==="compact"||e.density==="comfortable"||e.density==="spacious")&&(i.density=e.density),n.has("viewMode")&&(e.viewMode==="table"||e.viewMode==="card")&&(i.viewMode=e.viewMode),n.has("showHiddenRows")&&typeof e.showHiddenRows=="boolean"&&(i.showHiddenRows=e.showHiddenRows),n.has("globalFilter")&&typeof e.globalFilter=="string"&&(i.globalFilter=e.globalFilter),i}function Gn(e){return {...e,state:tr(e.state,Object.keys(e.state))}}function Gs(e,t){return Array.isArray(t)?t.map(n=>Qe(n)?{...n}:n):Qe(t)?e==="columnPinning"||e==="rowPinning"?{...e==="columnPinning"?{left:Array.isArray(t.left)?[...t.left]:void 0,right:Array.isArray(t.right)?[...t.right]:void 0}:{top:Array.isArray(t.top)?[...t.top]:void 0,bottom:Array.isArray(t.bottom)?[...t.bottom]:void 0}}:{...t}:t}function $s(e){if(Array.isArray(e))return e.filter(t=>Qe(t)&&typeof t.id=="string").map(t=>({id:t.id,desc:!!t.desc}))}function Us(e){if(!(!Qe(e)||!Number.isInteger(e.pageIndex)||e.pageIndex<0||!Number.isInteger(e.pageSize)||e.pageSize<1))return {pageIndex:e.pageIndex,pageSize:e.pageSize}}function js(e){if(Array.isArray(e))return e.filter(t=>Qe(t)&&typeof t.id=="string"&&Object.prototype.hasOwnProperty.call(t,"value")).map(t=>({id:t.id,value:t.value}))}function Ks(e){if(Qe(e))return {left:oa(e.left)??[],right:oa(e.right)??[]}}function Ws(e){if(Qe(e))return {top:oa(e.top)??[],bottom:oa(e.bottom)??[]}}function Hn(e){if(Qe(e))return Object.fromEntries(Object.entries(e).filter(t=>typeof t[1]=="boolean"))}function Qs(e){if(Qe(e))return Object.fromEntries(Object.entries(e).filter(t=>typeof t[1]=="number"&&Number.isFinite(t[1])&&t[1]>=0))}function oa(e){if(Array.isArray(e))return e.filter(t=>typeof t=="string")}function $n(e){if(e){if(e.storage)return e.storage;if(!(typeof window>"u"))try{return window.localStorage}catch(t){e.onError?.({error:t,operation:"read"});return}}}function qs(){return typeof globalThis.crypto?.randomUUID=="function"?globalThis.crypto.randomUUID():(qi+=1,`view-${Date.now().toString(36)}-${qi.toString(36)}`)}function Un(e){return `${_s}${e}`}function Qe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ar({columns:e,currentColumnFilters:t$1,currentColumnPinning:n,effectiveColumnVisibility:i,enableColumnFilters:r$1,handleColumnFiltersChange:l$1,handleColumnPinningChange:d,labels:m,table:p,toolbarActions:h,visibleData:E,csvExport:S}){let A=f.useMemo(()=>j(e).map(({column:s,index:y})=>{let g=r(s,y),C=s.header,N=t(s),D=typeof C=="string"?C:N?B(N):B(g),K=n.left?.includes(g)===true?"left":n.right?.includes(g)===true?"right":false;return {id:g,label:D,visible:i[g]!==false,canHide:s.enableHiding!==false,pinned:K}}),[e,n,i]),V=f.useMemo(()=>r$1===false?[]:j(e).flatMap(({column:s,index:y})=>{let g=s.meta?.filter;if(!g)return [];let C=r(s,y),N=s.header,D=t(s),K=g.label??(typeof N=="string"?N:D?B(D):B(C)),W=t$1.find(w=>w.id===C),O=g.faceting?.options,R=g.type==="numberRange"?p.getColumn(C)?.getFacetedMinMaxValues():void 0,v=g.type==="faceted"&&O?typeof O=="function"?O({rows:E}):O:g.type==="faceted"?Array.from(p.getColumn(C)?.getFacetedUniqueValues()??[]).map(([w,k])=>({label:g.faceting?.getOptionLabel?.(w)??String(w),value:String(w),count:k})):typeof g.options=="function"?g.options({rows:E}):g.options??[];return [{id:C,label:K,type:g.type,value:W?.value,placeholder:g.placeholder,options:k$1(v),searchable:g.faceting?.searchable,searchPlaceholder:g.faceting?.searchPlaceholder,trueLabel:g.trueLabel,falseLabel:g.falseLabel,min:g.min??R?.[0],max:g.max??R?.[1],step:g.step}]}),[e,t$1,r$1,p,E]),B$1=f.useCallback((s,y)=>{l$1(g=>{let C=g.filter(N=>N.id!==s);return m$1(y)&&C.push({id:s,value:y}),C});},[l$1]),q=f.useCallback(()=>{l$1([]);},[l$1]),F=f.useCallback((s,y)=>{d(g=>{let C=(g.left??[]).filter(D=>D!==s),N=(g.right??[]).filter(D=>D!==s);return y==="left"&&C.push(s),y==="right"&&N.push(s),{left:C,right:N}});},[d]),T=f.useCallback(()=>{if(S)return o({csvExport:S,table:p,labels:m})},[S,m,p]),u=f.useMemo(()=>S?[...h??[],{key:"__csv_export__",label:m.exportCsv,icon:l,placement:"trailing",onClick:T}]:h??[],[S,T,m.exportCsv,h]);return {columnVisibilityOptions:A,effectiveToolbarActions:u,handleClearColumnFilters:q,handleToolbarColumnFilterChange:B$1,handleToolbarColumnPinningChange:F,toolbarColumnFilters:V}}function or({columns:e,data:t,getRowId:n}){let i=f.useRef({columns:e,data:t,getRowId:n}),r=f.useRef(new Set);f.useEffect(()=>{if(!Ys())return;let l=i.current;l.data!==t&&nr(l.data,t)&&!r.current.has("data")&&ja(r.current,"data","The data array identity changed. Keep rows immutable and memoize unchanged data so filtering, row models, and virtual measurements can be reused."),l.columns!==e&&nr(l.columns,e)&&!r.current.has("columns")&&ja(r.current,"columns","The columns array identity changed. Memoize stable column definitions so the search index and table column model can be reused."),l.getRowId!==n&&!r.current.has("getRowId")&&ja(r.current,"getRowId","getRowId identity changed. Memoize it and return an immutable, unique id to preserve row state and virtual scroll anchoring.");let d=new Set;for(let m=0;mObject.is(n,t[i]))}function ja(e,t,n){e.add(t),console.warn(`[data-table-pro] ${n}`);}function Ys(){return globalThis.process?.env?.NODE_ENV!=="production"}var Xs=f.lazy(()=>import('./data-table-auto-page-size-EICVZJQ5.js'));function Kc(e){return Zs(e)}function Zs(e,t={}){let n=t.CardPanel??Ti,i=t.TablePanel??Qi,r$1=e.classNames??{},{rootClassName:l,Button:d,Checkbox:m,Input:p,ScrollArea:h$1,ScrollBar:E,Skeleton:S,Table:A,TableBody:V,TableCell:B,TableFooter:q$1="tfoot",TableHead:F,TableHeader:T,TableRow:u,Tooltip:s$1,TooltipContent:y,TooltipProvider:g=f.Fragment,TooltipTrigger:C}=e,N=Gi(e),D=ji(e),{DataTableFooter:K}=$i(e),W=Wi(e),O=Hi(e,D),R=f.lazy(async()=>{let{createDataTableStateOverlay:w}=await import('./data-table-state-overlay-AQ7VU6EM.js');return {default:w(e)}}),v={minSize:80,size:180,maxSize:720};return function({columns:k,data:M,getRowId:I,children:G,title:x,description:Z,toolbarQueryValue:j$1,onToolbarQueryValueChange:z,toolbarQueryPlaceholder:Y,toolbarQueryDebounceMs:ne,manualFiltering:be=false,enableToolbarQueryFiltering:fe=true,globalFilterFn:De,columnFilters:Se,onColumnFiltersChange:Te,enableColumnFilters:Ee,customToolbar:Ne,compactToolbar:J,rowsPerPageOptions:he=[10,20,50,100],totalRowCount:L,hasNextPage:we,sorting:Ge,onSortingChange:nt,manualSorting:Ye=false,grouping:ot,onGroupingChange:se,manualGrouping:it=false,enableGrouping:Ve=false,groupedColumnMode:gt="reorder",aggregationFns:Oe,pageIndex:Rt,pageSize:mt,autoPageSize:Je=false,onPageIndexChange:bt,onPageSizeChange:ye,pageCount:rt,manualPagination:_e=false,rowSelection:lt,onRowSelectionChange:ve,enableRowSelection:He=false,enableMultiRowSelection:St=true,enableSubRowSelection:Xe=true,getRowCanSelect:de,rowSelectionSelectAllScope:vt="page",expanded:ft,onExpandedChange:Tt,getSubRows:Ae,manualExpanding:$e=false,paginateExpandedRows:wt,filterFromLeafRows:Be,maxLeafRowFilterDepth:Lt,detailPanel:Pt,getRowCanExpand:ke,renderExpandedRow:Ue,columnOrder:st,onColumnOrderChange:dt,enableColumnReordering:Ze=false,columnGroupHeaderHeight:xt,columnPinning:je,onColumnPinningChange:Ct,enableColumnPinning:Nt=false,rowPinning:Ke,onRowPinningChange:Et,enableRowPinning:kt=false,keepPinnedRows:a=true,toolbarActions:b=[],selectionActions:U=[],rowActions:ce=[],csvExport:ae,clipboard:_,enableCellSelection:et=false,cellSelection:Ot,defaultCellSelection:_t,onCellSelectionChange:Ka,gridCommands:Mt,density:ia,onDensityChange:Wa,enableDensityToggle:Qa=false,columnPrefsKey:$,persistence:Pe,savedViews:ie,toolbarDataOperations:ct,initialState:te,state:ue,onStateChange:Ce,apiRef:lr,labels:Kn,summaryRows:sr=[],cardRenderer:qa,cardSizing:dr,cardGridClassName:cr,cardClassName:ur,viewMode:Wn,onViewModeChange:pr,enableViewToggle:gr=false,enablePrint:Qn=false,enableFullscreen:Ta=false,emptyState:mr,stateOverlay:Kt,isLoading:qn=false,loadingRowCount:br,getRowLoadingState:fr,hiddenRows:Yn,showHiddenRows:Jn,onShowHiddenRowsChange:Tr,infiniteScroll:wa,editableRows:Vt,columnVisibility:Xn,onColumnVisibilityChange:wr,columnSizing:Zn,onColumnSizingChange:Cr,enableColumnResizing:eo=false,columnResizeMode:Dr="onEnd",layoutMode:to="fill",stickyHeader:hr=true,showFooter:yr=true,showToolbar:ao=true,dir:Ya="ltr",flexGrow:Wt=true,toolbarVisibility:no,className:Rr,tableClassName:Sr,tableContainerClassName:oo,stripedRows:io=false,getRowClassName:ro,onRowClick:Ja,onActionError:ra,dragAndDrop:Qt,fileUpload:Dt,virtualization:Xa,accessibility:lo,interactiveGrid:Ca}){let Ht=f.useRef(null),so=f.useRef(null),co=f.useRef(null),vr=f.useRef(null),Za=f.useRef(null),Pr=f.useRef(null),[uo,en]=f.useState(0),xr=f.useId(),Er=f.useId();or({columns:k,data:M,getRowId:I}),f.useMemo(()=>s(k),[k]);let xe=f.useMemo(()=>hi(Kn),[Kn]),tn=ct===true?{columnChooser:true,savedViews:true,resetLayout:true}:ct===false?{}:ct??{},an=lo?.mode==="grid"||Ca===true||typeof Ca=="object",[At,Da]=Re({defaultValue:_t??null,onChange:Ka,value:Ot}),kr=j$1??ue?.globalFilter,Mr=Ge??ue?.sorting,Vr=ot??ue?.grouping,ha=Rt??ue?.pagination?.pageIndex,qt=mt??ue?.pagination?.pageSize,Ar=lt??ue?.rowSelection,Fr=Xn??ue?.columnVisibility,Ir=Se??ue?.columnFilters,zr=ft??ue?.expanded,Lr=st??ue?.columnOrder,Nr=je??ue?.columnPinning,Or=Ke??ue?.rowPinning,_r=Zn??ue?.columnSizing,Hr=ia??ue?.density,Br=Wn??ue?.viewMode,Gr=Jn??ue?.showHiddenRows,po=ao&&(no?.title??true),go=po&&x?xr:void 0,mo=po&&Z?Er:void 0;td(ue,{columnFilters:Se!==void 0,columnOrder:st!==void 0,columnPinning:je!==void 0,rowPinning:Ke!==void 0,columnSizing:Zn!==void 0,columnVisibility:Xn!==void 0,density:ia!==void 0,expanded:ft!==void 0,grouping:ot!==void 0,globalFilter:j$1!==void 0,pagination:Rt!==void 0||mt!==void 0,rowSelection:lt!==void 0,showHiddenRows:Jn!==void 0,sorting:Ge!==void 0,viewMode:Wn!==void 0});let $r=Le("globalFilter",z,Ce),Ur=Le("sorting",nt,Ce),jr=Le("grouping",se,Ce),Kr=Le("rowSelection",ve,Ce),Wr=Le("columnVisibility",wr,Ce),Qr=Le("columnFilters",Te,Ce),qr=Le("expanded",Tt,Ce),Yr=Le("columnOrder",dt,Ce),Jr=Le("columnPinning",Ct,Ce),Xr=Le("rowPinning",Et,Ce),Zr=Le("columnSizing",Cr,Ce),el=Le("density",Wa,Ce),tl=Le("viewMode",pr,Ce),al=Le("showHiddenRows",Tr,Ce),ya=f.useCallback(o=>{bt?.(o),Ce?.(P=>({...P,pagination:{pageIndex:o,pageSize:qt??P.pagination.pageSize}}));},[bt,Ce,qt]),nn=f.useCallback(o=>{ye?.(o),Ce?.(P=>({...P,pagination:{pageIndex:ha??P.pagination.pageIndex,pageSize:o}}));},[ye,Ce,ha]),Me=f.useCallback((o,P)=>{ed(P,o,ra);},[ra]),bo=f.useMemo(()=>ce.map(o=>({...o,onClick:P=>{Me({actionKey:o.key,row:P,source:"rowAction"},()=>o.onClick(P));}})),[ce,Me]),fo=f.useMemo(()=>Ja?o=>{Me({row:o.row,source:"rowClick"},()=>Ja(o));}:void 0,[Ja,Me]),nl=f.useCallback((o,P)=>{ra?.({error:o,row:P,source:"edit"});},[ra]),{containerWidth:ol,currentColumnFilters:Ra,currentColumnOrder:on,currentColumnPinning:Sa,currentRowPinning:rn,currentColumnSizing:va,currentColumnVisibility:To,currentDensity:la,currentExpanded:Pa,currentGrouping:ln,currentPagination:tt,currentRowSelection:xa,currentShowHiddenRows:sn,currentSorting:Ea,currentViewMode:Yt,effectiveColumnVisibility:wo,globalFilterValue:il,handleDensityChange:dn,handleShowHiddenRowsChange:cn,handleViewModeChange:un,localSearchValue:Bt,resolvedLoadingRowCount:rl,resolvedToolbarQueryPlaceholder:ll,selectedRowIds:sl,selectedRows:dl,setCurrentColumnFilters:Co,setCurrentColumnOrder:cl,setCurrentColumnPinning:Do,setCurrentRowPinning:ul,setCurrentColumnVisibility:pl,setCurrentExpanded:ho,setCurrentGrouping:gl,setCurrentRowSelection:yo,setCurrentSorting:ml,setLocalColumnSizing:bl,setLocalPagination:pn,setLocalSearchValue:gn,shouldRenderInitialLoading:mn,tableData:fl,tableGetRowId:Tl,visibleData:wl}=Li({columnFilters:Ir,columnOrder:Lr,columnPinning:Nr,rowPinning:Or,columnSizing:_r,columnPrefsKey:$,persistence:Pe,columnVisibility:Fr,columns:k,containerRef:Ht,data:M,density:Hr,enableRowSelection:He,enableToolbarQueryFiltering:fe,expanded:zr,grouping:Vr,getSubRows:Ae,getRowId:I,hiddenRows:Yn,isLoading:qn,loadingRowCount:br,manualFiltering:be,initialState:te,onColumnFiltersChange:Qr,onColumnOrderChange:Yr,onColumnPinningChange:Jr,onRowPinningChange:Xr,onColumnSizingChange:Zr,onColumnVisibilityChange:Wr,onDensityChange:el,onExpandedChange:qr,onGroupingChange:jr,onPageIndexChange:ya,onRowSelectionChange:Kr,onShowHiddenRowsChange:al,onSortingChange:Ur,onToolbarQueryValueChange:$r,onViewModeChange:tl,pageIndex:ha,pageSize:qt,resolvedLabels:xe,rowSelection:Ar,rowsPerPageOptions:he,selectionActions:U,showHiddenRows:Gr,sorting:Mr,toolbarQueryDebounceMs:ne,toolbarQueryPlaceholder:Y,toolbarQueryValue:kr,viewMode:Br}),bn=!!(Ue&&!Pt&&!Ae),Jt=Pt??(Ue?{getRowCanExpand:Ae?void 0:ke,render:Ue}:void 0),[fn,Ro]=Re({defaultValue:()=>bn?te?.expanded??{}:{},onChange:bn?ho:Jt?.onExpandedChange,value:bn?Pa:Jt?.expanded}),{cancelEditing:Tn,clearEditError:So,draftValues:Cl,editErrors:wn,editingRowId:Cn,isEditDirty:Dn,isSavingEdit:hn,saveEdit:yn,setDraftValues:Dl,setEditingRowId:hl,startEditingRow:yl}=a$3({columns:k,editableRows:Vt,onError:nl}),Rl=f.useMemo(()=>({cancel:Tn,cancelOnEscape:Vt?.cancelOnEscape!==false,clearError:So,commit:o=>{yn(o);},commitOnEnter:Vt?.commitOnEnter!==false,errors:wn,isDirty:Dn,isPending:hn}),[Tn,So,Vt?.cancelOnEscape,Vt?.commitOnEnter,wn,Dn,hn,yn]),{viewportElement:Rn,viewportHeight:Sn}=a$4(co,Yt),vo=typeof Je=="object"?Je:void 0,Sl=f.useCallback(o=>{o!==tt.pageSize&&(tt.pageIndex!==0&&ya(0),nn(o),qt===void 0&&pn({pageIndex:0,pageSize:o}));},[tt.pageIndex,tt.pageSize,ya,nn,qt,pn]),vl=Je===true||vo!==void 0,ka=f.useCallback(()=>typeof window>"u"||typeof window.print!="function"?false:(window.print(),true),[]),Ma=f.useCallback(async()=>{let o=Ht.current;return !o||typeof document>"u"?false:document.fullscreenElement?typeof document.exitFullscreen!="function"?false:(await document.exitFullscreen(),true):typeof o.requestFullscreen!="function"?false:(await o.requestFullscreen(),true)},[]),[Po,Pl]=f.useState(false);f.useEffect(()=>{if(!Ta||typeof document>"u")return;let o=()=>{Pl(document.fullscreenElement===Ht.current);};return o(),document.addEventListener("fullscreenchange",o),()=>document.removeEventListener("fullscreenchange",o)},[Ta]);let xl=f.useCallback(()=>{Dt?.disabled||so.current?.click();},[Dt?.disabled]),El=f.useCallback(o=>{Me({source:"fileUpload"},()=>Dt?.onFilesSelected(o));},[Dt,Me]),kl=yi({Button:d,Checkbox:m,DataTableRowActions:D,Tooltip:s$1,TooltipContent:y,TooltipTrigger:C,cancelEditing:Tn,columns:k,editableRows:Vt,editErrors:wn,editingRowId:Cn,enableRowSelection:He,enableRowPinning:kt,hasTreeExpansion:!!Ae,isSavingEdit:hn,isEditDirty:Dn,labels:xe,lastSelectedRowIdRef:Pr,detailPanel:Jt,detailExpanded:fn,onDetailExpandedChange:Ro,rowSelectionSelectAllScope:vt,rowActions:bo,saveEdit:yn,startEditingRow:yl,tableRef:Za}),Ml=f.useMemo(()=>h(k),[k]),{effectivePageCount:Vl,footerTotalRowCount:Al,handleFooterPageIndexChange:Fl,handleFooterPageSizeChange:Il,isPageCountKnown:zl,renderedRows:xo,topPinnedRows:Ll,bottomPinnedRows:Nl,reorderColumn:Eo,rowsToRender:Ol,sentinelRef:ko,table:X,virtualPaddingBottom:_l,virtualPaddingTop:Hl,visibleLeafColumns:vn}=Ei({autoResetPageIndex:false,columnGroupPaths:Ml,columnResizeMode:Dr,dir:Ya,currentColumnFilters:Ra,currentColumnOrder:on,currentColumnPinning:Sa,currentRowPinning:rn,currentColumnSizing:va,currentExpanded:Pa,currentGrouping:ln,currentPagination:tt,currentRowSelection:xa,currentSorting:Ea,currentViewMode:Yt,defaultColumn:v,effectiveColumnVisibility:wo,enableColumnResizing:eo,enableRowPinning:kt,enableRowSelection:He,enableMultiRowSelection:St,enableSubRowSelection:Xe,getRowCanSelect:de,getRowCanExpand:ke,getSubRows:Ae,aggregationFns:Oe,groupedColumnMode:gt,globalFilterFn:De,globalFilterValue:il,hasNextPage:we,handleColumnFiltersChange:Co,handleColumnOrderChange:cl,handleColumnPinningChange:Do,handleRowPinningChange:ul,handleColumnVisibilityChange:pl,handleExpandedChange:ho,handleGroupingChange:gl,infiniteScroll:wa,keepPinnedRows:a,manualFiltering:be,manualGrouping:it,manualExpanding:$e,manualPagination:_e,manualSorting:Ye,onActionError:ra,onPageIndexChange:ya,onPageSizeChange:nn,pageCount:rt,pageIndex:ha,pageSize:qt,paginateExpandedRows:wt,filterFromLeafRows:Be,maxLeafRowFilterDepth:Lt,setCurrentRowSelection:yo,setCurrentSorting:ml,setLocalColumnSizing:bl,setLocalPagination:pn,shouldRenderInitialLoading:mn,tableColumns:kl,tableData:fl,tableGetRowId:Tl,tableRef:Za,totalRowCount:L,virtualization:Xa}),Mo=Oi({columns:k,columnSizing:va,editableRows:!!Vt,enableRowSelection:He,hasRowActions:ce.length>0,hasRowExpansion:!!(Ae||Jt),layoutMode:to,uiClassNames:r$1,visibleLeafColumns:vn}),{explicitlySizedColumnIds:Va,fillMinWidth:Bl,getColumnLayout:Gl}=Mo,$l=f.useMemo(()=>new Set(j(k).flatMap(({column:o,index:P})=>Object.prototype.hasOwnProperty.call(o,"cell")&&typeof o.cell=="function"?[r(o,P)]:[])),[k]),Ul=vn.length,jl=f.useMemo(()=>({Checkbox:m,Input:p,Skeleton:S,TableCell:B,TableRow:u}),[]),Kl=f.useMemo(()=>j(k).some(({column:o})=>o.meta?.cardTitle),[k]),Wl=f.useCallback((o,P)=>{Va.has(o)||Object.prototype.hasOwnProperty.call(X.getState().columnSizing,o)||flushSync(()=>{X.setColumnSizing(pe=>({...pe,[o]:P}));});},[Va,X]),Ql=f.useCallback(o=>{if(Va.has(o)){X.getColumn(o)?.resetSize();return}X.setColumnSizing(P=>{if(!Object.prototype.hasOwnProperty.call(P,o))return P;let pe={...P};return delete pe[o],pe});},[Va,X]),Pn=X.getFilteredRowModel().rows.map(o=>o.original),xn=Kt?.empty??mr,Vo=typeof xn=="function"?xn({rows:Pn,toolbarQueryValue:Bt}):xn,Ao=f.useMemo(()=>Kt?{...Kt,onRetry:Kt.onRetry?()=>Me({source:"retry"},Kt.onRetry):void 0}:void 0,[Me,Kt]),Fo=Ao?.error!=null?jsx(f.Suspense,{fallback:null,children:jsx(R,{labels:xe,overlay:Ao,rows:Pn,toolbarQueryValue:Bt})}):void 0,{columnVisibilityOptions:ql,effectiveToolbarActions:Io,handleClearColumnFilters:Yl,handleToolbarColumnFilterChange:Jl,handleToolbarColumnPinningChange:Xl,toolbarColumnFilters:Zl}=ar({columns:k,currentColumnFilters:Ra,currentColumnPinning:Sa,csvExport:ae,effectiveColumnVisibility:wo,enableColumnFilters:Ee,handleColumnFiltersChange:Co,handleColumnPinningChange:Do,labels:xe,table:X,toolbarActions:b,visibleData:wl}),es=f.useMemo(()=>[...Io,...Qn?[{key:"__print__",label:xe.print,placement:"trailing",onClick:()=>{ka();}}]:[],...Ta?[{key:"__fullscreen__",label:Po?xe.exitFullscreen:xe.enterFullscreen,placement:"trailing",onClick:()=>Ma()}]:[]].map(o=>({...o,onClick:P=>{Me({actionKey:o.key,source:"toolbarAction"},()=>o.onClick(P));}})),[Io,Ta,Qn,Po,ka,xe.enterFullscreen,xe.exitFullscreen,xe.print,Me,Ma]),ts=f.useMemo(()=>U.map(o=>({...o,onClick:P=>{Me({actionKey:o.key,source:"selectionAction"},()=>o.onClick(P));}})),[Me,U]),zo=f.useMemo(()=>({sorting:Ea,pagination:tt,rowSelection:xa,columnVisibility:To,columnFilters:Ra,expanded:Pa,grouping:ln,columnOrder:on,columnPinning:Sa,rowPinning:rn,columnSizing:va,density:la,viewMode:Yt,showHiddenRows:sn,globalFilter:Bt}),[Ra,on,Sa,rn,va,To,la,Pa,ln,tt,xa,sn,Ea,Yt,Bt]),sa=f.useCallback(()=>nd(zo),[zo]),Ft=f.useCallback(o=>{o.sorting!==void 0&&X.setSorting(o.sorting),o.pagination!==void 0&&X.setPagination(o.pagination),o.rowSelection!==void 0&&X.setRowSelection(o.rowSelection),o.columnVisibility!==void 0&&X.setColumnVisibility(o.columnVisibility),o.columnFilters!==void 0&&X.setColumnFilters(o.columnFilters),o.expanded!==void 0&&X.setExpanded(o.expanded),o.grouping!==void 0&&X.setGrouping(o.grouping),o.columnOrder!==void 0&&X.setColumnOrder(o.columnOrder),o.columnPinning!==void 0&&X.setColumnPinning(o.columnPinning),o.rowPinning!==void 0&&X.setRowPinning(o.rowPinning),o.columnSizing!==void 0&&X.setColumnSizing(o.columnSizing),o.density!==void 0&&dn(o.density),o.viewMode!==void 0&&un(o.viewMode),o.showHiddenRows!==void 0&&cn(o.showHiddenRows),o.globalFilter!==void 0&&gn(o.globalFilter);},[dn,cn,un,gn,X]),Xt=f.useCallback(()=>Ai(Pe??$),[$,Pe]),En=f.useCallback(o=>{o?.clearPersistence&&Xt(),Ft({columnVisibility:te?.columnVisibility??{},columnOrder:te?.columnOrder??[],columnPinning:te?.columnPinning??q(k),rowPinning:te?.rowPinning??{top:[],bottom:[]},columnSizing:te?.columnSizing??{}});},[Xt,k,te,Ft]),Lo=f.useCallback(o=>{o?.clearPersistence&&Xt(),Ft({sorting:te?.sorting??[],pagination:te?.pagination??{pageIndex:0,pageSize:he[0]??20},rowSelection:te?.rowSelection??{},columnVisibility:te?.columnVisibility??{},columnFilters:te?.columnFilters??[],expanded:te?.expanded??{},grouping:te?.grouping??[],columnOrder:te?.columnOrder??[],columnPinning:te?.columnPinning??q(k),rowPinning:te?.rowPinning??{top:[],bottom:[]},columnSizing:te?.columnSizing??{},density:te?.density??"comfortable",viewMode:te?.viewMode??"table",showHiddenRows:te?.showHiddenRows??false,globalFilter:te?.globalFilter??""});},[Xt,k,te,Ft,he]),No=f.useCallback(()=>jt(ie),[ie]),Aa=f.useCallback(o=>Ji(ie,o,sa()),[sa,ie]),kn=f.useCallback(o=>{let P=jt(ie).find(pe=>pe.id===o);return P?(Ft(P.state),ie?.onApply?.(P),true):false},[Ft,ie]),Fa=f.useCallback((o,P)=>Xi(ie,o,P),[ie]),Ia=f.useCallback(o=>Zi(ie,o),[ie]),Oo=f.useCallback(()=>er(ie),[ie]),as=f.useMemo(()=>jt(ie),[ie,uo]),ns=f.useCallback(o=>{let P=Aa(o);return P&&en(pe=>pe+1),P},[Aa]),os=f.useCallback((o,P)=>{let pe=Fa(o,P);return pe&&en(Vn=>Vn+1),pe},[Fa]),is=f.useCallback(o=>{let P=Ia(o);return P&&en(pe=>pe+1),P},[Ia]),_o=f.useCallback(o$1=>o({csvExport:o$1??(ae||true),labels:xe,table:X}),[ae,xe,X]),Mn=f.useCallback(async o=>{let{copyDataTableToClipboard:P}=await import('./data-table-clipboard-SFXQFZS3.js');return P({clipboard:o??(_?.copy===false?false:At?{..._?.copy===true?{}:_?.copy,scope:"cellSelection"}:_?.copy??true),cellSelection:At,table:X})},[_?.copy,At,X]),Ho=f.useCallback((o,P="top")=>{try{let pe=X.getRow(o,!0);return pe.getCanPin()?(pe.pin(P),!0):!1}catch{return false}},[X]),Bo=f.useCallback(o=>{try{let P=X.getRow(o,!0);return P.getCanPin()?(P.pin(!1),!0):!1}catch{return false}},[X]);return f.useImperativeHandle(lr,()=>({getTable:()=>Za.current,getState:sa,snapshot:sa,restore:Ft,resetColumnLayout:En,resetState:Lo,clearPersistedState:Xt,getSavedViews:No,createSavedView:Aa,applySavedView:kn,renameSavedView:Fa,deleteSavedView:Ia,clearSavedViews:Oo,pinRow:Ho,unpinRow:Bo,focus:()=>{Ht.current?.focus();},scrollToRow:o=>ir(Ht.current,"row",o),scrollToColumn:o=>ir(Ht.current,"column",o),exportCsv:_o,copyToClipboard:Mn,getCellSelection:()=>At,setCellSelection:Da,clearCellSelection:()=>Da(null),print:ka,toggleFullscreen:Ma}),[kn,Xt,Oo,Mn,At,Aa,Ia,_o,No,sa,Fa,En,Lo,Ft,Ho,ka,Da,Bo,Ma]),jsx(g,{children:jsxs("div",{ref:Ht,"data-dtp-slot":"data-table-root","data-density":la,"data-dtp-striped-rows":io||void 0,"aria-busy":qn||void 0,dir:Ya,tabIndex:-1,className:a$2("@container/data-table data-table-container-query flex w-full min-w-0 flex-col",Wt?"h-full min-h-0 flex-1":"grow",l),onDragEnter:Qt?.onDragEnter,onDragOver:Qt?.onDragOver,onDragLeave:Qt?.onDragLeave,onDrop:Qt?.onDrop,onKeyDown:o=>{if(an&&Mt&&(o.ctrlKey||o.metaKey)&&o.key.toLowerCase()==="z"&&!jn(o.target)){let P=o.shiftKey?Mt.redo:Mt.undo;P&&(o.preventDefault(),Me({source:o.shiftKey?"redo":"undo"},()=>P({cellSelection:At,table:X})));return}!_?.copy||!(o.ctrlKey||o.metaKey)||o.key.toLowerCase()!=="c"||jn(o.target)||(o.preventDefault(),Me({source:"clipboardCopy"},async()=>{await Mn(_.copy===true?void 0:At&&typeof _.copy=="object"&&!_.copy.scope?{..._.copy,scope:"cellSelection"}:_.copy);}));},onPaste:o=>{let P=_?.paste;if(!P||P.enabled===false||jn(o.target))return;let pe=o.clipboardData.getData("text/plain");pe&&((P.preventDefault??true)&&o.preventDefault(),Me({source:"clipboardPaste"},async()=>{let{parseDataTableClipboardText:Vn}=await import('./data-table-clipboard-SFXQFZS3.js');return P.onPaste({table:X,text:pe,values:Vn(pe)})}));},children:[vl?jsx(f.Suspense,{fallback:null,children:jsx(Xs,{config:vo,currentPageSize:tt.pageSize,enabled:true,onPageSizeChange:Sl,viewportElement:Rn,viewportHeight:Sn})}):null,Dt?jsx("input",{ref:so,className:"hidden",type:"file",accept:Dt.accept,multiple:Dt.multiple??true,disabled:Dt.disabled,onChange:o=>{let P=o.currentTarget.files;P?.length&&El(P),o.currentTarget.value="";}}):null,jsx("div",{"data-dtp-slot":"data-table-layout",className:a$2("flex w-full flex-col",Wt?"min-h-0 flex-1":"grow"),children:jsxs("div",{"data-dtp-slot":"data-table-main",className:a$2("flex w-full flex-col gap-4",Wt?"min-h-0 flex-1":"grow",Rr),children:[ao?jsx(Di,{allRows:Pn,columnFilters:Zl,columnVisibilityOptions:ql,compactToolbar:J,customToolbar:Ne,DataTableToolbar:W,density:la,description:Z,descriptionId:mo,effectiveToolbarActions:es,enableColumnPinning:Nt,enableGrouping:Ve,enableToolbarColumnChooser:tn.columnChooser===true,enableToolbarFilterChips:!!ct,enableToolbarResetLayout:tn.resetLayout===true,enableToolbarSavedViews:tn.savedViews===true&&!!ie,enableDensityToggle:Qa,enableViewToggle:gr&&!!qa,hiddenRowsLabel:Yn?.label,labels:xe,onClearColumnFilters:Yl,onColumnFilterChange:Jl,onColumnPinningChange:Xl,onDensityChange:dn,onShowHiddenRowsChange:cn,onToolbarQueryValueChange:gn,reorderColumn:Eo,onResetColumnLayout:En,onCreateSavedView:ns,onApplySavedView:kn,onRenameSavedView:os,onDeleteSavedView:is,onViewModeChange:un,openFileDialog:Dt?xl:void 0,selectedRowIds:sl,selectedRows:dl,selectionActions:ts,savedViews:as,showHiddenRows:sn,table:X,title:x,titleId:go,toolbarQueryPlaceholder:ll,toolbarQueryValue:Bt,toolbarVisibility:no,viewMode:Yt}):null,jsx("div",{"data-dtp-slot":"data-table-content",className:a$2(Wt?"flex min-h-0 flex-1 flex-col":""),children:Yt==="card"&&qa?jsx(n,{cardClassName:ur,cardGridClassName:cr,cardSizing:dr,cardRenderer:qa,containerWidth:ol,currentDetailExpanded:fn,currentRowSelection:xa,DataTableCardView:O,DataTableEmptyState:N,dragAndDrop:Qt,editableRows:Vt,editingRowId:Cn,emptyNode:Vo,stateOverlayNode:Fo,enableRowSelection:He,flexGrow:Wt,getRowClassName:ro,hasCardTitle:Kl,infiniteScroll:wa,localSearchValue:Bt,onRowClick:fo,renderedRows:xo,detailPanel:Jt,resolvedLabels:xe,resolvedLoadingRowCount:rl,rowActions:bo,ScrollArea:h$1,sentinelRef:ko,setCurrentDetailExpanded:Ro,setCurrentRowSelection:yo,setEditingRowId:hl,shouldRenderInitialLoading:mn,tableContainerClassName:oo,uiClassNames:r$1,virtualization:Xa}):jsx(i,{ariaDescribedBy:mo,ariaLabelledBy:go,bodyRowComponents:jl,columnLayouts:Mo.columnLayouts,currentDensity:la,columnGroupHeaderHeight:xt,currentDetailExpanded:fn,currentSorting:Ea,dir:Ya,DataTableEmptyState:N,dragAndDrop:Qt,draggedColumnIdRef:vr,draftValues:Cl,editingRowId:Cn,editingContext:Rl,emptyNode:Vo,stateOverlayNode:Fo,enableColumnReordering:Ze,enableColumnResizing:eo,explicitCustomCellColumnIds:$l,fillMinWidth:Bl,flexGrow:Wt,getColumnLayout:Gl,getRowClassName:ro,getRowLoadingState:fr,infiniteScroll:wa,layoutMode:to,localSearchValue:Bt,onRowClick:fo,primeColumnForResize:Wl,renderedRows:xo,detailPanel:Jt,topPinnedRows:Ll,bottomPinnedRows:Nl,reorderColumn:Eo,resetColumnSize:Ql,resolvedLabels:xe,rowsToRender:Ol,ScrollArea:h$1,ScrollBar:E,sentinelRef:ko,setDraftValues:Dl,shouldRenderInitialLoading:mn,stickyHeader:hr,stripedRows:io,summaryRows:sr,table:X,tableClassName:Sr,tableContainerClassName:oo,Table:A,TableBody:V,TableCell:B,TableFooter:q$1,TableHead:F,TableHeader:T,TableRow:u,tableScrollContainerRef:co,tableScrollElement:Rn,uiClassNames:r$1,viewportHeight:Sn,virtualization:Xa,gridMode:an,gridPageSize:lo?.pageSize??(typeof Ca=="object"?Ca.pageSize:void 0),cellSelectionEnabled:an&&(et||Ot!==void 0||_t!==void 0),cellSelection:At,onCellSelectionChange:Da,gridRowOffset:_e?tt.pageIndex*tt.pageSize:0,totalRowCount:L,virtualPaddingBottom:_l,virtualPaddingTop:Hl,visibleLeafColumnCount:Ul,visibleLeafColumns:vn})}),jsx(wi,{currentPagination:tt,DataTableFooter:K,effectivePageCount:Vl,footerTotalRowCount:Al,handleFooterPageIndexChange:Fl,handleFooterPageSizeChange:Il,labels:xe,pageCountKnown:zl,rowsPerPageOptions:he,showFooter:yr&&!wa?.enabled,children:G})]})})]})})}}function ed(e,t,n){let i;try{i=e();}catch(r){n?.({...t,error:r});return}Promise.resolve(i).catch(r=>{n?.({...t,error:r});});}function Le(e,t,n){let i=f.useCallback(r=>{t?.(r),n?.(l=>({...l,[e]:r}));},[e,t,n]);return t||n?i:void 0}function td(e,t){let n=f.useRef(new Set);f.useEffect(()=>{if(!(!e||!ad()))for(let i of Object.keys(t))e[i]===void 0||!t[i]||n.current.has(i)||(n.current.add(i),console.warn(`[data-table-pro] Both state.${i} and its legacy controlled prop were provided. The legacy prop takes precedence during the 4.x compatibility window.`));},[t,e]);}function ad(){return globalThis.process?.env?.NODE_ENV!=="production"}function nd(e){return {sorting:e.sorting.map(t=>({...t})),pagination:{...e.pagination},rowSelection:{...e.rowSelection},columnVisibility:{...e.columnVisibility},columnFilters:e.columnFilters.map(t=>({...t})),expanded:typeof e.expanded=="boolean"?e.expanded:{...e.expanded},grouping:[...e.grouping??[]],columnOrder:[...e.columnOrder],columnPinning:{left:e.columnPinning.left?[...e.columnPinning.left]:void 0,right:e.columnPinning.right?[...e.columnPinning.right]:void 0},rowPinning:{top:e.rowPinning.top?[...e.rowPinning.top]:void 0,bottom:e.rowPinning.bottom?[...e.rowPinning.bottom]:void 0},columnSizing:{...e.columnSizing},density:e.density,viewMode:e.viewMode,showHiddenRows:e.showHiddenRows,globalFilter:e.globalFilter}}function ir(e,t,n){if(!e)return false;let i=t==="row"?"data-row-id":"data-column-id",r=Array.from(e.querySelectorAll(`[${i}]`)).find(l=>l.getAttribute(i)===n);return r?(r.scrollIntoView?.({block:"nearest",inline:"nearest"}),true):false}function jn(e){return e instanceof HTMLElement?e.isContentEditable||e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement:false}export{Ti as a,wi as b,Di as c,yi as d,Re as e,Ei as f,Li as g,Oi as h,Kc as i,Zs as j};//# sourceMappingURL=chunk-JNI3CH7M.js.map +//# sourceMappingURL=chunk-JNI3CH7M.js.map \ No newline at end of file diff --git a/dist/chunk-JNI3CH7M.js.map b/dist/chunk-JNI3CH7M.js.map new file mode 100644 index 0000000..a3a7f22 --- /dev/null +++ b/dist/chunk-JNI3CH7M.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/data-table-base-card-panel.tsx","../src/core/data-table/data-table-card-panel.tsx","../src/core/data-table/data-table-footer-section.tsx","../src/core/data-table/data-table-toolbar-section.tsx","../src/core/data-table/data-table-labels.ts","../src/core/data-table/use-data-table-columns.tsx","../src/core/data-table/use-controllable-state.ts","../src/core/data-table/use-data-table-infinite-scroll.ts","../src/core/data-table/use-data-table-pagination-clamp.ts","../src/core/data-table/use-data-table-search-index.ts","../src/core/data-table/use-data-table-instance.ts","../src/core/data-table/use-data-table-column-prefs.ts","../src/core/data-table/use-data-table-container-width.ts","../src/core/data-table/use-data-table-state.ts","../src/core/data-table/use-column-layout.ts","../src/core/data-table/create-data-table-card-view.tsx","../src/core/data-table/create-data-table-empty-state.tsx","../src/core/data-table/create-data-table-pagination.tsx","../src/core/data-table/create-data-table-row-actions.tsx","../src/core/data-table/create-data-table-toolbar.tsx","../src/core/data-table/data-table-table-panel-router.tsx","../src/core/data-table/data-table-saved-views.ts","../src/core/data-table/use-data-table-toolbar-features.ts","../src/core/data-table/use-data-table-performance-diagnostics.ts","../src/core/data-table/create-data-table.tsx"],"names":["DataTableBaseCardPanel","cardClassName","cardGridClassName","cardSizing","cardRenderer","currentRowSelection","currentDetailExpanded","DataTableCardView","DataTableEmptyState","dragAndDrop","editableRows","editingRowId","emptyNode","enableRowSelection","flexGrow","getRowClassName","hasCardTitle","infiniteScroll","localSearchValue","onRowClick","renderedRows","detailPanel","resolvedLabels","resolvedLoadingRowCount","rowActions","ScrollArea","sentinelRef","setCurrentDetailExpanded","setCurrentRowSelection","setEditingRowId","shouldRenderInitialLoading","stateOverlayNode","tableContainerClassName","uiClassNames","shouldRenderCards","cardScrollContainerRef","fi","renderCardView","rows","options","jsx","jsxs","cn","LazyDataTableVirtualCardPanel","Ha","DataTableCardPanel","props","config","DataTableFooterSection","children","currentPagination","DataTableFooter","effectivePageCount","footerTotalRowCount","handleFooterPageIndexChange","handleFooterPageSizeChange","labels","pageCountKnown","rowsPerPageOptions","showFooter","DataTableToolbarSection","allRows","columnFilters","columnVisibilityOptions","compactToolbar","customToolbar","DataTableToolbar","description","descriptionId","effectiveToolbarActions","enableColumnPinning","enableGrouping","enableToolbarColumnChooser","enableToolbarFilterChips","enableToolbarResetLayout","enableToolbarSavedViews","enableDensityToggle","enableViewToggle","hiddenRowsLabel","onClearColumnFilters","onColumnFilterChange","onColumnPinningChange","onDensityChange","onShowHiddenRowsChange","onToolbarQueryValueChange","reorderColumn","onResetColumnLayout","onCreateSavedView","onApplySavedView","onRenameSavedView","onDeleteSavedView","onViewModeChange","openFileDialog","selectedRowIds","selectedRows","selectionActions","savedViews","showHiddenRows","table","title","titleId","toolbarQueryPlaceholder","toolbarQueryValue","toolbarVisibility","density","viewMode","columnId","visible","DATA_TABLE_DEFAULT_LABELS","count","label","pageIndex","pageCount","rowId","columnLabel","name","resolveDataTableLabels","useDataTableColumns","Button","Checkbox","DataTableRowActions","Tooltip","TooltipContent","TooltipTrigger","cancelEditing","columns","editErrors","enableRowPinning","hasTreeExpansion","isSavingEdit","isEditDirty","lastSelectedRowIdRef","detailExpanded","onDetailExpandedChange","rowSelectionSelectAllScope","saveEdit","startEditingRow","tableRef","selectRowRange","Ga","targetRowId","selected","tableInstance","row","isDataTableLoadingRow","startIndex","endIndex","from","to","current","next","item","defs","expansionColumnSize","UTILITY_COLUMN_SIZE","canExpandTree","canExpandDetail","isTreeExpanded","isDetailExpanded","IconChevronDown","toggleDataTableExpandedState","selectsFilteredRows","selectableRows","allSelected","someSelected","checked","event","column","decorateFilterableColumn","position","useControllableState","defaultValue","onChange","value","uncontrolledValue","setUncontrolledValue","It","currentValue","currentValueRef","setValue","updater","nextValue","useDataTableInfiniteScroll","enabled","hasMore","isLoadingMore","onLoadMore","onError","zt","isRequestInFlightRef","onLoadMoreEvent","onErrorEvent","error","target","observer","entries","result","useDataTablePaginationClamp","maxPageIndex","onPageIndexChange","setLocalPageIndex","Si","nextPageIndex","useDataTableSearchIndex","Pi","valuesByRow","filterValue","query","normalizeDataTableSearchText","original","valuesByColumn","text","useDataTableInstance","autoResetPageIndex","columnGroupPaths","columnResizeMode","dir","currentColumnFilters","currentColumnOrder","currentColumnPinning","currentRowPinning","currentColumnSizing","currentExpanded","currentGrouping","currentSorting","currentViewMode","defaultColumn","effectiveColumnVisibility","enableColumnResizing","enableMultiRowSelection","enableSubRowSelection","getRowCanSelect","getRowCanExpand","getSubRows","aggregationFns","groupedColumnMode","globalFilterFn","globalFilterValue","hasNextPage","handleColumnFiltersChange","handleColumnOrderChange","handleColumnPinningChange","handleRowPinningChange","handleColumnVisibilityChange","handleExpandedChange","handleGroupingChange","keepPinnedRows","manualFiltering","manualGrouping","manualExpanding","manualPagination","manualSorting","onActionError","onPageSizeChange","pageSize","paginateExpandedRows","filterFromLeafRows","maxLeafRowFilterDepth","setCurrentSorting","setLocalColumnSizing","setLocalPagination","tableColumns","tableData","tableGetRowId","totalRowCount","virtualization","cachedGlobalFilterFn","generatedColumnIds","ze","getDataTableLeafColumns","index","getColumnId","effectiveColumnOrder","columnIds","dataColumnIds","isUtilityColumnId","dataColumnIdSet","orderedDataColumnIds","unorderedDataColumnIds","effectiveColumnPinning","columnIdSet","dataLeft","dataRight","effectiveRowPinning","availableRowIds","visitRows","subRows","top","topIds","bottom","tableState","handlePaginationChange","handleColumnSizingChange","facetingNeeds","uniqueValues","minMaxValues","useReactTable","getCoreRowModel","getFilteredRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues","getGroupedRowModel","getSortedRowModel","getExpandedRowModel","getPaginationRowModel","visibleLeafColumns","sourceColumnId","targetColumnId","canReorderDataTableColumn","defaultOrder","nextOrder","moveColumnInOrder","topPinnedRows","bottomPinnedRows","virtualizationConfig","virtualRowsEnabled","fallbackRowCount","rowsToRender","rowIndex","usesManualRows","derivedTotalRowCount","effectiveTotalRowCount","isPageCountKnown","nextPageSize","STORAGE_PREFIX","DEFAULT_VERSION","ALL_SLICES","readDataTableColumnPrefs","input","resolvePersistenceConfig","storage","resolveStorage","storageKey","getStorageKey","parsed","targetVersion","candidate","isPersistencePayload","selectPersistenceSlices","validateDataTableColumnPrefs","clearDataTableColumnPrefs","usePersistDataTableColumnPrefs","key","persistence","prefs","version","debounceMs","selectedState","serialized","Ut","payload","operation","write","timeout","isRecord","slices","slice","visibility","validateBooleanRecord","sizing","validateSizingRecord","order","validateStringArray","left","right","rowPinning","validateRowPinning","isDataTableDensity","entry","BREAKPOINT_WIDTHS","DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS","first","second","useDataTableContainerWidth","containerRef","widthRef","na","width","setWidth","element","updateWidth","inlineSize","nextWidth","quantizeDataTableContainerWidth","getResizeObserverInlineSize","bucket","breakpointWidth","contentBoxSize","size","getInlineSize","useDataTableState","columnOrder","columnPinning","columnSizing","columnPrefsKey","columnVisibility","data","enableToolbarQueryFiltering","expanded","grouping","getRowId","hiddenRows","initialState","isLoading","loadingRowCount","onColumnFiltersChange","onColumnOrderChange","onRowPinningChange","onColumnSizingChange","onColumnVisibilityChange","onExpandedChange","onGroupingChange","onRowSelectionChange","onSortingChange","rowSelection","sorting","toolbarQueryDebounceMs","persistenceConfig","ee","persistedColumnPrefs","localPagination","currentColumnVisibility","setCurrentColumnVisibility","setCurrentColumnFilters","setCurrentExpanded","setCurrentColumnOrder","setCurrentColumnPinning","getInitialColumnPinning","setCurrentRowPinning","setCurrentColumnSizing","setCurrentViewMode","setCurrentGrouping","currentShowHiddenRows","setCurrentShowHiddenRows","currentDensity","setCurrentDensity","resolvedToolbarQueryValue","resolvedToolbarQueryPlaceholder","resolvedToolbarQueryDebounceMs","setLocalSearchValue","containerWidth","hasOnSearchValueChange","lastReportedSearchValueRef","onToolbarQueryValueChangeEvent","deferredSearchValue","handleViewModeChange","nextViewMode","handleShowHiddenRowsChange","nextShowHiddenRows","handleDensityChange","nextDensity","resetPageIndexForFilterChange","lastFilterStateRef","previous","filtersChanged","globalFilterChanged","responsiveColumnVisibility","isHiddenAtContainerWidth","visibleData","isRowVisible","loadingRows","createDataTableLoadingRows","getDataTableLoadingRowId","shouldResolveSelectedRows","rowById","currentRows","EMPTY_COLUMN_LAYOUT","useColumnLayout","hasRowActions","hasRowExpansion","layoutMode","explicitlySizedColumnIds","ut","ids","minimumColumnWidths","widths","configuredMinWidth","getConfiguredColumnMinWidth","pinnedColumns","leftOffset","getFixedSide","getColumnLayoutSize","rightOffset","fillColumnId","dataColumns","fixedWidthColumnIds","columnLayouts","layouts","isSelectionColumn","isExpansionColumn","isActionsColumn","isUtilityColumn","isSpacerColumn","isFlexibleFillColumn","columnMinWidth","shouldFixWidth","baseStyle","fixedSide","pinnedStyle","cellStyle","getPinnedColumnClassName","fillMinWidth","total","layout","getColumnLayout","createDataTableCardView","ui","Card","CardContent","CardHeader","Skeleton","onEditingRowIdChange","getRowDraggable","onRowDragStart","onRowDragEnd","resolvedCardSizing","resolvedCardGridClassName","getCardGridClassName","cardGridClasses","cardItemClasses","stateClassName","getCardItemClassName","_","originalRow","isSelected","isEditing","hasCardActions","showCardGradient","showCardOverlayControls","handleCardActivate","getCardRendererClassName","isDataTableInteractiveTarget","updateRowSelection","canSelect","canMultiSelect","nextSelection","createDataTableEmptyState","Empty","EmptyContent","EmptyDescription","EmptyHeader","EmptyMedia","EmptyTitle","IconInbox","createDataTablePagination","Pagination","PaginationContent","PaginationEllipsis","PaginationFirst","PaginationItem","PaginationLast","PaginationLink","PaginationNext","PaginationPrevious","Select","SelectContent","SelectGroup","SelectItem","SelectTrigger","SelectValue","DataTablePagination","pages","getVisiblePages","canGoPrevious","canGoNext","lastPageIndex","option","IconDatabase","currentPageIndex","currentPage","page","orderedPages","items","createDataTableRowActions","DropdownMenu","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","onStartEditing","onCancelEditing","actions","action","canUseRowAction","stopRowClickPropagation","Ui","IconX","allowEdit","canEditRow","canPin","IconDots","IconEdit","Fragment","Icon","resolveRowActionLabel","LazyToolbarDataOperations","at","createDataTableToolbar","ButtonGroup","DropdownMenuCheckboxItem","DropdownMenuLabel","InputGroup","InputGroupAddon","InputGroupInput","toolbarActions","compactSearchInputRef","isCompactSearchVisible","setIsCompactSearchVisible","compactToolbarIconButtonClassName","primaryActions","trailingActions","showTitle","showSearch","showActions","showTrailingActions","showOptions","showViewToggle","showCustomToolbar","hasVisibleTitle","hasVisibleSearch","hasVisiblePrimaryActions","hasVisibleSelectionActions","hasVisibleOptions","hasToolbarOperationsMenu","activeColumnFilters","filter","hasColumnFilterValue","toolbarOperationsUi","renderToolbarDataOperations","placement","groupableColumns","groupedColumns","id","hasVisibleViewToggle","hasVisibleTrailingActions","hasVisibleCustomToolbar","hasVisibleCompactToolbar","selectedRowCountLabel","IconSearch","collapsesToIcon","button","context","disabled","IconAdjustmentsHorizontal","isGrouped","IconList","IconLayoutGrid","ToolbarColumnFilterControl","groupingIndex","moveGrouping","nextIndex","nextGrouping","groupingId","facetQuery","setFacetQuery","range","normalizeToolbarRangeValue","inputType","fromLabel","toLabel","parseRangeInputValue","isBoolean","isFaceted","booleanOptions","visibleOptions","selectedValue","selectedValues","selectedLabel","nextValues","LazyDataTableVirtualTablePanel","Ua","DataTableTablePanelRouter","DataTableTablePanel","DEFAULT_SLICES","fallbackId","readDataTableSavedViews","view","validateSavedView","createDataTableSavedView","state","normalizedName","now","createSavedViewId","selectSavedViewSlices","views","writeViews","cloneSavedView","renameDataTableSavedView","renamed","deleteDataTableSavedView","clearDataTableSavedViews","snapshots","snapshot","cloneStateSlice","validateState","validateSorting","pagination","validatePagination","filters","validateFilters","pinning","validatePinning","useDataTableToolbarFeatures","enableColumnFilters","csvExport","yt","header","accessorKey","getAccessorKey","startCase","pinned","toolbarColumnFilters","configuredFacetOptions","facetedMinMax","rawOptions","normalizeColumnFilterOptions","handleToolbarColumnFilterChange","hasFilterValue","handleClearColumnFilters","handleToolbarColumnPinningChange","side","handleCsvExport","exportDataTableCsv","IconDownload","useDataTablePerformanceDiagnostics","fa","warned","isDevelopmentEnvironment","last","haveSameItems","warn","message","DataTableAutoPageSize","createDataTable","createDataTableWithPanels","rootClassName","Input","ScrollBar","Table","TableBody","TableCell","TableFooter","TableHead","TableHeader","TableRow","TooltipProvider","DataTableStateOverlay","createDataTableStateOverlay","autoPageSize","renderExpandedRow","enableColumnReordering","columnGroupHeaderHeight","clipboard","enableCellSelection","cellSelection","defaultCellSelection","onCellSelectionChange","gridCommands","toolbarDataOperations","unifiedState","onStateChange","apiRef","summaryRows","enablePrint","enableFullscreen","emptyState","stateOverlay","getRowLoadingState","stickyHeader","showToolbar","className","tableClassName","stripedRows","fileUpload","accessibility","interactiveGrid","fileInputRef","tableScrollContainerRef","draggedColumnIdRef","toolbarSavedViewsVersion","setToolbarSavedViewsVersion","generatedTitleId","generatedDescriptionId","validateDataTableColumnIds","toolbarOperations","gridMode","currentCellSelection","setCurrentCellSelection","resolvedSorting","resolvedGrouping","resolvedPageIndex","resolvedPageSize","resolvedRowSelection","resolvedColumnVisibility","resolvedColumnFilters","resolvedExpanded","resolvedColumnOrder","resolvedColumnPinning","resolvedRowPinning","resolvedColumnSizing","resolvedDensity","resolvedViewMode","resolvedShowHiddenRows","showTableHeading","useDataTableStateConflictWarnings","handleToolbarQueryValueChange","useDataTableStateSliceChange","handleSortingPropChange","handleGroupingPropChange","handleRowSelectionPropChange","handleColumnVisibilityPropChange","handleColumnFiltersPropChange","handleExpandedPropChange","handleColumnOrderPropChange","handleColumnPinningPropChange","handleRowPinningPropChange","handleColumnSizingPropChange","handleDensityPropChange","handleViewModePropChange","handleShowHiddenRowsPropChange","handlePageIndexPropChange","handlePageSizePropChange","runAction","runDataTableAction","guardedRowActions","guardedOnRowClick","handleEditError","usesLegacyDetailPanelState","resolvedDetailPanel","clearEditError","draftValues","setDraftValues","useRowEditing","rowEditingContext","tableScrollElement","viewportHeight","useDataTableScrollViewport","autoPageSizeConfig","handleAutoPageSizeChange","autoPageSizeEnabled","print","toggleFullscreen","isFullscreen","setIsFullscreen","update","handleSelectedFiles","files","getDataTableColumnGroupPaths","virtualPaddingBottom","virtualPaddingTop","columnLayout","explicitCustomCellColumnIds","visibleLeafColumnCount","bodyRowComponents","primeColumnForResize","currentSize","flushSync","resetColumnSize","filteredData","configuredEmptyState","guardedStateOverlay","guardedToolbarActions","guardedSelectionActions","currentDataTableState","getCurrentState","cloneDataTableState","restoreState","nextState","clearPersistedState","resetColumnLayout","resetState","getSavedViews","createSavedView","applySavedView","renameSavedView","deleteSavedView","clearSavedViews","toolbarSavedViews","handleToolbarCreateSavedView","handleToolbarRenameSavedView","handleToolbarDeleteSavedView","deleted","exportCsvFromApi","copyToClipboard","copyDataTableToClipboard","pinRow","unpinRow","scrollDataTableElementIntoView","isDataTableEditableClipboardTarget","command","paste","parseDataTableClipboardText","onLegacyChange","handleChange","legacySlices","warnedSlicesRef","container","kind","attribute"],"mappings":"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","file":"chunk-JNI3CH7M.js","sourcesContent":["import * as React from \"react\";\nimport type { Row } from \"@tanstack/react-table\";\nimport { cn } from \"../../lib/utils\";\nimport type { DataTableCardPanelProps } from \"./data-table-card-panel-types\";\n\nexport function DataTableBaseCardPanel({\n cardClassName,\n cardGridClassName,\n cardSizing,\n cardRenderer,\n currentRowSelection,\n currentDetailExpanded,\n DataTableCardView,\n DataTableEmptyState,\n dragAndDrop,\n editableRows,\n editingRowId,\n emptyNode,\n enableRowSelection,\n flexGrow,\n getRowClassName,\n hasCardTitle,\n infiniteScroll,\n localSearchValue,\n onRowClick,\n renderedRows,\n detailPanel,\n resolvedLabels,\n resolvedLoadingRowCount,\n rowActions = [],\n ScrollArea,\n sentinelRef,\n setCurrentDetailExpanded,\n setCurrentRowSelection,\n setEditingRowId,\n shouldRenderInitialLoading,\n stateOverlayNode,\n tableContainerClassName,\n uiClassNames,\n}: DataTableCardPanelProps) {\n const shouldRenderCards =\n shouldRenderInitialLoading || renderedRows.length > 0;\n const cardScrollContainerRef = React.useRef(null);\n\n const renderCardView = (\n rows: Array>,\n options?: {\n isLoading?: boolean;\n loadingRowCount?: number;\n },\n ) => (\n \n );\n\n return (\n \n \n \n {shouldRenderCards ? (\n shouldRenderInitialLoading ? (\n renderCardView([], {\n isLoading: true,\n loadingRowCount: resolvedLoadingRowCount,\n })\n ) : (\n renderCardView(renderedRows)\n )\n ) : (\n
    \n {emptyNode ?? (\n \n )}\n
    \n )}\n\n {infiniteScroll?.enabled && !shouldRenderInitialLoading ? (\n
    \n
    \n
    \n ) : null}\n
    \n \n {stateOverlayNode}\n \n );\n}\n","import * as React from \"react\";\nimport { DataTableBaseCardPanel } from \"./data-table-base-card-panel\";\nimport type { DataTableCardPanelProps } from \"./data-table-card-panel-types\";\n\nconst LazyDataTableVirtualCardPanel = React.lazy(async () => {\n const module = await import(\"./data-table-virtual-card-panel\");\n return { default: module.DataTableVirtualCardPanel };\n}) as unknown as typeof DataTableBaseCardPanel;\n\nexport function DataTableCardPanel(\n props: DataTableCardPanelProps,\n) {\n const config =\n typeof props.virtualization === \"object\"\n ? props.virtualization.card\n : undefined;\n\n if (config?.enabled !== true) {\n return ;\n }\n\n return (\n \n }\n >\n \n \n );\n}\n\nexport type { DataTableCardPanelProps };\n","import * as React from \"react\";\nimport type { PaginationState } from \"@tanstack/react-table\";\nimport type { DataTableLabels } from \"../types\";\n\ntype DataTableFooterSectionProps = {\n children?: React.ReactNode;\n currentPagination: PaginationState;\n DataTableFooter: React.ElementType;\n effectivePageCount: number;\n footerTotalRowCount: number | undefined;\n handleFooterPageIndexChange: (pageIndex: number) => void;\n handleFooterPageSizeChange: (pageSize: number) => void;\n labels: DataTableLabels;\n pageCountKnown?: boolean;\n rowsPerPageOptions: Array;\n showFooter: boolean;\n};\n\nexport function DataTableFooterSection({\n children,\n currentPagination,\n DataTableFooter,\n effectivePageCount,\n footerTotalRowCount,\n handleFooterPageIndexChange,\n handleFooterPageSizeChange,\n labels,\n pageCountKnown = true,\n rowsPerPageOptions,\n showFooter,\n}: DataTableFooterSectionProps) {\n if (!showFooter && !children) {\n return null;\n }\n\n return (\n
    \n {showFooter ? (\n \n ) : null}\n {children}\n
    \n );\n}\n","import * as React from \"react\";\nimport type { Table as TanStackTable } from \"@tanstack/react-table\";\nimport type {\n DataTableLabels,\n DataTableProps,\n DataTableSavedView,\n} from \"../types\";\n\ntype DataTableToolbarSectionProps = {\n allRows: Array;\n columnFilters: Array;\n columnVisibilityOptions: Array;\n compactToolbar: React.ReactNode;\n customToolbar: React.ReactNode;\n DataTableToolbar: React.ElementType;\n description: string | undefined;\n descriptionId: string | undefined;\n effectiveToolbarActions: Array;\n enableColumnPinning: boolean;\n enableGrouping: boolean;\n enableToolbarColumnChooser: boolean;\n enableToolbarFilterChips: boolean;\n enableToolbarResetLayout: boolean;\n enableToolbarSavedViews: boolean;\n enableDensityToggle: boolean;\n enableViewToggle: boolean;\n hiddenRowsLabel: string | undefined;\n labels: DataTableLabels;\n onClearColumnFilters: () => void;\n onColumnFilterChange: (columnId: string, value: unknown) => void;\n onColumnPinningChange: (columnId: string, side: \"left\" | \"right\" | false) => void;\n onDensityChange: (density: \"compact\" | \"comfortable\" | \"spacious\") => void;\n onShowHiddenRowsChange: (showHiddenRows: boolean) => void;\n onToolbarQueryValueChange: (value: string) => void;\n reorderColumn: (sourceColumnId: string, targetColumnId: string) => void;\n onResetColumnLayout: () => void;\n onCreateSavedView: (name: string) => DataTableSavedView | undefined;\n onApplySavedView: (id: string) => boolean;\n onRenameSavedView: (id: string, name: string) => DataTableSavedView | undefined;\n onDeleteSavedView: (id: string) => boolean;\n onViewModeChange: (viewMode: \"table\" | \"card\") => void;\n openFileDialog: (() => void) | undefined;\n selectedRowIds: Array;\n selectedRows: Array;\n selectionActions: DataTableProps[\"selectionActions\"];\n savedViews: Array;\n showHiddenRows: boolean;\n table: TanStackTable;\n title: string | undefined;\n titleId: string | undefined;\n toolbarQueryPlaceholder: string;\n toolbarQueryValue: string;\n toolbarVisibility: DataTableProps[\"toolbarVisibility\"];\n density: \"compact\" | \"comfortable\" | \"spacious\";\n viewMode: \"table\" | \"card\";\n};\n\nexport function DataTableToolbarSection({\n allRows,\n columnFilters,\n columnVisibilityOptions,\n compactToolbar,\n customToolbar,\n DataTableToolbar,\n description,\n descriptionId,\n effectiveToolbarActions,\n enableColumnPinning,\n enableGrouping,\n enableToolbarColumnChooser,\n enableToolbarFilterChips,\n enableToolbarResetLayout,\n enableToolbarSavedViews,\n enableDensityToggle,\n enableViewToggle,\n hiddenRowsLabel,\n labels,\n onClearColumnFilters,\n onColumnFilterChange,\n onColumnPinningChange,\n onDensityChange,\n onShowHiddenRowsChange,\n onToolbarQueryValueChange,\n reorderColumn,\n onResetColumnLayout,\n onCreateSavedView,\n onApplySavedView,\n onRenameSavedView,\n onDeleteSavedView,\n onViewModeChange,\n openFileDialog,\n selectedRowIds,\n selectedRows,\n selectionActions,\n savedViews,\n showHiddenRows,\n table,\n title,\n titleId,\n toolbarQueryPlaceholder,\n toolbarQueryValue,\n toolbarVisibility,\n density,\n viewMode,\n}: DataTableToolbarSectionProps) {\n return (\n
    \n {\n table.getColumn(columnId)?.toggleVisibility(visible);\n }}\n enableColumnPinning={enableColumnPinning}\n enableGrouping={enableGrouping}\n enableToolbarColumnChooser={enableToolbarColumnChooser}\n enableToolbarFilterChips={enableToolbarFilterChips}\n enableToolbarResetLayout={enableToolbarResetLayout}\n enableToolbarSavedViews={enableToolbarSavedViews}\n onColumnPinningChange={onColumnPinningChange}\n columnFilters={columnFilters}\n onColumnFilterChange={onColumnFilterChange}\n onClearColumnFilters={onClearColumnFilters}\n onResetColumnLayout={onResetColumnLayout}\n onCreateSavedView={onCreateSavedView}\n onApplySavedView={onApplySavedView}\n onRenameSavedView={onRenameSavedView}\n onDeleteSavedView={onDeleteSavedView}\n density={density}\n onDensityChange={onDensityChange}\n enableDensityToggle={enableDensityToggle}\n labels={labels}\n toolbarVisibility={toolbarVisibility}\n openFileDialog={openFileDialog}\n savedViews={savedViews}\n table={table}\n />\n
    \n );\n}\n","import type { DataTableLabels } from \"../types\";\n\ntype ResolvedDataTableLabels = Required;\n\nexport const DATA_TABLE_DEFAULT_LABELS: ResolvedDataTableLabels = {\n searchPlaceholder: \"Search rows...\",\n searchTable: \"Search table\",\n clearSearch: \"Clear search\",\n noRowsTitle: \"No rows yet\",\n noRowsDescription: \"Create a record or refresh this view once data exists.\",\n noMatchingRowsTitle: \"No matching rows\",\n noMatchingRowsDescription: \"Try a different search term or clear filters.\",\n tableOptions: \"Show table options\",\n columns: \"Columns\",\n filters: \"Filters\",\n clearFilters: \"Clear filters\",\n filterFrom: \"From\",\n filterTo: \"To\",\n filterTrue: \"Yes\",\n filterFalse: \"No\",\n selectedRows: (count) =>\n `${count} record${count === 1 ? \"\" : \"s\"} selected`,\n showHiddenRows: (label) => `Show ${label}`,\n recordsPerPage: \"Records per page\",\n totalRecords: (count) => `Total records: ${count}`,\n pageStatus: (pageIndex, pageCount) => `Page ${pageIndex + 1} of ${pageCount}`,\n pageStatusUnknown: (pageIndex) => `Page ${pageIndex + 1}`,\n pagination: \"Pagination\",\n morePages: \"More pages\",\n firstPage: \"First page\",\n previousPage: \"Previous page\",\n nextPage: \"Next page\",\n lastPage: \"Last page\",\n selectAllVisibleRows: \"Select all visible rows\",\n selectAllFilteredRows: \"Select all filtered rows\",\n selectRow: \"Select row\",\n selectCardRow: (rowId) => `Select row ${rowId}`,\n switchToTableView: \"Switch to table view\",\n switchToCardView: \"Switch to card view\",\n tableView: \"Table view\",\n cardView: \"Card view\",\n allFilterOptions: \"All\",\n actions: \"Actions\",\n rowActions: \"Row actions\",\n editRow: \"Edit row\",\n saveEdit: \"Save\",\n cancelEdit: \"Cancel editing\",\n expandRow: \"Expand row\",\n collapseRow: \"Collapse row\",\n expandRowDetails: \"Expand row details\",\n collapseRowDetails: \"Collapse row details\",\n exportCsv: \"Export CSV\",\n print: \"Print table\",\n enterFullscreen: \"Enter fullscreen\",\n exitFullscreen: \"Exit fullscreen\",\n errorTitle: \"Unable to load this table\",\n errorDescription: \"Try again or check your connection.\",\n retry: \"Retry\",\n density: \"Density\",\n compactDensity: \"Compact\",\n comfortableDensity: \"Comfortable\",\n spaciousDensity: \"Spacious\",\n pinLeft: \"Pin left\",\n pinRight: \"Pin right\",\n unpin: \"Unpin\",\n pinRowToTop: \"Pin row to top\",\n pinRowToBottom: \"Pin row to bottom\",\n unpinRow: \"Unpin row\",\n resizeColumn: (columnLabel) => `Resize ${columnLabel}`,\n grouping: \"Grouping\",\n groupBy: (columnLabel) => `Group by ${columnLabel}`,\n ungroup: (columnLabel) => `Ungroup ${columnLabel}`,\n removeGrouping: (columnLabel) => `Remove ${columnLabel} grouping`,\n moveGroupingEarlier: (columnLabel) => `Move ${columnLabel} grouping earlier`,\n moveGroupingLater: (columnLabel) => `Move ${columnLabel} grouping later`,\n facetSearch: (columnLabel) => `Search ${columnLabel} options`,\n searchColumns: \"Search columns\",\n showAllColumns: \"Show all columns\",\n hideAllColumns: \"Hide all columns\",\n moveColumnEarlier: (columnLabel) => `Move ${columnLabel} earlier`,\n moveColumnLater: (columnLabel) => `Move ${columnLabel} later`,\n resetColumnLayout: \"Reset column layout\",\n savedViews: \"Saved views\",\n createSavedView: \"Create saved view\",\n savedViewName: \"View name\",\n applySavedView: (name) => `Apply saved view ${name}`,\n renameSavedView: (name) => `Rename saved view ${name}`,\n deleteSavedView: (name) => `Delete saved view ${name}`,\n saveSavedView: \"Save view\",\n};\n\nexport function resolveDataTableLabels(\n labels?: Partial,\n): ResolvedDataTableLabels {\n return {\n ...DATA_TABLE_DEFAULT_LABELS,\n ...labels,\n } as ResolvedDataTableLabels;\n}\n","import * as React from \"react\";\nimport type {\n ColumnDef,\n ExpandedState,\n OnChangeFn,\n RowPinningPosition,\n Table as TanStackTable,\n} from \"@tanstack/react-table\";\nimport { IconChevronDown } from \"../icons\";\nimport type {\n DataTableEditableRowsConfig,\n DataTableDetailPanel,\n DataTableLabels,\n DataTableProps,\n DataTableRowAction,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport {\n UTILITY_COLUMN_SIZE,\n decorateFilterableColumn,\n isDataTableLoadingRow,\n toggleDataTableExpandedState,\n} from \"./data-table-utils\";\nimport { DATA_TABLE_DEFAULT_LABELS } from \"./data-table-labels\";\n\ntype DataTableRowActionsComponentProps = {\n editableRows?: DataTableEditableRowsConfig;\n isEditing: boolean;\n labels: DataTableLabels;\n onCancelEditing: () => void;\n onStartEditing: () => void;\n row: TData;\n rowActions: Array>;\n rowPinning?: {\n canPin: boolean;\n position: RowPinningPosition;\n pin: (position: RowPinningPosition) => void;\n };\n};\n\nexport function useDataTableColumns({\n Button,\n Checkbox,\n DataTableRowActions,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cancelEditing,\n columns,\n editableRows,\n editingRowId,\n editErrors,\n enableRowSelection,\n enableRowPinning,\n hasTreeExpansion,\n isSavingEdit,\n isEditDirty,\n labels,\n lastSelectedRowIdRef,\n detailPanel,\n detailExpanded,\n onDetailExpandedChange,\n rowSelectionSelectAllScope,\n rowActions,\n saveEdit,\n startEditingRow,\n tableRef,\n}: {\n Button: DataTableUiKit[\"Button\"];\n Checkbox: DataTableUiKit[\"Checkbox\"];\n DataTableRowActions: React.ComponentType<\n DataTableRowActionsComponentProps\n >;\n Tooltip: DataTableUiKit[\"Tooltip\"];\n TooltipContent: DataTableUiKit[\"TooltipContent\"];\n TooltipTrigger: DataTableUiKit[\"TooltipTrigger\"];\n cancelEditing: () => void;\n columns: DataTableProps[\"columns\"];\n editableRows: DataTableProps[\"editableRows\"];\n editingRowId: string | null;\n editErrors: Record;\n enableRowSelection: boolean;\n enableRowPinning: DataTableProps[\"enableRowPinning\"];\n hasTreeExpansion: boolean;\n isSavingEdit: boolean;\n isEditDirty: boolean;\n labels: DataTableLabels;\n lastSelectedRowIdRef: React.MutableRefObject;\n detailPanel: DataTableDetailPanel | undefined;\n detailExpanded: ExpandedState;\n onDetailExpandedChange: OnChangeFn;\n rowSelectionSelectAllScope: NonNullable<\n DataTableProps[\"rowSelectionSelectAllScope\"]\n >;\n rowActions: Array>;\n saveEdit: (row: TData) => Promise;\n startEditingRow: (row: TData, rowId: string) => void;\n tableRef: React.RefObject | null>;\n}) {\n const selectRowRange = React.useCallback(\n (targetRowId: string, selected: boolean) => {\n const tableInstance = tableRef.current;\n if (!tableInstance || !lastSelectedRowIdRef.current) {\n return;\n }\n\n const rows = tableInstance\n .getRowModel()\n .rows.filter((row) => !isDataTableLoadingRow(row.original));\n const startIndex = rows.findIndex(\n (row) => row.id === lastSelectedRowIdRef.current,\n );\n const endIndex = rows.findIndex((row) => row.id === targetRowId);\n\n if (startIndex < 0 || endIndex < 0) {\n return;\n }\n\n const from = Math.min(startIndex, endIndex);\n const to = Math.max(startIndex, endIndex);\n tableInstance.setRowSelection((current) => {\n const next = { ...current };\n for (const row of rows\n .slice(from, to + 1)\n .filter(\n (item) => item.getCanSelect() && item.getCanMultiSelect(),\n )) {\n if (selected) {\n next[row.id] = true;\n } else {\n delete next[row.id];\n }\n }\n return next;\n });\n },\n [lastSelectedRowIdRef, tableRef],\n );\n\n return React.useMemo>>(() => {\n const defs: Array> = [];\n\n if (hasTreeExpansion || detailPanel) {\n const expansionColumnSize =\n hasTreeExpansion && detailPanel ? 80 : UTILITY_COLUMN_SIZE;\n defs.push({\n id: \"__expand__\",\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n size: expansionColumnSize,\n minSize: expansionColumnSize,\n maxSize: expansionColumnSize,\n header: () => {labels.expandRow},\n cell: ({ row, table }) => {\n const canExpandTree = hasTreeExpansion && row.getCanExpand();\n const canExpandDetail = Boolean(\n detailPanel && (detailPanel.getRowCanExpand?.(row.original) ?? true),\n );\n if (!canExpandTree && !canExpandDetail) {\n return null;\n }\n\n const isTreeExpanded = row.getIsExpanded();\n const isDetailExpanded =\n detailExpanded === true || Boolean(detailExpanded[row.id]);\n return (\n
    \n {canExpandTree ? (\n row.toggleExpanded()}\n >\n \n \n ) : null}\n {canExpandDetail ? (\n {\n onDetailExpandedChange((current) =>\n toggleDataTableExpandedState(\n current,\n row.id,\n table.getCoreRowModel().flatRows.map((item) => item.id),\n ),\n );\n }}\n >\n \n \n ) : null}\n
    \n );\n },\n });\n }\n\n if (enableRowSelection) {\n defs.push({\n id: \"__select__\",\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n size: UTILITY_COLUMN_SIZE,\n minSize: UTILITY_COLUMN_SIZE,\n maxSize: UTILITY_COLUMN_SIZE,\n header: ({ table }) => {\n const selectsFilteredRows = rowSelectionSelectAllScope === \"filtered\";\n const selectableRows = (selectsFilteredRows\n ? table.getFilteredRowModel().flatRows\n : table.getRowModel().flatRows\n ).filter((row) => row.getCanSelect() && row.getCanMultiSelect());\n const allSelected =\n selectableRows.length > 0 &&\n selectableRows.every((row) => row.getIsSelected());\n const someSelected = selectableRows.some((row) => row.getIsSelected());\n const label = selectsFilteredRows\n ? (labels.selectAllFilteredRows ??\n DATA_TABLE_DEFAULT_LABELS.selectAllFilteredRows)\n : (labels.selectAllVisibleRows ??\n DATA_TABLE_DEFAULT_LABELS.selectAllVisibleRows);\n\n if (selectableRows.length === 0) {\n return {label};\n }\n\n return (\n
    \n {\n table.setRowSelection((current) => {\n const next = { ...current };\n for (const row of selectableRows) {\n if (checked === true) {\n next[row.id] = true;\n } else {\n delete next[row.id];\n }\n }\n return next;\n });\n }}\n aria-label={label}\n />\n
    \n );\n },\n cell: ({ row }) => (\n
    \n ) => {\n if (\n !event.shiftKey ||\n !lastSelectedRowIdRef.current ||\n !row.getCanMultiSelect()\n ) {\n lastSelectedRowIdRef.current = row.id;\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n selectRowRange(row.id, !row.getIsSelected());\n lastSelectedRowIdRef.current = row.id;\n }}\n onCheckedChange={(checked: boolean | \"indeterminate\") => {\n lastSelectedRowIdRef.current = row.id;\n row.toggleSelected(checked === true);\n }}\n aria-label={\n labels.selectRow ?? DATA_TABLE_DEFAULT_LABELS.selectRow\n }\n />\n
    \n ),\n });\n }\n\n defs.push(...columns.map((column) => decorateFilterableColumn(column)));\n\n if (rowActions.length || editableRows || enableRowPinning) {\n defs.push({\n id: \"__actions__\",\n enableSorting: false,\n enableResizing: false,\n enableHiding: false,\n size: UTILITY_COLUMN_SIZE,\n minSize: UTILITY_COLUMN_SIZE,\n maxSize: UTILITY_COLUMN_SIZE,\n header: () => {labels.actions},\n cell: ({ row }) => {\n const rowId = row.id;\n const isEditing = editingRowId === rowId;\n\n if (isEditing) {\n return (\n
    \n {editErrors._row ? (\n \n {editErrors._row}\n \n ) : null}\n {\n void saveEdit(row.original);\n }}\n >\n {labels.saveEdit}\n \n \n \n \n \n {labels.cancelEdit}\n \n \n {labels.cancelEdit}\n \n
    \n );\n }\n\n return (\n
    \n {\n startEditingRow(row.original, row.id);\n }}\n onCancelEditing={() => {}}\n labels={labels}\n rowPinning={\n enableRowPinning\n ? {\n canPin: row.getCanPin(),\n position: row.getIsPinned(),\n pin: (position) => row.pin(position),\n }\n : undefined\n }\n />\n
    \n );\n },\n });\n }\n\n return defs;\n }, [\n Button,\n Checkbox,\n DataTableRowActions,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cancelEditing,\n columns,\n editableRows,\n detailExpanded,\n detailPanel,\n editErrors,\n editingRowId,\n enableRowSelection,\n enableRowPinning,\n hasTreeExpansion,\n isSavingEdit,\n isEditDirty,\n labels,\n lastSelectedRowIdRef,\n onDetailExpandedChange,\n rowSelectionSelectAllScope,\n rowActions,\n saveEdit,\n selectRowRange,\n startEditingRow,\n ]);\n}\n","import * as React from \"react\";\nimport type { Updater } from \"@tanstack/react-table\";\n\nexport function useControllableState({\n defaultValue,\n onChange,\n value,\n}: {\n defaultValue: T | (() => T);\n onChange?: (value: T) => void;\n value: T | undefined;\n}) {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n const currentValue = value ?? uncontrolledValue;\n const currentValueRef = React.useRef(currentValue);\n\n React.useEffect(() => {\n currentValueRef.current = currentValue;\n }, [currentValue]);\n\n const setValue = React.useCallback(\n (updater: Updater) => {\n const nextValue =\n typeof updater === \"function\"\n ? (updater as (current: T) => T)(currentValueRef.current)\n : updater;\n currentValueRef.current = nextValue;\n\n onChange?.(nextValue);\n\n if (value === undefined) {\n setUncontrolledValue(nextValue);\n }\n },\n [onChange, value],\n );\n\n return [currentValue, setValue] as const;\n}\n","import * as React from \"react\";\n\nexport function useDataTableInfiniteScroll({\n enabled,\n hasMore,\n isLoadingMore,\n onLoadMore,\n onError,\n}: {\n enabled: boolean;\n hasMore: boolean;\n isLoadingMore?: boolean;\n onLoadMore: () => void | Promise;\n onError?: (error: unknown) => void;\n}) {\n const sentinelRef = React.useRef(null);\n const isRequestInFlightRef = React.useRef(false);\n const onLoadMoreEvent = React.useEffectEvent(onLoadMore);\n const onErrorEvent = React.useEffectEvent((error: unknown) => {\n onError?.(error);\n });\n\n React.useEffect(() => {\n if (!enabled || !hasMore || isLoadingMore) {\n return;\n }\n\n const target = sentinelRef.current;\n if (!target) {\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && !isRequestInFlightRef.current) {\n isRequestInFlightRef.current = true;\n\n let result: void | Promise;\n try {\n result = onLoadMoreEvent();\n } catch (error) {\n isRequestInFlightRef.current = false;\n onErrorEvent(error);\n return;\n }\n\n void Promise.resolve(result)\n .catch((error: unknown) => {\n onErrorEvent(error);\n })\n .finally(() => {\n isRequestInFlightRef.current = false;\n });\n }\n },\n {\n rootMargin: \"200px 0px 200px 0px\",\n },\n );\n\n observer.observe(target);\n\n return () => {\n observer.disconnect();\n };\n }, [enabled, hasMore, isLoadingMore]);\n\n return sentinelRef;\n}\n","import * as React from \"react\";\n\nexport function useDataTablePaginationClamp({\n enabled,\n maxPageIndex,\n onPageIndexChange,\n pageIndex,\n setLocalPageIndex,\n}: {\n enabled: boolean;\n maxPageIndex: number;\n onPageIndexChange?: (pageIndex: number) => void;\n pageIndex: number;\n setLocalPageIndex: (pageIndex: number) => void;\n}) {\n React.useEffect(() => {\n if (!enabled) {\n return;\n }\n\n if (pageIndex >= 0 && pageIndex <= maxPageIndex) {\n return;\n }\n\n const nextPageIndex = Math.min(Math.max(pageIndex, 0), maxPageIndex);\n setLocalPageIndex(nextPageIndex);\n onPageIndexChange?.(nextPageIndex);\n }, [enabled, maxPageIndex, onPageIndexChange, pageIndex, setLocalPageIndex]);\n}\n","import * as React from \"react\";\nimport type { FilterFn, Row } from \"@tanstack/react-table\";\nimport { normalizeDataTableSearchText } from \"./data-table-utils\";\n\n/**\n * Caches each searchable cell against the application-owned row object and\n * stable column id. WeakMap entries disappear with immutable rows and never\n * retain removed data. Mutable rows are deliberately unsupported because a\n * cache cannot safely observe deep changes without defeating its purpose.\n */\nexport function useDataTableSearchIndex(\n) {\n // eslint-disable-next-line react-hooks/immutability -- This weak cache is deliberately populated by TanStack's filter pass, never read during React render.\n return React.useMemo>(() => {\n const valuesByRow = new WeakMap>();\n\n return (row: Row, columnId: string, filterValue: unknown) => {\n const query = normalizeDataTableSearchText(filterValue);\n if (!query) {\n return true;\n }\n\n const original = row.original;\n if (typeof original !== \"object\" || original === null) {\n return normalizeDataTableSearchText(row.getValue(columnId)).includes(\n query,\n );\n }\n\n let valuesByColumn = valuesByRow.get(original);\n if (!valuesByColumn) {\n valuesByColumn = new Map();\n valuesByRow.set(original, valuesByColumn);\n }\n\n let text = valuesByColumn.get(columnId);\n if (text === undefined) {\n const value = row.getValue(columnId);\n text = normalizeDataTableSearchText(value);\n valuesByColumn.set(columnId, text);\n }\n\n return text.includes(query);\n };\n }, []);\n}\n","import * as React from \"react\";\nimport {\n getCoreRowModel,\n getExpandedRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getGroupedRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport type {\n ColumnDef,\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n GroupingState,\n FilterFnOption,\n OnChangeFn,\n PaginationState,\n RowPinningState,\n Row,\n SortingState,\n Table as TanStackTable,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport type { DataTableProps } from \"../types\";\nimport {\n canReorderDataTableColumn,\n getColumnId,\n getDataTableLeafColumns,\n isDataTableLoadingRow,\n isUtilityColumnId,\n moveColumnInOrder,\n} from \"./data-table-utils\";\nimport type { DataTableColumnGroupPaths } from \"./data-table-utils\";\nimport { useDataTableInfiniteScroll } from \"./use-data-table-infinite-scroll\";\nimport { useDataTablePaginationClamp } from \"./use-data-table-pagination-clamp\";\nimport { useDataTableSearchIndex } from \"./use-data-table-search-index\";\n\nexport function useDataTableInstance({\n autoResetPageIndex,\n columnGroupPaths,\n columnResizeMode,\n dir,\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentRowPinning,\n currentColumnSizing,\n currentExpanded,\n currentGrouping,\n currentPagination,\n currentRowSelection,\n currentSorting,\n currentViewMode,\n defaultColumn,\n effectiveColumnVisibility,\n enableColumnResizing,\n enableMultiRowSelection,\n enableRowPinning,\n enableRowSelection,\n enableSubRowSelection,\n getRowCanSelect,\n getRowCanExpand,\n getSubRows,\n aggregationFns,\n groupedColumnMode,\n globalFilterFn,\n globalFilterValue,\n hasNextPage,\n handleColumnFiltersChange,\n handleColumnOrderChange,\n handleColumnPinningChange,\n handleRowPinningChange,\n handleColumnVisibilityChange,\n handleExpandedChange,\n handleGroupingChange,\n infiniteScroll,\n keepPinnedRows,\n manualFiltering,\n manualGrouping,\n manualExpanding,\n manualPagination,\n manualSorting,\n onActionError,\n onPageIndexChange,\n onPageSizeChange,\n pageCount,\n pageIndex,\n pageSize,\n paginateExpandedRows,\n filterFromLeafRows,\n maxLeafRowFilterDepth,\n setCurrentRowSelection,\n setCurrentSorting,\n setLocalColumnSizing,\n setLocalPagination,\n shouldRenderInitialLoading,\n tableColumns,\n tableData,\n tableGetRowId,\n tableRef,\n totalRowCount,\n virtualization,\n}: {\n autoResetPageIndex: boolean;\n columnGroupPaths: DataTableColumnGroupPaths;\n columnResizeMode: DataTableProps[\"columnResizeMode\"];\n dir: NonNullable[\"dir\"]>;\n currentColumnFilters: ColumnFiltersState;\n currentColumnOrder: ColumnOrderState;\n currentColumnPinning: ColumnPinningState;\n currentRowPinning: RowPinningState;\n currentColumnSizing: ColumnSizingState;\n currentExpanded: ExpandedState;\n currentGrouping: GroupingState;\n currentPagination: PaginationState;\n currentRowSelection: Record;\n currentSorting: SortingState;\n currentViewMode: \"table\" | \"card\";\n defaultColumn: Partial>;\n effectiveColumnVisibility: VisibilityState;\n enableColumnResizing: boolean;\n enableMultiRowSelection: NonNullable<\n DataTableProps[\"enableMultiRowSelection\"]\n >;\n enableRowPinning: DataTableProps[\"enableRowPinning\"];\n enableRowSelection: boolean;\n enableSubRowSelection: NonNullable<\n DataTableProps[\"enableSubRowSelection\"]\n >;\n getRowCanSelect: DataTableProps[\"getRowCanSelect\"];\n getRowCanExpand: DataTableProps[\"getRowCanExpand\"];\n getSubRows: DataTableProps[\"getSubRows\"];\n aggregationFns: DataTableProps[\"aggregationFns\"];\n groupedColumnMode: DataTableProps[\"groupedColumnMode\"];\n globalFilterFn: FilterFnOption | undefined;\n globalFilterValue: string;\n hasNextPage?: DataTableProps[\"hasNextPage\"];\n handleColumnFiltersChange: OnChangeFn;\n handleColumnOrderChange: OnChangeFn;\n handleColumnPinningChange: OnChangeFn;\n handleRowPinningChange: OnChangeFn;\n handleColumnVisibilityChange: OnChangeFn;\n handleExpandedChange: OnChangeFn;\n handleGroupingChange: OnChangeFn;\n infiniteScroll: DataTableProps[\"infiniteScroll\"];\n keepPinnedRows: boolean;\n manualFiltering: boolean;\n manualGrouping: boolean;\n manualExpanding: boolean;\n manualPagination: boolean;\n manualSorting: boolean;\n onActionError?: DataTableProps[\"onActionError\"];\n onPageIndexChange: DataTableProps[\"onPageIndexChange\"];\n onPageSizeChange: DataTableProps[\"onPageSizeChange\"];\n pageCount: DataTableProps[\"pageCount\"];\n pageIndex: DataTableProps[\"pageIndex\"];\n pageSize: DataTableProps[\"pageSize\"];\n paginateExpandedRows: DataTableProps[\"paginateExpandedRows\"];\n filterFromLeafRows: DataTableProps[\"filterFromLeafRows\"];\n maxLeafRowFilterDepth: DataTableProps[\"maxLeafRowFilterDepth\"];\n setCurrentRowSelection: OnChangeFn>;\n setCurrentSorting: OnChangeFn;\n setLocalColumnSizing: OnChangeFn;\n setLocalPagination: React.Dispatch>;\n shouldRenderInitialLoading: boolean;\n tableColumns: Array>;\n tableData: Array;\n tableGetRowId: DataTableProps[\"getRowId\"];\n tableRef: React.RefObject | null>;\n tableScrollElement: HTMLElement | null;\n /**\n * @deprecated Filtering now runs through TanStack Table. Retained so\n * advanced 4.x hook callers remain source-compatible.\n */\n toolbarFilteredData?: Array;\n totalRowCount: DataTableProps[\"totalRowCount\"];\n virtualization: DataTableProps[\"virtualization\"];\n viewportHeight: number;\n}) {\n const cachedGlobalFilterFn = useDataTableSearchIndex();\n const generatedColumnIds = React.useMemo(() => {\n return getDataTableLeafColumns(\n tableColumns as DataTableProps[\"columns\"],\n ).map(({ column, index }) => getColumnId(column, index));\n }, [tableColumns]);\n\n const effectiveColumnOrder = React.useMemo(() => {\n const columnIds = generatedColumnIds;\n const dataColumnIds = columnIds.filter(\n (columnId) =>\n !isUtilityColumnId(columnId) && columnId !== \"__spacer__\",\n );\n const dataColumnIdSet = new Set(dataColumnIds);\n const orderedDataColumnIds = currentColumnOrder.filter((columnId) =>\n dataColumnIdSet.has(columnId),\n );\n const unorderedDataColumnIds = dataColumnIds.filter(\n (columnId) => !orderedDataColumnIds.includes(columnId),\n );\n\n return [\n ...columnIds.filter(\n (columnId) => columnId === \"__expand__\" || columnId === \"__select__\",\n ),\n ...orderedDataColumnIds,\n ...unorderedDataColumnIds,\n ...columnIds.filter((columnId) => columnId === \"__spacer__\"),\n ...columnIds.filter((columnId) => columnId === \"__actions__\"),\n ];\n }, [currentColumnOrder, generatedColumnIds]);\n\n const effectiveColumnPinning = React.useMemo(() => {\n const columnIdSet = new Set(generatedColumnIds);\n const dataColumnIdSet = new Set(\n generatedColumnIds.filter(\n (columnId) =>\n !isUtilityColumnId(columnId) && columnId !== \"__spacer__\",\n ),\n );\n const dataLeft = (currentColumnPinning.left ?? []).filter((columnId) =>\n dataColumnIdSet.has(columnId),\n );\n const dataRight = (currentColumnPinning.right ?? []).filter((columnId) =>\n dataColumnIdSet.has(columnId),\n );\n\n return {\n left: [\n ...[\"__expand__\", \"__select__\"].filter((columnId) =>\n columnIdSet.has(columnId),\n ),\n ...dataLeft,\n ],\n right: [\n ...dataRight,\n ...[\"__actions__\"].filter((columnId) => columnIdSet.has(columnId)),\n ],\n };\n }, [currentColumnPinning, generatedColumnIds]);\n\n const effectiveRowPinning = React.useMemo(() => {\n const availableRowIds = new Set();\n const visitRows = (rows: Array) => {\n rows.forEach((row, index) => {\n availableRowIds.add(tableGetRowId(row, index));\n if (!isDataTableLoadingRow(row)) {\n const subRows = getSubRows?.(row, index);\n if (subRows?.length) {\n visitRows(subRows);\n }\n }\n });\n };\n visitRows(tableData);\n const top = (currentRowPinning.top ?? []).filter((rowId) =>\n availableRowIds.has(rowId),\n );\n const topIds = new Set(top);\n const bottom = (currentRowPinning.bottom ?? []).filter(\n (rowId) => availableRowIds.has(rowId) && !topIds.has(rowId),\n );\n return { top, bottom };\n }, [\n currentRowPinning.bottom,\n currentRowPinning.top,\n getSubRows,\n tableData,\n tableGetRowId,\n ]);\n\n const tableState = React.useMemo(\n () => ({\n sorting: currentSorting,\n pagination: currentPagination,\n rowSelection: currentRowSelection,\n columnVisibility: effectiveColumnVisibility,\n columnFilters: currentColumnFilters,\n globalFilter: globalFilterValue,\n expanded: currentExpanded,\n grouping: currentGrouping,\n columnOrder: effectiveColumnOrder,\n columnPinning: effectiveColumnPinning,\n rowPinning: effectiveRowPinning,\n columnSizing: currentColumnSizing,\n }),\n [\n currentColumnFilters,\n currentColumnSizing,\n currentExpanded,\n currentGrouping,\n currentPagination,\n currentRowSelection,\n currentSorting,\n effectiveColumnVisibility,\n effectiveColumnOrder,\n effectiveColumnPinning,\n effectiveRowPinning,\n globalFilterValue,\n ],\n );\n\n const handlePaginationChange = React.useCallback<\n OnChangeFn\n >(\n (updater) => {\n const nextValue =\n typeof updater === \"function\" ? updater(currentPagination) : updater;\n\n if (pageIndex === undefined || pageSize === undefined) {\n setLocalPagination((current) => ({\n pageIndex:\n pageIndex === undefined ? nextValue.pageIndex : current.pageIndex,\n pageSize:\n pageSize === undefined ? nextValue.pageSize : current.pageSize,\n }));\n }\n\n if (nextValue.pageIndex !== currentPagination.pageIndex) {\n onPageIndexChange?.(nextValue.pageIndex);\n }\n if (nextValue.pageSize !== currentPagination.pageSize) {\n onPageSizeChange?.(nextValue.pageSize);\n }\n },\n [\n currentPagination,\n onPageIndexChange,\n onPageSizeChange,\n pageIndex,\n pageSize,\n setLocalPagination,\n ],\n );\n\n const handleColumnSizingChange = React.useCallback<\n OnChangeFn\n >(\n (updater) => {\n setLocalColumnSizing(updater);\n },\n [setLocalColumnSizing],\n );\n\n const facetingNeeds = React.useMemo(\n () => {\n let uniqueValues = false;\n let minMaxValues = false;\n for (const { column } of getDataTableLeafColumns(\n tableColumns as DataTableProps[\"columns\"],\n )) {\n uniqueValues ||= column.meta?.filter?.type === \"faceted\";\n minMaxValues ||= column.meta?.filter?.type === \"numberRange\";\n }\n return { minMaxValues, uniqueValues };\n },\n [tableColumns],\n );\n\n // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Table owns its instance functions.\n const table = useReactTable({\n data: tableData,\n columns: tableColumns,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: manualFiltering ? undefined : getFilteredRowModel(),\n getFacetedRowModel:\n (facetingNeeds.uniqueValues || facetingNeeds.minMaxValues) &&\n !manualFiltering\n ? getFacetedRowModel()\n : undefined,\n getFacetedUniqueValues:\n facetingNeeds.uniqueValues && !manualFiltering\n ? getFacetedUniqueValues()\n : undefined,\n getFacetedMinMaxValues:\n facetingNeeds.minMaxValues && !manualFiltering\n ? getFacetedMinMaxValues()\n : undefined,\n getGroupedRowModel:\n currentGrouping.length && !manualGrouping ? getGroupedRowModel() : undefined,\n getSortedRowModel: manualSorting ? undefined : getSortedRowModel(),\n getExpandedRowModel:\n (getSubRows || currentGrouping.length) && !manualExpanding\n ? getExpandedRowModel()\n : undefined,\n getPaginationRowModel:\n manualPagination || infiniteScroll?.enabled\n ? undefined\n : getPaginationRowModel(),\n enableRowSelection: getRowCanSelect\n ? (row) => enableRowSelection && getRowCanSelect(row.original)\n : enableRowSelection,\n enableRowPinning:\n typeof enableRowPinning === \"function\"\n ? (row) => enableRowPinning(row.original)\n : enableRowPinning,\n keepPinnedRows,\n enableMultiRowSelection:\n typeof enableMultiRowSelection === \"function\"\n ? (row) => enableMultiRowSelection(row.original)\n : enableMultiRowSelection,\n enableSubRowSelection:\n typeof enableSubRowSelection === \"function\"\n ? (row) => enableSubRowSelection(row.original)\n : enableSubRowSelection,\n enableColumnResizing,\n columnResizeMode,\n columnResizeDirection: dir,\n getRowId: tableGetRowId,\n getSubRows,\n getRowCanExpand: getSubRows\n ? (row) => getRowCanExpand?.(row.original) ?? row.subRows.length > 0\n : undefined,\n globalFilterFn: globalFilterFn ?? cachedGlobalFilterFn,\n getColumnCanGlobalFilter: (column) =>\n column.columnDef.enableGlobalFilter !== false &&\n typeof column.accessorFn === \"function\",\n manualSorting,\n manualGrouping,\n manualFiltering,\n manualExpanding,\n manualPagination: manualPagination || Boolean(infiniteScroll?.enabled),\n paginateExpandedRows,\n filterFromLeafRows,\n maxLeafRowFilterDepth,\n defaultColumn,\n autoResetPageIndex,\n state: tableState,\n onSortingChange: setCurrentSorting,\n onPaginationChange: handlePaginationChange,\n onRowSelectionChange: setCurrentRowSelection,\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnFiltersChange: handleColumnFiltersChange,\n onExpandedChange: handleExpandedChange,\n onGroupingChange: handleGroupingChange,\n onColumnOrderChange: handleColumnOrderChange,\n onColumnPinningChange: handleColumnPinningChange,\n onRowPinningChange: handleRowPinningChange,\n onColumnSizingChange: handleColumnSizingChange,\n aggregationFns,\n groupedColumnMode,\n });\n tableRef.current = table;\n\n const visibleLeafColumns = table.getVisibleLeafColumns();\n const reorderColumn = React.useCallback(\n (sourceColumnId: string, targetColumnId: string) => {\n if (sourceColumnId === targetColumnId) {\n return;\n }\n\n if (\n !canReorderDataTableColumn(\n sourceColumnId,\n targetColumnId,\n columnGroupPaths,\n )\n ) {\n return;\n }\n\n const defaultOrder = table\n .getAllLeafColumns()\n .map((column) => column.id)\n .filter((columnId) => !isUtilityColumnId(columnId));\n const nextOrder = moveColumnInOrder(\n currentColumnOrder.length ? currentColumnOrder : defaultOrder,\n sourceColumnId,\n targetColumnId,\n );\n handleColumnOrderChange(nextOrder);\n },\n [columnGroupPaths, currentColumnOrder, handleColumnOrderChange, table],\n );\n\n const topPinnedRows = table.getTopRows();\n const bottomPinnedRows = table.getBottomRows();\n // Card rendering has no top/bottom table regions. Keep its original row\n // model intact rather than silently dropping pinned records.\n const renderedRows =\n currentViewMode === \"table\"\n ? table.getCenterRows()\n : table.getRowModel().rows;\n const virtualizationConfig =\n typeof virtualization === \"object\" ? virtualization : undefined;\n const virtualRowsEnabled =\n virtualization === true || virtualizationConfig?.enabled === true;\n const fallbackRowCount = Math.max(\n 1,\n Math.floor(virtualizationConfig?.fallbackRowCount ?? 20),\n );\n const initialRowsToRender = virtualRowsEnabled\n ? renderedRows.slice(0, fallbackRowCount)\n : renderedRows;\n const rowsToRender = initialRowsToRender.map((row, rowIndex) => ({\n row,\n rowIndex,\n }));\n\n const usesManualRows = manualPagination || Boolean(infiniteScroll?.enabled);\n const derivedTotalRowCount = usesManualRows\n ? undefined\n : table.getFilteredRowModel().rows.length;\n const effectiveTotalRowCount = totalRowCount ?? derivedTotalRowCount;\n const isPageCountKnown =\n !usesManualRows || pageCount !== undefined || totalRowCount !== undefined;\n const footerTotalRowCount = effectiveTotalRowCount;\n const effectivePageCount = shouldRenderInitialLoading\n ? 1\n : (pageCount ??\n (effectiveTotalRowCount !== undefined\n ? Math.max(\n 1,\n Math.ceil(effectiveTotalRowCount / currentPagination.pageSize),\n )\n : usesManualRows\n ? currentPagination.pageIndex + (hasNextPage ? 2 : 1)\n : table.getPageCount()));\n const maxPageIndex = Math.max(0, effectivePageCount - 1);\n\n const setLocalPageIndex = React.useCallback(\n (nextPageIndex: number) => {\n if (pageIndex !== undefined) {\n return;\n }\n\n setLocalPagination((current) =>\n current.pageIndex === nextPageIndex\n ? current\n : { ...current, pageIndex: nextPageIndex },\n );\n },\n [pageIndex, setLocalPagination],\n );\n useDataTablePaginationClamp({\n enabled:\n !shouldRenderInitialLoading &&\n !infiniteScroll?.enabled &&\n isPageCountKnown,\n maxPageIndex,\n onPageIndexChange,\n pageIndex: currentPagination.pageIndex,\n setLocalPageIndex,\n });\n\n const handleFooterPageIndexChange = React.useCallback(\n (nextPageIndex: number) => {\n if (nextPageIndex === currentPagination.pageIndex) {\n return;\n }\n\n onPageIndexChange?.(nextPageIndex);\n if (pageIndex === undefined) {\n setLocalPagination((current) =>\n current.pageIndex === nextPageIndex\n ? current\n : { ...current, pageIndex: nextPageIndex },\n );\n }\n },\n [\n currentPagination.pageIndex,\n onPageIndexChange,\n pageIndex,\n setLocalPagination,\n ],\n );\n const handleFooterPageSizeChange = React.useCallback(\n (nextPageSize: number) => {\n if (currentPagination.pageIndex !== 0) {\n onPageIndexChange?.(0);\n }\n if (nextPageSize !== currentPagination.pageSize) {\n onPageSizeChange?.(nextPageSize);\n }\n if (pageSize === undefined) {\n setLocalPagination({\n pageIndex: 0,\n pageSize: nextPageSize,\n });\n }\n },\n [\n currentPagination.pageIndex,\n currentPagination.pageSize,\n onPageIndexChange,\n onPageSizeChange,\n pageSize,\n setLocalPagination,\n ],\n );\n\n const sentinelRef = useDataTableInfiniteScroll({\n enabled: Boolean(infiniteScroll?.enabled),\n hasMore: Boolean(infiniteScroll?.hasMore),\n isLoadingMore: infiniteScroll?.isLoadingMore,\n onLoadMore: () => infiniteScroll?.onLoadMore(),\n onError: (error) => {\n onActionError?.({\n error,\n source: \"infiniteScroll\",\n });\n },\n });\n\n return {\n effectivePageCount,\n footerTotalRowCount,\n handleFooterPageIndexChange,\n handleFooterPageSizeChange,\n isPageCountKnown,\n renderedRows,\n topPinnedRows,\n bottomPinnedRows,\n reorderColumn,\n rowsToRender,\n sentinelRef,\n table,\n virtualPaddingBottom: 0,\n virtualPaddingTop: 0,\n visibleLeafColumns,\n };\n}\n\nexport type DataTableRowsToRender = Array<{\n row: Row;\n rowIndex: number;\n}>;\n","import * as React from \"react\";\nimport type {\n DataTableColumnPrefs,\n DataTableDensity,\n DataTablePersistenceConfig,\n DataTablePersistencePayload,\n DataTablePersistenceSlice,\n DataTablePersistenceStorage,\n} from \"../types\";\nimport type { RowPinningState } from \"@tanstack/react-table\";\n\nconst STORAGE_PREFIX = \"data-table-pro:column-prefs:\";\nconst DEFAULT_VERSION = 1;\nconst ALL_SLICES: Array = [\n \"visibility\",\n \"sizing\",\n \"order\",\n \"pinning\",\n \"rowPinning\",\n \"density\",\n];\n\nexport function readDataTableColumnPrefs(\n input: string | DataTablePersistenceConfig | undefined,\n): DataTableColumnPrefs {\n const config = resolvePersistenceConfig(input);\n if (!config) {\n return {};\n }\n\n const storage = resolveStorage(config);\n if (!storage) {\n return {};\n }\n const storageKey = getStorageKey(config.key);\n\n let value: string | null;\n try {\n value = storage.getItem(storageKey);\n } catch (error) {\n config.onError?.({ error, operation: \"read\" });\n return {};\n }\n if (!value) {\n return {};\n }\n\n let parsed: unknown;\n try {\n parsed = (config.deserialize ?? JSON.parse)(value);\n } catch (error) {\n config.onError?.({ error, operation: \"deserialize\" });\n return {};\n }\n\n const targetVersion = config.version ?? DEFAULT_VERSION;\n let candidate: unknown;\n if (isPersistencePayload(parsed)) {\n if (parsed.version === targetVersion) {\n candidate = parsed.state;\n } else if (config.migrate) {\n try {\n candidate = config.migrate(\n {\n version: parsed.version,\n state: parsed.state,\n },\n targetVersion,\n );\n } catch (error) {\n config.onError?.({ error, operation: \"migrate\" });\n return {};\n }\n } else {\n return {};\n }\n } else {\n // Raw objects are the legacy columnPrefsKey format. They are validated and\n // upgraded to a versioned envelope on the next successful write.\n candidate = parsed;\n }\n\n return selectPersistenceSlices(\n validateDataTableColumnPrefs(candidate),\n config.slices,\n );\n}\n\nexport function clearDataTableColumnPrefs(\n input: string | DataTablePersistenceConfig | undefined,\n) {\n const config = resolvePersistenceConfig(input);\n if (!config) {\n return false;\n }\n\n const storage = resolveStorage(config);\n if (!storage) {\n return false;\n }\n\n try {\n storage.removeItem(getStorageKey(config.key));\n return true;\n } catch (error) {\n config.onError?.({ error, operation: \"remove\" });\n return false;\n }\n}\n\nexport function usePersistDataTableColumnPrefs({\n key,\n persistence,\n prefs,\n}: {\n key?: string;\n persistence?: DataTablePersistenceConfig;\n prefs: DataTableColumnPrefs;\n}) {\n const config = persistence ?? resolvePersistenceConfig(key);\n const storage = config ? resolveStorage(config) : undefined;\n const storageKey = config ? getStorageKey(config.key) : undefined;\n const version = config?.version ?? DEFAULT_VERSION;\n const debounceMs = Math.max(0, config?.debounceMs ?? 100);\n const selectedState = selectPersistenceSlices(prefs, config?.slices);\n const serialized = React.useMemo(() => {\n if (!config) {\n return { value: undefined };\n }\n\n try {\n const payload: DataTablePersistencePayload = {\n version,\n state: selectedState,\n };\n return {\n value: (config.serialize ?? JSON.stringify)(payload),\n };\n } catch (error) {\n return { error, value: undefined };\n }\n }, [config, selectedState, version]);\n const onErrorEvent = React.useEffectEvent(\n (\n error: unknown,\n operation: \"serialize\" | \"write\",\n ) => {\n config?.onError?.({ error, operation });\n },\n );\n\n React.useEffect(() => {\n if (serialized.error !== undefined) {\n onErrorEvent(serialized.error, \"serialize\");\n }\n }, [serialized.error]);\n\n React.useEffect(() => {\n if (!storage || !storageKey || serialized.value === undefined) {\n return;\n }\n\n const write = () => {\n try {\n if (storage.getItem(storageKey) === serialized.value) {\n return;\n }\n storage.setItem(storageKey, serialized.value);\n } catch (error) {\n onErrorEvent(error, \"write\");\n }\n };\n\n if (debounceMs === 0) {\n write();\n return;\n }\n\n const timeout = globalThis.setTimeout(write, debounceMs);\n return () => {\n globalThis.clearTimeout(timeout);\n };\n }, [debounceMs, serialized.value, storage, storageKey]);\n}\n\nfunction resolvePersistenceConfig(\n input: string | DataTablePersistenceConfig | undefined,\n): DataTablePersistenceConfig | undefined {\n if (!input) {\n return undefined;\n }\n\n return typeof input === \"string\" ? { key: input } : input;\n}\n\nfunction resolveStorage(\n config: DataTablePersistenceConfig,\n): DataTablePersistenceStorage | undefined {\n if (config.storage) {\n return config.storage;\n }\n\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n try {\n return window.localStorage;\n } catch (error) {\n config.onError?.({ error, operation: \"read\" });\n return undefined;\n }\n}\n\nfunction getStorageKey(key: string) {\n return `${STORAGE_PREFIX}${key}`;\n}\n\nfunction isPersistencePayload(\n value: unknown,\n): value is { version: unknown; state: unknown } {\n return (\n isRecord(value) &&\n Object.prototype.hasOwnProperty.call(value, \"version\") &&\n Object.prototype.hasOwnProperty.call(value, \"state\")\n );\n}\n\nfunction selectPersistenceSlices(\n prefs: DataTableColumnPrefs,\n slices: Array | undefined,\n) {\n const selected = new Set(slices ?? ALL_SLICES);\n const result: DataTableColumnPrefs = {};\n\n for (const slice of ALL_SLICES) {\n if (selected.has(slice) && prefs[slice] !== undefined) {\n Object.assign(result, { [slice]: prefs[slice] });\n }\n }\n\n return result;\n}\n\nfunction validateDataTableColumnPrefs(value: unknown): DataTableColumnPrefs {\n if (!isRecord(value)) {\n return {};\n }\n\n const prefs: DataTableColumnPrefs = {};\n const visibility = validateBooleanRecord(value.visibility);\n if (visibility) {\n prefs.visibility = visibility;\n }\n const sizing = validateSizingRecord(value.sizing);\n if (sizing) {\n prefs.sizing = sizing;\n }\n const order = validateStringArray(value.order);\n if (order) {\n prefs.order = order;\n }\n if (isRecord(value.pinning)) {\n const left = validateStringArray(value.pinning.left) ?? [];\n const right = validateStringArray(value.pinning.right) ?? [];\n prefs.pinning = { left, right };\n }\n const rowPinning = validateRowPinning(value.rowPinning);\n if (rowPinning) {\n prefs.rowPinning = rowPinning;\n }\n if (isDataTableDensity(value.density)) {\n prefs.density = value.density;\n }\n\n return prefs;\n}\n\nfunction validateBooleanRecord(value: unknown) {\n if (!isRecord(value)) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, boolean] => typeof entry[1] === \"boolean\",\n ),\n );\n}\n\nfunction validateSizingRecord(value: unknown) {\n if (!isRecord(value)) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, number] =>\n typeof entry[1] === \"number\" &&\n Number.isFinite(entry[1]) &&\n entry[1] >= 0,\n ),\n );\n}\n\nfunction validateStringArray(value: unknown) {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction validateRowPinning(value: unknown): RowPinningState | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n return {\n top: validateStringArray(value.top) ?? [],\n bottom: validateStringArray(value.bottom) ?? [],\n };\n}\n\nfunction isDataTableDensity(value: unknown): value is DataTableDensity {\n return (\n value === \"compact\" ||\n value === \"comfortable\" ||\n value === \"spacious\"\n );\n}\n\nfunction isRecord(value: unknown): value is Record {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n","import * as React from \"react\";\nimport { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS } from \"../types\";\n\nconst BREAKPOINT_WIDTHS = Object.values(DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS)\n .slice()\n .sort((first, second) => first - second);\n\nexport function useDataTableContainerWidth(\n containerRef: React.RefObject,\n) {\n const widthRef = React.useRef(0);\n const [width, setWidth] = React.useState(0);\n\n React.useEffect(() => {\n const element = containerRef.current;\n if (!element) {\n return;\n }\n\n const updateWidth = (inlineSize = element.clientWidth) => {\n const nextWidth = quantizeDataTableContainerWidth(inlineSize);\n if (nextWidth === widthRef.current) {\n return;\n }\n\n widthRef.current = nextWidth;\n setWidth(nextWidth);\n };\n\n updateWidth();\n\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n updateWidth(entry ? getResizeObserverInlineSize(entry) : undefined);\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [containerRef]);\n\n return width;\n}\n\nexport function quantizeDataTableContainerWidth(width: number) {\n if (width <= 0) {\n return 0;\n }\n\n let bucket = 1;\n for (const breakpointWidth of BREAKPOINT_WIDTHS) {\n if (width < breakpointWidth) {\n break;\n }\n bucket = breakpointWidth;\n }\n\n return bucket;\n}\n\nfunction getResizeObserverInlineSize(entry: ResizeObserverEntry) {\n const contentBoxSize: unknown = entry.contentBoxSize;\n const size: unknown = Array.isArray(contentBoxSize)\n ? contentBoxSize[0]\n : contentBoxSize;\n const inlineSize = getInlineSize(size);\n\n return inlineSize ?? entry.contentRect.width;\n}\n\nfunction getInlineSize(value: unknown) {\n if (typeof value !== \"object\" || value === null) {\n return undefined;\n }\n\n const inlineSize = (value as { inlineSize?: unknown }).inlineSize;\n return typeof inlineSize === \"number\" ? inlineSize : undefined;\n}\n","import * as React from \"react\";\nimport type {\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n GroupingState,\n PaginationState,\n RowPinningState,\n SortingState,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableDensity,\n DataTableLabels,\n DataTableProps,\n} from \"../types\";\nimport {\n createDataTableLoadingRows,\n getColumnId,\n getDataTableLeafColumns,\n getDataTableLoadingRowId,\n getInitialColumnPinning,\n isDataTableLoadingRow,\n} from \"./data-table-utils\";\nimport {\n readDataTableColumnPrefs,\n usePersistDataTableColumnPrefs,\n} from \"./use-data-table-column-prefs\";\nimport { useControllableState } from \"./use-controllable-state\";\nimport { useDataTableContainerWidth } from \"./use-data-table-container-width\";\nimport { isHiddenAtContainerWidth, isRowVisible } from \"../types\";\n\nexport function useDataTableState({\n columnFilters,\n columnOrder,\n columnPinning,\n rowPinning,\n columnSizing,\n columnPrefsKey,\n persistence,\n columnVisibility,\n columns,\n data,\n density,\n enableRowSelection,\n enableToolbarQueryFiltering,\n expanded,\n grouping,\n getSubRows,\n getRowId,\n hiddenRows,\n initialState,\n isLoading,\n loadingRowCount,\n manualFiltering,\n onColumnFiltersChange,\n onColumnOrderChange,\n onColumnPinningChange,\n onRowPinningChange,\n onColumnSizingChange,\n onColumnVisibilityChange,\n onDensityChange,\n onExpandedChange,\n onGroupingChange,\n onPageIndexChange,\n onRowSelectionChange,\n onShowHiddenRowsChange,\n onSortingChange,\n onToolbarQueryValueChange,\n onViewModeChange,\n pageIndex,\n pageSize,\n resolvedLabels,\n rowSelection,\n rowsPerPageOptions,\n selectionActions,\n showHiddenRows,\n sorting,\n toolbarQueryDebounceMs,\n toolbarQueryPlaceholder,\n toolbarQueryValue,\n viewMode,\n containerRef,\n}: {\n columnFilters: DataTableProps[\"columnFilters\"];\n columnOrder: DataTableProps[\"columnOrder\"];\n columnPinning: DataTableProps[\"columnPinning\"];\n rowPinning: DataTableProps[\"rowPinning\"];\n columnSizing?: DataTableProps[\"columnSizing\"];\n columnPrefsKey: DataTableProps[\"columnPrefsKey\"];\n persistence?: DataTableProps[\"persistence\"];\n columnVisibility: DataTableProps[\"columnVisibility\"];\n columns: DataTableProps[\"columns\"];\n data: DataTableProps[\"data\"];\n density: DataTableProps[\"density\"];\n enableRowSelection: boolean;\n enableToolbarQueryFiltering: boolean;\n expanded: DataTableProps[\"expanded\"];\n grouping: DataTableProps[\"grouping\"];\n getSubRows: DataTableProps[\"getSubRows\"];\n getRowId: DataTableProps[\"getRowId\"];\n hiddenRows: DataTableProps[\"hiddenRows\"];\n initialState?: DataTableProps[\"initialState\"];\n isLoading: boolean;\n loadingRowCount: DataTableProps[\"loadingRowCount\"];\n manualFiltering: boolean;\n onColumnFiltersChange: DataTableProps[\"onColumnFiltersChange\"];\n onColumnOrderChange: DataTableProps[\"onColumnOrderChange\"];\n onColumnPinningChange: DataTableProps[\"onColumnPinningChange\"];\n onRowPinningChange: DataTableProps[\"onRowPinningChange\"];\n onColumnSizingChange?: DataTableProps[\"onColumnSizingChange\"];\n onColumnVisibilityChange: DataTableProps[\"onColumnVisibilityChange\"];\n onDensityChange: DataTableProps[\"onDensityChange\"];\n onExpandedChange: DataTableProps[\"onExpandedChange\"];\n onGroupingChange: DataTableProps[\"onGroupingChange\"];\n onPageIndexChange: DataTableProps[\"onPageIndexChange\"];\n onRowSelectionChange: DataTableProps[\"onRowSelectionChange\"];\n onShowHiddenRowsChange: DataTableProps[\"onShowHiddenRowsChange\"];\n onSortingChange: DataTableProps[\"onSortingChange\"];\n onToolbarQueryValueChange: DataTableProps[\"onToolbarQueryValueChange\"];\n onViewModeChange: DataTableProps[\"onViewModeChange\"];\n pageIndex: DataTableProps[\"pageIndex\"];\n pageSize: DataTableProps[\"pageSize\"];\n resolvedLabels: DataTableLabels;\n rowSelection: DataTableProps[\"rowSelection\"];\n rowsPerPageOptions: Array;\n selectionActions: DataTableProps[\"selectionActions\"];\n showHiddenRows: DataTableProps[\"showHiddenRows\"];\n sorting: DataTableProps[\"sorting\"];\n toolbarQueryDebounceMs: DataTableProps[\"toolbarQueryDebounceMs\"];\n toolbarQueryPlaceholder: DataTableProps[\"toolbarQueryPlaceholder\"];\n toolbarQueryValue: DataTableProps[\"toolbarQueryValue\"];\n viewMode: DataTableProps[\"viewMode\"];\n containerRef: React.RefObject;\n}) {\n const persistenceConfig = React.useMemo(\n () => persistence ?? (columnPrefsKey ? { key: columnPrefsKey } : undefined),\n [columnPrefsKey, persistence],\n );\n const persistedColumnPrefs = React.useMemo(\n () => readDataTableColumnPrefs(persistenceConfig),\n [persistenceConfig],\n );\n const [localPagination, setLocalPagination] =\n React.useState({\n pageIndex: initialState?.pagination?.pageIndex ?? 0,\n pageSize:\n initialState?.pagination?.pageSize ??\n rowsPerPageOptions[0] ??\n 20,\n });\n const [currentSorting, setCurrentSorting] =\n useControllableState({\n value: sorting,\n onChange: onSortingChange,\n defaultValue: () => initialState?.sorting ?? [],\n });\n const [currentRowSelection, setCurrentRowSelection] = useControllableState<\n Record\n >({\n value: rowSelection,\n onChange: onRowSelectionChange,\n defaultValue: () => initialState?.rowSelection ?? {},\n });\n const [currentColumnVisibility, setCurrentColumnVisibility] =\n useControllableState({\n value: columnVisibility,\n onChange: onColumnVisibilityChange,\n defaultValue: () =>\n initialState?.columnVisibility ??\n persistedColumnPrefs.visibility ??\n {},\n });\n const [currentColumnFilters, setCurrentColumnFilters] =\n useControllableState({\n value: columnFilters,\n onChange: onColumnFiltersChange,\n defaultValue: () => initialState?.columnFilters ?? [],\n });\n const [currentExpanded, setCurrentExpanded] =\n useControllableState({\n value: expanded,\n onChange: onExpandedChange,\n defaultValue: () => initialState?.expanded ?? {},\n });\n const [currentColumnOrder, setCurrentColumnOrder] =\n useControllableState({\n value: columnOrder,\n onChange: onColumnOrderChange,\n defaultValue: () =>\n initialState?.columnOrder ?? persistedColumnPrefs.order ?? [],\n });\n const [currentColumnPinning, setCurrentColumnPinning] =\n useControllableState({\n value: columnPinning,\n onChange: onColumnPinningChange,\n defaultValue: () =>\n initialState?.columnPinning ??\n persistedColumnPrefs.pinning ??\n getInitialColumnPinning(columns),\n });\n const [currentRowPinning, setCurrentRowPinning] =\n useControllableState({\n value: rowPinning,\n onChange: onRowPinningChange,\n defaultValue: () =>\n initialState?.rowPinning ?? persistedColumnPrefs.rowPinning ?? {\n top: [],\n bottom: [],\n },\n });\n const [currentColumnSizing, setCurrentColumnSizing] =\n useControllableState({\n value: columnSizing,\n onChange: onColumnSizingChange,\n defaultValue: () =>\n initialState?.columnSizing ?? persistedColumnPrefs.sizing ?? {},\n });\n const [currentViewMode, setCurrentViewMode] = useControllableState<\n \"table\" | \"card\"\n >({\n value: viewMode,\n onChange: onViewModeChange,\n defaultValue: () => initialState?.viewMode ?? \"table\",\n });\n const [currentGrouping, setCurrentGrouping] = useControllableState({\n value: grouping,\n onChange: onGroupingChange,\n defaultValue: () => initialState?.grouping ?? [],\n });\n const [currentShowHiddenRows, setCurrentShowHiddenRows] =\n useControllableState({\n value: showHiddenRows,\n onChange: onShowHiddenRowsChange,\n defaultValue: () => initialState?.showHiddenRows ?? false,\n });\n const [currentDensity, setCurrentDensity] =\n useControllableState({\n value: density,\n onChange: onDensityChange,\n defaultValue: () =>\n initialState?.density ??\n persistedColumnPrefs.density ??\n \"comfortable\",\n });\n const resolvedToolbarQueryValue =\n toolbarQueryValue ?? initialState?.globalFilter ?? \"\";\n const resolvedToolbarQueryPlaceholder =\n toolbarQueryPlaceholder ?? resolvedLabels.searchPlaceholder;\n const resolvedToolbarQueryDebounceMs = toolbarQueryDebounceMs ?? 250;\n const [localSearchValue, setLocalSearchValue] = React.useState(\n resolvedToolbarQueryValue,\n );\n const containerWidth = useDataTableContainerWidth(containerRef);\n const hasOnSearchValueChange = Boolean(onToolbarQueryValueChange);\n const lastReportedSearchValueRef = React.useRef(resolvedToolbarQueryValue);\n const onToolbarQueryValueChangeEvent = React.useEffectEvent(\n (value: string) => {\n lastReportedSearchValueRef.current = value;\n onToolbarQueryValueChange?.(value);\n },\n );\n\n React.useEffect(() => {\n lastReportedSearchValueRef.current = resolvedToolbarQueryValue;\n // A controlled query change must replace any pending debounced draft.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setLocalSearchValue(resolvedToolbarQueryValue);\n }, [resolvedToolbarQueryValue]);\n\n React.useEffect(() => {\n if (!hasOnSearchValueChange) {\n return;\n }\n\n if (localSearchValue === resolvedToolbarQueryValue) {\n return;\n }\n\n if (localSearchValue === lastReportedSearchValueRef.current) {\n return;\n }\n\n const timeout = window.setTimeout(() => {\n onToolbarQueryValueChangeEvent(localSearchValue);\n }, resolvedToolbarQueryDebounceMs);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [\n hasOnSearchValueChange,\n localSearchValue,\n resolvedToolbarQueryDebounceMs,\n resolvedToolbarQueryValue,\n ]);\n\n const currentPagination = React.useMemo(\n () => ({\n pageIndex: pageIndex ?? localPagination.pageIndex,\n pageSize: pageSize ?? localPagination.pageSize,\n }),\n [\n localPagination.pageIndex,\n localPagination.pageSize,\n pageIndex,\n pageSize,\n ],\n );\n const resolvedLoadingRowCount = Math.max(\n 1,\n loadingRowCount ?? Math.min(5, currentPagination.pageSize),\n );\n // Keep input/callback state eager. Only the client row-model input is\n // deferred, so server/manual callbacks never wait behind a large filter.\n const deferredSearchValue = React.useDeferredValue(localSearchValue);\n const globalFilterValue = enableToolbarQueryFiltering\n ? manualFiltering\n ? localSearchValue\n : deferredSearchValue\n : \"\";\n const handleViewModeChange = React.useCallback(\n (nextViewMode: \"table\" | \"card\") => {\n setCurrentViewMode(nextViewMode);\n },\n [setCurrentViewMode],\n );\n const handleShowHiddenRowsChange = React.useCallback(\n (nextShowHiddenRows: boolean) => {\n setCurrentShowHiddenRows(nextShowHiddenRows);\n },\n [setCurrentShowHiddenRows],\n );\n const handleDensityChange = React.useCallback(\n (nextDensity: DataTableDensity) => {\n setCurrentDensity(nextDensity);\n },\n [setCurrentDensity],\n );\n const resetPageIndexForFilterChange = React.useCallback(() => {\n onPageIndexChange?.(0);\n if (pageIndex === undefined) {\n setLocalPagination((current) =>\n current.pageIndex === 0 ? current : { ...current, pageIndex: 0 },\n );\n }\n }, [onPageIndexChange, pageIndex]);\n const lastFilterStateRef = React.useRef({\n columnFilters: currentColumnFilters,\n globalFilterValue,\n });\n\n React.useEffect(() => {\n const previous = lastFilterStateRef.current;\n const filtersChanged = previous.columnFilters !== currentColumnFilters;\n const globalFilterChanged =\n previous.globalFilterValue !== globalFilterValue;\n lastFilterStateRef.current = {\n columnFilters: currentColumnFilters,\n globalFilterValue,\n };\n\n if (manualFiltering) {\n return;\n }\n\n if (!filtersChanged && !globalFilterChanged) {\n return;\n }\n\n resetPageIndexForFilterChange();\n }, [\n currentColumnFilters,\n globalFilterValue,\n manualFiltering,\n resetPageIndexForFilterChange,\n ]);\n\n usePersistDataTableColumnPrefs({\n persistence: persistenceConfig,\n prefs: {\n visibility: columnVisibility ? undefined : currentColumnVisibility,\n sizing:\n columnSizing === undefined ? currentColumnSizing : undefined,\n order: columnOrder ? undefined : currentColumnOrder,\n pinning: columnPinning ? undefined : currentColumnPinning,\n rowPinning: rowPinning === undefined ? currentRowPinning : undefined,\n density: density ? undefined : currentDensity,\n },\n });\n const responsiveColumnVisibility = React.useMemo(() => {\n return getDataTableLeafColumns(columns).reduce(\n (visibility, { column, index }) => {\n const columnId = getColumnId(column, index);\n if (isHiddenAtContainerWidth(column.meta?.hideOn, containerWidth)) {\n visibility[columnId] = false;\n }\n return visibility;\n },\n {},\n );\n }, [columns, containerWidth]);\n const effectiveColumnVisibility = React.useMemo(() => {\n return {\n ...currentColumnVisibility,\n ...responsiveColumnVisibility,\n };\n }, [currentColumnVisibility, responsiveColumnVisibility]);\n const visibleData = React.useMemo(\n () =>\n data.filter((row) =>\n isRowVisible(row, hiddenRows, currentShowHiddenRows),\n ),\n [currentShowHiddenRows, data, hiddenRows],\n );\n const shouldRenderInitialLoading = isLoading && visibleData.length === 0;\n const loadingRows = React.useMemo(\n () => createDataTableLoadingRows(resolvedLoadingRowCount),\n [resolvedLoadingRowCount],\n );\n const tableData = shouldRenderInitialLoading\n ? loadingRows\n : visibleData;\n const tableGetRowId = React.useCallback(\n (row: TData, index: number) => {\n if (isDataTableLoadingRow(row)) {\n return getDataTableLoadingRowId(index);\n }\n\n return getRowId(row, index);\n },\n [getRowId],\n );\n const shouldResolveSelectedRows =\n enableRowSelection ||\n (selectionActions?.length ?? 0) > 0 ||\n Object.values(currentRowSelection).some(Boolean);\n const rowById = React.useMemo(() => {\n if (!shouldResolveSelectedRows) {\n return new Map();\n }\n\n const rows = new Map();\n const visitRows = (currentRows: Array) => {\n currentRows.forEach((row, index) => {\n rows.set(getRowId(row, index), row);\n const subRows = getSubRows?.(row, index);\n if (subRows?.length) {\n visitRows(subRows);\n }\n });\n };\n visitRows(visibleData);\n return rows;\n }, [getRowId, getSubRows, shouldResolveSelectedRows, visibleData]);\n const selectedRows = React.useMemo(() => {\n if (!shouldResolveSelectedRows) {\n return [];\n }\n\n return Object.entries(currentRowSelection)\n .filter(([, selected]) => selected)\n .map(([rowId]) => rowById.get(rowId))\n .filter((row): row is TData => Boolean(row));\n }, [currentRowSelection, rowById, shouldResolveSelectedRows]);\n const selectedRowIds = React.useMemo(\n () =>\n Object.entries(currentRowSelection).flatMap(([rowId, selected]) =>\n selected ? [rowId] : [],\n ),\n [currentRowSelection],\n );\n\n return {\n containerWidth,\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentRowPinning,\n currentColumnSizing,\n currentColumnVisibility,\n currentDensity,\n currentExpanded,\n currentGrouping,\n currentPagination,\n currentRowSelection,\n currentShowHiddenRows,\n currentSorting,\n currentViewMode,\n effectiveColumnVisibility,\n globalFilterValue,\n handleDensityChange,\n handleShowHiddenRowsChange,\n handleViewModeChange,\n localSearchValue,\n resolvedLoadingRowCount,\n resolvedToolbarQueryPlaceholder,\n selectedRowIds,\n selectedRows,\n setCurrentColumnFilters,\n setCurrentColumnOrder,\n setCurrentColumnPinning,\n setCurrentRowPinning,\n setCurrentColumnVisibility,\n setCurrentExpanded,\n setCurrentGrouping,\n setCurrentRowSelection,\n setCurrentSorting,\n setLocalColumnSizing: setCurrentColumnSizing,\n setLocalPagination,\n setLocalSearchValue,\n shouldRenderInitialLoading,\n tableData,\n tableGetRowId,\n /**\n * @deprecated Read the filtered TanStack row model from the table\n * instance. This alias remains for advanced 4.x callers.\n */\n toolbarFilteredData: visibleData,\n visibleData,\n };\n}\n","import * as React from \"react\";\nimport type { Column, ColumnSizingState } from \"@tanstack/react-table\";\nimport type { DataTableColumnDef } from \"../types\";\nimport type { DataTableUiClassNames } from \"../ui-kit\";\nimport {\n UTILITY_COLUMN_SIZE,\n getColumnId,\n getConfiguredColumnMinWidth,\n getDataTableLeafColumns,\n getFixedSide,\n getPinnedColumnClassName,\n isUtilityColumnId,\n} from \"./data-table-utils\";\n\ntype ColumnLayoutMode = \"fill\" | \"fit\";\n\nexport type DataTableColumnLayout = {\n cellStyle: React.CSSProperties | undefined;\n colStyle: React.CSSProperties | undefined;\n fixedSide: \"left\" | \"right\" | false | undefined;\n headerStyle: React.CSSProperties | undefined;\n isActionsColumn: boolean;\n isExpansionColumn: boolean;\n isSelectionColumn: boolean;\n isSpacerColumn: boolean;\n isUtilityColumn: boolean;\n pinnedClassName: string | undefined;\n utilityClassName: string | undefined;\n};\n\nconst EMPTY_COLUMN_LAYOUT: DataTableColumnLayout = {\n cellStyle: undefined,\n colStyle: undefined,\n fixedSide: undefined,\n headerStyle: undefined,\n isActionsColumn: false,\n isExpansionColumn: false,\n isSelectionColumn: false,\n isSpacerColumn: false,\n isUtilityColumn: false,\n pinnedClassName: undefined,\n utilityClassName: undefined,\n};\n\nexport function useColumnLayout({\n columns,\n columnSizing,\n editableRows,\n enableRowSelection,\n hasRowActions,\n hasRowExpansion,\n layoutMode,\n uiClassNames,\n visibleLeafColumns,\n}: {\n columns: Array>;\n columnSizing: ColumnSizingState;\n editableRows: boolean;\n enableRowSelection: boolean;\n hasRowActions: boolean;\n hasRowExpansion: boolean;\n layoutMode: ColumnLayoutMode;\n uiClassNames: DataTableUiClassNames;\n visibleLeafColumns: Array>;\n}) {\n const explicitlySizedColumnIds = React.useMemo(() => {\n const ids = new Set();\n\n for (const { column, index } of getDataTableLeafColumns(columns)) {\n if (Object.prototype.hasOwnProperty.call(column, \"size\")) {\n ids.add(getColumnId(column, index));\n }\n }\n\n if (enableRowSelection) {\n ids.add(\"__select__\");\n }\n\n if (hasRowExpansion) {\n ids.add(\"__expand__\");\n }\n\n if (hasRowActions || editableRows) {\n ids.add(\"__actions__\");\n }\n\n return ids;\n }, [\n columns,\n editableRows,\n enableRowSelection,\n hasRowActions,\n hasRowExpansion,\n ]);\n\n const minimumColumnWidths = React.useMemo(() => {\n const widths = new Map();\n\n for (const { column, index } of getDataTableLeafColumns(columns)) {\n const configuredMinWidth = getConfiguredColumnMinWidth(column);\n\n if (configuredMinWidth !== undefined) {\n widths.set(getColumnId(column, index), configuredMinWidth);\n }\n }\n\n return widths;\n }, [columns]);\n\n const pinnedColumns = React.useMemo(() => {\n const left = new Map();\n const right = new Map();\n\n let leftOffset = 0;\n for (const column of visibleLeafColumns) {\n if (getFixedSide(column) === \"left\") {\n left.set(column.id, leftOffset);\n leftOffset += getColumnLayoutSize(column);\n }\n }\n\n let rightOffset = 0;\n for (const column of [...visibleLeafColumns].reverse()) {\n if (getFixedSide(column) === \"right\") {\n right.set(column.id, rightOffset);\n rightOffset += getColumnLayoutSize(column);\n }\n }\n\n return { left, right };\n }, [visibleLeafColumns]);\n\n const fillColumnId = React.useMemo(() => {\n if (layoutMode !== \"fill\") {\n return undefined;\n }\n\n const dataColumns = visibleLeafColumns.filter(\n (column) => !isUtilityColumnId(column.id),\n );\n\n if (!dataColumns.length) {\n return undefined;\n }\n\n const allDataColumnsAreFixed = dataColumns.every(\n (column) =>\n explicitlySizedColumnIds.has(column.id) ||\n Object.prototype.hasOwnProperty.call(columnSizing, column.id),\n );\n\n return allDataColumnsAreFixed\n ? dataColumns[dataColumns.length - 1]?.id\n : undefined;\n }, [\n columnSizing,\n explicitlySizedColumnIds,\n layoutMode,\n visibleLeafColumns,\n ]);\n\n const fixedWidthColumnIds = React.useMemo(() => {\n const ids = new Set([\n ...explicitlySizedColumnIds,\n ...Object.keys(columnSizing),\n ]);\n\n if (fillColumnId) {\n ids.delete(fillColumnId);\n }\n\n return ids;\n }, [columnSizing, explicitlySizedColumnIds, fillColumnId]);\n\n const columnLayouts = React.useMemo(() => {\n const layouts = new Map();\n\n for (const column of visibleLeafColumns) {\n const isSelectionColumn = column.id === \"__select__\";\n const isExpansionColumn = column.id === \"__expand__\";\n const isActionsColumn = column.id === \"__actions__\";\n const isUtilityColumn =\n isSelectionColumn || isExpansionColumn || isActionsColumn;\n const isSpacerColumn = column.id === \"__spacer__\";\n const configuredMinWidth = minimumColumnWidths.get(column.id);\n const isFlexibleFillColumn = column.id === fillColumnId;\n const columnMinWidth =\n configuredMinWidth ??\n (isFlexibleFillColumn ? column.getSize() : undefined);\n const shouldFixWidth =\n !isSpacerColumn &&\n (layoutMode === \"fit\" ||\n isUtilityColumn ||\n fixedWidthColumnIds.has(column.id));\n const baseStyle =\n shouldFixWidth || columnMinWidth !== undefined\n ? {\n width: shouldFixWidth\n ? isUtilityColumn\n ? UTILITY_COLUMN_SIZE\n : column.getSize()\n : undefined,\n minWidth: isUtilityColumn\n ? UTILITY_COLUMN_SIZE\n : shouldFixWidth\n ? column.getSize()\n : columnMinWidth,\n maxWidth: shouldFixWidth\n ? isUtilityColumn\n ? UTILITY_COLUMN_SIZE\n : column.getSize()\n : undefined,\n }\n : undefined;\n const fixedSide = getFixedSide(column);\n const pinnedStyle = fixedSide\n ? {\n left:\n fixedSide === \"left\" ? pinnedColumns.left.get(column.id) : undefined,\n right:\n fixedSide === \"right\"\n ? pinnedColumns.right.get(column.id)\n : undefined,\n }\n : undefined;\n const cellStyle =\n baseStyle || pinnedStyle ? { ...baseStyle, ...pinnedStyle } : undefined;\n\n layouts.set(column.id, {\n cellStyle,\n colStyle: baseStyle,\n fixedSide,\n headerStyle: cellStyle,\n isActionsColumn,\n isExpansionColumn,\n isSelectionColumn,\n isSpacerColumn,\n isUtilityColumn,\n pinnedClassName: fixedSide\n ? getPinnedColumnClassName(fixedSide, uiClassNames, {\n isUtilityColumn,\n })\n : undefined,\n utilityClassName: isUtilityColumn\n ? \"w-[50px] max-w-[50px] min-w-[50px] px-0\"\n : undefined,\n });\n }\n\n return layouts;\n }, [\n fillColumnId,\n fixedWidthColumnIds,\n layoutMode,\n minimumColumnWidths,\n pinnedColumns,\n uiClassNames,\n visibleLeafColumns,\n ]);\n\n const fillMinWidth = React.useMemo(() => {\n return visibleLeafColumns.reduce((total, column) => {\n const layout = columnLayouts.get(column.id);\n const configuredMinWidth = minimumColumnWidths.get(column.id);\n const isFlexibleFillColumn = column.id === fillColumnId;\n\n if (layout?.isUtilityColumn) {\n return total + UTILITY_COLUMN_SIZE;\n }\n\n if (fixedWidthColumnIds.has(column.id)) {\n return total + column.getSize();\n }\n\n return (\n total +\n (configuredMinWidth ?? (isFlexibleFillColumn ? column.getSize() : 0))\n );\n }, 0);\n }, [\n columnLayouts,\n fillColumnId,\n fixedWidthColumnIds,\n minimumColumnWidths,\n visibleLeafColumns,\n ]);\n\n const getColumnLayout = React.useCallback(\n (columnId: string) => columnLayouts.get(columnId) ?? EMPTY_COLUMN_LAYOUT,\n [columnLayouts],\n );\n\n return {\n columnLayouts,\n explicitlySizedColumnIds,\n fillMinWidth,\n getColumnLayout,\n };\n}\n\nfunction getColumnLayoutSize(column: Column) {\n return isUtilityColumnId(column.id) ? UTILITY_COLUMN_SIZE : column.getSize();\n}\n","import * as React from \"react\";\nimport type { ExpandedState, OnChangeFn, Row } from \"@tanstack/react-table\";\nimport { IconChevronDown } from \"../icons\";\nimport type {\n DataTableCardRendererProps,\n DataTableCardSizing,\n DataTableEditableRowsConfig,\n DataTableDetailPanel,\n DataTableLabels,\n DataTableProps,\n DataTableRowAction,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport { DATA_TABLE_DEFAULT_LABELS } from \"./data-table-labels\";\nimport {\n isDataTableInteractiveTarget,\n toggleDataTableExpandedState,\n} from \"./data-table-utils\";\n\ntype DataTableCardViewProps = {\n rows: Array>;\n cardRenderer: (props: DataTableCardRendererProps) => React.ReactNode;\n cardSizing?: DataTableCardSizing;\n cardGridClassName?: string;\n cardClassName?: string;\n rowActions: Array>;\n editableRows?: DataTableEditableRowsConfig;\n detailPanel?: DataTableDetailPanel;\n detailExpanded: ExpandedState;\n onDetailExpandedChange: OnChangeFn;\n hasCardTitle: boolean;\n rowSelection: Record;\n onRowSelectionChange: (rowSelection: Record) => void;\n enableRowSelection: boolean;\n editingRowId: string | null;\n onEditingRowIdChange: (rowId: string | null) => void;\n getRowClassName?: DataTableProps[\"getRowClassName\"];\n onRowClick?: (context: { row: TData; rowId: string }) => void | Promise;\n getRowDraggable?: (row: TData) => boolean;\n onRowDragStart?: (context: {\n row: TData;\n rowId: string;\n event: React.DragEvent;\n }) => void;\n onRowDragEnd?: (context: {\n row: TData;\n rowId: string;\n event: React.DragEvent;\n }) => void;\n isLoading?: boolean;\n loadingRowCount?: number;\n labels: DataTableLabels;\n};\n\ntype DataTableRowActionsComponent = (props: {\n row: TData;\n rowActions: Array>;\n editableRows?: DataTableEditableRowsConfig;\n isEditing: boolean;\n onStartEditing: () => void;\n onCancelEditing: () => void;\n labels: DataTableLabels;\n}) => React.ReactElement | null;\n\nexport function createDataTableCardView(\n ui: DataTableUiKit,\n DataTableRowActions: DataTableRowActionsComponent,\n) {\n const uiClassNames = ui.classNames ?? {};\n const { Button, Card, CardContent, CardHeader, Checkbox, Skeleton } = ui;\n\n return function DataTableCardView({\n rows,\n cardRenderer,\n cardSizing = \"fixed\",\n cardGridClassName,\n cardClassName,\n rowActions,\n editableRows,\n detailPanel,\n detailExpanded,\n onDetailExpandedChange,\n hasCardTitle,\n rowSelection,\n onRowSelectionChange,\n enableRowSelection,\n editingRowId,\n onEditingRowIdChange,\n getRowClassName,\n onRowClick,\n getRowDraggable,\n onRowDragStart,\n onRowDragEnd,\n isLoading = false,\n loadingRowCount = 5,\n labels,\n }: DataTableCardViewProps) {\n const resolvedCardSizing = cardSizing ?? \"fixed\";\n const resolvedCardGridClassName =\n cardGridClassName\n ? cn(\"grid\", cardGridClassName)\n : getCardGridClassName(resolvedCardSizing);\n const cardGridClasses = cn(\n \"min-h-0 w-full gap-4 p-1\",\n uiClassNames.cardGrid,\n resolvedCardGridClassName,\n );\n const cardItemClasses = (stateClassName?: string) =>\n cn(\n \"relative min-w-0 max-w-full gap-0 overflow-hidden bg-transparent p-0\",\n getCardItemClassName(resolvedCardSizing),\n uiClassNames.cardItem,\n cardClassName,\n stateClassName,\n );\n\n if (isLoading) {\n return (\n \n {Array.from({ length: Math.max(1, loadingRowCount) }, (_, index) => (\n \n {hasCardTitle ? (\n \n \n \n \n ) : null}\n \n \n \n \n \n \n \n ))}\n \n );\n }\n\n return (\n \n {rows.map((row) => {\n const rowId = row.id;\n const originalRow = row.original;\n const isSelected = Boolean(rowSelection[rowId]);\n const isEditing = editingRowId === rowId;\n const hasCardActions = rowActions.length > 0 || Boolean(editableRows);\n const canExpandDetail = Boolean(\n detailPanel && (detailPanel.getRowCanExpand?.(originalRow) ?? true),\n );\n const showCardGradient =\n enableRowSelection || hasCardActions || hasCardTitle;\n const showCardOverlayControls =\n enableRowSelection ||\n hasCardActions ||\n row.getCanExpand() ||\n canExpandDetail;\n const handleCardActivate = () => {\n if (!onRowClick) {\n return;\n }\n\n void onRowClick({ row: originalRow, rowId });\n };\n\n return (\n ) => {\n onRowDragStart?.({ row: originalRow, rowId, event });\n }}\n onDragEnd={(event: React.DragEvent) => {\n onRowDragEnd?.({ row: originalRow, rowId, event });\n }}\n >\n {showCardGradient ? (\n \n ) : null}\n *]:min-w-0\",\n getCardRendererClassName(resolvedCardSizing),\n onRowClick && \"cursor-pointer focus-visible:outline-none\",\n )}\n onClick={(event: React.MouseEvent) => {\n if (\n isDataTableInteractiveTarget(\n event.target,\n event.currentTarget,\n )\n ) {\n return;\n }\n\n handleCardActivate();\n }}\n onKeyDown={(event: React.KeyboardEvent) => {\n if (\n isDataTableInteractiveTarget(\n event.target,\n event.currentTarget,\n )\n ) {\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleCardActivate();\n }\n }}\n >\n {cardRenderer({\n row: originalRow,\n rowId,\n depth: row.depth,\n canExpandSubRows: row.getCanExpand(),\n isSubRowsExpanded: row.getIsExpanded(),\n toggleSubRowsExpanded: () => row.toggleExpanded(),\n isSelected,\n onSelectedChange: (nextValue) => {\n onRowSelectionChange(\n updateRowSelection(\n rowSelection,\n rowId,\n nextValue,\n row.getCanSelect(),\n row.getCanMultiSelect(),\n ),\n );\n },\n actions: rowActions,\n isEditing,\n startEditing: () => {\n onEditingRowIdChange(rowId);\n },\n cancelEditing: () => {\n onEditingRowIdChange(null);\n },\n })}\n \n {isEditing ||\n !detailPanel ||\n !(detailExpanded === true || Boolean(detailExpanded[row.id]))\n ? null\n : (\n \n {detailPanel.render({\n row: originalRow,\n rowId,\n tableRow: row,\n })}\n \n )}\n {showCardOverlayControls ? (\n \n {enableRowSelection ? (\n \n {\n onRowSelectionChange(\n updateRowSelection(\n rowSelection,\n rowId,\n checked === true,\n row.getCanSelect(),\n row.getCanMultiSelect(),\n ),\n );\n }}\n />\n \n ) : null}\n {row.getCanExpand() ? (\n
    \n row.toggleExpanded()}\n >\n \n \n
    \n ) : null}\n {canExpandDetail ? (\n \n {\n onDetailExpandedChange((current) =>\n toggleDataTableExpandedState(\n current,\n row.id,\n rows.map((item) => item.id),\n ),\n );\n }}\n >\n \n \n \n ) : null}\n
    \n {hasCardActions ? (\n \n {\n onEditingRowIdChange(rowId);\n }}\n onCancelEditing={() => {\n onEditingRowIdChange(null);\n }}\n labels={labels}\n />\n
    \n ) : null}\n
    \n ) : null}\n \n );\n })}\n \n );\n };\n}\n\nfunction getCardGridClassName(cardSizing: DataTableCardSizing) {\n switch (cardSizing) {\n case \"content\":\n return \"flex flex-wrap items-start justify-start\";\n case \"fluid\":\n return \"grid grid-cols-[repeat(auto-fit,minmax(min(18rem,100%),1fr))]\";\n case \"fixed\":\n default:\n return \"grid grid-cols-[repeat(auto-fill,minmax(min(18rem,100%),18rem))] justify-start\";\n }\n}\n\nfunction getCardItemClassName(cardSizing: DataTableCardSizing) {\n switch (cardSizing) {\n case \"content\":\n return \"w-fit\";\n case \"fluid\":\n return \"w-full\";\n case \"fixed\":\n default:\n return undefined;\n }\n}\n\nfunction getCardRendererClassName(cardSizing: DataTableCardSizing) {\n switch (cardSizing) {\n case \"content\":\n return \"w-fit\";\n case \"fluid\":\n return \"w-full flex-1 [&>*]:w-full\";\n case \"fixed\":\n default:\n return \"flex-1\";\n }\n}\n\nfunction updateRowSelection(\n rowSelection: Record,\n rowId: string,\n isSelected: boolean,\n canSelect: boolean,\n canMultiSelect: boolean,\n) {\n if (!canSelect) {\n return rowSelection;\n }\n\n if (isSelected) {\n return canMultiSelect\n ? {\n ...rowSelection,\n [rowId]: true,\n }\n : { [rowId]: true };\n }\n\n if (!rowSelection[rowId]) {\n return rowSelection;\n }\n\n const nextSelection = { ...rowSelection };\n delete nextSelection[rowId];\n return nextSelection;\n}\n","import { IconInbox } from \"../icons\";\nimport type { DataTableUiKit } from \"../ui-kit\";\n\nexport function createDataTableEmptyState(ui: DataTableUiKit) {\n const uiClassNames = ui.classNames ?? {};\n const {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n } = ui;\n\n return function DataTableEmptyState({\n title = \"No rows found\",\n description = \"Adjust your filters or create a new record to populate this table.\",\n }: {\n title?: string;\n description?: string;\n }) {\n return (\n \n \n \n \n \n {title}\n {description}\n \n \n \n );\n };\n}\n","import * as React from \"react\";\nimport { IconDatabase } from \"../icons\";\nimport type { DataTableLabels } from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { DATA_TABLE_DEFAULT_LABELS } from \"./data-table-labels\";\n\ntype DataTablePaginationProps = {\n pageIndex: number;\n pageCount: number;\n pageCountKnown: boolean;\n pageSize: number;\n totalRowCount?: number;\n rowsPerPageOptions: Array;\n onPageIndexChange: (pageIndex: number) => void;\n onPageSizeChange: (pageSize: number) => void;\n labels: DataTableLabels;\n};\n\nexport function createDataTablePagination(ui: DataTableUiKit) {\n const uiClassNames = ui.classNames ?? {};\n const {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n } = ui;\n\n function DataTablePagination({\n pageIndex,\n pageCount,\n pageCountKnown,\n pageSize,\n totalRowCount,\n rowsPerPageOptions,\n onPageIndexChange,\n onPageSizeChange,\n labels,\n }: DataTablePaginationProps) {\n const pages = pageCountKnown\n ? getVisiblePages(pageIndex, Math.max(1, pageCount))\n : [];\n const canGoPrevious = pageIndex > 0;\n const canGoNext = pageIndex + 1 < pageCount;\n const lastPageIndex = Math.max(0, pageCount - 1);\n\n return (\n
    \n \n \n {labels.recordsPerPage}\n \n {\n onPageSizeChange(Number(value));\n }}\n >\n \n \n \n \n \n {rowsPerPageOptions.map((option) => (\n \n {option}\n \n ))}\n \n \n \n
    \n\n {totalRowCount !== undefined ? (\n
    \n \n \n {totalRowCount}\n \n {labels.totalRecords(totalRowCount)}\n \n
    \n \n ) : null}\n\n
    \n \n {pageCountKnown\n ? labels.pageStatus(pageIndex, Math.max(1, pageCount))\n : (\n labels.pageStatusUnknown ??\n DATA_TABLE_DEFAULT_LABELS.pageStatusUnknown\n )(pageIndex)}\n
    \n \n \n \n \n \n ) => {\n event.preventDefault();\n if (canGoPrevious) {\n onPageIndexChange(0);\n }\n }}\n text={labels.firstPage}\n />\n \n {labels.firstPage}\n \n \n \n \n \n ) => {\n event.preventDefault();\n if (canGoPrevious) {\n onPageIndexChange(pageIndex - 1);\n }\n }}\n text={labels.previousPage}\n />\n \n {labels.previousPage}\n \n \n {pages.map((item, index) => (\n \n {item === \"ellipsis\" ? (\n \n ) : (\n ) => {\n event.preventDefault();\n onPageIndexChange(item - 1);\n }}\n >\n {item}\n \n )}\n \n ))}\n \n \n \n ) => {\n event.preventDefault();\n if (canGoNext) {\n onPageIndexChange(pageIndex + 1);\n }\n }}\n text={labels.nextPage}\n />\n \n {labels.nextPage}\n \n \n {pageCountKnown ? (\n \n \n \n ,\n ) => {\n event.preventDefault();\n if (canGoNext) {\n onPageIndexChange(lastPageIndex);\n }\n }}\n />\n \n {labels.lastPage}\n \n \n ) : null}\n \n \n \n \n );\n }\n\n function DataTableFooter(props: DataTablePaginationProps) {\n return (\n \n \n \n );\n }\n\n return {\n DataTableFooter,\n DataTablePagination,\n };\n}\n\nfunction getVisiblePages(currentPageIndex: number, pageCount: number) {\n const currentPage = currentPageIndex + 1;\n const pages = new Set([1, pageCount]);\n\n for (\n let page = Math.max(1, currentPage - 2);\n page <= Math.min(pageCount, currentPage + 2);\n page += 1\n ) {\n pages.add(page);\n }\n\n const orderedPages = Array.from(pages).sort((left, right) => left - right);\n const items: Array = [];\n\n for (let index = 0; index < orderedPages.length; index += 1) {\n const page = orderedPages[index];\n const previous = orderedPages[index - 1];\n\n if (previous && page - previous > 1) {\n items.push(\"ellipsis\");\n }\n\n items.push(page);\n }\n\n return items;\n}\n","import * as React from \"react\";\nimport { IconDots, IconEdit, IconX } from \"../icons\";\nimport type {\n DataTableEditableRowsConfig,\n DataTableLabels,\n DataTableRowAction,\n} from \"../types\";\nimport type { RowPinningPosition } from \"@tanstack/react-table\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { canEditRow, canUseRowAction, resolveRowActionLabel } from \"../types\";\n\ntype DataTableRowActionsProps = {\n row: TData;\n rowActions: Array>;\n editableRows?: DataTableEditableRowsConfig;\n isEditing: boolean;\n onStartEditing: () => void;\n onCancelEditing: () => void;\n labels: DataTableLabels;\n rowPinning?: {\n canPin: boolean;\n position: RowPinningPosition;\n pin: (position: RowPinningPosition) => void;\n };\n};\n\nexport function createDataTableRowActions(ui: DataTableUiKit) {\n const {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n } = ui;\n\n return function DataTableRowActions({\n row,\n rowActions,\n editableRows,\n isEditing,\n onStartEditing,\n onCancelEditing,\n labels,\n rowPinning,\n }: DataTableRowActionsProps) {\n const actions = rowActions.filter((action) => canUseRowAction(action, row));\n const stopRowClickPropagation = React.useCallback(\n (event: React.SyntheticEvent) => {\n event.stopPropagation();\n },\n [],\n );\n\n if (isEditing) {\n return (\n \n \n \n \n {labels.cancelEdit}\n \n \n {labels.cancelEdit}\n \n );\n }\n\n const allowEdit = canEditRow(editableRows, row);\n const canPin = rowPinning?.canPin ?? false;\n if (!actions.length && !allowEdit && !canPin) {\n return null;\n }\n\n return (\n \n \n \n \n \n \n {labels.rowActions}\n \n \n \n {labels.rowActions}\n \n \n {allowEdit ? (\n \n ) => {\n event.stopPropagation();\n onStartEditing();\n }}\n >\n \n {labels.editRow}\n \n \n ) : null}\n {allowEdit && (actions.length || canPin) ? : null}\n {canPin ? (\n \n {rowPinning?.position ? (\n ) => {\n event.stopPropagation();\n rowPinning.pin(false);\n }}\n >\n {labels.unpinRow}\n \n ) : (\n <>\n ) => {\n event.stopPropagation();\n rowPinning?.pin(\"top\");\n }}\n >\n {labels.pinRowToTop}\n \n ) => {\n event.stopPropagation();\n rowPinning?.pin(\"bottom\");\n }}\n >\n {labels.pinRowToBottom}\n \n \n )}\n \n ) : null}\n {canPin && actions.length ? : null}\n {actions.length ? (\n \n {actions.map((action) => {\n const Icon = action.icon;\n return (\n ) => {\n event.stopPropagation();\n void action.onClick(row);\n }}\n >\n {Icon ? : null}\n {resolveRowActionLabel(action.label, row)}\n \n );\n })}\n \n ) : null}\n \n \n );\n };\n}\n","import * as React from \"react\";\nimport type { Table as TanStackTable } from \"@tanstack/react-table\";\nimport {\n IconAdjustmentsHorizontal,\n IconLayoutGrid,\n IconList,\n IconSearch,\n IconX,\n} from \"../icons\";\nimport type {\n DataTableColumnFilterType,\n DataTableColumnFixed,\n DataTableColumnVisibilityOption,\n DataTableDensity,\n DataTableLabels,\n DataTableSavedView,\n DataTableSelectionAction,\n DataTableToolbarAction,\n DataTableToolbarVisibility,\n DataTableViewMode,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { DATA_TABLE_DEFAULT_LABELS } from \"./data-table-labels\";\n\nconst LazyToolbarDataOperations = React.lazy(\n () => import(\"./data-table-toolbar-operations\"),\n);\n\nexport type DataTableToolbarColumnFilter = {\n id: string;\n label: string;\n type: DataTableColumnFilterType;\n value: unknown;\n placeholder?: string;\n options: Array<{ label: string; value: string; count?: number; disabled?: boolean }>;\n searchable?: boolean;\n searchPlaceholder?: string;\n trueLabel?: string;\n falseLabel?: string;\n min?: number | string;\n max?: number | string;\n step?: number;\n};\n\ntype DataTableToolbarProps = {\n title?: string;\n titleId?: string;\n description?: string;\n descriptionId?: string;\n toolbarQueryValue: string;\n toolbarQueryPlaceholder: string;\n onToolbarQueryValueChange: (value: string) => void;\n customToolbar?: React.ReactNode;\n compactToolbar?: React.ReactNode;\n viewMode: DataTableViewMode;\n onViewModeChange?: (viewMode: DataTableViewMode) => void;\n enableViewToggle: boolean;\n toolbarActions: Array>;\n selectionActions: Array>;\n selectedRows: Array;\n selectedRowIds: Array;\n showHiddenRows: boolean;\n hiddenRowsLabel?: string;\n onShowHiddenRowsChange?: (showHiddenRows: boolean) => void;\n allRows: Array;\n columnVisibilityOptions: Array;\n onColumnVisibilityChange?: (columnId: string, visible: boolean) => void;\n enableColumnPinning: boolean;\n onColumnPinningChange: (columnId: string, side: DataTableColumnFixed | false) => void;\n columnFilters: Array;\n onColumnFilterChange: (columnId: string, value: unknown) => void;\n onClearColumnFilters: () => void;\n density: DataTableDensity;\n onDensityChange: (density: DataTableDensity) => void;\n enableDensityToggle: boolean;\n labels: Required;\n toolbarVisibility?: DataTableToolbarVisibility;\n openFileDialog?: () => void;\n enableGrouping: boolean;\n enableToolbarColumnChooser: boolean;\n enableToolbarFilterChips: boolean;\n enableToolbarResetLayout: boolean;\n enableToolbarSavedViews: boolean;\n savedViews: Array;\n onResetColumnLayout: () => void;\n onCreateSavedView: (name: string) => DataTableSavedView | undefined;\n onApplySavedView: (id: string) => boolean;\n onRenameSavedView: (id: string, name: string) => DataTableSavedView | undefined;\n onDeleteSavedView: (id: string) => boolean;\n reorderColumn: (sourceColumnId: string, targetColumnId: string) => void;\n table: TanStackTable;\n};\n\nexport function createDataTableToolbar(ui: DataTableUiKit) {\n const uiClassNames = ui.classNames ?? {};\n const {\n Button,\n ButtonGroup,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n } = ui;\n\n return function DataTableToolbar({\n title,\n titleId,\n description,\n descriptionId,\n toolbarQueryValue,\n toolbarQueryPlaceholder,\n onToolbarQueryValueChange,\n customToolbar,\n compactToolbar,\n viewMode,\n onViewModeChange,\n enableViewToggle,\n toolbarActions,\n selectionActions,\n selectedRows,\n selectedRowIds,\n showHiddenRows,\n hiddenRowsLabel,\n onShowHiddenRowsChange,\n allRows,\n columnVisibilityOptions,\n onColumnVisibilityChange,\n enableColumnPinning,\n onColumnPinningChange,\n columnFilters,\n onColumnFilterChange,\n onClearColumnFilters,\n density,\n onDensityChange,\n enableDensityToggle,\n labels,\n toolbarVisibility,\n openFileDialog,\n enableGrouping,\n enableToolbarColumnChooser,\n enableToolbarFilterChips,\n enableToolbarResetLayout,\n enableToolbarSavedViews,\n savedViews,\n onResetColumnLayout,\n onCreateSavedView,\n onApplySavedView,\n onRenameSavedView,\n onDeleteSavedView,\n reorderColumn,\n table,\n }: DataTableToolbarProps) {\n const compactSearchInputRef = React.useRef(null);\n const [isCompactSearchVisible, setIsCompactSearchVisible] =\n React.useState(false);\n const compactToolbarIconButtonClassName =\n uiClassNames.toolbarCompactIconButton ?? \"\";\n const primaryActions = toolbarActions.filter(\n (action) => (action.placement ?? \"primary\") === \"primary\",\n );\n const trailingActions = toolbarActions.filter(\n (action) => action.placement === \"trailing\",\n );\n const showTitle = toolbarVisibility?.title ?? true;\n const showSearch = toolbarVisibility?.search ?? true;\n const showActions = toolbarVisibility?.actions ?? true;\n const showTrailingActions = toolbarVisibility?.trailingActions ?? true;\n const showOptions = toolbarVisibility?.options ?? true;\n const showViewToggle = toolbarVisibility?.viewToggle ?? true;\n const showCustomToolbar = toolbarVisibility?.customToolbar ?? true;\n const hasVisibleTitle = showTitle && Boolean(title || description);\n const hasVisibleSearch = showSearch;\n const hasVisiblePrimaryActions = showActions && primaryActions.length > 0;\n const hasVisibleSelectionActions =\n selectedRowIds.length > 0 && selectionActions.length > 0;\n const hasVisibleOptions =\n showOptions &&\n (columnVisibilityOptions.some((column) => column.canHide) ||\n Boolean(onShowHiddenRowsChange && hiddenRowsLabel) ||\n enableColumnPinning ||\n enableDensityToggle ||\n enableGrouping ||\n enableToolbarColumnChooser ||\n enableToolbarResetLayout ||\n enableToolbarSavedViews);\n const hasToolbarOperationsMenu =\n enableToolbarColumnChooser ||\n enableToolbarResetLayout ||\n enableToolbarSavedViews;\n const activeColumnFilters = columnFilters.filter((filter) =>\n hasColumnFilterValue(filter.value),\n );\n const toolbarOperationsUi = {\n Button,\n DropdownMenuCheckboxItem,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n };\n const renderToolbarDataOperations = (placement: \"menu\" | \"chips\") => (\n \n }\n onResetColumnLayout={onResetColumnLayout}\n savedViews={savedViews}\n onCreateSavedView={onCreateSavedView}\n onApplySavedView={onApplySavedView}\n onRenameSavedView={onRenameSavedView}\n onDeleteSavedView={onDeleteSavedView}\n toolbarQueryValue={toolbarQueryValue}\n onToolbarQueryValueChange={onToolbarQueryValueChange}\n activeColumnFilters={activeColumnFilters}\n onColumnFilterChange={onColumnFilterChange}\n onClearColumnFilters={onClearColumnFilters}\n />\n \n );\n const groupableColumns = table\n .getAllLeafColumns()\n .filter(\n (column) =>\n !column.id.startsWith(\"__\") &&\n column.getCanGroup(),\n );\n const groupedColumns = table.getState().grouping.flatMap((id) => {\n const column = table.getColumn(id);\n return column ? [column] : [];\n });\n const hasVisibleViewToggle =\n showViewToggle && enableViewToggle && Boolean(onViewModeChange);\n const hasVisibleTrailingActions =\n showTrailingActions && trailingActions.length > 0;\n const hasVisibleCustomToolbar = showCustomToolbar && Boolean(customToolbar);\n const hasVisibleCompactToolbar =\n showCustomToolbar && Boolean(compactToolbar ?? customToolbar);\n const selectedRowCountLabel = labels.selectedRows(selectedRowIds.length);\n\n React.useEffect(() => {\n if (!isCompactSearchVisible) {\n return;\n }\n\n compactSearchInputRef.current?.focus();\n }, [isCompactSearchVisible]);\n\n if (\n !hasVisibleTitle &&\n !hasVisibleSearch &&\n !hasVisiblePrimaryActions &&\n !hasVisibleSelectionActions &&\n !hasVisibleOptions &&\n !hasVisibleViewToggle &&\n !hasVisibleTrailingActions &&\n !hasVisibleCustomToolbar &&\n !hasVisibleCompactToolbar\n ) {\n return null;\n }\n\n return (\n
    \n {showTitle && (title || description) ? (\n
    \n {title ? (\n \n {title}\n \n ) : null}\n {description ? (\n \n {description}\n

    \n ) : null}\n
    \n ) : null}\n\n
    \n \n {showSearch ? (\n <>\n
    \n \n ) => {\n onToolbarQueryValueChange(event.target.value);\n }}\n placeholder={toolbarQueryPlaceholder}\n />\n \n \n \n {toolbarQueryValue ? (\n \n {\n onToolbarQueryValueChange(\"\");\n }}\n aria-label={labels.clearSearch}\n title={labels.clearSearch}\n >\n \n \n \n ) : null}\n \n
    \n \n \n {\n setIsCompactSearchVisible((current) => !current);\n }}\n >\n \n {labels.searchTable}\n \n \n {labels.searchTable}\n \n \n ) : null}\n\n {showActions ? (\n
    \n {primaryActions.map((action) => {\n const collapsesToIcon =\n !action.iconOnly && Boolean(action.icon);\n const button = (\n {\n void action.onClick({\n rows: allRows,\n openFileDialog,\n });\n }}\n disabled={action.disabled}\n aria-label={action.label}\n title={action.iconOnly ? undefined : action.label}\n >\n {action.icon ? : null}\n {action.iconOnly ? (\n {action.label}\n ) : collapsesToIcon ? (\n \n {action.label}\n \n ) : (\n {action.label}\n )}\n \n );\n\n return action.iconOnly ? (\n \n {button}\n {action.label}\n \n ) : (\n button\n );\n })}\n
    \n ) : null}\n\n {hasVisibleCompactToolbar ? (\n \n {compactToolbar ?? customToolbar}\n
    \n ) : null}\n\n
    \n\n \n {selectedRowIds.length ? (\n \n {selectedRowCountLabel}\n
    \n ) : null}\n {selectedRowIds.length\n ? selectionActions.map((action) => {\n const Icon = action.icon;\n const context = {\n rows: selectedRows,\n rowIds: selectedRowIds,\n };\n const disabled =\n typeof action.disabled === \"function\"\n ? action.disabled(selectedRows, context)\n : action.disabled;\n\n return (\n \n \n {\n void action.onClick(context);\n }}\n aria-label={action.label}\n >\n {Icon ? : null}\n {action.label}\n \n \n {action.label}\n \n );\n })\n : null}\n\n {hasVisibleOptions ? (\n \n \n \n \n {labels.tableOptions}\n \n \n \n {labels.tableOptions}\n \n {onShowHiddenRowsChange && hiddenRowsLabel ? (\n {\n onShowHiddenRowsChange(checked === true);\n }}\n >\n {labels.showHiddenRows(hiddenRowsLabel)}\n \n ) : null}\n \n {enableDensityToggle ? (\n <>\n \n {labels.density}\n \n {(\n [\n [\"compact\", labels.compactDensity],\n [\"comfortable\", labels.comfortableDensity],\n [\"spacious\", labels.spaciousDensity],\n ] as const\n ).map(([nextDensity, label]) => (\n {\n onDensityChange(nextDensity);\n }}\n >\n {label}\n \n ))}\n \n \n ) : null}\n {hasToolbarOperationsMenu\n ? renderToolbarDataOperations(\"menu\")\n : null}\n {!enableToolbarColumnChooser &&\n columnVisibilityOptions.some((column) => column.canHide) ? (\n <>\n \n {labels.columns}\n \n {columnVisibilityOptions\n .filter((column) => column.canHide)\n .map((column) => (\n {\n onColumnVisibilityChange?.(\n column.id,\n checked === true,\n );\n }}\n >\n {column.label}\n \n ))}\n \n \n ) : null}\n {enableColumnPinning && !enableToolbarColumnChooser ? (\n <>\n \n \n {labels.pinLeft} / {labels.pinRight}\n \n \n {columnVisibilityOptions.map((column) => (\n {\n event.preventDefault();\n }}\n >\n \n {column.label}\n \n {\n event.stopPropagation();\n onColumnPinningChange(column.id, \"left\");\n }}\n >\n L\n \n {\n event.stopPropagation();\n onColumnPinningChange(column.id, \"right\");\n }}\n >\n R\n \n {\n event.stopPropagation();\n onColumnPinningChange(column.id, false);\n }}\n >\n -\n \n \n ))}\n \n \n ) : null}\n {enableGrouping && groupableColumns.length ? (\n <>\n \n {labels.grouping}\n \n {groupableColumns.map((column) => {\n const columnLabel =\n typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id;\n const isGrouped = column.getIsGrouped();\n return (\n {\n column.toggleGrouping();\n }}\n >\n {isGrouped\n ? labels.ungroup(columnLabel)\n : labels.groupBy(columnLabel)}\n \n );\n })}\n \n \n ) : null}\n \n \n ) : null}\n\n {showViewToggle && enableViewToggle && onViewModeChange ? (\n \n \n \n {\n onViewModeChange(\"table\");\n }}\n >\n \n \n {labels.switchToTableView ??\n DATA_TABLE_DEFAULT_LABELS.switchToTableView}\n \n \n \n \n {labels.tableView ??\n DATA_TABLE_DEFAULT_LABELS.tableView}\n \n \n \n \n {\n onViewModeChange(\"card\");\n }}\n >\n \n \n {labels.switchToCardView ??\n DATA_TABLE_DEFAULT_LABELS.switchToCardView}\n \n \n \n \n {labels.cardView ??\n DATA_TABLE_DEFAULT_LABELS.cardView}\n \n \n \n ) : null}\n\n {showTrailingActions\n ? trailingActions.map((action) => {\n const collapsesToIcon =\n !action.iconOnly && Boolean(action.icon);\n const button = (\n {\n void action.onClick({\n rows: allRows,\n openFileDialog,\n });\n }}\n disabled={action.disabled}\n aria-label={action.label}\n title={action.iconOnly ? undefined : action.label}\n className={`size-7 shrink-0 ${action.iconOnly ? \"\" : `${collapsesToIcon ? \"px-0 @min-[768px]/data-table:px-2.5\" : \"\"} @min-[768px]/data-table:h-8 @min-[768px]/data-table:w-fit`} ${action.iconOnly || collapsesToIcon ? compactToolbarIconButtonClassName : \"\"} ${uiClassNames.toolbarInputButton ?? \"\"}`}\n >\n {action.icon ? (\n \n ) : null}\n {action.iconOnly ? (\n {action.label}\n ) : collapsesToIcon ? (\n \n {action.label}\n \n ) : (\n {action.label}\n )}\n \n );\n\n return action.iconOnly ? (\n \n {button}\n {action.label}\n \n ) : (\n button\n );\n })\n : null}\n
    \n \n\n {showSearch && isCompactSearchVisible ? (\n \n \n ) => {\n onToolbarQueryValueChange(event.target.value);\n }}\n placeholder={toolbarQueryPlaceholder}\n />\n \n \n \n {toolbarQueryValue ? (\n \n {\n onToolbarQueryValueChange(\"\");\n }}\n aria-label={labels.clearSearch}\n title={labels.clearSearch}\n >\n \n \n \n ) : null}\n \n \n ) : null}\n\n {columnFilters.length ? (\n \n {columnFilters.map((filter) => (\n \n ))}\n {columnFilters.some((filter) =>\n hasColumnFilterValue(filter.value),\n ) ? (\n \n {labels.clearFilters}\n \n ) : null}\n \n ) : null}\n\n {enableToolbarFilterChips\n ? renderToolbarDataOperations(\"chips\")\n : null}\n\n {enableGrouping && groupedColumns.length ? (\n \n {labels.grouping}:\n {groupedColumns.map((column, groupingIndex) => {\n const columnLabel =\n typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id;\n const moveGrouping = (nextIndex: number) => {\n const nextGrouping = [...table.getState().grouping];\n const [groupingId] = nextGrouping.splice(groupingIndex, 1);\n if (groupingId === undefined) return;\n nextGrouping.splice(nextIndex, 0, groupingId);\n table.setGrouping(nextGrouping);\n };\n return (\n \n moveGrouping(groupingIndex - 1)}\n aria-label={labels.moveGroupingEarlier(columnLabel)}\n >\n \n \n column.toggleGrouping()}\n aria-label={labels.removeGrouping(columnLabel)}\n >\n {columnLabel} ×\n \n moveGrouping(groupingIndex + 1)}\n aria-label={labels.moveGroupingLater(columnLabel)}\n >\n \n \n \n );\n })}\n \n ) : null}\n\n \n\n {showCustomToolbar && customToolbar ? (\n \n {customToolbar}\n \n ) : null}\n \n );\n };\n\n function ToolbarColumnFilterControl({\n filter,\n labels,\n onColumnFilterChange,\n }: {\n filter: DataTableToolbarColumnFilter;\n labels: Required;\n onColumnFilterChange: (columnId: string, value: unknown) => void;\n }) {\n const [facetQuery, setFacetQuery] = React.useState(\"\");\n if (filter.type === \"text\") {\n return (\n \n ) => {\n onColumnFilterChange(filter.id, event.target.value);\n }}\n placeholder={filter.placeholder ?? filter.label}\n aria-label={`${labels.filters}: ${filter.label}`}\n />\n \n \n \n \n );\n }\n\n if (filter.type === \"numberRange\" || filter.type === \"dateRange\") {\n const range = normalizeToolbarRangeValue(filter.value);\n const inputType = filter.type === \"numberRange\" ? \"number\" : \"date\";\n const fromLabel =\n labels.filterFrom ?? DATA_TABLE_DEFAULT_LABELS.filterFrom;\n const toLabel = labels.filterTo ?? DATA_TABLE_DEFAULT_LABELS.filterTo;\n\n return (\n \n \n ) => {\n onColumnFilterChange(filter.id, {\n ...range,\n from: parseRangeInputValue(event.target.value, inputType),\n });\n }}\n aria-label={`${filter.label}: ${fromLabel}`}\n />\n {fromLabel}\n \n \n ) => {\n onColumnFilterChange(filter.id, {\n ...range,\n to: parseRangeInputValue(event.target.value, inputType),\n });\n }}\n aria-label={`${filter.label}: ${toLabel}`}\n />\n {toLabel}\n \n \n );\n }\n\n const isBoolean = filter.type === \"boolean\";\n const isFaceted = filter.type === \"faceted\";\n const booleanOptions = [\n {\n label:\n filter.trueLabel ??\n labels.filterTrue ??\n DATA_TABLE_DEFAULT_LABELS.filterTrue,\n value: \"true\",\n },\n {\n label:\n filter.falseLabel ??\n labels.filterFalse ??\n DATA_TABLE_DEFAULT_LABELS.filterFalse,\n value: \"false\",\n },\n ];\n const options: DataTableToolbarColumnFilter[\"options\"] = isBoolean\n ? booleanOptions\n : filter.options;\n const visibleOptions =\n isFaceted && facetQuery\n ? options.filter((option) =>\n option.label.toLocaleLowerCase().includes(facetQuery.toLocaleLowerCase()),\n )\n : options;\n const selectedValue =\n typeof filter.value === \"string\" || typeof filter.value === \"boolean\"\n ? String(filter.value)\n : \"\";\n const selectedValues = Array.isArray(filter.value)\n ? filter.value.map(String)\n : selectedValue\n ? [selectedValue]\n : [];\n const selectedLabel =\n selectedValues.length === 0\n ? filter.label\n : `${filter.label}: ${\n selectedValues.length === 1\n ? (options.find(\n (option) => option.value === String(selectedValues[0]),\n )?.label ?? selectedValues[0])\n : selectedValues.length\n }`;\n\n return (\n \n \n \n \n \n {filter.label}\n {isFaceted && filter.searchable !== false ? (\n
    \n \n ) => {\n setFacetQuery(event.target.value);\n }}\n placeholder={filter.searchPlaceholder ?? labels.facetSearch(filter.label)}\n aria-label={labels.facetSearch(filter.label)}\n />\n \n \n \n \n
    \n ) : null}\n \n {filter.type === \"select\" || isBoolean || isFaceted ? (\n {\n onColumnFilterChange(filter.id, \"\");\n }}\n >\n {labels.allFilterOptions ??\n DATA_TABLE_DEFAULT_LABELS.allFilterOptions}\n \n ) : null}\n {visibleOptions.map((option) => (\n {\n if (filter.type === \"select\" || isBoolean) {\n onColumnFilterChange(\n filter.id,\n checked === true ? option.value : \"\",\n );\n return;\n }\n\n const nextValues = new Set(selectedValues);\n if (checked === true) {\n nextValues.add(option.value);\n } else {\n nextValues.delete(option.value);\n }\n onColumnFilterChange(filter.id, Array.from(nextValues));\n }}\n >\n {option.label}\n {option.count !== undefined ? (\n {option.count}\n ) : null}\n \n ))}\n \n
    \n
    \n );\n }\n}\n\nfunction hasColumnFilterValue(value: unknown) {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n if (value && typeof value === \"object\") {\n if (\"from\" in value || \"to\" in value) {\n return Object.values(value).some(hasColumnFilterValue);\n }\n\n return true;\n }\n\n return value !== undefined && value !== null && value !== \"\";\n}\n\nfunction normalizeToolbarRangeValue(value: unknown): {\n from?: number | string;\n to?: number | string;\n} {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return {};\n }\n\n const range = value as { from?: unknown; to?: unknown };\n return {\n ...(typeof range.from === \"number\" || typeof range.from === \"string\"\n ? { from: range.from }\n : {}),\n ...(typeof range.to === \"number\" || typeof range.to === \"string\"\n ? { to: range.to }\n : {}),\n };\n}\n\nfunction parseRangeInputValue(value: string, inputType: \"number\" | \"date\") {\n if (!value) {\n return undefined;\n }\n\n return inputType === \"number\" ? Number(value) : value;\n}\n","import * as React from \"react\";\nimport { DataTableTablePanel } from \"./data-table-table-panel\";\nimport type { DataTableTablePanelProps } from \"./data-table-table-panel\";\n\nconst LazyDataTableVirtualTablePanel = React.lazy(async () => {\n const module = await import(\"./data-table-virtual-table-panel\");\n return { default: module.DataTableVirtualTablePanel };\n}) as unknown as typeof DataTableTablePanel;\n\nexport function DataTableTablePanelRouter(\n props: DataTableTablePanelProps,\n) {\n const config =\n typeof props.virtualization === \"object\"\n ? props.virtualization\n : undefined;\n const enabled =\n props.virtualization === true || config?.enabled === true;\n\n if (!enabled) {\n return ;\n }\n\n return (\n \n }\n >\n \n \n );\n}\n","import type {\n DataTableSavedView,\n DataTableSavedViewSlice,\n DataTableSavedViewsChangeOperation,\n DataTableSavedViewsConfig,\n DataTableSavedViewsPayload,\n DataTableState,\n} from \"../types\";\n\nconst STORAGE_PREFIX = \"data-table-pro:saved-views:\";\nconst DEFAULT_VERSION = 1;\nconst DEFAULT_SLICES: Array = [\n \"sorting\",\n \"columnVisibility\",\n \"columnFilters\",\n \"grouping\",\n \"columnOrder\",\n \"columnPinning\",\n \"rowPinning\",\n \"columnSizing\",\n \"density\",\n \"viewMode\",\n \"showHiddenRows\",\n \"globalFilter\",\n];\nlet fallbackId = 0;\n\nexport function readDataTableSavedViews(\n config: DataTableSavedViewsConfig | undefined,\n): Array {\n const storage = resolveStorage(config);\n if (!config || !storage) {\n return [];\n }\n\n let serialized: string | null;\n try {\n serialized = storage.getItem(getStorageKey(config.key));\n } catch (error) {\n config.onError?.({ error, operation: \"read\" });\n return [];\n }\n if (!serialized) {\n return [];\n }\n\n let parsed: unknown;\n try {\n parsed = (config.deserialize ?? JSON.parse)(serialized);\n } catch (error) {\n config.onError?.({ error, operation: \"deserialize\" });\n return [];\n }\n\n if (!isRecord(parsed) || !(\"version\" in parsed) || !(\"views\" in parsed)) {\n return [];\n }\n\n const targetVersion = config.version ?? DEFAULT_VERSION;\n let candidate: unknown = parsed.views;\n if (parsed.version !== targetVersion) {\n if (!config.migrate) {\n return [];\n }\n try {\n candidate = config.migrate(\n { version: parsed.version, views: parsed.views },\n targetVersion,\n );\n } catch (error) {\n config.onError?.({ error, operation: \"migrate\" });\n return [];\n }\n }\n\n if (!Array.isArray(candidate)) {\n return [];\n }\n\n return candidate\n .map((view) => validateSavedView(view, config.slices))\n .filter((view): view is DataTableSavedView => Boolean(view));\n}\n\nexport function createDataTableSavedView(\n config: DataTableSavedViewsConfig | undefined,\n name: string,\n state: DataTableState,\n) {\n const normalizedName = name.trim();\n if (!config || !normalizedName) {\n return undefined;\n }\n\n const now = new Date().toISOString();\n const view: DataTableSavedView = {\n id: createSavedViewId(),\n name: normalizedName,\n createdAt: now,\n updatedAt: now,\n state: selectSavedViewSlices(state, config.slices),\n };\n const views = [...readDataTableSavedViews(config), view];\n return writeViews(config, views, \"create\") ? cloneSavedView(view) : undefined;\n}\n\nexport function renameDataTableSavedView(\n config: DataTableSavedViewsConfig | undefined,\n id: string,\n name: string,\n) {\n const normalizedName = name.trim();\n if (!config || !normalizedName) {\n return undefined;\n }\n\n let renamed: DataTableSavedView | undefined;\n const views = readDataTableSavedViews(config).map((view) => {\n if (view.id !== id) {\n return view;\n }\n renamed = {\n ...view,\n name: normalizedName,\n updatedAt: new Date().toISOString(),\n };\n return renamed;\n });\n if (!renamed) {\n return undefined;\n }\n\n return writeViews(config, views, \"rename\")\n ? cloneSavedView(renamed)\n : undefined;\n}\n\nexport function deleteDataTableSavedView(\n config: DataTableSavedViewsConfig | undefined,\n id: string,\n) {\n if (!config) {\n return false;\n }\n\n const current = readDataTableSavedViews(config);\n const views = current.filter((view) => view.id !== id);\n return views.length !== current.length && writeViews(config, views, \"delete\");\n}\n\nexport function clearDataTableSavedViews(\n config: DataTableSavedViewsConfig | undefined,\n) {\n const storage = resolveStorage(config);\n if (!config || !storage) {\n return false;\n }\n\n try {\n storage.removeItem(getStorageKey(config.key));\n } catch (error) {\n config.onError?.({ error, operation: \"remove\" });\n return false;\n }\n config.onChange?.([], \"clear\");\n return true;\n}\n\nfunction writeViews(\n config: DataTableSavedViewsConfig,\n views: Array,\n operation: DataTableSavedViewsChangeOperation,\n) {\n const storage = resolveStorage(config);\n if (!storage) {\n return false;\n }\n\n let serialized: string;\n try {\n const payload: DataTableSavedViewsPayload = {\n version: config.version ?? DEFAULT_VERSION,\n views,\n };\n serialized = (config.serialize ?? JSON.stringify)(payload);\n } catch (error) {\n config.onError?.({ error, operation: \"serialize\" });\n return false;\n }\n\n try {\n storage.setItem(getStorageKey(config.key), serialized);\n } catch (error) {\n config.onError?.({ error, operation: \"write\" });\n return false;\n }\n const snapshots = views.map(cloneSavedView);\n config.onChange?.(snapshots, operation);\n return true;\n}\n\nfunction selectSavedViewSlices(\n state: DataTableState,\n slices: Array | undefined,\n) {\n const selected = new Set(slices ?? DEFAULT_SLICES);\n const snapshot: Partial = {};\n for (const slice of Object.keys(state) as Array) {\n if (selected.has(slice)) {\n Object.assign(snapshot, {\n [slice]: cloneStateSlice(slice, state[slice]),\n });\n }\n }\n return snapshot;\n}\n\nfunction validateSavedView(\n value: unknown,\n slices: Array | undefined,\n): DataTableSavedView | undefined {\n if (\n !isRecord(value) ||\n typeof value.id !== \"string\" ||\n !value.id ||\n typeof value.name !== \"string\" ||\n !value.name.trim() ||\n typeof value.createdAt !== \"string\" ||\n typeof value.updatedAt !== \"string\"\n ) {\n return undefined;\n }\n\n return {\n id: value.id,\n name: value.name.trim(),\n createdAt: value.createdAt,\n updatedAt: value.updatedAt,\n state: validateState(value.state, slices),\n };\n}\n\nfunction validateState(\n value: unknown,\n slices: Array | undefined,\n) {\n if (!isRecord(value)) {\n return {};\n }\n\n const selected = new Set(slices ?? DEFAULT_SLICES);\n const state: Partial = {};\n const sorting = validateSorting(value.sorting);\n if (selected.has(\"sorting\") && sorting) state.sorting = sorting;\n const pagination = validatePagination(value.pagination);\n if (selected.has(\"pagination\") && pagination) state.pagination = pagination;\n const rowSelection = validateBooleanRecord(value.rowSelection);\n if (selected.has(\"rowSelection\") && rowSelection) {\n state.rowSelection = rowSelection;\n }\n const visibility = validateBooleanRecord(value.columnVisibility);\n if (selected.has(\"columnVisibility\") && visibility) {\n state.columnVisibility = visibility;\n }\n const filters = validateFilters(value.columnFilters);\n if (selected.has(\"columnFilters\") && filters) state.columnFilters = filters;\n const grouping = validateStringArray(value.grouping);\n if (selected.has(\"grouping\") && grouping) state.grouping = grouping;\n const expanded =\n value.expanded === true\n ? true\n : validateBooleanRecord(value.expanded);\n if (selected.has(\"expanded\") && expanded !== undefined) {\n state.expanded = expanded;\n }\n const order = validateStringArray(value.columnOrder);\n if (selected.has(\"columnOrder\") && order) state.columnOrder = order;\n const pinning = validatePinning(value.columnPinning);\n if (selected.has(\"columnPinning\") && pinning) {\n state.columnPinning = pinning;\n }\n const rowPinning = validateRowPinning(value.rowPinning);\n if (selected.has(\"rowPinning\") && rowPinning) {\n state.rowPinning = rowPinning;\n }\n const sizing = validateSizingRecord(value.columnSizing);\n if (selected.has(\"columnSizing\") && sizing) state.columnSizing = sizing;\n if (\n selected.has(\"density\") &&\n (value.density === \"compact\" ||\n value.density === \"comfortable\" ||\n value.density === \"spacious\")\n ) {\n state.density = value.density;\n }\n if (\n selected.has(\"viewMode\") &&\n (value.viewMode === \"table\" || value.viewMode === \"card\")\n ) {\n state.viewMode = value.viewMode;\n }\n if (selected.has(\"showHiddenRows\") && typeof value.showHiddenRows === \"boolean\") {\n state.showHiddenRows = value.showHiddenRows;\n }\n if (selected.has(\"globalFilter\") && typeof value.globalFilter === \"string\") {\n state.globalFilter = value.globalFilter;\n }\n return state;\n}\n\nfunction cloneSavedView(view: DataTableSavedView): DataTableSavedView {\n return {\n ...view,\n state: validateState(view.state, Object.keys(view.state) as Array),\n };\n}\n\nfunction cloneStateSlice(\n slice: DataTableSavedViewSlice,\n value: unknown,\n) {\n if (Array.isArray(value)) {\n return (value as Array).map((item) =>\n isRecord(item) ? { ...item } : item,\n );\n }\n if (isRecord(value)) {\n if (slice === \"columnPinning\" || slice === \"rowPinning\") {\n return {\n ...(slice === \"columnPinning\"\n ? {\n left: Array.isArray(value.left)\n ? [...(value.left as Array)]\n : undefined,\n right: Array.isArray(value.right)\n ? [...(value.right as Array)]\n : undefined,\n }\n : {\n top: Array.isArray(value.top)\n ? [...(value.top as Array)]\n : undefined,\n bottom: Array.isArray(value.bottom)\n ? [...(value.bottom as Array)]\n : undefined,\n }),\n };\n }\n return { ...value };\n }\n return value;\n}\n\nfunction validateSorting(value: unknown) {\n if (!Array.isArray(value)) return undefined;\n return value\n .filter(\n (item): item is { id: string; desc?: boolean } =>\n isRecord(item) && typeof item.id === \"string\",\n )\n .map((item) => ({ id: item.id, desc: Boolean(item.desc) }));\n}\n\nfunction validatePagination(value: unknown) {\n if (\n !isRecord(value) ||\n !Number.isInteger(value.pageIndex) ||\n (value.pageIndex as number) < 0 ||\n !Number.isInteger(value.pageSize) ||\n (value.pageSize as number) < 1\n ) {\n return undefined;\n }\n return {\n pageIndex: value.pageIndex as number,\n pageSize: value.pageSize as number,\n };\n}\n\nfunction validateFilters(value: unknown) {\n if (!Array.isArray(value)) return undefined;\n return value\n .filter(\n (item): item is { id: string; value: unknown } =>\n isRecord(item) &&\n typeof item.id === \"string\" &&\n Object.prototype.hasOwnProperty.call(item, \"value\"),\n )\n .map((item) => ({ id: item.id, value: item.value }));\n}\n\nfunction validatePinning(value: unknown) {\n if (!isRecord(value)) return undefined;\n return {\n left: validateStringArray(value.left) ?? [],\n right: validateStringArray(value.right) ?? [],\n };\n}\n\nfunction validateRowPinning(value: unknown) {\n if (!isRecord(value)) return undefined;\n return {\n top: validateStringArray(value.top) ?? [],\n bottom: validateStringArray(value.bottom) ?? [],\n };\n}\n\nfunction validateBooleanRecord(value: unknown) {\n if (!isRecord(value)) return undefined;\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, boolean] => typeof entry[1] === \"boolean\",\n ),\n );\n}\n\nfunction validateSizingRecord(value: unknown) {\n if (!isRecord(value)) return undefined;\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, number] =>\n typeof entry[1] === \"number\" &&\n Number.isFinite(entry[1]) &&\n entry[1] >= 0,\n ),\n );\n}\n\nfunction validateStringArray(value: unknown) {\n if (!Array.isArray(value)) return undefined;\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction resolveStorage(config: DataTableSavedViewsConfig | undefined) {\n if (!config) {\n return undefined;\n }\n if (config.storage) {\n return config.storage;\n }\n if (typeof window === \"undefined\") {\n return undefined;\n }\n try {\n return window.localStorage;\n } catch (error) {\n config.onError?.({ error, operation: \"read\" });\n return undefined;\n }\n}\n\nfunction createSavedViewId() {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n fallbackId += 1;\n return `view-${Date.now().toString(36)}-${fallbackId.toString(36)}`;\n}\n\nfunction getStorageKey(key: string) {\n return `${STORAGE_PREFIX}${key}`;\n}\n\nfunction isRecord(value: unknown): value is Record {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import * as React from \"react\";\nimport { IconDownload } from \"../icons\";\nimport type {\n ColumnFiltersState,\n ColumnPinningState,\n OnChangeFn,\n Table as TanStackTable,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableColumnFixed,\n DataTableLabels,\n DataTableProps,\n} from \"../types\";\nimport {\n exportDataTableCsv,\n getAccessorKey,\n getColumnId,\n getDataTableLeafColumns,\n hasFilterValue,\n normalizeColumnFilterOptions,\n startCase,\n} from \"./data-table-utils\";\n\nexport function useDataTableToolbarFeatures({\n columns,\n currentColumnFilters,\n currentColumnPinning,\n effectiveColumnVisibility,\n enableColumnFilters,\n handleColumnFiltersChange,\n handleColumnPinningChange,\n labels,\n table,\n toolbarActions,\n visibleData,\n csvExport,\n}: {\n columns: DataTableProps[\"columns\"];\n currentColumnFilters: ColumnFiltersState;\n currentColumnPinning: ColumnPinningState;\n effectiveColumnVisibility: VisibilityState;\n enableColumnFilters: boolean | undefined;\n handleColumnFiltersChange: OnChangeFn;\n handleColumnPinningChange: OnChangeFn;\n labels: DataTableLabels;\n table: TanStackTable;\n toolbarActions: DataTableProps[\"toolbarActions\"];\n visibleData: Array;\n csvExport: DataTableProps[\"csvExport\"];\n}) {\n const columnVisibilityOptions = React.useMemo(() => {\n return getDataTableLeafColumns(columns).map(({ column, index }) => {\n const id = getColumnId(column, index);\n const header = column.header;\n const accessorKey = getAccessorKey(column);\n const label =\n typeof header === \"string\"\n ? header\n : accessorKey\n ? startCase(accessorKey)\n : startCase(id);\n\n const pinned: false | DataTableColumnFixed =\n currentColumnPinning.left?.includes(id) === true\n ? \"left\"\n : currentColumnPinning.right?.includes(id) === true\n ? \"right\"\n : false;\n\n return {\n id,\n label,\n visible: effectiveColumnVisibility[id] !== false,\n canHide: column.enableHiding !== false,\n pinned,\n };\n });\n }, [columns, currentColumnPinning, effectiveColumnVisibility]);\n\n const toolbarColumnFilters = React.useMemo(() => {\n if (enableColumnFilters === false) {\n return [];\n }\n\n return getDataTableLeafColumns(columns).flatMap(({ column, index }) => {\n const filter = column.meta?.filter;\n if (!filter) {\n return [];\n }\n\n const id = getColumnId(column, index);\n const header = column.header;\n const accessorKey = getAccessorKey(column);\n const label =\n filter.label ??\n (typeof header === \"string\"\n ? header\n : accessorKey\n ? startCase(accessorKey)\n : startCase(id));\n const state = currentColumnFilters.find((item) => item.id === id);\n const configuredFacetOptions = filter.faceting?.options;\n const facetedMinMax =\n filter.type === \"numberRange\"\n ? table.getColumn(id)?.getFacetedMinMaxValues()\n : undefined;\n const rawOptions =\n filter.type === \"faceted\" && configuredFacetOptions\n ? typeof configuredFacetOptions === \"function\"\n ? configuredFacetOptions({ rows: visibleData })\n : configuredFacetOptions\n : filter.type === \"faceted\"\n ? Array.from(table.getColumn(id)?.getFacetedUniqueValues() ?? []).map(\n ([value, count]) => ({\n label:\n filter.faceting?.getOptionLabel?.(value as never) ??\n String(value),\n value: String(value),\n count,\n }),\n )\n : typeof filter.options === \"function\"\n ? filter.options({ rows: visibleData })\n : (filter.options ?? []);\n\n return [\n {\n id,\n label,\n type: filter.type,\n value: state?.value,\n placeholder: filter.placeholder,\n options: normalizeColumnFilterOptions(rawOptions),\n searchable: filter.faceting?.searchable,\n searchPlaceholder: filter.faceting?.searchPlaceholder,\n trueLabel: filter.trueLabel,\n falseLabel: filter.falseLabel,\n min: filter.min ?? facetedMinMax?.[0],\n max: filter.max ?? facetedMinMax?.[1],\n step: filter.step,\n },\n ];\n });\n }, [\n columns,\n currentColumnFilters,\n enableColumnFilters,\n table,\n visibleData,\n ]);\n\n const handleToolbarColumnFilterChange = React.useCallback(\n (columnId: string, value: unknown) => {\n handleColumnFiltersChange((current) => {\n const next = current.filter((filter) => filter.id !== columnId);\n if (hasFilterValue(value)) {\n next.push({ id: columnId, value });\n }\n return next;\n });\n },\n [handleColumnFiltersChange],\n );\n\n const handleClearColumnFilters = React.useCallback(() => {\n handleColumnFiltersChange([]);\n }, [handleColumnFiltersChange]);\n\n const handleToolbarColumnPinningChange = React.useCallback(\n (columnId: string, side: DataTableColumnFixed | false) => {\n handleColumnPinningChange((current) => {\n const left = (current.left ?? []).filter((id) => id !== columnId);\n const right = (current.right ?? []).filter((id) => id !== columnId);\n\n if (side === \"left\") {\n left.push(columnId);\n }\n if (side === \"right\") {\n right.push(columnId);\n }\n\n return { left, right };\n });\n },\n [handleColumnPinningChange],\n );\n\n const handleCsvExport = React.useCallback(() => {\n if (!csvExport) {\n return;\n }\n\n return exportDataTableCsv({\n csvExport,\n table,\n labels,\n });\n }, [csvExport, labels, table]);\n\n const effectiveToolbarActions = React.useMemo(() => {\n if (!csvExport) {\n return toolbarActions ?? [];\n }\n\n return [\n ...(toolbarActions ?? []),\n {\n key: \"__csv_export__\",\n label: labels.exportCsv,\n icon: IconDownload,\n placement: \"trailing\" as const,\n onClick: handleCsvExport,\n },\n ];\n }, [csvExport, handleCsvExport, labels.exportCsv, toolbarActions]);\n\n return {\n columnVisibilityOptions,\n effectiveToolbarActions,\n handleClearColumnFilters,\n handleToolbarColumnFilterChange,\n handleToolbarColumnPinningChange,\n toolbarColumnFilters,\n };\n}\n","import * as React from \"react\";\nimport type { DataTableProps } from \"../types\";\n\n/** Development-only guardrails for identities used by row models and caches. */\nexport function useDataTablePerformanceDiagnostics({\n columns,\n data,\n getRowId,\n}: Pick, \"columns\" | \"data\" | \"getRowId\">) {\n const previous = React.useRef({ columns, data, getRowId });\n const warned = React.useRef(new Set());\n\n React.useEffect(() => {\n if (!isDevelopmentEnvironment()) {\n return;\n }\n\n const last = previous.current;\n if (\n last.data !== data &&\n haveSameItems(last.data, data) &&\n !warned.current.has(\"data\")\n ) {\n warn(\n warned.current,\n \"data\",\n \"The data array identity changed. Keep rows immutable and memoize unchanged data so filtering, row models, and virtual measurements can be reused.\",\n );\n }\n if (\n last.columns !== columns &&\n haveSameItems(last.columns, columns) &&\n !warned.current.has(\"columns\")\n ) {\n warn(\n warned.current,\n \"columns\",\n \"The columns array identity changed. Memoize stable column definitions so the search index and table column model can be reused.\",\n );\n }\n if (last.getRowId !== getRowId && !warned.current.has(\"getRowId\")) {\n warn(\n warned.current,\n \"getRowId\",\n \"getRowId identity changed. Memoize it and return an immutable, unique id to preserve row state and virtual scroll anchoring.\",\n );\n }\n\n const ids = new Set();\n for (let index = 0; index < data.length; index += 1) {\n const id = getRowId(data[index]!, index);\n if (ids.has(id) && !warned.current.has(\"duplicate-row-id\")) {\n warn(\n warned.current,\n \"duplicate-row-id\",\n `Duplicate row id \"${id}\" detected. Row ids must be unique and immutable.`,\n );\n break;\n }\n ids.add(id);\n }\n previous.current = { columns, data, getRowId };\n }, [columns, data, getRowId]);\n}\n\nfunction haveSameItems(previous: Array, next: Array) {\n return (\n previous.length === next.length &&\n previous.every((item, index) => Object.is(item, next[index]))\n );\n}\n\nfunction warn(warned: Set, key: string, message: string) {\n warned.add(key);\n console.warn(`[data-table-pro] ${message}`);\n}\n\nfunction isDevelopmentEnvironment() {\n return (\n (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV !== \"production\"\n );\n}\n","import * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport type {\n Table as TanStackTable,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableActionErrorContext,\n DataTableApi,\n DataTableCellSelection,\n DataTableLabels,\n DataTableProps,\n DataTableState,\n DataTableStateOverlay as DataTableStateOverlayConfig,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport { createDataTableCardView } from \"./create-data-table-card-view\";\nimport { createDataTableEmptyState } from \"./create-data-table-empty-state\";\nimport { createDataTablePagination } from \"./create-data-table-pagination\";\nimport { createDataTableRowActions } from \"./create-data-table-row-actions\";\nimport { createDataTableToolbar } from \"./create-data-table-toolbar\";\nimport { DataTableCardPanel as DefaultDataTableCardPanel } from \"./data-table-card-panel\";\nimport { DataTableFooterSection } from \"./data-table-footer-section\";\nimport { DataTableTablePanelRouter as DefaultDataTableTablePanel } from \"./data-table-table-panel-router\";\nimport { DataTableToolbarSection } from \"./data-table-toolbar-section\";\nimport {\n clearDataTableSavedViews,\n createDataTableSavedView,\n deleteDataTableSavedView,\n readDataTableSavedViews,\n renameDataTableSavedView,\n} from \"./data-table-saved-views\";\nimport { resolveDataTableLabels } from \"./data-table-labels\";\nimport { useDataTableColumns } from \"./use-data-table-columns\";\nimport { useControllableState } from \"./use-controllable-state\";\nimport { useDataTableInstance } from \"./use-data-table-instance\";\nimport { useDataTableScrollViewport } from \"./use-data-table-scroll-viewport\";\nimport {\n exportDataTableCsv,\n getColumnId,\n getDataTableColumnGroupPaths,\n getDataTableLeafColumns,\n getInitialColumnPinning,\n validateDataTableColumnIds,\n} from \"./data-table-utils\";\nimport { useDataTableState } from \"./use-data-table-state\";\nimport { clearDataTableColumnPrefs } from \"./use-data-table-column-prefs\";\nimport { useDataTableToolbarFeatures } from \"./use-data-table-toolbar-features\";\nimport { useColumnLayout } from \"./use-column-layout\";\nimport { useRowEditing } from \"./use-row-editing\";\nimport { useDataTablePerformanceDiagnostics } from \"./use-data-table-performance-diagnostics\";\n\nconst DataTableAutoPageSize = React.lazy(\n () => import(\"./data-table-auto-page-size\"),\n);\n\ntype CreateDataTableOptions = {\n CardPanel?: typeof DefaultDataTableCardPanel;\n TablePanel?: typeof DefaultDataTableTablePanel;\n};\n\nexport function createDataTable(ui: DataTableUiKit) {\n return createDataTableWithPanels(ui);\n}\n\nexport function createDataTableWithPanels(\n ui: DataTableUiKit,\n options: CreateDataTableOptions = {},\n) {\n const DataTableCardPanel =\n options.CardPanel ?? DefaultDataTableCardPanel;\n const DataTableTablePanel =\n options.TablePanel ?? DefaultDataTableTablePanel;\n const uiClassNames = ui.classNames ?? {};\n const {\n rootClassName,\n Button,\n Checkbox,\n Input,\n ScrollArea,\n ScrollBar,\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableFooter = \"tfoot\",\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider = React.Fragment,\n TooltipTrigger,\n } = ui;\n const DataTableEmptyState = createDataTableEmptyState(ui);\n const DataTableRowActions = createDataTableRowActions(ui);\n const { DataTableFooter } = createDataTablePagination(ui);\n const DataTableToolbar = createDataTableToolbar(ui);\n const DataTableCardView = createDataTableCardView(ui, DataTableRowActions);\n const DataTableStateOverlay = React.lazy(async () => {\n const { createDataTableStateOverlay } = await import(\n \"./data-table-state-overlay\"\n );\n return { default: createDataTableStateOverlay(ui) };\n }) as unknown as (props: {\n labels: DataTableLabels;\n overlay: DataTableStateOverlayConfig;\n rows: Array;\n toolbarQueryValue: string;\n }) => React.ReactElement | null;\n const defaultColumn = {\n minSize: 80,\n size: 180,\n maxSize: 720,\n };\n\n return function DataTable({\n columns,\n data,\n getRowId,\n children,\n title,\n description,\n toolbarQueryValue,\n onToolbarQueryValueChange,\n toolbarQueryPlaceholder,\n toolbarQueryDebounceMs,\n manualFiltering = false,\n enableToolbarQueryFiltering = true,\n globalFilterFn,\n columnFilters,\n onColumnFiltersChange,\n enableColumnFilters,\n customToolbar,\n compactToolbar,\n rowsPerPageOptions = [10, 20, 50, 100],\n totalRowCount,\n hasNextPage,\n sorting,\n onSortingChange,\n manualSorting = false,\n grouping,\n onGroupingChange,\n manualGrouping = false,\n enableGrouping = false,\n groupedColumnMode = \"reorder\",\n aggregationFns,\n pageIndex,\n pageSize,\n autoPageSize = false,\n onPageIndexChange,\n onPageSizeChange,\n pageCount,\n manualPagination = false,\n rowSelection,\n onRowSelectionChange,\n enableRowSelection = false,\n enableMultiRowSelection = true,\n enableSubRowSelection = true,\n getRowCanSelect,\n rowSelectionSelectAllScope = \"page\",\n expanded,\n onExpandedChange,\n getSubRows,\n manualExpanding = false,\n paginateExpandedRows,\n filterFromLeafRows,\n maxLeafRowFilterDepth,\n detailPanel,\n getRowCanExpand,\n renderExpandedRow,\n columnOrder,\n onColumnOrderChange,\n enableColumnReordering = false,\n columnGroupHeaderHeight,\n columnPinning,\n onColumnPinningChange,\n enableColumnPinning = false,\n rowPinning,\n onRowPinningChange,\n enableRowPinning = false,\n keepPinnedRows = true,\n toolbarActions = [],\n selectionActions = [],\n rowActions = [],\n csvExport,\n clipboard,\n enableCellSelection = false,\n cellSelection,\n defaultCellSelection,\n onCellSelectionChange,\n gridCommands,\n density,\n onDensityChange,\n enableDensityToggle = false,\n columnPrefsKey,\n persistence,\n savedViews,\n toolbarDataOperations,\n initialState,\n state: unifiedState,\n onStateChange,\n apiRef,\n labels,\n summaryRows = [],\n cardRenderer,\n cardSizing,\n cardGridClassName,\n cardClassName,\n viewMode,\n onViewModeChange,\n enableViewToggle = false,\n enablePrint = false,\n enableFullscreen = false,\n emptyState,\n stateOverlay,\n isLoading = false,\n loadingRowCount,\n getRowLoadingState,\n hiddenRows,\n showHiddenRows,\n onShowHiddenRowsChange,\n infiniteScroll,\n editableRows,\n columnVisibility,\n onColumnVisibilityChange,\n columnSizing,\n onColumnSizingChange,\n enableColumnResizing = false,\n columnResizeMode = \"onEnd\",\n layoutMode = \"fill\",\n stickyHeader = true,\n showFooter = true,\n showToolbar = true,\n dir = \"ltr\",\n flexGrow = true,\n toolbarVisibility,\n className,\n tableClassName,\n tableContainerClassName,\n stripedRows = false,\n getRowClassName,\n onRowClick,\n onActionError,\n dragAndDrop,\n fileUpload,\n virtualization,\n accessibility,\n interactiveGrid,\n }: DataTableProps) {\n const containerRef = React.useRef(null);\n const fileInputRef = React.useRef(null);\n const tableScrollContainerRef = React.useRef(null);\n const draggedColumnIdRef = React.useRef(null);\n const tableRef = React.useRef | null>(null);\n const lastSelectedRowIdRef = React.useRef(null);\n const [toolbarSavedViewsVersion, setToolbarSavedViewsVersion] =\n React.useState(0);\n const generatedTitleId = React.useId();\n const generatedDescriptionId = React.useId();\n useDataTablePerformanceDiagnostics({ columns, data, getRowId });\n React.useMemo(() => validateDataTableColumnIds(columns), [columns]);\n const resolvedLabels = React.useMemo(\n () => resolveDataTableLabels(labels),\n [labels],\n );\n const toolbarOperations =\n toolbarDataOperations === true\n ? { columnChooser: true, savedViews: true, resetLayout: true }\n : toolbarDataOperations === false\n ? {}\n : (toolbarDataOperations ?? {});\n const gridMode =\n accessibility?.mode === \"grid\" ||\n interactiveGrid === true ||\n typeof interactiveGrid === \"object\";\n const [currentCellSelection, setCurrentCellSelection] =\n useControllableState({\n defaultValue: defaultCellSelection ?? null,\n onChange: onCellSelectionChange,\n value: cellSelection,\n });\n const resolvedToolbarQueryValue =\n toolbarQueryValue ?? unifiedState?.globalFilter;\n const resolvedSorting = sorting ?? unifiedState?.sorting;\n const resolvedGrouping = grouping ?? unifiedState?.grouping;\n const resolvedPageIndex =\n pageIndex ?? unifiedState?.pagination?.pageIndex;\n const resolvedPageSize = pageSize ?? unifiedState?.pagination?.pageSize;\n const resolvedRowSelection =\n rowSelection ?? unifiedState?.rowSelection;\n const resolvedColumnVisibility =\n columnVisibility ?? unifiedState?.columnVisibility;\n const resolvedColumnFilters =\n columnFilters ?? unifiedState?.columnFilters;\n const resolvedExpanded = expanded ?? unifiedState?.expanded;\n const resolvedColumnOrder =\n columnOrder ?? unifiedState?.columnOrder;\n const resolvedColumnPinning =\n columnPinning ?? unifiedState?.columnPinning;\n const resolvedRowPinning = rowPinning ?? unifiedState?.rowPinning;\n const resolvedColumnSizing =\n columnSizing ?? unifiedState?.columnSizing;\n const resolvedDensity = density ?? unifiedState?.density;\n const resolvedViewMode = viewMode ?? unifiedState?.viewMode;\n const resolvedShowHiddenRows =\n showHiddenRows ?? unifiedState?.showHiddenRows;\n const showTableHeading =\n showToolbar && (toolbarVisibility?.title ?? true);\n const titleId = showTableHeading && title ? generatedTitleId : undefined;\n const descriptionId =\n showTableHeading && description ? generatedDescriptionId : undefined;\n useDataTableStateConflictWarnings(unifiedState, {\n columnFilters: columnFilters !== undefined,\n columnOrder: columnOrder !== undefined,\n columnPinning: columnPinning !== undefined,\n rowPinning: rowPinning !== undefined,\n columnSizing: columnSizing !== undefined,\n columnVisibility: columnVisibility !== undefined,\n density: density !== undefined,\n expanded: expanded !== undefined,\n grouping: grouping !== undefined,\n globalFilter: toolbarQueryValue !== undefined,\n pagination: pageIndex !== undefined || pageSize !== undefined,\n rowSelection: rowSelection !== undefined,\n showHiddenRows: showHiddenRows !== undefined,\n sorting: sorting !== undefined,\n viewMode: viewMode !== undefined,\n });\n const handleToolbarQueryValueChange = useDataTableStateSliceChange(\n \"globalFilter\",\n onToolbarQueryValueChange,\n onStateChange,\n );\n const handleSortingPropChange = useDataTableStateSliceChange(\n \"sorting\",\n onSortingChange,\n onStateChange,\n );\n const handleGroupingPropChange = useDataTableStateSliceChange(\n \"grouping\",\n onGroupingChange,\n onStateChange,\n );\n const handleRowSelectionPropChange = useDataTableStateSliceChange(\n \"rowSelection\",\n onRowSelectionChange,\n onStateChange,\n );\n const handleColumnVisibilityPropChange = useDataTableStateSliceChange(\n \"columnVisibility\",\n onColumnVisibilityChange,\n onStateChange,\n );\n const handleColumnFiltersPropChange = useDataTableStateSliceChange(\n \"columnFilters\",\n onColumnFiltersChange,\n onStateChange,\n );\n const handleExpandedPropChange = useDataTableStateSliceChange(\n \"expanded\",\n onExpandedChange,\n onStateChange,\n );\n const handleColumnOrderPropChange = useDataTableStateSliceChange(\n \"columnOrder\",\n onColumnOrderChange,\n onStateChange,\n );\n const handleColumnPinningPropChange = useDataTableStateSliceChange(\n \"columnPinning\",\n onColumnPinningChange,\n onStateChange,\n );\n const handleRowPinningPropChange = useDataTableStateSliceChange(\n \"rowPinning\",\n onRowPinningChange,\n onStateChange,\n );\n const handleColumnSizingPropChange = useDataTableStateSliceChange(\n \"columnSizing\",\n onColumnSizingChange,\n onStateChange,\n );\n const handleDensityPropChange = useDataTableStateSliceChange(\n \"density\",\n onDensityChange,\n onStateChange,\n );\n const handleViewModePropChange = useDataTableStateSliceChange(\n \"viewMode\",\n onViewModeChange,\n onStateChange,\n );\n const handleShowHiddenRowsPropChange = useDataTableStateSliceChange(\n \"showHiddenRows\",\n onShowHiddenRowsChange,\n onStateChange,\n );\n const handlePageIndexPropChange = React.useCallback(\n (nextPageIndex: number) => {\n onPageIndexChange?.(nextPageIndex);\n onStateChange?.((current) => ({\n ...current,\n pagination: {\n pageIndex: nextPageIndex,\n pageSize:\n resolvedPageSize ?? current.pagination.pageSize,\n },\n }));\n },\n [onPageIndexChange, onStateChange, resolvedPageSize],\n );\n const handlePageSizePropChange = React.useCallback(\n (nextPageSize: number) => {\n onPageSizeChange?.(nextPageSize);\n onStateChange?.((current) => ({\n ...current,\n pagination: {\n pageIndex:\n resolvedPageIndex ?? current.pagination.pageIndex,\n pageSize: nextPageSize,\n },\n }));\n },\n [onPageSizeChange, onStateChange, resolvedPageIndex],\n );\n const runAction = React.useCallback(\n (\n context: Omit, \"error\">,\n action: () => void | Promise,\n ) => {\n runDataTableAction(action, context, onActionError);\n },\n [onActionError],\n );\n const guardedRowActions = React.useMemo(\n () =>\n rowActions.map((action) => ({\n ...action,\n onClick: (row: TData) => {\n runAction(\n {\n actionKey: action.key,\n row,\n source: \"rowAction\",\n },\n () => action.onClick(row),\n );\n },\n })),\n [rowActions, runAction],\n );\n const guardedOnRowClick = React.useMemo<\n DataTableProps[\"onRowClick\"]\n >(\n () =>\n onRowClick\n ? (context) => {\n runAction(\n {\n row: context.row,\n source: \"rowClick\",\n },\n () => onRowClick(context),\n );\n }\n : undefined,\n [onRowClick, runAction],\n );\n const handleEditError = React.useCallback(\n (error: unknown, row: TData) => {\n onActionError?.({\n error,\n row,\n source: \"edit\",\n });\n },\n [onActionError],\n );\n const {\n containerWidth,\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentRowPinning,\n currentColumnSizing,\n currentColumnVisibility,\n currentDensity,\n currentExpanded,\n currentGrouping,\n currentPagination,\n currentRowSelection,\n currentShowHiddenRows,\n currentSorting,\n currentViewMode,\n effectiveColumnVisibility,\n globalFilterValue,\n handleDensityChange,\n handleShowHiddenRowsChange,\n handleViewModeChange,\n localSearchValue,\n resolvedLoadingRowCount,\n resolvedToolbarQueryPlaceholder,\n selectedRowIds,\n selectedRows,\n setCurrentColumnFilters,\n setCurrentColumnOrder,\n setCurrentColumnPinning,\n setCurrentRowPinning,\n setCurrentColumnVisibility,\n setCurrentExpanded,\n setCurrentGrouping,\n setCurrentRowSelection,\n setCurrentSorting,\n setLocalColumnSizing,\n setLocalPagination,\n setLocalSearchValue,\n shouldRenderInitialLoading,\n tableData,\n tableGetRowId,\n visibleData,\n } = useDataTableState({\n columnFilters: resolvedColumnFilters,\n columnOrder: resolvedColumnOrder,\n columnPinning: resolvedColumnPinning,\n rowPinning: resolvedRowPinning,\n columnSizing: resolvedColumnSizing,\n columnPrefsKey,\n persistence,\n columnVisibility: resolvedColumnVisibility,\n columns,\n containerRef,\n data,\n density: resolvedDensity,\n enableRowSelection,\n enableToolbarQueryFiltering,\n expanded: resolvedExpanded,\n grouping: resolvedGrouping,\n getSubRows,\n getRowId,\n hiddenRows,\n isLoading,\n loadingRowCount,\n manualFiltering,\n initialState,\n onColumnFiltersChange: handleColumnFiltersPropChange,\n onColumnOrderChange: handleColumnOrderPropChange,\n onColumnPinningChange: handleColumnPinningPropChange,\n onRowPinningChange: handleRowPinningPropChange,\n onColumnSizingChange: handleColumnSizingPropChange,\n onColumnVisibilityChange: handleColumnVisibilityPropChange,\n onDensityChange: handleDensityPropChange,\n onExpandedChange: handleExpandedPropChange,\n onGroupingChange: handleGroupingPropChange,\n onPageIndexChange: handlePageIndexPropChange,\n onRowSelectionChange: handleRowSelectionPropChange,\n onShowHiddenRowsChange: handleShowHiddenRowsPropChange,\n onSortingChange: handleSortingPropChange,\n onToolbarQueryValueChange: handleToolbarQueryValueChange,\n onViewModeChange: handleViewModePropChange,\n pageIndex: resolvedPageIndex,\n pageSize: resolvedPageSize,\n resolvedLabels,\n rowSelection: resolvedRowSelection,\n rowsPerPageOptions,\n selectionActions,\n showHiddenRows: resolvedShowHiddenRows,\n sorting: resolvedSorting,\n toolbarQueryDebounceMs,\n toolbarQueryPlaceholder,\n toolbarQueryValue: resolvedToolbarQueryValue,\n viewMode: resolvedViewMode,\n });\n const usesLegacyDetailPanelState = Boolean(\n renderExpandedRow && !detailPanel && !getSubRows,\n );\n const resolvedDetailPanel =\n detailPanel ??\n (renderExpandedRow\n ? {\n getRowCanExpand: getSubRows ? undefined : getRowCanExpand,\n render: renderExpandedRow,\n }\n : undefined);\n const [currentDetailExpanded, setCurrentDetailExpanded] =\n useControllableState({\n defaultValue: () =>\n usesLegacyDetailPanelState ? (initialState?.expanded ?? {}) : {},\n onChange: usesLegacyDetailPanelState\n ? setCurrentExpanded\n : resolvedDetailPanel?.onExpandedChange,\n value: usesLegacyDetailPanelState\n ? currentExpanded\n : resolvedDetailPanel?.expanded,\n });\n const {\n cancelEditing,\n clearEditError,\n draftValues,\n editErrors,\n editingRowId,\n isEditDirty,\n isSavingEdit,\n saveEdit,\n setDraftValues,\n setEditingRowId,\n startEditingRow,\n } = useRowEditing({\n columns,\n editableRows,\n onError: handleEditError,\n });\n const rowEditingContext = React.useMemo(\n () => ({\n cancel: cancelEditing,\n cancelOnEscape: editableRows?.cancelOnEscape !== false,\n clearError: clearEditError,\n commit: (row: TData) => {\n void saveEdit(row);\n },\n commitOnEnter: editableRows?.commitOnEnter !== false,\n errors: editErrors,\n isDirty: isEditDirty,\n isPending: isSavingEdit,\n }),\n [\n cancelEditing,\n clearEditError,\n editableRows?.cancelOnEscape,\n editableRows?.commitOnEnter,\n editErrors,\n isEditDirty,\n isSavingEdit,\n saveEdit,\n ],\n );\n const { viewportElement: tableScrollElement, viewportHeight } =\n useDataTableScrollViewport(tableScrollContainerRef, currentViewMode);\n const autoPageSizeConfig =\n typeof autoPageSize === \"object\" ? autoPageSize : undefined;\n const handleAutoPageSizeChange = React.useCallback(\n (nextPageSize: number) => {\n if (nextPageSize === currentPagination.pageSize) {\n return;\n }\n if (currentPagination.pageIndex !== 0) {\n handlePageIndexPropChange(0);\n }\n handlePageSizePropChange(nextPageSize);\n if (resolvedPageSize === undefined) {\n setLocalPagination({ pageIndex: 0, pageSize: nextPageSize });\n }\n },\n [\n currentPagination.pageIndex,\n currentPagination.pageSize,\n handlePageIndexPropChange,\n handlePageSizePropChange,\n resolvedPageSize,\n setLocalPagination,\n ],\n );\n const autoPageSizeEnabled =\n autoPageSize === true || autoPageSizeConfig !== undefined;\n const print = React.useCallback(() => {\n if (typeof window === \"undefined\" || typeof window.print !== \"function\") {\n return false;\n }\n window.print();\n return true;\n }, []);\n const toggleFullscreen = React.useCallback(async () => {\n const element = containerRef.current;\n if (!element || typeof document === \"undefined\") {\n return false;\n }\n if (document.fullscreenElement) {\n if (typeof document.exitFullscreen !== \"function\") return false;\n await document.exitFullscreen();\n return true;\n }\n if (typeof element.requestFullscreen !== \"function\") return false;\n await element.requestFullscreen();\n return true;\n }, []);\n const [isFullscreen, setIsFullscreen] = React.useState(false);\n React.useEffect(() => {\n if (!enableFullscreen || typeof document === \"undefined\") return;\n const update = () => {\n setIsFullscreen(document.fullscreenElement === containerRef.current);\n };\n update();\n document.addEventListener(\"fullscreenchange\", update);\n return () => document.removeEventListener(\"fullscreenchange\", update);\n }, [enableFullscreen]);\n const openFileDialog = React.useCallback(() => {\n if (fileUpload?.disabled) {\n return;\n }\n\n fileInputRef.current?.click();\n }, [fileUpload?.disabled]);\n const handleSelectedFiles = React.useCallback(\n (files: FileList | Array) => {\n runAction(\n {\n source: \"fileUpload\",\n },\n () => fileUpload?.onFilesSelected(files),\n );\n },\n [fileUpload, runAction],\n );\n\n const tableColumns = useDataTableColumns({\n Button,\n Checkbox,\n DataTableRowActions,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cancelEditing,\n columns,\n editableRows,\n editErrors,\n editingRowId,\n enableRowSelection,\n enableRowPinning,\n hasTreeExpansion: Boolean(getSubRows),\n isSavingEdit,\n isEditDirty,\n labels: resolvedLabels,\n lastSelectedRowIdRef,\n detailPanel: resolvedDetailPanel,\n detailExpanded: currentDetailExpanded,\n onDetailExpandedChange: setCurrentDetailExpanded,\n rowSelectionSelectAllScope,\n rowActions: guardedRowActions,\n saveEdit,\n startEditingRow,\n tableRef,\n });\n const columnGroupPaths = React.useMemo(\n () => getDataTableColumnGroupPaths(columns),\n [columns],\n );\n\n const {\n effectivePageCount,\n footerTotalRowCount,\n handleFooterPageIndexChange,\n handleFooterPageSizeChange,\n isPageCountKnown,\n renderedRows,\n topPinnedRows,\n bottomPinnedRows,\n reorderColumn,\n rowsToRender,\n sentinelRef,\n table,\n virtualPaddingBottom,\n virtualPaddingTop,\n visibleLeafColumns,\n } = useDataTableInstance({\n autoResetPageIndex: false,\n columnGroupPaths,\n columnResizeMode,\n dir,\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentRowPinning,\n currentColumnSizing,\n currentExpanded,\n currentGrouping,\n currentPagination,\n currentRowSelection,\n currentSorting,\n currentViewMode,\n defaultColumn,\n effectiveColumnVisibility,\n enableColumnResizing,\n enableRowPinning,\n enableRowSelection,\n enableMultiRowSelection,\n enableSubRowSelection,\n getRowCanSelect,\n getRowCanExpand,\n getSubRows,\n aggregationFns,\n groupedColumnMode,\n globalFilterFn,\n globalFilterValue,\n hasNextPage,\n handleColumnFiltersChange: setCurrentColumnFilters,\n handleColumnOrderChange: setCurrentColumnOrder,\n handleColumnPinningChange: setCurrentColumnPinning,\n handleRowPinningChange: setCurrentRowPinning,\n handleColumnVisibilityChange: setCurrentColumnVisibility,\n handleExpandedChange: setCurrentExpanded,\n handleGroupingChange: setCurrentGrouping,\n infiniteScroll,\n keepPinnedRows,\n manualFiltering,\n manualGrouping,\n manualExpanding,\n manualPagination,\n manualSorting,\n onActionError,\n onPageIndexChange: handlePageIndexPropChange,\n onPageSizeChange: handlePageSizePropChange,\n pageCount,\n pageIndex: resolvedPageIndex,\n pageSize: resolvedPageSize,\n paginateExpandedRows,\n filterFromLeafRows,\n maxLeafRowFilterDepth,\n setCurrentRowSelection,\n setCurrentSorting,\n setLocalColumnSizing,\n setLocalPagination,\n shouldRenderInitialLoading,\n tableColumns,\n tableData,\n tableGetRowId,\n tableRef,\n tableScrollElement,\n totalRowCount,\n virtualization,\n viewportHeight,\n });\n const columnLayout = useColumnLayout({\n columns,\n columnSizing: currentColumnSizing,\n editableRows: Boolean(editableRows),\n enableRowSelection,\n hasRowActions: rowActions.length > 0,\n hasRowExpansion: Boolean(getSubRows || resolvedDetailPanel),\n layoutMode,\n uiClassNames,\n visibleLeafColumns,\n });\n const { explicitlySizedColumnIds, fillMinWidth, getColumnLayout } =\n columnLayout;\n const explicitCustomCellColumnIds = React.useMemo(() => {\n return new Set(\n getDataTableLeafColumns(columns).flatMap(({ column, index }) => {\n return Object.prototype.hasOwnProperty.call(column, \"cell\") &&\n typeof column.cell === \"function\"\n ? [getColumnId(column, index)]\n : [];\n }),\n );\n }, [columns]);\n const visibleLeafColumnCount = visibleLeafColumns.length;\n const bodyRowComponents = React.useMemo(\n () => ({\n Checkbox,\n Input,\n Skeleton,\n TableCell,\n TableRow,\n }),\n [],\n );\n const hasCardTitle = React.useMemo(\n () =>\n getDataTableLeafColumns(columns).some(\n ({ column }) => column.meta?.cardTitle,\n ),\n [columns],\n );\n const primeColumnForResize = React.useCallback(\n (columnId: string, currentSize: number) => {\n if (\n explicitlySizedColumnIds.has(columnId) ||\n Object.prototype.hasOwnProperty.call(\n table.getState().columnSizing,\n columnId,\n )\n ) {\n return;\n }\n\n flushSync(() => {\n table.setColumnSizing((current) => ({\n ...current,\n [columnId]: currentSize,\n }));\n });\n },\n [explicitlySizedColumnIds, table],\n );\n const resetColumnSize = React.useCallback(\n (columnId: string) => {\n if (explicitlySizedColumnIds.has(columnId)) {\n table.getColumn(columnId)?.resetSize();\n return;\n }\n\n table.setColumnSizing((current) => {\n if (!Object.prototype.hasOwnProperty.call(current, columnId)) {\n return current;\n }\n\n const next = { ...current };\n delete next[columnId];\n return next;\n });\n },\n [explicitlySizedColumnIds, table],\n );\n\n const filteredData = table\n .getFilteredRowModel()\n .rows.map((row) => row.original);\n const configuredEmptyState = stateOverlay?.empty ?? emptyState;\n const emptyNode =\n typeof configuredEmptyState === \"function\"\n ? configuredEmptyState({\n rows: filteredData,\n toolbarQueryValue: localSearchValue,\n })\n : configuredEmptyState;\n const guardedStateOverlay = React.useMemo(\n () =>\n stateOverlay\n ? {\n ...stateOverlay,\n onRetry: stateOverlay.onRetry\n ? () =>\n runAction(\n { source: \"retry\" },\n stateOverlay.onRetry!,\n )\n : undefined,\n }\n : undefined,\n [runAction, stateOverlay],\n );\n const stateOverlayNode = guardedStateOverlay?.error != null ? (\n \n \n \n ) : undefined;\n const {\n columnVisibilityOptions,\n effectiveToolbarActions,\n handleClearColumnFilters,\n handleToolbarColumnFilterChange,\n handleToolbarColumnPinningChange,\n toolbarColumnFilters,\n } = useDataTableToolbarFeatures({\n columns,\n currentColumnFilters,\n currentColumnPinning,\n csvExport,\n effectiveColumnVisibility,\n enableColumnFilters,\n handleColumnFiltersChange: setCurrentColumnFilters,\n handleColumnPinningChange: setCurrentColumnPinning,\n labels: resolvedLabels,\n table,\n toolbarActions,\n visibleData,\n });\n const guardedToolbarActions = React.useMemo(\n () =>\n [\n ...effectiveToolbarActions,\n ...(enablePrint\n ? [\n {\n key: \"__print__\",\n label: resolvedLabels.print,\n placement: \"trailing\" as const,\n onClick: () => {\n print();\n },\n },\n ]\n : []),\n ...(enableFullscreen\n ? [\n {\n key: \"__fullscreen__\",\n label: isFullscreen\n ? resolvedLabels.exitFullscreen\n : resolvedLabels.enterFullscreen,\n placement: \"trailing\" as const,\n onClick: () => toggleFullscreen(),\n },\n ]\n : []),\n ].map((action) => ({\n ...action,\n onClick: (context: {\n rows: Array;\n openFileDialog?: () => void;\n }) => {\n runAction(\n {\n actionKey: action.key,\n source: \"toolbarAction\",\n },\n () => action.onClick(context),\n );\n },\n })),\n [\n effectiveToolbarActions,\n enableFullscreen,\n enablePrint,\n isFullscreen,\n print,\n resolvedLabels.enterFullscreen,\n resolvedLabels.exitFullscreen,\n resolvedLabels.print,\n runAction,\n toggleFullscreen,\n ],\n );\n const guardedSelectionActions = React.useMemo(\n () =>\n selectionActions.map((action) => ({\n ...action,\n onClick: (context: Parameters[0]) => {\n runAction(\n {\n actionKey: action.key,\n source: \"selectionAction\",\n },\n () => action.onClick(context),\n );\n },\n })),\n [runAction, selectionActions],\n );\n const currentDataTableState = React.useMemo(\n () => ({\n sorting: currentSorting,\n pagination: currentPagination,\n rowSelection: currentRowSelection,\n columnVisibility: currentColumnVisibility,\n columnFilters: currentColumnFilters,\n expanded: currentExpanded,\n grouping: currentGrouping,\n columnOrder: currentColumnOrder,\n columnPinning: currentColumnPinning,\n rowPinning: currentRowPinning,\n columnSizing: currentColumnSizing,\n density: currentDensity,\n viewMode: currentViewMode,\n showHiddenRows: currentShowHiddenRows,\n globalFilter: localSearchValue,\n }),\n [\n currentColumnFilters,\n currentColumnOrder,\n currentColumnPinning,\n currentRowPinning,\n currentColumnSizing,\n currentColumnVisibility,\n currentDensity,\n currentExpanded,\n currentGrouping,\n currentPagination,\n currentRowSelection,\n currentShowHiddenRows,\n currentSorting,\n currentViewMode,\n localSearchValue,\n ],\n );\n const getCurrentState = React.useCallback(\n () => cloneDataTableState(currentDataTableState),\n [currentDataTableState],\n );\n const restoreState = React.useCallback(\n (nextState: Partial) => {\n if (nextState.sorting !== undefined) {\n table.setSorting(nextState.sorting);\n }\n if (nextState.pagination !== undefined) {\n table.setPagination(nextState.pagination);\n }\n if (nextState.rowSelection !== undefined) {\n table.setRowSelection(nextState.rowSelection);\n }\n if (nextState.columnVisibility !== undefined) {\n table.setColumnVisibility(nextState.columnVisibility);\n }\n if (nextState.columnFilters !== undefined) {\n table.setColumnFilters(nextState.columnFilters);\n }\n if (nextState.expanded !== undefined) {\n table.setExpanded(nextState.expanded);\n }\n if (nextState.grouping !== undefined) {\n table.setGrouping(nextState.grouping);\n }\n if (nextState.columnOrder !== undefined) {\n table.setColumnOrder(nextState.columnOrder);\n }\n if (nextState.columnPinning !== undefined) {\n table.setColumnPinning(nextState.columnPinning);\n }\n if (nextState.rowPinning !== undefined) {\n table.setRowPinning(nextState.rowPinning);\n }\n if (nextState.columnSizing !== undefined) {\n table.setColumnSizing(nextState.columnSizing);\n }\n if (nextState.density !== undefined) {\n handleDensityChange(nextState.density);\n }\n if (nextState.viewMode !== undefined) {\n handleViewModeChange(nextState.viewMode);\n }\n if (nextState.showHiddenRows !== undefined) {\n handleShowHiddenRowsChange(nextState.showHiddenRows);\n }\n if (nextState.globalFilter !== undefined) {\n setLocalSearchValue(nextState.globalFilter);\n }\n },\n [\n handleDensityChange,\n handleShowHiddenRowsChange,\n handleViewModeChange,\n setLocalSearchValue,\n table,\n ],\n );\n const clearPersistedState = React.useCallback(\n () => clearDataTableColumnPrefs(persistence ?? columnPrefsKey),\n [columnPrefsKey, persistence],\n );\n const resetColumnLayout = React.useCallback<\n DataTableApi[\"resetColumnLayout\"]\n >(\n (options) => {\n if (options?.clearPersistence) {\n clearPersistedState();\n }\n restoreState({\n columnVisibility: initialState?.columnVisibility ?? {},\n columnOrder: initialState?.columnOrder ?? [],\n columnPinning:\n initialState?.columnPinning ?? getInitialColumnPinning(columns),\n rowPinning: initialState?.rowPinning ?? { top: [], bottom: [] },\n columnSizing: initialState?.columnSizing ?? {},\n });\n },\n [\n clearPersistedState,\n columns,\n initialState,\n restoreState,\n ],\n );\n const resetState = React.useCallback[\"resetState\"]>(\n (options) => {\n if (options?.clearPersistence) {\n clearPersistedState();\n }\n restoreState({\n sorting: initialState?.sorting ?? [],\n pagination: initialState?.pagination ?? {\n pageIndex: 0,\n pageSize: rowsPerPageOptions[0] ?? 20,\n },\n rowSelection: initialState?.rowSelection ?? {},\n columnVisibility: initialState?.columnVisibility ?? {},\n columnFilters: initialState?.columnFilters ?? [],\n expanded: initialState?.expanded ?? {},\n grouping: initialState?.grouping ?? [],\n columnOrder: initialState?.columnOrder ?? [],\n columnPinning:\n initialState?.columnPinning ?? getInitialColumnPinning(columns),\n rowPinning: initialState?.rowPinning ?? { top: [], bottom: [] },\n columnSizing: initialState?.columnSizing ?? {},\n density: initialState?.density ?? \"comfortable\",\n viewMode: initialState?.viewMode ?? \"table\",\n showHiddenRows: initialState?.showHiddenRows ?? false,\n globalFilter: initialState?.globalFilter ?? \"\",\n });\n },\n [\n clearPersistedState,\n columns,\n initialState,\n restoreState,\n rowsPerPageOptions,\n ],\n );\n const getSavedViews = React.useCallback(\n () => readDataTableSavedViews(savedViews),\n [savedViews],\n );\n const createSavedView = React.useCallback<\n DataTableApi[\"createSavedView\"]\n >(\n (name) =>\n createDataTableSavedView(savedViews, name, getCurrentState()),\n [getCurrentState, savedViews],\n );\n const applySavedView = React.useCallback<\n DataTableApi[\"applySavedView\"]\n >(\n (id) => {\n const view = readDataTableSavedViews(savedViews).find(\n (candidate) => candidate.id === id,\n );\n if (!view) {\n return false;\n }\n restoreState(view.state);\n savedViews?.onApply?.(view);\n return true;\n },\n [restoreState, savedViews],\n );\n const renameSavedView = React.useCallback<\n DataTableApi[\"renameSavedView\"]\n >(\n (id, name) => renameDataTableSavedView(savedViews, id, name),\n [savedViews],\n );\n const deleteSavedView = React.useCallback<\n DataTableApi[\"deleteSavedView\"]\n >(\n (id) => deleteDataTableSavedView(savedViews, id),\n [savedViews],\n );\n const clearSavedViews = React.useCallback(\n () => clearDataTableSavedViews(savedViews),\n [savedViews],\n );\n const toolbarSavedViews = React.useMemo(() => {\n void toolbarSavedViewsVersion;\n return readDataTableSavedViews(savedViews);\n }, [savedViews, toolbarSavedViewsVersion]);\n const handleToolbarCreateSavedView = React.useCallback(\n (name: string) => {\n const view = createSavedView(name);\n if (view) {\n setToolbarSavedViewsVersion((current) => current + 1);\n }\n return view;\n },\n [createSavedView],\n );\n const handleToolbarRenameSavedView = React.useCallback(\n (id: string, name: string) => {\n const view = renameSavedView(id, name);\n if (view) {\n setToolbarSavedViewsVersion((current) => current + 1);\n }\n return view;\n },\n [renameSavedView],\n );\n const handleToolbarDeleteSavedView = React.useCallback(\n (id: string) => {\n const deleted = deleteSavedView(id);\n if (deleted) {\n setToolbarSavedViewsVersion((current) => current + 1);\n }\n return deleted;\n },\n [deleteSavedView],\n );\n const exportCsvFromApi = React.useCallback<\n DataTableApi[\"exportCsv\"]\n >(\n (options) =>\n exportDataTableCsv({\n csvExport: options ?? (csvExport || true),\n labels: resolvedLabels,\n table,\n }),\n [csvExport, resolvedLabels, table],\n );\n const copyToClipboard = React.useCallback<\n DataTableApi[\"copyToClipboard\"]\n >(\n async (options) => {\n const { copyDataTableToClipboard } = await import(\n \"./data-table-clipboard\"\n );\n return copyDataTableToClipboard({\n clipboard:\n options ??\n (clipboard?.copy === false\n ? false\n : currentCellSelection\n ? {\n ...(clipboard?.copy === true ? {} : clipboard?.copy),\n scope: \"cellSelection\",\n }\n : clipboard?.copy ?? true),\n cellSelection: currentCellSelection,\n table,\n });\n },\n [clipboard?.copy, currentCellSelection, table],\n );\n const pinRow = React.useCallback[\"pinRow\"]>(\n (rowId, position = \"top\") => {\n try {\n const row = table.getRow(rowId, true);\n if (!row.getCanPin()) {\n return false;\n }\n row.pin(position);\n return true;\n } catch {\n return false;\n }\n },\n [table],\n );\n const unpinRow = React.useCallback[\"unpinRow\"]>(\n (rowId) => {\n try {\n const row = table.getRow(rowId, true);\n if (!row.getCanPin()) {\n return false;\n }\n row.pin(false);\n return true;\n } catch {\n return false;\n }\n },\n [table],\n );\n React.useImperativeHandle(\n apiRef,\n () => ({\n getTable: () => tableRef.current,\n getState: getCurrentState,\n snapshot: getCurrentState,\n restore: restoreState,\n resetColumnLayout,\n resetState,\n clearPersistedState,\n getSavedViews,\n createSavedView,\n applySavedView,\n renameSavedView,\n deleteSavedView,\n clearSavedViews,\n pinRow,\n unpinRow,\n focus: () => {\n containerRef.current?.focus();\n },\n scrollToRow: (rowId) =>\n scrollDataTableElementIntoView(containerRef.current, \"row\", rowId),\n scrollToColumn: (columnId) =>\n scrollDataTableElementIntoView(\n containerRef.current,\n \"column\",\n columnId,\n ),\n exportCsv: exportCsvFromApi,\n copyToClipboard,\n getCellSelection: () => currentCellSelection,\n setCellSelection: setCurrentCellSelection,\n clearCellSelection: () => setCurrentCellSelection(null),\n print,\n toggleFullscreen,\n }),\n [\n applySavedView,\n clearPersistedState,\n clearSavedViews,\n copyToClipboard,\n currentCellSelection,\n createSavedView,\n deleteSavedView,\n exportCsvFromApi,\n getSavedViews,\n getCurrentState,\n renameSavedView,\n resetColumnLayout,\n resetState,\n restoreState,\n pinRow,\n print,\n setCurrentCellSelection,\n unpinRow,\n toggleFullscreen,\n ],\n );\n\n return (\n \n {\n if (\n gridMode &&\n gridCommands &&\n (event.ctrlKey || event.metaKey) &&\n event.key.toLowerCase() === \"z\" &&\n !isDataTableEditableClipboardTarget(event.target)\n ) {\n const command = event.shiftKey ? gridCommands.redo : gridCommands.undo;\n if (command) {\n event.preventDefault();\n runAction(\n { source: event.shiftKey ? \"redo\" : \"undo\" },\n () => command({ cellSelection: currentCellSelection, table }),\n );\n }\n return;\n }\n if (\n !clipboard?.copy ||\n !(event.ctrlKey || event.metaKey) ||\n event.key.toLowerCase() !== \"c\" ||\n isDataTableEditableClipboardTarget(event.target)\n ) {\n return;\n }\n event.preventDefault();\n runAction(\n { source: \"clipboardCopy\" },\n async () => {\n await copyToClipboard(\n clipboard.copy === true\n ? undefined\n : currentCellSelection &&\n typeof clipboard.copy === \"object\" &&\n !clipboard.copy.scope\n ? { ...clipboard.copy, scope: \"cellSelection\" }\n : clipboard.copy,\n );\n },\n );\n }}\n onPaste={(event) => {\n const paste = clipboard?.paste;\n if (\n !paste ||\n paste.enabled === false ||\n isDataTableEditableClipboardTarget(event.target)\n ) {\n return;\n }\n const text = event.clipboardData.getData(\"text/plain\");\n if (!text) {\n return;\n }\n if (paste.preventDefault ?? true) {\n event.preventDefault();\n }\n runAction(\n { source: \"clipboardPaste\" },\n async () => {\n const { parseDataTableClipboardText } = await import(\n \"./data-table-clipboard\"\n );\n return paste.onPaste({\n table,\n text,\n values: parseDataTableClipboardText(text),\n });\n },\n );\n }}\n >\n {autoPageSizeEnabled ? (\n \n \n \n ) : null}\n {fileUpload ? (\n {\n const files = event.currentTarget.files;\n if (files?.length) {\n handleSelectedFiles(files);\n }\n event.currentTarget.value = \"\";\n }}\n />\n ) : null}\n \n \n {showToolbar ? (\n \n ) : null}\n\n \n {currentViewMode === \"card\" && cardRenderer ? (\n \n ) : (\n \n )}\n \n \n {children}\n \n \n \n \n \n );\n };\n}\n\nfunction runDataTableAction(\n action: () => void | Promise,\n context: Omit, \"error\">,\n onActionError: DataTableProps[\"onActionError\"],\n) {\n let result: void | Promise;\n try {\n result = action();\n } catch (error) {\n onActionError?.({ ...context, error });\n return;\n }\n\n void Promise.resolve(result).catch((error: unknown) => {\n onActionError?.({ ...context, error });\n });\n}\n\nfunction useDataTableStateSliceChange(\n key: K,\n onLegacyChange:\n | ((value: Exclude) => void)\n | undefined,\n onStateChange: DataTableProps[\"onStateChange\"],\n) {\n const handleChange = React.useCallback(\n (value: Exclude) => {\n onLegacyChange?.(value);\n onStateChange?.((current) => ({\n ...current,\n [key]: value,\n }));\n },\n [key, onLegacyChange, onStateChange],\n );\n\n return onLegacyChange || onStateChange ? handleChange : undefined;\n}\n\nfunction useDataTableStateConflictWarnings(\n state: Partial | undefined,\n legacySlices: Record,\n) {\n const warnedSlicesRef = React.useRef(new Set());\n\n React.useEffect(() => {\n if (!state || !isDevelopmentEnvironment()) {\n return;\n }\n\n for (const key of Object.keys(legacySlices) as Array<\n keyof DataTableState\n >) {\n if (\n state[key] === undefined ||\n !legacySlices[key] ||\n warnedSlicesRef.current.has(key)\n ) {\n continue;\n }\n\n warnedSlicesRef.current.add(key);\n console.warn(\n `[data-table-pro] Both state.${key} and its legacy controlled prop were provided. The legacy prop takes precedence during the 4.x compatibility window.`,\n );\n }\n }, [legacySlices, state]);\n}\n\nfunction isDevelopmentEnvironment() {\n const nodeEnvironment = (\n globalThis as {\n process?: { env?: { NODE_ENV?: string } };\n }\n ).process?.env?.NODE_ENV;\n\n return nodeEnvironment !== \"production\";\n}\n\nfunction cloneDataTableState(state: DataTableState): DataTableState {\n return {\n sorting: state.sorting.map((item) => ({ ...item })),\n pagination: { ...state.pagination },\n rowSelection: { ...state.rowSelection },\n columnVisibility: { ...state.columnVisibility },\n columnFilters: state.columnFilters.map((item) => ({ ...item })),\n expanded:\n typeof state.expanded === \"boolean\"\n ? state.expanded\n : { ...state.expanded },\n grouping: [...(state.grouping ?? [])],\n columnOrder: [...state.columnOrder],\n columnPinning: {\n left: state.columnPinning.left\n ? [...state.columnPinning.left]\n : undefined,\n right: state.columnPinning.right\n ? [...state.columnPinning.right]\n : undefined,\n },\n rowPinning: {\n top: state.rowPinning.top ? [...state.rowPinning.top] : undefined,\n bottom: state.rowPinning.bottom ? [...state.rowPinning.bottom] : undefined,\n },\n columnSizing: { ...state.columnSizing },\n density: state.density,\n viewMode: state.viewMode,\n showHiddenRows: state.showHiddenRows,\n globalFilter: state.globalFilter,\n };\n}\n\nfunction scrollDataTableElementIntoView(\n container: HTMLDivElement | null,\n kind: \"row\" | \"column\",\n value: string,\n) {\n if (!container) {\n return false;\n }\n\n const attribute = kind === \"row\" ? \"data-row-id\" : \"data-column-id\";\n const element = Array.from(\n container.querySelectorAll(`[${attribute}]`),\n ).find((candidate) => candidate.getAttribute(attribute) === value);\n if (!element) {\n return false;\n }\n\n element.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n return true;\n}\n\nfunction isDataTableEditableClipboardTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n return (\n target.isContentEditable ||\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement\n );\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-K7SNDVV2.js b/dist/chunk-K7SNDVV2.js new file mode 100644 index 0000000..8cac111 --- /dev/null +++ b/dist/chunk-K7SNDVV2.js @@ -0,0 +1,2 @@ +import {a}from'./chunk-EJHT5JBZ.js';import {a as a$2}from'./chunk-KDHJA6AH.js';import {a as a$1}from'./chunk-XTVBESM5.js';import*as f from'react';import {useVirtualizer}from'@tanstack/react-virtual';import {jsxs,jsx}from'react/jsx-runtime';function dt({cardClassName:r,cardGridClassName:o,cardSizing:E,cardRenderer:N,containerWidth:V,currentRowSelection:z,currentDetailExpanded:M,DataTableCardView:k,DataTableEmptyState:A,dragAndDrop:c,editableRows:P,editingRowId:I,emptyNode:H,enableRowSelection:_,flexGrow:g,getRowClassName:B,hasCardTitle:K,infiniteScroll:O,localSearchValue:h,onRowClick:j,renderedRows:e,detailPanel:U,resolvedLabels:n,resolvedLoadingRowCount:Y,rowActions:$=[],ScrollArea:q,sentinelRef:F,setCurrentDetailExpanded:J,setCurrentRowSelection:Q,setEditingRowId:X,shouldRenderInitialLoading:m,stateOverlayNode:Z,tableContainerClassName:G,uiClassNames:p,virtualization:R}){let v=m||e.length>0,x=f.useRef(null),{viewportElement:D,viewportHeight:L}=a(x,v),l=typeof R=="object"?R.card:void 0,T=!m&&e.length>0&&l?.enabled===true,i=rt(l?.lanes,V),W=Math.ceil(e.length/i),b=T&&!!D&&L>0,tt=f.useCallback(t=>e[t*i]?.id??t,[i,e]),w=useVirtualizer({count:T?W:0,enabled:b,estimateSize:()=>l?.estimateCardHeight??280,getItemKey:tt,getScrollElement:()=>D,overscan:l?.overscan??4}),at=b?w.getVirtualItems():[],C=(t,s)=>jsx(k,{rows:t,cardRenderer:N,cardGridClassName:o,cardClassName:r,cardSizing:E,rowActions:$,editableRows:P,detailPanel:U,detailExpanded:M,onDetailExpandedChange:J,hasCardTitle:K,rowSelection:z,onRowSelectionChange:Q,enableRowSelection:_,editingRowId:I,onEditingRowIdChange:X,getRowClassName:B,onRowClick:j,getRowDraggable:c?.getRowDraggable,onRowDragStart:c?.onRowDragStart,onRowDragEnd:c?.onRowDragEnd,isLoading:s?.isLoading,loadingRowCount:s?.loadingRowCount,labels:n});return jsxs("div",{ref:x,"data-dtp-slot":"data-table-card-shell",className:a$1("relative box-border border-2 border-transparent transition-colors",g?"flex min-h-0 flex-1 flex-col":"h-full",c?.isDragging&&(p.dragActive??"rounded-md border-dashed")),children:[jsx(q,{className:a$1(g?"min-h-0 flex-1":"h-full",p.cardScrollArea,G),children:jsxs("div",{"data-dtp-slot":"data-table-card-viewport",className:a$1("flex min-h-full min-w-0 flex-col",g&&"min-h-0 flex-1",p.cardViewport),children:[v?m?C([],{isLoading:true,loadingRowCount:Y}):b?jsx("div",{"data-dtp-slot":"data-table-card-virtualizer",style:{height:w.getTotalSize(),position:"relative",width:"100%"},children:at.map(t=>{let s=t.index*i,et=e.slice(s,s+i);return jsx("div",{"data-index":t.index,ref:w.measureElement,style:{left:0,position:"absolute",top:0,transform:`translateY(${t.start}px)`,width:"100%"},children:C(et)},t.key)})}):C(e.slice(0,Math.max(1,Math.floor(l?.fallbackCardCount??12)))):jsx("div",{className:"flex min-h-0 flex-1 items-center justify-center p-4",children:H??jsx(A,{title:h?n.noMatchingRowsTitle:n.noRowsTitle,description:h?n.noMatchingRowsDescription:n.noRowsDescription})}),O?.enabled&&!m?jsx("div",{className:"shrink-0 px-4 pb-4",children:jsx("div",{ref:F,className:"h-4 w-full"})}):null]})}),Z]})}function rt(r,o){return typeof r=="number"?Math.max(1,Math.floor(r)):r!=="auto"?1:o>=a$2["2xl"]?5:o>=a$2.xl?4:o>=a$2.lg?3:o>=a$2.sm?2:1}export{dt as a};//# sourceMappingURL=chunk-K7SNDVV2.js.map +//# sourceMappingURL=chunk-K7SNDVV2.js.map \ No newline at end of file diff --git a/dist/chunk-K7SNDVV2.js.map b/dist/chunk-K7SNDVV2.js.map new file mode 100644 index 0000000..1ee6c59 --- /dev/null +++ b/dist/chunk-K7SNDVV2.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/data-table-virtual-card-panel.tsx"],"names":["DataTableVirtualCardPanel","cardClassName","cardGridClassName","cardSizing","cardRenderer","containerWidth","currentRowSelection","currentDetailExpanded","DataTableCardView","DataTableEmptyState","dragAndDrop","editableRows","editingRowId","emptyNode","enableRowSelection","flexGrow","getRowClassName","hasCardTitle","infiniteScroll","localSearchValue","onRowClick","renderedRows","detailPanel","resolvedLabels","resolvedLoadingRowCount","rowActions","ScrollArea","sentinelRef","setCurrentDetailExpanded","setCurrentRowSelection","setEditingRowId","shouldRenderInitialLoading","stateOverlayNode","tableContainerClassName","uiClassNames","virtualization","shouldRenderCards","cardScrollContainerRef","viewportElement","viewportHeight","useDataTableScrollViewport","virtualizationConfig","enableCardVirtualization","lanes","resolveCardVirtualizationLanes","virtualRowCount","shouldUseVirtualCardRows","getItemKey","index","cardVirtualizer","useVirtualizer","virtualCardRows","renderCardView","rows","options","jsx","jsxs","cn","virtualRow","startIndex","configuredLanes","DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS"],"mappings":"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","file":"chunk-K7SNDVV2.js","sourcesContent":["import * as React from \"react\";\nimport type { Row } from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { cn } from \"../../lib/utils\";\nimport { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS } from \"../types\";\nimport type { DataTableCardPanelProps } from \"./data-table-card-panel-types\";\nimport { useDataTableScrollViewport } from \"./use-data-table-scroll-viewport\";\n\nexport function DataTableVirtualCardPanel({\n cardClassName,\n cardGridClassName,\n cardSizing,\n cardRenderer,\n containerWidth,\n currentRowSelection,\n currentDetailExpanded,\n DataTableCardView,\n DataTableEmptyState,\n dragAndDrop,\n editableRows,\n editingRowId,\n emptyNode,\n enableRowSelection,\n flexGrow,\n getRowClassName,\n hasCardTitle,\n infiniteScroll,\n localSearchValue,\n onRowClick,\n renderedRows,\n detailPanel,\n resolvedLabels,\n resolvedLoadingRowCount,\n rowActions = [],\n ScrollArea,\n sentinelRef,\n setCurrentDetailExpanded,\n setCurrentRowSelection,\n setEditingRowId,\n shouldRenderInitialLoading,\n stateOverlayNode,\n tableContainerClassName,\n uiClassNames,\n virtualization,\n}: DataTableCardPanelProps) {\n const shouldRenderCards = shouldRenderInitialLoading || renderedRows.length > 0;\n const cardScrollContainerRef = React.useRef(null);\n const { viewportElement, viewportHeight } = useDataTableScrollViewport(\n cardScrollContainerRef,\n shouldRenderCards,\n );\n const virtualizationConfig =\n typeof virtualization === \"object\" ? virtualization.card : undefined;\n const enableCardVirtualization =\n !shouldRenderInitialLoading &&\n renderedRows.length > 0 &&\n virtualizationConfig?.enabled === true;\n const lanes = resolveCardVirtualizationLanes(\n virtualizationConfig?.lanes,\n containerWidth,\n );\n const virtualRowCount = Math.ceil(renderedRows.length / lanes);\n const shouldUseVirtualCardRows =\n enableCardVirtualization && Boolean(viewportElement) && viewportHeight > 0;\n const getItemKey = React.useCallback(\n (index: number) => renderedRows[index * lanes]?.id ?? index,\n [lanes, renderedRows],\n );\n // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Virtual owns its instance functions.\n const cardVirtualizer = useVirtualizer({\n count: enableCardVirtualization ? virtualRowCount : 0,\n enabled: shouldUseVirtualCardRows,\n estimateSize: () => virtualizationConfig?.estimateCardHeight ?? 280,\n getItemKey,\n getScrollElement: () => viewportElement,\n overscan: virtualizationConfig?.overscan ?? 4,\n });\n const virtualCardRows = shouldUseVirtualCardRows\n ? cardVirtualizer.getVirtualItems()\n : [];\n\n const renderCardView = (\n rows: Array>,\n options?: {\n isLoading?: boolean;\n loadingRowCount?: number;\n },\n ) => (\n \n );\n\n return (\n \n \n \n {shouldRenderCards ? (\n shouldRenderInitialLoading ? (\n renderCardView([], {\n isLoading: true,\n loadingRowCount: resolvedLoadingRowCount,\n })\n ) : shouldUseVirtualCardRows ? (\n \n {virtualCardRows.map((virtualRow) => {\n const startIndex = virtualRow.index * lanes;\n const rows = renderedRows.slice(\n startIndex,\n startIndex + lanes,\n );\n\n return (\n \n {renderCardView(rows)}\n \n );\n })}\n \n ) : (\n renderCardView(\n renderedRows.slice(\n 0,\n Math.max(\n 1,\n Math.floor(\n virtualizationConfig?.fallbackCardCount ?? 12,\n ),\n ),\n ),\n )\n )\n ) : (\n
    \n {emptyNode ?? (\n \n )}\n
    \n )}\n\n {infiniteScroll?.enabled && !shouldRenderInitialLoading ? (\n
    \n
    \n
    \n ) : null}\n
    \n \n {stateOverlayNode}\n \n );\n}\n\nfunction resolveCardVirtualizationLanes(\n configuredLanes: number | \"auto\" | undefined,\n containerWidth: number,\n) {\n if (typeof configuredLanes === \"number\") {\n return Math.max(1, Math.floor(configuredLanes));\n }\n\n if (configuredLanes !== \"auto\") {\n return 1;\n }\n\n if (containerWidth >= DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS[\"2xl\"]) {\n return 5;\n }\n if (containerWidth >= DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS.xl) {\n return 4;\n }\n if (containerWidth >= DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS.lg) {\n return 3;\n }\n if (containerWidth >= DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS.sm) {\n return 2;\n }\n return 1;\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-GTOBHZ7L.js b/dist/chunk-KA26IREG.js similarity index 67% rename from dist/chunk-GTOBHZ7L.js rename to dist/chunk-KA26IREG.js index 58d2de5..d81eee0 100644 --- a/dist/chunk-GTOBHZ7L.js +++ b/dist/chunk-KA26IREG.js @@ -1,2 +1,2 @@ -import {X as X$1,a as a$1,c,d,f,h,i,j,k,l,m,n,p,o,z,w,y,x,A,B,D,C,E,F,G,H,I,J,L,b,N,O,P,Q,R,T,S,U,W,q,r,s,t,u,v}from'./chunk-2V6RVOWX.js';import {a}from'./chunk-ZF4EP4WP.js';import'react';import {jsx}from'react/jsx-runtime';function e(j,q){return function({className:J,...Q}){return jsx(j,{className:a(q,J),...Q})}}var X=e(a$1,"rounded-field border-field-border shadow-field data-[variant=default]:bg-accent data-[variant=default]:text-accent-foreground data-[variant=outline]:border-field-border data-[variant=outline]:bg-field data-[variant=outline]:hover:bg-field-hover data-[variant=secondary]:bg-default data-[variant=secondary]:text-default-foreground data-[variant=ghost]:hover:bg-default data-[variant=destructive]:bg-danger-soft data-[variant=destructive]:text-danger"),Y=e(c,"rounded-2xl border border-separator bg-surface text-surface-foreground shadow-surface ring-0"),Z=e(d,"px-5 pt-5 pb-3"),ee=e(f,"px-5 pb-5"),re=e(h,"rounded-field border-field-border bg-field ring-focus/40 data-checked:bg-accent data-checked:text-accent-foreground data-checked:ring-focus"),te=e(i,"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden **:data-[slot$=-item]:focus:bg-default **:data-[slot$=-item]:data-highlighted:bg-default **:data-[slot$=-separator]:bg-separator **:data-[slot$=-trigger]:focus:bg-default"),oe=e(j,"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground data-[variant=destructive]:text-danger data-[variant=destructive]:focus:bg-danger-soft"),ae=e(k,"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground"),ne=e(l,"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground"),de=e(m,"text-muted"),ie=e(n,"bg-separator"),le=e(p,"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden"),se=e(o,"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground data-open:bg-default data-open:text-overlay-foreground"),ue=e(z,"rounded-field border-field-border bg-field text-field-foreground shadow-field placeholder:text-field-placeholder"),ce=e(w,"rounded-field border-field-border bg-field text-field-foreground shadow-field"),be=e(y,"text-muted"),ge=e(x,"bg-transparent"),pe=e(A,"justify-end"),fe=e(B,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover data-[active=true]:bg-accent data-[active=true]:text-accent-foreground"),me=e(D,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover"),ve=e(C,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover"),xe=e(E,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover"),Pe=e(F,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover"),ye=e(G,"rounded-2xl"),He=e(H,"[&>[data-slot=scroll-area-thumb]]:bg-default-500"),he=e(I,"rounded-field border-field-border bg-field text-field-foreground shadow-field"),Ce=e(J,"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden"),Te=e(L,"rounded-xl focus:bg-default"),we=e(b,"bg-separator"),Se=e(N,"rounded-xl bg-default"),Ie=e(O,"rounded-2xl text-foreground"),De=e(P,"[&_tr]:border-separator"),Me=e(Q,""),Ee=e(R,"border-separator bg-surface-secondary"),ke=e(T,"h-11 border-separator text-muted font-semibold"),Be=e(S,"border-separator hover:bg-default data-[state=selected]:bg-accent-soft"),Ge=e(U,"py-2.5"),Ae=e(W,"rounded-xl bg-overlay text-overlay-foreground ring-1 ring-separator shadow-overlay [&>svg]:bg-overlay [&>svg]:fill-overlay"),Le=e(q,"rounded-2xl border-separator bg-surface shadow-surface"),Re=e(r,""),Ne=e(s,"[&[data-variant=icon]]:rounded-2xl [&[data-variant=icon]]:bg-accent-soft [&[data-variant=icon]]:text-accent-soft-foreground"),Fe=e(t,"text-foreground"),Ue=e(u,"text-muted"),ze=e(v,""),We={...X$1,rootClassName:"dtp-heroui",classNames:{card:"hover:bg-default data-[state=selected]:bg-accent-soft",cardGrid:"bg-transparent",cardItem:"min-w-0",cardOverlay:"from-surface/95 via-surface/85 to-transparent",cardScrollArea:"bg-transparent",cardSelected:"bg-accent-soft ring-accent",cardUnselected:"border-separator",cardViewport:"bg-transparent",cellBorder:"border-separator/70",dragActive:"rounded-2xl border-dashed border-accent",emptyState:"border-separator bg-surface",footer:"border-separator bg-surface text-surface-foreground",headerSortIcon:"text-muted",mutedText:"text-muted",paginationSelectTrigger:"border-field-border bg-field",paginationTotal:"text-muted",pinnedColumn:"border-separator",pinnedUtilityColumn:"bg-surface",resizeHandle:"after:bg-separator hover:after:bg-accent",resizeHandleActive:"after:bg-accent",row:"hover:bg-default data-[state=selected]:!bg-accent-soft",rowSelected:"!bg-accent-soft",tableContainer:"border-separator bg-surface text-surface-foreground",tableScrollArea:"bg-surface",tableStickyHeader:"sticky top-0 z-30 bg-surface/95 backdrop-blur [&_th]:border-separator [&_th]:bg-surface/95",toolbarCompactIconButton:"size-7",toolbarIconButton:"text-muted hover:text-foreground",toolbarInputButton:"bg-field"},Button:X,Card:Y,CardContent:ee,CardHeader:Z,Checkbox:re,DropdownMenuCheckboxItem:ae,DropdownMenuContent:te,DropdownMenuItem:oe,DropdownMenuLabel:de,DropdownMenuRadioItem:ne,DropdownMenuSeparator:ie,DropdownMenuSubContent:le,DropdownMenuSubTrigger:se,Empty:Le,EmptyContent:ze,EmptyDescription:Ue,EmptyHeader:Re,EmptyMedia:Ne,EmptyTitle:Fe,Input:ue,InputGroup:ce,InputGroupAddon:be,InputGroupInput:ge,Pagination:pe,PaginationFirst:me,PaginationLast:Pe,PaginationLink:fe,PaginationNext:xe,PaginationPrevious:ve,ScrollArea:ye,ScrollBar:He,SelectContent:Ce,SelectItem:Te,SelectTrigger:he,Separator:we,Skeleton:Se,Table:Ie,TableBody:Me,TableCell:Ge,TableFooter:Ee,TableHead:ke,TableHeader:De,TableRow:Be,TooltipContent:Ae};export{We as a};//# sourceMappingURL=chunk-GTOBHZ7L.js.map -//# sourceMappingURL=chunk-GTOBHZ7L.js.map \ No newline at end of file +import {X as X$1,a as a$1,c,d,f,h,i,j,k,l,m,n,p,o,z,w,y,x,A,B,D,C,E,F,G,H,I,J,L,b,N,O,P,Q,R,T,S,U,W,q,r,s,t,u,v}from'./chunk-7FUCHMMB.js';import {a}from'./chunk-XTVBESM5.js';import'react';import {jsx}from'react/jsx-runtime';function e(j,q){return function({className:J,...Q}){return jsx(j,{className:a(q,J),...Q})}}var X=e(a$1,"rounded-field border-field-border shadow-field data-[variant=default]:bg-accent data-[variant=default]:text-accent-foreground data-[variant=outline]:border-field-border data-[variant=outline]:bg-field data-[variant=outline]:hover:bg-field-hover data-[variant=secondary]:bg-default data-[variant=secondary]:text-default-foreground data-[variant=ghost]:hover:bg-default data-[variant=destructive]:bg-danger-soft data-[variant=destructive]:text-danger"),Y=e(c,"rounded-2xl border border-separator bg-surface text-surface-foreground shadow-surface ring-0"),Z=e(d,"px-5 pt-5 pb-3"),ee=e(f,"px-5 pb-5"),re=e(h,"rounded-field border-field-border bg-field ring-focus/40 data-checked:bg-accent data-checked:text-accent-foreground data-checked:ring-focus"),te=e(i,"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden **:data-[slot$=-item]:focus:bg-default **:data-[slot$=-item]:data-highlighted:bg-default **:data-[slot$=-separator]:bg-separator **:data-[slot$=-trigger]:focus:bg-default"),oe=e(j,"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground data-[variant=destructive]:text-danger data-[variant=destructive]:focus:bg-danger-soft"),ae=e(k,"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground"),ne=e(l,"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground"),de=e(m,"text-muted"),ie=e(n,"bg-separator"),le=e(p,"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden"),se=e(o,"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground data-open:bg-default data-open:text-overlay-foreground"),ue=e(z,"rounded-field border-field-border bg-field text-field-foreground shadow-field placeholder:text-field-placeholder"),ce=e(w,"rounded-field border-field-border bg-field text-field-foreground shadow-field"),be=e(y,"text-muted"),ge=e(x,"bg-transparent"),pe=e(A,"justify-end"),fe=e(B,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover data-[active=true]:bg-accent data-[active=true]:text-accent-foreground"),me=e(D,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover"),ve=e(C,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover"),xe=e(E,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover"),Pe=e(F,"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover"),He=e(G,"rounded-2xl"),ye=e(H,"[&>[data-slot=scroll-area-thumb]]:bg-default-500"),he=e(I,"rounded-field border-field-border bg-field text-field-foreground shadow-field"),Ce=e(J,"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden"),Te=e(L,"rounded-xl focus:bg-default"),we=e(b,"bg-separator"),Se=e(N,"rounded-xl bg-default"),Ie=e(O,"rounded-2xl text-foreground"),De=e(P,"[&_tr]:border-separator"),Me=e(Q,""),Ee=e(R,"border-separator bg-surface-secondary"),ke=e(T,"h-11 border-separator text-muted font-semibold"),Be=e(S,"border-separator hover:bg-default data-[state=selected]:bg-accent-soft"),Ge=e(U,"py-2.5"),Ae=e(W,"rounded-xl bg-overlay text-overlay-foreground ring-1 ring-separator shadow-overlay [&>svg]:bg-overlay [&>svg]:fill-overlay"),Le=e(q,"rounded-2xl border-separator bg-surface shadow-surface"),Re=e(r,""),Ne=e(s,"[&[data-variant=icon]]:rounded-2xl [&[data-variant=icon]]:bg-accent-soft [&[data-variant=icon]]:text-accent-soft-foreground"),Fe=e(t,"text-foreground"),Ue=e(u,"text-muted"),ze=e(v,""),We={...X$1,rootClassName:"dtp-heroui",classNames:{card:"hover:bg-default data-[state=selected]:bg-accent-soft",cardGrid:"bg-transparent",cardItem:"min-w-0",cardOverlay:"from-surface/95 via-surface/85 to-transparent",cardScrollArea:"bg-transparent",cardSelected:"bg-accent-soft ring-accent",cardUnselected:"border-separator",cardViewport:"bg-transparent",cellBorder:"border-separator/70",cellSelected:"!bg-accent-soft ring-1 ring-inset ring-accent/50",columnGroupHeader:"bg-default/50 font-semibold",dragActive:"rounded-2xl border-dashed border-accent",emptyState:"border-separator bg-surface",footer:"border-separator bg-surface text-surface-foreground",headerSortIcon:"text-muted",mutedText:"text-muted",paginationSelectTrigger:"border-field-border bg-field",paginationTotal:"text-muted",pinnedColumn:"border-separator",pinnedUtilityColumn:"bg-surface",resizeHandle:"after:bg-separator hover:after:bg-accent",resizeHandleActive:"after:bg-accent",row:"hover:bg-default data-[state=selected]:!bg-accent-soft",rowSelected:"!bg-accent-soft",tableContainer:"border-separator bg-surface text-surface-foreground",tableScrollArea:"bg-surface",tableStickyHeader:"sticky top-0 z-30 bg-surface/95 backdrop-blur [&_th]:border-separator [&_th]:bg-surface/95",toolbarCompactIconButton:"size-7",toolbarIconButton:"text-muted hover:text-foreground",toolbarInputButton:"bg-field"},Button:X,Card:Y,CardContent:ee,CardHeader:Z,Checkbox:re,DropdownMenuCheckboxItem:ae,DropdownMenuContent:te,DropdownMenuItem:oe,DropdownMenuLabel:de,DropdownMenuRadioItem:ne,DropdownMenuSeparator:ie,DropdownMenuSubContent:le,DropdownMenuSubTrigger:se,Empty:Le,EmptyContent:ze,EmptyDescription:Ue,EmptyHeader:Re,EmptyMedia:Ne,EmptyTitle:Fe,Input:ue,InputGroup:ce,InputGroupAddon:be,InputGroupInput:ge,Pagination:pe,PaginationFirst:me,PaginationLast:Pe,PaginationLink:fe,PaginationNext:xe,PaginationPrevious:ve,ScrollArea:He,ScrollBar:ye,SelectContent:Ce,SelectItem:Te,SelectTrigger:he,Separator:we,Skeleton:Se,Table:Ie,TableBody:Me,TableCell:Ge,TableFooter:Ee,TableHead:ke,TableHeader:De,TableRow:Be,TooltipContent:Ae};export{We as a};//# sourceMappingURL=chunk-KA26IREG.js.map +//# sourceMappingURL=chunk-KA26IREG.js.map \ No newline at end of file diff --git a/dist/chunk-KA26IREG.js.map b/dist/chunk-KA26IREG.js.map new file mode 100644 index 0000000..c23c643 --- /dev/null +++ b/dist/chunk-KA26IREG.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/adapters/heroui/index.tsx"],"names":["withClassName","Component","defaultClassName","className","props","jsx","cn","HeroButton","Button","HeroCard","Card","HeroCardHeader","CardHeader","HeroCardContent","CardContent","HeroCheckbox","Checkbox","HeroDropdownMenuContent","DropdownMenuContent","HeroDropdownMenuItem","DropdownMenuItem","HeroDropdownMenuCheckboxItem","DropdownMenuCheckboxItem","HeroDropdownMenuRadioItem","DropdownMenuRadioItem","HeroDropdownMenuLabel","DropdownMenuLabel","HeroDropdownMenuSeparator","DropdownMenuSeparator","HeroDropdownMenuSubContent","DropdownMenuSubContent","HeroDropdownMenuSubTrigger","DropdownMenuSubTrigger","HeroInput","Input","HeroInputGroup","InputGroup","HeroInputGroupAddon","InputGroupAddon","HeroInputGroupInput","InputGroupInput","HeroPagination","Pagination","HeroPaginationLink","PaginationLink","HeroPaginationFirst","PaginationFirst","HeroPaginationPrevious","PaginationPrevious","HeroPaginationNext","PaginationNext","HeroPaginationLast","PaginationLast","HeroScrollArea","ScrollArea","HeroScrollBar","ScrollBar","HeroSelectTrigger","SelectTrigger","HeroSelectContent","SelectContent","HeroSelectItem","SelectItem","HeroSeparator","Separator","HeroSkeleton","Skeleton","HeroTable","Table","HeroTableHeader","TableHeader","HeroTableBody","TableBody","HeroTableFooter","TableFooter","HeroTableHead","TableHead","HeroTableRow","TableRow","HeroTableCell","TableCell","HeroTooltipContent","TooltipContent","HeroEmpty","Empty","HeroEmptyHeader","EmptyHeader","HeroEmptyMedia","EmptyMedia","HeroEmptyTitle","EmptyTitle","HeroEmptyDescription","EmptyDescription","HeroEmptyContent","EmptyContent","heroUiKit","primitiveUiKit"],"mappings":"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","file":"chunk-KA26IREG.js","sourcesContent":["import * as React from \"react\";\nimport type { DataTableUiKit } from \"../../core/ui-kit\";\nimport {\n Button as PrimitiveButton,\n Card as PrimitiveCard,\n CardContent as PrimitiveCardContent,\n CardHeader as PrimitiveCardHeader,\n Checkbox as PrimitiveCheckbox,\n DropdownMenuCheckboxItem as PrimitiveDropdownMenuCheckboxItem,\n DropdownMenuContent as PrimitiveDropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n DropdownMenuLabel as PrimitiveDropdownMenuLabel,\n DropdownMenuRadioItem as PrimitiveDropdownMenuRadioItem,\n DropdownMenuSeparator as PrimitiveDropdownMenuSeparator,\n DropdownMenuSubContent as PrimitiveDropdownMenuSubContent,\n DropdownMenuSubTrigger as PrimitiveDropdownMenuSubTrigger,\n Empty as PrimitiveEmpty,\n EmptyContent as PrimitiveEmptyContent,\n EmptyDescription as PrimitiveEmptyDescription,\n EmptyHeader as PrimitiveEmptyHeader,\n EmptyMedia as PrimitiveEmptyMedia,\n EmptyTitle as PrimitiveEmptyTitle,\n Input as PrimitiveInput,\n InputGroup as PrimitiveInputGroup,\n InputGroupAddon as PrimitiveInputGroupAddon,\n InputGroupInput as PrimitiveInputGroupInput,\n Pagination as PrimitivePagination,\n PaginationFirst as PrimitivePaginationFirst,\n PaginationLast as PrimitivePaginationLast,\n PaginationLink as PrimitivePaginationLink,\n PaginationNext as PrimitivePaginationNext,\n PaginationPrevious as PrimitivePaginationPrevious,\n ScrollArea as PrimitiveScrollArea,\n ScrollBar as PrimitiveScrollBar,\n SelectContent as PrimitiveSelectContent,\n SelectItem as PrimitiveSelectItem,\n SelectTrigger as PrimitiveSelectTrigger,\n Separator as PrimitiveSeparator,\n Skeleton as PrimitiveSkeleton,\n Table as PrimitiveTable,\n TableBody as PrimitiveTableBody,\n TableCell as PrimitiveTableCell,\n TableFooter as PrimitiveTableFooter,\n TableHead as PrimitiveTableHead,\n TableHeader as PrimitiveTableHeader,\n TableRow as PrimitiveTableRow,\n TooltipContent as PrimitiveTooltipContent,\n primitiveUiKit,\n} from \"../../core/primitive-ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nfunction withClassName(\n Component: React.ComponentType,\n defaultClassName: string,\n) {\n return function Wrapped({ className, ...props }: TProps) {\n return (\n \n );\n };\n}\n\nconst HeroButton = withClassName(\n PrimitiveButton,\n \"rounded-field border-field-border shadow-field data-[variant=default]:bg-accent data-[variant=default]:text-accent-foreground data-[variant=outline]:border-field-border data-[variant=outline]:bg-field data-[variant=outline]:hover:bg-field-hover data-[variant=secondary]:bg-default data-[variant=secondary]:text-default-foreground data-[variant=ghost]:hover:bg-default data-[variant=destructive]:bg-danger-soft data-[variant=destructive]:text-danger\",\n);\nconst HeroCard = withClassName(\n PrimitiveCard,\n \"rounded-2xl border border-separator bg-surface text-surface-foreground shadow-surface ring-0\",\n);\nconst HeroCardHeader = withClassName(PrimitiveCardHeader, \"px-5 pt-5 pb-3\");\nconst HeroCardContent = withClassName(PrimitiveCardContent, \"px-5 pb-5\");\nconst HeroCheckbox = withClassName(\n PrimitiveCheckbox,\n \"rounded-field border-field-border bg-field ring-focus/40 data-checked:bg-accent data-checked:text-accent-foreground data-checked:ring-focus\",\n);\nconst HeroDropdownMenuContent = withClassName(\n PrimitiveDropdownMenuContent,\n \"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden **:data-[slot$=-item]:focus:bg-default **:data-[slot$=-item]:data-highlighted:bg-default **:data-[slot$=-separator]:bg-separator **:data-[slot$=-trigger]:focus:bg-default\",\n);\nconst HeroDropdownMenuItem = withClassName(\n PrimitiveDropdownMenuItem,\n \"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground data-[variant=destructive]:text-danger data-[variant=destructive]:focus:bg-danger-soft\",\n);\nconst HeroDropdownMenuCheckboxItem = withClassName(\n PrimitiveDropdownMenuCheckboxItem,\n \"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground\",\n);\nconst HeroDropdownMenuRadioItem = withClassName(\n PrimitiveDropdownMenuRadioItem,\n \"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground\",\n);\nconst HeroDropdownMenuLabel = withClassName(\n PrimitiveDropdownMenuLabel,\n \"text-muted\",\n);\nconst HeroDropdownMenuSeparator = withClassName(\n PrimitiveDropdownMenuSeparator,\n \"bg-separator\",\n);\nconst HeroDropdownMenuSubContent = withClassName(\n PrimitiveDropdownMenuSubContent,\n \"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden\",\n);\nconst HeroDropdownMenuSubTrigger = withClassName(\n PrimitiveDropdownMenuSubTrigger,\n \"rounded-xl text-overlay-foreground focus:bg-default focus:text-overlay-foreground data-open:bg-default data-open:text-overlay-foreground\",\n);\nconst HeroInput = withClassName(\n PrimitiveInput,\n \"rounded-field border-field-border bg-field text-field-foreground shadow-field placeholder:text-field-placeholder\",\n);\nconst HeroInputGroup = withClassName(\n PrimitiveInputGroup,\n \"rounded-field border-field-border bg-field text-field-foreground shadow-field\",\n);\nconst HeroInputGroupAddon = withClassName(\n PrimitiveInputGroupAddon,\n \"text-muted\",\n);\nconst HeroInputGroupInput = withClassName(PrimitiveInputGroupInput, \"bg-transparent\");\nconst HeroPagination = withClassName(PrimitivePagination, \"justify-end\");\nconst HeroPaginationLink = withClassName(\n PrimitivePaginationLink,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover data-[active=true]:bg-accent data-[active=true]:text-accent-foreground\",\n);\nconst HeroPaginationFirst = withClassName(\n PrimitivePaginationFirst,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover\",\n);\nconst HeroPaginationPrevious = withClassName(\n PrimitivePaginationPrevious,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover\",\n);\nconst HeroPaginationNext = withClassName(\n PrimitivePaginationNext,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover\",\n);\nconst HeroPaginationLast = withClassName(\n PrimitivePaginationLast,\n \"rounded-xl border-field-border bg-field text-field-foreground hover:bg-field-hover\",\n);\nconst HeroScrollArea = withClassName(PrimitiveScrollArea, \"rounded-2xl\");\nconst HeroScrollBar = withClassName(\n PrimitiveScrollBar,\n \"[&>[data-slot=scroll-area-thumb]]:bg-default-500\",\n);\nconst HeroSelectTrigger = withClassName(\n PrimitiveSelectTrigger,\n \"rounded-field border-field-border bg-field text-field-foreground shadow-field\",\n);\nconst HeroSelectContent = withClassName(\n PrimitiveSelectContent,\n \"rounded-2xl border border-separator bg-overlay text-overlay-foreground shadow-overlay ring-0 before:hidden\",\n);\nconst HeroSelectItem = withClassName(\n PrimitiveSelectItem,\n \"rounded-xl focus:bg-default\",\n);\nconst HeroSeparator = withClassName(PrimitiveSeparator, \"bg-separator\");\nconst HeroSkeleton = withClassName(\n PrimitiveSkeleton,\n \"rounded-xl bg-default\",\n);\nconst HeroTable = withClassName(PrimitiveTable, \"rounded-2xl text-foreground\");\nconst HeroTableHeader = withClassName(\n PrimitiveTableHeader,\n \"[&_tr]:border-separator\",\n);\nconst HeroTableBody = withClassName(PrimitiveTableBody, \"\");\nconst HeroTableFooter = withClassName(\n PrimitiveTableFooter,\n \"border-separator bg-surface-secondary\",\n);\nconst HeroTableHead = withClassName(\n PrimitiveTableHead,\n \"h-11 border-separator text-muted font-semibold\",\n);\nconst HeroTableRow = withClassName(\n PrimitiveTableRow,\n \"border-separator hover:bg-default data-[state=selected]:bg-accent-soft\",\n);\nconst HeroTableCell = withClassName(PrimitiveTableCell, \"py-2.5\");\nconst HeroTooltipContent = withClassName(\n PrimitiveTooltipContent,\n \"rounded-xl bg-overlay text-overlay-foreground ring-1 ring-separator shadow-overlay [&>svg]:bg-overlay [&>svg]:fill-overlay\",\n);\nconst HeroEmpty = withClassName(\n PrimitiveEmpty,\n \"rounded-2xl border-separator bg-surface shadow-surface\",\n);\nconst HeroEmptyHeader = withClassName(PrimitiveEmptyHeader, \"\");\nconst HeroEmptyMedia = withClassName(\n PrimitiveEmptyMedia,\n \"[&[data-variant=icon]]:rounded-2xl [&[data-variant=icon]]:bg-accent-soft [&[data-variant=icon]]:text-accent-soft-foreground\",\n);\nconst HeroEmptyTitle = withClassName(PrimitiveEmptyTitle, \"text-foreground\");\nconst HeroEmptyDescription = withClassName(\n PrimitiveEmptyDescription,\n \"text-muted\",\n);\nconst HeroEmptyContent = withClassName(PrimitiveEmptyContent, \"\");\n\nexport const heroUiKit: DataTableUiKit = {\n ...primitiveUiKit,\n rootClassName: \"dtp-heroui\",\n classNames: {\n card: \"hover:bg-default data-[state=selected]:bg-accent-soft\",\n cardGrid: \"bg-transparent\",\n cardItem: \"min-w-0\",\n cardOverlay: \"from-surface/95 via-surface/85 to-transparent\",\n cardScrollArea: \"bg-transparent\",\n cardSelected: \"bg-accent-soft ring-accent\",\n cardUnselected: \"border-separator\",\n cardViewport: \"bg-transparent\",\n cellBorder: \"border-separator/70\",\n cellSelected: \"!bg-accent-soft ring-1 ring-inset ring-accent/50\",\n columnGroupHeader: \"bg-default/50 font-semibold\",\n dragActive: \"rounded-2xl border-dashed border-accent\",\n emptyState: \"border-separator bg-surface\",\n footer: \"border-separator bg-surface text-surface-foreground\",\n headerSortIcon: \"text-muted\",\n mutedText: \"text-muted\",\n paginationSelectTrigger: \"border-field-border bg-field\",\n paginationTotal: \"text-muted\",\n pinnedColumn: \"border-separator\",\n pinnedUtilityColumn: \"bg-surface\",\n resizeHandle: \"after:bg-separator hover:after:bg-accent\",\n resizeHandleActive: \"after:bg-accent\",\n row: \"hover:bg-default data-[state=selected]:!bg-accent-soft\",\n rowSelected: \"!bg-accent-soft\",\n tableContainer: \"border-separator bg-surface text-surface-foreground\",\n tableScrollArea: \"bg-surface\",\n tableStickyHeader:\n \"sticky top-0 z-30 bg-surface/95 backdrop-blur [&_th]:border-separator [&_th]:bg-surface/95\",\n toolbarCompactIconButton: \"size-7\",\n toolbarIconButton: \"text-muted hover:text-foreground\",\n toolbarInputButton: \"bg-field\",\n },\n Button: HeroButton,\n Card: HeroCard,\n CardContent: HeroCardContent,\n CardHeader: HeroCardHeader,\n Checkbox: HeroCheckbox,\n DropdownMenuCheckboxItem: HeroDropdownMenuCheckboxItem,\n DropdownMenuContent: HeroDropdownMenuContent,\n DropdownMenuItem: HeroDropdownMenuItem,\n DropdownMenuLabel: HeroDropdownMenuLabel,\n DropdownMenuRadioItem: HeroDropdownMenuRadioItem,\n DropdownMenuSeparator: HeroDropdownMenuSeparator,\n DropdownMenuSubContent: HeroDropdownMenuSubContent,\n DropdownMenuSubTrigger: HeroDropdownMenuSubTrigger,\n Empty: HeroEmpty,\n EmptyContent: HeroEmptyContent,\n EmptyDescription: HeroEmptyDescription,\n EmptyHeader: HeroEmptyHeader,\n EmptyMedia: HeroEmptyMedia,\n EmptyTitle: HeroEmptyTitle,\n Input: HeroInput,\n InputGroup: HeroInputGroup,\n InputGroupAddon: HeroInputGroupAddon,\n InputGroupInput: HeroInputGroupInput,\n Pagination: HeroPagination,\n PaginationFirst: HeroPaginationFirst,\n PaginationLast: HeroPaginationLast,\n PaginationLink: HeroPaginationLink,\n PaginationNext: HeroPaginationNext,\n PaginationPrevious: HeroPaginationPrevious,\n ScrollArea: HeroScrollArea,\n ScrollBar: HeroScrollBar,\n SelectContent: HeroSelectContent,\n SelectItem: HeroSelectItem,\n SelectTrigger: HeroSelectTrigger,\n Separator: HeroSeparator,\n Skeleton: HeroSkeleton,\n Table: HeroTable,\n TableBody: HeroTableBody,\n TableCell: HeroTableCell,\n TableFooter: HeroTableFooter,\n TableHead: HeroTableHead,\n TableHeader: HeroTableHeader,\n TableRow: HeroTableRow,\n TooltipContent: HeroTooltipContent,\n};\n"]} \ No newline at end of file diff --git a/dist/chunk-KDHJA6AH.js b/dist/chunk-KDHJA6AH.js new file mode 100644 index 0000000..4c8aea8 --- /dev/null +++ b/dist/chunk-KDHJA6AH.js @@ -0,0 +1,2 @@ +var i={sm:640,md:768,lg:1024,xl:1280,"2xl":1536};function l(e,a,t){return !a||t?true:!a.getIsHidden(e)}function s(e,a){return typeof e=="function"?e(a):e}function d(e,a){return !e.hidden?.(a)}function b(e,a){return e?.canEditRow?e.canEditRow(a):!!e}function n(e){switch(e){case "center":return "text-center";case "end":return "text-right";default:return "text-left"}}function o(e,a){return e||(a==="numeric"?"end":"start")}function g(e){let a=e.column.columnDef.meta;return n(o(a?.align,a?.type))}function p(e){let a=e.column.columnDef.meta;return n(o(a?.align,a?.type))}function T(e){return e?(Array.isArray(e)?e:[e]).map(t=>`dt-hide-on-${t}`).join(" "):void 0}function u(e,a){return !e||a<=0?false:(Array.isArray(e)?e:[e]).some(r=>a;\n\n/** A stable grid coordinate used for cell and rectangular range selection. */\nexport type DataTableCellCoordinate = {\n rowId: string;\n columnId: string;\n};\n\n/** The two corners of a cell selection. A single-cell selection has equal corners. */\nexport type DataTableCellSelection = {\n anchor: DataTableCellCoordinate;\n focus: DataTableCellCoordinate;\n};\n\nexport type DataTableGridCommandContext = {\n table: TanStackTable;\n cellSelection: DataTableCellSelection | null;\n};\n\n/** Commands are delegated to the application; the table never records app data. */\nexport type DataTableGridCommands = {\n undo?: (context: DataTableGridCommandContext) => void | Promise;\n redo?: (context: DataTableGridCommandContext) => void | Promise;\n};\n\nexport type DataTableAlign = \"start\" | \"center\" | \"end\";\nexport type DataTableColumnType = \"text\" | \"numeric\" | \"date\";\nexport type DataTableColumnFixed = \"left\" | \"right\";\nexport type DataTableContainerBreakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type DataTableDensity = \"compact\" | \"comfortable\" | \"spacious\";\nexport type DataTableCardSizing = \"fixed\" | \"content\" | \"fluid\";\nexport type DataTableCellOverflow =\n | \"truncate\"\n | \"clip\"\n | \"wrap\"\n | \"visible\";\nexport type DataTableColumnFilterType =\n | \"text\"\n | \"select\"\n | \"multi\"\n | \"faceted\"\n | \"boolean\"\n | \"numberRange\"\n | \"dateRange\";\nexport type DataTableColumnFilterOperator =\n | \"contains\"\n | \"equals\"\n | \"startsWith\"\n | \"endsWith\";\nexport type DataTableCsvExportScope =\n | \"filtered\"\n | \"page\"\n | \"selected\"\n | \"all\";\nexport type DataTableClipboardCopyScope =\n | DataTableCsvExportScope\n | \"cellSelection\";\nexport type DataTableClipboardCopyOptions = {\n includeHeaders?: boolean;\n columns?: Array;\n scope?: DataTableClipboardCopyScope;\n /** Defaults to tab-separated text. */\n delimiter?: \"\\t\" | \",\";\n escapeFormulaValues?: boolean;\n getCellValue?: (context: {\n row: TData;\n rowId: string;\n columnId: string;\n value: unknown;\n }) => unknown;\n /** Host-owned clipboard delivery for non-browser or permission-managed apps. */\n onCopy?: (context: {\n text: string;\n rows: Array;\n scope: DataTableClipboardCopyScope;\n }) => void | Promise;\n};\nexport type DataTableClipboardPasteContext = {\n text: string;\n values: Array>;\n table: TanStackTable;\n};\nexport type DataTableClipboardConfig = {\n copy?: boolean | DataTableClipboardCopyOptions;\n paste?: {\n enabled?: boolean;\n preventDefault?: boolean;\n onPaste: (\n context: DataTableClipboardPasteContext,\n ) => void | Promise;\n };\n};\nexport type DataTableActionErrorSource =\n | \"toolbarAction\"\n | \"selectionAction\"\n | \"rowAction\"\n | \"rowClick\"\n | \"edit\"\n | \"undo\"\n | \"redo\"\n | \"clipboardCopy\"\n | \"clipboardPaste\"\n | \"fileUpload\"\n | \"infiniteScroll\"\n | \"retry\";\n\nexport const DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS: Record<\n DataTableContainerBreakpoint,\n number\n> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};\n\nexport type DataTableRowLoadingState = {\n isLoading: boolean;\n skeleton?: React.ReactNode;\n};\n\nexport type DataTableLoadingState = {\n isLoading: boolean;\n loadingRowCount?: number;\n};\n\nexport type DataTableAutoPageSizeConfig = {\n minRows?: number;\n maxRows?: number;\n estimateRowHeight?: number;\n};\n\nexport type DataTableStateOverlayContext = {\n rows: Array;\n toolbarQueryValue: string;\n error: unknown;\n isRetrying: boolean;\n retry: (() => void | Promise) | undefined;\n};\n\nexport type DataTableStateOverlay = {\n empty?:\n | React.ReactNode\n | ((context: DataTableEmptyStateContext) => React.ReactNode);\n error?: unknown;\n isRetrying?: boolean;\n onRetry?: () => void | Promise;\n renderError?: (\n context: DataTableStateOverlayContext,\n ) => React.ReactNode;\n};\n\nexport type DataTableCellEditRenderProps = {\n cell: CellContext;\n row: TData;\n value: TValue | undefined;\n draftValue: unknown;\n setDraftValue: (value: unknown) => void;\n error?: string;\n isDirty: boolean;\n isPending: boolean;\n};\n\nexport type DataTableColumnFilterOption = {\n label: string;\n value: string;\n /** Number of matching records. Omit when the count is not known. */\n count?: number;\n disabled?: boolean;\n};\n\nexport type DataTableFacetedFilterOptions = {\n /**\n * Server-provided facet values. When supplied, these take precedence over\n * locally calculated unique values and their counts.\n */\n options?:\n | Array\n | ((context: { rows: Array }) => Array);\n /** Render a readable label for values discovered from the local row model. */\n getOptionLabel?: (value: TValue | undefined) => string;\n /** Enables an in-menu search input. Defaults to true. */\n searchable?: boolean;\n searchPlaceholder?: string;\n};\n\nexport type DataTableColumnFilterRangeValue = {\n from?: TValue;\n to?: TValue;\n};\n\nexport type DataTableColumnFilterConfig = {\n type: DataTableColumnFilterType;\n label?: string;\n placeholder?: string;\n options?:\n | Array\n | ((context: { rows: Array }) => Array);\n getOptionValue?: (value: TValue | undefined, row: TData) => string;\n /** Settings for `type: \"faceted\"`, including server-provided facet data. */\n faceting?: DataTableFacetedFilterOptions;\n operator?: DataTableColumnFilterOperator;\n trueLabel?: string;\n falseLabel?: string;\n min?: number | string;\n max?: number | string;\n step?: number;\n};\n\nexport type DataTableColumnMeta = {\n type?: DataTableColumnType;\n fixed?: DataTableColumnFixed;\n cardTitle?: boolean;\n hideOn?: DataTableContainerBreakpoint | Array;\n minWidth?: number;\n align?: DataTableAlign;\n overflow?:\n | DataTableCellOverflow\n | ((args: {\n row: TData;\n value: TValue | undefined;\n }) => DataTableCellOverflow | undefined);\n headerClassName?: string;\n headerStyle?: React.CSSProperties;\n cellClassName?:\n | string\n | ((args: { row: TData; value: TValue | undefined }) => string | undefined);\n responsiveClassName?: string;\n skeleton?: (context: CellContext) => React.ReactNode;\n filter?: DataTableColumnFilterConfig;\n parseEditValue?: (value: unknown, context: CellContext) => unknown;\n formatEditValue?: (\n value: unknown,\n context: CellContext,\n ) => string;\n renderEditCell?: (\n props: DataTableCellEditRenderProps,\n ) => React.ReactNode;\n};\n\nexport type DataTableColumnDef = ColumnDef<\n TData,\n TValue\n> & {\n meta?: DataTableColumnMeta;\n columns?: Array>;\n};\n\nexport type DataTableColumnGroupDef = DataTableColumnDef<\n TData,\n unknown\n> & {\n id: string;\n columns: Array>;\n /**\n * A concise explanation of the columns in this group. It is exposed as an\n * accessible description and native tooltip on the shared header.\n */\n description?: string;\n /**\n * Allows leaves to cross this group's boundary during column reordering.\n * Groups are locked by default so a shared heading remains intact.\n */\n freeReordering?: boolean;\n /** Additional class name for this shared group header. */\n headerClassName?: string;\n /** Additional inline styles for this shared group header. */\n headerStyle?: React.CSSProperties;\n /** Height for this shared group header, overriding `columnGroupHeaderHeight`. */\n headerHeight?: React.CSSProperties[\"height\"];\n};\n\nexport type DataTableToolbarAction = {\n key: string;\n label: string;\n icon?: React.ComponentType<{ className?: string }>;\n iconOnly?: boolean;\n placement?: \"primary\" | \"trailing\";\n onClick: (context: {\n rows: Array;\n openFileDialog?: () => void;\n }) => void | Promise;\n variant?: \"default\" | \"secondary\" | \"outline\" | \"ghost\" | \"destructive\";\n disabled?: boolean;\n};\n\nexport type DataTableSelectionActionContext = {\n /** Selected row objects that are present in the currently loaded data. */\n rows: Array;\n /** Every selected row id, including ids retained across server pages. */\n rowIds: Array;\n};\n\nexport type DataTableSelectionAction = {\n key: string;\n label: string;\n icon?: React.ComponentType<{ className?: string }>;\n iconOnly?: boolean;\n onClick: (context: DataTableSelectionActionContext) => void | Promise;\n variant?: \"default\" | \"secondary\" | \"outline\" | \"ghost\" | \"destructive\";\n disabled?:\n | boolean\n | ((\n rows: Array,\n context: DataTableSelectionActionContext,\n ) => boolean);\n};\n\nexport type DataTableRowAction = {\n key: string;\n label: string | ((row: TData) => string);\n icon?: React.ComponentType<{ className?: string }>;\n onClick: (row: TData) => void | Promise;\n variant?: \"default\" | \"secondary\" | \"destructive\";\n hidden?: (row: TData) => boolean;\n disabled?: (row: TData) => boolean;\n};\n\nexport type DataTableColumnVisibilityOption = {\n id: string;\n label: string;\n visible: boolean;\n canHide: boolean;\n pinned?: false | DataTableColumnFixed;\n};\n\nexport type DataTableToolbarVisibility = {\n title?: boolean;\n search?: boolean;\n actions?: boolean;\n trailingActions?: boolean;\n options?: boolean;\n viewToggle?: boolean;\n customToolbar?: boolean;\n};\n\n/** Optional toolbar controls for working with the current table layout and views. */\nexport type DataTableToolbarDataOperations = {\n /** Search, bulk show/hide, pin, and keyboard-accessible column move controls. */\n columnChooser?: boolean;\n /** Create, apply, rename, and delete saved views when `savedViews` is configured. */\n savedViews?: boolean;\n /** Adds a reset-layout action using the table's initial layout. */\n resetLayout?: boolean;\n};\n\nexport type DataTableCardRendererProps = {\n row: TData;\n rowId: string;\n depth: number;\n canExpandSubRows: boolean;\n isSubRowsExpanded: boolean;\n toggleSubRowsExpanded: () => void;\n isSelected: boolean;\n onSelectedChange: (nextValue: boolean) => void;\n actions: Array>;\n isEditing: boolean;\n startEditing: () => void;\n cancelEditing: () => void;\n};\n\nexport type DataTableEditableRowsConfig = {\n canEditRow?: (row: TData) => boolean;\n getInitialValues?: (row: TData) => Record;\n validateRow?: (\n row: TData,\n draftValues: Record,\n ) =>\n | void\n | string\n | Record\n | Promise>;\n /** Apply an optimistic host update and optionally return a rollback callback. */\n onOptimisticUpdate?: (\n row: TData,\n draftValues: Record,\n ) => void | (() => void);\n onSaveRow: (\n row: TData,\n draftValues: Record,\n ) => void | Promise;\n onSaveSuccess?: (\n row: TData,\n draftValues: Record,\n ) => void;\n onSaveError?: (\n error: unknown,\n row: TData,\n draftValues: Record,\n ) => void;\n /** Defaults to true for inputs owned by the table. */\n commitOnEnter?: boolean;\n /** Defaults to true for inputs owned by the table. */\n cancelOnEscape?: boolean;\n};\n\nexport type DataTableInfiniteScroll = {\n enabled: boolean;\n hasMore: boolean;\n isLoadingMore?: boolean;\n onLoadMore: () => void | Promise;\n};\n\nexport type DataTableHiddenRowsConfig = {\n getIsHidden: (row: TData) => boolean;\n label?: string;\n};\n\nexport type DataTableEmptyStateContext = {\n rows: Array;\n toolbarQueryValue: string;\n};\n\nexport type DataTableDragAndDropConfig = {\n isDragging?: boolean;\n onDragEnter?: React.DragEventHandler;\n onDragOver?: React.DragEventHandler;\n onDragLeave?: React.DragEventHandler;\n onDrop?: React.DragEventHandler;\n getRowDraggable?: (row: TData) => boolean;\n onRowDragStart?: (context: {\n row: TData;\n rowId: string;\n event: React.DragEvent;\n }) => void;\n onRowDragEnd?: (context: {\n row: TData;\n rowId: string;\n event: React.DragEvent;\n }) => void;\n};\n\nexport type DataTableFileUploadConfig = {\n accept?: string;\n disabled?: boolean;\n multiple?: boolean;\n onFilesSelected: (files: FileList | Array) => void | Promise;\n};\n\nexport type DataTableVirtualizationConfig = {\n enabled?: boolean;\n estimateRowHeight?: number;\n fallbackRowCount?: number;\n overscan?: number;\n card?: DataTableCardVirtualizationConfig;\n};\n\nexport type DataTableCardVirtualizationConfig = {\n enabled?: boolean;\n estimateCardHeight?: number;\n fallbackCardCount?: number;\n overscan?: number;\n lanes?: number | \"auto\";\n};\n\nexport type DataTableExpandedRowProps = {\n row: TData;\n rowId: string;\n tableRow: Row;\n};\n\n/** A separately controlled application detail panel rendered beneath a row. */\nexport type DataTableDetailPanel = {\n expanded?: ExpandedState;\n onExpandedChange?: (expanded: ExpandedState) => void;\n getRowCanExpand?: (row: TData) => boolean;\n render: (props: DataTableExpandedRowProps) => React.ReactNode;\n};\n\nexport type DataTableCsvExportOptions = {\n filename?: string;\n includeHeaders?: boolean;\n columns?: Array;\n scope?: DataTableCsvExportScope;\n escapeFormulaValues?: boolean;\n lineEnding?: \"\\n\" | \"\\r\\n\";\n getCellValue?: (context: {\n row: TData;\n rowId: string;\n columnId: string;\n value: unknown;\n }) => unknown;\n onExport?: (context: {\n csv: string;\n filename: string;\n rows: Array;\n scope: DataTableCsvExportScope;\n }) => void | Promise;\n};\n\nexport type DataTableActionErrorContext = {\n source: DataTableActionErrorSource;\n error: unknown;\n actionKey?: string;\n row?: TData;\n};\n\nexport type DataTableColumnPrefs = {\n visibility?: VisibilityState;\n sizing?: Record;\n order?: ColumnOrderState;\n pinning?: ColumnPinningState;\n rowPinning?: RowPinningState;\n density?: DataTableDensity;\n};\n\nexport type DataTablePersistenceSlice = keyof DataTableColumnPrefs;\n\nexport type DataTablePersistenceStorage = Pick<\n Storage,\n \"getItem\" | \"setItem\" | \"removeItem\"\n>;\n\nexport type DataTablePersistenceOperation =\n | \"read\"\n | \"write\"\n | \"remove\"\n | \"serialize\"\n | \"deserialize\"\n | \"migrate\";\n\nexport type DataTablePersistencePayload = {\n version: string | number;\n state: DataTableColumnPrefs;\n};\n\nexport type DataTablePersistenceConfig = {\n key: string;\n version?: string | number;\n slices?: Array;\n storage?: DataTablePersistenceStorage;\n serialize?: (payload: DataTablePersistencePayload) => string;\n deserialize?: (value: string) => unknown;\n migrate?: (\n payload: { version: unknown; state: unknown },\n targetVersion: string | number,\n ) => DataTableColumnPrefs | undefined;\n debounceMs?: number;\n onError?: (context: {\n error: unknown;\n operation: DataTablePersistenceOperation;\n }) => void;\n};\n\nexport type DataTableState = {\n sorting: SortingState;\n pagination: PaginationState;\n rowSelection: Record;\n columnVisibility: VisibilityState;\n columnFilters: ColumnFiltersState;\n expanded: ExpandedState;\n columnOrder: ColumnOrderState;\n columnPinning: ColumnPinningState;\n rowPinning: RowPinningState;\n columnSizing: ColumnSizingState;\n /** Present in snapshots produced by 4.4+; optional for 4.x object-literal compatibility. */\n grouping?: GroupingState;\n density: DataTableDensity;\n viewMode: DataTableViewMode;\n showHiddenRows: boolean;\n globalFilter: string;\n};\n\nexport type DataTableInitialState = Partial;\n\nexport type DataTableSavedViewSlice = keyof DataTableState;\n\nexport type DataTableSavedView = {\n id: string;\n name: string;\n createdAt: string;\n updatedAt: string;\n state: Partial;\n};\n\nexport type DataTableSavedViewsPayload = {\n version: string | number;\n views: Array;\n};\n\nexport type DataTableSavedViewsChangeOperation =\n | \"create\"\n | \"rename\"\n | \"delete\"\n | \"clear\";\n\nexport type DataTableSavedViewsConfig = {\n key: string;\n version?: string | number;\n slices?: Array;\n storage?: DataTablePersistenceStorage;\n serialize?: (payload: DataTableSavedViewsPayload) => string;\n deserialize?: (value: string) => unknown;\n migrate?: (\n payload: { version: unknown; views: unknown },\n targetVersion: string | number,\n ) => Array | undefined;\n onChange?: (\n views: Array,\n operation: DataTableSavedViewsChangeOperation,\n ) => void;\n onApply?: (view: DataTableSavedView) => void;\n onError?: (context: {\n error: unknown;\n operation: DataTablePersistenceOperation;\n }) => void;\n};\n\nexport type DataTableResetOptions = {\n clearPersistence?: boolean;\n};\n\nexport type DataTableApi = {\n getTable: () => TanStackTable | null;\n getState: () => DataTableState;\n snapshot: () => DataTableState;\n restore: (state: Partial) => void;\n resetColumnLayout: (options?: DataTableResetOptions) => void;\n resetState: (options?: DataTableResetOptions) => void;\n clearPersistedState: () => boolean;\n getSavedViews: () => Array;\n createSavedView: (name: string) => DataTableSavedView | undefined;\n applySavedView: (id: string) => boolean;\n renameSavedView: (\n id: string,\n name: string,\n ) => DataTableSavedView | undefined;\n deleteSavedView: (id: string) => boolean;\n clearSavedViews: () => boolean;\n pinRow: (rowId: string, position?: \"top\" | \"bottom\") => boolean;\n unpinRow: (rowId: string) => boolean;\n focus: () => void;\n scrollToRow: (rowId: string) => boolean;\n scrollToColumn: (columnId: string) => boolean;\n exportCsv: (\n options?: boolean | DataTableCsvExportOptions,\n ) => Promise;\n copyToClipboard: (\n options?: boolean | DataTableClipboardCopyOptions,\n ) => Promise;\n getCellSelection: () => DataTableCellSelection | null;\n setCellSelection: (selection: DataTableCellSelection | null) => void;\n clearCellSelection: () => void;\n print: () => boolean;\n toggleFullscreen: () => Promise;\n};\n\nexport type DataTableLabels = {\n searchPlaceholder: string;\n searchTable: string;\n clearSearch: string;\n noRowsTitle: string;\n noRowsDescription: string;\n noMatchingRowsTitle: string;\n noMatchingRowsDescription: string;\n tableOptions: string;\n columns: string;\n filters: string;\n clearFilters: string;\n filterFrom?: string;\n filterTo?: string;\n filterTrue?: string;\n filterFalse?: string;\n selectedRows: (count: number) => string;\n showHiddenRows: (label: string) => string;\n recordsPerPage: string;\n totalRecords: (count: number) => string;\n pageStatus: (pageIndex: number, pageCount: number) => string;\n pageStatusUnknown?: (pageIndex: number) => string;\n pagination?: string;\n morePages?: string;\n firstPage: string;\n previousPage: string;\n nextPage: string;\n lastPage: string;\n selectAllVisibleRows?: string;\n selectAllFilteredRows?: string;\n selectRow?: string;\n selectCardRow?: (rowId: string) => string;\n switchToTableView?: string;\n switchToCardView?: string;\n tableView?: string;\n cardView?: string;\n allFilterOptions?: string;\n actions: string;\n rowActions: string;\n editRow: string;\n saveEdit: string;\n cancelEdit: string;\n expandRow: string;\n collapseRow: string;\n expandRowDetails?: string;\n collapseRowDetails?: string;\n exportCsv: string;\n print?: string;\n enterFullscreen?: string;\n exitFullscreen?: string;\n errorTitle?: string;\n errorDescription?: string;\n retry?: string;\n density: string;\n compactDensity: string;\n comfortableDensity: string;\n spaciousDensity: string;\n pinLeft: string;\n pinRight: string;\n unpin: string;\n pinRowToTop: string;\n pinRowToBottom: string;\n unpinRow: string;\n resizeColumn: (columnLabel: string) => string;\n grouping?: string;\n groupBy?: (columnLabel: string) => string;\n ungroup?: (columnLabel: string) => string;\n removeGrouping?: (columnLabel: string) => string;\n moveGroupingEarlier?: (columnLabel: string) => string;\n moveGroupingLater?: (columnLabel: string) => string;\n facetSearch?: (columnLabel: string) => string;\n searchColumns?: string;\n showAllColumns?: string;\n hideAllColumns?: string;\n moveColumnEarlier?: (columnLabel: string) => string;\n moveColumnLater?: (columnLabel: string) => string;\n resetColumnLayout?: string;\n savedViews?: string;\n createSavedView?: string;\n savedViewName?: string;\n applySavedView?: (name: string) => string;\n renameSavedView?: (name: string) => string;\n deleteSavedView?: (name: string) => string;\n saveSavedView?: string;\n};\n\nexport type DataTableSummaryRow = {\n key: string;\n label?: React.ReactNode;\n cells: Record<\n string,\n React.ReactNode | ((context: { rows: Array; columnId: string }) => React.ReactNode)\n >;\n};\n\nexport type DataTableRowClassNameContext = {\n row: TData;\n rowId: string;\n rowIndex: number;\n isEditing: boolean;\n isExpanded: boolean;\n isLoading: boolean;\n isSelected: boolean;\n pinnedPosition: false | \"top\" | \"bottom\";\n};\n\nexport type DataTableProps = {\n columns: Array>;\n data: Array;\n getRowId: (row: TData, index: number) => string;\n children?: React.ReactNode;\n title?: string;\n description?: string;\n toolbarQueryValue?: string;\n onToolbarQueryValueChange?: (value: string) => void;\n toolbarQueryPlaceholder?: string;\n toolbarQueryDebounceMs?: number;\n manualFiltering?: boolean;\n enableToolbarQueryFiltering?: boolean;\n globalFilterFn?: FilterFnOption;\n columnFilters?: ColumnFiltersState;\n onColumnFiltersChange?: (filters: ColumnFiltersState) => void;\n enableColumnFilters?: boolean;\n customToolbar?: React.ReactNode;\n compactToolbar?: React.ReactNode;\n rowsPerPageOptions?: Array;\n totalRowCount?: number;\n hasNextPage?: boolean;\n sorting?: SortingState;\n onSortingChange?: (sorting: SortingState) => void;\n manualSorting?: boolean;\n grouping?: GroupingState;\n onGroupingChange?: (grouping: GroupingState) => void;\n /** Use rows already grouped by the server instead of TanStack's grouping model. */\n manualGrouping?: boolean;\n /** Show group/ungroup controls in the table options menu and grouping bar. */\n enableGrouping?: boolean;\n /** Controls whether grouped columns are reordered, removed, or left in place. */\n groupedColumnMode?: false | \"reorder\" | \"remove\";\n /** Named aggregation functions available to column `aggregationFn` definitions. */\n aggregationFns?: Record>;\n pageIndex?: number;\n pageSize?: number;\n /** Sizes an opt-in page from the measurable table scroll viewport. */\n autoPageSize?: boolean | DataTableAutoPageSizeConfig;\n onPageIndexChange?: (pageIndex: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n pageCount?: number;\n manualPagination?: boolean;\n rowSelection?: Record;\n onRowSelectionChange?: (rowSelection: Record) => void;\n enableRowSelection?: boolean;\n /** Allows multiple selected rows globally or per row. Defaults to true. */\n enableMultiRowSelection?: boolean | ((row: TData) => boolean);\n /** Cascades parent selection to sub-rows globally or per row. Defaults to true. */\n enableSubRowSelection?: boolean | ((row: TData) => boolean);\n /** Prevents individual rows from being selected. */\n getRowCanSelect?: (row: TData) => boolean;\n /** Select-all affects the current page or all loaded filtered rows. */\n rowSelectionSelectAllScope?: \"page\" | \"filtered\";\n expanded?: ExpandedState;\n onExpandedChange?: (expanded: ExpandedState) => void;\n /** Resolve nested records for tree expansion. */\n getSubRows?: (row: TData, index: number) => Array | undefined;\n /** Keep expansion state controlled by the host; useful for server-loaded children. */\n manualExpanding?: boolean;\n /** Keep child rows with their parent when paginating. Defaults to TanStack's behavior. */\n paginateExpandedRows?: boolean;\n /** Include parents when a descendant matches a filter. */\n filterFromLeafRows?: boolean;\n /** Limit descendant traversal while filtering. */\n maxLeafRowFilterDepth?: number;\n /** New, independently controlled detail-panel contract. */\n detailPanel?: DataTableDetailPanel;\n getRowCanExpand?: (row: TData) => boolean;\n /** @deprecated Use `detailPanel={{ render }}`. Kept as a detail-panel bridge. */\n renderExpandedRow?: (\n props: DataTableExpandedRowProps,\n ) => React.ReactNode;\n columnOrder?: ColumnOrderState;\n onColumnOrderChange?: (columnOrder: ColumnOrderState) => void;\n enableColumnReordering?: boolean;\n /** Default height for shared column-group header cells. */\n columnGroupHeaderHeight?: React.CSSProperties[\"height\"];\n columnPinning?: ColumnPinningState;\n onColumnPinningChange?: (columnPinning: ColumnPinningState) => void;\n enableColumnPinning?: boolean;\n rowPinning?: RowPinningState;\n onRowPinningChange?: (rowPinning: RowPinningState) => void;\n /** Enables row actions that pin a row to the top or bottom of the table. */\n enableRowPinning?: boolean | ((row: TData) => boolean);\n /** Keep pinned rows visible when filtering or paginating them out. */\n keepPinnedRows?: boolean;\n toolbarActions?: Array>;\n selectionActions?: Array>;\n rowActions?: Array>;\n csvExport?: boolean | DataTableCsvExportOptions;\n /** Opt-in TSV/CSV copy and application-owned paste handling. */\n clipboard?: DataTableClipboardConfig;\n /** Enables pointer and Shift+keyboard rectangular cell selection in grid mode. */\n enableCellSelection?: boolean;\n /** Controlled cell/range selection. Supplying a value also enables it in grid mode. */\n cellSelection?: DataTableCellSelection | null;\n /** Initial cell/range selection when uncontrolled. */\n defaultCellSelection?: DataTableCellSelection | null;\n onCellSelectionChange?: (selection: DataTableCellSelection | null) => void;\n /** Host-owned undo/redo commands invoked by Ctrl/Cmd+Z and Ctrl/Cmd+Shift+Z. */\n gridCommands?: DataTableGridCommands;\n density?: DataTableDensity;\n onDensityChange?: (density: DataTableDensity) => void;\n enableDensityToggle?: boolean;\n columnPrefsKey?: string;\n persistence?: DataTablePersistenceConfig;\n savedViews?: DataTableSavedViewsConfig;\n initialState?: DataTableInitialState;\n state?: Partial;\n onStateChange?: (updater: Updater) => void;\n apiRef?: React.Ref>;\n labels?: Partial;\n summaryRows?: Array>;\n cardRenderer?: (props: DataTableCardRendererProps) => React.ReactNode;\n cardSizing?: DataTableCardSizing;\n cardGridClassName?: string;\n cardClassName?: string;\n viewMode?: DataTableViewMode;\n onViewModeChange?: (viewMode: DataTableViewMode) => void;\n enableViewToggle?: boolean;\n enablePrint?: boolean;\n enableFullscreen?: boolean;\n emptyState?:\n | React.ReactNode\n | ((context: DataTableEmptyStateContext) => React.ReactNode);\n /** Explicit empty/error/retry rendering contract. */\n stateOverlay?: DataTableStateOverlay;\n isLoading?: boolean;\n loadingRowCount?: number;\n getRowLoadingState?: (\n row: TData,\n index: number,\n ) => boolean | DataTableRowLoadingState;\n hiddenRows?: DataTableHiddenRowsConfig;\n showHiddenRows?: boolean;\n onShowHiddenRowsChange?: (showHiddenRows: boolean) => void;\n infiniteScroll?: DataTableInfiniteScroll;\n editableRows?: DataTableEditableRowsConfig;\n columnVisibility?: VisibilityState;\n onColumnVisibilityChange?: (visibility: VisibilityState) => void;\n columnSizing?: ColumnSizingState;\n onColumnSizingChange?: (sizing: ColumnSizingState) => void;\n enableColumnResizing?: boolean;\n columnResizeMode?: \"onChange\" | \"onEnd\";\n layoutMode?: \"fill\" | \"fit\";\n stickyHeader?: boolean;\n showFooter?: boolean;\n showToolbar?: boolean;\n dir?: \"ltr\" | \"rtl\";\n flexGrow?: boolean;\n toolbarVisibility?: DataTableToolbarVisibility;\n /** Opts into enhanced layout and saved-view toolbar controls. */\n toolbarDataOperations?: boolean | DataTableToolbarDataOperations;\n className?: string;\n tableClassName?: string;\n tableContainerClassName?: string;\n stripedRows?: boolean;\n getRowClassName?: (\n row: TData,\n context: DataTableRowClassNameContext,\n ) => string | undefined;\n onRowClick?: (context: { row: TData; rowId: string }) => void | Promise;\n onActionError?: (context: DataTableActionErrorContext) => void;\n dragAndDrop?: DataTableDragAndDropConfig;\n fileUpload?: DataTableFileUploadConfig;\n virtualization?: boolean | DataTableVirtualizationConfig;\n /** Opt in to ARIA grid semantics and roving keyboard navigation. */\n accessibility?: DataTableAccessibilityOptions;\n /** Shorthand for `accessibility={{ mode: \"grid\" }}`. */\n interactiveGrid?: boolean | DataTableInteractiveGridOptions;\n};\n\nexport function isRowVisible(\n row: TData,\n hiddenRows: DataTableHiddenRowsConfig | undefined,\n showHiddenRows: boolean,\n) {\n if (!hiddenRows) {\n return true;\n }\n\n if (showHiddenRows) {\n return true;\n }\n\n return !hiddenRows.getIsHidden(row);\n}\n\nexport function resolveRowActionLabel(\n label: DataTableRowAction[\"label\"],\n row: TData,\n) {\n return typeof label === \"function\" ? label(row) : label;\n}\n\nexport function canUseRowAction(\n action: DataTableRowAction,\n row: TData,\n) {\n return !action.hidden?.(row);\n}\n\nexport function canEditRow(\n editableRows: DataTableEditableRowsConfig | undefined,\n row: TData,\n) {\n return editableRows?.canEditRow\n ? editableRows.canEditRow(row)\n : Boolean(editableRows);\n}\n\nexport function alignClassName(align: DataTableAlign | undefined) {\n switch (align) {\n case \"center\":\n return \"text-center\";\n case \"end\":\n return \"text-right\";\n default:\n return \"text-left\";\n }\n}\n\nexport function resolveColumnAlign(\n align: DataTableAlign | undefined,\n type: DataTableColumnType | undefined,\n) {\n if (align) {\n return align;\n }\n\n if (type === \"numeric\") {\n return \"end\";\n }\n\n return \"start\";\n}\n\nexport function headerAlignClassName(\n context: HeaderContext,\n) {\n const meta = (context.column.columnDef as DataTableColumnDef)\n .meta;\n return alignClassName(resolveColumnAlign(meta?.align, meta?.type));\n}\n\nexport function cellAlignClassName(\n context: CellContext,\n) {\n const meta = (context.column.columnDef as DataTableColumnDef)\n .meta;\n return alignClassName(resolveColumnAlign(meta?.align, meta?.type));\n}\n\nexport function hideOnClassName(\n hideOn:\n | DataTableContainerBreakpoint\n | Array\n | undefined,\n) {\n if (!hideOn) {\n return undefined;\n }\n\n const values = Array.isArray(hideOn) ? hideOn : [hideOn];\n return values.map((value) => `dt-hide-on-${value}`).join(\" \");\n}\n\nexport function isHiddenAtContainerWidth(\n hideOn:\n | DataTableContainerBreakpoint\n | Array\n | undefined,\n containerWidth: number,\n) {\n if (!hideOn || containerWidth <= 0) {\n return false;\n }\n\n const values = Array.isArray(hideOn) ? hideOn : [hideOn];\n return values.some(\n (value) => containerWidth < DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS[value],\n );\n}\n\nexport function rowSelectionStateFromRows(rows: Array>) {\n return rows.map((row) => row.original);\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-QFLMV3CT.js b/dist/chunk-QFLMV3CT.js new file mode 100644 index 0000000..07323ad --- /dev/null +++ b/dist/chunk-QFLMV3CT.js @@ -0,0 +1,2 @@ +import {a as a$1}from'./chunk-K7SNDVV2.js';import {a}from'./chunk-YPKN2W27.js';import {j}from'./chunk-JNI3CH7M.js';function b(r){return j(r,{CardPanel:a$1,TablePanel:a})}export{b as a};//# sourceMappingURL=chunk-QFLMV3CT.js.map +//# sourceMappingURL=chunk-QFLMV3CT.js.map \ No newline at end of file diff --git a/dist/chunk-RJOEF7NA.js.map b/dist/chunk-QFLMV3CT.js.map similarity index 92% rename from dist/chunk-RJOEF7NA.js.map rename to dist/chunk-QFLMV3CT.js.map index 0f52448..db44c7c 100644 --- a/dist/chunk-RJOEF7NA.js.map +++ b/dist/chunk-QFLMV3CT.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/core/data-table/create-virtual-data-table.ts"],"names":["createVirtualDataTable","ui","createDataTableWithPanels","DataTableVirtualCardPanel","DataTableVirtualTablePanel"],"mappings":"mHAKO,SAASA,CAAAA,CAAuBC,CAAAA,CAAoB,CACzD,OAAOC,CAAAA,CAA0BD,CAAAA,CAAI,CACnC,SAAA,CAAWE,GAAAA,CACX,UAAA,CAAYC,CACd,CAAC,CACH","file":"chunk-RJOEF7NA.js","sourcesContent":["import type { DataTableUiKit } from \"../ui-kit\";\nimport { createDataTableWithPanels } from \"./create-data-table\";\nimport { DataTableVirtualCardPanel } from \"./data-table-virtual-card-panel\";\nimport { DataTableVirtualTablePanel } from \"./data-table-virtual-table-panel\";\n\nexport function createVirtualDataTable(ui: DataTableUiKit) {\n return createDataTableWithPanels(ui, {\n CardPanel: DataTableVirtualCardPanel,\n TablePanel: DataTableVirtualTablePanel,\n });\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../src/core/data-table/create-virtual-data-table.ts"],"names":["createVirtualDataTable","ui","createDataTableWithPanels","DataTableVirtualCardPanel","DataTableVirtualTablePanel"],"mappings":"mHAKO,SAASA,CAAAA,CAAuBC,CAAAA,CAAoB,CACzD,OAAOC,CAAAA,CAA0BD,CAAAA,CAAI,CACnC,SAAA,CAAWE,GAAAA,CACX,UAAA,CAAYC,CACd,CAAC,CACH","file":"chunk-QFLMV3CT.js","sourcesContent":["import type { DataTableUiKit } from \"../ui-kit\";\nimport { createDataTableWithPanels } from \"./create-data-table\";\nimport { DataTableVirtualCardPanel } from \"./data-table-virtual-card-panel\";\nimport { DataTableVirtualTablePanel } from \"./data-table-virtual-table-panel\";\n\nexport function createVirtualDataTable(ui: DataTableUiKit) {\n return createDataTableWithPanels(ui, {\n CardPanel: DataTableVirtualCardPanel,\n TablePanel: DataTableVirtualTablePanel,\n });\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-RJOEF7NA.js b/dist/chunk-RJOEF7NA.js deleted file mode 100644 index c55d183..0000000 --- a/dist/chunk-RJOEF7NA.js +++ /dev/null @@ -1,2 +0,0 @@ -import {a as a$1}from'./chunk-EAV5MZCW.js';import {a}from'./chunk-Y5JNRFE4.js';import {j}from'./chunk-3CYYXB7K.js';function b(r){return j(r,{CardPanel:a$1,TablePanel:a})}export{b as a};//# sourceMappingURL=chunk-RJOEF7NA.js.map -//# sourceMappingURL=chunk-RJOEF7NA.js.map \ No newline at end of file diff --git a/dist/chunk-S7PROCUM.js b/dist/chunk-S4J2MG4T.js similarity index 69% rename from dist/chunk-S7PROCUM.js rename to dist/chunk-S4J2MG4T.js index 1118a99..5c46825 100644 --- a/dist/chunk-S7PROCUM.js +++ b/dist/chunk-S4J2MG4T.js @@ -1,2 +1,2 @@ -import {X as X$1,a as a$1,c,d,f,h,i,j as j$1,k,l,m,n,p,o,q as q$1,s,t,u,z,w,B,G,H,I,J as J$1,L,b,N,O as O$1,P,Q as Q$1,R,T,S,U,V as V$1,W as W$1}from'./chunk-2V6RVOWX.js';import {a}from'./chunk-ZF4EP4WP.js';import'react';import {jsx}from'react/jsx-runtime';function e(N,z){return function({className:F,...K}){return jsx(N,{className:a(z,F),...K})}}var $=e(a$1,"rounded-md border border-cyan-400/45 bg-black/75 font-mono text-[0.8rem] tracking-[0.045em] text-cyan-50 uppercase shadow-[0_0_0_1px_rgba(34,211,238,0.12),0_0_18px_rgba(34,211,238,0.1)] data-[variant=default]:bg-cyan-300 data-[variant=default]:text-slate-950 data-[variant=outline]:bg-black/55 data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:hover:bg-cyan-400/10 data-[variant=secondary]:bg-cyan-400/12 data-[variant=destructive]:border-rose-400/50 data-[variant=destructive]:bg-rose-500/15 data-[variant=destructive]:text-rose-200"),O=e(c,"rounded-md border border-cyan-400/35 bg-[linear-gradient(180deg,rgba(0,229,255,0.055),transparent_58%),rgba(1,8,11,0.9)] font-mono text-cyan-50 shadow-[inset_0_1px_0_rgba(125,211,252,0.08),0_0_0_1px_rgba(34,211,238,0.12),0_0_28px_rgba(34,211,238,0.08)] ring-0"),V=e(d,"px-5 pt-5 pb-3"),W=e(f,"px-5 pb-5"),q=e(h,"rounded-sm border-cyan-400/55 bg-black/65 ring-cyan-300/70 data-checked:bg-cyan-300 data-checked:text-slate-950 data-checked:ring-cyan-300"),J=e(i,"rounded-md border border-cyan-400/35 bg-black/92 font-mono text-cyan-50 shadow-[0_0_26px_rgba(34,211,238,0.16)] ring-0 before:hidden **:data-[slot$=-item]:focus:bg-cyan-400/12 **:data-[slot$=-item]:data-highlighted:bg-cyan-400/12 **:data-[slot$=-separator]:bg-cyan-400/18 **:data-[slot$=-trigger]:focus:bg-cyan-400/12"),Q=e(j$1,"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50 data-[variant=destructive]:text-rose-200 data-[variant=destructive]:focus:bg-rose-500/15"),X=e(k,"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50"),Y=e(l,"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50"),Z=e(m,"font-mono text-[0.68rem] tracking-[0.16em] text-cyan-200/70 uppercase"),j=e(n,"bg-cyan-400/20"),ee=e(p,"rounded-md border border-cyan-400/35 bg-black/92 font-mono text-cyan-50 shadow-[0_0_26px_rgba(34,211,238,0.16)] ring-0 before:hidden"),te=e(o,"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50 data-open:bg-cyan-400/12 data-open:text-cyan-50"),ae=e(q$1,"rounded-md border-cyan-400/35 bg-black/80 font-mono text-cyan-50"),re=e(s,"[&[data-variant=icon]]:rounded-xl [&[data-variant=icon]]:bg-cyan-400/12 [&[data-variant=icon]]:text-cyan-200"),ne=e(t,"text-cyan-50"),oe=e(u,"text-cyan-100/70"),de=e(z,"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 placeholder:text-cyan-100/45 focus-visible:ring-cyan-300/70"),ie=e(w,"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 shadow-[0_0_18px_rgba(34,211,238,0.06)]"),ce=e(B,"rounded-md border-cyan-400/35 bg-black/55 font-mono text-cyan-50 hover:bg-cyan-400/12 data-[active=true]:bg-cyan-300 data-[active=true]:text-slate-950"),be=e(G,"rounded-md border border-cyan-400/35 bg-black/72 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_26px_rgba(34,211,238,0.08)]"),se=e(H,"[&>[data-slot=scroll-area-thumb]]:bg-cyan-300/65"),le=e(I,"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 focus-visible:ring-cyan-300/70"),pe=e(J$1,"rounded-md border border-cyan-400/35 bg-black/95 font-mono text-cyan-50 ring-0 shadow-[0_0_26px_rgba(34,211,238,0.16)] before:hidden"),me=e(L,"rounded-sm focus:bg-cyan-400/12 focus:text-cyan-50"),ge=e(b,"bg-cyan-400/20"),ye=e(N,"rounded-md bg-cyan-400/12"),ue=e(O$1,"border-separate border-spacing-0 border border-cyan-400/45 bg-black/72 font-mono text-[0.84rem] text-cyan-50 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_24px_rgba(34,211,238,0.08)]"),xe=e(P,"[&_tr]:border-cyan-400/45"),ve=e(Q$1,"[&_tr:last-child]:border-b"),_e=e(R,"border-cyan-400/40 bg-cyan-400/10 font-mono"),Te=e(T,"h-12 border-b border-cyan-400/45 bg-cyan-950/20 px-3 font-mono text-[0.68rem] font-bold tracking-[0.18em] text-cyan-300 uppercase"),Ce=e(S,"border-cyan-400/25 hover:bg-cyan-400/10 data-[state=selected]:bg-cyan-400/15"),fe=e(U,"border-b border-cyan-400/16 px-3 py-3 font-mono text-cyan-50"),ke=e(V$1,"font-mono text-cyan-100/65"),we=e(W$1,"rounded-md bg-black text-cyan-50 ring-1 ring-cyan-400/35 shadow-[0_0_22px_rgba(34,211,238,0.18)] [&>svg]:bg-black [&>svg]:fill-black"),Me={...X$1,rootClassName:"dtp-thegridcn",classNames:{card:"hover:bg-cyan-400/10 data-[state=selected]:bg-cyan-400/15",cardGrid:"bg-transparent",cardItem:"min-w-0",cardOverlay:"from-black/95 via-black/75 to-transparent",cardScrollArea:"bg-transparent",cardSelected:"bg-cyan-400/15 ring-cyan-300/70",cardUnselected:"border-cyan-400/35",cardViewport:"bg-transparent",cellBorder:"border-cyan-400/16",dragActive:"rounded-md border-dashed border-cyan-300",emptyState:"border-cyan-400/35 bg-black/80",footer:"border-cyan-400/40 bg-black/80 text-cyan-50",headerSortIcon:"text-cyan-100/65",mutedText:"text-cyan-100/70",paginationSelectTrigger:"border-cyan-400/45 bg-black/70 text-cyan-50",paginationTotal:"text-cyan-100/70",pinnedColumn:"border-cyan-400/25",pinnedUtilityColumn:"bg-black/80",resizeHandle:"after:bg-cyan-400/20 hover:after:bg-cyan-300",resizeHandleActive:"after:bg-cyan-300",row:"hover:bg-cyan-400/10 data-[state=selected]:!bg-cyan-400/15",rowSelected:"!bg-cyan-400/15",tableContainer:"border-cyan-400/35 bg-black/72 text-cyan-50 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_26px_rgba(34,211,238,0.08)]",tableScrollArea:"bg-black/72",tableStickyHeader:"sticky top-0 z-30 bg-black/90 backdrop-blur [&_th]:border-cyan-400/45 [&_th]:bg-black/90",toolbarCompactIconButton:"size-7",toolbarIconButton:"text-cyan-100/70 hover:text-cyan-50",toolbarInputButton:"border-cyan-400/45 bg-black/70 text-cyan-50"},Button:$,Card:O,CardContent:W,CardHeader:V,Checkbox:q,DropdownMenuCheckboxItem:X,DropdownMenuContent:J,DropdownMenuItem:Q,DropdownMenuLabel:Z,DropdownMenuRadioItem:Y,DropdownMenuSeparator:j,DropdownMenuSubContent:ee,DropdownMenuSubTrigger:te,Empty:ae,EmptyDescription:oe,EmptyMedia:re,EmptyTitle:ne,Input:de,InputGroup:ie,PaginationLink:ce,ScrollArea:be,ScrollBar:se,SelectContent:pe,SelectItem:me,SelectTrigger:le,Separator:ge,Skeleton:ye,Table:ue,TableBody:ve,TableCaption:ke,TableCell:fe,TableFooter:_e,TableHead:Te,TableHeader:xe,TableRow:Ce,TooltipContent:we};export{Me as a};//# sourceMappingURL=chunk-S7PROCUM.js.map -//# sourceMappingURL=chunk-S7PROCUM.js.map \ No newline at end of file +import {X as X$1,a as a$1,c,d,f,h,i,j as j$1,k,l,m,n,p,o,q as q$1,s,t,u,z,w,B,G,H,I,J as J$1,L,b,N,O as O$1,P,Q as Q$1,R,T,S,U,V as V$1,W as W$1}from'./chunk-7FUCHMMB.js';import {a}from'./chunk-XTVBESM5.js';import'react';import {jsx}from'react/jsx-runtime';function e(N,z){return function({className:F,...K}){return jsx(N,{className:a(z,F),...K})}}var $=e(a$1,"rounded-md border border-cyan-400/45 bg-black/75 font-mono text-[0.8rem] tracking-[0.045em] text-cyan-50 uppercase shadow-[0_0_0_1px_rgba(34,211,238,0.12),0_0_18px_rgba(34,211,238,0.1)] data-[variant=default]:bg-cyan-300 data-[variant=default]:text-slate-950 data-[variant=outline]:bg-black/55 data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:hover:bg-cyan-400/10 data-[variant=secondary]:bg-cyan-400/12 data-[variant=destructive]:border-rose-400/50 data-[variant=destructive]:bg-rose-500/15 data-[variant=destructive]:text-rose-200"),O=e(c,"rounded-md border border-cyan-400/35 bg-[linear-gradient(180deg,rgba(0,229,255,0.055),transparent_58%),rgba(1,8,11,0.9)] font-mono text-cyan-50 shadow-[inset_0_1px_0_rgba(125,211,252,0.08),0_0_0_1px_rgba(34,211,238,0.12),0_0_28px_rgba(34,211,238,0.08)] ring-0"),V=e(d,"px-5 pt-5 pb-3"),W=e(f,"px-5 pb-5"),q=e(h,"rounded-sm border-cyan-400/55 bg-black/65 ring-cyan-300/70 data-checked:bg-cyan-300 data-checked:text-slate-950 data-checked:ring-cyan-300"),J=e(i,"rounded-md border border-cyan-400/35 bg-black/92 font-mono text-cyan-50 shadow-[0_0_26px_rgba(34,211,238,0.16)] ring-0 before:hidden **:data-[slot$=-item]:focus:bg-cyan-400/12 **:data-[slot$=-item]:data-highlighted:bg-cyan-400/12 **:data-[slot$=-separator]:bg-cyan-400/18 **:data-[slot$=-trigger]:focus:bg-cyan-400/12"),Q=e(j$1,"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50 data-[variant=destructive]:text-rose-200 data-[variant=destructive]:focus:bg-rose-500/15"),X=e(k,"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50"),Y=e(l,"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50"),Z=e(m,"font-mono text-[0.68rem] tracking-[0.16em] text-cyan-200/70 uppercase"),j=e(n,"bg-cyan-400/20"),ee=e(p,"rounded-md border border-cyan-400/35 bg-black/92 font-mono text-cyan-50 shadow-[0_0_26px_rgba(34,211,238,0.16)] ring-0 before:hidden"),te=e(o,"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50 data-open:bg-cyan-400/12 data-open:text-cyan-50"),ae=e(q$1,"rounded-md border-cyan-400/35 bg-black/80 font-mono text-cyan-50"),re=e(s,"[&[data-variant=icon]]:rounded-xl [&[data-variant=icon]]:bg-cyan-400/12 [&[data-variant=icon]]:text-cyan-200"),ne=e(t,"text-cyan-50"),oe=e(u,"text-cyan-100/70"),de=e(z,"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 placeholder:text-cyan-100/45 focus-visible:ring-cyan-300/70"),ie=e(w,"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 shadow-[0_0_18px_rgba(34,211,238,0.06)]"),ce=e(B,"rounded-md border-cyan-400/35 bg-black/55 font-mono text-cyan-50 hover:bg-cyan-400/12 data-[active=true]:bg-cyan-300 data-[active=true]:text-slate-950"),be=e(G,"rounded-md border border-cyan-400/35 bg-black/72 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_26px_rgba(34,211,238,0.08)]"),se=e(H,"[&>[data-slot=scroll-area-thumb]]:bg-cyan-300/65"),le=e(I,"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 focus-visible:ring-cyan-300/70"),pe=e(J$1,"rounded-md border border-cyan-400/35 bg-black/95 font-mono text-cyan-50 ring-0 shadow-[0_0_26px_rgba(34,211,238,0.16)] before:hidden"),ge=e(L,"rounded-sm focus:bg-cyan-400/12 focus:text-cyan-50"),me=e(b,"bg-cyan-400/20"),ye=e(N,"rounded-md bg-cyan-400/12"),ue=e(O$1,"border-separate border-spacing-0 border border-cyan-400/45 bg-black/72 font-mono text-[0.84rem] text-cyan-50 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_24px_rgba(34,211,238,0.08)]"),xe=e(P,"[&_tr]:border-cyan-400/45"),ve=e(Q$1,"[&_tr:last-child]:border-b"),_e=e(R,"border-cyan-400/40 bg-cyan-400/10 font-mono"),Te=e(T,"h-12 border-b border-cyan-400/45 bg-cyan-950/20 px-3 font-mono text-[0.68rem] font-bold tracking-[0.18em] text-cyan-300 uppercase"),Ce=e(S,"border-cyan-400/25 hover:bg-cyan-400/10 data-[state=selected]:bg-cyan-400/15"),fe=e(U,"border-b border-cyan-400/16 px-3 py-3 font-mono text-cyan-50"),ke=e(V$1,"font-mono text-cyan-100/65"),we=e(W$1,"rounded-md bg-black text-cyan-50 ring-1 ring-cyan-400/35 shadow-[0_0_22px_rgba(34,211,238,0.18)] [&>svg]:bg-black [&>svg]:fill-black"),Me={...X$1,rootClassName:"dtp-thegridcn",classNames:{card:"hover:bg-cyan-400/10 data-[state=selected]:bg-cyan-400/15",cardGrid:"bg-transparent",cardItem:"min-w-0",cardOverlay:"from-black/95 via-black/75 to-transparent",cardScrollArea:"bg-transparent",cardSelected:"bg-cyan-400/15 ring-cyan-300/70",cardUnselected:"border-cyan-400/35",cardViewport:"bg-transparent",cellBorder:"border-cyan-400/16",cellSelected:"!bg-cyan-400/15 ring-1 ring-inset ring-cyan-300/60",columnGroupHeader:"bg-cyan-400/10 text-cyan-200",dragActive:"rounded-md border-dashed border-cyan-300",emptyState:"border-cyan-400/35 bg-black/80",footer:"border-cyan-400/40 bg-black/80 text-cyan-50",headerSortIcon:"text-cyan-100/65",mutedText:"text-cyan-100/70",paginationSelectTrigger:"border-cyan-400/45 bg-black/70 text-cyan-50",paginationTotal:"text-cyan-100/70",pinnedColumn:"border-cyan-400/25",pinnedUtilityColumn:"bg-black/80",resizeHandle:"after:bg-cyan-400/20 hover:after:bg-cyan-300",resizeHandleActive:"after:bg-cyan-300",row:"hover:bg-cyan-400/10 data-[state=selected]:!bg-cyan-400/15",rowSelected:"!bg-cyan-400/15",tableContainer:"border-cyan-400/35 bg-black/72 text-cyan-50 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_26px_rgba(34,211,238,0.08)]",tableScrollArea:"bg-black/72",tableStickyHeader:"sticky top-0 z-30 bg-black/90 backdrop-blur [&_th]:border-cyan-400/45 [&_th]:bg-black/90",toolbarCompactIconButton:"size-7",toolbarIconButton:"text-cyan-100/70 hover:text-cyan-50",toolbarInputButton:"border-cyan-400/45 bg-black/70 text-cyan-50"},Button:$,Card:O,CardContent:W,CardHeader:V,Checkbox:q,DropdownMenuCheckboxItem:X,DropdownMenuContent:J,DropdownMenuItem:Q,DropdownMenuLabel:Z,DropdownMenuRadioItem:Y,DropdownMenuSeparator:j,DropdownMenuSubContent:ee,DropdownMenuSubTrigger:te,Empty:ae,EmptyDescription:oe,EmptyMedia:re,EmptyTitle:ne,Input:de,InputGroup:ie,PaginationLink:ce,ScrollArea:be,ScrollBar:se,SelectContent:pe,SelectItem:ge,SelectTrigger:le,Separator:me,Skeleton:ye,Table:ue,TableBody:ve,TableCaption:ke,TableCell:fe,TableFooter:_e,TableHead:Te,TableHeader:xe,TableRow:Ce,TooltipContent:we};export{Me as a};//# sourceMappingURL=chunk-S4J2MG4T.js.map +//# sourceMappingURL=chunk-S4J2MG4T.js.map \ No newline at end of file diff --git a/dist/chunk-S4J2MG4T.js.map b/dist/chunk-S4J2MG4T.js.map new file mode 100644 index 0000000..0700658 --- /dev/null +++ b/dist/chunk-S4J2MG4T.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/adapters/thegridcn/index.tsx"],"names":["withClassName","Component","defaultClassName","className","props","jsx","cn","GridButton","Button","GridCard","Card","GridCardHeader","CardHeader","GridCardContent","CardContent","GridCheckbox","Checkbox","GridDropdownMenuContent","DropdownMenuContent","GridDropdownMenuItem","DropdownMenuItem","GridDropdownMenuCheckboxItem","DropdownMenuCheckboxItem","GridDropdownMenuRadioItem","DropdownMenuRadioItem","GridDropdownMenuLabel","DropdownMenuLabel","GridDropdownMenuSeparator","DropdownMenuSeparator","GridDropdownMenuSubContent","DropdownMenuSubContent","GridDropdownMenuSubTrigger","DropdownMenuSubTrigger","GridEmpty","Empty","GridEmptyMedia","EmptyMedia","GridEmptyTitle","EmptyTitle","GridEmptyDescription","EmptyDescription","GridInput","Input","GridInputGroup","InputGroup","GridPaginationLink","PaginationLink","GridScrollArea","ScrollArea","GridScrollBar","ScrollBar","GridSelectTrigger","SelectTrigger","GridSelectContent","SelectContent","GridSelectItem","SelectItem","GridSeparator","Separator","GridSkeleton","Skeleton","GridTable","Table","GridTableHeader","TableHeader","GridTableBody","TableBody","GridTableFooter","TableFooter","GridTableHead","TableHead","GridTableRow","TableRow","GridTableCell","TableCell","GridTableCaption","TableCaption","GridTooltipContent","TooltipContent","theGridcnUiKit","primitiveUiKit"],"mappings":"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","file":"chunk-S4J2MG4T.js","sourcesContent":["import * as React from \"react\";\nimport type { DataTableUiKit } from \"../../core/ui-kit\";\nimport {\n Button as PrimitiveButton,\n Card as PrimitiveCard,\n CardContent as PrimitiveCardContent,\n CardHeader as PrimitiveCardHeader,\n Checkbox as PrimitiveCheckbox,\n DropdownMenuCheckboxItem as PrimitiveDropdownMenuCheckboxItem,\n DropdownMenuContent as PrimitiveDropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n DropdownMenuLabel as PrimitiveDropdownMenuLabel,\n DropdownMenuRadioItem as PrimitiveDropdownMenuRadioItem,\n DropdownMenuSeparator as PrimitiveDropdownMenuSeparator,\n DropdownMenuSubContent as PrimitiveDropdownMenuSubContent,\n DropdownMenuSubTrigger as PrimitiveDropdownMenuSubTrigger,\n Empty as PrimitiveEmpty,\n EmptyDescription as PrimitiveEmptyDescription,\n EmptyMedia as PrimitiveEmptyMedia,\n EmptyTitle as PrimitiveEmptyTitle,\n Input as PrimitiveInput,\n InputGroup as PrimitiveInputGroup,\n PaginationLink as PrimitivePaginationLink,\n ScrollArea as PrimitiveScrollArea,\n ScrollBar as PrimitiveScrollBar,\n SelectContent as PrimitiveSelectContent,\n SelectItem as PrimitiveSelectItem,\n SelectTrigger as PrimitiveSelectTrigger,\n Separator as PrimitiveSeparator,\n Skeleton as PrimitiveSkeleton,\n Table as PrimitiveTable,\n TableBody as PrimitiveTableBody,\n TableCaption as PrimitiveTableCaption,\n TableCell as PrimitiveTableCell,\n TableFooter as PrimitiveTableFooter,\n TableHead as PrimitiveTableHead,\n TableHeader as PrimitiveTableHeader,\n TableRow as PrimitiveTableRow,\n TooltipContent as PrimitiveTooltipContent,\n primitiveUiKit,\n} from \"../../core/primitive-ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nfunction withClassName(\n Component: React.ComponentType,\n defaultClassName: string,\n) {\n return function Wrapped({ className, ...props }: TProps) {\n return (\n \n );\n };\n}\n\nconst GridButton = withClassName(\n PrimitiveButton,\n \"rounded-md border border-cyan-400/45 bg-black/75 font-mono text-[0.8rem] tracking-[0.045em] text-cyan-50 uppercase shadow-[0_0_0_1px_rgba(34,211,238,0.12),0_0_18px_rgba(34,211,238,0.1)] data-[variant=default]:bg-cyan-300 data-[variant=default]:text-slate-950 data-[variant=outline]:bg-black/55 data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:hover:bg-cyan-400/10 data-[variant=secondary]:bg-cyan-400/12 data-[variant=destructive]:border-rose-400/50 data-[variant=destructive]:bg-rose-500/15 data-[variant=destructive]:text-rose-200\",\n);\nconst GridCard = withClassName(\n PrimitiveCard,\n \"rounded-md border border-cyan-400/35 bg-[linear-gradient(180deg,rgba(0,229,255,0.055),transparent_58%),rgba(1,8,11,0.9)] font-mono text-cyan-50 shadow-[inset_0_1px_0_rgba(125,211,252,0.08),0_0_0_1px_rgba(34,211,238,0.12),0_0_28px_rgba(34,211,238,0.08)] ring-0\",\n);\nconst GridCardHeader = withClassName(PrimitiveCardHeader, \"px-5 pt-5 pb-3\");\nconst GridCardContent = withClassName(PrimitiveCardContent, \"px-5 pb-5\");\nconst GridCheckbox = withClassName(\n PrimitiveCheckbox,\n \"rounded-sm border-cyan-400/55 bg-black/65 ring-cyan-300/70 data-checked:bg-cyan-300 data-checked:text-slate-950 data-checked:ring-cyan-300\",\n);\nconst GridDropdownMenuContent = withClassName(\n PrimitiveDropdownMenuContent,\n \"rounded-md border border-cyan-400/35 bg-black/92 font-mono text-cyan-50 shadow-[0_0_26px_rgba(34,211,238,0.16)] ring-0 before:hidden **:data-[slot$=-item]:focus:bg-cyan-400/12 **:data-[slot$=-item]:data-highlighted:bg-cyan-400/12 **:data-[slot$=-separator]:bg-cyan-400/18 **:data-[slot$=-trigger]:focus:bg-cyan-400/12\",\n);\nconst GridDropdownMenuItem = withClassName(\n PrimitiveDropdownMenuItem,\n \"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50 data-[variant=destructive]:text-rose-200 data-[variant=destructive]:focus:bg-rose-500/15\",\n);\nconst GridDropdownMenuCheckboxItem = withClassName(\n PrimitiveDropdownMenuCheckboxItem,\n \"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50\",\n);\nconst GridDropdownMenuRadioItem = withClassName(\n PrimitiveDropdownMenuRadioItem,\n \"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50\",\n);\nconst GridDropdownMenuLabel = withClassName(\n PrimitiveDropdownMenuLabel,\n \"font-mono text-[0.68rem] tracking-[0.16em] text-cyan-200/70 uppercase\",\n);\nconst GridDropdownMenuSeparator = withClassName(\n PrimitiveDropdownMenuSeparator,\n \"bg-cyan-400/20\",\n);\nconst GridDropdownMenuSubContent = withClassName(\n PrimitiveDropdownMenuSubContent,\n \"rounded-md border border-cyan-400/35 bg-black/92 font-mono text-cyan-50 shadow-[0_0_26px_rgba(34,211,238,0.16)] ring-0 before:hidden\",\n);\nconst GridDropdownMenuSubTrigger = withClassName(\n PrimitiveDropdownMenuSubTrigger,\n \"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50 data-open:bg-cyan-400/12 data-open:text-cyan-50\",\n);\nconst GridEmpty = withClassName(\n PrimitiveEmpty,\n \"rounded-md border-cyan-400/35 bg-black/80 font-mono text-cyan-50\",\n);\nconst GridEmptyMedia = withClassName(\n PrimitiveEmptyMedia,\n \"[&[data-variant=icon]]:rounded-xl [&[data-variant=icon]]:bg-cyan-400/12 [&[data-variant=icon]]:text-cyan-200\",\n);\nconst GridEmptyTitle = withClassName(PrimitiveEmptyTitle, \"text-cyan-50\");\nconst GridEmptyDescription = withClassName(\n PrimitiveEmptyDescription,\n \"text-cyan-100/70\",\n);\nconst GridInput = withClassName(\n PrimitiveInput,\n \"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 placeholder:text-cyan-100/45 focus-visible:ring-cyan-300/70\",\n);\nconst GridInputGroup = withClassName(\n PrimitiveInputGroup,\n \"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 shadow-[0_0_18px_rgba(34,211,238,0.06)]\",\n);\nconst GridPaginationLink = withClassName(\n PrimitivePaginationLink,\n \"rounded-md border-cyan-400/35 bg-black/55 font-mono text-cyan-50 hover:bg-cyan-400/12 data-[active=true]:bg-cyan-300 data-[active=true]:text-slate-950\",\n);\nconst GridScrollArea = withClassName(\n PrimitiveScrollArea,\n \"rounded-md border border-cyan-400/35 bg-black/72 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_26px_rgba(34,211,238,0.08)]\",\n);\nconst GridScrollBar = withClassName(\n PrimitiveScrollBar,\n \"[&>[data-slot=scroll-area-thumb]]:bg-cyan-300/65\",\n);\nconst GridSelectTrigger = withClassName(\n PrimitiveSelectTrigger,\n \"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 focus-visible:ring-cyan-300/70\",\n);\nconst GridSelectContent = withClassName(\n PrimitiveSelectContent,\n \"rounded-md border border-cyan-400/35 bg-black/95 font-mono text-cyan-50 ring-0 shadow-[0_0_26px_rgba(34,211,238,0.16)] before:hidden\",\n);\nconst GridSelectItem = withClassName(\n PrimitiveSelectItem,\n \"rounded-sm focus:bg-cyan-400/12 focus:text-cyan-50\",\n);\nconst GridSeparator = withClassName(PrimitiveSeparator, \"bg-cyan-400/20\");\nconst GridSkeleton = withClassName(\n PrimitiveSkeleton,\n \"rounded-md bg-cyan-400/12\",\n);\nconst GridTable = withClassName(\n PrimitiveTable,\n \"border-separate border-spacing-0 border border-cyan-400/45 bg-black/72 font-mono text-[0.84rem] text-cyan-50 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_24px_rgba(34,211,238,0.08)]\",\n);\nconst GridTableHeader = withClassName(\n PrimitiveTableHeader,\n \"[&_tr]:border-cyan-400/45\",\n);\nconst GridTableBody = withClassName(\n PrimitiveTableBody,\n \"[&_tr:last-child]:border-b\",\n);\nconst GridTableFooter = withClassName(\n PrimitiveTableFooter,\n \"border-cyan-400/40 bg-cyan-400/10 font-mono\",\n);\nconst GridTableHead = withClassName(\n PrimitiveTableHead,\n \"h-12 border-b border-cyan-400/45 bg-cyan-950/20 px-3 font-mono text-[0.68rem] font-bold tracking-[0.18em] text-cyan-300 uppercase\",\n);\nconst GridTableRow = withClassName(\n PrimitiveTableRow,\n \"border-cyan-400/25 hover:bg-cyan-400/10 data-[state=selected]:bg-cyan-400/15\",\n);\nconst GridTableCell = withClassName(\n PrimitiveTableCell,\n \"border-b border-cyan-400/16 px-3 py-3 font-mono text-cyan-50\",\n);\nconst GridTableCaption = withClassName(\n PrimitiveTableCaption,\n \"font-mono text-cyan-100/65\",\n);\nconst GridTooltipContent = withClassName(\n PrimitiveTooltipContent,\n \"rounded-md bg-black text-cyan-50 ring-1 ring-cyan-400/35 shadow-[0_0_22px_rgba(34,211,238,0.18)] [&>svg]:bg-black [&>svg]:fill-black\",\n);\n\nexport const theGridcnUiKit: DataTableUiKit = {\n ...primitiveUiKit,\n rootClassName: \"dtp-thegridcn\",\n classNames: {\n card: \"hover:bg-cyan-400/10 data-[state=selected]:bg-cyan-400/15\",\n cardGrid: \"bg-transparent\",\n cardItem: \"min-w-0\",\n cardOverlay: \"from-black/95 via-black/75 to-transparent\",\n cardScrollArea: \"bg-transparent\",\n cardSelected: \"bg-cyan-400/15 ring-cyan-300/70\",\n cardUnselected: \"border-cyan-400/35\",\n cardViewport: \"bg-transparent\",\n cellBorder: \"border-cyan-400/16\",\n cellSelected: \"!bg-cyan-400/15 ring-1 ring-inset ring-cyan-300/60\",\n columnGroupHeader: \"bg-cyan-400/10 text-cyan-200\",\n dragActive: \"rounded-md border-dashed border-cyan-300\",\n emptyState: \"border-cyan-400/35 bg-black/80\",\n footer: \"border-cyan-400/40 bg-black/80 text-cyan-50\",\n headerSortIcon: \"text-cyan-100/65\",\n mutedText: \"text-cyan-100/70\",\n paginationSelectTrigger: \"border-cyan-400/45 bg-black/70 text-cyan-50\",\n paginationTotal: \"text-cyan-100/70\",\n pinnedColumn: \"border-cyan-400/25\",\n pinnedUtilityColumn: \"bg-black/80\",\n resizeHandle: \"after:bg-cyan-400/20 hover:after:bg-cyan-300\",\n resizeHandleActive: \"after:bg-cyan-300\",\n row: \"hover:bg-cyan-400/10 data-[state=selected]:!bg-cyan-400/15\",\n rowSelected: \"!bg-cyan-400/15\",\n tableContainer:\n \"border-cyan-400/35 bg-black/72 text-cyan-50 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_26px_rgba(34,211,238,0.08)]\",\n tableScrollArea: \"bg-black/72\",\n tableStickyHeader:\n \"sticky top-0 z-30 bg-black/90 backdrop-blur [&_th]:border-cyan-400/45 [&_th]:bg-black/90\",\n toolbarCompactIconButton: \"size-7\",\n toolbarIconButton: \"text-cyan-100/70 hover:text-cyan-50\",\n toolbarInputButton: \"border-cyan-400/45 bg-black/70 text-cyan-50\",\n },\n Button: GridButton,\n Card: GridCard,\n CardContent: GridCardContent,\n CardHeader: GridCardHeader,\n Checkbox: GridCheckbox,\n DropdownMenuCheckboxItem: GridDropdownMenuCheckboxItem,\n DropdownMenuContent: GridDropdownMenuContent,\n DropdownMenuItem: GridDropdownMenuItem,\n DropdownMenuLabel: GridDropdownMenuLabel,\n DropdownMenuRadioItem: GridDropdownMenuRadioItem,\n DropdownMenuSeparator: GridDropdownMenuSeparator,\n DropdownMenuSubContent: GridDropdownMenuSubContent,\n DropdownMenuSubTrigger: GridDropdownMenuSubTrigger,\n Empty: GridEmpty,\n EmptyDescription: GridEmptyDescription,\n EmptyMedia: GridEmptyMedia,\n EmptyTitle: GridEmptyTitle,\n Input: GridInput,\n InputGroup: GridInputGroup,\n PaginationLink: GridPaginationLink,\n ScrollArea: GridScrollArea,\n ScrollBar: GridScrollBar,\n SelectContent: GridSelectContent,\n SelectItem: GridSelectItem,\n SelectTrigger: GridSelectTrigger,\n Separator: GridSeparator,\n Skeleton: GridSkeleton,\n Table: GridTable,\n TableBody: GridTableBody,\n TableCaption: GridTableCaption,\n TableCell: GridTableCell,\n TableFooter: GridTableFooter,\n TableHead: GridTableHead,\n TableHeader: GridTableHeader,\n TableRow: GridTableRow,\n TooltipContent: GridTooltipContent,\n};\n"]} \ No newline at end of file diff --git a/dist/chunk-S7PROCUM.js.map b/dist/chunk-S7PROCUM.js.map deleted file mode 100644 index a2a0ec9..0000000 --- a/dist/chunk-S7PROCUM.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/adapters/thegridcn/index.tsx"],"names":["withClassName","Component","defaultClassName","className","props","jsx","cn","GridButton","Button","GridCard","Card","GridCardHeader","CardHeader","GridCardContent","CardContent","GridCheckbox","Checkbox","GridDropdownMenuContent","DropdownMenuContent","GridDropdownMenuItem","DropdownMenuItem","GridDropdownMenuCheckboxItem","DropdownMenuCheckboxItem","GridDropdownMenuRadioItem","DropdownMenuRadioItem","GridDropdownMenuLabel","DropdownMenuLabel","GridDropdownMenuSeparator","DropdownMenuSeparator","GridDropdownMenuSubContent","DropdownMenuSubContent","GridDropdownMenuSubTrigger","DropdownMenuSubTrigger","GridEmpty","Empty","GridEmptyMedia","EmptyMedia","GridEmptyTitle","EmptyTitle","GridEmptyDescription","EmptyDescription","GridInput","Input","GridInputGroup","InputGroup","GridPaginationLink","PaginationLink","GridScrollArea","ScrollArea","GridScrollBar","ScrollBar","GridSelectTrigger","SelectTrigger","GridSelectContent","SelectContent","GridSelectItem","SelectItem","GridSeparator","Separator","GridSkeleton","Skeleton","GridTable","Table","GridTableHeader","TableHeader","GridTableBody","TableBody","GridTableFooter","TableFooter","GridTableHead","TableHead","GridTableRow","TableRow","GridTableCell","TableCell","GridTableCaption","TableCaption","GridTooltipContent","TooltipContent","theGridcnUiKit","primitiveUiKit"],"mappings":"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","file":"chunk-S7PROCUM.js","sourcesContent":["import * as React from \"react\";\nimport type { DataTableUiKit } from \"../../core/ui-kit\";\nimport {\n Button as PrimitiveButton,\n Card as PrimitiveCard,\n CardContent as PrimitiveCardContent,\n CardHeader as PrimitiveCardHeader,\n Checkbox as PrimitiveCheckbox,\n DropdownMenuCheckboxItem as PrimitiveDropdownMenuCheckboxItem,\n DropdownMenuContent as PrimitiveDropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n DropdownMenuLabel as PrimitiveDropdownMenuLabel,\n DropdownMenuRadioItem as PrimitiveDropdownMenuRadioItem,\n DropdownMenuSeparator as PrimitiveDropdownMenuSeparator,\n DropdownMenuSubContent as PrimitiveDropdownMenuSubContent,\n DropdownMenuSubTrigger as PrimitiveDropdownMenuSubTrigger,\n Empty as PrimitiveEmpty,\n EmptyDescription as PrimitiveEmptyDescription,\n EmptyMedia as PrimitiveEmptyMedia,\n EmptyTitle as PrimitiveEmptyTitle,\n Input as PrimitiveInput,\n InputGroup as PrimitiveInputGroup,\n PaginationLink as PrimitivePaginationLink,\n ScrollArea as PrimitiveScrollArea,\n ScrollBar as PrimitiveScrollBar,\n SelectContent as PrimitiveSelectContent,\n SelectItem as PrimitiveSelectItem,\n SelectTrigger as PrimitiveSelectTrigger,\n Separator as PrimitiveSeparator,\n Skeleton as PrimitiveSkeleton,\n Table as PrimitiveTable,\n TableBody as PrimitiveTableBody,\n TableCaption as PrimitiveTableCaption,\n TableCell as PrimitiveTableCell,\n TableFooter as PrimitiveTableFooter,\n TableHead as PrimitiveTableHead,\n TableHeader as PrimitiveTableHeader,\n TableRow as PrimitiveTableRow,\n TooltipContent as PrimitiveTooltipContent,\n primitiveUiKit,\n} from \"../../core/primitive-ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nfunction withClassName(\n Component: React.ComponentType,\n defaultClassName: string,\n) {\n return function Wrapped({ className, ...props }: TProps) {\n return (\n \n );\n };\n}\n\nconst GridButton = withClassName(\n PrimitiveButton,\n \"rounded-md border border-cyan-400/45 bg-black/75 font-mono text-[0.8rem] tracking-[0.045em] text-cyan-50 uppercase shadow-[0_0_0_1px_rgba(34,211,238,0.12),0_0_18px_rgba(34,211,238,0.1)] data-[variant=default]:bg-cyan-300 data-[variant=default]:text-slate-950 data-[variant=outline]:bg-black/55 data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:hover:bg-cyan-400/10 data-[variant=secondary]:bg-cyan-400/12 data-[variant=destructive]:border-rose-400/50 data-[variant=destructive]:bg-rose-500/15 data-[variant=destructive]:text-rose-200\",\n);\nconst GridCard = withClassName(\n PrimitiveCard,\n \"rounded-md border border-cyan-400/35 bg-[linear-gradient(180deg,rgba(0,229,255,0.055),transparent_58%),rgba(1,8,11,0.9)] font-mono text-cyan-50 shadow-[inset_0_1px_0_rgba(125,211,252,0.08),0_0_0_1px_rgba(34,211,238,0.12),0_0_28px_rgba(34,211,238,0.08)] ring-0\",\n);\nconst GridCardHeader = withClassName(PrimitiveCardHeader, \"px-5 pt-5 pb-3\");\nconst GridCardContent = withClassName(PrimitiveCardContent, \"px-5 pb-5\");\nconst GridCheckbox = withClassName(\n PrimitiveCheckbox,\n \"rounded-sm border-cyan-400/55 bg-black/65 ring-cyan-300/70 data-checked:bg-cyan-300 data-checked:text-slate-950 data-checked:ring-cyan-300\",\n);\nconst GridDropdownMenuContent = withClassName(\n PrimitiveDropdownMenuContent,\n \"rounded-md border border-cyan-400/35 bg-black/92 font-mono text-cyan-50 shadow-[0_0_26px_rgba(34,211,238,0.16)] ring-0 before:hidden **:data-[slot$=-item]:focus:bg-cyan-400/12 **:data-[slot$=-item]:data-highlighted:bg-cyan-400/12 **:data-[slot$=-separator]:bg-cyan-400/18 **:data-[slot$=-trigger]:focus:bg-cyan-400/12\",\n);\nconst GridDropdownMenuItem = withClassName(\n PrimitiveDropdownMenuItem,\n \"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50 data-[variant=destructive]:text-rose-200 data-[variant=destructive]:focus:bg-rose-500/15\",\n);\nconst GridDropdownMenuCheckboxItem = withClassName(\n PrimitiveDropdownMenuCheckboxItem,\n \"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50\",\n);\nconst GridDropdownMenuRadioItem = withClassName(\n PrimitiveDropdownMenuRadioItem,\n \"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50\",\n);\nconst GridDropdownMenuLabel = withClassName(\n PrimitiveDropdownMenuLabel,\n \"font-mono text-[0.68rem] tracking-[0.16em] text-cyan-200/70 uppercase\",\n);\nconst GridDropdownMenuSeparator = withClassName(\n PrimitiveDropdownMenuSeparator,\n \"bg-cyan-400/20\",\n);\nconst GridDropdownMenuSubContent = withClassName(\n PrimitiveDropdownMenuSubContent,\n \"rounded-md border border-cyan-400/35 bg-black/92 font-mono text-cyan-50 shadow-[0_0_26px_rgba(34,211,238,0.16)] ring-0 before:hidden\",\n);\nconst GridDropdownMenuSubTrigger = withClassName(\n PrimitiveDropdownMenuSubTrigger,\n \"rounded-sm font-mono text-cyan-50 focus:bg-cyan-400/12 focus:text-cyan-50 data-open:bg-cyan-400/12 data-open:text-cyan-50\",\n);\nconst GridEmpty = withClassName(\n PrimitiveEmpty,\n \"rounded-md border-cyan-400/35 bg-black/80 font-mono text-cyan-50\",\n);\nconst GridEmptyMedia = withClassName(\n PrimitiveEmptyMedia,\n \"[&[data-variant=icon]]:rounded-xl [&[data-variant=icon]]:bg-cyan-400/12 [&[data-variant=icon]]:text-cyan-200\",\n);\nconst GridEmptyTitle = withClassName(PrimitiveEmptyTitle, \"text-cyan-50\");\nconst GridEmptyDescription = withClassName(\n PrimitiveEmptyDescription,\n \"text-cyan-100/70\",\n);\nconst GridInput = withClassName(\n PrimitiveInput,\n \"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 placeholder:text-cyan-100/45 focus-visible:ring-cyan-300/70\",\n);\nconst GridInputGroup = withClassName(\n PrimitiveInputGroup,\n \"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 shadow-[0_0_18px_rgba(34,211,238,0.06)]\",\n);\nconst GridPaginationLink = withClassName(\n PrimitivePaginationLink,\n \"rounded-md border-cyan-400/35 bg-black/55 font-mono text-cyan-50 hover:bg-cyan-400/12 data-[active=true]:bg-cyan-300 data-[active=true]:text-slate-950\",\n);\nconst GridScrollArea = withClassName(\n PrimitiveScrollArea,\n \"rounded-md border border-cyan-400/35 bg-black/72 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_26px_rgba(34,211,238,0.08)]\",\n);\nconst GridScrollBar = withClassName(\n PrimitiveScrollBar,\n \"[&>[data-slot=scroll-area-thumb]]:bg-cyan-300/65\",\n);\nconst GridSelectTrigger = withClassName(\n PrimitiveSelectTrigger,\n \"rounded-md border-cyan-400/45 bg-black/70 font-mono text-cyan-50 focus-visible:ring-cyan-300/70\",\n);\nconst GridSelectContent = withClassName(\n PrimitiveSelectContent,\n \"rounded-md border border-cyan-400/35 bg-black/95 font-mono text-cyan-50 ring-0 shadow-[0_0_26px_rgba(34,211,238,0.16)] before:hidden\",\n);\nconst GridSelectItem = withClassName(\n PrimitiveSelectItem,\n \"rounded-sm focus:bg-cyan-400/12 focus:text-cyan-50\",\n);\nconst GridSeparator = withClassName(PrimitiveSeparator, \"bg-cyan-400/20\");\nconst GridSkeleton = withClassName(\n PrimitiveSkeleton,\n \"rounded-md bg-cyan-400/12\",\n);\nconst GridTable = withClassName(\n PrimitiveTable,\n \"border-separate border-spacing-0 border border-cyan-400/45 bg-black/72 font-mono text-[0.84rem] text-cyan-50 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_24px_rgba(34,211,238,0.08)]\",\n);\nconst GridTableHeader = withClassName(\n PrimitiveTableHeader,\n \"[&_tr]:border-cyan-400/45\",\n);\nconst GridTableBody = withClassName(\n PrimitiveTableBody,\n \"[&_tr:last-child]:border-b\",\n);\nconst GridTableFooter = withClassName(\n PrimitiveTableFooter,\n \"border-cyan-400/40 bg-cyan-400/10 font-mono\",\n);\nconst GridTableHead = withClassName(\n PrimitiveTableHead,\n \"h-12 border-b border-cyan-400/45 bg-cyan-950/20 px-3 font-mono text-[0.68rem] font-bold tracking-[0.18em] text-cyan-300 uppercase\",\n);\nconst GridTableRow = withClassName(\n PrimitiveTableRow,\n \"border-cyan-400/25 hover:bg-cyan-400/10 data-[state=selected]:bg-cyan-400/15\",\n);\nconst GridTableCell = withClassName(\n PrimitiveTableCell,\n \"border-b border-cyan-400/16 px-3 py-3 font-mono text-cyan-50\",\n);\nconst GridTableCaption = withClassName(\n PrimitiveTableCaption,\n \"font-mono text-cyan-100/65\",\n);\nconst GridTooltipContent = withClassName(\n PrimitiveTooltipContent,\n \"rounded-md bg-black text-cyan-50 ring-1 ring-cyan-400/35 shadow-[0_0_22px_rgba(34,211,238,0.18)] [&>svg]:bg-black [&>svg]:fill-black\",\n);\n\nexport const theGridcnUiKit: DataTableUiKit = {\n ...primitiveUiKit,\n rootClassName: \"dtp-thegridcn\",\n classNames: {\n card: \"hover:bg-cyan-400/10 data-[state=selected]:bg-cyan-400/15\",\n cardGrid: \"bg-transparent\",\n cardItem: \"min-w-0\",\n cardOverlay: \"from-black/95 via-black/75 to-transparent\",\n cardScrollArea: \"bg-transparent\",\n cardSelected: \"bg-cyan-400/15 ring-cyan-300/70\",\n cardUnselected: \"border-cyan-400/35\",\n cardViewport: \"bg-transparent\",\n cellBorder: \"border-cyan-400/16\",\n dragActive: \"rounded-md border-dashed border-cyan-300\",\n emptyState: \"border-cyan-400/35 bg-black/80\",\n footer: \"border-cyan-400/40 bg-black/80 text-cyan-50\",\n headerSortIcon: \"text-cyan-100/65\",\n mutedText: \"text-cyan-100/70\",\n paginationSelectTrigger: \"border-cyan-400/45 bg-black/70 text-cyan-50\",\n paginationTotal: \"text-cyan-100/70\",\n pinnedColumn: \"border-cyan-400/25\",\n pinnedUtilityColumn: \"bg-black/80\",\n resizeHandle: \"after:bg-cyan-400/20 hover:after:bg-cyan-300\",\n resizeHandleActive: \"after:bg-cyan-300\",\n row: \"hover:bg-cyan-400/10 data-[state=selected]:!bg-cyan-400/15\",\n rowSelected: \"!bg-cyan-400/15\",\n tableContainer:\n \"border-cyan-400/35 bg-black/72 text-cyan-50 shadow-[0_0_0_1px_rgba(34,211,238,0.08),0_0_26px_rgba(34,211,238,0.08)]\",\n tableScrollArea: \"bg-black/72\",\n tableStickyHeader:\n \"sticky top-0 z-30 bg-black/90 backdrop-blur [&_th]:border-cyan-400/45 [&_th]:bg-black/90\",\n toolbarCompactIconButton: \"size-7\",\n toolbarIconButton: \"text-cyan-100/70 hover:text-cyan-50\",\n toolbarInputButton: \"border-cyan-400/45 bg-black/70 text-cyan-50\",\n },\n Button: GridButton,\n Card: GridCard,\n CardContent: GridCardContent,\n CardHeader: GridCardHeader,\n Checkbox: GridCheckbox,\n DropdownMenuCheckboxItem: GridDropdownMenuCheckboxItem,\n DropdownMenuContent: GridDropdownMenuContent,\n DropdownMenuItem: GridDropdownMenuItem,\n DropdownMenuLabel: GridDropdownMenuLabel,\n DropdownMenuRadioItem: GridDropdownMenuRadioItem,\n DropdownMenuSeparator: GridDropdownMenuSeparator,\n DropdownMenuSubContent: GridDropdownMenuSubContent,\n DropdownMenuSubTrigger: GridDropdownMenuSubTrigger,\n Empty: GridEmpty,\n EmptyDescription: GridEmptyDescription,\n EmptyMedia: GridEmptyMedia,\n EmptyTitle: GridEmptyTitle,\n Input: GridInput,\n InputGroup: GridInputGroup,\n PaginationLink: GridPaginationLink,\n ScrollArea: GridScrollArea,\n ScrollBar: GridScrollBar,\n SelectContent: GridSelectContent,\n SelectItem: GridSelectItem,\n SelectTrigger: GridSelectTrigger,\n Separator: GridSeparator,\n Skeleton: GridSkeleton,\n Table: GridTable,\n TableBody: GridTableBody,\n TableCaption: GridTableCaption,\n TableCell: GridTableCell,\n TableFooter: GridTableFooter,\n TableHead: GridTableHead,\n TableHeader: GridTableHeader,\n TableRow: GridTableRow,\n TooltipContent: GridTooltipContent,\n};\n"]} \ No newline at end of file diff --git a/dist/chunk-THSY57Y7.js b/dist/chunk-THSY57Y7.js new file mode 100644 index 0000000..b654a3f --- /dev/null +++ b/dist/chunk-THSY57Y7.js @@ -0,0 +1,2 @@ +import {d,z,x,w,y,j}from'./chunk-4P45F2OY.js';import {c,t,i}from'./chunk-CVR2ZXHQ.js';import {h,g,f}from'./chunk-KDHJA6AH.js';import {a}from'./chunk-XTVBESM5.js';import*as N from'react';import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {flexRender}from'@tanstack/react-table';function dt({columns:e,editableRows:a,onError:i}){let[o,n]=N.useState(null),[u,D]=N.useState({}),T=N.useRef(u),[R,t]=N.useState({}),[I,m]=N.useState({}),[x,L]=N.useState(false),B=N.useMemo(()=>!xa(u,R),[u,R]);N.useEffect(()=>{T.current=u;},[u]);let h=N.useCallback(()=>{n(null),D({}),m({}),t({});},[]),V=N.useCallback((k,f)=>{let S=a?.getInitialValues?.(k)??Ia(k,e);t({...S}),D(S),m({}),n(f);},[e,a]),M=N.useCallback(async k=>{if(!a)return false;L(true);let f={...T.current},S;try{let A=await a.validateRow?.(k,f),r=La(A);if(Object.keys(r).length>0)return m(r),!1;m({});let K=a.onOptimisticUpdate?.(k,f);return S=typeof K=="function"?K:void 0,await a.onSaveRow(k,f),a.onSaveSuccess?.(k,f),N.startTransition(h),!0}catch(A){try{S?.();}catch{}return a.onSaveError?.(A,k,f),i?.(A,k),false}finally{L(false);}},[h,a,i]),v=N.useCallback(k=>{m(f=>{if(!f[k]&&!f._row)return f;let S={...f};return delete S[k],delete S._row,S});},[]);return {cancelEditing:h,clearEditError:v,draftValues:u,editErrors:I,editingRowId:o,isEditDirty:B,isSavingEdit:x,saveEdit:M,setDraftValues:D,setEditingRowId:n,startEditingRow:V}}function Ia(e,a){return j(a).reduce((i,{column:o})=>("accessorKey"in o&&typeof o.accessorKey=="string"&&(i[o.accessorKey]=e[o.accessorKey]),i),{})}function fa(e,a,i,o,n){let{Checkbox:u,Input:D}=o,T=e.column.columnDef,R=T.meta,t="accessorKey"in T&&typeof T.accessorKey=="string"?T.accessorKey:e.column.id,I=a[t],m=n?.errors[t]??n?.errors[e.column.id]??n?.errors._row,x=h=>{n?.onValueChange(t),i(V=>({...V,[t]:h}));},L=h=>{h.key==="Escape"&&n?.cancelOnEscape?(h.preventDefault(),n.cancel()):h.key==="Enter"&&!h.shiftKey&&n?.commitOnEnter&&(h.preventDefault(),n.commit());};if(R?.renderEditCell)return R.renderEditCell({cell:e,row:e.row.original,value:e.getValue(),draftValue:I,error:m,isDirty:n?.isDirty??false,isPending:n?.isPending??false,setDraftValue:x});let B=Aa(R?.type,I);return typeof I=="boolean"?jsxs("div",{className:"min-w-0",children:[jsx(u,{"aria-invalid":!!m||void 0,checked:I,disabled:n?.isPending,onCheckedChange:h=>{x(h===true);},onKeyDown:L}),m?jsx("span",{className:"mt-1 block text-xs text-destructive",role:"alert",children:m}):null]}):jsxs("div",{className:"min-w-0",children:[jsx(D,{"aria-invalid":!!m||void 0,disabled:n?.isPending,type:B,value:R?.formatEditValue?R.formatEditValue(I,e):Ga(I,B),onChange:h=>{let V=h.target.value,M=R?.parseEditValue?R.parseEditValue(V,e):Ka(V,B,I);x(M);},onKeyDown:L}),m?jsx("span",{className:"mt-1 block text-xs text-destructive",role:"alert",children:m}):null]})}function La(e){return e?typeof e=="string"?{_row:e}:e:{}}function xa(e,a){let i=new Set([...Object.keys(e),...Object.keys(a)]);return Array.from(i).every(o=>Object.is(e[o],a[o]))}function Aa(e,a){return e==="numeric"||typeof a=="number"?"number":e==="date"||a instanceof Date?"datetime-local":"text"}function Ga(e,a="text"){return e==null?"":e instanceof Date?a==="datetime-local"?e.toISOString().slice(0,16):e.toISOString():typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="bigint"?String(e):""}function Ka(e,a,i){return a==="number"?e===""?null:Number(e):a==="datetime-local"?e?i instanceof Date?new Date(e):e:null:e}var ba=N.createContext(void 0);function mt({children:e,measureRow:a}){return jsx(ba.Provider,{value:a,children:e})}function ga(){return N.useContext(ba)}function Ae(e,a$1,i$1){let o=e.column.columnDef,n=o.meta,u=e.getValue(),D=i$1?.hasCustomCell??false,T=D&&o.cell?flexRender(o.cell,e):void 0,R=Oa(T),t=Ma({context:e,useCustomOverflowDefaults:i$1?.useCustomOverflowDefaults??false,value:u});if(n?.type==="date"&&!D)return jsxs("div",{"data-dtp-slot":"data-table-cell-content","data-dtp-overflow":t,className:a(Da(t),"flex w-full min-w-0 items-center justify-end gap-2"),children:[jsx(i,{className:a("shrink-0",a$1?.mutedText??"opacity-70")}),jsx("span",{className:"min-w-0 truncate",children:Ua(u)})]});let I=T!=null&&T!==""?T:u==null||u===""?jsx("span",{className:a$1?.mutedText??"opacity-70",children:"-"}):_a(u);return jsx("div",{"data-dtp-slot":"data-table-cell-content","data-dtp-overflow":t,className:a(Da(t),"w-full min-w-0 max-w-full",R&&"[&>*]:max-w-full [&>*]:min-w-0"),children:I})}function Ma({context:e,useCustomOverflowDefaults:a,value:i}){let o=e.column.columnDef,n=typeof o.meta?.overflow=="function"?o.meta.overflow({row:e.row.original,value:i}):o.meta?.overflow;return n||(a?"clip":"truncate")}function Da(e){switch(e){case "clip":return "block overflow-hidden whitespace-nowrap";case "wrap":return "block overflow-hidden whitespace-normal break-words";case "visible":return "block overflow-visible whitespace-normal";default:return "block overflow-hidden text-ellipsis whitespace-nowrap"}}function Oa(e){return e==null?false:N.isValidElement(e)||Array.isArray(e)||typeof e=="object"}function Ua(e){return typeof e=="number"?new Date(e*1e3).toLocaleString():typeof e=="string"&&e?e:"-"}function _a(e){if(e instanceof Date)return e.toLocaleString();if(typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return String(e);try{return JSON.stringify(e)}catch{return "-"}}function Fa({columnLayouts:e,components:a$1,currentDensity:i,draftValues:o,editingContext:n,dragAndDrop:u,explicitCustomCellColumnIds:D,getRowClassName:T,groupToggleLabel:R,gridMode:t,gridRowAriaIndex:I,gridRowIndex:m,activeGridCell:x$1,cellSelectionEnabled:L,isGridCellSelected:B,onGridCellFocus:h$1,onGridCellKeyDown:V,onGridCellPointerDown:M,onGridCellPointerEnter:v,isDraggable:k,isDetailExpanded:f,isEditing:S,isExpanded:A,isInitialLoadingRow:r,isSelected:K,loadingState:z$1,onRowClick:F,pinnedPosition:d$1,originalRow:b,detailPanel:q,row:C,rowIndex:O,setDraftValues:Ce,stripedRows:ce,uiClassNames:G,visibleCells:ye,visibleLeafColumnCount:ee}){let{Checkbox:Ve,Input:$,Skeleton:ae,TableCell:we,TableRow:Re}=a$1,X=ga(),he=d$1?void 0:X,Me=ye.find(c=>!e.get(c.column.id)?.isUtilityColumn)?.column.id;return jsxs(N.Fragment,{children:[jsx(Re,{ref:he,"data-row-id":C.id,"data-index":he?O:void 0,"data-tree-depth":!r&&C.depth>0?C.depth:void 0,"data-dtp-slot":d$1?"data-table-pinned-row":"data-table-row","data-row-pinned":d$1,"data-row-grouped":C.getIsGrouped()||void 0,draggable:r?false:k,"data-loading":z$1?.isLoading||void 0,"data-row-index":r?void 0:O,"data-row-parity":ce&&!r?O%2===0?"odd":"even":void 0,"data-state":r?void 0:K?"selected":void 0,role:t?"row":void 0,"aria-rowindex":t?I:void 0,tabIndex:!t&&F&&!r?0:void 0,className:a(!r&&T?.(b,{row:b,rowId:C.id,rowIndex:O,isEditing:S,isExpanded:A,isLoading:!!z$1?.isLoading,isSelected:K,pinnedPosition:d$1??false}),G.row,d$1==="top"&&a("border-b-2",G.rowPinnedTop),d$1==="bottom"&&a("border-t-2",G.rowPinnedBottom),ce&&!r&&(O%2===0?G.rowOdd:G.rowEven),K&&!r&&G.rowSelected,F&&!r&&"cursor-pointer",r&&"pointer-events-none"),onClick:c=>{r||x(c.target,c.currentTarget)||t&&L||F?.({row:b,rowId:C.id});},onKeyDown:c=>{r||!F||c.key!=="Enter"&&c.key!==" "||x(c.target,c.currentTarget)||(c.preventDefault(),F({row:b,rowId:C.id}));},onDragStart:c=>{r||u?.onRowDragStart?.({row:b,rowId:C.id,event:c});},onDragEnd:c=>{r||u?.onRowDragEnd?.({row:b,rowId:C.id,event:c});},children:ye.map((c,W)=>{let j=c.column.columnDef.meta,J=c.getContext(),Oe=c.getValue(),U=e.get(c.column.id),me=U?.isSelectionColumn??false,Q=U?.isExpansionColumn??false,_=U?.isActionsColumn??false,ie=U?.isSpacerColumn??false,Ue=h(j?.hideOn),_e=r||d(b)?void 0:typeof j?.cellClassName=="function"?j.cellClassName({row:b,value:Oe}):j?.cellClassName,fe=t&&L&&!r&&B(m,W);return jsx(we,{role:t?"gridcell":void 0,"aria-colindex":t?W+1:void 0,"aria-selected":t&&!r?L?fe:K:void 0,"data-dtp-cell-selected":fe||void 0,"data-dtp-grid-cell":t?"true":void 0,"data-grid-row-index":t?m:void 0,"data-grid-column-index":t?W:void 0,tabIndex:t&&!r?x$1.row===m&&x$1.column===W?0:-1:void 0,onFocus:t?()=>h$1({row:m,column:W}):void 0,onKeyDown:t?E=>{if(E.target!==E.currentTarget){E.key==="Escape"&&(E.preventDefault(),E.currentTarget.focus());return}V(E,m,W);}:void 0,onPointerDown:t&&L&&!U?.isUtilityColumn&&!ie?E=>{x(E.target,E.currentTarget)||(E.currentTarget.focus(),M(E,m,W));}:void 0,onPointerEnter:t&&L&&!U?.isUtilityColumn&&!ie?E=>{x(E.target,E.currentTarget)||v(E,m,W);}:void 0,className:a("border-b",z(i),G.cellBorder,fe&&G.cellSelected,U?.utilityClassName,U?.isSpacerColumn&&"border-b-0 bg-transparent p-0",U?.pinnedClassName,Ue,g(J),j?.responsiveClassName,_e),style:U?.cellStyle,children:jsx("div",{"data-row-click-ignore":me||Q||_?"true":void 0,className:"min-w-0 max-w-full",style:C.depth>0&&c.column.id===Me?{paddingInlineStart:`${C.depth}rem`}:void 0,children:z$1?.isLoading?j?.skeleton?.(J)??z$1.skeleton??jsx(ae,{className:a("h-4 rounded",j?.type==="numeric"?"ml-auto w-16":j?.type==="date"?"ml-auto w-28":"w-full")}):S&&c.column.id!=="__select__"&&c.column.id!=="__expand__"&&c.column.id!=="__actions__"?fa(J,o,Ce,{Checkbox:Ve,Input:$},n?{cancel:n.cancel,cancelOnEscape:n.cancelOnEscape,commit:()=>n.commit(b),commitOnEnter:n.commitOnEnter,errors:n.errors,isDirty:n.isDirty,isPending:n.isPending,onValueChange:n.clearError}:void 0):C.getIsGrouped()&&c.getIsPlaceholder()?null:C.getIsGrouped()&&c.getIsGrouped()?jsxs("button",{type:"button",className:"inline-flex min-w-0 items-center gap-1 text-left font-medium",onClick:()=>C.toggleExpanded(),"aria-expanded":C.getIsExpanded(),"aria-label":R,children:[jsx("span",{"aria-hidden":"true",children:Ae(J,G,{hasCustomCell:D.has(c.column.id),useCustomOverflowDefaults:D.has(c.column.id)})}),jsxs("span",{className:"shrink-0 opacity-70",children:["(",C.subRows.length,")"]})]}):C.getIsGrouped()&&c.getIsAggregated()?c.column.columnDef.aggregatedCell?flexRender(c.column.columnDef.aggregatedCell,J):Ae(J,G,{hasCustomCell:false,useCustomOverflowDefaults:false}):Ae(J,G,{hasCustomCell:D.has(c.column.id)||me||Q||_||ie,useCustomOverflowDefaults:D.has(c.column.id)||me||Q||_||ie})})},c.id)})}),!r&&q&&f?jsx(Re,{"data-dtp-slot":"data-table-detail-panel-row","data-row-pinned":d$1,children:jsx(we,{colSpan:Math.max(1,ee),className:a("border-b",z(i),G.cellBorder),children:q.render({row:b,rowId:C.id,tableRow:C})})}):null]})}function Wa(e,a){return e.row.id===a.row.id&&e.row.original===a.row.original&&e.rowIndex===a.rowIndex&&e.isSelected===a.isSelected&&e.isInitialLoadingRow===a.isInitialLoadingRow&&e.isEditing===a.isEditing&&(!e.isEditing||e.editingContext===a.editingContext)&&e.isExpanded===a.isExpanded&&e.isDraggable===a.isDraggable&&ja(e.loadingState,a.loadingState)&&qa(e.visibleCells,a.visibleCells)&&e.components===a.components&&$a(e.columnLayouts,a.columnLayouts,a.visibleCells)&&e.currentDensity===a.currentDensity&&e.detailPanel===a.detailPanel&&e.isDetailExpanded===a.isDetailExpanded&&e.pinnedPosition===a.pinnedPosition&&e.onRowClick===a.onRowClick&&e.dragAndDrop===a.dragAndDrop&&e.getRowClassName===a.getRowClassName&&e.groupToggleLabel===a.groupToggleLabel&&e.gridMode===a.gridMode&&(!a.gridMode||e.gridRowAriaIndex===a.gridRowAriaIndex&&e.gridRowIndex===a.gridRowIndex&&e.activeGridCell.row===a.activeGridCell.row&&e.activeGridCell.column===a.activeGridCell.column&&e.cellSelectionEnabled===a.cellSelectionEnabled&&e.isGridCellSelected===a.isGridCellSelected&&e.onGridCellFocus===a.onGridCellFocus&&e.onGridCellKeyDown===a.onGridCellKeyDown&&e.onGridCellPointerDown===a.onGridCellPointerDown&&e.onGridCellPointerEnter===a.onGridCellPointerEnter)&&e.stripedRows===a.stripedRows&&e.uiClassNames===a.uiClassNames&&e.explicitCustomCellColumnIds===a.explicitCustomCellColumnIds&&(!e.isEditing||e.draftValues===a.draftValues)}function ja(e,a){return e?.isLoading===a?.isLoading&&e?.skeleton===a?.skeleton}function qa(e,a){return e.length===a.length&&e.every((i,o)=>{let n=a[o];return n?.id===i.id&&n.column.id===i.column.id})}function $a(e,a,i){return i.every(o=>{let n=e.get(o.column.id),u=a.get(o.column.id);return n?.fixedSide===u?.fixedSide&&n?.isActionsColumn===u?.isActionsColumn&&n?.isExpansionColumn===u?.isExpansionColumn&&n?.isSelectionColumn===u?.isSelectionColumn&&n?.isSpacerColumn===u?.isSpacerColumn&&n?.isUtilityColumn===u?.isUtilityColumn&&n?.pinnedClassName===u?.pinnedClassName&&n?.utilityClassName===u?.utilityClassName&&Xa(n?.cellStyle,u?.cellStyle)})}function Xa(e,a){return e?.width===a?.width&&e?.minWidth===a?.minWidth&&e?.maxWidth===a?.maxWidth&&e?.left===a?.left&&e?.right===a?.right}var Ta=N.memo(Fa,Wa);function Ja({columnGroupHeaderHeight:e,currentDensity:a$1,currentSorting:i,dir:o,draggedColumnIdRef:n,enableColumnReordering:u,enableColumnResizing:D,gridColumnIndex:T,gridMode:R,header:t$1,headerGroupHeaders:I,layout:m,primeColumnForResize:x,reorderColumn:L,resizeColumnLabel:B,resetColumnSize:h$1,TableHead:V,uiClassNames:M}){let v=t$1.column.columnDef.meta,k=N.useId(),f$1=!t$1.isPlaceholder&&t$1.subHeaders.length>0,S=f$1?t$1.column.columnDef:void 0,A=t$1.column.getCanSort(),r=t$1.column.getIsSorted(),K=i.findIndex(d=>d.id===t$1.column.id),z=u&&!t$1.isPlaceholder&&!f$1&&!m.isUtilityColumn&&!m.isSpacerColumn,F=h(v?.hideOn);return jsxs(V,{colSpan:t$1.colSpan,scope:t$1.isPlaceholder?void 0:f$1?"colgroup":"col",role:R?"columnheader":void 0,"aria-colindex":R?T:void 0,"aria-hidden":t$1.isPlaceholder||void 0,"aria-description":f$1?S?.description:void 0,"aria-labelledby":!t$1.isPlaceholder&&!m.isUtilityColumn&&!m.isSpacerColumn?k:void 0,"data-column-id":t$1.column.id,"data-column-group-id":f$1?S?.id:void 0,"data-header-depth":t$1.depth,"data-dtp-slot":f$1?"data-table-column-group-header":"data-table-column-header",className:a("relative border-b",y(a$1),f$1&&M.columnGroupHeader,m.utilityClassName,m.isSpacerColumn&&"border-b-1 bg-transparent p-0",m.pinnedClassName,F,f(t$1.getContext()),v?.headerClassName,f$1&&S?.headerClassName,v?.responsiveClassName),style:{...v?.headerStyle,...f$1?S?.headerStyle:void 0,...f$1&&(S?.headerHeight??e)!==void 0?{height:S?.headerHeight??e}:void 0,...m.headerStyle},title:f$1?S?.description:void 0,"aria-sort":r==="asc"?"ascending":r==="desc"?"descending":A?"none":void 0,draggable:z,tabIndex:z&&!A&&!(D&&t$1.column.getCanResize())?0:void 0,onDragStart:z?d=>{n.current=t$1.column.id,d.dataTransfer.effectAllowed="move";}:void 0,onDragOver:z?d=>{d.preventDefault(),d.dataTransfer.dropEffect="move";}:void 0,onDrop:z?d=>{d.preventDefault();let b=n.current;n.current=null,b&&L(b,t$1.column.id);}:void 0,onKeyDown:z?d=>{if(!d.altKey||d.key!=="ArrowLeft"&&d.key!=="ArrowRight")return;d.preventDefault();let b=I.filter(O=>!w(O.column.id)&&O.column.id!=="__spacer__"),q=b.findIndex(O=>O.column.id===t$1.column.id),C=b[d.key==="ArrowLeft"!=(o==="rtl")?q-1:q+1];C&&L(t$1.column.id,C.column.id);}:void 0,children:[t$1.isPlaceholder?null:A?jsxs("button",{type:"button",className:a("flex w-full items-center gap-2 font-medium",f(t$1.getContext())),onClick:t$1.column.getToggleSortingHandler(),children:[jsx("span",{id:k,className:"truncate",children:flexRender(t$1.column.columnDef.header,t$1.getContext())}),r?jsxs(Fragment,{children:[jsx(c,{className:a("size-4 shrink-0 transition-transform",r==="desc"?"rotate-0":"rotate-180")}),i.length>1&&K>=0?jsx("span",{className:"inline-flex size-4 shrink-0 items-center justify-center rounded-full text-[10px] leading-none",children:K+1}):null]}):jsx(t,{className:a("size-4 shrink-0",M.headerSortIcon??"opacity-70")})]}):m.isUtilityColumn||m.isSpacerColumn?flexRender(t$1.column.columnDef.header,t$1.getContext()):jsx("span",{id:k,children:flexRender(t$1.column.columnDef.header,t$1.getContext())}),D&&!t$1.isPlaceholder&&t$1.column.getCanResize()?jsx("div",{"aria-label":B,"aria-orientation":"vertical","aria-valuemax":Za(t$1),"aria-valuemin":Ya(t$1),"aria-valuenow":Math.round(t$1.getSize()),role:"separator",tabIndex:0,onDoubleClick:()=>{for(let d of re(t$1))h$1(d.column.id);},onMouseDown:d=>{for(let b of re(t$1))x(b.column.id,b.getSize());t$1.getResizeHandler()(d);},onTouchStart:d=>{for(let b of re(t$1))x(b.column.id,b.getSize());t$1.getResizeHandler()(d);},onKeyDown:d=>{if(d.altKey)return;if(d.key==="Home"){d.preventDefault();for(let q of re(t$1))h$1(q.column.id);return}if(d.key!=="ArrowLeft"&&d.key!=="ArrowRight")return;d.preventDefault(),d.stopPropagation();let b=d.key==="ArrowRight"!=(o==="rtl");et(t$1,(b?1:-1)*(d.shiftKey?25:10));},className:a("absolute inset-y-0 z-50 h-full w-3 cursor-col-resize touch-none select-none ltr:right-0 ltr:translate-x-1/2 rtl:left-0 rtl:-translate-x-1/2 after:absolute after:top-0 after:left-1/2 after:h-full after:w-px after:-translate-x-1/2",M.resizeHandle??"after:bg-current after:opacity-20 hover:after:opacity-70",t$1.column.getIsResizing()&&(M.resizeHandleActive??"after:opacity-100"))}):null]},t$1.id)}function Qa(e,a){return e.header.id===a.header.id&&e.header.column.id===a.header.column.id&&e.header.column.columnDef===a.header.column.columnDef&&e.header.colSpan===a.header.colSpan&&e.header.isPlaceholder===a.header.isPlaceholder&&at(e.header,a.header)&&e.currentDensity===a.currentDensity&&e.columnGroupHeaderHeight===a.columnGroupHeaderHeight&&e.dir===a.dir&&e.enableColumnReordering===a.enableColumnReordering&&e.enableColumnResizing===a.enableColumnResizing&&e.gridMode===a.gridMode&&e.gridColumnIndex===a.gridColumnIndex&&e.TableHead===a.TableHead&&e.uiClassNames===a.uiClassNames&&e.draggedColumnIdRef===a.draggedColumnIdRef&&e.primeColumnForResize===a.primeColumnForResize&&e.reorderColumn===a.reorderColumn&&e.resizeColumnLabel===a.resizeColumnLabel&&e.resetColumnSize===a.resetColumnSize&&e.selectionState===a.selectionState&&tt(e.currentSorting,a.currentSorting)&&nt(e.headerGroupHeaders,a.headerGroupHeaders)&<(e.layout,a.layout)}function re(e){return e.subHeaders.length?e.getLeafHeaders().filter(a=>!a.subHeaders.length):[e]}function Ya(e){return re(e).reduce((a,i)=>a+(i.column.columnDef.minSize??20),0)}function Za(e){return re(e).reduce((a,i)=>a+(i.column.columnDef.maxSize??Number.MAX_SAFE_INTEGER),0)}function et(e,a){let i=re(e),o=a/i.length;e.getContext().table.setColumnSizing(n=>{let u={...n};for(let D of i){let T=D.column,R=T.columnDef.minSize??20,t=T.columnDef.maxSize??Number.MAX_SAFE_INTEGER;u[T.id]=Math.min(t,Math.max(R,T.getSize()+o));}return u});}function at(e,a){return e.subHeaders.length===a.subHeaders.length&&e.subHeaders.every((i,o)=>a.subHeaders[o]?.id===i.id)}function tt(e,a){return e.length===a.length&&e.every((i,o)=>{let n=a[o];return n?.id===i.id&&n.desc===i.desc})}function nt(e,a){return e.length===a.length&&e.every((i,o)=>a[o]?.id===i.id)}function lt(e,a){return e.fixedSide===a.fixedSide&&e.isSpacerColumn===a.isSpacerColumn&&e.isUtilityColumn===a.isUtilityColumn&&e.pinnedClassName===a.pinnedClassName&&e.utilityClassName===a.utilityClassName&&e.headerStyle?.width===a.headerStyle?.width&&e.headerStyle?.minWidth===a.headerStyle?.minWidth&&e.headerStyle?.maxWidth===a.headerStyle?.maxWidth&&e.headerStyle?.left===a.headerStyle?.left&&e.headerStyle?.right===a.headerStyle?.right}var Ca=N.memo(Ja,Qa);function Ut({ariaDescribedBy:e,ariaLabelledBy:a$1,bodyRowComponents:i,cellSelection:o,cellSelectionEnabled:n,columnLayouts:u,columnGroupHeaderHeight:D,currentDensity:T,currentDetailExpanded:R,currentSorting:t=[],dir:I,DataTableEmptyState:m,dragAndDrop:x,draggedColumnIdRef:L,draftValues:B,editingRowId:h,editingContext:V,emptyNode:M,enableColumnReordering:v,enableColumnResizing:k,explicitCustomCellColumnIds:f,fillMinWidth:S,flexGrow:A,gridMode:r,gridPageSize:K,gridRowOffset:z,onGridActiveRowIndexChange:F,onCellSelectionChange:d$1,getColumnLayout:b,getRowClassName:q,getRowLoadingState:C,infiniteScroll:O,layoutMode:Ce,localSearchValue:ce,onRowClick:G,primeColumnForResize:ye,renderedRows:ee,detailPanel:Ve,topPinnedRows:$,bottomPinnedRows:ae,reorderColumn:we,resetColumnSize:Re,resolvedLabels:X,rowsToRender:he,ScrollArea:Me,ScrollBar:c,sentinelRef:W,setDraftValues:j,shouldRenderInitialLoading:J,stateOverlayNode:Oe,stickyHeader:U,stripedRows:me,summaryRows:Q,table:_,tableClassName:ie,tableContainerClassName:Ue,Table:_e,TableBody:fe,TableCell:E,TableFooter:ya="tfoot",TableHead:wa,TableHeader:Ra,TableRow:be,tableScrollContainerRef:Be,tableScrollElement:ve,totalRowCount:Ze,uiClassNames:te,virtualPaddingBottom:ea,virtualPaddingTop:aa,visibleLeafColumnCount:ne,visibleLeafColumns:se}){let ha=_.getIsAllPageRowsSelected()?true:_.getIsSomePageRowsSelected()?"indeterminate":false,ta=_.getFilteredRowModel().rows,Sa=N.useMemo(()=>Q.length?ta.map(l=>l.original):[],[ta,Q.length]),Se=_.getHeaderGroups().length,ke=$.length+ee.length+ae.length,[ge,na]=N.useState({row:0,column:0}),la=N.useRef(false),Fe=N.useRef(false),De=N.useMemo(()=>[...$,...ee,...ae],[ae,ee,$]),pe=N.useCallback((l,s)=>{let g=De[l],p=se[s];return g&&p&&!w(p.id)&&p.id!=="__spacer__"?{rowId:g.id,columnId:p.id}:void 0},[De,se]),de=N.useMemo(()=>{if(!o)return;let l=De.findIndex(H=>H.id===o.anchor.rowId),s=De.findIndex(H=>H.id===o.focus.rowId),g=se.findIndex(H=>H.id===o.anchor.columnId),p=se.findIndex(H=>H.id===o.focus.columnId);if(!(l<0||s<0||g<0||p<0))return {firstRow:Math.min(l,s),lastRow:Math.max(l,s),firstColumn:Math.min(g,p),lastColumn:Math.max(g,p)}},[o,De,se]),ka=N.useCallback((l,s)=>!!(de&&l>=de.firstRow&&l<=de.lastRow&&s>=de.firstColumn&&s<=de.lastColumn),[de]),Ea=N.useCallback(l=>{la.current=true,na(l);},[]),Ee=N.useCallback((l,s,g)=>{if(!n)return;let p=pe(l,s);if(!p)return;let H=g&&o?.anchor?o.anchor:p;d$1({anchor:H,focus:p});},[o,n,pe,d$1]),Ha=N.useCallback((l,s,g)=>{!n||l.button!==0||(l.preventDefault(),Fe.current=true,Ee(s,g,l.shiftKey));},[n,Ee]),Na=N.useCallback((l,s,g)=>{!n||!Fe.current||l.buttons!==1||Ee(s,g,true);},[n,Ee]);N.useEffect(()=>{let l=()=>{Fe.current=false;};return window.addEventListener("pointerup",l),()=>window.removeEventListener("pointerup",l)},[]),N.useEffect(()=>{if(!r)return;F?.(ge.row);let l=requestAnimationFrame(()=>{let s=Be.current?.querySelectorAll('[data-dtp-grid-cell="true"]'),g=Array.from(s??[]).find(p=>Number(p.dataset.gridRowIndex)===ge.row&&Number(p.dataset.gridColumnIndex)===ge.column);g&&la.current&&g.focus();});return ()=>cancelAnimationFrame(l)},[ge,r,F,Be]);let Pa=N.useCallback((l,s,g)=>{if(l.defaultPrevented||l.target!==l.currentTarget)return;let p=Math.max(1,K??(Math.floor((ve?.clientHeight||0)/Math.max(1,ve?.querySelector("tr")?.offsetHeight||48))||10)),H=Math.max(0,ke-1),le=Math.max(0,ne-1),Y=s,Z=g;switch(l.key){case "ArrowUp":Y--;break;case "ArrowDown":Y++;break;case "ArrowLeft":Z--;break;case "ArrowRight":Z++;break;case "Home":(l.ctrlKey||l.metaKey)&&(Y=0),Z=0;break;case "End":(l.ctrlKey||l.metaKey)&&(Y=H),Z=le;break;case "PageUp":Y-=p;break;case "PageDown":Y+=p;break;default:return}l.preventDefault();let je={row:Math.min(H,Math.max(0,Y)),column:Math.min(le,Math.max(0,Z))};if(na(je),l.shiftKey&&n){let qe=pe(je.row,je.column),oa=o?.anchor??pe(s,g)??qe;oa&&qe&&d$1({anchor:oa,focus:qe});}},[o,n,ke,pe,K,d$1,ve,ne]),We=(l,s,g)=>{let p=l.original,H=d(p),le=H?{isLoading:true}:C?.(p,s),Y=typeof le=="boolean"?{isLoading:le}:le,Z=H?false:x?.getRowDraggable?.(p)??false;return jsx(Ta,{columnLayouts:u,components:i,currentDensity:T,draftValues:B,editingContext:V,dragAndDrop:x,explicitCustomCellColumnIds:f,getRowClassName:q,groupToggleLabel:l.getIsExpanded()?X.collapseRow:X.expandRow,isDraggable:Z,isDetailExpanded:R===true||!!R[l.id],isEditing:h===l.id,isExpanded:l.getIsExpanded(),isInitialLoadingRow:H,isSelected:l.getIsSelected(),loadingState:Y,onRowClick:G,originalRow:p,pinnedPosition:g,detailPanel:Ve,row:l,rowIndex:s,setDraftValues:j,stripedRows:me,uiClassNames:te,visibleCells:l.getVisibleCells(),visibleLeafColumnCount:ne,gridMode:r,gridRowIndex:s,gridRowAriaIndex:Se+z+s+1,activeGridCell:ge,cellSelectionEnabled:n,isGridCellSelected:ka,onGridCellFocus:Ea,onGridCellKeyDown:Pa,onGridCellPointerDown:Ha,onGridCellPointerEnter:Na},`${g??"center"}-${l.id}`)};return jsxs("div",{"data-dtp-slot":"data-table-table-shell",className:a("relative box-border border-2 border-transparent transition-colors",A?"flex min-h-0 flex-1 flex-col":"h-full",x?.isDragging&&(te.dragActive??"rounded-md border-dashed")),children:[jsx("div",{ref:Be,className:a(A?"flex min-h-0 flex-1 flex-col":"h-full"),children:jsxs(Me,{className:a("rounded-md border",A?"min-h-0 flex-1":"h-full",te.tableContainer,te.tableScrollArea,Ue),children:[jsx("div",{className:"min-h-full",children:jsxs(_e,{"aria-describedby":e,"aria-labelledby":a$1,role:r?"grid":void 0,"aria-colcount":r?ne:void 0,"aria-rowcount":r?Se+(Ze??ke)+Q.length:void 0,className:a("w-full table-fixed border-separate border-spacing-0",ie),style:{minWidth:Ce==="fill"&&S||void 0,width:Ce==="fit"?_.getTotalSize():"100%"},children:[jsx("colgroup",{children:_.getVisibleLeafColumns().map(l=>{let s=b(l.id);return jsx("col",{style:s.colStyle},l.id)})}),jsx(Ra,{role:r?"rowgroup":void 0,className:a(U?te.tableStickyHeader??"sticky top-0 z-30 backdrop-blur":void 0),children:_.getHeaderGroups().map(l=>jsx(be,{role:r?"row":void 0,"aria-rowindex":r?l.depth+1:void 0,children:l.headers.map(s=>jsx(Ca,{columnGroupHeaderHeight:D,currentDensity:T,currentSorting:t,dir:I,draggedColumnIdRef:L,enableColumnReordering:v,enableColumnResizing:k,header:s,headerGroupHeaders:l.headers,layout:rt(s,b),primeColumnForResize:ye,reorderColumn:we,resizeColumnLabel:X.resizeColumn(typeof s.column.columnDef.header=="string"?s.column.columnDef.header:s.column.id),resetColumnSize:Re,selectionState:s.column.id==="__select__"?ha:void 0,TableHead:wa,uiClassNames:te,gridMode:r,gridColumnIndex:s.isPlaceholder||s.subHeaders.length?void 0:_.getVisibleLeafColumns().findIndex(g=>g.id===s.column.id)+1},s.id))},l.id))}),jsx(fe,{role:r?"rowgroup":void 0,children:$.length||ee.length||ae.length?jsxs(Fragment,{children:[$.map((l,s)=>We(l,s,"top")),aa>0?jsx(be,{"aria-hidden":"true",role:r?"presentation":void 0,children:jsx(E,{colSpan:Math.max(1,ne),className:"border-b-0 p-0",style:{height:aa}})}):null,he.map(({row:l,rowIndex:s})=>We(l,s+$.length)),ea>0?jsx(be,{"aria-hidden":"true",role:r?"presentation":void 0,children:jsx(E,{colSpan:Math.max(1,ne),className:"border-b-0 p-0",style:{height:ea}})}):null,ae.map((l,s)=>We(l,$.length+ee.length+s,"bottom"))]}):jsx(be,{role:r?"row":void 0,"aria-rowindex":r?Se+1:void 0,children:jsx(E,{role:r?"gridcell":void 0,"aria-colindex":r?1:void 0,colSpan:Math.max(1,ne),className:"h-full grow",children:jsx("div",{className:"flex h-full min-h-full w-full grow items-center justify-center",children:M??jsx(m,{title:ce?X.noMatchingRowsTitle:X.noRowsTitle,description:ce?X.noMatchingRowsDescription:X.noRowsDescription})})})})}),Q.length?jsx(ya,{role:r?"rowgroup":void 0,children:Q.map((l,s)=>jsx(be,{role:r?"row":void 0,"aria-rowindex":r?Se+(Ze??ke)+s+1:void 0,children:se.map((g,p)=>{let H=l.cells[g.id]??(p===0?l.label:null);return jsx(E,{role:r?"gridcell":void 0,"aria-colindex":r?p+1:void 0,className:a("border-b font-medium",te.cellBorder),children:typeof H=="function"?H({rows:Sa,columnId:g.id}):H},`${l.key}-${g.id}`)})},l.key))}):null]})}),O?.enabled&&ee.length&&!J?jsx("div",{className:"px-4 pb-4",children:jsx("div",{ref:W,className:"h-4 w-full"})}):null,jsx(c,{orientation:"horizontal"})]})}),Oe]})}function rt(e,a){let i=a(e.column.id);if(e.isPlaceholder||!e.subHeaders.length)return i;let o=e.getLeafHeaders().filter(D=>!D.subHeaders.length).map(D=>a(D.column.id)),n=o[0]?.fixedSide;if(!n||!o.every(D=>D.fixedSide===n))return i;let u=n==="left"?o[0]:o.at(-1);return {...i,fixedSide:n,headerStyle:u?.headerStyle?{left:u.headerStyle.left,right:u.headerStyle.right}:void 0,pinnedClassName:u?.pinnedClassName}}export{dt as a,mt as b,Ta as c,Ca as d,Ut as e};//# sourceMappingURL=chunk-THSY57Y7.js.map +//# sourceMappingURL=chunk-THSY57Y7.js.map \ No newline at end of file diff --git a/dist/chunk-THSY57Y7.js.map b/dist/chunk-THSY57Y7.js.map new file mode 100644 index 0000000..f2f1a33 --- /dev/null +++ b/dist/chunk-THSY57Y7.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/use-row-editing.tsx","../src/core/data-table/data-table-virtual-row-measurement.tsx","../src/core/data-table/data-table-cell-content.tsx","../src/core/data-table/data-table-body-row.tsx","../src/core/data-table/data-table-header-cell.tsx","../src/core/data-table/data-table-table-panel.tsx"],"names":["useRowEditing","columns","editableRows","onError","editingRowId","setEditingRowId","P","draftValues","setDraftValues","draftValuesRef","originalDraftValues","setOriginalDraftValues","editErrors","setEditErrors","isSavingEdit","setIsSavingEdit","isEditDirty","areDraftValuesEqual","cancelEditing","startEditingRow","row","rowId","initialValues","defaultDraftValues","saveEdit","draftSnapshot","rollback","validation","validationErrors","normalizeEditValidationErrors","optimisticResult","error","clearEditError","columnId","current","next","getDataTableLeafColumns","draft","column","renderEditableCell","context","components","editing","Checkbox","Input","meta","accessorKey","draftValue","setDraftValue","value","handleKeyDown","event","inputType","getEditableInputType","jsxs","jsx","checked","getEditableInputValue","rawValue","parsedValue","parseEditableInputValue","left","right","keys","key","type","previousValue","DataTableVirtualRowMeasurementContext","Le","DataTableVirtualRowMeasurementProvider","children","measureRow","useDataTableVirtualRowMeasurement","renderDataTableCellContent","classNames","options","hasCustomCell","renderedCellContent","flexRender","hasComplexRenderedContent","isComplexRenderedCellContent","resolvedOverflow","resolveDataTableCellOverflow","cn","getCellOverflowClassName","IconClock","formatDateValue","content","formatCellValue","useCustomOverflowDefaults","overflow","pa","DataTableBodyRowInner","columnLayouts","currentDensity","editingContext","dragAndDrop","explicitCustomCellColumnIds","getRowClassName","groupToggleLabel","gridMode","gridRowAriaIndex","gridRowIndex","activeGridCell","cellSelectionEnabled","isGridCellSelected","onGridCellFocus","onGridCellKeyDown","onGridCellPointerDown","onGridCellPointerEnter","isDraggable","isDetailExpanded","isEditing","isExpanded","isInitialLoadingRow","isSelected","loadingState","onRowClick","pinnedPosition","originalRow","detailPanel","rowIndex","stripedRows","uiClassNames","visibleCells","visibleLeafColumnCount","Skeleton","TableCell","TableRow","virtualRowMeasurement","measureElement","firstDataColumnId","cell","Ge","isDataTableInteractiveTarget","columnIndex","cellContext","layout","isSelectionColumn","isExpansionColumn","isActionsColumn","isSpacerColumn","hideClassName","hideOnClassName","cellClassName","isDataTableLoadingRow","isCellSelected","getDensityCellClassName","cellAlignClassName","areDataTableBodyRowsEqual","previous","sameLoadingState","sameVisibleCells","sameColumnLayouts","index","nextCell","cells","previousLayout","nextLayout","sameCellStyle","DataTableBodyRow","DataTableHeaderCellInner","columnGroupHeaderHeight","currentSorting","dir","draggedColumnIdRef","enableColumnReordering","enableColumnResizing","gridColumnIndex","header","headerGroupHeaders","primeColumnForResize","reorderColumn","resizeColumnLabel","resetColumnSize","TableHead","headerContentId","Ke","isColumnGroup","groupDefinition","canSort","sortingState","sortingIndex","sort","canReorderColumn","getDensityHeaderClassName","headerAlignClassName","sourceColumnId","headers","item","isUtilityColumnId","currentIndex","target","Fragment","IconChevronDown","IconSelector","getHeaderMaximumSize","getHeaderMinimumSize","leafHeader","getResizableLeafHeaders","grows","resizeHeaderBy","areDataTableHeaderCellsEqual","sameSubHeaders","sameSorting","sameHeaderGroupHeaders","sameHeaderLayout","total","delta","leafHeaders","deltaPerLeaf","minimum","maximum","nextSort","DataTableHeaderCell","DataTableTablePanel","ariaDescribedBy","ariaLabelledBy","bodyRowComponents","cellSelection","currentDetailExpanded","DataTableEmptyState","emptyNode","fillMinWidth","flexGrow","gridPageSize","gridRowOffset","onGridActiveRowIndexChange","onCellSelectionChange","getColumnLayout","getRowLoadingState","infiniteScroll","layoutMode","localSearchValue","renderedRows","topPinnedRows","bottomPinnedRows","resolvedLabels","rowsToRender","ScrollArea","ScrollBar","sentinelRef","shouldRenderInitialLoading","stateOverlayNode","stickyHeader","summaryRows","table","tableClassName","tableContainerClassName","Table","TableBody","TableFooter","TableHeader","tableScrollContainerRef","tableScrollElement","totalRowCount","virtualPaddingBottom","virtualPaddingTop","visibleLeafColumns","selectionState","filteredRows","summarySourceRows","headerRowCount","displayRowCount","activeCell","setActiveCell","shouldRestoreGridFocusRef","pointerSelectingRef","gridRows","getGridCoordinate","selectedBounds","anchorRow","focusRow","anchorColumn","focusColumn","handleGridCellFocus","selectGridCell","extend","focus","anchor","handleGridCellPointerDown","handleGridCellPointerEnter","stopSelecting","frame","moveGridFocus","pageRows","lastRow","lastColumn","nextRow","nextColumn","renderBodyRow","resolvedLoadingState","headerGroup","getHeaderLayout","summaryRow","summaryIndex","columnLayout","leafLayouts","fixedSide","edgeLayout"],"mappings":"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","file":"chunk-THSY57Y7.js","sourcesContent":["import * as React from \"react\";\nimport type { CellContext } from \"@tanstack/react-table\";\nimport type {\n DataTableColumnDef,\n DataTableColumnType,\n DataTableEditableRowsConfig,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\nimport { getDataTableLeafColumns } from \"./data-table-utils\";\n\nexport function useRowEditing({\n columns,\n editableRows,\n onError,\n}: {\n columns: Array>;\n editableRows: DataTableEditableRowsConfig | undefined;\n onError?: (error: unknown, row: TData) => void;\n}) {\n const [editingRowId, setEditingRowId] = React.useState(null);\n const [draftValues, setDraftValues] = React.useState<\n Record\n >({});\n const draftValuesRef = React.useRef(draftValues);\n const [originalDraftValues, setOriginalDraftValues] = React.useState<\n Record\n >({});\n const [editErrors, setEditErrors] = React.useState>(\n {},\n );\n const [isSavingEdit, setIsSavingEdit] = React.useState(false);\n const isEditDirty = React.useMemo(\n () => !areDraftValuesEqual(draftValues, originalDraftValues),\n [draftValues, originalDraftValues],\n );\n\n React.useEffect(() => {\n draftValuesRef.current = draftValues;\n }, [draftValues]);\n\n const cancelEditing = React.useCallback(() => {\n setEditingRowId(null);\n setDraftValues({});\n setEditErrors({});\n setOriginalDraftValues({});\n }, []);\n\n const startEditingRow = React.useCallback(\n (row: TData, rowId: string) => {\n const initialValues =\n editableRows?.getInitialValues?.(row) ??\n defaultDraftValues(row, columns);\n setOriginalDraftValues({ ...initialValues });\n setDraftValues(initialValues);\n setEditErrors({});\n setEditingRowId(rowId);\n },\n [columns, editableRows],\n );\n\n const saveEdit = React.useCallback(\n async (row: TData) => {\n if (!editableRows) {\n return false;\n }\n\n setIsSavingEdit(true);\n const draftSnapshot = { ...draftValuesRef.current };\n let rollback: (() => void) | undefined;\n try {\n const validation = await editableRows.validateRow?.(\n row,\n draftSnapshot,\n );\n const validationErrors = normalizeEditValidationErrors(validation);\n if (Object.keys(validationErrors).length > 0) {\n setEditErrors(validationErrors);\n return false;\n }\n\n setEditErrors({});\n const optimisticResult = editableRows.onOptimisticUpdate?.(\n row,\n draftSnapshot,\n );\n rollback =\n typeof optimisticResult === \"function\"\n ? optimisticResult\n : undefined;\n await editableRows.onSaveRow(row, draftSnapshot);\n editableRows.onSaveSuccess?.(row, draftSnapshot);\n React.startTransition(cancelEditing);\n return true;\n } catch (error) {\n try {\n rollback?.();\n } catch {\n // Preserve the original save error for the public error callbacks.\n }\n editableRows.onSaveError?.(error, row, draftSnapshot);\n onError?.(error, row);\n return false;\n } finally {\n setIsSavingEdit(false);\n }\n },\n [cancelEditing, editableRows, onError],\n );\n const clearEditError = React.useCallback((columnId: string) => {\n setEditErrors((current) => {\n if (!current[columnId] && !current._row) {\n return current;\n }\n const next = { ...current };\n delete next[columnId];\n delete next._row;\n return next;\n });\n }, []);\n\n return {\n cancelEditing,\n clearEditError,\n draftValues,\n editErrors,\n editingRowId,\n isEditDirty,\n isSavingEdit,\n saveEdit,\n setDraftValues,\n setEditingRowId,\n startEditingRow,\n };\n}\n\nfunction defaultDraftValues(\n row: TData,\n columns: Array>,\n) {\n return getDataTableLeafColumns(columns).reduce>(\n (draft, { column }) => {\n if (\"accessorKey\" in column && typeof column.accessorKey === \"string\") {\n draft[column.accessorKey] = (row as Record)[\n column.accessorKey\n ];\n }\n return draft;\n },\n {},\n );\n}\n\nexport function renderEditableCell(\n context: CellContext,\n draftValues: Record,\n setDraftValues: React.Dispatch>>,\n components: Pick,\n editing?: {\n cancel: () => void;\n commit: () => void;\n errors: Record;\n isDirty: boolean;\n isPending: boolean;\n cancelOnEscape: boolean;\n commitOnEnter: boolean;\n onValueChange: (columnId: string) => void;\n },\n) {\n const { Checkbox, Input } = components;\n const column = context.column.columnDef as DataTableColumnDef;\n const meta = column.meta;\n const accessorKey =\n \"accessorKey\" in column && typeof column.accessorKey === \"string\"\n ? column.accessorKey\n : context.column.id;\n const draftValue = draftValues[accessorKey];\n const error =\n editing?.errors[accessorKey] ??\n editing?.errors[context.column.id] ??\n editing?.errors._row;\n const setDraftValue = (value: unknown) => {\n editing?.onValueChange(accessorKey);\n setDraftValues((current) => ({\n ...current,\n [accessorKey]: value,\n }));\n };\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === \"Escape\" && editing?.cancelOnEscape) {\n event.preventDefault();\n editing.cancel();\n } else if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n editing?.commitOnEnter\n ) {\n event.preventDefault();\n editing.commit();\n }\n };\n\n if (meta?.renderEditCell) {\n return meta.renderEditCell({\n cell: context,\n row: context.row.original,\n value: context.getValue(),\n draftValue,\n error,\n isDirty: editing?.isDirty ?? false,\n isPending: editing?.isPending ?? false,\n setDraftValue,\n });\n }\n\n const inputType = getEditableInputType(meta?.type, draftValue);\n\n if (typeof draftValue === \"boolean\") {\n return (\n
    \n {\n setDraftValue(checked === true);\n }}\n onKeyDown={handleKeyDown}\n />\n {error ? (\n \n {error}\n \n ) : null}\n
    \n );\n }\n\n return (\n
    \n ) => {\n const rawValue = event.target.value;\n const parsedValue = meta?.parseEditValue\n ? meta.parseEditValue(rawValue, context)\n : parseEditableInputValue(rawValue, inputType, draftValue);\n setDraftValue(parsedValue);\n }}\n onKeyDown={handleKeyDown}\n />\n {error ? (\n \n {error}\n \n ) : null}\n
    \n );\n}\n\nfunction normalizeEditValidationErrors(\n value: void | string | Record,\n) {\n if (!value) {\n return {};\n }\n return typeof value === \"string\" ? { _row: value } : value;\n}\n\nfunction areDraftValuesEqual(\n left: Record,\n right: Record,\n) {\n const keys = new Set([...Object.keys(left), ...Object.keys(right)]);\n return Array.from(keys).every((key) => Object.is(left[key], right[key]));\n}\n\nfunction getEditableInputType(\n type: DataTableColumnType | undefined,\n value: unknown,\n) {\n if (type === \"numeric\" || typeof value === \"number\") {\n return \"number\";\n }\n\n if (type === \"date\" || value instanceof Date) {\n return \"datetime-local\";\n }\n\n return \"text\";\n}\n\nfunction getEditableInputValue(value: unknown, inputType = \"text\") {\n if (value == null) {\n return \"\";\n }\n\n if (value instanceof Date) {\n return inputType === \"datetime-local\"\n ? value.toISOString().slice(0, 16)\n : value.toISOString();\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n return \"\";\n}\n\nfunction parseEditableInputValue(\n value: string,\n inputType: string,\n previousValue: unknown,\n) {\n if (inputType === \"number\") {\n return value === \"\" ? null : Number(value);\n }\n\n if (inputType === \"datetime-local\") {\n if (!value) {\n return null;\n }\n return previousValue instanceof Date ? new Date(value) : value;\n }\n\n return value;\n}\n","import * as React from \"react\";\n\nconst DataTableVirtualRowMeasurementContext = React.createContext<\n ((element: HTMLTableRowElement | null) => void) | undefined\n>(undefined);\n\nexport function DataTableVirtualRowMeasurementProvider({\n children,\n measureRow,\n}: {\n children: React.ReactNode;\n measureRow: ((element: HTMLTableRowElement | null) => void) | undefined;\n}) {\n return (\n \n {children}\n \n );\n}\n\nexport function useDataTableVirtualRowMeasurement():\n | ((element: HTMLTableRowElement | null) => void)\n | undefined {\n return React.useContext(DataTableVirtualRowMeasurementContext);\n}\n","import * as React from \"react\";\nimport { flexRender, type CellContext } from \"@tanstack/react-table\";\nimport { IconClock } from \"../icons\";\nimport type {\n DataTableCellOverflow,\n DataTableColumnDef,\n} from \"../types\";\nimport type { DataTableUiClassNames } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\n\nexport function renderDataTableCellContent(\n context: CellContext,\n classNames?: DataTableUiClassNames,\n options?: {\n hasCustomCell?: boolean;\n useCustomOverflowDefaults?: boolean;\n },\n) {\n const column = context.column.columnDef as DataTableColumnDef;\n const meta = column.meta;\n const value = context.getValue();\n const hasCustomCell = options?.hasCustomCell ?? false;\n const renderedCellContent = hasCustomCell && column.cell\n ? flexRender(column.cell, context)\n : undefined;\n const hasComplexRenderedContent = isComplexRenderedCellContent(\n renderedCellContent,\n );\n const resolvedOverflow = resolveDataTableCellOverflow({\n context,\n useCustomOverflowDefaults: options?.useCustomOverflowDefaults ?? false,\n value,\n });\n\n if (meta?.type === \"date\" && !hasCustomCell) {\n return (\n \n \n {formatDateValue(value)}\n \n );\n }\n\n const content =\n renderedCellContent !== undefined &&\n renderedCellContent !== null &&\n renderedCellContent !== \"\"\n ? renderedCellContent\n : value == null || value === \"\"\n ? -\n : formatCellValue(value);\n\n return (\n *]:max-w-full [&>*]:min-w-0\",\n )}\n >\n {content}\n \n );\n}\n\nfunction resolveDataTableCellOverflow({\n context,\n useCustomOverflowDefaults,\n value,\n}: {\n context: CellContext;\n useCustomOverflowDefaults: boolean;\n value: unknown;\n}): DataTableCellOverflow {\n const column = context.column.columnDef as DataTableColumnDef;\n const resolvedOverflow =\n typeof column.meta?.overflow === \"function\"\n ? column.meta.overflow({\n row: context.row.original,\n value,\n })\n : column.meta?.overflow;\n\n if (resolvedOverflow) {\n return resolvedOverflow;\n }\n\n return useCustomOverflowDefaults ? \"clip\" : \"truncate\";\n}\n\nfunction getCellOverflowClassName(overflow: DataTableCellOverflow) {\n switch (overflow) {\n case \"clip\":\n return \"block overflow-hidden whitespace-nowrap\";\n case \"wrap\":\n return \"block overflow-hidden whitespace-normal break-words\";\n case \"visible\":\n return \"block overflow-visible whitespace-normal\";\n case \"truncate\":\n default:\n return \"block overflow-hidden text-ellipsis whitespace-nowrap\";\n }\n}\n\nfunction isComplexRenderedCellContent(content: React.ReactNode) {\n if (content == null) {\n return false;\n }\n\n return (\n React.isValidElement(content) ||\n Array.isArray(content) ||\n typeof content === \"object\"\n );\n}\n\nfunction formatDateValue(value: unknown) {\n if (typeof value === \"number\") {\n return new Date(value * 1000).toLocaleString();\n }\n\n if (typeof value === \"string\" && value) {\n return value;\n }\n\n return \"-\";\n}\n\nfunction formatCellValue(value: unknown) {\n if (value instanceof Date) {\n return value.toLocaleString();\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value);\n } catch {\n return \"-\";\n }\n}\n","import * as React from \"react\";\nimport { flexRender, type Cell, type Row } from \"@tanstack/react-table\";\nimport type { RowPinningPosition } from \"@tanstack/react-table\";\nimport type {\n DataTableColumnDef,\n DataTableDensity,\n DataTableProps,\n DataTableRowLoadingState,\n} from \"../types\";\nimport type { DataTableUiClassNames, DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport { renderDataTableCellContent } from \"./data-table-cell-content\";\nimport type { DataTableColumnLayout } from \"./use-column-layout\";\nimport {\n getDensityCellClassName,\n isDataTableInteractiveTarget,\n isDataTableLoadingRow,\n} from \"./data-table-utils\";\nimport { renderEditableCell } from \"./use-row-editing\";\nimport { useDataTableVirtualRowMeasurement } from \"./data-table-virtual-row-measurement\";\nimport { cellAlignClassName, hideOnClassName } from \"../types\";\n\nexport type DataTableRowEditingContext = {\n cancel: () => void;\n clearError: (columnId: string) => void;\n commit: (row: TData) => void;\n errors: Record;\n isDirty: boolean;\n isPending: boolean;\n cancelOnEscape: boolean;\n commitOnEnter: boolean;\n};\n\ntype DataTableBodyRowProps = {\n columnLayouts: ReadonlyMap;\n components: Pick<\n DataTableUiKit,\n \"Checkbox\" | \"Input\" | \"Skeleton\" | \"TableCell\" | \"TableRow\"\n >;\n currentDensity: DataTableDensity;\n draftValues: Record;\n editingContext?: DataTableRowEditingContext;\n dragAndDrop: DataTableProps[\"dragAndDrop\"];\n explicitCustomCellColumnIds: ReadonlySet;\n getRowClassName: DataTableProps[\"getRowClassName\"];\n groupToggleLabel: string;\n gridMode: boolean;\n gridRowAriaIndex: number;\n gridRowIndex: number;\n activeGridCell: { row: number; column: number };\n cellSelectionEnabled: boolean;\n isGridCellSelected: (row: number, column: number) => boolean;\n onGridCellFocus: (cell: { row: number; column: number }) => void;\n onGridCellKeyDown: (\n event: React.KeyboardEvent,\n row: number,\n column: number,\n ) => void;\n onGridCellPointerDown: (\n event: React.PointerEvent,\n row: number,\n column: number,\n ) => void;\n onGridCellPointerEnter: (\n event: React.PointerEvent,\n row: number,\n column: number,\n ) => void;\n isDraggable: boolean;\n isDetailExpanded: boolean;\n isEditing: boolean;\n isExpanded: boolean;\n isInitialLoadingRow: boolean;\n isSelected: boolean;\n loadingState: DataTableRowLoadingState | undefined;\n onRowClick: DataTableProps[\"onRowClick\"];\n pinnedPosition?: Exclude;\n originalRow: TData;\n detailPanel: DataTableProps[\"detailPanel\"];\n row: Row;\n rowIndex: number;\n setDraftValues: React.Dispatch>>;\n stripedRows: boolean;\n uiClassNames: DataTableUiClassNames;\n visibleCells: Array>;\n visibleLeafColumnCount: number;\n};\n\nfunction DataTableBodyRowInner({\n columnLayouts,\n components,\n currentDensity,\n draftValues,\n editingContext,\n dragAndDrop,\n explicitCustomCellColumnIds,\n getRowClassName,\n groupToggleLabel,\n gridMode,\n gridRowAriaIndex,\n gridRowIndex,\n activeGridCell,\n cellSelectionEnabled,\n isGridCellSelected,\n onGridCellFocus,\n onGridCellKeyDown,\n onGridCellPointerDown,\n onGridCellPointerEnter,\n isDraggable,\n isDetailExpanded,\n isEditing,\n isExpanded,\n isInitialLoadingRow,\n isSelected,\n loadingState,\n onRowClick,\n pinnedPosition,\n originalRow,\n detailPanel,\n row,\n rowIndex,\n setDraftValues,\n stripedRows,\n uiClassNames,\n visibleCells,\n visibleLeafColumnCount,\n}: DataTableBodyRowProps) {\n const { Checkbox, Input, Skeleton, TableCell, TableRow } = components;\n const virtualRowMeasurement = useDataTableVirtualRowMeasurement();\n const measureElement = pinnedPosition ? undefined : virtualRowMeasurement;\n const firstDataColumnId = visibleCells.find(\n (cell) => !columnLayouts.get(cell.column.id)?.isUtilityColumn,\n )?.column.id;\n\n return (\n \n 0 ? row.depth : undefined\n }\n data-dtp-slot={\n pinnedPosition ? \"data-table-pinned-row\" : \"data-table-row\"\n }\n data-row-pinned={pinnedPosition}\n data-row-grouped={row.getIsGrouped() || undefined}\n draggable={isInitialLoadingRow ? false : isDraggable}\n data-loading={loadingState?.isLoading || undefined}\n data-row-index={isInitialLoadingRow ? undefined : rowIndex}\n data-row-parity={\n stripedRows && !isInitialLoadingRow\n ? rowIndex % 2 === 0\n ? \"odd\"\n : \"even\"\n : undefined\n }\n data-state={\n isInitialLoadingRow ? undefined : isSelected ? \"selected\" : undefined\n }\n role={gridMode ? \"row\" : undefined}\n aria-rowindex={gridMode ? gridRowAriaIndex : undefined}\n tabIndex={\n !gridMode && onRowClick && !isInitialLoadingRow ? 0 : undefined\n }\n className={cn(\n !isInitialLoadingRow &&\n getRowClassName?.(originalRow, {\n row: originalRow,\n rowId: row.id,\n rowIndex,\n isEditing,\n isExpanded,\n isLoading: Boolean(loadingState?.isLoading),\n isSelected,\n pinnedPosition: pinnedPosition ?? false,\n }),\n uiClassNames.row,\n pinnedPosition === \"top\" &&\n cn(\"border-b-2\", uiClassNames.rowPinnedTop),\n pinnedPosition === \"bottom\" &&\n cn(\"border-t-2\", uiClassNames.rowPinnedBottom),\n stripedRows &&\n !isInitialLoadingRow &&\n (rowIndex % 2 === 0\n ? uiClassNames.rowOdd\n : uiClassNames.rowEven),\n isSelected && !isInitialLoadingRow && uiClassNames.rowSelected,\n onRowClick && !isInitialLoadingRow && \"cursor-pointer\",\n isInitialLoadingRow && \"pointer-events-none\",\n )}\n onClick={(event: React.MouseEvent) => {\n if (isInitialLoadingRow) {\n return;\n }\n\n if (isDataTableInteractiveTarget(event.target, event.currentTarget)) {\n return;\n }\n\n if (gridMode && cellSelectionEnabled) return;\n\n void onRowClick?.({ row: originalRow, rowId: row.id });\n }}\n onKeyDown={(event: React.KeyboardEvent) => {\n if (\n isInitialLoadingRow ||\n !onRowClick ||\n (event.key !== \"Enter\" && event.key !== \" \")\n ) {\n return;\n }\n\n if (isDataTableInteractiveTarget(event.target, event.currentTarget)) {\n return;\n }\n\n event.preventDefault();\n void onRowClick({ row: originalRow, rowId: row.id });\n }}\n onDragStart={(event: React.DragEvent) => {\n if (isInitialLoadingRow) {\n return;\n }\n\n dragAndDrop?.onRowDragStart?.({\n row: originalRow,\n rowId: row.id,\n event,\n });\n }}\n onDragEnd={(event: React.DragEvent) => {\n if (isInitialLoadingRow) {\n return;\n }\n\n dragAndDrop?.onRowDragEnd?.({\n row: originalRow,\n rowId: row.id,\n event,\n });\n }}\n >\n {visibleCells.map((cell, columnIndex) => {\n const meta = (\n cell.column.columnDef as DataTableColumnDef\n ).meta;\n const cellContext = cell.getContext();\n const value = cell.getValue();\n const layout = columnLayouts.get(cell.column.id);\n const isSelectionColumn = layout?.isSelectionColumn ?? false;\n const isExpansionColumn = layout?.isExpansionColumn ?? false;\n const isActionsColumn = layout?.isActionsColumn ?? false;\n const isSpacerColumn = layout?.isSpacerColumn ?? false;\n const hideClassName = hideOnClassName(meta?.hideOn);\n const cellClassName =\n isInitialLoadingRow || isDataTableLoadingRow(originalRow)\n ? undefined\n : typeof meta?.cellClassName === \"function\"\n ? meta.cellClassName({\n row: originalRow,\n value,\n })\n : meta?.cellClassName;\n const isCellSelected =\n gridMode && cellSelectionEnabled &&\n !isInitialLoadingRow &&\n isGridCellSelected(gridRowIndex, columnIndex);\n\n return (\n onGridCellFocus({ row: gridRowIndex, column: columnIndex })\n : undefined\n }\n onKeyDown={\n gridMode\n ? (event: React.KeyboardEvent) => {\n if (event.target !== event.currentTarget) {\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.currentTarget.focus();\n }\n return;\n }\n onGridCellKeyDown(event, gridRowIndex, columnIndex);\n }\n : undefined\n }\n onPointerDown={\n gridMode &&\n cellSelectionEnabled &&\n !layout?.isUtilityColumn &&\n !isSpacerColumn\n ? (event: React.PointerEvent) => {\n if (isDataTableInteractiveTarget(event.target, event.currentTarget)) return;\n event.currentTarget.focus();\n onGridCellPointerDown(event, gridRowIndex, columnIndex);\n }\n : undefined\n }\n onPointerEnter={\n gridMode &&\n cellSelectionEnabled &&\n !layout?.isUtilityColumn &&\n !isSpacerColumn\n ? (event: React.PointerEvent) => {\n if (isDataTableInteractiveTarget(event.target, event.currentTarget)) return;\n onGridCellPointerEnter(event, gridRowIndex, columnIndex);\n }\n : undefined\n }\n className={cn(\n \"border-b\",\n getDensityCellClassName(currentDensity),\n uiClassNames.cellBorder,\n isCellSelected && uiClassNames.cellSelected,\n layout?.utilityClassName,\n layout?.isSpacerColumn && \"border-b-0 bg-transparent p-0\",\n layout?.pinnedClassName,\n hideClassName,\n cellAlignClassName(cellContext),\n meta?.responsiveClassName,\n cellClassName,\n )}\n style={layout?.cellStyle}\n >\n 0 && cell.column.id === firstDataColumnId\n ? { paddingInlineStart: `${row.depth}rem` }\n : undefined\n }\n >\n {loadingState?.isLoading ? (\n (meta?.skeleton?.(cellContext) ??\n loadingState.skeleton ?? (\n \n ))\n ) : isEditing &&\n cell.column.id !== \"__select__\" &&\n cell.column.id !== \"__expand__\" &&\n cell.column.id !== \"__actions__\" ? (\n renderEditableCell(\n cellContext,\n draftValues,\n setDraftValues,\n {\n Checkbox,\n Input,\n },\n editingContext\n ? {\n cancel: editingContext.cancel,\n cancelOnEscape: editingContext.cancelOnEscape,\n commit: () => editingContext.commit(originalRow),\n commitOnEnter: editingContext.commitOnEnter,\n errors: editingContext.errors,\n isDirty: editingContext.isDirty,\n isPending: editingContext.isPending,\n onValueChange: editingContext.clearError,\n }\n : undefined,\n )\n ) : row.getIsGrouped() && cell.getIsPlaceholder() ? null : row.getIsGrouped() && cell.getIsGrouped() ? (\n row.toggleExpanded()}\n aria-expanded={row.getIsExpanded()}\n aria-label={groupToggleLabel}\n >\n \n {renderDataTableCellContent(cellContext, uiClassNames, {\n hasCustomCell:\n explicitCustomCellColumnIds.has(cell.column.id),\n useCustomOverflowDefaults:\n explicitCustomCellColumnIds.has(cell.column.id),\n })}\n \n \n ({row.subRows.length})\n \n \n ) : row.getIsGrouped() && cell.getIsAggregated() ? (\n cell.column.columnDef.aggregatedCell\n ? flexRender(cell.column.columnDef.aggregatedCell, cellContext)\n : renderDataTableCellContent(cellContext, uiClassNames, {\n hasCustomCell: false,\n useCustomOverflowDefaults: false,\n })\n ) : (\n renderDataTableCellContent(cellContext, uiClassNames, {\n hasCustomCell:\n explicitCustomCellColumnIds.has(cell.column.id) ||\n isSelectionColumn ||\n isExpansionColumn ||\n isActionsColumn ||\n isSpacerColumn,\n useCustomOverflowDefaults:\n explicitCustomCellColumnIds.has(cell.column.id) ||\n isSelectionColumn ||\n isExpansionColumn ||\n isActionsColumn ||\n isSpacerColumn,\n })\n )}\n \n \n );\n })}\n \n {!isInitialLoadingRow && detailPanel && isDetailExpanded ? (\n \n \n {detailPanel.render({\n row: originalRow,\n rowId: row.id,\n tableRow: row,\n })}\n \n \n ) : null}\n \n );\n}\n\nfunction areDataTableBodyRowsEqual(\n previous: DataTableBodyRowProps,\n next: DataTableBodyRowProps,\n) {\n return (\n previous.row.id === next.row.id &&\n previous.row.original === next.row.original &&\n previous.rowIndex === next.rowIndex &&\n previous.isSelected === next.isSelected &&\n previous.isInitialLoadingRow === next.isInitialLoadingRow &&\n previous.isEditing === next.isEditing &&\n (!previous.isEditing || previous.editingContext === next.editingContext) &&\n previous.isExpanded === next.isExpanded &&\n previous.isDraggable === next.isDraggable &&\n sameLoadingState(previous.loadingState, next.loadingState) &&\n sameVisibleCells(previous.visibleCells, next.visibleCells) &&\n previous.components === next.components &&\n sameColumnLayouts(\n previous.columnLayouts,\n next.columnLayouts,\n next.visibleCells,\n ) &&\n previous.currentDensity === next.currentDensity &&\n previous.detailPanel === next.detailPanel &&\n previous.isDetailExpanded === next.isDetailExpanded &&\n previous.pinnedPosition === next.pinnedPosition &&\n previous.onRowClick === next.onRowClick &&\n previous.dragAndDrop === next.dragAndDrop &&\n previous.getRowClassName === next.getRowClassName &&\n previous.groupToggleLabel === next.groupToggleLabel &&\n previous.gridMode === next.gridMode &&\n (!next.gridMode ||\n (previous.gridRowAriaIndex === next.gridRowAriaIndex &&\n previous.gridRowIndex === next.gridRowIndex &&\n previous.activeGridCell.row === next.activeGridCell.row &&\n previous.activeGridCell.column === next.activeGridCell.column &&\n previous.cellSelectionEnabled === next.cellSelectionEnabled &&\n previous.isGridCellSelected === next.isGridCellSelected &&\n previous.onGridCellFocus === next.onGridCellFocus &&\n previous.onGridCellKeyDown === next.onGridCellKeyDown &&\n previous.onGridCellPointerDown === next.onGridCellPointerDown &&\n previous.onGridCellPointerEnter === next.onGridCellPointerEnter)) &&\n previous.stripedRows === next.stripedRows &&\n previous.uiClassNames === next.uiClassNames &&\n previous.explicitCustomCellColumnIds === next.explicitCustomCellColumnIds &&\n (!previous.isEditing || previous.draftValues === next.draftValues)\n );\n}\n\nfunction sameLoadingState(\n previous: DataTableRowLoadingState | undefined,\n next: DataTableRowLoadingState | undefined,\n) {\n return (\n previous?.isLoading === next?.isLoading &&\n previous?.skeleton === next?.skeleton\n );\n}\n\nfunction sameVisibleCells(\n previous: Array>,\n next: Array>,\n) {\n return (\n previous.length === next.length &&\n previous.every((cell, index) => {\n const nextCell = next[index];\n return nextCell?.id === cell.id && nextCell.column.id === cell.column.id;\n })\n );\n}\n\nfunction sameColumnLayouts(\n previous: ReadonlyMap,\n next: ReadonlyMap,\n cells: Array>,\n) {\n return cells.every((cell) => {\n const previousLayout = previous.get(cell.column.id);\n const nextLayout = next.get(cell.column.id);\n\n return (\n previousLayout?.fixedSide === nextLayout?.fixedSide &&\n previousLayout?.isActionsColumn === nextLayout?.isActionsColumn &&\n previousLayout?.isExpansionColumn === nextLayout?.isExpansionColumn &&\n previousLayout?.isSelectionColumn === nextLayout?.isSelectionColumn &&\n previousLayout?.isSpacerColumn === nextLayout?.isSpacerColumn &&\n previousLayout?.isUtilityColumn === nextLayout?.isUtilityColumn &&\n previousLayout?.pinnedClassName === nextLayout?.pinnedClassName &&\n previousLayout?.utilityClassName === nextLayout?.utilityClassName &&\n sameCellStyle(previousLayout?.cellStyle, nextLayout?.cellStyle)\n );\n });\n}\n\nfunction sameCellStyle(\n previous: React.CSSProperties | undefined,\n next: React.CSSProperties | undefined,\n) {\n return (\n previous?.width === next?.width &&\n previous?.minWidth === next?.minWidth &&\n previous?.maxWidth === next?.maxWidth &&\n previous?.left === next?.left &&\n previous?.right === next?.right\n );\n}\n\nexport const DataTableBodyRow = React.memo(\n DataTableBodyRowInner,\n areDataTableBodyRowsEqual,\n) as typeof DataTableBodyRowInner;\n","import * as React from \"react\";\nimport { flexRender } from \"@tanstack/react-table\";\nimport { IconChevronDown, IconSelector } from \"../icons\";\nimport type { Header, SortingState } from \"@tanstack/react-table\";\nimport type {\n DataTableColumnDef,\n DataTableColumnGroupDef,\n DataTableDensity,\n DataTableProps,\n} from \"../types\";\nimport type { DataTableUiClassNames, DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport type { DataTableColumnLayout } from \"./use-column-layout\";\nimport {\n getDensityHeaderClassName,\n isUtilityColumnId,\n} from \"./data-table-utils\";\nimport { headerAlignClassName, hideOnClassName } from \"../types\";\n\ntype DataTableHeaderCellProps = {\n columnGroupHeaderHeight: DataTableProps[\"columnGroupHeaderHeight\"];\n currentDensity: DataTableDensity;\n currentSorting: SortingState;\n dir: NonNullable[\"dir\"]>;\n draggedColumnIdRef: React.MutableRefObject;\n enableColumnReordering: boolean;\n enableColumnResizing: boolean;\n gridColumnIndex?: number;\n gridMode: boolean;\n header: Header;\n headerGroupHeaders: Array>;\n layout: DataTableColumnLayout;\n primeColumnForResize: (columnId: string, currentSize: number) => void;\n reorderColumn: (sourceColumnId: string, targetColumnId: string) => void;\n resizeColumnLabel: string;\n resetColumnSize: (columnId: string) => void;\n // Rendered through flexRender inside the header def; carried as a prop so\n // the memo comparator re-renders the selection header when it changes.\n selectionState?: boolean | \"indeterminate\";\n TableHead: DataTableUiKit[\"TableHead\"];\n uiClassNames: DataTableUiClassNames;\n};\n\nfunction DataTableHeaderCellInner({\n columnGroupHeaderHeight,\n currentDensity,\n currentSorting,\n dir,\n draggedColumnIdRef,\n enableColumnReordering,\n enableColumnResizing,\n gridColumnIndex,\n gridMode,\n header,\n headerGroupHeaders,\n layout,\n primeColumnForResize,\n reorderColumn,\n resizeColumnLabel,\n resetColumnSize,\n TableHead,\n uiClassNames,\n}: DataTableHeaderCellProps) {\n const meta = (header.column.columnDef as DataTableColumnDef)\n .meta;\n const headerContentId = React.useId();\n const isColumnGroup =\n !header.isPlaceholder && header.subHeaders.length > 0;\n const groupDefinition = isColumnGroup\n ? (header.column.columnDef as DataTableColumnGroupDef)\n : undefined;\n const canSort = header.column.getCanSort();\n const sortingState = header.column.getIsSorted();\n const sortingIndex = currentSorting.findIndex(\n (sort) => sort.id === header.column.id,\n );\n const canReorderColumn =\n enableColumnReordering &&\n !header.isPlaceholder &&\n !isColumnGroup &&\n !layout.isUtilityColumn &&\n !layout.isSpacerColumn;\n const hideClassName = hideOnClassName(meta?.hideOn);\n\n return (\n ) => {\n draggedColumnIdRef.current = header.column.id;\n event.dataTransfer.effectAllowed = \"move\";\n }\n : undefined\n }\n onDragOver={\n canReorderColumn\n ? (event: React.DragEvent) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canReorderColumn\n ? (event: React.DragEvent) => {\n event.preventDefault();\n const sourceColumnId = draggedColumnIdRef.current;\n draggedColumnIdRef.current = null;\n if (sourceColumnId) {\n reorderColumn(sourceColumnId, header.column.id);\n }\n }\n : undefined\n }\n onKeyDown={\n canReorderColumn\n ? (event: React.KeyboardEvent) => {\n if (\n !event.altKey ||\n (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\")\n ) {\n return;\n }\n\n event.preventDefault();\n const headers = headerGroupHeaders.filter(\n (item) =>\n !isUtilityColumnId(item.column.id) &&\n item.column.id !== \"__spacer__\",\n );\n const currentIndex = headers.findIndex(\n (item) => item.column.id === header.column.id,\n );\n const target =\n headers[\n (event.key === \"ArrowLeft\") !== (dir === \"rtl\")\n ? currentIndex - 1\n : currentIndex + 1\n ];\n if (target) {\n reorderColumn(header.column.id, target.column.id);\n }\n }\n : undefined\n }\n >\n {header.isPlaceholder ? null : canSort ? (\n \n \n {flexRender(header.column.columnDef.header, header.getContext())}\n \n {sortingState ? (\n <>\n \n {currentSorting.length > 1 && sortingIndex >= 0 ? (\n \n {sortingIndex + 1}\n \n ) : null}\n \n ) : (\n \n )}\n \n ) : (\n layout.isUtilityColumn || layout.isSpacerColumn ? (\n flexRender(header.column.columnDef.header, header.getContext())\n ) : (\n \n {flexRender(header.column.columnDef.header, header.getContext())}\n \n )\n )}\n\n {enableColumnResizing &&\n !header.isPlaceholder &&\n header.column.getCanResize() ? (\n {\n for (const leafHeader of getResizableLeafHeaders(header)) {\n resetColumnSize(leafHeader.column.id);\n }\n }}\n onMouseDown={(event) => {\n for (const leafHeader of getResizableLeafHeaders(header)) {\n primeColumnForResize(\n leafHeader.column.id,\n leafHeader.getSize(),\n );\n }\n header.getResizeHandler()(event);\n }}\n onTouchStart={(event) => {\n for (const leafHeader of getResizableLeafHeaders(header)) {\n primeColumnForResize(\n leafHeader.column.id,\n leafHeader.getSize(),\n );\n }\n header.getResizeHandler()(event);\n }}\n onKeyDown={(event) => {\n if (event.altKey) {\n return;\n }\n if (event.key === \"Home\") {\n event.preventDefault();\n for (const leafHeader of getResizableLeafHeaders(header)) {\n resetColumnSize(leafHeader.column.id);\n }\n return;\n }\n if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n const grows =\n (event.key === \"ArrowRight\") !== (dir === \"rtl\");\n resizeHeaderBy(\n header,\n (grows ? 1 : -1) * (event.shiftKey ? 25 : 10),\n );\n }}\n className={cn(\n \"absolute inset-y-0 z-50 h-full w-3 cursor-col-resize touch-none select-none ltr:right-0 ltr:translate-x-1/2 rtl:left-0 rtl:-translate-x-1/2 after:absolute after:top-0 after:left-1/2 after:h-full after:w-px after:-translate-x-1/2\",\n uiClassNames.resizeHandle ??\n \"after:bg-current after:opacity-20 hover:after:opacity-70\",\n header.column.getIsResizing() &&\n (uiClassNames.resizeHandleActive ?? \"after:opacity-100\"),\n )}\n />\n ) : null}\n \n );\n}\n\nfunction areDataTableHeaderCellsEqual(\n previous: DataTableHeaderCellProps,\n next: DataTableHeaderCellProps,\n) {\n return (\n previous.header.id === next.header.id &&\n previous.header.column.id === next.header.column.id &&\n previous.header.column.columnDef === next.header.column.columnDef &&\n previous.header.colSpan === next.header.colSpan &&\n previous.header.isPlaceholder === next.header.isPlaceholder &&\n sameSubHeaders(previous.header, next.header) &&\n previous.currentDensity === next.currentDensity &&\n previous.columnGroupHeaderHeight === next.columnGroupHeaderHeight &&\n previous.dir === next.dir &&\n previous.enableColumnReordering === next.enableColumnReordering &&\n previous.enableColumnResizing === next.enableColumnResizing &&\n previous.gridMode === next.gridMode &&\n previous.gridColumnIndex === next.gridColumnIndex &&\n previous.TableHead === next.TableHead &&\n previous.uiClassNames === next.uiClassNames &&\n previous.draggedColumnIdRef === next.draggedColumnIdRef &&\n previous.primeColumnForResize === next.primeColumnForResize &&\n previous.reorderColumn === next.reorderColumn &&\n previous.resizeColumnLabel === next.resizeColumnLabel &&\n previous.resetColumnSize === next.resetColumnSize &&\n previous.selectionState === next.selectionState &&\n sameSorting(previous.currentSorting, next.currentSorting) &&\n sameHeaderGroupHeaders(\n previous.headerGroupHeaders,\n next.headerGroupHeaders,\n ) &&\n sameHeaderLayout(previous.layout, next.layout)\n );\n}\n\nfunction getResizableLeafHeaders(header: Header) {\n if (!header.subHeaders.length) {\n return [header];\n }\n\n return header\n .getLeafHeaders()\n .filter((leafHeader) => !leafHeader.subHeaders.length);\n}\n\nfunction getHeaderMinimumSize(header: Header) {\n return getResizableLeafHeaders(header).reduce(\n (total, leafHeader) =>\n total + (leafHeader.column.columnDef.minSize ?? 20),\n 0,\n );\n}\n\nfunction getHeaderMaximumSize(header: Header) {\n return getResizableLeafHeaders(header).reduce(\n (total, leafHeader) =>\n total + (leafHeader.column.columnDef.maxSize ?? Number.MAX_SAFE_INTEGER),\n 0,\n );\n}\n\nfunction resizeHeaderBy(\n header: Header,\n delta: number,\n) {\n const leafHeaders = getResizableLeafHeaders(header);\n const deltaPerLeaf = delta / leafHeaders.length;\n header.getContext().table.setColumnSizing((current) => {\n const next = { ...current };\n\n for (const leafHeader of leafHeaders) {\n const column = leafHeader.column;\n const minimum = column.columnDef.minSize ?? 20;\n const maximum =\n column.columnDef.maxSize ?? Number.MAX_SAFE_INTEGER;\n next[column.id] = Math.min(\n maximum,\n Math.max(minimum, column.getSize() + deltaPerLeaf),\n );\n }\n\n return next;\n });\n}\n\nfunction sameSubHeaders(\n previous: Header,\n next: Header,\n) {\n return (\n previous.subHeaders.length === next.subHeaders.length &&\n previous.subHeaders.every(\n (header, index) => next.subHeaders[index]?.id === header.id,\n )\n );\n}\n\nfunction sameSorting(previous: SortingState, next: SortingState) {\n return (\n previous.length === next.length &&\n previous.every((sort, index) => {\n const nextSort = next[index];\n return nextSort?.id === sort.id && nextSort.desc === sort.desc;\n })\n );\n}\n\nfunction sameHeaderGroupHeaders(\n previous: Array>,\n next: Array>,\n) {\n return (\n previous.length === next.length &&\n previous.every((header, index) => next[index]?.id === header.id)\n );\n}\n\nfunction sameHeaderLayout(\n previous: DataTableColumnLayout,\n next: DataTableColumnLayout,\n) {\n return (\n previous.fixedSide === next.fixedSide &&\n previous.isSpacerColumn === next.isSpacerColumn &&\n previous.isUtilityColumn === next.isUtilityColumn &&\n previous.pinnedClassName === next.pinnedClassName &&\n previous.utilityClassName === next.utilityClassName &&\n previous.headerStyle?.width === next.headerStyle?.width &&\n previous.headerStyle?.minWidth === next.headerStyle?.minWidth &&\n previous.headerStyle?.maxWidth === next.headerStyle?.maxWidth &&\n previous.headerStyle?.left === next.headerStyle?.left &&\n previous.headerStyle?.right === next.headerStyle?.right\n );\n}\n\nexport const DataTableHeaderCell = React.memo(\n DataTableHeaderCellInner,\n areDataTableHeaderCellsEqual,\n) as typeof DataTableHeaderCellInner;\n","import * as React from \"react\";\nimport type {\n Column,\n ExpandedState,\n Header,\n RowPinningPosition,\n Row,\n Table as TanStackTable,\n} from \"@tanstack/react-table\";\nimport type {\n DataTableDensity,\n DataTableCellSelection,\n DataTableProps,\n DataTableRowLoadingState,\n} from \"../types\";\nimport type { DataTableUiClassNames, DataTableUiKit } from \"../ui-kit\";\nimport { cn } from \"../../lib/utils\";\nimport {\n DataTableBodyRow,\n type DataTableRowEditingContext,\n} from \"./data-table-body-row\";\nimport { DataTableHeaderCell } from \"./data-table-header-cell\";\nimport type { DataTableColumnLayout } from \"./use-column-layout\";\nimport { isDataTableLoadingRow, isUtilityColumnId } from \"./data-table-utils\";\nimport type { DataTableLabels } from \"../types\";\n\nexport type DataTableTablePanelProps = {\n ariaDescribedBy: string | undefined;\n ariaLabelledBy: string | undefined;\n bodyRowComponents: Pick<\n DataTableUiKit,\n \"Checkbox\" | \"Input\" | \"Skeleton\" | \"TableCell\" | \"TableRow\"\n >;\n cellSelection: DataTableCellSelection | null;\n cellSelectionEnabled: boolean;\n columnLayouts: ReadonlyMap;\n columnGroupHeaderHeight: DataTableProps[\"columnGroupHeaderHeight\"];\n currentDensity: DataTableDensity;\n currentDetailExpanded: ExpandedState;\n currentSorting: DataTableProps[\"sorting\"];\n dir: NonNullable[\"dir\"]>;\n DataTableEmptyState: React.ElementType;\n dragAndDrop: DataTableProps[\"dragAndDrop\"];\n draggedColumnIdRef: React.RefObject;\n draftValues: Record;\n editingRowId: string | null;\n editingContext?: DataTableRowEditingContext;\n emptyNode: React.ReactNode;\n enableColumnReordering: boolean;\n enableColumnResizing: boolean;\n explicitCustomCellColumnIds: ReadonlySet;\n fillMinWidth: number;\n flexGrow: boolean;\n gridMode: boolean;\n gridPageSize?: number;\n gridRowOffset: number;\n onGridActiveRowIndexChange?: (rowIndex: number) => void;\n onCellSelectionChange: (selection: DataTableCellSelection | null) => void;\n getColumnLayout: (columnId: string) => DataTableColumnLayout;\n getRowClassName: DataTableProps[\"getRowClassName\"];\n getRowLoadingState: DataTableProps[\"getRowLoadingState\"];\n infiniteScroll: DataTableProps[\"infiniteScroll\"];\n layoutMode: \"fill\" | \"fit\";\n localSearchValue: string;\n onRowClick: DataTableProps[\"onRowClick\"];\n primeColumnForResize: (columnId: string, currentSize: number) => void;\n renderedRows: Array>;\n detailPanel: DataTableProps[\"detailPanel\"];\n topPinnedRows: Array>;\n bottomPinnedRows: Array>;\n reorderColumn: (sourceColumnId: string, targetColumnId: string) => void;\n resetColumnSize: (columnId: string) => void;\n resolvedLabels: DataTableLabels;\n rowsToRender: Array<{ row: Row; rowIndex: number }>;\n ScrollArea: DataTableUiKit[\"ScrollArea\"];\n ScrollBar: DataTableUiKit[\"ScrollBar\"];\n sentinelRef: React.RefObject;\n setDraftValues: React.Dispatch>>;\n shouldRenderInitialLoading: boolean;\n stateOverlayNode?: React.ReactNode;\n stickyHeader: boolean;\n stripedRows: boolean;\n summaryRows: NonNullable[\"summaryRows\"]>;\n table: TanStackTable;\n tableClassName: string | undefined;\n tableContainerClassName: string | undefined;\n Table: DataTableUiKit[\"Table\"];\n TableBody: DataTableUiKit[\"TableBody\"];\n TableCell: DataTableUiKit[\"TableCell\"];\n TableFooter: DataTableUiKit[\"TableFooter\"];\n TableHead: DataTableUiKit[\"TableHead\"];\n TableHeader: DataTableUiKit[\"TableHeader\"];\n TableRow: DataTableUiKit[\"TableRow\"];\n tableScrollContainerRef: React.RefObject;\n tableScrollElement?: HTMLElement | null;\n totalRowCount?: number;\n uiClassNames: DataTableUiClassNames;\n viewportHeight?: number;\n virtualization?: DataTableProps[\"virtualization\"];\n virtualPaddingBottom: number;\n virtualPaddingTop: number;\n visibleLeafColumnCount: number;\n visibleLeafColumns: Array>;\n};\n\nexport function DataTableTablePanel({\n ariaDescribedBy,\n ariaLabelledBy,\n bodyRowComponents,\n cellSelection,\n cellSelectionEnabled,\n columnLayouts,\n columnGroupHeaderHeight,\n currentDensity,\n currentDetailExpanded,\n currentSorting = [],\n dir,\n DataTableEmptyState,\n dragAndDrop,\n draggedColumnIdRef,\n draftValues,\n editingRowId,\n editingContext,\n emptyNode,\n enableColumnReordering,\n enableColumnResizing,\n explicitCustomCellColumnIds,\n fillMinWidth,\n flexGrow,\n gridMode,\n gridPageSize,\n gridRowOffset,\n onGridActiveRowIndexChange,\n onCellSelectionChange,\n getColumnLayout,\n getRowClassName,\n getRowLoadingState,\n infiniteScroll,\n layoutMode,\n localSearchValue,\n onRowClick,\n primeColumnForResize,\n renderedRows,\n detailPanel,\n topPinnedRows,\n bottomPinnedRows,\n reorderColumn,\n resetColumnSize,\n resolvedLabels,\n rowsToRender,\n ScrollArea,\n ScrollBar,\n sentinelRef,\n setDraftValues,\n shouldRenderInitialLoading,\n stateOverlayNode,\n stickyHeader,\n stripedRows,\n summaryRows,\n table,\n tableClassName,\n tableContainerClassName,\n Table,\n TableBody,\n TableCell,\n TableFooter = \"tfoot\",\n TableHead,\n TableHeader,\n TableRow,\n tableScrollContainerRef,\n tableScrollElement,\n totalRowCount,\n uiClassNames,\n virtualPaddingBottom,\n virtualPaddingTop,\n visibleLeafColumnCount,\n visibleLeafColumns,\n}: DataTableTablePanelProps) {\n const selectionState: boolean | \"indeterminate\" =\n table.getIsAllPageRowsSelected()\n ? true\n : table.getIsSomePageRowsSelected()\n ? \"indeterminate\"\n : false;\n const filteredRows = table.getFilteredRowModel().rows;\n const summarySourceRows = React.useMemo(\n () =>\n summaryRows.length\n ? filteredRows.map((row) => row.original)\n : [],\n [filteredRows, summaryRows.length],\n );\n const headerRowCount = table.getHeaderGroups().length;\n const displayRowCount =\n topPinnedRows.length + renderedRows.length + bottomPinnedRows.length;\n const [activeCell, setActiveCell] = React.useState({ row: 0, column: 0 });\n const shouldRestoreGridFocusRef = React.useRef(false);\n const pointerSelectingRef = React.useRef(false);\n const gridRows = React.useMemo(\n () => [...topPinnedRows, ...renderedRows, ...bottomPinnedRows],\n [bottomPinnedRows, renderedRows, topPinnedRows],\n );\n const getGridCoordinate = React.useCallback(\n (rowIndex: number, columnIndex: number) => {\n const row = gridRows[rowIndex];\n const column = visibleLeafColumns[columnIndex];\n return row &&\n column &&\n !isUtilityColumnId(column.id) &&\n column.id !== \"__spacer__\"\n ? { rowId: row.id, columnId: column.id }\n : undefined;\n },\n [gridRows, visibleLeafColumns],\n );\n const selectedBounds = React.useMemo(() => {\n if (!cellSelection) return undefined;\n const anchorRow = gridRows.findIndex((row) => row.id === cellSelection.anchor.rowId);\n const focusRow = gridRows.findIndex((row) => row.id === cellSelection.focus.rowId);\n const anchorColumn = visibleLeafColumns.findIndex(\n (column) => column.id === cellSelection.anchor.columnId,\n );\n const focusColumn = visibleLeafColumns.findIndex(\n (column) => column.id === cellSelection.focus.columnId,\n );\n if (anchorRow < 0 || focusRow < 0 || anchorColumn < 0 || focusColumn < 0) return undefined;\n return {\n firstRow: Math.min(anchorRow, focusRow),\n lastRow: Math.max(anchorRow, focusRow),\n firstColumn: Math.min(anchorColumn, focusColumn),\n lastColumn: Math.max(anchorColumn, focusColumn),\n };\n }, [cellSelection, gridRows, visibleLeafColumns]);\n const isGridCellSelected = React.useCallback(\n (rowIndex: number, columnIndex: number) =>\n Boolean(\n selectedBounds &&\n rowIndex >= selectedBounds.firstRow &&\n rowIndex <= selectedBounds.lastRow &&\n columnIndex >= selectedBounds.firstColumn &&\n columnIndex <= selectedBounds.lastColumn,\n ),\n [selectedBounds],\n );\n const handleGridCellFocus = React.useCallback(\n (cell: { row: number; column: number }) => {\n shouldRestoreGridFocusRef.current = true;\n setActiveCell(cell);\n },\n [],\n );\n const selectGridCell = React.useCallback(\n (rowIndex: number, columnIndex: number, extend: boolean) => {\n if (!cellSelectionEnabled) return;\n const focus = getGridCoordinate(rowIndex, columnIndex);\n if (!focus) return;\n const anchor =\n extend && cellSelection?.anchor\n ? cellSelection.anchor\n : focus;\n onCellSelectionChange({ anchor, focus });\n },\n [cellSelection, cellSelectionEnabled, getGridCoordinate, onCellSelectionChange],\n );\n const handleGridCellPointerDown = React.useCallback(\n (event: React.PointerEvent, rowIndex: number, columnIndex: number) => {\n if (!cellSelectionEnabled || event.button !== 0) return;\n // Keep native text/image dragging from taking ownership of the pointer\n // stream before the range reaches its destination cell.\n event.preventDefault();\n pointerSelectingRef.current = true;\n selectGridCell(rowIndex, columnIndex, event.shiftKey);\n },\n [cellSelectionEnabled, selectGridCell],\n );\n const handleGridCellPointerEnter = React.useCallback(\n (event: React.PointerEvent, rowIndex: number, columnIndex: number) => {\n if (!cellSelectionEnabled || !pointerSelectingRef.current || event.buttons !== 1) return;\n selectGridCell(rowIndex, columnIndex, true);\n },\n [cellSelectionEnabled, selectGridCell],\n );\n React.useEffect(() => {\n const stopSelecting = () => { pointerSelectingRef.current = false; };\n window.addEventListener(\"pointerup\", stopSelecting);\n return () => window.removeEventListener(\"pointerup\", stopSelecting);\n }, []);\n\n // Keep focus on the roving cell after sorting, filtering, or a virtual row\n // range changes. A missing target is normal while a virtualizer is rendering.\n React.useEffect(() => {\n if (!gridMode) return;\n onGridActiveRowIndexChange?.(activeCell.row);\n const frame = requestAnimationFrame(() => {\n const cells = tableScrollContainerRef.current?.querySelectorAll(\n '[data-dtp-grid-cell=\"true\"]',\n );\n const target = Array.from(cells ?? []).find(\n (cell) =>\n Number(cell.dataset.gridRowIndex) === activeCell.row &&\n Number(cell.dataset.gridColumnIndex) === activeCell.column,\n );\n if (target && shouldRestoreGridFocusRef.current) {\n target.focus();\n }\n });\n return () => cancelAnimationFrame(frame);\n }, [activeCell, gridMode, onGridActiveRowIndexChange, tableScrollContainerRef]);\n\n const moveGridFocus = React.useCallback(\n (event: React.KeyboardEvent, row: number, column: number) => {\n if (event.defaultPrevented || event.target !== event.currentTarget) return;\n const pageRows = Math.max(\n 1,\n gridPageSize ?? (\n Math.floor(\n (tableScrollElement?.clientHeight || 0) /\n Math.max(1, (tableScrollElement?.querySelector(\"tr\") as HTMLElement | null)?.offsetHeight || 48),\n ) || 10),\n );\n const lastRow = Math.max(0, displayRowCount - 1);\n const lastColumn = Math.max(0, visibleLeafColumnCount - 1);\n let nextRow = row;\n let nextColumn = column;\n switch (event.key) {\n case \"ArrowUp\": nextRow--; break;\n case \"ArrowDown\": nextRow++; break;\n case \"ArrowLeft\": nextColumn--; break;\n case \"ArrowRight\": nextColumn++; break;\n case \"Home\":\n if (event.ctrlKey || event.metaKey) { nextRow = 0; nextColumn = 0; } else nextColumn = 0;\n break;\n case \"End\":\n if (event.ctrlKey || event.metaKey) { nextRow = lastRow; nextColumn = lastColumn; } else nextColumn = lastColumn;\n break;\n case \"PageUp\": nextRow -= pageRows; break;\n case \"PageDown\": nextRow += pageRows; break;\n default: return;\n }\n event.preventDefault();\n const nextCell = {\n row: Math.min(lastRow, Math.max(0, nextRow)),\n column: Math.min(lastColumn, Math.max(0, nextColumn)),\n };\n setActiveCell(nextCell);\n if (event.shiftKey && cellSelectionEnabled) {\n const focus = getGridCoordinate(nextCell.row, nextCell.column);\n const anchor =\n cellSelection?.anchor ?? getGridCoordinate(row, column) ?? focus;\n if (anchor && focus) onCellSelectionChange({ anchor, focus });\n }\n },\n [\n cellSelection,\n cellSelectionEnabled,\n displayRowCount,\n getGridCoordinate,\n gridPageSize,\n onCellSelectionChange,\n tableScrollElement,\n visibleLeafColumnCount,\n ],\n );\n const renderBodyRow = (\n row: Row,\n rowIndex: number,\n pinnedPosition?: Exclude,\n ) => {\n const originalRow = row.original;\n const isInitialLoadingRow = isDataTableLoadingRow(originalRow);\n const loadingState = isInitialLoadingRow\n ? { isLoading: true }\n : getRowLoadingState?.(originalRow, rowIndex);\n const resolvedLoadingState: DataTableRowLoadingState | undefined =\n typeof loadingState === \"boolean\"\n ? { isLoading: loadingState }\n : loadingState;\n const isDraggable = isInitialLoadingRow\n ? false\n : (dragAndDrop?.getRowDraggable?.(originalRow) ?? false);\n\n return (\n \n );\n };\n\n return (\n \n \n \n
    \n \n \n {table.getVisibleLeafColumns().map((column) => {\n const layout = getColumnLayout(column.id);\n return ;\n })}\n \n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => (\n column.id === header.column.id,\n ) + 1\n }\n />\n ))}\n \n ))}\n \n \n {topPinnedRows.length || renderedRows.length || bottomPinnedRows.length ? (\n <>\n {topPinnedRows.map((row, index) =>\n renderBodyRow(row, index, \"top\"),\n )}\n {virtualPaddingTop > 0 ? (\n \n \n \n ) : null}\n {rowsToRender.map(({ row, rowIndex }) =>\n renderBodyRow(row, rowIndex + topPinnedRows.length),\n )}\n {virtualPaddingBottom > 0 ? (\n \n \n \n ) : null}\n {bottomPinnedRows.map((row, index) =>\n renderBodyRow(\n row,\n topPinnedRows.length + renderedRows.length + index,\n \"bottom\",\n ),\n )}\n \n ) : (\n \n \n
    \n {emptyNode ?? (\n \n )}\n
    \n \n
    \n )}\n
    \n {summaryRows.length ? (\n \n {summaryRows.map((summaryRow, summaryIndex) => (\n \n {visibleLeafColumns.map((column, index) => {\n const content =\n summaryRow.cells[column.id] ??\n (index === 0 ? summaryRow.label : null);\n return (\n \n {typeof content === \"function\"\n ? content({\n rows: summarySourceRows,\n columnId: column.id,\n })\n : content}\n \n );\n })}\n \n ))}\n \n ) : null}\n \n
    \n\n {infiniteScroll?.enabled &&\n renderedRows.length &&\n !shouldRenderInitialLoading ? (\n
    \n
    \n
    \n ) : null}\n \n \n
    \n {stateOverlayNode}\n \n );\n}\n\nfunction getHeaderLayout(\n header: Header,\n getColumnLayout: (columnId: string) => DataTableColumnLayout,\n) {\n const columnLayout = getColumnLayout(header.column.id);\n if (header.isPlaceholder || !header.subHeaders.length) {\n return columnLayout;\n }\n\n const leafLayouts = header\n .getLeafHeaders()\n .filter((leafHeader) => !leafHeader.subHeaders.length)\n .map((leafHeader) => getColumnLayout(leafHeader.column.id));\n const fixedSide = leafLayouts[0]?.fixedSide;\n\n if (\n !fixedSide ||\n !leafLayouts.every((layout) => layout.fixedSide === fixedSide)\n ) {\n return columnLayout;\n }\n\n const edgeLayout =\n fixedSide === \"left\" ? leafLayouts[0] : leafLayouts.at(-1);\n\n return {\n ...columnLayout,\n fixedSide,\n headerStyle: edgeLayout?.headerStyle\n ? {\n left: edgeLayout.headerStyle.left,\n right: edgeLayout.headerStyle.right,\n }\n : undefined,\n pinnedClassName: edgeLayout?.pinnedClassName,\n };\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-XTVBESM5.js b/dist/chunk-XTVBESM5.js new file mode 100644 index 0000000..5758a41 --- /dev/null +++ b/dist/chunk-XTVBESM5.js @@ -0,0 +1,2 @@ +import {clsx}from'clsx';import {twMerge}from'tailwind-merge';function s(...r){return twMerge(clsx(r))}export{s as a};//# sourceMappingURL=chunk-XTVBESM5.js.map +//# sourceMappingURL=chunk-XTVBESM5.js.map \ No newline at end of file diff --git a/dist/chunk-XTVBESM5.js.map b/dist/chunk-XTVBESM5.js.map new file mode 100644 index 0000000..6b0b9ac --- /dev/null +++ b/dist/chunk-XTVBESM5.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/lib/utils.ts"],"names":["cn","inputs","twMerge","clsx"],"mappings":"6DAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B","file":"chunk-XTVBESM5.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-Y5JNRFE4.js b/dist/chunk-Y5JNRFE4.js deleted file mode 100644 index fefe656..0000000 --- a/dist/chunk-Y5JNRFE4.js +++ /dev/null @@ -1,2 +0,0 @@ -import {P}from'./chunk-HOUWU4KF.js';import {useVirtualizer}from'@tanstack/react-virtual';import {jsx}from'react/jsx-runtime';function z(i){let{renderedRows:o,shouldRenderInitialLoading:T,tableScrollElement:d,viewportHeight:m=0,virtualization:n}=i,l=typeof n=="object"?n:void 0,s=!T&&(n===true||l?.enabled===true),t=s&&!!d&&m>0,u=useVirtualizer({count:s?o.length:0,enabled:t,estimateSize:()=>l?.estimateRowHeight??48,getScrollElement:()=>d??null,overscan:l?.overscan??8}),r=t?u.getVirtualItems():[],g=t?r.flatMap(e=>{let a=o[e.index];return a?[{row:a,rowIndex:e.index}]:[]}):o.map((e,a)=>({row:e,rowIndex:a})),c=t?r[0]?.start??0:0,p=t?Math.max(0,u.getTotalSize()-(r.at(-1)?.end??c)):0;return jsx(P,{...i,rowsToRender:g,virtualPaddingBottom:p,virtualPaddingTop:c})}export{z as a};//# sourceMappingURL=chunk-Y5JNRFE4.js.map -//# sourceMappingURL=chunk-Y5JNRFE4.js.map \ No newline at end of file diff --git a/dist/chunk-Y5JNRFE4.js.map b/dist/chunk-Y5JNRFE4.js.map deleted file mode 100644 index 9b6f380..0000000 --- a/dist/chunk-Y5JNRFE4.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/core/data-table/data-table-virtual-table-panel.tsx"],"names":["DataTableVirtualTablePanel","props","renderedRows","shouldRenderInitialLoading","tableScrollElement","viewportHeight","virtualization","virtualizationConfig","enableVirtualization","shouldUseVirtualRows","rowVirtualizer","useVirtualizer","virtualItems","rowsToRender","virtualItem","row","rowIndex","virtualPaddingTop","virtualPaddingBottom","jsx","DataTableTablePanel"],"mappings":"6HAIO,SAASA,CAAAA,CACdC,CAAAA,CACA,CACA,GAAM,CACJ,YAAA,CAAAC,CAAAA,CACA,2BAAAC,CAAAA,CACA,kBAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,EAAiB,CAAA,CACjB,cAAA,CAAAC,CACF,CAAA,CAAIL,EACEM,CAAAA,CACJ,OAAOD,CAAAA,EAAmB,QAAA,CAAWA,EAAiB,MAAA,CAClDE,CAAAA,CACJ,CAACL,CAAAA,GACAG,IAAmB,IAAA,EAAQC,CAAAA,EAAsB,OAAA,GAAY,IAAA,CAAA,CAC1DE,CAAAA,CACJD,CAAAA,EAAwB,CAAA,CAAQJ,CAAAA,EAAuBC,EAAiB,CAAA,CAGpEK,CAAAA,CAAiBC,cAAAA,CAAe,CACpC,MAAOH,CAAAA,CAAuBN,CAAAA,CAAa,MAAA,CAAS,CAAA,CACpD,QAASO,CAAAA,CACT,YAAA,CAAc,IAAMF,CAAAA,EAAsB,mBAAqB,EAAA,CAC/D,gBAAA,CAAkB,IAAMH,CAAAA,EAAsB,KAC9C,QAAA,CAAUG,CAAAA,EAAsB,QAAA,EAAY,CAC9C,CAAC,CAAA,CACKK,CAAAA,CAAeH,CAAAA,CACjBC,CAAAA,CAAe,iBAAgB,CAC/B,EAAC,CACCG,CAAAA,CAAeJ,CAAAA,CACjBG,CAAAA,CAAa,OAAA,CAASE,CAAAA,EAAgB,CACpC,IAAMC,CAAAA,CAAMb,CAAAA,CAAaY,CAAAA,CAAY,KAAK,CAAA,CAC1C,OAAOC,CAAAA,CAAM,CAAC,CAAE,GAAA,CAAAA,CAAAA,CAAK,QAAA,CAAUD,CAAAA,CAAY,KAAM,CAAC,CAAA,CAAI,EACxD,CAAC,CAAA,CACDZ,CAAAA,CAAa,GAAA,CAAI,CAACa,EAAKC,CAAAA,IAAc,CAAE,GAAA,CAAAD,CAAAA,CAAK,SAAAC,CAAS,CAAA,CAAE,CAAA,CACrDC,CAAAA,CAAoBR,CAAAA,CACrBG,CAAAA,CAAa,CAAC,CAAA,EAAG,OAAS,CAAA,CAC3B,CAAA,CACEM,CAAAA,CAAuBT,CAAAA,CACzB,KAAK,GAAA,CACH,CAAA,CACAC,CAAAA,CAAe,YAAA,IACZE,CAAAA,CAAa,EAAA,CAAG,EAAE,CAAA,EAAG,KAAOK,CAAAA,CACjC,CAAA,CACA,CAAA,CAEJ,OACEE,IAACC,CAAAA,CAAA,CACE,GAAGnB,CAAAA,CACJ,aAAcY,CAAAA,CACd,oBAAA,CAAsBK,CAAAA,CACtB,iBAAA,CAAmBD,EACrB,CAEJ","file":"chunk-Y5JNRFE4.js","sourcesContent":["import { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { DataTableTablePanel } from \"./data-table-table-panel\";\nimport type { DataTableTablePanelProps } from \"./data-table-table-panel\";\n\nexport function DataTableVirtualTablePanel(\n props: DataTableTablePanelProps,\n) {\n const {\n renderedRows,\n shouldRenderInitialLoading,\n tableScrollElement,\n viewportHeight = 0,\n virtualization,\n } = props;\n const virtualizationConfig =\n typeof virtualization === \"object\" ? virtualization : undefined;\n const enableVirtualization =\n !shouldRenderInitialLoading &&\n (virtualization === true || virtualizationConfig?.enabled === true);\n const shouldUseVirtualRows =\n enableVirtualization && Boolean(tableScrollElement) && viewportHeight > 0;\n\n // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Virtual owns its instance functions.\n const rowVirtualizer = useVirtualizer({\n count: enableVirtualization ? renderedRows.length : 0,\n enabled: shouldUseVirtualRows,\n estimateSize: () => virtualizationConfig?.estimateRowHeight ?? 48,\n getScrollElement: () => tableScrollElement ?? null,\n overscan: virtualizationConfig?.overscan ?? 8,\n });\n const virtualItems = shouldUseVirtualRows\n ? rowVirtualizer.getVirtualItems()\n : [];\n const rowsToRender = shouldUseVirtualRows\n ? virtualItems.flatMap((virtualItem) => {\n const row = renderedRows[virtualItem.index];\n return row ? [{ row, rowIndex: virtualItem.index }] : [];\n })\n : renderedRows.map((row, rowIndex) => ({ row, rowIndex }));\n const virtualPaddingTop = shouldUseVirtualRows\n ? (virtualItems[0]?.start ?? 0)\n : 0;\n const virtualPaddingBottom = shouldUseVirtualRows\n ? Math.max(\n 0,\n rowVirtualizer.getTotalSize() -\n (virtualItems.at(-1)?.end ?? virtualPaddingTop),\n )\n : 0;\n\n return (\n \n );\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-YPKN2W27.js b/dist/chunk-YPKN2W27.js new file mode 100644 index 0000000..396cd8f --- /dev/null +++ b/dist/chunk-YPKN2W27.js @@ -0,0 +1,2 @@ +import {b,e}from'./chunk-THSY57Y7.js';import*as i from'react';import {useVirtualizer}from'@tanstack/react-virtual';import {jsx}from'react/jsx-runtime';function V(t){let{renderedRows:n,shouldRenderInitialLoading:T,tableScrollElement:s,viewportHeight:w=0,virtualization:d}=t,l=typeof d=="object"?d:void 0,c=!T&&(d===true||l?.enabled===true),a=c&&!!s&&w>0,f=i.useCallback(e=>n[e]?.id??e,[n]),o=useVirtualizer({count:c?n.length:0,enabled:a,estimateSize:()=>l?.estimateRowHeight??48,getItemKey:f,getScrollElement:()=>s??null,overscan:l?.overscan??8}),u=a?o.getVirtualItems():[],h=a?u.flatMap(e=>{let r=n[e.index];return r?[{row:r,rowIndex:e.index}]:[]}):n.slice(0,Math.max(1,Math.floor(l?.fallbackRowCount??20))).map((e,r)=>({row:e,rowIndex:r})),m=a?u[0]?.start??0:0,P=a?Math.max(0,o.getTotalSize()-(u.at(-1)?.end??m)):0,v=i.useCallback(e=>{!t.gridMode||!a||o.scrollToIndex(Math.max(0,e-t.topPinnedRows.length),{align:"auto"});},[t.gridMode,t.topPinnedRows.length,o,a]),M=i.useCallback(e=>{e&&o.measureElement(e);},[o]);return jsx(b,{measureRow:a?M:void 0,children:jsx(e,{...t,rowsToRender:h,virtualPaddingBottom:P,virtualPaddingTop:m,onGridActiveRowIndexChange:v})})}export{V as a};//# sourceMappingURL=chunk-YPKN2W27.js.map +//# sourceMappingURL=chunk-YPKN2W27.js.map \ No newline at end of file diff --git a/dist/chunk-YPKN2W27.js.map b/dist/chunk-YPKN2W27.js.map new file mode 100644 index 0000000..cad24e0 --- /dev/null +++ b/dist/chunk-YPKN2W27.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/data-table-virtual-table-panel.tsx"],"names":["DataTableVirtualTablePanel","props","renderedRows","shouldRenderInitialLoading","tableScrollElement","viewportHeight","virtualization","virtualizationConfig","enableVirtualization","shouldUseVirtualRows","getItemKey","index","rowVirtualizer","useVirtualizer","virtualItems","rowsToRender","virtualItem","row","rowIndex","virtualPaddingTop","virtualPaddingBottom","handleGridActiveRowIndexChange","gridRowIndex","measureRow","element","jsx","DataTableVirtualRowMeasurementProvider","DataTableTablePanel"],"mappings":"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","file":"chunk-YPKN2W27.js","sourcesContent":["import * as React from \"react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { DataTableTablePanel } from \"./data-table-table-panel\";\nimport type { DataTableTablePanelProps } from \"./data-table-table-panel\";\nimport { DataTableVirtualRowMeasurementProvider } from \"./data-table-virtual-row-measurement\";\n\nexport function DataTableVirtualTablePanel(\n props: DataTableTablePanelProps,\n) {\n const {\n renderedRows,\n shouldRenderInitialLoading,\n tableScrollElement,\n viewportHeight = 0,\n virtualization,\n } = props;\n const virtualizationConfig =\n typeof virtualization === \"object\" ? virtualization : undefined;\n const enableVirtualization =\n !shouldRenderInitialLoading &&\n (virtualization === true || virtualizationConfig?.enabled === true);\n const shouldUseVirtualRows =\n enableVirtualization && Boolean(tableScrollElement) && viewportHeight > 0;\n const getItemKey = React.useCallback(\n (index: number) => renderedRows[index]?.id ?? index,\n [renderedRows],\n );\n\n // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Virtual owns its instance functions.\n const rowVirtualizer = useVirtualizer({\n count: enableVirtualization ? renderedRows.length : 0,\n enabled: shouldUseVirtualRows,\n estimateSize: () => virtualizationConfig?.estimateRowHeight ?? 48,\n getItemKey,\n getScrollElement: () => tableScrollElement ?? null,\n overscan: virtualizationConfig?.overscan ?? 8,\n });\n const virtualItems = shouldUseVirtualRows\n ? rowVirtualizer.getVirtualItems()\n : [];\n const rowsToRender = shouldUseVirtualRows\n ? virtualItems.flatMap((virtualItem) => {\n const row = renderedRows[virtualItem.index];\n return row ? [{ row, rowIndex: virtualItem.index }] : [];\n })\n : renderedRows\n .slice(\n 0,\n Math.max(\n 1,\n Math.floor(virtualizationConfig?.fallbackRowCount ?? 20),\n ),\n )\n .map((row, rowIndex) => ({ row, rowIndex }));\n const virtualPaddingTop = shouldUseVirtualRows\n ? (virtualItems[0]?.start ?? 0)\n : 0;\n const virtualPaddingBottom = shouldUseVirtualRows\n ? Math.max(\n 0,\n rowVirtualizer.getTotalSize() -\n (virtualItems.at(-1)?.end ?? virtualPaddingTop),\n )\n : 0;\n const handleGridActiveRowIndexChange = React.useCallback(\n (gridRowIndex: number) => {\n if (!props.gridMode || !shouldUseVirtualRows) return;\n rowVirtualizer.scrollToIndex(\n Math.max(0, gridRowIndex - props.topPinnedRows.length),\n { align: \"auto\" },\n );\n },\n [\n props.gridMode,\n props.topPinnedRows.length,\n rowVirtualizer,\n shouldUseVirtualRows,\n ],\n );\n const measureRow = React.useCallback>(\n (element) => {\n if (element) {\n rowVirtualizer.measureElement(element);\n }\n },\n [rowVirtualizer],\n );\n\n return (\n \n \n \n );\n}\n"]} \ No newline at end of file diff --git a/dist/chunk-ZF4EP4WP.js b/dist/chunk-ZF4EP4WP.js deleted file mode 100644 index 545b903..0000000 --- a/dist/chunk-ZF4EP4WP.js +++ /dev/null @@ -1,2 +0,0 @@ -import {clsx}from'clsx';import {twMerge}from'tailwind-merge';function g(...e){return twMerge(clsx(e))}var s={sm:640,md:768,lg:1024,xl:1280,"2xl":1536};function u(e,a,t){return !a||t?true:!a.getIsHidden(e)}function c(e,a){return typeof e=="function"?e(a):e}function D(e,a){return !e.hidden?.(a)}function p(e,a){return e?.canEditRow?e.canEditRow(a):!!e}function n(e){switch(e){case "center":return "text-center";case "end":return "text-right";default:return "text-left"}}function o(e,a){return e||(a==="numeric"?"end":"start")}function m(e){let a=e.column.columnDef.meta;return n(o(a?.align,a?.type))}function w(e){let a=e.column.columnDef.meta;return n(o(a?.align,a?.type))}function C(e){return e?(Array.isArray(e)?e:[e]).map(t=>`dt-hide-on-${t}`).join(" "):void 0}function y(e,a){return !e||a<=0?false:(Array.isArray(e)?e:[e]).some(i=>a = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};\n\nexport type DataTableRowLoadingState = {\n isLoading: boolean;\n skeleton?: React.ReactNode;\n};\n\nexport type DataTableLoadingState = {\n isLoading: boolean;\n loadingRowCount?: number;\n};\n\nexport type DataTableCellEditRenderProps = {\n cell: CellContext;\n row: TData;\n value: TValue | undefined;\n draftValue: unknown;\n setDraftValue: (value: unknown) => void;\n};\n\nexport type DataTableColumnFilterOption = {\n label: string;\n value: string;\n};\n\nexport type DataTableColumnFilterConfig = {\n type: DataTableColumnFilterType;\n label?: string;\n placeholder?: string;\n options?:\n | Array\n | ((context: { rows: Array }) => Array);\n getOptionValue?: (value: TValue | undefined, row: TData) => string;\n};\n\nexport type DataTableColumnMeta = {\n type?: DataTableColumnType;\n fixed?: DataTableColumnFixed;\n cardTitle?: boolean;\n hideOn?: DataTableContainerBreakpoint | Array;\n minWidth?: number;\n align?: DataTableAlign;\n overflow?:\n | DataTableCellOverflow\n | ((args: {\n row: TData;\n value: TValue | undefined;\n }) => DataTableCellOverflow | undefined);\n headerClassName?: string;\n cellClassName?:\n | string\n | ((args: { row: TData; value: TValue | undefined }) => string | undefined);\n responsiveClassName?: string;\n skeleton?: (context: CellContext) => React.ReactNode;\n filter?: DataTableColumnFilterConfig;\n parseEditValue?: (value: unknown, context: CellContext) => unknown;\n formatEditValue?: (\n value: unknown,\n context: CellContext,\n ) => string;\n renderEditCell?: (\n props: DataTableCellEditRenderProps,\n ) => React.ReactNode;\n};\n\nexport type DataTableColumnDef = ColumnDef<\n TData,\n TValue\n> & {\n meta?: DataTableColumnMeta;\n};\n\nexport type DataTableToolbarAction = {\n key: string;\n label: string;\n icon?: React.ComponentType<{ className?: string }>;\n iconOnly?: boolean;\n placement?: \"primary\" | \"trailing\";\n onClick: (context: {\n rows: Array;\n openFileDialog?: () => void;\n }) => void | Promise;\n variant?: \"default\" | \"secondary\" | \"outline\" | \"ghost\" | \"destructive\";\n disabled?: boolean;\n};\n\nexport type DataTableSelectionAction = {\n key: string;\n label: string;\n icon?: React.ComponentType<{ className?: string }>;\n iconOnly?: boolean;\n onClick: (context: { rows: Array }) => void | Promise;\n variant?: \"default\" | \"secondary\" | \"outline\" | \"ghost\" | \"destructive\";\n disabled?: boolean | ((rows: Array) => boolean);\n};\n\nexport type DataTableRowAction = {\n key: string;\n label: string | ((row: TData) => string);\n icon?: React.ComponentType<{ className?: string }>;\n onClick: (row: TData) => void | Promise;\n variant?: \"default\" | \"secondary\" | \"destructive\";\n hidden?: (row: TData) => boolean;\n disabled?: (row: TData) => boolean;\n};\n\nexport type DataTableColumnVisibilityOption = {\n id: string;\n label: string;\n visible: boolean;\n canHide: boolean;\n pinned?: false | DataTableColumnFixed;\n};\n\nexport type DataTableToolbarVisibility = {\n title?: boolean;\n search?: boolean;\n actions?: boolean;\n trailingActions?: boolean;\n options?: boolean;\n viewToggle?: boolean;\n customToolbar?: boolean;\n};\n\nexport type DataTableCardRendererProps = {\n row: TData;\n rowId: string;\n isSelected: boolean;\n onSelectedChange: (nextValue: boolean) => void;\n actions: Array>;\n isEditing: boolean;\n startEditing: () => void;\n cancelEditing: () => void;\n};\n\nexport type DataTableEditableRowsConfig = {\n canEditRow?: (row: TData) => boolean;\n getInitialValues?: (row: TData) => Record;\n onSaveRow: (\n row: TData,\n draftValues: Record,\n ) => void | Promise;\n};\n\nexport type DataTableInfiniteScroll = {\n enabled: boolean;\n hasMore: boolean;\n isLoadingMore?: boolean;\n onLoadMore: () => void | Promise;\n};\n\nexport type DataTableHiddenRowsConfig = {\n getIsHidden: (row: TData) => boolean;\n label?: string;\n};\n\nexport type DataTableEmptyStateContext = {\n rows: Array;\n toolbarQueryValue: string;\n};\n\nexport type DataTableDragAndDropConfig = {\n isDragging?: boolean;\n onDragEnter?: React.DragEventHandler;\n onDragOver?: React.DragEventHandler;\n onDragLeave?: React.DragEventHandler;\n onDrop?: React.DragEventHandler;\n getRowDraggable?: (row: TData) => boolean;\n onRowDragStart?: (context: {\n row: TData;\n rowId: string;\n event: React.DragEvent;\n }) => void;\n onRowDragEnd?: (context: {\n row: TData;\n rowId: string;\n event: React.DragEvent;\n }) => void;\n};\n\nexport type DataTableFileUploadConfig = {\n accept?: string;\n disabled?: boolean;\n multiple?: boolean;\n onFilesSelected: (files: FileList | Array) => void | Promise;\n};\n\nexport type DataTableVirtualizationConfig = {\n enabled?: boolean;\n estimateRowHeight?: number;\n overscan?: number;\n card?: DataTableCardVirtualizationConfig;\n};\n\nexport type DataTableCardVirtualizationConfig = {\n enabled?: boolean;\n estimateCardHeight?: number;\n overscan?: number;\n lanes?: number | \"auto\";\n};\n\nexport type DataTableExpandedRowProps = {\n row: TData;\n rowId: string;\n tableRow: Row;\n};\n\nexport type DataTableCsvExportOptions = {\n filename?: string;\n includeHeaders?: boolean;\n columns?: Array;\n scope?: DataTableCsvExportScope;\n escapeFormulaValues?: boolean;\n lineEnding?: \"\\n\" | \"\\r\\n\";\n getCellValue?: (context: {\n row: TData;\n rowId: string;\n columnId: string;\n value: unknown;\n }) => unknown;\n onExport?: (context: {\n csv: string;\n filename: string;\n rows: Array;\n scope: DataTableCsvExportScope;\n }) => void | Promise;\n};\n\nexport type DataTableActionErrorContext = {\n source: DataTableActionErrorSource;\n error: unknown;\n actionKey?: string;\n row?: TData;\n};\n\nexport type DataTableColumnPrefs = {\n visibility?: VisibilityState;\n sizing?: Record;\n order?: ColumnOrderState;\n pinning?: ColumnPinningState;\n density?: DataTableDensity;\n};\n\nexport type DataTablePersistenceSlice = keyof DataTableColumnPrefs;\n\nexport type DataTablePersistenceStorage = Pick<\n Storage,\n \"getItem\" | \"setItem\" | \"removeItem\"\n>;\n\nexport type DataTablePersistenceOperation =\n | \"read\"\n | \"write\"\n | \"remove\"\n | \"serialize\"\n | \"deserialize\"\n | \"migrate\";\n\nexport type DataTablePersistencePayload = {\n version: string | number;\n state: DataTableColumnPrefs;\n};\n\nexport type DataTablePersistenceConfig = {\n key: string;\n version?: string | number;\n slices?: Array;\n storage?: DataTablePersistenceStorage;\n serialize?: (payload: DataTablePersistencePayload) => string;\n deserialize?: (value: string) => unknown;\n migrate?: (\n payload: { version: unknown; state: unknown },\n targetVersion: string | number,\n ) => DataTableColumnPrefs | undefined;\n debounceMs?: number;\n onError?: (context: {\n error: unknown;\n operation: DataTablePersistenceOperation;\n }) => void;\n};\n\nexport type DataTableState = {\n sorting: SortingState;\n pagination: PaginationState;\n rowSelection: Record;\n columnVisibility: VisibilityState;\n columnFilters: ColumnFiltersState;\n expanded: ExpandedState;\n columnOrder: ColumnOrderState;\n columnPinning: ColumnPinningState;\n columnSizing: ColumnSizingState;\n density: DataTableDensity;\n viewMode: DataTableViewMode;\n showHiddenRows: boolean;\n globalFilter: string;\n};\n\nexport type DataTableInitialState = Partial;\n\nexport type DataTableSavedViewSlice = keyof DataTableState;\n\nexport type DataTableSavedView = {\n id: string;\n name: string;\n createdAt: string;\n updatedAt: string;\n state: Partial;\n};\n\nexport type DataTableSavedViewsPayload = {\n version: string | number;\n views: Array;\n};\n\nexport type DataTableSavedViewsChangeOperation =\n | \"create\"\n | \"rename\"\n | \"delete\"\n | \"clear\";\n\nexport type DataTableSavedViewsConfig = {\n key: string;\n version?: string | number;\n slices?: Array;\n storage?: DataTablePersistenceStorage;\n serialize?: (payload: DataTableSavedViewsPayload) => string;\n deserialize?: (value: string) => unknown;\n migrate?: (\n payload: { version: unknown; views: unknown },\n targetVersion: string | number,\n ) => Array | undefined;\n onChange?: (\n views: Array,\n operation: DataTableSavedViewsChangeOperation,\n ) => void;\n onApply?: (view: DataTableSavedView) => void;\n onError?: (context: {\n error: unknown;\n operation: DataTablePersistenceOperation;\n }) => void;\n};\n\nexport type DataTableResetOptions = {\n clearPersistence?: boolean;\n};\n\nexport type DataTableApi = {\n getTable: () => TanStackTable | null;\n getState: () => DataTableState;\n snapshot: () => DataTableState;\n restore: (state: Partial) => void;\n resetColumnLayout: (options?: DataTableResetOptions) => void;\n resetState: (options?: DataTableResetOptions) => void;\n clearPersistedState: () => boolean;\n getSavedViews: () => Array;\n createSavedView: (name: string) => DataTableSavedView | undefined;\n applySavedView: (id: string) => boolean;\n renameSavedView: (\n id: string,\n name: string,\n ) => DataTableSavedView | undefined;\n deleteSavedView: (id: string) => boolean;\n clearSavedViews: () => boolean;\n focus: () => void;\n scrollToRow: (rowId: string) => boolean;\n scrollToColumn: (columnId: string) => boolean;\n exportCsv: (\n options?: boolean | DataTableCsvExportOptions,\n ) => Promise;\n};\n\nexport type DataTableLabels = {\n searchPlaceholder: string;\n searchTable: string;\n clearSearch: string;\n noRowsTitle: string;\n noRowsDescription: string;\n noMatchingRowsTitle: string;\n noMatchingRowsDescription: string;\n tableOptions: string;\n columns: string;\n filters: string;\n clearFilters: string;\n selectedRows: (count: number) => string;\n showHiddenRows: (label: string) => string;\n recordsPerPage: string;\n totalRecords: (count: number) => string;\n pageStatus: (pageIndex: number, pageCount: number) => string;\n pageStatusUnknown?: (pageIndex: number) => string;\n pagination?: string;\n morePages?: string;\n firstPage: string;\n previousPage: string;\n nextPage: string;\n lastPage: string;\n selectAllVisibleRows?: string;\n selectRow?: string;\n selectCardRow?: (rowId: string) => string;\n switchToTableView?: string;\n switchToCardView?: string;\n tableView?: string;\n cardView?: string;\n allFilterOptions?: string;\n actions: string;\n rowActions: string;\n editRow: string;\n saveEdit: string;\n cancelEdit: string;\n expandRow: string;\n collapseRow: string;\n exportCsv: string;\n density: string;\n compactDensity: string;\n comfortableDensity: string;\n spaciousDensity: string;\n pinLeft: string;\n pinRight: string;\n unpin: string;\n};\n\nexport type DataTableSummaryRow = {\n key: string;\n label?: React.ReactNode;\n cells: Record<\n string,\n React.ReactNode | ((context: { rows: Array; columnId: string }) => React.ReactNode)\n >;\n};\n\nexport type DataTableProps = {\n columns: Array>;\n data: Array;\n getRowId: (row: TData, index: number) => string;\n children?: React.ReactNode;\n title?: string;\n description?: string;\n toolbarQueryValue?: string;\n onToolbarQueryValueChange?: (value: string) => void;\n toolbarQueryPlaceholder?: string;\n toolbarQueryDebounceMs?: number;\n manualFiltering?: boolean;\n enableToolbarQueryFiltering?: boolean;\n globalFilterFn?: FilterFnOption;\n columnFilters?: ColumnFiltersState;\n onColumnFiltersChange?: (filters: ColumnFiltersState) => void;\n enableColumnFilters?: boolean;\n customToolbar?: React.ReactNode;\n compactToolbar?: React.ReactNode;\n rowsPerPageOptions?: Array;\n totalRowCount?: number;\n hasNextPage?: boolean;\n sorting?: SortingState;\n onSortingChange?: (sorting: SortingState) => void;\n manualSorting?: boolean;\n pageIndex?: number;\n pageSize?: number;\n onPageIndexChange?: (pageIndex: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n pageCount?: number;\n manualPagination?: boolean;\n rowSelection?: Record;\n onRowSelectionChange?: (rowSelection: Record) => void;\n enableRowSelection?: boolean;\n expanded?: ExpandedState;\n onExpandedChange?: (expanded: ExpandedState) => void;\n getRowCanExpand?: (row: TData) => boolean;\n renderExpandedRow?: (\n props: DataTableExpandedRowProps,\n ) => React.ReactNode;\n columnOrder?: ColumnOrderState;\n onColumnOrderChange?: (columnOrder: ColumnOrderState) => void;\n enableColumnReordering?: boolean;\n columnPinning?: ColumnPinningState;\n onColumnPinningChange?: (columnPinning: ColumnPinningState) => void;\n enableColumnPinning?: boolean;\n toolbarActions?: Array>;\n selectionActions?: Array>;\n rowActions?: Array>;\n csvExport?: boolean | DataTableCsvExportOptions;\n density?: DataTableDensity;\n onDensityChange?: (density: DataTableDensity) => void;\n enableDensityToggle?: boolean;\n columnPrefsKey?: string;\n persistence?: DataTablePersistenceConfig;\n savedViews?: DataTableSavedViewsConfig;\n initialState?: DataTableInitialState;\n state?: Partial;\n onStateChange?: (updater: Updater) => void;\n apiRef?: React.Ref>;\n labels?: Partial;\n summaryRows?: Array>;\n cardRenderer?: (props: DataTableCardRendererProps) => React.ReactNode;\n cardSizing?: DataTableCardSizing;\n cardGridClassName?: string;\n cardClassName?: string;\n viewMode?: DataTableViewMode;\n onViewModeChange?: (viewMode: DataTableViewMode) => void;\n enableViewToggle?: boolean;\n emptyState?:\n | React.ReactNode\n | ((context: DataTableEmptyStateContext) => React.ReactNode);\n isLoading?: boolean;\n loadingRowCount?: number;\n getRowLoadingState?: (\n row: TData,\n index: number,\n ) => boolean | DataTableRowLoadingState;\n hiddenRows?: DataTableHiddenRowsConfig;\n showHiddenRows?: boolean;\n onShowHiddenRowsChange?: (showHiddenRows: boolean) => void;\n infiniteScroll?: DataTableInfiniteScroll;\n editableRows?: DataTableEditableRowsConfig;\n columnVisibility?: VisibilityState;\n onColumnVisibilityChange?: (visibility: VisibilityState) => void;\n columnSizing?: ColumnSizingState;\n onColumnSizingChange?: (sizing: ColumnSizingState) => void;\n enableColumnResizing?: boolean;\n columnResizeMode?: \"onChange\" | \"onEnd\";\n layoutMode?: \"fill\" | \"fit\";\n stickyHeader?: boolean;\n showFooter?: boolean;\n showToolbar?: boolean;\n dir?: \"ltr\" | \"rtl\";\n flexGrow?: boolean;\n toolbarVisibility?: DataTableToolbarVisibility;\n className?: string;\n tableClassName?: string;\n tableContainerClassName?: string;\n getRowClassName?: (row: TData) => string | undefined;\n onRowClick?: (context: { row: TData; rowId: string }) => void | Promise;\n onActionError?: (context: DataTableActionErrorContext) => void;\n dragAndDrop?: DataTableDragAndDropConfig;\n fileUpload?: DataTableFileUploadConfig;\n virtualization?: boolean | DataTableVirtualizationConfig;\n};\n\nexport function isRowVisible(\n row: TData,\n hiddenRows: DataTableHiddenRowsConfig | undefined,\n showHiddenRows: boolean,\n) {\n if (!hiddenRows) {\n return true;\n }\n\n if (showHiddenRows) {\n return true;\n }\n\n return !hiddenRows.getIsHidden(row);\n}\n\nexport function resolveRowActionLabel(\n label: DataTableRowAction[\"label\"],\n row: TData,\n) {\n return typeof label === \"function\" ? label(row) : label;\n}\n\nexport function canUseRowAction(\n action: DataTableRowAction,\n row: TData,\n) {\n return !action.hidden?.(row);\n}\n\nexport function canEditRow(\n editableRows: DataTableEditableRowsConfig | undefined,\n row: TData,\n) {\n return editableRows?.canEditRow\n ? editableRows.canEditRow(row)\n : Boolean(editableRows);\n}\n\nexport function alignClassName(align: DataTableAlign | undefined) {\n switch (align) {\n case \"center\":\n return \"text-center\";\n case \"end\":\n return \"text-right\";\n default:\n return \"text-left\";\n }\n}\n\nexport function resolveColumnAlign(\n align: DataTableAlign | undefined,\n type: DataTableColumnType | undefined,\n) {\n if (align) {\n return align;\n }\n\n if (type === \"numeric\") {\n return \"end\";\n }\n\n return \"start\";\n}\n\nexport function headerAlignClassName(\n context: HeaderContext,\n) {\n const meta = (context.column.columnDef as DataTableColumnDef)\n .meta;\n return alignClassName(resolveColumnAlign(meta?.align, meta?.type));\n}\n\nexport function cellAlignClassName(\n context: CellContext,\n) {\n const meta = (context.column.columnDef as DataTableColumnDef)\n .meta;\n return alignClassName(resolveColumnAlign(meta?.align, meta?.type));\n}\n\nexport function hideOnClassName(\n hideOn:\n | DataTableContainerBreakpoint\n | Array\n | undefined,\n) {\n if (!hideOn) {\n return undefined;\n }\n\n const values = Array.isArray(hideOn) ? hideOn : [hideOn];\n return values.map((value) => `dt-hide-on-${value}`).join(\" \");\n}\n\nexport function isHiddenAtContainerWidth(\n hideOn:\n | DataTableContainerBreakpoint\n | Array\n | undefined,\n containerWidth: number,\n) {\n if (!hideOn || containerWidth <= 0) {\n return false;\n }\n\n const values = Array.isArray(hideOn) ? hideOn : [hideOn];\n return values.some(\n (value) => containerWidth < DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS[value],\n );\n}\n\nexport function rowSelectionStateFromRows(rows: Array>) {\n return rows.map((row) => row.original);\n}\n"]} \ No newline at end of file diff --git a/dist/data-source.d.ts b/dist/data-source.d.ts new file mode 100644 index 0000000..be11f1e --- /dev/null +++ b/dist/data-source.d.ts @@ -0,0 +1,123 @@ +import { PaginationState, SortingState, ColumnFiltersState, GroupingState } from '@tanstack/react-table'; +import { DataTableProps } from './types.js'; +import 'react'; + +/** The supported server pagination strategies. */ +type DataTableDataSourceMode = "offset" | "cursor"; +/** + * The serializable portion of a request. It is also passed to `getRequestKey` + * so applications can define cache identity for domain-specific query values. + */ +type DataTableDataSourceQuery = { + mode: DataTableDataSourceMode; + pagination: PaginationState; + /** `pageIndex * pageSize`; useful for offset-based backends. */ + offset: number; + /** The requested number of rows. */ + limit: number; + /** The cursor for a cursor-based backend. `null` represents the first page. */ + cursor: TCursor | null; + sorting: SortingState; + columnFilters: ColumnFiltersState; + /** Server-owned global filter value, normally the table toolbar query. */ + globalFilter?: string; + /** Server-owned row grouping state. */ + grouping?: GroupingState; + /** Requested aggregate functions keyed by result/column identifier. */ + aggregations?: Record; + /** Stable ancestor/group identifiers for lazy child or group loading. */ + expansionPath?: Array; + /** Application-owned request parameters, such as a tenant or parent ID. */ + query: TQuery | undefined; +}; +/** A server request with an AbortSignal that is cancelled when superseded. */ +type DataTableDataSourceRequest = DataTableDataSourceQuery & { + signal: AbortSignal; +}; +/** A normalized server result for offset and cursor pagination. */ +type DataTableDataSourceResponse = { + rows: Array; + /** Total matching rows, when the backend can provide it. */ + rowCount?: number; + /** The cursor to use for the following page. `null` means no following page. */ + nextCursor?: TCursor | null; + /** Backend-provided facet/count metadata for filter UIs. */ + facets?: TFacets; + /** Stable row identifiers in response order when IDs are server-projected. */ + rowIds?: Array; + /** Backend-provided aggregate values keyed by result/column identifier. */ + aggregates?: Record; + /** Application-owned response metadata such as revision or timing data. */ + metadata?: Record; +}; +type DataTableDataSource = (request: DataTableDataSourceRequest) => DataTableDataSourceResponse | Promise>; +type DataTableDataSourceRetryOptions = number | { + /** Number of retries after the initial attempt. Defaults to 0. */ + attempts?: number; + /** Delay before every retry. Defaults to 250ms. */ + delay?: number | ((context: { + attempt: number; + error: unknown; + }) => number); + shouldRetry?: (context: { + attempt: number; + error: unknown; + }) => boolean; +}; +type DataTableDataSourceCacheOptions = false | number | { + /** Freshness lifetime in milliseconds. Defaults to 30 seconds. */ + staleTime?: number; + /** Maximum cached results per hook instance. Defaults to 50. */ + maxEntries?: number; +}; +type UseDataTableDataSourceOptions = Omit, "cursor" | "limit" | "offset" | "query"> & { + cursor?: TCursor | null; + query?: TQuery; + source: DataTableDataSource; + enabled?: boolean; + /** Retain the prior result while a changed query is loading. Defaults to true. */ + keepPreviousData?: boolean; + cache?: DataTableDataSourceCacheOptions; + retry?: DataTableDataSourceRetryOptions; + /** Override request/cache identity when `query` contains non-serializable values. */ + getRequestKey?: (query: DataTableDataSourceQuery) => string; + initialData?: Array; + onSuccess?: (response: DataTableDataSourceResponse, request: DataTableDataSourceRequest) => void; + onError?: (error: unknown, request: DataTableDataSourceRequest) => void; + onPageIndexChange?: (pageIndex: number) => void; + onPageSizeChange?: (pageSize: number) => void; + onSortingChange?: (sorting: SortingState) => void; + onColumnFiltersChange?: (filters: ColumnFiltersState) => void; + onGlobalFilterChange?: (globalFilter: string) => void; + onGroupingChange?: (grouping: GroupingState) => void; +}; +type DataTableDataSourceTableProps = Pick, "columnFilters" | "data" | "hasNextPage" | "isLoading" | "manualFiltering" | "manualGrouping" | "manualPagination" | "manualSorting" | "onColumnFiltersChange" | "onGroupingChange" | "onPageIndexChange" | "onPageSizeChange" | "onSortingChange" | "pageIndex" | "pageSize" | "sorting" | "grouping" | "toolbarQueryValue" | "onToolbarQueryValueChange" | "totalRowCount">; +type UseDataTableDataSourceResult = { + aggregates: Record | undefined; + data: Array; + error: unknown; + facets: TFacets | undefined; + isError: boolean; + /** True while the first result for the active query is loading. */ + isLoading: boolean; + /** True while any request for the active query is in flight. */ + isFetching: boolean; + isSuccess: boolean; + nextCursor: TCursor | null | undefined; + metadata: Record | undefined; + rowIds: Array | undefined; + rowCount: number | undefined; + /** Starts a network request, bypassing a fresh cache entry. */ + refresh: () => Promise | undefined>; + /** Removes one cached request, or every cached request when omitted. */ + invalidate: (requestKey?: string) => void; + /** Spread these into `DataTable` for manual paging, sorting, and filtering. */ + tableProps: DataTableDataSourceTableProps; +}; +/** + * Fetches controlled, server-side table data with cancellation, retry, stale + * response protection, per-hook caching, and manual DataTable props. + */ +declare function useDataTableDataSource(options: UseDataTableDataSourceOptions): UseDataTableDataSourceResult; + +export { type DataTableDataSource, type DataTableDataSourceCacheOptions, type DataTableDataSourceMode, type DataTableDataSourceQuery, type DataTableDataSourceRequest, type DataTableDataSourceResponse, type DataTableDataSourceRetryOptions, type DataTableDataSourceTableProps, type UseDataTableDataSourceOptions, type UseDataTableDataSourceResult, useDataTableDataSource }; diff --git a/dist/data-source.js b/dist/data-source.js new file mode 100644 index 0000000..6c182e1 --- /dev/null +++ b/dist/data-source.js @@ -0,0 +1,2 @@ +import*as u from'react';var W=3e4,M=50;function Y(e){let{aggregations:n,columnFilters:i,cursor:t,enabled:s=true,expansionPath:c,getRequestKey:Q,globalFilter:D,grouping:C,initialData:k=[],mode:q,pagination:l,query:A,sorting:b}=e,E=u.useRef(e);u.useEffect(()=>{E.current=e;},[e]);let p=u.useRef(new Map),g=u.useRef(void 0),_=u.useRef(0),f=u.useRef(true),[a,m]=u.useState(()=>({aggregates:void 0,data:k,error:null,facets:void 0,isFetching:false,metadata:void 0,nextCursor:void 0,responseKey:null,rowCount:void 0,rowIds:void 0,status:k.length>0?"success":"idle"})),I=u.useMemo(()=>({aggregations:n,columnFilters:i,cursor:t??null,expansionPath:c,globalFilter:D,grouping:C,limit:l.pageSize,mode:q,offset:l.pageIndex*l.pageSize,pagination:{...l},query:A,sorting:b}),[n,i,t,c,D,C,q,l,A,b]),U=Q?Q(I):K(I),y=u.useCallback(S=>{let r=E.current,x={aggregations:r.aggregations,columnFilters:r.columnFilters,cursor:r.cursor??null,expansionPath:r.expansionPath,globalFilter:r.globalFilter,grouping:r.grouping,limit:r.pagination.pageSize,mode:r.mode,offset:r.pagination.pageIndex*r.pagination.pageSize,pagination:{...r.pagination},query:r.query,sorting:r.sorting},T=r.getRequestKey?r.getRequestKey(x):K(x),h=g.current;if(h?.key===T)return h.promise;h&&(h.controller.abort(),g.current=void 0);let O=G(r.cache),d=p.current.get(T);if(!S&&d&&O&&$(d,O))return f.current&&m({aggregates:d.response.aggregates,data:d.response.rows,error:null,facets:d.response.facets,isFetching:false,metadata:d.response.metadata,nextCursor:d.response.nextCursor,responseKey:T,rowCount:d.response.rowCount,rowIds:d.response.rowIds,status:"success"}),Promise.resolve(d.response);let P=new AbortController,R=++_.current,F={...x,signal:P.signal};f.current&&m(o=>({...o,data:r.keepPreviousData===false?[]:o.data,error:null,isFetching:true,status:o.responseKey===T?o.status:"loading"}));let z=J(r.source,F,r.retry).then(o=>{if(g.current?.id!==R)return o;let w=G(r.cache);return w&&H(p.current,T,o,w),f.current&&m({aggregates:o.aggregates,data:o.rows,error:null,facets:o.facets,isFetching:false,metadata:o.metadata,nextCursor:o.nextCursor,responseKey:T,rowCount:o.rowCount,rowIds:o.rowIds,status:"success"}),r.onSuccess?.(o,F),o}).catch(o=>{L(o,P.signal)||g.current?.id!==R||(f.current&&m(w=>({...w,error:o,isFetching:false,status:"error"})),r.onError?.(o,F));}).finally(()=>{g.current?.id===R&&(g.current=void 0);});return g.current={controller:P,id:R,key:T,promise:z,request:F},z},[]);u.useEffect(()=>{if(f.current=true,!s){g.current?.controller.abort(),g.current=void 0;return}y(false);},[s,U,y]),u.useEffect(()=>()=>{f.current=false,g.current?.controller.abort(),g.current=void 0;},[]);let j=u.useCallback(()=>y(true),[y]),N=u.useCallback(S=>{if(S===void 0){p.current.clear();return}p.current.delete(S);},[]),v=a.nextCursor!==void 0?a.nextCursor!==null:a.rowCount===void 0?void 0:l.pageIndex+1({columnFilters:i,data:a.data,hasNextPage:v,isLoading:s&&a.status==="loading",manualFiltering:true,manualGrouping:true,manualPagination:true,manualSorting:true,onColumnFiltersChange:e.onColumnFiltersChange,onGroupingChange:e.onGroupingChange,onPageIndexChange:e.onPageIndexChange,onPageSizeChange:e.onPageSizeChange,onSortingChange:e.onSortingChange,onToolbarQueryValueChange:e.onGlobalFilterChange,pageIndex:l.pageIndex,pageSize:l.pageSize,sorting:b,grouping:C,toolbarQueryValue:D,totalRowCount:a.rowCount}),[i,s,D,C,v,e.onColumnFiltersChange,e.onGlobalFilterChange,e.onGroupingChange,e.onPageIndexChange,e.onPageSizeChange,e.onSortingChange,l.pageIndex,l.pageSize,b,a.data,a.rowCount,a.status]);return {aggregates:a.aggregates,data:a.data,error:a.error,facets:a.facets,invalidate:N,isError:a.status==="error",isFetching:s&&a.isFetching,isLoading:s&&a.status==="loading",isSuccess:a.status==="success",metadata:a.metadata,nextCursor:a.nextCursor,refresh:j,rowCount:a.rowCount,rowIds:a.rowIds,tableProps:V}}function G(e){if(e!==false)return typeof e=="number"?{maxEntries:M,staleTime:Math.max(0,e)}:{maxEntries:Math.max(1,e?.maxEntries??M),staleTime:Math.max(0,e?.staleTime??W)}}function $(e,n){return Date.now()-e.updatedAt<=n.staleTime}function H(e,n,i,t){for(e.delete(n),e.set(n,{response:i,updatedAt:Date.now()});e.size>t.maxEntries;){let s=e.keys().next().value;if(s===void 0)return;e.delete(s);}}async function J(e,n,i){let t=X(i);for(let s=0;;s+=1)try{return await e(n)}catch(c){if(L(c,n.signal)||s>=t.attempts||!t.shouldRetry({attempt:s+1,error:c}))throw c;await B(t.delay({attempt:s+1,error:c}),n.signal);}}function X(e){return typeof e=="number"?{attempts:Math.max(0,e),delay:()=>250,shouldRetry:()=>true}:{attempts:Math.max(0,e?.attempts??0),delay:n=>{let i=typeof e?.delay=="function"?e.delay(n):e?.delay??250;return Math.max(0,i)},shouldRetry:e?.shouldRetry??(()=>true)}}function B(e,n){return new Promise((i,t)=>{let s=globalThis.setTimeout(()=>{n.removeEventListener("abort",c),i();},e),c=()=>{globalThis.clearTimeout(s),t(new DOMException("Request aborted","AbortError"));};n.addEventListener("abort",c,{once:true});})}function L(e,n){return n.aborted||e instanceof DOMException&&e.name==="AbortError"||typeof e=="object"&&e!==null&&"name"in e&&e.name==="AbortError"}function K(e){let n=new WeakSet;return JSON.stringify(e,(i,t)=>typeof t=="bigint"?`bigint:${t.toString()}`:t instanceof Date?`date:${t.toISOString()}`:typeof t=="function"||typeof t=="symbol"?String(t):typeof t=="object"&&t!==null&&!Array.isArray(t)?n.has(t)?"[Circular]":(n.add(t),Object.fromEntries(Object.entries(t).sort(([s],[c])=>s.localeCompare(c)))):t)}export{Y as useDataTableDataSource};//# sourceMappingURL=data-source.js.map +//# sourceMappingURL=data-source.js.map \ No newline at end of file diff --git a/dist/data-source.js.map b/dist/data-source.js.map new file mode 100644 index 0000000..7fdc47b --- /dev/null +++ b/dist/data-source.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-source/use-data-table-data-source.ts"],"names":["DEFAULT_STALE_TIME","DEFAULT_MAX_CACHE_ENTRIES","useDataTableDataSource","options","aggregations","columnFilters","cursor","enabled","expansionPath","getRequestKey","globalFilter","grouping","initialData","mode","pagination","query","sorting","latestOptionsRef","cacheRef","activeRequestRef","requestIdRef","mountedRef","state","setState","requestQuery","requestKey","stableSerialize","runRequest","force","currentOptions","currentQuery","currentKey","activeRequest","cacheSettings","resolveCacheSettings","cached","isCacheFresh","controller","id","request","previous","promise","fetchWithRetry","response","resolvedCacheSettings","cacheResponse","error","isAbort","refresh","invalidate","key","hasNextPage","tableProps","cache","settings","oldestKey","source","retry","resolveRetrySettings","attempt","waitForRetry","context","value","delay","signal","resolve","reject","timeout","onAbort","seen","_key","nested","left","right"],"mappings":"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","file":"data-source.js","sourcesContent":["import * as React from \"react\";\nimport type {\n ColumnFiltersState,\n GroupingState,\n PaginationState,\n SortingState,\n} from \"@tanstack/react-table\";\nimport type { DataTableProps } from \"../types\";\n\n/** The supported server pagination strategies. */\nexport type DataTableDataSourceMode = \"offset\" | \"cursor\";\n\n/**\n * The serializable portion of a request. It is also passed to `getRequestKey`\n * so applications can define cache identity for domain-specific query values.\n */\nexport type DataTableDataSourceQuery = {\n mode: DataTableDataSourceMode;\n pagination: PaginationState;\n /** `pageIndex * pageSize`; useful for offset-based backends. */\n offset: number;\n /** The requested number of rows. */\n limit: number;\n /** The cursor for a cursor-based backend. `null` represents the first page. */\n cursor: TCursor | null;\n sorting: SortingState;\n columnFilters: ColumnFiltersState;\n /** Server-owned global filter value, normally the table toolbar query. */\n globalFilter?: string;\n /** Server-owned row grouping state. */\n grouping?: GroupingState;\n /** Requested aggregate functions keyed by result/column identifier. */\n aggregations?: Record;\n /** Stable ancestor/group identifiers for lazy child or group loading. */\n expansionPath?: Array;\n /** Application-owned request parameters, such as a tenant or parent ID. */\n query: TQuery | undefined;\n};\n\n/** A server request with an AbortSignal that is cancelled when superseded. */\nexport type DataTableDataSourceRequest =\n DataTableDataSourceQuery & {\n signal: AbortSignal;\n };\n\n/** A normalized server result for offset and cursor pagination. */\nexport type DataTableDataSourceResponse<\n TData,\n TCursor = string,\n TFacets = unknown,\n> = {\n rows: Array;\n /** Total matching rows, when the backend can provide it. */\n rowCount?: number;\n /** The cursor to use for the following page. `null` means no following page. */\n nextCursor?: TCursor | null;\n /** Backend-provided facet/count metadata for filter UIs. */\n facets?: TFacets;\n /** Stable row identifiers in response order when IDs are server-projected. */\n rowIds?: Array;\n /** Backend-provided aggregate values keyed by result/column identifier. */\n aggregates?: Record;\n /** Application-owned response metadata such as revision or timing data. */\n metadata?: Record;\n};\n\nexport type DataTableDataSource<\n TData,\n TQuery = undefined,\n TCursor = string,\n TFacets = unknown,\n> = (\n request: DataTableDataSourceRequest,\n) =>\n | DataTableDataSourceResponse\n | Promise>;\n\nexport type DataTableDataSourceRetryOptions =\n | number\n | {\n /** Number of retries after the initial attempt. Defaults to 0. */\n attempts?: number;\n /** Delay before every retry. Defaults to 250ms. */\n delay?: number | ((context: { attempt: number; error: unknown }) => number);\n shouldRetry?: (context: { attempt: number; error: unknown }) => boolean;\n };\n\nexport type DataTableDataSourceCacheOptions =\n | false\n | number\n | {\n /** Freshness lifetime in milliseconds. Defaults to 30 seconds. */\n staleTime?: number;\n /** Maximum cached results per hook instance. Defaults to 50. */\n maxEntries?: number;\n };\n\nexport type UseDataTableDataSourceOptions<\n TData,\n TQuery = undefined,\n TCursor = string,\n TFacets = unknown,\n> = Omit<\n DataTableDataSourceQuery,\n \"cursor\" | \"limit\" | \"offset\" | \"query\"\n> & {\n cursor?: TCursor | null;\n query?: TQuery;\n source: DataTableDataSource;\n enabled?: boolean;\n /** Retain the prior result while a changed query is loading. Defaults to true. */\n keepPreviousData?: boolean;\n cache?: DataTableDataSourceCacheOptions;\n retry?: DataTableDataSourceRetryOptions;\n /** Override request/cache identity when `query` contains non-serializable values. */\n getRequestKey?: (query: DataTableDataSourceQuery) => string;\n initialData?: Array;\n onSuccess?: (\n response: DataTableDataSourceResponse,\n request: DataTableDataSourceRequest,\n ) => void;\n onError?: (\n error: unknown,\n request: DataTableDataSourceRequest,\n ) => void;\n onPageIndexChange?: (pageIndex: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n onSortingChange?: (sorting: SortingState) => void;\n onColumnFiltersChange?: (filters: ColumnFiltersState) => void;\n onGlobalFilterChange?: (globalFilter: string) => void;\n onGroupingChange?: (grouping: GroupingState) => void;\n};\n\nexport type DataTableDataSourceTableProps = Pick<\n DataTableProps,\n | \"columnFilters\"\n | \"data\"\n | \"hasNextPage\"\n | \"isLoading\"\n | \"manualFiltering\"\n | \"manualGrouping\"\n | \"manualPagination\"\n | \"manualSorting\"\n | \"onColumnFiltersChange\"\n | \"onGroupingChange\"\n | \"onPageIndexChange\"\n | \"onPageSizeChange\"\n | \"onSortingChange\"\n | \"pageIndex\"\n | \"pageSize\"\n | \"sorting\"\n | \"grouping\"\n | \"toolbarQueryValue\"\n | \"onToolbarQueryValueChange\"\n | \"totalRowCount\"\n>;\n\nexport type UseDataTableDataSourceResult = {\n aggregates: Record | undefined;\n data: Array;\n error: unknown;\n facets: TFacets | undefined;\n isError: boolean;\n /** True while the first result for the active query is loading. */\n isLoading: boolean;\n /** True while any request for the active query is in flight. */\n isFetching: boolean;\n isSuccess: boolean;\n nextCursor: TCursor | null | undefined;\n metadata: Record | undefined;\n rowIds: Array | undefined;\n rowCount: number | undefined;\n /** Starts a network request, bypassing a fresh cache entry. */\n refresh: () => Promise | undefined>;\n /** Removes one cached request, or every cached request when omitted. */\n invalidate: (requestKey?: string) => void;\n /** Spread these into `DataTable` for manual paging, sorting, and filtering. */\n tableProps: DataTableDataSourceTableProps;\n};\n\ntype CachedResponse = {\n response: DataTableDataSourceResponse;\n updatedAt: number;\n};\n\ntype ActiveRequest = {\n controller: AbortController;\n id: number;\n key: string;\n promise: Promise | undefined>;\n request: DataTableDataSourceRequest;\n};\n\ntype SourceState = {\n aggregates: Record | undefined;\n data: Array;\n error: unknown;\n facets: TFacets | undefined;\n isFetching: boolean;\n metadata: Record | undefined;\n nextCursor: TCursor | null | undefined;\n responseKey: string | null;\n rowCount: number | undefined;\n rowIds: Array | undefined;\n status: \"idle\" | \"loading\" | \"success\" | \"error\";\n};\n\nconst DEFAULT_STALE_TIME = 30_000;\nconst DEFAULT_MAX_CACHE_ENTRIES = 50;\n\n/**\n * Fetches controlled, server-side table data with cancellation, retry, stale\n * response protection, per-hook caching, and manual DataTable props.\n */\nexport function useDataTableDataSource<\n TData,\n TQuery = undefined,\n TCursor = string,\n TFacets = unknown,\n>(\n options: UseDataTableDataSourceOptions,\n): UseDataTableDataSourceResult {\n const {\n aggregations,\n columnFilters,\n cursor,\n enabled = true,\n expansionPath,\n getRequestKey,\n globalFilter,\n grouping,\n initialData = [],\n mode,\n pagination,\n query,\n sorting,\n } = options;\n const latestOptionsRef = React.useRef(options);\n React.useEffect(() => {\n latestOptionsRef.current = options;\n }, [options]);\n const cacheRef = React.useRef(\n new Map>(),\n );\n const activeRequestRef = React.useRef<\n ActiveRequest | undefined\n >(undefined);\n const requestIdRef = React.useRef(0);\n const mountedRef = React.useRef(true);\n const [state, setState] = React.useState>(\n () => ({\n aggregates: undefined,\n data: initialData,\n error: null,\n facets: undefined,\n isFetching: false,\n metadata: undefined,\n nextCursor: undefined,\n responseKey: null,\n rowCount: undefined,\n rowIds: undefined,\n status: initialData.length > 0 ? \"success\" : \"idle\",\n }),\n );\n\n const requestQuery = React.useMemo>(\n () => ({\n aggregations,\n columnFilters,\n cursor: cursor ?? null,\n expansionPath,\n globalFilter,\n grouping,\n limit: pagination.pageSize,\n mode,\n offset: pagination.pageIndex * pagination.pageSize,\n pagination: { ...pagination },\n query,\n sorting,\n }),\n [\n aggregations,\n columnFilters,\n cursor,\n expansionPath,\n globalFilter,\n grouping,\n mode,\n pagination,\n query,\n sorting,\n ],\n );\n const requestKey = getRequestKey\n ? getRequestKey(requestQuery)\n : stableSerialize(requestQuery);\n\n const runRequest = React.useCallback(\n (\n force: boolean,\n ): Promise | undefined> => {\n const currentOptions = latestOptionsRef.current;\n const currentQuery: DataTableDataSourceQuery = {\n aggregations: currentOptions.aggregations,\n columnFilters: currentOptions.columnFilters,\n cursor: currentOptions.cursor ?? null,\n expansionPath: currentOptions.expansionPath,\n globalFilter: currentOptions.globalFilter,\n grouping: currentOptions.grouping,\n limit: currentOptions.pagination.pageSize,\n mode: currentOptions.mode,\n offset:\n currentOptions.pagination.pageIndex * currentOptions.pagination.pageSize,\n pagination: { ...currentOptions.pagination },\n query: currentOptions.query,\n sorting: currentOptions.sorting,\n };\n const currentKey = currentOptions.getRequestKey\n ? currentOptions.getRequestKey(currentQuery)\n : stableSerialize(currentQuery);\n const activeRequest = activeRequestRef.current;\n\n if (activeRequest?.key === currentKey) {\n return activeRequest.promise;\n }\n if (activeRequest) {\n activeRequest.controller.abort();\n activeRequestRef.current = undefined;\n }\n\n const cacheSettings = resolveCacheSettings(currentOptions.cache);\n const cached = cacheRef.current.get(currentKey);\n if (!force && cached && cacheSettings && isCacheFresh(cached, cacheSettings)) {\n if (mountedRef.current) {\n setState({\n aggregates: cached.response.aggregates,\n data: cached.response.rows,\n error: null,\n facets: cached.response.facets,\n isFetching: false,\n metadata: cached.response.metadata,\n nextCursor: cached.response.nextCursor,\n responseKey: currentKey,\n rowCount: cached.response.rowCount,\n rowIds: cached.response.rowIds,\n status: \"success\",\n });\n }\n return Promise.resolve(cached.response);\n }\n\n const controller = new AbortController();\n const id = ++requestIdRef.current;\n const request: DataTableDataSourceRequest = {\n ...currentQuery,\n signal: controller.signal,\n };\n if (mountedRef.current) {\n setState((previous) => ({\n ...previous,\n data: currentOptions.keepPreviousData === false ? [] : previous.data,\n error: null,\n isFetching: true,\n status: previous.responseKey === currentKey ? previous.status : \"loading\",\n }));\n }\n\n const promise = fetchWithRetry(\n currentOptions.source,\n request,\n currentOptions.retry,\n )\n .then((response) => {\n if (activeRequestRef.current?.id !== id) {\n return response;\n }\n const resolvedCacheSettings = resolveCacheSettings(currentOptions.cache);\n if (resolvedCacheSettings) {\n cacheResponse(cacheRef.current, currentKey, response, resolvedCacheSettings);\n }\n if (mountedRef.current) {\n setState({\n aggregates: response.aggregates,\n data: response.rows,\n error: null,\n facets: response.facets,\n isFetching: false,\n metadata: response.metadata,\n nextCursor: response.nextCursor,\n responseKey: currentKey,\n rowCount: response.rowCount,\n rowIds: response.rowIds,\n status: \"success\",\n });\n }\n currentOptions.onSuccess?.(response, request);\n return response;\n })\n .catch((error: unknown) => {\n if (isAbort(error, controller.signal) || activeRequestRef.current?.id !== id) {\n return undefined;\n }\n if (mountedRef.current) {\n setState((previous) => ({\n ...previous,\n error,\n isFetching: false,\n status: \"error\",\n }));\n }\n currentOptions.onError?.(error, request);\n return undefined;\n })\n .finally(() => {\n if (activeRequestRef.current?.id === id) {\n activeRequestRef.current = undefined;\n }\n });\n\n activeRequestRef.current = { controller, id, key: currentKey, promise, request };\n return promise;\n },\n [],\n );\n\n React.useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n activeRequestRef.current?.controller.abort();\n activeRequestRef.current = undefined;\n return;\n }\n void runRequest(false);\n }, [enabled, requestKey, runRequest]);\n\n React.useEffect(\n () => () => {\n mountedRef.current = false;\n activeRequestRef.current?.controller.abort();\n activeRequestRef.current = undefined;\n },\n [],\n );\n\n const refresh = React.useCallback(() => runRequest(true), [runRequest]);\n const invalidate = React.useCallback((key?: string) => {\n if (key === undefined) {\n cacheRef.current.clear();\n return;\n }\n cacheRef.current.delete(key);\n }, []);\n\n const hasNextPage =\n state.nextCursor !== undefined\n ? state.nextCursor !== null\n : state.rowCount === undefined\n ? undefined\n : pagination.pageIndex + 1 < Math.ceil(state.rowCount / pagination.pageSize);\n const tableProps = React.useMemo>(\n () => ({\n columnFilters,\n data: state.data,\n hasNextPage,\n isLoading: enabled && state.status === \"loading\",\n manualFiltering: true,\n manualGrouping: true,\n manualPagination: true,\n manualSorting: true,\n onColumnFiltersChange: options.onColumnFiltersChange,\n onGroupingChange: options.onGroupingChange,\n onPageIndexChange: options.onPageIndexChange,\n onPageSizeChange: options.onPageSizeChange,\n onSortingChange: options.onSortingChange,\n onToolbarQueryValueChange: options.onGlobalFilterChange,\n pageIndex: pagination.pageIndex,\n pageSize: pagination.pageSize,\n sorting,\n grouping,\n toolbarQueryValue: globalFilter,\n totalRowCount: state.rowCount,\n }),\n [\n columnFilters,\n enabled,\n globalFilter,\n grouping,\n hasNextPage,\n options.onColumnFiltersChange,\n options.onGlobalFilterChange,\n options.onGroupingChange,\n options.onPageIndexChange,\n options.onPageSizeChange,\n options.onSortingChange,\n pagination.pageIndex,\n pagination.pageSize,\n sorting,\n state.data,\n state.rowCount,\n state.status,\n ],\n );\n\n return {\n aggregates: state.aggregates,\n data: state.data,\n error: state.error,\n facets: state.facets,\n invalidate,\n isError: state.status === \"error\",\n isFetching: enabled && state.isFetching,\n isLoading: enabled && state.status === \"loading\",\n isSuccess: state.status === \"success\",\n metadata: state.metadata,\n nextCursor: state.nextCursor,\n refresh,\n rowCount: state.rowCount,\n rowIds: state.rowIds,\n tableProps,\n };\n}\n\nfunction resolveCacheSettings(\n cache: DataTableDataSourceCacheOptions | undefined,\n): { staleTime: number; maxEntries: number } | undefined {\n if (cache === false) {\n return undefined;\n }\n if (typeof cache === \"number\") {\n return { maxEntries: DEFAULT_MAX_CACHE_ENTRIES, staleTime: Math.max(0, cache) };\n }\n return {\n maxEntries: Math.max(1, cache?.maxEntries ?? DEFAULT_MAX_CACHE_ENTRIES),\n staleTime: Math.max(0, cache?.staleTime ?? DEFAULT_STALE_TIME),\n };\n}\n\nfunction isCacheFresh(\n cached: CachedResponse,\n settings: { staleTime: number },\n) {\n return Date.now() - cached.updatedAt <= settings.staleTime;\n}\n\nfunction cacheResponse(\n cache: Map>,\n key: string,\n response: DataTableDataSourceResponse,\n settings: { maxEntries: number },\n) {\n cache.delete(key);\n cache.set(key, { response, updatedAt: Date.now() });\n while (cache.size > settings.maxEntries) {\n const oldestKey = cache.keys().next().value;\n if (oldestKey === undefined) {\n return;\n }\n cache.delete(oldestKey);\n }\n}\n\nasync function fetchWithRetry(\n source: DataTableDataSource,\n request: DataTableDataSourceRequest,\n retry: DataTableDataSourceRetryOptions | undefined,\n) {\n const settings = resolveRetrySettings(retry);\n for (let attempt = 0; ; attempt += 1) {\n try {\n return await source(request);\n } catch (error) {\n if (\n isAbort(error, request.signal) ||\n attempt >= settings.attempts ||\n !settings.shouldRetry({ attempt: attempt + 1, error })\n ) {\n throw error;\n }\n await waitForRetry(settings.delay({ attempt: attempt + 1, error }), request.signal);\n }\n }\n}\n\nfunction resolveRetrySettings(retry: DataTableDataSourceRetryOptions | undefined) {\n if (typeof retry === \"number\") {\n return {\n attempts: Math.max(0, retry),\n delay: () => 250,\n shouldRetry: () => true,\n };\n }\n return {\n attempts: Math.max(0, retry?.attempts ?? 0),\n delay: (context: { attempt: number; error: unknown }) => {\n const value = typeof retry?.delay === \"function\" ? retry.delay(context) : (retry?.delay ?? 250);\n return Math.max(0, value);\n },\n shouldRetry: retry?.shouldRetry ?? (() => true),\n };\n}\n\nfunction waitForRetry(delay: number, signal: AbortSignal) {\n return new Promise((resolve, reject) => {\n const timeout = globalThis.setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delay);\n const onAbort = () => {\n globalThis.clearTimeout(timeout);\n reject(new DOMException(\"Request aborted\", \"AbortError\"));\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction isAbort(error: unknown, signal: AbortSignal) {\n return (\n signal.aborted ||\n (error instanceof DOMException && error.name === \"AbortError\") ||\n (typeof error === \"object\" &&\n error !== null &&\n \"name\" in error &&\n error.name === \"AbortError\")\n );\n}\n\nfunction stableSerialize(value: unknown): string {\n const seen = new WeakSet();\n return JSON.stringify(value, (_key, nested: unknown) => {\n if (typeof nested === \"bigint\") {\n return `bigint:${nested.toString()}`;\n }\n if (nested instanceof Date) {\n return `date:${nested.toISOString()}`;\n }\n if (typeof nested === \"function\" || typeof nested === \"symbol\") {\n return String(nested);\n }\n if (typeof nested === \"object\" && nested !== null && !Array.isArray(nested)) {\n if (seen.has(nested)) {\n return \"[Circular]\";\n }\n seen.add(nested);\n return Object.fromEntries(\n Object.entries(nested).sort(([left], [right]) => left.localeCompare(right)),\n );\n }\n return nested;\n });\n}\n"]} \ No newline at end of file diff --git a/dist/data-table-auto-page-size-EICVZJQ5.js b/dist/data-table-auto-page-size-EICVZJQ5.js new file mode 100644 index 0000000..7e707f6 --- /dev/null +++ b/dist/data-table-auto-page-size-EICVZJQ5.js @@ -0,0 +1,2 @@ +import*as o from'react';function R({config:a,currentPageSize:r,enabled:s,onPageSizeChange:c,viewportElement:e,viewportHeight:d}){let u=o.useRef(null),i=o.useRef(null);o.useEffect(()=>{if(!s||!e||d<=0){u.current=null;return}let t=null,p=()=>{t=null;let S=e.querySelector('[data-dtp-slot="data-table-row"]'),w=Math.max(1,S?.getBoundingClientRect().height||a?.estimateRowHeight||48),g=Math.max(1,Math.floor(a?.minRows??1)),H=Math.max(g,Math.floor(a?.maxRows??100)),b=e.querySelector("table"),z=b?Array.from(b.querySelectorAll("thead, tfoot")).reduce((A,x)=>A+x.getBoundingClientRect().height,0):0,M=Math.max(0,e.clientHeight-z),n=Math.min(H,Math.max(g,Math.floor(M/w))),h=i.current;if(h?.pageSize===r&&e.clientHeight>h.viewportHeight&&n>r){i.current=null;return}n===r||n===u.current||(u.current=n,i.current={pageSize:n,viewportHeight:e.clientHeight},c(n));},f=()=>{t===null&&(t=window.requestAnimationFrame(p));};if(f(),typeof ResizeObserver>"u")return ()=>{t!==null&&window.cancelAnimationFrame(t);};let l=new ResizeObserver(f);l.observe(e);let m=e.querySelector('[data-dtp-slot="data-table-row"]');return m&&l.observe(m),()=>{t!==null&&window.cancelAnimationFrame(t),l.disconnect();}},[a,r,s,c,e,d]);}function y(a){return R(a),null}export{y as default};//# sourceMappingURL=data-table-auto-page-size-EICVZJQ5.js.map +//# sourceMappingURL=data-table-auto-page-size-EICVZJQ5.js.map \ No newline at end of file diff --git a/dist/data-table-auto-page-size-EICVZJQ5.js.map b/dist/data-table-auto-page-size-EICVZJQ5.js.map new file mode 100644 index 0000000..f645410 --- /dev/null +++ b/dist/data-table-auto-page-size-EICVZJQ5.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/use-data-table-auto-page-size.ts","../src/core/data-table/data-table-auto-page-size.tsx"],"names":["useDataTableAutoPageSize","config","currentPageSize","enabled","onPageSizeChange","viewportElement","viewportHeight","lastRequestedPageSize","feedbackGuard","frameId","update","row","rowHeight","minRows","maxRows","table","occupiedHeight","total","element","bodyHeight","nextPageSize","previousRequest","scheduleUpdate","observer","DataTableAutoPageSize","props"],"mappings":"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","file":"data-table-auto-page-size-EICVZJQ5.js","sourcesContent":["import * as React from \"react\";\nimport type { DataTableAutoPageSizeConfig } from \"../types\";\n\nexport function useDataTableAutoPageSize({\n config,\n currentPageSize,\n enabled,\n onPageSizeChange,\n viewportElement,\n viewportHeight,\n}: {\n config: DataTableAutoPageSizeConfig | undefined;\n currentPageSize: number;\n enabled: boolean;\n onPageSizeChange: (pageSize: number) => void;\n viewportElement: HTMLElement | null;\n viewportHeight: number;\n}) {\n const lastRequestedPageSize = React.useRef(null);\n const feedbackGuard = React.useRef<{\n pageSize: number;\n viewportHeight: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!enabled || !viewportElement || viewportHeight <= 0) {\n lastRequestedPageSize.current = null;\n return;\n }\n\n let frameId: number | null = null;\n const update = () => {\n frameId = null;\n const row = viewportElement.querySelector(\n '[data-dtp-slot=\"data-table-row\"]',\n );\n const rowHeight = Math.max(\n 1,\n row?.getBoundingClientRect().height || config?.estimateRowHeight || 48,\n );\n const minRows = Math.max(1, Math.floor(config?.minRows ?? 1));\n const maxRows = Math.max(minRows, Math.floor(config?.maxRows ?? 100));\n const table = viewportElement.querySelector(\"table\");\n const occupiedHeight = table\n ? Array.from(table.querySelectorAll(\"thead, tfoot\")).reduce(\n (total, element) => total + element.getBoundingClientRect().height,\n 0,\n )\n : 0;\n const bodyHeight = Math.max(0, viewportElement.clientHeight - occupiedHeight);\n const nextPageSize = Math.min(\n maxRows,\n Math.max(minRows, Math.floor(bodyHeight / rowHeight)),\n );\n\n const previousRequest = feedbackGuard.current;\n if (\n previousRequest?.pageSize === currentPageSize &&\n viewportElement.clientHeight > previousRequest.viewportHeight &&\n nextPageSize > currentPageSize\n ) {\n // A content-sized viewport can grow in response to the rows we just\n // added. Do not recursively turn that growth into another request.\n feedbackGuard.current = null;\n return;\n }\n\n if (\n nextPageSize === currentPageSize ||\n nextPageSize === lastRequestedPageSize.current\n ) {\n return;\n }\n lastRequestedPageSize.current = nextPageSize;\n feedbackGuard.current = {\n pageSize: nextPageSize,\n viewportHeight: viewportElement.clientHeight,\n };\n onPageSizeChange(nextPageSize);\n };\n const scheduleUpdate = () => {\n if (frameId === null) {\n frameId = window.requestAnimationFrame(update);\n }\n };\n\n scheduleUpdate();\n if (typeof ResizeObserver === \"undefined\") {\n return () => {\n if (frameId !== null) window.cancelAnimationFrame(frameId);\n };\n }\n\n const observer = new ResizeObserver(scheduleUpdate);\n observer.observe(viewportElement);\n const row = viewportElement.querySelector(\n '[data-dtp-slot=\"data-table-row\"]',\n );\n if (row) observer.observe(row);\n\n return () => {\n if (frameId !== null) window.cancelAnimationFrame(frameId);\n observer.disconnect();\n };\n }, [\n config,\n currentPageSize,\n enabled,\n onPageSizeChange,\n viewportElement,\n viewportHeight,\n ]);\n}\n","import { useDataTableAutoPageSize } from \"./use-data-table-auto-page-size\";\n\nexport default function DataTableAutoPageSize(\n props: Parameters[0],\n) {\n useDataTableAutoPageSize(props);\n return null;\n}\n"]} \ No newline at end of file diff --git a/dist/data-table-clipboard-SFXQFZS3.js b/dist/data-table-clipboard-SFXQFZS3.js new file mode 100644 index 0000000..44256d4 --- /dev/null +++ b/dist/data-table-clipboard-SFXQFZS3.js @@ -0,0 +1,6 @@ +import {w,p,B,l}from'./chunk-4P45F2OY.js';import'./chunk-XTVBESM5.js';async function I({clipboard:i,cellSelection:c,table:t}){if(i===false)return;let e=i===true?{}:i,n=e.scope??"page",r=e.columns?new Set(e.columns):void 0,l=t.getVisibleLeafColumns(),s=l.filter(o=>!w(o.id)&&o.id!=="__spacer__"&&(!r||r.has(o.id))),a=n==="cellSelection"?y(t,l,c):void 0,m=a?.columns??s,C=n==="cellSelection"?a?.rows??[]:p(t,n),d=[];(e.includeHeaders??n!=="cellSelection")&&d.push(m.map(o=>typeof o.columnDef.header=="string"?o.columnDef.header:B(o.id)));for(let o of C)d.push(m.map(u=>{let b=o.getValue(u.id);return e.getCellValue?e.getCellValue({columnId:u.id,row:o.original,rowId:o.id,value:b}):b}));let T=e.delimiter??" ",f=d.map(o=>o.map(u=>D(u,T,e.escapeFormulaValues??true)).join(T)).join(` +`);return e.onCopy?await e.onCopy({rows:C.map(o=>o.original),scope:n,text:f}):typeof navigator<"u"&&typeof navigator.clipboard?.writeText=="function"&&await navigator.clipboard.writeText(f),f}function y(i,c,t){if(!t)return;let e=i.getRowModel().flatRows,n=e.findIndex(a=>a.id===t.anchor.rowId),r=e.findIndex(a=>a.id===t.focus.rowId),l=c.findIndex(a=>a.id===t.anchor.columnId),s=c.findIndex(a=>a.id===t.focus.columnId);if(!(n<0||r<0||l<0||s<0))return {rows:e.slice(Math.min(n,r),Math.max(n,r)+1),columns:c.slice(Math.min(l,s),Math.max(l,s)+1).filter(a=>!w(a.id)&&a.id!=="__spacer__")}}function S(i,c=" "){let t=[],e=[],n="",r=false;for(let l=0;l1||e[0]||t.length===0)&&t.push(e),t}function D(i,c,t){let e=l(i);return t&&typeof i=="string"&&/^[\t\r ]*[=+\-@]/.test(i)&&(e=`'${e}`),e.includes(c)||e.includes('"')||e.includes(` +`)||e.includes("\r")?`"${e.replace(/"/g,'""')}"`:e}export{I as copyDataTableToClipboard,S as parseDataTableClipboardText};//# sourceMappingURL=data-table-clipboard-SFXQFZS3.js.map +//# sourceMappingURL=data-table-clipboard-SFXQFZS3.js.map \ No newline at end of file diff --git a/dist/data-table-clipboard-SFXQFZS3.js.map b/dist/data-table-clipboard-SFXQFZS3.js.map new file mode 100644 index 0000000..3c325e1 --- /dev/null +++ b/dist/data-table-clipboard-SFXQFZS3.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/data-table-clipboard.ts"],"names":["copyDataTableToClipboard","clipboard","cellSelection","table","options","scope","requestedColumnIds","allVisibleColumns","visibleColumns","column","isUtilityColumnId","selectedRange","getDataTableCellSelectionRange","columns","rows","getDataTableExportRows","values","startCase","row","value","delimiter","text","escapeDelimitedCell","selection","anchorRow","focusRow","anchorColumn","focusColumn","parseDataTableClipboardText","quoted","index","character","nextCharacter","escapeFormulaValues","normalizeFilterValue"],"mappings":"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","file":"data-table-clipboard-SFXQFZS3.js","sourcesContent":["import type { Column, Table as TanStackTable } from \"@tanstack/react-table\";\nimport type {\n DataTableCellSelection,\n DataTableClipboardCopyOptions,\n} from \"../types\";\nimport {\n getDataTableExportRows,\n isUtilityColumnId,\n normalizeFilterValue,\n startCase,\n} from \"./data-table-utils\";\n\nexport async function copyDataTableToClipboard({\n clipboard,\n cellSelection,\n table,\n}: {\n clipboard: boolean | DataTableClipboardCopyOptions;\n cellSelection?: DataTableCellSelection | null;\n table: TanStackTable;\n}) {\n if (clipboard === false) return undefined;\n\n const options: DataTableClipboardCopyOptions =\n clipboard === true ? {} : clipboard;\n const scope = options.scope ?? \"page\";\n const requestedColumnIds = options.columns\n ? new Set(options.columns)\n : undefined;\n const allVisibleColumns = table.getVisibleLeafColumns();\n const visibleColumns = allVisibleColumns.filter(\n (column) =>\n !isUtilityColumnId(column.id) &&\n column.id !== \"__spacer__\" &&\n (!requestedColumnIds || requestedColumnIds.has(column.id)),\n );\n const selectedRange =\n scope === \"cellSelection\"\n ? getDataTableCellSelectionRange(table, allVisibleColumns, cellSelection)\n : undefined;\n const columns = selectedRange?.columns ?? visibleColumns;\n const rows =\n scope === \"cellSelection\"\n ? (selectedRange?.rows ?? [])\n : getDataTableExportRows(table, scope);\n const values: Array> = [];\n\n if (options.includeHeaders ?? scope !== \"cellSelection\") {\n values.push(\n columns.map((column) =>\n typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : startCase(column.id),\n ),\n );\n }\n\n for (const row of rows) {\n values.push(\n columns.map((column) => {\n const value = row.getValue(column.id);\n return options.getCellValue\n ? options.getCellValue({\n columnId: column.id,\n row: row.original,\n rowId: row.id,\n value,\n })\n : value;\n }),\n );\n }\n\n const delimiter = options.delimiter ?? \"\\t\";\n const text = values\n .map((row) =>\n row\n .map((value) =>\n escapeDelimitedCell(\n value,\n delimiter,\n options.escapeFormulaValues ?? true,\n ),\n )\n .join(delimiter),\n )\n .join(\"\\n\");\n\n if (options.onCopy) {\n await options.onCopy({\n rows: rows.map((row) => row.original),\n scope,\n text,\n });\n } else if (\n typeof navigator !== \"undefined\" &&\n typeof navigator.clipboard?.writeText === \"function\"\n ) {\n await navigator.clipboard.writeText(text);\n }\n\n return text;\n}\n\nfunction getDataTableCellSelectionRange(\n table: TanStackTable,\n columns: Array>,\n selection: DataTableCellSelection | null | undefined,\n) {\n if (!selection) return undefined;\n const rows = table.getRowModel().flatRows;\n const anchorRow = rows.findIndex((row) => row.id === selection.anchor.rowId);\n const focusRow = rows.findIndex((row) => row.id === selection.focus.rowId);\n const anchorColumn = columns.findIndex(\n (column) => column.id === selection.anchor.columnId,\n );\n const focusColumn = columns.findIndex(\n (column) => column.id === selection.focus.columnId,\n );\n if (anchorRow < 0 || focusRow < 0 || anchorColumn < 0 || focusColumn < 0) {\n return undefined;\n }\n return {\n rows: rows.slice(\n Math.min(anchorRow, focusRow),\n Math.max(anchorRow, focusRow) + 1,\n ),\n columns: columns\n .slice(\n Math.min(anchorColumn, focusColumn),\n Math.max(anchorColumn, focusColumn) + 1,\n )\n .filter(\n (column) =>\n !isUtilityColumnId(column.id) && column.id !== \"__spacer__\",\n ),\n };\n}\n\nexport function parseDataTableClipboardText(\n text: string,\n delimiter: \"\\t\" | \",\" = \"\\t\",\n) {\n const rows: Array> = [];\n let row: Array = [];\n let value = \"\";\n let quoted = false;\n\n for (let index = 0; index < text.length; index += 1) {\n const character = text[index];\n const nextCharacter = text[index + 1];\n if (character === '\"') {\n if (quoted && nextCharacter === '\"') {\n value += '\"';\n index += 1;\n } else {\n quoted = !quoted;\n }\n continue;\n }\n if (!quoted && character === delimiter) {\n row.push(value);\n value = \"\";\n continue;\n }\n if (!quoted && (character === \"\\n\" || character === \"\\r\")) {\n if (character === \"\\r\" && nextCharacter === \"\\n\") index += 1;\n row.push(value);\n rows.push(row);\n row = [];\n value = \"\";\n continue;\n }\n value += character;\n }\n\n row.push(value);\n if (row.length > 1 || row[0] || rows.length === 0) rows.push(row);\n return rows;\n}\n\nfunction escapeDelimitedCell(\n value: unknown,\n delimiter: string,\n escapeFormulaValues: boolean,\n) {\n let text = normalizeFilterValue(value);\n if (\n escapeFormulaValues &&\n typeof value === \"string\" &&\n /^[\\t\\r ]*[=+\\-@]/.test(value)\n ) {\n text = `'${text}`;\n }\n if (\n text.includes(delimiter) ||\n text.includes('\"') ||\n text.includes(\"\\n\") ||\n text.includes(\"\\r\")\n ) {\n return `\"${text.replace(/\"/g, '\"\"')}\"`;\n }\n return text;\n}\n"]} \ No newline at end of file diff --git a/dist/data-table-state-overlay-AQ7VU6EM.js b/dist/data-table-state-overlay-AQ7VU6EM.js new file mode 100644 index 0000000..390e241 --- /dev/null +++ b/dist/data-table-state-overlay-AQ7VU6EM.js @@ -0,0 +1,2 @@ +import'react';import {jsx,jsxs}from'react/jsx-runtime';function c(r){let{Button:l}=r;return function({labels:a,overlay:t,rows:o,toolbarQueryValue:n}){if(t.error==null)return null;let i={rows:o,toolbarQueryValue:n,error:t.error,isRetrying:t.isRetrying??false,retry:t.onRetry};return jsx("div",{"data-dtp-slot":"data-table-state-overlay",className:"absolute inset-0 z-40 flex items-center justify-center bg-background/85 p-4 backdrop-blur-sm",role:"alert",children:t.renderError?t.renderError(i):jsxs("div",{className:"flex max-w-md flex-col items-center gap-3 text-center",children:[jsx("div",{className:"text-base font-semibold",children:a.errorTitle}),jsx("p",{className:"text-sm text-muted-foreground",children:a.errorDescription}),t.onRetry?jsx(l,{type:"button",disabled:t.isRetrying,onClick:()=>{t.onRetry?.();},children:a.retry}):null]})})}}export{c as createDataTableStateOverlay};//# sourceMappingURL=data-table-state-overlay-AQ7VU6EM.js.map +//# sourceMappingURL=data-table-state-overlay-AQ7VU6EM.js.map \ No newline at end of file diff --git a/dist/data-table-state-overlay-AQ7VU6EM.js.map b/dist/data-table-state-overlay-AQ7VU6EM.js.map new file mode 100644 index 0000000..516761f --- /dev/null +++ b/dist/data-table-state-overlay-AQ7VU6EM.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/data-table-state-overlay.tsx"],"names":["createDataTableStateOverlay","ui","Button","labels","overlay","rows","toolbarQueryValue","context","jsx","jsxs"],"mappings":"uDAQO,SAASA,CAAAA,CAA4BC,CAAAA,CAAoB,CAC9D,GAAM,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAID,CAAAA,CAEnB,OAAO,SAAsC,CAC3C,MAAA,CAAAE,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,iBAAA,CAAAC,CACF,CAAA,CAKG,CACD,GAAIF,CAAAA,CAAQ,KAAA,EAAS,IAAA,CACnB,OAAO,IAAA,CAET,IAAMG,CAAAA,CAA+C,CACnD,IAAA,CAAAF,CAAAA,CACA,iBAAA,CAAAC,EACA,KAAA,CAAOF,CAAAA,CAAQ,KAAA,CACf,UAAA,CAAYA,CAAAA,CAAQ,UAAA,EAAc,KAAA,CAClC,KAAA,CAAOA,CAAAA,CAAQ,OACjB,CAAA,CAEA,OACEI,GAAAA,CAAC,KAAA,CAAA,CACC,gBAAc,0BAAA,CACd,SAAA,CAAU,8FAAA,CACV,IAAA,CAAK,OAAA,CAEJ,QAAA,CAAAJ,CAAAA,CAAQ,WAAA,CACPA,CAAAA,CAAQ,WAAA,CAAYG,CAAO,CAAA,CAE3BE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,uDAAA,CACb,QAAA,CAAA,CAAAD,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CAA2B,QAAA,CAAAL,CAAAA,CAAO,UAAA,CAAW,CAAA,CAC5DK,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CACV,SAAAL,CAAAA,CAAO,gBAAA,CACV,CAAA,CACCC,CAAAA,CAAQ,OAAA,CACPI,GAAAA,CAACN,CAAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAA,CAAUE,CAAAA,CAAQ,UAAA,CAClB,OAAA,CAAS,IAAM,CACRA,CAAAA,CAAQ,OAAA,KACf,CAAA,CAEC,QAAA,CAAAD,CAAAA,CAAO,KAAA,CACV,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CAEJ,CAEJ,CACF","file":"data-table-state-overlay-AQ7VU6EM.js","sourcesContent":["import * as React from \"react\";\nimport type {\n DataTableLabels,\n DataTableStateOverlay,\n DataTableStateOverlayContext,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\n\nexport function createDataTableStateOverlay(ui: DataTableUiKit) {\n const { Button } = ui;\n\n return function DataTableStateOverlay({\n labels,\n overlay,\n rows,\n toolbarQueryValue,\n }: {\n labels: DataTableLabels;\n overlay: DataTableStateOverlay;\n rows: Array;\n toolbarQueryValue: string;\n }) {\n if (overlay.error == null) {\n return null;\n }\n const context: DataTableStateOverlayContext = {\n rows,\n toolbarQueryValue,\n error: overlay.error,\n isRetrying: overlay.isRetrying ?? false,\n retry: overlay.onRetry,\n };\n\n return (\n \n {overlay.renderError ? (\n overlay.renderError(context)\n ) : (\n
    \n
    {labels.errorTitle}
    \n

    \n {labels.errorDescription}\n

    \n {overlay.onRetry ? (\n {\n void overlay.onRetry?.();\n }}\n >\n {labels.retry}\n \n ) : null}\n
    \n )}\n \n );\n };\n}\n"]} \ No newline at end of file diff --git a/dist/data-table-toolbar-operations-IDEGCKBK.js b/dist/data-table-toolbar-operations-IDEGCKBK.js new file mode 100644 index 0000000..7f28e3c --- /dev/null +++ b/dist/data-table-toolbar-operations-IDEGCKBK.js @@ -0,0 +1,2 @@ +import {s}from'./chunk-CVR2ZXHQ.js';import*as d from'react';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function ne({placement:l,ui:u,labels:t,enableColumnChooser:h,enableFilterChips:O,enableResetLayout:y,enableSavedViews:M,enableColumnPinning:B,columnVisibilityOptions:H,onColumnVisibilityChange:U,onColumnPinningChange:c,reorderColumn:_,table:v,onResetColumnLayout:$,savedViews:z,onCreateSavedView:P,onApplySavedView:j,onRenameSavedView:K,onDeleteSavedView:W,toolbarQueryValue:D,onToolbarQueryValueChange:V,activeColumnFilters:T,onColumnFilterChange:q,onClearColumnFilters:Q}){let[k,J]=d.useState(""),[f,E]=d.useState(""),[X,L]=d.useState(null),[w,R]=d.useState(""),{Button:b,DropdownMenuCheckboxItem:Y,DropdownMenuGroup:x,DropdownMenuItem:r,DropdownMenuLabel:A,DropdownMenuSeparator:g,InputGroup:C,InputGroupAddon:Z,InputGroupInput:S}=u,m=v.getAllLeafColumns().map(e=>e.id).filter(e=>!e.startsWith("__")),ee=H.filter(e=>e.label.toLocaleLowerCase().includes(k.toLocaleLowerCase())),I=T.length+(D?1:0);if(l==="chips")return !O||!I?null:jsxs("div",{"data-dtp-slot":"data-table-active-filters","aria-label":`${t.filters}: ${I}`,className:"flex min-w-0 flex-wrap items-center gap-2",children:[jsxs("span",{className:"text-sm opacity-70",children:[t.filters," (",I,")"]}),D?jsxs(b,{type:"button",variant:"secondary",size:"sm","aria-label":t.clearSearch,onClick:()=>V(""),children:[D," ",jsx("span",{"aria-hidden":"true",children:"\xD7"})]}):null,T.map(e=>jsxs(b,{type:"button",variant:"secondary",size:"sm","aria-label":`${t.clearFilters}: ${e.label}`,onClick:()=>q(e.id,""),children:[e.label,": ",te(e.value)," ",jsx("span",{"aria-hidden":"true",children:"\xD7"})]},e.id)),jsx(b,{type:"button",variant:"ghost",size:"sm",onClick:()=>{V(""),Q();},children:t.clearFilters})]});if(!h&&!y&&!M)return null;let G=e=>v.setColumnVisibility(a=>{let o={...a};for(let p of v.getAllLeafColumns())!p.id.startsWith("__")&&p.getCanHide()&&(o[p.id]=e);return o}),F=(e,a)=>{let o=m.indexOf(e),p=m[o+a];o>=0&&p&&_(e,p);};return jsxs(Fragment,{children:[h?jsxs(Fragment,{children:[jsx(g,{}),jsx(A,{children:t.columns}),jsx("div",{className:"px-2 pb-2",children:jsxs(C,{children:[jsx(S,{value:k,onChange:e=>J(e.target.value),placeholder:t.searchColumns,"aria-label":t.searchColumns}),jsx(Z,{align:"inline-start","aria-hidden":"true",children:jsx(s,{})})]})}),jsxs(x,{children:[jsx(r,{onSelect:e=>{e.preventDefault(),G(true);},children:t.showAllColumns}),jsx(r,{onSelect:e=>{e.preventDefault(),G(false);},children:t.hideAllColumns}),ee.map(e=>{let a=m.indexOf(e.id);return jsxs(d.Fragment,{children:[jsx(Y,{checked:e.visible,disabled:!e.canHide,onCheckedChange:o=>U?.(e.id,o===true),children:e.label}),jsx(r,{disabled:a<=0,onSelect:o=>{o.preventDefault(),F(e.id,-1);},children:t.moveColumnEarlier(e.label)}),jsx(r,{disabled:a<0||a===m.length-1,onSelect:o=>{o.preventDefault(),F(e.id,1);},children:t.moveColumnLater(e.label)}),B?jsxs(Fragment,{children:[jsxs(r,{onSelect:o=>{o.preventDefault(),c(e.id,"left");},children:[t.pinLeft,": ",e.label]}),jsxs(r,{onSelect:o=>{o.preventDefault(),c(e.id,"right");},children:[t.pinRight,": ",e.label]}),jsxs(r,{onSelect:o=>{o.preventDefault(),c(e.id,false);},children:[t.unpin,": ",e.label]})]}):null]},e.id)})]})]}):null,y?jsxs(Fragment,{children:[jsx(g,{}),jsx(r,{onSelect:e=>{e.preventDefault(),$();},children:t.resetColumnLayout})]}):null,M?jsxs(Fragment,{children:[jsx(g,{}),jsx(A,{children:t.savedViews}),jsx("div",{className:"px-2 pb-2",children:jsx(C,{children:jsx(S,{value:f,onChange:e=>E(e.target.value),placeholder:t.savedViewName,"aria-label":t.savedViewName})})}),jsx(r,{disabled:!f.trim(),onSelect:e=>{e.preventDefault(),P(f.trim())&&E("");},children:t.createSavedView}),jsx(x,{children:z.map(e=>X===e.id?jsxs("div",{className:"flex gap-1 px-2 py-1",role:"group","aria-label":t.renameSavedView(e.name),children:[jsx(C,{children:jsx(S,{value:w,onChange:a=>R(a.target.value),"aria-label":t.savedViewName})}),jsx(r,{onSelect:a=>{a.preventDefault(),w.trim()&&K(e.id,w.trim())&&L(null);},children:t.saveSavedView})]},e.id):jsxs(d.Fragment,{children:[jsx(r,{onSelect:a=>{a.preventDefault(),j(e.id);},children:e.name}),jsx(r,{onSelect:a=>{a.preventDefault(),L(e.id),R(e.name);},children:t.renameSavedView(e.name)}),jsx(r,{onSelect:a=>{a.preventDefault(),W(e.id);},children:t.deleteSavedView(e.name)})]},e.id))})]}):null]})}function te(l){if(Array.isArray(l))return l.map(String).join(", ");if(l&&typeof l=="object"){let u=l;if("from"in u||"to"in u)return [u.from,u.to].filter(Boolean).map(String).join("\u2013")}return String(l)}export{ne as default};//# sourceMappingURL=data-table-toolbar-operations-IDEGCKBK.js.map +//# sourceMappingURL=data-table-toolbar-operations-IDEGCKBK.js.map \ No newline at end of file diff --git a/dist/data-table-toolbar-operations-IDEGCKBK.js.map b/dist/data-table-toolbar-operations-IDEGCKBK.js.map new file mode 100644 index 0000000..c65d945 --- /dev/null +++ b/dist/data-table-toolbar-operations-IDEGCKBK.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/core/data-table/data-table-toolbar-operations.tsx"],"names":["ToolbarDataOperations","placement","ui","labels","enableColumnChooser","enableFilterChips","enableResetLayout","enableSavedViews","enableColumnPinning","columnVisibilityOptions","onColumnVisibilityChange","onColumnPinningChange","reorderColumn","table","onResetColumnLayout","savedViews","onCreateSavedView","onApplySavedView","onRenameSavedView","onDeleteSavedView","toolbarQueryValue","onToolbarQueryValueChange","activeColumnFilters","onColumnFilterChange","onClearColumnFilters","columnQuery","setColumnQuery","newSavedViewName","setNewSavedViewName","renamingSavedViewId","setRenamingSavedViewId","renamedSavedViewName","setRenamedSavedViewName","Button","DropdownMenuCheckboxItem","DropdownMenuGroup","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","InputGroup","InputGroupAddon","InputGroupInput","orderedIds","column","id","columns","activeCount","jsxs","jsx","filter","formatValue","setVisibility","visible","current","next","move","direction","index","target","Fragment","event","IconSearch","checked","view","value","range"],"mappings":"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","file":"data-table-toolbar-operations-IDEGCKBK.js","sourcesContent":["import * as React from \"react\";\nimport type { Table } from \"@tanstack/react-table\";\nimport { IconSearch } from \"../icons\";\nimport type {\n DataTableColumnFixed,\n DataTableColumnVisibilityOption,\n DataTableLabels,\n DataTableSavedView,\n} from \"../types\";\nimport type { DataTableUiKit } from \"../ui-kit\";\n\ntype ToolbarUi = Pick<\n DataTableUiKit,\n | \"Button\"\n | \"DropdownMenuCheckboxItem\"\n | \"DropdownMenuGroup\"\n | \"DropdownMenuItem\"\n | \"DropdownMenuLabel\"\n | \"DropdownMenuSeparator\"\n | \"InputGroup\"\n | \"InputGroupAddon\"\n | \"InputGroupInput\"\n>;\n\ntype ActiveFilter = { id: string; label: string; value: unknown };\n\ntype ToolbarDataOperationsProps = {\n placement: \"menu\" | \"chips\";\n ui: ToolbarUi;\n labels: Required;\n enableColumnChooser: boolean;\n enableFilterChips: boolean;\n enableResetLayout: boolean;\n enableSavedViews: boolean;\n enableColumnPinning: boolean;\n columnVisibilityOptions: Array;\n onColumnVisibilityChange?: (columnId: string, visible: boolean) => void;\n onColumnPinningChange: (\n columnId: string,\n side: DataTableColumnFixed | false,\n ) => void;\n reorderColumn: (sourceColumnId: string, targetColumnId: string) => void;\n table: Table;\n onResetColumnLayout: () => void;\n savedViews: Array;\n onCreateSavedView: (name: string) => DataTableSavedView | undefined;\n onApplySavedView: (id: string) => boolean;\n onRenameSavedView: (\n id: string,\n name: string,\n ) => DataTableSavedView | undefined;\n onDeleteSavedView: (id: string) => boolean;\n toolbarQueryValue: string;\n onToolbarQueryValueChange: (value: string) => void;\n activeColumnFilters: Array;\n onColumnFilterChange: (columnId: string, value: unknown) => void;\n onClearColumnFilters: () => void;\n};\n\nexport default function ToolbarDataOperations({\n placement,\n ui,\n labels,\n enableColumnChooser,\n enableFilterChips,\n enableResetLayout,\n enableSavedViews,\n enableColumnPinning,\n columnVisibilityOptions,\n onColumnVisibilityChange,\n onColumnPinningChange,\n reorderColumn,\n table,\n onResetColumnLayout,\n savedViews,\n onCreateSavedView,\n onApplySavedView,\n onRenameSavedView,\n onDeleteSavedView,\n toolbarQueryValue,\n onToolbarQueryValueChange,\n activeColumnFilters,\n onColumnFilterChange,\n onClearColumnFilters,\n}: ToolbarDataOperationsProps) {\n const [columnQuery, setColumnQuery] = React.useState(\"\");\n const [newSavedViewName, setNewSavedViewName] = React.useState(\"\");\n const [renamingSavedViewId, setRenamingSavedViewId] = React.useState<\n string | null\n >(null);\n const [renamedSavedViewName, setRenamedSavedViewName] = React.useState(\"\");\n const {\n Button,\n DropdownMenuCheckboxItem,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n } = ui;\n const orderedIds = table\n .getAllLeafColumns()\n .map((column) => column.id)\n .filter((id) => !id.startsWith(\"__\"));\n const columns = columnVisibilityOptions.filter((column) =>\n column.label.toLocaleLowerCase().includes(columnQuery.toLocaleLowerCase()),\n );\n const activeCount = activeColumnFilters.length + (toolbarQueryValue ? 1 : 0);\n\n if (placement === \"chips\") {\n if (!enableFilterChips || !activeCount) {\n return null;\n }\n return (\n \n \n {labels.filters} ({activeCount})\n \n {toolbarQueryValue ? (\n onToolbarQueryValueChange(\"\")}\n >\n {toolbarQueryValue} ×\n \n ) : null}\n {activeColumnFilters.map((filter) => (\n onColumnFilterChange(filter.id, \"\")}\n >\n {filter.label}: {formatValue(filter.value)}{\" \"}\n ×\n \n ))}\n {\n onToolbarQueryValueChange(\"\");\n onClearColumnFilters();\n }}\n >\n {labels.clearFilters}\n \n \n );\n }\n\n if (!enableColumnChooser && !enableResetLayout && !enableSavedViews) {\n return null;\n }\n const setVisibility = (visible: boolean) =>\n table.setColumnVisibility((current) => {\n const next = { ...current };\n for (const column of table.getAllLeafColumns()) {\n if (!column.id.startsWith(\"__\") && column.getCanHide()) {\n next[column.id] = visible;\n }\n }\n return next;\n });\n const move = (id: string, direction: -1 | 1) => {\n const index = orderedIds.indexOf(id);\n const target = orderedIds[index + direction];\n if (index >= 0 && target) {\n reorderColumn(id, target);\n }\n };\n return (\n <>\n {enableColumnChooser ? (\n <>\n \n {labels.columns}\n
    \n \n ) =>\n setColumnQuery(event.target.value)\n }\n placeholder={labels.searchColumns}\n aria-label={labels.searchColumns}\n />\n \n \n \n \n
    \n \n {\n event.preventDefault();\n setVisibility(true);\n }}\n >\n {labels.showAllColumns}\n \n {\n event.preventDefault();\n setVisibility(false);\n }}\n >\n {labels.hideAllColumns}\n \n {columns.map((column) => {\n const index = orderedIds.indexOf(column.id);\n return (\n \n \n onColumnVisibilityChange?.(\n column.id,\n checked === true,\n )\n }\n >\n {column.label}\n \n {\n event.preventDefault();\n move(column.id, -1);\n }}\n >\n {labels.moveColumnEarlier(column.label)}\n \n {\n event.preventDefault();\n move(column.id, 1);\n }}\n >\n {labels.moveColumnLater(column.label)}\n \n {enableColumnPinning ? (\n <>\n {\n event.preventDefault();\n onColumnPinningChange(column.id, \"left\");\n }}\n >\n {labels.pinLeft}: {column.label}\n \n {\n event.preventDefault();\n onColumnPinningChange(column.id, \"right\");\n }}\n >\n {labels.pinRight}: {column.label}\n \n {\n event.preventDefault();\n onColumnPinningChange(column.id, false);\n }}\n >\n {labels.unpin}: {column.label}\n \n \n ) : null}\n \n );\n })}\n \n \n ) : null}\n {enableResetLayout ? (\n <>\n \n {\n event.preventDefault();\n onResetColumnLayout();\n }}\n >\n {labels.resetColumnLayout}\n \n \n ) : null}\n {enableSavedViews ? (\n <>\n \n {labels.savedViews}\n
    \n \n ) =>\n setNewSavedViewName(event.target.value)\n }\n placeholder={labels.savedViewName}\n aria-label={labels.savedViewName}\n />\n \n
    \n {\n event.preventDefault();\n if (onCreateSavedView(newSavedViewName.trim())) {\n setNewSavedViewName(\"\");\n }\n }}\n >\n {labels.createSavedView}\n \n \n {savedViews.map((view) =>\n renamingSavedViewId === view.id ? (\n \n \n ,\n ) => setRenamedSavedViewName(event.target.value)}\n aria-label={labels.savedViewName}\n />\n \n {\n event.preventDefault();\n if (\n renamedSavedViewName.trim() &&\n onRenameSavedView(\n view.id,\n renamedSavedViewName.trim(),\n )\n ) {\n setRenamingSavedViewId(null);\n }\n }}\n >\n {labels.saveSavedView}\n \n \n ) : (\n \n {\n event.preventDefault();\n onApplySavedView(view.id);\n }}\n >\n {view.name}\n \n {\n event.preventDefault();\n setRenamingSavedViewId(view.id);\n setRenamedSavedViewName(view.name);\n }}\n >\n {labels.renameSavedView(view.name)}\n \n {\n event.preventDefault();\n onDeleteSavedView(view.id);\n }}\n >\n {labels.deleteSavedView(view.name)}\n \n \n ),\n )}\n \n \n ) : null}\n \n );\n}\n\nfunction formatValue(value: unknown) {\n if (Array.isArray(value)) {\n return value.map(String).join(\", \");\n }\n if (value && typeof value === \"object\") {\n const range = value as { from?: unknown; to?: unknown };\n if (\"from\" in range || \"to\" in range) {\n return [range.from, range.to]\n .filter(Boolean)\n .map(String)\n .join(\"–\");\n }\n }\n return String(value);\n}\n"]} \ No newline at end of file diff --git a/dist/data-table-virtual-card-panel-KF2P5D3K.js b/dist/data-table-virtual-card-panel-KF2P5D3K.js new file mode 100644 index 0000000..d243d6e --- /dev/null +++ b/dist/data-table-virtual-card-panel-KF2P5D3K.js @@ -0,0 +1,2 @@ +export{a as DataTableVirtualCardPanel}from'./chunk-K7SNDVV2.js';import'./chunk-EJHT5JBZ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';//# sourceMappingURL=data-table-virtual-card-panel-KF2P5D3K.js.map +//# sourceMappingURL=data-table-virtual-card-panel-KF2P5D3K.js.map \ No newline at end of file diff --git a/dist/data-table-virtual-card-panel-RWD765II.js.map b/dist/data-table-virtual-card-panel-KF2P5D3K.js.map similarity index 62% rename from dist/data-table-virtual-card-panel-RWD765II.js.map rename to dist/data-table-virtual-card-panel-KF2P5D3K.js.map index 73bf424..18592d4 100644 --- a/dist/data-table-virtual-card-panel-RWD765II.js.map +++ b/dist/data-table-virtual-card-panel-KF2P5D3K.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"data-table-virtual-card-panel-RWD765II.js"} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"data-table-virtual-card-panel-KF2P5D3K.js"} \ No newline at end of file diff --git a/dist/data-table-virtual-card-panel-RWD765II.js b/dist/data-table-virtual-card-panel-RWD765II.js deleted file mode 100644 index 1999d4c..0000000 --- a/dist/data-table-virtual-card-panel-RWD765II.js +++ /dev/null @@ -1,2 +0,0 @@ -export{a as DataTableVirtualCardPanel}from'./chunk-EAV5MZCW.js';import'./chunk-ACKI7LST.js';import'./chunk-ZF4EP4WP.js';//# sourceMappingURL=data-table-virtual-card-panel-RWD765II.js.map -//# sourceMappingURL=data-table-virtual-card-panel-RWD765II.js.map \ No newline at end of file diff --git a/dist/data-table-virtual-table-panel-ASNINA6M.js b/dist/data-table-virtual-table-panel-ASNINA6M.js deleted file mode 100644 index e38347b..0000000 --- a/dist/data-table-virtual-table-panel-ASNINA6M.js +++ /dev/null @@ -1,2 +0,0 @@ -export{a as DataTableVirtualTablePanel}from'./chunk-Y5JNRFE4.js';import'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';//# sourceMappingURL=data-table-virtual-table-panel-ASNINA6M.js.map -//# sourceMappingURL=data-table-virtual-table-panel-ASNINA6M.js.map \ No newline at end of file diff --git a/dist/data-table-virtual-table-panel-GCAMBHTG.js b/dist/data-table-virtual-table-panel-GCAMBHTG.js new file mode 100644 index 0000000..c75b69a --- /dev/null +++ b/dist/data-table-virtual-table-panel-GCAMBHTG.js @@ -0,0 +1,2 @@ +export{a as DataTableVirtualTablePanel}from'./chunk-YPKN2W27.js';import'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';//# sourceMappingURL=data-table-virtual-table-panel-GCAMBHTG.js.map +//# sourceMappingURL=data-table-virtual-table-panel-GCAMBHTG.js.map \ No newline at end of file diff --git a/dist/data-table-virtual-table-panel-ASNINA6M.js.map b/dist/data-table-virtual-table-panel-GCAMBHTG.js.map similarity index 62% rename from dist/data-table-virtual-table-panel-ASNINA6M.js.map rename to dist/data-table-virtual-table-panel-GCAMBHTG.js.map index 768be76..46555e0 100644 --- a/dist/data-table-virtual-table-panel-ASNINA6M.js.map +++ b/dist/data-table-virtual-table-panel-GCAMBHTG.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"data-table-virtual-table-panel-ASNINA6M.js"} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"data-table-virtual-table-panel-GCAMBHTG.js"} \ No newline at end of file diff --git a/dist/heroui-virtual.d.ts b/dist/heroui-virtual.d.ts index 7accbc3..f97952a 100644 --- a/dist/heroui-virtual.d.ts +++ b/dist/heroui-virtual.d.ts @@ -1,8 +1,8 @@ import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; diff --git a/dist/heroui-virtual.js b/dist/heroui-virtual.js index 476dccf..29f578a 100644 --- a/dist/heroui-virtual.js +++ b/dist/heroui-virtual.js @@ -1,2 +1,2 @@ -import {a as a$2}from'./chunk-GTOBHZ7L.js';import {a as a$1}from'./chunk-RJOEF7NA.js';import'./chunk-EAV5MZCW.js';import'./chunk-Y5JNRFE4.js';import'./chunk-2V6RVOWX.js';import'./chunk-3CYYXB7K.js';import'./chunk-ACKI7LST.js';import'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';var a=a$1(a$2);export{a as DataTable};//# sourceMappingURL=heroui-virtual.js.map +import {a as a$2}from'./chunk-KA26IREG.js';import {a as a$1}from'./chunk-QFLMV3CT.js';import'./chunk-K7SNDVV2.js';import'./chunk-YPKN2W27.js';import'./chunk-7FUCHMMB.js';import'./chunk-JNI3CH7M.js';import'./chunk-EJHT5JBZ.js';import'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';var a=a$1(a$2);export{a as DataTable};//# sourceMappingURL=heroui-virtual.js.map //# sourceMappingURL=heroui-virtual.js.map \ No newline at end of file diff --git a/dist/heroui-virtual.js.map b/dist/heroui-virtual.js.map index 1c41cbe..78dd46d 100644 --- a/dist/heroui-virtual.js.map +++ b/dist/heroui-virtual.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/entries/heroui-virtual.ts"],"names":["DataTable","createVirtualDataTable","heroUiKit"],"mappings":"0RAGO,IAAMA,CAAAA,CAAYC,IAAuBC,GAAS","file":"heroui-virtual.js","sourcesContent":["import { heroUiKit } from \"../adapters/heroui\";\nimport { createVirtualDataTable } from \"../core/data-table/create-virtual-data-table\";\n\nexport const DataTable = createVirtualDataTable(heroUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file +{"version":3,"sources":["../src/entries/heroui-virtual.ts"],"names":["DataTable","createVirtualDataTable","heroUiKit"],"mappings":"8WAGO,IAAMA,CAAAA,CAAYC,IAAuBC,GAAS","file":"heroui-virtual.js","sourcesContent":["import { heroUiKit } from \"../adapters/heroui\";\nimport { createVirtualDataTable } from \"../core/data-table/create-virtual-data-table\";\n\nexport const DataTable = createVirtualDataTable(heroUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file diff --git a/dist/heroui.d.ts b/dist/heroui.d.ts index 7accbc3..f97952a 100644 --- a/dist/heroui.d.ts +++ b/dist/heroui.d.ts @@ -1,8 +1,8 @@ import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; diff --git a/dist/heroui.js b/dist/heroui.js index 37bf822..2ecd1f2 100644 --- a/dist/heroui.js +++ b/dist/heroui.js @@ -1,2 +1,2 @@ -import {a as a$1}from'./chunk-GTOBHZ7L.js';import'./chunk-2V6RVOWX.js';import {i}from'./chunk-3CYYXB7K.js';import'./chunk-ACKI7LST.js';import'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';var a=i(a$1);export{a as DataTable};//# sourceMappingURL=heroui.js.map +import {a as a$1}from'./chunk-KA26IREG.js';import'./chunk-7FUCHMMB.js';import {i}from'./chunk-JNI3CH7M.js';import'./chunk-EJHT5JBZ.js';import'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';var a=i(a$1);export{a as DataTable};//# sourceMappingURL=heroui.js.map //# sourceMappingURL=heroui.js.map \ No newline at end of file diff --git a/dist/heroui.js.map b/dist/heroui.js.map index 4668bc3..331993f 100644 --- a/dist/heroui.js.map +++ b/dist/heroui.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/entries/heroui.ts"],"names":["DataTable","createDataTable","heroUiKit"],"mappings":"+LAGO,IAAMA,CAAAA,CAAYC,EAAgBC,GAAS","file":"heroui.js","sourcesContent":["import { heroUiKit } from \"../adapters/heroui\";\nimport { createDataTable } from \"../core/data-table/create-data-table\";\n\nexport const DataTable = createDataTable(heroUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file +{"version":3,"sources":["../src/entries/heroui.ts"],"names":["DataTable","createDataTable","heroUiKit"],"mappings":"mRAGO,IAAMA,CAAAA,CAAYC,EAAgBC,GAAS","file":"heroui.js","sourcesContent":["import { heroUiKit } from \"../adapters/heroui\";\nimport { createDataTable } from \"../core/data-table/create-data-table\";\n\nexport const DataTable = createDataTable(heroUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index 7accbc3..f97952a 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,8 +1,8 @@ import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; diff --git a/dist/index.js b/dist/index.js index f1d08cb..4d67912 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,2 +1,2 @@ -import {a as a$1}from'./chunk-7NEQYX7P.js';import'./chunk-2V6RVOWX.js';import {i}from'./chunk-3CYYXB7K.js';import'./chunk-ACKI7LST.js';import'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';var a=i(a$1);export{a as DataTable};//# sourceMappingURL=index.js.map +import {a as a$1}from'./chunk-2NQXDLBI.js';import'./chunk-7FUCHMMB.js';import {i}from'./chunk-JNI3CH7M.js';import'./chunk-EJHT5JBZ.js';import'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';var a=i(a$1);export{a as DataTable};//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index 76645a6..c0a56cb 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/index.ts"],"names":["DataTable","createDataTable","shadcnUiKit"],"mappings":"+LAGO,IAAMA,CAAAA,CAAYC,EAAgBC,GAAW","file":"index.js","sourcesContent":["import { shadcnUiKit } from \"./adapters/shadcn\";\nimport { createDataTable } from \"./core/data-table/create-data-table\";\n\nexport const DataTable = createDataTable(shadcnUiKit);\n\nexport type * from \"./core/types\";\n"]} \ No newline at end of file +{"version":3,"sources":["../src/index.ts"],"names":["DataTable","createDataTable","shadcnUiKit"],"mappings":"mRAGO,IAAMA,CAAAA,CAAYC,EAAgBC,GAAW","file":"index.js","sourcesContent":["import { shadcnUiKit } from \"./adapters/shadcn\";\nimport { createDataTable } from \"./core/data-table/create-data-table\";\n\nexport const DataTable = createDataTable(shadcnUiKit);\n\nexport type * from \"./core/types\";\n"]} \ No newline at end of file diff --git a/dist/thegridcn-virtual.d.ts b/dist/thegridcn-virtual.d.ts index 7accbc3..f97952a 100644 --- a/dist/thegridcn-virtual.d.ts +++ b/dist/thegridcn-virtual.d.ts @@ -1,8 +1,8 @@ import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; diff --git a/dist/thegridcn-virtual.js b/dist/thegridcn-virtual.js index 6e23c8c..47c76ff 100644 --- a/dist/thegridcn-virtual.js +++ b/dist/thegridcn-virtual.js @@ -1,2 +1,2 @@ -import {a as a$1}from'./chunk-RJOEF7NA.js';import'./chunk-EAV5MZCW.js';import'./chunk-Y5JNRFE4.js';import {a as a$2}from'./chunk-S7PROCUM.js';import'./chunk-2V6RVOWX.js';import'./chunk-3CYYXB7K.js';import'./chunk-ACKI7LST.js';import'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';var a=a$1(a$2);export{a as DataTable};//# sourceMappingURL=thegridcn-virtual.js.map +import {a as a$1}from'./chunk-QFLMV3CT.js';import'./chunk-K7SNDVV2.js';import'./chunk-YPKN2W27.js';import {a as a$2}from'./chunk-S4J2MG4T.js';import'./chunk-7FUCHMMB.js';import'./chunk-JNI3CH7M.js';import'./chunk-EJHT5JBZ.js';import'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';var a=a$1(a$2);export{a as DataTable};//# sourceMappingURL=thegridcn-virtual.js.map //# sourceMappingURL=thegridcn-virtual.js.map \ No newline at end of file diff --git a/dist/thegridcn-virtual.js.map b/dist/thegridcn-virtual.js.map index a68f6f7..10f33a3 100644 --- a/dist/thegridcn-virtual.js.map +++ b/dist/thegridcn-virtual.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/entries/thegridcn-virtual.ts"],"names":["DataTable","createVirtualDataTable","theGridcnUiKit"],"mappings":"0RAGO,IAAMA,CAAAA,CAAYC,IAAuBC,GAAc","file":"thegridcn-virtual.js","sourcesContent":["import { theGridcnUiKit } from \"../adapters/thegridcn\";\nimport { createVirtualDataTable } from \"../core/data-table/create-virtual-data-table\";\n\nexport const DataTable = createVirtualDataTable(theGridcnUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file +{"version":3,"sources":["../src/entries/thegridcn-virtual.ts"],"names":["DataTable","createVirtualDataTable","theGridcnUiKit"],"mappings":"8WAGO,IAAMA,CAAAA,CAAYC,IAAuBC,GAAc","file":"thegridcn-virtual.js","sourcesContent":["import { theGridcnUiKit } from \"../adapters/thegridcn\";\nimport { createVirtualDataTable } from \"../core/data-table/create-virtual-data-table\";\n\nexport const DataTable = createVirtualDataTable(theGridcnUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file diff --git a/dist/thegridcn.d.ts b/dist/thegridcn.d.ts index 7accbc3..f97952a 100644 --- a/dist/thegridcn.d.ts +++ b/dist/thegridcn.d.ts @@ -1,8 +1,8 @@ import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; diff --git a/dist/thegridcn.js b/dist/thegridcn.js index 223f3cb..d2cc296 100644 --- a/dist/thegridcn.js +++ b/dist/thegridcn.js @@ -1,2 +1,2 @@ -import {a as a$1}from'./chunk-S7PROCUM.js';import'./chunk-2V6RVOWX.js';import {i}from'./chunk-3CYYXB7K.js';import'./chunk-ACKI7LST.js';import'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';var a=i(a$1);export{a as DataTable};//# sourceMappingURL=thegridcn.js.map +import {a as a$1}from'./chunk-S4J2MG4T.js';import'./chunk-7FUCHMMB.js';import {i}from'./chunk-JNI3CH7M.js';import'./chunk-EJHT5JBZ.js';import'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';var a=i(a$1);export{a as DataTable};//# sourceMappingURL=thegridcn.js.map //# sourceMappingURL=thegridcn.js.map \ No newline at end of file diff --git a/dist/thegridcn.js.map b/dist/thegridcn.js.map index 81858a4..69dcd59 100644 --- a/dist/thegridcn.js.map +++ b/dist/thegridcn.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/entries/thegridcn.ts"],"names":["DataTable","createDataTable","theGridcnUiKit"],"mappings":"+LAGO,IAAMA,CAAAA,CAAYC,EAAgBC,GAAc","file":"thegridcn.js","sourcesContent":["import { theGridcnUiKit } from \"../adapters/thegridcn\";\nimport { createDataTable } from \"../core/data-table/create-data-table\";\n\nexport const DataTable = createDataTable(theGridcnUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file +{"version":3,"sources":["../src/entries/thegridcn.ts"],"names":["DataTable","createDataTable","theGridcnUiKit"],"mappings":"mRAGO,IAAMA,CAAAA,CAAYC,EAAgBC,GAAc","file":"thegridcn.js","sourcesContent":["import { theGridcnUiKit } from \"../adapters/thegridcn\";\nimport { createDataTable } from \"../core/data-table/create-data-table\";\n\nexport const DataTable = createDataTable(theGridcnUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file diff --git a/dist/types.d.ts b/dist/types.d.ts index 4585b49..5100609 100644 --- a/dist/types.d.ts +++ b/dist/types.d.ts @@ -1,7 +1,38 @@ import * as React from 'react'; -import { ColumnDef, CellContext, FilterFnOption, ColumnFiltersState, SortingState, ExpandedState, Row, ColumnOrderState, ColumnPinningState, VisibilityState, PaginationState, ColumnSizingState, Updater, Table, HeaderContext } from '@tanstack/react-table'; +import { ColumnDef, CellContext, FilterFnOption, ColumnFiltersState, SortingState, GroupingState, AggregationFn, ExpandedState, Row, ColumnOrderState, ColumnPinningState, RowPinningState, Table, VisibilityState, PaginationState, ColumnSizingState, Updater, HeaderContext } from '@tanstack/react-table'; type DataTableViewMode = "table" | "card"; +/** Accessibility behavior for the table view. Native table semantics remain the default. */ +type DataTableAccessibilityOptions = { + /** + * `grid` enables spreadsheet-like roving focus and keyboard navigation. + * `native` (the default) retains ordinary HTML table keyboard behavior. + */ + mode?: "native" | "grid"; + /** Number of rows moved by PageUp/PageDown when layout cannot be measured. */ + pageSize?: number; +}; +/** Shorthand configuration for the interactive ARIA grid mode. */ +type DataTableInteractiveGridOptions = Omit; +/** A stable grid coordinate used for cell and rectangular range selection. */ +type DataTableCellCoordinate = { + rowId: string; + columnId: string; +}; +/** The two corners of a cell selection. A single-cell selection has equal corners. */ +type DataTableCellSelection = { + anchor: DataTableCellCoordinate; + focus: DataTableCellCoordinate; +}; +type DataTableGridCommandContext = { + table: Table; + cellSelection: DataTableCellSelection | null; +}; +/** Commands are delegated to the application; the table never records app data. */ +type DataTableGridCommands = { + undo?: (context: DataTableGridCommandContext) => void | Promise; + redo?: (context: DataTableGridCommandContext) => void | Promise; +}; type DataTableAlign = "start" | "center" | "end"; type DataTableColumnType = "text" | "numeric" | "date"; type DataTableColumnFixed = "left" | "right"; @@ -9,9 +40,44 @@ type DataTableContainerBreakpoint = "sm" | "md" | "lg" | "xl" | "2xl"; type DataTableDensity = "compact" | "comfortable" | "spacious"; type DataTableCardSizing = "fixed" | "content" | "fluid"; type DataTableCellOverflow = "truncate" | "clip" | "wrap" | "visible"; -type DataTableColumnFilterType = "text" | "select" | "multi"; +type DataTableColumnFilterType = "text" | "select" | "multi" | "faceted" | "boolean" | "numberRange" | "dateRange"; +type DataTableColumnFilterOperator = "contains" | "equals" | "startsWith" | "endsWith"; type DataTableCsvExportScope = "filtered" | "page" | "selected" | "all"; -type DataTableActionErrorSource = "toolbarAction" | "selectionAction" | "rowAction" | "rowClick" | "edit" | "fileUpload" | "infiniteScroll"; +type DataTableClipboardCopyScope = DataTableCsvExportScope | "cellSelection"; +type DataTableClipboardCopyOptions = { + includeHeaders?: boolean; + columns?: Array; + scope?: DataTableClipboardCopyScope; + /** Defaults to tab-separated text. */ + delimiter?: "\t" | ","; + escapeFormulaValues?: boolean; + getCellValue?: (context: { + row: TData; + rowId: string; + columnId: string; + value: unknown; + }) => unknown; + /** Host-owned clipboard delivery for non-browser or permission-managed apps. */ + onCopy?: (context: { + text: string; + rows: Array; + scope: DataTableClipboardCopyScope; + }) => void | Promise; +}; +type DataTableClipboardPasteContext = { + text: string; + values: Array>; + table: Table; +}; +type DataTableClipboardConfig = { + copy?: boolean | DataTableClipboardCopyOptions; + paste?: { + enabled?: boolean; + preventDefault?: boolean; + onPaste: (context: DataTableClipboardPasteContext) => void | Promise; + }; +}; +type DataTableActionErrorSource = "toolbarAction" | "selectionAction" | "rowAction" | "rowClick" | "edit" | "undo" | "redo" | "clipboardCopy" | "clipboardPaste" | "fileUpload" | "infiniteScroll" | "retry"; declare const DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS: Record; type DataTableRowLoadingState = { isLoading: boolean; @@ -21,16 +87,59 @@ type DataTableLoadingState = { isLoading: boolean; loadingRowCount?: number; }; +type DataTableAutoPageSizeConfig = { + minRows?: number; + maxRows?: number; + estimateRowHeight?: number; +}; +type DataTableStateOverlayContext = { + rows: Array; + toolbarQueryValue: string; + error: unknown; + isRetrying: boolean; + retry: (() => void | Promise) | undefined; +}; +type DataTableStateOverlay = { + empty?: React.ReactNode | ((context: DataTableEmptyStateContext) => React.ReactNode); + error?: unknown; + isRetrying?: boolean; + onRetry?: () => void | Promise; + renderError?: (context: DataTableStateOverlayContext) => React.ReactNode; +}; type DataTableCellEditRenderProps = { cell: CellContext; row: TData; value: TValue | undefined; draftValue: unknown; setDraftValue: (value: unknown) => void; + error?: string; + isDirty: boolean; + isPending: boolean; }; type DataTableColumnFilterOption = { label: string; value: string; + /** Number of matching records. Omit when the count is not known. */ + count?: number; + disabled?: boolean; +}; +type DataTableFacetedFilterOptions = { + /** + * Server-provided facet values. When supplied, these take precedence over + * locally calculated unique values and their counts. + */ + options?: Array | ((context: { + rows: Array; + }) => Array); + /** Render a readable label for values discovered from the local row model. */ + getOptionLabel?: (value: TValue | undefined) => string; + /** Enables an in-menu search input. Defaults to true. */ + searchable?: boolean; + searchPlaceholder?: string; +}; +type DataTableColumnFilterRangeValue = { + from?: TValue; + to?: TValue; }; type DataTableColumnFilterConfig = { type: DataTableColumnFilterType; @@ -40,6 +149,14 @@ type DataTableColumnFilterConfig = { rows: Array; }) => Array); getOptionValue?: (value: TValue | undefined, row: TData) => string; + /** Settings for `type: "faceted"`, including server-provided facet data. */ + faceting?: DataTableFacetedFilterOptions; + operator?: DataTableColumnFilterOperator; + trueLabel?: string; + falseLabel?: string; + min?: number | string; + max?: number | string; + step?: number; }; type DataTableColumnMeta = { type?: DataTableColumnType; @@ -53,6 +170,7 @@ type DataTableColumnMeta = { value: TValue | undefined; }) => DataTableCellOverflow | undefined); headerClassName?: string; + headerStyle?: React.CSSProperties; cellClassName?: string | ((args: { row: TData; value: TValue | undefined; @@ -66,6 +184,27 @@ type DataTableColumnMeta = { }; type DataTableColumnDef = ColumnDef & { meta?: DataTableColumnMeta; + columns?: Array>; +}; +type DataTableColumnGroupDef = DataTableColumnDef & { + id: string; + columns: Array>; + /** + * A concise explanation of the columns in this group. It is exposed as an + * accessible description and native tooltip on the shared header. + */ + description?: string; + /** + * Allows leaves to cross this group's boundary during column reordering. + * Groups are locked by default so a shared heading remains intact. + */ + freeReordering?: boolean; + /** Additional class name for this shared group header. */ + headerClassName?: string; + /** Additional inline styles for this shared group header. */ + headerStyle?: React.CSSProperties; + /** Height for this shared group header, overriding `columnGroupHeaderHeight`. */ + headerHeight?: React.CSSProperties["height"]; }; type DataTableToolbarAction = { key: string; @@ -82,6 +221,12 @@ type DataTableToolbarAction = { variant?: "default" | "secondary" | "outline" | "ghost" | "destructive"; disabled?: boolean; }; +type DataTableSelectionActionContext = { + /** Selected row objects that are present in the currently loaded data. */ + rows: Array; + /** Every selected row id, including ids retained across server pages. */ + rowIds: Array; +}; type DataTableSelectionAction = { key: string; label: string; @@ -89,11 +234,9 @@ type DataTableSelectionAction = { className?: string; }>; iconOnly?: boolean; - onClick: (context: { - rows: Array; - }) => void | Promise; + onClick: (context: DataTableSelectionActionContext) => void | Promise; variant?: "default" | "secondary" | "outline" | "ghost" | "destructive"; - disabled?: boolean | ((rows: Array) => boolean); + disabled?: boolean | ((rows: Array, context: DataTableSelectionActionContext) => boolean); }; type DataTableRowAction = { key: string; @@ -122,9 +265,22 @@ type DataTableToolbarVisibility = { viewToggle?: boolean; customToolbar?: boolean; }; +/** Optional toolbar controls for working with the current table layout and views. */ +type DataTableToolbarDataOperations = { + /** Search, bulk show/hide, pin, and keyboard-accessible column move controls. */ + columnChooser?: boolean; + /** Create, apply, rename, and delete saved views when `savedViews` is configured. */ + savedViews?: boolean; + /** Adds a reset-layout action using the table's initial layout. */ + resetLayout?: boolean; +}; type DataTableCardRendererProps = { row: TData; rowId: string; + depth: number; + canExpandSubRows: boolean; + isSubRowsExpanded: boolean; + toggleSubRowsExpanded: () => void; isSelected: boolean; onSelectedChange: (nextValue: boolean) => void; actions: Array>; @@ -135,7 +291,16 @@ type DataTableCardRendererProps = { type DataTableEditableRowsConfig = { canEditRow?: (row: TData) => boolean; getInitialValues?: (row: TData) => Record; + validateRow?: (row: TData, draftValues: Record) => void | string | Record | Promise>; + /** Apply an optimistic host update and optionally return a rollback callback. */ + onOptimisticUpdate?: (row: TData, draftValues: Record) => void | (() => void); onSaveRow: (row: TData, draftValues: Record) => void | Promise; + onSaveSuccess?: (row: TData, draftValues: Record) => void; + onSaveError?: (error: unknown, row: TData, draftValues: Record) => void; + /** Defaults to true for inputs owned by the table. */ + commitOnEnter?: boolean; + /** Defaults to true for inputs owned by the table. */ + cancelOnEscape?: boolean; }; type DataTableInfiniteScroll = { enabled: boolean; @@ -178,12 +343,14 @@ type DataTableFileUploadConfig = { type DataTableVirtualizationConfig = { enabled?: boolean; estimateRowHeight?: number; + fallbackRowCount?: number; overscan?: number; card?: DataTableCardVirtualizationConfig; }; type DataTableCardVirtualizationConfig = { enabled?: boolean; estimateCardHeight?: number; + fallbackCardCount?: number; overscan?: number; lanes?: number | "auto"; }; @@ -192,6 +359,13 @@ type DataTableExpandedRowProps = { rowId: string; tableRow: Row; }; +/** A separately controlled application detail panel rendered beneath a row. */ +type DataTableDetailPanel = { + expanded?: ExpandedState; + onExpandedChange?: (expanded: ExpandedState) => void; + getRowCanExpand?: (row: TData) => boolean; + render: (props: DataTableExpandedRowProps) => React.ReactNode; +}; type DataTableCsvExportOptions = { filename?: string; includeHeaders?: boolean; @@ -223,6 +397,7 @@ type DataTableColumnPrefs = { sizing?: Record; order?: ColumnOrderState; pinning?: ColumnPinningState; + rowPinning?: RowPinningState; density?: DataTableDensity; }; type DataTablePersistenceSlice = keyof DataTableColumnPrefs; @@ -258,7 +433,10 @@ type DataTableState = { expanded: ExpandedState; columnOrder: ColumnOrderState; columnPinning: ColumnPinningState; + rowPinning: RowPinningState; columnSizing: ColumnSizingState; + /** Present in snapshots produced by 4.4+; optional for 4.x object-literal compatibility. */ + grouping?: GroupingState; density: DataTableDensity; viewMode: DataTableViewMode; showHiddenRows: boolean; @@ -313,10 +491,18 @@ type DataTableApi = { renameSavedView: (id: string, name: string) => DataTableSavedView | undefined; deleteSavedView: (id: string) => boolean; clearSavedViews: () => boolean; + pinRow: (rowId: string, position?: "top" | "bottom") => boolean; + unpinRow: (rowId: string) => boolean; focus: () => void; scrollToRow: (rowId: string) => boolean; scrollToColumn: (columnId: string) => boolean; exportCsv: (options?: boolean | DataTableCsvExportOptions) => Promise; + copyToClipboard: (options?: boolean | DataTableClipboardCopyOptions) => Promise; + getCellSelection: () => DataTableCellSelection | null; + setCellSelection: (selection: DataTableCellSelection | null) => void; + clearCellSelection: () => void; + print: () => boolean; + toggleFullscreen: () => Promise; }; type DataTableLabels = { searchPlaceholder: string; @@ -330,6 +516,10 @@ type DataTableLabels = { columns: string; filters: string; clearFilters: string; + filterFrom?: string; + filterTo?: string; + filterTrue?: string; + filterFalse?: string; selectedRows: (count: number) => string; showHiddenRows: (label: string) => string; recordsPerPage: string; @@ -343,6 +533,7 @@ type DataTableLabels = { nextPage: string; lastPage: string; selectAllVisibleRows?: string; + selectAllFilteredRows?: string; selectRow?: string; selectCardRow?: (rowId: string) => string; switchToTableView?: string; @@ -357,7 +548,15 @@ type DataTableLabels = { cancelEdit: string; expandRow: string; collapseRow: string; + expandRowDetails?: string; + collapseRowDetails?: string; exportCsv: string; + print?: string; + enterFullscreen?: string; + exitFullscreen?: string; + errorTitle?: string; + errorDescription?: string; + retry?: string; density: string; compactDensity: string; comfortableDensity: string; @@ -365,6 +564,30 @@ type DataTableLabels = { pinLeft: string; pinRight: string; unpin: string; + pinRowToTop: string; + pinRowToBottom: string; + unpinRow: string; + resizeColumn: (columnLabel: string) => string; + grouping?: string; + groupBy?: (columnLabel: string) => string; + ungroup?: (columnLabel: string) => string; + removeGrouping?: (columnLabel: string) => string; + moveGroupingEarlier?: (columnLabel: string) => string; + moveGroupingLater?: (columnLabel: string) => string; + facetSearch?: (columnLabel: string) => string; + searchColumns?: string; + showAllColumns?: string; + hideAllColumns?: string; + moveColumnEarlier?: (columnLabel: string) => string; + moveColumnLater?: (columnLabel: string) => string; + resetColumnLayout?: string; + savedViews?: string; + createSavedView?: string; + savedViewName?: string; + applySavedView?: (name: string) => string; + renameSavedView?: (name: string) => string; + deleteSavedView?: (name: string) => string; + saveSavedView?: string; }; type DataTableSummaryRow = { key: string; @@ -374,6 +597,16 @@ type DataTableSummaryRow = { columnId: string; }) => React.ReactNode)>; }; +type DataTableRowClassNameContext = { + row: TData; + rowId: string; + rowIndex: number; + isEditing: boolean; + isExpanded: boolean; + isLoading: boolean; + isSelected: boolean; + pinnedPosition: false | "top" | "bottom"; +}; type DataTableProps = { columns: Array>; data: Array; @@ -399,8 +632,20 @@ type DataTableProps = { sorting?: SortingState; onSortingChange?: (sorting: SortingState) => void; manualSorting?: boolean; + grouping?: GroupingState; + onGroupingChange?: (grouping: GroupingState) => void; + /** Use rows already grouped by the server instead of TanStack's grouping model. */ + manualGrouping?: boolean; + /** Show group/ungroup controls in the table options menu and grouping bar. */ + enableGrouping?: boolean; + /** Controls whether grouped columns are reordered, removed, or left in place. */ + groupedColumnMode?: false | "reorder" | "remove"; + /** Named aggregation functions available to column `aggregationFn` definitions. */ + aggregationFns?: Record>; pageIndex?: number; pageSize?: number; + /** Sizes an opt-in page from the measurable table scroll viewport. */ + autoPageSize?: boolean | DataTableAutoPageSizeConfig; onPageIndexChange?: (pageIndex: number) => void; onPageSizeChange?: (pageSize: number) => void; pageCount?: number; @@ -408,20 +653,60 @@ type DataTableProps = { rowSelection?: Record; onRowSelectionChange?: (rowSelection: Record) => void; enableRowSelection?: boolean; + /** Allows multiple selected rows globally or per row. Defaults to true. */ + enableMultiRowSelection?: boolean | ((row: TData) => boolean); + /** Cascades parent selection to sub-rows globally or per row. Defaults to true. */ + enableSubRowSelection?: boolean | ((row: TData) => boolean); + /** Prevents individual rows from being selected. */ + getRowCanSelect?: (row: TData) => boolean; + /** Select-all affects the current page or all loaded filtered rows. */ + rowSelectionSelectAllScope?: "page" | "filtered"; expanded?: ExpandedState; onExpandedChange?: (expanded: ExpandedState) => void; + /** Resolve nested records for tree expansion. */ + getSubRows?: (row: TData, index: number) => Array | undefined; + /** Keep expansion state controlled by the host; useful for server-loaded children. */ + manualExpanding?: boolean; + /** Keep child rows with their parent when paginating. Defaults to TanStack's behavior. */ + paginateExpandedRows?: boolean; + /** Include parents when a descendant matches a filter. */ + filterFromLeafRows?: boolean; + /** Limit descendant traversal while filtering. */ + maxLeafRowFilterDepth?: number; + /** New, independently controlled detail-panel contract. */ + detailPanel?: DataTableDetailPanel; getRowCanExpand?: (row: TData) => boolean; + /** @deprecated Use `detailPanel={{ render }}`. Kept as a detail-panel bridge. */ renderExpandedRow?: (props: DataTableExpandedRowProps) => React.ReactNode; columnOrder?: ColumnOrderState; onColumnOrderChange?: (columnOrder: ColumnOrderState) => void; enableColumnReordering?: boolean; + /** Default height for shared column-group header cells. */ + columnGroupHeaderHeight?: React.CSSProperties["height"]; columnPinning?: ColumnPinningState; onColumnPinningChange?: (columnPinning: ColumnPinningState) => void; enableColumnPinning?: boolean; + rowPinning?: RowPinningState; + onRowPinningChange?: (rowPinning: RowPinningState) => void; + /** Enables row actions that pin a row to the top or bottom of the table. */ + enableRowPinning?: boolean | ((row: TData) => boolean); + /** Keep pinned rows visible when filtering or paginating them out. */ + keepPinnedRows?: boolean; toolbarActions?: Array>; selectionActions?: Array>; rowActions?: Array>; csvExport?: boolean | DataTableCsvExportOptions; + /** Opt-in TSV/CSV copy and application-owned paste handling. */ + clipboard?: DataTableClipboardConfig; + /** Enables pointer and Shift+keyboard rectangular cell selection in grid mode. */ + enableCellSelection?: boolean; + /** Controlled cell/range selection. Supplying a value also enables it in grid mode. */ + cellSelection?: DataTableCellSelection | null; + /** Initial cell/range selection when uncontrolled. */ + defaultCellSelection?: DataTableCellSelection | null; + onCellSelectionChange?: (selection: DataTableCellSelection | null) => void; + /** Host-owned undo/redo commands invoked by Ctrl/Cmd+Z and Ctrl/Cmd+Shift+Z. */ + gridCommands?: DataTableGridCommands; density?: DataTableDensity; onDensityChange?: (density: DataTableDensity) => void; enableDensityToggle?: boolean; @@ -441,7 +726,11 @@ type DataTableProps = { viewMode?: DataTableViewMode; onViewModeChange?: (viewMode: DataTableViewMode) => void; enableViewToggle?: boolean; + enablePrint?: boolean; + enableFullscreen?: boolean; emptyState?: React.ReactNode | ((context: DataTableEmptyStateContext) => React.ReactNode); + /** Explicit empty/error/retry rendering contract. */ + stateOverlay?: DataTableStateOverlay; isLoading?: boolean; loadingRowCount?: number; getRowLoadingState?: (row: TData, index: number) => boolean | DataTableRowLoadingState; @@ -463,10 +752,13 @@ type DataTableProps = { dir?: "ltr" | "rtl"; flexGrow?: boolean; toolbarVisibility?: DataTableToolbarVisibility; + /** Opts into enhanced layout and saved-view toolbar controls. */ + toolbarDataOperations?: boolean | DataTableToolbarDataOperations; className?: string; tableClassName?: string; tableContainerClassName?: string; - getRowClassName?: (row: TData) => string | undefined; + stripedRows?: boolean; + getRowClassName?: (row: TData, context: DataTableRowClassNameContext) => string | undefined; onRowClick?: (context: { row: TData; rowId: string; @@ -475,6 +767,10 @@ type DataTableProps = { dragAndDrop?: DataTableDragAndDropConfig; fileUpload?: DataTableFileUploadConfig; virtualization?: boolean | DataTableVirtualizationConfig; + /** Opt in to ARIA grid semantics and roving keyboard navigation. */ + accessibility?: DataTableAccessibilityOptions; + /** Shorthand for `accessibility={{ mode: "grid" }}`. */ + interactiveGrid?: boolean | DataTableInteractiveGridOptions; }; declare function isRowVisible(row: TData, hiddenRows: DataTableHiddenRowsConfig | undefined, showHiddenRows: boolean): boolean; declare function resolveRowActionLabel(label: DataTableRowAction["label"], row: TData): string; @@ -488,4 +784,4 @@ declare function hideOnClassName(hideOn: DataTableContainerBreakpoint | Array | undefined, containerWidth: number): boolean; declare function rowSelectionStateFromRows(rows: Array>): TData[]; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, type DataTableActionErrorContext, type DataTableActionErrorSource, type DataTableAlign, type DataTableApi, type DataTableCardRendererProps, type DataTableCardSizing, type DataTableCardVirtualizationConfig, type DataTableCellEditRenderProps, type DataTableCellOverflow, type DataTableColumnDef, type DataTableColumnFilterConfig, type DataTableColumnFilterOption, type DataTableColumnFilterType, type DataTableColumnFixed, type DataTableColumnMeta, type DataTableColumnPrefs, type DataTableColumnType, type DataTableColumnVisibilityOption, type DataTableContainerBreakpoint, type DataTableCsvExportOptions, type DataTableCsvExportScope, type DataTableDensity, type DataTableDragAndDropConfig, type DataTableEditableRowsConfig, type DataTableEmptyStateContext, type DataTableExpandedRowProps, type DataTableFileUploadConfig, type DataTableHiddenRowsConfig, type DataTableInfiniteScroll, type DataTableInitialState, type DataTableLabels, type DataTableLoadingState, type DataTablePersistenceConfig, type DataTablePersistenceOperation, type DataTablePersistencePayload, type DataTablePersistenceSlice, type DataTablePersistenceStorage, type DataTableProps, type DataTableResetOptions, type DataTableRowAction, type DataTableRowLoadingState, type DataTableSavedView, type DataTableSavedViewSlice, type DataTableSavedViewsChangeOperation, type DataTableSavedViewsConfig, type DataTableSavedViewsPayload, type DataTableSelectionAction, type DataTableState, type DataTableSummaryRow, type DataTableToolbarAction, type DataTableToolbarVisibility, type DataTableViewMode, type DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows }; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, type DataTableAccessibilityOptions, type DataTableActionErrorContext, type DataTableActionErrorSource, type DataTableAlign, type DataTableApi, type DataTableAutoPageSizeConfig, type DataTableCardRendererProps, type DataTableCardSizing, type DataTableCardVirtualizationConfig, type DataTableCellCoordinate, type DataTableCellEditRenderProps, type DataTableCellOverflow, type DataTableCellSelection, type DataTableClipboardConfig, type DataTableClipboardCopyOptions, type DataTableClipboardCopyScope, type DataTableClipboardPasteContext, type DataTableColumnDef, type DataTableColumnFilterConfig, type DataTableColumnFilterOperator, type DataTableColumnFilterOption, type DataTableColumnFilterRangeValue, type DataTableColumnFilterType, type DataTableColumnFixed, type DataTableColumnGroupDef, type DataTableColumnMeta, type DataTableColumnPrefs, type DataTableColumnType, type DataTableColumnVisibilityOption, type DataTableContainerBreakpoint, type DataTableCsvExportOptions, type DataTableCsvExportScope, type DataTableDensity, type DataTableDetailPanel, type DataTableDragAndDropConfig, type DataTableEditableRowsConfig, type DataTableEmptyStateContext, type DataTableExpandedRowProps, type DataTableFacetedFilterOptions, type DataTableFileUploadConfig, type DataTableGridCommandContext, type DataTableGridCommands, type DataTableHiddenRowsConfig, type DataTableInfiniteScroll, type DataTableInitialState, type DataTableInteractiveGridOptions, type DataTableLabels, type DataTableLoadingState, type DataTablePersistenceConfig, type DataTablePersistenceOperation, type DataTablePersistencePayload, type DataTablePersistenceSlice, type DataTablePersistenceStorage, type DataTableProps, type DataTableResetOptions, type DataTableRowAction, type DataTableRowClassNameContext, type DataTableRowLoadingState, type DataTableSavedView, type DataTableSavedViewSlice, type DataTableSavedViewsChangeOperation, type DataTableSavedViewsConfig, type DataTableSavedViewsPayload, type DataTableSelectionAction, type DataTableSelectionActionContext, type DataTableState, type DataTableStateOverlay, type DataTableStateOverlayContext, type DataTableSummaryRow, type DataTableToolbarAction, type DataTableToolbarDataOperations, type DataTableToolbarVisibility, type DataTableViewMode, type DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows }; diff --git a/dist/ui-kit-DPJDIPrF.d.ts b/dist/ui-kit-C6Z8X6oi.d.ts similarity index 95% rename from dist/ui-kit-DPJDIPrF.d.ts rename to dist/ui-kit-C6Z8X6oi.d.ts index d7e8498..043f98c 100644 --- a/dist/ui-kit-DPJDIPrF.d.ts +++ b/dist/ui-kit-C6Z8X6oi.d.ts @@ -11,6 +11,8 @@ type DataTableUiClassNames = { cardUnselected?: string; cardViewport?: string; cellBorder?: string; + cellSelected?: string; + columnGroupHeader?: string; dragActive?: string; emptyState?: string; footer?: string; @@ -23,6 +25,10 @@ type DataTableUiClassNames = { resizeHandle?: string; resizeHandleActive?: string; row?: string; + rowEven?: string; + rowOdd?: string; + rowPinnedBottom?: string; + rowPinnedTop?: string; rowSelected?: string; tableContainer?: string; tableScrollArea?: string; diff --git a/dist/virtual.d.ts b/dist/virtual.d.ts index 7accbc3..f97952a 100644 --- a/dist/virtual.d.ts +++ b/dist/virtual.d.ts @@ -1,8 +1,8 @@ import * as React from 'react'; import { DataTableProps } from './types.js'; -export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOption, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFileUploadConfig, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableState, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; +export { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS, DataTableAccessibilityOptions, DataTableActionErrorContext, DataTableActionErrorSource, DataTableAlign, DataTableApi, DataTableAutoPageSizeConfig, DataTableCardRendererProps, DataTableCardSizing, DataTableCardVirtualizationConfig, DataTableCellCoordinate, DataTableCellEditRenderProps, DataTableCellOverflow, DataTableCellSelection, DataTableClipboardConfig, DataTableClipboardCopyOptions, DataTableClipboardCopyScope, DataTableClipboardPasteContext, DataTableColumnDef, DataTableColumnFilterConfig, DataTableColumnFilterOperator, DataTableColumnFilterOption, DataTableColumnFilterRangeValue, DataTableColumnFilterType, DataTableColumnFixed, DataTableColumnGroupDef, DataTableColumnMeta, DataTableColumnPrefs, DataTableColumnType, DataTableColumnVisibilityOption, DataTableContainerBreakpoint, DataTableCsvExportOptions, DataTableCsvExportScope, DataTableDensity, DataTableDetailPanel, DataTableDragAndDropConfig, DataTableEditableRowsConfig, DataTableEmptyStateContext, DataTableExpandedRowProps, DataTableFacetedFilterOptions, DataTableFileUploadConfig, DataTableGridCommandContext, DataTableGridCommands, DataTableHiddenRowsConfig, DataTableInfiniteScroll, DataTableInitialState, DataTableInteractiveGridOptions, DataTableLabels, DataTableLoadingState, DataTablePersistenceConfig, DataTablePersistenceOperation, DataTablePersistencePayload, DataTablePersistenceSlice, DataTablePersistenceStorage, DataTableResetOptions, DataTableRowAction, DataTableRowClassNameContext, DataTableRowLoadingState, DataTableSavedView, DataTableSavedViewSlice, DataTableSavedViewsChangeOperation, DataTableSavedViewsConfig, DataTableSavedViewsPayload, DataTableSelectionAction, DataTableSelectionActionContext, DataTableState, DataTableStateOverlay, DataTableStateOverlayContext, DataTableSummaryRow, DataTableToolbarAction, DataTableToolbarDataOperations, DataTableToolbarVisibility, DataTableViewMode, DataTableVirtualizationConfig, alignClassName, canEditRow, canUseRowAction, cellAlignClassName, headerAlignClassName, hideOnClassName, isHiddenAtContainerWidth, isRowVisible, resolveColumnAlign, resolveRowActionLabel, rowSelectionStateFromRows } from './types.js'; import '@tanstack/react-table'; -declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, pageIndex, pageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, expanded, onExpandedChange, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnPinning, onColumnPinningChange, enableColumnPinning, toolbarActions, selectionActions, rowActions, csvExport, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, emptyState, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, }: DataTableProps) => React.JSX.Element; +declare const DataTable: ({ columns, data, getRowId, children, title, description, toolbarQueryValue, onToolbarQueryValueChange, toolbarQueryPlaceholder, toolbarQueryDebounceMs, manualFiltering, enableToolbarQueryFiltering, globalFilterFn, columnFilters, onColumnFiltersChange, enableColumnFilters, customToolbar, compactToolbar, rowsPerPageOptions, totalRowCount, hasNextPage, sorting, onSortingChange, manualSorting, grouping, onGroupingChange, manualGrouping, enableGrouping, groupedColumnMode, aggregationFns, pageIndex, pageSize, autoPageSize, onPageIndexChange, onPageSizeChange, pageCount, manualPagination, rowSelection, onRowSelectionChange, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, getRowCanSelect, rowSelectionSelectAllScope, expanded, onExpandedChange, getSubRows, manualExpanding, paginateExpandedRows, filterFromLeafRows, maxLeafRowFilterDepth, detailPanel, getRowCanExpand, renderExpandedRow, columnOrder, onColumnOrderChange, enableColumnReordering, columnGroupHeaderHeight, columnPinning, onColumnPinningChange, enableColumnPinning, rowPinning, onRowPinningChange, enableRowPinning, keepPinnedRows, toolbarActions, selectionActions, rowActions, csvExport, clipboard, enableCellSelection, cellSelection, defaultCellSelection, onCellSelectionChange, gridCommands, density, onDensityChange, enableDensityToggle, columnPrefsKey, persistence, savedViews, toolbarDataOperations, initialState, state: unifiedState, onStateChange, apiRef, labels, summaryRows, cardRenderer, cardSizing, cardGridClassName, cardClassName, viewMode, onViewModeChange, enableViewToggle, enablePrint, enableFullscreen, emptyState, stateOverlay, isLoading, loadingRowCount, getRowLoadingState, hiddenRows, showHiddenRows, onShowHiddenRowsChange, infiniteScroll, editableRows, columnVisibility, onColumnVisibilityChange, columnSizing, onColumnSizingChange, enableColumnResizing, columnResizeMode, layoutMode, stickyHeader, showFooter, showToolbar, dir, flexGrow, toolbarVisibility, className, tableClassName, tableContainerClassName, stripedRows, getRowClassName, onRowClick, onActionError, dragAndDrop, fileUpload, virtualization, accessibility, interactiveGrid, }: DataTableProps) => React.JSX.Element; export { DataTable, DataTableProps }; diff --git a/dist/virtual.js b/dist/virtual.js index 428f911..6619d83 100644 --- a/dist/virtual.js +++ b/dist/virtual.js @@ -1,2 +1,2 @@ -import {a as a$1}from'./chunk-7NEQYX7P.js';import {a}from'./chunk-RJOEF7NA.js';import'./chunk-EAV5MZCW.js';import'./chunk-Y5JNRFE4.js';import'./chunk-2V6RVOWX.js';import'./chunk-3CYYXB7K.js';import'./chunk-ACKI7LST.js';import'./chunk-HOUWU4KF.js';import'./chunk-ZF4EP4WP.js';var o=a(a$1);export{o as DataTable};//# sourceMappingURL=virtual.js.map +import {a as a$1}from'./chunk-2NQXDLBI.js';import {a}from'./chunk-QFLMV3CT.js';import'./chunk-K7SNDVV2.js';import'./chunk-YPKN2W27.js';import'./chunk-7FUCHMMB.js';import'./chunk-JNI3CH7M.js';import'./chunk-EJHT5JBZ.js';import'./chunk-THSY57Y7.js';import'./chunk-4P45F2OY.js';import'./chunk-CVR2ZXHQ.js';import'./chunk-KDHJA6AH.js';import'./chunk-XTVBESM5.js';var o=a(a$1);export{o as DataTable};//# sourceMappingURL=virtual.js.map //# sourceMappingURL=virtual.js.map \ No newline at end of file diff --git a/dist/virtual.js.map b/dist/virtual.js.map index 7c3fec1..e424558 100644 --- a/dist/virtual.js.map +++ b/dist/virtual.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/entries/virtual.ts"],"names":["DataTable","createVirtualDataTable","shadcnUiKit"],"mappings":"mRAGO,IAAMA,CAAAA,CAAYC,EAAuBC,GAAW","file":"virtual.js","sourcesContent":["import { shadcnUiKit } from \"../adapters/shadcn\";\nimport { createVirtualDataTable } from \"../core/data-table/create-virtual-data-table\";\n\nexport const DataTable = createVirtualDataTable(shadcnUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file +{"version":3,"sources":["../src/entries/virtual.ts"],"names":["DataTable","createVirtualDataTable","shadcnUiKit"],"mappings":"uWAGO,IAAMA,CAAAA,CAAYC,EAAuBC,GAAW","file":"virtual.js","sourcesContent":["import { shadcnUiKit } from \"../adapters/shadcn\";\nimport { createVirtualDataTable } from \"../core/data-table/create-virtual-data-table\";\n\nexport const DataTable = createVirtualDataTable(shadcnUiKit);\n\nexport type * from \"../core/types\";\n"]} \ No newline at end of file diff --git a/docs/API.md b/docs/API.md index 110214b..0b776b8 100644 --- a/docs/API.md +++ b/docs/API.md @@ -18,6 +18,7 @@ import { } from "data-table-pro"; import { useDataTableUrlState } from "data-table-pro/url-state"; +import { useDataTableDataSource } from "data-table-pro/data-source"; import type { DataTableProps as DataTablePropsFromSubpath } from "data-table-pro/types"; ``` @@ -91,31 +92,31 @@ Container helpers included by the package: container-name: data-table; } -@container data-table (width < 40rem) { +@container data-table (width < 640px) { .dt-hide-on-sm { display: none; } } -@container data-table (width < 48rem) { +@container data-table (width < 768px) { .dt-hide-on-md { display: none; } } -@container data-table (width < 64rem) { +@container data-table (width < 1024px) { .dt-hide-on-lg { display: none; } } -@container data-table (width < 80rem) { +@container data-table (width < 1280px) { .dt-hide-on-xl { display: none; } } -@container data-table (width < 96rem) { +@container data-table (width < 1536px) { .dt-hide-on-2xl { display: none; } @@ -151,6 +152,7 @@ The Gridcn consumers must also import a host-managed The Gridcn theme or token s - `data-table-pro/virtual`, `data-table-pro/heroui/virtual`, and `data-table-pro/thegridcn/virtual` export the eager-virtual `DataTable` - `data-table-pro/url-state` exports `useDataTableUrlState` +- `data-table-pro/data-source` exports `useDataTableDataSource` - `data-table-pro/adapter` exports `createDataTable` and `primitiveUiKit` - `data-table-pro/adapter/virtual` exports `createVirtualDataTable` - `data-table-pro/advanced` exports `createDataTable`, `primitiveUiKit`, @@ -168,18 +170,73 @@ The URL-state subpath also exports the `UseDataTableUrlStateOptions`, `DataTableUrlStateSlice`, `DataTableUrlEnhancedState`, and `DataTableUrlStateMigrationPayload` types. +## Server data sources + +Use `data-table-pro/data-source` when sorting, filtering, and pagination are +performed by your backend. The hook accepts either offset or cursor requests, +cancels superseded work, ignores stale responses, deduplicates a repeated +in-flight request, and caches successful results per hook instance (30 seconds +by default). `refresh()` bypasses a fresh cache entry and `invalidate()` removes +one cache key or all cache entries. + +```tsx +const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 25 }); +const [sorting, setSorting] = useState([]); +const [columnFilters, setColumnFilters] = useState([]); + +const users = useDataTableDataSource({ + mode: "offset", + pagination, + sorting, + columnFilters, + query: { organizationId }, + source: async ({ offset, limit, sorting, columnFilters, query, signal }) => { + const response = await fetch("/api/users", { + method: "POST", + signal, + body: JSON.stringify({ offset, limit, sorting, columnFilters, ...query }), + }); + return response.json(); // { rows, rowCount?, nextCursor?, facets? } + }, + onPageIndexChange: (pageIndex) => + setPagination((current) => ({ ...current, pageIndex })), + onPageSizeChange: (pageSize) => + setPagination({ pageIndex: 0, pageSize }), + onSortingChange: setSorting, + onColumnFiltersChange: setColumnFilters, +}); + + user.id} {...users.tableProps} />; +``` + +For cursor APIs, set `mode: "cursor"` and pass the cursor for the requested +page as `cursor`; the hook exposes the backend's `nextCursor`. Memoize `source` +with `useCallback`, or include all of its changing inputs in `query`, so a +changed request is observable. Provide `getRequestKey` when `query` contains a +non-serializable value. Requests also carry `globalFilter`, `grouping`, named +`aggregations`, and an `expansionPath`; results may return stable `rowIds`, +`facets`, `aggregates`, and arbitrary `metadata`. These fields are additive, so +an existing source may ignore them and retain its previous result shape. + ## Type Exports These are exported from the adapter entrypoints and from `data-table-pro/types`. - `DataTableAlign` +- `DataTableAccessibilityOptions` - `DataTableApi` +- `DataTableAutoPageSizeConfig` - `DataTableCardSizing` - `DataTableCardVirtualizationConfig` - `DataTableCellOverflow` - `DataTableCellEditRenderProps` +- `DataTableCellSelection` +- `DataTableClipboardConfig` +- `DataTableClipboardCopyOptions` +- `DataTableClipboardCopyScope` - `DataTableCardRendererProps` - `DataTableColumnDef` +- `DataTableColumnGroupDef` - `DataTableColumnFilterConfig` - `DataTableColumnFilterOption` - `DataTableColumnFilterType` @@ -194,6 +251,7 @@ These are exported from the adapter entrypoints and from `data-table-pro/types`. - `DataTableCsvExportOptions` - `DataTableCsvExportScope` - `DataTableDensity` +- `DataTableDetailPanel` - `DataTableDragAndDropConfig` - `DataTableEditableRowsConfig` - `DataTableEmptyStateContext` @@ -202,6 +260,8 @@ These are exported from the adapter entrypoints and from `data-table-pro/types`. - `DataTableHiddenRowsConfig` - `DataTableInfiniteScroll` - `DataTableInitialState` +- `DataTableGridCommands` +- `DataTableInteractiveGridOptions` - `DataTableLabels` - `DataTableLoadingState` - `DataTablePersistenceConfig` @@ -219,6 +279,8 @@ These are exported from the adapter entrypoints and from `data-table-pro/types`. - `DataTableRowAction` - `DataTableRowLoadingState` - `DataTableState` +- `DataTableStateOverlay` +- `DataTableToolbarDataOperations` - `DataTableSelectionAction` - `DataTableSummaryRow` - `DataTableToolbarAction` @@ -242,6 +304,49 @@ function DataTable(props: DataTableProps): React.ReactElement; | `data` | `Array` | Row data. | | `getRowId` | `(row: TData, index: number) => string` | Stable row identifier used for selection, editing, and row actions. | +### Grouped column headers + +Column groups use nested `DataTableColumnDef` objects. A group requires a +stable `id`, a shared `header`, and a non-empty `columns` array: + +```tsx +const columns: Array> = [ + { + id: "contact", + header: "Contact", + meta: { + align: "center", + headerClassName: "bg-muted/50 font-semibold", + headerStyle: { letterSpacing: "0.025em" }, + }, + columns: [ + { accessorKey: "name", header: "Name" }, + { accessorKey: "email", header: "Email" }, + ], + }, +]; +``` + +Groups may be nested to any depth. Every nesting level renders as another +header row; group cells receive `colSpan` for their visible descendants and +`scope="colgroup"`, while leaf headers receive `scope="col"`. A group header +supports string or render-function content plus `meta.headerClassName`, +`meta.headerStyle`, and `meta.align` styling. Group definitions additionally +support `description` (an accessible native tooltip), `headerClassName`, +`headerStyle`, and `headerHeight`; `columnGroupHeaderHeight` sets the default +height for all shared group headers. The DOM also exposes +`data-dtp-slot="data-table-column-group-header"` and `data-header-depth`. + +Visibility, toolbar filters, ordering, pinning, sizing, responsive hiding, +editing defaults, card-title detection, and CSV export resolve nested leaf +columns. Leaf columns remain independently pinnable. Reordering is locked to a +leaf's same nested group by default so shared headings remain intact. Set +`freeReordering: true` on every group boundary crossed to allow a leaf to leave, +enter, or split groups. Resizing a group distributes the size change proportionally across its +visible descendants; setting `enableResizing: false` on the group removes its +resize handle. Group definitions themselves do not appear in the leaf-column +visibility, filter, or pinning controls. + ### Unified state and API ref | Prop | Type | Default | Description | @@ -266,7 +371,12 @@ Legacy controlled props remain supported. If a legacy prop and its matching `renameSavedView(id, name)`, `deleteSavedView(id)`, and `clearSavedViews()` - `focus()`, `scrollToRow(rowId)`, and `scrollToColumn(columnId)` +- `pinRow(rowId, position?)` and `unpinRow(rowId)` when row pinning is enabled - `exportCsv(options?)` +- `copyToClipboard(options?)` +- `getCellSelection()`, `setCellSelection(selection)`, and + `clearCellSelection()` +- `print()` and `toggleFullscreen()` Scroll commands return `false` when the requested rendered element is not currently available, including a virtual row outside the active window. @@ -342,10 +452,9 @@ also ignored. `rowSelection` is never read or written without the explicit `"rowSelection"` opt-in. The hook returns direct values and TanStack-compatible setters for every -enhanced slice, a `tableState` object for slices currently supported by -`DataTableState`, and `clearEnhancedState()`. Grouping is returned separately -for server-owned state and forward compatibility; first-class table grouping -is scheduled for Phase 2. +enhanced slice, a `tableState` object for slices supported by `DataTableState`, +and `clearEnhancedState()`. Its `grouping` state can be passed directly to the +table's first-class `grouping` / `onGroupingChange` contract. ### Basic content props @@ -357,7 +466,7 @@ is scheduled for Phase 2. | `className` | `string` | `undefined` | Outer layout wrapper class. | | `tableClassName` | `string` | `undefined` | Applied to the `` element in table mode. | | `tableContainerClassName` | `string` | `undefined` | Applied to the scroll container in table or card mode. | -| `cardGridClassName` | `string` | responsive auto-fit grid | Applied to the card grid wrapper in card mode. Use this for explicit card density such as `grid-cols-1 sm:grid-cols-2 xl:grid-cols-3`. | +| `cardGridClassName` | `string` | responsive auto-fit grid | Applied to the card grid wrapper in card mode. Use named container variants for explicit density, such as `grid-cols-1 @min-[640px]/data-table:grid-cols-2 @min-[1280px]/data-table:grid-cols-3`. | | `cardClassName` | `string` | `undefined` | Applied to each card item wrapper in card mode. | | `flexGrow` | `boolean` | `true` | Fills the remaining height of a constrained flex parent. | | `showToolbar` | `boolean` | `true` | Controls the package toolbar region. | @@ -402,6 +511,72 @@ One parent requirement remains unavoidable: the nearest containing layout must e | `customToolbar` | `React.ReactNode` | `undefined` | Optional secondary toolbar row rendered below the main toolbar. | | `compactToolbar` | `React.ReactNode` | `undefined` | Optional mobile compact-toolbar content rendered inline with the collapsed toolbar control strip. Use this for icon-only filter/action controls in narrow container widths. | +Column metadata supports seven built-in filter controls: `text`, `select`, +`multi`, `faceted`, `boolean`, `numberRange`, and `dateRange`. Range controls store plain +`{ from, to }` objects so controlled state, URL state, and server requests stay +serializable. Numeric range bounds are inclusive and accept `min`, `max`, and +`step`; date bounds are inclusive `YYYY-MM-DD` values. Boolean controls accept +optional `trueLabel` and `falseLabel` overrides. Text filters accept an +`operator` of `contains` (the default), `equals`, `startsWith`, or `endsWith`. + +`faceted` is a multi-select filter. Without supplied options it reads +TanStack's faceted unique-value map and displays local option counts. Set +`faceting.options` when the server owns facet results; its optional `count` +is displayed unchanged. `faceting.searchable` defaults to `true`. +Numeric-range filters without configured `min` or `max` derive the missing +bounds from TanStack's local faceted row model. Explicit bounds always win, +and manual/server filtering remains server-owned. + +```tsx +meta: { + filter: { + type: "faceted", + faceting: { + options: [{ label: "Active", value: "active", count: 42 }], + searchable: true, + }, + }, +} +``` + +### Grouping and aggregation + +| Prop | Type | Default | Description | +| --- | --- | --- | --- | +| `grouping` | `GroupingState` | internal state | Controlled TanStack grouping state. | +| `onGroupingChange` | `(grouping: GroupingState) => void` | `undefined` | Receives grouping updates. | +| `manualGrouping` | `boolean` | `false` | Skips the local grouped row model for server-grouped data. | +| `enableGrouping` | `boolean` | `false` | Adds accessible group/ungroup controls and a removable grouping bar. | +| `groupedColumnMode` | `false \| "reorder" \| "remove"` | `"reorder"` | Placement of grouped columns. | +| `aggregationFns` | `Record>` | `undefined` | Named aggregation functions for column definitions. | + +Use native TanStack `enableGrouping`, `aggregationFn`, and `aggregatedCell` +on a `DataTableColumnDef`. Grouped cells toggle descendants, aggregated cells +use `aggregatedCell` when present, and placeholder cells render empty. + +```tsx +const columns = [ + { + accessorKey: "active", + meta: { + filter: { + type: "boolean", + trueLabel: "Active", + falseLabel: "Inactive", + }, + }, + }, + { + accessorKey: "score", + meta: { filter: { type: "numberRange", min: 0, max: 100, step: 1 } }, + }, + { + accessorKey: "createdAt", + meta: { filter: { type: "dateRange", min: "2020-01-01" } }, + }, +] satisfies Array>; +``` + Built-in toolbar controls automatically compact in narrow container widths: - the search input collapses to a search button and can expand inline on demand @@ -410,8 +585,8 @@ Built-in toolbar controls automatically compact in narrow container widths: `compactToolbar` behavior: -- it renders inline inside the main toolbar control row until the container reaches the large (`@lg`) breakpoint -- `customToolbar` renders as the separate desktop toolbar row only from the large (`@lg`) breakpoint upward +- it renders inline inside the main toolbar control row until the container reaches the package large breakpoint (1024px) +- `customToolbar` renders as the separate desktop toolbar row only from the package large breakpoint (1024px) upward - if `compactToolbar` is omitted but `customToolbar` is provided, the package reuses `customToolbar` in the compact row as a fallback - the intended use is icon-only or very compact controls; the package does not automatically convert arbitrary desktop JSX into mobile icon buttons @@ -468,6 +643,81 @@ Removed in `2.0.1`: | `onSortingChange` | `(sorting: SortingState) => void` | `undefined` | Sorting change callback. | | `manualSorting` | `boolean` | `false` | Disables client-side sorting row model. | +### Interactive grid accessibility + +The default table view uses native HTML table semantics and ordinary browser +tab order. Opt in when the table is a keyboard-navigable data workspace: + +```tsx + +``` + +| Prop | Type | Default | Description | +| --- | --- | --- | --- | +| `accessibility` | `DataTableAccessibilityOptions` | `undefined` | Use `{ mode: "grid" }` for ARIA grid semantics. `pageSize` supplies the PageUp/PageDown step when the viewport has no measurable layout. | +| `interactiveGrid` | `boolean \| DataTableInteractiveGridOptions` | `false` | Shorthand for grid mode; the object form accepts `pageSize`. | + +Grid mode applies `grid`, `rowgroup`, `row`, `columnheader`, and `gridcell` +roles while retaining the native table elements. It exposes `aria-rowcount` and +`aria-colcount`; a supplied `totalRowCount` is used for server-backed or +virtualized data. Mounted rows and cells receive their corresponding +`aria-rowindex` and `aria-colindex`, and exactly one cell has roving +`tabindex="0"`. Arrow keys, Home/End, +Ctrl/Cmd+Home/End, and PageUp/PageDown move that cell. Buttons, checkboxes, +links, and edit inputs keep their own keyboard behavior; Escape returns focus +from an interactive descendant to its grid cell. + +### Grid cell and range selection + +Cell selection is independent from row-checkbox selection and only activates in +interactive grid mode. It stores stable row and column IDs rather than row +positions, so hosts can control it without handing application data to the +table. + +```tsx +const [cellSelection, setCellSelection] = React.useState(null); + + navigator.clipboard.writeText(text) } }} + gridCommands={{ + undo: ({ cellSelection }) => undoInMyStore(cellSelection), + redo: ({ cellSelection }) => redoInMyStore(cellSelection), + }} +/> +``` + +| Prop/API | Type | Description | +| --- | --- | --- | +| `enableCellSelection` | `boolean` | Enables pointer drag and Shift+keyboard rectangular range selection. | +| `cellSelection` / `defaultCellSelection` | `DataTableCellSelection \| null` | Controlled or initial `{ anchor, focus }` range, using `{ rowId, columnId }` corners. A controlled value also enables selection. | +| `onCellSelectionChange` | `(selection) => void` | Receives the complete next range; the host owns controlled state. | +| `gridCommands` | `DataTableGridCommands` | Receives Ctrl/Cmd+Z and Ctrl/Cmd+Shift+Z callbacks. The table does not retain an undo stack or application records. | +| `apiRef.current.getCellSelection()` | `() => DataTableCellSelection \| null` | Reads the current controlled or uncontrolled range. | +| `apiRef.current.setCellSelection()` / `clearCellSelection()` | command methods | Sets or clears the range without changing row selection. | + +Selected cells expose `aria-selected="true"`, `data-dtp-cell-selected`, and the +optional adapter `classNames.cellSelected` styling hook. With an active range, +Ctrl/Cmd+C uses the `"cellSelection"` clipboard scope by default and copies its +rectangular values as TSV (without headers). Set +`clipboard.copy.scope: "cellSelection"` to request that scope explicitly from +the imperative copy API; `includeHeaders: true` remains available. + +`clipboard.copy` accepts the same `filtered`, `page`, `selected`, and `all` +scopes as CSV plus `cellSelection`; configure tab or comma delimiters, +headers, columns, value formatting, formula neutralization, and an app-owned +`onCopy` destination. `clipboard.paste` is deliberately opt-in and receives +both the original text and parsed two-dimensional values. The table does not +mutate application records implicitly. + ### Pagination props | Prop | Type | Default | Description | @@ -477,11 +727,18 @@ Removed in `2.0.1`: | `hasNextPage` | `boolean` | `false` | Enables the next-page control when manual pagination has no known `totalRowCount` or `pageCount`. | | `pageIndex` | `number` | internal state | Controlled zero-based page index. | | `pageSize` | `number` | internal state | Controlled page size. | +| `autoPageSize` | `boolean \| DataTableAutoPageSizeConfig` | `false` | Opt-in viewport-driven page size. It measures the scroll viewport/row height and resets to page 1 before reporting a size change. | | `onPageIndexChange` | `(pageIndex: number) => void` | `undefined` | Page-change callback. | | `onPageSizeChange` | `(pageSize: number) => void` | `undefined` | Page-size callback. | | `pageCount` | `number` | derived for client data | Known total page count in manual mode. Omit with `totalRowCount` to use unknown-total pagination. | | `manualPagination` | `boolean` | `false` | Disables client-side pagination row model. | +`autoPageSize` is disabled by default and is safe with controlled pagination: +when a measurement changes the size it calls `onPageIndexChange(0)` first (if +needed), then `onPageSizeChange(nextSize)`. The parent remains responsible for +feeding controlled values back. It uses `ResizeObserver` only after mount and +falls back to a one-time estimate when the observer is unavailable. + ### Selection props | Prop | Type | Default | Description | @@ -489,7 +746,18 @@ Removed in `2.0.1`: | `rowSelection` | `Record` | internal state | Controlled selection state keyed by row ID. | | `onRowSelectionChange` | `(rowSelection: Record) => void` | `undefined` | Selection change callback. | | `enableRowSelection` | `boolean` | `false` | Enables checkbox selection column and card selection affordances. | -| `selectionActions` | `Array>` | `[]` | Toolbar actions shown when rows are selected. | +| `enableMultiRowSelection` | `boolean \| ((row: TData) => boolean)` | `true` | Enables multi-select globally or for individual rows. Set `false` for radio-like single selection. | +| `enableSubRowSelection` | `boolean \| ((row: TData) => boolean)` | `true` | Controls whether selecting a parent cascades to its sub-rows. | +| `getRowCanSelect` | `(row: TData) => boolean` | all rows | Disables selection for individual rows. | +| `rowSelectionSelectAllScope` | `"page" \| "filtered"` | `"page"` | Selects the current page or every loaded row in the filtered client row model. Server-wide selection remains application-owned. | +| `selectionActions` | `Array>` | `[]` | Toolbar actions shown when row IDs are selected. The callback receives `{ rows, rowIds }`; `rows` contains loaded records while `rowIds` preserves selections across manual/server pages. | + +Selection state is keyed by stable row ID and is not discarded merely because +a server page is no longer loaded. Use `rowIds` in a selection action for +server-owned bulk operations; the accompanying `rows` array intentionally +contains only records available to the current client. In manual pagination, +`"filtered"` select-all can only select loaded records—it does not imply an +unbounded server query. ### Row and toolbar actions @@ -499,7 +767,8 @@ Removed in `2.0.1`: | `rowActions` | `Array>` | `[]` | Per-row dropdown actions. | | `onRowClick` | `(context: { row: TData; rowId: string }) => void \| Promise` | `undefined` | Row click handler for table and card modes. | | `onActionError` | `(context: DataTableActionErrorContext) => void` | `undefined` | Receives rejected or thrown built-in action callbacks with their source, optional action key, and optional row. | -| `getRowClassName` | `(row: TData) => string \| undefined` | `undefined` | Row-level styling hook. | +| `stripedRows` | `boolean` | `false` | Applies virtualization-safe alternate shading to displayed table rows. | +| `getRowClassName` | `(row: TData, context: DataTableRowClassNameContext) => string \| undefined` | `undefined` | Row-level styling hook with displayed index and selection/editing/loading state. Existing one-argument callbacks remain compatible. | When `onRowClick` is present, table rows are focusable and activate on Enter or Space. They retain native ``/row semantics rather than using @@ -519,16 +788,35 @@ interaction semantics. | `cardSizing` | `"fixed" \| "content" \| "fluid"` | `"fixed"` | Selects capped fixed tracks, renderer-sized wrapping items, or responsive stretched tracks. | | `cardGridClassName` | `string` | responsive auto-fit grid | Supported grid slot for card mode. Prefer this over app CSS selectors against internal scroll/card wrappers. | | `cardClassName` | `string` | `undefined` | Supported item slot for card mode card wrappers. | -| `expanded` | `ExpandedState` | internal state | Controlled expanded row state. | -| `onExpandedChange` | `(expanded: ExpandedState) => void` | `undefined` | Expanded state callback. | -| `getRowCanExpand` | `(row: TData) => boolean` | any row when `renderExpandedRow` exists | Optional per-row expansion gate. | -| `renderExpandedRow` | `(props: DataTableExpandedRowProps) => React.ReactNode` | `undefined` | Detail panel rendered below table rows or inside cards. | +| `expanded` | `ExpandedState` | internal state | Controlled tree expansion state. | +| `onExpandedChange` | `(expanded: ExpandedState) => void` | `undefined` | Tree expansion state callback. | +| `getSubRows` | `(row, index) => Array \| undefined` | `undefined` | Resolves hierarchical child rows. | +| `manualExpanding` | `boolean` | `false` | Keeps expansion state controlled by the host, for example while children are loaded remotely. | +| `paginateExpandedRows` | `boolean` | TanStack default | Controls whether expanded descendants participate in pagination. | +| `filterFromLeafRows` | `boolean` | `false` | Retains a parent when one of its descendants matches filtering. | +| `maxLeafRowFilterDepth` | `number` | TanStack default | Caps descendant traversal during leaf-row filtering. | +| `getRowCanExpand` | `(row: TData) => boolean` | child rows only | Optional tree or detail-panel expansion gate. | +| `detailPanel` | `DataTableDetailPanel` | `undefined` | Independently controlled application detail panel rendered beneath a row or in cards. | +| `renderExpandedRow` | `(props: DataTableExpandedRowProps) => React.ReactNode` | `undefined` | Deprecated compatibility bridge for `detailPanel={{ render }}`; existing usage retains its previous `expanded` state behavior. | + +Tree rows receive an accessible expand/collapse button and `data-tree-depth`. +Nested first data cells are indented by depth. Use `detailPanel` when a table +also has `getSubRows`; it deliberately has separate `expanded` state so opening +application details does not expand or collapse the row's children. Card +renderers receive `depth`, `canExpandSubRows`, `isSubRowsExpanded`, and +`toggleSubRowsExpanded`, and the built-in card overlay provides tree and detail +toggles. When deprecated `renderExpandedRow` is combined with `getSubRows`, it +is treated as an independently controlled detail panel instead of being +discarded. ### Empty and loading props | Prop | Type | Default | Description | | --- | --- | --- | --- | | `emptyState` | `React.ReactNode \| ((context: DataTableEmptyStateContext) => React.ReactNode)` | built-in empty state | Custom empty state for both table and card modes. | +| `stateOverlay` | `DataTableStateOverlay` | `undefined` | Explicit empty/error/retry contract. `empty` supersedes `emptyState`; `error` overlays the current table/card, and `onRetry` is routed through `onActionError`. | +| `enablePrint` | `boolean` | `false` | Adds a trailing toolbar control for `apiRef.current.print()`. | +| `enableFullscreen` | `boolean` | `false` | Adds a trailing toolbar control for `apiRef.current.toggleFullscreen()`. | | `isLoading` | `boolean` | `false` | Renders initial skeleton rows or cards when `data` is empty and loading. | | `loadingRowCount` | `number` | `min(5, pageSize)` | Number of synthetic skeleton rows or cards to render for initial loading. | | `getRowLoadingState` | `(row: TData, index: number) => boolean \| DataTableRowLoadingState` | `undefined` | Per-row loading and skeleton override hook for real rows that already exist. | @@ -557,10 +845,12 @@ interaction semantics. type DataTableVirtualizationConfig = { enabled?: boolean; estimateRowHeight?: number; + fallbackRowCount?: number; overscan?: number; card?: { enabled?: boolean; estimateCardHeight?: number; + fallbackCardCount?: number; overscan?: number; lanes?: number | "auto"; }; @@ -570,13 +860,29 @@ type DataTableVirtualizationConfig = { `virtualization={true}` enables table-row virtualization with a 48px estimate and overscan of 8. Card virtualization is opt-in through `virtualization.card.enabled`; its defaults are a 280px estimate, overscan of -4, and automatic lanes. Until a measurable viewport exists, the complete row -or card set is rendered so SSR and first paint do not produce an empty table. +4, and automatic lanes. Until a measurable viewport exists, rendering is +capped at 20 table rows or 12 cards so SSR and first paint remain useful +without mounting the complete dataset. Override those caps with +`fallbackRowCount` and `fallbackCardCount`. + +Rendered virtual table rows and card lanes are measured after mount, so wrapped +cells and variable-height cards correct their estimates while scrolling. Stable, +unique `getRowId` values are required: they are virtual item keys and let the +virtualizer retain the scroll anchor when measurements change. Treat `data`, +row objects, column definitions, and `getRowId` as immutable/memoized inputs. +Development builds warn about common identity churn and duplicate row ids. + +Column virtualization is intentionally not available in 4.4. The table panel +preserves native table layout, grouped headers, pinned/resized columns, detail +rows, and accessibility semantics; slicing only body columns would break those +contracts. Use the included 20/100/500-column benchmark to establish whether +pagination, responsive visibility, or server projection is the appropriate +wide-table strategy for an application. Import behavior: - a base adapter dynamically loads the virtual panels only after - virtualization is enabled; its fallback is the complete non-virtual view + virtualization is enabled; its fallback uses the same bounded initial rows - a `/virtual` adapter includes TanStack Virtual in its static graph and avoids the first-use async boundary - switching between the fallback and loaded panel does not remount the parent @@ -595,6 +901,12 @@ row, current value, draft value, and `setDraftValue`. Numeric columns use number inputs, date columns use datetime inputs, and boolean drafts use checkboxes by default. +`validateRow` may return a general error string or field-name/error map, either +synchronously or asynchronously. Editing exposes dirty and pending UI state, +supports Enter to commit and Escape to cancel by default, and provides +optimistic update, rollback, success, and failure callbacks without retaining +an application-owned undo history. + ### Column visibility, sizing, ordering, pinning, and preferences props | Prop | Type | Default | Description | @@ -604,19 +916,28 @@ checkboxes by default. | `columnOrder` | `ColumnOrderState` | internal state | Controlled column order. | | `onColumnOrderChange` | `(order: ColumnOrderState) => void` | `undefined` | Column order callback. | | `enableColumnReordering` | `boolean` | `false` | Enables header drag and keyboard column reordering. | +| `columnGroupHeaderHeight` | `CSSProperties["height"]` | `undefined` | Default height for shared column-group headers; a group `headerHeight` overrides it. | | `columnPinning` | `ColumnPinningState` | internal state seeded from `meta.fixed` | Controlled column pinning. | | `onColumnPinningChange` | `(pinning: ColumnPinningState) => void` | `undefined` | Column pinning callback. | | `enableColumnPinning` | `boolean` | `false` | Adds pin/unpin controls to the table options menu. | +| `rowPinning` | `RowPinningState` | internal state | Controlled `{ top, bottom }` row-id lists. | +| `onRowPinningChange` | `(pinning: RowPinningState) => void` | `undefined` | Reports row-pinning changes. | +| `enableRowPinning` | `boolean \| (row) => boolean` | `false` | Adds top, bottom, and unpin actions to row menus; a predicate receives the original row. | +| `keepPinnedRows` | `boolean` | `true` | Keeps supplied pinned rows visible when client filtering or pagination would otherwise hide them. | | `columnPrefsKey` | `string` | `undefined` | Compatibility shorthand for versioned persistence of uncontrolled visibility, sizing, order, pinning, and density in `localStorage`. | | `persistence` | `DataTablePersistenceConfig` | `undefined` | Versioned persistence configuration. Takes precedence over `columnPrefsKey` and supports selected slices, custom storage/serialization, migration, debouncing, and error reporting. | | `savedViews` | `DataTableSavedViewsConfig` | `undefined` | Versioned storage and lifecycle callbacks for named state snapshots managed through `apiRef`. | | `enableColumnResizing` | `boolean` | `false` | Enables resize handles on resizable columns. | -| `columnResizeMode` | `"onChange" \| "onEnd"` | `"onChange"` | TanStack Table resize mode. | +| `columnResizeMode` | `"onChange" \| "onEnd"` | `"onEnd"` | TanStack Table resize mode. `onEnd` avoids rebuilding every visible row on each pointer movement. | | `columnSizing` | `ColumnSizingState` | internal state | Controlled column sizing state. | | `onColumnSizingChange` | `(sizing: ColumnSizingState) => void` | `undefined` | Controlled sizing callback. | | `layoutMode` | `"fill" \| "fit"` | `"fill"` | `fill` stretches the table to the container; `fit` sizes to content width. | | `stickyHeader` | `boolean` | `true` | Makes the table header sticky inside the scroll area. | +Pinned regions are rendered in table view only. Card view keeps pinned rows in +its ordinary card order, and server/manual pagination can render a pinned row +only when that record is included in the supplied `data` window. + The default persistence envelope is: ```ts @@ -639,16 +960,16 @@ Persistence errors are best-effort and do not break rendering. Named saved views use a separate `data-table-pro:saved-views:${savedViews.key}` payload. By default a saved view captures sorting, filtering, column visibility/order/pinning/sizing, density, -view mode, hidden-row visibility, and the global query. Pagination, row +grouping, view mode, hidden-row visibility, and the global query. Pagination, row selection, and expansion are intentionally transient unless included in `savedViews.slices`. `savedViews` supports `version`, `slices`, `storage`, `serialize`, `deserialize`, `migrate`, and `onError` equivalents. `onChange(views, operation)` receives `"create"`, `"rename"`, `"delete"`, or `"clear"`; -`onApply(view)` runs after the selected snapshot is restored. No saved-view UI -is imposed, so host projects can present these commands in their own toolbar, -menu, or command palette. +`onApply(view)` runs after the selected snapshot is restored. Host projects can +present these commands themselves, or opt into the compact built-in controls +with `toolbarDataOperations={{ savedViews: true }}`. ### Export, density, labels, and summary props @@ -658,6 +979,7 @@ menu, or command palette. | `density` | `"compact" \| "comfortable" \| "spacious"` | internal state | Controlled row density. | | `onDensityChange` | `(density: DataTableDensity) => void` | `undefined` | Density change callback. | | `enableDensityToggle` | `boolean` | `false` | Adds density controls to the table options menu. | +| `toolbarDataOperations` | `boolean \| DataTableToolbarDataOperations` | `false` | Opts into enhanced table-options controls. `true` enables searchable column management, reset layout, and saved-view UI; choose individual `columnChooser`, `resetLayout`, or `savedViews` flags to limit it. | | `labels` | `Partial` | English defaults | Overrides built-in UI labels. | | `summaryRows` | `Array>` | `[]` | Renders aggregate/footer rows aligned to visible columns. | | `dir` | `"ltr" \| "rtl"` | `"ltr"` | Direction used for logical pinned column offsets. | @@ -743,6 +1065,12 @@ Notes: | --- | --- | --- | --- | | `toolbarVisibility` | `DataTableToolbarVisibility` | all enabled | Selectively hides parts of the toolbar. | +When `toolbarDataOperations.columnChooser` is enabled, the Columns section +adds search, bulk show/hide, accessible move-earlier/move-later controls, and +pin actions (when `enableColumnPinning` is also enabled). Active toolbar and +column filters are shown as removable chips with a count. `resetLayout` uses +the same initial layout as `apiRef.current.resetColumnLayout()`. + ### Drag-and-drop props | Prop | Type | Default | Description | diff --git a/docs/Adapters.md b/docs/Adapters.md index 83b8060..bcbb5df 100644 --- a/docs/Adapters.md +++ b/docs/Adapters.md @@ -123,7 +123,7 @@ Card mode supports explicit grid density without targeting internals: ``` diff --git a/docs/Migration.md b/docs/Migration.md index efc66a1..dd25378 100644 --- a/docs/Migration.md +++ b/docs/Migration.md @@ -1,5 +1,66 @@ # Migration Guide +## 4.4.0 additive modernization release + +Version 4.4.0 removes no public prop, type, or package entrypoint. A 4.3 table +keeps native table semantics and its existing toolbar, paging, editing, and +server behavior until a new option is enabled. + +- Use `enableGrouping`, `grouping` / `onGroupingChange`, or + `initialState.grouping` to adopt grouping. `DataTableState.grouping` remains + optional so existing complete state object literals compile unchanged. +- Use `interactiveGrid` (or `accessibility={{ mode: "grid" }}`) only for an + application-style keyboard grid. Add `enableCellSelection` separately when + rectangular range selection is wanted; ordinary row selection is + independent. +- Use `clipboard` for opt-in copy/paste behavior. `copyToClipboard()` remains + asynchronous and now loads its implementation on first use. Setting + `clipboard={{ copy: false }}` continues to disable imperative/default range + copy. +- Use `toolbarDataOperations` for the searchable column manager, filter chips, + reset, and saved-view UI. Existing `savedViews` API-ref commands still work + without built-in controls. Newly created saved views include grouping by + default; an explicit `savedViews.slices` list remains authoritative. +- Use `autoPageSize`, `stateOverlay`, `enablePrint`, and `enableFullscreen` + independently. Their optional implementations load only when requested. +- Data-source callbacks may consume the new `globalFilter`, `grouping`, + `aggregations`, and `expansionPath` request fields and return `rowIds`, + `facets`, `aggregates`, and `metadata`. Existing sources can ignore all new + fields and keep returning their prior result shape. +- Numeric range filters without explicit `min` / `max` now expose bounds from + TanStack's local faceted row model. Set explicit limits to retain fixed + application-defined bounds; manual/server filters remain server-owned. + +The base gzip budget rises from 42 KiB to 48 KiB with a measured 46.1 KiB +static graph. Clipboard, enhanced toolbar operations, auto sizing, error +overlays, virtualization, and the data-source hook are not added to that +default static path when unused. + +Column virtualization is not part of 4.4. The package keeps native table +layout and grouped-header, pinning, resizing, detail-row, and accessibility +correctness instead of shipping a partial body-only virtualizer. + +## 4.3.0 additive feature release + +Version 4.3.0 removes no prop, type, or entrypoint. Existing flat-row tables, +detail panels based on `renderExpandedRow`, manual server data, and column +reordering continue to work. + +- New server integrations can import `useDataTableDataSource` from + `data-table-pro/data-source`; existing `data` plus manual flags remain + supported. +- `renderExpandedRow` remains a deprecated detail-panel bridge. Use + `detailPanel={{ render, getRowCanExpand }}` when adopting `getSubRows` so + application details and hierarchical expansion have independent state. +- Nested column groups are now locked during reordering by default. Add + `freeReordering: true` to every group boundary that intentionally permits a + leaf to cross it. +- Row pinning is opt-in through `enableRowPinning`. Add `rowPinning` to custom + persistence/saved-view slice lists if those lists override the defaults. +- Responsive presentation is owned by `data-table-pro/styles.css` container + queries. Consumers should not add viewport media-query copies of the table + breakpoints. + ## 4.0.0 code-splitting entrypoints No existing import or prop needs to change. The base adapter entrypoints still @@ -22,9 +83,10 @@ import { DataTable } from "data-table-pro/virtual"; Equivalent eager entrypoints are `data-table-pro/heroui/virtual` and `data-table-pro/thegridcn/virtual`. Props, types, styling, state, and adapter -behavior are unchanged. During on-demand loading, the base entry renders the -complete non-virtual rows/cards as its Suspense fallback, so table state stays -in the parent component. +behavior are unchanged. During on-demand loading, the base entry keeps table +state in the parent component and renders a bounded initial fallback (20 rows +or 12 cards by default). Use `fallbackRowCount` or `fallbackCardCount` when a +different first-paint cap is appropriate. Adapter authors can move from the broad compatibility surface to: @@ -251,7 +313,9 @@ Projects upgrading to `3.0.0` should review these changes: 2. React peers are now `react@^19.2.0` and `react-dom@^19.2.0`. 3. `nuqs` is an optional peer required only when importing `data-table-pro/url-state`. 4. Toolbar search filters local rows by default. Use `manualFiltering` for server-side tables or `enableToolbarQueryFiltering={false}` when the toolbar input should be display-only. -5. `column.meta.filter` now renders built-in toolbar filters for text, select, and multi-select filter controls. +5. `column.meta.filter` renders built-in toolbar filters for text, select, + multi-select, boolean, numeric-range, and date-range controls. Range filter + state uses serializable `{ from, to }` objects with inclusive bounds. 6. New optional APIs cover row expansion, column ordering/pinning, CSV export, density, labels, summary rows, RTL direction, and column preference persistence. ## 2.0.1 Breaking Changes diff --git a/docs/Roadmap.md b/docs/Roadmap.md index 95053ee..3d0ea45 100644 --- a/docs/Roadmap.md +++ b/docs/Roadmap.md @@ -16,11 +16,11 @@ Audit baseline: Current implementation baseline: -- package version: 4.1.0 +- package version: 4.4.0 - React/React DOM peers: 19.2.8 - TanStack Table: 8.21.3 - TanStack Virtual: 3.14.8 -- validation: 211 unit/integration tests, enforced coverage and declaration +- validation: 310 unit/integration tests, enforced coverage and declaration snapshots, SSR/hydration tests, a packed-consumer build, and six adapter/theme Playwright screenshot and axe cases - toolchain: TypeScript 7 CLI with the official TypeScript 6 compiler-API @@ -83,7 +83,7 @@ exposed by the wrapper. | Column filtering | Text/select/multi | Add boolean, numeric/date range, faceted autocomplete, filter operators, and server facets. | | Column faceting | Missing | Support unique values, counts, min/max values, and async server-provided facets. | | Column visibility/order/pinning/sizing | Supported | Add controlled sizing, keyboard-safe controls, presets, reset, and stronger grouped-column behavior. | -| Header/column groups | Incidental TanStack rendering | Make nested definitions first-class across search, sizing, visibility, export, and tests. | +| Header/column groups | Supported | Keep nested definitions first-class across search, sizing, visibility, export, editing, pinning, and tests. | | Row selection | Multi-row and shift range | Add single/multi/sub-row policies, selectability predicates, cross-page selection, and select-all scope. | | Detail panels | Supported through expansion state | Move to an explicit detail-panel contract so tree expansion is independent. | | Tree/sub-row expansion | Missing | Add `getSubRows`, manual expansion, leaf-first filtering, depth controls, and expanded-row pagination policy. | @@ -222,13 +222,47 @@ Quality: ### Phase 2: TanStack feature parity (3.2) +Status: core scope complete in 4.4.0. Richer filters, tree/detail expansion, +row pinning, selection policies, hardened column groups, faceting, grouping, +and aggregation are implemented across all adapters. Applications can still +supply a custom `globalFilterFn` for domain-specific fuzzy ranking; a bundled +ranking dependency is not added to the base runtime. + +Delivered in 4.3.0: + +- Boolean, inclusive numeric-range, and inclusive date-range column filters, + including localized labels, serializable values, and client filter + functions. +- Independent tree expansion and application detail panels, with `getSubRows`, + manual expansion, leaf-first/depth-limited filtering, expanded-row + pagination policy, accessible indentation controls, and the deprecated + `renderExpandedRow` bridge. +- Controlled/uncontrolled top and bottom row pinning, per-row pin predicates, + visibility policy, row-menu actions, API commands, persistence, saved views, + and styling hooks. +- Single/multi/sub-row selection policies, per-row selectability, page versus + filtered select-all scope, and cross-page selected IDs for manual data. +- Locked nested group reordering by default, explicit cross-group opt-in, + descriptions, group-specific height, class, and style hooks. + +Delivered in 4.4.0: + +- Searchable faceted multi-select filters with local unique-value counts, + server-provided facet options/counts, and local numeric min/max derivation. +- Controlled/uncontrolled and manual grouping, grouped-column modes, built-in + and custom aggregations, grouped/aggregated/placeholder cells, column-menu + controls, and an accessible reorderable grouping bar. +- Grouping state throughout unified state, saved views, URL state, + export/clipboard row models, and the server data-source contract. + Filtering and faceting: - Add `boolean`, `numberRange`, `dateRange`, and `faceted` filter definitions. - Wire `getFacetedRowModel`, `getFacetedUniqueValues`, and `getFacetedMinMaxValues` only when needed. - Support option counts, search within facet values, async/server facet data, - filter operators, and opt-in fuzzy ranking. + and filter operators. Domain-specific fuzzy ranking remains available + through `globalFilterFn` without adding a ranking dependency. Grouping and aggregation: @@ -260,9 +294,9 @@ considered shipped. ### Phase 3: performance and package architecture (3.3) -Status: first code-splitting slice delivered on `main`; runtime benchmarks, -search indexing, measured variable-height virtualization, and two-axis -virtualization remain. +Status: code-splitting, benchmark fixtures, cached client search, deferred +client filtering, and measured variable-height row/card virtualization are +delivered. Two-axis/column virtualization remains intentionally deferred. Delivered in the first slice: @@ -280,7 +314,7 @@ Delivered in the first slice: - Added CI budgets for static package graphs, adapter deltas, URL state, demo initial JavaScript, and explicit TanStack Virtual import boundaries. -Measure first: +Measure first (delivered in `benchmarks/`): - Add reproducible React Profiler and browser benchmarks for 1k, 10k, 50k, and 100k rows; 20, 100, and 500 columns; client filtering/sorting/grouping; @@ -289,7 +323,7 @@ Measure first: dropped frames. - Publish benchmark fixtures and compare every performance PR to the baseline. -Runtime work: +Runtime work (delivered except where noted): - Cache searchable values by data/column identity and expose a custom indexing hook for expensive domain data. @@ -297,7 +331,10 @@ Runtime work: server callbacks. - Dynamically measure variable-height table/card rows and preserve scroll position across expansion, editing, and responsive changes. -- Add optional column virtualization and a two-axis virtual layout. +- Add optional column virtualization and a two-axis virtual layout. Deferred: + a correct native-table implementation must preserve grouped headers, pinned + and resized columns, detail rows, and screen-reader semantics together; the + wide-column benchmark is the executable evidence until that design exists. - Document immutable row/column identity requirements and warn in development for common unstable inputs. - Profile memo comparators and remove memoization whose comparison cost exceeds @@ -320,23 +357,56 @@ Initial budgets: | Artifact | Budget | | --- | --- | -| Base shadcn package-owned runtime | <= 35 KiB gzip | +| Base shadcn package-owned runtime | <= 48 KiB gzip | | HeroUI/The Gridcn adapter delta | <= 6 KiB gzip each | | URL-state entry | <= 5 KiB gzip, excluding peer dependency | +| Data-source entry | <= 3 KiB gzip, excluding React peer dependency | | Base entry imports TanStack Virtual | No | | Demo initial JavaScript | <= 100 KiB gzip | Budgets may be adjusted once source-map-based attribution is in CI, but any increase must be explained in the changelog. -The first measured minified base graph is 33.7 KiB gzip. The provisional -30 KiB target was adjusted to 35 KiB after source attribution so CI has a -realistic but narrow regression margin; optional virtualization is excluded -from this graph. The adapter deltas are 0.2 KiB (HeroUI) and 0.5 KiB (The -Gridcn), URL state is 2.2 KiB, and demo initial JavaScript is 64.9 KiB gzip. +The 4.4.0 minified base static graph is 46.1 KiB gzip after adding grouping, +grid navigation, range selection, editing lifecycle state, and their shared +coordination. The CI ceiling is 48 KiB, retaining 1.9 KiB of source-attributed +regression margin. Clipboard, toolbar operations, automatic page sizing, error +overlays, and virtualization are first-use chunks; the server data source is a +separate entry. Adapter deltas remain below 6 KiB, URL state below 5 KiB, the +data-source entry is 2.2 KiB, and demo initial JavaScript remains below 100 KiB. ### Phase 4: modern-grid quality of life (3.4) +Status: core scope complete in 4.4.0. The native reading table remains the +default; grid navigation, cell selection, clipboard/paste, enhanced toolbar +operations, adaptive paging, and overlays are opt-in. + +Delivered in 4.4.0: + +- ARIA grid semantics, roving focus, full geometry-aware keyboard navigation, + focus restoration, and virtual/server row and column metadata. +- Pointer and keyboard cell-range selection, selected-cell semantics/styling, + range-aware clipboard copy, and app-owned undo/redo commands. +- Formula-safe TSV/CSV copy, opt-in parsed paste, asynchronous row validation, + field errors, dirty/pending state, optimistic rollback, and keyboard + commit/cancel behavior. +- Searchable/bulk column operations, group-safe reorder/pin/reset controls, + filter chips/counts, and complete saved-view CRUD controls. +- Viewport-driven auto page sizing, print/fullscreen controls, scroll commands, + and empty/error/retry state rendering. +- First-use chunks for clipboard, enhanced toolbar operations, auto sizing, and + error overlays so ordinary tables do not execute or download those features. + +Intentionally deferred optional scope: + +- A standalone per-cell commit mode; 4.4 row editing already provides custom + per-cell editors with row-level validation and atomic save/rollback. +- A built-in runtime filter-operator builder; typed configured operators and + app-supplied custom filter UI/functions remain available. +- An XLSX plugin and column virtualization. XLSX should be a separately + budgeted entrypoint; column virtualization needs a layout that preserves + native grouped headers, pinning, resizing, detail rows, and accessibility. + Accessibility and navigation: - Preserve a native `table` mode for reading/browsing. @@ -349,8 +419,9 @@ Accessibility and navigation: Editing and clipboard: -- Add cell and row edit modes, sync/async validation, field errors, dirty - tracking, pending state, optimistic save hooks, and cancel/commit policy. +- Add row edit mode with per-cell editors, sync/async validation, field errors, + dirty tracking, pending state, optimistic save hooks, and cancel/commit + policy. A separate per-cell commit transaction remains deferred. - Add single-cell and range selection as an opt-in feature. - Add copy as tab-separated values and opt-in paste through column parsers and edit validation. @@ -360,17 +431,24 @@ Toolbar and data operations: - Add searchable column chooser, bulk show/hide, reorder, pin, reset, and saved-view controls. -- Add filter chips, active-filter count, operator builder, and one-command - clear/reset. +- Add filter chips, active-filter count, configured operators, and one-command + clear/reset. A built-in runtime operator builder remains deferred. - Add export scopes for current page, all loaded, filtered/sorted, selected, and server-provided exports. -- Add print support and an optional XLSX entrypoint; do not put XLSX in the - base bundle. +- Add print support. A future XLSX entrypoint must remain outside the base + bundle with its own budget. - Add auto page size, scroll-to-row, scroll-to-column, full-screen hook, and empty/error/retry overlays. Server data source: +Delivered across 4.3.0 and 4.4.0 as the independently importable +`data-table-pro/data-source` entrypoint for offset and cursor pagination, +sorting, global/column filters, grouping, aggregation and expansion-path +requests, caller-defined query context, abort signals, known/unknown totals, +stable row IDs, facets, aggregates, metadata, stale-request protection, +request deduplication, caching, retry, refresh, and invalidation. + - Add a typed request containing pagination/cursor, sorting, global/column filters, grouping, aggregation, expansion path, and abort signal. - Add a typed response containing rows, stable IDs, known/unknown totals, diff --git a/fixtures/packed-consumer/src/main.tsx b/fixtures/packed-consumer/src/main.tsx index 9aa7132..8f3fd10 100644 --- a/fixtures/packed-consumer/src/main.tsx +++ b/fixtures/packed-consumer/src/main.tsx @@ -23,6 +23,10 @@ import { useDataTableUrlState, type UseDataTableUrlStateOptions, } from "data-table-pro/url-state"; +import { + useDataTableDataSource, + type DataTableDataSource, +} from "data-table-pro/data-source"; import type { DataTableState } from "data-table-pro/types"; import "data-table-pro/styles.css"; import "./styles.css"; @@ -50,28 +54,43 @@ const urlOptions: UseDataTableUrlStateOptions = { keyPrefix: "people-", enabled: ["columnVisibility"], }; +const dataSource: DataTableDataSource = () => ({ + rows, + rowCount: rows.length, +}); function App() { const shadcnApi = React.useRef>(null); + const serverRows = useDataTableDataSource({ + columnFilters: [], + enabled: false, + initialData: rows, + mode: "offset", + pagination: { pageIndex: 0, pageSize: 10 }, + sorting: [], + source: dataSource, + }); React.useEffect(() => { if ( typeof useDataTableUrlState !== "function" || + typeof useDataTableDataSource !== "function" || + !serverRows.tableProps.manualPagination || !urlOptions.keyPrefix || !advancedUiKit.Button ) { throw new Error("A public package entrypoint was not packaged"); } - }, []); + }, [serverRows.tableProps.manualPagination]); return (
    row.id} initialState={initialState} + {...serverRows.tableProps} /> =20.19" + }, "sideEffects": [ "./styles.css" ], @@ -52,6 +55,10 @@ "types": "./dist/url-state.d.ts", "import": "./dist/url-state.js" }, + "./data-source": { + "types": "./dist/data-source.d.ts", + "import": "./dist/data-source.js" + }, "./advanced": { "types": "./dist/advanced.d.ts", "import": "./dist/advanced.js" @@ -77,6 +84,7 @@ }, "scripts": { "build": "tsup", + "bench": "playwright test --config benchmarks/playwright.config.ts", "bundle:check": "node scripts/check-bundle-size.mjs", "api:check": "node scripts/public-api-snapshot.mjs", "api:update": "node scripts/public-api-snapshot.mjs --update", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4fd6991..0d0a074 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,12 @@ settings: overrides: '@hono/node-server': 2.0.12 + brace-expansion: 5.0.9 esbuild: 0.28.1 + fast-uri: 3.1.5 + hono: 4.12.34 + js-yaml: 4.3.1 + nanoid: 3.3.17 importers: @@ -543,7 +548,7 @@ packages: resolution: {integrity: sha512-eWpQYr67tqJLeaSUl0Q+TquuYfUdTibpOJlUMV2FfUP7+KqCC5TufnwnlXL6mobZBJbGAYRd7ZvEBDCbLInjhg==} engines: {node: '>=20'} peerDependencies: - hono: ^4 + hono: 4.12.34 '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} @@ -2114,8 +2119,8 @@ packages: resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} engines: {node: '>=18'} - brace-expansion@5.0.8: - resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==} + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} engines: {node: 20 || >=22} braces@3.0.3: @@ -2538,8 +2543,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.4: - resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==} + fast-uri@3.1.5: + resolution: {integrity: sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==} fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -2695,8 +2700,8 @@ packages: hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - hono@4.12.32: - resolution: {integrity: sha512-XcuyW9qE2kJn07PkecMOBd5Vq/hMy7mmGw+idz1yblbg9N17ijJODrvPkn7/dwL3Kulj8LcRJ69DLOWf91dRUg==} + hono@4.12.34: + resolution: {integrity: sha512-GqXJqY/xJkJmuloTrnV1ZEXG3fqte+VjkUqoRNZXcrUidiUOP4fMSIHHY4tsqZBK++kVyWmt/AAfSUuy57/eSA==} engines: {node: '>=16.9.0'} html-encoding-sniffer@6.0.0: @@ -2876,8 +2881,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.3.0: - resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + js-yaml@4.3.1: + resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==} hasBin: true jsdom@30.0.0: @@ -3206,8 +3211,8 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.16: - resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + nanoid@3.3.17: + resolution: {integrity: sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -4561,9 +4566,9 @@ snapshots: transitivePeerDependencies: - tailwind-merge - '@hono/node-server@2.0.12(hono@4.12.32)': + '@hono/node-server@2.0.12(hono@4.12.34)': dependencies: - hono: 4.12.32 + hono: 4.12.34 '@humanfs/core@0.19.2': dependencies: @@ -4629,7 +4634,7 @@ snapshots: '@modelcontextprotocol/sdk@1.29.0(supports-color@7.2.0)(zod@3.25.76)': dependencies: - '@hono/node-server': 2.0.12(hono@4.12.32) + '@hono/node-server': 2.0.12(hono@4.12.34) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 @@ -4639,7 +4644,7 @@ snapshots: eventsource-parser: 3.1.0 express: 5.2.1(supports-color@7.2.0) express-rate-limit: 8.6.0(express@5.2.1(supports-color@7.2.0))(supports-color@7.2.0) - hono: 4.12.32 + hono: 4.12.34 jose: 6.2.4 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -5967,7 +5972,7 @@ snapshots: ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.4 + fast-uri: 3.1.5 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -6034,7 +6039,7 @@ snapshots: transitivePeerDependencies: - supports-color - brace-expansion@5.0.8: + brace-expansion@5.0.9: dependencies: balanced-match: 4.0.4 @@ -6164,7 +6169,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.3.0 + js-yaml: 4.3.1 parse-json: 5.2.0 optionalDependencies: typescript: '@typescript/typescript6@6.0.2' @@ -6493,7 +6498,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.4: {} + fast-uri@3.1.5: {} fastq@1.20.1: dependencies: @@ -6638,7 +6643,7 @@ snapshots: dependencies: hermes-estree: 0.25.1 - hono@4.12.32: {} + hono@4.12.34: {} html-encoding-sniffer@6.0.0(@noble/hashes@1.8.0): dependencies: @@ -6764,7 +6769,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.3.0: + js-yaml@4.3.1: dependencies: argparse: 2.0.1 @@ -7002,7 +7007,7 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.8 + brace-expansion: 5.0.9 minimist@1.2.8: {} @@ -7050,7 +7055,7 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.16: {} + nanoid@3.3.17: {} natural-compare@1.4.0: {} @@ -7231,7 +7236,7 @@ snapshots: postcss@8.5.23: dependencies: - nanoid: 3.3.16 + nanoid: 3.3.17 picocolors: 1.1.1 source-map-js: 1.2.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index cf2d72a..77fc99d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,7 +3,12 @@ allowBuilds: msw: false overrides: "@hono/node-server": 2.0.12 + brace-expansion: 5.0.9 esbuild: 0.28.1 + fast-uri: 3.1.5 + hono: 4.12.34 + js-yaml: 4.3.1 + nanoid: 3.3.17 minimumReleaseAgeExclude: - globals@17.8.0 - jsdom@30.0.0 diff --git a/scripts/check-bundle-size.mjs b/scripts/check-bundle-size.mjs index 1d81e3e..9251497 100644 --- a/scripts/check-bundle-size.mjs +++ b/scripts/check-bundle-size.mjs @@ -10,10 +10,13 @@ const rootDir = path.resolve( const distDir = path.join(rootDir, "dist"); const kib = 1024; const budgets = { - base: 35 * kib, + base: 48 * kib, adapterDelta: 6 * kib, urlState: 5 * kib, + dataSource: 3 * kib, demoInitial: 100 * kib, + demoLoadedAdapter: 190 * kib, + demoCss: 20 * kib, }; const packageGraphs = new Map(); @@ -25,6 +28,7 @@ for (const entry of [ "thegridcn.js", "thegridcn-virtual.js", "url-state.js", + "data-source.js", "adapter.js", "adapter-virtual.js", ]) { @@ -36,7 +40,8 @@ const baseSize = gzipGraph(baseGraph); const heroSize = gzipGraph(packageGraphs.get("heroui.js")); const gridSize = gzipGraph(packageGraphs.get("thegridcn.js")); const urlStateSize = gzipGraph(packageGraphs.get("url-state.js")); -const demoSize = await readDemoInitialSize(); +const dataSourceSize = gzipGraph(packageGraphs.get("data-source.js")); +const demoSizes = await readDemoBuildSizes(); assertBudget("base shadcn static runtime", baseSize, budgets.base); assertBudget( @@ -50,7 +55,18 @@ assertBudget( budgets.adapterDelta, ); assertBudget("URL-state entry", urlStateSize, budgets.urlState); -assertBudget("demo initial JavaScript", demoSize, budgets.demoInitial); +assertBudget("data-source entry", dataSourceSize, budgets.dataSource); +assertBudget( + "demo initial JavaScript", + demoSizes.initialJavaScript, + budgets.demoInitial, +); +assertBudget( + "demo loaded adapter JavaScript", + demoSizes.loadedAdapterJavaScript, + budgets.demoLoadedAdapter, +); +assertBudget("demo CSS", demoSizes.css, budgets.demoCss); assertDoesNotContainVirtual( "base shadcn", @@ -68,6 +84,10 @@ assertDoesNotContainVirtual( "stable adapter-authoring", packageGraphs.get("adapter.js"), ); +assertDoesNotContainVirtual( + "data source", + packageGraphs.get("data-source.js"), +); assertContainsVirtual( "virtual shadcn", packageGraphs.get("virtual.js"), @@ -92,7 +112,10 @@ process.stdout.write( ` HeroUI delta: ${formatSize(Math.max(0, heroSize - baseSize))} / ${formatSize(budgets.adapterDelta)}`, ` The Gridcn delta: ${formatSize(Math.max(0, gridSize - baseSize))} / ${formatSize(budgets.adapterDelta)}`, ` URL state: ${formatSize(urlStateSize)} / ${formatSize(budgets.urlState)}`, - ` demo initial: ${formatSize(demoSize)} / ${formatSize(budgets.demoInitial)}`, + ` data source: ${formatSize(dataSourceSize)} / ${formatSize(budgets.dataSource)}`, + ` demo initial: ${formatSize(demoSizes.initialJavaScript)} / ${formatSize(budgets.demoInitial)}`, + ` demo loaded adapter: ${formatSize(demoSizes.loadedAdapterJavaScript)} / ${formatSize(budgets.demoLoadedAdapter)}`, + ` demo CSS: ${formatSize(demoSizes.css)} / ${formatSize(budgets.demoCss)}`, ].join("\n") + "\n", ); @@ -129,7 +152,7 @@ function gzipGraph(graph) { return gzipSync(Array.from(graph.values()).join("\n")).length; } -async function readDemoInitialSize() { +async function readDemoBuildSizes() { const demoDist = path.join(rootDir, "demo", "dist"); const manifest = JSON.parse( await readFile( @@ -141,19 +164,40 @@ async function readDemoInitialSize() { if (!entry?.file) { throw new Error("The demo manifest does not contain its index entry"); } - const files = new Set(); + const initialFiles = new Set(); - function visit(chunk) { + function visit(chunk, files) { if (!chunk || files.has(chunk.file)) { return; } files.add(chunk.file); for (const importedKey of chunk.imports ?? []) { - visit(manifest[importedKey]); + visit(manifest[importedKey], files); } } - visit(entry); + visit(entry, initialFiles); + const initialJavaScript = await gzipDemoFiles(demoDist, initialFiles); + const loadedAdapterSizes = await Promise.all( + (entry.dynamicImports ?? []).map(async (dynamicImportKey) => { + const files = new Set(initialFiles); + visit(manifest[dynamicImportKey], files); + return gzipDemoFiles(demoDist, files); + }), + ); + const css = await gzipDemoFiles(demoDist, new Set(entry.css ?? [])); + + return { + initialJavaScript, + loadedAdapterJavaScript: Math.max( + initialJavaScript, + ...loadedAdapterSizes, + ), + css, + }; +} + +async function gzipDemoFiles(demoDist, files) { const contents = await Promise.all( Array.from(files, (filename) => readFile(path.join(demoDist, filename), "utf8"), diff --git a/src/adapters/heroui/index.tsx b/src/adapters/heroui/index.tsx index 2fe9951..037bc86 100644 --- a/src/adapters/heroui/index.tsx +++ b/src/adapters/heroui/index.tsx @@ -217,6 +217,8 @@ export const heroUiKit: DataTableUiKit = { cardUnselected: "border-separator", cardViewport: "bg-transparent", cellBorder: "border-separator/70", + cellSelected: "!bg-accent-soft ring-1 ring-inset ring-accent/50", + columnGroupHeader: "bg-default/50 font-semibold", dragActive: "rounded-2xl border-dashed border-accent", emptyState: "border-separator bg-surface", footer: "border-separator bg-surface text-surface-foreground", diff --git a/src/adapters/shadcn/index.tsx b/src/adapters/shadcn/index.tsx index 2541271..49d23f9 100644 --- a/src/adapters/shadcn/index.tsx +++ b/src/adapters/shadcn/index.tsx @@ -182,6 +182,8 @@ export const shadcnUiKit: DataTableUiKit = { cardUnselected: "border-border", cardViewport: "bg-transparent", cellBorder: "border-border/40", + cellSelected: "!bg-primary/10 ring-1 ring-inset ring-primary/40", + columnGroupHeader: "bg-muted/50 font-semibold", dragActive: "rounded-md border-dashed border-primary", emptyState: "border-border/60 bg-background/70", footer: "border-border bg-card", diff --git a/src/adapters/thegridcn/index.tsx b/src/adapters/thegridcn/index.tsx index b024fe7..5ad4a2c 100644 --- a/src/adapters/thegridcn/index.tsx +++ b/src/adapters/thegridcn/index.tsx @@ -201,6 +201,8 @@ export const theGridcnUiKit: DataTableUiKit = { cardUnselected: "border-cyan-400/35", cardViewport: "bg-transparent", cellBorder: "border-cyan-400/16", + cellSelected: "!bg-cyan-400/15 ring-1 ring-inset ring-cyan-300/60", + columnGroupHeader: "bg-cyan-400/10 text-cyan-200", dragActive: "rounded-md border-dashed border-cyan-300", emptyState: "border-cyan-400/35 bg-black/80", footer: "border-cyan-400/40 bg-black/80 text-cyan-50", diff --git a/src/components/ui/input-base.ts b/src/components/ui/input-base.ts index 5ad6e74..97da375 100644 --- a/src/components/ui/input-base.ts +++ b/src/components/ui/input-base.ts @@ -1,2 +1,2 @@ export const inputClassName = - "h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:opacity-70 focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm"; + "h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:opacity-70 focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 @min-[768px]/data-table:text-sm"; diff --git a/src/components/ui/pagination.tsx b/src/components/ui/pagination.tsx index a09b3c8..63afe6e 100644 --- a/src/components/ui/pagination.tsx +++ b/src/components/ui/pagination.tsx @@ -94,7 +94,9 @@ function PaginationPrevious({ {...props} > - {showText ? {text} : null} + {showText ? ( + {text} + ) : null} ); } @@ -120,7 +122,9 @@ function PaginationFirst({ {...props} > - {showText ? {text} : null} + {showText ? ( + {text} + ) : null} ); } @@ -145,7 +149,9 @@ function PaginationNext({ className={cn("pr-1.5!", className)} {...props} > - {showText ? {text} : null} + {showText ? ( + {text} + ) : null} ); @@ -171,7 +177,9 @@ function PaginationLast({ className={cn("pr-1.5!", className)} {...props} > - {showText ? {text} : null} + {showText ? ( + {text} + ) : null} ); diff --git a/src/core/data-source/use-data-table-data-source.test.tsx b/src/core/data-source/use-data-table-data-source.test.tsx new file mode 100644 index 0000000..d089acb --- /dev/null +++ b/src/core/data-source/use-data-table-data-source.test.tsx @@ -0,0 +1,259 @@ +import * as React from "react"; +import { act, cleanup, render, waitFor } from "@testing-library/react"; +import { afterEach, describe, expect, it, vi } from "vitest"; +import type { PaginationState } from "@tanstack/react-table"; +import { + type DataTableDataSourceResponse, + type UseDataTableDataSourceResult, + useDataTableDataSource, +} from "./use-data-table-data-source"; + +type User = { id: string }; + +afterEach(() => { + cleanup(); + vi.restoreAllMocks(); +}); + +describe("useDataTableDataSource", () => { + it("sends a typed offset request and returns manual table props", async () => { + const onGlobalFilterChange = vi.fn(); + const onGroupingChange = vi.fn(); + const source = vi.fn(() => ({ + aggregates: { salary: 120_000 }, + metadata: { revision: "users-v2" }, + rows: [{ id: "ada" }], + rowIds: ["ada"], + rowCount: 31, + })); + let result: UseDataTableDataSourceResult | undefined; + + function Harness() { + result = useDataTableDataSource({ + columnFilters: [{ id: "role", value: "admin" }], + globalFilter: "ada", + grouping: ["department"], + aggregations: { salary: "sum" }, + expansionPath: ["engineering"], + mode: "offset", + onGlobalFilterChange, + onGroupingChange, + pagination: { pageIndex: 1, pageSize: 10 }, + query: { organizationId: "org_1" }, + sorting: [{ desc: true, id: "createdAt" }], + source, + }); + return null; + } + + render(); + + await waitFor(() => expect(result?.isSuccess).toBe(true)); + expect(source).toHaveBeenCalledWith( + expect.objectContaining({ + columnFilters: [{ id: "role", value: "admin" }], + globalFilter: "ada", + grouping: ["department"], + aggregations: { salary: "sum" }, + expansionPath: ["engineering"], + limit: 10, + mode: "offset", + offset: 10, + query: { organizationId: "org_1" }, + sorting: [{ desc: true, id: "createdAt" }], + }), + ); + expect(result?.tableProps).toMatchObject({ + data: [{ id: "ada" }], + manualFiltering: true, + manualGrouping: true, + manualPagination: true, + manualSorting: true, + pageIndex: 1, + pageSize: 10, + grouping: ["department"], + toolbarQueryValue: "ada", + totalRowCount: 31, + }); + result?.tableProps.onToolbarQueryValueChange?.("grace"); + result?.tableProps.onGroupingChange?.(["role"]); + expect(onGlobalFilterChange).toHaveBeenCalledWith("grace"); + expect(onGroupingChange).toHaveBeenCalledWith(["role"]); + expect(result?.tableProps.hasNextPage).toBe(true); + expect(result?.aggregates).toEqual({ salary: 120_000 }); + expect(result?.metadata).toEqual({ revision: "users-v2" }); + expect(result?.rowIds).toEqual(["ada"]); + }); + + it("cancels superseded work and ignores a late response", async () => { + const first = deferred>(); + const second = deferred>(); + const source = vi + .fn() + .mockImplementationOnce(() => first.promise) + .mockImplementationOnce(() => second.promise); + let result: UseDataTableDataSourceResult | undefined; + + function Harness({ pagination }: { pagination: PaginationState }) { + result = useDataTableDataSource({ + columnFilters: [], + mode: "offset", + pagination, + sorting: [], + source, + }); + return null; + } + + const view = render(); + await waitFor(() => expect(source).toHaveBeenCalledTimes(1)); + const firstRequest = source.mock.calls[0]?.[0] as { signal: AbortSignal }; + + view.rerender(); + await waitFor(() => expect(source).toHaveBeenCalledTimes(2)); + expect(firstRequest.signal.aborted).toBe(true); + + await act(async () => { + second.resolve({ rows: [{ id: "second" }] }); + await second.promise; + }); + await act(async () => { + first.resolve({ rows: [{ id: "first" }] }); + await first.promise; + }); + + expect(result?.data).toEqual([{ id: "second" }]); + }); + + it("clears the fetching state when disabled during an active request", async () => { + const pending = deferred>(); + const source = vi.fn((_request: { signal: AbortSignal }) => pending.promise); + let result: UseDataTableDataSourceResult | undefined; + + function Harness({ enabled }: { enabled: boolean }) { + result = useDataTableDataSource({ + columnFilters: [], + enabled, + mode: "offset", + pagination: { pageIndex: 0, pageSize: 10 }, + sorting: [], + source, + }); + return null; + } + + const view = render(); + await waitFor(() => expect(result?.isFetching).toBe(true)); + const request = source.mock.calls[0]?.[0] as { signal: AbortSignal }; + + view.rerender(); + + await waitFor(() => expect(result?.isFetching).toBe(false)); + expect(result?.isLoading).toBe(false); + expect(request.signal.aborted).toBe(true); + }); + + it("deduplicates an in-flight refresh and serves a fresh cached request", async () => { + const pending = deferred>(); + const source = vi + .fn() + .mockResolvedValueOnce({ rows: [{ id: "initial" }] }) + .mockImplementationOnce(() => pending.promise); + let result: UseDataTableDataSourceResult | undefined; + + function Harness() { + result = useDataTableDataSource({ + cache: 10_000, + columnFilters: [], + mode: "offset", + pagination: { pageIndex: 0, pageSize: 10 }, + sorting: [], + source, + }); + return null; + } + + render(); + await waitFor(() => expect(result?.isSuccess).toBe(true)); + expect(source).toHaveBeenCalledTimes(1); + + await act(async () => { + const one = result?.refresh(); + const two = result?.refresh(); + expect(one).toBe(two); + pending.resolve({ rows: [{ id: "fresh" }] }); + await one; + }); + expect(source).toHaveBeenCalledTimes(2); + expect(result?.data).toEqual([{ id: "fresh" }]); + }); + + it("reuses a fresh cache entry until it is invalidated", async () => { + const source = vi + .fn() + .mockResolvedValueOnce({ rows: [{ id: "first" }] }) + .mockResolvedValueOnce({ rows: [{ id: "second" }] }) + .mockResolvedValueOnce({ rows: [{ id: "after-invalidation" }] }); + let result: UseDataTableDataSourceResult | undefined; + + function Harness({ pageIndex }: { pageIndex: number }) { + result = useDataTableDataSource({ + cache: 10_000, + columnFilters: [], + mode: "offset", + pagination: { pageIndex, pageSize: 10 }, + sorting: [], + source, + }); + return null; + } + + const view = render(); + await waitFor(() => expect(result?.data).toEqual([{ id: "first" }])); + view.rerender(); + await waitFor(() => expect(result?.data).toEqual([{ id: "second" }])); + view.rerender(); + await waitFor(() => expect(result?.data).toEqual([{ id: "first" }])); + expect(source).toHaveBeenCalledTimes(2); + + act(() => result?.invalidate()); + await act(async () => { + await result?.refresh(); + }); + expect(source).toHaveBeenCalledTimes(3); + expect(result?.data).toEqual([{ id: "after-invalidation" }]); + }); + + it("retries a failed request before reporting success", async () => { + const source = vi + .fn() + .mockRejectedValueOnce(new Error("temporary")) + .mockResolvedValueOnce({ rows: [{ id: "recovered" }] }); + let result: UseDataTableDataSourceResult | undefined; + + function Harness() { + result = useDataTableDataSource({ + columnFilters: [], + mode: "cursor", + pagination: { pageIndex: 0, pageSize: 10 }, + retry: { attempts: 1, delay: 0 }, + sorting: [], + source, + }); + return null; + } + + render(); + await waitFor(() => expect(result?.data).toEqual([{ id: "recovered" }])); + expect(source).toHaveBeenCalledTimes(2); + expect(result?.isError).toBe(false); + }); +}); + +function deferred() { + let resolve: (value: T) => void = () => undefined; + const promise = new Promise((nextResolve) => { + resolve = nextResolve; + }); + return { promise, resolve }; +} diff --git a/src/core/data-source/use-data-table-data-source.ts b/src/core/data-source/use-data-table-data-source.ts new file mode 100644 index 0000000..78bd161 --- /dev/null +++ b/src/core/data-source/use-data-table-data-source.ts @@ -0,0 +1,650 @@ +import * as React from "react"; +import type { + ColumnFiltersState, + GroupingState, + PaginationState, + SortingState, +} from "@tanstack/react-table"; +import type { DataTableProps } from "../types"; + +/** The supported server pagination strategies. */ +export type DataTableDataSourceMode = "offset" | "cursor"; + +/** + * The serializable portion of a request. It is also passed to `getRequestKey` + * so applications can define cache identity for domain-specific query values. + */ +export type DataTableDataSourceQuery = { + mode: DataTableDataSourceMode; + pagination: PaginationState; + /** `pageIndex * pageSize`; useful for offset-based backends. */ + offset: number; + /** The requested number of rows. */ + limit: number; + /** The cursor for a cursor-based backend. `null` represents the first page. */ + cursor: TCursor | null; + sorting: SortingState; + columnFilters: ColumnFiltersState; + /** Server-owned global filter value, normally the table toolbar query. */ + globalFilter?: string; + /** Server-owned row grouping state. */ + grouping?: GroupingState; + /** Requested aggregate functions keyed by result/column identifier. */ + aggregations?: Record; + /** Stable ancestor/group identifiers for lazy child or group loading. */ + expansionPath?: Array; + /** Application-owned request parameters, such as a tenant or parent ID. */ + query: TQuery | undefined; +}; + +/** A server request with an AbortSignal that is cancelled when superseded. */ +export type DataTableDataSourceRequest = + DataTableDataSourceQuery & { + signal: AbortSignal; + }; + +/** A normalized server result for offset and cursor pagination. */ +export type DataTableDataSourceResponse< + TData, + TCursor = string, + TFacets = unknown, +> = { + rows: Array; + /** Total matching rows, when the backend can provide it. */ + rowCount?: number; + /** The cursor to use for the following page. `null` means no following page. */ + nextCursor?: TCursor | null; + /** Backend-provided facet/count metadata for filter UIs. */ + facets?: TFacets; + /** Stable row identifiers in response order when IDs are server-projected. */ + rowIds?: Array; + /** Backend-provided aggregate values keyed by result/column identifier. */ + aggregates?: Record; + /** Application-owned response metadata such as revision or timing data. */ + metadata?: Record; +}; + +export type DataTableDataSource< + TData, + TQuery = undefined, + TCursor = string, + TFacets = unknown, +> = ( + request: DataTableDataSourceRequest, +) => + | DataTableDataSourceResponse + | Promise>; + +export type DataTableDataSourceRetryOptions = + | number + | { + /** Number of retries after the initial attempt. Defaults to 0. */ + attempts?: number; + /** Delay before every retry. Defaults to 250ms. */ + delay?: number | ((context: { attempt: number; error: unknown }) => number); + shouldRetry?: (context: { attempt: number; error: unknown }) => boolean; + }; + +export type DataTableDataSourceCacheOptions = + | false + | number + | { + /** Freshness lifetime in milliseconds. Defaults to 30 seconds. */ + staleTime?: number; + /** Maximum cached results per hook instance. Defaults to 50. */ + maxEntries?: number; + }; + +export type UseDataTableDataSourceOptions< + TData, + TQuery = undefined, + TCursor = string, + TFacets = unknown, +> = Omit< + DataTableDataSourceQuery, + "cursor" | "limit" | "offset" | "query" +> & { + cursor?: TCursor | null; + query?: TQuery; + source: DataTableDataSource; + enabled?: boolean; + /** Retain the prior result while a changed query is loading. Defaults to true. */ + keepPreviousData?: boolean; + cache?: DataTableDataSourceCacheOptions; + retry?: DataTableDataSourceRetryOptions; + /** Override request/cache identity when `query` contains non-serializable values. */ + getRequestKey?: (query: DataTableDataSourceQuery) => string; + initialData?: Array; + onSuccess?: ( + response: DataTableDataSourceResponse, + request: DataTableDataSourceRequest, + ) => void; + onError?: ( + error: unknown, + request: DataTableDataSourceRequest, + ) => void; + onPageIndexChange?: (pageIndex: number) => void; + onPageSizeChange?: (pageSize: number) => void; + onSortingChange?: (sorting: SortingState) => void; + onColumnFiltersChange?: (filters: ColumnFiltersState) => void; + onGlobalFilterChange?: (globalFilter: string) => void; + onGroupingChange?: (grouping: GroupingState) => void; +}; + +export type DataTableDataSourceTableProps = Pick< + DataTableProps, + | "columnFilters" + | "data" + | "hasNextPage" + | "isLoading" + | "manualFiltering" + | "manualGrouping" + | "manualPagination" + | "manualSorting" + | "onColumnFiltersChange" + | "onGroupingChange" + | "onPageIndexChange" + | "onPageSizeChange" + | "onSortingChange" + | "pageIndex" + | "pageSize" + | "sorting" + | "grouping" + | "toolbarQueryValue" + | "onToolbarQueryValueChange" + | "totalRowCount" +>; + +export type UseDataTableDataSourceResult = { + aggregates: Record | undefined; + data: Array; + error: unknown; + facets: TFacets | undefined; + isError: boolean; + /** True while the first result for the active query is loading. */ + isLoading: boolean; + /** True while any request for the active query is in flight. */ + isFetching: boolean; + isSuccess: boolean; + nextCursor: TCursor | null | undefined; + metadata: Record | undefined; + rowIds: Array | undefined; + rowCount: number | undefined; + /** Starts a network request, bypassing a fresh cache entry. */ + refresh: () => Promise | undefined>; + /** Removes one cached request, or every cached request when omitted. */ + invalidate: (requestKey?: string) => void; + /** Spread these into `DataTable` for manual paging, sorting, and filtering. */ + tableProps: DataTableDataSourceTableProps; +}; + +type CachedResponse = { + response: DataTableDataSourceResponse; + updatedAt: number; +}; + +type ActiveRequest = { + controller: AbortController; + id: number; + key: string; + promise: Promise | undefined>; + request: DataTableDataSourceRequest; +}; + +type SourceState = { + aggregates: Record | undefined; + data: Array; + error: unknown; + facets: TFacets | undefined; + isFetching: boolean; + metadata: Record | undefined; + nextCursor: TCursor | null | undefined; + responseKey: string | null; + rowCount: number | undefined; + rowIds: Array | undefined; + status: "idle" | "loading" | "success" | "error"; +}; + +const DEFAULT_STALE_TIME = 30_000; +const DEFAULT_MAX_CACHE_ENTRIES = 50; + +/** + * Fetches controlled, server-side table data with cancellation, retry, stale + * response protection, per-hook caching, and manual DataTable props. + */ +export function useDataTableDataSource< + TData, + TQuery = undefined, + TCursor = string, + TFacets = unknown, +>( + options: UseDataTableDataSourceOptions, +): UseDataTableDataSourceResult { + const { + aggregations, + columnFilters, + cursor, + enabled = true, + expansionPath, + getRequestKey, + globalFilter, + grouping, + initialData = [], + mode, + pagination, + query, + sorting, + } = options; + const latestOptionsRef = React.useRef(options); + React.useEffect(() => { + latestOptionsRef.current = options; + }, [options]); + const cacheRef = React.useRef( + new Map>(), + ); + const activeRequestRef = React.useRef< + ActiveRequest | undefined + >(undefined); + const requestIdRef = React.useRef(0); + const mountedRef = React.useRef(true); + const [state, setState] = React.useState>( + () => ({ + aggregates: undefined, + data: initialData, + error: null, + facets: undefined, + isFetching: false, + metadata: undefined, + nextCursor: undefined, + responseKey: null, + rowCount: undefined, + rowIds: undefined, + status: initialData.length > 0 ? "success" : "idle", + }), + ); + + const requestQuery = React.useMemo>( + () => ({ + aggregations, + columnFilters, + cursor: cursor ?? null, + expansionPath, + globalFilter, + grouping, + limit: pagination.pageSize, + mode, + offset: pagination.pageIndex * pagination.pageSize, + pagination: { ...pagination }, + query, + sorting, + }), + [ + aggregations, + columnFilters, + cursor, + expansionPath, + globalFilter, + grouping, + mode, + pagination, + query, + sorting, + ], + ); + const requestKey = getRequestKey + ? getRequestKey(requestQuery) + : stableSerialize(requestQuery); + + const runRequest = React.useCallback( + ( + force: boolean, + ): Promise | undefined> => { + const currentOptions = latestOptionsRef.current; + const currentQuery: DataTableDataSourceQuery = { + aggregations: currentOptions.aggregations, + columnFilters: currentOptions.columnFilters, + cursor: currentOptions.cursor ?? null, + expansionPath: currentOptions.expansionPath, + globalFilter: currentOptions.globalFilter, + grouping: currentOptions.grouping, + limit: currentOptions.pagination.pageSize, + mode: currentOptions.mode, + offset: + currentOptions.pagination.pageIndex * currentOptions.pagination.pageSize, + pagination: { ...currentOptions.pagination }, + query: currentOptions.query, + sorting: currentOptions.sorting, + }; + const currentKey = currentOptions.getRequestKey + ? currentOptions.getRequestKey(currentQuery) + : stableSerialize(currentQuery); + const activeRequest = activeRequestRef.current; + + if (activeRequest?.key === currentKey) { + return activeRequest.promise; + } + if (activeRequest) { + activeRequest.controller.abort(); + activeRequestRef.current = undefined; + } + + const cacheSettings = resolveCacheSettings(currentOptions.cache); + const cached = cacheRef.current.get(currentKey); + if (!force && cached && cacheSettings && isCacheFresh(cached, cacheSettings)) { + if (mountedRef.current) { + setState({ + aggregates: cached.response.aggregates, + data: cached.response.rows, + error: null, + facets: cached.response.facets, + isFetching: false, + metadata: cached.response.metadata, + nextCursor: cached.response.nextCursor, + responseKey: currentKey, + rowCount: cached.response.rowCount, + rowIds: cached.response.rowIds, + status: "success", + }); + } + return Promise.resolve(cached.response); + } + + const controller = new AbortController(); + const id = ++requestIdRef.current; + const request: DataTableDataSourceRequest = { + ...currentQuery, + signal: controller.signal, + }; + if (mountedRef.current) { + setState((previous) => ({ + ...previous, + data: currentOptions.keepPreviousData === false ? [] : previous.data, + error: null, + isFetching: true, + status: previous.responseKey === currentKey ? previous.status : "loading", + })); + } + + const promise = fetchWithRetry( + currentOptions.source, + request, + currentOptions.retry, + ) + .then((response) => { + if (activeRequestRef.current?.id !== id) { + return response; + } + const resolvedCacheSettings = resolveCacheSettings(currentOptions.cache); + if (resolvedCacheSettings) { + cacheResponse(cacheRef.current, currentKey, response, resolvedCacheSettings); + } + if (mountedRef.current) { + setState({ + aggregates: response.aggregates, + data: response.rows, + error: null, + facets: response.facets, + isFetching: false, + metadata: response.metadata, + nextCursor: response.nextCursor, + responseKey: currentKey, + rowCount: response.rowCount, + rowIds: response.rowIds, + status: "success", + }); + } + currentOptions.onSuccess?.(response, request); + return response; + }) + .catch((error: unknown) => { + if (isAbort(error, controller.signal) || activeRequestRef.current?.id !== id) { + return undefined; + } + if (mountedRef.current) { + setState((previous) => ({ + ...previous, + error, + isFetching: false, + status: "error", + })); + } + currentOptions.onError?.(error, request); + return undefined; + }) + .finally(() => { + if (activeRequestRef.current?.id === id) { + activeRequestRef.current = undefined; + } + }); + + activeRequestRef.current = { controller, id, key: currentKey, promise, request }; + return promise; + }, + [], + ); + + React.useEffect(() => { + mountedRef.current = true; + if (!enabled) { + activeRequestRef.current?.controller.abort(); + activeRequestRef.current = undefined; + return; + } + void runRequest(false); + }, [enabled, requestKey, runRequest]); + + React.useEffect( + () => () => { + mountedRef.current = false; + activeRequestRef.current?.controller.abort(); + activeRequestRef.current = undefined; + }, + [], + ); + + const refresh = React.useCallback(() => runRequest(true), [runRequest]); + const invalidate = React.useCallback((key?: string) => { + if (key === undefined) { + cacheRef.current.clear(); + return; + } + cacheRef.current.delete(key); + }, []); + + const hasNextPage = + state.nextCursor !== undefined + ? state.nextCursor !== null + : state.rowCount === undefined + ? undefined + : pagination.pageIndex + 1 < Math.ceil(state.rowCount / pagination.pageSize); + const tableProps = React.useMemo>( + () => ({ + columnFilters, + data: state.data, + hasNextPage, + isLoading: enabled && state.status === "loading", + manualFiltering: true, + manualGrouping: true, + manualPagination: true, + manualSorting: true, + onColumnFiltersChange: options.onColumnFiltersChange, + onGroupingChange: options.onGroupingChange, + onPageIndexChange: options.onPageIndexChange, + onPageSizeChange: options.onPageSizeChange, + onSortingChange: options.onSortingChange, + onToolbarQueryValueChange: options.onGlobalFilterChange, + pageIndex: pagination.pageIndex, + pageSize: pagination.pageSize, + sorting, + grouping, + toolbarQueryValue: globalFilter, + totalRowCount: state.rowCount, + }), + [ + columnFilters, + enabled, + globalFilter, + grouping, + hasNextPage, + options.onColumnFiltersChange, + options.onGlobalFilterChange, + options.onGroupingChange, + options.onPageIndexChange, + options.onPageSizeChange, + options.onSortingChange, + pagination.pageIndex, + pagination.pageSize, + sorting, + state.data, + state.rowCount, + state.status, + ], + ); + + return { + aggregates: state.aggregates, + data: state.data, + error: state.error, + facets: state.facets, + invalidate, + isError: state.status === "error", + isFetching: enabled && state.isFetching, + isLoading: enabled && state.status === "loading", + isSuccess: state.status === "success", + metadata: state.metadata, + nextCursor: state.nextCursor, + refresh, + rowCount: state.rowCount, + rowIds: state.rowIds, + tableProps, + }; +} + +function resolveCacheSettings( + cache: DataTableDataSourceCacheOptions | undefined, +): { staleTime: number; maxEntries: number } | undefined { + if (cache === false) { + return undefined; + } + if (typeof cache === "number") { + return { maxEntries: DEFAULT_MAX_CACHE_ENTRIES, staleTime: Math.max(0, cache) }; + } + return { + maxEntries: Math.max(1, cache?.maxEntries ?? DEFAULT_MAX_CACHE_ENTRIES), + staleTime: Math.max(0, cache?.staleTime ?? DEFAULT_STALE_TIME), + }; +} + +function isCacheFresh( + cached: CachedResponse, + settings: { staleTime: number }, +) { + return Date.now() - cached.updatedAt <= settings.staleTime; +} + +function cacheResponse( + cache: Map>, + key: string, + response: DataTableDataSourceResponse, + settings: { maxEntries: number }, +) { + cache.delete(key); + cache.set(key, { response, updatedAt: Date.now() }); + while (cache.size > settings.maxEntries) { + const oldestKey = cache.keys().next().value; + if (oldestKey === undefined) { + return; + } + cache.delete(oldestKey); + } +} + +async function fetchWithRetry( + source: DataTableDataSource, + request: DataTableDataSourceRequest, + retry: DataTableDataSourceRetryOptions | undefined, +) { + const settings = resolveRetrySettings(retry); + for (let attempt = 0; ; attempt += 1) { + try { + return await source(request); + } catch (error) { + if ( + isAbort(error, request.signal) || + attempt >= settings.attempts || + !settings.shouldRetry({ attempt: attempt + 1, error }) + ) { + throw error; + } + await waitForRetry(settings.delay({ attempt: attempt + 1, error }), request.signal); + } + } +} + +function resolveRetrySettings(retry: DataTableDataSourceRetryOptions | undefined) { + if (typeof retry === "number") { + return { + attempts: Math.max(0, retry), + delay: () => 250, + shouldRetry: () => true, + }; + } + return { + attempts: Math.max(0, retry?.attempts ?? 0), + delay: (context: { attempt: number; error: unknown }) => { + const value = typeof retry?.delay === "function" ? retry.delay(context) : (retry?.delay ?? 250); + return Math.max(0, value); + }, + shouldRetry: retry?.shouldRetry ?? (() => true), + }; +} + +function waitForRetry(delay: number, signal: AbortSignal) { + return new Promise((resolve, reject) => { + const timeout = globalThis.setTimeout(() => { + signal.removeEventListener("abort", onAbort); + resolve(); + }, delay); + const onAbort = () => { + globalThis.clearTimeout(timeout); + reject(new DOMException("Request aborted", "AbortError")); + }; + signal.addEventListener("abort", onAbort, { once: true }); + }); +} + +function isAbort(error: unknown, signal: AbortSignal) { + return ( + signal.aborted || + (error instanceof DOMException && error.name === "AbortError") || + (typeof error === "object" && + error !== null && + "name" in error && + error.name === "AbortError") + ); +} + +function stableSerialize(value: unknown): string { + const seen = new WeakSet(); + return JSON.stringify(value, (_key, nested: unknown) => { + if (typeof nested === "bigint") { + return `bigint:${nested.toString()}`; + } + if (nested instanceof Date) { + return `date:${nested.toISOString()}`; + } + if (typeof nested === "function" || typeof nested === "symbol") { + return String(nested); + } + if (typeof nested === "object" && nested !== null && !Array.isArray(nested)) { + if (seen.has(nested)) { + return "[Circular]"; + } + seen.add(nested); + return Object.fromEntries( + Object.entries(nested).sort(([left], [right]) => left.localeCompare(right)), + ); + } + return nested; + }); +} diff --git a/src/core/data-table/create-data-table-card-view.tsx b/src/core/data-table/create-data-table-card-view.tsx index fc8c117..a1d7901 100644 --- a/src/core/data-table/create-data-table-card-view.tsx +++ b/src/core/data-table/create-data-table-card-view.tsx @@ -1,16 +1,22 @@ import * as React from "react"; -import type { Row } from "@tanstack/react-table"; +import type { ExpandedState, OnChangeFn, Row } from "@tanstack/react-table"; +import { IconChevronDown } from "../icons"; import type { DataTableCardRendererProps, DataTableCardSizing, DataTableEditableRowsConfig, - DataTableExpandedRowProps, + DataTableDetailPanel, DataTableLabels, + DataTableProps, DataTableRowAction, } from "../types"; import type { DataTableUiKit } from "../ui-kit"; import { cn } from "../../lib/utils"; import { DATA_TABLE_DEFAULT_LABELS } from "./data-table-labels"; +import { + isDataTableInteractiveTarget, + toggleDataTableExpandedState, +} from "./data-table-utils"; type DataTableCardViewProps = { rows: Array>; @@ -20,16 +26,16 @@ type DataTableCardViewProps = { cardClassName?: string; rowActions: Array>; editableRows?: DataTableEditableRowsConfig; - renderExpandedRow?: ( - props: DataTableExpandedRowProps, - ) => React.ReactNode; + detailPanel?: DataTableDetailPanel; + detailExpanded: ExpandedState; + onDetailExpandedChange: OnChangeFn; hasCardTitle: boolean; rowSelection: Record; onRowSelectionChange: (rowSelection: Record) => void; enableRowSelection: boolean; editingRowId: string | null; onEditingRowIdChange: (rowId: string | null) => void; - getRowClassName?: (row: TData) => string | undefined; + getRowClassName?: DataTableProps["getRowClassName"]; onRowClick?: (context: { row: TData; rowId: string }) => void | Promise; getRowDraggable?: (row: TData) => boolean; onRowDragStart?: (context: { @@ -62,7 +68,7 @@ export function createDataTableCardView( DataTableRowActions: DataTableRowActionsComponent, ) { const uiClassNames = ui.classNames ?? {}; - const { Card, CardContent, CardHeader, Checkbox, Skeleton } = ui; + const { Button, Card, CardContent, CardHeader, Checkbox, Skeleton } = ui; return function DataTableCardView({ rows, @@ -72,7 +78,9 @@ export function createDataTableCardView( cardClassName, rowActions, editableRows, - renderExpandedRow, + detailPanel, + detailExpanded, + onDetailExpandedChange, hasCardTitle, rowSelection, onRowSelectionChange, @@ -154,9 +162,16 @@ export function createDataTableCardView( const isSelected = Boolean(rowSelection[rowId]); const isEditing = editingRowId === rowId; const hasCardActions = rowActions.length > 0 || Boolean(editableRows); + const canExpandDetail = Boolean( + detailPanel && (detailPanel.getRowCanExpand?.(originalRow) ?? true), + ); const showCardGradient = enableRowSelection || hasCardActions || hasCardTitle; - const showCardOverlayControls = enableRowSelection || hasCardActions; + const showCardOverlayControls = + enableRowSelection || + hasCardActions || + row.getCanExpand() || + canExpandDetail; const handleCardActivate = () => { if (!onRowClick) { return; @@ -170,12 +185,26 @@ export function createDataTableCardView( key={rowId} role="listitem" data-row-id={rowId} + data-tree-depth={row.depth} draggable={getRowDraggable?.(originalRow) ?? false} data-dtp-slot="data-table-card-item" data-state={isSelected ? "selected" : undefined} className={cardItemClasses( cn( - [getRowClassName?.(originalRow)].filter(Boolean).join(" "), + [ + getRowClassName?.(originalRow, { + row: originalRow, + rowId, + rowIndex: row.index, + isEditing, + isExpanded: row.getIsExpanded(), + isLoading: false, + isSelected, + pinnedPosition: false, + }), + ] + .filter(Boolean) + .join(" "), "transition transition-colors hover:scale-101 data-[state=selected]:scale-101", uiClassNames.card, isSelected @@ -210,16 +239,24 @@ export function createDataTableCardView( onRowClick && "cursor-pointer focus-visible:outline-none", )} onClick={(event: React.MouseEvent) => { - const target = event.target as HTMLElement | null; - if (target?.closest("[data-row-click-ignore='true']")) { + if ( + isDataTableInteractiveTarget( + event.target, + event.currentTarget, + ) + ) { return; } handleCardActivate(); }} onKeyDown={(event: React.KeyboardEvent) => { - const target = event.target as HTMLElement | null; - if (target?.closest("[data-row-click-ignore='true']")) { + if ( + isDataTableInteractiveTarget( + event.target, + event.currentTarget, + ) + ) { return; } @@ -232,10 +269,20 @@ export function createDataTableCardView( {cardRenderer({ row: originalRow, rowId, + depth: row.depth, + canExpandSubRows: row.getCanExpand(), + isSubRowsExpanded: row.getIsExpanded(), + toggleSubRowsExpanded: () => row.toggleExpanded(), isSelected, onSelectedChange: (nextValue) => { onRowSelectionChange( - updateRowSelection(rowSelection, rowId, nextValue), + updateRowSelection( + rowSelection, + rowId, + nextValue, + row.getCanSelect(), + row.getCanMultiSelect(), + ), ); }, actions: rowActions, @@ -247,14 +294,23 @@ export function createDataTableCardView( onEditingRowIdChange(null); }, })} - {isEditing || !renderExpandedRow || !row.getIsExpanded() - ? null - : renderExpandedRow({ - row: originalRow, - rowId, - tableRow: row, - })} + {isEditing || + !detailPanel || + !(detailExpanded === true || Boolean(detailExpanded[row.id])) + ? null + : ( +
    + {detailPanel.render({ + row: originalRow, + rowId, + tableRow: row, + })} +
    + )} {showCardOverlayControls ? ( {enableRowSelection ? ( @@ -264,6 +320,7 @@ export function createDataTableCardView( > ) : null} + {row.getCanExpand() ? ( +
    + +
    + ) : null} + {canExpandDetail ? ( +
    + +
    + ) : null}
    {hasCardActions ? (
    , rowId: string, isSelected: boolean, + canSelect: boolean, + canMultiSelect: boolean, ) { + if (!canSelect) { + return rowSelection; + } + if (isSelected) { - return { - ...rowSelection, - [rowId]: true, - }; + return canMultiSelect + ? { + ...rowSelection, + [rowId]: true, + } + : { [rowId]: true }; } if (!rowSelection[rowId]) { diff --git a/src/core/data-table/create-data-table-pagination.tsx b/src/core/data-table/create-data-table-pagination.tsx index f2efe63..27a2a2a 100644 --- a/src/core/data-table/create-data-table-pagination.tsx +++ b/src/core/data-table/create-data-table-pagination.tsx @@ -62,7 +62,7 @@ export function createDataTablePagination(ui: DataTableUiKit) {
    - + {labels.recordsPerPage} ) : ( ( function useDataTableStateSliceChange( key: K, - onLegacyChange: ((value: DataTableState[K]) => void) | undefined, + onLegacyChange: + | ((value: Exclude) => void) + | undefined, onStateChange: DataTableProps["onStateChange"], ) { const handleChange = React.useCallback( - (value: DataTableState[K]) => { + (value: Exclude) => { onLegacyChange?.(value); onStateChange?.((current) => ({ ...current, @@ -1267,6 +1836,7 @@ function cloneDataTableState(state: DataTableState): DataTableState { typeof state.expanded === "boolean" ? state.expanded : { ...state.expanded }, + grouping: [...(state.grouping ?? [])], columnOrder: [...state.columnOrder], columnPinning: { left: state.columnPinning.left @@ -1276,6 +1846,10 @@ function cloneDataTableState(state: DataTableState): DataTableState { ? [...state.columnPinning.right] : undefined, }, + rowPinning: { + top: state.rowPinning.top ? [...state.rowPinning.top] : undefined, + bottom: state.rowPinning.bottom ? [...state.rowPinning.bottom] : undefined, + }, columnSizing: { ...state.columnSizing }, density: state.density, viewMode: state.viewMode, @@ -1304,3 +1878,15 @@ function scrollDataTableElementIntoView( element.scrollIntoView?.({ block: "nearest", inline: "nearest" }); return true; } + +function isDataTableEditableClipboardTarget(target: EventTarget | null) { + if (!(target instanceof HTMLElement)) { + return false; + } + return ( + target.isContentEditable || + target instanceof HTMLInputElement || + target instanceof HTMLTextAreaElement || + target instanceof HTMLSelectElement + ); +} diff --git a/src/core/data-table/data-table-auto-page-size.tsx b/src/core/data-table/data-table-auto-page-size.tsx new file mode 100644 index 0000000..db5ef8f --- /dev/null +++ b/src/core/data-table/data-table-auto-page-size.tsx @@ -0,0 +1,8 @@ +import { useDataTableAutoPageSize } from "./use-data-table-auto-page-size"; + +export default function DataTableAutoPageSize( + props: Parameters[0], +) { + useDataTableAutoPageSize(props); + return null; +} diff --git a/src/core/data-table/data-table-base-card-panel.tsx b/src/core/data-table/data-table-base-card-panel.tsx index ef1a7c7..8d4a77e 100644 --- a/src/core/data-table/data-table-base-card-panel.tsx +++ b/src/core/data-table/data-table-base-card-panel.tsx @@ -9,6 +9,7 @@ export function DataTableBaseCardPanel({ cardSizing, cardRenderer, currentRowSelection, + currentDetailExpanded, DataTableCardView, DataTableEmptyState, dragAndDrop, @@ -23,15 +24,17 @@ export function DataTableBaseCardPanel({ localSearchValue, onRowClick, renderedRows, - renderExpandedRow, + detailPanel, resolvedLabels, resolvedLoadingRowCount, rowActions = [], ScrollArea, sentinelRef, + setCurrentDetailExpanded, setCurrentRowSelection, setEditingRowId, shouldRenderInitialLoading, + stateOverlayNode, tableContainerClassName, uiClassNames, }: DataTableCardPanelProps) { @@ -54,7 +57,9 @@ export function DataTableBaseCardPanel({ cardSizing={cardSizing} rowActions={rowActions} editableRows={editableRows} - renderExpandedRow={renderExpandedRow} + detailPanel={detailPanel} + detailExpanded={currentDetailExpanded} + onDetailExpandedChange={setCurrentDetailExpanded} hasCardTitle={hasCardTitle} rowSelection={currentRowSelection} onRowSelectionChange={setCurrentRowSelection} @@ -77,7 +82,7 @@ export function DataTableBaseCardPanel({ ref={cardScrollContainerRef} data-dtp-slot="data-table-card-shell" className={cn( - "box-border border-2 border-transparent transition-colors", + "relative box-border border-2 border-transparent transition-colors", flexGrow ? "flex min-h-0 flex-1 flex-col" : "h-full", dragAndDrop?.isDragging && (uiClassNames.dragActive ?? "rounded-md border-dashed"), @@ -133,6 +138,7 @@ export function DataTableBaseCardPanel({ ) : null}
    + {stateOverlayNode}
    ); } diff --git a/src/core/data-table/data-table-body-row.tsx b/src/core/data-table/data-table-body-row.tsx index 0735794..d7d9a59 100644 --- a/src/core/data-table/data-table-body-row.tsx +++ b/src/core/data-table/data-table-body-row.tsx @@ -1,5 +1,6 @@ import * as React from "react"; -import type { Cell, Row } from "@tanstack/react-table"; +import { flexRender, type Cell, type Row } from "@tanstack/react-table"; +import type { RowPinningPosition } from "@tanstack/react-table"; import type { DataTableColumnDef, DataTableDensity, @@ -12,11 +13,24 @@ import { renderDataTableCellContent } from "./data-table-cell-content"; import type { DataTableColumnLayout } from "./use-column-layout"; import { getDensityCellClassName, + isDataTableInteractiveTarget, isDataTableLoadingRow, } from "./data-table-utils"; import { renderEditableCell } from "./use-row-editing"; +import { useDataTableVirtualRowMeasurement } from "./data-table-virtual-row-measurement"; import { cellAlignClassName, hideOnClassName } from "../types"; +export type DataTableRowEditingContext = { + cancel: () => void; + clearError: (columnId: string) => void; + commit: (row: TData) => void; + errors: Record; + isDirty: boolean; + isPending: boolean; + cancelOnEscape: boolean; + commitOnEnter: boolean; +}; + type DataTableBodyRowProps = { columnLayouts: ReadonlyMap; components: Pick< @@ -25,21 +39,48 @@ type DataTableBodyRowProps = { >; currentDensity: DataTableDensity; draftValues: Record; + editingContext?: DataTableRowEditingContext; dragAndDrop: DataTableProps["dragAndDrop"]; explicitCustomCellColumnIds: ReadonlySet; getRowClassName: DataTableProps["getRowClassName"]; + groupToggleLabel: string; + gridMode: boolean; + gridRowAriaIndex: number; + gridRowIndex: number; + activeGridCell: { row: number; column: number }; + cellSelectionEnabled: boolean; + isGridCellSelected: (row: number, column: number) => boolean; + onGridCellFocus: (cell: { row: number; column: number }) => void; + onGridCellKeyDown: ( + event: React.KeyboardEvent, + row: number, + column: number, + ) => void; + onGridCellPointerDown: ( + event: React.PointerEvent, + row: number, + column: number, + ) => void; + onGridCellPointerEnter: ( + event: React.PointerEvent, + row: number, + column: number, + ) => void; isDraggable: boolean; + isDetailExpanded: boolean; isEditing: boolean; isExpanded: boolean; isInitialLoadingRow: boolean; isSelected: boolean; loadingState: DataTableRowLoadingState | undefined; onRowClick: DataTableProps["onRowClick"]; + pinnedPosition?: Exclude; originalRow: TData; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableProps["detailPanel"]; row: Row; rowIndex: number; setDraftValues: React.Dispatch>>; + stripedRows: boolean; uiClassNames: DataTableUiClassNames; visibleCells: Array>; visibleLeafColumnCount: number; @@ -50,39 +91,101 @@ function DataTableBodyRowInner({ components, currentDensity, draftValues, + editingContext, dragAndDrop, explicitCustomCellColumnIds, getRowClassName, + groupToggleLabel, + gridMode, + gridRowAriaIndex, + gridRowIndex, + activeGridCell, + cellSelectionEnabled, + isGridCellSelected, + onGridCellFocus, + onGridCellKeyDown, + onGridCellPointerDown, + onGridCellPointerEnter, isDraggable, + isDetailExpanded, isEditing, isExpanded, isInitialLoadingRow, isSelected, loadingState, onRowClick, + pinnedPosition, originalRow, - renderExpandedRow, + detailPanel, row, + rowIndex, setDraftValues, + stripedRows, uiClassNames, visibleCells, visibleLeafColumnCount, }: DataTableBodyRowProps) { const { Checkbox, Input, Skeleton, TableCell, TableRow } = components; + const virtualRowMeasurement = useDataTableVirtualRowMeasurement(); + const measureElement = pinnedPosition ? undefined : virtualRowMeasurement; + const firstDataColumnId = visibleCells.find( + (cell) => !columnLayouts.get(cell.column.id)?.isUtilityColumn, + )?.column.id; return ( 0 ? row.depth : undefined + } + data-dtp-slot={ + pinnedPosition ? "data-table-pinned-row" : "data-table-row" + } + data-row-pinned={pinnedPosition} + data-row-grouped={row.getIsGrouped() || undefined} draggable={isInitialLoadingRow ? false : isDraggable} data-loading={loadingState?.isLoading || undefined} + data-row-index={isInitialLoadingRow ? undefined : rowIndex} + data-row-parity={ + stripedRows && !isInitialLoadingRow + ? rowIndex % 2 === 0 + ? "odd" + : "even" + : undefined + } data-state={ isInitialLoadingRow ? undefined : isSelected ? "selected" : undefined } - tabIndex={onRowClick && !isInitialLoadingRow ? 0 : undefined} + role={gridMode ? "row" : undefined} + aria-rowindex={gridMode ? gridRowAriaIndex : undefined} + tabIndex={ + !gridMode && onRowClick && !isInitialLoadingRow ? 0 : undefined + } className={cn( - !isInitialLoadingRow && getRowClassName?.(originalRow), + !isInitialLoadingRow && + getRowClassName?.(originalRow, { + row: originalRow, + rowId: row.id, + rowIndex, + isEditing, + isExpanded, + isLoading: Boolean(loadingState?.isLoading), + isSelected, + pinnedPosition: pinnedPosition ?? false, + }), uiClassNames.row, + pinnedPosition === "top" && + cn("border-b-2", uiClassNames.rowPinnedTop), + pinnedPosition === "bottom" && + cn("border-t-2", uiClassNames.rowPinnedBottom), + stripedRows && + !isInitialLoadingRow && + (rowIndex % 2 === 0 + ? uiClassNames.rowOdd + : uiClassNames.rowEven), isSelected && !isInitialLoadingRow && uiClassNames.rowSelected, onRowClick && !isInitialLoadingRow && "cursor-pointer", isInitialLoadingRow && "pointer-events-none", @@ -92,11 +195,12 @@ function DataTableBodyRowInner({ return; } - const target = event.target as HTMLElement | null; - if (target?.closest("[data-row-click-ignore='true']")) { + if (isDataTableInteractiveTarget(event.target, event.currentTarget)) { return; } + if (gridMode && cellSelectionEnabled) return; + void onRowClick?.({ row: originalRow, rowId: row.id }); }} onKeyDown={(event: React.KeyboardEvent) => { @@ -108,8 +212,7 @@ function DataTableBodyRowInner({ return; } - const target = event.target as HTMLElement | null; - if (target?.closest("[data-row-click-ignore='true']")) { + if (isDataTableInteractiveTarget(event.target, event.currentTarget)) { return; } @@ -139,7 +242,7 @@ function DataTableBodyRowInner({ }); }} > - {visibleCells.map((cell) => { + {visibleCells.map((cell, columnIndex) => { const meta = ( cell.column.columnDef as DataTableColumnDef ).meta; @@ -160,14 +263,82 @@ function DataTableBodyRowInner({ value, }) : meta?.cellClassName; + const isCellSelected = + gridMode && cellSelectionEnabled && + !isInitialLoadingRow && + isGridCellSelected(gridRowIndex, columnIndex); return ( onGridCellFocus({ row: gridRowIndex, column: columnIndex }) + : undefined + } + onKeyDown={ + gridMode + ? (event: React.KeyboardEvent) => { + if (event.target !== event.currentTarget) { + if (event.key === "Escape") { + event.preventDefault(); + event.currentTarget.focus(); + } + return; + } + onGridCellKeyDown(event, gridRowIndex, columnIndex); + } + : undefined + } + onPointerDown={ + gridMode && + cellSelectionEnabled && + !layout?.isUtilityColumn && + !isSpacerColumn + ? (event: React.PointerEvent) => { + if (isDataTableInteractiveTarget(event.target, event.currentTarget)) return; + event.currentTarget.focus(); + onGridCellPointerDown(event, gridRowIndex, columnIndex); + } + : undefined + } + onPointerEnter={ + gridMode && + cellSelectionEnabled && + !layout?.isUtilityColumn && + !isSpacerColumn + ? (event: React.PointerEvent) => { + if (isDataTableInteractiveTarget(event.target, event.currentTarget)) return; + onGridCellPointerEnter(event, gridRowIndex, columnIndex); + } + : undefined + } className={cn( "border-b", getDensityCellClassName(currentDensity), uiClassNames.cellBorder, + isCellSelected && uiClassNames.cellSelected, layout?.utilityClassName, layout?.isSpacerColumn && "border-b-0 bg-transparent p-0", layout?.pinnedClassName, @@ -185,6 +356,11 @@ function DataTableBodyRowInner({ : undefined } className="min-w-0 max-w-full" + style={ + row.depth > 0 && cell.column.id === firstDataColumnId + ? { paddingInlineStart: `${row.depth}rem` } + : undefined + } > {loadingState?.isLoading ? ( (meta?.skeleton?.(cellContext) ?? @@ -204,10 +380,54 @@ function DataTableBodyRowInner({ cell.column.id !== "__select__" && cell.column.id !== "__expand__" && cell.column.id !== "__actions__" ? ( - renderEditableCell(cellContext, draftValues, setDraftValues, { - Checkbox, - Input, - }) + renderEditableCell( + cellContext, + draftValues, + setDraftValues, + { + Checkbox, + Input, + }, + editingContext + ? { + cancel: editingContext.cancel, + cancelOnEscape: editingContext.cancelOnEscape, + commit: () => editingContext.commit(originalRow), + commitOnEnter: editingContext.commitOnEnter, + errors: editingContext.errors, + isDirty: editingContext.isDirty, + isPending: editingContext.isPending, + onValueChange: editingContext.clearError, + } + : undefined, + ) + ) : row.getIsGrouped() && cell.getIsPlaceholder() ? null : row.getIsGrouped() && cell.getIsGrouped() ? ( + + ) : row.getIsGrouped() && cell.getIsAggregated() ? ( + cell.column.columnDef.aggregatedCell + ? flexRender(cell.column.columnDef.aggregatedCell, cellContext) + : renderDataTableCellContent(cellContext, uiClassNames, { + hasCustomCell: false, + useCustomOverflowDefaults: false, + }) ) : ( renderDataTableCellContent(cellContext, uiClassNames, { hasCustomCell: @@ -229,8 +449,11 @@ function DataTableBodyRowInner({ ); })} - {!isInitialLoadingRow && renderExpandedRow && isExpanded ? ( - + {!isInitialLoadingRow && detailPanel && isDetailExpanded ? ( + ({ uiClassNames.cellBorder, )} > - {renderExpandedRow({ + {detailPanel.render({ row: originalRow, rowId: row.id, tableRow: row, @@ -262,6 +485,7 @@ function areDataTableBodyRowsEqual( previous.isSelected === next.isSelected && previous.isInitialLoadingRow === next.isInitialLoadingRow && previous.isEditing === next.isEditing && + (!previous.isEditing || previous.editingContext === next.editingContext) && previous.isExpanded === next.isExpanded && previous.isDraggable === next.isDraggable && sameLoadingState(previous.loadingState, next.loadingState) && @@ -273,10 +497,26 @@ function areDataTableBodyRowsEqual( next.visibleCells, ) && previous.currentDensity === next.currentDensity && - previous.renderExpandedRow === next.renderExpandedRow && + previous.detailPanel === next.detailPanel && + previous.isDetailExpanded === next.isDetailExpanded && + previous.pinnedPosition === next.pinnedPosition && previous.onRowClick === next.onRowClick && previous.dragAndDrop === next.dragAndDrop && previous.getRowClassName === next.getRowClassName && + previous.groupToggleLabel === next.groupToggleLabel && + previous.gridMode === next.gridMode && + (!next.gridMode || + (previous.gridRowAriaIndex === next.gridRowAriaIndex && + previous.gridRowIndex === next.gridRowIndex && + previous.activeGridCell.row === next.activeGridCell.row && + previous.activeGridCell.column === next.activeGridCell.column && + previous.cellSelectionEnabled === next.cellSelectionEnabled && + previous.isGridCellSelected === next.isGridCellSelected && + previous.onGridCellFocus === next.onGridCellFocus && + previous.onGridCellKeyDown === next.onGridCellKeyDown && + previous.onGridCellPointerDown === next.onGridCellPointerDown && + previous.onGridCellPointerEnter === next.onGridCellPointerEnter)) && + previous.stripedRows === next.stripedRows && previous.uiClassNames === next.uiClassNames && previous.explicitCustomCellColumnIds === next.explicitCustomCellColumnIds && (!previous.isEditing || previous.draftValues === next.draftValues) @@ -337,8 +577,8 @@ function sameCellStyle( previous?.width === next?.width && previous?.minWidth === next?.minWidth && previous?.maxWidth === next?.maxWidth && - previous?.insetInlineStart === next?.insetInlineStart && - previous?.insetInlineEnd === next?.insetInlineEnd + previous?.left === next?.left && + previous?.right === next?.right ); } diff --git a/src/core/data-table/data-table-card-panel-types.ts b/src/core/data-table/data-table-card-panel-types.ts index 0d4ab04..401cc1e 100644 --- a/src/core/data-table/data-table-card-panel-types.ts +++ b/src/core/data-table/data-table-card-panel-types.ts @@ -1,5 +1,5 @@ import type * as React from "react"; -import type { Row } from "@tanstack/react-table"; +import type { ExpandedState, OnChangeFn, Row } from "@tanstack/react-table"; import type { DataTableLabels, DataTableProps } from "../types"; import type { DataTableUiClassNames, DataTableUiKit } from "../ui-kit"; @@ -8,7 +8,9 @@ export type DataTableCardPanelProps = { cardGridClassName: string | undefined; cardSizing: DataTableProps["cardSizing"]; cardRenderer: NonNullable["cardRenderer"]>; + containerWidth: number; currentRowSelection: Record; + currentDetailExpanded: ExpandedState; DataTableCardView: React.ElementType; DataTableEmptyState: React.ElementType; dragAndDrop: DataTableProps["dragAndDrop"]; @@ -23,15 +25,17 @@ export type DataTableCardPanelProps = { localSearchValue: string; onRowClick: DataTableProps["onRowClick"]; renderedRows: Array>; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableProps["detailPanel"]; resolvedLabels: DataTableLabels; resolvedLoadingRowCount: number; rowActions: DataTableProps["rowActions"]; ScrollArea: DataTableUiKit["ScrollArea"]; sentinelRef: React.RefObject; setCurrentRowSelection: (rowSelection: Record) => void; + setCurrentDetailExpanded: OnChangeFn; setEditingRowId: React.Dispatch>; shouldRenderInitialLoading: boolean; + stateOverlayNode?: React.ReactNode; tableContainerClassName: string | undefined; uiClassNames: DataTableUiClassNames; virtualization: DataTableProps["virtualization"]; diff --git a/src/core/data-table/data-table-card-panel.tsx b/src/core/data-table/data-table-card-panel.tsx index c319348..4985e26 100644 --- a/src/core/data-table/data-table-card-panel.tsx +++ b/src/core/data-table/data-table-card-panel.tsx @@ -20,7 +20,17 @@ export function DataTableCardPanel( } return ( - }> + + } + > ); diff --git a/src/core/data-table/data-table-clipboard.ts b/src/core/data-table/data-table-clipboard.ts new file mode 100644 index 0000000..bbe4811 --- /dev/null +++ b/src/core/data-table/data-table-clipboard.ts @@ -0,0 +1,204 @@ +import type { Column, Table as TanStackTable } from "@tanstack/react-table"; +import type { + DataTableCellSelection, + DataTableClipboardCopyOptions, +} from "../types"; +import { + getDataTableExportRows, + isUtilityColumnId, + normalizeFilterValue, + startCase, +} from "./data-table-utils"; + +export async function copyDataTableToClipboard({ + clipboard, + cellSelection, + table, +}: { + clipboard: boolean | DataTableClipboardCopyOptions; + cellSelection?: DataTableCellSelection | null; + table: TanStackTable; +}) { + if (clipboard === false) return undefined; + + const options: DataTableClipboardCopyOptions = + clipboard === true ? {} : clipboard; + const scope = options.scope ?? "page"; + const requestedColumnIds = options.columns + ? new Set(options.columns) + : undefined; + const allVisibleColumns = table.getVisibleLeafColumns(); + const visibleColumns = allVisibleColumns.filter( + (column) => + !isUtilityColumnId(column.id) && + column.id !== "__spacer__" && + (!requestedColumnIds || requestedColumnIds.has(column.id)), + ); + const selectedRange = + scope === "cellSelection" + ? getDataTableCellSelectionRange(table, allVisibleColumns, cellSelection) + : undefined; + const columns = selectedRange?.columns ?? visibleColumns; + const rows = + scope === "cellSelection" + ? (selectedRange?.rows ?? []) + : getDataTableExportRows(table, scope); + const values: Array> = []; + + if (options.includeHeaders ?? scope !== "cellSelection") { + values.push( + columns.map((column) => + typeof column.columnDef.header === "string" + ? column.columnDef.header + : startCase(column.id), + ), + ); + } + + for (const row of rows) { + values.push( + columns.map((column) => { + const value = row.getValue(column.id); + return options.getCellValue + ? options.getCellValue({ + columnId: column.id, + row: row.original, + rowId: row.id, + value, + }) + : value; + }), + ); + } + + const delimiter = options.delimiter ?? "\t"; + const text = values + .map((row) => + row + .map((value) => + escapeDelimitedCell( + value, + delimiter, + options.escapeFormulaValues ?? true, + ), + ) + .join(delimiter), + ) + .join("\n"); + + if (options.onCopy) { + await options.onCopy({ + rows: rows.map((row) => row.original), + scope, + text, + }); + } else if ( + typeof navigator !== "undefined" && + typeof navigator.clipboard?.writeText === "function" + ) { + await navigator.clipboard.writeText(text); + } + + return text; +} + +function getDataTableCellSelectionRange( + table: TanStackTable, + columns: Array>, + selection: DataTableCellSelection | null | undefined, +) { + if (!selection) return undefined; + const rows = table.getRowModel().flatRows; + const anchorRow = rows.findIndex((row) => row.id === selection.anchor.rowId); + const focusRow = rows.findIndex((row) => row.id === selection.focus.rowId); + const anchorColumn = columns.findIndex( + (column) => column.id === selection.anchor.columnId, + ); + const focusColumn = columns.findIndex( + (column) => column.id === selection.focus.columnId, + ); + if (anchorRow < 0 || focusRow < 0 || anchorColumn < 0 || focusColumn < 0) { + return undefined; + } + return { + rows: rows.slice( + Math.min(anchorRow, focusRow), + Math.max(anchorRow, focusRow) + 1, + ), + columns: columns + .slice( + Math.min(anchorColumn, focusColumn), + Math.max(anchorColumn, focusColumn) + 1, + ) + .filter( + (column) => + !isUtilityColumnId(column.id) && column.id !== "__spacer__", + ), + }; +} + +export function parseDataTableClipboardText( + text: string, + delimiter: "\t" | "," = "\t", +) { + const rows: Array> = []; + let row: Array = []; + let value = ""; + let quoted = false; + + for (let index = 0; index < text.length; index += 1) { + const character = text[index]; + const nextCharacter = text[index + 1]; + if (character === '"') { + if (quoted && nextCharacter === '"') { + value += '"'; + index += 1; + } else { + quoted = !quoted; + } + continue; + } + if (!quoted && character === delimiter) { + row.push(value); + value = ""; + continue; + } + if (!quoted && (character === "\n" || character === "\r")) { + if (character === "\r" && nextCharacter === "\n") index += 1; + row.push(value); + rows.push(row); + row = []; + value = ""; + continue; + } + value += character; + } + + row.push(value); + if (row.length > 1 || row[0] || rows.length === 0) rows.push(row); + return rows; +} + +function escapeDelimitedCell( + value: unknown, + delimiter: string, + escapeFormulaValues: boolean, +) { + let text = normalizeFilterValue(value); + if ( + escapeFormulaValues && + typeof value === "string" && + /^[\t\r ]*[=+\-@]/.test(value) + ) { + text = `'${text}`; + } + if ( + text.includes(delimiter) || + text.includes('"') || + text.includes("\n") || + text.includes("\r") + ) { + return `"${text.replace(/"/g, '""')}"`; + } + return text; +} diff --git a/src/core/data-table/data-table-correctness.test.ts b/src/core/data-table/data-table-correctness.test.ts new file mode 100644 index 0000000..3019d39 --- /dev/null +++ b/src/core/data-table/data-table-correctness.test.ts @@ -0,0 +1,64 @@ +import { describe, expect, it } from "vitest"; +import type { DataTableColumnDef } from "../types"; +import { + getColumnId, + validateDataTableColumnIds, +} from "./data-table-utils"; +import { quantizeDataTableContainerWidth } from "./use-data-table-container-width"; + +type TestRow = { + name: string; + profile: { + name: string; + }; +}; + +describe("data table correctness contracts", () => { + it("uses the same canonical column ids as TanStack Table", () => { + expect( + getColumnId({ accessorKey: "profile.name" }, 0), + ).toBe("profile_name"); + expect( + getColumnId( + { accessorFn: (row) => row.name, header: "Display name" }, + 0, + ), + ).toBe("Display name"); + const missingIdColumn = { + accessorFn: (row: TestRow) => row.name, + header: () => "Name", + } as unknown as DataTableColumnDef; + expect(() => getColumnId(missingIdColumn, 0)).toThrow( + /must define a unique id/i, + ); + }); + + it("rejects duplicate and package-reserved column ids", () => { + const duplicateColumns: Array> = [ + { id: "identity", header: "Identity", columns: [ + { accessorKey: "name", id: "duplicate" }, + ] }, + { accessorKey: "profile.name", id: "duplicate" }, + ]; + + expect(() => validateDataTableColumnIds(duplicateColumns)).toThrow( + 'Duplicate data table column id "duplicate".', + ); + expect(() => + validateDataTableColumnIds([ + { accessorKey: "name", id: "__actions__" }, + ]), + ).toThrow(/reserved for an internal column/i); + }); + + it("switches responsive buckets at the exact package breakpoints", () => { + expect(quantizeDataTableContainerWidth(0)).toBe(0); + expect(quantizeDataTableContainerWidth(639.99)).toBe(1); + expect(quantizeDataTableContainerWidth(640)).toBe(640); + expect(quantizeDataTableContainerWidth(767.99)).toBe(640); + expect(quantizeDataTableContainerWidth(768)).toBe(768); + expect(quantizeDataTableContainerWidth(1023.99)).toBe(768); + expect(quantizeDataTableContainerWidth(1024)).toBe(1024); + expect(quantizeDataTableContainerWidth(1536)).toBe(1536); + }); +}); diff --git a/src/core/data-table/data-table-grid-accessibility.test.tsx b/src/core/data-table/data-table-grid-accessibility.test.tsx new file mode 100644 index 0000000..dc767ae --- /dev/null +++ b/src/core/data-table/data-table-grid-accessibility.test.tsx @@ -0,0 +1,309 @@ +import * as React from "react"; +import { afterEach, describe, expect, it, vi } from "vitest"; +import { + cleanup, + createEvent, + fireEvent, + render, + screen, + waitFor, +} from "@testing-library/react"; +import { DataTable as ShadcnDataTable } from "../../index"; +import { DataTable as HeroDataTable } from "../../entries/heroui"; +import { DataTable as GridcnDataTable } from "../../entries/thegridcn"; +import type { DataTableApi, DataTableColumnDef } from "../types"; + +type Person = { id: string; name: string; age: number }; + +const data: Array = [ + { id: "ada", name: "Ada", age: 36 }, + { id: "grace", name: "Grace", age: 37 }, + { id: "lin", name: "Lin", age: 38 }, +]; +const columns: Array> = [ + { accessorKey: "name", header: "Name" }, + { accessorKey: "age", header: "Age" }, +]; + +afterEach(cleanup); + +describe("interactive grid accessibility", () => { + it.each([ + ["shadcn", ShadcnDataTable], + ["heroui", HeroDataTable], + ["thegridcn", GridcnDataTable], + ] as const)("exposes valid grid metadata through the %s adapter", (_, DataTable) => { + render( + row.id} + interactiveGrid + totalRowCount={12} + />, + ); + + const grid = screen.getByRole("grid"); + expect(grid.getAttribute("aria-colcount")).toBe("2"); + // Header row + server-reported data rows. + expect(grid.getAttribute("aria-rowcount")).toBe("13"); + expect(screen.getByRole("columnheader", { name: "Name" }).getAttribute("aria-colindex")).toBe("1"); + const firstRow = screen.getByRole("row", { name: /Ada 36/ }); + expect(firstRow.getAttribute("aria-rowindex")).toBe("2"); + expect(screen.getAllByRole("gridcell")[0].getAttribute("aria-colindex")).toBe("1"); + }); + + it("keeps native table behavior unless grid mode is explicitly requested", () => { + const { container } = render( + row.id} />, + ); + expect(container.querySelector('[role="grid"]')).toBeNull(); + expect(container.querySelector('[role="gridcell"]')).toBeNull(); + }); + + it("keeps full server counts and absolute indexes when virtual rows are bounded", () => { + render( + row.id} + interactiveGrid + totalRowCount={200} + manualPagination + pageIndex={2} + pageSize={25} + virtualization={{ enabled: true, fallbackRowCount: 1 }} + />, + ); + + const grid = screen.getByRole("grid"); + expect(grid.getAttribute("aria-rowcount")).toBe("201"); + // Header row + the page offset (50) + the first mounted row. + expect(screen.getByRole("row", { name: /Ada 36/ }).getAttribute("aria-rowindex")).toBe("52"); + }); + + it("moves one roving tab stop with arrows, paging, and Home/End", async () => { + render( + row.id} + accessibility={{ mode: "grid", pageSize: 2 }} + />, + ); + + const cells = screen.getAllByRole("gridcell"); + expect(cells.filter((cell) => cell.getAttribute("tabindex") === "0")).toHaveLength(1); + cells[0].focus(); + fireEvent.keyDown(cells[0], { key: "ArrowRight" }); + await waitFor(() => expect(document.activeElement).toBe(screen.getAllByRole("gridcell")[1])); + fireEvent.keyDown(screen.getAllByRole("gridcell")[1], { key: "PageDown" }); + await waitFor(() => expect(document.activeElement).toBe(screen.getAllByRole("gridcell")[5])); + fireEvent.keyDown(screen.getAllByRole("gridcell")[5], { key: "Home" }); + await waitFor(() => expect(document.activeElement).toBe(screen.getAllByRole("gridcell")[4])); + fireEvent.keyDown(screen.getAllByRole("gridcell")[4], { key: "End", ctrlKey: true }); + await waitFor(() => expect(document.activeElement).toBe(screen.getAllByRole("gridcell")[5])); + }); + + it("does not consume keys from a selection checkbox or sort button", () => { + render( + row.id} + interactiveGrid + enableRowSelection + />, + ); + + const checkbox = screen.getAllByRole("checkbox")[1]; + checkbox.focus(); + const checkboxEvent = createEvent.keyDown(checkbox, { key: " " }); + fireEvent(checkbox, checkboxEvent); + expect(checkboxEvent.defaultPrevented).toBe(false); + const sort = screen.getByRole("button", { name: "Name" }); + const sortEvent = createEvent.keyDown(sort, { key: "Enter" }); + fireEvent(sort, sortEvent); + expect(sortEvent.defaultPrevented).toBe(false); + }); + + it("selects a pointer-dragged rectangle and exposes ARIA styling hooks", () => { + const onCellSelectionChange = vi.fn(); + render( + row.id} + interactiveGrid + enableCellSelection + onCellSelectionChange={onCellSelectionChange} + />, + ); + + const cells = screen.getAllByRole("gridcell"); + const pointerDownEvent = createEvent.pointerDown(cells[0], { button: 0 }); + fireEvent(cells[0], pointerDownEvent); + expect(pointerDownEvent.defaultPrevented).toBe(true); + fireEvent.pointerEnter(cells[3], { buttons: 1 }); + fireEvent.pointerUp(window); + expect(cells.slice(0, 4).every((cell) => cell.getAttribute("aria-selected") === "true")).toBe(true); + expect(cells[3].getAttribute("data-dtp-cell-selected")).toBe("true"); + expect(onCellSelectionChange).toHaveBeenLastCalledWith({ + anchor: { rowId: "ada", columnId: "name" }, + focus: { rowId: "grace", columnId: "age" }, + }); + }); + + it("extends a range with Shift+navigation and copies only its cells", async () => { + const onCopy = vi.fn(); + const apiRef = React.createRef>(); + const { container } = render( + row.id} + interactiveGrid + enableCellSelection + clipboard={{ copy: { onCopy } }} + />, + ); + const cells = screen.getAllByRole("gridcell"); + cells[0].focus(); + fireEvent.keyDown(cells[0], { key: "ArrowRight", shiftKey: true }); + await waitFor(() => expect(cells[0].getAttribute("aria-selected")).toBe("true")); + expect(cells[1].getAttribute("aria-selected")).toBe("true"); + expect(apiRef.current?.getCellSelection()).toEqual({ + anchor: { rowId: "ada", columnId: "name" }, + focus: { rowId: "ada", columnId: "age" }, + }); + const root = container.querySelector('[data-dtp-slot="data-table-root"]'); + fireEvent.keyDown(root!, { ctrlKey: true, key: "c" }); + await waitFor(() => expect(onCopy).toHaveBeenCalled()); + const copyContext = onCopy.mock.calls[0]?.[0] as { text: string }; + expect(copyContext.text).toBe("Ada\t36"); + apiRef.current?.clearCellSelection(); + await waitFor(() => expect(apiRef.current?.getCellSelection()).toBeNull()); + }); + + it("keeps controlled selection and delegates undo/redo to the application", () => { + const onCellSelectionChange = vi.fn(); + const undo = vi.fn(); + const redo = vi.fn(); + const selection = { + anchor: { rowId: "grace", columnId: "age" }, + focus: { rowId: "grace", columnId: "age" }, + }; + const { container } = render( + row.id} + interactiveGrid + cellSelection={selection} + onCellSelectionChange={onCellSelectionChange} + gridCommands={{ undo, redo }} + />, + ); + const cells = screen.getAllByRole("gridcell"); + expect(cells[3].getAttribute("aria-selected")).toBe("true"); + fireEvent.pointerDown(cells[0], { button: 0 }); + expect(onCellSelectionChange).toHaveBeenCalledWith({ + anchor: { rowId: "ada", columnId: "name" }, + focus: { rowId: "ada", columnId: "name" }, + }); + const root = container.querySelector('[data-dtp-slot="data-table-root"]'); + fireEvent.keyDown(root!, { ctrlKey: true, key: "z" }); + fireEvent.keyDown(root!, { ctrlKey: true, shiftKey: true, key: "z" }); + expect(undo).toHaveBeenCalledWith(expect.objectContaining({ cellSelection: selection })); + expect(redo).toHaveBeenCalledWith(expect.objectContaining({ cellSelection: selection })); + }); + + it("keeps imperative copy disabled when clipboard.copy is false", async () => { + const apiRef = React.createRef>(); + render( + row.id} + interactiveGrid + cellSelection={{ + anchor: { rowId: "ada", columnId: "name" }, + focus: { rowId: "ada", columnId: "name" }, + }} + clipboard={{ copy: false }} + />, + ); + await expect(apiRef.current?.copyToClipboard()).resolves.toBeUndefined(); + }); + + it("copies an expanded tree range in displayed parent-to-child order", async () => { + type TreePerson = Person & { children?: Array }; + const treeColumns: Array> = [ + { accessorKey: "name", header: "Name" }, + ]; + const treeData: Array = [ + { + id: "parent", + name: "Parent", + age: 1, + children: [{ id: "child", name: "Child", age: 2 }], + }, + ]; + const apiRef = React.createRef>(); + const onCopy = vi.fn(); + render( + row.id} + getSubRows={(row) => row.children} + initialState={{ expanded: { parent: true } }} + interactiveGrid + cellSelection={{ + anchor: { rowId: "parent", columnId: "name" }, + focus: { rowId: "child", columnId: "name" }, + }} + />, + ); + await apiRef.current?.copyToClipboard({ scope: "cellSelection", onCopy }); + const copyContext = onCopy.mock.calls[0]?.[0] as { text: string }; + expect(copyContext.text).toBe("Parent\nChild"); + }); + + it("ignores utility-cell pointers and filters utility bounds from range copy", async () => { + const onCellSelectionChange = vi.fn(); + const onCopy = vi.fn(); + const apiRef = React.createRef>(); + render( + row.id} + interactiveGrid + enableCellSelection + enableRowSelection + onCellSelectionChange={onCellSelectionChange} + />, + ); + const cells = screen.getAllByRole("gridcell"); + fireEvent.pointerDown(cells[0], { button: 0 }); + expect(onCellSelectionChange).not.toHaveBeenCalled(); + apiRef.current?.setCellSelection({ + anchor: { rowId: "ada", columnId: "__select__" }, + focus: { rowId: "ada", columnId: "name" }, + }); + await waitFor(() => + expect(apiRef.current?.getCellSelection()).toEqual({ + anchor: { rowId: "ada", columnId: "__select__" }, + focus: { rowId: "ada", columnId: "name" }, + }), + ); + await apiRef.current?.copyToClipboard({ scope: "cellSelection", onCopy }); + const copyContext = onCopy.mock.calls[0]?.[0] as { text: string }; + expect(copyContext.text).toBe("Ada"); + }); +}); diff --git a/src/core/data-table/data-table-grouping-faceting.test.tsx b/src/core/data-table/data-table-grouping-faceting.test.tsx new file mode 100644 index 0000000..1e6893f --- /dev/null +++ b/src/core/data-table/data-table-grouping-faceting.test.tsx @@ -0,0 +1,155 @@ +import * as React from "react"; +import { act } from "react"; +import { fireEvent, render, screen } from "@testing-library/react"; +import { describe, expect, it } from "vitest"; +import type { DataTableApi, DataTableColumnDef } from "../types"; +import { DataTable } from "../../index"; + +type RowData = { + id: string; + team: string; + score: number; +}; + +const rows: Array = [ + { id: "1", team: "Design", score: 2 }, + { id: "2", team: "Design", score: 3 }, + { id: "3", team: "Engineering", score: 7 }, +]; + +const columns: Array> = [ + { + accessorKey: "team", + header: "Team", + enableGrouping: true, + meta: { filter: { type: "faceted" } }, + }, + { + accessorKey: "score", + header: "Score", + aggregationFn: "sum", + }, +]; + +describe("DataTable grouping and faceting", () => { + it("creates grouped rows, aggregates values, and preserves grouping in the API state", () => { + const apiRef = React.createRef>(); + + render( + row.id} + initialState={{ grouping: ["team"] }} + />, + ); + + expect(apiRef.current?.getState().grouping).toEqual(["team"]); + expect(apiRef.current?.getTable()?.getRowModel().rows).toHaveLength(2); + expect(screen.getByText("(2)")).toBeTruthy(); + expect(screen.getByText("5")).toBeTruthy(); + + act(() => { + apiRef.current?.restore({ grouping: [] }); + }); + expect(apiRef.current?.getTable()?.getRowModel().rows).toHaveLength(3); + }); + + it("uses local facet counts and lets server-provided options replace them", () => { + const localRef = React.createRef>(); + const { container, rerender } = render( + row.id} + />, + ); + + expect(localRef.current?.getTable()?.getColumn("team")?.getFacetedUniqueValues().get("Design")).toBe(2); + + rerender( + row.id} + />, + ); + + expect( + container.querySelector('[data-dtp-slot="data-table-toolbar-filters"]'), + ).toBeTruthy(); + const filters = container.querySelector( + '[data-dtp-slot="data-table-toolbar-filters"]', + ); + fireEvent.pointerDown(filters?.querySelector("button") as HTMLElement); + expect(screen.getByText("Remote")).toBeTruthy(); + expect(screen.getByText("12")).toBeTruthy(); + const facetSearch = screen.getByRole("textbox", { + name: "Search Team options", + }); + fireEvent.change(facetSearch, { target: { value: "missing" } }); + expect(screen.queryByText("Remote")).toBeNull(); + }); + + it("derives local numeric facet bounds when range bounds are not configured", () => { + const apiRef = React.createRef>(); + render( + row.id} + />, + ); + + expect( + apiRef.current + ?.getTable() + ?.getColumn("score") + ?.getFacetedMinMaxValues(), + ).toEqual([2, 7]); + expect(screen.getByLabelText("Score: From").getAttribute("min")).toBe("2"); + expect(screen.getByLabelText("Score: To").getAttribute("max")).toBe("7"); + }); + + it("reorders grouped columns from the accessible grouping bar", () => { + const apiRef = React.createRef>(); + render( + ({ ...column, enableGrouping: true }))} + data={rows} + enableGrouping + getRowId={(row) => row.id} + initialState={{ grouping: ["team", "score"] }} + />, + ); + + fireEvent.click( + screen.getByRole("button", { name: "Move Score grouping earlier" }), + ); + expect(apiRef.current?.getState().grouping).toEqual(["score", "team"]); + }); +}); diff --git a/src/core/data-table/data-table-header-cell.tsx b/src/core/data-table/data-table-header-cell.tsx index b3c07fb..cf33a05 100644 --- a/src/core/data-table/data-table-header-cell.tsx +++ b/src/core/data-table/data-table-header-cell.tsx @@ -4,7 +4,9 @@ import { IconChevronDown, IconSelector } from "../icons"; import type { Header, SortingState } from "@tanstack/react-table"; import type { DataTableColumnDef, + DataTableColumnGroupDef, DataTableDensity, + DataTableProps, } from "../types"; import type { DataTableUiClassNames, DataTableUiKit } from "../ui-kit"; import { cn } from "../../lib/utils"; @@ -16,16 +18,21 @@ import { import { headerAlignClassName, hideOnClassName } from "../types"; type DataTableHeaderCellProps = { + columnGroupHeaderHeight: DataTableProps["columnGroupHeaderHeight"]; currentDensity: DataTableDensity; currentSorting: SortingState; + dir: NonNullable["dir"]>; draggedColumnIdRef: React.MutableRefObject; enableColumnReordering: boolean; enableColumnResizing: boolean; + gridColumnIndex?: number; + gridMode: boolean; header: Header; headerGroupHeaders: Array>; layout: DataTableColumnLayout; primeColumnForResize: (columnId: string, currentSize: number) => void; reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; + resizeColumnLabel: string; resetColumnSize: (columnId: string) => void; // Rendered through flexRender inside the header def; carried as a prop so // the memo comparator re-renders the selection header when it changes. @@ -35,22 +42,33 @@ type DataTableHeaderCellProps = { }; function DataTableHeaderCellInner({ + columnGroupHeaderHeight, currentDensity, currentSorting, + dir, draggedColumnIdRef, enableColumnReordering, enableColumnResizing, + gridColumnIndex, + gridMode, header, headerGroupHeaders, layout, primeColumnForResize, reorderColumn, + resizeColumnLabel, resetColumnSize, TableHead, uiClassNames, }: DataTableHeaderCellProps) { const meta = (header.column.columnDef as DataTableColumnDef) .meta; + const headerContentId = React.useId(); + const isColumnGroup = + !header.isPlaceholder && header.subHeaders.length > 0; + const groupDefinition = isColumnGroup + ? (header.column.columnDef as DataTableColumnGroupDef) + : undefined; const canSort = header.column.getCanSort(); const sortingState = header.column.getIsSorted(); const sortingIndex = currentSorting.findIndex( @@ -58,6 +76,8 @@ function DataTableHeaderCellInner({ ); const canReorderColumn = enableColumnReordering && + !header.isPlaceholder && + !isColumnGroup && !layout.isUtilityColumn && !layout.isSpacerColumn; const hideClassName = hideOnClassName(meta?.hideOn); @@ -66,19 +86,54 @@ function DataTableHeaderCellInner({ ({ : undefined } draggable={canReorderColumn} - tabIndex={canReorderColumn ? 0 : undefined} + tabIndex={ + canReorderColumn && + !canSort && + !(enableColumnResizing && header.column.getCanResize()) + ? 0 + : undefined + } onDragStart={ canReorderColumn ? (event: React.DragEvent) => { @@ -139,7 +200,7 @@ function DataTableHeaderCellInner({ ); const target = headers[ - event.key === "ArrowLeft" + (event.key === "ArrowLeft") !== (dir === "rtl") ? currentIndex - 1 : currentIndex + 1 ]; @@ -159,7 +220,7 @@ function DataTableHeaderCellInner({ )} onClick={header.column.getToggleSortingHandler()} > - + {flexRender(header.column.columnDef.header, header.getContext())} {sortingState ? ( @@ -186,24 +247,75 @@ function DataTableHeaderCellInner({ )} ) : ( - flexRender(header.column.columnDef.header, header.getContext()) + layout.isUtilityColumn || layout.isSpacerColumn ? ( + flexRender(header.column.columnDef.header, header.getContext()) + ) : ( + + {flexRender(header.column.columnDef.header, header.getContext())} + + ) )} - {enableColumnResizing && header.column.getCanResize() ? ( + {enableColumnResizing && + !header.isPlaceholder && + header.column.getCanResize() ? (
    { - resetColumnSize(header.column.id); + for (const leafHeader of getResizableLeafHeaders(header)) { + resetColumnSize(leafHeader.column.id); + } }} onMouseDown={(event) => { - primeColumnForResize(header.column.id, header.getSize()); + for (const leafHeader of getResizableLeafHeaders(header)) { + primeColumnForResize( + leafHeader.column.id, + leafHeader.getSize(), + ); + } header.getResizeHandler()(event); }} onTouchStart={(event) => { - primeColumnForResize(header.column.id, header.getSize()); + for (const leafHeader of getResizableLeafHeaders(header)) { + primeColumnForResize( + leafHeader.column.id, + leafHeader.getSize(), + ); + } header.getResizeHandler()(event); }} + onKeyDown={(event) => { + if (event.altKey) { + return; + } + if (event.key === "Home") { + event.preventDefault(); + for (const leafHeader of getResizableLeafHeaders(header)) { + resetColumnSize(leafHeader.column.id); + } + return; + } + if (event.key !== "ArrowLeft" && event.key !== "ArrowRight") { + return; + } + + event.preventDefault(); + event.stopPropagation(); + const grows = + (event.key === "ArrowRight") !== (dir === "rtl"); + resizeHeaderBy( + header, + (grows ? 1 : -1) * (event.shiftKey ? 25 : 10), + ); + }} className={cn( - "absolute inset-y-0 right-0 z-50 h-full w-3 translate-x-1/2 cursor-col-resize touch-none select-none after:absolute after:top-0 after:left-1/2 after:h-full after:w-px after:-translate-x-1/2", + "absolute inset-y-0 z-50 h-full w-3 cursor-col-resize touch-none select-none ltr:right-0 ltr:translate-x-1/2 rtl:left-0 rtl:-translate-x-1/2 after:absolute after:top-0 after:left-1/2 after:h-full after:w-px after:-translate-x-1/2", uiClassNames.resizeHandle ?? "after:bg-current after:opacity-20 hover:after:opacity-70", header.column.getIsResizing() && @@ -222,14 +334,23 @@ function areDataTableHeaderCellsEqual( return ( previous.header.id === next.header.id && previous.header.column.id === next.header.column.id && + previous.header.column.columnDef === next.header.column.columnDef && + previous.header.colSpan === next.header.colSpan && + previous.header.isPlaceholder === next.header.isPlaceholder && + sameSubHeaders(previous.header, next.header) && previous.currentDensity === next.currentDensity && + previous.columnGroupHeaderHeight === next.columnGroupHeaderHeight && + previous.dir === next.dir && previous.enableColumnReordering === next.enableColumnReordering && previous.enableColumnResizing === next.enableColumnResizing && + previous.gridMode === next.gridMode && + previous.gridColumnIndex === next.gridColumnIndex && previous.TableHead === next.TableHead && previous.uiClassNames === next.uiClassNames && previous.draggedColumnIdRef === next.draggedColumnIdRef && previous.primeColumnForResize === next.primeColumnForResize && previous.reorderColumn === next.reorderColumn && + previous.resizeColumnLabel === next.resizeColumnLabel && previous.resetColumnSize === next.resetColumnSize && previous.selectionState === next.selectionState && sameSorting(previous.currentSorting, next.currentSorting) && @@ -241,6 +362,68 @@ function areDataTableHeaderCellsEqual( ); } +function getResizableLeafHeaders(header: Header) { + if (!header.subHeaders.length) { + return [header]; + } + + return header + .getLeafHeaders() + .filter((leafHeader) => !leafHeader.subHeaders.length); +} + +function getHeaderMinimumSize(header: Header) { + return getResizableLeafHeaders(header).reduce( + (total, leafHeader) => + total + (leafHeader.column.columnDef.minSize ?? 20), + 0, + ); +} + +function getHeaderMaximumSize(header: Header) { + return getResizableLeafHeaders(header).reduce( + (total, leafHeader) => + total + (leafHeader.column.columnDef.maxSize ?? Number.MAX_SAFE_INTEGER), + 0, + ); +} + +function resizeHeaderBy( + header: Header, + delta: number, +) { + const leafHeaders = getResizableLeafHeaders(header); + const deltaPerLeaf = delta / leafHeaders.length; + header.getContext().table.setColumnSizing((current) => { + const next = { ...current }; + + for (const leafHeader of leafHeaders) { + const column = leafHeader.column; + const minimum = column.columnDef.minSize ?? 20; + const maximum = + column.columnDef.maxSize ?? Number.MAX_SAFE_INTEGER; + next[column.id] = Math.min( + maximum, + Math.max(minimum, column.getSize() + deltaPerLeaf), + ); + } + + return next; + }); +} + +function sameSubHeaders( + previous: Header, + next: Header, +) { + return ( + previous.subHeaders.length === next.subHeaders.length && + previous.subHeaders.every( + (header, index) => next.subHeaders[index]?.id === header.id, + ) + ); +} + function sameSorting(previous: SortingState, next: SortingState) { return ( previous.length === next.length && @@ -274,9 +457,8 @@ function sameHeaderLayout( previous.headerStyle?.width === next.headerStyle?.width && previous.headerStyle?.minWidth === next.headerStyle?.minWidth && previous.headerStyle?.maxWidth === next.headerStyle?.maxWidth && - previous.headerStyle?.insetInlineStart === - next.headerStyle?.insetInlineStart && - previous.headerStyle?.insetInlineEnd === next.headerStyle?.insetInlineEnd + previous.headerStyle?.left === next.headerStyle?.left && + previous.headerStyle?.right === next.headerStyle?.right ); } diff --git a/src/core/data-table/data-table-labels.ts b/src/core/data-table/data-table-labels.ts index 7add55f..6cf8a02 100644 --- a/src/core/data-table/data-table-labels.ts +++ b/src/core/data-table/data-table-labels.ts @@ -14,6 +14,10 @@ export const DATA_TABLE_DEFAULT_LABELS: ResolvedDataTableLabels = { columns: "Columns", filters: "Filters", clearFilters: "Clear filters", + filterFrom: "From", + filterTo: "To", + filterTrue: "Yes", + filterFalse: "No", selectedRows: (count) => `${count} record${count === 1 ? "" : "s"} selected`, showHiddenRows: (label) => `Show ${label}`, @@ -28,6 +32,7 @@ export const DATA_TABLE_DEFAULT_LABELS: ResolvedDataTableLabels = { nextPage: "Next page", lastPage: "Last page", selectAllVisibleRows: "Select all visible rows", + selectAllFilteredRows: "Select all filtered rows", selectRow: "Select row", selectCardRow: (rowId) => `Select row ${rowId}`, switchToTableView: "Switch to table view", @@ -42,7 +47,15 @@ export const DATA_TABLE_DEFAULT_LABELS: ResolvedDataTableLabels = { cancelEdit: "Cancel editing", expandRow: "Expand row", collapseRow: "Collapse row", + expandRowDetails: "Expand row details", + collapseRowDetails: "Collapse row details", exportCsv: "Export CSV", + print: "Print table", + enterFullscreen: "Enter fullscreen", + exitFullscreen: "Exit fullscreen", + errorTitle: "Unable to load this table", + errorDescription: "Try again or check your connection.", + retry: "Retry", density: "Density", compactDensity: "Compact", comfortableDensity: "Comfortable", @@ -50,6 +63,30 @@ export const DATA_TABLE_DEFAULT_LABELS: ResolvedDataTableLabels = { pinLeft: "Pin left", pinRight: "Pin right", unpin: "Unpin", + pinRowToTop: "Pin row to top", + pinRowToBottom: "Pin row to bottom", + unpinRow: "Unpin row", + resizeColumn: (columnLabel) => `Resize ${columnLabel}`, + grouping: "Grouping", + groupBy: (columnLabel) => `Group by ${columnLabel}`, + ungroup: (columnLabel) => `Ungroup ${columnLabel}`, + removeGrouping: (columnLabel) => `Remove ${columnLabel} grouping`, + moveGroupingEarlier: (columnLabel) => `Move ${columnLabel} grouping earlier`, + moveGroupingLater: (columnLabel) => `Move ${columnLabel} grouping later`, + facetSearch: (columnLabel) => `Search ${columnLabel} options`, + searchColumns: "Search columns", + showAllColumns: "Show all columns", + hideAllColumns: "Hide all columns", + moveColumnEarlier: (columnLabel) => `Move ${columnLabel} earlier`, + moveColumnLater: (columnLabel) => `Move ${columnLabel} later`, + resetColumnLayout: "Reset column layout", + savedViews: "Saved views", + createSavedView: "Create saved view", + savedViewName: "View name", + applySavedView: (name) => `Apply saved view ${name}`, + renameSavedView: (name) => `Rename saved view ${name}`, + deleteSavedView: (name) => `Delete saved view ${name}`, + saveSavedView: "Save view", }; export function resolveDataTableLabels( diff --git a/src/core/data-table/data-table-phase-zero.test.tsx b/src/core/data-table/data-table-phase-zero.test.tsx index b948e80..8967a09 100644 --- a/src/core/data-table/data-table-phase-zero.test.tsx +++ b/src/core/data-table/data-table-phase-zero.test.tsx @@ -29,6 +29,7 @@ const columns: Array> = [ header: "Name", }, ]; +const getRowId = (row: TestRow) => row.id; class ResizeObserverMock { observe() {} @@ -65,6 +66,25 @@ afterEach(() => { }); describe("DataTable phase-zero contracts", () => { + it("associates table titles and descriptions with the native table", () => { + render( + row.id} + title="Employees" + />, + ); + + const table = screen.getByRole("table", { name: "Employees" }); + const descriptionId = table.getAttribute("aria-describedby"); + expect(descriptionId).toBeTruthy(); + expect(document.getElementById(descriptionId!)?.textContent).toBe( + "Current engineering employees", + ); + }); + it("applies a custom globalFilterFn to the toolbar query", () => { const globalFilterFn = vi.fn>( (row, _columnId, filterValue) => @@ -94,6 +114,79 @@ describe("DataTable phase-zero contracts", () => { expect(globalFilterFn).toHaveBeenCalled(); }); + it("caches normalized built-in search values across query changes", () => { + const getAccessorValue = vi.fn((row: TestRow) => row.name); + const searchColumns: Array> = [ + { + id: "name", + accessorFn: getAccessorValue, + header: "Name", + }, + ]; + + render( + row.id} + />, + ); + + fireEvent.change(screen.getByPlaceholderText("Search rows..."), { + target: { value: "ada" }, + }); + expect(screen.getByText("Ada")).not.toBeNull(); + expect(getAccessorValue).toHaveBeenCalledTimes(2); + + fireEvent.change(screen.getByPlaceholderText("Search rows..."), { + target: { value: "ad" }, + }); + expect(screen.getByText("Ada")).not.toBeNull(); + expect(getAccessorValue).toHaveBeenCalledTimes(2); + }); + + it("warns in development when row identity cannot safely anchor table state", () => { + const warning = vi.spyOn(console, "warn").mockImplementation(() => {}); + + render( + row.id} + />, + ); + + expect(warning).toHaveBeenCalledWith( + expect.stringContaining("Duplicate row id \"duplicate\""), + ); + }); + + it("does not mistake genuinely changed rows for array identity churn", () => { + const warning = vi.spyOn(console, "warn").mockImplementation(() => {}); + const firstRows = [{ id: "1", name: "Ada" }]; + const { rerender } = render( + , + ); + + rerender( + , + ); + + expect(warning).not.toHaveBeenCalledWith( + expect.stringContaining("data array identity changed"), + ); + }); + it("searches nested leaf columns with the real row index", () => { type NestedRow = { id: string; @@ -478,6 +571,11 @@ describe("DataTable phase-zero contracts", () => { fireEvent.click(screen.getByRole("button", { name: "Archive" })); fireEvent.pointerDown(screen.getByRole("button", { name: "Row actions" })); fireEvent.click(screen.getByText("Edit row")); + const editInput = container.querySelector("tbody input:not([type=checkbox])"); + expect(editInput).not.toBeNull(); + fireEvent.change(editInput!, { + target: { value: "Ada Lovelace" }, + }); fireEvent.click(screen.getByRole("button", { name: "Save" })); const fileInput = container.querySelector('input[type="file"]'); diff --git a/src/core/data-table/data-table-saved-views.ts b/src/core/data-table/data-table-saved-views.ts index 9235532..03abb9d 100644 --- a/src/core/data-table/data-table-saved-views.ts +++ b/src/core/data-table/data-table-saved-views.ts @@ -13,8 +13,10 @@ const DEFAULT_SLICES: Array = [ "sorting", "columnVisibility", "columnFilters", + "grouping", "columnOrder", "columnPinning", + "rowPinning", "columnSizing", "density", "viewMode", @@ -262,6 +264,8 @@ function validateState( } const filters = validateFilters(value.columnFilters); if (selected.has("columnFilters") && filters) state.columnFilters = filters; + const grouping = validateStringArray(value.grouping); + if (selected.has("grouping") && grouping) state.grouping = grouping; const expanded = value.expanded === true ? true @@ -275,6 +279,10 @@ function validateState( if (selected.has("columnPinning") && pinning) { state.columnPinning = pinning; } + const rowPinning = validateRowPinning(value.rowPinning); + if (selected.has("rowPinning") && rowPinning) { + state.rowPinning = rowPinning; + } const sizing = validateSizingRecord(value.columnSizing); if (selected.has("columnSizing") && sizing) state.columnSizing = sizing; if ( @@ -317,14 +325,25 @@ function cloneStateSlice( ); } if (isRecord(value)) { - if (slice === "columnPinning") { + if (slice === "columnPinning" || slice === "rowPinning") { return { - left: Array.isArray(value.left) - ? [...(value.left as Array)] - : undefined, - right: Array.isArray(value.right) - ? [...(value.right as Array)] - : undefined, + ...(slice === "columnPinning" + ? { + left: Array.isArray(value.left) + ? [...(value.left as Array)] + : undefined, + right: Array.isArray(value.right) + ? [...(value.right as Array)] + : undefined, + } + : { + top: Array.isArray(value.top) + ? [...(value.top as Array)] + : undefined, + bottom: Array.isArray(value.bottom) + ? [...(value.bottom as Array)] + : undefined, + }), }; } return { ...value }; @@ -378,6 +397,14 @@ function validatePinning(value: unknown) { }; } +function validateRowPinning(value: unknown) { + if (!isRecord(value)) return undefined; + return { + top: validateStringArray(value.top) ?? [], + bottom: validateStringArray(value.bottom) ?? [], + }; +} + function validateBooleanRecord(value: unknown) { if (!isRecord(value)) return undefined; return Object.fromEntries( diff --git a/src/core/data-table/data-table-state-api.test.tsx b/src/core/data-table/data-table-state-api.test.tsx index 832a143..903b8ab 100644 --- a/src/core/data-table/data-table-state-api.test.tsx +++ b/src/core/data-table/data-table-state-api.test.tsx @@ -5,6 +5,7 @@ import { fireEvent, render, screen, + waitFor, } from "@testing-library/react"; import { afterAll, @@ -23,10 +24,12 @@ import { type DataTablePersistenceStorage, type DataTableState, } from "../../index"; +import { useDataTableAutoPageSize } from "./use-data-table-auto-page-size"; type TestRow = { id: string; name: string; + children?: Array; }; const columns: Array> = [ @@ -115,6 +118,101 @@ describe("DataTable unified state API", () => { expect(screen.getByText("Grace")).not.toBeNull(); }); + it("derives an opt-in controlled page size from the scroll viewport", async () => { + const clientHeight = Object.getOwnPropertyDescriptor( + HTMLElement.prototype, + "clientHeight", + ); + const frame = vi + .spyOn(window, "requestAnimationFrame") + .mockImplementation((callback) => { + callback(0); + return 1; + }); + Object.defineProperty(HTMLElement.prototype, "clientHeight", { + configurable: true, + get: function getClientHeight(this: HTMLElement) { + return this.getAttribute("data-slot") === "scroll-area-viewport" + ? 100 + : 0; + }, + }); + const onPageIndexChange = vi.fn(); + const onPageSizeChange = vi.fn(); + + try { + render( + row.id} + onPageIndexChange={onPageIndexChange} + onPageSizeChange={onPageSizeChange} + pageIndex={1} + pageSize={10} + />, + ); + + await waitFor(() => { + expect(onPageIndexChange).toHaveBeenCalledWith(0); + expect(onPageSizeChange).toHaveBeenCalledWith(5); + }); + } finally { + frame.mockRestore(); + if (clientHeight) { + Object.defineProperty(HTMLElement.prototype, "clientHeight", clientHeight); + } else { + delete (HTMLElement.prototype as { clientHeight?: number }).clientHeight; + } + } + }); + + it("does not recursively grow a content-sized auto page", () => { + const onPageSizeChange = vi.fn(); + const frame = vi + .spyOn(window, "requestAnimationFrame") + .mockImplementation((callback) => { + callback(0); + return 1; + }); + + function Harness() { + const [element, setElement] = React.useState(null); + const [pageSize, setPageSize] = React.useState(1); + const [height, setHeight] = React.useState(100); + const setViewport = React.useCallback((node: HTMLDivElement | null) => { + if (!node) return; + Object.defineProperty(node, "clientHeight", { + configurable: true, + get: () => height, + }); + setElement(node); + }, [height]); + useDataTableAutoPageSize({ + config: { estimateRowHeight: 20 }, + currentPageSize: pageSize, + enabled: true, + onPageSizeChange: (nextPageSize) => { + onPageSizeChange(nextPageSize); + setPageSize(nextPageSize); + setHeight(200); + }, + viewportElement: element, + viewportHeight: height, + }); + return
    ; + } + + try { + render(); + expect(onPageSizeChange).toHaveBeenCalledTimes(1); + expect(onPageSizeChange).toHaveBeenCalledWith(5); + } finally { + frame.mockRestore(); + } + }); + it("supports unified controlled state with legacy-prop precedence", () => { const warning = vi.spyOn(console, "warn").mockImplementation(() => {}); const state: Partial = { @@ -189,7 +287,7 @@ describe("DataTable unified state API", () => { it("accepts controlled column sizing and reports resize changes", () => { const onColumnSizingChange = vi.fn(); - const { container } = render( + render( { screen.getByRole("columnheader", { name: "Name" }).style.width, ).toBe("220px"); - const resizeHandle = container.querySelector(".cursor-col-resize"); - expect(resizeHandle).not.toBeNull(); - fireEvent.mouseDown(resizeHandle!, { clientX: 220 }); + const resizeHandle = screen.getByRole("separator", { + name: "Resize Name", + }); + expect(resizeHandle.getAttribute("aria-valuenow")).toBe("220"); + fireEvent.keyDown(resizeHandle, { key: "ArrowRight" }); + expect(onColumnSizingChange).toHaveBeenCalledWith({ name: 230 }); + + fireEvent.mouseDown(resizeHandle, { clientX: 220 }); fireEvent.mouseMove(document, { clientX: 260 }); fireEvent.mouseUp(document); expect(onColumnSizingChange).toHaveBeenCalled(); }); + it("renders top and bottom pinned rows and exposes row pin actions", () => { + const onRowPinningChange = vi.fn(); + render( + row.id} + enableRowPinning + onRowPinningChange={onRowPinningChange} + />, + ); + + fireEvent.pointerDown( + screen.getAllByRole("button", { name: "Row actions" })[0], + ); + fireEvent.click(screen.getByText("Pin row to top")); + + expect(onRowPinningChange).toHaveBeenCalledWith({ + top: ["1"], + bottom: [], + }); + expect( + screen.getByText("Ada").closest('[data-dtp-slot="data-table-pinned-row"]') + ?.getAttribute("data-row-pinned"), + ).toBe("top"); + + fireEvent.pointerDown( + screen.getAllByRole("button", { name: "Row actions" })[0], + ); + fireEvent.click(screen.getByText("Unpin row")); + expect(onRowPinningChange).toHaveBeenLastCalledWith({ + top: [], + bottom: [], + }); + }); + + it("supports controlled row pinning, API methods, saved views, and persistence", () => { + const apiRef = React.createRef>(); + const storage = new MemoryStorage(); + render( + row.id} + enableRowPinning + persistence={{ key: "row-pinning", debounceMs: 0, storage }} + savedViews={{ key: "row-pinning", storage }} + />, + ); + + act(() => { + expect(apiRef.current?.pinRow("2", "bottom")).toBe(true); + }); + expect(apiRef.current?.getState().rowPinning).toEqual({ + top: [], + bottom: ["2"], + }); + expect(apiRef.current?.createSavedView("Pinned")).toBeDefined(); + expect(apiRef.current?.unpinRow("2")).toBe(true); + expect(apiRef.current?.applySavedView(apiRef.current.getSavedViews()[0]!.id)).toBe( + true, + ); + expect(apiRef.current?.getState().rowPinning).toEqual({ + top: [], + bottom: ["2"], + }); + + const persisted = JSON.parse( + storage.values.get("data-table-pro:column-prefs:row-pinning") ?? "{}", + ) as { state?: { rowPinning?: unknown } }; + expect(persisted.state?.rowPinning).toEqual({ top: [], bottom: ["2"] }); + }); + + it("honors keepPinnedRows when filters exclude a pinned row", () => { + const view = render( + row.id} + rowPinning={{ top: ["1"], bottom: [] }} + toolbarQueryValue="Grace" + keepPinnedRows={false} + />, + ); + + expect(screen.queryByText("Ada")).toBeNull(); + expect(screen.getByText("Grace")).not.toBeNull(); + + view.rerender( + row.id} + rowPinning={{ top: ["1"], bottom: [] }} + toolbarQueryValue="Grace" + keepPinnedRows + />, + ); + + expect(screen.getByText("Ada")).not.toBeNull(); + expect(screen.getByText("Grace")).not.toBeNull(); + }); + + it("pins nested rows resolved through getSubRows", () => { + const apiRef = React.createRef>(); + render( + row.id} + getSubRows={(row) => row.children} + initialState={{ expanded: { parent: true } }} + enableRowPinning + />, + ); + + act(() => { + expect(apiRef.current?.pinRow("child", "top")).toBe(true); + }); + + expect( + screen.getByText("Child").closest('[data-dtp-slot="data-table-pinned-row"]') + ?.getAttribute("data-row-pinned"), + ).toBe("top"); + }); + + it("copies delimited rows, handles opt-in paste, print, and fullscreen APIs", async () => { + const apiRef = React.createRef>(); + const onCopy = vi.fn(); + const onPaste = vi.fn(); + const print = vi.spyOn(window, "print").mockImplementation(() => {}); + const { container } = render( + row.id} + clipboard={{ + copy: { onCopy, scope: "all" }, + paste: { onPaste }, + }} + />, + ); + const root = container.querySelector( + '[data-dtp-slot="data-table-root"]', + ); + expect(root).not.toBeNull(); + + fireEvent.keyDown(root!, { ctrlKey: true, key: "c" }); + await waitFor(() => expect(onCopy).toHaveBeenCalled()); + const copyContext = onCopy.mock.calls[0]?.[0] as { text: string }; + expect(copyContext.text).toBe("Name\nAda\nGrace"); + + fireEvent.paste(root!, { + clipboardData: { + getData: () => 'Ada\t"Admin\nOwner"', + }, + }); + await waitFor(() => { + expect(onPaste).toHaveBeenCalledWith( + expect.objectContaining({ + text: 'Ada\t"Admin\nOwner"', + values: [["Ada", "Admin\nOwner"]], + }), + ); + }); + + expect(apiRef.current?.print()).toBe(true); + expect(print).toHaveBeenCalled(); + + const requestFullscreen = vi.fn().mockResolvedValue(undefined); + Object.defineProperty(root, "requestFullscreen", { + configurable: true, + value: requestFullscreen, + }); + await expect(apiRef.current?.toggleFullscreen()).resolves.toBe(true); + expect(requestFullscreen).toHaveBeenCalled(); + }); + + it("renders opt-in print/fullscreen toolbar controls and an error retry overlay", async () => { + const print = vi.spyOn(window, "print").mockImplementation(() => {}); + const requestFullscreen = vi.fn().mockResolvedValue(undefined); + const retry = vi.fn(); + Object.defineProperty(HTMLElement.prototype, "requestFullscreen", { + configurable: true, + value: requestFullscreen, + }); + + render( + row.id} + enablePrint + enableFullscreen + stateOverlay={{ error: new Error("Offline"), onRetry: retry }} + />, + ); + + fireEvent.click(screen.getByRole("button", { name: "Print table" })); + expect(print).toHaveBeenCalled(); + + fireEvent.click( + screen.getByRole("button", { name: "Enter fullscreen" }), + ); + await waitFor(() => expect(requestFullscreen).toHaveBeenCalled()); + + expect(await screen.findByRole("alert")).not.toBeNull(); + fireEvent.click(await screen.findByRole("button", { name: "Retry" })); + expect(retry).toHaveBeenCalled(); + }); + + it("does not render an error overlay for a null data-source error", () => { + render( + row.id} + stateOverlay={{ error: null }} + />, + ); + + expect(screen.queryByRole("alert")).toBeNull(); + }); + + it("validates edits and rolls back failed optimistic saves", async () => { + const saveError = new Error("save failed"); + const rollback = vi.fn(); + const onSaveRow = vi.fn().mockRejectedValue(saveError); + const onSaveError = vi.fn(); + const onActionError = vi.fn(); + render( + row.id} + editableRows={{ + onOptimisticUpdate: () => rollback, + onSaveError, + onSaveRow, + validateRow: (_row, draft) => + draft.name ? undefined : { name: "Name is required" }, + }} + onActionError={onActionError} + />, + ); + + fireEvent.pointerDown( + screen.getAllByRole("button", { name: "Row actions" })[0], + ); + fireEvent.click(screen.getByText("Edit row")); + const input = screen.getByDisplayValue("Ada"); + + fireEvent.change(input, { target: { value: "" } }); + fireEvent.keyDown(input, { key: "Enter" }); + expect((await screen.findByRole("alert")).textContent).toContain( + "Name is required", + ); + expect(onSaveRow).not.toHaveBeenCalled(); + + fireEvent.change(input, { target: { value: "Ada Lovelace" } }); + expect(screen.queryByRole("alert")).toBeNull(); + fireEvent.keyDown(input, { key: "Enter" }); + + await waitFor(() => expect(onSaveError).toHaveBeenCalled()); + expect(onSaveError).toHaveBeenCalledWith( + saveError, + rows[0], + expect.objectContaining({ name: "Ada Lovelace" }), + ); + expect(rollback).toHaveBeenCalled(); + expect(onActionError).toHaveBeenCalledWith( + expect.objectContaining({ error: saveError, source: "edit" }), + ); + }); + + it("configures resizing and keyboard reordering for RTL", () => { + const apiRef = React.createRef>(); + const onColumnOrderChange = vi.fn(); + const rtlColumns: Array> = [ + { accessorKey: "name", header: "Name" }, + { accessorKey: "id", header: "Identifier" }, + ]; + const { container } = render( + row.id} + onColumnOrderChange={onColumnOrderChange} + />, + ); + + expect(apiRef.current?.getTable()?.options.columnResizeDirection).toBe( + "rtl", + ); + const resizeHandle = container.querySelector(".cursor-col-resize"); + expect(resizeHandle?.className).toContain("rtl:left-0"); + + fireEvent.keyDown(screen.getByRole("columnheader", { name: "Name" }), { + altKey: true, + key: "ArrowLeft", + }); + expect(onColumnOrderChange).toHaveBeenLastCalledWith([ + "id", + "name", + ]); + }); + + it("accepts non-serializable controlled filter values", () => { + const circularFilter: Record = {}; + circularFilter.self = circularFilter; + + expect(() => + render( + row.id} + manualFiltering + />, + ), + ).not.toThrow(); + }); + it("exposes typed inspection, snapshot, restore, reset, focus, scroll, and export commands", async () => { const apiRef = React.createRef>(); const onExport = vi.fn(); @@ -301,6 +744,7 @@ describe("DataTable unified state API", () => { act(() => { apiRef.current?.restore({ sorting: [{ id: "name", desc: true }], + grouping: ["name"], columnVisibility: { name: false }, pagination: { pageIndex: 1, pageSize: 1 }, rowSelection: { "1": true }, @@ -315,6 +759,7 @@ describe("DataTable unified state API", () => { expect(savedView?.name).toBe("My view"); expect(savedView?.state.sorting).toEqual([{ id: "name", desc: true }]); + expect(savedView?.state.grouping).toEqual(["name"]); expect(savedView?.state.columnVisibility).toEqual({ name: false }); expect(savedView?.state.pagination).toBeUndefined(); expect(savedView?.state.rowSelection).toBeUndefined(); @@ -328,6 +773,7 @@ describe("DataTable unified state API", () => { act(() => { apiRef.current?.restore({ sorting: [], + grouping: [], columnVisibility: {}, }); }); @@ -337,6 +783,7 @@ describe("DataTable unified state API", () => { expect(apiRef.current?.getState().sorting).toEqual([ { id: "name", desc: true }, ]); + expect(apiRef.current?.getState().grouping).toEqual(["name"]); expect(onApply).toHaveBeenCalledWith( expect.objectContaining({ id: savedView?.id }), ); @@ -413,8 +860,10 @@ function createState(): DataTableState { columnVisibility: {}, columnFilters: [], expanded: {}, + grouping: [], columnOrder: [], columnPinning: {}, + rowPinning: { top: [], bottom: [] }, columnSizing: {}, density: "comfortable", viewMode: "table", diff --git a/src/core/data-table/data-table-state-overlay.tsx b/src/core/data-table/data-table-state-overlay.tsx new file mode 100644 index 0000000..e04b438 --- /dev/null +++ b/src/core/data-table/data-table-state-overlay.tsx @@ -0,0 +1,64 @@ +import * as React from "react"; +import type { + DataTableLabels, + DataTableStateOverlay, + DataTableStateOverlayContext, +} from "../types"; +import type { DataTableUiKit } from "../ui-kit"; + +export function createDataTableStateOverlay(ui: DataTableUiKit) { + const { Button } = ui; + + return function DataTableStateOverlay({ + labels, + overlay, + rows, + toolbarQueryValue, + }: { + labels: DataTableLabels; + overlay: DataTableStateOverlay; + rows: Array; + toolbarQueryValue: string; + }) { + if (overlay.error == null) { + return null; + } + const context: DataTableStateOverlayContext = { + rows, + toolbarQueryValue, + error: overlay.error, + isRetrying: overlay.isRetrying ?? false, + retry: overlay.onRetry, + }; + + return ( +
    + {overlay.renderError ? ( + overlay.renderError(context) + ) : ( +
    +
    {labels.errorTitle}
    +

    + {labels.errorDescription} +

    + {overlay.onRetry ? ( + + ) : null} +
    + )} +
    + ); + }; +} diff --git a/src/core/data-table/data-table-table-panel-router.tsx b/src/core/data-table/data-table-table-panel-router.tsx index 6d2c749..97e3bfa 100644 --- a/src/core/data-table/data-table-table-panel-router.tsx +++ b/src/core/data-table/data-table-table-panel-router.tsx @@ -22,7 +22,17 @@ export function DataTableTablePanelRouter( } return ( - }> + + } + > ); diff --git a/src/core/data-table/data-table-table-panel.tsx b/src/core/data-table/data-table-table-panel.tsx index 9ae551a..ffdee01 100644 --- a/src/core/data-table/data-table-table-panel.tsx +++ b/src/core/data-table/data-table-table-panel.tsx @@ -1,41 +1,61 @@ import * as React from "react"; import type { Column, + ExpandedState, + Header, + RowPinningPosition, Row, Table as TanStackTable, } from "@tanstack/react-table"; import type { DataTableDensity, + DataTableCellSelection, DataTableProps, DataTableRowLoadingState, } from "../types"; import type { DataTableUiClassNames, DataTableUiKit } from "../ui-kit"; import { cn } from "../../lib/utils"; -import { DataTableBodyRow } from "./data-table-body-row"; +import { + DataTableBodyRow, + type DataTableRowEditingContext, +} from "./data-table-body-row"; import { DataTableHeaderCell } from "./data-table-header-cell"; import type { DataTableColumnLayout } from "./use-column-layout"; -import { isDataTableLoadingRow } from "./data-table-utils"; +import { isDataTableLoadingRow, isUtilityColumnId } from "./data-table-utils"; import type { DataTableLabels } from "../types"; export type DataTableTablePanelProps = { + ariaDescribedBy: string | undefined; + ariaLabelledBy: string | undefined; bodyRowComponents: Pick< DataTableUiKit, "Checkbox" | "Input" | "Skeleton" | "TableCell" | "TableRow" >; + cellSelection: DataTableCellSelection | null; + cellSelectionEnabled: boolean; columnLayouts: ReadonlyMap; + columnGroupHeaderHeight: DataTableProps["columnGroupHeaderHeight"]; currentDensity: DataTableDensity; + currentDetailExpanded: ExpandedState; currentSorting: DataTableProps["sorting"]; + dir: NonNullable["dir"]>; DataTableEmptyState: React.ElementType; dragAndDrop: DataTableProps["dragAndDrop"]; draggedColumnIdRef: React.RefObject; draftValues: Record; editingRowId: string | null; + editingContext?: DataTableRowEditingContext; emptyNode: React.ReactNode; enableColumnReordering: boolean; enableColumnResizing: boolean; explicitCustomCellColumnIds: ReadonlySet; fillMinWidth: number; flexGrow: boolean; + gridMode: boolean; + gridPageSize?: number; + gridRowOffset: number; + onGridActiveRowIndexChange?: (rowIndex: number) => void; + onCellSelectionChange: (selection: DataTableCellSelection | null) => void; getColumnLayout: (columnId: string) => DataTableColumnLayout; getRowClassName: DataTableProps["getRowClassName"]; getRowLoadingState: DataTableProps["getRowLoadingState"]; @@ -45,7 +65,9 @@ export type DataTableTablePanelProps = { onRowClick: DataTableProps["onRowClick"]; primeColumnForResize: (columnId: string, currentSize: number) => void; renderedRows: Array>; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableProps["detailPanel"]; + topPinnedRows: Array>; + bottomPinnedRows: Array>; reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; resetColumnSize: (columnId: string) => void; resolvedLabels: DataTableLabels; @@ -55,7 +77,9 @@ export type DataTableTablePanelProps = { sentinelRef: React.RefObject; setDraftValues: React.Dispatch>>; shouldRenderInitialLoading: boolean; + stateOverlayNode?: React.ReactNode; stickyHeader: boolean; + stripedRows: boolean; summaryRows: NonNullable["summaryRows"]>; table: TanStackTable; tableClassName: string | undefined; @@ -69,6 +93,7 @@ export type DataTableTablePanelProps = { TableRow: DataTableUiKit["TableRow"]; tableScrollContainerRef: React.RefObject; tableScrollElement?: HTMLElement | null; + totalRowCount?: number; uiClassNames: DataTableUiClassNames; viewportHeight?: number; virtualization?: DataTableProps["virtualization"]; @@ -79,21 +104,34 @@ export type DataTableTablePanelProps = { }; export function DataTableTablePanel({ + ariaDescribedBy, + ariaLabelledBy, bodyRowComponents, + cellSelection, + cellSelectionEnabled, columnLayouts, + columnGroupHeaderHeight, currentDensity, + currentDetailExpanded, currentSorting = [], + dir, DataTableEmptyState, dragAndDrop, draggedColumnIdRef, draftValues, editingRowId, + editingContext, emptyNode, enableColumnReordering, enableColumnResizing, explicitCustomCellColumnIds, fillMinWidth, flexGrow, + gridMode, + gridPageSize, + gridRowOffset, + onGridActiveRowIndexChange, + onCellSelectionChange, getColumnLayout, getRowClassName, getRowLoadingState, @@ -103,7 +141,9 @@ export function DataTableTablePanel({ onRowClick, primeColumnForResize, renderedRows, - renderExpandedRow, + detailPanel, + topPinnedRows, + bottomPinnedRows, reorderColumn, resetColumnSize, resolvedLabels, @@ -113,7 +153,9 @@ export function DataTableTablePanel({ sentinelRef, setDraftValues, shouldRenderInitialLoading, + stateOverlayNode, stickyHeader, + stripedRows, summaryRows, table, tableClassName, @@ -126,6 +168,8 @@ export function DataTableTablePanel({ TableHeader, TableRow, tableScrollContainerRef, + tableScrollElement, + totalRowCount, uiClassNames, virtualPaddingBottom, virtualPaddingTop, @@ -138,12 +182,259 @@ export function DataTableTablePanel({ : table.getIsSomePageRowsSelected() ? "indeterminate" : false; + const filteredRows = table.getFilteredRowModel().rows; + const summarySourceRows = React.useMemo( + () => + summaryRows.length + ? filteredRows.map((row) => row.original) + : [], + [filteredRows, summaryRows.length], + ); + const headerRowCount = table.getHeaderGroups().length; + const displayRowCount = + topPinnedRows.length + renderedRows.length + bottomPinnedRows.length; + const [activeCell, setActiveCell] = React.useState({ row: 0, column: 0 }); + const shouldRestoreGridFocusRef = React.useRef(false); + const pointerSelectingRef = React.useRef(false); + const gridRows = React.useMemo( + () => [...topPinnedRows, ...renderedRows, ...bottomPinnedRows], + [bottomPinnedRows, renderedRows, topPinnedRows], + ); + const getGridCoordinate = React.useCallback( + (rowIndex: number, columnIndex: number) => { + const row = gridRows[rowIndex]; + const column = visibleLeafColumns[columnIndex]; + return row && + column && + !isUtilityColumnId(column.id) && + column.id !== "__spacer__" + ? { rowId: row.id, columnId: column.id } + : undefined; + }, + [gridRows, visibleLeafColumns], + ); + const selectedBounds = React.useMemo(() => { + if (!cellSelection) return undefined; + const anchorRow = gridRows.findIndex((row) => row.id === cellSelection.anchor.rowId); + const focusRow = gridRows.findIndex((row) => row.id === cellSelection.focus.rowId); + const anchorColumn = visibleLeafColumns.findIndex( + (column) => column.id === cellSelection.anchor.columnId, + ); + const focusColumn = visibleLeafColumns.findIndex( + (column) => column.id === cellSelection.focus.columnId, + ); + if (anchorRow < 0 || focusRow < 0 || anchorColumn < 0 || focusColumn < 0) return undefined; + return { + firstRow: Math.min(anchorRow, focusRow), + lastRow: Math.max(anchorRow, focusRow), + firstColumn: Math.min(anchorColumn, focusColumn), + lastColumn: Math.max(anchorColumn, focusColumn), + }; + }, [cellSelection, gridRows, visibleLeafColumns]); + const isGridCellSelected = React.useCallback( + (rowIndex: number, columnIndex: number) => + Boolean( + selectedBounds && + rowIndex >= selectedBounds.firstRow && + rowIndex <= selectedBounds.lastRow && + columnIndex >= selectedBounds.firstColumn && + columnIndex <= selectedBounds.lastColumn, + ), + [selectedBounds], + ); + const handleGridCellFocus = React.useCallback( + (cell: { row: number; column: number }) => { + shouldRestoreGridFocusRef.current = true; + setActiveCell(cell); + }, + [], + ); + const selectGridCell = React.useCallback( + (rowIndex: number, columnIndex: number, extend: boolean) => { + if (!cellSelectionEnabled) return; + const focus = getGridCoordinate(rowIndex, columnIndex); + if (!focus) return; + const anchor = + extend && cellSelection?.anchor + ? cellSelection.anchor + : focus; + onCellSelectionChange({ anchor, focus }); + }, + [cellSelection, cellSelectionEnabled, getGridCoordinate, onCellSelectionChange], + ); + const handleGridCellPointerDown = React.useCallback( + (event: React.PointerEvent, rowIndex: number, columnIndex: number) => { + if (!cellSelectionEnabled || event.button !== 0) return; + // Keep native text/image dragging from taking ownership of the pointer + // stream before the range reaches its destination cell. + event.preventDefault(); + pointerSelectingRef.current = true; + selectGridCell(rowIndex, columnIndex, event.shiftKey); + }, + [cellSelectionEnabled, selectGridCell], + ); + const handleGridCellPointerEnter = React.useCallback( + (event: React.PointerEvent, rowIndex: number, columnIndex: number) => { + if (!cellSelectionEnabled || !pointerSelectingRef.current || event.buttons !== 1) return; + selectGridCell(rowIndex, columnIndex, true); + }, + [cellSelectionEnabled, selectGridCell], + ); + React.useEffect(() => { + const stopSelecting = () => { pointerSelectingRef.current = false; }; + window.addEventListener("pointerup", stopSelecting); + return () => window.removeEventListener("pointerup", stopSelecting); + }, []); + + // Keep focus on the roving cell after sorting, filtering, or a virtual row + // range changes. A missing target is normal while a virtualizer is rendering. + React.useEffect(() => { + if (!gridMode) return; + onGridActiveRowIndexChange?.(activeCell.row); + const frame = requestAnimationFrame(() => { + const cells = tableScrollContainerRef.current?.querySelectorAll( + '[data-dtp-grid-cell="true"]', + ); + const target = Array.from(cells ?? []).find( + (cell) => + Number(cell.dataset.gridRowIndex) === activeCell.row && + Number(cell.dataset.gridColumnIndex) === activeCell.column, + ); + if (target && shouldRestoreGridFocusRef.current) { + target.focus(); + } + }); + return () => cancelAnimationFrame(frame); + }, [activeCell, gridMode, onGridActiveRowIndexChange, tableScrollContainerRef]); + + const moveGridFocus = React.useCallback( + (event: React.KeyboardEvent, row: number, column: number) => { + if (event.defaultPrevented || event.target !== event.currentTarget) return; + const pageRows = Math.max( + 1, + gridPageSize ?? ( + Math.floor( + (tableScrollElement?.clientHeight || 0) / + Math.max(1, (tableScrollElement?.querySelector("tr") as HTMLElement | null)?.offsetHeight || 48), + ) || 10), + ); + const lastRow = Math.max(0, displayRowCount - 1); + const lastColumn = Math.max(0, visibleLeafColumnCount - 1); + let nextRow = row; + let nextColumn = column; + switch (event.key) { + case "ArrowUp": nextRow--; break; + case "ArrowDown": nextRow++; break; + case "ArrowLeft": nextColumn--; break; + case "ArrowRight": nextColumn++; break; + case "Home": + if (event.ctrlKey || event.metaKey) { nextRow = 0; nextColumn = 0; } else nextColumn = 0; + break; + case "End": + if (event.ctrlKey || event.metaKey) { nextRow = lastRow; nextColumn = lastColumn; } else nextColumn = lastColumn; + break; + case "PageUp": nextRow -= pageRows; break; + case "PageDown": nextRow += pageRows; break; + default: return; + } + event.preventDefault(); + const nextCell = { + row: Math.min(lastRow, Math.max(0, nextRow)), + column: Math.min(lastColumn, Math.max(0, nextColumn)), + }; + setActiveCell(nextCell); + if (event.shiftKey && cellSelectionEnabled) { + const focus = getGridCoordinate(nextCell.row, nextCell.column); + const anchor = + cellSelection?.anchor ?? getGridCoordinate(row, column) ?? focus; + if (anchor && focus) onCellSelectionChange({ anchor, focus }); + } + }, + [ + cellSelection, + cellSelectionEnabled, + displayRowCount, + getGridCoordinate, + gridPageSize, + onCellSelectionChange, + tableScrollElement, + visibleLeafColumnCount, + ], + ); + const renderBodyRow = ( + row: Row, + rowIndex: number, + pinnedPosition?: Exclude, + ) => { + const originalRow = row.original; + const isInitialLoadingRow = isDataTableLoadingRow(originalRow); + const loadingState = isInitialLoadingRow + ? { isLoading: true } + : getRowLoadingState?.(originalRow, rowIndex); + const resolvedLoadingState: DataTableRowLoadingState | undefined = + typeof loadingState === "boolean" + ? { isLoading: loadingState } + : loadingState; + const isDraggable = isInitialLoadingRow + ? false + : (dragAndDrop?.getRowDraggable?.(originalRow) ?? false); + + return ( + + ); + }; return (
    ({ >
    ({ })} ({ )} > {table.getHeaderGroups().map((headerGroup) => ( - + {headerGroup.headers.map((header) => ( ({ } TableHead={TableHead} uiClassNames={uiClassNames} + gridMode={gridMode} + gridColumnIndex={ + header.isPlaceholder || header.subHeaders.length + ? undefined + : table.getVisibleLeafColumns().findIndex( + (column) => column.id === header.column.id, + ) + 1 + } /> ))} ))} - - {renderedRows.length ? ( + + {topPinnedRows.length || renderedRows.length || bottomPinnedRows.length ? ( <> + {topPinnedRows.map((row, index) => + renderBodyRow(row, index, "top"), + )} {virtualPaddingTop > 0 ? ( - {summaryRows.length ? ( - - {summaryRows.map((summaryRow) => ( - + + {summaryRows.map((summaryRow, summaryIndex) => ( + {visibleLeafColumns.map((column, index) => { const content = summaryRow.cells[column.id] ?? @@ -317,6 +619,8 @@ export function DataTableTablePanel({ return ( ({ > {typeof content === "function" ? content({ - rows: table - .getFilteredRowModel() - .rows.map((row) => row.original), + rows: summarySourceRows, columnId: column.id, }) : content} @@ -350,6 +652,45 @@ export function DataTableTablePanel({ + {stateOverlayNode} ); } + +function getHeaderLayout( + header: Header, + getColumnLayout: (columnId: string) => DataTableColumnLayout, +) { + const columnLayout = getColumnLayout(header.column.id); + if (header.isPlaceholder || !header.subHeaders.length) { + return columnLayout; + } + + const leafLayouts = header + .getLeafHeaders() + .filter((leafHeader) => !leafHeader.subHeaders.length) + .map((leafHeader) => getColumnLayout(leafHeader.column.id)); + const fixedSide = leafLayouts[0]?.fixedSide; + + if ( + !fixedSide || + !leafLayouts.every((layout) => layout.fixedSide === fixedSide) + ) { + return columnLayout; + } + + const edgeLayout = + fixedSide === "left" ? leafLayouts[0] : leafLayouts.at(-1); + + return { + ...columnLayout, + fixedSide, + headerStyle: edgeLayout?.headerStyle + ? { + left: edgeLayout.headerStyle.left, + right: edgeLayout.headerStyle.right, + } + : undefined, + pinnedClassName: edgeLayout?.pinnedClassName, + }; +} diff --git a/src/core/data-table/data-table-toolbar-operations.test.tsx b/src/core/data-table/data-table-toolbar-operations.test.tsx new file mode 100644 index 0000000..10ca398 --- /dev/null +++ b/src/core/data-table/data-table-toolbar-operations.test.tsx @@ -0,0 +1,111 @@ +import * as React from "react"; +import { fireEvent, render, screen } from "@testing-library/react"; +import { describe, expect, it, vi } from "vitest"; +import { DataTable } from "../../index"; +import type { DataTableColumnDef } from "../types"; + +type RowData = { id: string; name: string; role: string }; + +const columns: Array> = [ + { accessorKey: "name", header: "Name" }, + { accessorKey: "role", header: "Role" }, +]; + +const rows: Array = [ + { id: "1", name: "Ada", role: "Admin" }, + { id: "2", name: "Grace", role: "Editor" }, +]; + +function openTableOptions() { + fireEvent.pointerDown(screen.getByRole("button", { name: "Show table options" })); +} + +describe("DataTable toolbar data operations", () => { + it("renders the enhanced searchable column chooser and layout controls only when opted in", async () => { + const onColumnOrderChange = vi.fn(); + render( + row.id} + enableColumnPinning + onColumnOrderChange={onColumnOrderChange} + toolbarDataOperations={{ columnChooser: true, resetLayout: true }} + />, + ); + + openTableOptions(); + expect(await screen.findByLabelText("Search columns")).toBeTruthy(); + expect(screen.getByText("Show all columns")).toBeTruthy(); + expect(screen.getByText("Hide all columns")).toBeTruthy(); + expect(screen.getByText("Reset column layout")).toBeTruthy(); + + fireEvent.change(screen.getByLabelText("Search columns"), { + target: { value: "Role" }, + }); + expect(screen.getByRole("menuitem", { name: "Move Role earlier" })).toBeTruthy(); + expect(screen.queryByRole("menuitem", { name: "Move Name earlier" })).toBeNull(); + fireEvent.click(screen.getByRole("menuitem", { name: "Move Role earlier" })); + expect(onColumnOrderChange).toHaveBeenCalledWith(["role", "name"]); + }); + + it("creates, applies, renames, and deletes saved views from the opted-in menu", async () => { + const values = new Map(); + const storage = { + getItem: (key: string) => values.get(key) ?? null, + setItem: (key: string, value: string) => values.set(key, value), + removeItem: (key: string) => values.delete(key), + }; + const onApply = vi.fn(); + render( + row.id} + savedViews={{ key: "toolbar-views", storage, onApply }} + toolbarDataOperations={{ savedViews: true }} + />, + ); + + openTableOptions(); + fireEvent.change(await screen.findByLabelText("View name"), { + target: { value: "Operations" }, + }); + fireEvent.click(screen.getByRole("menuitem", { name: "Create saved view" })); + expect(screen.getByRole("menuitem", { name: "Operations" })).toBeTruthy(); + + fireEvent.click(screen.getByRole("menuitem", { name: "Operations" })); + expect(onApply).toHaveBeenCalled(); + fireEvent.click(screen.getByRole("menuitem", { name: "Rename saved view Operations" })); + const inputs = screen.getAllByLabelText("View name"); + fireEvent.change(inputs.at(-1)!, { target: { value: "Ops" } }); + fireEvent.click(screen.getByRole("menuitem", { name: "Save view" })); + expect(screen.getByRole("menuitem", { name: "Delete saved view Ops" })).toBeTruthy(); + fireEvent.click(screen.getByRole("menuitem", { name: "Delete saved view Ops" })); + expect(screen.queryByRole("menuitem", { name: "Ops" })).toBeNull(); + }); + + it("shows removable active filter chips only with toolbar operations enabled", async () => { + const onColumnFiltersChange = vi.fn(); + render( + row.id} + columnFilters={[{ id: "role", value: "Admin" }]} + onColumnFiltersChange={onColumnFiltersChange} + toolbarDataOperations + />, + ); + + expect(await screen.findByLabelText("Filters: 1")).toBeTruthy(); + fireEvent.click(screen.getByLabelText("Clear filters: Role")); + expect(onColumnFiltersChange).toHaveBeenCalledWith([]); + }); +}); diff --git a/src/core/data-table/data-table-toolbar-operations.tsx b/src/core/data-table/data-table-toolbar-operations.tsx new file mode 100644 index 0000000..c5d38a5 --- /dev/null +++ b/src/core/data-table/data-table-toolbar-operations.tsx @@ -0,0 +1,416 @@ +import * as React from "react"; +import type { Table } from "@tanstack/react-table"; +import { IconSearch } from "../icons"; +import type { + DataTableColumnFixed, + DataTableColumnVisibilityOption, + DataTableLabels, + DataTableSavedView, +} from "../types"; +import type { DataTableUiKit } from "../ui-kit"; + +type ToolbarUi = Pick< + DataTableUiKit, + | "Button" + | "DropdownMenuCheckboxItem" + | "DropdownMenuGroup" + | "DropdownMenuItem" + | "DropdownMenuLabel" + | "DropdownMenuSeparator" + | "InputGroup" + | "InputGroupAddon" + | "InputGroupInput" +>; + +type ActiveFilter = { id: string; label: string; value: unknown }; + +type ToolbarDataOperationsProps = { + placement: "menu" | "chips"; + ui: ToolbarUi; + labels: Required; + enableColumnChooser: boolean; + enableFilterChips: boolean; + enableResetLayout: boolean; + enableSavedViews: boolean; + enableColumnPinning: boolean; + columnVisibilityOptions: Array; + onColumnVisibilityChange?: (columnId: string, visible: boolean) => void; + onColumnPinningChange: ( + columnId: string, + side: DataTableColumnFixed | false, + ) => void; + reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; + table: Table; + onResetColumnLayout: () => void; + savedViews: Array; + onCreateSavedView: (name: string) => DataTableSavedView | undefined; + onApplySavedView: (id: string) => boolean; + onRenameSavedView: ( + id: string, + name: string, + ) => DataTableSavedView | undefined; + onDeleteSavedView: (id: string) => boolean; + toolbarQueryValue: string; + onToolbarQueryValueChange: (value: string) => void; + activeColumnFilters: Array; + onColumnFilterChange: (columnId: string, value: unknown) => void; + onClearColumnFilters: () => void; +}; + +export default function ToolbarDataOperations({ + placement, + ui, + labels, + enableColumnChooser, + enableFilterChips, + enableResetLayout, + enableSavedViews, + enableColumnPinning, + columnVisibilityOptions, + onColumnVisibilityChange, + onColumnPinningChange, + reorderColumn, + table, + onResetColumnLayout, + savedViews, + onCreateSavedView, + onApplySavedView, + onRenameSavedView, + onDeleteSavedView, + toolbarQueryValue, + onToolbarQueryValueChange, + activeColumnFilters, + onColumnFilterChange, + onClearColumnFilters, +}: ToolbarDataOperationsProps) { + const [columnQuery, setColumnQuery] = React.useState(""); + const [newSavedViewName, setNewSavedViewName] = React.useState(""); + const [renamingSavedViewId, setRenamingSavedViewId] = React.useState< + string | null + >(null); + const [renamedSavedViewName, setRenamedSavedViewName] = React.useState(""); + const { + Button, + DropdownMenuCheckboxItem, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + InputGroup, + InputGroupAddon, + InputGroupInput, + } = ui; + const orderedIds = table + .getAllLeafColumns() + .map((column) => column.id) + .filter((id) => !id.startsWith("__")); + const columns = columnVisibilityOptions.filter((column) => + column.label.toLocaleLowerCase().includes(columnQuery.toLocaleLowerCase()), + ); + const activeCount = activeColumnFilters.length + (toolbarQueryValue ? 1 : 0); + + if (placement === "chips") { + if (!enableFilterChips || !activeCount) { + return null; + } + return ( +
    + + {labels.filters} ({activeCount}) + + {toolbarQueryValue ? ( + + ) : null} + {activeColumnFilters.map((filter) => ( + + ))} + +
    + ); + } + + if (!enableColumnChooser && !enableResetLayout && !enableSavedViews) { + return null; + } + const setVisibility = (visible: boolean) => + table.setColumnVisibility((current) => { + const next = { ...current }; + for (const column of table.getAllLeafColumns()) { + if (!column.id.startsWith("__") && column.getCanHide()) { + next[column.id] = visible; + } + } + return next; + }); + const move = (id: string, direction: -1 | 1) => { + const index = orderedIds.indexOf(id); + const target = orderedIds[index + direction]; + if (index >= 0 && target) { + reorderColumn(id, target); + } + }; + return ( + <> + {enableColumnChooser ? ( + <> + + {labels.columns} +
    + + ) => + setColumnQuery(event.target.value) + } + placeholder={labels.searchColumns} + aria-label={labels.searchColumns} + /> + + +
    + + { + event.preventDefault(); + setVisibility(true); + }} + > + {labels.showAllColumns} + + { + event.preventDefault(); + setVisibility(false); + }} + > + {labels.hideAllColumns} + + {columns.map((column) => { + const index = orderedIds.indexOf(column.id); + return ( + + + onColumnVisibilityChange?.( + column.id, + checked === true, + ) + } + > + {column.label} + + { + event.preventDefault(); + move(column.id, -1); + }} + > + {labels.moveColumnEarlier(column.label)} + + { + event.preventDefault(); + move(column.id, 1); + }} + > + {labels.moveColumnLater(column.label)} + + {enableColumnPinning ? ( + <> + { + event.preventDefault(); + onColumnPinningChange(column.id, "left"); + }} + > + {labels.pinLeft}: {column.label} + + { + event.preventDefault(); + onColumnPinningChange(column.id, "right"); + }} + > + {labels.pinRight}: {column.label} + + { + event.preventDefault(); + onColumnPinningChange(column.id, false); + }} + > + {labels.unpin}: {column.label} + + + ) : null} + + ); + })} + + + ) : null} + {enableResetLayout ? ( + <> + + { + event.preventDefault(); + onResetColumnLayout(); + }} + > + {labels.resetColumnLayout} + + + ) : null} + {enableSavedViews ? ( + <> + + {labels.savedViews} +
    + + ) => + setNewSavedViewName(event.target.value) + } + placeholder={labels.savedViewName} + aria-label={labels.savedViewName} + /> + +
    + { + event.preventDefault(); + if (onCreateSavedView(newSavedViewName.trim())) { + setNewSavedViewName(""); + } + }} + > + {labels.createSavedView} + + + {savedViews.map((view) => + renamingSavedViewId === view.id ? ( +
    + + , + ) => setRenamedSavedViewName(event.target.value)} + aria-label={labels.savedViewName} + /> + + { + event.preventDefault(); + if ( + renamedSavedViewName.trim() && + onRenameSavedView( + view.id, + renamedSavedViewName.trim(), + ) + ) { + setRenamingSavedViewId(null); + } + }} + > + {labels.saveSavedView} + +
    + ) : ( + + { + event.preventDefault(); + onApplySavedView(view.id); + }} + > + {view.name} + + { + event.preventDefault(); + setRenamingSavedViewId(view.id); + setRenamedSavedViewName(view.name); + }} + > + {labels.renameSavedView(view.name)} + + { + event.preventDefault(); + onDeleteSavedView(view.id); + }} + > + {labels.deleteSavedView(view.name)} + + + ), + )} +
    + + ) : null} + + ); +} + +function formatValue(value: unknown) { + if (Array.isArray(value)) { + return value.map(String).join(", "); + } + if (value && typeof value === "object") { + const range = value as { from?: unknown; to?: unknown }; + if ("from" in range || "to" in range) { + return [range.from, range.to] + .filter(Boolean) + .map(String) + .join("–"); + } + } + return String(value); +} diff --git a/src/core/data-table/data-table-toolbar-section.tsx b/src/core/data-table/data-table-toolbar-section.tsx index 2dbe9b1..e4de588 100644 --- a/src/core/data-table/data-table-toolbar-section.tsx +++ b/src/core/data-table/data-table-toolbar-section.tsx @@ -1,6 +1,10 @@ import * as React from "react"; import type { Table as TanStackTable } from "@tanstack/react-table"; -import type { DataTableLabels, DataTableProps } from "../types"; +import type { + DataTableLabels, + DataTableProps, + DataTableSavedView, +} from "../types"; type DataTableToolbarSectionProps = { allRows: Array; @@ -10,8 +14,14 @@ type DataTableToolbarSectionProps = { customToolbar: React.ReactNode; DataTableToolbar: React.ElementType; description: string | undefined; + descriptionId: string | undefined; effectiveToolbarActions: Array; enableColumnPinning: boolean; + enableGrouping: boolean; + enableToolbarColumnChooser: boolean; + enableToolbarFilterChips: boolean; + enableToolbarResetLayout: boolean; + enableToolbarSavedViews: boolean; enableDensityToggle: boolean; enableViewToggle: boolean; hiddenRowsLabel: string | undefined; @@ -22,13 +32,22 @@ type DataTableToolbarSectionProps = { onDensityChange: (density: "compact" | "comfortable" | "spacious") => void; onShowHiddenRowsChange: (showHiddenRows: boolean) => void; onToolbarQueryValueChange: (value: string) => void; + reorderColumn: (sourceColumnId: string, targetColumnId: string) => void; + onResetColumnLayout: () => void; + onCreateSavedView: (name: string) => DataTableSavedView | undefined; + onApplySavedView: (id: string) => boolean; + onRenameSavedView: (id: string, name: string) => DataTableSavedView | undefined; + onDeleteSavedView: (id: string) => boolean; onViewModeChange: (viewMode: "table" | "card") => void; openFileDialog: (() => void) | undefined; + selectedRowIds: Array; selectedRows: Array; selectionActions: DataTableProps["selectionActions"]; + savedViews: Array; showHiddenRows: boolean; table: TanStackTable; title: string | undefined; + titleId: string | undefined; toolbarQueryPlaceholder: string; toolbarQueryValue: string; toolbarVisibility: DataTableProps["toolbarVisibility"]; @@ -44,8 +63,14 @@ export function DataTableToolbarSection({ customToolbar, DataTableToolbar, description, + descriptionId, effectiveToolbarActions, enableColumnPinning, + enableGrouping, + enableToolbarColumnChooser, + enableToolbarFilterChips, + enableToolbarResetLayout, + enableToolbarSavedViews, enableDensityToggle, enableViewToggle, hiddenRowsLabel, @@ -56,13 +81,22 @@ export function DataTableToolbarSection({ onDensityChange, onShowHiddenRowsChange, onToolbarQueryValueChange, + reorderColumn, + onResetColumnLayout, + onCreateSavedView, + onApplySavedView, + onRenameSavedView, + onDeleteSavedView, onViewModeChange, openFileDialog, + selectedRowIds, selectedRows, selectionActions, + savedViews, showHiddenRows, table, title, + titleId, toolbarQueryPlaceholder, toolbarQueryValue, toolbarVisibility, @@ -73,10 +107,13 @@ export function DataTableToolbarSection({
    ({ enableViewToggle={enableViewToggle} toolbarActions={effectiveToolbarActions} selectionActions={selectionActions} + selectedRowIds={selectedRowIds} selectedRows={selectedRows} showHiddenRows={showHiddenRows} hiddenRowsLabel={hiddenRowsLabel} @@ -94,16 +132,28 @@ export function DataTableToolbarSection({ table.getColumn(columnId)?.toggleVisibility(visible); }} enableColumnPinning={enableColumnPinning} + enableGrouping={enableGrouping} + enableToolbarColumnChooser={enableToolbarColumnChooser} + enableToolbarFilterChips={enableToolbarFilterChips} + enableToolbarResetLayout={enableToolbarResetLayout} + enableToolbarSavedViews={enableToolbarSavedViews} onColumnPinningChange={onColumnPinningChange} columnFilters={columnFilters} onColumnFilterChange={onColumnFilterChange} onClearColumnFilters={onClearColumnFilters} + onResetColumnLayout={onResetColumnLayout} + onCreateSavedView={onCreateSavedView} + onApplySavedView={onApplySavedView} + onRenameSavedView={onRenameSavedView} + onDeleteSavedView={onDeleteSavedView} density={density} onDensityChange={onDensityChange} enableDensityToggle={enableDensityToggle} labels={labels} toolbarVisibility={toolbarVisibility} openFileDialog={openFileDialog} + savedViews={savedViews} + table={table} />
    ); diff --git a/src/core/data-table/data-table-utils.ts b/src/core/data-table/data-table-utils.ts index c0b2cb0..c03050b 100644 --- a/src/core/data-table/data-table-utils.ts +++ b/src/core/data-table/data-table-utils.ts @@ -2,6 +2,7 @@ import type { Column, ColumnDef, ColumnPinningState, + ExpandedState, Row, Table as TanStackTable, } from "@tanstack/react-table"; @@ -20,6 +21,28 @@ const DATA_TABLE_LOADING_ROW = Symbol("data-table-loading-row"); export const UTILITY_COLUMN_SIZE = 50; +export function toggleDataTableExpandedState( + current: ExpandedState, + rowId: string, + loadedRowIds: Array, +): ExpandedState { + if (current === true) { + return Object.fromEntries( + loadedRowIds.flatMap((loadedRowId) => + loadedRowId === rowId ? [] : [[loadedRowId, true]], + ), + ); + } + + const next = { ...current }; + if (next[rowId]) { + delete next[rowId]; + } else { + next[rowId] = true; + } + return next; +} + type DataTableLoadingRow = { [DATA_TABLE_LOADING_ROW]: true; index: number; @@ -97,7 +120,7 @@ export function decorateFilterableColumn( filter.getOptionValue?.(value, row.original) ?? normalizeFilterValue(value); - if (filter.type === "multi") { + if (filter.type === "multi" || filter.type === "faceted") { return Array.isArray(filterValue) ? filterValue.map(String).includes(optionValue) : true; @@ -107,13 +130,160 @@ export function decorateFilterableColumn( return optionValue === String(filterValue); } - return normalizeFilterValue(value) - .toLowerCase() - .includes(String(filterValue).toLowerCase()); + if (filter.type === "boolean") { + return optionValue === String(filterValue); + } + + if (filter.type === "numberRange") { + const range = normalizeRangeFilterValue(filterValue); + const numericValue = Number(optionValue); + const from = range.from === "" ? undefined : Number(range.from); + const to = range.to === "" ? undefined : Number(range.to); + + if (Number.isNaN(numericValue)) { + return false; + } + + return ( + (from === undefined || Number.isNaN(from) || numericValue >= from) && + (to === undefined || Number.isNaN(to) || numericValue <= to) + ); + } + + if (filter.type === "dateRange") { + const range = normalizeRangeFilterValue(filterValue); + const dateValue = normalizeDateFilterValue(optionValue); + + if (!dateValue) { + return false; + } + + return ( + (!range.from || dateValue >= String(range.from)) && + (!range.to || dateValue <= String(range.to)) + ); + } + + const normalizedValue = optionValue.toLowerCase(); + const normalizedQuery = String(filterValue).toLowerCase(); + + switch (filter.operator ?? "contains") { + case "equals": + return normalizedValue === normalizedQuery; + case "startsWith": + return normalizedValue.startsWith(normalizedQuery); + case "endsWith": + return normalizedValue.endsWith(normalizedQuery); + default: + return normalizedValue.includes(normalizedQuery); + } }, }; } +export type DataTableLeafColumn = { + column: DataTableColumnDef; + index: number; +}; + +export type DataTableColumnGroupPathSegment = { + id: string; + freeReordering: boolean; +}; + +export type DataTableColumnGroupPaths = ReadonlyMap< + string, + ReadonlyArray +>; + +/** + * Returns the nested shared-header path for every leaf. The path deliberately + * uses stable column ids rather than header text so it also works with custom + * header render functions. + */ +export function getDataTableColumnGroupPaths( + columns: Array>, +): DataTableColumnGroupPaths { + const paths = new Map< + string, + ReadonlyArray + >(); + + const visit = ( + currentColumns: Array>, + parentPath: ReadonlyArray, + ) => { + currentColumns.forEach((column, index) => { + if ("columns" in column && column.columns?.length) { + const group = column as DataTableColumnDef & { + freeReordering?: boolean; + }; + visit(column.columns, [ + ...parentPath, + { + id: getColumnId(column, index), + freeReordering: group.freeReordering === true, + }, + ]); + return; + } + + paths.set(getColumnId(column, index), parentPath); + }); + }; + + visit(columns, []); + return paths; +} + +/** + * Locked groups preserve their shared heading by default. Reordering within a + * common group path is always allowed; leaving or entering a group requires + * each crossed group to explicitly opt into `freeReordering`. + */ +export function canReorderDataTableColumn( + sourceColumnId: string, + targetColumnId: string, + groupPaths: DataTableColumnGroupPaths, +) { + const sourcePath = groupPaths.get(sourceColumnId) ?? []; + const targetPath = groupPaths.get(targetColumnId) ?? []; + let commonLength = 0; + + while ( + commonLength < sourcePath.length && + commonLength < targetPath.length && + sourcePath[commonLength]?.id === targetPath[commonLength]?.id + ) { + commonLength += 1; + } + + return [ + ...sourcePath.slice(commonLength), + ...targetPath.slice(commonLength), + ].every((group) => group.freeReordering); +} + +export function getDataTableLeafColumns( + columns: Array>, +) { + const leaves: Array> = []; + + const visit = (currentColumns: Array>) => { + currentColumns.forEach((column, index) => { + if ("columns" in column && column.columns?.length) { + visit(column.columns); + return; + } + + leaves.push({ column, index }); + }); + }; + + visit(columns); + return leaves; +} + export function normalizeColumnFilterOptions( options: Array, ) { @@ -159,9 +329,52 @@ export function hasFilterValue(value: unknown) { return value.length > 0; } + if (value && typeof value === "object") { + if ("from" in value || "to" in value) { + return Object.values(value).some(hasFilterValue); + } + + return true; + } + return value !== undefined && value !== null && value !== ""; } +function normalizeRangeFilterValue(value: unknown): { + from?: string | number; + to?: string | number; +} { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + + const range = value as { from?: unknown; to?: unknown }; + return { + ...(typeof range.from === "string" || typeof range.from === "number" + ? { from: range.from } + : {}), + ...(typeof range.to === "string" || typeof range.to === "number" + ? { to: range.to } + : {}), + }; +} + +function normalizeDateFilterValue(value: unknown) { + if (value instanceof Date && !Number.isNaN(value.getTime())) { + return value.toISOString().slice(0, 10); + } + + const normalized = normalizeFilterValue(value); + if (/^\d{4}-\d{2}-\d{2}/.test(normalized)) { + return normalized.slice(0, 10); + } + + const timestamp = Date.parse(normalized); + return Number.isNaN(timestamp) + ? "" + : new Date(timestamp).toISOString().slice(0, 10); +} + export function dataTableGlobalFilterFn( row: Row, columnId: string, @@ -180,6 +393,10 @@ export function dataTableGlobalFilterFn( .includes(normalizedQuery); } +export function normalizeDataTableSearchText(value: unknown) { + return normalizeFilterValue(value).trim().toLowerCase(); +} + export async function exportDataTableCsv({ csvExport, table, @@ -207,7 +424,7 @@ export async function exportDataTableCsv({ column.id !== "__spacer__" && (!exportColumnIds || exportColumnIds.has(column.id)), ); - const rows = getCsvExportRows(table, scope); + const rows = getDataTableExportRows(table, scope); const csvRows: Array> = []; if (options.includeHeaders ?? true) { @@ -269,7 +486,7 @@ export async function exportDataTableCsv({ window.URL.revokeObjectURL(url); } -function getCsvExportRows( +export function getDataTableExportRows( table: TanStackTable, scope: DataTableCsvExportScope, ) { @@ -308,7 +525,7 @@ export function getInitialColumnPinning( const left: Array = []; const right: Array = []; - for (const [index, column] of columns.entries()) { + for (const { column, index } of getDataTableLeafColumns(columns)) { const columnId = getColumnId(column, index); if (column.meta?.fixed === "left") { left.push(columnId); @@ -323,7 +540,7 @@ export function getInitialColumnPinning( export function getColumnId( column: DataTableColumnDef, - index: number, + _index?: number, ) { if (column.id) { return column.id; @@ -331,10 +548,50 @@ export function getColumnId( const accessorKey = getAccessorKey(column); if (accessorKey) { - return accessorKey; + return accessorKey.replace(/\./g, "_"); } - return `column-${index}`; + if (typeof column.header === "string") { + return column.header; + } + + throw new Error( + "Data table columns using an accessor function or non-string header must define a unique id.", + ); +} + +const RESERVED_DATA_TABLE_COLUMN_IDS = new Set([ + "__select__", + "__expand__", + "__actions__", + "__spacer__", +]); + +export function validateDataTableColumnIds( + columns: Array>, +) { + const ids = new Set(); + + const visit = (currentColumns: Array>) => { + currentColumns.forEach((column, index) => { + const id = getColumnId(column, index); + if (RESERVED_DATA_TABLE_COLUMN_IDS.has(id)) { + throw new Error( + `Data table column id "${id}" is reserved for an internal column.`, + ); + } + if (ids.has(id)) { + throw new Error(`Duplicate data table column id "${id}".`); + } + ids.add(id); + + if ("columns" in column && column.columns?.length) { + visit(column.columns); + } + }); + }; + + visit(columns); } export function getAccessorKey( @@ -392,6 +649,37 @@ export function isUtilityColumnId(columnId: string) { ); } +const DATA_TABLE_INTERACTIVE_TARGET_SELECTOR = [ + "[data-row-click-ignore='true']", + "a[href]", + "button", + "input", + "select", + "summary", + "textarea", + "[contenteditable='true']", + "[role='button']", + "[role='link']", +].join(","); + +export function isDataTableInteractiveTarget( + target: EventTarget | null, + boundary: Element, +) { + if (!(target instanceof Element)) { + return false; + } + + const interactiveTarget = target.closest( + DATA_TABLE_INTERACTIVE_TARGET_SELECTOR, + ); + return Boolean( + interactiveTarget && + interactiveTarget !== boundary && + boundary.contains(interactiveTarget), + ); +} + export function getDensityHeaderClassName(density: DataTableDensity) { switch (density) { case "compact": diff --git a/src/core/data-table/data-table-virtual-card-panel.tsx b/src/core/data-table/data-table-virtual-card-panel.tsx index 55a3455..1916bc3 100644 --- a/src/core/data-table/data-table-virtual-card-panel.tsx +++ b/src/core/data-table/data-table-virtual-card-panel.tsx @@ -2,8 +2,8 @@ import * as React from "react"; import type { Row } from "@tanstack/react-table"; import { useVirtualizer } from "@tanstack/react-virtual"; import { cn } from "../../lib/utils"; +import { DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS } from "../types"; import type { DataTableCardPanelProps } from "./data-table-card-panel-types"; -import { useDataTableContainerWidth } from "./use-data-table-container-width"; import { useDataTableScrollViewport } from "./use-data-table-scroll-viewport"; export function DataTableVirtualCardPanel({ @@ -11,7 +11,9 @@ export function DataTableVirtualCardPanel({ cardGridClassName, cardSizing, cardRenderer, + containerWidth, currentRowSelection, + currentDetailExpanded, DataTableCardView, DataTableEmptyState, dragAndDrop, @@ -26,15 +28,17 @@ export function DataTableVirtualCardPanel({ localSearchValue, onRowClick, renderedRows, - renderExpandedRow, + detailPanel, resolvedLabels, resolvedLoadingRowCount, rowActions = [], ScrollArea, sentinelRef, + setCurrentDetailExpanded, setCurrentRowSelection, setEditingRowId, shouldRenderInitialLoading, + stateOverlayNode, tableContainerClassName, uiClassNames, virtualization, @@ -45,7 +49,6 @@ export function DataTableVirtualCardPanel({ cardScrollContainerRef, shouldRenderCards, ); - const containerWidth = useDataTableContainerWidth(cardScrollContainerRef); const virtualizationConfig = typeof virtualization === "object" ? virtualization.card : undefined; const enableCardVirtualization = @@ -59,11 +62,16 @@ export function DataTableVirtualCardPanel({ const virtualRowCount = Math.ceil(renderedRows.length / lanes); const shouldUseVirtualCardRows = enableCardVirtualization && Boolean(viewportElement) && viewportHeight > 0; + const getItemKey = React.useCallback( + (index: number) => renderedRows[index * lanes]?.id ?? index, + [lanes, renderedRows], + ); // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Virtual owns its instance functions. const cardVirtualizer = useVirtualizer({ count: enableCardVirtualization ? virtualRowCount : 0, enabled: shouldUseVirtualCardRows, estimateSize: () => virtualizationConfig?.estimateCardHeight ?? 280, + getItemKey, getScrollElement: () => viewportElement, overscan: virtualizationConfig?.overscan ?? 4, }); @@ -86,7 +94,9 @@ export function DataTableVirtualCardPanel({ cardSizing={cardSizing} rowActions={rowActions} editableRows={editableRows} - renderExpandedRow={renderExpandedRow} + detailPanel={detailPanel} + detailExpanded={currentDetailExpanded} + onDetailExpandedChange={setCurrentDetailExpanded} hasCardTitle={hasCardTitle} rowSelection={currentRowSelection} onRowSelectionChange={setCurrentRowSelection} @@ -109,7 +119,7 @@ export function DataTableVirtualCardPanel({ ref={cardScrollContainerRef} data-dtp-slot="data-table-card-shell" className={cn( - "box-border border-2 border-transparent transition-colors", + "relative box-border border-2 border-transparent transition-colors", flexGrow ? "flex min-h-0 flex-1 flex-col" : "h-full", dragAndDrop?.isDragging && (uiClassNames.dragActive ?? "rounded-md border-dashed"), @@ -171,7 +181,17 @@ export function DataTableVirtualCardPanel({ })} ) : ( - renderCardView(renderedRows) + renderCardView( + renderedRows.slice( + 0, + Math.max( + 1, + Math.floor( + virtualizationConfig?.fallbackCardCount ?? 12, + ), + ), + ), + ) ) ) : (
    @@ -199,6 +219,7 @@ export function DataTableVirtualCardPanel({ ) : null}
    + {stateOverlayNode} ); } @@ -215,16 +236,16 @@ function resolveCardVirtualizationLanes( return 1; } - if (containerWidth >= 1536) { + if (containerWidth >= DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS["2xl"]) { return 5; } - if (containerWidth >= 1280) { + if (containerWidth >= DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS.xl) { return 4; } - if (containerWidth >= 1024) { + if (containerWidth >= DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS.lg) { return 3; } - if (containerWidth >= 640) { + if (containerWidth >= DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS.sm) { return 2; } return 1; diff --git a/src/core/data-table/data-table-virtual-row-measurement.tsx b/src/core/data-table/data-table-virtual-row-measurement.tsx new file mode 100644 index 0000000..5ea86a6 --- /dev/null +++ b/src/core/data-table/data-table-virtual-row-measurement.tsx @@ -0,0 +1,25 @@ +import * as React from "react"; + +const DataTableVirtualRowMeasurementContext = React.createContext< + ((element: HTMLTableRowElement | null) => void) | undefined +>(undefined); + +export function DataTableVirtualRowMeasurementProvider({ + children, + measureRow, +}: { + children: React.ReactNode; + measureRow: ((element: HTMLTableRowElement | null) => void) | undefined; +}) { + return ( + + {children} + + ); +} + +export function useDataTableVirtualRowMeasurement(): + | ((element: HTMLTableRowElement | null) => void) + | undefined { + return React.useContext(DataTableVirtualRowMeasurementContext); +} diff --git a/src/core/data-table/data-table-virtual-table-panel.tsx b/src/core/data-table/data-table-virtual-table-panel.tsx index c781cc6..eccc6b7 100644 --- a/src/core/data-table/data-table-virtual-table-panel.tsx +++ b/src/core/data-table/data-table-virtual-table-panel.tsx @@ -1,6 +1,8 @@ +import * as React from "react"; import { useVirtualizer } from "@tanstack/react-virtual"; import { DataTableTablePanel } from "./data-table-table-panel"; import type { DataTableTablePanelProps } from "./data-table-table-panel"; +import { DataTableVirtualRowMeasurementProvider } from "./data-table-virtual-row-measurement"; export function DataTableVirtualTablePanel( props: DataTableTablePanelProps, @@ -19,12 +21,17 @@ export function DataTableVirtualTablePanel( (virtualization === true || virtualizationConfig?.enabled === true); const shouldUseVirtualRows = enableVirtualization && Boolean(tableScrollElement) && viewportHeight > 0; + const getItemKey = React.useCallback( + (index: number) => renderedRows[index]?.id ?? index, + [renderedRows], + ); // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Virtual owns its instance functions. const rowVirtualizer = useVirtualizer({ count: enableVirtualization ? renderedRows.length : 0, enabled: shouldUseVirtualRows, estimateSize: () => virtualizationConfig?.estimateRowHeight ?? 48, + getItemKey, getScrollElement: () => tableScrollElement ?? null, overscan: virtualizationConfig?.overscan ?? 8, }); @@ -36,7 +43,15 @@ export function DataTableVirtualTablePanel( const row = renderedRows[virtualItem.index]; return row ? [{ row, rowIndex: virtualItem.index }] : []; }) - : renderedRows.map((row, rowIndex) => ({ row, rowIndex })); + : renderedRows + .slice( + 0, + Math.max( + 1, + Math.floor(virtualizationConfig?.fallbackRowCount ?? 20), + ), + ) + .map((row, rowIndex) => ({ row, rowIndex })); const virtualPaddingTop = shouldUseVirtualRows ? (virtualItems[0]?.start ?? 0) : 0; @@ -47,13 +62,41 @@ export function DataTableVirtualTablePanel( (virtualItems.at(-1)?.end ?? virtualPaddingTop), ) : 0; + const handleGridActiveRowIndexChange = React.useCallback( + (gridRowIndex: number) => { + if (!props.gridMode || !shouldUseVirtualRows) return; + rowVirtualizer.scrollToIndex( + Math.max(0, gridRowIndex - props.topPinnedRows.length), + { align: "auto" }, + ); + }, + [ + props.gridMode, + props.topPinnedRows.length, + rowVirtualizer, + shouldUseVirtualRows, + ], + ); + const measureRow = React.useCallback>( + (element) => { + if (element) { + rowVirtualizer.measureElement(element); + } + }, + [rowVirtualizer], + ); return ( - + + + ); } diff --git a/src/core/data-table/use-column-layout.ts b/src/core/data-table/use-column-layout.ts index 22292c5..c4976e7 100644 --- a/src/core/data-table/use-column-layout.ts +++ b/src/core/data-table/use-column-layout.ts @@ -6,6 +6,7 @@ import { UTILITY_COLUMN_SIZE, getColumnId, getConfiguredColumnMinWidth, + getDataTableLeafColumns, getFixedSide, getPinnedColumnClassName, isUtilityColumnId, @@ -65,7 +66,7 @@ export function useColumnLayout({ const explicitlySizedColumnIds = React.useMemo(() => { const ids = new Set(); - for (const [index, column] of columns.entries()) { + for (const { column, index } of getDataTableLeafColumns(columns)) { if (Object.prototype.hasOwnProperty.call(column, "size")) { ids.add(getColumnId(column, index)); } @@ -95,7 +96,7 @@ export function useColumnLayout({ const minimumColumnWidths = React.useMemo(() => { const widths = new Map(); - for (const [index, column] of columns.entries()) { + for (const { column, index } of getDataTableLeafColumns(columns)) { const configuredMinWidth = getConfiguredColumnMinWidth(column); if (configuredMinWidth !== undefined) { @@ -214,9 +215,9 @@ export function useColumnLayout({ const fixedSide = getFixedSide(column); const pinnedStyle = fixedSide ? { - insetInlineStart: + left: fixedSide === "left" ? pinnedColumns.left.get(column.id) : undefined, - insetInlineEnd: + right: fixedSide === "right" ? pinnedColumns.right.get(column.id) : undefined, diff --git a/src/core/data-table/use-data-table-auto-page-size.ts b/src/core/data-table/use-data-table-auto-page-size.ts new file mode 100644 index 0000000..72a9d09 --- /dev/null +++ b/src/core/data-table/use-data-table-auto-page-size.ts @@ -0,0 +1,113 @@ +import * as React from "react"; +import type { DataTableAutoPageSizeConfig } from "../types"; + +export function useDataTableAutoPageSize({ + config, + currentPageSize, + enabled, + onPageSizeChange, + viewportElement, + viewportHeight, +}: { + config: DataTableAutoPageSizeConfig | undefined; + currentPageSize: number; + enabled: boolean; + onPageSizeChange: (pageSize: number) => void; + viewportElement: HTMLElement | null; + viewportHeight: number; +}) { + const lastRequestedPageSize = React.useRef(null); + const feedbackGuard = React.useRef<{ + pageSize: number; + viewportHeight: number; + } | null>(null); + + React.useEffect(() => { + if (!enabled || !viewportElement || viewportHeight <= 0) { + lastRequestedPageSize.current = null; + return; + } + + let frameId: number | null = null; + const update = () => { + frameId = null; + const row = viewportElement.querySelector( + '[data-dtp-slot="data-table-row"]', + ); + const rowHeight = Math.max( + 1, + row?.getBoundingClientRect().height || config?.estimateRowHeight || 48, + ); + const minRows = Math.max(1, Math.floor(config?.minRows ?? 1)); + const maxRows = Math.max(minRows, Math.floor(config?.maxRows ?? 100)); + const table = viewportElement.querySelector("table"); + const occupiedHeight = table + ? Array.from(table.querySelectorAll("thead, tfoot")).reduce( + (total, element) => total + element.getBoundingClientRect().height, + 0, + ) + : 0; + const bodyHeight = Math.max(0, viewportElement.clientHeight - occupiedHeight); + const nextPageSize = Math.min( + maxRows, + Math.max(minRows, Math.floor(bodyHeight / rowHeight)), + ); + + const previousRequest = feedbackGuard.current; + if ( + previousRequest?.pageSize === currentPageSize && + viewportElement.clientHeight > previousRequest.viewportHeight && + nextPageSize > currentPageSize + ) { + // A content-sized viewport can grow in response to the rows we just + // added. Do not recursively turn that growth into another request. + feedbackGuard.current = null; + return; + } + + if ( + nextPageSize === currentPageSize || + nextPageSize === lastRequestedPageSize.current + ) { + return; + } + lastRequestedPageSize.current = nextPageSize; + feedbackGuard.current = { + pageSize: nextPageSize, + viewportHeight: viewportElement.clientHeight, + }; + onPageSizeChange(nextPageSize); + }; + const scheduleUpdate = () => { + if (frameId === null) { + frameId = window.requestAnimationFrame(update); + } + }; + + scheduleUpdate(); + if (typeof ResizeObserver === "undefined") { + return () => { + if (frameId !== null) window.cancelAnimationFrame(frameId); + }; + } + + const observer = new ResizeObserver(scheduleUpdate); + observer.observe(viewportElement); + const row = viewportElement.querySelector( + '[data-dtp-slot="data-table-row"]', + ); + if (row) observer.observe(row); + + return () => { + if (frameId !== null) window.cancelAnimationFrame(frameId); + observer.disconnect(); + }; + }, [ + config, + currentPageSize, + enabled, + onPageSizeChange, + viewportElement, + viewportHeight, + ]); +} diff --git a/src/core/data-table/use-data-table-column-prefs.ts b/src/core/data-table/use-data-table-column-prefs.ts index 5e82bd3..56c01ab 100644 --- a/src/core/data-table/use-data-table-column-prefs.ts +++ b/src/core/data-table/use-data-table-column-prefs.ts @@ -7,6 +7,7 @@ import type { DataTablePersistenceSlice, DataTablePersistenceStorage, } from "../types"; +import type { RowPinningState } from "@tanstack/react-table"; const STORAGE_PREFIX = "data-table-pro:column-prefs:"; const DEFAULT_VERSION = 1; @@ -15,6 +16,7 @@ const ALL_SLICES: Array = [ "sizing", "order", "pinning", + "rowPinning", "density", ]; @@ -263,6 +265,10 @@ function validateDataTableColumnPrefs(value: unknown): DataTableColumnPrefs { const right = validateStringArray(value.pinning.right) ?? []; prefs.pinning = { left, right }; } + const rowPinning = validateRowPinning(value.rowPinning); + if (rowPinning) { + prefs.rowPinning = rowPinning; + } if (isDataTableDensity(value.density)) { prefs.density = value.density; } @@ -305,6 +311,17 @@ function validateStringArray(value: unknown) { return value.filter((item): item is string => typeof item === "string"); } +function validateRowPinning(value: unknown): RowPinningState | undefined { + if (!isRecord(value)) { + return undefined; + } + + return { + top: validateStringArray(value.top) ?? [], + bottom: validateStringArray(value.bottom) ?? [], + }; +} + function isDataTableDensity(value: unknown): value is DataTableDensity { return ( value === "compact" || diff --git a/src/core/data-table/use-data-table-columns.tsx b/src/core/data-table/use-data-table-columns.tsx index e3089e9..e497b59 100644 --- a/src/core/data-table/use-data-table-columns.tsx +++ b/src/core/data-table/use-data-table-columns.tsx @@ -1,8 +1,15 @@ import * as React from "react"; -import type { ColumnDef, Table as TanStackTable } from "@tanstack/react-table"; +import type { + ColumnDef, + ExpandedState, + OnChangeFn, + RowPinningPosition, + Table as TanStackTable, +} from "@tanstack/react-table"; import { IconChevronDown } from "../icons"; import type { DataTableEditableRowsConfig, + DataTableDetailPanel, DataTableLabels, DataTableProps, DataTableRowAction, @@ -13,6 +20,7 @@ import { UTILITY_COLUMN_SIZE, decorateFilterableColumn, isDataTableLoadingRow, + toggleDataTableExpandedState, } from "./data-table-utils"; import { DATA_TABLE_DEFAULT_LABELS } from "./data-table-labels"; @@ -24,6 +32,11 @@ type DataTableRowActionsComponentProps = { onStartEditing: () => void; row: TData; rowActions: Array>; + rowPinning?: { + canPin: boolean; + position: RowPinningPosition; + pin: (position: RowPinningPosition) => void; + }; }; export function useDataTableColumns({ @@ -37,12 +50,18 @@ export function useDataTableColumns({ columns, editableRows, editingRowId, + editErrors, enableRowSelection, - getRowCanExpand, + enableRowPinning, + hasTreeExpansion, isSavingEdit, + isEditDirty, labels, lastSelectedRowIdRef, - renderExpandedRow, + detailPanel, + detailExpanded, + onDetailExpandedChange, + rowSelectionSelectAllScope, rowActions, saveEdit, startEditingRow, @@ -60,14 +79,22 @@ export function useDataTableColumns({ columns: DataTableProps["columns"]; editableRows: DataTableProps["editableRows"]; editingRowId: string | null; + editErrors: Record; enableRowSelection: boolean; - getRowCanExpand: DataTableProps["getRowCanExpand"]; + enableRowPinning: DataTableProps["enableRowPinning"]; + hasTreeExpansion: boolean; isSavingEdit: boolean; + isEditDirty: boolean; labels: DataTableLabels; lastSelectedRowIdRef: React.MutableRefObject; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + detailPanel: DataTableDetailPanel | undefined; + detailExpanded: ExpandedState; + onDetailExpandedChange: OnChangeFn; + rowSelectionSelectAllScope: NonNullable< + DataTableProps["rowSelectionSelectAllScope"] + >; rowActions: Array>; - saveEdit: (row: TData) => Promise; + saveEdit: (row: TData) => Promise; startEditingRow: (row: TData, rowId: string) => void; tableRef: React.RefObject | null>; }) { @@ -94,7 +121,11 @@ export function useDataTableColumns({ const to = Math.max(startIndex, endIndex); tableInstance.setRowSelection((current) => { const next = { ...current }; - for (const row of rows.slice(from, to + 1)) { + for (const row of rows + .slice(from, to + 1) + .filter( + (item) => item.getCanSelect() && item.getCanMultiSelect(), + )) { if (selected) { next[row.id] = true; } else { @@ -110,43 +141,88 @@ export function useDataTableColumns({ return React.useMemo>>(() => { const defs: Array> = []; - if (renderExpandedRow) { + if (hasTreeExpansion || detailPanel) { + const expansionColumnSize = + hasTreeExpansion && detailPanel ? 80 : UTILITY_COLUMN_SIZE; defs.push({ id: "__expand__", enableResizing: false, enableSorting: false, enableHiding: false, - size: UTILITY_COLUMN_SIZE, - minSize: UTILITY_COLUMN_SIZE, - maxSize: UTILITY_COLUMN_SIZE, + size: expansionColumnSize, + minSize: expansionColumnSize, + maxSize: expansionColumnSize, header: () => {labels.expandRow}, - cell: ({ row }) => { - const canExpand = - getRowCanExpand?.(row.original) ?? Boolean(renderExpandedRow); - if (!canExpand) { + cell: ({ row, table }) => { + const canExpandTree = hasTreeExpansion && row.getCanExpand(); + const canExpandDetail = Boolean( + detailPanel && (detailPanel.getRowCanExpand?.(row.original) ?? true), + ); + if (!canExpandTree && !canExpandDetail) { return null; } - const isExpanded = row.getIsExpanded(); + const isTreeExpanded = row.getIsExpanded(); + const isDetailExpanded = + detailExpanded === true || Boolean(detailExpanded[row.id]); return ( -
    - +
    + {canExpandTree ? ( + + ) : null} + {canExpandDetail ? ( + + ) : null}
    ); }, @@ -162,28 +238,61 @@ export function useDataTableColumns({ size: UTILITY_COLUMN_SIZE, minSize: UTILITY_COLUMN_SIZE, maxSize: UTILITY_COLUMN_SIZE, - header: ({ table }) => ( -
    - { - table.toggleAllPageRowsSelected(checked === true); - }} - aria-label={ - labels.selectAllVisibleRows ?? - DATA_TABLE_DEFAULT_LABELS.selectAllVisibleRows - } - /> -
    - ), + header: ({ table }) => { + const selectsFilteredRows = rowSelectionSelectAllScope === "filtered"; + const selectableRows = (selectsFilteredRows + ? table.getFilteredRowModel().flatRows + : table.getRowModel().flatRows + ).filter((row) => row.getCanSelect() && row.getCanMultiSelect()); + const allSelected = + selectableRows.length > 0 && + selectableRows.every((row) => row.getIsSelected()); + const someSelected = selectableRows.some((row) => row.getIsSelected()); + const label = selectsFilteredRows + ? (labels.selectAllFilteredRows ?? + DATA_TABLE_DEFAULT_LABELS.selectAllFilteredRows) + : (labels.selectAllVisibleRows ?? + DATA_TABLE_DEFAULT_LABELS.selectAllVisibleRows); + + if (selectableRows.length === 0) { + return {label}; + } + + return ( +
    + { + table.setRowSelection((current) => { + const next = { ...current }; + for (const row of selectableRows) { + if (checked === true) { + next[row.id] = true; + } else { + delete next[row.id]; + } + } + return next; + }); + }} + aria-label={label} + /> +
    + ); + }, cell: ({ row }) => (
    ) => { - if (!event.shiftKey || !lastSelectedRowIdRef.current) { + if ( + !event.shiftKey || + !lastSelectedRowIdRef.current || + !row.getCanMultiSelect() + ) { lastSelectedRowIdRef.current = row.id; return; } @@ -208,7 +317,7 @@ export function useDataTableColumns({ defs.push(...columns.map((column) => decorateFilterableColumn(column))); - if (rowActions.length || editableRows) { + if (rowActions.length || editableRows || enableRowPinning) { defs.push({ id: "__actions__", enableSorting: false, @@ -225,10 +334,15 @@ export function useDataTableColumns({ if (isEditing) { return (
    + {editErrors._row ? ( + + {editErrors._row} + + ) : null}
    ); @@ -283,13 +406,19 @@ export function useDataTableColumns({ cancelEditing, columns, editableRows, + detailExpanded, + detailPanel, + editErrors, editingRowId, enableRowSelection, - getRowCanExpand, + enableRowPinning, + hasTreeExpansion, isSavingEdit, + isEditDirty, labels, lastSelectedRowIdRef, - renderExpandedRow, + onDetailExpandedChange, + rowSelectionSelectAllScope, rowActions, saveEdit, selectRowRange, diff --git a/src/core/data-table/use-data-table-container-width.ts b/src/core/data-table/use-data-table-container-width.ts index aa4398f..2e9e555 100644 --- a/src/core/data-table/use-data-table-container-width.ts +++ b/src/core/data-table/use-data-table-container-width.ts @@ -17,9 +17,8 @@ export function useDataTableContainerWidth( return; } - let frameId: number | null = null; - const updateWidth = () => { - const nextWidth = quantizeContainerWidth(element.clientWidth); + const updateWidth = (inlineSize = element.clientWidth) => { + const nextWidth = quantizeDataTableContainerWidth(inlineSize); if (nextWidth === widthRef.current) { return; } @@ -34,23 +33,14 @@ export function useDataTableContainerWidth( return; } - const observer = new ResizeObserver(() => { - if (frameId !== null) { - window.cancelAnimationFrame(frameId); - } - - frameId = window.requestAnimationFrame(() => { - frameId = null; - updateWidth(); - }); + const observer = new ResizeObserver((entries) => { + const entry = entries[0]; + updateWidth(entry ? getResizeObserverInlineSize(entry) : undefined); }); observer.observe(element); return () => { - if (frameId !== null) { - window.cancelAnimationFrame(frameId); - } observer.disconnect(); }; }, [containerRef]); @@ -58,7 +48,7 @@ export function useDataTableContainerWidth( return width; } -function quantizeContainerWidth(width: number) { +export function quantizeDataTableContainerWidth(width: number) { if (width <= 0) { return 0; } @@ -73,3 +63,22 @@ function quantizeContainerWidth(width: number) { return bucket; } + +function getResizeObserverInlineSize(entry: ResizeObserverEntry) { + const contentBoxSize: unknown = entry.contentBoxSize; + const size: unknown = Array.isArray(contentBoxSize) + ? contentBoxSize[0] + : contentBoxSize; + const inlineSize = getInlineSize(size); + + return inlineSize ?? entry.contentRect.width; +} + +function getInlineSize(value: unknown) { + if (typeof value !== "object" || value === null) { + return undefined; + } + + const inlineSize = (value as { inlineSize?: unknown }).inlineSize; + return typeof inlineSize === "number" ? inlineSize : undefined; +} diff --git a/src/core/data-table/use-data-table-instance.ts b/src/core/data-table/use-data-table-instance.ts index 3499f57..b01cb86 100644 --- a/src/core/data-table/use-data-table-instance.ts +++ b/src/core/data-table/use-data-table-instance.ts @@ -2,7 +2,11 @@ import * as React from "react"; import { getCoreRowModel, getExpandedRowModel, + getFacetedMinMaxValues, + getFacetedRowModel, + getFacetedUniqueValues, getFilteredRowModel, + getGroupedRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, @@ -14,9 +18,11 @@ import type { ColumnPinningState, ColumnSizingState, ExpandedState, + GroupingState, FilterFnOption, OnChangeFn, PaginationState, + RowPinningState, Row, SortingState, Table as TanStackTable, @@ -24,40 +30,61 @@ import type { } from "@tanstack/react-table"; import type { DataTableProps } from "../types"; import { - dataTableGlobalFilterFn, + canReorderDataTableColumn, getColumnId, + getDataTableLeafColumns, + isDataTableLoadingRow, isUtilityColumnId, moveColumnInOrder, } from "./data-table-utils"; +import type { DataTableColumnGroupPaths } from "./data-table-utils"; import { useDataTableInfiniteScroll } from "./use-data-table-infinite-scroll"; import { useDataTablePaginationClamp } from "./use-data-table-pagination-clamp"; +import { useDataTableSearchIndex } from "./use-data-table-search-index"; export function useDataTableInstance({ autoResetPageIndex, + columnGroupPaths, columnResizeMode, + dir, currentColumnFilters, currentColumnOrder, currentColumnPinning, + currentRowPinning, currentColumnSizing, currentExpanded, + currentGrouping, currentPagination, currentRowSelection, currentSorting, + currentViewMode, defaultColumn, effectiveColumnVisibility, enableColumnResizing, + enableMultiRowSelection, + enableRowPinning, enableRowSelection, + enableSubRowSelection, + getRowCanSelect, getRowCanExpand, + getSubRows, + aggregationFns, + groupedColumnMode, globalFilterFn, globalFilterValue, hasNextPage, handleColumnFiltersChange, handleColumnOrderChange, handleColumnPinningChange, + handleRowPinningChange, handleColumnVisibilityChange, handleExpandedChange, + handleGroupingChange, infiniteScroll, + keepPinnedRows, manualFiltering, + manualGrouping, + manualExpanding, manualPagination, manualSorting, onActionError, @@ -66,7 +93,9 @@ export function useDataTableInstance({ pageCount, pageIndex, pageSize, - renderExpandedRow, + paginateExpandedRows, + filterFromLeafRows, + maxLeafRowFilterDepth, setCurrentRowSelection, setCurrentSorting, setLocalColumnSizing, @@ -77,14 +106,19 @@ export function useDataTableInstance({ tableGetRowId, tableRef, totalRowCount, + virtualization, }: { autoResetPageIndex: boolean; + columnGroupPaths: DataTableColumnGroupPaths; columnResizeMode: DataTableProps["columnResizeMode"]; + dir: NonNullable["dir"]>; currentColumnFilters: ColumnFiltersState; currentColumnOrder: ColumnOrderState; currentColumnPinning: ColumnPinningState; + currentRowPinning: RowPinningState; currentColumnSizing: ColumnSizingState; currentExpanded: ExpandedState; + currentGrouping: GroupingState; currentPagination: PaginationState; currentRowSelection: Record; currentSorting: SortingState; @@ -92,18 +126,34 @@ export function useDataTableInstance({ defaultColumn: Partial>; effectiveColumnVisibility: VisibilityState; enableColumnResizing: boolean; + enableMultiRowSelection: NonNullable< + DataTableProps["enableMultiRowSelection"] + >; + enableRowPinning: DataTableProps["enableRowPinning"]; enableRowSelection: boolean; + enableSubRowSelection: NonNullable< + DataTableProps["enableSubRowSelection"] + >; + getRowCanSelect: DataTableProps["getRowCanSelect"]; getRowCanExpand: DataTableProps["getRowCanExpand"]; + getSubRows: DataTableProps["getSubRows"]; + aggregationFns: DataTableProps["aggregationFns"]; + groupedColumnMode: DataTableProps["groupedColumnMode"]; globalFilterFn: FilterFnOption | undefined; globalFilterValue: string; hasNextPage?: DataTableProps["hasNextPage"]; handleColumnFiltersChange: OnChangeFn; handleColumnOrderChange: OnChangeFn; handleColumnPinningChange: OnChangeFn; + handleRowPinningChange: OnChangeFn; handleColumnVisibilityChange: OnChangeFn; handleExpandedChange: OnChangeFn; + handleGroupingChange: OnChangeFn; infiniteScroll: DataTableProps["infiniteScroll"]; + keepPinnedRows: boolean; manualFiltering: boolean; + manualGrouping: boolean; + manualExpanding: boolean; manualPagination: boolean; manualSorting: boolean; onActionError?: DataTableProps["onActionError"]; @@ -112,7 +162,9 @@ export function useDataTableInstance({ pageCount: DataTableProps["pageCount"]; pageIndex: DataTableProps["pageIndex"]; pageSize: DataTableProps["pageSize"]; - renderExpandedRow: DataTableProps["renderExpandedRow"]; + paginateExpandedRows: DataTableProps["paginateExpandedRows"]; + filterFromLeafRows: DataTableProps["filterFromLeafRows"]; + maxLeafRowFilterDepth: DataTableProps["maxLeafRowFilterDepth"]; setCurrentRowSelection: OnChangeFn>; setCurrentSorting: OnChangeFn; setLocalColumnSizing: OnChangeFn; @@ -132,10 +184,11 @@ export function useDataTableInstance({ virtualization: DataTableProps["virtualization"]; viewportHeight: number; }) { + const cachedGlobalFilterFn = useDataTableSearchIndex(); const generatedColumnIds = React.useMemo(() => { - return tableColumns.map((column, index) => - getColumnId(column as DataTableProps["columns"][number], index), - ); + return getDataTableLeafColumns( + tableColumns as DataTableProps["columns"], + ).map(({ column, index }) => getColumnId(column, index)); }, [tableColumns]); const effectiveColumnOrder = React.useMemo(() => { @@ -192,6 +245,36 @@ export function useDataTableInstance({ }; }, [currentColumnPinning, generatedColumnIds]); + const effectiveRowPinning = React.useMemo(() => { + const availableRowIds = new Set(); + const visitRows = (rows: Array) => { + rows.forEach((row, index) => { + availableRowIds.add(tableGetRowId(row, index)); + if (!isDataTableLoadingRow(row)) { + const subRows = getSubRows?.(row, index); + if (subRows?.length) { + visitRows(subRows); + } + } + }); + }; + visitRows(tableData); + const top = (currentRowPinning.top ?? []).filter((rowId) => + availableRowIds.has(rowId), + ); + const topIds = new Set(top); + const bottom = (currentRowPinning.bottom ?? []).filter( + (rowId) => availableRowIds.has(rowId) && !topIds.has(rowId), + ); + return { top, bottom }; + }, [ + currentRowPinning.bottom, + currentRowPinning.top, + getSubRows, + tableData, + tableGetRowId, + ]); + const tableState = React.useMemo( () => ({ sorting: currentSorting, @@ -201,20 +284,24 @@ export function useDataTableInstance({ columnFilters: currentColumnFilters, globalFilter: globalFilterValue, expanded: currentExpanded, + grouping: currentGrouping, columnOrder: effectiveColumnOrder, columnPinning: effectiveColumnPinning, + rowPinning: effectiveRowPinning, columnSizing: currentColumnSizing, }), [ currentColumnFilters, currentColumnSizing, currentExpanded, + currentGrouping, currentPagination, currentRowSelection, currentSorting, effectiveColumnVisibility, effectiveColumnOrder, effectiveColumnPinning, + effectiveRowPinning, globalFilterValue, ], ); @@ -261,33 +348,87 @@ export function useDataTableInstance({ [setLocalColumnSizing], ); + const facetingNeeds = React.useMemo( + () => { + let uniqueValues = false; + let minMaxValues = false; + for (const { column } of getDataTableLeafColumns( + tableColumns as DataTableProps["columns"], + )) { + uniqueValues ||= column.meta?.filter?.type === "faceted"; + minMaxValues ||= column.meta?.filter?.type === "numberRange"; + } + return { minMaxValues, uniqueValues }; + }, + [tableColumns], + ); + // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Table owns its instance functions. const table = useReactTable({ data: tableData, columns: tableColumns, getCoreRowModel: getCoreRowModel(), getFilteredRowModel: manualFiltering ? undefined : getFilteredRowModel(), + getFacetedRowModel: + (facetingNeeds.uniqueValues || facetingNeeds.minMaxValues) && + !manualFiltering + ? getFacetedRowModel() + : undefined, + getFacetedUniqueValues: + facetingNeeds.uniqueValues && !manualFiltering + ? getFacetedUniqueValues() + : undefined, + getFacetedMinMaxValues: + facetingNeeds.minMaxValues && !manualFiltering + ? getFacetedMinMaxValues() + : undefined, + getGroupedRowModel: + currentGrouping.length && !manualGrouping ? getGroupedRowModel() : undefined, getSortedRowModel: manualSorting ? undefined : getSortedRowModel(), - getExpandedRowModel: renderExpandedRow ? getExpandedRowModel() : undefined, + getExpandedRowModel: + (getSubRows || currentGrouping.length) && !manualExpanding + ? getExpandedRowModel() + : undefined, getPaginationRowModel: manualPagination || infiniteScroll?.enabled ? undefined : getPaginationRowModel(), - enableRowSelection, - enableMultiRowSelection: enableRowSelection, + enableRowSelection: getRowCanSelect + ? (row) => enableRowSelection && getRowCanSelect(row.original) + : enableRowSelection, + enableRowPinning: + typeof enableRowPinning === "function" + ? (row) => enableRowPinning(row.original) + : enableRowPinning, + keepPinnedRows, + enableMultiRowSelection: + typeof enableMultiRowSelection === "function" + ? (row) => enableMultiRowSelection(row.original) + : enableMultiRowSelection, + enableSubRowSelection: + typeof enableSubRowSelection === "function" + ? (row) => enableSubRowSelection(row.original) + : enableSubRowSelection, enableColumnResizing, columnResizeMode, + columnResizeDirection: dir, getRowId: tableGetRowId, - getRowCanExpand: renderExpandedRow - ? (row) => getRowCanExpand?.(row.original) ?? true + getSubRows, + getRowCanExpand: getSubRows + ? (row) => getRowCanExpand?.(row.original) ?? row.subRows.length > 0 : undefined, - globalFilterFn: globalFilterFn ?? dataTableGlobalFilterFn, + globalFilterFn: globalFilterFn ?? cachedGlobalFilterFn, getColumnCanGlobalFilter: (column) => column.columnDef.enableGlobalFilter !== false && typeof column.accessorFn === "function", manualSorting, + manualGrouping, manualFiltering, + manualExpanding, manualPagination: manualPagination || Boolean(infiniteScroll?.enabled), + paginateExpandedRows, + filterFromLeafRows, + maxLeafRowFilterDepth, defaultColumn, autoResetPageIndex, state: tableState, @@ -297,9 +438,13 @@ export function useDataTableInstance({ onColumnVisibilityChange: handleColumnVisibilityChange, onColumnFiltersChange: handleColumnFiltersChange, onExpandedChange: handleExpandedChange, + onGroupingChange: handleGroupingChange, onColumnOrderChange: handleColumnOrderChange, onColumnPinningChange: handleColumnPinningChange, + onRowPinningChange: handleRowPinningChange, onColumnSizingChange: handleColumnSizingChange, + aggregationFns, + groupedColumnMode, }); tableRef.current = table; @@ -310,6 +455,16 @@ export function useDataTableInstance({ return; } + if ( + !canReorderDataTableColumn( + sourceColumnId, + targetColumnId, + columnGroupPaths, + ) + ) { + return; + } + const defaultOrder = table .getAllLeafColumns() .map((column) => column.id) @@ -321,11 +476,29 @@ export function useDataTableInstance({ ); handleColumnOrderChange(nextOrder); }, - [currentColumnOrder, handleColumnOrderChange, table], + [columnGroupPaths, currentColumnOrder, handleColumnOrderChange, table], ); - const renderedRows = table.getRowModel().rows; - const rowsToRender = renderedRows.map((row, rowIndex) => ({ + const topPinnedRows = table.getTopRows(); + const bottomPinnedRows = table.getBottomRows(); + // Card rendering has no top/bottom table regions. Keep its original row + // model intact rather than silently dropping pinned records. + const renderedRows = + currentViewMode === "table" + ? table.getCenterRows() + : table.getRowModel().rows; + const virtualizationConfig = + typeof virtualization === "object" ? virtualization : undefined; + const virtualRowsEnabled = + virtualization === true || virtualizationConfig?.enabled === true; + const fallbackRowCount = Math.max( + 1, + Math.floor(virtualizationConfig?.fallbackRowCount ?? 20), + ); + const initialRowsToRender = virtualRowsEnabled + ? renderedRows.slice(0, fallbackRowCount) + : renderedRows; + const rowsToRender = initialRowsToRender.map((row, rowIndex) => ({ row, rowIndex, })); @@ -443,6 +616,8 @@ export function useDataTableInstance({ handleFooterPageSizeChange, isPageCountKnown, renderedRows, + topPinnedRows, + bottomPinnedRows, reorderColumn, rowsToRender, sentinelRef, diff --git a/src/core/data-table/use-data-table-performance-diagnostics.ts b/src/core/data-table/use-data-table-performance-diagnostics.ts new file mode 100644 index 0000000..29b218e --- /dev/null +++ b/src/core/data-table/use-data-table-performance-diagnostics.ts @@ -0,0 +1,83 @@ +import * as React from "react"; +import type { DataTableProps } from "../types"; + +/** Development-only guardrails for identities used by row models and caches. */ +export function useDataTablePerformanceDiagnostics({ + columns, + data, + getRowId, +}: Pick, "columns" | "data" | "getRowId">) { + const previous = React.useRef({ columns, data, getRowId }); + const warned = React.useRef(new Set()); + + React.useEffect(() => { + if (!isDevelopmentEnvironment()) { + return; + } + + const last = previous.current; + if ( + last.data !== data && + haveSameItems(last.data, data) && + !warned.current.has("data") + ) { + warn( + warned.current, + "data", + "The data array identity changed. Keep rows immutable and memoize unchanged data so filtering, row models, and virtual measurements can be reused.", + ); + } + if ( + last.columns !== columns && + haveSameItems(last.columns, columns) && + !warned.current.has("columns") + ) { + warn( + warned.current, + "columns", + "The columns array identity changed. Memoize stable column definitions so the search index and table column model can be reused.", + ); + } + if (last.getRowId !== getRowId && !warned.current.has("getRowId")) { + warn( + warned.current, + "getRowId", + "getRowId identity changed. Memoize it and return an immutable, unique id to preserve row state and virtual scroll anchoring.", + ); + } + + const ids = new Set(); + for (let index = 0; index < data.length; index += 1) { + const id = getRowId(data[index]!, index); + if (ids.has(id) && !warned.current.has("duplicate-row-id")) { + warn( + warned.current, + "duplicate-row-id", + `Duplicate row id "${id}" detected. Row ids must be unique and immutable.`, + ); + break; + } + ids.add(id); + } + previous.current = { columns, data, getRowId }; + }, [columns, data, getRowId]); +} + +function haveSameItems(previous: Array, next: Array) { + return ( + previous.length === next.length && + previous.every((item, index) => Object.is(item, next[index])) + ); +} + +function warn(warned: Set, key: string, message: string) { + warned.add(key); + console.warn(`[data-table-pro] ${message}`); +} + +function isDevelopmentEnvironment() { + return ( + (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env + ?.NODE_ENV !== "production" + ); +} diff --git a/src/core/data-table/use-data-table-search-index.ts b/src/core/data-table/use-data-table-search-index.ts new file mode 100644 index 0000000..4827e64 --- /dev/null +++ b/src/core/data-table/use-data-table-search-index.ts @@ -0,0 +1,46 @@ +import * as React from "react"; +import type { FilterFn, Row } from "@tanstack/react-table"; +import { normalizeDataTableSearchText } from "./data-table-utils"; + +/** + * Caches each searchable cell against the application-owned row object and + * stable column id. WeakMap entries disappear with immutable rows and never + * retain removed data. Mutable rows are deliberately unsupported because a + * cache cannot safely observe deep changes without defeating its purpose. + */ +export function useDataTableSearchIndex( +) { + // eslint-disable-next-line react-hooks/immutability -- This weak cache is deliberately populated by TanStack's filter pass, never read during React render. + return React.useMemo>(() => { + const valuesByRow = new WeakMap>(); + + return (row: Row, columnId: string, filterValue: unknown) => { + const query = normalizeDataTableSearchText(filterValue); + if (!query) { + return true; + } + + const original = row.original; + if (typeof original !== "object" || original === null) { + return normalizeDataTableSearchText(row.getValue(columnId)).includes( + query, + ); + } + + let valuesByColumn = valuesByRow.get(original); + if (!valuesByColumn) { + valuesByColumn = new Map(); + valuesByRow.set(original, valuesByColumn); + } + + let text = valuesByColumn.get(columnId); + if (text === undefined) { + const value = row.getValue(columnId); + text = normalizeDataTableSearchText(value); + valuesByColumn.set(columnId, text); + } + + return text.includes(query); + }; + }, []); +} diff --git a/src/core/data-table/use-data-table-state.ts b/src/core/data-table/use-data-table-state.ts index befa305..2838cf2 100644 --- a/src/core/data-table/use-data-table-state.ts +++ b/src/core/data-table/use-data-table-state.ts @@ -5,7 +5,9 @@ import type { ColumnPinningState, ColumnSizingState, ExpandedState, + GroupingState, PaginationState, + RowPinningState, SortingState, VisibilityState, } from "@tanstack/react-table"; @@ -17,6 +19,7 @@ import type { import { createDataTableLoadingRows, getColumnId, + getDataTableLeafColumns, getDataTableLoadingRowId, getInitialColumnPinning, isDataTableLoadingRow, @@ -33,6 +36,7 @@ export function useDataTableState({ columnFilters, columnOrder, columnPinning, + rowPinning, columnSizing, columnPrefsKey, persistence, @@ -43,6 +47,8 @@ export function useDataTableState({ enableRowSelection, enableToolbarQueryFiltering, expanded, + grouping, + getSubRows, getRowId, hiddenRows, initialState, @@ -52,10 +58,12 @@ export function useDataTableState({ onColumnFiltersChange, onColumnOrderChange, onColumnPinningChange, + onRowPinningChange, onColumnSizingChange, onColumnVisibilityChange, onDensityChange, onExpandedChange, + onGroupingChange, onPageIndexChange, onRowSelectionChange, onShowHiddenRowsChange, @@ -79,6 +87,7 @@ export function useDataTableState({ columnFilters: DataTableProps["columnFilters"]; columnOrder: DataTableProps["columnOrder"]; columnPinning: DataTableProps["columnPinning"]; + rowPinning: DataTableProps["rowPinning"]; columnSizing?: DataTableProps["columnSizing"]; columnPrefsKey: DataTableProps["columnPrefsKey"]; persistence?: DataTableProps["persistence"]; @@ -89,6 +98,8 @@ export function useDataTableState({ enableRowSelection: boolean; enableToolbarQueryFiltering: boolean; expanded: DataTableProps["expanded"]; + grouping: DataTableProps["grouping"]; + getSubRows: DataTableProps["getSubRows"]; getRowId: DataTableProps["getRowId"]; hiddenRows: DataTableProps["hiddenRows"]; initialState?: DataTableProps["initialState"]; @@ -98,10 +109,12 @@ export function useDataTableState({ onColumnFiltersChange: DataTableProps["onColumnFiltersChange"]; onColumnOrderChange: DataTableProps["onColumnOrderChange"]; onColumnPinningChange: DataTableProps["onColumnPinningChange"]; + onRowPinningChange: DataTableProps["onRowPinningChange"]; onColumnSizingChange?: DataTableProps["onColumnSizingChange"]; onColumnVisibilityChange: DataTableProps["onColumnVisibilityChange"]; onDensityChange: DataTableProps["onDensityChange"]; onExpandedChange: DataTableProps["onExpandedChange"]; + onGroupingChange: DataTableProps["onGroupingChange"]; onPageIndexChange: DataTableProps["onPageIndexChange"]; onRowSelectionChange: DataTableProps["onRowSelectionChange"]; onShowHiddenRowsChange: DataTableProps["onShowHiddenRowsChange"]; @@ -188,6 +201,16 @@ export function useDataTableState({ persistedColumnPrefs.pinning ?? getInitialColumnPinning(columns), }); + const [currentRowPinning, setCurrentRowPinning] = + useControllableState({ + value: rowPinning, + onChange: onRowPinningChange, + defaultValue: () => + initialState?.rowPinning ?? persistedColumnPrefs.rowPinning ?? { + top: [], + bottom: [], + }, + }); const [currentColumnSizing, setCurrentColumnSizing] = useControllableState({ value: columnSizing, @@ -202,6 +225,11 @@ export function useDataTableState({ onChange: onViewModeChange, defaultValue: () => initialState?.viewMode ?? "table", }); + const [currentGrouping, setCurrentGrouping] = useControllableState({ + value: grouping, + onChange: onGroupingChange, + defaultValue: () => initialState?.grouping ?? [], + }); const [currentShowHiddenRows, setCurrentShowHiddenRows] = useControllableState({ value: showHiddenRows, @@ -285,8 +313,13 @@ export function useDataTableState({ 1, loadingRowCount ?? Math.min(5, currentPagination.pageSize), ); + // Keep input/callback state eager. Only the client row-model input is + // deferred, so server/manual callbacks never wait behind a large filter. + const deferredSearchValue = React.useDeferredValue(localSearchValue); const globalFilterValue = enableToolbarQueryFiltering - ? localSearchValue + ? manualFiltering + ? localSearchValue + : deferredSearchValue : ""; const handleViewModeChange = React.useCallback( (nextViewMode: "table" | "card") => { @@ -314,29 +347,36 @@ export function useDataTableState({ ); } }, [onPageIndexChange, pageIndex]); - const filterResetSignature = React.useMemo( - () => - JSON.stringify({ - globalFilterValue, - columnFilters: currentColumnFilters, - }), - [currentColumnFilters, globalFilterValue], - ); - const lastFilterResetSignatureRef = React.useRef(filterResetSignature); + const lastFilterStateRef = React.useRef({ + columnFilters: currentColumnFilters, + globalFilterValue, + }); React.useEffect(() => { + const previous = lastFilterStateRef.current; + const filtersChanged = previous.columnFilters !== currentColumnFilters; + const globalFilterChanged = + previous.globalFilterValue !== globalFilterValue; + lastFilterStateRef.current = { + columnFilters: currentColumnFilters, + globalFilterValue, + }; + if (manualFiltering) { - lastFilterResetSignatureRef.current = filterResetSignature; return; } - if (lastFilterResetSignatureRef.current === filterResetSignature) { + if (!filtersChanged && !globalFilterChanged) { return; } - lastFilterResetSignatureRef.current = filterResetSignature; resetPageIndexForFilterChange(); - }, [filterResetSignature, manualFiltering, resetPageIndexForFilterChange]); + }, [ + currentColumnFilters, + globalFilterValue, + manualFiltering, + resetPageIndexForFilterChange, + ]); usePersistDataTableColumnPrefs({ persistence: persistenceConfig, @@ -346,17 +386,21 @@ export function useDataTableState({ columnSizing === undefined ? currentColumnSizing : undefined, order: columnOrder ? undefined : currentColumnOrder, pinning: columnPinning ? undefined : currentColumnPinning, + rowPinning: rowPinning === undefined ? currentRowPinning : undefined, density: density ? undefined : currentDensity, }, }); const responsiveColumnVisibility = React.useMemo(() => { - return columns.reduce((visibility, column, index) => { - const columnId = getColumnId(column, index); - if (isHiddenAtContainerWidth(column.meta?.hideOn, containerWidth)) { - visibility[columnId] = false; - } - return visibility; - }, {}); + return getDataTableLeafColumns(columns).reduce( + (visibility, { column, index }) => { + const columnId = getColumnId(column, index); + if (isHiddenAtContainerWidth(column.meta?.hideOn, containerWidth)) { + visibility[columnId] = false; + } + return visibility; + }, + {}, + ); }, [columns, containerWidth]); const effectiveColumnVisibility = React.useMemo(() => { return { @@ -398,10 +442,19 @@ export function useDataTableState({ return new Map(); } - return new Map( - visibleData.map((row, index) => [getRowId(row, index), row]), - ); - }, [getRowId, shouldResolveSelectedRows, visibleData]); + const rows = new Map(); + const visitRows = (currentRows: Array) => { + currentRows.forEach((row, index) => { + rows.set(getRowId(row, index), row); + const subRows = getSubRows?.(row, index); + if (subRows?.length) { + visitRows(subRows); + } + }); + }; + visitRows(visibleData); + return rows; + }, [getRowId, getSubRows, shouldResolveSelectedRows, visibleData]); const selectedRows = React.useMemo(() => { if (!shouldResolveSelectedRows) { return []; @@ -412,15 +465,25 @@ export function useDataTableState({ .map(([rowId]) => rowById.get(rowId)) .filter((row): row is TData => Boolean(row)); }, [currentRowSelection, rowById, shouldResolveSelectedRows]); + const selectedRowIds = React.useMemo( + () => + Object.entries(currentRowSelection).flatMap(([rowId, selected]) => + selected ? [rowId] : [], + ), + [currentRowSelection], + ); return { + containerWidth, currentColumnFilters, currentColumnOrder, currentColumnPinning, + currentRowPinning, currentColumnSizing, currentColumnVisibility, currentDensity, currentExpanded, + currentGrouping, currentPagination, currentRowSelection, currentShowHiddenRows, @@ -434,12 +497,15 @@ export function useDataTableState({ localSearchValue, resolvedLoadingRowCount, resolvedToolbarQueryPlaceholder, + selectedRowIds, selectedRows, setCurrentColumnFilters, setCurrentColumnOrder, setCurrentColumnPinning, + setCurrentRowPinning, setCurrentColumnVisibility, setCurrentExpanded, + setCurrentGrouping, setCurrentRowSelection, setCurrentSorting, setLocalColumnSizing: setCurrentColumnSizing, diff --git a/src/core/data-table/use-data-table-toolbar-features.ts b/src/core/data-table/use-data-table-toolbar-features.ts index ac663a3..a77dc8b 100644 --- a/src/core/data-table/use-data-table-toolbar-features.ts +++ b/src/core/data-table/use-data-table-toolbar-features.ts @@ -16,6 +16,7 @@ import { exportDataTableCsv, getAccessorKey, getColumnId, + getDataTableLeafColumns, hasFilterValue, normalizeColumnFilterOptions, startCase, @@ -49,7 +50,7 @@ export function useDataTableToolbarFeatures({ csvExport: DataTableProps["csvExport"]; }) { const columnVisibilityOptions = React.useMemo(() => { - return columns.map((column, index) => { + return getDataTableLeafColumns(columns).map(({ column, index }) => { const id = getColumnId(column, index); const header = column.header; const accessorKey = getAccessorKey(column); @@ -82,7 +83,7 @@ export function useDataTableToolbarFeatures({ return []; } - return columns.flatMap((column, index) => { + return getDataTableLeafColumns(columns).flatMap(({ column, index }) => { const filter = column.meta?.filter; if (!filter) { return []; @@ -99,10 +100,29 @@ export function useDataTableToolbarFeatures({ ? startCase(accessorKey) : startCase(id)); const state = currentColumnFilters.find((item) => item.id === id); + const configuredFacetOptions = filter.faceting?.options; + const facetedMinMax = + filter.type === "numberRange" + ? table.getColumn(id)?.getFacetedMinMaxValues() + : undefined; const rawOptions = - typeof filter.options === "function" - ? filter.options({ rows: visibleData }) - : (filter.options ?? []); + filter.type === "faceted" && configuredFacetOptions + ? typeof configuredFacetOptions === "function" + ? configuredFacetOptions({ rows: visibleData }) + : configuredFacetOptions + : filter.type === "faceted" + ? Array.from(table.getColumn(id)?.getFacetedUniqueValues() ?? []).map( + ([value, count]) => ({ + label: + filter.faceting?.getOptionLabel?.(value as never) ?? + String(value), + value: String(value), + count, + }), + ) + : typeof filter.options === "function" + ? filter.options({ rows: visibleData }) + : (filter.options ?? []); return [ { @@ -112,10 +132,23 @@ export function useDataTableToolbarFeatures({ value: state?.value, placeholder: filter.placeholder, options: normalizeColumnFilterOptions(rawOptions), + searchable: filter.faceting?.searchable, + searchPlaceholder: filter.faceting?.searchPlaceholder, + trueLabel: filter.trueLabel, + falseLabel: filter.falseLabel, + min: filter.min ?? facetedMinMax?.[0], + max: filter.max ?? facetedMinMax?.[1], + step: filter.step, }, ]; }); - }, [columns, currentColumnFilters, enableColumnFilters, visibleData]); + }, [ + columns, + currentColumnFilters, + enableColumnFilters, + table, + visibleData, + ]); const handleToolbarColumnFilterChange = React.useCallback( (columnId: string, value: unknown) => { diff --git a/src/core/data-table/use-row-editing.tsx b/src/core/data-table/use-row-editing.tsx index 0190d46..be34b68 100644 --- a/src/core/data-table/use-row-editing.tsx +++ b/src/core/data-table/use-row-editing.tsx @@ -6,6 +6,7 @@ import type { DataTableEditableRowsConfig, } from "../types"; import type { DataTableUiKit } from "../ui-kit"; +import { getDataTableLeafColumns } from "./data-table-utils"; export function useRowEditing({ columns, @@ -21,7 +22,17 @@ export function useRowEditing({ Record >({}); const draftValuesRef = React.useRef(draftValues); + const [originalDraftValues, setOriginalDraftValues] = React.useState< + Record + >({}); + const [editErrors, setEditErrors] = React.useState>( + {}, + ); const [isSavingEdit, setIsSavingEdit] = React.useState(false); + const isEditDirty = React.useMemo( + () => !areDraftValuesEqual(draftValues, originalDraftValues), + [draftValues, originalDraftValues], + ); React.useEffect(() => { draftValuesRef.current = draftValues; @@ -30,6 +41,8 @@ export function useRowEditing({ const cancelEditing = React.useCallback(() => { setEditingRowId(null); setDraftValues({}); + setEditErrors({}); + setOriginalDraftValues({}); }, []); const startEditingRow = React.useCallback( @@ -37,7 +50,9 @@ export function useRowEditing({ const initialValues = editableRows?.getInitialValues?.(row) ?? defaultDraftValues(row, columns); + setOriginalDraftValues({ ...initialValues }); setDraftValues(initialValues); + setEditErrors({}); setEditingRowId(rowId); }, [columns, editableRows], @@ -46,26 +61,70 @@ export function useRowEditing({ const saveEdit = React.useCallback( async (row: TData) => { if (!editableRows) { - return; + return false; } setIsSavingEdit(true); + const draftSnapshot = { ...draftValuesRef.current }; + let rollback: (() => void) | undefined; try { - await editableRows.onSaveRow(row, draftValuesRef.current); + const validation = await editableRows.validateRow?.( + row, + draftSnapshot, + ); + const validationErrors = normalizeEditValidationErrors(validation); + if (Object.keys(validationErrors).length > 0) { + setEditErrors(validationErrors); + return false; + } + + setEditErrors({}); + const optimisticResult = editableRows.onOptimisticUpdate?.( + row, + draftSnapshot, + ); + rollback = + typeof optimisticResult === "function" + ? optimisticResult + : undefined; + await editableRows.onSaveRow(row, draftSnapshot); + editableRows.onSaveSuccess?.(row, draftSnapshot); React.startTransition(cancelEditing); + return true; } catch (error) { + try { + rollback?.(); + } catch { + // Preserve the original save error for the public error callbacks. + } + editableRows.onSaveError?.(error, row, draftSnapshot); onError?.(error, row); + return false; } finally { setIsSavingEdit(false); } }, [cancelEditing, editableRows, onError], ); + const clearEditError = React.useCallback((columnId: string) => { + setEditErrors((current) => { + if (!current[columnId] && !current._row) { + return current; + } + const next = { ...current }; + delete next[columnId]; + delete next._row; + return next; + }); + }, []); return { cancelEditing, + clearEditError, draftValues, + editErrors, editingRowId, + isEditDirty, isSavingEdit, saveEdit, setDraftValues, @@ -78,14 +137,17 @@ function defaultDraftValues( row: TData, columns: Array>, ) { - return columns.reduce>((draft, column) => { - if ("accessorKey" in column && typeof column.accessorKey === "string") { - draft[column.accessorKey] = (row as Record)[ - column.accessorKey - ]; - } - return draft; - }, {}); + return getDataTableLeafColumns(columns).reduce>( + (draft, { column }) => { + if ("accessorKey" in column && typeof column.accessorKey === "string") { + draft[column.accessorKey] = (row as Record)[ + column.accessorKey + ]; + } + return draft; + }, + {}, + ); } export function renderEditableCell( @@ -93,6 +155,16 @@ export function renderEditableCell( draftValues: Record, setDraftValues: React.Dispatch>>, components: Pick, + editing?: { + cancel: () => void; + commit: () => void; + errors: Record; + isDirty: boolean; + isPending: boolean; + cancelOnEscape: boolean; + commitOnEnter: boolean; + onValueChange: (columnId: string) => void; + }, ) { const { Checkbox, Input } = components; const column = context.column.columnDef as DataTableColumnDef; @@ -102,12 +174,30 @@ export function renderEditableCell( ? column.accessorKey : context.column.id; const draftValue = draftValues[accessorKey]; + const error = + editing?.errors[accessorKey] ?? + editing?.errors[context.column.id] ?? + editing?.errors._row; const setDraftValue = (value: unknown) => { + editing?.onValueChange(accessorKey); setDraftValues((current) => ({ ...current, [accessorKey]: value, })); }; + const handleKeyDown = (event: React.KeyboardEvent) => { + if (event.key === "Escape" && editing?.cancelOnEscape) { + event.preventDefault(); + editing.cancel(); + } else if ( + event.key === "Enter" && + !event.shiftKey && + editing?.commitOnEnter + ) { + event.preventDefault(); + editing.commit(); + } + }; if (meta?.renderEditCell) { return meta.renderEditCell({ @@ -115,6 +205,9 @@ export function renderEditableCell( row: context.row.original, value: context.getValue(), draftValue, + error, + isDirty: editing?.isDirty ?? false, + isPending: editing?.isPending ?? false, setDraftValue, }); } @@ -123,34 +216,71 @@ export function renderEditableCell( if (typeof draftValue === "boolean") { return ( - { - setDraftValue(checked === true); - }} - /> +
    + { + setDraftValue(checked === true); + }} + onKeyDown={handleKeyDown} + /> + {error ? ( + + {error} + + ) : null} +
    ); } return ( - ) => { - const rawValue = event.target.value; - const parsedValue = meta?.parseEditValue - ? meta.parseEditValue(rawValue, context) - : parseEditableInputValue(rawValue, inputType, draftValue); - setDraftValue(parsedValue); - }} - /> +
    + ) => { + const rawValue = event.target.value; + const parsedValue = meta?.parseEditValue + ? meta.parseEditValue(rawValue, context) + : parseEditableInputValue(rawValue, inputType, draftValue); + setDraftValue(parsedValue); + }} + onKeyDown={handleKeyDown} + /> + {error ? ( + + {error} + + ) : null} +
    ); } +function normalizeEditValidationErrors( + value: void | string | Record, +) { + if (!value) { + return {}; + } + return typeof value === "string" ? { _row: value } : value; +} + +function areDraftValuesEqual( + left: Record, + right: Record, +) { + const keys = new Set([...Object.keys(left), ...Object.keys(right)]); + return Array.from(keys).every((key) => Object.is(left[key], right[key])); +} + function getEditableInputType( type: DataTableColumnType | undefined, value: unknown, diff --git a/src/core/types.ts b/src/core/types.ts index fe1e855..aec7450 100644 --- a/src/core/types.ts +++ b/src/core/types.ts @@ -1,5 +1,6 @@ import type * as React from "react"; import type { + AggregationFn, CellContext, ColumnFiltersState, ColumnDef, @@ -8,9 +9,11 @@ import type { ColumnSizingState, ExpandedState, FilterFnOption, + GroupingState, HeaderContext, PaginationState, Row, + RowPinningState, SortingState, Table as TanStackTable, Updater, @@ -19,6 +22,46 @@ import type { export type DataTableViewMode = "table" | "card"; +/** Accessibility behavior for the table view. Native table semantics remain the default. */ +export type DataTableAccessibilityOptions = { + /** + * `grid` enables spreadsheet-like roving focus and keyboard navigation. + * `native` (the default) retains ordinary HTML table keyboard behavior. + */ + mode?: "native" | "grid"; + /** Number of rows moved by PageUp/PageDown when layout cannot be measured. */ + pageSize?: number; +}; + +/** Shorthand configuration for the interactive ARIA grid mode. */ +export type DataTableInteractiveGridOptions = Omit< + DataTableAccessibilityOptions, + "mode" +>; + +/** A stable grid coordinate used for cell and rectangular range selection. */ +export type DataTableCellCoordinate = { + rowId: string; + columnId: string; +}; + +/** The two corners of a cell selection. A single-cell selection has equal corners. */ +export type DataTableCellSelection = { + anchor: DataTableCellCoordinate; + focus: DataTableCellCoordinate; +}; + +export type DataTableGridCommandContext = { + table: TanStackTable; + cellSelection: DataTableCellSelection | null; +}; + +/** Commands are delegated to the application; the table never records app data. */ +export type DataTableGridCommands = { + undo?: (context: DataTableGridCommandContext) => void | Promise; + redo?: (context: DataTableGridCommandContext) => void | Promise; +}; + export type DataTableAlign = "start" | "center" | "end"; export type DataTableColumnType = "text" | "numeric" | "date"; export type DataTableColumnFixed = "left" | "right"; @@ -30,20 +73,75 @@ export type DataTableCellOverflow = | "clip" | "wrap" | "visible"; -export type DataTableColumnFilterType = "text" | "select" | "multi"; +export type DataTableColumnFilterType = + | "text" + | "select" + | "multi" + | "faceted" + | "boolean" + | "numberRange" + | "dateRange"; +export type DataTableColumnFilterOperator = + | "contains" + | "equals" + | "startsWith" + | "endsWith"; export type DataTableCsvExportScope = | "filtered" | "page" | "selected" | "all"; +export type DataTableClipboardCopyScope = + | DataTableCsvExportScope + | "cellSelection"; +export type DataTableClipboardCopyOptions = { + includeHeaders?: boolean; + columns?: Array; + scope?: DataTableClipboardCopyScope; + /** Defaults to tab-separated text. */ + delimiter?: "\t" | ","; + escapeFormulaValues?: boolean; + getCellValue?: (context: { + row: TData; + rowId: string; + columnId: string; + value: unknown; + }) => unknown; + /** Host-owned clipboard delivery for non-browser or permission-managed apps. */ + onCopy?: (context: { + text: string; + rows: Array; + scope: DataTableClipboardCopyScope; + }) => void | Promise; +}; +export type DataTableClipboardPasteContext = { + text: string; + values: Array>; + table: TanStackTable; +}; +export type DataTableClipboardConfig = { + copy?: boolean | DataTableClipboardCopyOptions; + paste?: { + enabled?: boolean; + preventDefault?: boolean; + onPaste: ( + context: DataTableClipboardPasteContext, + ) => void | Promise; + }; +}; export type DataTableActionErrorSource = | "toolbarAction" | "selectionAction" | "rowAction" | "rowClick" | "edit" + | "undo" + | "redo" + | "clipboardCopy" + | "clipboardPaste" | "fileUpload" - | "infiniteScroll"; + | "infiniteScroll" + | "retry"; export const DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS: Record< DataTableContainerBreakpoint, @@ -66,17 +164,69 @@ export type DataTableLoadingState = { loadingRowCount?: number; }; +export type DataTableAutoPageSizeConfig = { + minRows?: number; + maxRows?: number; + estimateRowHeight?: number; +}; + +export type DataTableStateOverlayContext = { + rows: Array; + toolbarQueryValue: string; + error: unknown; + isRetrying: boolean; + retry: (() => void | Promise) | undefined; +}; + +export type DataTableStateOverlay = { + empty?: + | React.ReactNode + | ((context: DataTableEmptyStateContext) => React.ReactNode); + error?: unknown; + isRetrying?: boolean; + onRetry?: () => void | Promise; + renderError?: ( + context: DataTableStateOverlayContext, + ) => React.ReactNode; +}; + export type DataTableCellEditRenderProps = { cell: CellContext; row: TData; value: TValue | undefined; draftValue: unknown; setDraftValue: (value: unknown) => void; + error?: string; + isDirty: boolean; + isPending: boolean; }; export type DataTableColumnFilterOption = { label: string; value: string; + /** Number of matching records. Omit when the count is not known. */ + count?: number; + disabled?: boolean; +}; + +export type DataTableFacetedFilterOptions = { + /** + * Server-provided facet values. When supplied, these take precedence over + * locally calculated unique values and their counts. + */ + options?: + | Array + | ((context: { rows: Array }) => Array); + /** Render a readable label for values discovered from the local row model. */ + getOptionLabel?: (value: TValue | undefined) => string; + /** Enables an in-menu search input. Defaults to true. */ + searchable?: boolean; + searchPlaceholder?: string; +}; + +export type DataTableColumnFilterRangeValue = { + from?: TValue; + to?: TValue; }; export type DataTableColumnFilterConfig = { @@ -87,6 +237,14 @@ export type DataTableColumnFilterConfig = { | Array | ((context: { rows: Array }) => Array); getOptionValue?: (value: TValue | undefined, row: TData) => string; + /** Settings for `type: "faceted"`, including server-provided facet data. */ + faceting?: DataTableFacetedFilterOptions; + operator?: DataTableColumnFilterOperator; + trueLabel?: string; + falseLabel?: string; + min?: number | string; + max?: number | string; + step?: number; }; export type DataTableColumnMeta = { @@ -103,6 +261,7 @@ export type DataTableColumnMeta = { value: TValue | undefined; }) => DataTableCellOverflow | undefined); headerClassName?: string; + headerStyle?: React.CSSProperties; cellClassName?: | string | ((args: { row: TData; value: TValue | undefined }) => string | undefined); @@ -124,6 +283,31 @@ export type DataTableColumnDef = ColumnDef< TValue > & { meta?: DataTableColumnMeta; + columns?: Array>; +}; + +export type DataTableColumnGroupDef = DataTableColumnDef< + TData, + unknown +> & { + id: string; + columns: Array>; + /** + * A concise explanation of the columns in this group. It is exposed as an + * accessible description and native tooltip on the shared header. + */ + description?: string; + /** + * Allows leaves to cross this group's boundary during column reordering. + * Groups are locked by default so a shared heading remains intact. + */ + freeReordering?: boolean; + /** Additional class name for this shared group header. */ + headerClassName?: string; + /** Additional inline styles for this shared group header. */ + headerStyle?: React.CSSProperties; + /** Height for this shared group header, overriding `columnGroupHeaderHeight`. */ + headerHeight?: React.CSSProperties["height"]; }; export type DataTableToolbarAction = { @@ -140,14 +324,26 @@ export type DataTableToolbarAction = { disabled?: boolean; }; +export type DataTableSelectionActionContext = { + /** Selected row objects that are present in the currently loaded data. */ + rows: Array; + /** Every selected row id, including ids retained across server pages. */ + rowIds: Array; +}; + export type DataTableSelectionAction = { key: string; label: string; icon?: React.ComponentType<{ className?: string }>; iconOnly?: boolean; - onClick: (context: { rows: Array }) => void | Promise; + onClick: (context: DataTableSelectionActionContext) => void | Promise; variant?: "default" | "secondary" | "outline" | "ghost" | "destructive"; - disabled?: boolean | ((rows: Array) => boolean); + disabled?: + | boolean + | (( + rows: Array, + context: DataTableSelectionActionContext, + ) => boolean); }; export type DataTableRowAction = { @@ -178,9 +374,23 @@ export type DataTableToolbarVisibility = { customToolbar?: boolean; }; +/** Optional toolbar controls for working with the current table layout and views. */ +export type DataTableToolbarDataOperations = { + /** Search, bulk show/hide, pin, and keyboard-accessible column move controls. */ + columnChooser?: boolean; + /** Create, apply, rename, and delete saved views when `savedViews` is configured. */ + savedViews?: boolean; + /** Adds a reset-layout action using the table's initial layout. */ + resetLayout?: boolean; +}; + export type DataTableCardRendererProps = { row: TData; rowId: string; + depth: number; + canExpandSubRows: boolean; + isSubRowsExpanded: boolean; + toggleSubRowsExpanded: () => void; isSelected: boolean; onSelectedChange: (nextValue: boolean) => void; actions: Array>; @@ -192,10 +402,36 @@ export type DataTableCardRendererProps = { export type DataTableEditableRowsConfig = { canEditRow?: (row: TData) => boolean; getInitialValues?: (row: TData) => Record; + validateRow?: ( + row: TData, + draftValues: Record, + ) => + | void + | string + | Record + | Promise>; + /** Apply an optimistic host update and optionally return a rollback callback. */ + onOptimisticUpdate?: ( + row: TData, + draftValues: Record, + ) => void | (() => void); onSaveRow: ( row: TData, draftValues: Record, ) => void | Promise; + onSaveSuccess?: ( + row: TData, + draftValues: Record, + ) => void; + onSaveError?: ( + error: unknown, + row: TData, + draftValues: Record, + ) => void; + /** Defaults to true for inputs owned by the table. */ + commitOnEnter?: boolean; + /** Defaults to true for inputs owned by the table. */ + cancelOnEscape?: boolean; }; export type DataTableInfiniteScroll = { @@ -244,6 +480,7 @@ export type DataTableFileUploadConfig = { export type DataTableVirtualizationConfig = { enabled?: boolean; estimateRowHeight?: number; + fallbackRowCount?: number; overscan?: number; card?: DataTableCardVirtualizationConfig; }; @@ -251,6 +488,7 @@ export type DataTableVirtualizationConfig = { export type DataTableCardVirtualizationConfig = { enabled?: boolean; estimateCardHeight?: number; + fallbackCardCount?: number; overscan?: number; lanes?: number | "auto"; }; @@ -261,6 +499,14 @@ export type DataTableExpandedRowProps = { tableRow: Row; }; +/** A separately controlled application detail panel rendered beneath a row. */ +export type DataTableDetailPanel = { + expanded?: ExpandedState; + onExpandedChange?: (expanded: ExpandedState) => void; + getRowCanExpand?: (row: TData) => boolean; + render: (props: DataTableExpandedRowProps) => React.ReactNode; +}; + export type DataTableCsvExportOptions = { filename?: string; includeHeaders?: boolean; @@ -294,6 +540,7 @@ export type DataTableColumnPrefs = { sizing?: Record; order?: ColumnOrderState; pinning?: ColumnPinningState; + rowPinning?: RowPinningState; density?: DataTableDensity; }; @@ -344,7 +591,10 @@ export type DataTableState = { expanded: ExpandedState; columnOrder: ColumnOrderState; columnPinning: ColumnPinningState; + rowPinning: RowPinningState; columnSizing: ColumnSizingState; + /** Present in snapshots produced by 4.4+; optional for 4.x object-literal compatibility. */ + grouping?: GroupingState; density: DataTableDensity; viewMode: DataTableViewMode; showHiddenRows: boolean; @@ -417,12 +667,22 @@ export type DataTableApi = { ) => DataTableSavedView | undefined; deleteSavedView: (id: string) => boolean; clearSavedViews: () => boolean; + pinRow: (rowId: string, position?: "top" | "bottom") => boolean; + unpinRow: (rowId: string) => boolean; focus: () => void; scrollToRow: (rowId: string) => boolean; scrollToColumn: (columnId: string) => boolean; exportCsv: ( options?: boolean | DataTableCsvExportOptions, ) => Promise; + copyToClipboard: ( + options?: boolean | DataTableClipboardCopyOptions, + ) => Promise; + getCellSelection: () => DataTableCellSelection | null; + setCellSelection: (selection: DataTableCellSelection | null) => void; + clearCellSelection: () => void; + print: () => boolean; + toggleFullscreen: () => Promise; }; export type DataTableLabels = { @@ -437,6 +697,10 @@ export type DataTableLabels = { columns: string; filters: string; clearFilters: string; + filterFrom?: string; + filterTo?: string; + filterTrue?: string; + filterFalse?: string; selectedRows: (count: number) => string; showHiddenRows: (label: string) => string; recordsPerPage: string; @@ -450,6 +714,7 @@ export type DataTableLabels = { nextPage: string; lastPage: string; selectAllVisibleRows?: string; + selectAllFilteredRows?: string; selectRow?: string; selectCardRow?: (rowId: string) => string; switchToTableView?: string; @@ -464,7 +729,15 @@ export type DataTableLabels = { cancelEdit: string; expandRow: string; collapseRow: string; + expandRowDetails?: string; + collapseRowDetails?: string; exportCsv: string; + print?: string; + enterFullscreen?: string; + exitFullscreen?: string; + errorTitle?: string; + errorDescription?: string; + retry?: string; density: string; compactDensity: string; comfortableDensity: string; @@ -472,6 +745,30 @@ export type DataTableLabels = { pinLeft: string; pinRight: string; unpin: string; + pinRowToTop: string; + pinRowToBottom: string; + unpinRow: string; + resizeColumn: (columnLabel: string) => string; + grouping?: string; + groupBy?: (columnLabel: string) => string; + ungroup?: (columnLabel: string) => string; + removeGrouping?: (columnLabel: string) => string; + moveGroupingEarlier?: (columnLabel: string) => string; + moveGroupingLater?: (columnLabel: string) => string; + facetSearch?: (columnLabel: string) => string; + searchColumns?: string; + showAllColumns?: string; + hideAllColumns?: string; + moveColumnEarlier?: (columnLabel: string) => string; + moveColumnLater?: (columnLabel: string) => string; + resetColumnLayout?: string; + savedViews?: string; + createSavedView?: string; + savedViewName?: string; + applySavedView?: (name: string) => string; + renameSavedView?: (name: string) => string; + deleteSavedView?: (name: string) => string; + saveSavedView?: string; }; export type DataTableSummaryRow = { @@ -483,6 +780,17 @@ export type DataTableSummaryRow = { >; }; +export type DataTableRowClassNameContext = { + row: TData; + rowId: string; + rowIndex: number; + isEditing: boolean; + isExpanded: boolean; + isLoading: boolean; + isSelected: boolean; + pinnedPosition: false | "top" | "bottom"; +}; + export type DataTableProps = { columns: Array>; data: Array; @@ -508,8 +816,20 @@ export type DataTableProps = { sorting?: SortingState; onSortingChange?: (sorting: SortingState) => void; manualSorting?: boolean; + grouping?: GroupingState; + onGroupingChange?: (grouping: GroupingState) => void; + /** Use rows already grouped by the server instead of TanStack's grouping model. */ + manualGrouping?: boolean; + /** Show group/ungroup controls in the table options menu and grouping bar. */ + enableGrouping?: boolean; + /** Controls whether grouped columns are reordered, removed, or left in place. */ + groupedColumnMode?: false | "reorder" | "remove"; + /** Named aggregation functions available to column `aggregationFn` definitions. */ + aggregationFns?: Record>; pageIndex?: number; pageSize?: number; + /** Sizes an opt-in page from the measurable table scroll viewport. */ + autoPageSize?: boolean | DataTableAutoPageSizeConfig; onPageIndexChange?: (pageIndex: number) => void; onPageSizeChange?: (pageSize: number) => void; pageCount?: number; @@ -517,22 +837,62 @@ export type DataTableProps = { rowSelection?: Record; onRowSelectionChange?: (rowSelection: Record) => void; enableRowSelection?: boolean; + /** Allows multiple selected rows globally or per row. Defaults to true. */ + enableMultiRowSelection?: boolean | ((row: TData) => boolean); + /** Cascades parent selection to sub-rows globally or per row. Defaults to true. */ + enableSubRowSelection?: boolean | ((row: TData) => boolean); + /** Prevents individual rows from being selected. */ + getRowCanSelect?: (row: TData) => boolean; + /** Select-all affects the current page or all loaded filtered rows. */ + rowSelectionSelectAllScope?: "page" | "filtered"; expanded?: ExpandedState; onExpandedChange?: (expanded: ExpandedState) => void; + /** Resolve nested records for tree expansion. */ + getSubRows?: (row: TData, index: number) => Array | undefined; + /** Keep expansion state controlled by the host; useful for server-loaded children. */ + manualExpanding?: boolean; + /** Keep child rows with their parent when paginating. Defaults to TanStack's behavior. */ + paginateExpandedRows?: boolean; + /** Include parents when a descendant matches a filter. */ + filterFromLeafRows?: boolean; + /** Limit descendant traversal while filtering. */ + maxLeafRowFilterDepth?: number; + /** New, independently controlled detail-panel contract. */ + detailPanel?: DataTableDetailPanel; getRowCanExpand?: (row: TData) => boolean; + /** @deprecated Use `detailPanel={{ render }}`. Kept as a detail-panel bridge. */ renderExpandedRow?: ( props: DataTableExpandedRowProps, ) => React.ReactNode; columnOrder?: ColumnOrderState; onColumnOrderChange?: (columnOrder: ColumnOrderState) => void; enableColumnReordering?: boolean; + /** Default height for shared column-group header cells. */ + columnGroupHeaderHeight?: React.CSSProperties["height"]; columnPinning?: ColumnPinningState; onColumnPinningChange?: (columnPinning: ColumnPinningState) => void; enableColumnPinning?: boolean; + rowPinning?: RowPinningState; + onRowPinningChange?: (rowPinning: RowPinningState) => void; + /** Enables row actions that pin a row to the top or bottom of the table. */ + enableRowPinning?: boolean | ((row: TData) => boolean); + /** Keep pinned rows visible when filtering or paginating them out. */ + keepPinnedRows?: boolean; toolbarActions?: Array>; selectionActions?: Array>; rowActions?: Array>; csvExport?: boolean | DataTableCsvExportOptions; + /** Opt-in TSV/CSV copy and application-owned paste handling. */ + clipboard?: DataTableClipboardConfig; + /** Enables pointer and Shift+keyboard rectangular cell selection in grid mode. */ + enableCellSelection?: boolean; + /** Controlled cell/range selection. Supplying a value also enables it in grid mode. */ + cellSelection?: DataTableCellSelection | null; + /** Initial cell/range selection when uncontrolled. */ + defaultCellSelection?: DataTableCellSelection | null; + onCellSelectionChange?: (selection: DataTableCellSelection | null) => void; + /** Host-owned undo/redo commands invoked by Ctrl/Cmd+Z and Ctrl/Cmd+Shift+Z. */ + gridCommands?: DataTableGridCommands; density?: DataTableDensity; onDensityChange?: (density: DataTableDensity) => void; enableDensityToggle?: boolean; @@ -552,9 +912,13 @@ export type DataTableProps = { viewMode?: DataTableViewMode; onViewModeChange?: (viewMode: DataTableViewMode) => void; enableViewToggle?: boolean; + enablePrint?: boolean; + enableFullscreen?: boolean; emptyState?: | React.ReactNode | ((context: DataTableEmptyStateContext) => React.ReactNode); + /** Explicit empty/error/retry rendering contract. */ + stateOverlay?: DataTableStateOverlay; isLoading?: boolean; loadingRowCount?: number; getRowLoadingState?: ( @@ -579,15 +943,25 @@ export type DataTableProps = { dir?: "ltr" | "rtl"; flexGrow?: boolean; toolbarVisibility?: DataTableToolbarVisibility; + /** Opts into enhanced layout and saved-view toolbar controls. */ + toolbarDataOperations?: boolean | DataTableToolbarDataOperations; className?: string; tableClassName?: string; tableContainerClassName?: string; - getRowClassName?: (row: TData) => string | undefined; + stripedRows?: boolean; + getRowClassName?: ( + row: TData, + context: DataTableRowClassNameContext, + ) => string | undefined; onRowClick?: (context: { row: TData; rowId: string }) => void | Promise; onActionError?: (context: DataTableActionErrorContext) => void; dragAndDrop?: DataTableDragAndDropConfig; fileUpload?: DataTableFileUploadConfig; virtualization?: boolean | DataTableVirtualizationConfig; + /** Opt in to ARIA grid semantics and roving keyboard navigation. */ + accessibility?: DataTableAccessibilityOptions; + /** Shorthand for `accessibility={{ mode: "grid" }}`. */ + interactiveGrid?: boolean | DataTableInteractiveGridOptions; }; export function isRowVisible( diff --git a/src/core/ui-kit.ts b/src/core/ui-kit.ts index fc7f128..784f2e6 100644 --- a/src/core/ui-kit.ts +++ b/src/core/ui-kit.ts @@ -12,6 +12,8 @@ export type DataTableUiClassNames = { cardUnselected?: string; cardViewport?: string; cellBorder?: string; + cellSelected?: string; + columnGroupHeader?: string; dragActive?: string; emptyState?: string; footer?: string; @@ -24,6 +26,10 @@ export type DataTableUiClassNames = { resizeHandle?: string; resizeHandleActive?: string; row?: string; + rowEven?: string; + rowOdd?: string; + rowPinnedBottom?: string; + rowPinnedTop?: string; rowSelected?: string; tableContainer?: string; tableScrollArea?: string; diff --git a/src/entries/data-source.ts b/src/entries/data-source.ts new file mode 100644 index 0000000..26442ee --- /dev/null +++ b/src/entries/data-source.ts @@ -0,0 +1 @@ +export * from "../core/data-source/use-data-table-data-source"; diff --git a/styles.css b/styles.css index 307f491..65b72d4 100644 --- a/styles.css +++ b/styles.css @@ -1,35 +1,45 @@ -@source "./dist"; +@source "./dist/**/*.js"; .data-table-container-query { container-type: inline-size; container-name: data-table; } -@container data-table (width < 40rem) { +[data-dtp-striped-rows="true"] + [data-row-parity="odd"]:not([data-state="selected"]) { + background-color: color-mix(in srgb, currentColor 3%, transparent); +} + +/* Keep these package-owned thresholds aligned with + * DATA_TABLE_CONTAINER_BREAKPOINT_WIDTHS in src/core/types.ts. Pixel values + * are intentional so host root-font and Tailwind theme changes cannot make + * presentation disagree with the responsive column state. + */ +@container data-table (width < 640px) { .dt-hide-on-sm { display: none; } } -@container data-table (width < 48rem) { +@container data-table (width < 768px) { .dt-hide-on-md { display: none; } } -@container data-table (width < 64rem) { +@container data-table (width < 1024px) { .dt-hide-on-lg { display: none; } } -@container data-table (width < 80rem) { +@container data-table (width < 1280px) { .dt-hide-on-xl { display: none; } } -@container data-table (width < 96rem) { +@container data-table (width < 1536px) { .dt-hide-on-2xl { display: none; } diff --git a/tsup.config.ts b/tsup.config.ts index 7bcdb19..7d13914 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -17,6 +17,7 @@ export default defineConfig({ thegridcn: "src/entries/thegridcn.ts", "thegridcn-virtual": "src/entries/thegridcn-virtual.ts", "url-state": "src/entries/url-state.ts", + "data-source": "src/entries/data-source.ts", types: "src/entries/types.ts", advanced: "src/entries/advanced.ts", adapter: "src/entries/adapter.ts",