@navikt/ds-react 8.10.2 → 8.10.4

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 (200) hide show
  1. package/cjs/action-menu/ActionMenu.js +1 -1
  2. package/cjs/action-menu/ActionMenu.js.map +1 -1
  3. package/cjs/data/stories/Data.test-data.d.ts +24 -0
  4. package/cjs/data/stories/Data.test-data.js +1616 -0
  5. package/cjs/data/stories/Data.test-data.js.map +1 -0
  6. package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
  7. package/cjs/data/table/column-header/DataTableColumnHeader.js +4 -2
  8. package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  9. package/cjs/data/table/column-header/useTableColumnResize.d.ts +39 -14
  10. package/cjs/data/table/column-header/useTableColumnResize.js +37 -39
  11. package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
  12. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
  13. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js +32 -0
  14. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
  15. package/cjs/data/table/helpers/collectTableRowEntries.d.ts +13 -5
  16. package/cjs/data/table/helpers/collectTableRowEntries.js +26 -19
  17. package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -1
  18. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
  19. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js +112 -0
  20. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
  21. package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
  22. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
  23. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  24. package/cjs/data/table/helpers/selection/selection.types.d.ts +1 -0
  25. package/cjs/data/table/helpers/table-keyboard.d.ts +1 -2
  26. package/cjs/data/table/helpers/table-keyboard.js +1 -2
  27. package/cjs/data/table/helpers/table-keyboard.js.map +1 -1
  28. package/cjs/data/table/hooks/useColumnOptions.js +18 -5
  29. package/cjs/data/table/hooks/useColumnOptions.js.map +1 -1
  30. package/cjs/data/table/hooks/useTableDetailsPanel.d.ts +62 -0
  31. package/cjs/data/table/hooks/{useTableExpansion.js → useTableDetailsPanel.js} +26 -19
  32. package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -0
  33. package/cjs/data/table/hooks/useTableItems.d.ts +18 -17
  34. package/cjs/data/table/hooks/useTableItems.js +27 -15
  35. package/cjs/data/table/hooks/useTableItems.js.map +1 -1
  36. package/cjs/data/table/hooks/useTableSelection.d.ts +6 -3
  37. package/cjs/data/table/hooks/useTableSelection.js +10 -4
  38. package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
  39. package/cjs/data/table/index.d.ts +1 -2
  40. package/cjs/data/table/index.js +22 -12
  41. package/cjs/data/table/index.js.map +1 -1
  42. package/cjs/data/table/root/DataTable.types.d.ts +12 -10
  43. package/cjs/data/table/root/DataTableRoot.context.d.ts +5 -1
  44. package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
  45. package/cjs/data/table/root/DataTableRoot.d.ts +79 -115
  46. package/cjs/data/table/root/DataTableRoot.js +167 -39
  47. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  48. package/cjs/data/table/root/DataTableRoot.legacy.d.ts +177 -0
  49. package/cjs/data/table/root/DataTableRoot.legacy.js +104 -0
  50. package/cjs/data/table/root/DataTableRoot.legacy.js.map +1 -0
  51. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
  52. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js +21 -0
  53. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
  54. package/cjs/data/table/tr/DataTableTr.js +11 -11
  55. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  56. package/cjs/form/checkbox/Checkbox.js +1 -0
  57. package/cjs/form/checkbox/Checkbox.js.map +1 -1
  58. package/cjs/form/radio/Radio.js +7 -1
  59. package/cjs/form/radio/Radio.js.map +1 -1
  60. package/cjs/modal/types.d.ts +8 -4
  61. package/cjs/utils/components/dismissablelayer/DismissableLayer.js +1 -1
  62. package/cjs/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
  63. package/cjs/utils/components/floating/Floating.d.ts +16 -1
  64. package/cjs/utils/components/floating/Floating.js +50 -13
  65. package/cjs/utils/components/floating/Floating.js.map +1 -1
  66. package/cjs/utils/components/floating-menu/Menu.js +1 -1
  67. package/cjs/utils/components/floating-menu/Menu.js.map +1 -1
  68. package/cjs/utils/helpers/create-strict-context.js +1 -1
  69. package/cjs/utils/helpers/create-strict-context.js.map +1 -1
  70. package/cjs/utils/hooks/useControllableState.d.ts +5 -5
  71. package/cjs/utils/hooks/useControllableState.js.map +1 -1
  72. package/cjs/utils/hooks/useValueAsRef.js +1 -1
  73. package/cjs/utils/hooks/useValueAsRef.js.map +1 -1
  74. package/cjs/utils-external/hooks/useId.js +1 -1
  75. package/cjs/utils-external/hooks/useId.js.map +1 -1
  76. package/esm/action-menu/ActionMenu.js +1 -1
  77. package/esm/action-menu/ActionMenu.js.map +1 -1
  78. package/esm/data/stories/Data.test-data.d.ts +24 -0
  79. package/esm/data/stories/Data.test-data.js +1607 -0
  80. package/esm/data/stories/Data.test-data.js.map +1 -0
  81. package/esm/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
  82. package/esm/data/table/column-header/DataTableColumnHeader.js +4 -2
  83. package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  84. package/esm/data/table/column-header/useTableColumnResize.d.ts +39 -14
  85. package/esm/data/table/column-header/useTableColumnResize.js +38 -40
  86. package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
  87. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
  88. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js +27 -0
  89. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
  90. package/esm/data/table/helpers/collectTableRowEntries.d.ts +13 -5
  91. package/esm/data/table/helpers/collectTableRowEntries.js +26 -19
  92. package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -1
  93. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
  94. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js +109 -0
  95. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
  96. package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
  97. package/esm/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
  98. package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  99. package/esm/data/table/helpers/selection/selection.types.d.ts +1 -0
  100. package/esm/data/table/helpers/table-keyboard.d.ts +1 -2
  101. package/esm/data/table/helpers/table-keyboard.js +1 -2
  102. package/esm/data/table/helpers/table-keyboard.js.map +1 -1
  103. package/esm/data/table/hooks/useColumnOptions.js +18 -5
  104. package/esm/data/table/hooks/useColumnOptions.js.map +1 -1
  105. package/esm/data/table/hooks/useTableDetailsPanel.d.ts +62 -0
  106. package/esm/data/table/hooks/useTableDetailsPanel.js +58 -0
  107. package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -0
  108. package/esm/data/table/hooks/useTableItems.d.ts +18 -17
  109. package/esm/data/table/hooks/useTableItems.js +27 -15
  110. package/esm/data/table/hooks/useTableItems.js.map +1 -1
  111. package/esm/data/table/hooks/useTableSelection.d.ts +6 -3
  112. package/esm/data/table/hooks/useTableSelection.js +10 -4
  113. package/esm/data/table/hooks/useTableSelection.js.map +1 -1
  114. package/esm/data/table/index.d.ts +1 -2
  115. package/esm/data/table/index.js +21 -1
  116. package/esm/data/table/index.js.map +1 -1
  117. package/esm/data/table/root/DataTable.types.d.ts +12 -10
  118. package/esm/data/table/root/DataTableRoot.context.d.ts +5 -1
  119. package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
  120. package/esm/data/table/root/DataTableRoot.d.ts +79 -115
  121. package/esm/data/table/root/DataTableRoot.js +174 -37
  122. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  123. package/esm/data/table/root/DataTableRoot.legacy.d.ts +177 -0
  124. package/esm/data/table/root/DataTableRoot.legacy.js +59 -0
  125. package/esm/data/table/root/DataTableRoot.legacy.js.map +1 -0
  126. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
  127. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js +16 -0
  128. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
  129. package/esm/data/table/tr/DataTableTr.js +11 -11
  130. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  131. package/esm/form/checkbox/Checkbox.js +1 -0
  132. package/esm/form/checkbox/Checkbox.js.map +1 -1
  133. package/esm/form/radio/Radio.js +7 -1
  134. package/esm/form/radio/Radio.js.map +1 -1
  135. package/esm/modal/types.d.ts +8 -4
  136. package/esm/utils/components/dismissablelayer/DismissableLayer.js +1 -1
  137. package/esm/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
  138. package/esm/utils/components/floating/Floating.d.ts +16 -1
  139. package/esm/utils/components/floating/Floating.js +48 -13
  140. package/esm/utils/components/floating/Floating.js.map +1 -1
  141. package/esm/utils/components/floating-menu/Menu.js +2 -2
  142. package/esm/utils/components/floating-menu/Menu.js.map +1 -1
  143. package/esm/utils/helpers/create-strict-context.js +1 -1
  144. package/esm/utils/helpers/create-strict-context.js.map +1 -1
  145. package/esm/utils/hooks/useControllableState.d.ts +5 -5
  146. package/esm/utils/hooks/useControllableState.js.map +1 -1
  147. package/esm/utils/hooks/useValueAsRef.js +1 -1
  148. package/esm/utils/hooks/useValueAsRef.js.map +1 -1
  149. package/esm/utils-external/hooks/useId.js +1 -1
  150. package/esm/utils-external/hooks/useId.js.map +1 -1
  151. package/package.json +3 -3
  152. package/src/action-menu/ActionMenu.tsx +1 -1
  153. package/src/data/stories/Data.test-data.tsx +1703 -0
  154. package/src/data/table/column-header/DataTableColumnHeader.tsx +11 -7
  155. package/src/data/table/column-header/useTableColumnResize.ts +95 -54
  156. package/src/data/table/details-panel-row/DataTableDetailsPanelRow.tsx +53 -0
  157. package/src/data/table/helpers/collectTableRowEntries.ts +55 -31
  158. package/src/data/table/helpers/selection/SelectionSubtreeHelper.test.ts +66 -0
  159. package/src/data/table/helpers/selection/SelectionSubtreeHelper.ts +162 -0
  160. package/src/data/table/helpers/selection/getMultipleSelectProps.ts +57 -20
  161. package/src/data/table/helpers/selection/selection.types.ts +1 -0
  162. package/src/data/table/helpers/table-keyboard.ts +1 -2
  163. package/src/data/table/hooks/__tests__/useTableItems.test.ts +27 -6
  164. package/src/data/table/hooks/__tests__/useTableSelection.test.ts +182 -58
  165. package/src/data/table/hooks/useColumnOptions.ts +19 -5
  166. package/src/data/table/hooks/useTableDetailsPanel.tsx +182 -0
  167. package/src/data/table/hooks/useTableItems.ts +74 -60
  168. package/src/data/table/hooks/useTableSelection.ts +27 -12
  169. package/src/data/table/index.tsx +5 -3
  170. package/src/data/table/root/DataTable.types.ts +25 -10
  171. package/src/data/table/root/DataTableRoot.context.ts +5 -1
  172. package/src/data/table/root/DataTableRoot.legacy.tsx +297 -0
  173. package/src/data/table/root/DataTableRoot.tsx +483 -219
  174. package/src/data/table/sub-row-toggle/DataTableSubRowToggle.tsx +39 -0
  175. package/src/data/table/tr/DataTableTr.tsx +14 -13
  176. package/src/form/checkbox/Checkbox.tsx +1 -0
  177. package/src/form/radio/Radio.tsx +7 -1
  178. package/src/modal/types.ts +8 -4
  179. package/src/utils/components/dismissablelayer/DismissableLayer.tsx +1 -1
  180. package/src/utils/components/floating/Floating.tsx +56 -13
  181. package/src/utils/components/floating-menu/Menu.tsx +4 -1
  182. package/src/utils/helpers/create-strict-context.tsx +1 -1
  183. package/src/utils/hooks/useControllableState.ts +11 -8
  184. package/src/utils/hooks/useValueAsRef.ts +1 -1
  185. package/src/utils-external/hooks/useId.ts +1 -1
  186. package/cjs/data/table/hooks/useTableExpansion.d.ts +0 -29
  187. package/cjs/data/table/hooks/useTableExpansion.js.map +0 -1
  188. package/cjs/data/table/root/DataTableAuto.d.ts +0 -174
  189. package/cjs/data/table/root/DataTableAuto.js +0 -206
  190. package/cjs/data/table/root/DataTableAuto.js.map +0 -1
  191. package/esm/data/table/hooks/useTableExpansion.d.ts +0 -29
  192. package/esm/data/table/hooks/useTableExpansion.js +0 -51
  193. package/esm/data/table/hooks/useTableExpansion.js.map +0 -1
  194. package/esm/data/table/root/DataTableAuto.d.ts +0 -174
  195. package/esm/data/table/root/DataTableAuto.js +0 -170
  196. package/esm/data/table/root/DataTableAuto.js.map +0 -1
  197. package/src/data/table/hooks/__tests__/useTableExpansion.test.tsx +0 -115
  198. package/src/data/table/hooks/useTableExpansion.tsx +0 -141
  199. package/src/data/table/root/DataTableAuto.test.tsx +0 -118
  200. package/src/data/table/root/DataTableAuto.tsx +0 -603
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectionSubtreeHelper = void 0;
4
+ /**
5
+ * Helper class for managing selection state in a tree structure.
6
+ * - It provides methods to get selectable keys in a subtree
7
+ * - Compute selection statistics for a subtree
8
+ * - Determine if a subtree is fully selected.
9
+ *
10
+ * Results of selection statistics are cached to optimize performance for repeated calls on the same subtree.
11
+ */
12
+ class SelectionSubtreeHelper {
13
+ constructor({ childRowIdsById, disabledKeysSet, selectedKeysSet, }) {
14
+ this.selectionStatsCache = new Map();
15
+ this.childRowIdsById = childRowIdsById !== null && childRowIdsById !== void 0 ? childRowIdsById : new Map();
16
+ this.disabledKeysSet = disabledKeysSet;
17
+ this.selectedKeysSet = selectedKeysSet;
18
+ }
19
+ getSelectableKeys(rootIds) {
20
+ var _a;
21
+ const visitedKeys = new Set();
22
+ const selectableKeys = [];
23
+ const stack = [...rootIds].reverse();
24
+ while (stack.length > 0) {
25
+ const key = stack.pop();
26
+ if (key == null || visitedKeys.has(key)) {
27
+ continue;
28
+ }
29
+ visitedKeys.add(key);
30
+ if (!this.disabledKeysSet.has(key)) {
31
+ selectableKeys.push(key);
32
+ }
33
+ const childRowIds = (_a = this.childRowIdsById.get(key)) !== null && _a !== void 0 ? _a : [];
34
+ for (let childIndex = childRowIds.length - 1; childIndex >= 0; childIndex--) {
35
+ stack.push(childRowIds[childIndex]);
36
+ }
37
+ }
38
+ return selectableKeys;
39
+ }
40
+ /**
41
+ * Returns the number of selectable and selected rows in the subtree of the given root ID.
42
+ * Results are cached after the first computation to optimize repeated calls for the same root ID.
43
+ *
44
+ * The selectable count excludes disabled rows, and the selected count excludes disabled rows that are selected.
45
+ * The method is implemented iteratively to handle deep trees without hitting call stack limits.
46
+ *
47
+ * How it works:
48
+ * - Manually add root ID to stack to get processing going. Note that the ready-flag is `false`.
49
+ * - Pop stack until empty. For each entry:
50
+ * - - If entry is already cached, skip it.
51
+ * - - If entry is not ready, push it back as ready and push all its children as not ready.
52
+ * - - If entry is ready, compute its stats based on its own state and the stats of its children, then cache the result.
53
+ * - Since we add all the children to the stack after pushing element with ready: true, while "popping" the stack we will always encounter the children before their parent is ready, ensuring that the stats for all children are computed and cached before computing the stats for their parent.
54
+ * - Finally, return the cached stats for the root ID.
55
+ */
56
+ getSelectionStats(rootId) {
57
+ var _a, _b, _c;
58
+ const cachedStats = this.selectionStatsCache.get(rootId);
59
+ if (cachedStats) {
60
+ return cachedStats;
61
+ }
62
+ /* Compute subtree totals iteratively so deep trees do not depend on call stack depth. */
63
+ const stack = [
64
+ { key: rootId, ready: false },
65
+ ];
66
+ while (stack.length > 0) {
67
+ const entry = stack.pop();
68
+ if (!entry) {
69
+ continue;
70
+ }
71
+ if (this.selectionStatsCache.has(entry.key)) {
72
+ continue;
73
+ }
74
+ if (entry.ready) {
75
+ let selectableCount = this.disabledKeysSet.has(entry.key) ? 0 : 1;
76
+ let selectedCount = !this.disabledKeysSet.has(entry.key) &&
77
+ this.selectedKeysSet.has(entry.key)
78
+ ? 1
79
+ : 0;
80
+ for (const childKey of (_a = this.childRowIdsById.get(entry.key)) !== null && _a !== void 0 ? _a : []) {
81
+ const childStats = this.selectionStatsCache.get(childKey);
82
+ if (!childStats) {
83
+ continue;
84
+ }
85
+ selectableCount += childStats.selectableCount;
86
+ selectedCount += childStats.selectedCount;
87
+ }
88
+ this.selectionStatsCache.set(entry.key, {
89
+ selectableCount,
90
+ selectedCount,
91
+ });
92
+ continue;
93
+ }
94
+ stack.push({ key: entry.key, ready: true });
95
+ for (const childKey of (_b = this.childRowIdsById.get(entry.key)) !== null && _b !== void 0 ? _b : []) {
96
+ if (!this.selectionStatsCache.has(childKey)) {
97
+ stack.push({ key: childKey, ready: false });
98
+ }
99
+ }
100
+ }
101
+ return ((_c = this.selectionStatsCache.get(rootId)) !== null && _c !== void 0 ? _c : {
102
+ selectableCount: 0,
103
+ selectedCount: 0,
104
+ });
105
+ }
106
+ isFullySelected(rootId) {
107
+ const stats = this.getSelectionStats(rootId);
108
+ return (stats.selectableCount > 0 && stats.selectedCount === stats.selectableCount);
109
+ }
110
+ }
111
+ exports.SelectionSubtreeHelper = SelectionSubtreeHelper;
112
+ //# sourceMappingURL=SelectionSubtreeHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionSubtreeHelper.js","sourceRoot":"","sources":["../../../../../src/data/table/helpers/selection/SelectionSubtreeHelper.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,10 @@ type GetMultipleSelectPropsArgs = {
4
4
  selectedKeys: (string | number)[];
