@uxf/data-grid 11.111.2 → 11.112.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/data-grid.js CHANGED
@@ -32,7 +32,7 @@ function DataGrid(props) {
32
32
  react_1.default.createElement(toolbar_customs_1.DataGridToolbarCustoms, { buttons: props.customActions })),
33
33
  react_1.default.createElement(linear_progress_1.DataGridLinearProgress, { isLoading: props.isLoading }),
34
34
  react_1.default.createElement(filter_list_1.DataGridFilterList, { actions: props.actions, filterHandlers: (_c = props.filterHandlers) !== null && _c !== void 0 ? _c : filter_handler_1.defaultFilterHandlers, schema: props.schema, state: props.state }),
35
- react_1.default.createElement(table_v2_1.DataGridTableV2, { NoRowsFallback: props.NoRowsFallback, actionCell: props.actionCell, actions: props.actions, bodyCells: (_d = props.bodyCells) !== null && _d !== void 0 ? _d : body_cell_1.BodyCells, data: (_f = (_e = props.data) === null || _e === void 0 ? void 0 : _e.result) !== null && _f !== void 0 ? _f : empty_array_1.EMPTY_ARRAY, error: props.error, headerRowHeight: props.headerRowHeight, isLoading: props.isLoading, isRowSelectDisabled: props.isRowSelectDisabled, isRowsSelectable: props.isRowsSelectable, keyExtractor: props.keyExtractor, reload: props.reload, rowAccent: props.rowAccent, rowClassName: props.rowClassName, rowHeight: props.rowHeight, schema: props.schema, state: props.state }),
35
+ react_1.default.createElement(table_v2_1.DataGridTableV2, { NoRowsFallback: props.NoRowsFallback, actionCell: props.actionCell, actions: props.actions, bodyCells: (_d = props.bodyCells) !== null && _d !== void 0 ? _d : body_cell_1.BodyCells, data: (_f = (_e = props.data) === null || _e === void 0 ? void 0 : _e.result) !== null && _f !== void 0 ? _f : empty_array_1.EMPTY_ARRAY, error: props.error, hasStickyHeader: props.hasStickyHeader, headerRowHeight: props.headerRowHeight, isLoading: props.isLoading, isRowSelectDisabled: props.isRowSelectDisabled, isRowsSelectable: props.isRowsSelectable, keyExtractor: props.keyExtractor, reload: props.reload, rowAccent: props.rowAccent, rowClassName: props.rowClassName, rowHeight: props.rowHeight, schema: props.schema, state: props.state }),
36
36
  react_1.default.createElement(footer_1.DataGridFooter, null,
37
37
  react_1.default.createElement(rows_per_page_select_1.DataGridRowsPerPageSelect, { actions: props.actions, state: props.state }),
38
38
  react_1.default.createElement(row_counts_1.DataGridRowCounts, { count: (_h = (_g = props.data) === null || _g === void 0 ? void 0 : _g.count) !== null && _h !== void 0 ? _h : 0, state: props.state, totalCount: (_k = (_j = props.data) === null || _j === void 0 ? void 0 : _j.totalCount) !== null && _k !== void 0 ? _k : 0 }),
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.Default = Default;
37
37
  const build_array_1 = require("@uxf/core/utils/build-array");
38
38
  const radio_group_1 = require("@uxf/ui/radio-group");
39
+ const toggle_1 = require("@uxf/ui/toggle");
39
40
  const react_1 = __importStar(require("react"));
40
41
  const json_renderer_1 = require("./_story-utils/json-renderer");
41
42
  const loader_1 = require("./_story-utils/loader");
@@ -84,6 +85,7 @@ const FILTER_BEHAVIOR_OPTIONS = [
84
85
  ];
85
86
  function Default() {
86
87
  const [filterBehavior, setFilterBehavior] = (0, react_1.useState)("filtersPerTab");
88
+ const [hasStickyHeader, setHasStickyHeader] = (0, react_1.useState)(false);
87
89
  const { state, actions } = (0, use_data_grid_control_1.useDataGridControl)({
88
90
  schema: schema_1.schema,
89
91
  initialUserConfig: {
@@ -111,6 +113,7 @@ function Default() {
111
113
  });
112
114
  return (react_1.default.createElement("div", { className: "p-10" },
113
115
  react_1.default.createElement(radio_group_1.RadioGroup, { label: "Chov\u00E1n\u00ED p\u0159ep\u00EDn\u00E1n\u00ED tab\u016F", name: "filterBehavior", onChange: (value) => setFilterBehavior(value), options: FILTER_BEHAVIOR_OPTIONS, value: filterBehavior, variant: "row" }),
114
- react_1.default.createElement(data_grid_1.DataGrid, { actionCell: actionCell, actions: actions, changeTabFilterBehavior: filterBehavior !== null && filterBehavior !== void 0 ? filterBehavior : "filtersPerTab", data: data, error: error, getCsvDownloadUrl: () => "", isLoading: isLoading, isRowsSelectable: true, reload: reload, schema: schemaWithFrontendConfig, state: state }),
116
+ react_1.default.createElement(toggle_1.Toggle, { label: "Sticky header", name: "stickyHeader", onChange: (value) => setHasStickyHeader(value !== null && value !== void 0 ? value : false), size: "sm", value: hasStickyHeader }),
117
+ react_1.default.createElement(data_grid_1.DataGrid, { actionCell: actionCell, actions: actions, changeTabFilterBehavior: filterBehavior !== null && filterBehavior !== void 0 ? filterBehavior : "filtersPerTab", data: data, error: error, getCsvDownloadUrl: () => "", hasStickyHeader: hasStickyHeader, isLoading: isLoading, isRowsSelectable: true, reload: reload, schema: schemaWithFrontendConfig, state: state }),
115
118
  react_1.default.createElement(json_renderer_1.JsonRenderer, { value: state })));
116
119
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/data-grid",
3
- "version": "11.111.2",
3
+ "version": "11.112.0",
4
4
  "description": "UXF DataGrid",
5
5
  "homepage": "https://gitlab.com/uxf-npm/data-grid#readme",
6
6
  "main": "index.js",
@@ -45,7 +45,7 @@
45
45
  "@uxf/core-react": "11.111.2",
46
46
  "@uxf/localize": "11.111.2",
47
47
  "@uxf/styles": "11.111.2",
48
- "@uxf/ui": "11.111.2",
48
+ "@uxf/ui": "11.112.0",
49
49
  "dayjs": "^1.11.19",
50
50
  "react": ">=18.2.0",
51
51
  "react-dom": ">=18.2.0"
@@ -60,7 +60,7 @@
60
60
  "@uxf/core-react": "11.111.2",
61
61
  "@uxf/localize": "11.111.2",
62
62
  "@uxf/styles": "11.111.2",
63
- "@uxf/ui": "11.111.2",
63
+ "@uxf/ui": "11.112.0",
64
64
  "dayjs": "^1.11.19",
65
65
  "react": "18.3.1",
66
66
  "react-dom": "18.3.1"
@@ -1,6 +1,9 @@
1
- import React, { ReactNode } from "react";
1
+ import React, { ForwardedRef, ReactNode } from "react";
2
2
  interface BodyProps {
3
3
  children?: ReactNode;
4
+ gridTemplateColumns: string;
5
+ gridTemplateRows?: string;
6
+ ref?: ForwardedRef<HTMLDivElement>;
4
7
  }
5
8
  export declare function Body(props: BodyProps): React.JSX.Element;
6
9
  export {};
@@ -6,5 +6,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Body = Body;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  function Body(props) {
9
- return react_1.default.createElement("div", { className: "uxf-dg-table__body" }, props.children);
9
+ return (react_1.default.createElement("div", { className: "uxf-dg-table__body", ref: props.ref, style: { gridTemplateColumns: props.gridTemplateColumns, gridTemplateRows: props.gridTemplateRows } }, props.children));
10
10
  }
@@ -1,6 +1,9 @@
1
- import React, { ReactNode } from "react";
1
+ import React, { ForwardedRef, ReactNode } from "react";
2
2
  interface HeaderProps {
3
3
  children?: ReactNode;
4
+ gridTemplateColumns: string;
5
+ isSticky?: boolean;
6
+ ref?: ForwardedRef<HTMLDivElement>;
4
7
  }
5
8
  export declare function Header(props: HeaderProps): React.JSX.Element;
6
9
  export {};
@@ -6,5 +6,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Header = Header;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  function Header(props) {
9
- return react_1.default.createElement("div", { className: "uxf-dg-table__header" }, props.children);
9
+ return (react_1.default.createElement("div", { className: `uxf-dg-table__header ${props.isSticky ? "uxf-dg-table__header--is-sticky is-sticky" : ""}`, ref: props.ref, style: { gridTemplateColumns: props.gridTemplateColumns } }, props.children));
10
10
  }
@@ -1,7 +1,5 @@
1
1
  import React, { ReactNode } from "react";
2
2
  export interface RootProps {
3
- gridTemplateColumns: string;
4
- gridTemplateRows?: string;
5
3
  children: ReactNode;
6
4
  }
7
5
  export declare const Root: React.ForwardRefExoticComponent<RootProps & React.RefAttributes<HTMLDivElement>>;
@@ -36,6 +36,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.Root = void 0;
37
37
  const react_1 = __importStar(require("react"));
38
38
  function RootComponent(props, ref) {
39
- return (react_1.default.createElement("div", { className: "uxf-dg-table", ref: ref, style: { gridTemplateColumns: props.gridTemplateColumns, gridTemplateRows: props.gridTemplateRows } }, props.children));
39
+ return (react_1.default.createElement("div", { className: "uxf-dg-table", ref: ref }, props.children));
40
40
  }
41
41
  exports.Root = (0, react_1.forwardRef)(RootComponent);
@@ -4,6 +4,8 @@ import { DataGridControl } from "../../use-data-grid-control";
4
4
  import { DataGridTableProps } from "../types";
5
5
  export declare function useResizableColumns<GridType extends BaseGridType>(columns: Column[], actionCell: DataGridTableProps<GridType>["actionCell"], actions: DataGridControl["actions"], selectRowsCellWidth: number | Nullish): {
6
6
  tableRef: import("react").RefObject<HTMLDivElement>;
7
+ headerRef: import("react").RefObject<HTMLDivElement>;
8
+ bodyRef: import("react").RefObject<HTMLDivElement>;
7
9
  columnRefs: import("react").MutableRefObject<(HTMLDivElement | null)[]>;
8
10
  onResizeStart(index: number): void;
9
11
  onAutoSize: (index: number) => void;
@@ -10,28 +10,40 @@ const COLUMN_PADDING = 24;
10
10
  function useResizableColumns(columns, actionCell, actions, selectRowsCellWidth) {
11
11
  const [activeIndex, setActiveIndex] = (0, react_1.useState)(null);
12
12
  const tableRef = (0, react_1.useRef)(null);
13
+ const headerRef = (0, react_1.useRef)(null);
14
+ const bodyRef = (0, react_1.useRef)(null);
13
15
  const columnRefs = (0, react_1.useRef)([]);
14
16
  const actionCellWidth = actionCell === null || actionCell === void 0 ? void 0 : actionCell.width;
15
17
  (0, react_1.useEffect)(() => {
16
18
  let tempColumnSizes = [];
17
19
  const onMouseMove = (e) => {
18
20
  const gridColumns = columns.map((column, i) => {
19
- var _a, _b, _c, _d, _e, _f;
21
+ var _a, _b, _c, _d, _e, _f, _g, _h;
20
22
  const columnRef = columnRefs.current[i];
21
23
  const columnMinWidth = (_b = (_a = column.config) === null || _a === void 0 ? void 0 : _a.minWidth) !== null && _b !== void 0 ? _b : COLUMN_ABSOLUTE_MIN_WIDTH;
22
24
  if (i === activeIndex) {
23
- const tableScrollLeft = (_d = (_c = tableRef.current) === null || _c === void 0 ? void 0 : _c.scrollLeft) !== null && _d !== void 0 ? _d : 0;
24
- const columnOffsetLeft = (_e = columnRef === null || columnRef === void 0 ? void 0 : columnRef.offsetLeft) !== null && _e !== void 0 ? _e : 0;
25
+ const tableScrollLeft = (_d = (_c = headerRef.current) === null || _c === void 0 ? void 0 : _c.scrollLeft) !== null && _d !== void 0 ? _d : 0;
26
+ const columnOffsetLeft = ((_e = columnRef === null || columnRef === void 0 ? void 0 : columnRef.offsetLeft) !== null && _e !== void 0 ? _e : 0) + ((_g = (_f = tableRef.current) === null || _f === void 0 ? void 0 : _f.offsetLeft) !== null && _g !== void 0 ? _g : 0);
25
27
  const clickPositionX = e.clientX + tableScrollLeft;
26
28
  const width = clickPositionX - columnOffsetLeft;
27
29
  return width >= columnMinWidth ? width : columnMinWidth;
28
30
  }
29
- return (_f = columnRef === null || columnRef === void 0 ? void 0 : columnRef.offsetWidth) !== null && _f !== void 0 ? _f : columnMinWidth;
31
+ return (_h = columnRef === null || columnRef === void 0 ? void 0 : columnRef.offsetWidth) !== null && _h !== void 0 ? _h : columnMinWidth;
30
32
  });
31
33
  // TODO @vejvis - jak tohle udělat lépe??
32
34
  tempColumnSizes = gridColumns;
33
- if (tableRef.current) {
34
- tableRef.current.style.gridTemplateColumns = (0, get_grid_template_columns_1.getGridTemplateColumns)({
35
+ if (headerRef.current) {
36
+ headerRef.current.style.gridTemplateColumns = (0, get_grid_template_columns_1.getGridTemplateColumns)({
37
+ actionColumnWidth: actionCellWidth,
38
+ columns: gridColumns.map((size) => ({
39
+ width: (0, rem_1.rem)(size),
40
+ minWidth: null,
41
+ })),
42
+ selectRowColumnWidth: selectRowsCellWidth,
43
+ });
44
+ }
45
+ if (bodyRef.current) {
46
+ bodyRef.current.style.gridTemplateColumns = (0, get_grid_template_columns_1.getGridTemplateColumns)({
35
47
  actionColumnWidth: actionCellWidth,
36
48
  columns: gridColumns.map((size) => ({
37
49
  width: (0, rem_1.rem)(size),
@@ -100,6 +112,8 @@ function useResizableColumns(columns, actionCell, actions, selectRowsCellWidth)
100
112
  };
101
113
  return {
102
114
  tableRef,
115
+ headerRef,
116
+ bodyRef,
103
117
  columnRefs,
104
118
  onResizeStart(index) {
105
119
  setActiveIndex(index);
@@ -0,0 +1 @@
1
+ export declare const useSyncedScroll: () => (element: HTMLElement | null) => void;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSyncedScroll = void 0;
4
+ const react_1 = require("react");
5
+ const useSyncedScroll = () => {
6
+ const containersRef = (0, react_1.useRef)(null);
7
+ (0, react_1.useEffect)(() => {
8
+ const containers = containersRef.current;
9
+ if (!containers) {
10
+ return;
11
+ }
12
+ const abortController = new AbortController();
13
+ const syncScroll = (scrollingContainer) => {
14
+ const scrollLeft = scrollingContainer.scrollLeft;
15
+ const scrollTop = scrollingContainer.scrollTop;
16
+ containers.forEach((container) => {
17
+ if (container !== scrollingContainer) {
18
+ container.scrollLeft = scrollLeft;
19
+ container.scrollTop = scrollTop;
20
+ }
21
+ });
22
+ };
23
+ const handleScroll = (scrollEvent) => {
24
+ const scrollingContainer = scrollEvent.target;
25
+ syncScroll(scrollingContainer);
26
+ };
27
+ containers.forEach((container) => {
28
+ container.addEventListener("scroll", handleScroll, { passive: true, signal: abortController.signal });
29
+ });
30
+ return () => {
31
+ abortController.abort();
32
+ };
33
+ }, []);
34
+ const setContainerRef = (element) => {
35
+ if (element) {
36
+ if (!containersRef.current) {
37
+ containersRef.current = [];
38
+ }
39
+ if (!containersRef.current.includes(element)) {
40
+ containersRef.current.push(element);
41
+ }
42
+ }
43
+ };
44
+ return setContainerRef;
45
+ };
46
+ exports.useSyncedScroll = useSyncedScroll;
@@ -26,9 +26,7 @@
26
26
  border: 1px solid var(--uxf-dg-table-border-color);
27
27
  border-top-color: transparent;
28
28
  color: var(--uxf-dg-table-text-color);
29
- display: grid;
30
29
  font-size: var(--uxf-dg-table-font-size);
31
- overflow-x: auto;
32
30
  width: 100%;
33
31
 
34
32
  &::-webkit-scrollbar {
@@ -59,11 +57,26 @@
59
57
  }
60
58
 
61
59
  .uxf-dg-table__header {
62
- display: contents;
60
+ display: grid;
61
+ overflow-x: auto;
62
+ z-index: 1;
63
+ -ms-overflow-style: none; /* IE and Edge */
64
+ scrollbar-width: none; /* Firefox */
65
+
66
+ /* Hide scrollbars in .uxf-dg-table__header */
67
+ &::-webkit-scrollbar {
68
+ display: none !important;
69
+ }
70
+
71
+ &--is-sticky {
72
+ position: sticky;
73
+ top: 0;
74
+ }
63
75
  }
64
76
 
65
77
  .uxf-dg-table__body {
66
- display: contents;
78
+ display: grid;
79
+ overflow-x: auto;
67
80
  }
68
81
 
69
82
  .uxf-dg-table__row {
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DataGridTableV2 = DataGridTableV2;
7
7
  const show_1 = require("@uxf/core-react/components/show");
8
+ const compose_refs_1 = require("@uxf/core-react/utils/compose-refs");
8
9
  const empty_array_1 = require("@uxf/core/constants/empty-array");
9
10
  const is_empty_1 = require("@uxf/core/utils/is-empty");
10
11
  const is_nil_1 = require("@uxf/core/utils/is-nil");
@@ -16,6 +17,7 @@ const components_1 = require("./components");
16
17
  const header_select_all_rows_checkbox_1 = require("./components/header-select-all-rows-checkbox");
17
18
  const select_row_checkbox_1 = require("./components/select-row-checkbox");
18
19
  const use_resizable_columns_1 = require("./hooks/use-resizable-columns");
20
+ const use_synced_scroll_1 = require("./hooks/use-synced-scroll");
19
21
  const no_rows_fallback_1 = require("./no-rows-fallback");
20
22
  const get_grid_template_columns_1 = require("./utils/get-grid-template-columns");
21
23
  const get_grid_template_rows_1 = require("./utils/get-grid-template-rows");
@@ -33,7 +35,7 @@ function DataGridTableV2(props) {
33
35
  props.state.userConfig.columnsOrder.indexOf(b.name)
34
36
  : 0);
35
37
  const selectedRowColumnWidth = props.isRowsSelectable ? SELECT_ROWS_CELL_WIDTH : null;
36
- const { tableRef, columnRefs, onResizeStart, onAutoSize } = (0, use_resizable_columns_1.useResizableColumns)(visibleColumns, props.actionCell, props.actions, selectedRowColumnWidth);
38
+ const { tableRef, headerRef, bodyRef, columnRefs, onResizeStart, onAutoSize } = (0, use_resizable_columns_1.useResizableColumns)(visibleColumns, props.actionCell, props.actions, selectedRowColumnWidth);
37
39
  const gridTemplateRows = (0, get_grid_template_rows_1.getGridTemplateRows)(props.data, (_b = props.headerRowHeight) !== null && _b !== void 0 ? _b : 36, (_c = props.rowHeight) !== null && _c !== void 0 ? _c : 44);
38
40
  const gridTemplateBasicColumns = visibleColumns
39
41
  .map((column) => {
@@ -63,8 +65,9 @@ function DataGridTableV2(props) {
63
65
  props.actions.setSelectedRows(newSelectedRows);
64
66
  };
65
67
  const NoRowsFallback = (_f = props.NoRowsFallback) !== null && _f !== void 0 ? _f : no_rows_fallback_1.NoRowsFallback;
66
- return (react_1.default.createElement(components_1.Table, { gridTemplateColumns: gridTemplateColumns, gridTemplateRows: gridTemplateRows, ref: tableRef },
67
- react_1.default.createElement(components_1.Table.Header, null,
68
+ const syncedScrollRef = (0, use_synced_scroll_1.useSyncedScroll)();
69
+ return (react_1.default.createElement(components_1.Table, { ref: tableRef },
70
+ react_1.default.createElement(components_1.Table.Header, { gridTemplateColumns: gridTemplateColumns, isSticky: props.hasStickyHeader, ref: (0, compose_refs_1.composeRefs)(syncedScrollRef, headerRef) },
68
71
  react_1.default.createElement(components_1.Table.Row, null,
69
72
  react_1.default.createElement(show_1.Show, { when: Boolean(props.isRowsSelectable) },
70
73
  react_1.default.createElement(header_select_all_rows_checkbox_1.HeaderSelectAllRowsCheckbox, { actions: props.actions, data: props.data, isRowSelectDisabled: props.isRowSelectDisabled, keyExtractor: keyExtractor, state: props.state })),
@@ -76,7 +79,7 @@ function DataGridTableV2(props) {
76
79
  }),
77
80
  react_1.default.createElement(show_1.Show, { when: (0, is_not_nil_1.isNotNil)(props.actionCell) },
78
81
  react_1.default.createElement(components_1.Table.HeaderActionCell, null)))),
79
- react_1.default.createElement(components_1.Table.Body, null, (0, is_empty_1.isEmpty)(props.data) ? (react_1.default.createElement(NoRowsFallback, { error: props.error, isLoading: Boolean(props.isLoading) })) : (props.data.map((row) => {
82
+ react_1.default.createElement(components_1.Table.Body, { gridTemplateColumns: gridTemplateColumns, gridTemplateRows: gridTemplateRows, ref: (0, compose_refs_1.composeRefs)(syncedScrollRef, bodyRef) }, (0, is_empty_1.isEmpty)(props.data) ? (react_1.default.createElement(NoRowsFallback, { error: props.error, isLoading: Boolean(props.isLoading) })) : (props.data.map((row) => {
80
83
  var _a, _b;
81
84
  return (react_1.default.createElement(components_1.Table.Row, { className: `${(0, is_not_nil_1.isNotNil)(props.rowAccent) ? "uxf-dg-table__row--" + props.rowAccent(row) : ""} ${(_b = (_a = props.rowClassName) === null || _a === void 0 ? void 0 : _a.call(props, row)) !== null && _b !== void 0 ? _b : ""}`, key: keyExtractor(row) },
82
85
  react_1.default.createElement(show_1.Show, { when: Boolean(props.isRowsSelectable) },
@@ -19,6 +19,7 @@ export interface DataGridTableProps<GridType extends BaseGridType> extends DataG
19
19
  Component: ActionCellComponent<InferDataGridRow<Schema<GridType>>>;
20
20
  };
21
21
  NoRowsFallback?: NoRowsFallbackComponent;
22
+ hasStickyHeader?: boolean;
22
23
  isRowSelectDisabled?: (row: InferDataGridRow<Schema<GridType>>) => boolean;
23
24
  isRowsSelectable?: boolean;
24
25
  }
@@ -27,14 +27,15 @@ export type DataGridBaseProps<GridType extends BaseGridType> = {
27
27
  customActions?: DataGridToolbarCustomsProps["buttons"];
28
28
  filterHandlers?: FilterHandlers;
29
29
  fulltextInputPlaceholder?: string;
30
- isWithTabCounts?: boolean;
31
30
  getCsvDownloadUrl?: CsvDownloadGetUrl;
32
31
  gridName?: string;
32
+ hasStickyHeader?: boolean;
33
33
  headerRowHeight?: number;
34
34
  isDebug?: boolean;
35
35
  isHiddenColumnsSortable?: boolean;
36
36
  isRowSelectDisabled?: (row: InferDataGridRow<Schema<GridType>>) => boolean;
37
37
  isRowsSelectable?: boolean;
38
+ isWithTabCounts?: boolean;
38
39
  keyExtractor?: KeyExtractor;
39
40
  rowAccent?: (row: InferDataGridRow<Schema<GridType>>) => RowAccent;
40
41
  rowClassName?: (row: InferDataGridRow<Schema<GridType>>) => string | Nullish;