@rebasepro/ui 0.17.3 → 0.18.1

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 (127) hide show
  1. package/README.md +4 -0
  2. package/dist/components/MultiSelect.d.ts +10 -0
  3. package/dist/index.es.js +2 -1
  4. package/dist/index.es.js.map +1 -1
  5. package/package.json +32 -23
  6. package/src/components/Alert.tsx +0 -118
  7. package/src/components/Autocomplete.tsx +0 -93
  8. package/src/components/Avatar.tsx +0 -73
  9. package/src/components/Badge.tsx +0 -44
  10. package/src/components/BooleanSwitch.tsx +0 -116
  11. package/src/components/BooleanSwitchWithLabel.tsx +0 -120
  12. package/src/components/Button.tsx +0 -110
  13. package/src/components/Card.tsx +0 -43
  14. package/src/components/CenteredView.tsx +0 -35
  15. package/src/components/Checkbox.tsx +0 -129
  16. package/src/components/Chip.tsx +0 -131
  17. package/src/components/CircularProgress.tsx +0 -53
  18. package/src/components/CircularProgressCenter.tsx +0 -27
  19. package/src/components/Collapse.tsx +0 -66
  20. package/src/components/ColorPicker.tsx +0 -140
  21. package/src/components/Container.tsx +0 -51
  22. package/src/components/DateTimeField.tsx +0 -363
  23. package/src/components/DebouncedTextField.tsx +0 -76
  24. package/src/components/Dialog.tsx +0 -159
  25. package/src/components/DialogActions.tsx +0 -29
  26. package/src/components/DialogContent.tsx +0 -27
  27. package/src/components/DialogTitle.tsx +0 -41
  28. package/src/components/ErrorBoundary.tsx +0 -236
  29. package/src/components/ExpandablePanel.tsx +0 -130
  30. package/src/components/FileUpload.tsx +0 -103
  31. package/src/components/FilterChip.tsx +0 -89
  32. package/src/components/IconButton.tsx +0 -101
  33. package/src/components/InfoLabel.tsx +0 -23
  34. package/src/components/InputLabel.tsx +0 -40
  35. package/src/components/Label.tsx +0 -32
  36. package/src/components/LoadingButton.tsx +0 -32
  37. package/src/components/Markdown.tsx +0 -55
  38. package/src/components/Menu.tsx +0 -114
  39. package/src/components/Menubar.tsx +0 -355
  40. package/src/components/MultiSelect.tsx +0 -433
  41. package/src/components/Paper.tsx +0 -23
  42. package/src/components/Popover.tsx +0 -162
  43. package/src/components/RadioGroup.tsx +0 -74
  44. package/src/components/ResizablePanels.tsx +0 -189
  45. package/src/components/SearchBar.tsx +0 -136
  46. package/src/components/Select.tsx +0 -326
  47. package/src/components/Separator.tsx +0 -28
  48. package/src/components/Sheet.tsx +0 -135
  49. package/src/components/Skeleton.tsx +0 -54
  50. package/src/components/Slider.tsx +0 -110
  51. package/src/components/Table.tsx +0 -178
  52. package/src/components/Tabs.tsx +0 -185
  53. package/src/components/TextField.tsx +0 -270
  54. package/src/components/TextareaAutosize.tsx +0 -368
  55. package/src/components/ToggleButtonGroup.tsx +0 -69
  56. package/src/components/Tooltip.tsx +0 -153
  57. package/src/components/Typography.tsx +0 -132
  58. package/src/components/VirtualTable/VirtualTable.performance.test.tsx +0 -90
  59. package/src/components/VirtualTable/VirtualTable.tsx +0 -700
  60. package/src/components/VirtualTable/VirtualTableCell.tsx +0 -59
  61. package/src/components/VirtualTable/VirtualTableHeader.tsx +0 -327
  62. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +0 -250
  63. package/src/components/VirtualTable/VirtualTableProps.tsx +0 -339
  64. package/src/components/VirtualTable/VirtualTableRow.tsx +0 -51
  65. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +0 -44
  66. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +0 -89
  67. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +0 -71
  68. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +0 -107
  69. package/src/components/VirtualTable/fields/VirtualTableSwitch.tsx +0 -28
  70. package/src/components/VirtualTable/index.tsx +0 -10
  71. package/src/components/VirtualTable/selection/SelectionContext.tsx +0 -36
  72. package/src/components/VirtualTable/selection/SelectionStore.ts +0 -54
  73. package/src/components/VirtualTable/types.tsx +0 -47
  74. package/src/components/common/SelectInputLabel.tsx +0 -23
  75. package/src/components/index.tsx +0 -62
  76. package/src/hooks/PortalContainerContext.tsx +0 -50
  77. package/src/hooks/index.ts +0 -7
  78. package/src/hooks/useDebounceCallback.tsx +0 -21
  79. package/src/hooks/useDebounceValue.tsx +0 -20
  80. package/src/hooks/useDebouncedCallback.ts +0 -39
  81. package/src/hooks/useInjectStyles.tsx +0 -31
  82. package/src/hooks/useOutsideAlerter.tsx +0 -46
  83. package/src/icons/GitHubIcon.tsx +0 -21
  84. package/src/icons/HandleIcon.tsx +0 -23
  85. package/src/icons/Icon.tsx +0 -33
  86. package/src/icons/LucideIconByName.tsx +0 -117
  87. package/src/icons/cool_icon_keys.ts +0 -12
  88. package/src/icons/icon_keys.ts +0 -1936
  89. package/src/icons/index.ts +0 -179
  90. package/src/index.css +0 -169
  91. package/src/index.ts +0 -47
  92. package/src/scripts/fixIconSizes.cjs +0 -92
  93. package/src/scripts/fixIconSizesToConst.cjs +0 -106
  94. package/src/scripts/generateIconKeys.ts +0 -41
  95. package/src/scripts/generateIcons.ts +0 -4
  96. package/src/scripts/saveIconFiles.ts +0 -89
  97. package/src/styles.ts +0 -141
  98. package/src/theme.css +0 -168
  99. package/src/util/chip_colors.ts +0 -242
  100. package/src/util/cls.ts +0 -8
  101. package/src/util/debounce.ts +0 -28
  102. package/src/util/hash.ts +0 -11
  103. package/src/util/index.ts +0 -4
  104. package/src/util/key_to_icon_component.ts +0 -11
  105. package/src/util/lazy_chunk.ts +0 -101
  106. package/src/views/CardView.tsx +0 -281
  107. package/src/views/CollectionView/CollectionCardView.tsx +0 -265
  108. package/src/views/CollectionView/CollectionKanbanView.tsx +0 -246
  109. package/src/views/CollectionView/CollectionListView.tsx +0 -240
  110. package/src/views/CollectionView/CollectionTableView.tsx +0 -229
  111. package/src/views/CollectionView/CollectionView.tsx +0 -450
  112. package/src/views/CollectionView/CollectionViewToolbar.tsx +0 -242
  113. package/src/views/CollectionView/CollectionViewTypes.ts +0 -181
  114. package/src/views/CollectionView/DefaultCellRenderer.tsx +0 -404
  115. package/src/views/CollectionView/index.ts +0 -39
  116. package/src/views/CollectionView/resolveTitleProperty.ts +0 -52
  117. package/src/views/CollectionView/utils.ts +0 -14
  118. package/src/views/Kanban/Board.tsx +0 -384
  119. package/src/views/Kanban/BoardColumn.tsx +0 -138
  120. package/src/views/Kanban/BoardColumnTitle.tsx +0 -47
  121. package/src/views/Kanban/BoardSortableList.tsx +0 -182
  122. package/src/views/Kanban/board_types.ts +0 -80
  123. package/src/views/Kanban/index.tsx +0 -5
  124. package/src/views/Kanban/placement.ts +0 -62
  125. package/src/views/KanbanView.tsx +0 -32
  126. package/src/views/ListView.tsx +0 -296
  127. package/src/views/index.ts +0 -5
