@cloudscape-design/components 3.0.1111 → 3.0.1113

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 (208) hide show
  1. package/app-layout/visual-refresh-toolbar/drawer/global-ai-drawer.d.ts +1 -1
  2. package/app-layout/visual-refresh-toolbar/drawer/global-ai-drawer.d.ts.map +1 -1
  3. package/app-layout/visual-refresh-toolbar/drawer/global-ai-drawer.js.map +1 -1
  4. package/app-layout/visual-refresh-toolbar/state/use-ai-drawer.d.ts +34 -0
  5. package/app-layout/visual-refresh-toolbar/state/use-ai-drawer.d.ts.map +1 -0
  6. package/app-layout/visual-refresh-toolbar/state/use-ai-drawer.js +87 -0
  7. package/app-layout/visual-refresh-toolbar/state/use-ai-drawer.js.map +1 -0
  8. package/app-layout/visual-refresh-toolbar/state/use-app-layout.d.ts.map +1 -1
  9. package/app-layout/visual-refresh-toolbar/state/use-app-layout.js +4 -3
  10. package/app-layout/visual-refresh-toolbar/state/use-app-layout.js.map +1 -1
  11. package/app-layout/visual-refresh-toolbar/state/use-widget-messages.d.ts +2 -0
  12. package/app-layout/visual-refresh-toolbar/state/use-widget-messages.d.ts.map +1 -0
  13. package/app-layout/visual-refresh-toolbar/state/use-widget-messages.js +18 -0
  14. package/app-layout/visual-refresh-toolbar/state/use-widget-messages.js.map +1 -0
  15. package/box/interfaces.d.ts +3 -1
  16. package/box/interfaces.d.ts.map +1 -1
  17. package/box/interfaces.js.map +1 -1
  18. package/box/internal.js +3 -0
  19. package/box/internal.js.map +1 -1
  20. package/box/styles.css.js +192 -191
  21. package/box/styles.scoped.css +250 -236
  22. package/box/styles.selectors.js +192 -191
  23. package/cards/analytics-metadata/interfaces.d.ts +31 -0
  24. package/cards/analytics-metadata/interfaces.d.ts.map +1 -0
  25. package/cards/analytics-metadata/interfaces.js +4 -0
  26. package/cards/analytics-metadata/interfaces.js.map +1 -0
  27. package/cards/analytics-metadata/styles.css.js +8 -0
  28. package/cards/analytics-metadata/styles.scoped.css +15 -0
  29. package/cards/analytics-metadata/styles.selectors.js +9 -0
  30. package/cards/index.d.ts.map +1 -1
  31. package/cards/index.js +59 -21
  32. package/cards/index.js.map +1 -1
  33. package/file-token-group/file-token.js +1 -1
  34. package/file-token-group/file-token.js.map +1 -1
  35. package/index.d.ts +1 -0
  36. package/index.d.ts.map +1 -1
  37. package/index.js +1 -0
  38. package/index.js.map +1 -1
  39. package/internal/base-component/styles.scoped.css +9 -1
  40. package/internal/components/drag-handle-wrapper/direction-button.js +1 -1
  41. package/internal/components/drag-handle-wrapper/direction-button.js.map +1 -1
  42. package/internal/components/drag-handle-wrapper/index.d.ts +1 -0
  43. package/internal/components/drag-handle-wrapper/index.d.ts.map +1 -1
  44. package/internal/components/drag-handle-wrapper/index.js +26 -32
  45. package/internal/components/drag-handle-wrapper/index.js.map +1 -1
  46. package/internal/components/drag-handle-wrapper/interfaces.d.ts +1 -0
  47. package/internal/components/drag-handle-wrapper/interfaces.d.ts.map +1 -1
  48. package/internal/components/drag-handle-wrapper/interfaces.js.map +1 -1
  49. package/internal/components/drag-handle-wrapper/styles.css.js +20 -21
  50. package/internal/components/drag-handle-wrapper/styles.scoped.css +50 -39
  51. package/internal/components/drag-handle-wrapper/styles.selectors.js +20 -21
  52. package/internal/components/option/highlight-match.d.ts +4 -2
  53. package/internal/components/option/highlight-match.d.ts.map +1 -1
  54. package/internal/components/option/highlight-match.js +6 -6
  55. package/internal/components/option/highlight-match.js.map +1 -1
  56. package/internal/components/option/index.d.ts +4 -0
  57. package/internal/components/option/index.d.ts.map +1 -1
  58. package/internal/components/option/index.js +8 -6
  59. package/internal/components/option/index.js.map +1 -1
  60. package/internal/components/option/interfaces.d.ts +5 -0
  61. package/internal/components/option/interfaces.d.ts.map +1 -1
  62. package/internal/components/option/interfaces.js.map +1 -1
  63. package/internal/components/option/option-parts.d.ts +7 -1
  64. package/internal/components/option/option-parts.d.ts.map +1 -1
  65. package/internal/components/option/option-parts.js +7 -5
  66. package/internal/components/option/option-parts.js.map +1 -1
  67. package/internal/environment.js +2 -2
  68. package/internal/environment.json +2 -2
  69. package/internal/generated/styles/tokens.d.ts +1 -0
  70. package/internal/generated/styles/tokens.js +1 -0
  71. package/internal/generated/theming/index.cjs +31 -0
  72. package/internal/generated/theming/index.js +31 -0
  73. package/internal/manifest.json +1 -1
  74. package/internal/plugins/widget/core.d.ts +16 -0
  75. package/internal/plugins/widget/core.d.ts.map +1 -0
  76. package/internal/plugins/widget/{internal.js → core.js} +14 -24
  77. package/internal/plugins/widget/core.js.map +1 -0
  78. package/internal/plugins/widget/index.d.ts +11 -0
  79. package/internal/plugins/widget/index.d.ts.map +1 -0
  80. package/internal/plugins/widget/index.js +22 -0
  81. package/internal/plugins/widget/index.js.map +1 -0
  82. package/internal/plugins/widget/interfaces.d.ts +2 -1
  83. package/internal/plugins/widget/interfaces.d.ts.map +1 -1
  84. package/internal/plugins/widget/interfaces.js.map +1 -1
  85. package/internal/plugins/widget.d.ts +2 -1
  86. package/internal/plugins/widget.d.ts.map +1 -1
  87. package/internal/plugins/widget.js +2 -1
  88. package/internal/plugins/widget.js.map +1 -1
  89. package/package.json +2 -1
  90. package/select/parts/styles.css.js +19 -22
  91. package/select/parts/styles.scoped.css +21 -49
  92. package/select/parts/styles.selectors.js +19 -22
  93. package/select/parts/trigger.d.ts.map +1 -1
  94. package/select/parts/trigger.js +2 -1
  95. package/select/parts/trigger.js.map +1 -1
  96. package/table/header-cell/index.d.ts +2 -0
  97. package/table/header-cell/index.d.ts.map +1 -1
  98. package/table/header-cell/index.js +5 -2
  99. package/table/header-cell/index.js.map +1 -1
  100. package/table/interfaces.d.ts +2 -0
  101. package/table/interfaces.d.ts.map +1 -1
  102. package/table/interfaces.js.map +1 -1
  103. package/table/internal.d.ts.map +1 -1
  104. package/table/internal.js +1 -0
  105. package/table/internal.js.map +1 -1
  106. package/table/resizer/index.d.ts +3 -1
  107. package/table/resizer/index.d.ts.map +1 -1
  108. package/table/resizer/index.js +211 -78
  109. package/table/resizer/index.js.map +1 -1
  110. package/table/resizer/resizer-lookup.d.ts +2 -1
  111. package/table/resizer/resizer-lookup.d.ts.map +1 -1
  112. package/table/resizer/resizer-lookup.js +3 -2
  113. package/table/resizer/resizer-lookup.js.map +1 -1
  114. package/table/resizer/styles.css.js +12 -12
  115. package/table/resizer/styles.scoped.css +37 -26
  116. package/table/resizer/styles.selectors.js +12 -12
  117. package/table/thead.d.ts +1 -0
  118. package/table/thead.d.ts.map +1 -1
  119. package/table/thead.js +2 -2
  120. package/table/thead.js.map +1 -1
  121. package/test-utils/dom/file-token-group/index.js +1 -1
  122. package/test-utils/dom/file-token-group/index.js.map +1 -1
  123. package/test-utils/dom/index.d.ts +20 -0
  124. package/test-utils/dom/index.js +15 -1
  125. package/test-utils/dom/index.js.map +1 -1
  126. package/test-utils/dom/internal/drag-handle.js +5 -5
  127. package/test-utils/dom/internal/drag-handle.js.map +1 -1
  128. package/test-utils/dom/internal/option.d.ts +1 -0
  129. package/test-utils/dom/internal/option.js +13 -1
  130. package/test-utils/dom/internal/option.js.map +1 -1
  131. package/test-utils/dom/multiselect/index.d.ts +3 -3
  132. package/test-utils/dom/token/index.d.ts +26 -0
  133. package/test-utils/dom/token/index.js +45 -0
  134. package/test-utils/dom/token/index.js.map +1 -0
  135. package/test-utils/dom/token-group/index.d.ts +3 -3
  136. package/test-utils/dom/token-group/index.js +6 -4
  137. package/test-utils/dom/token-group/index.js.map +1 -1
  138. package/test-utils/dom/token-group/token.d.ts +1 -2
  139. package/test-utils/dom/token-group/token.js +8 -5
  140. package/test-utils/dom/token-group/token.js.map +1 -1
  141. package/test-utils/selectors/file-token-group/index.js +1 -1
  142. package/test-utils/selectors/file-token-group/index.js.map +1 -1
  143. package/test-utils/selectors/index.d.ts +18 -0
  144. package/test-utils/selectors/index.js +15 -1
  145. package/test-utils/selectors/index.js.map +1 -1
  146. package/test-utils/selectors/internal/drag-handle.js +5 -5
  147. package/test-utils/selectors/internal/drag-handle.js.map +1 -1
  148. package/test-utils/selectors/multiselect/index.d.ts +3 -3
  149. package/test-utils/selectors/token/index.d.ts +26 -0
  150. package/test-utils/selectors/token/index.js +45 -0
  151. package/test-utils/selectors/token/index.js.map +1 -0
  152. package/test-utils/selectors/token-group/index.d.ts +3 -3
  153. package/test-utils/selectors/token-group/index.js +6 -4
  154. package/test-utils/selectors/token-group/index.js.map +1 -1
  155. package/test-utils/selectors/token-group/token.d.ts +1 -2
  156. package/test-utils/selectors/token-group/token.js +8 -5
  157. package/test-utils/selectors/token-group/token.js.map +1 -1
  158. package/token/analytics-metadata/interfaces.d.ts +12 -0
  159. package/token/analytics-metadata/interfaces.d.ts.map +1 -0
  160. package/token/analytics-metadata/interfaces.js +2 -0
  161. package/token/analytics-metadata/interfaces.js.map +1 -0
  162. package/token/analytics-metadata/styles.css.js +6 -0
  163. package/token/analytics-metadata/styles.scoped.css +7 -0
  164. package/token/analytics-metadata/styles.selectors.js +7 -0
  165. package/{token-group → token}/dismiss-button.d.ts +3 -1
  166. package/token/dismiss-button.d.ts.map +1 -0
  167. package/{token-group → token}/dismiss-button.js +6 -3
  168. package/token/dismiss-button.js.map +1 -0
  169. package/token/index.d.ts +4 -0
  170. package/token/index.d.ts.map +1 -0
  171. package/token/index.js +19 -0
  172. package/token/index.js.map +1 -0
  173. package/token/interfaces.d.ts +60 -0
  174. package/token/interfaces.d.ts.map +1 -0
  175. package/token/interfaces.js +2 -0
  176. package/token/interfaces.js.map +1 -0
  177. package/token/internal.d.ts +26 -0
  178. package/token/internal.d.ts.map +1 -0
  179. package/token/internal.js +77 -0
  180. package/token/internal.js.map +1 -0
  181. package/token/styles.css.js +19 -0
  182. package/token/styles.scoped.css +357 -0
  183. package/token/styles.selectors.js +20 -0
  184. package/token/test-classes/styles.css.js +7 -0
  185. package/token/test-classes/styles.scoped.css +8 -0
  186. package/token/test-classes/styles.selectors.js +8 -0
  187. package/token-group/analytics-metadata/interfaces.d.ts +0 -8
  188. package/token-group/analytics-metadata/interfaces.d.ts.map +1 -1
  189. package/token-group/analytics-metadata/interfaces.js.map +1 -1
  190. package/token-group/internal.d.ts.map +1 -1
  191. package/token-group/internal.js +5 -6
  192. package/token-group/internal.js.map +1 -1
  193. package/token-group/styles.css.js +5 -8
  194. package/token-group/styles.scoped.css +7 -115
  195. package/token-group/styles.selectors.js +5 -8
  196. package/app-layout/utils/use-ai-drawer.d.ts +0 -34
  197. package/app-layout/utils/use-ai-drawer.d.ts.map +0 -1
  198. package/app-layout/utils/use-ai-drawer.js +0 -111
  199. package/app-layout/utils/use-ai-drawer.js.map +0 -1
  200. package/internal/plugins/widget/internal.d.ts +0 -24
  201. package/internal/plugins/widget/internal.d.ts.map +0 -1
  202. package/internal/plugins/widget/internal.js.map +0 -1
  203. package/token-group/dismiss-button.d.ts.map +0 -1
  204. package/token-group/dismiss-button.js.map +0 -1
  205. package/token-group/token.d.ts +0 -20
  206. package/token-group/token.d.ts.map +0 -1
  207. package/token-group/token.js +0 -17
  208. package/token-group/token.js.map +0 -1
