@paubox/ui 3.5.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.esm.js +35 -16
- package/package.json +1 -1
- package/src/lib/Table/Table.d.ts +32 -4
- package/src/lib/Table/TableBody.d.ts +2 -2
- package/src/lib/Table/TableHeader.d.ts +2 -2
package/index.esm.js
CHANGED
|
@@ -36210,7 +36210,7 @@ var ResizeHandleContainer = styled.div(_templateObject3$3());
|
|
|
36210
36210
|
var ResizeHandle = styled.div(_templateObject4$3(), neutral300$1);
|
|
36211
36211
|
var SortIcon = styled.span(_templateObject5$2(), spacing(1));
|
|
36212
36212
|
var TableHeader = function(param) {
|
|
36213
|
-
var table = param.table, disableControls = param.disableControls, dense = param.dense,
|
|
36213
|
+
var table = param.table, disableControls = param.disableControls, dense = param.dense, tableId = param.tableId;
|
|
36214
36214
|
return /*#__PURE__*/ jsx(StyledHeader, {
|
|
36215
36215
|
children: table.getHeaderGroups().map(function(headerGroup) {
|
|
36216
36216
|
return /*#__PURE__*/ jsx("tr", {
|
|
@@ -36244,7 +36244,7 @@ var TableHeader = function(param) {
|
|
|
36244
36244
|
cursor: header.column.getCanSort() ? 'pointer' : 'default',
|
|
36245
36245
|
justifyContent: justifyContent
|
|
36246
36246
|
},
|
|
36247
|
-
"data-testid": header.column.getCanSort() ? "".concat(
|
|
36247
|
+
"data-testid": header.column.getCanSort() ? "".concat(tableId, "-column-header-").concat(formatForId(header.id), "-sort-button") : undefined,
|
|
36248
36248
|
children: [
|
|
36249
36249
|
flexRender(header.column.columnDef.header, header.getContext()),
|
|
36250
36250
|
header.column.getCanSort() && /*#__PURE__*/ jsxs(SortIcon, {
|
|
@@ -36406,7 +36406,7 @@ var ClampWrapper = styled.div(_templateObject8(), function(props) {
|
|
|
36406
36406
|
return props.maxLines;
|
|
36407
36407
|
});
|
|
36408
36408
|
var TableBody = function(param) {
|
|
36409
|
-
var table = param.table, enableRowSelection = param.enableRowSelection, onRowClick = param.onRowClick, getRowDisabled = param.getRowDisabled, dense = param.dense,
|
|
36409
|
+
var table = param.table, enableRowSelection = param.enableRowSelection, onRowClick = param.onRowClick, getRowDisabled = param.getRowDisabled, dense = param.dense, tableId = param.tableId;
|
|
36410
36410
|
return /*#__PURE__*/ jsx(StyledTableBody, {
|
|
36411
36411
|
children: table.getRowModel().rows.map(function(row) {
|
|
36412
36412
|
var rowClickEnabled = enableRowSelection || !!onRowClick;
|
|
@@ -36422,7 +36422,7 @@ var TableBody = function(param) {
|
|
|
36422
36422
|
cursor: rowClickEnabled ? isDisabled ? 'not-allowed' : 'pointer' : undefined
|
|
36423
36423
|
},
|
|
36424
36424
|
enableHover: rowClickEnabled,
|
|
36425
|
-
"data-testid": "".concat(
|
|
36425
|
+
"data-testid": "".concat(tableId, "-row-").concat(row.id),
|
|
36426
36426
|
children: row.getVisibleCells().map(function(cell) {
|
|
36427
36427
|
var cellValue = cell.getValue();
|
|
36428
36428
|
var columnDef = cell.column.columnDef;
|
|
@@ -36698,11 +36698,25 @@ var BottomBar = styled.div(_templateObject3$1(), spacing(2));
|
|
|
36698
36698
|
var TopBarElement = styled.div(_templateObject4$1(), spacing(1));
|
|
36699
36699
|
var ContextMenuButton = styled(Button)(_templateObject5(), spacing(0.5));
|
|
36700
36700
|
var Table = function(param) {
|
|
36701
|
-
var columns = param.columns, _param_data = param.data, data = _param_data === void 0 ? [] : _param_data, getRowId = param.getRowId, _param_isLoading = param.isLoading, isLoading = _param_isLoading === void 0 ? false : _param_isLoading, _param_paginationMode = param.paginationMode, paginationMode = _param_paginationMode === void 0 ? 'page' : _param_paginationMode, pageInfo = param.pageInfo, subText = param.subText, onPageSizeChange = param.onPageSizeChange, pageSizeOptions = param.pageSizeOptions, onPageChange = param.onPageChange, sortBy = param.sortBy, sortOrder = param.sortOrder, onSortChange = param.onSortChange, _param_enableRowSelection = param.enableRowSelection, enableRowSelection = _param_enableRowSelection === void 0 ? false : _param_enableRowSelection, _param_selectedRows = param.selectedRows, selectedRows = _param_selectedRows === void 0 ? {} : _param_selectedRows, onRowSelectionChange = param.onRowSelectionChange, getRowDisabled = param.getRowDisabled, onRowClick = param.onRowClick, contextMenuActions = param.contextMenuActions, _param_dense = param.dense, dense = _param_dense === void 0 ? false : _param_dense, height = param.height, containerStyle = param.containerStyle, error = param.error,
|
|
36701
|
+
var columns = param.columns, _param_data = param.data, data = _param_data === void 0 ? [] : _param_data, getRowId = param.getRowId, _param_isLoading = param.isLoading, isLoading = _param_isLoading === void 0 ? false : _param_isLoading, _param_paginationMode = param.paginationMode, paginationMode = _param_paginationMode === void 0 ? 'page' : _param_paginationMode, pageInfo = param.pageInfo, subText = param.subText, onPageSizeChange = param.onPageSizeChange, pageSizeOptions = param.pageSizeOptions, onPageChange = param.onPageChange, sortBy = param.sortBy, sortOrder = param.sortOrder, onSortChange = param.onSortChange, columnSizingProp = param.columnSizing, onColumnSizingChange = param.onColumnSizingChange, _param_enableRowSelection = param.enableRowSelection, enableRowSelection = _param_enableRowSelection === void 0 ? false : _param_enableRowSelection, _param_selectedRows = param.selectedRows, selectedRows = _param_selectedRows === void 0 ? {} : _param_selectedRows, onRowSelectionChange = param.onRowSelectionChange, getRowDisabled = param.getRowDisabled, onRowClick = param.onRowClick, contextMenuActions = param.contextMenuActions, _param_dense = param.dense, dense = _param_dense === void 0 ? false : _param_dense, height = param.height, containerStyle = param.containerStyle, error = param.error, tableId = param.tableId, toolbar = param.toolbar;
|
|
36702
36702
|
var containerRef = useRef(null);
|
|
36703
36703
|
var ctxMenuAnchorRef = useRef(null);
|
|
36704
|
-
|
|
36704
|
+
// Column widths support both controlled (consumer passes `columnSizing` +
|
|
36705
|
+
// `onColumnSizingChange`, e.g. to persist them) and uncontrolled (internal
|
|
36706
|
+
// state) modes.
|
|
36707
|
+
var _useState = _sliced_to_array$1(useState({}), 2), internalColumnSizing = _useState[0], setInternalColumnSizing = _useState[1];
|
|
36708
|
+
var isSizingControlled = columnSizingProp !== undefined;
|
|
36709
|
+
var columnSizing = isSizingControlled ? columnSizingProp : internalColumnSizing;
|
|
36705
36710
|
var _useState1 = _sliced_to_array$1(useState(null), 2), ctxMenuRow = _useState1[0], setCtxMenuRow = _useState1[1];
|
|
36711
|
+
var handleColumnSizingChange = useCallback(function(updater) {
|
|
36712
|
+
var next = typeof updater === 'function' ? updater(columnSizing) : updater;
|
|
36713
|
+
if (!isSizingControlled) setInternalColumnSizing(next);
|
|
36714
|
+
onColumnSizingChange === null || onColumnSizingChange === void 0 ? void 0 : onColumnSizingChange(next);
|
|
36715
|
+
}, [
|
|
36716
|
+
columnSizing,
|
|
36717
|
+
isSizingControlled,
|
|
36718
|
+
onColumnSizingChange
|
|
36719
|
+
]);
|
|
36706
36720
|
var disableControls = isLoading || !(data === null || data === void 0 ? void 0 : data.length) || !!error;
|
|
36707
36721
|
var hasSomePageProps = !!(pageInfo || onPageSizeChange || onPageChange);
|
|
36708
36722
|
var hasPaginationHandlers = !!(onPageSizeChange && onPageChange);
|
|
@@ -36724,7 +36738,11 @@ var Table = function(param) {
|
|
|
36724
36738
|
id: key,
|
|
36725
36739
|
accessorKey: key,
|
|
36726
36740
|
accessorFn: getter,
|
|
36727
|
-
|
|
36741
|
+
// Sorting is opt-in: a column is only sortable when it explicitly
|
|
36742
|
+
// sets `sortable: true`. (TanStack's own default is `true`, so we
|
|
36743
|
+
// coerce undefined to false here.) This prevents columns whose
|
|
36744
|
+
// backend can't sort them from presenting a sort affordance.
|
|
36745
|
+
enableSorting: sortable !== null && sortable !== void 0 ? sortable : false,
|
|
36728
36746
|
enableResizing: !autoWidth,
|
|
36729
36747
|
header: header
|
|
36730
36748
|
}, restCol), {
|
|
@@ -36753,7 +36771,7 @@ var Table = function(param) {
|
|
|
36753
36771
|
indeterminate: table.getIsSomeRowsSelected(),
|
|
36754
36772
|
onChange: table.getToggleAllPageRowsSelectedHandler(),
|
|
36755
36773
|
disabled: disableControls,
|
|
36756
|
-
"data-testid": "".concat(
|
|
36774
|
+
"data-testid": "".concat(tableId, "-header-checkbox")
|
|
36757
36775
|
});
|
|
36758
36776
|
},
|
|
36759
36777
|
cell: function(param) {
|
|
@@ -36766,13 +36784,13 @@ var Table = function(param) {
|
|
|
36766
36784
|
return e.stopPropagation();
|
|
36767
36785
|
},
|
|
36768
36786
|
onChange: row.getToggleSelectedHandler(),
|
|
36769
|
-
"data-testid": "".concat(
|
|
36787
|
+
"data-testid": "".concat(tableId, "-row-").concat(row.id, "-checkbox")
|
|
36770
36788
|
});
|
|
36771
36789
|
}
|
|
36772
36790
|
};
|
|
36773
36791
|
}, [
|
|
36774
36792
|
disableControls,
|
|
36775
|
-
|
|
36793
|
+
tableId
|
|
36776
36794
|
]);
|
|
36777
36795
|
var handleContextMenu = useCallback(function(e, row) {
|
|
36778
36796
|
e.stopPropagation();
|
|
@@ -36801,7 +36819,7 @@ var Table = function(param) {
|
|
|
36801
36819
|
e.stopPropagation();
|
|
36802
36820
|
handleContextMenu(e, row);
|
|
36803
36821
|
},
|
|
36804
|
-
"data-testid": "".concat(
|
|
36822
|
+
"data-testid": "".concat(tableId, "-row-").concat(row.id, "-context-menu-button"),
|
|
36805
36823
|
style: {
|
|
36806
36824
|
margin: '0 auto'
|
|
36807
36825
|
},
|
|
@@ -36811,7 +36829,7 @@ var Table = function(param) {
|
|
|
36811
36829
|
};
|
|
36812
36830
|
}, [
|
|
36813
36831
|
handleContextMenu,
|
|
36814
|
-
|
|
36832
|
+
tableId,
|
|
36815
36833
|
ctxMenuRow
|
|
36816
36834
|
]);
|
|
36817
36835
|
var allColumns = useMemo(function() {
|
|
@@ -36879,7 +36897,7 @@ var Table = function(param) {
|
|
|
36879
36897
|
getFilteredRowModel: getFilteredRowModel(),
|
|
36880
36898
|
onRowSelectionChange: onRowSelectionChange,
|
|
36881
36899
|
enableRowSelection: !!enableRowSelection,
|
|
36882
|
-
onColumnSizingChange:
|
|
36900
|
+
onColumnSizingChange: handleColumnSizingChange,
|
|
36883
36901
|
columnResizeMode: 'onChange'
|
|
36884
36902
|
});
|
|
36885
36903
|
var renderPagination = function() {
|
|
@@ -36892,7 +36910,7 @@ var Table = function(param) {
|
|
|
36892
36910
|
resetContainerScroll();
|
|
36893
36911
|
onPageSizeChange(size);
|
|
36894
36912
|
},
|
|
36895
|
-
testId: "".concat(
|
|
36913
|
+
testId: "".concat(tableId, "-pagination")
|
|
36896
36914
|
};
|
|
36897
36915
|
return paginationMode === 'page' && 'currentPage' in pageInfo ? /*#__PURE__*/ jsx(Pagination, _object_spread_props$2(_object_spread$2({
|
|
36898
36916
|
mode: "page",
|
|
@@ -36914,6 +36932,7 @@ var Table = function(param) {
|
|
|
36914
36932
|
};
|
|
36915
36933
|
var showTopBar = hasPaginationHandlers || toolbar;
|
|
36916
36934
|
return /*#__PURE__*/ jsxs("div", {
|
|
36935
|
+
"data-testid": tableId,
|
|
36917
36936
|
children: [
|
|
36918
36937
|
showTopBar && /*#__PURE__*/ jsxs(TopBar, {
|
|
36919
36938
|
children: [
|
|
@@ -36977,7 +36996,7 @@ var Table = function(param) {
|
|
|
36977
36996
|
table: table,
|
|
36978
36997
|
disableControls: disableControls,
|
|
36979
36998
|
dense: dense,
|
|
36980
|
-
|
|
36999
|
+
tableId: tableId
|
|
36981
37000
|
}),
|
|
36982
37001
|
/*#__PURE__*/ jsx(TableBody, {
|
|
36983
37002
|
table: table,
|
|
@@ -36985,7 +37004,7 @@ var Table = function(param) {
|
|
|
36985
37004
|
onRowClick: onRowClick,
|
|
36986
37005
|
getRowDisabled: getRowDisabled,
|
|
36987
37006
|
dense: dense,
|
|
36988
|
-
|
|
37007
|
+
tableId: tableId
|
|
36989
37008
|
})
|
|
36990
37009
|
]
|
|
36991
37010
|
})
|
package/package.json
CHANGED
package/src/lib/Table/Table.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CSSProperties, HTMLProps, ReactNode } from 'react';
|
|
2
|
-
import { ColumnDef, OnChangeFn, Row } from '@tanstack/react-table';
|
|
2
|
+
import { ColumnDef, OnChangeFn, Row, ColumnSizingState } from '@tanstack/react-table';
|
|
3
3
|
import { PageInfoPageBased, PageInfoCursorBased } from '../Pagination/Pagination';
|
|
4
4
|
export type CellOverflow = 'truncate' | 'wrap' | 'clamp';
|
|
5
5
|
export type ColumnAlign = 'left' | 'right' | 'center';
|
|
@@ -43,6 +43,21 @@ interface TableRowProps<T> {
|
|
|
43
43
|
getRowDisabled?: (row: T) => boolean;
|
|
44
44
|
contextMenuActions?: RowAction<T>[];
|
|
45
45
|
}
|
|
46
|
+
interface TableSizingProps {
|
|
47
|
+
/**
|
|
48
|
+
* Controlled column widths, keyed by column `key`. When provided, the table
|
|
49
|
+
* is controlled — the consumer owns the value (e.g. seeded from persisted
|
|
50
|
+
* state) and must update it via `onColumnSizingChange`. When omitted, the
|
|
51
|
+
* table manages widths internally.
|
|
52
|
+
*/
|
|
53
|
+
columnSizing?: ColumnSizingState;
|
|
54
|
+
/**
|
|
55
|
+
* Called with the fully-resolved next column-sizing state whenever the user
|
|
56
|
+
* resizes a column. Mirrors `onSortChange`: the consumer receives a plain
|
|
57
|
+
* value (not a TanStack updater), so it can persist it directly.
|
|
58
|
+
*/
|
|
59
|
+
onColumnSizingChange?: (columnSizing: ColumnSizingState) => void;
|
|
60
|
+
}
|
|
46
61
|
interface PaginationProps {
|
|
47
62
|
paginationMode?: 'page' | 'cursor';
|
|
48
63
|
pageInfo?: PageInfoPageBased | PageInfoCursorBased;
|
|
@@ -53,7 +68,20 @@ interface PaginationProps {
|
|
|
53
68
|
}
|
|
54
69
|
interface TableDataProps<T> {
|
|
55
70
|
columns: TableColumn<T>[];
|
|
56
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Stable, app-wide-unique identifier for this table. Required.
|
|
73
|
+
*
|
|
74
|
+
* Serves two purposes:
|
|
75
|
+
* - Namespaces every derived `data-testid` (rows, checkboxes, headers,
|
|
76
|
+
* context menus, pagination) and is rendered as the root `data-testid`.
|
|
77
|
+
* - Acts as the persistence key consumers use to store per-table view
|
|
78
|
+
* state (sort, column widths).
|
|
79
|
+
*
|
|
80
|
+
* Contract: must be stable for the life of the table and unique across the
|
|
81
|
+
* whole app — NOT just the current page. Changing it orphans any persisted
|
|
82
|
+
* state and breaks selectors that reference the old value.
|
|
83
|
+
*/
|
|
84
|
+
tableId: string;
|
|
57
85
|
data?: T[];
|
|
58
86
|
getRowId: (originalRow: T, index: number, parent?: Row<T> | undefined) => string;
|
|
59
87
|
isLoading?: boolean;
|
|
@@ -63,7 +91,7 @@ interface TableDataProps<T> {
|
|
|
63
91
|
error?: string;
|
|
64
92
|
toolbar?: ReactNode | ReactNode[];
|
|
65
93
|
}
|
|
66
|
-
export interface TableProps<T extends object> extends TableStyleProps, TableRowProps<T>, TableDataProps<T>, PaginationProps {
|
|
94
|
+
export interface TableProps<T extends object> extends TableStyleProps, TableRowProps<T>, TableDataProps<T>, TableSizingProps, PaginationProps {
|
|
67
95
|
}
|
|
68
|
-
export declare const Table: <T extends object>({ columns, data, getRowId, isLoading, paginationMode, pageInfo, subText, onPageSizeChange, pageSizeOptions, onPageChange, sortBy, sortOrder, onSortChange, enableRowSelection, selectedRows, onRowSelectionChange, getRowDisabled, onRowClick, contextMenuActions, dense, height, containerStyle, error,
|
|
96
|
+
export declare const Table: <T extends object>({ columns, data, getRowId, isLoading, paginationMode, pageInfo, subText, onPageSizeChange, pageSizeOptions, onPageChange, sortBy, sortOrder, onSortChange, columnSizing: columnSizingProp, onColumnSizingChange, enableRowSelection, selectedRows, onRowSelectionChange, getRowDisabled, onRowClick, contextMenuActions, dense, height, containerStyle, error, tableId, toolbar, }: TableProps<T>) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
69
97
|
export {};
|
|
@@ -6,7 +6,7 @@ interface TableBodyProps<T extends object> {
|
|
|
6
6
|
title?: string;
|
|
7
7
|
dense: boolean;
|
|
8
8
|
getRowDisabled?: (row: T) => boolean;
|
|
9
|
-
|
|
9
|
+
tableId: string;
|
|
10
10
|
}
|
|
11
|
-
export declare const TableBody: <T extends object>({ table, enableRowSelection, onRowClick, getRowDisabled, dense,
|
|
11
|
+
export declare const TableBody: <T extends object>({ table, enableRowSelection, onRowClick, getRowDisabled, dense, tableId, }: TableBodyProps<T>) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
12
12
|
export {};
|
|
@@ -3,7 +3,7 @@ interface TableHeaderProps<T> {
|
|
|
3
3
|
table: Table<T>;
|
|
4
4
|
disableControls: boolean;
|
|
5
5
|
dense: boolean;
|
|
6
|
-
|
|
6
|
+
tableId: string;
|
|
7
7
|
}
|
|
8
|
-
export declare const TableHeader: <T extends object>({ table, disableControls, dense,
|
|
8
|
+
export declare const TableHeader: <T extends object>({ table, disableControls, dense, tableId, }: TableHeaderProps<T>) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
9
9
|
export {};
|