5
5
  setSelectedKeys: (keys: (string | number)[]) => void;
6
6
  disabledKeysSet: Set<string | number>;
7
- allRowKeys: (string | number)[];
7
+ visibleRowIds: (string | number)[];
8
+ childRowIdsById?: Map<string | number, (string | number)[]>;
8
9
  };
9
- declare function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys, disabledKeysSet, allRowKeys, }: GetMultipleSelectPropsArgs): {
10
+ declare function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys, disabledKeysSet, visibleRowIds, childRowIdsById, }: GetMultipleSelectPropsArgs): {
10
11
  getTheadCheckboxProps: () => CheckboxInputProps;
11
12
  getRowCheckboxProps: (key: string | number) => CheckboxInputProps;
12
13
  toggleSelection: (key: string | number) => void;
@@ -1,34 +1,53 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getMultipleSelectProps = getMultipleSelectProps;
4
- function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys, disabledKeysSet, allRowKeys, }) {
5
- const allRowKeysSet = new Set(allRowKeys);
6
- const selectableKeys = allRowKeys.filter((k) => !disabledKeysSet.has(k));
7
- const selectedSelectableCount = selectableKeys.filter((k) => selectedKeysSet.has(k)).length;
8
- const allSelectableSelected = selectableKeys.length > 0 &&
9
- selectedSelectableCount === selectableKeys.length;
4
+ const SelectionSubtreeHelper_1 = require("./SelectionSubtreeHelper");
5
+ function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys, disabledKeysSet, visibleRowIds, childRowIdsById, }) {
6
+ const subtreeHelper = new SelectionSubtreeHelper_1.SelectionSubtreeHelper({
7
+ childRowIdsById,
8
+ disabledKeysSet,
9
+ selectedKeysSet,
10
+ });
11
+ // Header selection traverses the visible roots and skips already visited
12
+ // descendants, so expanded trees stay linear in the number of rows.
13
+ const headerSelectableKeys = subtreeHelper.getSelectableKeys(visibleRowIds);
14
+ const headerSelectableKeysSet = new Set(headerSelectableKeys);
15
+ const selectedSelectableCount = headerSelectableKeys.filter((k) => selectedKeysSet.has(k)).length;
16
+ const allSelectableSelected = headerSelectableKeys.length > 0 &&
17
+ selectedSelectableCount === headerSelectableKeys.length;
10
18
  const indeterminate = selectedSelectableCount > 0 &&
11
- selectedSelectableCount < selectableKeys.length;
12
- const selectedKeysNotInView = selectedKeys.filter((k) => !allRowKeysSet.has(k));
19
+ selectedSelectableCount < headerSelectableKeys.length;
20
+ const selectedKeysNotInView = selectedKeys.filter((k) => !headerSelectableKeysSet.has(k));
13
21
  const disabledSelected = selectedKeys.filter((k) => disabledKeysSet.has(k));
14
- const preservedKeys = [...selectedKeysNotInView, ...disabledSelected];
22
+ const preservedKeys = [
23
+ ...new Set([...selectedKeysNotInView, ...disabledSelected]),
24
+ ];
25
+ const isGroupFullySelected = (key) => {
26
+ const groupStats = subtreeHelper.getSelectionStats(key);
27
+ return (groupStats.selectableCount > 0 &&
28
+ groupStats.selectedCount === groupStats.selectableCount);
29
+ };
15
30
  const handleToggleAll = () => {
16
31
  if (allSelectableSelected) {
17
32
  setSelectedKeys(preservedKeys);
18
33
  }
19
34
  else {
20
- setSelectedKeys([...new Set([...preservedKeys, ...selectableKeys])]);
35
+ setSelectedKeys([
36
+ ...new Set([...preservedKeys, ...headerSelectableKeys]),
37
+ ]);
21
38
  }
22
39
  };
23
40
  const handleToggleRow = (key) => {
24
41
  if (disabledKeysSet.has(key)) {
25
42
  return;
26
43
  }
27
- if (selectedKeysSet.has(key)) {
28
- setSelectedKeys(selectedKeys.filter((k) => k !== key));
44
+ const groupKeys = subtreeHelper.getSelectableKeys([key]);
45
+ if (isGroupFullySelected(key)) {
46
+ const groupKeysSet = new Set(groupKeys);
47
+ setSelectedKeys(selectedKeys.filter((selectedKey) => !groupKeysSet.has(selectedKey)));
29
48
  }
30
49
  else {
31
- setSelectedKeys([...selectedKeys, key]);
50
+ setSelectedKeys([...new Set([...selectedKeys, ...groupKeys])]);
32
51
  }
33
52
  };
34
53
  return {
@@ -36,13 +55,18 @@ function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys
36
55
  onChange: handleToggleAll,
37
56
  checked: allSelectableSelected,
38
57
  indeterminate,
39
- disabled: selectableKeys.length === 0,
40
- }),
41
- getRowCheckboxProps: (key) => ({
42
- onChange: () => handleToggleRow(key),
43
- checked: selectedKeysSet.has(key),
44
- disabled: disabledKeysSet.has(key),
58
+ disabled: headerSelectableKeys.length === 0,
45
59
  }),
60
+ getRowCheckboxProps: (key) => {
61
+ const groupStats = subtreeHelper.getSelectionStats(key);
62
+ return {
63
+ onChange: () => handleToggleRow(key),
64
+ checked: isGroupFullySelected(key),
65
+ indeterminate: groupStats.selectedCount > 0 &&
66
+ groupStats.selectedCount < groupStats.selectableCount,
67
+ disabled: disabledKeysSet.has(key),
68
+ };
69
+ },
46
70
  toggleSelection: handleToggleRow,
47
71
  };