@@ -1,13 +1,15 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import React, { useEffect, useRef, useState } from 'react';
3
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
4
4
  import clsx from 'clsx';
5
5
  import { useStableCallback, useUniqueId } from '@cloudscape-design/component-toolkit/internal';
6
6
  import { getIsRtl, getLogicalBoundingClientRect, getLogicalPageX } from '@cloudscape-design/component-toolkit/internal';
7
7
  import { useSingleTabStopNavigation } from '@cloudscape-design/component-toolkit/internal';
8
+ import DragHandleWrapper from '../../internal/components/drag-handle-wrapper';
8
9
  import { useVisualRefresh } from '../../internal/hooks/use-visual-mode';
9
10
  import { KeyCode } from '../../internal/keycode';
10
11
  import handleKey, { isEventLike } from '../../internal/utils/handle-key';
12
+ import { scrollElementIntoView } from '../../internal/utils/scrollable-containers';
11
13
  import { DEFAULT_COLUMN_WIDTH } from '../use-column-widths';
12
14
  import { getHeaderWidth, getResizerElements } from './resizer-lookup';
13
15
  import styles from './styles.css.js';
@@ -17,14 +19,18 @@ const AUTO_GROW_INCREMENT = 5;
17
19
  export function Divider({ className }) {
18
20
  return React.createElement("span", { className: clsx(styles.divider, styles['divider-disabled'], className) });
19
21
  }