@@ -1,246 +0,0 @@
1
- "use client";
2
- import React, { useCallback, useMemo } from "react";
3
- import { KanbanView } from "../KanbanView";
4
- import type { BoardItem, BoardItemViewProps } from "../KanbanView";
5
- import { Card } from "../../components/Card";
6
- import { Typography } from "../../components/Typography";
7
- import { DefaultCellRenderer } from "./DefaultCellRenderer";
8
- import { cls } from "../../util";
9
- import { cardClickableMixin, cardSelectedMixin } from "../../styles";
10
- import type {
11
- CollectionPropertyConfig,
12
- CollectionDataController,
13
- CellRendererOverride,
14
- CollectionSelectionController,
15
- CollectionEnumValueConfig,
16
- } from "./CollectionViewTypes";
17
- import { resolveTitlePropertyKey } from "./resolveTitleProperty";
18
-
19
- import { getValueInPath } from "./utils";
20
-
21
- function getEnumLabel(enumConfig: CollectionPropertyConfig["enum"], key: string): string {
22
- if (!enumConfig) return key;
23
- if (enumConfig instanceof Map) {
24
- const cfg: CollectionEnumValueConfig | undefined = enumConfig.get(key);
25
- if (!cfg) return key;
26
- return typeof cfg === "string" ? cfg : cfg.label;
27
- }
28
- const cfg: CollectionEnumValueConfig | undefined = enumConfig[key];
29
- if (!cfg) return key;
30
- return typeof cfg === "string" ? cfg : cfg.label;
31
- }
32
-
33
- /**
34
- * Props for the {@link CollectionKanbanView} component.
35
- * @group Collection View
36
- */
37
- export type CollectionKanbanViewProps<T = Record<string, unknown>> = {
38
- dataController: CollectionDataController<T>;
39
- properties: Record<string, CollectionPropertyConfig>;
40
- propertiesOrder?: string[];
41
- idProperty?: string;
42
- titleProperty?: string;
43
- kanbanProperty: string;
44
- onRowClick?: (row: T) => void;
45
- cellRenderer?: CellRendererOverride<T>;
46
- selectionEnabled?: boolean;
47
- selectionController?: CollectionSelectionController<T>;
48
- highlightedItems?: T[];
49
- emptyComponent?: React.ReactNode;
50
- onRowCreate?: (defaults?: Record<string, unknown>) => void;
51
- className?: string;
52
- };
53
-
54
- /**
55
- * Headless kanban view that wraps {@link KanbanView}.
56
- *
57
- * Groups data by a kanban property's enum values into columns.
58
- * Each card displays a title and 1–2 preview properties.
59
- *
60
- * @group Collection View
61
- */
62
- export function CollectionKanbanView<T extends Record<string, unknown> = Record<string, unknown>>({
63
- dataController,
64
- properties,
65
- propertiesOrder,
66
- idProperty = "id",
67
- titleProperty,
68
- kanbanProperty,
69
- onRowClick,
70
- cellRenderer,
71
- emptyComponent,
72
- onRowCreate,
73
- className,
74
- }: CollectionKanbanViewProps<T>) {
75
- const order = useMemo(
76
- () => propertiesOrder ?? Object.keys(properties),
77
- [propertiesOrder, properties]
78
- );
79
-
80
- // ── Resolve kanban columns ───────────────────────────────────────
81
- const columns = useMemo<string[]>(() => {
82
- const kanbanConfig = properties[kanbanProperty];
83
- if (kanbanConfig?.enum) {
84
- if (kanbanConfig.enum instanceof Map) {
85
- return Array.from(kanbanConfig.enum.keys()).map(String);
86
- }
87
- return Object.keys(kanbanConfig.enum);
88
- }
89
- // Deduce from data
90
- const seen = new Set<string>();
91
- for (const row of dataController.data) {
92
- const val = getValueInPath(row as Record<string, unknown>, kanbanProperty);
93
- if (val !== null && val !== undefined) {
94
- seen.add(String(val));
95
- }
96
- }
97
- return Array.from(seen);
98
- }, [properties, kanbanProperty, dataController.data]);
99
-
100
- // ── Column labels ────────────────────────────────────────────────
101
- const columnLabels = useMemo(() => {
102
- const kanbanConfig = properties[kanbanProperty];
103
- const labels: Record<string, string> = {};
104
- for (const col of columns) {
105
- labels[col] = getEnumLabel(kanbanConfig?.enum, col);
106
- }
107
- return labels;
108
- }, [properties, kanbanProperty, columns]);
109
-
110
- // ── Resolve title property ───────────────────────────────────────
111
- const titlePropertyKey = useMemo(
112
- () => resolveTitlePropertyKey(order, properties, idProperty, titleProperty),
113
- [titleProperty, order, properties, idProperty]
114
- );
115
-
116
- // ── Preview properties (up to 2) ─────────────────────────────────
117
- const previewProperties = useMemo(() => {
118
- const result: { key: string; property: CollectionPropertyConfig }[] = [];
119
- for (const key of order) {
120
- if (key === titlePropertyKey || key === kanbanProperty) continue;
121
- const prop = properties[key];
122
- if (prop && !prop.hideFromCollection) {
123
- result.push({ key, property: prop });
124
- if (result.length >= 2) break;
125
- }
126
- }
127
- return result;
128
- }, [order, properties, titlePropertyKey, kanbanProperty]);
129
-
130
- // ── Convert data to BoardItem<T>[] ───────────────────────────────
131
- const boardItems = useMemo<BoardItem<T>[]>(() => {
132
- return dataController.data.map((row, index) => {
133
- const id = getValueInPath(row as Record<string, unknown>, idProperty);
134
- return {
135
- id: id !== null && id !== undefined ? String(id) : String(index),
136
- data: row,
137
- };
138
- });
139
- }, [dataController.data, idProperty]);
140
-
141
- // ── Assign column ────────────────────────────────────────────────
142
- const assignColumn = useCallback(
143
- (item: BoardItem<T>): string => {
144
- const val = getValueInPath(item.data as Record<string, unknown>, kanbanProperty);
145
- const strVal = val !== null && val !== undefined ? String(val) : "";
146
- if (columns.includes(strVal)) return strVal;
147
- return columns[0] ?? "";
148
- },
149
- [kanbanProperty, columns]
150
- );
151
-
152
- // ── Item component ───────────────────────────────────────────────
153
- const ItemComponent = useMemo(() => {
154
- function KanbanCard(props: BoardItemViewProps<T>) {
155
- const { item } = props;
156
- const titleValue = getValueInPath(
157
- item.data as Record<string, unknown>,
158
- titlePropertyKey
159
- );
160
-
161
- return (
162
- <Card
163
- onClick={() => onRowClick?.(item.data)}
164
- className={cls(
165
- "p-3",
166
- cardClickableMixin,
167
- props.isDragging && cardSelectedMixin,
168
- props.isDragging && "shadow-lg opacity-75"
169
- )}
170
- >
171
- <Typography variant="subtitle2" noWrap>
172
- {String(titleValue ?? "")}
173
- </Typography>
174
- {previewProperties.map(({ key, property }) => {
175
- const value = getValueInPath(
176
- item.data as Record<string, unknown>,
177
- key
178
- );
179
-
180
- if (cellRenderer) {
181
- const custom = cellRenderer({
182
- row: item.data,
183
- propertyKey: key,
184
- property,
185
- value,
186
- size: "tiny",
187
- });
188
- if (custom !== undefined) {
189
- return (
190
- <div key={key} className="mt-1">
191
- {custom}
192
- </div>
193
- );
194
- }
195
- }
196
-
197
- return (
198
- <div key={key} className="mt-1">
199
- <DefaultCellRenderer
200
- row={item.data}
201
- propertyKey={key}
202
- property={property}
203
- value={value}
204
- size="tiny"
205
- />
206
- </div>
207
- );
208
- })}
209
- </Card>
210
- );
211
- }
212
- return KanbanCard;
213
- }, [titlePropertyKey, previewProperties, cellRenderer, onRowClick]);
214
-
215
- // ── Add item to column ───────────────────────────────────────────
216
- const handleAddItemToColumn = useCallback(
217
- (column: string) => {
218
- onRowCreate?.({ [kanbanProperty]: column });
219
- },
220
- [onRowCreate, kanbanProperty]
221
- );
222
-
223
- if (columns.length === 0 && !dataController.loading) {
224
- return (
225
- <div className="flex items-center justify-center p-8">
226
- {emptyComponent ?? (
227
- <Typography variant="body2" color="secondary">
228
- No columns available for kanban view.
229
- </Typography>
230
- )}
231
- </div>
232
- );
233
- }
234
-
235
- return (
236
- <KanbanView<T, string>
237
- columns={columns}
238
- columnLabels={columnLabels as Record<string, string>}
239
- data={boardItems}
240
- assignColumn={assignColumn}
241
- ItemComponent={ItemComponent}
242
- onAddItemToColumn={onRowCreate ? handleAddItemToColumn : undefined}
243
- className={className}
244
- />
245
- );
246
- }
@@ -1,240 +0,0 @@
1
- "use client";
2
- import React, { useCallback, useMemo } from "react";
3
- import { ListView } from "../ListView";
4
- import { Typography } from "../../components/Typography";
5
- import { Checkbox } from "../../components/Checkbox";
6
- import { DefaultCellRenderer } from "./DefaultCellRenderer";
7
- import { cls } from "../../util";
8
- import type {
9
- CollectionPropertyConfig,
10
- CollectionDataController,
11
- CellRendererOverride,
12
- CollectionViewSize,
13
- CollectionSelectionController,
14
- } from "./CollectionViewTypes";
15
- import { resolveTitlePropertyKey } from "./resolveTitleProperty";
16
-
17
- import { getValueInPath } from "./utils";
18
-
19
- /**
20
- * Props for the {@link CollectionListView} component.
21
- * @group Collection View
22
- */
23
- export type CollectionListViewProps<T = Record<string, unknown>> = {
24
- dataController: CollectionDataController<T>;
25
- properties: Record<string, CollectionPropertyConfig>;
26
- propertiesOrder?: string[];
27
- idProperty?: string;
28
- titleProperty?: string;
29
- onRowClick?: (row: T) => void;
30
- cellRenderer?: CellRendererOverride<T>;
31
- size?: CollectionViewSize;
32
- selectionEnabled?: boolean;
33
- selectionController?: CollectionSelectionController<T>;
34
- highlightedItems?: T[];
35
- emptyComponent?: React.ReactNode;
36
- className?: string;
37
- };
38
-
39
- /**
40
- * Headless list view that wraps {@link ListView}.
41
- *
42
- * Each row displays a title (bold), subtitle with 1–2 secondary property values,
43
- * and optional selection support.
44
- *
45
- * @group Collection View
46
- */
47
- export function CollectionListView<T extends Record<string, unknown> = Record<string, unknown>>({
48
- dataController,
49
- properties,
50
- propertiesOrder,
51
- idProperty = "id",
52
- titleProperty,
53
- onRowClick,
54
- cellRenderer,
55
- size = "m",
56
- selectionEnabled,
57
- selectionController,
58
- highlightedItems,
59
- emptyComponent,
60
- className,
61
- }: CollectionListViewProps<T>) {
62
- const order = useMemo(
63
- () => propertiesOrder ?? Object.keys(properties),
64
- [propertiesOrder, properties]
65
- );
66
-
67
- // ── Resolve title property ───────────────────────────────────────
68
- const titlePropertyKey = useMemo(
69
- () => resolveTitlePropertyKey(order, properties, idProperty, titleProperty),
70
- [titleProperty, order, properties, idProperty]
71
- );
72
-
73
- // ── Subtitle properties (up to 2) ────────────────────────────────
74
- const subtitleProperties = useMemo(() => {
75
- const result: { key: string; property: CollectionPropertyConfig }[] = [];
76
- for (const key of order) {
77
- if (key === titlePropertyKey) continue;
78
- const prop = properties[key];
79
- if (prop && !prop.hideFromCollection) {
80
- result.push({ key, property: prop });
81
- if (result.length >= 2) break;
82
- }
83
- }
84
- return result;
85
- }, [order, properties, titlePropertyKey]);
86
-
87
- // ── Selection IDs ────────────────────────────────────────────────
88
- const selectedIds = useMemo(() => {
89
- if (!selectionController?.selectedItems) return undefined;
90
- const ids = new Set<string | number>();
91
- for (const item of selectionController.selectedItems) {
92
- const id = getValueInPath(item as Record<string, unknown>, idProperty);
93
- if (id !== undefined && id !== null) {
94
- ids.add(id as string | number);
95
- }
96
- }
97
- return ids;
98
- }, [selectionController?.selectedItems, idProperty]);
99
-
100
- // ── Highlighted IDs ──────────────────────────────────────────────
101
- const highlightedIds = useMemo(() => {
102
- if (!highlightedItems) return undefined;
103
- const ids = new Set<string | number>();
104
- for (const item of highlightedItems) {
105
- const id = getValueInPath(item as Record<string, unknown>, idProperty);
106
- if (id !== undefined && id !== null) {
107
- ids.add(id as string | number);
108
- }
109
- }
110
- return ids;
111
- }, [highlightedItems, idProperty]);
112
-
113
- // ── Selection handler ────────────────────────────────────────────
114
- const handleSelectionChange = useCallback(
115
- (item: T, selected: boolean) => {
116
- if (!selectionController) return;
117
- selectionController.setSelectedItems((prev) => {
118
- if (selected) {
119
- return [...prev, item];
120
- }
121
- const itemId = getValueInPath(item as Record<string, unknown>, idProperty);
122
- return prev.filter((existing) => {
123
- const existingId = getValueInPath(existing as Record<string, unknown>, idProperty);
124
- return existingId !== itemId;
125
- });
126
- });
127
- },
128
- [selectionController, idProperty]
129
- );
130
-
131
- // ── Render row ───────────────────────────────────────────────────
132
- const renderRow = useCallback(
133
- (params: {
134
- item: T;
135
- index: number;
136
- style: React.CSSProperties;
137
- className: string;
138
- selected: boolean;
139
- highlighted: boolean;
140
- isLast: boolean;
141
- onClick: (e: React.MouseEvent) => void;
142
- onSelectionChange: (selected: boolean) => void;
143
- }): React.ReactNode => {
144
- const { item, style, className: rowClassName, selected, highlighted, onClick, onSelectionChange } = params;
145
- const titleValue = getValueInPath(item as Record<string, unknown>, titlePropertyKey);
146
-
147
- return (
148
- <div
149
- style={style}
150
- className={cls(
151
- "flex items-center gap-3 px-4 cursor-pointer",
152
- "hover:bg-surface-50 dark:hover:bg-surface-700",
153
- "transition-colors duration-100",
154
- selected && "bg-primary-50 dark:bg-primary-900/20",
155
- highlighted && "bg-surface-100 dark:bg-surface-800",
156
- rowClassName
157
- )}
158
- onClick={onClick}
159
- >
160
- {/* Selection checkbox */}
161
- {selectionEnabled && (
162
- <div className="flex-shrink-0" onClick={(e) => e.stopPropagation()}>
163
- <Checkbox
164
- checked={selected}
165
- onCheckedChange={onSelectionChange}
166
- size="small"
167
- />
168
- </div>
169
- )}
170
-
171
- {/* Content */}
172
- <div className="flex-1 min-w-0 py-1">
173
- {/* Title */}
174
- <Typography variant="subtitle2" noWrap>
175
- {String(titleValue ?? "")}
176
- </Typography>
177
-
178
- {/* Subtitle properties */}
179
- {subtitleProperties.length > 0 && (
180
- <div className="flex items-center gap-2">
181
- {subtitleProperties.map(({ key, property }) => {
182
- const value = getValueInPath(item as Record<string, unknown>, key);
183
-
184
- if (cellRenderer) {
185
- const custom = cellRenderer({
186
- row: item,
187
- propertyKey: key,
188
- property,
189
- value,
190
- size: "tiny",
191
- });
192
- if (custom !== undefined) {
193
- return <React.Fragment key={key}>{custom}</React.Fragment>;
194
- }
195
- }
196
-
197
- return (
198
- <React.Fragment key={key}>
199
- <DefaultCellRenderer
200
- row={item}
201
- propertyKey={key}
202
- property={property}
203
- value={value}
204
- size="tiny"
205
- />
206
- </React.Fragment>
207
- );
208
- })}
209
- </div>
210
- )}
211
- </div>
212
- </div>
213
- );
214
- },
215
- [titlePropertyKey, subtitleProperties, cellRenderer, selectionEnabled]
216
- );
217
-
218
- return (
219
- <div className={cls("w-full h-full overflow-auto", className)}>
220
- <ListView<T>
221
- data={dataController.data}
222
- dataLoading={dataController.loading}
223
- noMoreToLoad={dataController.noMoreToLoad}
224
- dataLoadingError={dataController.error}
225
- itemCount={dataController.itemCount}
226
- setItemCount={dataController.setItemCount}
227
- pageSize={dataController.pageSize}
228
- paginationEnabled={dataController.paginationEnabled}
229
- onItemClick={onRowClick}
230
- selectedIds={selectedIds}
231
- highlightedIds={highlightedIds}
232
- selectionEnabled={!!selectionEnabled}
233
- onSelectionChange={handleSelectionChange}
234
- size={size}
235
- renderRow={renderRow}
236
- emptyComponent={emptyComponent}
237
- />
238
- </div>
239
- );
240
- }