@navikt/ds-react 8.10.1 → 8.10.3

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 (114) hide show
  1. package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +1 -1
  2. package/cjs/data/table/column-header/DataTableColumnHeader.js +16 -11
  3. package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  4. package/cjs/data/table/column-header/useTableColumnResize.d.ts +28 -4
  5. package/cjs/data/table/column-header/useTableColumnResize.js +144 -53
  6. package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
  7. package/cjs/data/table/helpers/collectTableRowEntries.d.ts +24 -0
  8. package/cjs/data/table/helpers/collectTableRowEntries.js +35 -0
  9. package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -0
  10. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
  11. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js +112 -0
  12. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
  13. package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
  14. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
  15. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  16. package/cjs/data/table/helpers/selection/selection.types.d.ts +1 -0
  17. package/cjs/data/table/helpers/table-keyboard.d.ts +1 -2
  18. package/cjs/data/table/helpers/table-keyboard.js +1 -5
  19. package/cjs/data/table/helpers/table-keyboard.js.map +1 -1
  20. package/cjs/data/table/hooks/useTableExpansion.d.ts +7 -6
  21. package/cjs/data/table/hooks/useTableExpansion.js +42 -15
  22. package/cjs/data/table/hooks/useTableExpansion.js.map +1 -1
  23. package/cjs/data/table/hooks/useTableItems.d.ts +33 -0
  24. package/cjs/data/table/hooks/useTableItems.js +74 -0
  25. package/cjs/data/table/hooks/useTableItems.js.map +1 -0
  26. package/cjs/data/table/hooks/useTableKeyboardNav.js +3 -3
  27. package/cjs/data/table/hooks/useTableKeyboardNav.js.map +1 -1
  28. package/cjs/data/table/hooks/useTableSelection.d.ts +3 -2
  29. package/cjs/data/table/hooks/useTableSelection.js +5 -4
  30. package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
  31. package/cjs/data/table/root/DataTable.types.d.ts +5 -4
  32. package/cjs/data/table/root/DataTableAuto.d.ts +27 -1
  33. package/cjs/data/table/root/DataTableAuto.js +92 -50
  34. package/cjs/data/table/root/DataTableAuto.js.map +1 -1
  35. package/cjs/data/table/root/DataTableRoot.context.d.ts +5 -3
  36. package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
  37. package/cjs/data/table/root/DataTableRoot.js +6 -4
  38. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  39. package/cjs/data/table/tr/DataTableTr.js +30 -32
  40. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  41. package/cjs/form/checkbox/Checkbox.js +1 -0
  42. package/cjs/form/checkbox/Checkbox.js.map +1 -1
  43. package/cjs/form/radio/Radio.js +7 -1
  44. package/cjs/form/radio/Radio.js.map +1 -1
  45. package/cjs/modal/types.d.ts +8 -4
  46. package/esm/data/table/column-header/DataTableColumnHeader.d.ts +1 -1
  47. package/esm/data/table/column-header/DataTableColumnHeader.js +17 -12
  48. package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  49. package/esm/data/table/column-header/useTableColumnResize.d.ts +28 -4
  50. package/esm/data/table/column-header/useTableColumnResize.js +145 -54
  51. package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
  52. package/esm/data/table/helpers/collectTableRowEntries.d.ts +24 -0
  53. package/esm/data/table/helpers/collectTableRowEntries.js +33 -0
  54. package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -0
  55. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
  56. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js +109 -0
  57. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
  58. package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
  59. package/esm/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
  60. package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  61. package/esm/data/table/helpers/selection/selection.types.d.ts +1 -0
  62. package/esm/data/table/helpers/table-keyboard.d.ts +1 -2
  63. package/esm/data/table/helpers/table-keyboard.js +1 -5
  64. package/esm/data/table/helpers/table-keyboard.js.map +1 -1
  65. package/esm/data/table/hooks/useTableExpansion.d.ts +7 -6
  66. package/esm/data/table/hooks/useTableExpansion.js +42 -16
  67. package/esm/data/table/hooks/useTableExpansion.js.map +1 -1
  68. package/esm/data/table/hooks/useTableItems.d.ts +33 -0
  69. package/esm/data/table/hooks/useTableItems.js +69 -0
  70. package/esm/data/table/hooks/useTableItems.js.map +1 -0
  71. package/esm/data/table/hooks/useTableKeyboardNav.js +3 -3
  72. package/esm/data/table/hooks/useTableKeyboardNav.js.map +1 -1
  73. package/esm/data/table/hooks/useTableSelection.d.ts +3 -2
  74. package/esm/data/table/hooks/useTableSelection.js +5 -4
  75. package/esm/data/table/hooks/useTableSelection.js.map +1 -1
  76. package/esm/data/table/root/DataTable.types.d.ts +5 -4
  77. package/esm/data/table/root/DataTableAuto.d.ts +27 -1
  78. package/esm/data/table/root/DataTableAuto.js +94 -52
  79. package/esm/data/table/root/DataTableAuto.js.map +1 -1
  80. package/esm/data/table/root/DataTableRoot.context.d.ts +5 -3
  81. package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
  82. package/esm/data/table/root/DataTableRoot.js +7 -5
  83. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  84. package/esm/data/table/tr/DataTableTr.js +32 -34
  85. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  86. package/esm/form/checkbox/Checkbox.js +1 -0
  87. package/esm/form/checkbox/Checkbox.js.map +1 -1
  88. package/esm/form/radio/Radio.js +7 -1
  89. package/esm/form/radio/Radio.js.map +1 -1
  90. package/esm/modal/types.d.ts +8 -4
  91. package/package.json +7 -7
  92. package/src/data/table/column-header/DataTableColumnHeader.tsx +26 -14
  93. package/src/data/table/column-header/useTableColumnResize.ts +209 -80
  94. package/src/data/table/helpers/collectTableRowEntries.ts +90 -0
  95. package/src/data/table/helpers/selection/SelectionSubtreeHelper.test.ts +66 -0
  96. package/src/data/table/helpers/selection/SelectionSubtreeHelper.ts +162 -0
  97. package/src/data/table/helpers/selection/getMultipleSelectProps.ts +57 -20
  98. package/src/data/table/helpers/selection/selection.types.ts +1 -0
  99. package/src/data/table/helpers/table-keyboard.ts +1 -6
  100. package/src/data/table/hooks/__tests__/useTableItems.test.ts +145 -0
  101. package/src/data/table/hooks/__tests__/useTableSelection.test.ts +132 -21
  102. package/src/data/table/hooks/useTableExpansion.tsx +68 -22
  103. package/src/data/table/hooks/useTableItems.ts +146 -0
  104. package/src/data/table/hooks/useTableKeyboardNav.ts +3 -3
  105. package/src/data/table/hooks/useTableSelection.ts +10 -6
  106. package/src/data/table/root/DataTable.types.ts +5 -4
  107. package/src/data/table/root/DataTableAuto.test.tsx +244 -0
  108. package/src/data/table/root/DataTableAuto.tsx +260 -141
  109. package/src/data/table/root/DataTableRoot.context.ts +4 -2
  110. package/src/data/table/root/DataTableRoot.tsx +22 -16
  111. package/src/data/table/tr/DataTableTr.tsx +48 -47
  112. package/src/form/checkbox/Checkbox.tsx +1 -0
  113. package/src/form/radio/Radio.tsx +7 -1
  114. package/src/modal/types.ts +8 -4
