@redis-ui/table 2.4.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/Table/Table.cjs +58 -34
  2. package/dist/Table/Table.d.ts +3 -1
  3. package/dist/Table/Table.js +60 -36
  4. package/dist/Table/Table.style.cjs +24 -13
  5. package/dist/Table/Table.style.d.ts +4 -1
  6. package/dist/Table/Table.style.js +25 -14
  7. package/dist/Table/Table.types.d.ts +25 -8
  8. package/dist/Table/components/EmptyStateRow/EmptyStateRow.cjs +16 -0
  9. package/dist/Table/components/EmptyStateRow/EmptyStateRow.d.ts +8 -0
  10. package/dist/Table/components/EmptyStateRow/EmptyStateRow.js +16 -0
  11. package/dist/Table/components/ExpandRowButton/ExpandRowButton.cjs +1 -0
  12. package/dist/Table/components/ExpandRowButton/ExpandRowButton.js +1 -0
  13. package/dist/Table/components/RowSelection/HeaderMultiRowSelectionButton.cjs +29 -0
  14. package/dist/Table/components/RowSelection/HeaderMultiRowSelectionButton.d.ts +7 -0
  15. package/dist/Table/components/RowSelection/HeaderMultiRowSelectionButton.js +29 -0
  16. package/dist/Table/components/RowSelection/HeaderMultiRowSelectionButton.test.d.ts +1 -0
  17. package/dist/Table/components/RowSelection/RowSelectionButton.cjs +15 -0
  18. package/dist/Table/components/RowSelection/RowSelectionButton.d.ts +6 -0
  19. package/dist/Table/components/RowSelection/RowSelectionButton.js +15 -0
  20. package/dist/Table/components/RowSelection/RowSelectionButton.test.d.ts +1 -0
  21. package/dist/Table/components/TableExpandedRow/TableAnimatedExpandedRow.style.cjs +1 -1
  22. package/dist/Table/components/TableExpandedRow/TableAnimatedExpandedRow.style.js +1 -1
  23. package/dist/Table/components/TableExpandedRow/TableExpandedRow.style.cjs +2 -2
  24. package/dist/Table/components/TableExpandedRow/TableExpandedRow.style.js +2 -2
  25. package/dist/Table/components/TableHeaderCell/TableHeaderCell.cjs +37 -0
  26. package/dist/Table/components/TableHeaderCell/TableHeaderCell.d.ts +4 -0
  27. package/dist/Table/components/TableHeaderCell/TableHeaderCell.js +37 -0
  28. package/dist/Table/components/TableHeaderCell/TableHeaderCell.types.d.ts +13 -0
  29. package/dist/Table/components/TableHeaderCell/TableHeaderCell.utils.cjs +101 -0
  30. package/dist/Table/components/TableHeaderCell/TableHeaderCell.utils.d.ts +11 -0
  31. package/dist/Table/components/TableHeaderCell/TableHeaderCell.utils.js +101 -0
  32. package/dist/Table/components/TablePagination/TablePagination.cjs +27 -8
  33. package/dist/Table/components/TablePagination/TablePagination.js +26 -7
  34. package/dist/Table/components/TablePagination/TablePagination.style.cjs +14 -9
  35. package/dist/Table/components/TablePagination/TablePagination.style.d.ts +8 -7
  36. package/dist/Table/components/TablePagination/TablePagination.style.js +14 -9
  37. package/dist/node_modules/@radix-ui/react-id/dist/index.cjs +32 -0
  38. package/dist/node_modules/@radix-ui/react-id/dist/index.js +14 -0
  39. package/dist/node_modules/@radix-ui/react-primitive/dist/index.cjs +55 -0
  40. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js +37 -0
  41. package/dist/node_modules/@radix-ui/react-slot/dist/index.cjs +100 -0
  42. package/dist/node_modules/@radix-ui/react-slot/dist/index.js +82 -0
  43. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.cjs +24 -0
  44. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +6 -0
  45. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.cjs +51 -0
  46. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js +33 -0
  47. package/package.json +5 -4
@@ -2,14 +2,19 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const jsxRuntime = require("../node_modules/react/jsx-runtime.cjs");
4
4
  const React = require("react");
5
+ const index$3 = require("../node_modules/@radix-ui/react-visually-hidden/dist/index.cjs");
5
6
  const index$1 = require("../node_modules/@tanstack/react-table/build/lib/index.cjs");
6
- const redisUiIcons = require("@redislabsdev/redis-ui-icons");
7
7
  const index = require("../node_modules/@radix-ui/react-use-controllable-state/dist/index.cjs");
8
8
  const TablePagination = require("./components/TablePagination/TablePagination.cjs");
9
9
  const ExpandRowButton = require("./components/ExpandRowButton/ExpandRowButton.cjs");
10
10
  const TableExpandedRow = require("./components/TableExpandedRow/TableExpandedRow.cjs");
11
11
  const TableAnimatedExpandedRow = require("./components/TableExpandedRow/TableAnimatedExpandedRow.cjs");
12
12
  const Table_context = require("./Table.context.cjs");
13
+ const TableHeaderCell = require("./components/TableHeaderCell/TableHeaderCell.cjs");
14
+ const TableHeaderCell_utils = require("./components/TableHeaderCell/TableHeaderCell.utils.cjs");
15
+ const EmptyStateRow = require("./components/EmptyStateRow/EmptyStateRow.cjs");
16
+ const RowSelectionButton = require("./components/RowSelection/RowSelectionButton.cjs");
17
+ const HeaderMultiRowSelectionButton = require("./components/RowSelection/HeaderMultiRowSelectionButton.cjs");
13
18
  const Table_style = require("./Table.style.cjs");
14
19
  const index$2 = require("../node_modules/@tanstack/table-core/build/lib/index.cjs");
