@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.
- package/app-layout/visual-refresh-toolbar/drawer/global-ai-drawer.d.ts +1 -1
- package/app-layout/visual-refresh-toolbar/drawer/global-ai-drawer.d.ts.map +1 -1
- package/app-layout/visual-refresh-toolbar/drawer/global-ai-drawer.js.map +1 -1
- package/app-layout/visual-refresh-toolbar/state/use-ai-drawer.d.ts +34 -0
- package/app-layout/visual-refresh-toolbar/state/use-ai-drawer.d.ts.map +1 -0
- package/app-layout/visual-refresh-toolbar/state/use-ai-drawer.js +87 -0
- package/app-layout/visual-refresh-toolbar/state/use-ai-drawer.js.map +1 -0
- package/app-layout/visual-refresh-toolbar/state/use-app-layout.d.ts.map +1 -1
- package/app-layout/visual-refresh-toolbar/state/use-app-layout.js +4 -3
- package/app-layout/visual-refresh-toolbar/state/use-app-layout.js.map +1 -1
- package/app-layout/visual-refresh-toolbar/state/use-widget-messages.d.ts +2 -0
- package/app-layout/visual-refresh-toolbar/state/use-widget-messages.d.ts.map +1 -0
- package/app-layout/visual-refresh-toolbar/state/use-widget-messages.js +18 -0
- package/app-layout/visual-refresh-toolbar/state/use-widget-messages.js.map +1 -0
- package/box/interfaces.d.ts +3 -1
- package/box/interfaces.d.ts.map +1 -1
- package/box/interfaces.js.map +1 -1
- package/box/internal.js +3 -0
- package/box/internal.js.map +1 -1
- package/box/styles.css.js +192 -191
- package/box/styles.scoped.css +250 -236
- package/box/styles.selectors.js +192 -191
- package/cards/analytics-metadata/interfaces.d.ts +31 -0
- package/cards/analytics-metadata/interfaces.d.ts.map +1 -0
- package/cards/analytics-metadata/interfaces.js +4 -0
- package/cards/analytics-metadata/interfaces.js.map +1 -0
- package/cards/analytics-metadata/styles.css.js +8 -0
- package/cards/analytics-metadata/styles.scoped.css +15 -0
- package/cards/analytics-metadata/styles.selectors.js +9 -0
- package/cards/index.d.ts.map +1 -1
- package/cards/index.js +59 -21
- package/cards/index.js.map +1 -1
- package/file-token-group/file-token.js +1 -1
- package/file-token-group/file-token.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/internal/base-component/styles.scoped.css +9 -1
- package/internal/components/drag-handle-wrapper/direction-button.js +1 -1
- package/internal/components/drag-handle-wrapper/direction-button.js.map +1 -1
- package/internal/components/drag-handle-wrapper/index.d.ts +1 -0
- package/internal/components/drag-handle-wrapper/index.d.ts.map +1 -1
- package/internal/components/drag-handle-wrapper/index.js +26 -32
- package/internal/components/drag-handle-wrapper/index.js.map +1 -1
- package/internal/components/drag-handle-wrapper/interfaces.d.ts +1 -0
- package/internal/components/drag-handle-wrapper/interfaces.d.ts.map +1 -1
- package/internal/components/drag-handle-wrapper/interfaces.js.map +1 -1
- package/internal/components/drag-handle-wrapper/styles.css.js +20 -21
- package/internal/components/drag-handle-wrapper/styles.scoped.css +50 -39
- package/internal/components/drag-handle-wrapper/styles.selectors.js +20 -21
- package/internal/components/option/highlight-match.d.ts +4 -2
- package/internal/components/option/highlight-match.d.ts.map +1 -1
- package/internal/components/option/highlight-match.js +6 -6
- package/internal/components/option/highlight-match.js.map +1 -1
- package/internal/components/option/index.d.ts +4 -0
- package/internal/components/option/index.d.ts.map +1 -1
- package/internal/components/option/index.js +8 -6
- package/internal/components/option/index.js.map +1 -1
- package/internal/components/option/interfaces.d.ts +5 -0
- package/internal/components/option/interfaces.d.ts.map +1 -1
- package/internal/components/option/interfaces.js.map +1 -1
- package/internal/components/option/option-parts.d.ts +7 -1
- package/internal/components/option/option-parts.d.ts.map +1 -1
- package/internal/components/option/option-parts.js +7 -5
- package/internal/components/option/option-parts.js.map +1 -1
- package/internal/environment.js +2 -2
- package/internal/environment.json +2 -2
- package/internal/generated/styles/tokens.d.ts +1 -0
- package/internal/generated/styles/tokens.js +1 -0
- package/internal/generated/theming/index.cjs +31 -0
- package/internal/generated/theming/index.js +31 -0
- package/internal/manifest.json +1 -1
- package/internal/plugins/widget/core.d.ts +16 -0
- package/internal/plugins/widget/core.d.ts.map +1 -0
- package/internal/plugins/widget/{internal.js → core.js} +14 -24
- package/internal/plugins/widget/core.js.map +1 -0
- package/internal/plugins/widget/index.d.ts +11 -0
- package/internal/plugins/widget/index.d.ts.map +1 -0
- package/internal/plugins/widget/index.js +22 -0
- package/internal/plugins/widget/index.js.map +1 -0
- package/internal/plugins/widget/interfaces.d.ts +2 -1
- package/internal/plugins/widget/interfaces.d.ts.map +1 -1
- package/internal/plugins/widget/interfaces.js.map +1 -1
- package/internal/plugins/widget.d.ts +2 -1
- package/internal/plugins/widget.d.ts.map +1 -1
- package/internal/plugins/widget.js +2 -1
- package/internal/plugins/widget.js.map +1 -1
- package/package.json +2 -1
- package/select/parts/styles.css.js +19 -22
- package/select/parts/styles.scoped.css +21 -49
- package/select/parts/styles.selectors.js +19 -22
- package/select/parts/trigger.d.ts.map +1 -1
- package/select/parts/trigger.js +2 -1
- package/select/parts/trigger.js.map +1 -1
- package/table/header-cell/index.d.ts +2 -0
- package/table/header-cell/index.d.ts.map +1 -1
- package/table/header-cell/index.js +5 -2
- package/table/header-cell/index.js.map +1 -1
- package/table/interfaces.d.ts +2 -0
- package/table/interfaces.d.ts.map +1 -1
- package/table/interfaces.js.map +1 -1
- package/table/internal.d.ts.map +1 -1
- package/table/internal.js +1 -0
- package/table/internal.js.map +1 -1
- package/table/resizer/index.d.ts +3 -1
- package/table/resizer/index.d.ts.map +1 -1
- package/table/resizer/index.js +211 -78
- package/table/resizer/index.js.map +1 -1
- package/table/resizer/resizer-lookup.d.ts +2 -1
- package/table/resizer/resizer-lookup.d.ts.map +1 -1
- package/table/resizer/resizer-lookup.js +3 -2
- package/table/resizer/resizer-lookup.js.map +1 -1
- package/table/resizer/styles.css.js +12 -12
- package/table/resizer/styles.scoped.css +37 -26
- package/table/resizer/styles.selectors.js +12 -12
- package/table/thead.d.ts +1 -0
- package/table/thead.d.ts.map +1 -1
- package/table/thead.js +2 -2
- package/table/thead.js.map +1 -1
- package/test-utils/dom/file-token-group/index.js +1 -1
- package/test-utils/dom/file-token-group/index.js.map +1 -1
- package/test-utils/dom/index.d.ts +20 -0
- package/test-utils/dom/index.js +15 -1
- package/test-utils/dom/index.js.map +1 -1
- package/test-utils/dom/internal/drag-handle.js +5 -5
- package/test-utils/dom/internal/drag-handle.js.map +1 -1
- package/test-utils/dom/internal/option.d.ts +1 -0
- package/test-utils/dom/internal/option.js +13 -1
- package/test-utils/dom/internal/option.js.map +1 -1
- package/test-utils/dom/multiselect/index.d.ts +3 -3
- package/test-utils/dom/token/index.d.ts +26 -0
- package/test-utils/dom/token/index.js +45 -0
- package/test-utils/dom/token/index.js.map +1 -0
- package/test-utils/dom/token-group/index.d.ts +3 -3
- package/test-utils/dom/token-group/index.js +6 -4
- package/test-utils/dom/token-group/index.js.map +1 -1
- package/test-utils/dom/token-group/token.d.ts +1 -2
- package/test-utils/dom/token-group/token.js +8 -5
- package/test-utils/dom/token-group/token.js.map +1 -1
- package/test-utils/selectors/file-token-group/index.js +1 -1
- package/test-utils/selectors/file-token-group/index.js.map +1 -1
- package/test-utils/selectors/index.d.ts +18 -0
- package/test-utils/selectors/index.js +15 -1
- package/test-utils/selectors/index.js.map +1 -1
- package/test-utils/selectors/internal/drag-handle.js +5 -5
- package/test-utils/selectors/internal/drag-handle.js.map +1 -1
- package/test-utils/selectors/multiselect/index.d.ts +3 -3
- package/test-utils/selectors/token/index.d.ts +26 -0
- package/test-utils/selectors/token/index.js +45 -0
- package/test-utils/selectors/token/index.js.map +1 -0
- package/test-utils/selectors/token-group/index.d.ts +3 -3
- package/test-utils/selectors/token-group/index.js +6 -4
- package/test-utils/selectors/token-group/index.js.map +1 -1
- package/test-utils/selectors/token-group/token.d.ts +1 -2
- package/test-utils/selectors/token-group/token.js +8 -5
- package/test-utils/selectors/token-group/token.js.map +1 -1
- package/token/analytics-metadata/interfaces.d.ts +12 -0
- package/token/analytics-metadata/interfaces.d.ts.map +1 -0
- package/token/analytics-metadata/interfaces.js +2 -0
- package/token/analytics-metadata/interfaces.js.map +1 -0
- package/token/analytics-metadata/styles.css.js +6 -0
- package/token/analytics-metadata/styles.scoped.css +7 -0
- package/token/analytics-metadata/styles.selectors.js +7 -0
- package/{token-group → token}/dismiss-button.d.ts +3 -1
- package/token/dismiss-button.d.ts.map +1 -0
- package/{token-group → token}/dismiss-button.js +6 -3
- package/token/dismiss-button.js.map +1 -0
- package/token/index.d.ts +4 -0
- package/token/index.d.ts.map +1 -0
- package/token/index.js +19 -0
- package/token/index.js.map +1 -0
- package/token/interfaces.d.ts +60 -0
- package/token/interfaces.d.ts.map +1 -0
- package/token/interfaces.js +2 -0
- package/token/interfaces.js.map +1 -0
- package/token/internal.d.ts +26 -0
- package/token/internal.d.ts.map +1 -0
- package/token/internal.js +77 -0
- package/token/internal.js.map +1 -0
- package/token/styles.css.js +19 -0
- package/token/styles.scoped.css +357 -0
- package/token/styles.selectors.js +20 -0
- package/token/test-classes/styles.css.js +7 -0
- package/token/test-classes/styles.scoped.css +8 -0
- package/token/test-classes/styles.selectors.js +8 -0
- package/token-group/analytics-metadata/interfaces.d.ts +0 -8
- package/token-group/analytics-metadata/interfaces.d.ts.map +1 -1
- package/token-group/analytics-metadata/interfaces.js.map +1 -1
- package/token-group/internal.d.ts.map +1 -1
- package/token-group/internal.js +5 -6
- package/token-group/internal.js.map +1 -1
- package/token-group/styles.css.js +5 -8
- package/token-group/styles.scoped.css +7 -115
- package/token-group/styles.selectors.js +5 -8
- package/app-layout/utils/use-ai-drawer.d.ts +0 -34
- package/app-layout/utils/use-ai-drawer.d.ts.map +0 -1
- package/app-layout/utils/use-ai-drawer.js +0 -111
- package/app-layout/utils/use-ai-drawer.js.map +0 -1
- package/internal/plugins/widget/internal.d.ts +0 -24
- package/internal/plugins/widget/internal.d.ts.map +0 -1
- package/internal/plugins/widget/internal.js.map +0 -1
- package/token-group/dismiss-button.d.ts.map +0 -1
- package/token-group/dismiss-button.js.map +0 -1
- package/token-group/token.d.ts +0 -20
- package/token-group/token.d.ts.map +0 -1
- package/token-group/token.js +0 -17
- package/token-group/token.js.map +0 -1
package/table/resizer/index.js
CHANGED
|
@@ -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 ((!
|
|
133
|
+
if ((!isPointerDown && !resizerHasFocus) || !elements) {
|
|
41
134
|
return;
|
|
42
135
|
}
|
|
43
|
-
const {
|
|
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
|
|
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
|
|
86
|
-
|
|
87
|
-
|
|
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: () =>
|
|
109
|
-
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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 (
|
|
222
|
+
if (isPointerDown) {
|
|
131
223
|
document.body.classList.add(styles['resize-active']);
|
|
132
|
-
document.addEventListener('
|
|
133
|
-
document.addEventListener('
|
|
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
|
-
}, [
|
|
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(
|
|
151
|
-
React.createElement(
|
|
152
|
-
|
|
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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
272
|
+
else if (direction === 'inline-end') {
|
|
273
|
+
updateColumnWidth(getLogicalBoundingClientRect(elements.header).inlineSize + 20);
|
|
274
|
+
requestAnimationFrame(() => {
|
|
275
|
+
onWidthUpdateCommit();
|
|
276
|
+
scrollIntoViewIfNeeded();
|
|
277
|
+
});
|
|
178
278
|
}
|
|
179
|
-
|
|
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:
|
|
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
|
|
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
|
|
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,
|
|
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-
|
|
5
|
-
"resize-active-with-focus": "awsui_resize-active-with-
|
|
6
|
-
"
|
|
7
|
-
"divider-interactive": "awsui_divider-
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"divider
|
|
11
|
-
"divider-
|
|
12
|
-
"
|
|
13
|
-
"resizer": "
|
|
14
|
-
"has-focus": "awsui_has-
|
|
15
|
-
"tracker": "
|
|
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
|
|