48
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getMultipleSelectProps.js","sourceRoot":"","sources":["../../../../../src/data/table/helpers/selection/getMultipleSelectProps.ts"],"names":[],"mappings":";;AAyES,wDAAsB;AA/D/B,SAAS,sBAAsB,CAAC,EAC9B,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,UAAU,GACiB;IAC3B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzE,MAAM,uBAAuB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1D,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CACvB,CAAC,MAAM,CAAC;IAET,MAAM,qBAAqB,GACzB,cAAc,CAAC,MAAM,GAAG,CAAC;QACzB,uBAAuB,KAAK,cAAc,CAAC,MAAM,CAAC;IAEpD,MAAM,aAAa,GACjB,uBAAuB,GAAG,CAAC;QAC3B,uBAAuB,GAAG,cAAc,CAAC,MAAM,CAAC;IAElD,MAAM,qBAAqB,GAAG,YAAY,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAC7B,CAAC;IACF,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,CAAC,GAAG,qBAAqB,EAAE,GAAG,gBAAgB,CAAC,CAAC;IAEtE,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,IAAI,qBAAqB,EAAE,CAAC;YAC1B,eAAe,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAoB,EAAE,EAAE;QAC/C,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,qBAAqB,EAAE,GAAuB,EAAE,CAAC,CAAC;YAChD,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,qBAAqB;YAC9B,aAAa;YACb,QAAQ,EAAE,cAAc,CAAC,MAAM,KAAK,CAAC;SACtC,CAAC;QACF,mBAAmB,EAAE,CAAC,GAAoB,EAAsB,EAAE,CAAC,CAAC;YAClE,QAAQ,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC;YACpC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YACjC,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;SACnC,CAAC;QACF,eAAe,EAAE,eAAe;KACjC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"getMultipleSelectProps.js","sourceRoot":"","sources":["../../../../../src/data/table/helpers/selection/getMultipleSelectProps.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ type SelectionProps = {
8
8
  * When set to "single", only one row can be selected at a time (renders radio buttons).
9
9
  *
10
10
  * When set to "multiple", multiple rows can be selected (renders checkboxes).
11
+ * Nested rows use cascading selection, so selecting a parent toggles its descendants too.
11
12
  *
12
13
  * @default "none"
13
14
  */
@@ -16,8 +16,7 @@ type NavigationAction = {
16
16
  };
17
17
  /**
18
18
  * Maps keyboard events to navigation actions.
19
- * Supports arrow keys, Home/End (row navigation), Ctrl/Cmd+Home/End (table navigation),
20
- * and PageUp/PageDown (multi-row navigation).
19
+ * Supports arrow keys, Home/End (row navigation), Ctrl/Cmd+Home/End (table navigation).
21
20
  */
22
21
  declare function getNavigationAction(event: KeyboardEvent): NavigationAction | null;
23
22
  /**
@@ -10,8 +10,7 @@ const keyToCoord = {
10
10
  };
11
11
  /**
12
12
  * Maps keyboard events to navigation actions.
13
- * Supports arrow keys, Home/End (row navigation), Ctrl/Cmd+Home/End (table navigation),
14
- * and PageUp/PageDown (multi-row navigation).
13
+ * Supports arrow keys, Home/End (row navigation), Ctrl/Cmd+Home/End (table navigation).
15
14
  */
16
15
  function getNavigationAction(event) {
17
16
  const key = event.key;
@@ -1 +1 @@
1
- {"version":3,"file":"table-keyboard.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-keyboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-keyboard.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/table-keyboard.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useColumnOptions = useColumnOptions;
4
+ const react_1 = require("react");
4
5
  function useColumnOptions(columnDefinitions, options) {
5
6
  const { stickyColumns, selectionMode } = options;
6
7
  const hasSelection = selectionMode !== "none";
7
- return {
8
- stickySelection: selectionMode !== "none" && (stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.first) === "1",
9
- columns: columnDefinitions.map((colDef, index) => {
8
+ const columns = (0, react_1.useMemo)(() => {
9
+ return columnDefinitions.map((colDef, index) => {
10
10
  const isFirstSticky = (stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.first) === "1" && index === 0 && !hasSelection;
11
11
  const isLastSticky = (stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.last) === "1" && index === columnDefinitions.length - 1;
12
12
  return {
13
- isSticky: isFirstSticky ? "start" : isLastSticky ? "end" : false,
13
+ isSticky: isFirstSticky
14
+ ? "start"
15
+ : isLastSticky
16
+ ? "end"
17
+ : false,
14
18
  colDef,
15
19
  };
16
- }),
20
+ });
21
+ }, [
22
+ columnDefinitions,
23
+ hasSelection,
24
+ stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.first,
25
+ stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.last,
26
+ ]);
27
+ return {
28
+ stickySelection: selectionMode !== "none" && (stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.first) === "1",
29
+ columns,
17
30
  };
18
31
  }
19
32
  //# sourceMappingURL=useColumnOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnOptions.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useColumnOptions.ts"],"names":[],"mappings":";;AA8CS,4CAAgB;AAxBzB,SAAS,gBAAgB,CACvB,iBAAuC,EACvC,OAAyB;IAEzB,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEjD,MAAM,YAAY,GAAG,aAAa,KAAK,MAAM,CAAC;IAE9C,OAAO;QACL,eAAe,EAAE,aAAa,KAAK,MAAM,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,MAAK,GAAG;QACzE,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC/C,MAAM,aAAa,GACjB,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,MAAK,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YAC/D,MAAM,YAAY,GAChB,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,MAAK,GAAG,IAAI,KAAK,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YAExE,OAAO;gBACL,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;gBAChE,MAAM;aACP,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useColumnOptions.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useColumnOptions.ts"],"names":[],"mappings":";;AA4DS,4CAAgB;AA5DzB,iCAAgC;AAuBhC,SAAS,gBAAgB,CACvB,iBAAuC,EACvC,OAAyB;IAEzB,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEjD,MAAM,YAAY,GAAG,aAAa,KAAK,MAAM,CAAC;IAE9C,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC3B,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,aAAa,GACjB,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,MAAK,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YAC/D,MAAM,YAAY,GAChB,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,MAAK,GAAG,IAAI,KAAK,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YAExE,OAAO;gBACL,QAAQ,EAAE,aAAa;oBACrB,CAAC,CAAE,OAAiB;oBACpB,CAAC,CAAC,YAAY;wBACZ,CAAC,CAAE,KAAe;wBAClB,CAAC,CAAE,KAAe;gBACtB,MAAM;aACP,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE;QACD,iBAAiB;QACjB,YAAY;QACZ,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK;QACpB,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI;KACpB,CAAC,CAAC;IAEH,OAAO;QACL,eAAe,EAAE,aAAa,KAAK,MAAM,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,MAAK,GAAG;QACzE,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,62 @@
1
+ import React from "react";
2
+ type DetailsPanelProps<T> = {
3
+ /**
4
+ * Renders a details panel below the row when expanded.
5
+ * When provided, an expand toggle column is added automatically.
6
+ */
7
+ getContent?: (rowData: T) => React.ReactNode;
8
+ /**
9
+ * Determines whether a row can be expanded to show details panel content.
10
+ * @default () => true
11
+ */
12
+ isRowExpandable?: (rowData: T) => boolean;
13
+ /**
14
+ * Controlled list of expanded row IDs.
15
+ * Use with `onDetailsPanelChange` for controlled usage, or `defaultDetailsPanelRowIds` for uncontrolled.
16
+ */
17
+ expandedRowIds?: (string | number)[];
18
+ /**
19
+ * Initial list of expanded row IDs for uncontrolled usage.
20
+ * @default []
21
+ */
22
+ defaultExpandedRowIds?: (string | number)[];
23
+ /**
24
+ * Called when the list of expanded row IDs changes.
25
+ *
26
+ *
27
+ * TODO:
28
+ * - Docs: This pattern is called "Master / Detail" in general terms
29
+ */
30
+ onExpandedRowIdsChange?: (ids: (string | number)[]) => void;
31
+ /**
32
+ * Returns the height (in px) or `"auto"` for a row's details panel.
33
+ * When a number is returned, the panel scrolls within that fixed height.
34
+ * @default "auto"
35
+ */
36
+ getHeight?: (rowData: T) => number | "auto";
37
+ /**
38
+ * Shows an expand-all toggle button in the expand column header.
39
+ * @default false
40
+ */
41
+ showExpandAll?: boolean;
42
+ };
43
+ type DataTableDetailsPanelContextT = {
44
+ isExpanded: (id: string | number) => boolean;
45
+ isDetailsPanelExpandable: (id: string | number) => boolean;
46
+ toggleExpansion: (id: string | number) => void;
47
+ toggleAll: () => void;
48
+ isAllExpanded: boolean;
49
+ getDetailsPanelContent?: (row: unknown) => React.ReactNode;
50
+ getDetailsPanelHeight?: (row: unknown) => number | "auto";
51
+ showExpandAll: boolean;
52
+ enableDetailsPanel: boolean;
53
+ };
54
+ declare const useDataTableDetailsPanel: <S extends boolean = true>(strict?: S | undefined) => S extends true ? DataTableDetailsPanelContextT : DataTableDetailsPanelContextT | undefined;
55
+ declare function DataTableDetailsPanelProvider<T>({ children, detailsPanel, }: {
56
+ detailsPanel?: DetailsPanelProps<T>;
57
+ } & {
58
+ children: React.ReactNode;
59
+ }): React.JSX.Element;
60
+ declare function getDataTableDetailsPanelId(tableId: string, rowId: string | number): string;
61
+ export { DataTableDetailsPanelProvider, getDataTableDetailsPanelId, useDataTableDetailsPanel, };
62
+ export type { DetailsPanelProps };
@@ -33,28 +33,32 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.useDataTableExpansion = void 0;
37
- exports.DataTableExpansionProvider = DataTableExpansionProvider;
38
- exports.getDataTableExpansionId = getDataTableExpansionId;
36
+ exports.useDataTableDetailsPanel = void 0;
37
+ exports.DataTableDetailsPanelProvider = DataTableDetailsPanelProvider;
38
+ exports.getDataTableDetailsPanelId = getDataTableDetailsPanelId;
39
39
  const react_1 = __importStar(require("react"));
40
40
  const helpers_1 = require("../../../utils/helpers");
41
41
  const hooks_1 = require("../../../utils/hooks");
42
- const { Provider: DataTableExpansionContextProvider, useContext: useDataTableExpansion, } = (0, helpers_1.createStrictContext)({
43
- name: "DataTableExpansionContext",
44
- errorMessage: "useDataTableExpansion must be used within a DataTableExpansionProvider.",
42
+ const useTableItems_1 = require("./useTableItems");
43
+ const { Provider: DataTableDetailsPanelContextProvider, useContext: useDataTableDetailsPanel, } = (0, helpers_1.createStrictContext)({
44
+ name: "DataTableDetailsPanelContext",
45
+ errorMessage: "useDataTableDetailsPanel must be used within a DataTableDetailsPanelProvider.",
45
46
  });
46
- exports.useDataTableExpansion = useDataTableExpansion;
47
- function getDataTableExpansionId(tableId, rowId) {
48
- return `${tableId}-expansion-${rowId}`;
49
- }
50
- function DataTableExpansionProvider({ children, detailsPanelRowIds, defaultDetailsPanelRowIds = [], onDetailsPanelChange, itemDetails, getDetailsPanelContent, isDetailsPanelExpandable, getDetailsPanelHeight, showExpandAll = false, }) {
47
+ exports.useDataTableDetailsPanel = useDataTableDetailsPanel;
48
+ function DataTableDetailsPanelProvider({ children, detailsPanel = {}, }) {
49
+ const { expandedRowIds, defaultExpandedRowIds = [], onExpandedRowIdsChange, getContent, isRowExpandable, getHeight, showExpandAll = false, } = detailsPanel;
51
50
  const [expandedIds, setExpandedIds] = (0, hooks_1.useControllableState)({
52
- value: detailsPanelRowIds,
53
- defaultValue: defaultDetailsPanelRowIds,
54
- onChange: onDetailsPanelChange,
51
+ value: expandedRowIds,
52
+ defaultValue: defaultExpandedRowIds,
53
+ onChange: onExpandedRowIdsChange,
55
54
  });
55
+ /* TODO: False is just fallback until auto and root is merged */
56
+ const tableItemsContext = (0, useTableItems_1.useTableItemsContext)(false);
57
+ const { itemDetails } = tableItemsContext !== null && tableItemsContext !== void 0 ? tableItemsContext : {
58
+ itemDetails: new Map(),
59
+ };
56
60
  const expandableIds = react_1.default.useMemo(() => {
57
- if (!getDetailsPanelContent) {
61
+ if (!getContent) {
58
62
  return new Set();
59
63
  }
60
64
  const ids = new Set();
@@ -63,12 +67,12 @@ function DataTableExpansionProvider({ children, detailsPanelRowIds, defaultDetai
63
67
  if (level > 0) {
64
68
  continue;
65
69
  }
66
- if (!isDetailsPanelExpandable || isDetailsPanelExpandable(rowData)) {
70
+ if (!isRowExpandable || isRowExpandable(rowData)) {
67
71
  ids.add(id);
68
72
  }
69
73
  }
70
74
  return ids;
71
- }, [getDetailsPanelContent, isDetailsPanelExpandable, itemDetails]);
75
+ }, [getContent, isRowExpandable, itemDetails]);
72
76
  const isDetailsPanelExpandableById = (0, react_1.useCallback)((id) => expandableIds.has(id), [expandableIds]);
73
77
  const isExpanded = (0, react_1.useCallback)((id) => isDetailsPanelExpandableById(id) && expandedIds.includes(id), [expandedIds, isDetailsPanelExpandableById]);
74
78
  const toggleExpansion = (0, react_1.useCallback)((id) => {
@@ -84,6 +88,9 @@ function DataTableExpansionProvider({ children, detailsPanelRowIds, defaultDetai
84
88
  const toggleAll = (0, react_1.useCallback)(() => {
85
89
  setExpandedIds(isAllExpanded ? [] : Array.from(expandableIds));
86
90
  }, [expandableIds, isAllExpanded, setExpandedIds]);
87
- return (react_1.default.createElement(DataTableExpansionContextProvider, { isExpanded: isExpanded, isDetailsPanelExpandable: isDetailsPanelExpandableById, toggleExpansion: toggleExpansion, toggleAll: toggleAll, isAllExpanded: isAllExpanded, getDetailsPanelContent: getDetailsPanelContent, getDetailsPanelHeight: getDetailsPanelHeight, showExpandAll: showExpandAll, enableDetailsPanel: !!getDetailsPanelContent }, children));
91
+ return (react_1.default.createElement(DataTableDetailsPanelContextProvider, { isExpanded: isExpanded, isDetailsPanelExpandable: isDetailsPanelExpandableById, toggleExpansion: toggleExpansion, toggleAll: toggleAll, isAllExpanded: isAllExpanded, getDetailsPanelContent: getContent, getDetailsPanelHeight: getHeight, showExpandAll: showExpandAll, enableDetailsPanel: !!getContent }, children));
92
+ }
93
+ function getDataTableDetailsPanelId(tableId, rowId) {
94
+ return `${tableId}-expansion-${rowId}`;
88
95
  }
89
- //# sourceMappingURL=useTableExpansion.js.map
96
+ //# sourceMappingURL=useTableDetailsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableDetailsPanel.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useTableDetailsPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,29 +1,30 @@
1
- import { type ItemDetail } from "../helpers/collectTableRowEntries";
1
+ import { type ItemDetail, type TableRowEntryId } from "../helpers/collectTableRowEntries";
2
+ type SubRowsProps<T> = {
3
+ getRows?: (rowData: T) => T[];
4
+ expandedRowIds?: (string | number)[];
5
+ defaultExpandedRowIds?: (string | number)[];
6
+ isRowExpandable?: (rowData: T) => boolean;
7
+ onExpandedRowIdsChange?: (ids: (string | number)[]) => void;
8
+ };
2
9
  type UseTableItemsArgs<T> = {
3
10
  items: T[];
4
- getRowId?: (rowData: T, index: number) => string | number;
5
- /**
6
- * Master - Detail pattern props
7
- */
8
- /**
9
- * Expanded/Nested rows pattern props
10
- */
11
- getSubRows?: (rowData: T) => T[];
12
- expandedSubRowIds?: (string | number)[];
13
- defaultExpandedSubRowIds?: (string | number)[];
14
- isSubRowExpandable?: (rowData: T) => boolean;
15
- onExpandedSubRowIdsChange?: (ids: (string | number)[]) => void;
11
+ getRowId: (rowData: T, index: number) => TableRowEntryId;
12
+ subRows?: SubRowsProps<T>;
16
13
  };
17
14
  type useTableItemsReturn<T> = {
18
15
  items: T[];
19
16
  itemDetails: Map<T, ItemDetail<T>>;
20
- onExpandedSubRowIdsChange: (id: string | number) => void;
17
+ /** Row ids for the rows currently rendered in the table body. */
18
+ visibleRowIds: TableRowEntryId[];
19
+ /** Direct child ids for each row, used to traverse selection groups lazily. */
20
+ childRowIdsById: Map<TableRowEntryId, TableRowEntryId[]>;
21
+ onExpandedRowIdsChange: (id: string | number) => void;
21
22
  isSubRowExpanded: (id: string | number) => boolean;
22
23
  };
23
24
  declare function useTableItems<T>(args: UseTableItemsArgs<T>): useTableItemsReturn<T>;
24
- declare const TableItemsProvider: import("react").FC<useTableItemsReturn<any> & {
25
+ declare const TableItemsProvider: import("react").FC<Omit<useTableItemsReturn<any>, "childRowIdsById" | "visibleRowIds"> & {
25
26
  children: React.ReactNode;
26
27
  ref?: never;
27
- }>, useTableItemsContext: <S extends boolean = true>(strict?: S | undefined) => S extends true ? useTableItemsReturn<any> : useTableItemsReturn<any> | undefined;
28
+ }>, useTableItemsContext: <S extends boolean = true>(strict?: S | undefined) => S extends true ? Omit<useTableItemsReturn<any>, "childRowIdsById" | "visibleRowIds"> : Omit<useTableItemsReturn<any>, "childRowIdsById" | "visibleRowIds"> | undefined;
28
29
  export { useTableItems, TableItemsProvider, useTableItemsContext };
29
- export type { ItemDetail };
30
+ export type { ItemDetail, SubRowsProps };
@@ -7,39 +7,49 @@ const helpers_1 = require("../../../utils/helpers");
7
7
  const hooks_1 = require("../../../utils/hooks");
8
8
  const collectTableRowEntries_1 = require("../helpers/collectTableRowEntries");
9
9
  function useTableItems(args) {
10
- const { items, expandedSubRowIds, defaultExpandedSubRowIds, getSubRows, getRowId, onExpandedSubRowIdsChange, isSubRowExpandable, } = args;
10
+ const { items, subRows = {}, getRowId } = args;
11
+ const { expandedRowIds, defaultExpandedRowIds, getRows, onExpandedRowIdsChange, isRowExpandable, } = subRows;
11
12
  const [nestedSubRowsExpandedIds, setNestedSubRowsExpandedIds] = (0, hooks_1.useControllableState)({
12
- value: expandedSubRowIds,
13
- defaultValue: defaultExpandedSubRowIds !== null && defaultExpandedSubRowIds !== void 0 ? defaultExpandedSubRowIds : [],
14
- onChange: onExpandedSubRowIdsChange,
13
+ value: expandedRowIds,
14
+ defaultValue: defaultExpandedRowIds !== null && defaultExpandedRowIds !== void 0 ? defaultExpandedRowIds : [],
15
+ onChange: onExpandedRowIdsChange,
15
16
  });
16
17
  const expandedIdsSet = (0, react_1.useMemo)(() => new Set(nestedSubRowsExpandedIds), [nestedSubRowsExpandedIds]);
17
- const { itemDetails, visibleItems } = (0, react_1.useMemo)(() => {
18
- const rowEntriesMap = (0, collectTableRowEntries_1.collectTableRowEntries)({
18
+ const { itemDetails, visibleItems, visibleRowIds, childRowIdsById } = (0, react_1.useMemo)(() => {
19
+ const { itemDetails: rowEntriesMap, childRowIdsById: _childRowIdsById } = (0, collectTableRowEntries_1.collectTableRowEntries)({
19
20
  items,
20
21
  getRowId,
21
- getSubRows,
22
- isSubRowExpandable,
22
+ getRows,
23
+ isRowExpandable,
23
24
  });
24
25
  const localVisibleItems = [];
26
+ const localVisibleRowIds = [];
25
27
  const addVisibleRows = (rowData) => {
26
- localVisibleItems.push(rowData);
27
28
  const details = rowEntriesMap.get(rowData);
28
- if (!details || !expandedIdsSet.has(details.id)) {
29
- return;
29
+ if (!details) {
30
+ return [];
30
31
  }
31
- for (const childRow of details.children) {
32
- addVisibleRows(childRow);
32
+ localVisibleItems.push(rowData);
33
+ localVisibleRowIds.push(details.id);
34
+ const visibleDescendantRowIds = [];
35
+ if (expandedIdsSet.has(details.id)) {
36
+ for (const childRow of details.children) {
37
+ const childVisibleRowIds = addVisibleRows(childRow);
38
+ visibleDescendantRowIds.push(...childVisibleRowIds);
39
+ }
33
40
  }
41
+ return [details.id, ...visibleDescendantRowIds];
34
42
  };
35
43
  for (const rowData of items) {
36
44
  addVisibleRows(rowData);
37
45
  }
38
46
  return {
39
47
  visibleItems: localVisibleItems,
48
+ visibleRowIds: localVisibleRowIds,
49
+ childRowIdsById: _childRowIdsById,
40
50
  itemDetails: rowEntriesMap,
41
51
  };
42
- }, [getSubRows, items, getRowId, isSubRowExpandable, expandedIdsSet]);
52
+ }, [getRows, items, getRowId, isRowExpandable, expandedIdsSet]);
43
53
  const handleExpandedSubRowIdChange = (0, react_1.useCallback)((id) => {
44
54
  setNestedSubRowsExpandedIds((prev) => prev.includes(id)
45
55
  ? prev.filter((expandedId) => expandedId !== id)
@@ -48,7 +58,9 @@ function useTableItems(args) {
48
58
  return {
49
59
  items: visibleItems,
50
60
  itemDetails,
51
- onExpandedSubRowIdsChange: handleExpandedSubRowIdChange,
61
+ visibleRowIds,
62
+ childRowIdsById,
63
+ onExpandedRowIdsChange: handleExpandedSubRowIdChange,
52
64
  isSubRowExpanded: (id) => expandedIdsSet.has(id),
53
65
  };
54
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useTableItems.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useTableItems.ts"],"names":[],"mappings":";;;AAyHS,sCAAa;AAzHtB,iCAA6C;AAC7C,oDAA6D;AAC7D,gDAA4D;AAC5D,8EAG2C;AAgC3C,SAAS,aAAa,CAAI,IAA0B;IAClD,MAAM,EACJ,KAAK,EACL,iBAAiB,EACjB,wBAAwB,EACxB,UAAU,EACV,QAAQ,EACR,yBAAyB,EACzB,kBAAkB,GACnB,GAAG,IAAI,CAAC;IAET,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC,GAC3D,IAAA,4BAAoB,EAAC;QACnB,KAAK,EAAE,iBAAiB;QACxB,YAAY,EAAE,wBAAwB,aAAxB,wBAAwB,cAAxB,wBAAwB,GAAI,EAAE;QAC5C,QAAQ,EAAE,yBAAyB;KACpC,CAAC,CAAC;IAEL,MAAM,cAAc,GAAG,IAAA,eAAO,EAC5B,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,wBAAwB,CAAC,EACvC,CAAC,wBAAwB,CAAC,CAC3B,CAAC;IAEF,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACjD,MAAM,aAAa,GAAG,IAAA,+CAAsB,EAAC;YAC3C,KAAK;YACL,QAAQ;YACR,UAAU;YACV,kBAAkB;SACnB,CAAC,CAAC;QAEH,MAAM,iBAAiB,GAAQ,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,CAAC,OAAU,EAAE,EAAE;YACpC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEhC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE3C,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAChD,OAAO;YACT,CAAC;YAED,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACxC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,YAAY,EAAE,iBAAiB;YAC/B,WAAW,EAAE,aAAa;SAC3B,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC;IAEtE,MAAM,4BAA4B,GAAG,IAAA,mBAAW,EAC9C,CAAC,EAAmB,EAAE,EAAE;QACtB,2BAA2B,CAAC,CAAC,IAAI,EAAE,EAAE,CACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACf,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC;YAChD,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAClB,CAAC;IACJ,CAAC,EACD,CAAC,2BAA2B,CAAC,CAC9B,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,WAAW;QACX,yBAAyB,EAAE,4BAA4B;QACvD,gBAAgB,EAAE,CAAC,EAAmB,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,oBAAoB,EAAE;AACtE,oCAAoC;AACpC,IAAA,6BAAmB,EAA2B;IAC5C,IAAI,EAAE,mBAAmB;IACzB,YAAY,EACV,+DAA+D;CAClE,CAAC,CAAC;AAEmB,gDAAkB;AAAE,oDAAoB"}
1
+ {"version":3,"file":"useTableItems.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useTableItems.ts"],"names":[],"mappings":"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"}