@@ -26,6 +26,6 @@ interface DataTableColumnHeaderProps extends ResizeProps, DataTableBaseCellProps
26
26
  * - Plan for pinning: Move it into "settings" dialog like here: https://cloudscape.design/examples/react/table.html
27
27
  * Toggling `data-block-keyboard-nav` does not work since the created "grid" does not update when toggling this attribute.
28
28
  */
29
- declare const DataTableColumnHeader: React.ForwardRefExoticComponent<Omit<DataTableColumnHeaderProps, "ref"> & React.RefAttributes<HTMLTableCellElement>>;
29
+ declare const DataTableColumnHeader: React.ForwardRefExoticComponent<DataTableColumnHeaderProps & React.RefAttributes<HTMLTableCellElement>>;
30
30
  export { DataTableColumnHeader };
31
31
  export type { DataTableColumnHeaderProps };
@@ -62,15 +62,16 @@ const SORT_ICON = {
62
62
  * Toggling `data-block-keyboard-nav` does not work since the created "grid" does not update when toggling this attribute.
63
63
  */
64
64
  const DataTableColumnHeader = (0, react_1.forwardRef)((_a, forwardedRef) => {
65
- var { className, children, sortable = false, sortDirection = "none", onSortClick, style, width, minWidth, maxWidth, onWidthChange, defaultWidth, colSpan, rowSpan, UNSAFE_isSelection } = _a, rest = __rest(_a, ["className", "children", "sortable", "sortDirection", "onSortClick", "style", "width", "minWidth", "maxWidth", "onWidthChange", "defaultWidth", "colSpan", "rowSpan", "UNSAFE_isSelection"]);
66
- const [isOverflowing, setIsOverflowing] = react_1.default.useState(false);
65
+ var { className, children, sortable = false, sortDirection = "none", onSortClick, resizable = true, style, width, defaultWidth, autoWidth, minWidth, maxWidth, onWidthChange, colSpan, rowSpan, UNSAFE_isSelection } = _a, rest = __rest(_a, ["className", "children", "sortable", "sortDirection", "onSortClick", "resizable", "style", "width", "defaultWidth", "autoWidth", "minWidth", "maxWidth", "onWidthChange", "colSpan", "rowSpan", "UNSAFE_isSelection"]);
67
66
  const contentRef = react_1.default.useRef(null);
68
- const [thRefState, setThRefState] = (0, react_1.useState)(null);
69
- const mergedRef = (0, hooks_1.useMergeRefs)(forwardedRef, setThRefState);
67
+ const thRef = (0, react_1.useRef)(null);
68
+ const mergedRef = (0, hooks_1.useMergeRefs)(forwardedRef, thRef);
70
69
  const resizeResult = (0, useTableColumnResize_1.useTableColumnResize)({
71
- ref: thRefState,
70
+ resizable,
71
+ thRef,
72
72
  width,
73
73
  defaultWidth,
74
+ autoWidth,
74
75
  minWidth,
75
76
  maxWidth,
76
77
  onWidthChange,
@@ -78,17 +79,21 @@ const DataTableColumnHeader = (0, react_1.forwardRef)((_a, forwardedRef) => {
78
79
  colSpan,
79
80
  });
80
81
  const SortIcon = sortable ? SORT_ICON[sortDirection] : null;
81
- return (react_1.default.createElement(DataTableBaseCell_1.DataTableBaseCell, Object.assign({ as: "th" }, rest, { ref: mergedRef, className: (0, helpers_1.cl)("aksel-data-table__column-header", className), "data-sortable": sortable, style: resizeResult.style, "aria-sort": sortable ? getAriaSort(sortDirection) : undefined, onPointerEnter: () => {
82
- const el = contentRef.current;
83
- setIsOverflowing(el ? el.scrollWidth > el.offsetWidth : false);
84
- console.info("is overflowing", isOverflowing);
85
- }, onPointerLeave: () => setIsOverflowing(false), UNSAFE_isSelection: UNSAFE_isSelection, colSpan: colSpan, rowSpan: rowSpan }),
82
+ return (react_1.default.createElement(DataTableBaseCell_1.DataTableBaseCell, Object.assign({ as: "th" }, rest, { ref: mergedRef, className: (0, helpers_1.cl)("aksel-data-table__column-header", className), "data-sortable": sortable, style: resizeResult.style, "aria-sort": sortable ? getAriaSort(sortDirection) : undefined, UNSAFE_isSelection: UNSAFE_isSelection, colSpan: colSpan, rowSpan: rowSpan }),
86
83
  sortable ? (react_1.default.createElement("button", { className: "aksel-data-table__th-sort-button", onClick: onSortClick },
87
84
  react_1.default.createElement("div", { ref: contentRef, className: "aksel-data-table__th-content" }, children),
88
85
  SortIcon && (react_1.default.createElement(SortIcon, { "aria-hidden": true, "data-sort-direction": sortDirection, className: "aksel-data-table__th-sort-icon", fontSize: "1.25rem" })))) : (react_1.default.createElement("div", { ref: contentRef, className: (0, helpers_1.cl)({
89
86
  "aksel-data-table__th-content": !UNSAFE_isSelection,
90
87
  }) }, children)),
91
- resizeResult.enabled && !UNSAFE_isSelection && (react_1.default.createElement("button", Object.assign({}, resizeResult.resizeHandlerProps, { className: "aksel-data-table__th-resize-handle", "data-active": resizeResult.isResizingWithKeyboard, "data-disable-keyboard-nav": resizeResult.isResizingWithKeyboard, "data-block-keyboard-nav": true }), resizeResult.isResizingWithKeyboard && (react_1.default.createElement(react_1.default.Fragment, null,
88
+ resizeResult.enabled && !UNSAFE_isSelection && (react_1.default.createElement("button", Object.assign({}, resizeResult.resizeHandlerProps, { className: "aksel-data-table__th-resize-handle", "aria-label": resizeResult.isResizingWithKeyboard
89
+ ? "Bruk pil venstre/høyre"
90
+ : "Endre bredde", "data-active": resizeResult.isResizingWithKeyboard, "data-disable-keyboard-nav": resizeResult.isResizingWithKeyboard, "data-block-keyboard-nav": true, role: "slider", "aria-valuenow": typeof resizeResult.style.width === "number"
91
+ ? resizeResult.style.width
92
+ : 0, "aria-valuetext": typeof resizeResult.style.width === "number" &&
93
+ resizeResult.isResizingWithKeyboard
94
+ ? resizeResult.style.width.toString()
95
+ : "" // Needs to be blank when not in keyboard resizing mode to avoid NVDA announcing the value as part of the column heading
96
+ }), resizeResult.isResizingWithKeyboard && (react_1.default.createElement(react_1.default.Fragment, null,
92
97
  react_1.default.createElement("span", { className: "aksel-data-table__th-resize-handle-indicator aksel-data-table__th-resize-handle-indicator--start" },
93
98
  react_1.default.createElement(aksel_icons_1.CaretLeftCircleFillIcon, { "aria-hidden": true, fontSize: "1.5rem" })),
94
99
  react_1.default.createElement("span", { className: "aksel-data-table__th-resize-handle-indicator aksel-data-table__th-resize-handle-indicator--end" },
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableColumnHeader.js","sourceRoot":"","sources":["../../../../src/data/table/column-header/DataTableColumnHeader.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTableColumnHeader.js","sourceRoot":"","sources":["../../../../src/data/table/column-header/DataTableColumnHeader.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,13 @@
1
1
  import { type DOMAttributes } from "react";
2
2
  type ColumnWidth = number | string;
3
3
  type ResizeProps = {
4
- ref: HTMLTableCellElement | null;
4
+ /**
5
+ * Whether the column should be resizable by the user.
6
+ *
7
+ * **NB:** This is always disabled when `layout="auto"` on the root component.
8
+ * @default true
9
+ */
10
+ resizable?: boolean;
5
11
  /**
6
12
  * Controlled width of the column.
7
13
  *
@@ -9,9 +15,20 @@ type ResizeProps = {
9
15
  */
10
16
  width?: ColumnWidth;
11
17
  /**
12
- * Initial width of the column. Only used when `width` is not set.
18
+ * Initial width of the column. Only used when `width` is not set and `resizable` is true.
13
19
  */
14
20
  defaultWidth?: ColumnWidth;
21
+ /**
22
+ * Whether the column should automatically resize to fit its content. **Runs only once.**
23
+ *
24
+ * `onWidthChange` will be called with the new size. `minWidth` and `maxWidth` will be respected.
25
+ *
26
+ * If you don't need manual resizing support and want most of the columns to resize automatically,
27
+ * consider using `layout="auto"` on the root instead for better performance.
28
+ *
29
+ * **NB:** This can cause a layout shift. Set a good initial width with `width` or `defaultWidth` to mitigate this.
30
+ */
31
+ autoWidth?: boolean;
15
32
  /**
16
33
  * Minimum width of the column.
17
34
  *
@@ -37,15 +54,22 @@ type ResizeProps = {
37
54
  */
38
55
  colSpan?: number;
39
56
  };
40
- type TableColumnResizeArgs = ResizeProps & {};
57
+ type WithUndefined<T> = {
58
+ [K in keyof T]: T[K] | undefined;
59
+ };
60
+ type Unomittable<T> = WithUndefined<Required<T>>;
61
+ type TableColumnResizeArgs = Unomittable<ResizeProps> & {
62
+ thRef: React.RefObject<HTMLTableCellElement | null>;
63
+ };
41
64
  type TableColumnResizeResult = {
42
- style?: React.CSSProperties;
65
+ style: React.CSSProperties;
43
66
  resizeHandlerProps: {
44
67
  onMouseDown: DOMAttributes<HTMLButtonElement>["onMouseDown"];
45
68
  onTouchStart: DOMAttributes<HTMLButtonElement>["onTouchStart"];
46
69
  onKeyDown: DOMAttributes<HTMLButtonElement>["onKeyDown"];
47
70
  onBlur: DOMAttributes<HTMLButtonElement>["onBlur"];
48
71
  onDoubleClick: DOMAttributes<HTMLButtonElement>["onDoubleClick"];
72
+ onClick: DOMAttributes<HTMLButtonElement>["onClick"];
49
73
  };
50
74
  isResizingWithKeyboard: boolean;
51
75
  enabled: true;
@@ -11,9 +11,11 @@ const DataTableRoot_context_1 = require("../root/DataTableRoot.context");
11
11
  * be able to set "1fr" or similar and have it fill remaining space.
12
12
  */
13
13
  function useTableColumnResize(args) {
14
- const { ref, width: userWidth, defaultWidth, onWidthChange, maxWidth = Infinity, minWidth = 40, style, colSpan, } = args;
14
+ const { resizable, thRef, width: userWidth, defaultWidth, autoWidth, onWidthChange, maxWidth = Infinity, minWidth = 40, style, colSpan, } = args;
15
15
  const tableContext = (0, DataTableRoot_context_1.useDataTableContext)();
16
- const [width, _setWidth] = (0, hooks_1.useControllableState)({
16
+ const [isResizingWithKeyboard, setIsResizingWithKeyboard] = (0, react_1.useState)(false);
17
+ const ignoreNextOnClick = (0, react_1.useRef)(false);
18
+ const [width, setWidth] = (0, hooks_1.useControllableState)({
17
19
  value: userWidth,
18
20
  defaultValue: defaultWidth !== null && defaultWidth !== void 0 ? defaultWidth : (colSpan !== null && colSpan !== void 0 ? colSpan : 1) * 140,
19
21
  /**
@@ -23,48 +25,80 @@ function useTableColumnResize(args) {
23
25
  */
24
26
  onChange: onWidthChange,
25
27
  });
26
- const [isResizingWithKeyboard, setIsResizingWithKeyboard] = (0, react_1.useState)(false);
27
- const [, setIsResizingWithMouse] = (0, react_1.useState)(false);
28
- const setWidth = (0, react_1.useCallback)((newWidth) => {
28
+ const setClampedWidth = (0, react_1.useCallback)((newWidth) => {
29
29
  var _a, _b;
30
- const currentWidth = ref === null || ref === void 0 ? void 0 : ref.offsetWidth;
31
- if (!currentWidth) {
32
- return;
33
- }
34
30
  const min = (_a = parseWidth(minWidth)) !== null && _a !== void 0 ? _a : 0;
35
31
  const max = (_b = parseWidth(maxWidth)) !== null && _b !== void 0 ? _b : Infinity;
36
32
  const clamped = Math.min(Math.max(newWidth, min), max);
37
- if (newWidth <= currentWidth && newWidth > max) {
38
- _setWidth(newWidth);
33
+ setWidth(clamped);
34
+ }, [minWidth, maxWidth, setWidth]);
35
+ // biome-ignore lint/correctness/useExhaustiveDependencies: We only want to run this on mount and when autoWidth changes
36
+ (0, react_1.useEffect)(function autoResizeColumn() {
37
+ if (!autoWidth) {
39
38
  return;
40
39
  }
41
- if (newWidth >= currentWidth && newWidth > max) {
42
- _setWidth(currentWidth);
43
- return;
40
+ const newColumnWidth = getAutoColumnWidth(thRef);
41
+ if (newColumnWidth) {
42
+ setClampedWidth(newColumnWidth);
44
43
  }
45
- _setWidth(clamped);
46
- }, [minWidth, maxWidth, _setWidth, ref]);
47
- const handleKeyDown = (0, react_1.useCallback)((event) => {
48
- if (event.key === "Enter" || event.key === " ") {
49
- setIsResizingWithKeyboard((prev) => !prev);
44
+ }, [autoWidth]);
45
+ const handleOnClick = (0, react_1.useCallback)(() => {
46
+ // We need to use the onClick event in order to support screen readers properly,
47
+ // since some of them only send a mouse click when pressing enter/space.
48
+ // We detect a "screen reader click" by checking if we had a mouseUp event right before.
49
+ if (ignoreNextOnClick.current) {
50
+ ignoreNextOnClick.current = false;
50
51
  return;
51
52
  }
53
+ setIsResizingWithKeyboard((prev) => !prev);
54
+ }, []);
55
+ const handleKeyDown = (0, react_1.useCallback)((event) => {
56
+ var _a, _b;
52
57
  if (!isResizingWithKeyboard) {
53
58
  return;
54
59
  }
60
+ const currentWidth = (_b = (_a = thRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) !== null && _b !== void 0 ? _b : 0;
55
61
  if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
56
62
  event.preventDefault();
57
- const th = event.target.closest("th");
58
- const startWidth = th.offsetWidth;
59
63
  const delta = event.key === "ArrowRight" ? 20 : -20;
60
- setWidth(startWidth + delta);
64
+ setClampedWidth(currentWidth + delta);
65
+ return;
66
+ }
67
+ if (event.key === "Home") {
68
+ event.preventDefault();
69
+ setClampedWidth(0); // will fall back to minWidth
70
+ return;
71
+ }
72
+ if (event.key === "End") {
73
+ event.preventDefault();
74
+ const newWidth = getAutoColumnWidth(thRef);
75
+ if (newWidth && newWidth > currentWidth) {
76
+ setClampedWidth(newWidth);
77
+ }
78
+ return;
61
79
  }
62
- }, [isResizingWithKeyboard, setWidth]);
63
- const startResize = (0, react_1.useCallback)((th, startX) => {
64
- setIsResizingWithMouse(true);
65
- const startWidth = th.offsetWidth;
80
+ if (event.key === "Escape") {
81
+ setIsResizingWithKeyboard(false);
82
+ }
83
+ }, [isResizingWithKeyboard, setClampedWidth, thRef]);
84
+ const startResize = (0, react_1.useCallback)((startX) => {
85
+ var _a, _b;
86
+ const startWidth = (_b = (_a = thRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) !== null && _b !== void 0 ? _b : 0;
66
87
  function onPointerMove(clientX) {
67
- setWidth(startWidth + (clientX - startX));
88
+ var _a, _b, _c, _d;
89
+ const currentWidth = (_b = (_a = thRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) !== null && _b !== void 0 ? _b : 0;
90
+ const newWidth = startWidth + (clientX - startX);
91
+ const min = (_c = parseWidth(minWidth)) !== null && _c !== void 0 ? _c : 0;
92
+ const max = (_d = parseWidth(maxWidth)) !== null && _d !== void 0 ? _d : Infinity;
93
+ if (newWidth > max) {
94
+ setWidth(newWidth < currentWidth ? newWidth : currentWidth);
95
+ return;
96
+ }
97
+ if (newWidth < min) {
98
+ setWidth(newWidth > currentWidth ? newWidth : currentWidth);
99
+ return;
100
+ }
101
+ setClampedWidth(newWidth);
68
102
  }
69
103
  function onMouseMove(e) {
70
104
  onPointerMove(e.clientX);
@@ -76,45 +110,42 @@ function useTableColumnResize(args) {
76
110
  function cleanup() {
77
111
  document.removeEventListener("mousemove", onMouseMove);
78
112
  document.removeEventListener("touchmove", onTouchMove);
79
- document.removeEventListener("mouseup", cleanup);
80
- document.removeEventListener("touchend", cleanup);
81
- document.removeEventListener("touchcancel", cleanup);
82
- setIsResizingWithMouse(false);
113
+ setIsResizingWithKeyboard(false);
114
+ // We only want onClick to trigger when using the keyboard
115
+ // (we use onClick b.c. keyDown doesn't fire when using a screen reader)
116
+ ignoreNextOnClick.current = true;
83
117
  }
84
118
  document.addEventListener("mousemove", onMouseMove);
85
119
  document.addEventListener("touchmove", onTouchMove, { passive: false });
86
- document.addEventListener("mouseup", cleanup);
87
- document.addEventListener("touchend", cleanup);
88
- document.addEventListener("touchcancel", cleanup);
89
- }, [setWidth]);
120
+ document.addEventListener("mouseup", cleanup, { once: true });
121
+ document.addEventListener("touchend", cleanup, { once: true });
122
+ document.addEventListener("touchcancel", cleanup, { once: true });
123
+ }, [maxWidth, minWidth, setWidth, setClampedWidth, thRef]);
90
124
  const handleMouseDown = (0, react_1.useCallback)((event) => {
91
- const th = event.target.closest("th");
92
- startResize(th, event.clientX);
125
+ startResize(event.clientX);
93
126
  }, [startResize]);
94
127
  const handleTouchStart = (0, react_1.useCallback)((event) => {
95
- const th = event.target.closest("th");
96
- startResize(th, event.touches[0].clientX);
128
+ startResize(event.touches[0].clientX);
97
129
  }, [startResize]);
98
- /**
99
- * TODO: Do we even want this?
100
- * - + 32px padding is hardcoded now, fix this
101
- * - Need to find widest element in column, not the header itself.
102
- * - Should doubleclick just reset to defaultWidth? Or add a autoWidth prop.
103
- */
104
- const handleDoubleClick = (0, react_1.useCallback)((event) => {
105
- const th = event.target.closest("th");
106
- const contentEl = th.getElementsByClassName("aksel-data-table__th-content")[0];
107
- const range = document.createRange();
108
- range.selectNodeContents(contentEl);
109
- const contentWidth = range.getBoundingClientRect().width;
110
- setWidth(contentWidth + 32);
111
- }, [setWidth]);
130
+ // Auto-size column to fit content on double click. NB: Doesn't work with block content!
131
+ const handleDoubleClick = (0, react_1.useCallback)(() => {
132
+ const newColumnWidth = getAutoColumnWidth(thRef);
133
+ if (newColumnWidth) {
134
+ setClampedWidth(newColumnWidth);
135
+ }
136
+ }, [setClampedWidth, thRef]);
112
137
  if (tableContext.layout !== "fixed") {
113
138
  return {
114
139
  style,
115
140
  enabled: false,
116
141
  };
117
142
  }
143
+ if (!resizable) {
144
+ return {
145
+ style: Object.assign(Object.assign({}, style), { width }),
146
+ enabled: false,
147
+ };
148
+ }
118
149
  return {
119
150
  style: Object.assign(Object.assign({}, style), { width }),
120
151
  resizeHandlerProps: {
@@ -123,6 +154,7 @@ function useTableColumnResize(args) {
123
154
  onKeyDown: handleKeyDown,
124
155
  onBlur: () => setIsResizingWithKeyboard(false),
125
156
  onDoubleClick: handleDoubleClick,
157
+ onClick: handleOnClick,
126
158
  },
127
159
  isResizingWithKeyboard,
128
160
  enabled: true,
@@ -141,4 +173,63 @@ function parseWidth(width) {
141
173
  }
142
174
  return undefined;
143
175
  }
176
+ function getAutoColumnWidth(thRef) {
177
+ var _a;
178
+ const th = thRef.current;
179
+ const thContent = th.querySelector(".aksel-data-table__th-content");
180
+ const thPaddingEl = th.querySelector("div");
181
+ const rows = (_a = th.closest("table")) === null || _a === void 0 ? void 0 : _a.querySelectorAll("tbody tr, tfoot tr");
182
+ if (!thContent || !thPaddingEl || !rows) {
183
+ return;
184
+ }
185
+ // Find needed width for header cell
186
+ const contentWidth = thContent.scrollWidth;
187
+ const paddingElStyle = window.getComputedStyle(thPaddingEl);
188
+ const thInlinePadding = parseInt(paddingElStyle.paddingLeft, 10) +
189
+ parseInt(paddingElStyle.paddingRight, 10);
190
+ let newColumnWidth = contentWidth + thInlinePadding;
191
+ // Find column position
192
+ let columnPosition = 1;
193
+ let prevSibling = th.previousElementSibling;
194
+ while (prevSibling) {
195
+ columnPosition += prevSibling.colSpan;
196
+ prevSibling = prevSibling.previousElementSibling;
197
+ }
198
+ // Find needed width for each cell in column in tbody and tfoot
199
+ const range = document.createRange();
200
+ let skipRows = 0;
201
+ for (const row of rows) {
202
+ // Skip rows where the cell in this column is covered by a rowspan from a previous row
203
+ if (skipRows > 0) {
204
+ skipRows--;
205
+ continue;
206
+ }
207
+ // Find cell
208
+ let cell = row.firstChild;
209
+ let currentPosition = cell.colSpan;
210
+ while (columnPosition > currentPosition && cell.nextElementSibling) {
211
+ cell = cell.nextElementSibling;
212
+ currentPosition += cell.colSpan;
213
+ }
214
+ skipRows = cell.rowSpan - 1;
215
+ // Find needed width
216
+ const cellContent = cell.firstChild;
217
+ range.selectNodeContents(cellContent);
218
+ const cellContentWidth = range.getBoundingClientRect().width;
219
+ const contentElStyle = window.getComputedStyle(cellContent);
220
+ const inlinePadding = parseInt(contentElStyle.paddingLeft, 10) +
221
+ parseInt(contentElStyle.paddingRight, 10);
222
+ const widthNeededForThisCell = (cellContentWidth + inlinePadding) / cell.colSpan;
223
+ if (widthNeededForThisCell > newColumnWidth) {
224
+ newColumnWidth = widthNeededForThisCell;
225
+ }
226
+ }
227
+ // Make sure new width is not wider than the table container since that would be impractical
228
+ const container = th.closest("div");
229
+ const maxColWidth = ((container === null || container === void 0 ? void 0 : container.offsetWidth) || document.documentElement.clientWidth * 0.9) *
230
+ 0.95;
231
+ return newColumnWidth > maxColWidth
232
+ ? Math.floor(maxColWidth)
233
+ : Math.ceil(newColumnWidth);
234
+ }
144
235
  //# sourceMappingURL=useTableColumnResize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTableColumnResize.js","sourceRoot":"","sources":["../../../../src/data/table/column-header/useTableColumnResize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTableColumnResize.js","sourceRoot":"","sources":["../../../../src/data/table/column-header/useTableColumnResize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ type TableRowEntryId = string | number;
2
+ type CollectTableRowEntriesArgs<T> = {
3
+ items: T[];
4
+ getRowId?: (rowData: T, index: number) => TableRowEntryId;
5
+ getSubRows?: (rowData: T) => T[];
6
+ isSubRowExpandable?: (rowData: T) => boolean;
7
+ };
8
+ interface ItemDetail<T> {
9
+ id: string | number;
10
+ level: number;
11
+ parent: null | T;
12
+ children: readonly T[];
13
+ }
14
+ type CollectTableRowEntriesReturn<T> = {
15
+ itemDetails: Map<T, ItemDetail<T>>;
16
+ /**
17
+ * Direct child ids for each row, used to traverse nested selection groups
18
+ * without storing every descendant list on each ancestor.
19
+ */
20
+ childRowIdsById: Map<TableRowEntryId, TableRowEntryId[]>;
21
+ };
22
+ declare function collectTableRowEntries<T>({ items, getRowId, getSubRows, isSubRowExpandable, }: CollectTableRowEntriesArgs<T>): CollectTableRowEntriesReturn<T>;
23
+ export { collectTableRowEntries };
24
+ export type { CollectTableRowEntriesArgs, CollectTableRowEntriesReturn, TableRowEntryId, ItemDetail, };
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collectTableRowEntries = collectTableRowEntries;
4
+ function collectTableRowEntries({ items, getRowId, getSubRows, isSubRowExpandable, }) {
5
+ const itemDetailsMap = new Map();
6
+ const childRowIdsById = new Map();
7
+ const traverseRow = (rowData, rowIndex, level, parent, parentId) => {
8
+ var _a, _b, _c;
9
+ const rowId = (_a = getRowId === null || getRowId === void 0 ? void 0 : getRowId(rowData, rowIndex)) !== null && _a !== void 0 ? _a : (parentId == null ? rowIndex : `${parentId}-${rowIndex}`);
10
+ const isRowExpandable = (_b = isSubRowExpandable === null || isSubRowExpandable === void 0 ? void 0 : isSubRowExpandable(rowData)) !== null && _b !== void 0 ? _b : true;
11
+ const children = (_c = (isRowExpandable ? getSubRows === null || getSubRows === void 0 ? void 0 : getSubRows(rowData) : [])) !== null && _c !== void 0 ? _c : [];
12
+ itemDetailsMap.set(rowData, {
13
+ id: rowId,
14
+ level,
15
+ parent,
16
+ children,
17
+ });
18
+ const childRowIds = [];
19
+ for (let childIndex = 0; childIndex < children.length; childIndex++) {
20
+ const childRow = children[childIndex];
21
+ const childRowId = traverseRow(childRow, childIndex, level + 1, rowData, rowId);
22
+ childRowIds.push(childRowId);
23
+ }
24
+ childRowIdsById.set(rowId, childRowIds);
25
+ return rowId;
26
+ };
27
+ for (let rowIndex = 0; rowIndex < items.length; rowIndex++) {
28
+ traverseRow(items[rowIndex], rowIndex, 0, null);
29
+ }
30
+ return {
31
+ itemDetails: itemDetailsMap,
32
+ childRowIdsById,
33
+ };
34
+ }
35
+ //# sourceMappingURL=collectTableRowEntries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectTableRowEntries.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/collectTableRowEntries.ts"],"names":[],"mappings":";;AAmFS,wDAAsB;AA1D/B,SAAS,sBAAsB,CAAI,EACjC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,kBAAkB,GACY;IAC9B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IACnD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsC,CAAC;IAEtE,MAAM,WAAW,GAAG,CAClB,OAAU,EACV,QAAgB,EAChB,KAAa,EACb,MAAgB,EAChB,QAA0B,EACT,EAAE;;QACnB,MAAM,KAAK,GACT,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,OAAO,EAAE,QAAQ,CAAC,mCAC7B,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,MAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAG,OAAO,CAAC,mCAAI,IAAI,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAA,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,mCAAI,EAAE,CAAC;QAEtE,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE;YAC1B,EAAE,EAAE,KAAK;YACT,KAAK;YACL,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,WAAW,GAAsB,EAAE,CAAC;QAE1C,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;YACpE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,WAAW,CAC5B,QAAQ,EACR,UAAU,EACV,KAAK,GAAG,CAAC,EACT,OAAO,EACP,KAAK,CACN,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAED,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAExC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC3D,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,WAAW,EAAE,cAAc;QAC3B,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,46 @@
1
+ type SelectionKey = string | number;
2
+ type SelectionStats = {
3
+ selectableCount: number;
4
+ selectedCount: number;
5
+ };
6
+ type SelectionSubtreeHelperArgs = {
7
+ childRowIdsById?: Map<SelectionKey, SelectionKey[]>;
8
+ disabledKeysSet: Set<SelectionKey>;
9
+ selectedKeysSet: Set<SelectionKey>;
10
+ };
11
+ /**
12
+ * Helper class for managing selection state in a tree structure.
13
+ * - It provides methods to get selectable keys in a subtree
14
+ * - Compute selection statistics for a subtree
15
+ * - Determine if a subtree is fully selected.
16
+ *
17
+ * Results of selection statistics are cached to optimize performance for repeated calls on the same subtree.
18
+ */
19
+ declare class SelectionSubtreeHelper {
20
+ private childRowIdsById;
21
+ private disabledKeysSet;
22
+ private selectedKeysSet;
23
+ private selectionStatsCache;
24
+ constructor({ childRowIdsById, disabledKeysSet, selectedKeysSet, }: SelectionSubtreeHelperArgs);
25
+ getSelectableKeys(rootIds: SelectionKey[]): SelectionKey[];
26
+ /**
27
+ * Returns the number of selectable and selected rows in the subtree of the given root ID.
28
+ * Results are cached after the first computation to optimize repeated calls for the same root ID.
29
+ *
30
+ * The selectable count excludes disabled rows, and the selected count excludes disabled rows that are selected.
31
+ * The method is implemented iteratively to handle deep trees without hitting call stack limits.
32
+ *
33
+ * How it works:
34
+ * - Manually add root ID to stack to get processing going. Note that the ready-flag is `false`.
35
+ * - Pop stack until empty. For each entry:
36
+ * - - If entry is already cached, skip it.
37
+ * - - If entry is not ready, push it back as ready and push all its children as not ready.
38
+ * - - If entry is ready, compute its stats based on its own state and the stats of its children, then cache the result.
39
+ * - 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.
40
+ * - Finally, return the cached stats for the root ID.
41
+ */
42
+ getSelectionStats(rootId: SelectionKey): SelectionStats;
43
+ isFullySelected(rootId: SelectionKey): boolean;
44
+ }
45
+ export { SelectionSubtreeHelper };
46
+ export type { SelectionKey, SelectionStats, SelectionSubtreeHelperArgs };