@cloudscape-design/components-themeable 3.0.1120 → 3.0.1122

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 (225) hide show
  1. package/lib/internal/manifest.json +1 -1
  2. package/lib/internal/scss/box/text.scss +11 -0
  3. package/lib/internal/scss/cards/analytics-metadata/styles.scss +16 -0
  4. package/lib/internal/scss/file-token-group/styles.scss +1 -1
  5. package/lib/internal/scss/internal/components/button-trigger/styles.scss +2 -2
  6. package/lib/internal/scss/internal/components/drag-handle-wrapper/motion.scss +14 -6
  7. package/lib/internal/scss/internal/components/drag-handle-wrapper/styles.scss +3 -4
  8. package/lib/internal/scss/internal/generated/custom-css-properties/index.scss +1 -1
  9. package/lib/internal/scss/property-filter/filtering-token/styles.scss +1 -1
  10. package/lib/internal/scss/select/parts/styles.scss +1 -32
  11. package/lib/internal/scss/table/resizer/styles.scss +28 -16
  12. package/lib/internal/scss/token/analytics-metadata/styles.scss +8 -0
  13. package/lib/internal/scss/{token-group → token}/constants.scss +2 -0
  14. package/lib/internal/scss/{token-group → token}/mixins.scss +20 -0
  15. package/lib/internal/scss/token/styles.scss +119 -0
  16. package/lib/internal/scss/token/test-classes/styles.scss +8 -0
  17. package/lib/internal/scss/token-group/styles.scss +5 -72
  18. package/lib/internal/template/app-layout/visual-refresh-toolbar/drawer/global-ai-drawer.d.ts +1 -1
  19. package/lib/internal/template/app-layout/visual-refresh-toolbar/drawer/global-ai-drawer.d.ts.map +1 -1
  20. package/lib/internal/template/app-layout/visual-refresh-toolbar/drawer/global-ai-drawer.js.map +1 -1
  21. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-ai-drawer.d.ts +29 -0
  22. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-ai-drawer.d.ts.map +1 -0
  23. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-ai-drawer.js +87 -0
  24. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-ai-drawer.js.map +1 -0
  25. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-app-layout.d.ts.map +1 -1
  26. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-app-layout.js +4 -3
  27. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-app-layout.js.map +1 -1
  28. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-widget-messages.d.ts +3 -0
  29. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-widget-messages.d.ts.map +1 -0
  30. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-widget-messages.js +18 -0
  31. package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-widget-messages.js.map +1 -0
  32. package/lib/internal/template/box/interfaces.d.ts +3 -1
  33. package/lib/internal/template/box/interfaces.d.ts.map +1 -1
  34. package/lib/internal/template/box/interfaces.js.map +1 -1
  35. package/lib/internal/template/box/internal.js +3 -0
  36. package/lib/internal/template/box/internal.js.map +1 -1
  37. package/lib/internal/template/box/styles.css.js +192 -191
  38. package/lib/internal/template/box/styles.scoped.css +250 -236
  39. package/lib/internal/template/box/styles.selectors.js +192 -191
  40. package/lib/internal/template/cards/analytics-metadata/interfaces.d.ts +32 -0
  41. package/lib/internal/template/cards/analytics-metadata/interfaces.d.ts.map +1 -0
  42. package/lib/internal/template/cards/analytics-metadata/interfaces.js +4 -0
  43. package/lib/internal/template/cards/analytics-metadata/interfaces.js.map +1 -0
  44. package/lib/internal/template/cards/analytics-metadata/styles.css.js +8 -0
  45. package/lib/internal/template/cards/analytics-metadata/styles.scoped.css +15 -0
  46. package/lib/internal/template/cards/analytics-metadata/styles.selectors.js +9 -0
  47. package/lib/internal/template/cards/index.d.ts.map +1 -1
  48. package/lib/internal/template/cards/index.js +59 -21
  49. package/lib/internal/template/cards/index.js.map +1 -1
  50. package/lib/internal/template/file-token-group/file-token.js +1 -1
  51. package/lib/internal/template/file-token-group/file-token.js.map +1 -1
  52. package/lib/internal/template/index.d.ts +1 -0
  53. package/lib/internal/template/index.d.ts.map +1 -1
  54. package/lib/internal/template/index.js +1 -0
  55. package/lib/internal/template/index.js.map +1 -1
  56. package/lib/internal/template/internal/base-component/styles.scoped.css +13 -1
  57. package/lib/internal/template/internal/components/drag-handle-wrapper/direction-button.js +1 -1
  58. package/lib/internal/template/internal/components/drag-handle-wrapper/direction-button.js.map +1 -1
  59. package/lib/internal/template/internal/components/drag-handle-wrapper/index.d.ts +1 -1
  60. package/lib/internal/template/internal/components/drag-handle-wrapper/index.d.ts.map +1 -1
  61. package/lib/internal/template/internal/components/drag-handle-wrapper/index.js +26 -32
  62. package/lib/internal/template/internal/components/drag-handle-wrapper/index.js.map +1 -1
  63. package/lib/internal/template/internal/components/drag-handle-wrapper/interfaces.d.ts +1 -0
  64. package/lib/internal/template/internal/components/drag-handle-wrapper/interfaces.d.ts.map +1 -1
  65. package/lib/internal/template/internal/components/drag-handle-wrapper/interfaces.js.map +1 -1
  66. package/lib/internal/template/internal/components/drag-handle-wrapper/styles.css.js +20 -21
  67. package/lib/internal/template/internal/components/drag-handle-wrapper/styles.scoped.css +50 -39
  68. package/lib/internal/template/internal/components/drag-handle-wrapper/styles.selectors.js +20 -21
  69. package/lib/internal/template/internal/components/option/highlight-match.d.ts +3 -2
  70. package/lib/internal/template/internal/components/option/highlight-match.d.ts.map +1 -1
  71. package/lib/internal/template/internal/components/option/highlight-match.js +6 -6
  72. package/lib/internal/template/internal/components/option/highlight-match.js.map +1 -1
  73. package/lib/internal/template/internal/components/option/index.d.ts +1 -1
  74. package/lib/internal/template/internal/components/option/index.d.ts.map +1 -1
  75. package/lib/internal/template/internal/components/option/index.js +8 -6
  76. package/lib/internal/template/internal/components/option/index.js.map +1 -1
  77. package/lib/internal/template/internal/components/option/interfaces.d.ts +5 -0
  78. package/lib/internal/template/internal/components/option/interfaces.d.ts.map +1 -1
  79. package/lib/internal/template/internal/components/option/interfaces.js.map +1 -1
  80. package/lib/internal/template/internal/components/option/option-parts.d.ts +5 -2
  81. package/lib/internal/template/internal/components/option/option-parts.d.ts.map +1 -1
  82. package/lib/internal/template/internal/components/option/option-parts.js +7 -5
  83. package/lib/internal/template/internal/components/option/option-parts.js.map +1 -1
  84. package/lib/internal/template/internal/environment.js +2 -2
  85. package/lib/internal/template/internal/environment.json +2 -2
  86. package/lib/internal/template/internal/generated/styles/tokens.d.ts +1 -0
  87. package/lib/internal/template/internal/generated/styles/tokens.js +1 -0
  88. package/lib/internal/template/internal/generated/theming/index.cjs +31 -0
  89. package/lib/internal/template/internal/generated/theming/index.js +31 -0
  90. package/lib/internal/template/internal/plugins/widget/core.d.ts +17 -0
  91. package/lib/internal/template/internal/plugins/widget/core.d.ts.map +1 -0
  92. package/lib/internal/template/internal/plugins/widget/{internal.js → core.js} +14 -24
  93. package/lib/internal/template/internal/plugins/widget/core.js.map +1 -0
  94. package/lib/internal/template/internal/plugins/widget/index.d.ts +12 -0
  95. package/lib/internal/template/internal/plugins/widget/index.d.ts.map +1 -0
  96. package/lib/internal/template/internal/plugins/widget/index.js +22 -0
  97. package/lib/internal/template/internal/plugins/widget/index.js.map +1 -0
  98. package/lib/internal/template/internal/plugins/widget/interfaces.d.ts +2 -1
  99. package/lib/internal/template/internal/plugins/widget/interfaces.d.ts.map +1 -1
  100. package/lib/internal/template/internal/plugins/widget/interfaces.js.map +1 -1
  101. package/lib/internal/template/internal/plugins/widget.d.ts +2 -1
  102. package/lib/internal/template/internal/plugins/widget.d.ts.map +1 -1
  103. package/lib/internal/template/internal/plugins/widget.js +2 -1
  104. package/lib/internal/template/internal/plugins/widget.js.map +1 -1
  105. package/lib/internal/template/package.json +1 -0
  106. package/lib/internal/template/select/parts/styles.css.js +19 -22
  107. package/lib/internal/template/select/parts/styles.scoped.css +21 -49
  108. package/lib/internal/template/select/parts/styles.selectors.js +19 -22
  109. package/lib/internal/template/select/parts/trigger.d.ts.map +1 -1
  110. package/lib/internal/template/select/parts/trigger.js +2 -1
  111. package/lib/internal/template/select/parts/trigger.js.map +1 -1
  112. package/lib/internal/template/table/header-cell/index.d.ts +2 -1
  113. package/lib/internal/template/table/header-cell/index.d.ts.map +1 -1
  114. package/lib/internal/template/table/header-cell/index.js +5 -2
  115. package/lib/internal/template/table/header-cell/index.js.map +1 -1
  116. package/lib/internal/template/table/interfaces.d.ts +2 -0
  117. package/lib/internal/template/table/interfaces.d.ts.map +1 -1
  118. package/lib/internal/template/table/interfaces.js.map +1 -1
  119. package/lib/internal/template/table/internal.d.ts.map +1 -1
  120. package/lib/internal/template/table/internal.js +1 -0
  121. package/lib/internal/template/table/internal.js.map +1 -1
  122. package/lib/internal/template/table/resizer/index.d.ts +2 -1
  123. package/lib/internal/template/table/resizer/index.d.ts.map +1 -1
  124. package/lib/internal/template/table/resizer/index.js +211 -78
  125. package/lib/internal/template/table/resizer/index.js.map +1 -1
  126. package/lib/internal/template/table/resizer/resizer-lookup.d.ts +2 -1
  127. package/lib/internal/template/table/resizer/resizer-lookup.d.ts.map +1 -1
  128. package/lib/internal/template/table/resizer/resizer-lookup.js +3 -2
  129. package/lib/internal/template/table/resizer/resizer-lookup.js.map +1 -1
  130. package/lib/internal/template/table/resizer/styles.css.js +12 -12
  131. package/lib/internal/template/table/resizer/styles.scoped.css +37 -26
  132. package/lib/internal/template/table/resizer/styles.selectors.js +12 -12
  133. package/lib/internal/template/table/thead.d.ts +1 -0
  134. package/lib/internal/template/table/thead.d.ts.map +1 -1
  135. package/lib/internal/template/table/thead.js +2 -2
  136. package/lib/internal/template/table/thead.js.map +1 -1
  137. package/lib/internal/template/test-utils/dom/file-token-group/index.js +1 -1
  138. package/lib/internal/template/test-utils/dom/file-token-group/index.js.map +1 -1
  139. package/lib/internal/template/test-utils/dom/index.d.ts +20 -0
  140. package/lib/internal/template/test-utils/dom/index.js +15 -1
  141. package/lib/internal/template/test-utils/dom/index.js.map +1 -1
  142. package/lib/internal/template/test-utils/dom/internal/drag-handle.js +5 -5
  143. package/lib/internal/template/test-utils/dom/internal/drag-handle.js.map +1 -1
  144. package/lib/internal/template/test-utils/dom/internal/option.d.ts +1 -0
  145. package/lib/internal/template/test-utils/dom/internal/option.js +13 -1
  146. package/lib/internal/template/test-utils/dom/internal/option.js.map +1 -1
  147. package/lib/internal/template/test-utils/dom/multiselect/index.d.ts +3 -3
  148. package/lib/internal/template/test-utils/dom/token/index.d.ts +26 -0
  149. package/lib/internal/template/test-utils/dom/token/index.js +45 -0
  150. package/lib/internal/template/test-utils/dom/token/index.js.map +1 -0
  151. package/lib/internal/template/test-utils/dom/token-group/index.d.ts +3 -3
  152. package/lib/internal/template/test-utils/dom/token-group/index.js +6 -4
  153. package/lib/internal/template/test-utils/dom/token-group/index.js.map +1 -1
  154. package/lib/internal/template/test-utils/dom/token-group/token.d.ts +1 -2
  155. package/lib/internal/template/test-utils/dom/token-group/token.js +8 -5
  156. package/lib/internal/template/test-utils/dom/token-group/token.js.map +1 -1
  157. package/lib/internal/template/test-utils/selectors/file-token-group/index.js +1 -1
  158. package/lib/internal/template/test-utils/selectors/file-token-group/index.js.map +1 -1
  159. package/lib/internal/template/test-utils/selectors/index.d.ts +18 -0
  160. package/lib/internal/template/test-utils/selectors/index.js +15 -1
  161. package/lib/internal/template/test-utils/selectors/index.js.map +1 -1
  162. package/lib/internal/template/test-utils/selectors/internal/drag-handle.js +5 -5
  163. package/lib/internal/template/test-utils/selectors/internal/drag-handle.js.map +1 -1
  164. package/lib/internal/template/test-utils/selectors/multiselect/index.d.ts +3 -3
  165. package/lib/internal/template/test-utils/selectors/token/index.d.ts +26 -0
  166. package/lib/internal/template/test-utils/selectors/token/index.js +45 -0
  167. package/lib/internal/template/test-utils/selectors/token/index.js.map +1 -0
  168. package/lib/internal/template/test-utils/selectors/token-group/index.d.ts +3 -3
  169. package/lib/internal/template/test-utils/selectors/token-group/index.js +6 -4
  170. package/lib/internal/template/test-utils/selectors/token-group/index.js.map +1 -1
  171. package/lib/internal/template/test-utils/selectors/token-group/token.d.ts +1 -2
  172. package/lib/internal/template/test-utils/selectors/token-group/token.js +8 -5
  173. package/lib/internal/template/test-utils/selectors/token-group/token.js.map +1 -1
  174. package/lib/internal/template/token/analytics-metadata/interfaces.d.ts +13 -0
  175. package/lib/internal/template/token/analytics-metadata/interfaces.d.ts.map +1 -0
  176. package/lib/internal/template/token/analytics-metadata/interfaces.js +2 -0
  177. package/lib/internal/template/token/analytics-metadata/interfaces.js.map +1 -0
  178. package/lib/internal/template/token/analytics-metadata/styles.css.js +6 -0
  179. package/lib/internal/template/token/analytics-metadata/styles.scoped.css +7 -0
  180. package/lib/internal/template/token/analytics-metadata/styles.selectors.js +7 -0
  181. package/lib/internal/template/{token-group → token}/dismiss-button.d.ts +3 -1
  182. package/lib/internal/template/token/dismiss-button.d.ts.map +1 -0
  183. package/lib/internal/template/{token-group → token}/dismiss-button.js +6 -3
  184. package/lib/internal/template/token/dismiss-button.js.map +1 -0
  185. package/lib/internal/template/token/index.d.ts +5 -0
  186. package/lib/internal/template/token/index.d.ts.map +1 -0
  187. package/lib/internal/template/token/index.js +19 -0
  188. package/lib/internal/template/token/index.js.map +1 -0
  189. package/lib/internal/template/token/interfaces.d.ts +61 -0
  190. package/lib/internal/template/token/interfaces.d.ts.map +1 -0
  191. package/lib/internal/template/token/interfaces.js +2 -0
  192. package/lib/internal/template/token/interfaces.js.map +1 -0
  193. package/lib/internal/template/token/internal.d.ts +10 -0
  194. package/lib/internal/template/token/internal.d.ts.map +1 -0
  195. package/lib/internal/template/token/internal.js +77 -0
  196. package/lib/internal/template/token/internal.js.map +1 -0
  197. package/lib/internal/template/token/styles.css.js +19 -0
  198. package/lib/internal/template/token/styles.scoped.css +357 -0
  199. package/lib/internal/template/token/styles.selectors.js +20 -0
  200. package/lib/internal/template/token/test-classes/styles.css.js +7 -0
  201. package/lib/internal/template/token/test-classes/styles.scoped.css +8 -0
  202. package/lib/internal/template/token/test-classes/styles.selectors.js +8 -0
  203. package/lib/internal/template/token-group/analytics-metadata/interfaces.d.ts +0 -8
  204. package/lib/internal/template/token-group/analytics-metadata/interfaces.d.ts.map +1 -1
  205. package/lib/internal/template/token-group/analytics-metadata/interfaces.js.map +1 -1
  206. package/lib/internal/template/token-group/internal.d.ts.map +1 -1
  207. package/lib/internal/template/token-group/internal.js +5 -6
  208. package/lib/internal/template/token-group/internal.js.map +1 -1
  209. package/lib/internal/template/token-group/styles.css.js +5 -8
  210. package/lib/internal/template/token-group/styles.scoped.css +7 -115
  211. package/lib/internal/template/token-group/styles.selectors.js +5 -8
  212. package/package.json +1 -1
  213. package/lib/internal/template/app-layout/utils/use-ai-drawer.d.ts +0 -28
  214. package/lib/internal/template/app-layout/utils/use-ai-drawer.d.ts.map +0 -1
  215. package/lib/internal/template/app-layout/utils/use-ai-drawer.js +0 -111
  216. package/lib/internal/template/app-layout/utils/use-ai-drawer.js.map +0 -1
  217. package/lib/internal/template/internal/plugins/widget/internal.d.ts +0 -25
  218. package/lib/internal/template/internal/plugins/widget/internal.d.ts.map +0 -1
  219. package/lib/internal/template/internal/plugins/widget/internal.js.map +0 -1
  220. package/lib/internal/template/token-group/dismiss-button.d.ts.map +0 -1
  221. package/lib/internal/template/token-group/dismiss-button.js.map +0 -1
  222. package/lib/internal/template/token-group/token.d.ts +0 -13
  223. package/lib/internal/template/token-group/token.d.ts.map +0 -1
  224. package/lib/internal/template/token-group/token.js +0 -17
  225. package/lib/internal/template/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_1bu3d_145",
