@cognite/aura 1.47230.0 → 1.47284.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ui/core/data-grid/data-grid.d.ts +4 -4
- package/dist/components/ui/core/data-grid/data-grid.js +16 -8
- package/dist/components/ui/core/data-grid/data-grid.js.map +1 -1
- package/dist/components/ui/core/data-grid/index.d.ts +1 -1
- package/dist/components/ui/core/data-grid/index.js +1 -1
- package/dist/components/ui/core/data-grid/index.js.map +1 -1
- package/dist/components/ui/core/pagination/pagination.js +3 -3
- package/dist/components/ui/core/pagination/pagination.js.map +1 -1
- package/dist/components/ui/core/status-text/status-text.d.ts +4 -0
- package/dist/components/ui/core/status-text/status-text.js +14 -0
- package/dist/components/ui/core/status-text/status-text.js.map +1 -0
- package/package.json +1 -1
|
@@ -110,10 +110,10 @@ declare function DataGridCheckboxCell<TData>({ row }: {
|
|
|
110
110
|
}): ReactElement;
|
|
111
111
|
type DataGridSearchProps = Omit<ComponentProps<typeof Search>, "value" | "onChange" | "onClear">;
|
|
112
112
|
declare const DataGridSearch: ForwardRefExoticComponent<DataGridSearchProps & RefAttributes<ComponentRef<typeof Search>>>;
|
|
113
|
-
type
|
|
114
|
-
|
|
113
|
+
type DataGridResultCountProps = Omit<ComponentProps<"output">, "children"> & {
|
|
114
|
+
formatLabel?: (filteredCount: number, totalCount?: number) => ReactNode;
|
|
115
115
|
};
|
|
116
|
-
declare const
|
|
116
|
+
declare const DataGridResultCount: ForwardRefExoticComponent<DataGridResultCountProps & RefAttributes<HTMLOutputElement>>;
|
|
117
117
|
type DataGridFilterTriggerProps = ComponentProps<typeof Button> & {
|
|
118
118
|
activeCount?: number;
|
|
119
119
|
label?: string;
|
|
@@ -122,7 +122,7 @@ type DataGridFilterTriggerProps = ComponentProps<typeof Button> & {
|
|
|
122
122
|
};
|
|
123
123
|
declare const DataGridFilterTrigger: ForwardRefExoticComponent<DataGridFilterTriggerProps & RefAttributes<ComponentRef<typeof Button>>>;
|
|
124
124
|
declare function useDataGridContext(): DataGridContextValue;
|
|
125
|
-
export { DataGrid, DataGridCheckboxCell, DataGridCheckboxHeader,
|
|
125
|
+
export { DataGrid, DataGridCheckboxCell, DataGridCheckboxHeader, DataGridResultCount, DataGridFilterTrigger, DataGridSearch, useDataGridContext, type DataGridContextValue, type DataGridHandle, type DataGridLabels };
|
|
126
126
|
export { DataGridFilterPanel, type DataGridFilterColumn, type DataGridFilterPanelLabels } from "./data-grid-filter-panel";
|
|
127
127
|
export { DataGridFooter, DataGridFooterEnd, DataGridFooterStart } from "./data-grid-footer";
|
|
128
128
|
export { DataGridHeader, DataGridHeaderActions, DataGridHeaderEnd, DataGridHeaderStart, DataGridSubtitle, DataGridTitle } from "./data-grid-header";
|
|
@@ -10,6 +10,7 @@ import { Button } from "../button/button.js";
|
|
|
10
10
|
import { EmptyState, EmptyStateActions, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle } from "../empty-state/empty-state.js";
|
|
11
11
|
import { Search } from "../search/search.js";
|
|
12
12
|
import { Skeleton } from "../skeleton/skeleton.js";
|
|
13
|
+
import { StatusText } from "../status-text/status-text.js";
|
|
13
14
|
import { DataGridCell } from "./data-grid-cell.js";
|
|
14
15
|
import { DataGridHeaderRow } from "./data-grid-header-row.js";
|
|
15
16
|
import { DataGridRow } from "./data-grid-row.js";
|
|
@@ -433,19 +434,26 @@ const DataGridSearch = /*#__PURE__*/ forwardRef(function DataGridSearch({ classN
|
|
|
433
434
|
});
|
|
434
435
|
});
|
|
435
436
|
DataGridSearch.displayName = 'DataGridSearch';
|
|
436
|
-
|
|
437
|
+
function defaultFormatResultCount(filteredCount, totalCount) {
|
|
438
|
+
const noun = (totalCount ?? filteredCount) === 1 ? 'result' : 'results';
|
|
439
|
+
return totalCount === undefined ? `Showing ${filteredCount.toLocaleString('en')} ${noun}` : `Showing ${filteredCount.toLocaleString('en')} of ${totalCount.toLocaleString('en')} ${noun}`;
|
|
440
|
+
}
|
|
441
|
+
const DataGridResultCount = /*#__PURE__*/ forwardRef(function DataGridResultCount({ formatLabel = defaultFormatResultCount, ...props }, ref) {
|
|
437
442
|
const { filteredCount, totalCount } = useDataGridContext();
|
|
438
|
-
|
|
443
|
+
// Nothing to say until the grid has counted.
|
|
444
|
+
if (filteredCount === undefined) return null;
|
|
445
|
+
const content = formatLabel(filteredCount, totalCount);
|
|
439
446
|
if (content == null) return null;
|
|
440
|
-
return
|
|
447
|
+
return(// Not live by default: it changes on every search keystroke, which screen readers would read out.
|
|
448
|
+
/*#__PURE__*/ _jsx(StatusText, {
|
|
441
449
|
ref: ref,
|
|
442
|
-
"data-slot": "data-grid-result-count
|
|
443
|
-
|
|
450
|
+
"data-slot": "data-grid-result-count",
|
|
451
|
+
"aria-live": "off",
|
|
444
452
|
...props,
|
|
445
453
|
children: content
|
|
446
|
-
});
|
|
454
|
+
}));
|
|
447
455
|
});
|
|
448
|
-
|
|
456
|
+
DataGridResultCount.displayName = 'DataGridResultCount';
|
|
449
457
|
function renderDataGridState(state, fallback) {
|
|
450
458
|
if (isDataGridStateCopy(state)) {
|
|
451
459
|
return /*#__PURE__*/ _jsx(DataGridState, {
|
|
@@ -511,7 +519,7 @@ function useDataGridContext() {
|
|
|
511
519
|
}
|
|
512
520
|
return context;
|
|
513
521
|
}
|
|
514
|
-
export { DataGrid, DataGridCheckboxCell, DataGridCheckboxHeader,
|
|
522
|
+
export { DataGrid, DataGridCheckboxCell, DataGridCheckboxHeader, DataGridResultCount, DataGridFilterTrigger, DataGridSearch, useDataGridContext };
|
|
515
523
|
export { DataGridFilterPanel } from "./data-grid-filter-panel.js";
|
|
516
524
|
export { DataGridFooter, DataGridFooterEnd, DataGridFooterStart } from "./data-grid-footer.js";
|
|
517
525
|
export { DataGridHeader, DataGridHeaderActions, DataGridHeaderEnd, DataGridHeaderStart, DataGridSubtitle, DataGridTitle } from "./data-grid-header.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ui/core/data-grid/data-grid.tsx"],"sourcesContent":["import {\n type ComponentProps,\n type ComponentRef,\n type CSSProperties,\n type ForwardRefExoticComponent,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefAttributes,\n type RefObject,\n createContext,\n forwardRef,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\n\nimport { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox';\nimport { IconCheck, IconFilter, IconMinus } from '@tabler/icons-react';\nimport {\n type CellContext,\n type ColumnDef,\n type ColumnPinningState,\n type ColumnSizingState,\n type ExpandedState,\n type FilterFnOption,\n type PaginationState,\n type Row,\n type RowSelectionState,\n type Table,\n type SortingState,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport { useVirtualizer } from '@tanstack/react-virtual';\n\nimport { useControllableState } from '../../../../lib/use-controllable-state';\nimport { cn, focusState } from '../../../../lib/utils';\nimport { Button } from '../button/button';\nimport {\n EmptyState,\n EmptyStateActions,\n EmptyStateDescription,\n EmptyStateIcon,\n EmptyStateTitle,\n} from '../empty-state/empty-state';\nimport type { EmptyStateType } from '../empty-state/empty-state.context';\nimport { Search } from '../search/search';\nimport { Skeleton } from '../skeleton/skeleton';\n\nimport { DataGridCell } from './data-grid-cell';\nimport { DataGridHeaderRow } from './data-grid-header-row';\nimport { DataGridRow } from './data-grid-row';\nimport {\n countSelectedRowIds,\n getDataGridCheckboxState,\n selectDataGridRowTree,\n} from './data-grid-selection-state';\nimport { DataGridSelectionToolbar } from './data-grid-selection-toolbar';\nimport type { DataGridSelectionActions } from './data-grid-selection.types';\nimport { PINNED_COLUMN_Z_INDEX, getTextValue } from './data-grid.utils';\n\nconst EMPTY_PINNED_COLUMNS: string[] = [];\n\nfunction defaultDataGridCell<TData>({\n renderValue,\n}: CellContext<TData, unknown>): ReactNode {\n const text = getTextValue(renderValue());\n if (text === undefined) return null;\n\n return (\n <span className=\"block min-w-0 truncate\" title={text}>\n {text}\n </span>\n );\n}\n\nconst DEFAULT_COLUMN = {\n cell: defaultDataGridCell,\n size: undefined,\n};\n\ntype DataGridContextValue = {\n searchValue: string;\n setSearchValue: (value: string) => void;\n filteredCount?: number;\n totalCount?: number;\n};\n\nconst DataGridContext = createContext<DataGridContextValue | undefined>(\n undefined\n);\n\ntype DataGridSize = 'default' | 'compact';\ntype DataGridQueryMode = 'client' | 'server';\ntype DataGridLoadingVariant = 'skeleton' | 'none';\n\ntype DataGridStateCopyFields = {\n title: string;\n description: string;\n action: ReactNode;\n};\n\ntype AtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends keyof T\n ? Pick<Required<T>, Keys> & Partial<Omit<T, Keys>>\n : never;\n\ntype DataGridStateCopy = AtLeastOne<DataGridStateCopyFields>;\n\ntype DataGridLabels = {\n clearSearch: string;\n clearFilters: string;\n};\n\nconst defaultDataGridLabels: DataGridLabels = {\n clearSearch: 'Clear search',\n clearFilters: 'Clear filters',\n};\n\ntype DataGridLoadingCellContext = {\n rowIndex: number;\n columnId: string;\n columnIndex: number;\n size: DataGridSize;\n};\n\nconst ROW_HEIGHT_MAP: Record<DataGridSize, number> = {\n default: 36,\n compact: 32,\n};\n\nconst HEADER_HEIGHT_MAP: Record<DataGridSize, number> = {\n default: 36,\n compact: 32,\n};\n\ntype DataGridHandle = {\n scrollToRow: (index: number) => void;\n resetSorting: () => void;\n resetSelection: () => void;\n resetSearch: () => void;\n};\n\ntype DataGridBaseProps<TData> = {\n data: TData[];\n columns: ColumnDef<TData>[];\n getRowId?: (originalRow: TData, index: number) => string;\n rowCount?: number;\n globalFilterFn?: FilterFnOption<TData>;\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean);\n enableSorting?: boolean;\n enableColumnResizing?: boolean;\n columnGrow?: boolean;\n columnSizing?: ColumnSizingState;\n defaultColumnSizing?: ColumnSizingState;\n onColumnSizingChange?: (value: ColumnSizingState) => void;\n manualPagination?: boolean;\n manualSorting?: boolean;\n rowSelection?: RowSelectionState;\n defaultRowSelection?: RowSelectionState;\n onRowSelectionChange?: (value: RowSelectionState) => void;\n selectionActions?: DataGridSelectionActions;\n sorting?: SortingState;\n defaultSorting?: SortingState;\n onSortingChange?: (value: SortingState) => void;\n pagination?: PaginationState;\n defaultPagination?: PaginationState;\n onPaginationChange?: (value: PaginationState) => void;\n getSubRows?: (row: TData, index: number) => TData[] | undefined;\n expanded?: ExpandedState;\n defaultExpanded?: ExpandedState;\n onExpandedChange?: (value: ExpandedState) => void;\n getRowCanExpand?: (row: Row<TData>) => boolean;\n maxDepth?: number;\n pinnedColumns?: string[];\n // forwardRef cannot preserve the `TData` generic, so the imperative handle\n // is exposed via a ref-object prop instead of `forwardRef` + `useImperativeHandle`.\n // See https://github.com/facebook/react/issues/22018.\n gridRef?: RefObject<DataGridHandle | null>;\n size?: DataGridSize;\n children?: ReactNode;\n className?: string;\n onRowClick?: (row: Row<TData>) => void;\n searchValue?: string;\n defaultSearchValue?: string;\n onSearchValueChange?: (value: string) => void;\n queryMode?: DataGridQueryMode;\n loading?: boolean;\n loadingVariant?: DataGridLoadingVariant;\n loadingRowCount?: number;\n renderLoadingCell?: (ctx: DataGridLoadingCellContext) => ReactNode;\n emptyState?: ReactNode | DataGridStateCopy;\n noResultsState?: ReactNode | DataGridStateCopy;\n onClearSearch?: () => void;\n onClearFilters?: () => void;\n labels?: Partial<DataGridLabels>;\n filteredResultCount?: number;\n totalResultCount?: number;\n rowHeight?: number;\n headerHeight?: number;\n};\n\n// The grid renders with `role=\"table\"`, which requires an accessible name for\n// screen readers. It is bad practice to omit one, so the type requires at least\n// one of `aria-label` / `aria-labelledby` rather than leaving both optional.\ntype DataGridAccessibleNameProps =\n | { 'aria-label': string; 'aria-labelledby'?: string }\n | { 'aria-labelledby': string; 'aria-label'?: string };\n\ntype DataGridProps<TData> = DataGridBaseProps<TData> &\n DataGridAccessibleNameProps;\n\nfunction DataGrid<TData>({\n data,\n columns,\n getRowId,\n rowCount,\n globalFilterFn = 'auto',\n enableRowSelection = false,\n enableSorting = false,\n enableColumnResizing = false,\n columnGrow = false,\n columnSizing,\n defaultColumnSizing,\n onColumnSizingChange,\n manualPagination = false,\n manualSorting = false,\n rowSelection,\n defaultRowSelection,\n onRowSelectionChange,\n selectionActions,\n sorting,\n defaultSorting,\n onSortingChange,\n pagination,\n defaultPagination,\n onPaginationChange,\n getSubRows,\n expanded,\n defaultExpanded,\n onExpandedChange,\n getRowCanExpand,\n maxDepth = 5,\n pinnedColumns = EMPTY_PINNED_COLUMNS,\n gridRef,\n size = 'default',\n children,\n className,\n onRowClick,\n searchValue,\n defaultSearchValue,\n onSearchValueChange,\n queryMode = 'client',\n loading = false,\n loadingVariant = 'skeleton',\n loadingRowCount,\n renderLoadingCell,\n emptyState,\n noResultsState,\n filteredResultCount,\n totalResultCount,\n onClearSearch,\n onClearFilters,\n labels: labelOverrides,\n rowHeight,\n headerHeight,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n}: DataGridProps<TData>): ReactElement {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const labels = { ...defaultDataGridLabels, ...labelOverrides };\n\n const [resolvedSearchValue, setResolvedSearchValue] = useControllableState({\n prop: searchValue,\n defaultProp: defaultSearchValue ?? '',\n onChange: onSearchValueChange,\n });\n\n const [resolvedSorting, setResolvedSorting] =\n useControllableState<SortingState>({\n prop: sorting,\n defaultProp: defaultSorting ?? [],\n onChange: onSortingChange,\n });\n\n const [resolvedRowSelection, setResolvedRowSelection] =\n useControllableState<RowSelectionState>({\n prop: rowSelection,\n defaultProp: defaultRowSelection ?? {},\n onChange: onRowSelectionChange,\n });\n\n const hasPagination =\n pagination !== undefined || defaultPagination !== undefined;\n\n const [resolvedPagination, setResolvedPagination] =\n useControllableState<PaginationState>({\n prop: pagination,\n defaultProp: defaultPagination ?? { pageIndex: 0, pageSize: 10 },\n onChange: onPaginationChange,\n });\n\n const hasExpanding = getSubRows !== undefined;\n\n const [resolvedExpanded, setResolvedExpanded] =\n useControllableState<ExpandedState>({\n prop: expanded,\n defaultProp: defaultExpanded ?? {},\n onChange: onExpandedChange,\n });\n\n const [resolvedColumnSizing, setResolvedColumnSizing] =\n useControllableState<ColumnSizingState>({\n prop: columnSizing,\n defaultProp: defaultColumnSizing ?? {},\n onChange: onColumnSizingChange,\n });\n\n const isClientSorting = enableSorting && !manualSorting;\n const isClientPagination = hasPagination && !manualPagination;\n\n const columnPinning: ColumnPinningState = useMemo(\n () => ({ left: pinnedColumns, right: [] }),\n [pinnedColumns]\n );\n\n const pinnedColumnIds = useMemo(\n () => new Set(pinnedColumns),\n [pinnedColumns]\n );\n const lastPinnedColumnId = pinnedColumns[pinnedColumns.length - 1];\n // eslint-disable-next-line react-hooks/incompatible-library -- useReactTable in the DataGrid component is intentional and stable.\n const table = useReactTable({\n data,\n columns,\n state: {\n columnPinning,\n globalFilter: resolvedSearchValue,\n sorting: resolvedSorting,\n rowSelection: resolvedRowSelection,\n columnSizing: resolvedColumnSizing,\n ...(hasPagination ? { pagination: resolvedPagination } : {}),\n ...(hasExpanding ? { expanded: resolvedExpanded } : {}),\n },\n onSortingChange: setResolvedSorting,\n onRowSelectionChange: setResolvedRowSelection,\n onColumnSizingChange: setResolvedColumnSizing,\n ...(hasPagination ? { onPaginationChange: setResolvedPagination } : {}),\n ...(hasExpanding ? { onExpandedChange: setResolvedExpanded } : {}),\n // Preserve expanded rows across `data` changes (e.g. refetches) so the user\n // doesn't lose their place. Consumers fetching server-paged data should\n // ensure stable `getRowId` values; otherwise expanded keys can stick to\n // rows that no longer logically exist.\n autoResetExpanded: false,\n enableRowSelection,\n // Selecting a parent selects every descendant, including while it is collapsed.\n enableSubRowSelection: true,\n enableSorting,\n enableColumnResizing,\n columnResizeMode: 'onChange',\n defaultColumn: DEFAULT_COLUMN,\n manualPagination,\n manualSorting,\n manualFiltering: queryMode === 'server',\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n globalFilterFn,\n ...(isClientSorting ? { getSortedRowModel: getSortedRowModel() } : {}),\n ...(isClientPagination\n ? { getPaginationRowModel: getPaginationRowModel() }\n : {}),\n ...(hasExpanding ? { getExpandedRowModel: getExpandedRowModel() } : {}),\n getRowId,\n getSubRows,\n getRowCanExpand,\n });\n\n const { rows } = table.getRowModel();\n const headerGroups = table.getHeaderGroups();\n const visibleColumns = table.getVisibleFlatColumns();\n\n const resolvedRowHeight = rowHeight ?? ROW_HEIGHT_MAP[size];\n const resolvedHeaderHeight = headerHeight ?? HEADER_HEIGHT_MAP[size];\n const resolvedLoadingRowCount = loadingRowCount ?? 6;\n const shouldRenderSkeleton = loading && loadingVariant === 'skeleton';\n const hideRowsForLoading = loading && loadingVariant !== 'none';\n const hasActiveServerSearch =\n queryMode === 'server' && resolvedSearchValue !== '';\n const hasNoRows = !loading && data.length === 0 && !hasActiveServerSearch;\n const hasNoResults =\n !loading &&\n (hasActiveServerSearch\n ? data.length === 0\n : data.length > 0 && table.getFilteredRowModel().rows.length === 0);\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollContainerRef.current,\n estimateSize: () => resolvedRowHeight,\n overscan: 10,\n });\n const bodyHeight = shouldRenderSkeleton\n ? resolvedLoadingRowCount * resolvedRowHeight\n : virtualizer.getTotalSize();\n const bodyStyle: CSSProperties & {\n '--data-grid-body-height': string;\n '--data-grid-body-min-height': string;\n } = {\n '--data-grid-body-height': `${bodyHeight}px`,\n '--data-grid-body-min-height': `${resolvedRowHeight * 4}px`,\n };\n\n useImperativeHandle(gridRef, () => ({\n scrollToRow: (index: number) => virtualizer.scrollToIndex(index),\n resetSorting: () => setResolvedSorting([]),\n resetSelection: () => setResolvedRowSelection({}),\n resetSearch: () => setResolvedSearchValue(''),\n }));\n\n const hasFlexibleColumn =\n !enableColumnResizing &&\n !columnGrow &&\n visibleColumns.some(\n (column) =>\n column.columnDef.size === undefined && !pinnedColumnIds.has(column.id)\n );\n const gridTemplateColumns = visibleColumns\n .map((column, index) => {\n const columnSize = column.getSize();\n if (enableColumnResizing || pinnedColumnIds.has(column.id)) {\n return `${columnSize}px`;\n }\n if (columnGrow) {\n return `minmax(${columnSize}px, ${columnSize}fr)`;\n }\n const isLastColumn = index === visibleColumns.length - 1;\n if (column.columnDef.size !== undefined) {\n if (!hasFlexibleColumn && isLastColumn) {\n return `minmax(${columnSize}px, 1fr)`;\n }\n return `${columnSize}px`;\n }\n return `minmax(${columnSize}px, 1fr)`;\n })\n .join(' ');\n\n const scrollContainerStyle: CSSProperties & {\n '--data-grid-template-columns': string;\n } = {\n '--data-grid-template-columns': gridTemplateColumns,\n };\n\n const isResizingColumn = Boolean(\n table.getState().columnSizingInfo.isResizingColumn\n );\n const clientFilteredCount = table.getFilteredRowModel().rows.length;\n const clientTotalCount = table.getCoreRowModel().rows.length;\n\n const contextValue = useMemo<DataGridContextValue>(\n () => ({\n searchValue: resolvedSearchValue,\n setSearchValue: setResolvedSearchValue,\n filteredCount:\n queryMode === 'client' ? clientFilteredCount : filteredResultCount,\n totalCount: queryMode === 'client' ? clientTotalCount : totalResultCount,\n }),\n [\n resolvedSearchValue,\n setResolvedSearchValue,\n queryMode,\n clientFilteredCount,\n filteredResultCount,\n clientTotalCount,\n totalResultCount,\n ]\n );\n\n const selectedRowCount = countSelectedRowIds(resolvedRowSelection);\n\n return (\n <DataGridContext.Provider value={contextValue}>\n <div\n data-slot=\"data-grid\"\n data-query-mode={queryMode}\n data-filtered-result-count={filteredResultCount}\n data-total-result-count={totalResultCount}\n className={cn(\n 'relative flex min-h-0 w-full flex-col overflow-clip rounded-xl text-sm',\n className\n )}\n >\n {children}\n <div\n ref={scrollContainerRef}\n data-slot=\"data-grid-scroll-container\"\n className=\"relative order-2 min-h-0 w-full flex-1 overflow-auto\"\n style={scrollContainerStyle}\n role=\"table\"\n aria-rowcount={\n hideRowsForLoading\n ? headerGroups.length\n : (rowCount ?? rows.length) + headerGroups.length\n }\n aria-colcount={visibleColumns.length}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n <div\n className={cn(\n 'min-w-fit w-full',\n enableRowSelection !== false && selectedRowCount > 0 && 'pb-24'\n )}\n >\n <div\n role=\"rowgroup\"\n data-slot=\"data-grid-header-group\"\n className=\"contents\"\n >\n {headerGroups.map((headerGroup, headerRowIndex) => (\n <DataGridHeaderRow\n key={headerGroup.id}\n headerGroup={headerGroup}\n headerRowIndex={headerRowIndex}\n resolvedHeaderHeight={resolvedHeaderHeight}\n pinnedColumnIds={pinnedColumnIds}\n lastPinnedColumnId={lastPinnedColumnId}\n isResizingColumn={isResizingColumn}\n />\n ))}\n </div>\n\n <div\n role=\"rowgroup\"\n data-slot=\"data-grid-body\"\n className={cn(\n 'relative min-h-(--data-grid-body-min-height)',\n !hasNoRows && !hasNoResults && 'h-(--data-grid-body-height)'\n )}\n style={bodyStyle}\n >\n {shouldRenderSkeleton &&\n Array.from(\n { length: resolvedLoadingRowCount },\n (_, rowIndex) => (\n <div\n key={`skeleton-row-${rowIndex}`}\n data-slot=\"data-grid-row-loading\"\n aria-hidden=\"true\"\n className=\"absolute left-0 right-0 grid border-b bg-background\"\n style={{\n gridTemplateColumns:\n 'var(--data-grid-template-columns)',\n height: resolvedRowHeight,\n transform: `translateY(${rowIndex * resolvedRowHeight}px)`,\n }}\n >\n {visibleColumns.map((column, colIndex) => {\n const isPinned = pinnedColumnIds.has(column.id);\n const isLastPinned =\n isPinned && lastPinnedColumnId === column.id;\n return (\n <DataGridCell\n key={column.id}\n isPinned={isPinned}\n isLastPinned={isLastPinned}\n colIndex={colIndex + 1}\n style={\n isPinned\n ? {\n position: 'sticky',\n left: column.getStart('left'),\n zIndex: PINNED_COLUMN_Z_INDEX,\n }\n : undefined\n }\n >\n {renderLoadingCell?.({\n rowIndex,\n columnId: column.id,\n columnIndex: colIndex,\n size,\n }) ??\n (column.id === 'select' ? (\n <Skeleton className=\"h-4 w-4 rounded\" />\n ) : (\n <Skeleton\n className={cn(\n 'h-4 max-w-full',\n colIndex === 0 ? 'w-3/4' : 'w-2/3'\n )}\n />\n ))}\n </DataGridCell>\n );\n })}\n </div>\n )\n )}\n\n {!hideRowsForLoading &&\n !hasNoRows &&\n !hasNoResults &&\n virtualizer\n .getVirtualItems()\n .map((virtualRow) => (\n <DataGridRow\n key={rows[virtualRow.index].id}\n row={rows[virtualRow.index]}\n virtualRow={virtualRow}\n headerGroupCount={headerGroups.length}\n pinnedColumnIds={pinnedColumnIds}\n lastPinnedColumnId={lastPinnedColumnId}\n maxDepth={maxDepth}\n hasExpanding={hasExpanding}\n onRowClick={onRowClick}\n />\n ))}\n\n {!loading && hasNoRows && emptyState != null && (\n <div className=\"pt-2\">\n <div className=\"flex items-center justify-center rounded-lg bg-medium-background\">\n {renderDataGridState(emptyState, {\n type: 'new-object',\n title: 'No rows yet',\n description: 'Add data to populate this table.',\n })}\n </div>\n </div>\n )}\n\n {!loading && hasNoResults && (\n <div className=\"pt-2\">\n <div className=\"flex items-center justify-center bg-background\">\n {renderDataGridState(noResultsState, {\n type: 'no-results',\n title: 'No results found',\n description:\n queryMode === 'server'\n ? 'Apply a different query or clear filters.'\n : 'Try a different search term or clear filters.',\n action:\n onClearSearch || onClearFilters ? (\n <div className=\"mt-2 flex items-center justify-center gap-2\">\n {onClearSearch ? (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={onClearSearch}\n >\n {labels.clearSearch}\n </Button>\n ) : null}\n {onClearFilters ? (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={onClearFilters}\n >\n {labels.clearFilters}\n </Button>\n ) : null}\n </div>\n ) : undefined,\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n {enableRowSelection !== false ? (\n <DataGridSelectionToolbar\n // The count includes every selected id.\n // That covers parents and their children, rows on other pages, and rows hidden by search.\n selectedCount={selectedRowCount}\n rowSelection={resolvedRowSelection}\n selectionActions={selectionActions}\n onClear={() => setResolvedRowSelection({})}\n />\n ) : null}\n </div>\n </div>\n </DataGridContext.Provider>\n );\n}\n\ntype DataGridCheckboxProps = {\n checked: boolean | 'indeterminate';\n onCheckedChange: (checked: boolean | 'indeterminate') => void;\n disabled?: boolean;\n 'aria-label'?: string;\n};\n\nfunction DataGridCheckbox({\n checked,\n onCheckedChange,\n disabled,\n 'aria-label': checkboxAriaLabel,\n}: DataGridCheckboxProps): ReactElement {\n const isIndeterminate = checked === 'indeterminate';\n const isChecked = checked === true;\n\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n checked={isIndeterminate ? false : isChecked}\n indeterminate={isIndeterminate}\n disabled={disabled}\n onCheckedChange={(next) => onCheckedChange(next)}\n aria-label={checkboxAriaLabel}\n className={cn(\n 'peer relative size-4 shrink-0 rounded-sm border-[1.5px] border-muted-foreground bg-transparent text-foreground-on-primary outline-none transition-colors',\n '[&:is([data-checked],[data-indeterminate]):not([data-disabled])]:border-transparent [&:is([data-checked],[data-indeterminate]):not([data-disabled])]:bg-primary-background',\n 'hover:data-unchecked:not-data-disabled:border-muted-foreground-hover',\n 'data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:border-transparent data-disabled:bg-disabled-background data-disabled:text-disabled-foreground data-disabled:data-unchecked:border-border',\n '[&[data-checked]_[data-slot=checkbox-check]]:block [&[data-indeterminate]_[data-slot=checkbox-dash]]:block',\n focusState\n )}\n >\n <CheckboxPrimitive.Indicator className=\"grid size-full place-content-center text-current transition-none\">\n <IconCheck\n aria-hidden=\"true\"\n data-slot=\"checkbox-check\"\n className=\"hidden size-3\"\n stroke={3}\n />\n <IconMinus\n aria-hidden=\"true\"\n data-slot=\"checkbox-dash\"\n className=\"hidden size-3\"\n stroke={3.5}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nfunction DataGridCheckboxHeader<TData>({\n table,\n}: {\n table: Table<TData>;\n}): ReactElement {\n const allSelected = table.getIsAllPageRowsSelected();\n const someSelected = table.getIsSomePageRowsSelected();\n const checked = allSelected ? true : someSelected ? 'indeterminate' : false;\n\n return (\n <DataGridCheckbox\n checked={checked}\n onCheckedChange={() => table.toggleAllPageRowsSelected(!allSelected)}\n aria-label=\"Select all rows\"\n />\n );\n}\n\nfunction DataGridCheckboxCell<TData>({\n row,\n}: {\n row: Row<TData>;\n}): ReactElement {\n return (\n <DataGridCheckbox\n checked={getDataGridCheckboxState(row)}\n disabled={!row.getCanSelect()}\n onCheckedChange={(next) => {\n if (next === true) {\n selectDataGridRowTree(row);\n return;\n }\n row.toggleSelected(false);\n }}\n aria-label=\"Select row\"\n />\n );\n}\n\ntype DataGridSearchProps = Omit<\n ComponentProps<typeof Search>,\n 'value' | 'onChange' | 'onClear'\n>;\n\nconst DataGridSearch: ForwardRefExoticComponent<\n DataGridSearchProps & RefAttributes<ComponentRef<typeof Search>>\n> = forwardRef<ComponentRef<typeof Search>, DataGridSearchProps>(\n function DataGridSearch(\n { className, placeholder = 'Search', ...props },\n ref\n ) {\n const { searchValue, setSearchValue } = useDataGridContext();\n\n return (\n <Search\n ref={ref}\n value={searchValue}\n onChange={(event) => setSearchValue(event.target.value)}\n onClear={() => setSearchValue('')}\n placeholder={placeholder}\n className={cn('py-4', className)}\n {...props}\n />\n );\n }\n);\nDataGridSearch.displayName = 'DataGridSearch';\n\ntype DataGridResultCountBadgeProps = ComponentProps<'span'> & {\n label?: ReactNode;\n};\n\nconst DataGridResultCountBadge: ForwardRefExoticComponent<\n DataGridResultCountBadgeProps & RefAttributes<HTMLSpanElement>\n> = forwardRef<ComponentRef<'span'>, DataGridResultCountBadgeProps>(\n function DataGridResultCountBadge({ label, className, ...props }, ref) {\n const { filteredCount, totalCount } = useDataGridContext();\n\n const content =\n label ??\n (filteredCount === undefined\n ? null\n : totalCount !== undefined\n ? `${filteredCount} of ${totalCount} results`\n : `${filteredCount} results`);\n\n if (content == null) return null;\n\n return (\n <span\n ref={ref}\n data-slot=\"data-grid-result-count-badge\"\n className={cn(\n 'inline-flex h-5 shrink-0 items-center rounded-sm border border-border bg-muted-background px-1.5 text-xs font-medium text-muted-foreground',\n className\n )}\n {...props}\n >\n {content}\n </span>\n );\n }\n);\nDataGridResultCountBadge.displayName = 'DataGridResultCountBadge';\n\nfunction renderDataGridState(\n state: ReactNode | DataGridStateCopy | undefined,\n fallback: { type: EmptyStateType } & Pick<\n DataGridStateCopyFields,\n 'title' | 'description'\n > &\n Partial<Pick<DataGridStateCopyFields, 'action'>>\n): ReactNode {\n if (isDataGridStateCopy(state)) {\n return (\n <DataGridState\n type={fallback.type}\n title={state.title ?? fallback.title}\n description={state.description ?? fallback.description}\n action={state.action !== undefined ? state.action : fallback.action}\n />\n );\n }\n\n if (state !== undefined) return state;\n\n return (\n <DataGridState\n type={fallback.type}\n title={fallback.title}\n description={fallback.description}\n action={fallback.action}\n />\n );\n}\n\nfunction isDataGridStateCopy(value: unknown): value is DataGridStateCopy {\n return (\n typeof value === 'object' &&\n value !== null &&\n !('type' in value) &&\n ('title' in value || 'description' in value || 'action' in value)\n );\n}\n\nfunction DataGridState({\n type,\n title,\n description,\n action,\n}: { type: EmptyStateType } & Pick<\n DataGridStateCopyFields,\n 'title' | 'description'\n> &\n Partial<Pick<DataGridStateCopyFields, 'action'>>): ReactElement {\n return (\n <EmptyState type={type} className=\"p-10\">\n <EmptyStateIcon />\n <EmptyStateTitle as=\"p\">{title}</EmptyStateTitle>\n <EmptyStateDescription>{description}</EmptyStateDescription>\n {action ? <EmptyStateActions>{action}</EmptyStateActions> : null}\n </EmptyState>\n );\n}\n\ntype DataGridFilterTriggerProps = ComponentProps<typeof Button> & {\n activeCount?: number;\n label?: string;\n activeLabel?: (activeCount: number) => string;\n placement?: 'toolbar' | 'column-header';\n};\n\nconst DataGridFilterTrigger: ForwardRefExoticComponent<\n DataGridFilterTriggerProps & RefAttributes<ComponentRef<typeof Button>>\n> = forwardRef<ComponentRef<typeof Button>, DataGridFilterTriggerProps>(\n function DataGridFilterTrigger(\n {\n activeCount = 0,\n label = 'Filters',\n activeLabel,\n placement = 'toolbar',\n className,\n children,\n ...props\n }: DataGridFilterTriggerProps,\n ref: Ref<ComponentRef<typeof Button>>\n ) {\n const hasActiveFilters = activeCount > 0;\n\n return (\n <Button\n ref={ref}\n data-slot=\"data-grid-filter-trigger\"\n data-placement={placement}\n data-active-count={activeCount}\n size={placement === 'column-header' ? 'icon-sm' : 'icon'}\n variant={hasActiveFilters ? 'secondary' : 'ghost'}\n className={cn('min-w-0', className)}\n aria-label={\n hasActiveFilters\n ? (activeLabel?.(activeCount) ?? `${label}, ${activeCount} active`)\n : label\n }\n {...props}\n >\n {children ?? (\n <IconFilter className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n )}\n </Button>\n );\n }\n);\nDataGridFilterTrigger.displayName = 'DataGridFilterTrigger';\n\nfunction useDataGridContext(): DataGridContextValue {\n const context = useContext(DataGridContext);\n if (!context) {\n throw new Error('useDataGridContext must be used within a DataGrid');\n }\n return context;\n}\nexport {\n DataGrid,\n DataGridCheckboxCell,\n DataGridCheckboxHeader,\n DataGridResultCountBadge,\n DataGridFilterTrigger,\n DataGridSearch,\n useDataGridContext,\n type DataGridContextValue,\n type DataGridHandle,\n type DataGridLabels,\n};\nexport {\n DataGridFilterPanel,\n type DataGridFilterColumn,\n type DataGridFilterPanelLabels,\n} from './data-grid-filter-panel';\nexport {\n DataGridFooter,\n DataGridFooterEnd,\n DataGridFooterStart,\n} from './data-grid-footer';\nexport {\n DataGridHeader,\n DataGridHeaderActions,\n DataGridHeaderEnd,\n DataGridHeaderStart,\n DataGridSubtitle,\n DataGridTitle,\n} from './data-grid-header';\n"],"names":["createContext","forwardRef","useContext","useImperativeHandle","useMemo","useRef","Checkbox","CheckboxPrimitive","IconCheck","IconFilter","IconMinus","getCoreRowModel","getExpandedRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","useReactTable","useVirtualizer","useControllableState","cn","focusState","Button","EmptyState","EmptyStateActions","EmptyStateDescription","EmptyStateIcon","EmptyStateTitle","Search","Skeleton","DataGridCell","DataGridHeaderRow","DataGridRow","countSelectedRowIds","getDataGridCheckboxState","selectDataGridRowTree","DataGridSelectionToolbar","PINNED_COLUMN_Z_INDEX","getTextValue","EMPTY_PINNED_COLUMNS","defaultDataGridCell","renderValue","text","undefined","span","className","title","DEFAULT_COLUMN","cell","size","DataGridContext","defaultDataGridLabels","clearSearch","clearFilters","ROW_HEIGHT_MAP","default","compact","HEADER_HEIGHT_MAP","DataGrid","data","columns","getRowId","rowCount","globalFilterFn","enableRowSelection","enableSorting","enableColumnResizing","columnGrow","columnSizing","defaultColumnSizing","onColumnSizingChange","manualPagination","manualSorting","rowSelection","defaultRowSelection","onRowSelectionChange","selectionActions","sorting","defaultSorting","onSortingChange","pagination","defaultPagination","onPaginationChange","getSubRows","expanded","defaultExpanded","onExpandedChange","getRowCanExpand","maxDepth","pinnedColumns","gridRef","children","onRowClick","searchValue","defaultSearchValue","onSearchValueChange","queryMode","loading","loadingVariant","loadingRowCount","renderLoadingCell","emptyState","noResultsState","filteredResultCount","totalResultCount","onClearSearch","onClearFilters","labels","labelOverrides","rowHeight","headerHeight","ariaLabel","ariaLabelledBy","scrollContainerRef","resolvedSearchValue","setResolvedSearchValue","prop","defaultProp","onChange","resolvedSorting","setResolvedSorting","resolvedRowSelection","setResolvedRowSelection","hasPagination","resolvedPagination","setResolvedPagination","pageIndex","pageSize","hasExpanding","resolvedExpanded","setResolvedExpanded","resolvedColumnSizing","setResolvedColumnSizing","isClientSorting","isClientPagination","columnPinning","left","right","pinnedColumnIds","Set","lastPinnedColumnId","length","table","state","globalFilter","autoResetExpanded","enableSubRowSelection","columnResizeMode","defaultColumn","manualFiltering","rows","getRowModel","headerGroups","getHeaderGroups","visibleColumns","getVisibleFlatColumns","resolvedRowHeight","resolvedHeaderHeight","resolvedLoadingRowCount","shouldRenderSkeleton","hideRowsForLoading","hasActiveServerSearch","hasNoRows","hasNoResults","virtualizer","count","getScrollElement","current","estimateSize","overscan","bodyHeight","getTotalSize","bodyStyle","scrollToRow","index","scrollToIndex","resetSorting","resetSelection","resetSearch","hasFlexibleColumn","some","column","columnDef","has","id","gridTemplateColumns","map","columnSize","getSize","isLastColumn","join","scrollContainerStyle","isResizingColumn","Boolean","getState","columnSizingInfo","clientFilteredCount","clientTotalCount","contextValue","setSearchValue","filteredCount","totalCount","selectedRowCount","Provider","value","div","data-slot","data-query-mode","data-filtered-result-count","data-total-result-count","ref","style","role","aria-rowcount","aria-colcount","aria-label","aria-labelledby","headerGroup","headerRowIndex","Array","from","_","rowIndex","aria-hidden","height","transform","colIndex","isPinned","isLastPinned","position","getStart","zIndex","columnId","columnIndex","getVirtualItems","virtualRow","row","headerGroupCount","renderDataGridState","type","description","action","variant","onClick","selectedCount","onClear","DataGridCheckbox","checked","onCheckedChange","disabled","checkboxAriaLabel","isIndeterminate","isChecked","Root","indeterminate","next","Indicator","stroke","DataGridCheckboxHeader","allSelected","getIsAllPageRowsSelected","someSelected","getIsSomePageRowsSelected","toggleAllPageRowsSelected","DataGridCheckboxCell","getCanSelect","toggleSelected","DataGridSearch","placeholder","props","useDataGridContext","event","target","displayName","DataGridResultCountBadge","label","content","fallback","isDataGridStateCopy","DataGridState","as","DataGridFilterTrigger","activeCount","activeLabel","placement","hasActiveFilters","data-placement","data-active-count","context","Error","DataGridFilterPanel","DataGridFooter","DataGridFooterEnd","DataGridFooterStart","DataGridHeader","DataGridHeaderActions","DataGridHeaderEnd","DataGridHeaderStart","DataGridSubtitle","DataGridTitle"],"mappings":";AAAA,SAUEA,aAAa,EACbC,UAAU,EACVC,UAAU,EACVC,mBAAmB,EACnBC,OAAO,EACPC,MAAM,QACD,QAAQ;AAEf,SAASC,YAAYC,iBAAiB,QAAQ,0BAA0B;AACxE,SAASC,SAAS,EAAEC,UAAU,EAAEC,SAAS,QAAQ,sBAAsB;AACvE,SAYEC,eAAe,EACfC,mBAAmB,EACnBC,mBAAmB,EACnBC,qBAAqB,EACrBC,iBAAiB,EACjBC,aAAa,QACR,wBAAwB;AAC/B,SAASC,cAAc,QAAQ,0BAA0B;AAEzD,SAASC,oBAAoB,QAAQ,4CAAyC;AAC9E,SAASC,EAAE,EAAEC,UAAU,QAAQ,2BAAwB;AACvD,SAASC,MAAM,QAAQ,sBAAmB;AAC1C,SACEC,UAAU,EACVC,iBAAiB,EACjBC,qBAAqB,EACrBC,cAAc,EACdC,eAAe,QACV,gCAA6B;AAEpC,SAASC,MAAM,QAAQ,sBAAmB;AAC1C,SAASC,QAAQ,QAAQ,0BAAuB;AAEhD,SAASC,YAAY,QAAQ,sBAAmB;AAChD,SAASC,iBAAiB,QAAQ,4BAAyB;AAC3D,SAASC,WAAW,QAAQ,qBAAkB;AAC9C,SACEC,mBAAmB,EACnBC,wBAAwB,EACxBC,qBAAqB,QAChB,iCAA8B;AACrC,SAASC,wBAAwB,QAAQ,mCAAgC;AAEzE,SAASC,qBAAqB,EAAEC,YAAY,QAAQ,uBAAoB;AAExE,MAAMC,uBAAiC,EAAE;AAEzC,SAASC,oBAA2B,EAClCC,WAAW,EACiB;IAC5B,MAAMC,OAAOJ,aAAaG;IAC1B,IAAIC,SAASC,WAAW,OAAO;IAE/B,qBACE,KAACC;QAAKC,WAAU;QAAyBC,OAAOJ;kBAC7CA;;AAGP;AAEA,MAAMK,iBAAiB;IACrBC,MAAMR;IACNS,MAAMN;AACR;AASA,MAAMO,gCAAkBjD,cACtB0C;AAwBF,MAAMQ,wBAAwC;IAC5CC,aAAa;IACbC,cAAc;AAChB;AASA,MAAMC,iBAA+C;IACnDC,SAAS;IACTC,SAAS;AACX;AAEA,MAAMC,oBAAkD;IACtDF,SAAS;IACTC,SAAS;AACX;AA8EA,SAASE,SAAgB,EACvBC,IAAI,EACJC,OAAO,EACPC,QAAQ,EACRC,QAAQ,EACRC,iBAAiB,MAAM,EACvBC,qBAAqB,KAAK,EAC1BC,gBAAgB,KAAK,EACrBC,uBAAuB,KAAK,EAC5BC,aAAa,KAAK,EAClBC,YAAY,EACZC,mBAAmB,EACnBC,oBAAoB,EACpBC,mBAAmB,KAAK,EACxBC,gBAAgB,KAAK,EACrBC,YAAY,EACZC,mBAAmB,EACnBC,oBAAoB,EACpBC,gBAAgB,EAChBC,OAAO,EACPC,cAAc,EACdC,eAAe,EACfC,UAAU,EACVC,iBAAiB,EACjBC,kBAAkB,EAClBC,UAAU,EACVC,QAAQ,EACRC,eAAe,EACfC,gBAAgB,EAChBC,eAAe,EACfC,WAAW,CAAC,EACZC,gBAAgBlD,oBAAoB,EACpCmD,OAAO,EACPzC,OAAO,SAAS,EAChB0C,QAAQ,EACR9C,SAAS,EACT+C,UAAU,EACVC,WAAW,EACXC,kBAAkB,EAClBC,mBAAmB,EACnBC,YAAY,QAAQ,EACpBC,UAAU,KAAK,EACfC,iBAAiB,UAAU,EAC3BC,eAAe,EACfC,iBAAiB,EACjBC,UAAU,EACVC,cAAc,EACdC,mBAAmB,EACnBC,gBAAgB,EAChBC,aAAa,EACbC,cAAc,EACdC,QAAQC,cAAc,EACtBC,SAAS,EACTC,YAAY,EACZ,cAAcC,SAAS,EACvB,mBAAmBC,cAAc,EACZ;IACrB,MAAMC,qBAAqB3G,OAAuB;IAClD,MAAMqG,SAAS;QAAE,GAAGxD,qBAAqB;QAAE,GAAGyD,cAAc;IAAC;IAE7D,MAAM,CAACM,qBAAqBC,uBAAuB,GAAGhG,qBAAqB;QACzEiG,MAAMvB;QACNwB,aAAavB,sBAAsB;QACnCwB,UAAUvB;IACZ;IAEA,MAAM,CAACwB,iBAAiBC,mBAAmB,GACzCrG,qBAAmC;QACjCiG,MAAMvC;QACNwC,aAAavC,kBAAkB,EAAE;QACjCwC,UAAUvC;IACZ;IAEF,MAAM,CAAC0C,sBAAsBC,wBAAwB,GACnDvG,qBAAwC;QACtCiG,MAAM3C;QACN4C,aAAa3C,uBAAuB,CAAC;QACrC4C,UAAU3C;IACZ;IAEF,MAAMgD,gBACJ3C,eAAerC,aAAasC,sBAAsBtC;IAEpD,MAAM,CAACiF,oBAAoBC,sBAAsB,GAC/C1G,qBAAsC;QACpCiG,MAAMpC;QACNqC,aAAapC,qBAAqB;YAAE6C,WAAW;YAAGC,UAAU;QAAG;QAC/DT,UAAUpC;IACZ;IAEF,MAAM8C,eAAe7C,eAAexC;IAEpC,MAAM,CAACsF,kBAAkBC,oBAAoB,GAC3C/G,qBAAoC;QAClCiG,MAAMhC;QACNiC,aAAahC,mBAAmB,CAAC;QACjCiC,UAAUhC;IACZ;IAEF,MAAM,CAAC6C,sBAAsBC,wBAAwB,GACnDjH,qBAAwC;QACtCiG,MAAMhD;QACNiD,aAAahD,uBAAuB,CAAC;QACrCiD,UAAUhD;IACZ;IAEF,MAAM+D,kBAAkBpE,iBAAiB,CAACO;IAC1C,MAAM8D,qBAAqBX,iBAAiB,CAACpD;IAE7C,MAAMgE,gBAAoClI,QACxC,IAAO,CAAA;YAAEmI,MAAM/C;YAAegD,OAAO,EAAE;QAAC,CAAA,GACxC;QAAChD;KAAc;IAGjB,MAAMiD,kBAAkBrI,QACtB,IAAM,IAAIsI,IAAIlD,gBACd;QAACA;KAAc;IAEjB,MAAMmD,qBAAqBnD,aAAa,CAACA,cAAcoD,MAAM,GAAG,EAAE;IAClE,kIAAkI;IAClI,MAAMC,QAAQ7H,cAAc;QAC1B0C;QACAC;QACAmF,OAAO;YACLR;YACAS,cAAc9B;YACdrC,SAAS0C;YACT9C,cAAcgD;YACdrD,cAAc+D;YACd,GAAIR,gBAAgB;gBAAE3C,YAAY4C;YAAmB,IAAI,CAAC,CAAC;YAC3D,GAAII,eAAe;gBAAE5C,UAAU6C;YAAiB,IAAI,CAAC,CAAC;QACxD;QACAlD,iBAAiByC;QACjB7C,sBAAsB+C;QACtBpD,sBAAsB8D;QACtB,GAAIT,gBAAgB;YAAEzC,oBAAoB2C;QAAsB,IAAI,CAAC,CAAC;QACtE,GAAIG,eAAe;YAAE1C,kBAAkB4C;QAAoB,IAAI,CAAC,CAAC;QACjE,4EAA4E;QAC5E,wEAAwE;QACxE,wEAAwE;QACxE,uCAAuC;QACvCe,mBAAmB;QACnBjF;QACA,gFAAgF;QAChFkF,uBAAuB;QACvBjF;QACAC;QACAiF,kBAAkB;QAClBC,eAAerG;QACfwB;QACAC;QACA6E,iBAAiBrD,cAAc;QAC/BpF,iBAAiBA;QACjBE,qBAAqBA;QACrBiD;QACA,GAAIsE,kBAAkB;YAAErH,mBAAmBA;QAAoB,IAAI,CAAC,CAAC;QACrE,GAAIsH,qBACA;YAAEvH,uBAAuBA;QAAwB,IACjD,CAAC,CAAC;QACN,GAAIiH,eAAe;YAAEnH,qBAAqBA;QAAsB,IAAI,CAAC,CAAC;QACtEgD;QACAsB;QACAI;IACF;IAEA,MAAM,EAAE+D,IAAI,EAAE,GAAGR,MAAMS,WAAW;IAClC,MAAMC,eAAeV,MAAMW,eAAe;IAC1C,MAAMC,iBAAiBZ,MAAMa,qBAAqB;IAElD,MAAMC,oBAAoB/C,aAAavD,cAAc,CAACL,KAAK;IAC3D,MAAM4G,uBAAuB/C,gBAAgBrD,iBAAiB,CAACR,KAAK;IACpE,MAAM6G,0BAA0B3D,mBAAmB;IACnD,MAAM4D,uBAAuB9D,WAAWC,mBAAmB;IAC3D,MAAM8D,qBAAqB/D,WAAWC,mBAAmB;IACzD,MAAM+D,wBACJjE,cAAc,YAAYkB,wBAAwB;IACpD,MAAMgD,YAAY,CAACjE,WAAWtC,KAAKkF,MAAM,KAAK,KAAK,CAACoB;IACpD,MAAME,eACJ,CAAClE,WACAgE,CAAAA,wBACGtG,KAAKkF,MAAM,KAAK,IAChBlF,KAAKkF,MAAM,GAAG,KAAKC,MAAMhI,mBAAmB,GAAGwI,IAAI,CAACT,MAAM,KAAK,CAAA;IAErE,MAAMuB,cAAclJ,eAAe;QACjCmJ,OAAOf,KAAKT,MAAM;QAClByB,kBAAkB,IAAMrD,mBAAmBsD,OAAO;QAClDC,cAAc,IAAMZ;QACpBa,UAAU;IACZ;IACA,MAAMC,aAAaX,uBACfD,0BAA0BF,oBAC1BQ,YAAYO,YAAY;IAC5B,MAAMC,YAGF;QACF,2BAA2B,GAAGF,WAAW,EAAE,CAAC;QAC5C,+BAA+B,GAAGd,oBAAoB,EAAE,EAAE,CAAC;IAC7D;IAEAxJ,oBAAoBsF,SAAS,IAAO,CAAA;YAClCmF,aAAa,CAACC,QAAkBV,YAAYW,aAAa,CAACD;YAC1DE,cAAc,IAAMxD,mBAAmB,EAAE;YACzCyD,gBAAgB,IAAMvD,wBAAwB,CAAC;YAC/CwD,aAAa,IAAM/D,uBAAuB;QAC5C,CAAA;IAEA,MAAMgE,oBACJ,CAACjH,wBACD,CAACC,cACDuF,eAAe0B,IAAI,CACjB,CAACC,SACCA,OAAOC,SAAS,CAACrI,IAAI,KAAKN,aAAa,CAAC+F,gBAAgB6C,GAAG,CAACF,OAAOG,EAAE;IAE3E,MAAMC,sBAAsB/B,eACzBgC,GAAG,CAAC,CAACL,QAAQP;QACZ,MAAMa,aAAaN,OAAOO,OAAO;QACjC,IAAI1H,wBAAwBwE,gBAAgB6C,GAAG,CAACF,OAAOG,EAAE,GAAG;YAC1D,OAAO,GAAGG,WAAW,EAAE,CAAC;QAC1B;QACA,IAAIxH,YAAY;YACd,OAAO,CAAC,OAAO,EAAEwH,WAAW,IAAI,EAAEA,WAAW,GAAG,CAAC;QACnD;QACA,MAAME,eAAef,UAAUpB,eAAeb,MAAM,GAAG;QACvD,IAAIwC,OAAOC,SAAS,CAACrI,IAAI,KAAKN,WAAW;YACvC,IAAI,CAACwI,qBAAqBU,cAAc;gBACtC,OAAO,CAAC,OAAO,EAAEF,WAAW,QAAQ,CAAC;YACvC;YACA,OAAO,GAAGA,WAAW,EAAE,CAAC;QAC1B;QACA,OAAO,CAAC,OAAO,EAAEA,WAAW,QAAQ,CAAC;IACvC,GACCG,IAAI,CAAC;IAER,MAAMC,uBAEF;QACF,gCAAgCN;IAClC;IAEA,MAAMO,mBAAmBC,QACvBnD,MAAMoD,QAAQ,GAAGC,gBAAgB,CAACH,gBAAgB;IAEpD,MAAMI,sBAAsBtD,MAAMhI,mBAAmB,GAAGwI,IAAI,CAACT,MAAM;IACnE,MAAMwD,mBAAmBvD,MAAMlI,eAAe,GAAG0I,IAAI,CAACT,MAAM;IAE5D,MAAMyD,eAAejM,QACnB,IAAO,CAAA;YACLwF,aAAaqB;YACbqF,gBAAgBpF;YAChBqF,eACExG,cAAc,WAAWoG,sBAAsB7F;YACjDkG,YAAYzG,cAAc,WAAWqG,mBAAmB7F;QAC1D,CAAA,GACA;QACEU;QACAC;QACAnB;QACAoG;QACA7F;QACA8F;QACA7F;KACD;IAGH,MAAMkG,mBAAmBzK,oBAAoBwF;IAE7C,qBACE,KAACvE,gBAAgByJ,QAAQ;QAACC,OAAON;kBAC/B,cAAA,MAACO;YACCC,aAAU;YACVC,mBAAiB/G;YACjBgH,8BAA4BzG;YAC5B0G,2BAAyBzG;YACzB3D,WAAWzB,GACT,0EACAyB;;gBAGD8C;8BACD,MAACkH;oBACCK,KAAKjG;oBACL6F,aAAU;oBACVjK,WAAU;oBACVsK,OAAOpB;oBACPqB,MAAK;oBACLC,iBACErD,qBACIR,aAAaX,MAAM,GACnB,AAAC/E,CAAAA,YAAYwF,KAAKT,MAAM,AAAD,IAAKW,aAAaX,MAAM;oBAErDyE,iBAAe5D,eAAeb,MAAM;oBACpC0E,cAAYxG;oBACZyG,mBAAiBxG;;sCAEjB,MAAC6F;4BACChK,WAAWzB,GACT,oBACA4C,uBAAuB,SAAS0I,mBAAmB,KAAK;;8CAG1D,KAACG;oCACCO,MAAK;oCACLN,aAAU;oCACVjK,WAAU;8CAET2G,aAAakC,GAAG,CAAC,CAAC+B,aAAaC,+BAC9B,KAAC3L;4CAEC0L,aAAaA;4CACbC,gBAAgBA;4CAChB7D,sBAAsBA;4CACtBnB,iBAAiBA;4CACjBE,oBAAoBA;4CACpBoD,kBAAkBA;2CANbyB,YAAYjC,EAAE;;8CAWzB,MAACqB;oCACCO,MAAK;oCACLN,aAAU;oCACVjK,WAAWzB,GACT,gDACA,CAAC8I,aAAa,CAACC,gBAAgB;oCAEjCgD,OAAOvC;;wCAENb,wBACC4D,MAAMC,IAAI,CACR;4CAAE/E,QAAQiB;wCAAwB,GAClC,CAAC+D,GAAGC,yBACF,KAACjB;gDAECC,aAAU;gDACViB,eAAY;gDACZlL,WAAU;gDACVsK,OAAO;oDACL1B,qBACE;oDACFuC,QAAQpE;oDACRqE,WAAW,CAAC,WAAW,EAAEH,WAAWlE,kBAAkB,GAAG,CAAC;gDAC5D;0DAECF,eAAegC,GAAG,CAAC,CAACL,QAAQ6C;oDAC3B,MAAMC,WAAWzF,gBAAgB6C,GAAG,CAACF,OAAOG,EAAE;oDAC9C,MAAM4C,eACJD,YAAYvF,uBAAuByC,OAAOG,EAAE;oDAC9C,qBACE,KAAC1J;wDAECqM,UAAUA;wDACVC,cAAcA;wDACdF,UAAUA,WAAW;wDACrBf,OACEgB,WACI;4DACEE,UAAU;4DACV7F,MAAM6C,OAAOiD,QAAQ,CAAC;4DACtBC,QAAQlM;wDACV,IACAM;kEAGLyD,oBAAoB;4DACnB0H;4DACAU,UAAUnD,OAAOG,EAAE;4DACnBiD,aAAaP;4DACbjL;wDACF,MACGoI,CAAAA,OAAOG,EAAE,KAAK,yBACb,KAAC3J;4DAASgB,WAAU;2EAEpB,KAAChB;4DACCgB,WAAWzB,GACT,kBACA8M,aAAa,IAAI,UAAU;0DAGjC;uDA7BG7C,OAAOG,EAAE;gDAgCpB;+CAjDK,CAAC,aAAa,EAAEsC,UAAU;wCAsDtC,CAAC9D,sBACA,CAACE,aACD,CAACC,gBACDC,YACGsE,eAAe,GACfhD,GAAG,CAAC,CAACiD,2BACJ,KAAC3M;gDAEC4M,KAAKtF,IAAI,CAACqF,WAAW7D,KAAK,CAAC;gDAC3B6D,YAAYA;gDACZE,kBAAkBrF,aAAaX,MAAM;gDACrCH,iBAAiBA;gDACjBE,oBAAoBA;gDACpBpD,UAAUA;gDACVwC,cAAcA;gDACdpC,YAAYA;+CARP0D,IAAI,CAACqF,WAAW7D,KAAK,CAAC,CAACU,EAAE;wCAYrC,CAACvF,WAAWiE,aAAa7D,cAAc,sBACtC,KAACwG;4CAAIhK,WAAU;sDACb,cAAA,KAACgK;gDAAIhK,WAAU;0DACZiM,oBAAoBzI,YAAY;oDAC/B0I,MAAM;oDACNjM,OAAO;oDACPkM,aAAa;gDACf;;;wCAKL,CAAC/I,WAAWkE,8BACX,KAAC0C;4CAAIhK,WAAU;sDACb,cAAA,KAACgK;gDAAIhK,WAAU;0DACZiM,oBAAoBxI,gBAAgB;oDACnCyI,MAAM;oDACNjM,OAAO;oDACPkM,aACEhJ,cAAc,WACV,8CACA;oDACNiJ,QACExI,iBAAiBC,+BACf,MAACmG;wDAAIhK,WAAU;;4DACZ4D,8BACC,KAACnF;gEACC2B,MAAK;gEACLiM,SAAQ;gEACRC,SAAS1I;0EAERE,OAAOvD,WAAW;iEAEnB;4DACHsD,+BACC,KAACpF;gEACC2B,MAAK;gEACLiM,SAAQ;gEACRC,SAASzI;0EAERC,OAAOtD,YAAY;iEAEpB;;yDAEJV;gDACR;;;;;;;wBAMTqB,uBAAuB,sBACtB,KAAC5B;4BACC,wCAAwC;4BACxC,0FAA0F;4BAC1FgN,eAAe1C;4BACfjI,cAAcgD;4BACd7C,kBAAkBA;4BAClByK,SAAS,IAAM3H,wBAAwB,CAAC;6BAExC;;;;;;AAKd;AASA,SAAS4H,iBAAiB,EACxBC,OAAO,EACPC,eAAe,EACfC,QAAQ,EACR,cAAcC,iBAAiB,EACT;IACtB,MAAMC,kBAAkBJ,YAAY;IACpC,MAAMK,YAAYL,YAAY;IAE9B,qBACE,KAAC/O,kBAAkBqP,IAAI;QACrB/C,aAAU;QACVyC,SAASI,kBAAkB,QAAQC;QACnCE,eAAeH;QACfF,UAAUA;QACVD,iBAAiB,CAACO,OAASP,gBAAgBO;QAC3CxC,cAAYmC;QACZ7M,WAAWzB,GACT,4JACA,8KACA,wEACA,8NACA,8GACAC;kBAGF,cAAA,MAACb,kBAAkBwP,SAAS;YAACnN,WAAU;;8BACrC,KAACpC;oBACCsN,eAAY;oBACZjB,aAAU;oBACVjK,WAAU;oBACVoN,QAAQ;;8BAEV,KAACtP;oBACCoN,eAAY;oBACZjB,aAAU;oBACVjK,WAAU;oBACVoN,QAAQ;;;;;AAKlB;AAEA,SAASC,uBAA8B,EACrCpH,KAAK,EAGN;IACC,MAAMqH,cAAcrH,MAAMsH,wBAAwB;IAClD,MAAMC,eAAevH,MAAMwH,yBAAyB;IACpD,MAAMf,UAAUY,cAAc,OAAOE,eAAe,kBAAkB;IAEtE,qBACE,KAACf;QACCC,SAASA;QACTC,iBAAiB,IAAM1G,MAAMyH,yBAAyB,CAAC,CAACJ;QACxD5C,cAAW;;AAGjB;AAEA,SAASiD,qBAA4B,EACnC5B,GAAG,EAGJ;IACC,qBACE,KAACU;QACCC,SAASrN,yBAAyB0M;QAClCa,UAAU,CAACb,IAAI6B,YAAY;QAC3BjB,iBAAiB,CAACO;YAChB,IAAIA,SAAS,MAAM;gBACjB5N,sBAAsByM;gBACtB;YACF;YACAA,IAAI8B,cAAc,CAAC;QACrB;QACAnD,cAAW;;AAGjB;AAOA,MAAMoD,+BAEFzQ,WACF,SAASyQ,eACP,EAAE9N,SAAS,EAAE+N,cAAc,QAAQ,EAAE,GAAGC,OAAO,EAC/C3D,GAAG;IAEH,MAAM,EAAErH,WAAW,EAAE0G,cAAc,EAAE,GAAGuE;IAExC,qBACE,KAAClP;QACCsL,KAAKA;QACLN,OAAO/G;QACPyB,UAAU,CAACyJ,QAAUxE,eAAewE,MAAMC,MAAM,CAACpE,KAAK;QACtDyC,SAAS,IAAM9C,eAAe;QAC9BqE,aAAaA;QACb/N,WAAWzB,GAAG,QAAQyB;QACrB,GAAGgO,KAAK;;AAGf;AAEFF,eAAeM,WAAW,GAAG;AAM7B,MAAMC,yCAEFhR,WACF,SAASgR,yBAAyB,EAAEC,KAAK,EAAEtO,SAAS,EAAE,GAAGgO,OAAO,EAAE3D,GAAG;IACnE,MAAM,EAAEV,aAAa,EAAEC,UAAU,EAAE,GAAGqE;IAEtC,MAAMM,UACJD,SACC3E,CAAAA,kBAAkB7J,YACf,OACA8J,eAAe9J,YACb,GAAG6J,cAAc,IAAI,EAAEC,WAAW,QAAQ,CAAC,GAC3C,GAAGD,cAAc,QAAQ,CAAC,AAAD;IAEjC,IAAI4E,WAAW,MAAM,OAAO;IAE5B,qBACE,KAACxO;QACCsK,KAAKA;QACLJ,aAAU;QACVjK,WAAWzB,GACT,8IACAyB;QAED,GAAGgO,KAAK;kBAERO;;AAGP;AAEFF,yBAAyBD,WAAW,GAAG;AAEvC,SAASnC,oBACP/F,KAAgD,EAChDsI,QAIkD;IAElD,IAAIC,oBAAoBvI,QAAQ;QAC9B,qBACE,KAACwI;YACCxC,MAAMsC,SAAStC,IAAI;YACnBjM,OAAOiG,MAAMjG,KAAK,IAAIuO,SAASvO,KAAK;YACpCkM,aAAajG,MAAMiG,WAAW,IAAIqC,SAASrC,WAAW;YACtDC,QAAQlG,MAAMkG,MAAM,KAAKtM,YAAYoG,MAAMkG,MAAM,GAAGoC,SAASpC,MAAM;;IAGzE;IAEA,IAAIlG,UAAUpG,WAAW,OAAOoG;IAEhC,qBACE,KAACwI;QACCxC,MAAMsC,SAAStC,IAAI;QACnBjM,OAAOuO,SAASvO,KAAK;QACrBkM,aAAaqC,SAASrC,WAAW;QACjCC,QAAQoC,SAASpC,MAAM;;AAG7B;AAEA,SAASqC,oBAAoB1E,KAAc;IACzC,OACE,OAAOA,UAAU,YACjBA,UAAU,QACV,CAAE,CAAA,UAAUA,KAAI,KACf,CAAA,WAAWA,SAAS,iBAAiBA,SAAS,YAAYA,KAAI;AAEnE;AAEA,SAAS2E,cAAc,EACrBxC,IAAI,EACJjM,KAAK,EACLkM,WAAW,EACXC,MAAM,EAK0C;IAChD,qBACE,MAAC1N;QAAWwN,MAAMA;QAAMlM,WAAU;;0BAChC,KAACnB;0BACD,KAACC;gBAAgB6P,IAAG;0BAAK1O;;0BACzB,KAACrB;0BAAuBuN;;YACvBC,uBAAS,KAACzN;0BAAmByN;iBAA8B;;;AAGlE;AASA,MAAMwC,sCAEFvR,WACF,SAASuR,sBACP,EACEC,cAAc,CAAC,EACfP,QAAQ,SAAS,EACjBQ,WAAW,EACXC,YAAY,SAAS,EACrB/O,SAAS,EACT8C,QAAQ,EACR,GAAGkL,OACwB,EAC7B3D,GAAqC;IAErC,MAAM2E,mBAAmBH,cAAc;IAEvC,qBACE,KAACpQ;QACC4L,KAAKA;QACLJ,aAAU;QACVgF,kBAAgBF;QAChBG,qBAAmBL;QACnBzO,MAAM2O,cAAc,kBAAkB,YAAY;QAClD1C,SAAS2C,mBAAmB,cAAc;QAC1ChP,WAAWzB,GAAG,WAAWyB;QACzB0K,cACEsE,mBACKF,cAAcD,gBAAgB,GAAGP,MAAM,EAAE,EAAEO,YAAY,OAAO,CAAC,GAChEP;QAEL,GAAGN,KAAK;kBAERlL,0BACC,KAACjF;YAAWmC,WAAU;YAAkBkL,eAAY;;;AAI5D;AAEF0D,sBAAsBR,WAAW,GAAG;AAEpC,SAASH;IACP,MAAMkB,UAAU7R,WAAW+C;IAC3B,IAAI,CAAC8O,SAAS;QACZ,MAAM,IAAIC,MAAM;IAClB;IACA,OAAOD;AACT;AACA,SACEtO,QAAQ,EACR8M,oBAAoB,EACpBN,sBAAsB,EACtBgB,wBAAwB,EACxBO,qBAAqB,EACrBd,cAAc,EACdG,kBAAkB,GAIlB;AACF,SACEoB,mBAAmB,QAGd,8BAA2B;AAClC,SACEC,cAAc,EACdC,iBAAiB,EACjBC,mBAAmB,QACd,wBAAqB;AAC5B,SACEC,cAAc,EACdC,qBAAqB,EACrBC,iBAAiB,EACjBC,mBAAmB,EACnBC,gBAAgB,EAChBC,aAAa,QACR,wBAAqB"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ui/core/data-grid/data-grid.tsx"],"sourcesContent":["import {\n type ComponentProps,\n type ComponentRef,\n type CSSProperties,\n type ForwardRefExoticComponent,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefAttributes,\n type RefObject,\n createContext,\n forwardRef,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\n\nimport { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox';\nimport { IconCheck, IconFilter, IconMinus } from '@tabler/icons-react';\nimport {\n type CellContext,\n type ColumnDef,\n type ColumnPinningState,\n type ColumnSizingState,\n type ExpandedState,\n type FilterFnOption,\n type PaginationState,\n type Row,\n type RowSelectionState,\n type Table,\n type SortingState,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport { useVirtualizer } from '@tanstack/react-virtual';\n\nimport { useControllableState } from '../../../../lib/use-controllable-state';\nimport { cn, focusState } from '../../../../lib/utils';\nimport { Button } from '../button/button';\nimport {\n EmptyState,\n EmptyStateActions,\n EmptyStateDescription,\n EmptyStateIcon,\n EmptyStateTitle,\n} from '../empty-state/empty-state';\nimport type { EmptyStateType } from '../empty-state/empty-state.context';\nimport { Search } from '../search/search';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { StatusText } from '../status-text/status-text';\n\nimport { DataGridCell } from './data-grid-cell';\nimport { DataGridHeaderRow } from './data-grid-header-row';\nimport { DataGridRow } from './data-grid-row';\nimport {\n countSelectedRowIds,\n getDataGridCheckboxState,\n selectDataGridRowTree,\n} from './data-grid-selection-state';\nimport { DataGridSelectionToolbar } from './data-grid-selection-toolbar';\nimport type { DataGridSelectionActions } from './data-grid-selection.types';\nimport { PINNED_COLUMN_Z_INDEX, getTextValue } from './data-grid.utils';\n\nconst EMPTY_PINNED_COLUMNS: string[] = [];\n\nfunction defaultDataGridCell<TData>({\n renderValue,\n}: CellContext<TData, unknown>): ReactNode {\n const text = getTextValue(renderValue());\n if (text === undefined) return null;\n\n return (\n <span className=\"block min-w-0 truncate\" title={text}>\n {text}\n </span>\n );\n}\n\nconst DEFAULT_COLUMN = {\n cell: defaultDataGridCell,\n size: undefined,\n};\n\ntype DataGridContextValue = {\n searchValue: string;\n setSearchValue: (value: string) => void;\n filteredCount?: number;\n totalCount?: number;\n};\n\nconst DataGridContext = createContext<DataGridContextValue | undefined>(\n undefined\n);\n\ntype DataGridSize = 'default' | 'compact';\ntype DataGridQueryMode = 'client' | 'server';\ntype DataGridLoadingVariant = 'skeleton' | 'none';\n\ntype DataGridStateCopyFields = {\n title: string;\n description: string;\n action: ReactNode;\n};\n\ntype AtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends keyof T\n ? Pick<Required<T>, Keys> & Partial<Omit<T, Keys>>\n : never;\n\ntype DataGridStateCopy = AtLeastOne<DataGridStateCopyFields>;\n\ntype DataGridLabels = {\n clearSearch: string;\n clearFilters: string;\n};\n\nconst defaultDataGridLabels: DataGridLabels = {\n clearSearch: 'Clear search',\n clearFilters: 'Clear filters',\n};\n\ntype DataGridLoadingCellContext = {\n rowIndex: number;\n columnId: string;\n columnIndex: number;\n size: DataGridSize;\n};\n\nconst ROW_HEIGHT_MAP: Record<DataGridSize, number> = {\n default: 36,\n compact: 32,\n};\n\nconst HEADER_HEIGHT_MAP: Record<DataGridSize, number> = {\n default: 36,\n compact: 32,\n};\n\ntype DataGridHandle = {\n scrollToRow: (index: number) => void;\n resetSorting: () => void;\n resetSelection: () => void;\n resetSearch: () => void;\n};\n\ntype DataGridBaseProps<TData> = {\n data: TData[];\n columns: ColumnDef<TData>[];\n getRowId?: (originalRow: TData, index: number) => string;\n rowCount?: number;\n globalFilterFn?: FilterFnOption<TData>;\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean);\n enableSorting?: boolean;\n enableColumnResizing?: boolean;\n columnGrow?: boolean;\n columnSizing?: ColumnSizingState;\n defaultColumnSizing?: ColumnSizingState;\n onColumnSizingChange?: (value: ColumnSizingState) => void;\n manualPagination?: boolean;\n manualSorting?: boolean;\n rowSelection?: RowSelectionState;\n defaultRowSelection?: RowSelectionState;\n onRowSelectionChange?: (value: RowSelectionState) => void;\n selectionActions?: DataGridSelectionActions;\n sorting?: SortingState;\n defaultSorting?: SortingState;\n onSortingChange?: (value: SortingState) => void;\n pagination?: PaginationState;\n defaultPagination?: PaginationState;\n onPaginationChange?: (value: PaginationState) => void;\n getSubRows?: (row: TData, index: number) => TData[] | undefined;\n expanded?: ExpandedState;\n defaultExpanded?: ExpandedState;\n onExpandedChange?: (value: ExpandedState) => void;\n getRowCanExpand?: (row: Row<TData>) => boolean;\n maxDepth?: number;\n pinnedColumns?: string[];\n // forwardRef cannot preserve the `TData` generic, so the imperative handle\n // is exposed via a ref-object prop instead of `forwardRef` + `useImperativeHandle`.\n // See https://github.com/facebook/react/issues/22018.\n gridRef?: RefObject<DataGridHandle | null>;\n size?: DataGridSize;\n children?: ReactNode;\n className?: string;\n onRowClick?: (row: Row<TData>) => void;\n searchValue?: string;\n defaultSearchValue?: string;\n onSearchValueChange?: (value: string) => void;\n queryMode?: DataGridQueryMode;\n loading?: boolean;\n loadingVariant?: DataGridLoadingVariant;\n loadingRowCount?: number;\n renderLoadingCell?: (ctx: DataGridLoadingCellContext) => ReactNode;\n emptyState?: ReactNode | DataGridStateCopy;\n noResultsState?: ReactNode | DataGridStateCopy;\n onClearSearch?: () => void;\n onClearFilters?: () => void;\n labels?: Partial<DataGridLabels>;\n filteredResultCount?: number;\n totalResultCount?: number;\n rowHeight?: number;\n headerHeight?: number;\n};\n\n// The grid renders with `role=\"table\"`, which requires an accessible name for\n// screen readers. It is bad practice to omit one, so the type requires at least\n// one of `aria-label` / `aria-labelledby` rather than leaving both optional.\ntype DataGridAccessibleNameProps =\n | { 'aria-label': string; 'aria-labelledby'?: string }\n | { 'aria-labelledby': string; 'aria-label'?: string };\n\ntype DataGridProps<TData> = DataGridBaseProps<TData> &\n DataGridAccessibleNameProps;\n\nfunction DataGrid<TData>({\n data,\n columns,\n getRowId,\n rowCount,\n globalFilterFn = 'auto',\n enableRowSelection = false,\n enableSorting = false,\n enableColumnResizing = false,\n columnGrow = false,\n columnSizing,\n defaultColumnSizing,\n onColumnSizingChange,\n manualPagination = false,\n manualSorting = false,\n rowSelection,\n defaultRowSelection,\n onRowSelectionChange,\n selectionActions,\n sorting,\n defaultSorting,\n onSortingChange,\n pagination,\n defaultPagination,\n onPaginationChange,\n getSubRows,\n expanded,\n defaultExpanded,\n onExpandedChange,\n getRowCanExpand,\n maxDepth = 5,\n pinnedColumns = EMPTY_PINNED_COLUMNS,\n gridRef,\n size = 'default',\n children,\n className,\n onRowClick,\n searchValue,\n defaultSearchValue,\n onSearchValueChange,\n queryMode = 'client',\n loading = false,\n loadingVariant = 'skeleton',\n loadingRowCount,\n renderLoadingCell,\n emptyState,\n noResultsState,\n filteredResultCount,\n totalResultCount,\n onClearSearch,\n onClearFilters,\n labels: labelOverrides,\n rowHeight,\n headerHeight,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n}: DataGridProps<TData>): ReactElement {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const labels = { ...defaultDataGridLabels, ...labelOverrides };\n\n const [resolvedSearchValue, setResolvedSearchValue] = useControllableState({\n prop: searchValue,\n defaultProp: defaultSearchValue ?? '',\n onChange: onSearchValueChange,\n });\n\n const [resolvedSorting, setResolvedSorting] =\n useControllableState<SortingState>({\n prop: sorting,\n defaultProp: defaultSorting ?? [],\n onChange: onSortingChange,\n });\n\n const [resolvedRowSelection, setResolvedRowSelection] =\n useControllableState<RowSelectionState>({\n prop: rowSelection,\n defaultProp: defaultRowSelection ?? {},\n onChange: onRowSelectionChange,\n });\n\n const hasPagination =\n pagination !== undefined || defaultPagination !== undefined;\n\n const [resolvedPagination, setResolvedPagination] =\n useControllableState<PaginationState>({\n prop: pagination,\n defaultProp: defaultPagination ?? { pageIndex: 0, pageSize: 10 },\n onChange: onPaginationChange,\n });\n\n const hasExpanding = getSubRows !== undefined;\n\n const [resolvedExpanded, setResolvedExpanded] =\n useControllableState<ExpandedState>({\n prop: expanded,\n defaultProp: defaultExpanded ?? {},\n onChange: onExpandedChange,\n });\n\n const [resolvedColumnSizing, setResolvedColumnSizing] =\n useControllableState<ColumnSizingState>({\n prop: columnSizing,\n defaultProp: defaultColumnSizing ?? {},\n onChange: onColumnSizingChange,\n });\n\n const isClientSorting = enableSorting && !manualSorting;\n const isClientPagination = hasPagination && !manualPagination;\n\n const columnPinning: ColumnPinningState = useMemo(\n () => ({ left: pinnedColumns, right: [] }),\n [pinnedColumns]\n );\n\n const pinnedColumnIds = useMemo(\n () => new Set(pinnedColumns),\n [pinnedColumns]\n );\n const lastPinnedColumnId = pinnedColumns[pinnedColumns.length - 1];\n // eslint-disable-next-line react-hooks/incompatible-library -- useReactTable in the DataGrid component is intentional and stable.\n const table = useReactTable({\n data,\n columns,\n state: {\n columnPinning,\n globalFilter: resolvedSearchValue,\n sorting: resolvedSorting,\n rowSelection: resolvedRowSelection,\n columnSizing: resolvedColumnSizing,\n ...(hasPagination ? { pagination: resolvedPagination } : {}),\n ...(hasExpanding ? { expanded: resolvedExpanded } : {}),\n },\n onSortingChange: setResolvedSorting,\n onRowSelectionChange: setResolvedRowSelection,\n onColumnSizingChange: setResolvedColumnSizing,\n ...(hasPagination ? { onPaginationChange: setResolvedPagination } : {}),\n ...(hasExpanding ? { onExpandedChange: setResolvedExpanded } : {}),\n // Preserve expanded rows across `data` changes (e.g. refetches) so the user\n // doesn't lose their place. Consumers fetching server-paged data should\n // ensure stable `getRowId` values; otherwise expanded keys can stick to\n // rows that no longer logically exist.\n autoResetExpanded: false,\n enableRowSelection,\n // Selecting a parent selects every descendant, including while it is collapsed.\n enableSubRowSelection: true,\n enableSorting,\n enableColumnResizing,\n columnResizeMode: 'onChange',\n defaultColumn: DEFAULT_COLUMN,\n manualPagination,\n manualSorting,\n manualFiltering: queryMode === 'server',\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n globalFilterFn,\n ...(isClientSorting ? { getSortedRowModel: getSortedRowModel() } : {}),\n ...(isClientPagination\n ? { getPaginationRowModel: getPaginationRowModel() }\n : {}),\n ...(hasExpanding ? { getExpandedRowModel: getExpandedRowModel() } : {}),\n getRowId,\n getSubRows,\n getRowCanExpand,\n });\n\n const { rows } = table.getRowModel();\n const headerGroups = table.getHeaderGroups();\n const visibleColumns = table.getVisibleFlatColumns();\n\n const resolvedRowHeight = rowHeight ?? ROW_HEIGHT_MAP[size];\n const resolvedHeaderHeight = headerHeight ?? HEADER_HEIGHT_MAP[size];\n const resolvedLoadingRowCount = loadingRowCount ?? 6;\n const shouldRenderSkeleton = loading && loadingVariant === 'skeleton';\n const hideRowsForLoading = loading && loadingVariant !== 'none';\n const hasActiveServerSearch =\n queryMode === 'server' && resolvedSearchValue !== '';\n const hasNoRows = !loading && data.length === 0 && !hasActiveServerSearch;\n const hasNoResults =\n !loading &&\n (hasActiveServerSearch\n ? data.length === 0\n : data.length > 0 && table.getFilteredRowModel().rows.length === 0);\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollContainerRef.current,\n estimateSize: () => resolvedRowHeight,\n overscan: 10,\n });\n const bodyHeight = shouldRenderSkeleton\n ? resolvedLoadingRowCount * resolvedRowHeight\n : virtualizer.getTotalSize();\n const bodyStyle: CSSProperties & {\n '--data-grid-body-height': string;\n '--data-grid-body-min-height': string;\n } = {\n '--data-grid-body-height': `${bodyHeight}px`,\n '--data-grid-body-min-height': `${resolvedRowHeight * 4}px`,\n };\n\n useImperativeHandle(gridRef, () => ({\n scrollToRow: (index: number) => virtualizer.scrollToIndex(index),\n resetSorting: () => setResolvedSorting([]),\n resetSelection: () => setResolvedRowSelection({}),\n resetSearch: () => setResolvedSearchValue(''),\n }));\n\n const hasFlexibleColumn =\n !enableColumnResizing &&\n !columnGrow &&\n visibleColumns.some(\n (column) =>\n column.columnDef.size === undefined && !pinnedColumnIds.has(column.id)\n );\n const gridTemplateColumns = visibleColumns\n .map((column, index) => {\n const columnSize = column.getSize();\n if (enableColumnResizing || pinnedColumnIds.has(column.id)) {\n return `${columnSize}px`;\n }\n if (columnGrow) {\n return `minmax(${columnSize}px, ${columnSize}fr)`;\n }\n const isLastColumn = index === visibleColumns.length - 1;\n if (column.columnDef.size !== undefined) {\n if (!hasFlexibleColumn && isLastColumn) {\n return `minmax(${columnSize}px, 1fr)`;\n }\n return `${columnSize}px`;\n }\n return `minmax(${columnSize}px, 1fr)`;\n })\n .join(' ');\n\n const scrollContainerStyle: CSSProperties & {\n '--data-grid-template-columns': string;\n } = {\n '--data-grid-template-columns': gridTemplateColumns,\n };\n\n const isResizingColumn = Boolean(\n table.getState().columnSizingInfo.isResizingColumn\n );\n const clientFilteredCount = table.getFilteredRowModel().rows.length;\n const clientTotalCount = table.getCoreRowModel().rows.length;\n\n const contextValue = useMemo<DataGridContextValue>(\n () => ({\n searchValue: resolvedSearchValue,\n setSearchValue: setResolvedSearchValue,\n filteredCount:\n queryMode === 'client' ? clientFilteredCount : filteredResultCount,\n totalCount: queryMode === 'client' ? clientTotalCount : totalResultCount,\n }),\n [\n resolvedSearchValue,\n setResolvedSearchValue,\n queryMode,\n clientFilteredCount,\n filteredResultCount,\n clientTotalCount,\n totalResultCount,\n ]\n );\n\n const selectedRowCount = countSelectedRowIds(resolvedRowSelection);\n\n return (\n <DataGridContext.Provider value={contextValue}>\n <div\n data-slot=\"data-grid\"\n data-query-mode={queryMode}\n data-filtered-result-count={filteredResultCount}\n data-total-result-count={totalResultCount}\n className={cn(\n 'relative flex min-h-0 w-full flex-col overflow-clip rounded-xl text-sm',\n className\n )}\n >\n {children}\n <div\n ref={scrollContainerRef}\n data-slot=\"data-grid-scroll-container\"\n className=\"relative order-2 min-h-0 w-full flex-1 overflow-auto\"\n style={scrollContainerStyle}\n role=\"table\"\n aria-rowcount={\n hideRowsForLoading\n ? headerGroups.length\n : (rowCount ?? rows.length) + headerGroups.length\n }\n aria-colcount={visibleColumns.length}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n <div\n className={cn(\n 'min-w-fit w-full',\n enableRowSelection !== false && selectedRowCount > 0 && 'pb-24'\n )}\n >\n <div\n role=\"rowgroup\"\n data-slot=\"data-grid-header-group\"\n className=\"contents\"\n >\n {headerGroups.map((headerGroup, headerRowIndex) => (\n <DataGridHeaderRow\n key={headerGroup.id}\n headerGroup={headerGroup}\n headerRowIndex={headerRowIndex}\n resolvedHeaderHeight={resolvedHeaderHeight}\n pinnedColumnIds={pinnedColumnIds}\n lastPinnedColumnId={lastPinnedColumnId}\n isResizingColumn={isResizingColumn}\n />\n ))}\n </div>\n\n <div\n role=\"rowgroup\"\n data-slot=\"data-grid-body\"\n className={cn(\n 'relative min-h-(--data-grid-body-min-height)',\n !hasNoRows && !hasNoResults && 'h-(--data-grid-body-height)'\n )}\n style={bodyStyle}\n >\n {shouldRenderSkeleton &&\n Array.from(\n { length: resolvedLoadingRowCount },\n (_, rowIndex) => (\n <div\n key={`skeleton-row-${rowIndex}`}\n data-slot=\"data-grid-row-loading\"\n aria-hidden=\"true\"\n className=\"absolute left-0 right-0 grid border-b bg-background\"\n style={{\n gridTemplateColumns:\n 'var(--data-grid-template-columns)',\n height: resolvedRowHeight,\n transform: `translateY(${rowIndex * resolvedRowHeight}px)`,\n }}\n >\n {visibleColumns.map((column, colIndex) => {\n const isPinned = pinnedColumnIds.has(column.id);\n const isLastPinned =\n isPinned && lastPinnedColumnId === column.id;\n return (\n <DataGridCell\n key={column.id}\n isPinned={isPinned}\n isLastPinned={isLastPinned}\n colIndex={colIndex + 1}\n style={\n isPinned\n ? {\n position: 'sticky',\n left: column.getStart('left'),\n zIndex: PINNED_COLUMN_Z_INDEX,\n }\n : undefined\n }\n >\n {renderLoadingCell?.({\n rowIndex,\n columnId: column.id,\n columnIndex: colIndex,\n size,\n }) ??\n (column.id === 'select' ? (\n <Skeleton className=\"h-4 w-4 rounded\" />\n ) : (\n <Skeleton\n className={cn(\n 'h-4 max-w-full',\n colIndex === 0 ? 'w-3/4' : 'w-2/3'\n )}\n />\n ))}\n </DataGridCell>\n );\n })}\n </div>\n )\n )}\n\n {!hideRowsForLoading &&\n !hasNoRows &&\n !hasNoResults &&\n virtualizer\n .getVirtualItems()\n .map((virtualRow) => (\n <DataGridRow\n key={rows[virtualRow.index].id}\n row={rows[virtualRow.index]}\n virtualRow={virtualRow}\n headerGroupCount={headerGroups.length}\n pinnedColumnIds={pinnedColumnIds}\n lastPinnedColumnId={lastPinnedColumnId}\n maxDepth={maxDepth}\n hasExpanding={hasExpanding}\n onRowClick={onRowClick}\n />\n ))}\n\n {!loading && hasNoRows && emptyState != null && (\n <div className=\"pt-2\">\n <div className=\"flex items-center justify-center rounded-lg bg-medium-background\">\n {renderDataGridState(emptyState, {\n type: 'new-object',\n title: 'No rows yet',\n description: 'Add data to populate this table.',\n })}\n </div>\n </div>\n )}\n\n {!loading && hasNoResults && (\n <div className=\"pt-2\">\n <div className=\"flex items-center justify-center bg-background\">\n {renderDataGridState(noResultsState, {\n type: 'no-results',\n title: 'No results found',\n description:\n queryMode === 'server'\n ? 'Apply a different query or clear filters.'\n : 'Try a different search term or clear filters.',\n action:\n onClearSearch || onClearFilters ? (\n <div className=\"mt-2 flex items-center justify-center gap-2\">\n {onClearSearch ? (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={onClearSearch}\n >\n {labels.clearSearch}\n </Button>\n ) : null}\n {onClearFilters ? (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={onClearFilters}\n >\n {labels.clearFilters}\n </Button>\n ) : null}\n </div>\n ) : undefined,\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n {enableRowSelection !== false ? (\n <DataGridSelectionToolbar\n // The count includes every selected id.\n // That covers parents and their children, rows on other pages, and rows hidden by search.\n selectedCount={selectedRowCount}\n rowSelection={resolvedRowSelection}\n selectionActions={selectionActions}\n onClear={() => setResolvedRowSelection({})}\n />\n ) : null}\n </div>\n </div>\n </DataGridContext.Provider>\n );\n}\n\ntype DataGridCheckboxProps = {\n checked: boolean | 'indeterminate';\n onCheckedChange: (checked: boolean | 'indeterminate') => void;\n disabled?: boolean;\n 'aria-label'?: string;\n};\n\nfunction DataGridCheckbox({\n checked,\n onCheckedChange,\n disabled,\n 'aria-label': checkboxAriaLabel,\n}: DataGridCheckboxProps): ReactElement {\n const isIndeterminate = checked === 'indeterminate';\n const isChecked = checked === true;\n\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n checked={isIndeterminate ? false : isChecked}\n indeterminate={isIndeterminate}\n disabled={disabled}\n onCheckedChange={(next) => onCheckedChange(next)}\n aria-label={checkboxAriaLabel}\n className={cn(\n 'peer relative size-4 shrink-0 rounded-sm border-[1.5px] border-muted-foreground bg-transparent text-foreground-on-primary outline-none transition-colors',\n '[&:is([data-checked],[data-indeterminate]):not([data-disabled])]:border-transparent [&:is([data-checked],[data-indeterminate]):not([data-disabled])]:bg-primary-background',\n 'hover:data-unchecked:not-data-disabled:border-muted-foreground-hover',\n 'data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:border-transparent data-disabled:bg-disabled-background data-disabled:text-disabled-foreground data-disabled:data-unchecked:border-border',\n '[&[data-checked]_[data-slot=checkbox-check]]:block [&[data-indeterminate]_[data-slot=checkbox-dash]]:block',\n focusState\n )}\n >\n <CheckboxPrimitive.Indicator className=\"grid size-full place-content-center text-current transition-none\">\n <IconCheck\n aria-hidden=\"true\"\n data-slot=\"checkbox-check\"\n className=\"hidden size-3\"\n stroke={3}\n />\n <IconMinus\n aria-hidden=\"true\"\n data-slot=\"checkbox-dash\"\n className=\"hidden size-3\"\n stroke={3.5}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nfunction DataGridCheckboxHeader<TData>({\n table,\n}: {\n table: Table<TData>;\n}): ReactElement {\n const allSelected = table.getIsAllPageRowsSelected();\n const someSelected = table.getIsSomePageRowsSelected();\n const checked = allSelected ? true : someSelected ? 'indeterminate' : false;\n\n return (\n <DataGridCheckbox\n checked={checked}\n onCheckedChange={() => table.toggleAllPageRowsSelected(!allSelected)}\n aria-label=\"Select all rows\"\n />\n );\n}\n\nfunction DataGridCheckboxCell<TData>({\n row,\n}: {\n row: Row<TData>;\n}): ReactElement {\n return (\n <DataGridCheckbox\n checked={getDataGridCheckboxState(row)}\n disabled={!row.getCanSelect()}\n onCheckedChange={(next) => {\n if (next === true) {\n selectDataGridRowTree(row);\n return;\n }\n row.toggleSelected(false);\n }}\n aria-label=\"Select row\"\n />\n );\n}\n\ntype DataGridSearchProps = Omit<\n ComponentProps<typeof Search>,\n 'value' | 'onChange' | 'onClear'\n>;\n\nconst DataGridSearch: ForwardRefExoticComponent<\n DataGridSearchProps & RefAttributes<ComponentRef<typeof Search>>\n> = forwardRef<ComponentRef<typeof Search>, DataGridSearchProps>(\n function DataGridSearch(\n { className, placeholder = 'Search', ...props },\n ref\n ) {\n const { searchValue, setSearchValue } = useDataGridContext();\n\n return (\n <Search\n ref={ref}\n value={searchValue}\n onChange={(event) => setSearchValue(event.target.value)}\n onClear={() => setSearchValue('')}\n placeholder={placeholder}\n className={cn('py-4', className)}\n {...props}\n />\n );\n }\n);\nDataGridSearch.displayName = 'DataGridSearch';\n\ntype DataGridResultCountProps = Omit<ComponentProps<'output'>, 'children'> & {\n formatLabel?: (filteredCount: number, totalCount?: number) => ReactNode;\n};\n\nfunction defaultFormatResultCount(\n filteredCount: number,\n totalCount?: number\n): string {\n const noun = (totalCount ?? filteredCount) === 1 ? 'result' : 'results';\n return totalCount === undefined\n ? `Showing ${filteredCount.toLocaleString('en')} ${noun}`\n : `Showing ${filteredCount.toLocaleString('en')} of ${totalCount.toLocaleString('en')} ${noun}`;\n}\n\nconst DataGridResultCount: ForwardRefExoticComponent<\n DataGridResultCountProps & RefAttributes<HTMLOutputElement>\n> = forwardRef<ComponentRef<'output'>, DataGridResultCountProps>(\n function DataGridResultCount(\n { formatLabel = defaultFormatResultCount, ...props },\n ref\n ) {\n const { filteredCount, totalCount } = useDataGridContext();\n\n // Nothing to say until the grid has counted.\n if (filteredCount === undefined) return null;\n\n const content = formatLabel(filteredCount, totalCount);\n\n if (content == null) return null;\n\n return (\n // Not live by default: it changes on every search keystroke, which screen readers would read out.\n <StatusText\n ref={ref}\n data-slot=\"data-grid-result-count\"\n aria-live=\"off\"\n {...props}\n >\n {content}\n </StatusText>\n );\n }\n);\nDataGridResultCount.displayName = 'DataGridResultCount';\n\nfunction renderDataGridState(\n state: ReactNode | DataGridStateCopy | undefined,\n fallback: { type: EmptyStateType } & Pick<\n DataGridStateCopyFields,\n 'title' | 'description'\n > &\n Partial<Pick<DataGridStateCopyFields, 'action'>>\n): ReactNode {\n if (isDataGridStateCopy(state)) {\n return (\n <DataGridState\n type={fallback.type}\n title={state.title ?? fallback.title}\n description={state.description ?? fallback.description}\n action={state.action !== undefined ? state.action : fallback.action}\n />\n );\n }\n\n if (state !== undefined) return state;\n\n return (\n <DataGridState\n type={fallback.type}\n title={fallback.title}\n description={fallback.description}\n action={fallback.action}\n />\n );\n}\n\nfunction isDataGridStateCopy(value: unknown): value is DataGridStateCopy {\n return (\n typeof value === 'object' &&\n value !== null &&\n !('type' in value) &&\n ('title' in value || 'description' in value || 'action' in value)\n );\n}\n\nfunction DataGridState({\n type,\n title,\n description,\n action,\n}: { type: EmptyStateType } & Pick<\n DataGridStateCopyFields,\n 'title' | 'description'\n> &\n Partial<Pick<DataGridStateCopyFields, 'action'>>): ReactElement {\n return (\n <EmptyState type={type} className=\"p-10\">\n <EmptyStateIcon />\n <EmptyStateTitle as=\"p\">{title}</EmptyStateTitle>\n <EmptyStateDescription>{description}</EmptyStateDescription>\n {action ? <EmptyStateActions>{action}</EmptyStateActions> : null}\n </EmptyState>\n );\n}\n\ntype DataGridFilterTriggerProps = ComponentProps<typeof Button> & {\n activeCount?: number;\n label?: string;\n activeLabel?: (activeCount: number) => string;\n placement?: 'toolbar' | 'column-header';\n};\n\nconst DataGridFilterTrigger: ForwardRefExoticComponent<\n DataGridFilterTriggerProps & RefAttributes<ComponentRef<typeof Button>>\n> = forwardRef<ComponentRef<typeof Button>, DataGridFilterTriggerProps>(\n function DataGridFilterTrigger(\n {\n activeCount = 0,\n label = 'Filters',\n activeLabel,\n placement = 'toolbar',\n className,\n children,\n ...props\n }: DataGridFilterTriggerProps,\n ref: Ref<ComponentRef<typeof Button>>\n ) {\n const hasActiveFilters = activeCount > 0;\n\n return (\n <Button\n ref={ref}\n data-slot=\"data-grid-filter-trigger\"\n data-placement={placement}\n data-active-count={activeCount}\n size={placement === 'column-header' ? 'icon-sm' : 'icon'}\n variant={hasActiveFilters ? 'secondary' : 'ghost'}\n className={cn('min-w-0', className)}\n aria-label={\n hasActiveFilters\n ? (activeLabel?.(activeCount) ?? `${label}, ${activeCount} active`)\n : label\n }\n {...props}\n >\n {children ?? (\n <IconFilter className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n )}\n </Button>\n );\n }\n);\nDataGridFilterTrigger.displayName = 'DataGridFilterTrigger';\n\nfunction useDataGridContext(): DataGridContextValue {\n const context = useContext(DataGridContext);\n if (!context) {\n throw new Error('useDataGridContext must be used within a DataGrid');\n }\n return context;\n}\nexport {\n DataGrid,\n DataGridCheckboxCell,\n DataGridCheckboxHeader,\n DataGridResultCount,\n DataGridFilterTrigger,\n DataGridSearch,\n useDataGridContext,\n type DataGridContextValue,\n type DataGridHandle,\n type DataGridLabels,\n};\nexport {\n DataGridFilterPanel,\n type DataGridFilterColumn,\n type DataGridFilterPanelLabels,\n} from './data-grid-filter-panel';\nexport {\n DataGridFooter,\n DataGridFooterEnd,\n DataGridFooterStart,\n} from './data-grid-footer';\nexport {\n DataGridHeader,\n DataGridHeaderActions,\n DataGridHeaderEnd,\n DataGridHeaderStart,\n DataGridSubtitle,\n DataGridTitle,\n} from './data-grid-header';\n"],"names":["createContext","forwardRef","useContext","useImperativeHandle","useMemo","useRef","Checkbox","CheckboxPrimitive","IconCheck","IconFilter","IconMinus","getCoreRowModel","getExpandedRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","useReactTable","useVirtualizer","useControllableState","cn","focusState","Button","EmptyState","EmptyStateActions","EmptyStateDescription","EmptyStateIcon","EmptyStateTitle","Search","Skeleton","StatusText","DataGridCell","DataGridHeaderRow","DataGridRow","countSelectedRowIds","getDataGridCheckboxState","selectDataGridRowTree","DataGridSelectionToolbar","PINNED_COLUMN_Z_INDEX","getTextValue","EMPTY_PINNED_COLUMNS","defaultDataGridCell","renderValue","text","undefined","span","className","title","DEFAULT_COLUMN","cell","size","DataGridContext","defaultDataGridLabels","clearSearch","clearFilters","ROW_HEIGHT_MAP","default","compact","HEADER_HEIGHT_MAP","DataGrid","data","columns","getRowId","rowCount","globalFilterFn","enableRowSelection","enableSorting","enableColumnResizing","columnGrow","columnSizing","defaultColumnSizing","onColumnSizingChange","manualPagination","manualSorting","rowSelection","defaultRowSelection","onRowSelectionChange","selectionActions","sorting","defaultSorting","onSortingChange","pagination","defaultPagination","onPaginationChange","getSubRows","expanded","defaultExpanded","onExpandedChange","getRowCanExpand","maxDepth","pinnedColumns","gridRef","children","onRowClick","searchValue","defaultSearchValue","onSearchValueChange","queryMode","loading","loadingVariant","loadingRowCount","renderLoadingCell","emptyState","noResultsState","filteredResultCount","totalResultCount","onClearSearch","onClearFilters","labels","labelOverrides","rowHeight","headerHeight","ariaLabel","ariaLabelledBy","scrollContainerRef","resolvedSearchValue","setResolvedSearchValue","prop","defaultProp","onChange","resolvedSorting","setResolvedSorting","resolvedRowSelection","setResolvedRowSelection","hasPagination","resolvedPagination","setResolvedPagination","pageIndex","pageSize","hasExpanding","resolvedExpanded","setResolvedExpanded","resolvedColumnSizing","setResolvedColumnSizing","isClientSorting","isClientPagination","columnPinning","left","right","pinnedColumnIds","Set","lastPinnedColumnId","length","table","state","globalFilter","autoResetExpanded","enableSubRowSelection","columnResizeMode","defaultColumn","manualFiltering","rows","getRowModel","headerGroups","getHeaderGroups","visibleColumns","getVisibleFlatColumns","resolvedRowHeight","resolvedHeaderHeight","resolvedLoadingRowCount","shouldRenderSkeleton","hideRowsForLoading","hasActiveServerSearch","hasNoRows","hasNoResults","virtualizer","count","getScrollElement","current","estimateSize","overscan","bodyHeight","getTotalSize","bodyStyle","scrollToRow","index","scrollToIndex","resetSorting","resetSelection","resetSearch","hasFlexibleColumn","some","column","columnDef","has","id","gridTemplateColumns","map","columnSize","getSize","isLastColumn","join","scrollContainerStyle","isResizingColumn","Boolean","getState","columnSizingInfo","clientFilteredCount","clientTotalCount","contextValue","setSearchValue","filteredCount","totalCount","selectedRowCount","Provider","value","div","data-slot","data-query-mode","data-filtered-result-count","data-total-result-count","ref","style","role","aria-rowcount","aria-colcount","aria-label","aria-labelledby","headerGroup","headerRowIndex","Array","from","_","rowIndex","aria-hidden","height","transform","colIndex","isPinned","isLastPinned","position","getStart","zIndex","columnId","columnIndex","getVirtualItems","virtualRow","row","headerGroupCount","renderDataGridState","type","description","action","variant","onClick","selectedCount","onClear","DataGridCheckbox","checked","onCheckedChange","disabled","checkboxAriaLabel","isIndeterminate","isChecked","Root","indeterminate","next","Indicator","stroke","DataGridCheckboxHeader","allSelected","getIsAllPageRowsSelected","someSelected","getIsSomePageRowsSelected","toggleAllPageRowsSelected","DataGridCheckboxCell","getCanSelect","toggleSelected","DataGridSearch","placeholder","props","useDataGridContext","event","target","displayName","defaultFormatResultCount","noun","toLocaleString","DataGridResultCount","formatLabel","content","aria-live","fallback","isDataGridStateCopy","DataGridState","as","DataGridFilterTrigger","activeCount","label","activeLabel","placement","hasActiveFilters","data-placement","data-active-count","context","Error","DataGridFilterPanel","DataGridFooter","DataGridFooterEnd","DataGridFooterStart","DataGridHeader","DataGridHeaderActions","DataGridHeaderEnd","DataGridHeaderStart","DataGridSubtitle","DataGridTitle"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { ColumnDef, PaginationState } from "@tanstack/react-table";
|
|
2
|
-
export { DataGrid, DataGridFilterTrigger,
|
|
2
|
+
export { DataGrid, DataGridFilterTrigger, DataGridFooter, DataGridFooterEnd, DataGridFooterStart, DataGridHeader, DataGridHeaderActions, DataGridHeaderEnd, DataGridHeaderStart, DataGridResultCount, DataGridSearch, DataGridSubtitle, DataGridTitle, useDataGridContext, type DataGridContextValue, type DataGridHandle, type DataGridLabels } from "./data-grid";
|
|
3
3
|
export type { DataGridSecondaryAction, DataGridSelectionAction, DataGridSelectionActions } from "./data-grid-selection.types";
|
|
4
4
|
export { applyDataGridFilterClauses, matchesDataGridFilterClause, type DataGridFilterClause, type DataGridFilterJoin, type DataGridFilterOperator } from "./data-grid-filter-clauses";
|
|
5
5
|
export { DataGridFilterPanel, type DataGridFilterColumn, type DataGridFilterPanelLabels } from "./data-grid-filter-panel";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { DataGrid, DataGridFilterTrigger,
|
|
1
|
+
export { DataGrid, DataGridFilterTrigger, DataGridFooter, DataGridFooterEnd, DataGridFooterStart, DataGridHeader, DataGridHeaderActions, DataGridHeaderEnd, DataGridHeaderStart, DataGridResultCount, DataGridSearch, DataGridSubtitle, DataGridTitle, useDataGridContext } from "./data-grid.js";
|
|
2
2
|
export { applyDataGridFilterClauses, matchesDataGridFilterClause } from "./data-grid-filter-clauses.js";
|
|
3
3
|
export { DataGridFilterPanel } from "./data-grid-filter-panel.js";
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ui/core/data-grid/index.ts"],"sourcesContent":["export type { ColumnDef, PaginationState } from '@tanstack/react-table';\nexport {\n DataGrid,\n DataGridFilterTrigger,\n
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ui/core/data-grid/index.ts"],"sourcesContent":["export type { ColumnDef, PaginationState } from '@tanstack/react-table';\nexport {\n DataGrid,\n DataGridFilterTrigger,\n DataGridFooter,\n DataGridFooterEnd,\n DataGridFooterStart,\n DataGridHeader,\n DataGridHeaderActions,\n DataGridHeaderEnd,\n DataGridHeaderStart,\n DataGridResultCount,\n DataGridSearch,\n DataGridSubtitle,\n DataGridTitle,\n useDataGridContext,\n type DataGridContextValue,\n type DataGridHandle,\n type DataGridLabels,\n} from './data-grid';\nexport type {\n DataGridSecondaryAction,\n DataGridSelectionAction,\n DataGridSelectionActions,\n} from './data-grid-selection.types';\nexport {\n applyDataGridFilterClauses,\n matchesDataGridFilterClause,\n type DataGridFilterClause,\n type DataGridFilterJoin,\n type DataGridFilterOperator,\n} from './data-grid-filter-clauses';\nexport {\n DataGridFilterPanel,\n type DataGridFilterColumn,\n type DataGridFilterPanelLabels,\n} from './data-grid-filter-panel';\n"],"names":["DataGrid","DataGridFilterTrigger","DataGridFooter","DataGridFooterEnd","DataGridFooterStart","DataGridHeader","DataGridHeaderActions","DataGridHeaderEnd","DataGridHeaderStart","DataGridResultCount","DataGridSearch","DataGridSubtitle","DataGridTitle","useDataGridContext","applyDataGridFilterClauses","matchesDataGridFilterClause","DataGridFilterPanel"],"mappings":"AACA,SACEA,QAAQ,EACRC,qBAAqB,EACrBC,cAAc,EACdC,iBAAiB,EACjBC,mBAAmB,EACnBC,cAAc,EACdC,qBAAqB,EACrBC,iBAAiB,EACjBC,mBAAmB,EACnBC,mBAAmB,EACnBC,cAAc,EACdC,gBAAgB,EAChBC,aAAa,EACbC,kBAAkB,QAIb,iBAAc;AAMrB,SACEC,0BAA0B,EAC1BC,2BAA2B,QAItB,gCAA6B;AACpC,SACEC,mBAAmB,QAGd,8BAA2B"}
|
|
@@ -5,6 +5,7 @@ import { cva } from "class-variance-authority";
|
|
|
5
5
|
import { cn } from "../../../../lib/utils.js";
|
|
6
6
|
import { Button } from "../button/button.js";
|
|
7
7
|
import { SelectTrigger } from "../select/select.js";
|
|
8
|
+
import { StatusText } from "../status-text/status-text.js";
|
|
8
9
|
import { PaginationSizeContext, usePaginationSize } from "./pagination-size-context.js";
|
|
9
10
|
import { PaginationTeleport } from "./pagination-teleport.js";
|
|
10
11
|
const paginationLinkVariants = cva('border border-transparent text-base font-normal leading-5 tracking-tightest focus-visible:shadow-focus-ring', {
|
|
@@ -111,11 +112,10 @@ const PaginationItem = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
|
111
112
|
});
|
|
112
113
|
});
|
|
113
114
|
PaginationItem.displayName = 'PaginationItem';
|
|
114
|
-
const PaginationStatus = /*#__PURE__*/ forwardRef((
|
|
115
|
-
return /*#__PURE__*/ _jsx(
|
|
115
|
+
const PaginationStatus = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
116
|
+
return /*#__PURE__*/ _jsx(StatusText, {
|
|
116
117
|
ref: ref,
|
|
117
118
|
"data-slot": "pagination-status",
|
|
118
|
-
className: cn('flex items-center text-sm leading-4.5 tracking-tight font-normal text-muted-foreground', className),
|
|
119
119
|
...props
|
|
120
120
|
});
|
|
121
121
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ui/core/pagination/pagination.tsx"],"sourcesContent":["import {\n type ForwardRefExoticComponent,\n type RefAttributes,\n type ComponentProps,\n type ComponentRef,\n type MouseEvent,\n type ReactNode,\n forwardRef,\n} from 'react';\n\nimport type { SelectTriggerProps } from '@base-ui/react';\nimport {\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n IconDots,\n} from '@tabler/icons-react';\nimport { cva } from 'class-variance-authority';\n\nimport { cn } from '../../../../lib/utils';\nimport { Button } from '../button/button';\nimport { SelectTrigger } from '../select/select';\n\nimport {\n type PaginationSize,\n PaginationSizeContext,\n usePaginationSize,\n} from './pagination-size-context';\nimport { PaginationTeleport } from './pagination-teleport';\n\nconst paginationLinkVariants = cva(\n 'border border-transparent text-base font-normal leading-5 tracking-tightest focus-visible:shadow-focus-ring',\n {\n variants: {\n size: {\n default: '',\n small: 'text-sm leading-4.5 tracking-tight',\n },\n active: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n active: false,\n className:\n 'text-medium-foreground hover:bg-base-background-hover hover:text-base-foreground focus-visible:bg-medium-background focus-visible:text-base-foreground',\n },\n {\n active: true,\n className:\n 'border-emphasized bg-secondary-background text-secondary-foreground hover:bg-base-background-hover hover:text-secondary-foreground focus-visible:bg-secondary-background focus-visible:text-secondary-foreground',\n },\n ],\n defaultVariants: {\n size: 'default',\n active: false,\n },\n }\n);\n\nconst paginationEllipsisVariants = cva(\n 'flex items-center justify-center text-medium-foreground',\n {\n variants: {\n size: {\n default: 'h-9 w-9',\n small: 'h-7 w-7',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nconst paginationSelectTriggerVariants = cva(\n 'w-auto whitespace-nowrap min-h-0',\n {\n variants: {\n size: {\n default: 'h-9 gap-2 rounded-lg px-3 min-w-19',\n sm: 'h-7 gap-1.5 rounded-md px-2 min-w-16',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nconst ICON_BUTTON_WIDTH_BY_SIZE: Record<PaginationSize, string> = {\n small: 'max-w-7',\n default: 'max-w-9',\n};\n\nconst TEXT_LINK_WIDTH_BY_SIZE: Record<PaginationSize, string> = {\n small: 'min-w-7',\n default: 'min-w-9',\n};\n\ntype PaginationButtonSize = 'default' | 'sm';\ntype PaginationRadiusClass = 'rounded-md' | 'rounded-lg';\n\nconst getPaginationButtonStyles = (size: PaginationSize = 'default') => {\n const buttonSize: PaginationButtonSize = size === 'small' ? 'sm' : 'default';\n const radiusClass: PaginationRadiusClass =\n size === 'small' ? 'rounded-md' : 'rounded-lg';\n const iconButtonWidth = ICON_BUTTON_WIDTH_BY_SIZE[size];\n const textLinkWidth = TEXT_LINK_WIDTH_BY_SIZE[size];\n\n return {\n buttonSize,\n radiusClass,\n iconButtonWidth,\n textLinkWidth,\n };\n};\n\nconst Pagination: ForwardRefExoticComponent<\n Omit<\n ComponentProps<'nav'> & {\n size?: PaginationSize;\n },\n 'ref'\n > &\n RefAttributes<HTMLElement>\n> = forwardRef<\n ComponentRef<'nav'>,\n ComponentProps<'nav'> & { size?: PaginationSize }\n>(({ className, size = 'default', ...props }, ref) => {\n return (\n <PaginationSizeContext.Provider value={size}>\n <nav\n ref={ref}\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn('mx-auto flex w-full justify-center gap-2', className)}\n {...props}\n />\n </PaginationSizeContext.Provider>\n );\n});\nPagination.displayName = 'Pagination';\n\nconst PaginationContent: ForwardRefExoticComponent<\n Omit<\n ComponentProps<'ul'> & {\n size?: PaginationSize;\n },\n 'ref'\n > &\n RefAttributes<HTMLUListElement>\n> = forwardRef<\n ComponentRef<'ul'>,\n ComponentProps<'ul'> & { size?: PaginationSize }\n>(({ className, size, ...props }, ref) => {\n const inheritedSize = usePaginationSize();\n const resolvedSize = size ?? inheritedSize;\n return (\n <PaginationSizeContext.Provider value={resolvedSize}>\n <ul\n ref={ref}\n data-slot=\"pagination-content\"\n data-size={resolvedSize}\n className={cn('flex flex-row items-center gap-1', className)}\n {...props}\n />\n </PaginationSizeContext.Provider>\n );\n});\nPaginationContent.displayName = 'PaginationContent';\n\nconst PaginationItem: ForwardRefExoticComponent<\n ComponentProps<'li'> & RefAttributes<HTMLLIElement>\n> = forwardRef<ComponentRef<'li'>, ComponentProps<'li'>>((props, ref) => {\n return <li ref={ref} data-slot=\"pagination-item\" {...props} />;\n});\nPaginationItem.displayName = 'PaginationItem';\n\nconst PaginationStatus: ForwardRefExoticComponent<\n ComponentProps<'output'> & RefAttributes<HTMLOutputElement>\n> = forwardRef<ComponentRef<'output'>, ComponentProps<'output'>>(\n ({ className, ...props }, ref) => {\n return (\n <output\n ref={ref}\n data-slot=\"pagination-status\"\n className={cn(\n 'flex items-center text-sm leading-4.5 tracking-tight font-normal text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n }\n);\nPaginationStatus.displayName = 'PaginationStatus';\n\nconst PaginationSelectTrigger: ForwardRefExoticComponent<\n Omit<\n SelectTriggerProps & {\n size?: 'sm' | 'default';\n errorMessage?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLButtonElement>\n> = forwardRef<\n ComponentRef<typeof SelectTrigger>,\n ComponentProps<typeof SelectTrigger>\n>(({ className, size, style, ...props }, ref) => {\n const inheritedSize = usePaginationSize();\n const isPaginationSmall = inheritedSize === 'small' && size === undefined;\n const resolvedSize = size ?? (isPaginationSmall ? 'sm' : 'default');\n\n return (\n <SelectTrigger\n ref={ref}\n size={resolvedSize}\n data-slot=\"pagination-select-trigger\"\n style={style}\n className={cn(\n paginationSelectTriggerVariants({ size: resolvedSize }),\n className\n )}\n {...props}\n />\n );\n});\nPaginationSelectTrigger.displayName = 'PaginationSelectTrigger';\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n isDisabled?: boolean;\n size?: PaginationSize;\n} & ComponentProps<'a'>;\n\nconst PaginationLink: ForwardRefExoticComponent<\n Omit<PaginationLinkProps, 'ref'> & RefAttributes<HTMLAnchorElement>\n> = forwardRef<ComponentRef<'a'>, PaginationLinkProps>(\n (\n { children, className, isActive, isDisabled, onClick, size, ...props },\n ref\n ) => {\n const inheritedSize = usePaginationSize();\n const resolvedSize = size ?? inheritedSize;\n const { buttonSize, radiusClass, textLinkWidth } =\n getPaginationButtonStyles(resolvedSize);\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <Button\n variant=\"ghost\"\n size={buttonSize}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n radiusClass,\n textLinkWidth,\n paginationLinkVariants({ size: resolvedSize, active: isActive }),\n isDisabled && 'pointer-events-none text-base-foreground-disabled',\n className\n )}\n render={\n <a\n ref={ref}\n aria-current={isActive ? 'page' : undefined}\n aria-disabled={isDisabled || undefined}\n onClick={handleClick}\n tabIndex={isDisabled ? -1 : undefined}\n {...props}\n >\n {children}\n </a>\n }\n />\n );\n }\n);\nPaginationLink.displayName = 'PaginationLink';\n\ntype PaginationIconLinkProps = {\n ariaLabel: string;\n dataSlot: string;\n icon: ReactNode;\n isDisabled?: boolean;\n size?: PaginationSize;\n} & Omit<ComponentProps<'a'>, 'children'>;\n\nconst PaginationIconLink = forwardRef<\n ComponentRef<'a'>,\n PaginationIconLinkProps\n>(\n (\n {\n ariaLabel,\n className,\n dataSlot,\n icon,\n isDisabled,\n onClick,\n size,\n ...linkProps\n },\n ref\n ) => {\n const inheritedSize = usePaginationSize();\n const resolvedSize = size ?? inheritedSize;\n const { buttonSize, radiusClass, iconButtonWidth } =\n getPaginationButtonStyles(resolvedSize);\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <Button\n variant=\"ghost\"\n size={buttonSize}\n data-slot={dataSlot}\n className={cn(\n radiusClass,\n iconButtonWidth,\n paginationLinkVariants({ size: resolvedSize, active: false }),\n isDisabled && 'pointer-events-none text-base-foreground-disabled',\n className\n )}\n render={\n <a\n ref={ref}\n aria-label={ariaLabel}\n aria-disabled={isDisabled || undefined}\n onClick={handleClick}\n tabIndex={isDisabled ? -1 : undefined}\n {...linkProps}\n >\n {icon}\n </a>\n }\n />\n );\n }\n);\nPaginationIconLink.displayName = 'PaginationIconLink';\n\nconst PaginationFirst: ForwardRefExoticComponent<\n Omit<\n Omit<PaginationLinkProps, 'isActive'> & {\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLAnchorElement>\n> = forwardRef<\n ComponentRef<'a'>,\n Omit<PaginationLinkProps, 'isActive'> & { label?: string }\n>(({ className, size, label = 'Go to first page', ...props }, ref) => {\n return (\n <PaginationIconLink\n ref={ref}\n dataSlot=\"pagination-first\"\n ariaLabel={label}\n icon={<IconChevronsLeft />}\n className={className}\n size={size}\n {...props}\n />\n );\n});\nPaginationFirst.displayName = 'PaginationFirst';\n\nconst PaginationPrevious: ForwardRefExoticComponent<\n Omit<\n Omit<PaginationLinkProps, 'isActive'> & {\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLAnchorElement>\n> = forwardRef<\n ComponentRef<'a'>,\n Omit<PaginationLinkProps, 'isActive'> & { label?: string }\n>(({ className, size, label = 'Go to previous page', ...props }, ref) => {\n return (\n <PaginationIconLink\n ref={ref}\n dataSlot=\"pagination-previous\"\n ariaLabel={label}\n icon={<IconChevronLeft />}\n className={className}\n size={size}\n {...props}\n />\n );\n});\nPaginationPrevious.displayName = 'PaginationPrevious';\n\nconst PaginationNext: ForwardRefExoticComponent<\n Omit<\n Omit<PaginationLinkProps, 'isActive'> & {\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLAnchorElement>\n> = forwardRef<\n ComponentRef<'a'>,\n Omit<PaginationLinkProps, 'isActive'> & { label?: string }\n>(({ className, size, label = 'Go to next page', ...props }, ref) => {\n return (\n <PaginationIconLink\n ref={ref}\n dataSlot=\"pagination-next\"\n ariaLabel={label}\n icon={<IconChevronRight />}\n className={className}\n size={size}\n {...props}\n />\n );\n});\nPaginationNext.displayName = 'PaginationNext';\n\nconst PaginationLast: ForwardRefExoticComponent<\n Omit<\n Omit<PaginationLinkProps, 'isActive'> & {\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLAnchorElement>\n> = forwardRef<\n ComponentRef<'a'>,\n Omit<PaginationLinkProps, 'isActive'> & { label?: string }\n>(({ className, size, label = 'Go to last page', ...props }, ref) => {\n return (\n <PaginationIconLink\n ref={ref}\n dataSlot=\"pagination-last\"\n ariaLabel={label}\n icon={<IconChevronsRight />}\n className={className}\n size={size}\n {...props}\n />\n );\n});\nPaginationLast.displayName = 'PaginationLast';\n\nconst PaginationEllipsis: ForwardRefExoticComponent<\n Omit<\n ComponentProps<'span'> & {\n size?: PaginationSize;\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLSpanElement>\n> = forwardRef<\n ComponentRef<'span'>,\n ComponentProps<'span'> & { size?: PaginationSize; label?: string }\n>(({ className, size, label = 'More pages', ...props }, ref) => {\n const inheritedSize = usePaginationSize();\n const resolvedSize = size ?? inheritedSize;\n const { iconButtonWidth } = getPaginationButtonStyles(resolvedSize);\n\n return (\n <span\n ref={ref}\n data-slot=\"pagination-ellipsis\"\n className={cn(\n iconButtonWidth,\n paginationEllipsisVariants({ size: resolvedSize }),\n className\n )}\n {...props}\n >\n <IconDots aria-hidden=\"true\" className=\"h-4 w-4\" />\n <span className=\"sr-only\">{label}</span>\n </span>\n );\n});\nPaginationEllipsis.displayName = 'PaginationEllipsis';\n\nconst PaginationResultsPerPage: ForwardRefExoticComponent<\n ComponentProps<'li'> & RefAttributes<HTMLLIElement>\n> = forwardRef<ComponentRef<'li'>, ComponentProps<'li'>>(\n ({ className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n data-slot=\"pagination-results-per-page\"\n className={cn('flex items-center gap-2 pl-3', className)}\n {...props}\n />\n );\n }\n);\nPaginationResultsPerPage.displayName = 'PaginationResultsPerPage';\n\nconst PaginationResultsPerPageLabel: ForwardRefExoticComponent<\n ComponentProps<'span'> & RefAttributes<HTMLSpanElement>\n> = forwardRef<ComponentRef<'span'>, ComponentProps<'span'>>(\n ({ className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n data-slot=\"pagination-results-per-page-label\"\n className={cn(\n 'text-sm leading-4.5 tracking-tight font-normal text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n }\n);\nPaginationResultsPerPageLabel.displayName = 'PaginationResultsPerPageLabel';\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n PaginationResultsPerPage,\n PaginationResultsPerPageLabel,\n PaginationSelectTrigger,\n PaginationStatus,\n PaginationTeleport,\n};\n"],"names":["forwardRef","IconChevronLeft","IconChevronRight","IconChevronsLeft","IconChevronsRight","IconDots","cva","cn","Button","SelectTrigger","PaginationSizeContext","usePaginationSize","PaginationTeleport","paginationLinkVariants","variants","size","default","small","active","true","false","compoundVariants","className","defaultVariants","paginationEllipsisVariants","paginationSelectTriggerVariants","sm","ICON_BUTTON_WIDTH_BY_SIZE","TEXT_LINK_WIDTH_BY_SIZE","getPaginationButtonStyles","buttonSize","radiusClass","iconButtonWidth","textLinkWidth","Pagination","props","ref","Provider","value","nav","aria-label","data-slot","displayName","PaginationContent","inheritedSize","resolvedSize","ul","data-size","PaginationItem","li","PaginationStatus","output","PaginationSelectTrigger","style","isPaginationSmall","undefined","PaginationLink","children","isActive","isDisabled","onClick","handleClick","event","preventDefault","variant","data-active","render","a","aria-current","aria-disabled","tabIndex","PaginationIconLink","ariaLabel","dataSlot","icon","linkProps","PaginationFirst","label","PaginationPrevious","PaginationNext","PaginationLast","PaginationEllipsis","span","aria-hidden","PaginationResultsPerPage","PaginationResultsPerPageLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ui/core/pagination/pagination.tsx"],"sourcesContent":["import {\n type ForwardRefExoticComponent,\n type RefAttributes,\n type ComponentProps,\n type ComponentRef,\n type MouseEvent,\n type ReactNode,\n forwardRef,\n} from 'react';\n\nimport type { SelectTriggerProps } from '@base-ui/react';\nimport {\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n IconDots,\n} from '@tabler/icons-react';\nimport { cva } from 'class-variance-authority';\n\nimport { cn } from '../../../../lib/utils';\nimport { Button } from '../button/button';\nimport { SelectTrigger } from '../select/select';\nimport { StatusText } from '../status-text/status-text';\n\nimport {\n type PaginationSize,\n PaginationSizeContext,\n usePaginationSize,\n} from './pagination-size-context';\nimport { PaginationTeleport } from './pagination-teleport';\n\nconst paginationLinkVariants = cva(\n 'border border-transparent text-base font-normal leading-5 tracking-tightest focus-visible:shadow-focus-ring',\n {\n variants: {\n size: {\n default: '',\n small: 'text-sm leading-4.5 tracking-tight',\n },\n active: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n active: false,\n className:\n 'text-medium-foreground hover:bg-base-background-hover hover:text-base-foreground focus-visible:bg-medium-background focus-visible:text-base-foreground',\n },\n {\n active: true,\n className:\n 'border-emphasized bg-secondary-background text-secondary-foreground hover:bg-base-background-hover hover:text-secondary-foreground focus-visible:bg-secondary-background focus-visible:text-secondary-foreground',\n },\n ],\n defaultVariants: {\n size: 'default',\n active: false,\n },\n }\n);\n\nconst paginationEllipsisVariants = cva(\n 'flex items-center justify-center text-medium-foreground',\n {\n variants: {\n size: {\n default: 'h-9 w-9',\n small: 'h-7 w-7',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nconst paginationSelectTriggerVariants = cva(\n 'w-auto whitespace-nowrap min-h-0',\n {\n variants: {\n size: {\n default: 'h-9 gap-2 rounded-lg px-3 min-w-19',\n sm: 'h-7 gap-1.5 rounded-md px-2 min-w-16',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nconst ICON_BUTTON_WIDTH_BY_SIZE: Record<PaginationSize, string> = {\n small: 'max-w-7',\n default: 'max-w-9',\n};\n\nconst TEXT_LINK_WIDTH_BY_SIZE: Record<PaginationSize, string> = {\n small: 'min-w-7',\n default: 'min-w-9',\n};\n\ntype PaginationButtonSize = 'default' | 'sm';\ntype PaginationRadiusClass = 'rounded-md' | 'rounded-lg';\n\nconst getPaginationButtonStyles = (size: PaginationSize = 'default') => {\n const buttonSize: PaginationButtonSize = size === 'small' ? 'sm' : 'default';\n const radiusClass: PaginationRadiusClass =\n size === 'small' ? 'rounded-md' : 'rounded-lg';\n const iconButtonWidth = ICON_BUTTON_WIDTH_BY_SIZE[size];\n const textLinkWidth = TEXT_LINK_WIDTH_BY_SIZE[size];\n\n return {\n buttonSize,\n radiusClass,\n iconButtonWidth,\n textLinkWidth,\n };\n};\n\nconst Pagination: ForwardRefExoticComponent<\n Omit<\n ComponentProps<'nav'> & {\n size?: PaginationSize;\n },\n 'ref'\n > &\n RefAttributes<HTMLElement>\n> = forwardRef<\n ComponentRef<'nav'>,\n ComponentProps<'nav'> & { size?: PaginationSize }\n>(({ className, size = 'default', ...props }, ref) => {\n return (\n <PaginationSizeContext.Provider value={size}>\n <nav\n ref={ref}\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn('mx-auto flex w-full justify-center gap-2', className)}\n {...props}\n />\n </PaginationSizeContext.Provider>\n );\n});\nPagination.displayName = 'Pagination';\n\nconst PaginationContent: ForwardRefExoticComponent<\n Omit<\n ComponentProps<'ul'> & {\n size?: PaginationSize;\n },\n 'ref'\n > &\n RefAttributes<HTMLUListElement>\n> = forwardRef<\n ComponentRef<'ul'>,\n ComponentProps<'ul'> & { size?: PaginationSize }\n>(({ className, size, ...props }, ref) => {\n const inheritedSize = usePaginationSize();\n const resolvedSize = size ?? inheritedSize;\n return (\n <PaginationSizeContext.Provider value={resolvedSize}>\n <ul\n ref={ref}\n data-slot=\"pagination-content\"\n data-size={resolvedSize}\n className={cn('flex flex-row items-center gap-1', className)}\n {...props}\n />\n </PaginationSizeContext.Provider>\n );\n});\nPaginationContent.displayName = 'PaginationContent';\n\nconst PaginationItem: ForwardRefExoticComponent<\n ComponentProps<'li'> & RefAttributes<HTMLLIElement>\n> = forwardRef<ComponentRef<'li'>, ComponentProps<'li'>>((props, ref) => {\n return <li ref={ref} data-slot=\"pagination-item\" {...props} />;\n});\nPaginationItem.displayName = 'PaginationItem';\n\nconst PaginationStatus: ForwardRefExoticComponent<\n ComponentProps<'output'> & RefAttributes<HTMLOutputElement>\n> = forwardRef<ComponentRef<'output'>, ComponentProps<'output'>>(\n (props, ref) => {\n return <StatusText ref={ref} data-slot=\"pagination-status\" {...props} />;\n }\n);\nPaginationStatus.displayName = 'PaginationStatus';\n\nconst PaginationSelectTrigger: ForwardRefExoticComponent<\n Omit<\n SelectTriggerProps & {\n size?: 'sm' | 'default';\n errorMessage?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLButtonElement>\n> = forwardRef<\n ComponentRef<typeof SelectTrigger>,\n ComponentProps<typeof SelectTrigger>\n>(({ className, size, style, ...props }, ref) => {\n const inheritedSize = usePaginationSize();\n const isPaginationSmall = inheritedSize === 'small' && size === undefined;\n const resolvedSize = size ?? (isPaginationSmall ? 'sm' : 'default');\n\n return (\n <SelectTrigger\n ref={ref}\n size={resolvedSize}\n data-slot=\"pagination-select-trigger\"\n style={style}\n className={cn(\n paginationSelectTriggerVariants({ size: resolvedSize }),\n className\n )}\n {...props}\n />\n );\n});\nPaginationSelectTrigger.displayName = 'PaginationSelectTrigger';\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n isDisabled?: boolean;\n size?: PaginationSize;\n} & ComponentProps<'a'>;\n\nconst PaginationLink: ForwardRefExoticComponent<\n Omit<PaginationLinkProps, 'ref'> & RefAttributes<HTMLAnchorElement>\n> = forwardRef<ComponentRef<'a'>, PaginationLinkProps>(\n (\n { children, className, isActive, isDisabled, onClick, size, ...props },\n ref\n ) => {\n const inheritedSize = usePaginationSize();\n const resolvedSize = size ?? inheritedSize;\n const { buttonSize, radiusClass, textLinkWidth } =\n getPaginationButtonStyles(resolvedSize);\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <Button\n variant=\"ghost\"\n size={buttonSize}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n radiusClass,\n textLinkWidth,\n paginationLinkVariants({ size: resolvedSize, active: isActive }),\n isDisabled && 'pointer-events-none text-base-foreground-disabled',\n className\n )}\n render={\n <a\n ref={ref}\n aria-current={isActive ? 'page' : undefined}\n aria-disabled={isDisabled || undefined}\n onClick={handleClick}\n tabIndex={isDisabled ? -1 : undefined}\n {...props}\n >\n {children}\n </a>\n }\n />\n );\n }\n);\nPaginationLink.displayName = 'PaginationLink';\n\ntype PaginationIconLinkProps = {\n ariaLabel: string;\n dataSlot: string;\n icon: ReactNode;\n isDisabled?: boolean;\n size?: PaginationSize;\n} & Omit<ComponentProps<'a'>, 'children'>;\n\nconst PaginationIconLink = forwardRef<\n ComponentRef<'a'>,\n PaginationIconLinkProps\n>(\n (\n {\n ariaLabel,\n className,\n dataSlot,\n icon,\n isDisabled,\n onClick,\n size,\n ...linkProps\n },\n ref\n ) => {\n const inheritedSize = usePaginationSize();\n const resolvedSize = size ?? inheritedSize;\n const { buttonSize, radiusClass, iconButtonWidth } =\n getPaginationButtonStyles(resolvedSize);\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <Button\n variant=\"ghost\"\n size={buttonSize}\n data-slot={dataSlot}\n className={cn(\n radiusClass,\n iconButtonWidth,\n paginationLinkVariants({ size: resolvedSize, active: false }),\n isDisabled && 'pointer-events-none text-base-foreground-disabled',\n className\n )}\n render={\n <a\n ref={ref}\n aria-label={ariaLabel}\n aria-disabled={isDisabled || undefined}\n onClick={handleClick}\n tabIndex={isDisabled ? -1 : undefined}\n {...linkProps}\n >\n {icon}\n </a>\n }\n />\n );\n }\n);\nPaginationIconLink.displayName = 'PaginationIconLink';\n\nconst PaginationFirst: ForwardRefExoticComponent<\n Omit<\n Omit<PaginationLinkProps, 'isActive'> & {\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLAnchorElement>\n> = forwardRef<\n ComponentRef<'a'>,\n Omit<PaginationLinkProps, 'isActive'> & { label?: string }\n>(({ className, size, label = 'Go to first page', ...props }, ref) => {\n return (\n <PaginationIconLink\n ref={ref}\n dataSlot=\"pagination-first\"\n ariaLabel={label}\n icon={<IconChevronsLeft />}\n className={className}\n size={size}\n {...props}\n />\n );\n});\nPaginationFirst.displayName = 'PaginationFirst';\n\nconst PaginationPrevious: ForwardRefExoticComponent<\n Omit<\n Omit<PaginationLinkProps, 'isActive'> & {\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLAnchorElement>\n> = forwardRef<\n ComponentRef<'a'>,\n Omit<PaginationLinkProps, 'isActive'> & { label?: string }\n>(({ className, size, label = 'Go to previous page', ...props }, ref) => {\n return (\n <PaginationIconLink\n ref={ref}\n dataSlot=\"pagination-previous\"\n ariaLabel={label}\n icon={<IconChevronLeft />}\n className={className}\n size={size}\n {...props}\n />\n );\n});\nPaginationPrevious.displayName = 'PaginationPrevious';\n\nconst PaginationNext: ForwardRefExoticComponent<\n Omit<\n Omit<PaginationLinkProps, 'isActive'> & {\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLAnchorElement>\n> = forwardRef<\n ComponentRef<'a'>,\n Omit<PaginationLinkProps, 'isActive'> & { label?: string }\n>(({ className, size, label = 'Go to next page', ...props }, ref) => {\n return (\n <PaginationIconLink\n ref={ref}\n dataSlot=\"pagination-next\"\n ariaLabel={label}\n icon={<IconChevronRight />}\n className={className}\n size={size}\n {...props}\n />\n );\n});\nPaginationNext.displayName = 'PaginationNext';\n\nconst PaginationLast: ForwardRefExoticComponent<\n Omit<\n Omit<PaginationLinkProps, 'isActive'> & {\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLAnchorElement>\n> = forwardRef<\n ComponentRef<'a'>,\n Omit<PaginationLinkProps, 'isActive'> & { label?: string }\n>(({ className, size, label = 'Go to last page', ...props }, ref) => {\n return (\n <PaginationIconLink\n ref={ref}\n dataSlot=\"pagination-last\"\n ariaLabel={label}\n icon={<IconChevronsRight />}\n className={className}\n size={size}\n {...props}\n />\n );\n});\nPaginationLast.displayName = 'PaginationLast';\n\nconst PaginationEllipsis: ForwardRefExoticComponent<\n Omit<\n ComponentProps<'span'> & {\n size?: PaginationSize;\n label?: string;\n },\n 'ref'\n > &\n RefAttributes<HTMLSpanElement>\n> = forwardRef<\n ComponentRef<'span'>,\n ComponentProps<'span'> & { size?: PaginationSize; label?: string }\n>(({ className, size, label = 'More pages', ...props }, ref) => {\n const inheritedSize = usePaginationSize();\n const resolvedSize = size ?? inheritedSize;\n const { iconButtonWidth } = getPaginationButtonStyles(resolvedSize);\n\n return (\n <span\n ref={ref}\n data-slot=\"pagination-ellipsis\"\n className={cn(\n iconButtonWidth,\n paginationEllipsisVariants({ size: resolvedSize }),\n className\n )}\n {...props}\n >\n <IconDots aria-hidden=\"true\" className=\"h-4 w-4\" />\n <span className=\"sr-only\">{label}</span>\n </span>\n );\n});\nPaginationEllipsis.displayName = 'PaginationEllipsis';\n\nconst PaginationResultsPerPage: ForwardRefExoticComponent<\n ComponentProps<'li'> & RefAttributes<HTMLLIElement>\n> = forwardRef<ComponentRef<'li'>, ComponentProps<'li'>>(\n ({ className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n data-slot=\"pagination-results-per-page\"\n className={cn('flex items-center gap-2 pl-3', className)}\n {...props}\n />\n );\n }\n);\nPaginationResultsPerPage.displayName = 'PaginationResultsPerPage';\n\nconst PaginationResultsPerPageLabel: ForwardRefExoticComponent<\n ComponentProps<'span'> & RefAttributes<HTMLSpanElement>\n> = forwardRef<ComponentRef<'span'>, ComponentProps<'span'>>(\n ({ className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n data-slot=\"pagination-results-per-page-label\"\n className={cn(\n 'text-sm leading-4.5 tracking-tight font-normal text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n }\n);\nPaginationResultsPerPageLabel.displayName = 'PaginationResultsPerPageLabel';\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationFirst,\n PaginationItem,\n PaginationLast,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n PaginationResultsPerPage,\n PaginationResultsPerPageLabel,\n PaginationSelectTrigger,\n PaginationStatus,\n PaginationTeleport,\n};\n"],"names":["forwardRef","IconChevronLeft","IconChevronRight","IconChevronsLeft","IconChevronsRight","IconDots","cva","cn","Button","SelectTrigger","StatusText","PaginationSizeContext","usePaginationSize","PaginationTeleport","paginationLinkVariants","variants","size","default","small","active","true","false","compoundVariants","className","defaultVariants","paginationEllipsisVariants","paginationSelectTriggerVariants","sm","ICON_BUTTON_WIDTH_BY_SIZE","TEXT_LINK_WIDTH_BY_SIZE","getPaginationButtonStyles","buttonSize","radiusClass","iconButtonWidth","textLinkWidth","Pagination","props","ref","Provider","value","nav","aria-label","data-slot","displayName","PaginationContent","inheritedSize","resolvedSize","ul","data-size","PaginationItem","li","PaginationStatus","PaginationSelectTrigger","style","isPaginationSmall","undefined","PaginationLink","children","isActive","isDisabled","onClick","handleClick","event","preventDefault","variant","data-active","render","a","aria-current","aria-disabled","tabIndex","PaginationIconLink","ariaLabel","dataSlot","icon","linkProps","PaginationFirst","label","PaginationPrevious","PaginationNext","PaginationLast","PaginationEllipsis","span","aria-hidden","PaginationResultsPerPage","PaginationResultsPerPageLabel"],"mappings":";AAAA,SAOEA,UAAU,QACL,QAAQ;AAGf,SACEC,eAAe,EACfC,gBAAgB,EAChBC,gBAAgB,EAChBC,iBAAiB,EACjBC,QAAQ,QACH,sBAAsB;AAC7B,SAASC,GAAG,QAAQ,2BAA2B;AAE/C,SAASC,EAAE,QAAQ,2BAAwB;AAC3C,SAASC,MAAM,QAAQ,sBAAmB;AAC1C,SAASC,aAAa,QAAQ,sBAAmB;AACjD,SAASC,UAAU,QAAQ,gCAA6B;AAExD,SAEEC,qBAAqB,EACrBC,iBAAiB,QACZ,+BAA4B;AACnC,SAASC,kBAAkB,QAAQ,2BAAwB;AAE3D,MAAMC,yBAAyBR,IAC7B,+GACA;IACES,UAAU;QACRC,MAAM;YACJC,SAAS;YACTC,OAAO;QACT;QACAC,QAAQ;YACNC,MAAM;YACNC,OAAO;QACT;IACF;IACAC,kBAAkB;QAChB;YACEH,QAAQ;YACRI,WACE;QACJ;QACA;YACEJ,QAAQ;YACRI,WACE;QACJ;KACD;IACDC,iBAAiB;QACfR,MAAM;QACNG,QAAQ;IACV;AACF;AAGF,MAAMM,6BAA6BnB,IACjC,2DACA;IACES,UAAU;QACRC,MAAM;YACJC,SAAS;YACTC,OAAO;QACT;IACF;IACAM,iBAAiB;QACfR,MAAM;IACR;AACF;AAGF,MAAMU,kCAAkCpB,IACtC,oCACA;IACES,UAAU;QACRC,MAAM;YACJC,SAAS;YACTU,IAAI;QACN;IACF;IACAH,iBAAiB;QACfR,MAAM;IACR;AACF;AAGF,MAAMY,4BAA4D;IAChEV,OAAO;IACPD,SAAS;AACX;AAEA,MAAMY,0BAA0D;IAC9DX,OAAO;IACPD,SAAS;AACX;AAKA,MAAMa,4BAA4B,CAACd,OAAuB,SAAS;IACjE,MAAMe,aAAmCf,SAAS,UAAU,OAAO;IACnE,MAAMgB,cACJhB,SAAS,UAAU,eAAe;IACpC,MAAMiB,kBAAkBL,yBAAyB,CAACZ,KAAK;IACvD,MAAMkB,gBAAgBL,uBAAuB,CAACb,KAAK;IAEnD,OAAO;QACLe;QACAC;QACAC;QACAC;IACF;AACF;AAEA,MAAMC,2BAQFnC,WAGF,CAAC,EAAEuB,SAAS,EAAEP,OAAO,SAAS,EAAE,GAAGoB,OAAO,EAAEC;IAC5C,qBACE,KAAC1B,sBAAsB2B,QAAQ;QAACC,OAAOvB;kBACrC,cAAA,KAACwB;YACCH,KAAKA;YACLI,cAAW;YACXC,aAAU;YACVnB,WAAWhB,GAAG,4CAA4CgB;YACzD,GAAGa,KAAK;;;AAIjB;AACAD,WAAWQ,WAAW,GAAG;AAEzB,MAAMC,kCAQF5C,WAGF,CAAC,EAAEuB,SAAS,EAAEP,IAAI,EAAE,GAAGoB,OAAO,EAAEC;IAChC,MAAMQ,gBAAgBjC;IACtB,MAAMkC,eAAe9B,QAAQ6B;IAC7B,qBACE,KAAClC,sBAAsB2B,QAAQ;QAACC,OAAOO;kBACrC,cAAA,KAACC;YACCV,KAAKA;YACLK,aAAU;YACVM,aAAWF;YACXvB,WAAWhB,GAAG,oCAAoCgB;YACjD,GAAGa,KAAK;;;AAIjB;AACAQ,kBAAkBD,WAAW,GAAG;AAEhC,MAAMM,+BAEFjD,WAAqD,CAACoC,OAAOC;IAC/D,qBAAO,KAACa;QAAGb,KAAKA;QAAKK,aAAU;QAAmB,GAAGN,KAAK;;AAC5D;AACAa,eAAeN,WAAW,GAAG;AAE7B,MAAMQ,iCAEFnD,WACF,CAACoC,OAAOC;IACN,qBAAO,KAAC3B;QAAW2B,KAAKA;QAAKK,aAAU;QAAqB,GAAGN,KAAK;;AACtE;AAEFe,iBAAiBR,WAAW,GAAG;AAE/B,MAAMS,wCASFpD,WAGF,CAAC,EAAEuB,SAAS,EAAEP,IAAI,EAAEqC,KAAK,EAAE,GAAGjB,OAAO,EAAEC;IACvC,MAAMQ,gBAAgBjC;IACtB,MAAM0C,oBAAoBT,kBAAkB,WAAW7B,SAASuC;IAChE,MAAMT,eAAe9B,QAASsC,CAAAA,oBAAoB,OAAO,SAAQ;IAEjE,qBACE,KAAC7C;QACC4B,KAAKA;QACLrB,MAAM8B;QACNJ,aAAU;QACVW,OAAOA;QACP9B,WAAWhB,GACTmB,gCAAgC;YAAEV,MAAM8B;QAAa,IACrDvB;QAED,GAAGa,KAAK;;AAGf;AACAgB,wBAAwBT,WAAW,GAAG;AAQtC,MAAMa,+BAEFxD,WACF,CACE,EAAEyD,QAAQ,EAAElC,SAAS,EAAEmC,QAAQ,EAAEC,UAAU,EAAEC,OAAO,EAAE5C,IAAI,EAAE,GAAGoB,OAAO,EACtEC;IAEA,MAAMQ,gBAAgBjC;IACtB,MAAMkC,eAAe9B,QAAQ6B;IAC7B,MAAM,EAAEd,UAAU,EAAEC,WAAW,EAAEE,aAAa,EAAE,GAC9CJ,0BAA0BgB;IAC5B,MAAMe,cAAc,CAACC;QACnB,IAAIH,YAAY;YACdG,MAAMC,cAAc;YACpB;QACF;QAEAH,UAAUE;IACZ;IAEA,qBACE,KAACtD;QACCwD,SAAQ;QACRhD,MAAMe;QACNW,aAAU;QACVuB,eAAaP;QACbnC,WAAWhB,GACTyB,aACAE,eACApB,uBAAuB;YAAEE,MAAM8B;YAAc3B,QAAQuC;QAAS,IAC9DC,cAAc,qDACdpC;QAEF2C,sBACE,KAACC;YACC9B,KAAKA;YACL+B,gBAAcV,WAAW,SAASH;YAClCc,iBAAeV,cAAcJ;YAC7BK,SAASC;YACTS,UAAUX,aAAa,CAAC,IAAIJ;YAC3B,GAAGnB,KAAK;sBAERqB;;;AAKX;AAEFD,eAAeb,WAAW,GAAG;AAU7B,MAAM4B,mCAAqBvE,WAIzB,CACE,EACEwE,SAAS,EACTjD,SAAS,EACTkD,QAAQ,EACRC,IAAI,EACJf,UAAU,EACVC,OAAO,EACP5C,IAAI,EACJ,GAAG2D,WACJ,EACDtC;IAEA,MAAMQ,gBAAgBjC;IACtB,MAAMkC,eAAe9B,QAAQ6B;IAC7B,MAAM,EAAEd,UAAU,EAAEC,WAAW,EAAEC,eAAe,EAAE,GAChDH,0BAA0BgB;IAC5B,MAAMe,cAAc,CAACC;QACnB,IAAIH,YAAY;YACdG,MAAMC,cAAc;YACpB;QACF;QAEAH,UAAUE;IACZ;IAEA,qBACE,KAACtD;QACCwD,SAAQ;QACRhD,MAAMe;QACNW,aAAW+B;QACXlD,WAAWhB,GACTyB,aACAC,iBACAnB,uBAAuB;YAAEE,MAAM8B;YAAc3B,QAAQ;QAAM,IAC3DwC,cAAc,qDACdpC;QAEF2C,sBACE,KAACC;YACC9B,KAAKA;YACLI,cAAY+B;YACZH,iBAAeV,cAAcJ;YAC7BK,SAASC;YACTS,UAAUX,aAAa,CAAC,IAAIJ;YAC3B,GAAGoB,SAAS;sBAEZD;;;AAKX;AAEFH,mBAAmB5B,WAAW,GAAG;AAEjC,MAAMiC,gCAQF5E,WAGF,CAAC,EAAEuB,SAAS,EAAEP,IAAI,EAAE6D,QAAQ,kBAAkB,EAAE,GAAGzC,OAAO,EAAEC;IAC5D,qBACE,KAACkC;QACClC,KAAKA;QACLoC,UAAS;QACTD,WAAWK;QACXH,oBAAM,KAACvE;QACPoB,WAAWA;QACXP,MAAMA;QACL,GAAGoB,KAAK;;AAGf;AACAwC,gBAAgBjC,WAAW,GAAG;AAE9B,MAAMmC,mCAQF9E,WAGF,CAAC,EAAEuB,SAAS,EAAEP,IAAI,EAAE6D,QAAQ,qBAAqB,EAAE,GAAGzC,OAAO,EAAEC;IAC/D,qBACE,KAACkC;QACClC,KAAKA;QACLoC,UAAS;QACTD,WAAWK;QACXH,oBAAM,KAACzE;QACPsB,WAAWA;QACXP,MAAMA;QACL,GAAGoB,KAAK;;AAGf;AACA0C,mBAAmBnC,WAAW,GAAG;AAEjC,MAAMoC,+BAQF/E,WAGF,CAAC,EAAEuB,SAAS,EAAEP,IAAI,EAAE6D,QAAQ,iBAAiB,EAAE,GAAGzC,OAAO,EAAEC;IAC3D,qBACE,KAACkC;QACClC,KAAKA;QACLoC,UAAS;QACTD,WAAWK;QACXH,oBAAM,KAACxE;QACPqB,WAAWA;QACXP,MAAMA;QACL,GAAGoB,KAAK;;AAGf;AACA2C,eAAepC,WAAW,GAAG;AAE7B,MAAMqC,+BAQFhF,WAGF,CAAC,EAAEuB,SAAS,EAAEP,IAAI,EAAE6D,QAAQ,iBAAiB,EAAE,GAAGzC,OAAO,EAAEC;IAC3D,qBACE,KAACkC;QACClC,KAAKA;QACLoC,UAAS;QACTD,WAAWK;QACXH,oBAAM,KAACtE;QACPmB,WAAWA;QACXP,MAAMA;QACL,GAAGoB,KAAK;;AAGf;AACA4C,eAAerC,WAAW,GAAG;AAE7B,MAAMsC,mCASFjF,WAGF,CAAC,EAAEuB,SAAS,EAAEP,IAAI,EAAE6D,QAAQ,YAAY,EAAE,GAAGzC,OAAO,EAAEC;IACtD,MAAMQ,gBAAgBjC;IACtB,MAAMkC,eAAe9B,QAAQ6B;IAC7B,MAAM,EAAEZ,eAAe,EAAE,GAAGH,0BAA0BgB;IAEtD,qBACE,MAACoC;QACC7C,KAAKA;QACLK,aAAU;QACVnB,WAAWhB,GACT0B,iBACAR,2BAA2B;YAAET,MAAM8B;QAAa,IAChDvB;QAED,GAAGa,KAAK;;0BAET,KAAC/B;gBAAS8E,eAAY;gBAAO5D,WAAU;;0BACvC,KAAC2D;gBAAK3D,WAAU;0BAAWsD;;;;AAGjC;AACAI,mBAAmBtC,WAAW,GAAG;AAEjC,MAAMyC,yCAEFpF,WACF,CAAC,EAAEuB,SAAS,EAAE,GAAGa,OAAO,EAAEC;IACxB,qBACE,KAACa;QACCb,KAAKA;QACLK,aAAU;QACVnB,WAAWhB,GAAG,gCAAgCgB;QAC7C,GAAGa,KAAK;;AAGf;AAEFgD,yBAAyBzC,WAAW,GAAG;AAEvC,MAAM0C,8CAEFrF,WACF,CAAC,EAAEuB,SAAS,EAAE,GAAGa,OAAO,EAAEC;IACxB,qBACE,KAAC6C;QACC7C,KAAKA;QACLK,aAAU;QACVnB,WAAWhB,GACT,wEACAgB;QAED,GAAGa,KAAK;;AAGf;AAEFiD,8BAA8B1C,WAAW,GAAG;AAE5C,SACER,UAAU,EACVS,iBAAiB,EACjBqC,kBAAkB,EAClBL,eAAe,EACf3B,cAAc,EACd+B,cAAc,EACdxB,cAAc,EACduB,cAAc,EACdD,kBAAkB,EAClBM,wBAAwB,EACxBC,6BAA6B,EAC7BjC,uBAAuB,EACvBD,gBAAgB,EAChBtC,kBAAkB,GAClB"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ComponentProps, type ForwardRefExoticComponent, type RefAttributes } from "react";
|
|
2
|
+
/** Muted status line, such as "Showing 1–10 of 243". An `<output>`, so changes are announced. */
|
|
3
|
+
declare const StatusText: ForwardRefExoticComponent<ComponentProps<"output"> & RefAttributes<HTMLOutputElement>>;
|
|
4
|
+
export { StatusText };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import { cn } from "../../../../lib/utils.js";
|
|
4
|
+
/** Muted status line, such as "Showing 1–10 of 243". An `<output>`, so changes are announced. */ const StatusText = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>{
|
|
5
|
+
return /*#__PURE__*/ _jsx("output", {
|
|
6
|
+
ref: ref,
|
|
7
|
+
className: cn('flex items-center text-sm leading-4.5 tracking-tight font-normal text-muted-foreground', className),
|
|
8
|
+
...props
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
StatusText.displayName = 'StatusText';
|
|
12
|
+
export { StatusText };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=status-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ui/core/status-text/status-text.tsx"],"sourcesContent":["import {\n type ComponentProps,\n type ComponentRef,\n type ForwardRefExoticComponent,\n type RefAttributes,\n forwardRef,\n} from 'react';\n\nimport { cn } from '../../../../lib/utils';\n\n/** Muted status line, such as \"Showing 1–10 of 243\". An `<output>`, so changes are announced. */\nconst StatusText: ForwardRefExoticComponent<\n ComponentProps<'output'> & RefAttributes<HTMLOutputElement>\n> = forwardRef<ComponentRef<'output'>, ComponentProps<'output'>>(\n ({ className, ...props }, ref) => {\n return (\n <output\n ref={ref}\n className={cn(\n 'flex items-center text-sm leading-4.5 tracking-tight font-normal text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n }\n);\nStatusText.displayName = 'StatusText';\n\nexport { StatusText };\n"],"names":["forwardRef","cn","StatusText","className","props","ref","output","displayName"],"mappings":";AAAA,SAKEA,UAAU,QACL,QAAQ;AAEf,SAASC,EAAE,QAAQ,2BAAwB;AAE3C,+FAA+F,GAC/F,MAAMC,2BAEFF,WACF,CAAC,EAAEG,SAAS,EAAE,GAAGC,OAAO,EAAEC;IACxB,qBACE,KAACC;QACCD,KAAKA;QACLF,WAAWF,GACT,0FACAE;QAED,GAAGC,KAAK;;AAGf;AAEFF,WAAWK,WAAW,GAAG;AAEzB,SAASL,UAAU,GAAG"}
|