20
- export function Resizer({ onWidthUpdate, onWidthUpdateCommit, ariaLabelledby, minWidth = DEFAULT_COLUMN_WIDTH, tabIndex, showFocusRing, focusId, roleDescription, }) {
22
+ export function Resizer({ onWidthUpdate, onWidthUpdateCommit, ariaLabelledby, minWidth = DEFAULT_COLUMN_WIDTH, tabIndex, showFocusRing, focusId, roleDescription, tooltipText, }) {
21
23
  onWidthUpdate = useStableCallback(onWidthUpdate);
22
24
  onWidthUpdateCommit = useStableCallback(onWidthUpdateCommit);
23
25
  const isVisualRefresh = useVisualRefresh();
24
26
  const separatorId = useUniqueId();
27
+ const positioningWrapperRef = useRef(null);
25
28
  const resizerToggleRef = useRef(null);
26
29
  const resizerSeparatorRef = useRef(null);
30
+ const [isPointerDown, setIsPointerDown] = useState(false);
27
31
  const [isDragging, setIsDragging] = useState(false);
32
+ const [showUapButtons, setShowUapButtons] = useState(false);
33
+ const [resizerObscured, setResizerObscured] = useState(false);
28
34
  const [isKeyboardDragging, setIsKeyboardDragging] = useState(false);
29
35
  const autoGrowTimeout = useRef();
30
36
  const [resizerHasFocus, setResizerHasFocus] = useState(false);
@@ -33,38 +39,101 @@ export function Resizer({ onWidthUpdate, onWidthUpdateCommit, ariaLabelledby, mi
33
39
  useEffect(() => {
34
40
  setHeaderCellWidth(getHeaderWidth(resizerToggleRef.current));
35
41
  }, []);
42
+ const isObscured = useCallback(() => {
43
+ const elements = getResizerElements(resizerToggleRef.current);
44
+ if (!elements || !positioningWrapperRef.current) {
45
+ return false;
46
+ }
47
+ let scrollPaddingInlineStart = 0;
48
+ let scrollPaddingInlineEnd = 0;
49
+ // Calculate size of the headers at the exact moment of the call to deal
50
+ // with auto-width columns and cached sticky column state.
51
+ elements.allHeaders.forEach(header => {
52
+ const { inlineSize } = getLogicalBoundingClientRect(header);
53
+ if (header.style.insetInlineStart) {
54
+ scrollPaddingInlineStart += inlineSize;
55
+ }
56
+ if (header.style.insetInlineEnd) {
57
+ scrollPaddingInlineEnd += inlineSize;
58
+ }
59
+ });
60
+ const { insetInlineStart: scrollParentInsetInlineStart, insetInlineEnd: scrollParentInsetInlineEnd } = getLogicalBoundingClientRect(elements.scrollParent);
61
+ const { insetInlineStart, insetInlineEnd, inlineSize } = getLogicalBoundingClientRect(elements.header);
62
+ const relativeInsetInlineStart = insetInlineStart - scrollParentInsetInlineStart;
63
+ const relativeInsetInlineEnd = scrollParentInsetInlineEnd - insetInlineEnd;
64
+ const isSticky = !!elements.header.style.insetInlineStart || !!elements.header.style.insetInlineEnd;
65
+ return (
66
+ // Is positioningWrapper obscured behind the left edge of scrollParent?
67
+ Math.ceil(relativeInsetInlineStart + inlineSize) < (isSticky ? 0 : scrollPaddingInlineStart) ||
68
+ // Is positioningWrapper obscured behind the right edge of scrollParent?
69
+ Math.ceil(relativeInsetInlineEnd) < (isSticky ? 0 : scrollPaddingInlineEnd));
70
+ }, []);
71
+ const scrollIntoViewIfNeeded = useCallback(() => {
72
+ if (resizerSeparatorRef.current && isObscured()) {
73
+ scrollElementIntoView(resizerSeparatorRef.current);
74
+ }
75
+ }, [isObscured]);
76
+ useEffect(() => {
77
+ if (!showUapButtons) {
78
+ setResizerObscured(false);
79
+ return;
80
+ }
81
+ const elements = getResizerElements(resizerToggleRef.current);
82
+ if (!elements) {
83
+ return;
84
+ }
85
+ const onScroll = () => setResizerObscured(isObscured());
86
+ elements.scrollParent.addEventListener('scroll', onScroll);
87
+ return () => elements.scrollParent.removeEventListener('scroll', onScroll);
88
+ }, [isObscured, showUapButtons]);
89
+ useEffect(() => {
90
+ if (showUapButtons) {
91
+ setResizerObscured(isObscured());
92
+ }
93
+ }, [headerCellWidth, isObscured, showUapButtons]);
94
+ const updateTrackerPosition = useCallback((newOffset) => {
95
+ const elements = getResizerElements(resizerToggleRef.current);
96
+ if (!elements) {
97
+ return;
98
+ }
99
+ const { insetInlineStart: scrollParentInsetInlineStart } = getLogicalBoundingClientRect(elements.table);
100
+ elements.tracker.style.insetBlockStart = getLogicalBoundingClientRect(elements.header).blockSize + 'px';
101
+ // minus one pixel to offset the cell border
102
+ elements.tracker.style.insetInlineStart = newOffset - scrollParentInsetInlineStart - 1 + 'px';
103
+ }, []);
104
+ const updateColumnWidth = useCallback((newWidth) => {
105
+ const elements = getResizerElements(resizerToggleRef.current);
106
+ if (!elements) {
107
+ return;
108
+ }
109
+ const { insetInlineEnd, inlineSize } = getLogicalBoundingClientRect(elements.header);
110
+ const updatedWidth = newWidth < minWidth ? minWidth : newWidth;
111
+ updateTrackerPosition(insetInlineEnd + updatedWidth - inlineSize);
112
+ setHeaderCellWidth(updatedWidth);
113
+ // callbacks must be the last calls in the handler, because they may cause an extra update
114
+ onWidthUpdate(newWidth);
115
+ }, [minWidth, onWidthUpdate, updateTrackerPosition]);
116
+ const resizeColumn = useCallback((offset) => {
117
+ const elements = getResizerElements(resizerToggleRef.current);
118
+ if (!elements) {
119
+ return;
120
+ }
121
+ const { insetInlineStart: inlineStartEdge } = getLogicalBoundingClientRect(elements.scrollParent);
122
+ if (offset > inlineStartEdge) {
123
+ const cellLeft = getLogicalBoundingClientRect(elements.header).insetInlineStart;
124
+ const newWidth = offset - cellLeft;
125
+ // callbacks must be the last calls in the handler, because they may cause an extra update
126
+ updateColumnWidth(newWidth);
127
+ }
128
+ }, [updateColumnWidth]);
36
129
  useEffect(() => {
37
130
  var _a, _b;
38
131
  const elements = getResizerElements(resizerToggleRef.current);
39
132
  const document = (_b = (_a = resizerToggleRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument) !== null && _b !== void 0 ? _b : window.document;
40
- if ((!isDragging && !resizerHasFocus) || !elements) {
133
+ if ((!isPointerDown && !resizerHasFocus) || !elements) {
41
134
  return;
42
135
  }
43
- const { insetInlineStart: inlineStartEdge, insetInlineEnd: inlineEndEdge } = getLogicalBoundingClientRect(elements.scrollParent);
44
- const updateTrackerPosition = (newOffset) => {
45
- const { insetInlineStart: scrollParentInsetInlineStart } = getLogicalBoundingClientRect(elements.table);
46
- elements.tracker.style.insetBlockStart = getLogicalBoundingClientRect(elements.header).blockSize + 'px';
47
- // minus one pixel to offset the cell border
48
- elements.tracker.style.insetInlineStart = newOffset - scrollParentInsetInlineStart - 1 + 'px';
49
- };
50
- const updateColumnWidth = (newWidth) => {
51
- const { insetInlineEnd, inlineSize } = getLogicalBoundingClientRect(elements.header);
52
- const updatedWidth = newWidth < minWidth ? minWidth : newWidth;
53
- updateTrackerPosition(insetInlineEnd + updatedWidth - inlineSize);
54
- if (newWidth >= minWidth) {
55
- setHeaderCellWidth(newWidth);
56
- }
57
- // callbacks must be the last calls in the handler, because they may cause an extra update
58
- onWidthUpdate(newWidth);
59
- };
60
- const resizeColumn = (offset) => {
61
- if (offset > inlineStartEdge) {
62
- const cellLeft = getLogicalBoundingClientRect(elements.header).insetInlineStart;
63
- const newWidth = offset - cellLeft;
64
- // callbacks must be the last calls in the handler, because they may cause an extra update
65
- updateColumnWidth(newWidth);
66
- }
67
- };
136
+ const { insetInlineEnd: inlineEndEdge } = getLogicalBoundingClientRect(elements.scrollParent);
68
137
  const onAutoGrow = () => {
69
138
  const inlineSize = getLogicalBoundingClientRect(elements.header).inlineSize;
70
139
  autoGrowTimeout.current = setTimeout(onAutoGrow, AUTO_GROW_INTERVAL);
@@ -72,7 +141,8 @@ export function Resizer({ onWidthUpdate, onWidthUpdateCommit, ariaLabelledby, mi
72
141
  updateColumnWidth(inlineSize + AUTO_GROW_INCREMENT);
73
142
  elements.scrollParent.scrollLeft += AUTO_GROW_INCREMENT * (getIsRtl(elements.scrollParent) ? -1 : 1);
74
143
  };
75
- const onMouseMove = (event) => {
144
+ const onPointerMove = (event) => {
145
+ setIsDragging(true);
76
146
  clearTimeout(autoGrowTimeout.current);
77
147
  const offset = getLogicalPageX(event);
78
148
  if (offset > inlineEndEdge) {
@@ -82,9 +152,15 @@ export function Resizer({ onWidthUpdate, onWidthUpdateCommit, ariaLabelledby, mi
82
152
  resizeColumn(offset);
83
153
  }
84
154
  };
85
- const onMouseUp = (event) => {
86
- resizeColumn(getLogicalPageX(event));
87
- setIsDragging(false);
155
+ const onPointerUp = (event) => {
156
+ setIsPointerDown(false);
157
+ if (isDragging) {
158
+ setIsDragging(false);
159
+ resizeColumn(getLogicalPageX(event));
160
+ }
161
+ else {
162
+ setShowUapButtons(true);
163
+ }
88
164
  onWidthUpdateCommit();
89
165
  clearTimeout(autoGrowTimeout.current);
90
166
  };
@@ -98,41 +174,57 @@ export function Resizer({ onWidthUpdate, onWidthUpdateCommit, ariaLabelledby, mi
98
174
  onActivate: () => {
99
175
  var _a;
100
176
  setIsKeyboardDragging(false);
177
+ setShowUapButtons(false);
101
178
  (_a = resizerToggleRef.current) === null || _a === void 0 ? void 0 : _a.focus();
102
179
  },
103
180
  onEscape: () => {
104
181
  var _a;
105
182
  setIsKeyboardDragging(false);
183
+ setShowUapButtons(false);
106
184
  (_a = resizerToggleRef.current) === null || _a === void 0 ? void 0 : _a.focus();
107
185
  },
108
- onInlineStart: () => updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize - 10),
109
- onInlineEnd: () => updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize + 10),
186
+ onInlineStart: () => {
187
+ updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize - 10);
188
+ scrollIntoViewIfNeeded();
189
+ },
190
+ onInlineEnd: () => {
191
+ updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize + 10);
192
+ scrollIntoViewIfNeeded();
193
+ },
110
194
  });
111
195
  }
112
196
  }
113
197
  }
114
- // Enter keyboard dragging mode
115
- else if (event.keyCode === KeyCode.enter || event.keyCode === KeyCode.space) {
116
- event.preventDefault();
117
- if (isEventLike(event)) {
118
- handleKey(event, {
119
- onActivate: () => {
120
- var _a;
121
- setIsKeyboardDragging(true);
122
- (_a = resizerSeparatorRef.current) === null || _a === void 0 ? void 0 : _a.focus();
123
- },
124
- });
198
+ else {
199
+ if (event.keyCode === KeyCode.enter || event.keyCode === KeyCode.space) {
200
+ // Enter keyboard dragging mode
201
+ event.preventDefault();
202
+ if (isEventLike(event)) {
203
+ handleKey(event, {
204
+ onActivate: () => {
205
+ var _a;
206
+ setShowUapButtons(true);
207
+ setIsKeyboardDragging(true);
208
+ (_a = resizerSeparatorRef.current) === null || _a === void 0 ? void 0 : _a.focus();
209
+ },
210
+ });
211
+ }
212
+ }
213
+ else {
214
+ // Showing the UAP buttons when the button is only focused and not activated
215
+ // gives a false impression that you can resize with the arrow keys.
216
+ setShowUapButtons(false);
125
217
  }
126
218
  }
127
219
  };
128
220
  updateTrackerPosition(getLogicalBoundingClientRect(elements.header).insetInlineEnd);
129
221
  const controller = new AbortController();
130
- if (isDragging) {
222
+ if (isPointerDown) {
131
223
  document.body.classList.add(styles['resize-active']);
132
- document.addEventListener('mousemove', onMouseMove, { signal: controller.signal });
133
- document.addEventListener('mouseup', onMouseUp, { signal: controller.signal });
224
+ document.addEventListener('pointermove', onPointerMove, { signal: controller.signal });
225
+ document.addEventListener('pointerup', onPointerUp, { signal: controller.signal });
134
226
  }
135
- if (resizerHasFocus) {
227
+ else if (resizerHasFocus) {
136
228
  document.body.classList.add(styles['resize-active-with-focus']);
137
229
  elements.header.addEventListener('keydown', onKeyDown, { signal: controller.signal });
138
230
  }
@@ -140,44 +232,85 @@ export function Resizer({ onWidthUpdate, onWidthUpdateCommit, ariaLabelledby, mi
140
232
  document.body.classList.add(styles['resize-active']);
141
233
  }
142
234
  return () => {
143
- clearTimeout(autoGrowTimeout.current);
144
235
  document.body.classList.remove(styles['resize-active']);
145
236
  document.body.classList.remove(styles['resize-active-with-focus']);
146
237
  controller.abort();
147
238
  };
148
- }, [minWidth, isDragging, isKeyboardDragging, resizerHasFocus, onWidthUpdate, onWidthUpdateCommit]);
239
+ }, [
240
+ isDragging,
241
+ isKeyboardDragging,
242
+ isPointerDown,
243
+ resizerHasFocus,
244
+ scrollIntoViewIfNeeded,
245
+ onWidthUpdateCommit,
246
+ resizeColumn,
247
+ updateColumnWidth,
248
+ updateTrackerPosition,
249
+ ]);
250
+ useEffect(() => {
251
+ if (isDragging) {
252
+ return () => clearTimeout(autoGrowTimeout.current);
253
+ }
254
+ }, [isDragging]);
149
255
  const { tabIndex: resizerTabIndex } = useSingleTabStopNavigation(resizerToggleRef, { tabIndex });
150
- return (React.createElement(React.Fragment, null,
151
- React.createElement("button", { ref: resizerToggleRef, className: clsx(styles.resizer, (resizerHasFocus || showFocusRing || isKeyboardDragging) && styles['has-focus'], isVisualRefresh && styles['is-visual-refresh']), onMouseDown: event => {
152
- if (event.button !== 0) {
256
+ return (React.createElement("div", { className: clsx(styles['resizer-wrapper'], isVisualRefresh && styles['is-visual-refresh']), ref: positioningWrapperRef },
257
+ React.createElement(DragHandleWrapper, { clickDragThreshold: 3, hideButtonsOnDrag: false, directions: {
258
+ 'inline-start': resizerObscured ? undefined : headerCellWidth > minWidth ? 'active' : 'disabled',
259
+ 'inline-end': resizerObscured ? undefined : 'active',
260
+ }, triggerMode: "controlled", controlledShowButtons: showUapButtons && !resizerObscured, wrapperClassName: styles['resizer-button-wrapper'], tooltipText: tooltipText, "data-obscured": resizerObscured, onDirectionClick: direction => {
261
+ const elements = getResizerElements(resizerToggleRef.current);
262
+ if (!elements) {
153
263
  return;
154
264
  }
155
- event.preventDefault();
156
- setIsDragging(true);
157
- }, onClick: () => {
158
- var _a;
159
- // Prevent mouse drag activation and activate keyboard dragging for VO+Space click.
160
- setIsDragging(false);
161
- setResizerHasFocus(true);
162
- setIsKeyboardDragging(true);
163
- (_a = resizerSeparatorRef.current) === null || _a === void 0 ? void 0 : _a.focus();
164
- }, onFocus: () => {
165
- setHeaderCellWidth(getHeaderWidth(resizerToggleRef.current));
166
- setResizerHasFocus(true);
167
- }, onBlur: event => {
168
- // Ignoring blur event when focus moves to the resizer separator element.
169
- // (This focus transition is done programmatically when the resizer button is clicked).
170
- if (event.relatedTarget !== resizerSeparatorRef.current) {
171
- setResizerHasFocus(false);
265
+ if (direction === 'inline-start') {
266
+ updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize - 20);
267
+ requestAnimationFrame(() => {
268
+ onWidthUpdateCommit();
269
+ scrollIntoViewIfNeeded();
270
+ });
172
271
  }
173
- }, "aria-roledescription": roleDescription, "aria-labelledby": ariaLabelledby, tabIndex: resizerTabIndex, "data-focus-id": focusId }),
174
- React.createElement("span", { className: clsx(styles['divider-interactive'], isDragging && styles['divider-active'], isVisualRefresh && styles['is-visual-refresh']), "data-awsui-table-suppress-navigation": true, ref: resizerSeparatorRef, id: separatorId, role: "slider", tabIndex: -1, "aria-labelledby": ariaLabelledby, "aria-hidden": !isKeyboardDragging, "aria-valuemin": minWidth, "aria-valuemax": Number.MAX_SAFE_INTEGER, "aria-valuenow": headerCellWidth, "data-focus-id": focusId, onBlur: () => {
175
- setResizerHasFocus(false);
176
- if (isKeyboardDragging) {
177
- setIsKeyboardDragging(false);
272
+ else if (direction === 'inline-end') {
273
+ updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize + 20);
274
+ requestAnimationFrame(() => {
275
+ onWidthUpdateCommit();
276
+ scrollIntoViewIfNeeded();
277
+ });
178
278
  }
179
- onWidthUpdateCommit();
180
- } })));
279
+ } },
280
+ React.createElement("button", { ref: resizerToggleRef, className: clsx(styles.resizer, (resizerHasFocus || showFocusRing || isKeyboardDragging) && styles['has-focus'], isVisualRefresh && styles['is-visual-refresh']), onPointerDown: event => {
281
+ if (event.pointerType === 'mouse' && event.button !== 0) {
282
+ return;
283
+ }
284
+ setIsPointerDown(true);
285
+ }, onClick: () => {
286
+ var _a;
287
+ // Prevent mouse drag activation and activate keyboard dragging for VO+Space click.
288
+ setIsPointerDown(false);
289
+ setIsDragging(false);
290
+ setShowUapButtons(true);
291
+ setResizerHasFocus(true);
292
+ setIsKeyboardDragging(true);
293
+ (_a = resizerSeparatorRef.current) === null || _a === void 0 ? void 0 : _a.focus();
294
+ }, onFocus: () => {
295
+ setHeaderCellWidth(getHeaderWidth(resizerToggleRef.current));
296
+ setResizerHasFocus(true);
297
+ }, onBlur: event => {
298
+ // Ignoring blur event when focus moves to the resizer separator element.
299
+ // (This focus transition is done programmatically when the resizer button is clicked).
300
+ if (event.relatedTarget !== resizerSeparatorRef.current) {
301
+ setResizerHasFocus(false);
302
+ setShowUapButtons(false);
303
+ return;
304
+ }
305
+ }, "aria-roledescription": roleDescription, "aria-labelledby": ariaLabelledby, tabIndex: resizerTabIndex, "data-focus-id": focusId }),
306
+ React.createElement("span", { className: clsx(styles['divider-interactive'], (isPointerDown || isDragging) && styles['divider-active'], isVisualRefresh && styles['is-visual-refresh']), "data-awsui-table-suppress-navigation": true, ref: resizerSeparatorRef, id: separatorId, role: "slider", tabIndex: -1, "aria-labelledby": ariaLabelledby, "aria-hidden": !isKeyboardDragging, "aria-valuemin": minWidth, "aria-valuemax": Number.MAX_SAFE_INTEGER, "aria-valuenow": headerCellWidth, "data-focus-id": focusId, onBlur: event => {
307
+ setIsKeyboardDragging(false);
308
+ if (event.relatedTarget !== resizerToggleRef.current) {
309
+ setResizerHasFocus(false);
310
+ setShowUapButtons(false);
311
+ }
312
+ onWidthUpdateCommit();
313
+ } }))));
181
314
  }
182
315
  export function ResizeTracker() {
183
316
  return React.createElement("span", { className: styles.tracker });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table/resizer/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { useStableCallback, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\nimport { getIsRtl, getLogicalBoundingClientRect, getLogicalPageX } from '@cloudscape-design/component-toolkit/internal';\nimport { useSingleTabStopNavigation } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useVisualRefresh } from '../../internal/hooks/use-visual-mode';\nimport { KeyCode } from '../../internal/keycode';\nimport handleKey, { isEventLike } from '../../internal/utils/handle-key';\nimport { DEFAULT_COLUMN_WIDTH } from '../use-column-widths';\nimport { getHeaderWidth, getResizerElements } from './resizer-lookup';\n\nimport styles from './styles.css.js';\n\ninterface ResizerProps {\n onWidthUpdate: (newWidth: number) => void;\n onWidthUpdateCommit: () => void;\n ariaLabelledby?: string;\n minWidth?: number;\n tabIndex?: number;\n focusId?: string;\n showFocusRing?: boolean;\n roleDescription?: string;\n}\n\nconst AUTO_GROW_START_TIME = 10;\nconst AUTO_GROW_INTERVAL = 10;\nconst AUTO_GROW_INCREMENT = 5;\n\nexport function Divider({ className }: { className?: string }) {\n return <span className={clsx(styles.divider, styles['divider-disabled'], className)} />;\n}\n\nexport function Resizer({\n onWidthUpdate,\n onWidthUpdateCommit,\n ariaLabelledby,\n minWidth = DEFAULT_COLUMN_WIDTH,\n tabIndex,\n showFocusRing,\n focusId,\n roleDescription,\n}: ResizerProps) {\n onWidthUpdate = useStableCallback(onWidthUpdate);\n onWidthUpdateCommit = useStableCallback(onWidthUpdateCommit);\n\n const isVisualRefresh = useVisualRefresh();\n\n const separatorId = useUniqueId();\n const resizerToggleRef = useRef<HTMLButtonElement>(null);\n const resizerSeparatorRef = useRef<HTMLSpanElement>(null);\n\n const [isDragging, setIsDragging] = useState(false);\n const [isKeyboardDragging, setIsKeyboardDragging] = useState(false);\n const autoGrowTimeout = useRef<ReturnType<typeof setTimeout> | undefined>();\n const [resizerHasFocus, setResizerHasFocus] = useState(false);\n const [headerCellWidth, setHeaderCellWidth] = useState(0);\n\n // Read header width after mounting for it to be available in the element's ARIA label before it gets focused.\n useEffect(() => {\n setHeaderCellWidth(getHeaderWidth(resizerToggleRef.current));\n }, []);\n\n useEffect(() => {\n const elements = getResizerElements(resizerToggleRef.current);\n const document = resizerToggleRef.current?.ownerDocument ?? window.document;\n\n if ((!isDragging && !resizerHasFocus) || !elements) {\n return;\n }\n\n const { insetInlineStart: inlineStartEdge, insetInlineEnd: inlineEndEdge } = getLogicalBoundingClientRect(\n elements.scrollParent\n );\n\n const updateTrackerPosition = (newOffset: number) => {\n const { insetInlineStart: scrollParentInsetInlineStart } = getLogicalBoundingClientRect(elements.table);\n elements.tracker.style.insetBlockStart = getLogicalBoundingClientRect(elements.header).blockSize + 'px';\n // minus one pixel to offset the cell border\n elements.tracker.style.insetInlineStart = newOffset - scrollParentInsetInlineStart - 1 + 'px';\n };\n\n const updateColumnWidth = (newWidth: number) => {\n const { insetInlineEnd, inlineSize } = getLogicalBoundingClientRect(elements.header);\n const updatedWidth = newWidth < minWidth ? minWidth : newWidth;\n updateTrackerPosition(insetInlineEnd + updatedWidth - inlineSize);\n if (newWidth >= minWidth) {\n setHeaderCellWidth(newWidth);\n }\n // callbacks must be the last calls in the handler, because they may cause an extra update\n onWidthUpdate(newWidth);\n };\n\n const resizeColumn = (offset: number) => {\n if (offset > inlineStartEdge) {\n const cellLeft = getLogicalBoundingClientRect(elements.header).insetInlineStart;\n const newWidth = offset - cellLeft;\n // callbacks must be the last calls in the handler, because they may cause an extra update\n updateColumnWidth(newWidth);\n }\n };\n\n const onAutoGrow = () => {\n const inlineSize = getLogicalBoundingClientRect(elements.header).inlineSize;\n autoGrowTimeout.current = setTimeout(onAutoGrow, AUTO_GROW_INTERVAL);\n // callbacks must be the last calls in the handler, because they may cause an extra update\n updateColumnWidth(inlineSize + AUTO_GROW_INCREMENT);\n elements.scrollParent.scrollLeft += AUTO_GROW_INCREMENT * (getIsRtl(elements.scrollParent) ? -1 : 1);\n };\n\n const onMouseMove = (event: MouseEvent) => {\n clearTimeout(autoGrowTimeout.current);\n const offset = getLogicalPageX(event);\n if (offset > inlineEndEdge) {\n autoGrowTimeout.current = setTimeout(onAutoGrow, AUTO_GROW_START_TIME);\n } else {\n resizeColumn(offset);\n }\n };\n\n const onMouseUp = (event: MouseEvent) => {\n resizeColumn(getLogicalPageX(event));\n setIsDragging(false);\n onWidthUpdateCommit();\n clearTimeout(autoGrowTimeout.current);\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (isKeyboardDragging) {\n const keys = [KeyCode.left, KeyCode.right, KeyCode.enter, KeyCode.right, KeyCode.space, KeyCode.escape];\n\n if (keys.indexOf(event.keyCode) !== -1) {\n event.preventDefault();\n\n if (isEventLike(event)) {\n handleKey(event, {\n onActivate: () => {\n setIsKeyboardDragging(false);\n resizerToggleRef.current?.focus();\n },\n onEscape: () => {\n setIsKeyboardDragging(false);\n resizerToggleRef.current?.focus();\n },\n onInlineStart: () => updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize - 10),\n onInlineEnd: () => updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize + 10),\n });\n }\n }\n }\n // Enter keyboard dragging mode\n else if (event.keyCode === KeyCode.enter || event.keyCode === KeyCode.space) {\n event.preventDefault();\n\n if (isEventLike(event)) {\n handleKey(event, {\n onActivate: () => {\n setIsKeyboardDragging(true);\n resizerSeparatorRef.current?.focus();\n },\n });\n }\n }\n };\n\n updateTrackerPosition(getLogicalBoundingClientRect(elements.header).insetInlineEnd);\n const controller = new AbortController();\n\n if (isDragging) {\n document.body.classList.add(styles['resize-active']);\n document.addEventListener('mousemove', onMouseMove, { signal: controller.signal });\n document.addEventListener('mouseup', onMouseUp, { signal: controller.signal });\n }\n if (resizerHasFocus) {\n document.body.classList.add(styles['resize-active-with-focus']);\n elements.header.addEventListener('keydown', onKeyDown, { signal: controller.signal });\n }\n if (isKeyboardDragging) {\n document.body.classList.add(styles['resize-active']);\n }\n\n return () => {\n clearTimeout(autoGrowTimeout.current);\n document.body.classList.remove(styles['resize-active']);\n document.body.classList.remove(styles['resize-active-with-focus']);\n controller.abort();\n };\n }, [minWidth, isDragging, isKeyboardDragging, resizerHasFocus, onWidthUpdate, onWidthUpdateCommit]);\n\n const { tabIndex: resizerTabIndex } = useSingleTabStopNavigation(resizerToggleRef, { tabIndex });\n\n return (\n <>\n <button\n ref={resizerToggleRef}\n className={clsx(\n styles.resizer,\n (resizerHasFocus || showFocusRing || isKeyboardDragging) && styles['has-focus'],\n isVisualRefresh && styles['is-visual-refresh']\n )}\n onMouseDown={event => {\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n setIsDragging(true);\n }}\n onClick={() => {\n // Prevent mouse drag activation and activate keyboard dragging for VO+Space click.\n setIsDragging(false);\n setResizerHasFocus(true);\n setIsKeyboardDragging(true);\n resizerSeparatorRef.current?.focus();\n }}\n onFocus={() => {\n setHeaderCellWidth(getHeaderWidth(resizerToggleRef.current));\n setResizerHasFocus(true);\n }}\n onBlur={event => {\n // Ignoring blur event when focus moves to the resizer separator element.\n // (This focus transition is done programmatically when the resizer button is clicked).\n if (event.relatedTarget !== resizerSeparatorRef.current) {\n setResizerHasFocus(false);\n }\n }}\n // Using a custom role-description to make the element's purpose better clear.\n // The role-description must include the word \"button\" to imply the interaction model.\n // See https://www.w3.org/TR/wai-aria-1.1/#aria-roledescription\n aria-roledescription={roleDescription}\n aria-labelledby={ariaLabelledby}\n tabIndex={resizerTabIndex}\n data-focus-id={focusId}\n />\n <span\n className={clsx(\n styles['divider-interactive'],\n isDragging && styles['divider-active'],\n isVisualRefresh && styles['is-visual-refresh']\n )}\n data-awsui-table-suppress-navigation={true}\n ref={resizerSeparatorRef}\n id={separatorId}\n role=\"slider\"\n tabIndex={-1}\n aria-labelledby={ariaLabelledby}\n aria-hidden={!isKeyboardDragging}\n aria-valuemin={minWidth}\n // aria-valuemax is needed because the slider is inoperable in VoiceOver without it\n aria-valuemax={Number.MAX_SAFE_INTEGER}\n aria-valuenow={headerCellWidth}\n data-focus-id={focusId}\n onBlur={() => {\n setResizerHasFocus(false);\n if (isKeyboardDragging) {\n setIsKeyboardDragging(false);\n }\n onWidthUpdateCommit();\n }}\n />\n </>\n );\n}\n\nexport function ResizeTracker() {\n return <span className={styles.tracker} />;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table/resizer/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { useStableCallback, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\nimport { getIsRtl, getLogicalBoundingClientRect, getLogicalPageX } from '@cloudscape-design/component-toolkit/internal';\nimport { useSingleTabStopNavigation } from '@cloudscape-design/component-toolkit/internal';\n\nimport DragHandleWrapper from '../../internal/components/drag-handle-wrapper';\nimport { useVisualRefresh } from '../../internal/hooks/use-visual-mode';\nimport { KeyCode } from '../../internal/keycode';\nimport handleKey, { isEventLike } from '../../internal/utils/handle-key';\nimport { scrollElementIntoView } from '../../internal/utils/scrollable-containers';\nimport { DEFAULT_COLUMN_WIDTH } from '../use-column-widths';\nimport { getHeaderWidth, getResizerElements } from './resizer-lookup';\n\nimport styles from './styles.css.js';\n\ninterface ResizerProps {\n onWidthUpdate: (newWidth: number) => void;\n onWidthUpdateCommit: () => void;\n ariaLabelledby?: string;\n minWidth?: number;\n tabIndex?: number;\n focusId?: string;\n showFocusRing?: boolean;\n roleDescription?: string;\n tooltipText?: string;\n}\n\nconst AUTO_GROW_START_TIME = 10;\nconst AUTO_GROW_INTERVAL = 10;\nconst AUTO_GROW_INCREMENT = 5;\n\nexport function Divider({ className }: { className?: string }) {\n return <span className={clsx(styles.divider, styles['divider-disabled'], className)} />;\n}\n\nexport function Resizer({\n onWidthUpdate,\n onWidthUpdateCommit,\n ariaLabelledby,\n minWidth = DEFAULT_COLUMN_WIDTH,\n tabIndex,\n showFocusRing,\n focusId,\n roleDescription,\n tooltipText,\n}: ResizerProps) {\n onWidthUpdate = useStableCallback(onWidthUpdate);\n onWidthUpdateCommit = useStableCallback(onWidthUpdateCommit);\n\n const isVisualRefresh = useVisualRefresh();\n\n const separatorId = useUniqueId();\n const positioningWrapperRef = useRef<HTMLDivElement | null>(null);\n const resizerToggleRef = useRef<HTMLButtonElement | null>(null);\n const resizerSeparatorRef = useRef<HTMLSpanElement | null>(null);\n\n const [isPointerDown, setIsPointerDown] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [showUapButtons, setShowUapButtons] = useState(false);\n const [resizerObscured, setResizerObscured] = useState(false);\n const [isKeyboardDragging, setIsKeyboardDragging] = useState(false);\n const autoGrowTimeout = useRef<ReturnType<typeof setTimeout> | undefined>();\n const [resizerHasFocus, setResizerHasFocus] = useState(false);\n const [headerCellWidth, setHeaderCellWidth] = useState(0);\n\n // Read header width after mounting for it to be available in the element's ARIA label before it gets focused.\n useEffect(() => {\n setHeaderCellWidth(getHeaderWidth(resizerToggleRef.current));\n }, []);\n\n const isObscured = useCallback(() => {\n const elements = getResizerElements(resizerToggleRef.current);\n if (!elements || !positioningWrapperRef.current) {\n return false;\n }\n\n let scrollPaddingInlineStart = 0;\n let scrollPaddingInlineEnd = 0;\n\n // Calculate size of the headers at the exact moment of the call to deal\n // with auto-width columns and cached sticky column state.\n elements.allHeaders.forEach(header => {\n const { inlineSize } = getLogicalBoundingClientRect(header);\n if (header.style.insetInlineStart) {\n scrollPaddingInlineStart += inlineSize;\n }\n if (header.style.insetInlineEnd) {\n scrollPaddingInlineEnd += inlineSize;\n }\n });\n\n const { insetInlineStart: scrollParentInsetInlineStart, insetInlineEnd: scrollParentInsetInlineEnd } =\n getLogicalBoundingClientRect(elements.scrollParent);\n const { insetInlineStart, insetInlineEnd, inlineSize } = getLogicalBoundingClientRect(elements.header);\n const relativeInsetInlineStart = insetInlineStart - scrollParentInsetInlineStart;\n const relativeInsetInlineEnd = scrollParentInsetInlineEnd - insetInlineEnd;\n const isSticky = !!elements.header.style.insetInlineStart || !!elements.header.style.insetInlineEnd;\n\n return (\n // Is positioningWrapper obscured behind the left edge of scrollParent?\n Math.ceil(relativeInsetInlineStart + inlineSize) < (isSticky ? 0 : scrollPaddingInlineStart) ||\n // Is positioningWrapper obscured behind the right edge of scrollParent?\n Math.ceil(relativeInsetInlineEnd) < (isSticky ? 0 : scrollPaddingInlineEnd)\n );\n }, []);\n\n const scrollIntoViewIfNeeded = useCallback(() => {\n if (resizerSeparatorRef.current && isObscured()) {\n scrollElementIntoView(resizerSeparatorRef.current);\n }\n }, [isObscured]);\n\n useEffect(() => {\n if (!showUapButtons) {\n setResizerObscured(false);\n return;\n }\n\n const elements = getResizerElements(resizerToggleRef.current);\n if (!elements) {\n return;\n }\n\n const onScroll = () => setResizerObscured(isObscured());\n elements.scrollParent.addEventListener('scroll', onScroll);\n return () => elements.scrollParent.removeEventListener('scroll', onScroll);\n }, [isObscured, showUapButtons]);\n\n useEffect(() => {\n if (showUapButtons) {\n setResizerObscured(isObscured());\n }\n }, [headerCellWidth, isObscured, showUapButtons]);\n\n const updateTrackerPosition = useCallback((newOffset: number) => {\n const elements = getResizerElements(resizerToggleRef.current);\n if (!elements) {\n return;\n }\n\n const { insetInlineStart: scrollParentInsetInlineStart } = getLogicalBoundingClientRect(elements.table);\n elements.tracker.style.insetBlockStart = getLogicalBoundingClientRect(elements.header).blockSize + 'px';\n // minus one pixel to offset the cell border\n elements.tracker.style.insetInlineStart = newOffset - scrollParentInsetInlineStart - 1 + 'px';\n }, []);\n\n const updateColumnWidth = useCallback(\n (newWidth: number) => {\n const elements = getResizerElements(resizerToggleRef.current);\n if (!elements) {\n return;\n }\n\n const { insetInlineEnd, inlineSize } = getLogicalBoundingClientRect(elements.header);\n const updatedWidth = newWidth < minWidth ? minWidth : newWidth;\n updateTrackerPosition(insetInlineEnd + updatedWidth - inlineSize);\n setHeaderCellWidth(updatedWidth);\n\n // callbacks must be the last calls in the handler, because they may cause an extra update\n onWidthUpdate(newWidth);\n },\n [minWidth, onWidthUpdate, updateTrackerPosition]\n );\n\n const resizeColumn = useCallback(\n (offset: number) => {\n const elements = getResizerElements(resizerToggleRef.current);\n if (!elements) {\n return;\n }\n\n const { insetInlineStart: inlineStartEdge } = getLogicalBoundingClientRect(elements.scrollParent);\n if (offset > inlineStartEdge) {\n const cellLeft = getLogicalBoundingClientRect(elements.header).insetInlineStart;\n const newWidth = offset - cellLeft;\n // callbacks must be the last calls in the handler, because they may cause an extra update\n updateColumnWidth(newWidth);\n }\n },\n [updateColumnWidth]\n );\n\n useEffect(() => {\n const elements = getResizerElements(resizerToggleRef.current);\n const document = resizerToggleRef.current?.ownerDocument ?? window.document;\n\n if ((!isPointerDown && !resizerHasFocus) || !elements) {\n return;\n }\n\n const { insetInlineEnd: inlineEndEdge } = getLogicalBoundingClientRect(elements.scrollParent);\n\n const onAutoGrow = () => {\n const inlineSize = getLogicalBoundingClientRect(elements.header).inlineSize;\n autoGrowTimeout.current = setTimeout(onAutoGrow, AUTO_GROW_INTERVAL);\n // callbacks must be the last calls in the handler, because they may cause an extra update\n updateColumnWidth(inlineSize + AUTO_GROW_INCREMENT);\n elements.scrollParent.scrollLeft += AUTO_GROW_INCREMENT * (getIsRtl(elements.scrollParent) ? -1 : 1);\n };\n\n const onPointerMove = (event: PointerEvent) => {\n setIsDragging(true);\n clearTimeout(autoGrowTimeout.current);\n const offset = getLogicalPageX(event);\n if (offset > inlineEndEdge) {\n autoGrowTimeout.current = setTimeout(onAutoGrow, AUTO_GROW_START_TIME);\n } else {\n resizeColumn(offset);\n }\n };\n\n const onPointerUp = (event: PointerEvent) => {\n setIsPointerDown(false);\n if (isDragging) {\n setIsDragging(false);\n resizeColumn(getLogicalPageX(event));\n } else {\n setShowUapButtons(true);\n }\n onWidthUpdateCommit();\n clearTimeout(autoGrowTimeout.current);\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (isKeyboardDragging) {\n const keys = [KeyCode.left, KeyCode.right, KeyCode.enter, KeyCode.right, KeyCode.space, KeyCode.escape];\n\n if (keys.indexOf(event.keyCode) !== -1) {\n event.preventDefault();\n\n if (isEventLike(event)) {\n handleKey(event, {\n onActivate: () => {\n setIsKeyboardDragging(false);\n setShowUapButtons(false);\n resizerToggleRef.current?.focus();\n },\n onEscape: () => {\n setIsKeyboardDragging(false);\n setShowUapButtons(false);\n resizerToggleRef.current?.focus();\n },\n onInlineStart: () => {\n updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize - 10);\n scrollIntoViewIfNeeded();\n },\n onInlineEnd: () => {\n updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize + 10);\n scrollIntoViewIfNeeded();\n },\n });\n }\n }\n } else {\n if (event.keyCode === KeyCode.enter || event.keyCode === KeyCode.space) {\n // Enter keyboard dragging mode\n event.preventDefault();\n\n if (isEventLike(event)) {\n handleKey(event, {\n onActivate: () => {\n setShowUapButtons(true);\n setIsKeyboardDragging(true);\n resizerSeparatorRef.current?.focus();\n },\n });\n }\n } else {\n // Showing the UAP buttons when the button is only focused and not activated\n // gives a false impression that you can resize with the arrow keys.\n setShowUapButtons(false);\n }\n }\n };\n\n updateTrackerPosition(getLogicalBoundingClientRect(elements.header).insetInlineEnd);\n const controller = new AbortController();\n\n if (isPointerDown) {\n document.body.classList.add(styles['resize-active']);\n document.addEventListener('pointermove', onPointerMove, { signal: controller.signal });\n document.addEventListener('pointerup', onPointerUp, { signal: controller.signal });\n } else if (resizerHasFocus) {\n document.body.classList.add(styles['resize-active-with-focus']);\n elements.header.addEventListener('keydown', onKeyDown, { signal: controller.signal });\n }\n if (isKeyboardDragging) {\n document.body.classList.add(styles['resize-active']);\n }\n\n return () => {\n document.body.classList.remove(styles['resize-active']);\n document.body.classList.remove(styles['resize-active-with-focus']);\n controller.abort();\n };\n }, [\n isDragging,\n isKeyboardDragging,\n isPointerDown,\n resizerHasFocus,\n scrollIntoViewIfNeeded,\n onWidthUpdateCommit,\n resizeColumn,\n updateColumnWidth,\n updateTrackerPosition,\n ]);\n\n useEffect(() => {\n if (isDragging) {\n return () => clearTimeout(autoGrowTimeout.current);\n }\n }, [isDragging]);\n\n const { tabIndex: resizerTabIndex } = useSingleTabStopNavigation(resizerToggleRef, { tabIndex });\n\n return (\n <div\n className={clsx(styles['resizer-wrapper'], isVisualRefresh && styles['is-visual-refresh'])}\n ref={positioningWrapperRef}\n >\n <DragHandleWrapper\n clickDragThreshold={3}\n hideButtonsOnDrag={false}\n directions={{\n 'inline-start': resizerObscured ? undefined : headerCellWidth > minWidth ? 'active' : 'disabled',\n 'inline-end': resizerObscured ? undefined : 'active',\n }}\n triggerMode=\"controlled\"\n controlledShowButtons={showUapButtons && !resizerObscured}\n wrapperClassName={styles['resizer-button-wrapper']}\n tooltipText={tooltipText}\n data-obscured={resizerObscured}\n onDirectionClick={direction => {\n const elements = getResizerElements(resizerToggleRef.current);\n if (!elements) {\n return;\n }\n\n if (direction === 'inline-start') {\n updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize - 20);\n requestAnimationFrame(() => {\n onWidthUpdateCommit();\n scrollIntoViewIfNeeded();\n });\n } else if (direction === 'inline-end') {\n updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize + 20);\n requestAnimationFrame(() => {\n onWidthUpdateCommit();\n scrollIntoViewIfNeeded();\n });\n }\n }}\n >\n <button\n ref={resizerToggleRef}\n className={clsx(\n styles.resizer,\n (resizerHasFocus || showFocusRing || isKeyboardDragging) && styles['has-focus'],\n isVisualRefresh && styles['is-visual-refresh']\n )}\n onPointerDown={event => {\n if (event.pointerType === 'mouse' && event.button !== 0) {\n return;\n }\n setIsPointerDown(true);\n }}\n onClick={() => {\n // Prevent mouse drag activation and activate keyboard dragging for VO+Space click.\n setIsPointerDown(false);\n setIsDragging(false);\n setShowUapButtons(true);\n setResizerHasFocus(true);\n setIsKeyboardDragging(true);\n resizerSeparatorRef.current?.focus();\n }}\n onFocus={() => {\n setHeaderCellWidth(getHeaderWidth(resizerToggleRef.current));\n setResizerHasFocus(true);\n }}\n onBlur={event => {\n // Ignoring blur event when focus moves to the resizer separator element.\n // (This focus transition is done programmatically when the resizer button is clicked).\n if (event.relatedTarget !== resizerSeparatorRef.current) {\n setResizerHasFocus(false);\n setShowUapButtons(false);\n return;\n }\n }}\n // Using a custom role-description to make the element's purpose better clear.\n // The role-description must include the word \"button\" to imply the interaction model.\n // See https://www.w3.org/TR/wai-aria-1.1/#aria-roledescription\n aria-roledescription={roleDescription}\n aria-labelledby={ariaLabelledby}\n tabIndex={resizerTabIndex}\n data-focus-id={focusId}\n />\n <span\n className={clsx(\n styles['divider-interactive'],\n (isPointerDown || isDragging) && styles['divider-active'],\n isVisualRefresh && styles['is-visual-refresh']\n )}\n data-awsui-table-suppress-navigation={true}\n ref={resizerSeparatorRef}\n id={separatorId}\n role=\"slider\"\n tabIndex={-1}\n aria-labelledby={ariaLabelledby}\n aria-hidden={!isKeyboardDragging}\n aria-valuemin={minWidth}\n // aria-valuemax is needed because the slider is inoperable in VoiceOver without it\n aria-valuemax={Number.MAX_SAFE_INTEGER}\n aria-valuenow={headerCellWidth}\n data-focus-id={focusId}\n onBlur={event => {\n setIsKeyboardDragging(false);\n if (event.relatedTarget !== resizerToggleRef.current) {\n setResizerHasFocus(false);\n setShowUapButtons(false);\n }\n onWidthUpdateCommit();\n }}\n />\n </DragHandleWrapper>\n </div>\n );\n}\n\nexport function ResizeTracker() {\n return <span className={styles.tracker} />;\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  export declare function getResizerElements(resizerElement: null | HTMLElement): {
2
2
  header: HTMLElement;
3
- table: HTMLElement;
3
+ table: HTMLTableElement;
4
+ allHeaders: NodeListOf<HTMLTableCellElement>;
4
5
  tracker: HTMLElement;
5
6
  scrollParent: HTMLElement;
6
7
  } | null;
@@ -1 +1 @@
1
- {"version":3,"file":"resizer-lookup.d.ts","sourceRoot":"","sources":["../../../../src/table/resizer/resizer-lookup.ts"],"names":[],"mappings":"AAWA,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW;;;;;SAgCpE;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW,GAAG,MAAM,CAGzE"}
1
+ {"version":3,"file":"resizer-lookup.d.ts","sourceRoot":"","sources":["../../../../src/table/resizer/resizer-lookup.ts"],"names":[],"mappings":"AAWA,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW;;;;;;SAkCpE;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW,GAAG,MAAM,CAGzE"}
@@ -9,7 +9,7 @@ export function getResizerElements(resizerElement) {
9
9
  if (!resizerElement) {
10
10
  return null;
11
11
  }
12
- const header = findUpUntil(resizerElement, element => element.tagName.toLowerCase() === 'th');
12
+ const header = findUpUntil(resizerElement, element => element.tagName === 'TH');
13
13
  if (!header) {
14
14
  return null;
15
15
  }
@@ -21,6 +21,7 @@ export function getResizerElements(resizerElement) {
21
21
  if (!table) {
22
22
  return null;
23
23
  }
24
+ const allHeaders = tableRoot.querySelectorAll(`thead th`);
24
25
  // tracker is rendered inside table wrapper to align with its size
25
26
  const tracker = tableRoot.querySelector(`.${resizerStyles.tracker}`);
26
27
  if (!tracker) {
@@ -30,7 +31,7 @@ export function getResizerElements(resizerElement) {
30
31
  if (!scrollParent) {
31
32
  return null;
32
33
  }
33
- return { header, table, tracker, scrollParent };
34
+ return { header, table, allHeaders, tracker, scrollParent };
34
35
  }
35
36
  export function getHeaderWidth(resizerElement) {
36
37
  const header = resizerElement && findUpUntil(resizerElement, element => element.tagName.toLowerCase() === 'th');
@@ -1 +1 @@
1
- {"version":3,"file":"resizer-lookup.js","sourceRoot":"","sources":["../../../../src/table/resizer/resizer-lookup.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAE7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,kBAAkB,CAAC,cAAkC;IACnE,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;IAC9F,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,IAAI,CAAC;KACb;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAc,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IAED,kEAAkE;IAClE,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAc,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,IAAI,CAAC;KACb;IAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,cAAkC;IAC/D,MAAM,MAAM,GAAG,cAAc,IAAI,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;IAChH,OAAO,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { findUpUntil } from '@cloudscape-design/component-toolkit/dom';\nimport { getLogicalBoundingClientRect } from '@cloudscape-design/component-toolkit/internal';\n\nimport { getOverflowParents } from '../../internal/utils/scrollable-containers.js';\n\nimport tableStyles from '../styles.css.js';\nimport resizerStyles from './styles.css.js';\n\nexport function getResizerElements(resizerElement: null | HTMLElement) {\n if (!resizerElement) {\n return null;\n }\n\n const header = findUpUntil(resizerElement, element => element.tagName.toLowerCase() === 'th');\n if (!header) {\n return null;\n }\n\n const tableRoot = findUpUntil(header, element => element.className.indexOf(tableStyles.root) > -1);\n if (!tableRoot) {\n return null;\n }\n\n const table = tableRoot.querySelector<HTMLElement>(`table`);\n if (!table) {\n return null;\n }\n\n // tracker is rendered inside table wrapper to align with its size\n const tracker = tableRoot.querySelector<HTMLElement>(`.${resizerStyles.tracker}`);\n if (!tracker) {\n return null;\n }\n\n const scrollParent = getOverflowParents(header)[0];\n if (!scrollParent) {\n return null;\n }\n\n return { header, table, tracker, scrollParent };\n}\n\nexport function getHeaderWidth(resizerElement: null | HTMLElement): number {\n const header = resizerElement && findUpUntil(resizerElement, element => element.tagName.toLowerCase() === 'th');\n return header ? getLogicalBoundingClientRect(header).inlineSize : 0;\n}\n"]}
1
+ {"version":3,"file":"resizer-lookup.js","sourceRoot":"","sources":["../../../../src/table/resizer/resizer-lookup.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAE7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,kBAAkB,CAAC,cAAkC;IACnE,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;IAChF,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,IAAI,CAAC;KACb;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAmB,OAAO,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAuB,UAAU,CAAC,CAAC;IAEhF,kEAAkE;IAClE,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAc,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,IAAI,CAAC;KACb;IAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,cAAkC;IAC/D,MAAM,MAAM,GAAG,cAAc,IAAI,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;IAChH,OAAO,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { findUpUntil } from '@cloudscape-design/component-toolkit/dom';\nimport { getLogicalBoundingClientRect } from '@cloudscape-design/component-toolkit/internal';\n\nimport { getOverflowParents } from '../../internal/utils/scrollable-containers.js';\n\nimport tableStyles from '../styles.css.js';\nimport resizerStyles from './styles.css.js';\n\nexport function getResizerElements(resizerElement: null | HTMLElement) {\n if (!resizerElement) {\n return null;\n }\n\n const header = findUpUntil(resizerElement, element => element.tagName === 'TH');\n if (!header) {\n return null;\n }\n\n const tableRoot = findUpUntil(header, element => element.className.indexOf(tableStyles.root) > -1);\n if (!tableRoot) {\n return null;\n }\n\n const table = tableRoot.querySelector<HTMLTableElement>(`table`);\n if (!table) {\n return null;\n }\n\n const allHeaders = tableRoot.querySelectorAll<HTMLTableCellElement>(`thead th`);\n\n // tracker is rendered inside table wrapper to align with its size\n const tracker = tableRoot.querySelector<HTMLElement>(`.${resizerStyles.tracker}`);\n if (!tracker) {\n return null;\n }\n\n const scrollParent = getOverflowParents(header)[0];\n if (!scrollParent) {\n return null;\n }\n\n return { header, table, allHeaders, tracker, scrollParent };\n}\n\nexport function getHeaderWidth(resizerElement: null | HTMLElement): number {\n const header = resizerElement && findUpUntil(resizerElement, element => element.tagName.toLowerCase() === 'th');\n return header ? getLogicalBoundingClientRect(header).inlineSize : 0;\n}\n"]}
@@ -1,17 +1,17 @@
1
1
 
2
2
  import './styles.scoped.css';
3
3
  export default {
4
- "resize-active": "awsui_resize-active_x7peu_m370p_145",
5
- "resize-active-with-focus": "awsui_resize-active-with-focus_x7peu_m370p_145",
6
- "divider": "awsui_divider_x7peu_m370p_150",
7
- "divider-interactive": "awsui_divider-interactive_x7peu_m370p_151",
8
- "divider-disabled": "awsui_divider-disabled_x7peu_m370p_165",
9
- "divider-interactive-disabled": "awsui_divider-interactive-disabled_x7peu_m370p_166",
10
- "divider-active": "awsui_divider-active_x7peu_m370p_169",
11
- "divider-interactive-active": "awsui_divider-interactive-active_x7peu_m370p_170",
12
- "is-visual-refresh": "awsui_is-visual-refresh_x7peu_m370p_174",
13
- "resizer": "awsui_resizer_x7peu_m370p_178",
14
- "has-focus": "awsui_has-focus_x7peu_m370p_228",
15
- "tracker": "awsui_tracker_x7peu_m370p_257"
4
+ "resize-active": "awsui_resize-active_x7peu_ov207_145",
5
+ "resize-active-with-focus": "awsui_resize-active-with-focus_x7peu_ov207_145",
6
+ "resizer-wrapper": "awsui_resizer-wrapper_x7peu_ov207_150",
7
+ "divider-interactive": "awsui_divider-interactive_x7peu_ov207_158",
8
+ "is-visual-refresh": "awsui_is-visual-refresh_x7peu_ov207_158",
9
+ "resizer-button-wrapper": "awsui_resizer-button-wrapper_x7peu_ov207_162",
10
+ "divider": "awsui_divider_x7peu_ov207_158",
11
+ "divider-disabled": "awsui_divider-disabled_x7peu_ov207_182",
12
+ "divider-active": "awsui_divider-active_x7peu_ov207_190",
13
+ "resizer": "awsui_resizer_x7peu_ov207_150",
14
+ "has-focus": "awsui_has-focus_x7peu_ov207_242",
15
+ "tracker": "awsui_tracker_x7peu_ov207_268"
16
16
  };
17
17