5
- "resize-active-with-focus": "awsui_resize-active-with-focus_x7peu_1bu3d_145",
6
- "divider": "awsui_divider_x7peu_1bu3d_150",
7
- "divider-interactive": "awsui_divider-interactive_x7peu_1bu3d_151",
8
- "divider-disabled": "awsui_divider-disabled_x7peu_1bu3d_165",
9
- "divider-interactive-disabled": "awsui_divider-interactive-disabled_x7peu_1bu3d_166",
10
- "divider-active": "awsui_divider-active_x7peu_1bu3d_169",
11
- "divider-interactive-active": "awsui_divider-interactive-active_x7peu_1bu3d_170",
12
- "is-visual-refresh": "awsui_is-visual-refresh_x7peu_1bu3d_174",
13
- "resizer": "awsui_resizer_x7peu_1bu3d_178",
14
- "has-focus": "awsui_has-focus_x7peu_1bu3d_228",
15
- "tracker": "awsui_tracker_x7peu_1bu3d_257"
4
+ "resize-active": "awsui_resize-active_x7peu_8ay32_145",
5
+ "resize-active-with-focus": "awsui_resize-active-with-focus_x7peu_8ay32_145",
6
+ "resizer-wrapper": "awsui_resizer-wrapper_x7peu_8ay32_150",
7
+ "divider-interactive": "awsui_divider-interactive_x7peu_8ay32_158",
8
+ "is-visual-refresh": "awsui_is-visual-refresh_x7peu_8ay32_158",
9
+ "resizer-button-wrapper": "awsui_resizer-button-wrapper_x7peu_8ay32_162",
10
+ "divider": "awsui_divider_x7peu_8ay32_158",
11
+ "divider-disabled": "awsui_divider-disabled_x7peu_8ay32_182",
12
+ "divider-active": "awsui_divider-active_x7peu_8ay32_190",
13
+ "resizer": "awsui_resizer_x7peu_8ay32_150",
14
+ "has-focus": "awsui_has-focus_x7peu_8ay32_242",
15
+ "tracker": "awsui_tracker_x7peu_8ay32_268"
16
16
  };
17
17