15
20
  const getTrue = () => true;
@@ -17,29 +22,42 @@ const DEFAULT_PAGINATION = {
17
22
  pageIndex: 0,
18
23
  pageSize: 10
19
24
  };
25
+ const DEFAULT_ROW_SELECTION = {};
20
26
  const Table = Object.assign(({
21
27
  columns,
28
+ caption,
22
29
  onRowClick,
23
30
  data,
24
- defaultSorting,
31
+ getRowId,
25
32
  emptyState,
26
33
  maxHeight,
27
34
  stripedRows = false,
35
+ // sorting
36
+ defaultSorting,
28
37
  onSortingChange,
29
38
  sorting,
30
39
  manualSorting = false,
40
+ // row expansion
31
41
  getIsRowExpandable,
32
42
  renderExpandedRow,
33
43
  expandRowOnClick,
34
44
  expandedRowComponent: ExpandedRow = TableExpandedRow.TableExpandedRow,
45
+ // pagination
35
46
  pagination,
36
47
  defaultPagination,
37
48
  onPaginationChange,
38
49
  manualPagination,
39
50
  totalRowCount,
40
51
  pageSizes,
41
- paginationEnabled = (pagination || defaultPagination || onPaginationChange || pageSizes) !== void 0 || manualPagination !== void 0
52
+ paginationEnabled = (pagination || defaultPagination || onPaginationChange || pageSizes) !== void 0 || manualPagination !== void 0,
53
+ // row selection
54
+ rowSelection,
55
+ defaultRowSelection,
56
+ onRowSelectionChange,
57
+ rowSelectionMode,
58
+ getRowCanSelect
42
59
  }) => {
60
+ const [userSorted, setUserSorted] = React.useState(false);
43
61
  const [sortingState, setSortingState] = index.useControllableState({
44
62
  prop: sorting,
45
63
  defaultProp: defaultSorting,
@@ -50,6 +68,11 @@ const Table = Object.assign(({
50
68
  defaultProp: defaultPagination ?? DEFAULT_PAGINATION,
51
69
  onChange: onPaginationChange
52
70
  });
71
+ const [rowSelectionState = DEFAULT_ROW_SELECTION, setRowSelectionState] = index.useControllableState({
72
+ prop: rowSelection,
73
+ defaultProp: defaultRowSelection,
74
+ onChange: onRowSelectionChange
75
+ });
53
76
  const isExpandable = !!renderExpandedRow;
54
77
  const paginationSettings = {
55
78
  getPaginationRowModel: index$2.getPaginationRowModel(),
@@ -61,19 +84,29 @@ const Table = Object.assign(({
61
84
  const table = index$1.useReactTable({
62
85
  data,
63
86
  columns,
87
+ getRowId,
64
88
  getCoreRowModel: index$2.getCoreRowModel(),
65
89
  getSortedRowModel: index$2.getSortedRowModel(),
66
90
  state: {
67
91
  sorting: sortingState,
68
92
  ...paginationEnabled && {
69
93
  pagination: paginationState
94
+ },
95
+ ...rowSelectionMode && {
96
+ rowSelection: rowSelectionState
70
97
  }
71
98
  },
72
99
  manualSorting,
73
- onSortingChange: setSortingState,
100
+ onSortingChange: (value) => {
101
+ setSortingState(value);
102
+ setUserSorted(true);
103
+ },
74
104
  getExpandedRowModel: isExpandable ? index$2.getExpandedRowModel() : void 0,
75
105
  getRowCanExpand: isExpandable ? getIsRowExpandable && ((row) => getIsRowExpandable(row.original)) || getTrue : void 0,
76
- ...paginationEnabled && paginationSettings
106
+ ...paginationEnabled && paginationSettings,
107
+ enableRowSelection: rowSelectionMode && (getRowCanSelect ?? true),
108
+ enableMultiRowSelection: rowSelectionMode === "multiple",
109
+ onRowSelectionChange: setRowSelectionState
77
110
  });
78
111
  const {
79
112
  pageIndex
@@ -85,42 +118,28 @@ const Table = Object.assign(({
85
118
  const {
86
119
  rows
87
120
  } = table.getRowModel();
88
- return jsxRuntime.jsxRuntimeExports.jsx(Table_context.TableContext.Provider, {
121
+ return jsxRuntime.jsxRuntimeExports.jsxs(Table_context.TableContext.Provider, {
89
122
  value: {
90
123
  table
91
124
  },
92
- children: jsxRuntime.jsxRuntimeExports.jsxs(Table_style.TableContainer, {
125
+ children: [jsxRuntime.jsxRuntimeExports.jsxs(Table_style.TableContainer, {
93
126
  children: [jsxRuntime.jsxRuntimeExports.jsxs(Table_style.Table, {
94
- children: [jsxRuntime.jsxRuntimeExports.jsx(Table_style.TableHead, {
127
+ children: [caption && jsxRuntime.jsxRuntimeExports.jsx(index$3.VisuallyHidden, {
128
+ asChild: true,
129
+ children: jsxRuntime.jsxRuntimeExports.jsx("caption", {
130
+ children: caption
131
+ })
132
+ }), jsxRuntime.jsxRuntimeExports.jsx(Table_style.TableHead, {
95
133
  children: table.getHeaderGroups().map((headerGroup) => jsxRuntime.jsxRuntimeExports.jsx(Table_style.TableHeaderRow, {
96
- children: headerGroup.headers.map((header) => jsxRuntime.jsxRuntimeExports.jsx(Table_style.TableTh, {
97
- onClick: header.column.getToggleSortingHandler(),
98
- style: {
99
- width: header.column.getSize()
100
- },
101
- children: jsxRuntime.jsxRuntimeExports.jsxs(Table_style.HeaderCellInnerWrapper, {
102
- size: "XS",
103
- children: [header.isPlaceholder ? null : index$1.flexRender(header.column.columnDef.header, header.getContext()), {
104
- asc: jsxRuntime.jsxRuntimeExports.jsx(redisUiIcons.ArrowUpIcon, {
105
- size: "S",
106
- color: "neutral700"
107
- }),
108
- desc: jsxRuntime.jsxRuntimeExports.jsx(redisUiIcons.ArrowDownIcon, {
109
- size: "S",
110
- color: "neutral700"
111
- })
112
- }[header.column.getIsSorted()] ?? null]
113
- })
134
+ children: headerGroup.headers.map((header) => jsxRuntime.jsxRuntimeExports.jsx(TableHeaderCell.TableHeaderCell, {
135
+ header
114
136
  }, header.id))
115
137
  }, headerGroup.id))
116
138
  }), jsxRuntime.jsxRuntimeExports.jsxs(Table_style.TableBody, {
117
139
  maxHeight,
118
- children: [!rows.length ? jsxRuntime.jsxRuntimeExports.jsx(Table_style.TableBodyRow, {
119
- "$stripedRows": false,
120
- children: jsxRuntime.jsxRuntimeExports.jsx(Table_style.TableBodyCell, {
121
- colSpan: columns.length,
122
- children: emptyState ? emptyState() : "No data to display"
123
- })
140
+ children: [!rows.length ? jsxRuntime.jsxRuntimeExports.jsx(EmptyStateRow.EmptyStateRow, {
141
+ table,
142
+ emptyState
124
143
  }) : null, rows.map((row) => {
125
144
  const isRowExpandable = isExpandable && row.getCanExpand();
126
145
  const isRowExpanded = isRowExpandable && row.getIsExpanded();
@@ -163,11 +182,16 @@ const Table = Object.assign(({
163
182
  }), jsxRuntime.jsxRuntimeExports.jsx(TablePagination.default, {
164
183
  pageSizes
165
184
  })]
166
- })
185
+ }), userSorted && jsxRuntime.jsxRuntimeExports.jsx(index$3.VisuallyHidden, {
186
+ "aria-live": "polite",
187
+ children: TableHeaderCell_utils.getTableSortLabel(table, TableHeaderCell_utils.formatTableSortNotification)
188
+ })]
167
189
  });
168
190
  }, {
169
191
  ExpandRowButton: ExpandRowButton.ExpandRowButton,
170
192
  ExpandedRow: TableExpandedRow.TableExpandedRow,
171
- AnimatedExpandedRow: TableAnimatedExpandedRow.TableAnimatedExpandedRow
193
+ AnimatedExpandedRow: TableAnimatedExpandedRow.TableAnimatedExpandedRow,
194
+ RowSelectionButton: RowSelectionButton.RowSelectionButton,
195
+ HeaderMultiRowSelectionButton: HeaderMultiRowSelectionButton.HeaderMultiRowSelectionButton
172
196
  });
173
197
  exports.default = Table;
@@ -1,7 +1,9 @@
1
1
  import { TableProps } from './Table.types';
2
- declare const Table: (<T extends object>({ columns, onRowClick, data, defaultSorting, emptyState, maxHeight, stripedRows, onSortingChange, sorting, manualSorting, getIsRowExpandable, renderExpandedRow, expandRowOnClick, expandedRowComponent: ExpandedRow, pagination, defaultPagination, onPaginationChange, manualPagination, totalRowCount, pageSizes, paginationEnabled }: TableProps<T>) => import("react/jsx-runtime").JSX.Element) & {
2
+ declare const Table: (<T extends object>({ columns, caption, onRowClick, data, getRowId, emptyState, maxHeight, stripedRows, defaultSorting, onSortingChange, sorting, manualSorting, getIsRowExpandable, renderExpandedRow, expandRowOnClick, expandedRowComponent: ExpandedRow, pagination, defaultPagination, onPaginationChange, manualPagination, totalRowCount, pageSizes, paginationEnabled, rowSelection, defaultRowSelection, onRowSelectionChange, rowSelectionMode, getRowCanSelect }: TableProps<T>) => import("react/jsx-runtime").JSX.Element) & {
3
3
  ExpandRowButton: ({ row, expandedIcon, collapsedIcon, ...restProps }: import("./components/ExpandRowButton/ExpandRowButton").ExpandRowButtonProps) => import("react/jsx-runtime").JSX.Element | null;
4
4
  ExpandedRow: <T_1 extends object>({ row, renderExpandedRow, keepInDom, expanded, rowRef, ...restProps }: import("./components/TableExpandedRow").TableExpandedRowProps<T_1>) => import("react/jsx-runtime").JSX.Element | null;
5
5
  AnimatedExpandedRow: <T_2 extends object>({ expanded, rowRef, ...restProps }: import("./components/TableExpandedRow").TableExpandedRowProps<T_2>) => import("react/jsx-runtime").JSX.Element;
6
+ RowSelectionButton: <T_3 extends object>({ row, ...restProps }: import("./components/RowSelection/RowSelectionButton").RowSelectionButtonProps<T_3>) => import("react/jsx-runtime").JSX.Element;
7
+ HeaderMultiRowSelectionButton: <T_4 extends object>({ table, managePage, ...restProps }: import("./components/RowSelection/HeaderMultiRowSelectionButton").HeaderMultiRowSelectionButtonProps<T_4>) => import("react/jsx-runtime").JSX.Element;
6
8
  };
7
9
  export default Table;
@@ -1,43 +1,61 @@
1
1
  import { j as jsxRuntimeExports } from "../node_modules/react/jsx-runtime.js";
2
- import { useEffect, Fragment } from "react";
2
+ import { useState, useEffect, Fragment } from "react";
3
+ import { VisuallyHidden } from "../node_modules/@radix-ui/react-visually-hidden/dist/index.js";
3
4
  import { useReactTable, flexRender } from "../node_modules/@tanstack/react-table/build/lib/index.js";
4
- import { ArrowUpIcon, ArrowDownIcon } from "@redislabsdev/redis-ui-icons";
5
5
  import { useControllableState } from "../node_modules/@radix-ui/react-use-controllable-state/dist/index.js";
6
6
  import TablePagination from "./components/TablePagination/TablePagination.js";
7
7
  import { ExpandRowButton } from "./components/ExpandRowButton/ExpandRowButton.js";
8
8
  import { TableExpandedRow } from "./components/TableExpandedRow/TableExpandedRow.js";
9
9
  import { TableAnimatedExpandedRow } from "./components/TableExpandedRow/TableAnimatedExpandedRow.js";
10
10
  import { TableContext } from "./Table.context.js";
11
- import { TableContainer, Table as Table$1, TableHead, TableHeaderRow, TableTh, HeaderCellInnerWrapper, TableBody, TableBodyRow, TableBodyCell } from "./Table.style.js";
11
+ import { TableHeaderCell } from "./components/TableHeaderCell/TableHeaderCell.js";
12
+ import { getTableSortLabel, formatTableSortNotification } from "./components/TableHeaderCell/TableHeaderCell.utils.js";
13
+ import { EmptyStateRow } from "./components/EmptyStateRow/EmptyStateRow.js";
14
+ import { RowSelectionButton } from "./components/RowSelection/RowSelectionButton.js";
15
+ import { HeaderMultiRowSelectionButton } from "./components/RowSelection/HeaderMultiRowSelectionButton.js";
16
+ import { TableContainer, Table as Table$1, TableHead, TableHeaderRow, TableBody, TableBodyRow, TableBodyCell } from "./Table.style.js";
12
17
  import { getCoreRowModel, getSortedRowModel, getExpandedRowModel, getPaginationRowModel } from "../node_modules/@tanstack/table-core/build/lib/index.js";
13
18
  const getTrue = () => true;
14
19
  const DEFAULT_PAGINATION = {
15
20
  pageIndex: 0,
16
21
  pageSize: 10
17
22
  };
23
+ const DEFAULT_ROW_SELECTION = {};
18
24
  const Table = Object.assign(({
19
25
  columns,
26
+ caption,
20
27
  onRowClick,
21
28
  data,
22
- defaultSorting,
29
+ getRowId,
23
30
  emptyState,
24
31
  maxHeight,
25
32
  stripedRows = false,
33
+ // sorting
34
+ defaultSorting,
26
35
  onSortingChange,
27
36
  sorting,
28
37
  manualSorting = false,
38
+ // row expansion
29
39
  getIsRowExpandable,
30
40
  renderExpandedRow,
31
41
  expandRowOnClick,
32
42
  expandedRowComponent: ExpandedRow = TableExpandedRow,
43
+ // pagination
33
44
  pagination,
34
45
  defaultPagination,
35
46
  onPaginationChange,
36
47
  manualPagination,
37
48
  totalRowCount,
38
49
  pageSizes,
39
- paginationEnabled = (pagination || defaultPagination || onPaginationChange || pageSizes) !== void 0 || manualPagination !== void 0
50
+ paginationEnabled = (pagination || defaultPagination || onPaginationChange || pageSizes) !== void 0 || manualPagination !== void 0,
51
+ // row selection
52
+ rowSelection,
53
+ defaultRowSelection,
54
+ onRowSelectionChange,
55
+ rowSelectionMode,
56
+ getRowCanSelect
40
57
  }) => {
58
+ const [userSorted, setUserSorted] = useState(false);
41
59
  const [sortingState, setSortingState] = useControllableState({
42
60
  prop: sorting,
43
61
  defaultProp: defaultSorting,
@@ -48,6 +66,11 @@ const Table = Object.assign(({
48
66
  defaultProp: defaultPagination ?? DEFAULT_PAGINATION,
49
67
  onChange: onPaginationChange
50
68
  });
69
+ const [rowSelectionState = DEFAULT_ROW_SELECTION, setRowSelectionState] = useControllableState({
70
+ prop: rowSelection,
71
+ defaultProp: defaultRowSelection,
72
+ onChange: onRowSelectionChange
73
+ });
51
74
  const isExpandable = !!renderExpandedRow;
52
75
  const paginationSettings = {
53
76
  getPaginationRowModel: getPaginationRowModel(),
@@ -59,19 +82,29 @@ const Table = Object.assign(({
59
82
  const table = useReactTable({
60
83
  data,
61
84
  columns,
85
+ getRowId,
62
86
  getCoreRowModel: getCoreRowModel(),
63
87
  getSortedRowModel: getSortedRowModel(),
64
88
  state: {
65
89
  sorting: sortingState,
66
90
  ...paginationEnabled && {
67
91
  pagination: paginationState
92
+ },
93
+ ...rowSelectionMode && {
94
+ rowSelection: rowSelectionState
68
95
  }
69
96
  },
70
97
  manualSorting,
71
- onSortingChange: setSortingState,
98
+ onSortingChange: (value) => {
99
+ setSortingState(value);
100
+ setUserSorted(true);
101
+ },
72
102
  getExpandedRowModel: isExpandable ? getExpandedRowModel() : void 0,
73
103
  getRowCanExpand: isExpandable ? getIsRowExpandable && ((row) => getIsRowExpandable(row.original)) || getTrue : void 0,
74
- ...paginationEnabled && paginationSettings
104
+ ...paginationEnabled && paginationSettings,
105
+ enableRowSelection: rowSelectionMode && (getRowCanSelect ?? true),
106
+ enableMultiRowSelection: rowSelectionMode === "multiple",
107
+ onRowSelectionChange: setRowSelectionState
75
108
  });
76
109
  const {
77
110
  pageIndex
@@ -83,42 +116,28 @@ const Table = Object.assign(({
83
116
  const {
84
117
  rows
85
118
  } = table.getRowModel();
86
- return jsxRuntimeExports.jsx(TableContext.Provider, {
119
+ return jsxRuntimeExports.jsxs(TableContext.Provider, {
87
120
  value: {
88
121
  table
89
122
  },
90
- children: jsxRuntimeExports.jsxs(TableContainer, {
123
+ children: [jsxRuntimeExports.jsxs(TableContainer, {
91
124
  children: [jsxRuntimeExports.jsxs(Table$1, {
92
- children: [jsxRuntimeExports.jsx(TableHead, {
125
+ children: [caption && jsxRuntimeExports.jsx(VisuallyHidden, {
126
+ asChild: true,
127
+ children: jsxRuntimeExports.jsx("caption", {
128
+ children: caption
129
+ })
130
+ }), jsxRuntimeExports.jsx(TableHead, {
93
131
  children: table.getHeaderGroups().map((headerGroup) => jsxRuntimeExports.jsx(TableHeaderRow, {
94
- children: headerGroup.headers.map((header) => jsxRuntimeExports.jsx(TableTh, {
95
- onClick: header.column.getToggleSortingHandler(),
96
- style: {
97
- width: header.column.getSize()
98
- },
99
- children: jsxRuntimeExports.jsxs(HeaderCellInnerWrapper, {
100
- size: "XS",
101
- children: [header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()), {
102
- asc: jsxRuntimeExports.jsx(ArrowUpIcon, {
103
- size: "S",
104
- color: "neutral700"
105
- }),
106
- desc: jsxRuntimeExports.jsx(ArrowDownIcon, {
107
- size: "S",
108
- color: "neutral700"
109
- })
110
- }[header.column.getIsSorted()] ?? null]
111
- })
132
+ children: headerGroup.headers.map((header) => jsxRuntimeExports.jsx(TableHeaderCell, {
133
+ header
112
134
  }, header.id))
113
135
  }, headerGroup.id))
114
136
  }), jsxRuntimeExports.jsxs(TableBody, {
115
137
  maxHeight,
116
- children: [!rows.length ? jsxRuntimeExports.jsx(TableBodyRow, {
117
- "$stripedRows": false,
118
- children: jsxRuntimeExports.jsx(TableBodyCell, {
119
- colSpan: columns.length,
120
- children: emptyState ? emptyState() : "No data to display"
121
- })
138
+ children: [!rows.length ? jsxRuntimeExports.jsx(EmptyStateRow, {
139
+ table,
140
+ emptyState
122
141
  }) : null, rows.map((row) => {
123
142
  const isRowExpandable = isExpandable && row.getCanExpand();
124
143
  const isRowExpanded = isRowExpandable && row.getIsExpanded();
@@ -161,12 +180,17 @@ const Table = Object.assign(({
161
180
  }), jsxRuntimeExports.jsx(TablePagination, {
162
181
  pageSizes
163
182
  })]
164
- })
183
+ }), userSorted && jsxRuntimeExports.jsx(VisuallyHidden, {
184
+ "aria-live": "polite",
185
+ children: getTableSortLabel(table, formatTableSortNotification)
186
+ })]
165
187
  });
166
188
  }, {
167
189
  ExpandRowButton,
168
190
  ExpandedRow: TableExpandedRow,
169
- AnimatedExpandedRow: TableAnimatedExpandedRow
191
+ AnimatedExpandedRow: TableAnimatedExpandedRow,
192
+ RowSelectionButton,
193
+ HeaderMultiRowSelectionButton
170
194
  });
171
195
  export {
172
196
  Table as default
@@ -8,37 +8,47 @@ const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
8
8
  const _styled__default = /* @__PURE__ */ _interopDefault(_styled);
9
9
  const TableContainer = _styled__default.default.div.withConfig({
10
10
  displayName: "Tablestyle__TableContainer",
11
- componentId: "sc-o0xfty-0"
11
+ componentId: "RedisUI__sc-o0xfty-0"
12
12
  })(["width:100%;border-radius:0.8rem;box-shadow:", ";background-color:", ";overflow:hidden;"], () => redisUiStyles.useTheme().components.table.table.tableContainer.boxShadow, () => redisUiStyles.useTheme().components.table.table.tableContainer.backgroundColor);
13
13
  const Table = _styled__default.default.table.withConfig({
14
14
  displayName: "Tablestyle__Table",
15
- componentId: "sc-o0xfty-1"
16
- })(["width:100%;border-collapse:collapse;border-spacing:0;overflow-x:auto;display:block;table-layout:fixed;::-webkit-scrollbar{height:0.5rem;}"]);
15
+ componentId: "RedisUI__sc-o0xfty-1"
16
+ })(["width:100%;border-collapse:collapse;border-spacing:0;overflow-x:auto;display:block;table-layout:fixed;"]);
17
17
  const TableHead = _styled__default.default.thead.withConfig({
18
18
  displayName: "Tablestyle__TableHead",
19
- componentId: "sc-o0xfty-2"
19
+ componentId: "RedisUI__sc-o0xfty-2"
20
20
  })(["display:table;table-layout:fixed;"]);
21
21
  const TableHeaderRow = _styled__default.default.tr.withConfig({
22
22
  displayName: "Tablestyle__TableHeaderRow",
23
- componentId: "sc-o0xfty-3"
23
+ componentId: "RedisUI__sc-o0xfty-3"
24
24
  })(["height:5.6rem;display:table;width:100%;table-layout:fixed;"]);
25
- const HeaderCellInnerWrapper = _styled__default.default(redisUiComponents.Typography.Heading).withConfig({
25
+ const HeaderCellInnerWrapper = _styled__default.default.button.withConfig({
26
26
  displayName: "Tablestyle__HeaderCellInnerWrapper",
27
- componentId: "sc-o0xfty-4"
28
- })(["display:flex;align-items:center;justify-content:flex-start;height:35px;line-height:35px;"]);
27
+ componentId: "RedisUI__sc-o0xfty-4"
28
+ })(["all:unset;border-radius:0.03rem;display:flex;align-items:center;justify-content:flex-start;gap:0.8rem;height:100%;width:100%;min-height:35px;max-width:100%;overflow:hidden;", " svg{flex:none;}"], redisUiStyles.getFocusStyle("0.6rem"));
29
+ const HeaderTitleWrapper = _styled__default.default(redisUiComponents.Typography.Body).withConfig({
30
+ displayName: "Tablestyle__HeaderTitleWrapper",
31
+ componentId: "RedisUI__sc-o0xfty-5"
32
+ })(["flex:0 1 auto;white-space:inherit;text-align:start;", ""], ({
33
+ $isTextual
34
+ }) => $isTextual ? null : _styled.css`
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: flex-start;
38
+ `);
29
39
  const TableTh = _styled__default.default.th.withConfig({
30
40
  displayName: "Tablestyle__TableTh",
31
- componentId: "sc-o0xfty-5"
32
- })(["padding:1.05rem 0 1.05rem 1.2rem;color:", ";user-select:none;white-space:nowrap;svg{vertical-align:middle;margin-left:0.8rem;}&:not(:last-child){> ", "{border-right:1px solid ", ";}}"], () => redisUiStyles.useTheme().components.table.table.tableTh.color, HeaderCellInnerWrapper, () => redisUiStyles.useTheme().components.table.table.tableTh.borderRight);
41
+ componentId: "RedisUI__sc-o0xfty-6"
42
+ })(["padding:1.05rem 1.2rem;color:", ";user-select:none;white-space:nowrap;word-break:break-word;line-height:normal;position:relative;&:not(:last-child)::after{content:'';position:absolute;inset:1.05rem 0 1.05rem auto;border-right:1px solid ", ";}"], () => redisUiStyles.useTheme().components.table.table.tableTh.color, () => redisUiStyles.useTheme().components.table.table.tableTh.borderRight);
33
43
  const TableBody = _styled__default.default.tbody.withConfig({
34
44
  displayName: "Tablestyle__TableBody",
35
- componentId: "sc-o0xfty-6"
45
+ componentId: "RedisUI__sc-o0xfty-7"
36
46
  })(["max-height:", ";overflow-y:auto;overflow-x:hidden;display:inline-block;table-layout:fixed;"], ({
37
47
  maxHeight
38
48
  }) => maxHeight);
39
49
  const TableBodyRow = _styled__default.default.tr.withConfig({
40
50
  displayName: "Tablestyle__TableBodyRow",
41
- componentId: "sc-o0xfty-7"
51
+ componentId: "RedisUI__sc-o0xfty-8"
42
52
  })(["border-top:1px solid ", ";height:4.8rem;transition:box-shadow 0.2s ease-in-out;position:relative;&:hover,&:focus{cursor:", ";z-index:1;box-shadow:", ";", "{opacity:1;visibility:visible;}}", " display:table;width:100%;table-layout:fixed;"], () => redisUiStyles.useTheme().components.table.table.tableBodyRow.borderTop, ({
43
53
  $hasOnClick
44
54
  }) => $hasOnClick ? "pointer" : "default", () => redisUiStyles.useTheme().components.table.table.tableBodyRow.hoverBoxShadow, ShowOnRowHover_style.ShowOnRowHover, ({
@@ -50,9 +60,10 @@ const TableBodyRow = _styled__default.default.tr.withConfig({
50
60
  `);
51
61
  const TableBodyCell = _styled__default.default.td.withConfig({
52
62
  displayName: "Tablestyle__TableBodyCell",
53
- componentId: "sc-o0xfty-8"
63
+ componentId: "RedisUI__sc-o0xfty-9"
54
64
  })(["color:", ";padding:0 1.2rem;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;"], () => redisUiStyles.useTheme().components.table.table.tableBodyCell.color);
55
65
  exports.HeaderCellInnerWrapper = HeaderCellInnerWrapper;
66
+ exports.HeaderTitleWrapper = HeaderTitleWrapper;
56
67
  exports.Table = Table;
57
68
  exports.TableBody = TableBody;
58
69
  exports.TableBodyCell = TableBodyCell;
@@ -2,7 +2,10 @@ export declare const TableContainer: import("styled-components").StyledComponent
2
2
  export declare const Table: import("styled-components").StyledComponent<"table", any, {}, never>;
3
3
  export declare const TableHead: import("styled-components").StyledComponent<"thead", any, {}, never>;
4
4
  export declare const TableHeaderRow: import("styled-components").StyledComponent<"tr", any, {}, never>;
5
- export declare const HeaderCellInnerWrapper: import("styled-components").StyledComponent<({ size, ellipsis, ...restProps }: import("@redislabsdev/redis-ui-components/dist/Typography/components/Heading/Heading.types").HeadingProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
5
+ export declare const HeaderCellInnerWrapper: import("styled-components").StyledComponent<"button", any, {}, never>;
6
+ export declare const HeaderTitleWrapper: import("styled-components").StyledComponent<({ size, variant, color, component, ellipsis, ...restProps }: import("@redislabsdev/redis-ui-components/dist/Typography/components/Body/Body.types").BodyProps) => import("react/jsx-runtime").JSX.Element, any, {
7
+ $isTextual: boolean;
8
+ }, never>;
6
9
  export declare const TableTh: import("styled-components").StyledComponent<"th", any, {}, never>;
7
10
  export declare const TableBody: import("styled-components").StyledComponent<"tbody", any, {
8
11
  maxHeight?: string | undefined;
@@ -1,40 +1,50 @@
1
1
  import _styled, { css } from "styled-components";
2
- import { useTheme } from "@redislabsdev/redis-ui-styles";
2
+ import { useTheme, getFocusStyle } from "@redislabsdev/redis-ui-styles";
3
3
  import { Typography } from "@redislabsdev/redis-ui-components";
4
4
  import { ShowOnRowHover } from "./components/ShowOnRowHover/ShowOnRowHover.style.js";
5
5
  const TableContainer = _styled.div.withConfig({
6
6
  displayName: "Tablestyle__TableContainer",
7
- componentId: "sc-o0xfty-0"
7
+ componentId: "RedisUI__sc-o0xfty-0"
8
8
  })(["width:100%;border-radius:0.8rem;box-shadow:", ";background-color:", ";overflow:hidden;"], () => useTheme().components.table.table.tableContainer.boxShadow, () => useTheme().components.table.table.tableContainer.backgroundColor);
9
9
  const Table = _styled.table.withConfig({
10
10
  displayName: "Tablestyle__Table",
11
- componentId: "sc-o0xfty-1"
12
- })(["width:100%;border-collapse:collapse;border-spacing:0;overflow-x:auto;display:block;table-layout:fixed;::-webkit-scrollbar{height:0.5rem;}"]);
11
+ componentId: "RedisUI__sc-o0xfty-1"
12
+ })(["width:100%;border-collapse:collapse;border-spacing:0;overflow-x:auto;display:block;table-layout:fixed;"]);
13
13
  const TableHead = _styled.thead.withConfig({
14
14
  displayName: "Tablestyle__TableHead",
15
- componentId: "sc-o0xfty-2"
15
+ componentId: "RedisUI__sc-o0xfty-2"
16
16
  })(["display:table;table-layout:fixed;"]);
17
17
  const TableHeaderRow = _styled.tr.withConfig({
18
18
  displayName: "Tablestyle__TableHeaderRow",
19
- componentId: "sc-o0xfty-3"
19
+ componentId: "RedisUI__sc-o0xfty-3"
20
20
  })(["height:5.6rem;display:table;width:100%;table-layout:fixed;"]);
21
- const HeaderCellInnerWrapper = _styled(Typography.Heading).withConfig({
21
+ const HeaderCellInnerWrapper = _styled.button.withConfig({
22
22
  displayName: "Tablestyle__HeaderCellInnerWrapper",
23
- componentId: "sc-o0xfty-4"
24
- })(["display:flex;align-items:center;justify-content:flex-start;height:35px;line-height:35px;"]);
23
+ componentId: "RedisUI__sc-o0xfty-4"
24
+ })(["all:unset;border-radius:0.03rem;display:flex;align-items:center;justify-content:flex-start;gap:0.8rem;height:100%;width:100%;min-height:35px;max-width:100%;overflow:hidden;", " svg{flex:none;}"], getFocusStyle("0.6rem"));
25
+ const HeaderTitleWrapper = _styled(Typography.Body).withConfig({
26
+ displayName: "Tablestyle__HeaderTitleWrapper",
27
+ componentId: "RedisUI__sc-o0xfty-5"
28
+ })(["flex:0 1 auto;white-space:inherit;text-align:start;", ""], ({
29
+ $isTextual
30
+ }) => $isTextual ? null : css`
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: flex-start;
34
+ `);
25
35
  const TableTh = _styled.th.withConfig({
26
36
  displayName: "Tablestyle__TableTh",
27
- componentId: "sc-o0xfty-5"
28
- })(["padding:1.05rem 0 1.05rem 1.2rem;color:", ";user-select:none;white-space:nowrap;svg{vertical-align:middle;margin-left:0.8rem;}&:not(:last-child){> ", "{border-right:1px solid ", ";}}"], () => useTheme().components.table.table.tableTh.color, HeaderCellInnerWrapper, () => useTheme().components.table.table.tableTh.borderRight);
37
+ componentId: "RedisUI__sc-o0xfty-6"
38
+ })(["padding:1.05rem 1.2rem;color:", ";user-select:none;white-space:nowrap;word-break:break-word;line-height:normal;position:relative;&:not(:last-child)::after{content:'';position:absolute;inset:1.05rem 0 1.05rem auto;border-right:1px solid ", ";}"], () => useTheme().components.table.table.tableTh.color, () => useTheme().components.table.table.tableTh.borderRight);
29
39
  const TableBody = _styled.tbody.withConfig({
30
40
  displayName: "Tablestyle__TableBody",
31
- componentId: "sc-o0xfty-6"
41
+ componentId: "RedisUI__sc-o0xfty-7"
32
42
  })(["max-height:", ";overflow-y:auto;overflow-x:hidden;display:inline-block;table-layout:fixed;"], ({
33
43
  maxHeight
34
44
  }) => maxHeight);
35
45
  const TableBodyRow = _styled.tr.withConfig({
36
46
  displayName: "Tablestyle__TableBodyRow",
37
- componentId: "sc-o0xfty-7"
47
+ componentId: "RedisUI__sc-o0xfty-8"
38
48
  })(["border-top:1px solid ", ";height:4.8rem;transition:box-shadow 0.2s ease-in-out;position:relative;&:hover,&:focus{cursor:", ";z-index:1;box-shadow:", ";", "{opacity:1;visibility:visible;}}", " display:table;width:100%;table-layout:fixed;"], () => useTheme().components.table.table.tableBodyRow.borderTop, ({
39
49
  $hasOnClick
40
50
  }) => $hasOnClick ? "pointer" : "default", () => useTheme().components.table.table.tableBodyRow.hoverBoxShadow, ShowOnRowHover, ({
@@ -46,10 +56,11 @@ const TableBodyRow = _styled.tr.withConfig({
46
56
  `);
47
57
  const TableBodyCell = _styled.td.withConfig({
48
58
  displayName: "Tablestyle__TableBodyCell",
49
- componentId: "sc-o0xfty-8"
59
+ componentId: "RedisUI__sc-o0xfty-9"
50
60
  })(["color:", ";padding:0 1.2rem;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;"], () => useTheme().components.table.table.tableBodyCell.color);
51
61
  export {
52
62
  HeaderCellInnerWrapper,
63
+ HeaderTitleWrapper,
53
64
  Table,
54
65
  TableBody,
55
66
  TableBodyCell,
@@ -1,26 +1,25 @@
1
1
  import { ComponentType, ReactNode } from 'react';
2
- import type { ColumnDef, CellContext, PaginationState, Row, SortingState } from '@tanstack/react-table';
2
+ import type { CellContext, ColumnDef, PaginationState, Row, RowSelectionState, SortingState } from '@tanstack/react-table';
3
3
  import type { TableExpandedRowProps } from './components/TableExpandedRow';
4
+ import './tableTypes';
4
5
  export type ColumnDefinition<T extends object> = ColumnDef<T>;
5
6
  export type RowDefinition<T extends object> = Row<T>;
6
7
  export type CellDefinition<T extends object, D> = CellContext<T, D>;
7
8
  export type PaginationTypes = PaginationState;
8
9
  export type SortingTypes = SortingState;
9
- export interface TableProps<T extends object> {
10
- data: T[];
11
- columns: ColumnDefinition<T>[];
12
- onRowClick?: (row: T) => void;
13
- emptyState?: () => ReactNode;
10
+ export interface TableSortingProps {
14
11
  defaultSorting?: SortingState;
15
- maxHeight?: string;
16
- stripedRows?: boolean;
17
12
  onSortingChange?: (state: SortingState) => void;
18
13
  sorting?: SortingState;
19
14
  manualSorting?: boolean;
15
+ }
16
+ export interface TableExpandableRowProps<T extends object> {
20
17
  getIsRowExpandable?: (row: T) => boolean;
21
18
  renderExpandedRow?: (row: RowDefinition<T>) => ReactNode;
22
19
  expandRowOnClick?: boolean;
23
20
  expandedRowComponent?: ComponentType<TableExpandedRowProps<T>>;
21
+ }
22
+ interface TablePaginationProps {
24
23
  pagination?: PaginationState;
25
24
  defaultPagination?: PaginationState;
26
25
  onPaginationChange?: (state: PaginationState) => void;
@@ -29,3 +28,21 @@ export interface TableProps<T extends object> {
29
28
  pageSizes?: number[];
30
29
  paginationEnabled?: boolean;
31
30
  }
31
+ interface TableRowSelectionState<T extends object> {
32
+ rowSelection?: RowSelectionState;
33
+ defaultRowSelection?: RowSelectionState;
34
+ onRowSelectionChange?: (state: RowSelectionState) => void;
35
+ rowSelectionMode?: 'single' | 'multiple';
36
+ getRowCanSelect?: (row: Row<T>) => boolean;
37
+ }
38
+ export interface TableProps<T extends object> extends TableSortingProps, TableExpandableRowProps<T>, TablePaginationProps, TableRowSelectionState<T> {
39
+ data: T[];
40
+ columns: ColumnDefinition<T>[];
41
+ getRowId?: (row: T, index: number) => string;
42
+ onRowClick?: (row: T) => void;
43
+ emptyState?: () => ReactNode;
44
+ maxHeight?: string;
45
+ stripedRows?: boolean;
46
+ caption?: string;
47
+ }
48
+ export {};
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("../../../node_modules/react/jsx-runtime.cjs");
4
+ const TableHeaderCell_utils = require("../TableHeaderCell/TableHeaderCell.utils.cjs");
5
+ const Table_style = require("../../Table.style.cjs");
6
+ const EmptyStateRow = ({
7
+ table,
8
+ emptyState
9
+ }) => jsxRuntime.jsxRuntimeExports.jsx(Table_style.TableBodyRow, {
10
+ "$stripedRows": false,
11
+ children: jsxRuntime.jsxRuntimeExports.jsx(Table_style.TableBodyCell, {
12
+ colSpan: TableHeaderCell_utils.normalizeCellSpan(table.getVisibleLeafColumns().length),
13
+ children: (emptyState == null ? void 0 : emptyState()) ?? "No data to display"
14
+ })
15
+ });
16
+ exports.EmptyStateRow = EmptyStateRow;
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ import { Table } from '@tanstack/react-table';
3
+ type EmptyStateRowProps<T extends object> = {
4
+ table: Table<T>;
5
+ emptyState?: () => ReactNode;
6
+ };
7
+ export declare const EmptyStateRow: <T extends object>({ table, emptyState }: EmptyStateRowProps<T>) => import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,16 @@
1
+ import { j as jsxRuntimeExports } from "../../../node_modules/react/jsx-runtime.js";
2
+ import { normalizeCellSpan } from "../TableHeaderCell/TableHeaderCell.utils.js";
3
+ import { TableBodyRow, TableBodyCell } from "../../Table.style.js";
4
+ const EmptyStateRow = ({
5
+ table,
6
+ emptyState
7
+ }) => jsxRuntimeExports.jsx(TableBodyRow, {
8
+ "$stripedRows": false,
9
+ children: jsxRuntimeExports.jsx(TableBodyCell, {
10
+ colSpan: normalizeCellSpan(table.getVisibleLeafColumns().length),
11
+ children: (emptyState == null ? void 0 : emptyState()) ?? "No data to display"
12
+ })
13
+ });
14
+ export {
15
+ EmptyStateRow
16
+ };