@cloudscape-design/components 3.0.352 → 3.0.354
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/alert/index.d.ts +3 -2
- package/alert/index.d.ts.map +1 -1
- package/alert/index.js +4 -3
- package/alert/index.js.map +1 -1
- package/alert/interfaces.d.ts +6 -0
- package/alert/interfaces.d.ts.map +1 -1
- package/alert/interfaces.js.map +1 -1
- package/alert/internal.d.ts +5 -5
- package/alert/internal.d.ts.map +1 -1
- package/alert/internal.js +22 -14
- package/alert/internal.js.map +1 -1
- package/alert/styles.css.js +24 -19
- package/alert/styles.scoped.css +72 -35
- package/alert/styles.selectors.js +24 -19
- package/app-layout/visual-refresh/background.d.ts.map +1 -1
- package/app-layout/visual-refresh/background.js +2 -2
- package/app-layout/visual-refresh/background.js.map +1 -1
- package/app-layout/visual-refresh/context.d.ts +2 -1
- package/app-layout/visual-refresh/context.d.ts.map +1 -1
- package/app-layout/visual-refresh/context.js +9 -11
- package/app-layout/visual-refresh/context.js.map +1 -1
- package/app-layout/visual-refresh/layout.d.ts.map +1 -1
- package/app-layout/visual-refresh/layout.js +3 -11
- package/app-layout/visual-refresh/layout.js.map +1 -1
- package/app-layout/visual-refresh/use-background-overlap.d.ts +16 -0
- package/app-layout/visual-refresh/use-background-overlap.d.ts.map +1 -0
- package/app-layout/visual-refresh/use-background-overlap.js +41 -0
- package/app-layout/visual-refresh/use-background-overlap.js.map +1 -0
- package/attribute-editor/styles.css.js +14 -14
- package/attribute-editor/styles.scoped.css +28 -29
- package/attribute-editor/styles.selectors.js +14 -14
- package/breadcrumb-group/item/styles.css.js +9 -9
- package/breadcrumb-group/item/styles.scoped.css +19 -19
- package/breadcrumb-group/item/styles.selectors.js +9 -9
- package/cards/index.d.ts.map +1 -1
- package/cards/index.js +9 -7
- package/cards/index.js.map +1 -1
- package/help-panel/index.d.ts.map +1 -1
- package/help-panel/index.js +3 -1
- package/help-panel/index.js.map +1 -1
- package/help-panel/styles.css.js +4 -4
- package/help-panel/styles.scoped.css +67 -68
- package/help-panel/styles.selectors.js +4 -4
- package/internal/base-component/styles.scoped.css +0 -8
- package/internal/context/link-default-variant-context.d.ts +6 -0
- package/internal/context/link-default-variant-context.d.ts.map +1 -0
- package/internal/context/link-default-variant-context.js +7 -0
- package/internal/context/link-default-variant-context.js.map +1 -0
- package/internal/environment.js +1 -1
- package/internal/environment.json +1 -1
- package/internal/generated/theming/index.cjs +0 -40
- package/internal/generated/theming/index.js +0 -40
- package/internal/hooks/container-queries/use-resize-observer.d.ts.map +1 -1
- package/internal/hooks/container-queries/use-resize-observer.js +1 -9
- package/internal/hooks/container-queries/use-resize-observer.js.map +1 -1
- package/internal/hooks/container-queries/utils.d.ts +4 -0
- package/internal/hooks/container-queries/utils.d.ts.map +1 -0
- package/internal/hooks/container-queries/utils.js +10 -0
- package/internal/hooks/container-queries/utils.js.map +1 -0
- package/internal/hooks/use-dynamic-overlap/index.d.ts +1 -1
- package/internal/hooks/use-dynamic-overlap/index.d.ts.map +1 -1
- package/internal/hooks/use-dynamic-overlap/index.js +11 -5
- package/internal/hooks/use-dynamic-overlap/index.js.map +1 -1
- package/internal/manifest.json +1 -1
- package/link/index.d.ts.map +1 -1
- package/link/index.js +2 -2
- package/link/index.js.map +1 -1
- package/link/interfaces.d.ts +7 -0
- package/link/interfaces.d.ts.map +1 -1
- package/link/interfaces.js.map +1 -1
- package/link/internal.d.ts.map +1 -1
- package/link/internal.js +4 -1
- package/link/internal.js.map +1 -1
- package/link/styles.css.js +20 -20
- package/link/styles.scoped.css +79 -78
- package/link/styles.selectors.js +20 -20
- package/package.json +1 -1
- package/popover/internal.d.ts.map +1 -1
- package/popover/internal.js +3 -1
- package/popover/internal.js.map +1 -1
- package/table/internal.d.ts.map +1 -1
- package/table/internal.js +58 -56
- package/table/internal.js.map +1 -1
- package/table/sticky-columns/index.d.ts +2 -1
- package/table/sticky-columns/index.d.ts.map +1 -1
- package/table/sticky-columns/index.js +1 -1
- package/table/sticky-columns/index.js.map +1 -1
- package/table/sticky-columns/interfaces.d.ts +31 -0
- package/table/sticky-columns/interfaces.d.ts.map +1 -0
- package/table/sticky-columns/interfaces.js +4 -0
- package/table/sticky-columns/interfaces.js.map +1 -0
- package/table/sticky-columns/use-sticky-columns.d.ts +1 -25
- package/table/sticky-columns/use-sticky-columns.d.ts.map +1 -1
- package/table/sticky-columns/use-sticky-columns.js +18 -51
- package/table/sticky-columns/use-sticky-columns.js.map +1 -1
- package/table/sticky-columns/utils.d.ts +5 -0
- package/table/sticky-columns/utils.d.ts.map +1 -0
- package/table/sticky-columns/utils.js +42 -0
- package/table/sticky-columns/utils.js.map +1 -0
- package/text-content/styles.css.js +1 -1
- package/text-content/styles.scoped.css +68 -70
- package/text-content/styles.selectors.js +1 -1
- package/tutorial-panel/components/tutorial-detail-view/congratulation-screen.js +1 -1
- package/tutorial-panel/components/tutorial-detail-view/congratulation-screen.js.map +1 -1
- package/tutorial-panel/components/tutorial-list/index.js +1 -1
- package/tutorial-panel/components/tutorial-list/index.js.map +1 -1
- package/wizard/wizard-navigation.js +1 -1
- package/wizard/wizard-navigation.js.map +1 -1
|
@@ -5,6 +5,7 @@ import AsyncStore from '../../area-chart/async-store';
|
|
|
5
5
|
import { useStableEventHandler } from '../../internal/hooks/use-stable-event-handler';
|
|
6
6
|
import { useResizeObserver } from '../../internal/hooks/container-queries';
|
|
7
7
|
import clsx from 'clsx';
|
|
8
|
+
import { isCellStatesEqual, isWrapperStatesEqual, updateCellOffsets } from './utils';
|
|
8
9
|
// We allow the table to have a minimum of 148px of available space besides the sum of the widths of the sticky columns
|
|
9
10
|
// This value is an UX recommendation and is approximately 1/3 of our smallest breakpoint (465px)
|
|
10
11
|
const MINIMUM_SCROLLABLE_SPACE = 148;
|
|
@@ -79,7 +80,6 @@ export function useStickyColumns({ visibleColumns, stickyColumnsFirst, stickyCol
|
|
|
79
80
|
}
|
|
80
81
|
}, []);
|
|
81
82
|
return {
|
|
82
|
-
isEnabled: hasStickyColumns,
|
|
83
83
|
store,
|
|
84
84
|
style: {
|
|
85
85
|
// Provide wrapper styles as props so that a re-render won't cause invalidation.
|
|
@@ -90,19 +90,17 @@ export function useStickyColumns({ visibleColumns, stickyColumnsFirst, stickyCol
|
|
|
90
90
|
}
|
|
91
91
|
export function useStickyCellStyles({ stickyColumns, columnId, getClassName, }) {
|
|
92
92
|
var _a;
|
|
93
|
-
const cellRef = useRef(null);
|
|
94
93
|
const setCell = stickyColumns.refs.cell;
|
|
95
94
|
// unsubscribeRef to hold the function to unsubscribe from the store's updates
|
|
96
95
|
const unsubscribeRef = useRef(null);
|
|
97
96
|
// refCallback updates the cell ref and sets up the store subscription
|
|
98
|
-
const refCallback = useCallback(
|
|
97
|
+
const refCallback = useCallback(cellElement => {
|
|
99
98
|
if (unsubscribeRef.current) {
|
|
100
99
|
// Unsubscribe before we do any updates to avoid leaving any subscriptions hanging
|
|
101
100
|
unsubscribeRef.current();
|
|
102
101
|
}
|
|
103
102
|
// Update cellRef and the store's state to point to the new DOM node
|
|
104
|
-
|
|
105
|
-
setCell(columnId, node);
|
|
103
|
+
setCell(columnId, cellElement);
|
|
106
104
|
// Update cell styles imperatively to avoid unnecessary re-renders.
|
|
107
105
|
const selector = (state) => state.cellState[columnId];
|
|
108
106
|
const updateCellStyles = (state, prev) => {
|
|
@@ -110,7 +108,6 @@ export function useStickyCellStyles({ stickyColumns, columnId, getClassName, })
|
|
|
110
108
|
return;
|
|
111
109
|
}
|
|
112
110
|
const className = getClassName(state);
|
|
113
|
-
const cellElement = cellRef.current;
|
|
114
111
|
if (cellElement) {
|
|
115
112
|
Object.keys(className).forEach(key => {
|
|
116
113
|
if (className[key]) {
|
|
@@ -126,7 +123,7 @@ export function useStickyCellStyles({ stickyColumns, columnId, getClassName, })
|
|
|
126
123
|
};
|
|
127
124
|
// If the node is not null (i.e., the table cell is being mounted or updated, not unmounted),
|
|
128
125
|
// set up a new subscription to the store's updates
|
|
129
|
-
if (
|
|
126
|
+
if (cellElement) {
|
|
130
127
|
unsubscribeRef.current = stickyColumns.store.subscribe(selector, (newState, prevState) => {
|
|
131
128
|
updateCellStyles(selector(newState), selector(prevState));
|
|
132
129
|
});
|
|
@@ -143,25 +140,14 @@ export function useStickyCellStyles({ stickyColumns, columnId, getClassName, })
|
|
|
143
140
|
style: (_a = cellStyles === null || cellStyles === void 0 ? void 0 : cellStyles.offset) !== null && _a !== void 0 ? _a : undefined,
|
|
144
141
|
};
|
|
145
142
|
}
|
|
146
|
-
function isCellStatesEqual(s1, s2) {
|
|
147
|
-
if (s1 && s2) {
|
|
148
|
-
return (s1.padLeft === s2.padLeft &&
|
|
149
|
-
s1.lastLeft === s2.lastLeft &&
|
|
150
|
-
s1.lastRight === s2.lastRight &&
|
|
151
|
-
s1.offset.left === s2.offset.left &&
|
|
152
|
-
s1.offset.right === s2.offset.right);
|
|
153
|
-
}
|
|
154
|
-
return s1 === s2;
|
|
155
|
-
}
|
|
156
|
-
function isWrapperStatesEqual(s1, s2) {
|
|
157
|
-
return s1.scrollPaddingLeft === s2.scrollPaddingLeft && s1.scrollPaddingRight === s2.scrollPaddingRight;
|
|
158
|
-
}
|
|
159
143
|
export default class StickyColumnsStore extends AsyncStore {
|
|
160
144
|
constructor() {
|
|
161
145
|
super({ cellState: {}, wrapperState: { scrollPaddingLeft: 0, scrollPaddingRight: 0 } });
|
|
162
|
-
this.cellOffsets =
|
|
163
|
-
|
|
164
|
-
|
|
146
|
+
this.cellOffsets = {
|
|
147
|
+
offsets: new Map(),
|
|
148
|
+
stickyWidthLeft: 0,
|
|
149
|
+
stickyWidthRight: 0,
|
|
150
|
+
};
|
|
165
151
|
this.isStuckToTheLeft = false;
|
|
166
152
|
this.isStuckToTheRight = false;
|
|
167
153
|
this.padLeft = false;
|
|
@@ -184,8 +170,8 @@ export default class StickyColumnsStore extends AsyncStore {
|
|
|
184
170
|
}
|
|
185
171
|
// Determine the offset of the sticky column using the `cellOffsets` state object
|
|
186
172
|
const isFirstColumn = index === 0;
|
|
187
|
-
const stickyColumnOffsetLeft = (_b = (_a = this.cellOffsets.get(columnId)) === null || _a === void 0 ? void 0 : _a.first) !== null && _b !== void 0 ? _b : 0;
|
|
188
|
-
const stickyColumnOffsetRight = (_d = (_c = this.cellOffsets.get(columnId)) === null || _c === void 0 ? void 0 : _c.last) !== null && _d !== void 0 ? _d : 0;
|
|
173
|
+
const stickyColumnOffsetLeft = (_b = (_a = this.cellOffsets.offsets.get(columnId)) === null || _a === void 0 ? void 0 : _a.first) !== null && _b !== void 0 ? _b : 0;
|
|
174
|
+
const stickyColumnOffsetRight = (_d = (_c = this.cellOffsets.offsets.get(columnId)) === null || _c === void 0 ? void 0 : _c.last) !== null && _d !== void 0 ? _d : 0;
|
|
189
175
|
acc[columnId] = {
|
|
190
176
|
padLeft: isFirstColumn && this.padLeft,
|
|
191
177
|
lastLeft: this.isStuckToTheLeft && lastLeftStickyColumnIndex === index,
|
|
@@ -199,29 +185,7 @@ export default class StickyColumnsStore extends AsyncStore {
|
|
|
199
185
|
}, {});
|
|
200
186
|
};
|
|
201
187
|
this.updateCellOffsets = (props) => {
|
|
202
|
-
|
|
203
|
-
const firstColumnsWidths = [];
|
|
204
|
-
for (let i = 0; i < props.visibleColumns.length; i++) {
|
|
205
|
-
const element = props.cells[props.visibleColumns[i]];
|
|
206
|
-
const cellWidth = (_a = element.getBoundingClientRect().width) !== null && _a !== void 0 ? _a : 0;
|
|
207
|
-
firstColumnsWidths[i] = ((_b = firstColumnsWidths[i - 1]) !== null && _b !== void 0 ? _b : 0) + cellWidth;
|
|
208
|
-
}
|
|
209
|
-
const lastColumnsWidths = [];
|
|
210
|
-
for (let i = props.visibleColumns.length - 1; i >= 0; i--) {
|
|
211
|
-
const element = props.cells[props.visibleColumns[i]];
|
|
212
|
-
const cellWidth = (_c = element.getBoundingClientRect().width) !== null && _c !== void 0 ? _c : 0;
|
|
213
|
-
lastColumnsWidths[i] = ((_d = lastColumnsWidths[i + 1]) !== null && _d !== void 0 ? _d : 0) + cellWidth;
|
|
214
|
-
}
|
|
215
|
-
lastColumnsWidths.reverse();
|
|
216
|
-
this.stickyWidthLeft = (_e = firstColumnsWidths[props.stickyColumnsFirst - 1]) !== null && _e !== void 0 ? _e : 0;
|
|
217
|
-
this.stickyWidthRight = (_f = lastColumnsWidths[props.stickyColumnsLast - 1]) !== null && _f !== void 0 ? _f : 0;
|
|
218
|
-
this.cellOffsets = props.visibleColumns.reduce((map, columnId, columnIndex) => {
|
|
219
|
-
var _a, _b;
|
|
220
|
-
return map.set(columnId, {
|
|
221
|
-
first: (_a = firstColumnsWidths[columnIndex - 1]) !== null && _a !== void 0 ? _a : 0,
|
|
222
|
-
last: (_b = lastColumnsWidths[props.visibleColumns.length - 1 - columnIndex - 1]) !== null && _b !== void 0 ? _b : 0,
|
|
223
|
-
});
|
|
224
|
-
}, new Map());
|
|
188
|
+
this.cellOffsets = updateCellOffsets(props.cells, props);
|
|
225
189
|
};
|
|
226
190
|
this.isEnabled = (props) => {
|
|
227
191
|
const noStickyColumns = props.stickyColumnsFirst + props.stickyColumnsLast === 0;
|
|
@@ -234,7 +198,7 @@ export default class StickyColumnsStore extends AsyncStore {
|
|
|
234
198
|
if (!isWrapperScrollable) {
|
|
235
199
|
return false;
|
|
236
200
|
}
|
|
237
|
-
const totalStickySpace = this.stickyWidthLeft + this.stickyWidthRight;
|
|
201
|
+
const totalStickySpace = this.cellOffsets.stickyWidthLeft + this.cellOffsets.stickyWidthRight;
|
|
238
202
|
const tablePaddingLeft = parseFloat(getComputedStyle(props.table).paddingLeft) || 0;
|
|
239
203
|
const tablePaddingRight = parseFloat(getComputedStyle(props.table).paddingRight) || 0;
|
|
240
204
|
const hasEnoughScrollableSpace = totalStickySpace + MINIMUM_SCROLLABLE_SPACE + tablePaddingLeft + tablePaddingRight < wrapperWidth;
|
|
@@ -246,13 +210,16 @@ export default class StickyColumnsStore extends AsyncStore {
|
|
|
246
210
|
}
|
|
247
211
|
updateCellStyles(props) {
|
|
248
212
|
const hasStickyColumns = props.stickyColumnsFirst + props.stickyColumnsLast > 0;
|
|
249
|
-
const hadStickyColumns = this.cellOffsets.size > 0;
|
|
213
|
+
const hadStickyColumns = this.cellOffsets.offsets.size > 0;
|
|
250
214
|
if (hasStickyColumns || hadStickyColumns) {
|
|
251
215
|
this.updateScroll(props);
|
|
252
216
|
this.updateCellOffsets(props);
|
|
253
217
|
this.set(() => ({
|
|
254
218
|
cellState: this.generateCellStyles(props),
|
|
255
|
-
wrapperState: {
|
|
219
|
+
wrapperState: {
|
|
220
|
+
scrollPaddingLeft: this.cellOffsets.stickyWidthLeft,
|
|
221
|
+
scrollPaddingRight: this.cellOffsets.stickyWidthRight,
|
|
222
|
+
},
|
|
256
223
|
}));
|
|
257
224
|
}
|
|
258
225
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-sticky-columns.js","sourceRoot":"lib/default/","sources":["table/sticky-columns/use-sticky-columns.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport AsyncStore from '../../area-chart/async-store';\nimport { useStableEventHandler } from '../../internal/hooks/use-stable-event-handler';\nimport { useResizeObserver } from '../../internal/hooks/container-queries';\nimport clsx from 'clsx';\n\n// We allow the table to have a minimum of 148px of available space besides the sum of the widths of the sticky columns\n// This value is an UX recommendation and is approximately 1/3 of our smallest breakpoint (465px)\nconst MINIMUM_SCROLLABLE_SPACE = 148;\n\ninterface StickyColumnsProps {\n visibleColumns: readonly PropertyKey[];\n stickyColumnsFirst: number;\n stickyColumnsLast: number;\n}\n\nexport interface StickyColumnsModel {\n isEnabled: boolean;\n store: StickyColumnsStore;\n style: {\n wrapper?: React.CSSProperties;\n };\n refs: {\n table: React.RefCallback<HTMLElement>;\n wrapper: React.RefCallback<HTMLElement>;\n cell: (columnId: PropertyKey, node: null | HTMLElement) => void;\n };\n}\n\nexport interface StickyColumnsState {\n cellState: Record<PropertyKey, null | StickyColumnsCellState>;\n wrapperState: StickyColumnsWrapperState;\n}\n\n// Cell state is used to apply respective styles and offsets to sticky cells.\nexport interface StickyColumnsCellState {\n padLeft: boolean;\n lastLeft: boolean;\n lastRight: boolean;\n offset: { left?: number; right?: number };\n}\n\n// Scroll padding is applied to table's wrapper so that the table scrolls when focus goes behind sticky column.\nexport interface StickyColumnsWrapperState {\n scrollPaddingLeft: number;\n scrollPaddingRight: number;\n}\n\nexport function useStickyColumns({\n visibleColumns,\n stickyColumnsFirst,\n stickyColumnsLast,\n}: StickyColumnsProps): StickyColumnsModel {\n const store = useMemo(() => new StickyColumnsStore(), []);\n const wrapperRef = useRef<HTMLElement>(null) as React.MutableRefObject<null | HTMLElement>;\n const tableRef = useRef<HTMLElement>(null) as React.MutableRefObject<null | HTMLElement>;\n const cellsRef = useRef<Record<PropertyKey, HTMLElement>>({});\n\n const hasStickyColumns = stickyColumnsFirst + stickyColumnsLast > 0;\n\n const updateStickyStyles = useStableEventHandler(() => {\n if (wrapperRef.current && tableRef.current) {\n store.updateCellStyles({\n wrapper: wrapperRef.current,\n table: tableRef.current,\n cells: cellsRef.current,\n visibleColumns,\n stickyColumnsFirst,\n stickyColumnsLast,\n });\n }\n });\n\n useResizeObserver(wrapperRef, updateStickyStyles);\n\n useResizeObserver(tableRef, updateStickyStyles);\n\n useEffect(() => {\n if (wrapperRef.current && tableRef.current) {\n store.updateCellStyles({\n wrapper: wrapperRef.current,\n table: tableRef.current,\n cells: cellsRef.current,\n visibleColumns,\n stickyColumnsFirst,\n stickyColumnsLast,\n });\n }\n }, [store, stickyColumnsFirst, stickyColumnsLast, visibleColumns]);\n\n // Update wrapper styles imperatively to avoid unnecessary re-renders.\n useEffect(() => {\n if (!hasStickyColumns) {\n return;\n }\n\n const selector = (state: StickyColumnsState) => state.wrapperState;\n\n const updateWrapperStyles = (state: StickyColumnsWrapperState, prev: StickyColumnsWrapperState) => {\n if (isWrapperStatesEqual(state, prev)) {\n return;\n }\n\n if (wrapperRef.current) {\n wrapperRef.current.style.scrollPaddingLeft = state.scrollPaddingLeft + 'px';\n wrapperRef.current.style.scrollPaddingRight = state.scrollPaddingRight + 'px';\n }\n };\n\n const unsubscribe = store.subscribe(selector, (newState, prevState) =>\n updateWrapperStyles(selector(newState), selector(prevState))\n );\n return unsubscribe;\n }, [store, hasStickyColumns]);\n\n const setWrapper = useCallback(\n (node: null | HTMLElement) => {\n if (wrapperRef.current) {\n wrapperRef.current.removeEventListener('scroll', updateStickyStyles);\n }\n if (node && hasStickyColumns) {\n node.addEventListener('scroll', updateStickyStyles);\n }\n wrapperRef.current = node;\n },\n [hasStickyColumns, updateStickyStyles]\n );\n\n const setTable = useCallback((node: null | HTMLElement) => {\n tableRef.current = node;\n }, []);\n\n const setCell = useCallback((columnId: PropertyKey, node: null | HTMLElement) => {\n if (node) {\n cellsRef.current[columnId] = node;\n } else {\n delete cellsRef.current[columnId];\n }\n }, []);\n\n return {\n isEnabled: hasStickyColumns,\n store,\n style: {\n // Provide wrapper styles as props so that a re-render won't cause invalidation.\n wrapper: hasStickyColumns ? { ...store.get().wrapperState } : undefined,\n },\n refs: { wrapper: setWrapper, table: setTable, cell: setCell },\n };\n}\n\ninterface UseStickyCellStylesProps {\n stickyColumns: StickyColumnsModel;\n columnId: PropertyKey;\n getClassName: (styles: null | StickyColumnsCellState) => Record<string, boolean>;\n}\n\ninterface StickyCellStyles {\n ref: React.RefCallback<HTMLElement>;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function useStickyCellStyles({\n stickyColumns,\n columnId,\n getClassName,\n}: UseStickyCellStylesProps): StickyCellStyles {\n const cellRef = useRef<HTMLElement>(null) as React.MutableRefObject<HTMLElement>;\n const setCell = stickyColumns.refs.cell;\n\n // unsubscribeRef to hold the function to unsubscribe from the store's updates\n const unsubscribeRef = useRef<null | (() => void)>(null);\n\n // refCallback updates the cell ref and sets up the store subscription\n const refCallback = useCallback(\n node => {\n if (unsubscribeRef.current) {\n // Unsubscribe before we do any updates to avoid leaving any subscriptions hanging\n unsubscribeRef.current();\n }\n\n // Update cellRef and the store's state to point to the new DOM node\n cellRef.current = node;\n setCell(columnId, node);\n\n // Update cell styles imperatively to avoid unnecessary re-renders.\n const selector = (state: StickyColumnsState) => state.cellState[columnId];\n\n const updateCellStyles = (state: null | StickyColumnsCellState, prev: null | StickyColumnsCellState) => {\n if (isCellStatesEqual(state, prev)) {\n return;\n }\n\n const className = getClassName(state);\n const cellElement = cellRef.current;\n if (cellElement) {\n Object.keys(className).forEach(key => {\n if (className[key]) {\n cellElement.classList.add(key);\n } else {\n cellElement.classList.remove(key);\n }\n });\n cellElement.style.left = state?.offset.left !== undefined ? `${state.offset.left}px` : '';\n cellElement.style.right = state?.offset.right !== undefined ? `${state.offset.right}px` : '';\n }\n };\n\n // If the node is not null (i.e., the table cell is being mounted or updated, not unmounted),\n // set up a new subscription to the store's updates\n if (node) {\n unsubscribeRef.current = stickyColumns.store.subscribe(selector, (newState, prevState) => {\n updateCellStyles(selector(newState), selector(prevState));\n });\n }\n },\n\n // getClassName is expected to be pure\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [columnId, setCell, stickyColumns.store]\n );\n\n // Provide cell styles as props so that a re-render won't cause invalidation.\n const cellStyles = stickyColumns.store.get().cellState[columnId];\n return {\n ref: refCallback,\n className: cellStyles ? clsx(getClassName(cellStyles)) : undefined,\n style: cellStyles?.offset ?? undefined,\n };\n}\n\nfunction isCellStatesEqual(s1: null | StickyColumnsCellState, s2: null | StickyColumnsCellState): boolean {\n if (s1 && s2) {\n return (\n s1.padLeft === s2.padLeft &&\n s1.lastLeft === s2.lastLeft &&\n s1.lastRight === s2.lastRight &&\n s1.offset.left === s2.offset.left &&\n s1.offset.right === s2.offset.right\n );\n }\n return s1 === s2;\n}\n\nfunction isWrapperStatesEqual(s1: StickyColumnsWrapperState, s2: StickyColumnsWrapperState): boolean {\n return s1.scrollPaddingLeft === s2.scrollPaddingLeft && s1.scrollPaddingRight === s2.scrollPaddingRight;\n}\n\ninterface UpdateCellStylesProps {\n wrapper: HTMLElement;\n table: HTMLElement;\n cells: Record<PropertyKey, HTMLElement>;\n visibleColumns: readonly PropertyKey[];\n stickyColumnsFirst: number;\n stickyColumnsLast: number;\n}\n\nexport default class StickyColumnsStore extends AsyncStore<StickyColumnsState> {\n private cellOffsets = new Map<PropertyKey, { first: number; last: number }>();\n private stickyWidthLeft = 0;\n private stickyWidthRight = 0;\n private isStuckToTheLeft = false;\n private isStuckToTheRight = false;\n private padLeft = false;\n\n constructor() {\n super({ cellState: {}, wrapperState: { scrollPaddingLeft: 0, scrollPaddingRight: 0 } });\n }\n\n public updateCellStyles(props: UpdateCellStylesProps) {\n const hasStickyColumns = props.stickyColumnsFirst + props.stickyColumnsLast > 0;\n const hadStickyColumns = this.cellOffsets.size > 0;\n\n if (hasStickyColumns || hadStickyColumns) {\n this.updateScroll(props);\n this.updateCellOffsets(props);\n this.set(() => ({\n cellState: this.generateCellStyles(props),\n wrapperState: { scrollPaddingLeft: this.stickyWidthLeft, scrollPaddingRight: this.stickyWidthRight },\n }));\n }\n }\n\n private updateScroll(props: UpdateCellStylesProps) {\n const wrapperScrollLeft = props.wrapper.scrollLeft;\n const wrapperScrollWidth = props.wrapper.scrollWidth;\n const wrapperClientWidth = props.wrapper.clientWidth;\n const tablePaddingLeft = parseFloat(getComputedStyle(props.table).paddingLeft) || 0;\n const tablePaddingRight = parseFloat(getComputedStyle(props.table).paddingRight) || 0;\n\n this.isStuckToTheLeft = wrapperScrollLeft > tablePaddingLeft;\n\n // Math.ceil() is used here to address an edge-case in certain browsers, where they return non-integer wrapperScrollLeft values\n // which are lower than expected (sub-pixel difference), resulting in the table always being in the \"stuck to the right\" state\n this.isStuckToTheRight = Math.ceil(wrapperScrollLeft) < wrapperScrollWidth - wrapperClientWidth - tablePaddingRight;\n\n this.padLeft = tablePaddingLeft !== 0 && this.isStuckToTheLeft;\n }\n\n private generateCellStyles = (props: UpdateCellStylesProps): Record<PropertyKey, null | StickyColumnsCellState> => {\n const isEnabled = this.isEnabled(props);\n const lastLeftStickyColumnIndex = props.stickyColumnsFirst - 1;\n const lastRightStickyColumnIndex = props.visibleColumns.length - props.stickyColumnsLast;\n\n return props.visibleColumns.reduce((acc, columnId, index) => {\n let stickySide = 'non-sticky';\n if (index < props.stickyColumnsFirst) {\n stickySide = 'left';\n } else if (index >= props.visibleColumns.length - props.stickyColumnsLast) {\n stickySide = 'right';\n }\n\n if (!isEnabled || stickySide === 'non-sticky') {\n acc[columnId] = null;\n return acc;\n }\n\n // Determine the offset of the sticky column using the `cellOffsets` state object\n const isFirstColumn = index === 0;\n const stickyColumnOffsetLeft = this.cellOffsets.get(columnId)?.first ?? 0;\n const stickyColumnOffsetRight = this.cellOffsets.get(columnId)?.last ?? 0;\n\n acc[columnId] = {\n padLeft: isFirstColumn && this.padLeft,\n lastLeft: this.isStuckToTheLeft && lastLeftStickyColumnIndex === index,\n lastRight: this.isStuckToTheRight && lastRightStickyColumnIndex === index,\n offset: {\n left: stickySide === 'left' ? stickyColumnOffsetLeft : undefined,\n right: stickySide === 'right' ? stickyColumnOffsetRight : undefined,\n },\n };\n return acc;\n }, {} as Record<PropertyKey, null | StickyColumnsCellState>);\n };\n\n private updateCellOffsets = (props: UpdateCellStylesProps): void => {\n const firstColumnsWidths: number[] = [];\n for (let i = 0; i < props.visibleColumns.length; i++) {\n const element = props.cells[props.visibleColumns[i]];\n const cellWidth = element.getBoundingClientRect().width ?? 0;\n firstColumnsWidths[i] = (firstColumnsWidths[i - 1] ?? 0) + cellWidth;\n }\n\n const lastColumnsWidths: number[] = [];\n for (let i = props.visibleColumns.length - 1; i >= 0; i--) {\n const element = props.cells[props.visibleColumns[i]];\n const cellWidth = element.getBoundingClientRect().width ?? 0;\n lastColumnsWidths[i] = (lastColumnsWidths[i + 1] ?? 0) + cellWidth;\n }\n lastColumnsWidths.reverse();\n\n this.stickyWidthLeft = firstColumnsWidths[props.stickyColumnsFirst - 1] ?? 0;\n this.stickyWidthRight = lastColumnsWidths[props.stickyColumnsLast - 1] ?? 0;\n this.cellOffsets = props.visibleColumns.reduce(\n (map, columnId, columnIndex) =>\n map.set(columnId, {\n first: firstColumnsWidths[columnIndex - 1] ?? 0,\n last: lastColumnsWidths[props.visibleColumns.length - 1 - columnIndex - 1] ?? 0,\n }),\n new Map()\n );\n };\n\n private isEnabled = (props: UpdateCellStylesProps): boolean => {\n const noStickyColumns = props.stickyColumnsFirst + props.stickyColumnsLast === 0;\n if (noStickyColumns) {\n return false;\n }\n\n const wrapperWidth = props.wrapper.getBoundingClientRect().width;\n const tableWidth = props.table.getBoundingClientRect().width;\n const isWrapperScrollable = tableWidth > wrapperWidth;\n if (!isWrapperScrollable) {\n return false;\n }\n\n const totalStickySpace = this.stickyWidthLeft + this.stickyWidthRight;\n const tablePaddingLeft = parseFloat(getComputedStyle(props.table).paddingLeft) || 0;\n const tablePaddingRight = parseFloat(getComputedStyle(props.table).paddingRight) || 0;\n const hasEnoughScrollableSpace =\n totalStickySpace + MINIMUM_SCROLLABLE_SPACE + tablePaddingLeft + tablePaddingRight < wrapperWidth;\n if (!hasEnoughScrollableSpace) {\n return false;\n }\n\n return true;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"use-sticky-columns.js","sourceRoot":"lib/default/","sources":["table/sticky-columns/use-sticky-columns.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport AsyncStore from '../../area-chart/async-store';\nimport { useStableEventHandler } from '../../internal/hooks/use-stable-event-handler';\nimport { useResizeObserver } from '../../internal/hooks/container-queries';\nimport clsx from 'clsx';\nimport {\n CellOffsets,\n StickyColumnsCellState,\n StickyColumnsProps,\n StickyColumnsState,\n StickyColumnsWrapperState,\n} from './interfaces';\nimport { isCellStatesEqual, isWrapperStatesEqual, updateCellOffsets } from './utils';\n\n// We allow the table to have a minimum of 148px of available space besides the sum of the widths of the sticky columns\n// This value is an UX recommendation and is approximately 1/3 of our smallest breakpoint (465px)\nconst MINIMUM_SCROLLABLE_SPACE = 148;\n\nexport interface StickyColumnsModel {\n store: StickyColumnsStore;\n style: {\n wrapper?: React.CSSProperties;\n };\n refs: {\n table: React.RefCallback<HTMLElement>;\n wrapper: React.RefCallback<HTMLElement>;\n cell: (columnId: PropertyKey, node: null | HTMLElement) => void;\n };\n}\n\nexport function useStickyColumns({\n visibleColumns,\n stickyColumnsFirst,\n stickyColumnsLast,\n}: StickyColumnsProps): StickyColumnsModel {\n const store = useMemo(() => new StickyColumnsStore(), []);\n const wrapperRef = useRef<HTMLElement>(null) as React.MutableRefObject<null | HTMLElement>;\n const tableRef = useRef<HTMLElement>(null) as React.MutableRefObject<null | HTMLElement>;\n const cellsRef = useRef<Record<PropertyKey, HTMLElement>>({});\n\n const hasStickyColumns = stickyColumnsFirst + stickyColumnsLast > 0;\n\n const updateStickyStyles = useStableEventHandler(() => {\n if (wrapperRef.current && tableRef.current) {\n store.updateCellStyles({\n wrapper: wrapperRef.current,\n table: tableRef.current,\n cells: cellsRef.current,\n visibleColumns,\n stickyColumnsFirst,\n stickyColumnsLast,\n });\n }\n });\n\n useResizeObserver(wrapperRef, updateStickyStyles);\n\n useResizeObserver(tableRef, updateStickyStyles);\n\n useEffect(() => {\n if (wrapperRef.current && tableRef.current) {\n store.updateCellStyles({\n wrapper: wrapperRef.current,\n table: tableRef.current,\n cells: cellsRef.current,\n visibleColumns,\n stickyColumnsFirst,\n stickyColumnsLast,\n });\n }\n }, [store, stickyColumnsFirst, stickyColumnsLast, visibleColumns]);\n\n // Update wrapper styles imperatively to avoid unnecessary re-renders.\n useEffect(() => {\n if (!hasStickyColumns) {\n return;\n }\n\n const selector = (state: StickyColumnsState) => state.wrapperState;\n\n const updateWrapperStyles = (state: StickyColumnsWrapperState, prev: StickyColumnsWrapperState) => {\n if (isWrapperStatesEqual(state, prev)) {\n return;\n }\n\n if (wrapperRef.current) {\n wrapperRef.current.style.scrollPaddingLeft = state.scrollPaddingLeft + 'px';\n wrapperRef.current.style.scrollPaddingRight = state.scrollPaddingRight + 'px';\n }\n };\n\n const unsubscribe = store.subscribe(selector, (newState, prevState) =>\n updateWrapperStyles(selector(newState), selector(prevState))\n );\n return unsubscribe;\n }, [store, hasStickyColumns]);\n\n const setWrapper = useCallback(\n (node: null | HTMLElement) => {\n if (wrapperRef.current) {\n wrapperRef.current.removeEventListener('scroll', updateStickyStyles);\n }\n if (node && hasStickyColumns) {\n node.addEventListener('scroll', updateStickyStyles);\n }\n wrapperRef.current = node;\n },\n [hasStickyColumns, updateStickyStyles]\n );\n\n const setTable = useCallback((node: null | HTMLElement) => {\n tableRef.current = node;\n }, []);\n\n const setCell = useCallback((columnId: PropertyKey, node: null | HTMLElement) => {\n if (node) {\n cellsRef.current[columnId] = node;\n } else {\n delete cellsRef.current[columnId];\n }\n }, []);\n\n return {\n store,\n style: {\n // Provide wrapper styles as props so that a re-render won't cause invalidation.\n wrapper: hasStickyColumns ? { ...store.get().wrapperState } : undefined,\n },\n refs: { wrapper: setWrapper, table: setTable, cell: setCell },\n };\n}\n\ninterface UseStickyCellStylesProps {\n stickyColumns: StickyColumnsModel;\n columnId: PropertyKey;\n getClassName: (styles: null | StickyColumnsCellState) => Record<string, boolean>;\n}\n\ninterface StickyCellStyles {\n ref: React.RefCallback<HTMLElement>;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function useStickyCellStyles({\n stickyColumns,\n columnId,\n getClassName,\n}: UseStickyCellStylesProps): StickyCellStyles {\n const setCell = stickyColumns.refs.cell;\n\n // unsubscribeRef to hold the function to unsubscribe from the store's updates\n const unsubscribeRef = useRef<null | (() => void)>(null);\n\n // refCallback updates the cell ref and sets up the store subscription\n const refCallback = useCallback(\n cellElement => {\n if (unsubscribeRef.current) {\n // Unsubscribe before we do any updates to avoid leaving any subscriptions hanging\n unsubscribeRef.current();\n }\n\n // Update cellRef and the store's state to point to the new DOM node\n setCell(columnId, cellElement);\n\n // Update cell styles imperatively to avoid unnecessary re-renders.\n const selector = (state: StickyColumnsState) => state.cellState[columnId];\n\n const updateCellStyles = (state: null | StickyColumnsCellState, prev: null | StickyColumnsCellState) => {\n if (isCellStatesEqual(state, prev)) {\n return;\n }\n\n const className = getClassName(state);\n if (cellElement) {\n Object.keys(className).forEach(key => {\n if (className[key]) {\n cellElement.classList.add(key);\n } else {\n cellElement.classList.remove(key);\n }\n });\n cellElement.style.left = state?.offset.left !== undefined ? `${state.offset.left}px` : '';\n cellElement.style.right = state?.offset.right !== undefined ? `${state.offset.right}px` : '';\n }\n };\n\n // If the node is not null (i.e., the table cell is being mounted or updated, not unmounted),\n // set up a new subscription to the store's updates\n if (cellElement) {\n unsubscribeRef.current = stickyColumns.store.subscribe(selector, (newState, prevState) => {\n updateCellStyles(selector(newState), selector(prevState));\n });\n }\n },\n\n // getClassName is expected to be pure\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [columnId, setCell, stickyColumns.store]\n );\n\n // Provide cell styles as props so that a re-render won't cause invalidation.\n const cellStyles = stickyColumns.store.get().cellState[columnId];\n return {\n ref: refCallback,\n className: cellStyles ? clsx(getClassName(cellStyles)) : undefined,\n style: cellStyles?.offset ?? undefined,\n };\n}\n\ninterface UpdateCellStylesProps {\n wrapper: HTMLElement;\n table: HTMLElement;\n cells: Record<PropertyKey, HTMLElement>;\n visibleColumns: readonly PropertyKey[];\n stickyColumnsFirst: number;\n stickyColumnsLast: number;\n}\n\nexport default class StickyColumnsStore extends AsyncStore<StickyColumnsState> {\n private cellOffsets: CellOffsets = {\n offsets: new Map(),\n stickyWidthLeft: 0,\n stickyWidthRight: 0,\n };\n private isStuckToTheLeft = false;\n private isStuckToTheRight = false;\n private padLeft = false;\n\n constructor() {\n super({ cellState: {}, wrapperState: { scrollPaddingLeft: 0, scrollPaddingRight: 0 } });\n }\n\n public updateCellStyles(props: UpdateCellStylesProps) {\n const hasStickyColumns = props.stickyColumnsFirst + props.stickyColumnsLast > 0;\n const hadStickyColumns = this.cellOffsets.offsets.size > 0;\n\n if (hasStickyColumns || hadStickyColumns) {\n this.updateScroll(props);\n this.updateCellOffsets(props);\n this.set(() => ({\n cellState: this.generateCellStyles(props),\n wrapperState: {\n scrollPaddingLeft: this.cellOffsets.stickyWidthLeft,\n scrollPaddingRight: this.cellOffsets.stickyWidthRight,\n },\n }));\n }\n }\n\n private updateScroll(props: UpdateCellStylesProps) {\n const wrapperScrollLeft = props.wrapper.scrollLeft;\n const wrapperScrollWidth = props.wrapper.scrollWidth;\n const wrapperClientWidth = props.wrapper.clientWidth;\n const tablePaddingLeft = parseFloat(getComputedStyle(props.table).paddingLeft) || 0;\n const tablePaddingRight = parseFloat(getComputedStyle(props.table).paddingRight) || 0;\n\n this.isStuckToTheLeft = wrapperScrollLeft > tablePaddingLeft;\n\n // Math.ceil() is used here to address an edge-case in certain browsers, where they return non-integer wrapperScrollLeft values\n // which are lower than expected (sub-pixel difference), resulting in the table always being in the \"stuck to the right\" state\n this.isStuckToTheRight = Math.ceil(wrapperScrollLeft) < wrapperScrollWidth - wrapperClientWidth - tablePaddingRight;\n\n this.padLeft = tablePaddingLeft !== 0 && this.isStuckToTheLeft;\n }\n\n private generateCellStyles = (props: UpdateCellStylesProps): Record<PropertyKey, null | StickyColumnsCellState> => {\n const isEnabled = this.isEnabled(props);\n const lastLeftStickyColumnIndex = props.stickyColumnsFirst - 1;\n const lastRightStickyColumnIndex = props.visibleColumns.length - props.stickyColumnsLast;\n\n return props.visibleColumns.reduce((acc, columnId, index) => {\n let stickySide = 'non-sticky';\n if (index < props.stickyColumnsFirst) {\n stickySide = 'left';\n } else if (index >= props.visibleColumns.length - props.stickyColumnsLast) {\n stickySide = 'right';\n }\n\n if (!isEnabled || stickySide === 'non-sticky') {\n acc[columnId] = null;\n return acc;\n }\n\n // Determine the offset of the sticky column using the `cellOffsets` state object\n const isFirstColumn = index === 0;\n const stickyColumnOffsetLeft = this.cellOffsets.offsets.get(columnId)?.first ?? 0;\n const stickyColumnOffsetRight = this.cellOffsets.offsets.get(columnId)?.last ?? 0;\n\n acc[columnId] = {\n padLeft: isFirstColumn && this.padLeft,\n lastLeft: this.isStuckToTheLeft && lastLeftStickyColumnIndex === index,\n lastRight: this.isStuckToTheRight && lastRightStickyColumnIndex === index,\n offset: {\n left: stickySide === 'left' ? stickyColumnOffsetLeft : undefined,\n right: stickySide === 'right' ? stickyColumnOffsetRight : undefined,\n },\n };\n return acc;\n }, {} as Record<PropertyKey, null | StickyColumnsCellState>);\n };\n\n private updateCellOffsets = (props: UpdateCellStylesProps): void => {\n this.cellOffsets = updateCellOffsets(props.cells, props);\n };\n\n private isEnabled = (props: UpdateCellStylesProps): boolean => {\n const noStickyColumns = props.stickyColumnsFirst + props.stickyColumnsLast === 0;\n if (noStickyColumns) {\n return false;\n }\n\n const wrapperWidth = props.wrapper.getBoundingClientRect().width;\n const tableWidth = props.table.getBoundingClientRect().width;\n const isWrapperScrollable = tableWidth > wrapperWidth;\n if (!isWrapperScrollable) {\n return false;\n }\n\n const totalStickySpace = this.cellOffsets.stickyWidthLeft + this.cellOffsets.stickyWidthRight;\n const tablePaddingLeft = parseFloat(getComputedStyle(props.table).paddingLeft) || 0;\n const tablePaddingRight = parseFloat(getComputedStyle(props.table).paddingRight) || 0;\n const hasEnoughScrollableSpace =\n totalStickySpace + MINIMUM_SCROLLABLE_SPACE + tablePaddingLeft + tablePaddingRight < wrapperWidth;\n if (!hasEnoughScrollableSpace) {\n return false;\n }\n\n return true;\n };\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { CellOffsets, StickyColumnsCellState, StickyColumnsProps, StickyColumnsWrapperState } from './interfaces';
|
|
2
|
+
export declare function isCellStatesEqual(s1: null | StickyColumnsCellState, s2: null | StickyColumnsCellState): boolean;
|
|
3
|
+
export declare function isWrapperStatesEqual(s1: StickyColumnsWrapperState, s2: StickyColumnsWrapperState): boolean;
|
|
4
|
+
export declare function updateCellOffsets(cells: Record<PropertyKey, HTMLElement>, props: StickyColumnsProps): CellOffsets;
|
|
5
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"lib/default/","sources":["table/sticky-columns/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAElH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,IAAI,GAAG,sBAAsB,EAAE,EAAE,EAAE,IAAI,GAAG,sBAAsB,GAAG,OAAO,CAW/G;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,yBAAyB,GAAG,OAAO,CAE1G;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,kBAAkB,GAAG,WAAW,CA6BjH"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
export function isCellStatesEqual(s1, s2) {
|
|
4
|
+
if (s1 && s2) {
|
|
5
|
+
return (s1.padLeft === s2.padLeft &&
|
|
6
|
+
s1.lastLeft === s2.lastLeft &&
|
|
7
|
+
s1.lastRight === s2.lastRight &&
|
|
8
|
+
s1.offset.left === s2.offset.left &&
|
|
9
|
+
s1.offset.right === s2.offset.right);
|
|
10
|
+
}
|
|
11
|
+
return s1 === s2;
|
|
12
|
+
}
|
|
13
|
+
export function isWrapperStatesEqual(s1, s2) {
|
|
14
|
+
return s1.scrollPaddingLeft === s2.scrollPaddingLeft && s1.scrollPaddingRight === s2.scrollPaddingRight;
|
|
15
|
+
}
|
|
16
|
+
export function updateCellOffsets(cells, props) {
|
|
17
|
+
var _a, _b, _c, _d, _e, _f;
|
|
18
|
+
const totalColumns = props.visibleColumns.length;
|
|
19
|
+
const firstColumnsWidths = [];
|
|
20
|
+
for (let i = 0; i < Math.min(totalColumns, props.stickyColumnsFirst); i++) {
|
|
21
|
+
const element = cells[props.visibleColumns[i]];
|
|
22
|
+
const cellWidth = (_a = element.getBoundingClientRect().width) !== null && _a !== void 0 ? _a : 0;
|
|
23
|
+
firstColumnsWidths[i] = ((_b = firstColumnsWidths[i - 1]) !== null && _b !== void 0 ? _b : 0) + cellWidth;
|
|
24
|
+
}
|
|
25
|
+
const lastColumnsWidths = [];
|
|
26
|
+
for (let i = 0; i < Math.min(totalColumns, props.stickyColumnsLast); i++) {
|
|
27
|
+
const element = cells[props.visibleColumns[totalColumns - 1 - i]];
|
|
28
|
+
const cellWidth = (_c = element.getBoundingClientRect().width) !== null && _c !== void 0 ? _c : 0;
|
|
29
|
+
lastColumnsWidths[i] = ((_d = lastColumnsWidths[i - 1]) !== null && _d !== void 0 ? _d : 0) + cellWidth;
|
|
30
|
+
}
|
|
31
|
+
const stickyWidthLeft = (_e = firstColumnsWidths[props.stickyColumnsFirst - 1]) !== null && _e !== void 0 ? _e : 0;
|
|
32
|
+
const stickyWidthRight = (_f = lastColumnsWidths[props.stickyColumnsLast - 1]) !== null && _f !== void 0 ? _f : 0;
|
|
33
|
+
const offsets = props.visibleColumns.reduce((map, columnId, columnIndex) => {
|
|
34
|
+
var _a, _b;
|
|
35
|
+
return map.set(columnId, {
|
|
36
|
+
first: (_a = firstColumnsWidths[columnIndex - 1]) !== null && _a !== void 0 ? _a : 0,
|
|
37
|
+
last: (_b = lastColumnsWidths[totalColumns - 1 - columnIndex - 1]) !== null && _b !== void 0 ? _b : 0,
|
|
38
|
+
});
|
|
39
|
+
}, new Map());
|
|
40
|
+
return { offsets, stickyWidthLeft, stickyWidthRight };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"lib/default/","sources":["table/sticky-columns/utils.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAItC,MAAM,UAAU,iBAAiB,CAAC,EAAiC,EAAE,EAAiC;IACpG,IAAI,EAAE,IAAI,EAAE,EAAE;QACZ,OAAO,CACL,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO;YACzB,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ;YAC3B,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS;YAC7B,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI;YACjC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CACpC,CAAC;KACH;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAA6B,EAAE,EAA6B;IAC/F,OAAO,EAAE,CAAC,iBAAiB,KAAK,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,kBAAkB,KAAK,EAAE,CAAC,kBAAkB,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAuC,EAAE,KAAyB;;IAClG,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;IAEjD,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE;QACzE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,mCAAI,CAAC,CAAC;QAC7D,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,MAAA,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,SAAS,CAAC;KACtE;IAED,MAAM,iBAAiB,GAAa,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE;QACxE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,mCAAI,CAAC,CAAC;QAC7D,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,MAAA,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,SAAS,CAAC;KACpE;IAED,MAAM,eAAe,GAAG,MAAA,kBAAkB,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,mCAAI,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAG,MAAA,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,mCAAI,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;;QAC7B,OAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE;YAChB,KAAK,EAAE,MAAA,kBAAkB,CAAC,WAAW,GAAG,CAAC,CAAC,mCAAI,CAAC;YAC/C,IAAI,EAAE,MAAA,iBAAiB,CAAC,YAAY,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,mCAAI,CAAC;SACjE,CAAC,CAAA;KAAA,EACJ,IAAI,GAAG,EAAE,CACV,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC;AACxD,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { CellOffsets, StickyColumnsCellState, StickyColumnsProps, StickyColumnsWrapperState } from './interfaces';\n\nexport function isCellStatesEqual(s1: null | StickyColumnsCellState, s2: null | StickyColumnsCellState): boolean {\n if (s1 && s2) {\n return (\n s1.padLeft === s2.padLeft &&\n s1.lastLeft === s2.lastLeft &&\n s1.lastRight === s2.lastRight &&\n s1.offset.left === s2.offset.left &&\n s1.offset.right === s2.offset.right\n );\n }\n return s1 === s2;\n}\n\nexport function isWrapperStatesEqual(s1: StickyColumnsWrapperState, s2: StickyColumnsWrapperState): boolean {\n return s1.scrollPaddingLeft === s2.scrollPaddingLeft && s1.scrollPaddingRight === s2.scrollPaddingRight;\n}\n\nexport function updateCellOffsets(cells: Record<PropertyKey, HTMLElement>, props: StickyColumnsProps): CellOffsets {\n const totalColumns = props.visibleColumns.length;\n\n const firstColumnsWidths: number[] = [];\n for (let i = 0; i < Math.min(totalColumns, props.stickyColumnsFirst); i++) {\n const element = cells[props.visibleColumns[i]];\n const cellWidth = element.getBoundingClientRect().width ?? 0;\n firstColumnsWidths[i] = (firstColumnsWidths[i - 1] ?? 0) + cellWidth;\n }\n\n const lastColumnsWidths: number[] = [];\n for (let i = 0; i < Math.min(totalColumns, props.stickyColumnsLast); i++) {\n const element = cells[props.visibleColumns[totalColumns - 1 - i]];\n const cellWidth = element.getBoundingClientRect().width ?? 0;\n lastColumnsWidths[i] = (lastColumnsWidths[i - 1] ?? 0) + cellWidth;\n }\n\n const stickyWidthLeft = firstColumnsWidths[props.stickyColumnsFirst - 1] ?? 0;\n const stickyWidthRight = lastColumnsWidths[props.stickyColumnsLast - 1] ?? 0;\n const offsets = props.visibleColumns.reduce(\n (map, columnId, columnIndex) =>\n map.set(columnId, {\n first: firstColumnsWidths[columnIndex - 1] ?? 0,\n last: lastColumnsWidths[totalColumns - 1 - columnIndex - 1] ?? 0,\n }),\n new Map()\n );\n\n return { offsets, stickyWidthLeft, stickyWidthRight };\n}\n"]}
|
|
@@ -91,7 +91,7 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
91
91
|
SPDX-License-Identifier: Apache-2.0
|
|
92
92
|
*/
|
|
93
93
|
/* stylelint-disable @cloudscape-design/no-implicit-descendant, selector-max-type */
|
|
94
|
-
.awsui_text-
|
|
94
|
+
.awsui_text-content_6absk_14chd_94:not(#\9) {
|
|
95
95
|
/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
|
|
96
96
|
border-collapse: separate;
|
|
97
97
|
border-spacing: 0;
|
|
@@ -131,26 +131,26 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
131
131
|
/* stylelint-disable no-descending-specificity */
|
|
132
132
|
/* stylelint-enable no-descending-specificity */
|
|
133
133
|
}
|
|
134
|
-
.awsui_text-
|
|
135
|
-
.awsui_text-
|
|
136
|
-
.awsui_text-
|
|
137
|
-
.awsui_text-
|
|
138
|
-
.awsui_text-
|
|
139
|
-
.awsui_text-
|
|
134
|
+
.awsui_text-content_6absk_14chd_94 h1:not(#\9),
|
|
135
|
+
.awsui_text-content_6absk_14chd_94 h2:not(#\9),
|
|
136
|
+
.awsui_text-content_6absk_14chd_94 h3:not(#\9),
|
|
137
|
+
.awsui_text-content_6absk_14chd_94 h4:not(#\9),
|
|
138
|
+
.awsui_text-content_6absk_14chd_94 h5:not(#\9),
|
|
139
|
+
.awsui_text-content_6absk_14chd_94 p:not(#\9) {
|
|
140
140
|
font-family: inherit;
|
|
141
141
|
font-weight: normal;
|
|
142
142
|
text-decoration: none;
|
|
143
143
|
margin: 0;
|
|
144
144
|
padding: var(--space-xxs-p8yyaw, 4px) 0;
|
|
145
145
|
}
|
|
146
|
-
.awsui_text-
|
|
147
|
-
.awsui_text-
|
|
148
|
-
.awsui_text-
|
|
149
|
-
.awsui_text-
|
|
150
|
-
.awsui_text-
|
|
146
|
+
.awsui_text-content_6absk_14chd_94 h1:not(#\9),
|
|
147
|
+
.awsui_text-content_6absk_14chd_94 h2:not(#\9),
|
|
148
|
+
.awsui_text-content_6absk_14chd_94 h3:not(#\9),
|
|
149
|
+
.awsui_text-content_6absk_14chd_94 h4:not(#\9),
|
|
150
|
+
.awsui_text-content_6absk_14chd_94 h5:not(#\9) {
|
|
151
151
|
color: var(--color-text-heading-default-rtslvy, #000716);
|
|
152
152
|
}
|
|
153
|
-
.awsui_text-
|
|
153
|
+
.awsui_text-content_6absk_14chd_94 h1:not(#\9) {
|
|
154
154
|
font-size: var(--font-heading-xl-size-h632xk, 24px);
|
|
155
155
|
line-height: var(--font-heading-xl-line-height-qs40h8, 30px);
|
|
156
156
|
letter-spacing: var(--font-heading-xl-letter-spacing-6telo5, -0.02em);
|
|
@@ -158,7 +158,7 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
158
158
|
-webkit-font-smoothing: var(--font-smoothing-webkit-m8nc84, antialiased);
|
|
159
159
|
-moz-osx-font-smoothing: var(--font-smoothing-moz-osx-foywby, grayscale);
|
|
160
160
|
}
|
|
161
|
-
.awsui_text-
|
|
161
|
+
.awsui_text-content_6absk_14chd_94 h2:not(#\9) {
|
|
162
162
|
font-size: var(--font-heading-l-size-hknb7q, 20px);
|
|
163
163
|
line-height: var(--font-heading-l-line-height-thvd8z, 24px);
|
|
164
164
|
letter-spacing: var(--font-heading-l-letter-spacing-r9otw4, -0.015em);
|
|
@@ -166,7 +166,7 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
166
166
|
-webkit-font-smoothing: var(--font-smoothing-webkit-m8nc84, antialiased);
|
|
167
167
|
-moz-osx-font-smoothing: var(--font-smoothing-moz-osx-foywby, grayscale);
|
|
168
168
|
}
|
|
169
|
-
.awsui_text-
|
|
169
|
+
.awsui_text-content_6absk_14chd_94 h3:not(#\9) {
|
|
170
170
|
font-size: var(--font-heading-m-size-ytqm4n, 18px);
|
|
171
171
|
line-height: var(--font-heading-m-line-height-bk6bii, 22px);
|
|
172
172
|
letter-spacing: var(--font-heading-m-letter-spacing-fefyfv, -0.01em);
|
|
@@ -174,7 +174,7 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
174
174
|
-webkit-font-smoothing: var(--font-smoothing-webkit-m8nc84, antialiased);
|
|
175
175
|
-moz-osx-font-smoothing: var(--font-smoothing-moz-osx-foywby, grayscale);
|
|
176
176
|
}
|
|
177
|
-
.awsui_text-
|
|
177
|
+
.awsui_text-content_6absk_14chd_94 h4:not(#\9) {
|
|
178
178
|
font-size: var(--font-heading-s-size-5q52fl, 16px);
|
|
179
179
|
line-height: var(--font-heading-s-line-height-w6crw0, 20px);
|
|
180
180
|
letter-spacing: var(--font-heading-s-letter-spacing-ebpsb6, -0.005em);
|
|
@@ -182,118 +182,116 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
182
182
|
-webkit-font-smoothing: var(--font-smoothing-webkit-m8nc84, antialiased);
|
|
183
183
|
-moz-osx-font-smoothing: var(--font-smoothing-moz-osx-foywby, grayscale);
|
|
184
184
|
}
|
|
185
|
-
.awsui_text-
|
|
185
|
+
.awsui_text-content_6absk_14chd_94 h5:not(#\9) {
|
|
186
186
|
font-size: var(--font-heading-xs-size-d24gfe, 14px);
|
|
187
187
|
line-height: var(--font-heading-xs-line-height-gyxcvc, 18px);
|
|
188
188
|
font-weight: var(--font-heading-xs-weight-dcgvdt, 700);
|
|
189
189
|
-webkit-font-smoothing: var(--font-smoothing-webkit-m8nc84, antialiased);
|
|
190
190
|
-moz-osx-font-smoothing: var(--font-smoothing-moz-osx-foywby, grayscale);
|
|
191
191
|
}
|
|
192
|
-
.awsui_text-
|
|
193
|
-
.awsui_text-
|
|
192
|
+
.awsui_text-content_6absk_14chd_94 b:not(#\9),
|
|
193
|
+
.awsui_text-content_6absk_14chd_94 strong:not(#\9) {
|
|
194
194
|
font-weight: 700;
|
|
195
195
|
}
|
|
196
|
-
.awsui_text-
|
|
196
|
+
.awsui_text-content_6absk_14chd_94 p:not(#\9) {
|
|
197
197
|
font-size: var(--font-body-m-size-dhtyxm, 14px);
|
|
198
198
|
line-height: var(--font-body-m-line-height-5wv9x1, 20px);
|
|
199
199
|
color: inherit;
|
|
200
200
|
}
|
|
201
|
-
.awsui_text-
|
|
201
|
+
.awsui_text-content_6absk_14chd_94 small:not(#\9) {
|
|
202
202
|
display: inline-block;
|
|
203
203
|
font-size: var(--font-body-s-size-8339kg, 12px);
|
|
204
204
|
line-height: var(--font-body-s-line-height-uztvf6, 16px);
|
|
205
205
|
letter-spacing: var(--font-body-s-letter-spacing-4obhmb, 0.005em);
|
|
206
206
|
color: var(--color-text-small-zfvvfc, #5f6b7a);
|
|
207
207
|
}
|
|
208
|
-
.awsui_text-
|
|
208
|
+
.awsui_text-content_6absk_14chd_94 small a:not(#\9) {
|
|
209
209
|
font-size: inherit;
|
|
210
210
|
color: var(--color-text-link-default-latg1a, #0972d3);
|
|
211
|
-
font-weight:
|
|
212
|
-
letter-spacing:
|
|
213
|
-
|
|
214
|
-
text-decoration: var(--font-link-primary-decoration-cp88s8, underline);
|
|
211
|
+
font-weight: inherit;
|
|
212
|
+
letter-spacing: normal;
|
|
213
|
+
text-decoration: underline;
|
|
215
214
|
/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
|
|
216
|
-
text-decoration-color:
|
|
215
|
+
text-decoration-color: currentColor;
|
|
217
216
|
transition-property: color, -webkit-text-decoration;
|
|
218
217
|
transition-property: color, text-decoration;
|
|
219
218
|
transition-property: color, text-decoration, -webkit-text-decoration;
|
|
220
219
|
transition-duration: var(--motion-duration-refresh-only-medium-nf6485, 165ms);
|
|
221
220
|
}
|
|
222
221
|
@media (prefers-reduced-motion: reduce) {
|
|
223
|
-
.awsui_text-
|
|
222
|
+
.awsui_text-content_6absk_14chd_94 small a:not(#\9) {
|
|
224
223
|
animation: none;
|
|
225
224
|
transition: none;
|
|
226
225
|
}
|
|
227
226
|
}
|
|
228
|
-
.awsui-motion-disabled .awsui_text-
|
|
227
|
+
.awsui-motion-disabled .awsui_text-content_6absk_14chd_94 small a:not(#\9), .awsui-mode-entering .awsui_text-content_6absk_14chd_94 small a:not(#\9) {
|
|
229
228
|
animation: none;
|
|
230
229
|
transition: none;
|
|
231
230
|
}
|
|
232
|
-
.awsui_text-
|
|
231
|
+
.awsui_text-content_6absk_14chd_94 small a:not(#\9):hover {
|
|
233
232
|
cursor: pointer;
|
|
234
233
|
color: var(--color-text-link-hover-8j6p14, #033160);
|
|
235
234
|
}
|
|
236
|
-
.awsui_text-
|
|
235
|
+
.awsui_text-content_6absk_14chd_94 small a:not(#\9):focus {
|
|
237
236
|
outline: none;
|
|
238
237
|
}
|
|
239
|
-
.awsui_text-
|
|
238
|
+
.awsui_text-content_6absk_14chd_94 small a:not(#\9):active {
|
|
240
239
|
color: var(--color-text-link-hover-8j6p14, #033160);
|
|
241
240
|
}
|
|
242
|
-
.awsui_text-
|
|
241
|
+
.awsui_text-content_6absk_14chd_94 small a:not(#\9):active, .awsui_text-content_6absk_14chd_94 small a:not(#\9):focus, .awsui_text-content_6absk_14chd_94 small a:not(#\9):hover {
|
|
243
242
|
text-decoration: underline;
|
|
244
243
|
/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
|
|
245
244
|
text-decoration-color: currentColor;
|
|
246
245
|
}
|
|
247
|
-
.awsui_text-
|
|
248
|
-
.awsui_text-
|
|
249
|
-
.awsui_text-
|
|
246
|
+
.awsui_text-content_6absk_14chd_94 code:not(#\9),
|
|
247
|
+
.awsui_text-content_6absk_14chd_94 pre:not(#\9),
|
|
248
|
+
.awsui_text-content_6absk_14chd_94 samp:not(#\9) {
|
|
250
249
|
font-family: var(--font-family-monospace-bftdwf, Monaco, Menlo, Consolas, "Courier Prime", Courier, "Courier New", monospace);
|
|
251
250
|
background: transparent;
|
|
252
251
|
}
|
|
253
|
-
.awsui_text-
|
|
252
|
+
.awsui_text-content_6absk_14chd_94 code:not(#\9) {
|
|
254
253
|
font-size: var(--font-body-s-size-8339kg, 12px);
|
|
255
254
|
line-height: var(--font-body-s-line-height-uztvf6, 16px);
|
|
256
255
|
letter-spacing: var(--font-body-s-letter-spacing-4obhmb, 0.005em);
|
|
257
256
|
}
|
|
258
|
-
.awsui_text-
|
|
257
|
+
.awsui_text-content_6absk_14chd_94 a:not(#\9) {
|
|
259
258
|
color: var(--color-text-link-default-latg1a, #0972d3);
|
|
260
|
-
font-weight:
|
|
261
|
-
letter-spacing:
|
|
262
|
-
|
|
263
|
-
text-decoration: var(--font-link-primary-decoration-cp88s8, underline);
|
|
259
|
+
font-weight: inherit;
|
|
260
|
+
letter-spacing: normal;
|
|
261
|
+
text-decoration: underline;
|
|
264
262
|
/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
|
|
265
|
-
text-decoration-color:
|
|
263
|
+
text-decoration-color: currentColor;
|
|
266
264
|
transition-property: color, -webkit-text-decoration;
|
|
267
265
|
transition-property: color, text-decoration;
|
|
268
266
|
transition-property: color, text-decoration, -webkit-text-decoration;
|
|
269
267
|
transition-duration: var(--motion-duration-refresh-only-medium-nf6485, 165ms);
|
|
270
268
|
}
|
|
271
269
|
@media (prefers-reduced-motion: reduce) {
|
|
272
|
-
.awsui_text-
|
|
270
|
+
.awsui_text-content_6absk_14chd_94 a:not(#\9) {
|
|
273
271
|
animation: none;
|
|
274
272
|
transition: none;
|
|
275
273
|
}
|
|
276
274
|
}
|
|
277
|
-
.awsui-motion-disabled .awsui_text-
|
|
275
|
+
.awsui-motion-disabled .awsui_text-content_6absk_14chd_94 a:not(#\9), .awsui-mode-entering .awsui_text-content_6absk_14chd_94 a:not(#\9) {
|
|
278
276
|
animation: none;
|
|
279
277
|
transition: none;
|
|
280
278
|
}
|
|
281
|
-
.awsui_text-
|
|
279
|
+
.awsui_text-content_6absk_14chd_94 a:not(#\9):hover {
|
|
282
280
|
cursor: pointer;
|
|
283
281
|
color: var(--color-text-link-hover-8j6p14, #033160);
|
|
284
282
|
}
|
|
285
|
-
.awsui_text-
|
|
283
|
+
.awsui_text-content_6absk_14chd_94 a:not(#\9):focus {
|
|
286
284
|
outline: none;
|
|
287
285
|
}
|
|
288
|
-
.awsui_text-
|
|
286
|
+
.awsui_text-content_6absk_14chd_94 a:not(#\9):active {
|
|
289
287
|
color: var(--color-text-link-hover-8j6p14, #033160);
|
|
290
288
|
}
|
|
291
|
-
.awsui_text-
|
|
289
|
+
.awsui_text-content_6absk_14chd_94 a:not(#\9):active, .awsui_text-content_6absk_14chd_94 a:not(#\9):focus, .awsui_text-content_6absk_14chd_94 a:not(#\9):hover {
|
|
292
290
|
text-decoration: underline;
|
|
293
291
|
/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
|
|
294
292
|
text-decoration-color: currentColor;
|
|
295
293
|
}
|
|
296
|
-
.awsui_text-
|
|
294
|
+
.awsui_text-content_6absk_14chd_94 a:not(#\9):focus {
|
|
297
295
|
outline: thin dotted;
|
|
298
296
|
outline: var(--border-link-focus-ring-outline-kkfop6, 0);
|
|
299
297
|
outline-offset: 2px;
|
|
@@ -301,31 +299,31 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
301
299
|
border-radius: var(--border-radius-control-default-focus-ring-u8zbsz, 4px);
|
|
302
300
|
box-shadow: 0 0 0 var(--border-link-focus-ring-shadow-spread-v8hkrl, 2px) var(--color-border-item-focused-b2ntyl, #0972d3);
|
|
303
301
|
}
|
|
304
|
-
.awsui_text-
|
|
305
|
-
.awsui_text-
|
|
302
|
+
.awsui_text-content_6absk_14chd_94 ul:not(#\9),
|
|
303
|
+
.awsui_text-content_6absk_14chd_94 ol:not(#\9) {
|
|
306
304
|
padding-left: var(--space-l-t419sm, 20px);
|
|
307
305
|
margin: var(--space-scaled-xs-26e2du, 8px) 0;
|
|
308
306
|
list-style-position: outside;
|
|
309
307
|
}
|
|
310
|
-
.awsui_text-
|
|
311
|
-
.awsui_text-
|
|
312
|
-
.awsui_text-
|
|
313
|
-
.awsui_text-
|
|
314
|
-
.awsui_text-
|
|
315
|
-
.awsui_text-
|
|
316
|
-
.awsui_text-
|
|
317
|
-
.awsui_text-
|
|
318
|
-
.awsui_text-
|
|
319
|
-
.awsui_text-
|
|
320
|
-
.awsui_text-
|
|
321
|
-
.awsui_text-
|
|
322
|
-
.awsui_text-
|
|
323
|
-
.awsui_text-
|
|
308
|
+
.awsui_text-content_6absk_14chd_94 ul + ul:not(#\9),
|
|
309
|
+
.awsui_text-content_6absk_14chd_94 ul + ol:not(#\9),
|
|
310
|
+
.awsui_text-content_6absk_14chd_94 ul > li + ul:not(#\9),
|
|
311
|
+
.awsui_text-content_6absk_14chd_94 ul > li + li:not(#\9),
|
|
312
|
+
.awsui_text-content_6absk_14chd_94 ul > li + ol:not(#\9),
|
|
313
|
+
.awsui_text-content_6absk_14chd_94 ul > li > ul:not(#\9),
|
|
314
|
+
.awsui_text-content_6absk_14chd_94 ul > li > ol:not(#\9),
|
|
315
|
+
.awsui_text-content_6absk_14chd_94 ol + ul:not(#\9),
|
|
316
|
+
.awsui_text-content_6absk_14chd_94 ol + ol:not(#\9),
|
|
317
|
+
.awsui_text-content_6absk_14chd_94 ol > li + ul:not(#\9),
|
|
318
|
+
.awsui_text-content_6absk_14chd_94 ol > li + li:not(#\9),
|
|
319
|
+
.awsui_text-content_6absk_14chd_94 ol > li + ol:not(#\9),
|
|
320
|
+
.awsui_text-content_6absk_14chd_94 ol > li > ul:not(#\9),
|
|
321
|
+
.awsui_text-content_6absk_14chd_94 ol > li > ol:not(#\9) {
|
|
324
322
|
padding-top: var(--space-scaled-xxs-7597g1, 4px);
|
|
325
323
|
}
|
|
326
|
-
.awsui_text-
|
|
327
|
-
.awsui_text-
|
|
328
|
-
.awsui_text-
|
|
329
|
-
.awsui_text-
|
|
324
|
+
.awsui_text-content_6absk_14chd_94 ul > li > ul:not(#\9),
|
|
325
|
+
.awsui_text-content_6absk_14chd_94 ul > li > ol:not(#\9),
|
|
326
|
+
.awsui_text-content_6absk_14chd_94 ol > li > ul:not(#\9),
|
|
327
|
+
.awsui_text-content_6absk_14chd_94 ol > li > ol:not(#\9) {
|
|
330
328
|
margin: 0;
|
|
331
329
|
}
|