@cloudscape-design/components-themeable 3.0.1200 → 3.0.1202
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/lib/internal/manifest.json +1 -1
- package/lib/internal/scss/cards/styles.scss +12 -68
- package/lib/internal/scss/{cards → internal/components/card}/motion.scss +4 -4
- package/lib/internal/scss/internal/components/card/styles.scss +112 -0
- package/lib/internal/scss/internal/generated/custom-css-properties/index.scss +1 -1
- package/lib/internal/scss/table/body-cell/styles.scss +8 -0
- package/lib/internal/scss/table/test-classes/styles.scss +8 -0
- package/lib/internal/template/cards/index.d.ts.map +1 -1
- package/lib/internal/template/cards/index.js +8 -10
- package/lib/internal/template/cards/index.js.map +1 -1
- package/lib/internal/template/cards/styles.css.js +38 -39
- package/lib/internal/template/cards/styles.scoped.css +43 -158
- package/lib/internal/template/cards/styles.selectors.js +38 -39
- package/lib/internal/template/internal/base-component/styles.scoped.css +1 -1
- package/lib/internal/template/internal/components/card/index.d.ts +3 -0
- package/lib/internal/template/internal/components/card/index.d.ts.map +1 -0
- package/lib/internal/template/internal/components/card/index.js +16 -0
- package/lib/internal/template/internal/components/card/index.js.map +1 -0
- package/lib/internal/template/internal/components/card/interfaces.d.ts +45 -0
- package/lib/internal/template/internal/components/card/interfaces.d.ts.map +1 -0
- package/lib/internal/template/internal/components/card/interfaces.js +2 -0
- package/lib/internal/template/internal/components/card/interfaces.js.map +1 -0
- package/lib/internal/template/internal/components/card/styles.css.js +16 -0
- package/lib/internal/template/internal/components/card/styles.scoped.css +316 -0
- package/lib/internal/template/internal/components/card/styles.selectors.js +17 -0
- package/lib/internal/template/internal/environment.js +2 -2
- package/lib/internal/template/internal/environment.json +2 -2
- package/lib/internal/template/table/body-cell/styles.css.js +48 -47
- package/lib/internal/template/table/body-cell/styles.scoped.css +380 -374
- package/lib/internal/template/table/body-cell/styles.selectors.js +48 -47
- package/lib/internal/template/table/body-cell/td-element.d.ts +1 -0
- package/lib/internal/template/table/body-cell/td-element.d.ts.map +1 -1
- package/lib/internal/template/table/body-cell/td-element.js +7 -2
- package/lib/internal/template/table/body-cell/td-element.js.map +1 -1
- package/lib/internal/template/table/expandable-rows/expandable-rows-utils.d.ts +13 -5
- package/lib/internal/template/table/expandable-rows/expandable-rows-utils.d.ts.map +1 -1
- package/lib/internal/template/table/expandable-rows/expandable-rows-utils.js +19 -8
- package/lib/internal/template/table/expandable-rows/expandable-rows-utils.js.map +1 -1
- package/lib/internal/template/table/index.d.ts.map +1 -1
- package/lib/internal/template/table/index.js +4 -1
- package/lib/internal/template/table/index.js.map +1 -1
- package/lib/internal/template/table/interfaces.d.ts +75 -17
- package/lib/internal/template/table/interfaces.d.ts.map +1 -1
- package/lib/internal/template/table/interfaces.js.map +1 -1
- package/lib/internal/template/table/internal.d.ts.map +1 -1
- package/lib/internal/template/table/internal.js +50 -23
- package/lib/internal/template/table/internal.js.map +1 -1
- package/lib/internal/template/table/progressive-loading/loader-cell.d.ts +1 -1
- package/lib/internal/template/table/progressive-loading/loader-cell.d.ts.map +1 -1
- package/lib/internal/template/table/progressive-loading/loader-cell.js +3 -2
- package/lib/internal/template/table/progressive-loading/loader-cell.js.map +1 -1
- package/lib/internal/template/table/progressive-loading/progressive-loading-utils.d.ts +3 -8
- package/lib/internal/template/table/progressive-loading/progressive-loading-utils.d.ts.map +1 -1
- package/lib/internal/template/table/progressive-loading/progressive-loading-utils.js +6 -5
- package/lib/internal/template/table/progressive-loading/progressive-loading-utils.js.map +1 -1
- package/lib/internal/template/table/selection/index.d.ts +1 -1
- package/lib/internal/template/table/selection/index.d.ts.map +1 -1
- package/lib/internal/template/table/selection/index.js.map +1 -1
- package/lib/internal/template/table/selection/interfaces.d.ts +7 -1
- package/lib/internal/template/table/selection/interfaces.d.ts.map +1 -1
- package/lib/internal/template/table/selection/interfaces.js.map +1 -1
- package/lib/internal/template/table/selection/selection-cell.d.ts +2 -2
- package/lib/internal/template/table/selection/selection-cell.d.ts.map +1 -1
- package/lib/internal/template/table/selection/selection-cell.js.map +1 -1
- package/lib/internal/template/table/selection/selection-control.d.ts +2 -2
- package/lib/internal/template/table/selection/selection-control.d.ts.map +1 -1
- package/lib/internal/template/table/selection/selection-control.js.map +1 -1
- package/lib/internal/template/table/selection/use-group-selection.d.ts +12 -0
- package/lib/internal/template/table/selection/use-group-selection.d.ts.map +1 -0
- package/lib/internal/template/table/selection/use-group-selection.js +103 -0
- package/lib/internal/template/table/selection/use-group-selection.js.map +1 -0
- package/lib/internal/template/table/selection/use-selection-focus-move.d.ts +2 -2
- package/lib/internal/template/table/selection/use-selection-focus-move.d.ts.map +1 -1
- package/lib/internal/template/table/selection/use-selection-focus-move.js.map +1 -1
- package/lib/internal/template/table/selection/use-selection.d.ts +4 -8
- package/lib/internal/template/table/selection/use-selection.d.ts.map +1 -1
- package/lib/internal/template/table/selection/use-selection.js +17 -6
- package/lib/internal/template/table/selection/use-selection.js.map +1 -1
- package/lib/internal/template/table/selection/utils.d.ts +1 -1
- package/lib/internal/template/table/selection/utils.d.ts.map +1 -1
- package/lib/internal/template/table/selection/utils.js.map +1 -1
- package/lib/internal/template/table/test-classes/styles.css.js +6 -0
- package/lib/internal/template/table/test-classes/styles.scoped.css +7 -0
- package/lib/internal/template/table/test-classes/styles.selectors.js +7 -0
- package/lib/internal/template/table/thead.d.ts +4 -4
- package/lib/internal/template/table/thead.d.ts.map +1 -1
- package/lib/internal/template/table/thead.js.map +1 -1
- package/lib/internal/template/table/use-table-focus-navigation.d.ts +2 -2
- package/lib/internal/template/table/use-table-focus-navigation.d.ts.map +1 -1
- package/lib/internal/template/table/use-table-focus-navigation.js.map +1 -1
- package/lib/internal/template/test-utils/dom/cards/index.d.ts +0 -5
- package/lib/internal/template/test-utils/dom/cards/index.js +0 -5
- package/lib/internal/template/test-utils/dom/cards/index.js.map +1 -1
- package/lib/internal/template/test-utils/dom/table/index.d.ts +7 -0
- package/lib/internal/template/test-utils/dom/table/index.js +11 -0
- package/lib/internal/template/test-utils/dom/table/index.js.map +1 -1
- package/lib/internal/template/test-utils/selectors/cards/index.d.ts +0 -5
- package/lib/internal/template/test-utils/selectors/cards/index.js +0 -5
- package/lib/internal/template/test-utils/selectors/cards/index.js.map +1 -1
- package/lib/internal/template/test-utils/selectors/table/index.d.ts +7 -0
- package/lib/internal/template/test-utils/selectors/table/index.js +11 -0
- package/lib/internal/template/test-utils/selectors/table/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { SelectionTree, useUniqueId } from '@cloudscape-design/component-toolkit/internal';
|
|
5
|
+
import { fireNonCancelableEvent } from '../../internal/events';
|
|
6
|
+
import { joinStrings } from '../../internal/utils/strings';
|
|
7
|
+
import { getTrackableValue } from '../utils';
|
|
8
|
+
export function useGroupSelection({ ariaLabels, items, rootItems, selectedItems = [], totalItemsCount, trackBy, expandableRows, selectionType, getLoadingStatus, setLastUserAction, }) {
|
|
9
|
+
// The name assigned to all controls to combine them in a single group.
|
|
10
|
+
const selectionControlName = useUniqueId();
|
|
11
|
+
const [shiftPressed, setShiftPressed] = useState(false);
|
|
12
|
+
const [lastClickedItem, setLastClickedItem] = useState(null);
|
|
13
|
+
if (selectionType !== 'group') {
|
|
14
|
+
return { isItemSelected: () => false };
|
|
15
|
+
}
|
|
16
|
+
const getParent = (item) => expandableRows.getExpandableItemProps(item).parent;
|
|
17
|
+
const getChildren = (item) => expandableRows.getExpandableItemProps(item).children;
|
|
18
|
+
const getSelectionStateProps = (item) => {
|
|
19
|
+
const { itemsCount, selectedItemsCount } = expandableRows.getExpandableItemProps(item);
|
|
20
|
+
return { itemsCount, selectedItemsCount };
|
|
21
|
+
};
|
|
22
|
+
const isComplete = (item) => !getLoadingStatus || getLoadingStatus(item) === 'finished';
|
|
23
|
+
const treeProps = { rootItems, trackBy, getChildren, isComplete };
|
|
24
|
+
const selectionTree = new SelectionTree(rootItems, treeProps, expandableRows.groupSelection);
|
|
25
|
+
const onChange = (groupSelection) => {
|
|
26
|
+
fireNonCancelableEvent(expandableRows.onGroupSelectionChange, { groupSelection });
|
|
27
|
+
setLastUserAction === null || setLastUserAction === void 0 ? void 0 : setLastUserAction('selection');
|
|
28
|
+
};
|
|
29
|
+
// Shift-selection helpers.
|
|
30
|
+
const itemIndexesMap = new Map();
|
|
31
|
+
items.forEach((item, i) => itemIndexesMap.set(getTrackableValue(trackBy, item), i));
|
|
32
|
+
const getShiftSelectedItems = (item) => {
|
|
33
|
+
const lastClickedItemIndex = lastClickedItem
|
|
34
|
+
? itemIndexesMap.get(getTrackableValue(trackBy, lastClickedItem))
|
|
35
|
+
: undefined;
|
|
36
|
+
// We use lastClickedItemIndex to determine if filtering/sorting/pagination
|
|
37
|
+
// made previously selected item invisible, therefore we reset state for shift-select.
|
|
38
|
+
if (lastClickedItemIndex !== undefined) {
|
|
39
|
+
const currentItemIndex = itemIndexesMap.get(getTrackableValue(trackBy, item));
|
|
40
|
+
const start = Math.min(currentItemIndex, lastClickedItemIndex);
|
|
41
|
+
const end = Math.max(currentItemIndex, lastClickedItemIndex);
|
|
42
|
+
const requestedItems = items.slice(start, end + 1);
|
|
43
|
+
return lastClickedItemIndex < currentItemIndex ? requestedItems : requestedItems.reverse();
|
|
44
|
+
}
|
|
45
|
+
return [item];
|
|
46
|
+
};
|
|
47
|
+
const handleToggleAll = () => onChange(selectionTree.toggleAll().getState());
|
|
48
|
+
const handleToggleItem = (item) => {
|
|
49
|
+
setLastClickedItem(item);
|
|
50
|
+
const requestedItems = shiftPressed ? getShiftSelectedItems(item) : [item];
|
|
51
|
+
const requestedItemParents = requestedItems.reduce((set, item) => set.add(getParent(item)), new Set());
|
|
52
|
+
// Shift-selection is only allowed on items with the same parent.
|
|
53
|
+
if (requestedItemParents.size === 1) {
|
|
54
|
+
onChange(selectionTree.toggleSome(requestedItems).getState());
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const createLoaderToggleHandle = (item) => () => onChange(!item ? selectionTree.invertAll().getState() : selectionTree.invertOne(item).getState());
|
|
58
|
+
return {
|
|
59
|
+
isItemSelected: selectionTree.isItemSelected,
|
|
60
|
+
getSelectAllProps: () => {
|
|
61
|
+
var _a, _b, _c;
|
|
62
|
+
return ({
|
|
63
|
+
name: selectionControlName,
|
|
64
|
+
selectionType: 'multi',
|
|
65
|
+
disabled: false,
|
|
66
|
+
checked: selectionTree.isAllItemsSelected(),
|
|
67
|
+
indeterminate: selectionTree.isAllItemsIndeterminate(),
|
|
68
|
+
onChange: handleToggleAll,
|
|
69
|
+
ariaLabel: joinStrings(ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.selectionGroupLabel, (_a = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.allItemsSelectionLabel) === null || _a === void 0 ? void 0 : _a.call(ariaLabels, {
|
|
70
|
+
selectedItems,
|
|
71
|
+
itemsCount: (_b = expandableRows.totalItemsCount) !== null && _b !== void 0 ? _b : totalItemsCount,
|
|
72
|
+
selectedItemsCount: (_c = expandableRows.totalSelectedItemsCount) !== null && _c !== void 0 ? _c : selectedItems.length,
|
|
73
|
+
})),
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
getItemSelectionProps: item => {
|
|
77
|
+
var _a;
|
|
78
|
+
return ({
|
|
79
|
+
name: selectionControlName,
|
|
80
|
+
selectionType: 'multi',
|
|
81
|
+
disabled: false,
|
|
82
|
+
checked: selectionTree.isItemSelected(item),
|
|
83
|
+
indeterminate: selectionTree.isItemIndeterminate(item),
|
|
84
|
+
onChange: () => handleToggleItem(item),
|
|
85
|
+
onShiftToggle: value => setShiftPressed(value),
|
|
86
|
+
ariaLabel: joinStrings(ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.selectionGroupLabel, (_a = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.itemSelectionLabel) === null || _a === void 0 ? void 0 : _a.call(ariaLabels, { selectedItems, ...getSelectionStateProps(item) }, item)),
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
getLoaderSelectionProps: item => {
|
|
90
|
+
var _a;
|
|
91
|
+
return ({
|
|
92
|
+
name: selectionControlName,
|
|
93
|
+
selectionType: 'multi',
|
|
94
|
+
disabled: false,
|
|
95
|
+
checked: item ? selectionTree.isItemSelected(item) : selectionTree.getState().inverted,
|
|
96
|
+
indeterminate: false,
|
|
97
|
+
onChange: createLoaderToggleHandle(item),
|
|
98
|
+
ariaLabel: joinStrings(ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.selectionGroupLabel, (_a = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.itemLoaderSelectionLabel) === null || _a === void 0 ? void 0 : _a.call(ariaLabels, { selectedItems }, item)),
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=use-group-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-group-selection.js","sourceRoot":"","sources":["../../../../src/table/selection/use-group-selection.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\nimport { useState } from 'react';\n\nimport { SelectionTree, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\n\nimport { fireNonCancelableEvent } from '../../internal/events';\nimport { joinStrings } from '../../internal/utils/strings';\nimport { InternalExpandableRowsProps } from '../expandable-rows/expandable-rows-utils';\nimport { InternalSelectionType, TableProps } from '../interfaces';\nimport { getTrackableValue } from '../utils';\nimport { SelectionProps } from './interfaces';\n\ntype SelectionOptions<T> = Pick<\n TableProps<T>,\n 'ariaLabels' | 'items' | 'trackBy' | 'getLoadingStatus' | 'selectedItems' | 'totalItemsCount'\n> & {\n rootItems: readonly T[];\n selectionType?: InternalSelectionType;\n expandableRows: InternalExpandableRowsProps<T>;\n setLastUserAction?: (name: string) => void;\n};\n\nexport function useGroupSelection<T>({\n ariaLabels,\n items,\n rootItems,\n selectedItems = [],\n totalItemsCount,\n trackBy,\n expandableRows,\n selectionType,\n getLoadingStatus,\n setLastUserAction,\n}: SelectionOptions<T>): SelectionProps<T> {\n // The name assigned to all controls to combine them in a single group.\n const selectionControlName = useUniqueId();\n const [shiftPressed, setShiftPressed] = useState(false);\n const [lastClickedItem, setLastClickedItem] = useState<null | T>(null);\n\n if (selectionType !== 'group') {\n return { isItemSelected: () => false };\n }\n\n const getParent = (item: T) => expandableRows.getExpandableItemProps(item).parent;\n const getChildren = (item: T) => expandableRows.getExpandableItemProps(item).children;\n const getSelectionStateProps = (item: T) => {\n const { itemsCount, selectedItemsCount } = expandableRows.getExpandableItemProps(item);\n return { itemsCount, selectedItemsCount };\n };\n const isComplete = (item: null | T) => !getLoadingStatus || getLoadingStatus(item) === 'finished';\n const treeProps = { rootItems, trackBy, getChildren, isComplete };\n const selectionTree = new SelectionTree(rootItems, treeProps, expandableRows.groupSelection);\n const onChange = (groupSelection: TableProps.GroupSelectionState<T>) => {\n fireNonCancelableEvent(expandableRows.onGroupSelectionChange, { groupSelection });\n setLastUserAction?.('selection');\n };\n\n // Shift-selection helpers.\n const itemIndexesMap = new Map<T, number>();\n items.forEach((item, i) => itemIndexesMap.set(getTrackableValue(trackBy, item), i));\n const getShiftSelectedItems = (item: T): T[] => {\n const lastClickedItemIndex = lastClickedItem\n ? itemIndexesMap.get(getTrackableValue(trackBy, lastClickedItem))\n : undefined;\n // We use lastClickedItemIndex to determine if filtering/sorting/pagination\n // made previously selected item invisible, therefore we reset state for shift-select.\n if (lastClickedItemIndex !== undefined) {\n const currentItemIndex = itemIndexesMap.get(getTrackableValue(trackBy, item))!;\n const start = Math.min(currentItemIndex, lastClickedItemIndex);\n const end = Math.max(currentItemIndex, lastClickedItemIndex);\n const requestedItems = items.slice(start, end + 1);\n return lastClickedItemIndex < currentItemIndex ? requestedItems : requestedItems.reverse();\n }\n return [item];\n };\n\n const handleToggleAll = () => onChange(selectionTree.toggleAll().getState());\n\n const handleToggleItem = (item: T) => {\n setLastClickedItem(item);\n const requestedItems = shiftPressed ? getShiftSelectedItems(item) : [item];\n const requestedItemParents = requestedItems.reduce((set, item) => set.add(getParent(item)), new Set<null | T>());\n // Shift-selection is only allowed on items with the same parent.\n if (requestedItemParents.size === 1) {\n onChange(selectionTree.toggleSome(requestedItems).getState());\n }\n };\n\n const createLoaderToggleHandle = (item: null | T) => () =>\n onChange(!item ? selectionTree.invertAll().getState() : selectionTree.invertOne(item).getState());\n\n return {\n isItemSelected: selectionTree.isItemSelected,\n getSelectAllProps: () => ({\n name: selectionControlName,\n selectionType: 'multi',\n disabled: false,\n checked: selectionTree.isAllItemsSelected(),\n indeterminate: selectionTree.isAllItemsIndeterminate(),\n onChange: handleToggleAll,\n ariaLabel: joinStrings(\n ariaLabels?.selectionGroupLabel,\n ariaLabels?.allItemsSelectionLabel?.({\n selectedItems,\n itemsCount: expandableRows.totalItemsCount ?? totalItemsCount,\n selectedItemsCount: expandableRows.totalSelectedItemsCount ?? selectedItems.length,\n })\n ),\n }),\n getItemSelectionProps: item => ({\n name: selectionControlName,\n selectionType: 'multi',\n disabled: false,\n checked: selectionTree.isItemSelected(item),\n indeterminate: selectionTree.isItemIndeterminate(item),\n onChange: () => handleToggleItem(item),\n onShiftToggle: value => setShiftPressed(value),\n ariaLabel: joinStrings(\n ariaLabels?.selectionGroupLabel,\n ariaLabels?.itemSelectionLabel?.({ selectedItems, ...getSelectionStateProps(item) }, item)\n ),\n }),\n getLoaderSelectionProps: item => ({\n name: selectionControlName,\n selectionType: 'multi',\n disabled: false,\n checked: item ? selectionTree.isItemSelected(item) : selectionTree.getState().inverted,\n indeterminate: false,\n onChange: createLoaderToggleHandle(item),\n ariaLabel: joinStrings(\n ariaLabels?.selectionGroupLabel,\n ariaLabels?.itemLoaderSelectionLabel?.({ selectedItems }, item)\n ),\n }),\n };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { KeyboardEvent } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export declare function useSelectionFocusMove(selectionType:
|
|
2
|
+
import { InternalSelectionType } from '../interfaces';
|
|
3
|
+
export declare function useSelectionFocusMove(selectionType: undefined | InternalSelectionType, totalItems: number): {
|
|
4
4
|
moveFocusDown?: undefined;
|
|
5
5
|
moveFocusUp?: undefined;
|
|
6
6
|
moveFocus?: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection-focus-move.d.ts","sourceRoot":"","sources":["../../../../src/table/selection/use-selection-focus-move.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAItC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"use-selection-focus-move.d.ts","sourceRoot":"","sources":["../../../../src/table/selection/use-selection-focus-move.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAItC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAOtD,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,GAAG,qBAAqB,EAAE,UAAU,EAAE,MAAM;;;;;2BAkBvF,aAAa;yBAAb,aAAa;+BAdI,WAAW,aAAa,MAAM,aAAa,CAAC,CAAC,GAAG,CAAC;EA0BpF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection-focus-move.js","sourceRoot":"","sources":["../../../../src/table/selection/use-selection-focus-move.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,eAAe,MAAM,iBAAiB,CAAC;AAE9C,4DAA4D;AAC5D,gDAAgD;AAChD,MAAM,UAAU,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"use-selection-focus-move.js","sourceRoot":"","sources":["../../../../src/table/selection/use-selection-focus-move.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,eAAe,MAAM,iBAAiB,CAAC;AAE9C,4DAA4D;AAC5D,gDAAgD;AAChD,MAAM,UAAU,qBAAqB,CAAC,aAAgD,EAAE,UAAkB;IACxG,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,SAAS,SAAS,CAAC,aAA0B,EAAE,SAAiB,EAAE,SAAiB;QACjF,IAAI,KAAK,GAAG,SAAS,CAAC;QACtB,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAEvD,OAAO,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,UAAU,EAAE,CAAC;YACzC,KAAK,IAAI,SAAS,CAAC;YACnB,MAAM,OAAO,GAAG,2BAA2B,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAClE,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,GAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QACtE,OAAO,CAAC,KAAoB,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B,CAAC;YAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,MAAM,CAAE,CAAC;YACrF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3F,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO;QACL,aAAa;QACb,WAAW;QACX,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,aAA0B,EAAE,KAAa;IAC5E,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,6BAA6B;QAC7B,OAAO,aAAa,CAAC,aAAa,CAChC,SAAS,cAAc,YAAY,eAAe,CAAC,IAAI,QAAQ,CAChE,CAAC;IACJ,CAAC;IACD,OAAO,aAAa,CAAC,gBAAgB,CACnC,SAAS,cAAc,aAAa,eAAe,CAAC,IAAI,QAAQ,CACjE,CAAC,KAAK,CAAC,CAAC;AACX,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAoB;IAC7C,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,MAAM,CAAE,CAAC;AAC9E,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { KeyboardEvent } from 'react';\n\nimport { findUpUntil } from '@cloudscape-design/component-toolkit/dom';\n\nimport { InternalSelectionType } from '../interfaces';\nimport { SELECTION_ITEM } from './utils';\n\nimport selectionStyles from './styles.css.js';\n\n// The hooks moves focus between multi-selection checkboxes.\n// Not eligible for tables with grid navigation.\nexport function useSelectionFocusMove(selectionType: undefined | InternalSelectionType, totalItems: number) {\n if (selectionType !== 'multi') {\n return {};\n }\n function moveFocus(sourceElement: HTMLElement, fromIndex: number, direction: -1 | 1) {\n let index = fromIndex;\n const rootContainer = findRootContainer(sourceElement);\n\n while (index >= -1 && index < totalItems) {\n index += direction;\n const control = findSelectionControlByIndex(rootContainer, index);\n if (control && !control.disabled) {\n control.focus();\n break;\n }\n }\n }\n const [moveFocusDown, moveFocusUp] = ([1, -1] as const).map(direction => {\n return (event: KeyboardEvent) => {\n const target = event.currentTarget as HTMLElement;\n const itemNode = findUpUntil(target, node => node.dataset.selectionItem === 'item')!;\n const fromIndex = Array.prototype.indexOf.call(itemNode.parentElement!.children, itemNode);\n moveFocus(target, fromIndex, direction);\n };\n });\n return {\n moveFocusDown,\n moveFocusUp,\n moveFocus,\n };\n}\n\nfunction findSelectionControlByIndex(rootContainer: HTMLElement, index: number) {\n if (index === -1) {\n // find \"select all\" checkbox\n return rootContainer.querySelector<HTMLInputElement>(\n `[data-${SELECTION_ITEM}=\"all\"] .${selectionStyles.root} input`\n );\n }\n return rootContainer.querySelectorAll<HTMLInputElement>(\n `[data-${SELECTION_ITEM}=\"item\"] .${selectionStyles.root} input`\n )[index];\n}\n\nfunction findRootContainer(element: HTMLElement) {\n return findUpUntil(element, node => node.dataset.selectionRoot === 'true')!;\n}\n"]}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import { TableProps } from '../interfaces';
|
|
1
|
+
import { InternalSelectionType, TableProps } from '../interfaces';
|
|
2
2
|
import { SelectionProps } from './interfaces';
|
|
3
|
-
type SelectionOptions<T> = Pick<TableProps<T>, 'ariaLabels' | 'isItemDisabled' | 'items' | 'loading' | 'onSelectionChange' | 'selectedItems' | '
|
|
4
|
-
setLastUserAction?: (name: string) => void;
|
|
5
|
-
};
|
|
6
|
-
export declare function useSelection<T>(options: SelectionOptions<T>): {
|
|
7
|
-
isItemSelected: (item: T) => boolean;
|
|
8
|
-
getSelectAllProps?: () => SelectionProps;
|
|
9
|
-
getItemSelectionProps?: (item: T) => SelectionProps;
|
|
3
|
+
type SelectionOptions<T> = Pick<TableProps<T>, 'ariaLabels' | 'isItemDisabled' | 'items' | 'loading' | 'onSelectionChange' | 'selectedItems' | 'trackBy' | 'totalItemsCount'> & {
|
|
10
4
|
setLastUserAction?: (name: string) => void;
|
|
5
|
+
selectionType?: InternalSelectionType;
|
|
11
6
|
};
|
|
7
|
+
export declare function useSelection<T>(options: SelectionOptions<T>): SelectionProps<T>;
|
|
12
8
|
export {};
|
|
13
9
|
//# sourceMappingURL=use-selection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection.d.ts","sourceRoot":"","sources":["../../../../src/table/selection/use-selection.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"use-selection.d.ts","sourceRoot":"","sources":["../../../../src/table/selection/use-selection.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,KAAK,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAC7B,UAAU,CAAC,CAAC,CAAC,EACX,YAAY,GACZ,gBAAgB,GAChB,OAAO,GACP,SAAS,GACT,mBAAmB,GACnB,eAAe,GACf,SAAS,GACT,iBAAiB,CACpB,GAAG;IAAE,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAE1F,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAW/E"}
|
|
@@ -9,7 +9,14 @@ import { ItemSet } from './utils';
|
|
|
9
9
|
export function useSelection(options) {
|
|
10
10
|
const singleSelectionProps = useSingleSelection(options);
|
|
11
11
|
const multiSelectionProps = useMultiSelection(options);
|
|
12
|
-
|
|
12
|
+
switch (options.selectionType) {
|
|
13
|
+
case 'single':
|
|
14
|
+
return singleSelectionProps;
|
|
15
|
+
case 'multi':
|
|
16
|
+
return multiSelectionProps;
|
|
17
|
+
default:
|
|
18
|
+
return { isItemSelected: () => false };
|
|
19
|
+
}
|
|
13
20
|
}
|
|
14
21
|
function useSingleSelection({ ariaLabels, isItemDisabled = () => false, onSelectionChange, selectedItems = [], selectionType, trackBy, setLastUserAction, }) {
|
|
15
22
|
// The name assigned to all controls to combine them in a single group.
|
|
@@ -28,7 +35,7 @@ function useSingleSelection({ ariaLabels, isItemDisabled = () => false, onSelect
|
|
|
28
35
|
};
|
|
29
36
|
return {
|
|
30
37
|
isItemSelected,
|
|
31
|
-
getItemSelectionProps:
|
|
38
|
+
getItemSelectionProps: item => {
|
|
32
39
|
var _a;
|
|
33
40
|
return ({
|
|
34
41
|
name: selectionControlName,
|
|
@@ -41,7 +48,7 @@ function useSingleSelection({ ariaLabels, isItemDisabled = () => false, onSelect
|
|
|
41
48
|
},
|
|
42
49
|
};
|
|
43
50
|
}
|
|
44
|
-
function useMultiSelection({ ariaLabels, isItemDisabled = () => false, items, loading, onSelectionChange, selectedItems = [], selectionType, trackBy, setLastUserAction, }) {
|
|
51
|
+
function useMultiSelection({ ariaLabels, isItemDisabled = () => false, items, loading, onSelectionChange, selectedItems = [], selectionType, trackBy, setLastUserAction, totalItemsCount, }) {
|
|
45
52
|
// The name assigned to all controls to combine them in a single group.
|
|
46
53
|
const selectionControlName = useUniqueId();
|
|
47
54
|
const [shiftPressed, setShiftPressed] = useState(false);
|
|
@@ -125,11 +132,15 @@ function useMultiSelection({ ariaLabels, isItemDisabled = () => false, items, lo
|
|
|
125
132
|
checked: allItemsCheckboxSelected,
|
|
126
133
|
indeterminate: allItemsCheckboxIndeterminate,
|
|
127
134
|
onChange: handleToggleAll,
|
|
128
|
-
ariaLabel: joinStrings(ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.selectionGroupLabel, (_a = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.allItemsSelectionLabel) === null || _a === void 0 ? void 0 : _a.call(ariaLabels, {
|
|
135
|
+
ariaLabel: joinStrings(ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.selectionGroupLabel, (_a = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.allItemsSelectionLabel) === null || _a === void 0 ? void 0 : _a.call(ariaLabels, {
|
|
136
|
+
selectedItems,
|
|
137
|
+
itemsCount: totalItemsCount,
|
|
138
|
+
selectedItemsCount: selectedItems.length,
|
|
139
|
+
})),
|
|
129
140
|
selectionGroupLabel: ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.selectionGroupLabel,
|
|
130
141
|
});
|
|
131
142
|
},
|
|
132
|
-
getItemSelectionProps:
|
|
143
|
+
getItemSelectionProps: item => {
|
|
133
144
|
var _a;
|
|
134
145
|
return ({
|
|
135
146
|
name: selectionControlName,
|
|
@@ -137,7 +148,7 @@ function useMultiSelection({ ariaLabels, isItemDisabled = () => false, items, lo
|
|
|
137
148
|
disabled: isItemDisabled(item),
|
|
138
149
|
checked: isItemSelected(item),
|
|
139
150
|
onChange: () => handleToggleItem(item),
|
|
140
|
-
onShiftToggle:
|
|
151
|
+
onShiftToggle: value => setShiftPressed(value),
|
|
141
152
|
ariaLabel: joinStrings(ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.selectionGroupLabel, (_a = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.itemSelectionLabel) === null || _a === void 0 ? void 0 : _a.call(ariaLabels, { selectedItems }, item)),
|
|
142
153
|
});
|
|
143
154
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection.js","sourceRoot":"","sources":["../../../../src/table/selection/use-selection.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAclC,MAAM,UAAU,YAAY,CAAI,OAA4B;IAM1D,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACzF,CAAC;AAED,SAAS,kBAAkB,CAAI,EAC7B,UAAU,EACV,cAAc,GAAG,GAAG,EAAE,CAAC,KAAK,EAC5B,iBAAiB,EACjB,aAAa,GAAG,EAAE,EAClB,aAAa,EACb,OAAO,EACP,iBAAiB,GACG;IACpB,uEAAuE;IACvE,MAAM,oBAAoB,GAAG,WAAW,EAAE,CAAC;IAE3C,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEzD,MAAM,gBAAgB,GAAG,CAAC,IAAO,EAAE,EAAE;QACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,sBAAsB,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,WAAW,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,cAAc;QACd,qBAAqB,EAAE,CAAC,IAAO,EAAkB,EAAE;;YAAC,OAAA,CAAC;gBACnD,IAAI,EAAE,oBAAoB;gBAC1B,aAAa,EAAE,QAAQ;gBACvB,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC;gBAC9B,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;gBAC7B,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACtC,SAAS,EAAE,WAAW,CACpB,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,mBAAmB,EAC/B,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,kBAAkB,2DAAG,EAAE,aAAa,EAAE,EAAE,IAAI,CAAC,CAC1D;aACF,CAAC,CAAA;SAAA;KACH,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAI,EAC5B,UAAU,EACV,cAAc,GAAG,GAAG,EAAE,CAAC,KAAK,EAC5B,KAAK,EACL,OAAO,EACP,iBAAiB,EACjB,aAAa,GAAG,EAAE,EAClB,aAAa,EACb,OAAO,EACP,iBAAiB,GACG;IACpB,uEAAuE;IACvE,MAAM,oBAAoB,GAAG,WAAW,EAAE,CAAC;IAC3C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAW,IAAI,CAAC,CAAC;IAEvE,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEzD,kDAAkD;IAClD,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAC5B,IAAI,uBAAuB,GAAG,IAAI,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,gBAAgB,GAAG,gBAAgB,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QAC5D,uBAAuB,GAAG,uBAAuB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,wBAAwB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,uBAAuB,CAAC;IACrF,MAAM,6BAA6B,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC;IAE3F,2BAA2B;IAC3B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAa,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,qBAAqB,GAAG,CAAC,IAAO,EAAO,EAAE;QAC7C,MAAM,oBAAoB,GAAG,eAAe;YAC1C,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YACjE,CAAC,CAAC,SAAS,CAAC;QACd,2EAA2E;QAC3E,sFAAsF;QACtF,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,gBAAgB,GAAG,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAE,CAAC;YAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;YAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,0DAA0D;IAC1D,MAAM,WAAW,GAAG,CAAC,cAA4B,EAAE,EAAE;QACnD,MAAM,gBAAgB,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;QAC5C,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC/B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;IAEF,2CAA2C;IAC3C,MAAM,aAAa,GAAG,CAAC,cAA4B,EAAE,EAAE;QACrD,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GAAa,EAAE,CAAC;QACtC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YACnC,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC3D,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpD,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7F,sBAAsB,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC/E,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,IAAO,EAAE,EAAE;QACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3E,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YACzG,sBAAsB,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAC7D,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,WAAW,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,cAAc;QACd,iBAAiB,EAAE,GAAmB,EAAE;;YAAC,OAAA,CAAC;gBACxC,IAAI,EAAE,oBAAoB;gBAC1B,aAAa,EAAE,OAAO;gBACtB,QAAQ,EAAE,gBAAgB,IAAI,CAAC,CAAC,OAAO;gBACvC,OAAO,EAAE,wBAAwB;gBACjC,aAAa,EAAE,6BAA6B;gBAC5C,QAAQ,EAAE,eAAe;gBACzB,SAAS,EAAE,WAAW,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,mBAAmB,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,sBAAsB,2DAAG,EAAE,aAAa,EAAE,CAAC,CAAC;gBAChH,mBAAmB,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,mBAAmB;aACrD,CAAC,CAAA;SAAA;QACF,qBAAqB,EAAE,CAAC,IAAO,EAAkB,EAAE;;YAAC,OAAA,CAAC;gBACnD,IAAI,EAAE,oBAAoB;gBAC1B,aAAa,EAAE,OAAO;gBACtB,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC;gBAC9B,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;gBAC7B,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACtC,aAAa,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;gBACzD,SAAS,EAAE,WAAW,CACpB,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,mBAAmB,EAC/B,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,kBAAkB,2DAAG,EAAE,aAAa,EAAE,EAAE,IAAI,CAAC,CAC1D;aACF,CAAC,CAAA;SAAA;KACH,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { useState } from 'react';\n\nimport { useUniqueId } from '@cloudscape-design/component-toolkit/internal';\n\nimport { fireNonCancelableEvent } from '../../internal/events';\nimport { joinStrings } from '../../internal/utils/strings';\nimport { TableProps } from '../interfaces';\nimport { getTrackableValue } from '../utils';\nimport { SelectionProps } from './interfaces';\nimport { ItemSet } from './utils';\n\ntype SelectionOptions<T> = Pick<\n TableProps<T>,\n | 'ariaLabels'\n | 'isItemDisabled'\n | 'items'\n | 'loading'\n | 'onSelectionChange'\n | 'selectedItems'\n | 'selectionType'\n | 'trackBy'\n> & { setLastUserAction?: (name: string) => void };\n\nexport function useSelection<T>(options: SelectionOptions<T>): {\n isItemSelected: (item: T) => boolean;\n getSelectAllProps?: () => SelectionProps;\n getItemSelectionProps?: (item: T) => SelectionProps;\n setLastUserAction?: (name: string) => void;\n} {\n const singleSelectionProps = useSingleSelection(options);\n const multiSelectionProps = useMultiSelection(options);\n return options.selectionType === 'single' ? singleSelectionProps : multiSelectionProps;\n}\n\nfunction useSingleSelection<T>({\n ariaLabels,\n isItemDisabled = () => false,\n onSelectionChange,\n selectedItems = [],\n selectionType,\n trackBy,\n setLastUserAction,\n}: SelectionOptions<T>) {\n // The name assigned to all controls to combine them in a single group.\n const selectionControlName = useUniqueId();\n\n if (selectionType !== 'single') {\n return { isItemSelected: () => false };\n }\n\n // Selection state for individual items.\n const selectedSet = new ItemSet(trackBy, selectedItems.slice(0, 1));\n const isItemSelected = selectedSet.has.bind(selectedSet);\n\n const handleToggleItem = (item: T) => {\n if (!isItemDisabled(item) && !isItemSelected(item)) {\n fireNonCancelableEvent(onSelectionChange, { selectedItems: [item] });\n setLastUserAction?.('selection');\n }\n };\n\n return {\n isItemSelected,\n getItemSelectionProps: (item: T): SelectionProps => ({\n name: selectionControlName,\n selectionType: 'single',\n disabled: isItemDisabled(item),\n checked: isItemSelected(item),\n onChange: () => handleToggleItem(item),\n ariaLabel: joinStrings(\n ariaLabels?.selectionGroupLabel,\n ariaLabels?.itemSelectionLabel?.({ selectedItems }, item)\n ),\n }),\n };\n}\n\nfunction useMultiSelection<T>({\n ariaLabels,\n isItemDisabled = () => false,\n items,\n loading,\n onSelectionChange,\n selectedItems = [],\n selectionType,\n trackBy,\n setLastUserAction,\n}: SelectionOptions<T>) {\n // The name assigned to all controls to combine them in a single group.\n const selectionControlName = useUniqueId();\n const [shiftPressed, setShiftPressed] = useState(false);\n const [lastClickedItem, setLastClickedItem] = useState<null | T>(null);\n\n if (selectionType !== 'multi') {\n return { isItemSelected: () => false };\n }\n\n // Selection state for individual items.\n const selectedSet = new ItemSet(trackBy, selectedItems);\n const isItemSelected = selectedSet.has.bind(selectedSet);\n\n // Derived selection state for all-items checkbox.\n let allItemsDisabled = true;\n let allEnabledItemsSelected = true;\n for (const item of items) {\n allItemsDisabled = allItemsDisabled && isItemDisabled(item);\n allEnabledItemsSelected = allEnabledItemsSelected && (isItemSelected(item) || isItemDisabled(item));\n }\n const allItemsCheckboxSelected = selectedItems.length > 0 && allEnabledItemsSelected;\n const allItemsCheckboxIndeterminate = selectedItems.length > 0 && !allEnabledItemsSelected;\n\n // Shift-selection helpers.\n const itemIndexesMap = new Map<T, number>();\n items.forEach((item, i) => itemIndexesMap.set(getTrackableValue(trackBy, item), i));\n const getShiftSelectedItems = (item: T): T[] => {\n const lastClickedItemIndex = lastClickedItem\n ? itemIndexesMap.get(getTrackableValue(trackBy, lastClickedItem))\n : undefined;\n // We use lastClickedItemIndex to determine if filtering/sorting/pagination\n // made previously selected item invisible, therefore we reset state for shift-select.\n if (lastClickedItemIndex !== undefined) {\n const currentItemIndex = itemIndexesMap.get(getTrackableValue(trackBy, item))!;\n const start = Math.min(currentItemIndex, lastClickedItemIndex);\n const end = Math.max(currentItemIndex, lastClickedItemIndex);\n return items.slice(start, end + 1);\n }\n return [item];\n };\n\n // Select items that are not already selected or disabled.\n const selectItems = (requestedItems: readonly T[]) => {\n const newSelectedItems = [...selectedItems];\n requestedItems.forEach(newItem => {\n if (!isItemSelected(newItem) && !isItemDisabled(newItem)) {\n newSelectedItems.push(newItem);\n }\n });\n return newSelectedItems;\n };\n\n // Unselect items unless they are disabled.\n const deselectItems = (requestedItems: readonly T[]) => {\n const requestedItemsSet = new ItemSet(trackBy, requestedItems);\n const newSelectedItems: Array<T> = [];\n selectedItems.forEach(selectedItem => {\n const shouldUnselect = requestedItemsSet.has(selectedItem);\n if (!shouldUnselect || isItemDisabled(selectedItem)) {\n newSelectedItems.push(selectedItem);\n }\n });\n return newSelectedItems;\n };\n\n const handleToggleAll = () => {\n const newSelectedItems = allEnabledItemsSelected ? deselectItems(items) : selectItems(items);\n fireNonCancelableEvent(onSelectionChange, { selectedItems: newSelectedItems });\n setLastUserAction?.('selection');\n };\n\n const handleToggleItem = (item: T) => {\n if (!isItemDisabled(item)) {\n const requestedItems = shiftPressed ? getShiftSelectedItems(item) : [item];\n const selectedItems = isItemSelected(item) ? deselectItems(requestedItems) : selectItems(requestedItems);\n fireNonCancelableEvent(onSelectionChange, { selectedItems });\n setLastClickedItem(item);\n setLastUserAction?.('selection');\n }\n };\n\n return {\n isItemSelected,\n getSelectAllProps: (): SelectionProps => ({\n name: selectionControlName,\n selectionType: 'multi',\n disabled: allItemsDisabled || !!loading,\n checked: allItemsCheckboxSelected,\n indeterminate: allItemsCheckboxIndeterminate,\n onChange: handleToggleAll,\n ariaLabel: joinStrings(ariaLabels?.selectionGroupLabel, ariaLabels?.allItemsSelectionLabel?.({ selectedItems })),\n selectionGroupLabel: ariaLabels?.selectionGroupLabel,\n }),\n getItemSelectionProps: (item: T): SelectionProps => ({\n name: selectionControlName,\n selectionType: 'multi',\n disabled: isItemDisabled(item),\n checked: isItemSelected(item),\n onChange: () => handleToggleItem(item),\n onShiftToggle: (value: boolean) => setShiftPressed(value),\n ariaLabel: joinStrings(\n ariaLabels?.selectionGroupLabel,\n ariaLabels?.itemSelectionLabel?.({ selectedItems }, item)\n ),\n }),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"use-selection.js","sourceRoot":"","sources":["../../../../src/table/selection/use-selection.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\nimport { useState } from 'react';\n\nimport { useUniqueId } from '@cloudscape-design/component-toolkit/internal';\n\nimport { fireNonCancelableEvent } from '../../internal/events';\nimport { joinStrings } from '../../internal/utils/strings';\nimport { InternalSelectionType, TableProps } from '../interfaces';\nimport { getTrackableValue } from '../utils';\nimport { SelectionProps } from './interfaces';\nimport { ItemSet } from './utils';\n\ntype SelectionOptions<T> = Pick<\n TableProps<T>,\n | 'ariaLabels'\n | 'isItemDisabled'\n | 'items'\n | 'loading'\n | 'onSelectionChange'\n | 'selectedItems'\n | 'trackBy'\n | 'totalItemsCount'\n> & { setLastUserAction?: (name: string) => void; selectionType?: InternalSelectionType };\n\nexport function useSelection<T>(options: SelectionOptions<T>): SelectionProps<T> {\n const singleSelectionProps = useSingleSelection(options);\n const multiSelectionProps = useMultiSelection(options);\n switch (options.selectionType) {\n case 'single':\n return singleSelectionProps;\n case 'multi':\n return multiSelectionProps;\n default:\n return { isItemSelected: () => false };\n }\n}\n\nfunction useSingleSelection<T>({\n ariaLabels,\n isItemDisabled = () => false,\n onSelectionChange,\n selectedItems = [],\n selectionType,\n trackBy,\n setLastUserAction,\n}: SelectionOptions<T>): SelectionProps<T> {\n // The name assigned to all controls to combine them in a single group.\n const selectionControlName = useUniqueId();\n\n if (selectionType !== 'single') {\n return { isItemSelected: () => false };\n }\n\n // Selection state for individual items.\n const selectedSet = new ItemSet(trackBy, selectedItems.slice(0, 1));\n const isItemSelected = selectedSet.has.bind(selectedSet);\n\n const handleToggleItem = (item: T) => {\n if (!isItemDisabled(item) && !isItemSelected(item)) {\n fireNonCancelableEvent(onSelectionChange, { selectedItems: [item] });\n setLastUserAction?.('selection');\n }\n };\n\n return {\n isItemSelected,\n getItemSelectionProps: item => ({\n name: selectionControlName,\n selectionType: 'single',\n disabled: isItemDisabled(item),\n checked: isItemSelected(item),\n onChange: () => handleToggleItem(item),\n ariaLabel: joinStrings(\n ariaLabels?.selectionGroupLabel,\n ariaLabels?.itemSelectionLabel?.({ selectedItems }, item)\n ),\n }),\n };\n}\n\nfunction useMultiSelection<T>({\n ariaLabels,\n isItemDisabled = () => false,\n items,\n loading,\n onSelectionChange,\n selectedItems = [],\n selectionType,\n trackBy,\n setLastUserAction,\n totalItemsCount,\n}: SelectionOptions<T>): SelectionProps<T> {\n // The name assigned to all controls to combine them in a single group.\n const selectionControlName = useUniqueId();\n const [shiftPressed, setShiftPressed] = useState(false);\n const [lastClickedItem, setLastClickedItem] = useState<null | T>(null);\n\n if (selectionType !== 'multi') {\n return { isItemSelected: () => false };\n }\n\n // Selection state for individual items.\n const selectedSet = new ItemSet(trackBy, selectedItems);\n const isItemSelected = selectedSet.has.bind(selectedSet);\n\n // Derived selection state for all-items checkbox.\n let allItemsDisabled = true;\n let allEnabledItemsSelected = true;\n for (const item of items) {\n allItemsDisabled = allItemsDisabled && isItemDisabled(item);\n allEnabledItemsSelected = allEnabledItemsSelected && (isItemSelected(item) || isItemDisabled(item));\n }\n const allItemsCheckboxSelected = selectedItems.length > 0 && allEnabledItemsSelected;\n const allItemsCheckboxIndeterminate = selectedItems.length > 0 && !allEnabledItemsSelected;\n\n // Shift-selection helpers.\n const itemIndexesMap = new Map<T, number>();\n items.forEach((item, i) => itemIndexesMap.set(getTrackableValue(trackBy, item), i));\n const getShiftSelectedItems = (item: T): T[] => {\n const lastClickedItemIndex = lastClickedItem\n ? itemIndexesMap.get(getTrackableValue(trackBy, lastClickedItem))\n : undefined;\n // We use lastClickedItemIndex to determine if filtering/sorting/pagination\n // made previously selected item invisible, therefore we reset state for shift-select.\n if (lastClickedItemIndex !== undefined) {\n const currentItemIndex = itemIndexesMap.get(getTrackableValue(trackBy, item))!;\n const start = Math.min(currentItemIndex, lastClickedItemIndex);\n const end = Math.max(currentItemIndex, lastClickedItemIndex);\n return items.slice(start, end + 1);\n }\n return [item];\n };\n\n // Select items that are not already selected or disabled.\n const selectItems = (requestedItems: readonly T[]) => {\n const newSelectedItems = [...selectedItems];\n requestedItems.forEach(newItem => {\n if (!isItemSelected(newItem) && !isItemDisabled(newItem)) {\n newSelectedItems.push(newItem);\n }\n });\n return newSelectedItems;\n };\n\n // Unselect items unless they are disabled.\n const deselectItems = (requestedItems: readonly T[]) => {\n const requestedItemsSet = new ItemSet(trackBy, requestedItems);\n const newSelectedItems: Array<T> = [];\n selectedItems.forEach(selectedItem => {\n const shouldUnselect = requestedItemsSet.has(selectedItem);\n if (!shouldUnselect || isItemDisabled(selectedItem)) {\n newSelectedItems.push(selectedItem);\n }\n });\n return newSelectedItems;\n };\n\n const handleToggleAll = () => {\n const newSelectedItems = allEnabledItemsSelected ? deselectItems(items) : selectItems(items);\n fireNonCancelableEvent(onSelectionChange, { selectedItems: newSelectedItems });\n setLastUserAction?.('selection');\n };\n\n const handleToggleItem = (item: T) => {\n if (!isItemDisabled(item)) {\n const requestedItems = shiftPressed ? getShiftSelectedItems(item) : [item];\n const selectedItems = isItemSelected(item) ? deselectItems(requestedItems) : selectItems(requestedItems);\n fireNonCancelableEvent(onSelectionChange, { selectedItems });\n setLastClickedItem(item);\n setLastUserAction?.('selection');\n }\n };\n\n return {\n isItemSelected,\n getSelectAllProps: () => ({\n name: selectionControlName,\n selectionType: 'multi',\n disabled: allItemsDisabled || !!loading,\n checked: allItemsCheckboxSelected,\n indeterminate: allItemsCheckboxIndeterminate,\n onChange: handleToggleAll,\n ariaLabel: joinStrings(\n ariaLabels?.selectionGroupLabel,\n ariaLabels?.allItemsSelectionLabel?.({\n selectedItems,\n itemsCount: totalItemsCount,\n selectedItemsCount: selectedItems.length,\n })\n ),\n selectionGroupLabel: ariaLabels?.selectionGroupLabel,\n }),\n getItemSelectionProps: item => ({\n name: selectionControlName,\n selectionType: 'multi',\n disabled: isItemDisabled(item),\n checked: isItemSelected(item),\n onChange: () => handleToggleItem(item),\n onShiftToggle: value => setShiftPressed(value),\n ariaLabel: joinStrings(\n ariaLabels?.selectionGroupLabel,\n ariaLabels?.itemSelectionLabel?.({ selectedItems }, item)\n ),\n }),\n };\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { TableProps } from '../interfaces';
|
|
2
2
|
export declare const SELECTION_ITEM = "selection-item";
|
|
3
3
|
export declare class ItemSet<T> {
|
|
4
|
-
constructor(trackBy: TableProps.TrackBy<T> | undefined, items: ReadonlyArray<T>);
|
|
5
4
|
private trackBy;
|
|
6
5
|
private map;
|
|
6
|
+
constructor(trackBy: TableProps.TrackBy<T> | undefined, items: ReadonlyArray<T>);
|
|
7
7
|
put: (item: T) => Map<unknown, T>;
|
|
8
8
|
has: (item: T) => boolean;
|
|
9
9
|
forEach: (callbackfn: (value: T, key: unknown, map: Map<unknown, T>) => void, thisArg?: any) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/table/selection/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAI/C,qBAAa,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/table/selection/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAI/C,qBAAa,OAAO,CAAC,CAAC;IACpB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,GAAG,CAAyB;gBAExB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAI/E,GAAG,GAAI,MAAM,CAAC,qBAA8E;IAC5F,GAAG,GAAI,MAAM,CAAC,aAAwE;IACtF,OAAO,8FAAmC;CAC3C;AAED,eAAO,MAAM,YAAY;;;;;;;;;;CAIxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/table/selection/utils.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAGtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAExC,+FAA+F;AAC/F,MAAM,OAAO,OAAO;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/table/selection/utils.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAGtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAExC,+FAA+F;AAC/F,MAAM,OAAO,OAAO;IAIlB,YAAY,OAA0C,EAAE,KAAuB;QAFvE,QAAG,GAAG,IAAI,GAAG,EAAc,CAAC;QAMpC,QAAG,GAAG,CAAC,IAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5F,QAAG,GAAG,CAAC,IAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACtF,YAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QALxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CAIF;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,EAAE,CAAC,OAAO,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE;IAC5C,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE;IAC1C,IAAI,EAAE,EAAE,CAAC,OAAO,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE;CAC7C,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TableProps } from '../interfaces';\nimport { getTrackableValue } from '../utils';\n\nexport const SELECTION_ITEM = 'selection-item';\nconst SELECTION_ROOT = 'selection-root';\n\n// A set, that compares items by their \"trackables\" (the results of applying `trackBy` to them)\nexport class ItemSet<T> {\n private trackBy: TableProps.TrackBy<T> | undefined;\n private map = new Map<unknown, T>();\n\n constructor(trackBy: TableProps.TrackBy<T> | undefined, items: ReadonlyArray<T>) {\n this.trackBy = trackBy;\n items.forEach(this.put);\n }\n put = (item: T) => this.map.set.call(this.map, getTrackableValue(this.trackBy, item), item);\n has = (item: T) => this.map.has.call(this.map, getTrackableValue(this.trackBy, item));\n forEach = this.map.forEach.bind(this.map);\n}\n\nexport const focusMarkers = {\n item: { ['data-' + SELECTION_ITEM]: 'item' },\n all: { ['data-' + SELECTION_ITEM]: 'all' },\n root: { ['data-' + SELECTION_ROOT]: 'true' },\n};\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { NonCancelableEventHandler } from '../internal/events';
|
|
3
|
-
import { TableProps } from './interfaces';
|
|
4
|
-
import {
|
|
3
|
+
import { InternalSelectionType, TableProps } from './interfaces';
|
|
4
|
+
import { ItemSelectionProps } from './selection';
|
|
5
5
|
import { StickyColumnsModel } from './sticky-columns';
|
|
6
6
|
import { TableRole } from './table-role';
|
|
7
7
|
export interface TheadProps {
|
|
8
|
-
selectionType:
|
|
8
|
+
selectionType: undefined | InternalSelectionType;
|
|
9
9
|
columnDefinitions: ReadonlyArray<TableProps.ColumnDefinition<any>>;
|
|
10
10
|
sortingColumn: TableProps.SortingColumn<any> | undefined;
|
|
11
11
|
sortingDescending: boolean | undefined;
|
|
@@ -14,7 +14,7 @@ export interface TheadProps {
|
|
|
14
14
|
tableVariant?: TableProps.Variant;
|
|
15
15
|
wrapLines: boolean | undefined;
|
|
16
16
|
resizableColumns: boolean | undefined;
|
|
17
|
-
getSelectAllProps?: () =>
|
|
17
|
+
getSelectAllProps?: () => ItemSelectionProps;
|
|
18
18
|
onFocusMove: ((sourceElement: HTMLElement, fromIndex: number, direction: -1 | 1) => void) | undefined;
|
|
19
19
|
onResizeFinish: (newWidths: Map<PropertyKey, number>) => void;
|
|
20
20
|
onSortingChange: NonCancelableEventHandler<TableProps.SortingState<any>> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thead.d.ts","sourceRoot":"","sources":["../../../src/table/thead.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAA0B,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEvF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"thead.d.ts","sourceRoot":"","sources":["../../../src/table/thead.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAA0B,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEvF,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAgB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAA8B,SAAS,EAAE,MAAM,cAAc,CAAC;AAMrE,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,SAAS,GAAG,qBAAqB,CAAC;IACjD,iBAAiB,EAAE,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACzD,iBAAiB,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC;IAClC,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,iBAAiB,CAAC,EAAE,MAAM,kBAAkB,CAAC;IAC7C,WAAW,EAAE,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtG,cAAc,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAC9D,eAAe,EAAE,yBAAyB,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,kBAAkB,CAAC;IAChC,iBAAiB,EAAE,WAAW,CAAC;IAC/B,gBAAgB,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;IAC5D,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,QAAA,MAAM,KAAK,wFA8GV,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thead.js","sourceRoot":"","sources":["../../../src/table/thead.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAEvE,OAAO,EAAE,sBAAsB,EAA6B,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"thead.js","sourceRoot":"","sources":["../../../src/table/thead.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAEvE,OAAO,EAAE,sBAAsB,EAA6B,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAsB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,0BAA0B,EAAa,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAgCrC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAC5B,CACE,EACE,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,SAAS,EACT,WAAW,EACX,eAAe,EACf,cAAc,EACd,8BAA8B,EAC9B,WAAW,EACX,MAAM,GAAG,KAAK,EACd,MAAM,GAAG,KAAK,EACd,KAAK,GAAG,KAAK,EACb,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,GACN,EACb,QAAwC,EACxC,EAAE;IACF,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;IAEnF,MAAM,eAAe,GAAG;QACtB,KAAK;QACL,MAAM;QACN,MAAM;QACN,WAAW;QACX,SAAS;QACT,OAAO;QACP,YAAY;QACZ,WAAW;KACZ,CAAC;IAEF,OAAO,CACL,+BAAO,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;QACvD,+BACM,YAAY,CAAC,GAAG,EACpB,GAAG,EAAE,QAAQ,mBACE,CAAC,KACZ,0BAA0B,CAAC,EAAE,SAAS,EAAE,CAAC,EAC7C,OAAO,EAAE,KAAK,CAAC,EAAE;;gBACf,MAAM,mBAAmB,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;gBAC1G,MAAM,OAAO,GAAG,MAAA,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,YAAY,CAAC,eAAe,CAAC,mCAAI,IAAI,CAAC;gBAC3E,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAG,OAAO,CAAC,CAAC;YACtC,CAAC,EACD,MAAM,EAAE,GAAG,EAAE,CAAC,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAG,IAAI,CAAC;YAE7C,aAAa,CAAC,CAAC,CAAC,CACf,oBAAC,wBAAwB,OACnB,eAAe,EACnB,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,iBAAiB,EAC3B,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,WAAW,EACxB,8BAA8B,EAAE,8BAA8B,GAC9D,CACH,CAAC,CAAC,CAAC,IAAI;YAEP,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;gBAC1C,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAChD,OAAO,CACL,oBAAC,eAAe,OACV,eAAe,EACnB,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACzB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,aAAa,EAClC,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EACjD,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,YAAY,CAAC,EAClD,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,EACjD,OAAO,EAAE,MAAM,CAAC,EAAE;wBAChB,iBAAiB,CAAC,SAAS,CAAC,CAAC;wBAC7B,sBAAsB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;oBAClD,CAAC,EACD,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,EAC/B,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAChD,SAAS,EAAE,SAAS,EACpB,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,kBAAkB;oBACtC,8EAA8E;oBAC9E,uGAAuG;oBACvG,YAAY,EAAE,QAAQ,KAAK,CAAC,IAAI,YAAY,EAC5C,iBAAiB,EAAE,MAAM,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,iBAAiB,GAC1E,CACH,CAAC;YACJ,CAAC,CAAC,CACC,CACC,CACT,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,KAAK,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\nimport clsx from 'clsx';\n\nimport { findUpUntil } from '@cloudscape-design/component-toolkit/dom';\n\nimport { fireNonCancelableEvent, NonCancelableEventHandler } from '../internal/events';\nimport { TableHeaderCell } from './header-cell';\nimport { InternalSelectionType, TableProps } from './interfaces';\nimport { focusMarkers, ItemSelectionProps } from './selection';\nimport { TableHeaderSelectionCell } from './selection/selection-cell';\nimport { StickyColumnsModel } from './sticky-columns';\nimport { getTableHeaderRowRoleProps, TableRole } from './table-role';\nimport { useColumnWidths } from './use-column-widths';\nimport { getColumnKey } from './utils';\n\nimport styles from './styles.css.js';\n\nexport interface TheadProps {\n selectionType: undefined | InternalSelectionType;\n columnDefinitions: ReadonlyArray<TableProps.ColumnDefinition<any>>;\n sortingColumn: TableProps.SortingColumn<any> | undefined;\n sortingDescending: boolean | undefined;\n sortingDisabled: boolean | undefined;\n variant: TableProps.Variant;\n tableVariant?: TableProps.Variant;\n wrapLines: boolean | undefined;\n resizableColumns: boolean | undefined;\n getSelectAllProps?: () => ItemSelectionProps;\n onFocusMove: ((sourceElement: HTMLElement, fromIndex: number, direction: -1 | 1) => void) | undefined;\n onResizeFinish: (newWidths: Map<PropertyKey, number>) => void;\n onSortingChange: NonCancelableEventHandler<TableProps.SortingState<any>> | undefined;\n sticky?: boolean;\n hidden?: boolean;\n stuck?: boolean;\n singleSelectionHeaderAriaLabel?: string;\n resizerRoleDescription?: string;\n resizerTooltipText?: string;\n stripedRows?: boolean;\n stickyState: StickyColumnsModel;\n selectionColumnId: PropertyKey;\n focusedComponent?: null | string;\n onFocusedComponentChange?: (focusId: null | string) => void;\n tableRole: TableRole;\n isExpandable?: boolean;\n setLastUserAction: (name: string) => void;\n}\n\nconst Thead = React.forwardRef(\n (\n {\n selectionType,\n getSelectAllProps,\n columnDefinitions,\n sortingColumn,\n sortingDisabled,\n sortingDescending,\n resizableColumns,\n variant,\n tableVariant,\n wrapLines,\n onFocusMove,\n onSortingChange,\n onResizeFinish,\n singleSelectionHeaderAriaLabel,\n stripedRows,\n sticky = false,\n hidden = false,\n stuck = false,\n stickyState,\n selectionColumnId,\n focusedComponent,\n onFocusedComponentChange,\n tableRole,\n resizerRoleDescription,\n resizerTooltipText,\n isExpandable,\n setLastUserAction,\n }: TheadProps,\n outerRef: React.Ref<HTMLTableRowElement>\n ) => {\n const { getColumnStyles, columnWidths, updateColumn, setCell } = useColumnWidths();\n\n const commonCellProps = {\n stuck,\n sticky,\n hidden,\n stripedRows,\n tableRole,\n variant,\n tableVariant,\n stickyState,\n };\n\n return (\n <thead className={clsx(!hidden && styles['thead-active'])}>\n <tr\n {...focusMarkers.all}\n ref={outerRef}\n aria-rowindex={1}\n {...getTableHeaderRowRoleProps({ tableRole })}\n onFocus={event => {\n const focusControlElement = findUpUntil(event.target, element => !!element.getAttribute('data-focus-id'));\n const focusId = focusControlElement?.getAttribute('data-focus-id') ?? null;\n onFocusedComponentChange?.(focusId);\n }}\n onBlur={() => onFocusedComponentChange?.(null)}\n >\n {selectionType ? (\n <TableHeaderSelectionCell\n {...commonCellProps}\n focusedComponent={focusedComponent}\n columnId={selectionColumnId}\n getSelectAllProps={getSelectAllProps}\n onFocusMove={onFocusMove}\n singleSelectionHeaderAriaLabel={singleSelectionHeaderAriaLabel}\n />\n ) : null}\n\n {columnDefinitions.map((column, colIndex) => {\n const columnId = getColumnKey(column, colIndex);\n return (\n <TableHeaderCell\n {...commonCellProps}\n key={columnId}\n tabIndex={sticky ? -1 : 0}\n focusedComponent={focusedComponent}\n column={column}\n activeSortingColumn={sortingColumn}\n sortingDescending={sortingDescending}\n sortingDisabled={sortingDisabled}\n wrapLines={wrapLines}\n colIndex={selectionType ? colIndex + 1 : colIndex}\n columnId={columnId}\n updateColumn={updateColumn}\n onResizeFinish={() => onResizeFinish(columnWidths)}\n resizableColumns={resizableColumns}\n resizableStyle={getColumnStyles(sticky, columnId)}\n onClick={detail => {\n setLastUserAction('sorting');\n fireNonCancelableEvent(onSortingChange, detail);\n }}\n isEditable={!!column.editConfig}\n cellRef={node => setCell(sticky, columnId, node)}\n tableRole={tableRole}\n resizerRoleDescription={resizerRoleDescription}\n resizerTooltipText={resizerTooltipText}\n // Expandable option is only applicable to the first data column of the table.\n // When present, the header content receives extra padding to match the first offset in the data cells.\n isExpandable={colIndex === 0 && isExpandable}\n hasDynamicContent={hidden && !resizableColumns && column.hasDynamicContent}\n />\n );\n })}\n </tr>\n </thead>\n );\n }\n);\n\nexport default Thead;\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { RefObject } from 'react';
|
|
2
|
-
import { TableProps } from './interfaces';
|
|
2
|
+
import { InternalSelectionType, TableProps } from './interfaces';
|
|
3
3
|
interface TableFocusNavigationProps<T> {
|
|
4
4
|
enableKeyboardNavigation?: boolean;
|
|
5
|
-
selectionType:
|
|
5
|
+
selectionType: undefined | InternalSelectionType;
|
|
6
6
|
tableRoot: RefObject<HTMLTableElement>;
|
|
7
7
|
columnDefinitions: Readonly<T[]>;
|
|
8
8
|
numRows: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-focus-navigation.d.ts","sourceRoot":"","sources":["../../../src/table/use-table-focus-navigation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAmC,MAAM,OAAO,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"use-table-focus-navigation.d.ts","sourceRoot":"","sources":["../../../src/table/use-table-focus-navigation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAmC,MAAM,OAAO,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAajE,UAAU,yBAAyB,CAAC,CAAC;IACnC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,aAAa,EAAE,SAAS,GAAG,qBAAqB,CAAC;IACjD,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACvC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,iBAAS,uBAAuB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;CAAE,EAAE,EACtF,wBAAwB,EACxB,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,OAAO,GACR,EAAE,yBAAyB,CAAC,CAAC,CAAC,QA2G9B;AAED,eAAe,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-focus-navigation.js","sourceRoot":"","sources":["../../../src/table/use-table-focus-navigation.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 { RefObject, useCallback, useEffect, useMemo } from 'react';\n\nimport { scrollElementIntoView } from '../internal/utils/scrollable-containers';\nimport { TableProps } from './interfaces';\n\nfunction iterateTableCells<T extends HTMLElement>(\n table: T,\n func: (cell: HTMLTableCellElement, rowIndex: number, columnIndex: number) => void\n) {\n table.querySelectorAll('tr').forEach((row: HTMLTableRowElement, rowIndex: number) => {\n row.querySelectorAll('td').forEach((cell, cellIndex) => {\n func(cell, rowIndex, cellIndex);\n });\n });\n}\n\ninterface TableFocusNavigationProps<T> {\n enableKeyboardNavigation?: boolean;\n selectionType:
|
|
1
|
+
{"version":3,"file":"use-table-focus-navigation.js","sourceRoot":"","sources":["../../../src/table/use-table-focus-navigation.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAa,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAGhF,SAAS,iBAAiB,CACxB,KAAQ,EACR,IAAiF;IAEjF,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAwB,EAAE,QAAgB,EAAE,EAAE;QAClF,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;YACrD,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAUD;;;;;;;;GAQG;AACH,SAAS,uBAAuB,CAAwD,EACtF,wBAAwB,EACxB,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,OAAO,GACsB;IAC7B,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC;IAEvC,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,QAAgB,EAAE,WAAmB,EAAE,EAAE;QACxC,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,EAAE,CAAC;YACvB,iBAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;;gBAC5D,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;oBAClD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAA6B,CAAC;oBAEvF,IAAI,UAAU,EAAE,CAAC;wBACf,MAAA,UAAU,CAAC,KAAK,0DAAI,CAAC;wBACrB,qBAAqB,CAAC,UAAU,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,QAAoB,EAAE,UAAsB,EAAE,EAAE;;QAC/C,MAAM,WAAW,GAAG,MAAA,SAAS,CAAC,OAAO,0CAAE,aAAa,CAAuB,iBAAiB,CAAC,CAAC;QAC9F,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC;QAC1C,MAAM,QAAQ,GAAI,WAAW,CAAC,aAAqC,CAAC,QAAQ,CAAC;QAE7E,IAAI,WAAW,GAAG,QAAQ,CAAC;QAC3B,IAAI,cAAc,GAAG,WAAW,CAAC;QAEjC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,cAAc,IAAI,cAAc,IAAI,cAAc,IAAI,cAAc,EAAE,CAAC;gBAC5E,cAAc,IAAI,UAAU,CAAC;gBAC7B,IAAI,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC;oBACrC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,WAAW,KAAK,cAAc,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtF,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,EACD,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,CAAC,CAClF,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,KAAoB,EAAE,EAAE;;QACvB,MAAM,KAAK,GACT,CAAC,CAAC,CAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,aAAa,CAAC,uCAAuC,CAAC,CAAA;YAC3E,CAAC,CAAA,MAAA,QAAQ,CAAC,aAAa,0CAAE,OAAO,CAAC,8BAA8B,CAAC,CAAA,CAAC;QAEnE,IAAI,KAAK,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;YAClB,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClB,MAAM;YACR,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjB,MAAM;YACR,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClB,MAAM;YACR,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjB,MAAM;YACR,iEAAiE;YACjE;gBACE,OAAO;QACX,CAAC;IACH,CAAC,EACD,CAAC,UAAU,EAAE,SAAS,CAAC,CACxB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,wBAAwB,EAAE,CAAC;YACnD,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;QACvC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAEpE,OAAO,GAAG,EAAE,CAAC,YAAY,IAAI,YAAY,CAAC,mBAAmB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACjG,CAAC,EAAE,CAAC,wBAAwB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,eAAe,uBAAuB,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RefObject, useCallback, useEffect, useMemo } from 'react';\n\nimport { scrollElementIntoView } from '../internal/utils/scrollable-containers';\nimport { InternalSelectionType, TableProps } from './interfaces';\n\nfunction iterateTableCells<T extends HTMLElement>(\n table: T,\n func: (cell: HTMLTableCellElement, rowIndex: number, columnIndex: number) => void\n) {\n table.querySelectorAll('tr').forEach((row: HTMLTableRowElement, rowIndex: number) => {\n row.querySelectorAll('td').forEach((cell, cellIndex) => {\n func(cell, rowIndex, cellIndex);\n });\n });\n}\n\ninterface TableFocusNavigationProps<T> {\n enableKeyboardNavigation?: boolean;\n selectionType: undefined | InternalSelectionType;\n tableRoot: RefObject<HTMLTableElement>;\n columnDefinitions: Readonly<T[]>;\n numRows: number;\n}\n\n/**\n * This hook is used to navigate between table cells using the keyboard arrow keys.\n * All the functionality is implemented in the hook, so the table component does not\n * need to implement any keyboard event handlers.\n * @param enable - Toggle functionality of the hook\n * @param tableRoot - A ref to a table container. Ideally the root element of the table (<table>); tbody is also acceptable.\n * @param columnDefinitions - The column definitions for the table.\n * @param numRows - The number of rows in the table.\n */\nfunction useTableFocusNavigation<T extends { editConfig?: TableProps.EditConfig<any> }>({\n enableKeyboardNavigation,\n selectionType,\n tableRoot,\n columnDefinitions,\n numRows,\n}: TableFocusNavigationProps<T>) {\n const focusableColumns = useMemo(() => {\n const cols = columnDefinitions.map(column => !!column.editConfig);\n if (selectionType) {\n cols.unshift(false);\n }\n return cols;\n }, [columnDefinitions, selectionType]);\n\n const maxColumnIndex = focusableColumns.length - 1;\n const minColumnIndex = selectionType ? 1 : 0;\n\n const focusCell = useCallback(\n (rowIndex: number, columnIndex: number) => {\n if (tableRoot?.current) {\n iterateTableCells(tableRoot.current, (cell, rIndex, cIndex) => {\n if (rIndex === rowIndex && cIndex === columnIndex) {\n const editButton = cell.querySelector('button:last-child') as HTMLButtonElement | null;\n\n if (editButton) {\n editButton.focus?.();\n scrollElementIntoView(editButton);\n }\n }\n });\n }\n },\n [tableRoot]\n );\n\n const shiftFocus = useCallback(\n (vertical: -1 | 0 | 1, horizontal: -1 | 0 | 1) => {\n const focusedCell = tableRoot.current?.querySelector<HTMLTableCellElement>('td:focus-within');\n if (!focusedCell) {\n return;\n }\n\n const columnIndex = focusedCell.cellIndex;\n const rowIndex = (focusedCell.parentElement as HTMLTableRowElement).rowIndex;\n\n let newRowIndex = rowIndex;\n let newColumnIndex = columnIndex;\n\n if (vertical !== 0) {\n newRowIndex = Math.min(numRows, Math.max(rowIndex + vertical, 0));\n }\n\n if (horizontal !== 0) {\n while (newColumnIndex <= maxColumnIndex && newColumnIndex >= minColumnIndex) {\n newColumnIndex += horizontal;\n if (focusableColumns[newColumnIndex]) {\n break;\n }\n }\n }\n\n if ((rowIndex !== newRowIndex || columnIndex !== newColumnIndex) && tableRoot.current) {\n focusCell(newRowIndex, newColumnIndex);\n }\n },\n [focusCell, focusableColumns, maxColumnIndex, minColumnIndex, numRows, tableRoot]\n );\n\n const handleArrowKeyEvents = useCallback(\n (event: KeyboardEvent) => {\n const abort =\n !!tableRoot.current?.querySelector('[data-inline-editing-active = \"true\"]') ||\n !document.activeElement?.closest('[data-inline-editing-active]');\n\n if (abort) {\n return;\n }\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n shiftFocus(-1, 0);\n break;\n case 'ArrowDown':\n event.preventDefault();\n shiftFocus(1, 0);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n shiftFocus(0, -1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n shiftFocus(0, 1);\n break;\n // istanbul ignore next (default case = do nothing, not testable)\n default:\n return;\n }\n },\n [shiftFocus, tableRoot]\n );\n\n useEffect(() => {\n if (!tableRoot.current || enableKeyboardNavigation) {\n return;\n }\n\n const tableElement = tableRoot.current;\n tableRoot.current.addEventListener('keydown', handleArrowKeyEvents);\n\n return () => tableElement && tableElement.removeEventListener('keydown', handleArrowKeyEvents);\n }, [enableKeyboardNavigation, focusableColumns, handleArrowKeyEvents, tableRoot]);\n}\n\nexport default useTableFocusNavigation;\n"]}
|
|
@@ -7,11 +7,6 @@ declare class CardSectionWrapper extends ComponentWrapper {
|
|
|
7
7
|
findContent(): ElementWrapper | null;
|
|
8
8
|
}
|
|
9
9
|
declare class CardWrapper extends ComponentWrapper {
|
|
10
|
-
/**
|
|
11
|
-
* Note: for integration/selector-based tests you should add `1` to the expected section index,
|
|
12
|
-
* for example, `.findSections().get(sectionIndex+1)`. The `get` call in this context
|
|
13
|
-
* is '2-indexed', that is, the first section in a card has an index of `2`.
|
|
14
|
-
*/
|
|
15
10
|
findSections(): Array<CardSectionWrapper>;
|
|
16
11
|
findCardHeader(): ElementWrapper | null;
|
|
17
12
|
findSelectionArea(): ElementWrapper | null;
|
|
@@ -18,11 +18,6 @@ class CardSectionWrapper extends dom_1.ComponentWrapper {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
class CardWrapper extends dom_1.ComponentWrapper {
|
|
21
|
-
/**
|
|
22
|
-
* Note: for integration/selector-based tests you should add `1` to the expected section index,
|
|
23
|
-
* for example, `.findSections().get(sectionIndex+1)`. The `get` call in this context
|
|
24
|
-
* is '2-indexed', that is, the first section in a card has an index of `2`.
|
|
25
|
-
*/
|
|
26
21
|
findSections() {
|
|
27
22
|
return this.findAllByClassName(styles_selectors_js_1.default.section).map(c => new CardSectionWrapper(c.getElement()));
|
|
28
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/dom/cards/index.ts"],"names":[],"mappings":";;AAAA,qEAAqE;AACrE,sCAAsC;AACtC,gEAA0F;AAE1F,sEAAqE;AACrE,4CAA4C;AAC5C,8CAA8C;AAC9C,gDAA+C;AAE/C,4EAAwD;AACxD,4EAA6D;AAE7D,MAAM,kBAAmB,SAAQ,sBAAgB;IAC/C,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,WAAY,SAAQ,sBAAgB;IACxC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/dom/cards/index.ts"],"names":[],"mappings":";;AAAA,qEAAqE;AACrE,sCAAsC;AACtC,gEAA0F;AAE1F,sEAAqE;AACrE,4CAA4C;AAC5C,8CAA8C;AAC9C,gDAA+C;AAE/C,4EAAwD;AACxD,4EAA6D;AAE7D,MAAM,kBAAmB,SAAQ,sBAAgB;IAC/C,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,WAAY,SAAQ,sBAAgB;IACxC,YAAY;QACV,OAAO,IAAI,CAAC,kBAAkB,CAAC,6BAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,6BAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC;CACF;AAED,MAAqB,YAAa,SAAQ,sBAAgB;IAA1D;;QAGU,qBAAgB,GAAG,IAAI,mBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAiDrE,CAAC;IA/CC,SAAS;QACP,OAAO,IAAI,CAAC,kBAAkB,CAAC,6BAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC,6BAAM,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACpG,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,qBAAiB,CAAC,CAAC;IACrF,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAW,CAAC,kBAAkB,CAAC,EAAE,EAAE,oBAAiB,CAAC,CAAC;IACtF,CAAC;IAED,yBAAyB;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAW,CAAC,mBAAmB,CAAC,EAAE,EAAE,gCAA4B,CAAC,CAAC;IAClG,CAAC;;AAlDM,yBAAY,GAAW,6BAAM,CAAC,IAAI,AAAtB,CAAuB;kBADvB,YAAY"}
|
|
@@ -29,6 +29,13 @@ export default class TableWrapper extends ComponentWrapper {
|
|
|
29
29
|
* @param columnIndex 1-based index of the column of the cell to select.
|
|
30
30
|
*/
|
|
31
31
|
findBodyCell(rowIndex: number, columnIndex: number): ElementWrapper | null;
|
|
32
|
+
/**
|
|
33
|
+
* Returns a table cell counter, if defined, based on given row and column indices.
|
|
34
|
+
*
|
|
35
|
+
* @param rowIndex 1-based index of the row of the cell to select.
|
|
36
|
+
* @param columnIndex 1-based index of the column of the cell to select.
|
|
37
|
+
*/
|
|
38
|
+
findBodyCellCounter(rowIndex: number, columnIndex: number): ElementWrapper | null;
|
|
32
39
|
findRows(): Array<ElementWrapper>;
|
|
33
40
|
findSelectedRows(): Array<ElementWrapper>;
|
|
34
41
|
/**
|