@cloudscape-design/components 3.0.870 → 3.0.872
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app-layout/drawer/resizable-drawer.d.ts.map +1 -1
- package/app-layout/drawer/resizable-drawer.js +2 -3
- package/app-layout/drawer/resizable-drawer.js.map +1 -1
- package/app-layout/utils/use-focus-control.d.ts +1 -2
- package/app-layout/utils/use-focus-control.d.ts.map +1 -1
- package/app-layout/utils/use-focus-control.js +0 -2
- package/app-layout/utils/use-focus-control.js.map +1 -1
- package/app-layout/utils/use-resize.d.ts.map +1 -1
- package/app-layout/utils/use-resize.js +2 -3
- package/app-layout/utils/use-resize.js.map +1 -1
- package/app-layout/utils/use-split-panel-focus-control.d.ts +1 -2
- package/app-layout/utils/use-split-panel-focus-control.d.ts.map +1 -1
- package/app-layout/utils/use-split-panel-focus-control.js +0 -1
- package/app-layout/utils/use-split-panel-focus-control.js.map +1 -1
- package/app-layout/visual-refresh-toolbar/drawer/global-drawer.d.ts.map +1 -1
- package/app-layout/visual-refresh-toolbar/drawer/global-drawer.js +2 -3
- package/app-layout/visual-refresh-toolbar/drawer/global-drawer.js.map +1 -1
- package/app-layout/visual-refresh-toolbar/drawer/local-drawer.d.ts.map +1 -1
- package/app-layout/visual-refresh-toolbar/drawer/local-drawer.js +2 -3
- package/app-layout/visual-refresh-toolbar/drawer/local-drawer.js.map +1 -1
- package/button-group/index.d.ts.map +1 -1
- package/button-group/index.js +22 -1
- package/button-group/index.js.map +1 -1
- package/button-group/interfaces.d.ts +2 -1
- package/button-group/interfaces.d.ts.map +1 -1
- package/button-group/interfaces.js.map +1 -1
- package/collection-preferences/content-display/index.d.ts.map +1 -1
- package/collection-preferences/content-display/index.js +8 -5
- package/collection-preferences/content-display/index.js.map +1 -1
- package/container/styles.css.js +32 -31
- package/container/styles.scoped.css +57 -54
- package/container/styles.selectors.js +32 -31
- package/flashbar/internal/analytics.d.ts.map +1 -1
- package/flashbar/internal/analytics.js +1 -3
- package/flashbar/internal/analytics.js.map +1 -1
- package/internal/components/autosuggest-input/index.d.ts.map +1 -1
- package/internal/components/autosuggest-input/index.js +6 -0
- package/internal/components/autosuggest-input/index.js.map +1 -1
- package/internal/components/drag-handle/index.d.ts +2 -2
- package/internal/components/drag-handle/index.d.ts.map +1 -1
- package/internal/components/drag-handle/index.js +7 -3
- package/internal/components/drag-handle/index.js.map +1 -1
- package/internal/components/drag-handle/interfaces.d.ts +1 -1
- package/internal/components/drag-handle/interfaces.d.ts.map +1 -1
- package/internal/components/drag-handle/interfaces.js.map +1 -1
- package/internal/components/panel-resize-handle/icon.d.ts +5 -0
- package/internal/components/panel-resize-handle/icon.d.ts.map +1 -0
- package/internal/components/panel-resize-handle/icon.js +9 -0
- package/internal/components/panel-resize-handle/icon.js.map +1 -0
- package/internal/components/panel-resize-handle/index.d.ts +2 -4
- package/internal/components/panel-resize-handle/index.d.ts.map +1 -1
- package/internal/components/panel-resize-handle/index.js +5 -8
- package/internal/components/panel-resize-handle/index.js.map +1 -1
- package/internal/components/panel-resize-handle/styles.css.js +5 -2
- package/internal/components/panel-resize-handle/styles.scoped.css +191 -3
- package/internal/components/panel-resize-handle/styles.selectors.js +5 -2
- package/internal/components/sortable-area/index.d.ts +6 -0
- package/internal/components/sortable-area/index.d.ts.map +1 -0
- package/internal/components/{dnd-area → sortable-area}/index.js +34 -25
- package/internal/components/sortable-area/index.js.map +1 -0
- package/internal/components/sortable-area/interfaces.d.ts +42 -0
- package/internal/components/sortable-area/interfaces.d.ts.map +1 -0
- package/internal/components/sortable-area/interfaces.js.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/defaults.d.ts.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/defaults.js.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/index.d.ts.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/index.js.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/utilities/events.d.ts.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/utilities/events.js.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/utilities/listeners.d.ts.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/utilities/listeners.js.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/utilities/scroll.d.ts.map +1 -0
- package/internal/components/sortable-area/keyboard-sensor/utilities/scroll.js.map +1 -0
- package/internal/components/sortable-area/styles.css.js +13 -0
- package/internal/components/{dnd-area → sortable-area}/styles.scoped.css +17 -17
- package/internal/components/sortable-area/styles.selectors.js +14 -0
- package/internal/components/{dnd-area → sortable-area}/use-drag-and-drop-reorder.d.ts +4 -3
- package/internal/components/sortable-area/use-drag-and-drop-reorder.d.ts.map +1 -0
- package/internal/components/{dnd-area → sortable-area}/use-drag-and-drop-reorder.js +4 -4
- package/internal/components/sortable-area/use-drag-and-drop-reorder.js.map +1 -0
- package/internal/components/sortable-area/use-live-announcements.d.ts +13 -0
- package/internal/components/sortable-area/use-live-announcements.d.ts.map +1 -0
- package/internal/components/{dnd-area → sortable-area}/use-live-announcements.js +6 -6
- package/internal/components/sortable-area/use-live-announcements.js.map +1 -0
- package/internal/environment.js +1 -1
- package/internal/environment.json +1 -1
- package/internal/manifest.json +1 -1
- package/internal/metrics.d.ts +3 -0
- package/internal/metrics.d.ts.map +1 -0
- package/internal/metrics.js +6 -0
- package/internal/metrics.js.map +1 -0
- package/internal/plugins/api.d.ts.map +1 -1
- package/internal/plugins/api.js +4 -0
- package/internal/plugins/api.js.map +1 -1
- package/internal/plugins/controllers/alert-flash-content.d.ts.map +1 -1
- package/internal/plugins/controllers/alert-flash-content.js +2 -1
- package/internal/plugins/controllers/alert-flash-content.js.map +1 -1
- package/internal/plugins/controllers/drawers.d.ts.map +1 -1
- package/internal/plugins/controllers/drawers.js +7 -3
- package/internal/plugins/controllers/drawers.js.map +1 -1
- package/internal/plugins/helpers/metrics.d.ts +3 -0
- package/internal/plugins/helpers/metrics.d.ts.map +1 -0
- package/internal/plugins/helpers/metrics.js +15 -0
- package/internal/plugins/helpers/metrics.js.map +1 -0
- package/internal/plugins/helpers/use-discovered-content.d.ts.map +1 -1
- package/internal/plugins/helpers/use-discovered-content.js +2 -1
- package/internal/plugins/helpers/use-discovered-content.js.map +1 -1
- package/internal/utils/dom.d.ts +1 -0
- package/internal/utils/dom.d.ts.map +1 -1
- package/internal/utils/dom.js +8 -0
- package/internal/utils/dom.js.map +1 -1
- package/package.json +1 -1
- package/split-panel/implementation.d.ts.map +1 -1
- package/split-panel/implementation.js +6 -7
- package/split-panel/implementation.js.map +1 -1
- package/table/header-cell/styles.css.js +28 -26
- package/table/header-cell/styles.scoped.css +68 -65
- package/table/header-cell/styles.selectors.js +28 -26
- package/table/table-role/utils.d.ts.map +1 -1
- package/table/table-role/utils.js +4 -5
- package/table/table-role/utils.js.map +1 -1
- package/app-layout/visual-refresh-toolbar/exports.d.ts +0 -6
- package/app-layout/visual-refresh-toolbar/exports.d.ts.map +0 -1
- package/app-layout/visual-refresh-toolbar/exports.js +0 -8
- package/app-layout/visual-refresh-toolbar/exports.js.map +0 -1
- package/internal/components/dnd-area/index.d.ts +0 -4
- package/internal/components/dnd-area/index.d.ts.map +0 -1
- package/internal/components/dnd-area/index.js.map +0 -1
- package/internal/components/dnd-area/interfaces.d.ts +0 -39
- package/internal/components/dnd-area/interfaces.d.ts.map +0 -1
- package/internal/components/dnd-area/interfaces.js.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/defaults.d.ts.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/defaults.js.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/index.d.ts.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/index.js.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/utilities/events.d.ts.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/utilities/events.js.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/utilities/listeners.d.ts.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/utilities/listeners.js.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/utilities/scroll.d.ts.map +0 -1
- package/internal/components/dnd-area/keyboard-sensor/utilities/scroll.js.map +0 -1
- package/internal/components/dnd-area/styles.css.js +0 -13
- package/internal/components/dnd-area/styles.selectors.js +0 -14
- package/internal/components/dnd-area/use-drag-and-drop-reorder.d.ts.map +0 -1
- package/internal/components/dnd-area/use-drag-and-drop-reorder.js.map +0 -1
- package/internal/components/dnd-area/use-live-announcements.d.ts +0 -12
- package/internal/components/dnd-area/use-live-announcements.d.ts.map +0 -1
- package/internal/components/dnd-area/use-live-announcements.js.map +0 -1
- /package/internal/components/{dnd-area → sortable-area}/interfaces.js +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/defaults.d.ts +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/defaults.js +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/index.d.ts +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/index.js +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/utilities/events.d.ts +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/utilities/events.js +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/utilities/listeners.d.ts +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/utilities/listeners.js +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/utilities/scroll.d.ts +0 -0
- /package/internal/components/{dnd-area → sortable-area}/keyboard-sensor/utilities/scroll.js +0 -0
|
@@ -5,70 +5,75 @@ import { DndContext, DragOverlay } from '@dnd-kit/core';
|
|
|
5
5
|
import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
|
|
6
6
|
import { CSS } from '@dnd-kit/utilities';
|
|
7
7
|
import clsx from 'clsx';
|
|
8
|
+
import Portal from '../../components/portal';
|
|
9
|
+
import { fireNonCancelableEvent } from '../../events';
|
|
8
10
|
import { joinStrings } from '../../utils/strings';
|
|
9
|
-
import Portal from '../portal';
|
|
10
11
|
import useDragAndDropReorder from './use-drag-and-drop-reorder';
|
|
11
12
|
import useLiveAnnouncements from './use-live-announcements';
|
|
12
13
|
import styles from './styles.css.js';
|
|
13
|
-
export function
|
|
14
|
+
export default function SortableArea({ items, itemDefinition, renderItem, onItemsChange, disableReorder, i18nStrings, }) {
|
|
14
15
|
var _a;
|
|
15
16
|
const { activeItemId, setActiveItemId, collisionDetection, handleKeyDown, sensors } = useDragAndDropReorder({
|
|
16
17
|
items,
|
|
18
|
+
itemDefinition,
|
|
17
19
|
});
|
|
18
|
-
const activeItem = activeItemId ? items.find(item =>
|
|
20
|
+
const activeItem = activeItemId ? items.find(item => itemDefinition.id(item) === activeItemId) : null;
|
|
19
21
|
const isDragging = activeItemId !== null;
|
|
20
|
-
const announcements = useLiveAnnouncements(Object.assign({ items, isDragging }, i18nStrings));
|
|
22
|
+
const announcements = useLiveAnnouncements(Object.assign({ items, itemDefinition, isDragging }, i18nStrings));
|
|
21
23
|
const portalContainer = usePortalContainer();
|
|
22
24
|
return (React.createElement(DndContext, { sensors: sensors, collisionDetection: collisionDetection, accessibility: {
|
|
23
25
|
announcements,
|
|
24
26
|
restoreFocus: false,
|
|
25
|
-
screenReaderInstructions: i18nStrings.dragHandleAriaDescription
|
|
27
|
+
screenReaderInstructions: (i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.dragHandleAriaDescription)
|
|
26
28
|
? { draggable: i18nStrings.dragHandleAriaDescription }
|
|
27
29
|
: undefined,
|
|
28
|
-
container: portalContainer,
|
|
30
|
+
container: portalContainer !== null && portalContainer !== void 0 ? portalContainer : undefined,
|
|
29
31
|
}, onDragStart: ({ active }) => setActiveItemId(active.id), onDragEnd: event => {
|
|
30
32
|
setActiveItemId(null);
|
|
31
33
|
const { active, over } = event;
|
|
32
34
|
if (over && active.id !== over.id) {
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
|
|
35
|
+
const movedItem = items.find(item => itemDefinition.id(item) === active.id);
|
|
36
|
+
const oldIndex = items.findIndex(item => itemDefinition.id(item) === active.id);
|
|
37
|
+
const newIndex = items.findIndex(item => itemDefinition.id(item) === over.id);
|
|
38
|
+
fireNonCancelableEvent(onItemsChange, { items: arrayMove([...items], oldIndex, newIndex), movedItem });
|
|
36
39
|
}
|
|
37
40
|
}, onDragCancel: () => setActiveItemId(null) },
|
|
38
|
-
React.createElement(SortableContext, { disabled: disableReorder, items: items.map(item =>
|
|
41
|
+
React.createElement(SortableContext, { disabled: disableReorder, items: items.map(item => itemDefinition.id(item)), strategy: verticalListSortingStrategy }, items.map(item => (React.createElement(DraggableItem, { key: itemDefinition.id(item), item: item, itemDefinition: itemDefinition, renderItem: renderItem, onKeyDown: handleKeyDown, dragHandleAriaLabel: i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.dragHandleAriaLabel })))),
|
|
39
42
|
React.createElement(Portal, { container: portalContainer },
|
|
40
|
-
React.createElement(DragOverlay, { className: clsx(styles['drag-overlay'], styles[`drag-overlay-${
|
|
43
|
+
React.createElement(DragOverlay, { className: clsx(styles['drag-overlay'], styles[`drag-overlay-${getBorderRadiusVariant(itemDefinition)}`]), dropAnimation: null, style: { zIndex: 5000 } }, activeItem &&
|
|
41
44
|
renderItem({
|
|
42
45
|
item: activeItem,
|
|
43
46
|
style: {},
|
|
44
47
|
className: styles.active,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
isDropPlaceholder: true,
|
|
49
|
+
isSortingActive: false,
|
|
50
|
+
isDragGhost: true,
|
|
48
51
|
dragHandleProps: {
|
|
49
|
-
ariaLabel: (_a = joinStrings(i18nStrings.dragHandleAriaLabel,
|
|
52
|
+
ariaLabel: (_a = joinStrings(i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.dragHandleAriaLabel, itemDefinition.label(activeItem))) !== null && _a !== void 0 ? _a : '',
|
|
50
53
|
onKeyDown: handleKeyDown,
|
|
51
54
|
},
|
|
52
55
|
})))));
|
|
53
56
|
}
|
|
54
57
|
function usePortalContainer() {
|
|
55
|
-
const portalContainerRef = useRef(document.createElement('div'));
|
|
58
|
+
const portalContainerRef = useRef(typeof document !== 'undefined' ? document.createElement('div') : null);
|
|
56
59
|
useEffect(() => {
|
|
57
60
|
const container = portalContainerRef.current;
|
|
58
|
-
if (!container.isConnected) {
|
|
61
|
+
if (container && !container.isConnected) {
|
|
59
62
|
document.body.appendChild(container);
|
|
60
63
|
}
|
|
61
64
|
return () => {
|
|
62
|
-
if (container.isConnected) {
|
|
65
|
+
if (container && container.isConnected) {
|
|
63
66
|
document.body.removeChild(container);
|
|
64
67
|
}
|
|
65
68
|
};
|
|
66
69
|
}, []);
|
|
67
70
|
return portalContainerRef.current;
|
|
68
71
|
}
|
|
69
|
-
function DraggableItem({ item, dragHandleAriaLabel, onKeyDown, renderItem,
|
|
72
|
+
function DraggableItem({ item, itemDefinition, dragHandleAriaLabel, onKeyDown, renderItem, }) {
|
|
70
73
|
var _a;
|
|
71
|
-
const { isDragging, isSorting, listeners, setNodeRef, transform, attributes } = useSortable({
|
|
74
|
+
const { isDragging, isSorting, listeners, setNodeRef, transform, attributes } = useSortable({
|
|
75
|
+
id: itemDefinition.id(item),
|
|
76
|
+
});
|
|
72
77
|
const style = { transform: CSS.Translate.toString(transform) };
|
|
73
78
|
const dragHandleListeners = attributes['aria-disabled']
|
|
74
79
|
? {}
|
|
@@ -80,16 +85,20 @@ function DraggableItem({ item, dragHandleAriaLabel, onKeyDown, renderItem, borde
|
|
|
80
85
|
listeners.onKeyDown(event);
|
|
81
86
|
}
|
|
82
87
|
} });
|
|
83
|
-
const className = clsx(isDragging && clsx(styles.placeholder, styles[`placeholder-${
|
|
88
|
+
const className = clsx(isDragging && clsx(styles.placeholder, styles[`placeholder-${getBorderRadiusVariant(itemDefinition)}`]), isSorting && styles.sorting);
|
|
84
89
|
return (React.createElement(React.Fragment, null, renderItem({
|
|
85
90
|
item,
|
|
86
91
|
ref: setNodeRef,
|
|
87
92
|
style,
|
|
88
93
|
className,
|
|
89
|
-
isDragging,
|
|
90
|
-
isSorting,
|
|
91
|
-
|
|
92
|
-
dragHandleProps: Object.assign(Object.assign({}, dragHandleListeners), { ariaLabel: (_a = joinStrings(dragHandleAriaLabel,
|
|
94
|
+
isDropPlaceholder: isDragging,
|
|
95
|
+
isSortingActive: isSorting,
|
|
96
|
+
isDragGhost: false,
|
|
97
|
+
dragHandleProps: Object.assign(Object.assign({}, dragHandleListeners), { ariaLabel: (_a = joinStrings(dragHandleAriaLabel, itemDefinition.label(item))) !== null && _a !== void 0 ? _a : '', ariaDescribedby: attributes['aria-describedby'], disabled: attributes['aria-disabled'] }),
|
|
93
98
|
})));
|
|
94
99
|
}
|
|
100
|
+
export function getBorderRadiusVariant(itemDefinition) {
|
|
101
|
+
var _a;
|
|
102
|
+
return (_a = itemDefinition.borderRadius) !== null && _a !== void 0 ? _a : 'item';
|
|
103
|
+
}
|
|
95
104
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/components/sortable-area/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React, { useEffect, useRef } from 'react';\nimport { DndContext, DragOverlay } from '@dnd-kit/core';\nimport { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport clsx from 'clsx';\n\nimport Portal from '../../components/portal';\nimport { fireNonCancelableEvent } from '../../events';\nimport { joinStrings } from '../../utils/strings';\nimport { SortableAreaProps } from './interfaces';\nimport useDragAndDropReorder from './use-drag-and-drop-reorder';\nimport useLiveAnnouncements from './use-live-announcements';\n\nimport styles from './styles.css.js';\n\nexport { SortableAreaProps };\n\nexport default function SortableArea<Item>({\n items,\n itemDefinition,\n renderItem,\n onItemsChange,\n disableReorder,\n i18nStrings,\n}: SortableAreaProps<Item>) {\n const { activeItemId, setActiveItemId, collisionDetection, handleKeyDown, sensors } = useDragAndDropReorder({\n items,\n itemDefinition,\n });\n const activeItem = activeItemId ? items.find(item => itemDefinition.id(item) === activeItemId) : null;\n const isDragging = activeItemId !== null;\n const announcements = useLiveAnnouncements({ items, itemDefinition, isDragging, ...i18nStrings });\n const portalContainer = usePortalContainer();\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={collisionDetection}\n accessibility={{\n announcements,\n restoreFocus: false,\n screenReaderInstructions: i18nStrings?.dragHandleAriaDescription\n ? { draggable: i18nStrings.dragHandleAriaDescription }\n : undefined,\n container: portalContainer ?? undefined,\n }}\n onDragStart={({ active }) => setActiveItemId(active.id)}\n onDragEnd={event => {\n setActiveItemId(null);\n const { active, over } = event;\n if (over && active.id !== over.id) {\n const movedItem = items.find(item => itemDefinition.id(item) === active.id)!;\n const oldIndex = items.findIndex(item => itemDefinition.id(item) === active.id);\n const newIndex = items.findIndex(item => itemDefinition.id(item) === over.id);\n fireNonCancelableEvent(onItemsChange, { items: arrayMove([...items], oldIndex, newIndex), movedItem });\n }\n }}\n onDragCancel={() => setActiveItemId(null)}\n >\n <SortableContext\n disabled={disableReorder}\n items={items.map(item => itemDefinition.id(item))}\n strategy={verticalListSortingStrategy}\n >\n {items.map(item => (\n <DraggableItem\n key={itemDefinition.id(item)}\n item={item}\n itemDefinition={itemDefinition}\n renderItem={renderItem}\n onKeyDown={handleKeyDown}\n dragHandleAriaLabel={i18nStrings?.dragHandleAriaLabel}\n />\n ))}\n </SortableContext>\n\n <Portal container={portalContainer}>\n {/* Make sure that the drag overlay is above the modal by assigning the z-index as inline style\n so that it prevails over dnd-kit's inline z-index of 999 */}\n <DragOverlay\n className={clsx(styles['drag-overlay'], styles[`drag-overlay-${getBorderRadiusVariant(itemDefinition)}`])}\n dropAnimation={null}\n style={{ zIndex: 5000 }}\n >\n {activeItem &&\n renderItem({\n item: activeItem,\n style: {},\n className: styles.active,\n isDropPlaceholder: true,\n isSortingActive: false,\n isDragGhost: true,\n dragHandleProps: {\n ariaLabel: joinStrings(i18nStrings?.dragHandleAriaLabel, itemDefinition.label(activeItem)) ?? '',\n onKeyDown: handleKeyDown,\n },\n })}\n </DragOverlay>\n </Portal>\n </DndContext>\n );\n}\n\nfunction usePortalContainer() {\n const portalContainerRef = useRef(typeof document !== 'undefined' ? document.createElement('div') : null);\n useEffect(() => {\n const container = portalContainerRef.current;\n if (container && !container.isConnected) {\n document.body.appendChild(container);\n }\n return () => {\n if (container && container.isConnected) {\n document.body.removeChild(container);\n }\n };\n }, []);\n return portalContainerRef.current;\n}\n\nfunction DraggableItem<Item>({\n item,\n itemDefinition,\n dragHandleAriaLabel,\n onKeyDown,\n renderItem,\n}: {\n item: Item;\n itemDefinition: SortableAreaProps.ItemDefinition<Item>;\n dragHandleAriaLabel?: string;\n onKeyDown: (event: React.KeyboardEvent) => void;\n renderItem: (props: SortableAreaProps.RenderItemProps<Item>) => React.ReactNode;\n}) {\n const { isDragging, isSorting, listeners, setNodeRef, transform, attributes } = useSortable({\n id: itemDefinition.id(item),\n });\n const style = { transform: CSS.Translate.toString(transform) };\n const dragHandleListeners = attributes['aria-disabled']\n ? {}\n : {\n ...listeners,\n onKeyDown: (event: React.KeyboardEvent) => {\n if (onKeyDown) {\n onKeyDown(event);\n }\n if (listeners?.onKeyDown) {\n listeners.onKeyDown(event);\n }\n },\n };\n const className = clsx(\n isDragging && clsx(styles.placeholder, styles[`placeholder-${getBorderRadiusVariant(itemDefinition)}`]),\n isSorting && styles.sorting\n );\n return (\n <>\n {renderItem({\n item,\n ref: setNodeRef,\n style,\n className,\n isDropPlaceholder: isDragging,\n isSortingActive: isSorting,\n isDragGhost: false,\n dragHandleProps: {\n ...dragHandleListeners,\n ariaLabel: joinStrings(dragHandleAriaLabel, itemDefinition.label(item)) ?? '',\n ariaDescribedby: attributes['aria-describedby'],\n disabled: attributes['aria-disabled'],\n },\n })}\n </>\n );\n}\n\nexport function getBorderRadiusVariant(\n itemDefinition: SortableAreaProps.ItemDefinition<any>\n): SortableAreaProps.BorderRadiusVariant {\n return itemDefinition.borderRadius ?? 'item';\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { NonCancelableEventHandler } from '../../events';
|
|
3
|
+
import { DragHandleProps } from '../drag-handle/interfaces';
|
|
4
|
+
export interface SortableAreaProps<Item> {
|
|
5
|
+
items: readonly Item[];
|
|
6
|
+
itemDefinition: SortableAreaProps.ItemDefinition<Item>;
|
|
7
|
+
renderItem: (props: SortableAreaProps.RenderItemProps<Item>) => React.ReactNode;
|
|
8
|
+
onItemsChange?: NonCancelableEventHandler<SortableAreaProps.ItemsChangeDetail<Item>>;
|
|
9
|
+
i18nStrings?: SortableAreaProps.DndAreaI18nStrings;
|
|
10
|
+
disableReorder?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare namespace SortableAreaProps {
|
|
13
|
+
interface ItemDefinition<Item> {
|
|
14
|
+
id: (item: Item) => string;
|
|
15
|
+
label: (item: Item) => string;
|
|
16
|
+
borderRadius?: BorderRadiusVariant;
|
|
17
|
+
}
|
|
18
|
+
type BorderRadiusVariant = 'item' | 'container';
|
|
19
|
+
interface RenderItemProps<Item> {
|
|
20
|
+
ref?: React.RefCallback<HTMLElement>;
|
|
21
|
+
item: Item;
|
|
22
|
+
style: React.CSSProperties;
|
|
23
|
+
className?: string;
|
|
24
|
+
isDropPlaceholder: boolean;
|
|
25
|
+
isSortingActive: boolean;
|
|
26
|
+
isDragGhost: boolean;
|
|
27
|
+
dragHandleProps: DragHandleProps;
|
|
28
|
+
}
|
|
29
|
+
interface ItemsChangeDetail<Item> {
|
|
30
|
+
items: Item[];
|
|
31
|
+
movedItem: Item;
|
|
32
|
+
}
|
|
33
|
+
interface DndAreaI18nStrings {
|
|
34
|
+
liveAnnouncementDndStarted?: (position: number, total: number) => string;
|
|
35
|
+
liveAnnouncementDndItemReordered?: (initialPosition: number, currentPosition: number, total: number) => string;
|
|
36
|
+
liveAnnouncementDndItemCommitted?: (initialPosition: number, finalPosition: number, total: number) => string;
|
|
37
|
+
liveAnnouncementDndDiscarded?: string;
|
|
38
|
+
dragHandleAriaLabel?: string;
|
|
39
|
+
dragHandleAriaDescription?: string;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/sortable-area/interfaces.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,WAAW,iBAAiB,CAAC,IAAI;IACrC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,cAAc,EAAE,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACvD,UAAU,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IAChF,aAAa,CAAC,EAAE,yBAAyB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACrF,WAAW,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC;IACnD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,yBAAiB,iBAAiB,CAAC;IACjC,UAAiB,cAAc,CAAC,IAAI;QAClC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;QAC3B,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;QAC9B,YAAY,CAAC,EAAE,mBAAmB,CAAC;KACpC;IAED,KAAY,mBAAmB,GAAG,MAAM,GAAG,WAAW,CAAC;IAEvD,UAAiB,eAAe,CAAC,IAAI;QACnC,GAAG,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;QACrB,eAAe,EAAE,eAAe,CAAC;KAClC;IAED,UAAiB,iBAAiB,CAAC,IAAI;QACrC,KAAK,EAAE,IAAI,EAAE,CAAC;QACd,SAAS,EAAE,IAAI,CAAC;KACjB;IAED,UAAiB,kBAAkB;QACjC,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;QACzE,gCAAgC,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;QAC/G,gCAAgC,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;QAC7G,4BAA4B,CAAC,EAAE,MAAM,CAAC;QACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAC;KACpC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../../src/internal/components/sortable-area/interfaces.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NonCancelableEventHandler } from '../../events';\nimport { DragHandleProps } from '../drag-handle/interfaces';\n\nexport interface SortableAreaProps<Item> {\n items: readonly Item[];\n itemDefinition: SortableAreaProps.ItemDefinition<Item>;\n renderItem: (props: SortableAreaProps.RenderItemProps<Item>) => React.ReactNode;\n onItemsChange?: NonCancelableEventHandler<SortableAreaProps.ItemsChangeDetail<Item>>;\n i18nStrings?: SortableAreaProps.DndAreaI18nStrings;\n disableReorder?: boolean;\n}\n\nexport namespace SortableAreaProps {\n export interface ItemDefinition<Item> {\n id: (item: Item) => string;\n label: (item: Item) => string;\n borderRadius?: BorderRadiusVariant;\n }\n\n export type BorderRadiusVariant = 'item' | 'container';\n\n export interface RenderItemProps<Item> {\n ref?: React.RefCallback<HTMLElement>;\n item: Item;\n style: React.CSSProperties;\n className?: string;\n isDropPlaceholder: boolean;\n isSortingActive: boolean;\n isDragGhost: boolean;\n dragHandleProps: DragHandleProps;\n }\n\n export interface ItemsChangeDetail<Item> {\n items: Item[];\n movedItem: Item;\n }\n\n export interface DndAreaI18nStrings {\n liveAnnouncementDndStarted?: (position: number, total: number) => string;\n liveAnnouncementDndItemReordered?: (initialPosition: number, currentPosition: number, total: number) => string;\n liveAnnouncementDndItemCommitted?: (initialPosition: number, finalPosition: number, total: number) => string;\n liveAnnouncementDndDiscarded?: string;\n dragHandleAriaLabel?: string;\n dragHandleAriaDescription?: string;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/sortable-area/keyboard-sensor/defaults.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5D,eAAO,MAAM,oBAAoB,EAAE,aAIlC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../../../src/internal/components/sortable-area/keyboard-sensor/defaults.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,EAAE,YAAY,EAAiB,MAAM,eAAe,CAAC;AAE5D,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;IAC/C,MAAM,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;IAC1B,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;CAC9C,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { KeyboardCode, KeyboardCodes } from '@dnd-kit/core';\n\nexport const defaultKeyboardCodes: KeyboardCodes = {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter],\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/sortable-area/keyboard-sensor/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAyB3E,qBAAa,cAAe,YAAW,cAAc;IAMvC,OAAO,CAAC,KAAK;IALlB,iBAAiB,UAAS;IACjC,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,eAAe,CAAY;gBAEf,KAAK,EAAE,mBAAmB;IAc9C,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,MAAM;IAQd,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,qBAAqB,CAAC,CAuBlD;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/internal/components/sortable-area/keyboard-sensor/index.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 React from 'react';\nimport type { Activators, SensorInstance } from '@dnd-kit/core';\nimport { defaultCoordinates } from '@dnd-kit/core';\nimport { KeyboardSensorOptions, KeyboardSensorProps } from '@dnd-kit/core';\nimport {\n Coordinates,\n getOwnerDocument,\n getWindow,\n isKeyboardEvent,\n subtract as getCoordinatesDelta,\n} from '@dnd-kit/utilities';\n\nimport { scrollElementIntoView } from '../../../utils/scrollable-containers';\nimport { defaultKeyboardCodes } from './defaults';\nimport { EventName } from './utilities/events';\nimport { Listeners } from './utilities/listeners';\nimport { applyScroll } from './utilities/scroll';\n\n// Slightly modified version of @dnd-kit's KeyboardSensor:\n// https://github.com/clauderic/dnd-kit/blob/master/packages/core/src/sensors/keyboard/KeyboardSensor.ts\n\n// The only difference is that here, reordering is deactivated on blur, as in\n// this PR: https://github.com/clauderic/dnd-kit/pull/1087.\n// If it is merged, then @dnd-kit's KeyboardSensor can be used instead\n// and all files under this directory (`keyboard-sensor`) can be removed.\n\n// Changes from mainstream are marked below as \"Customization\"\n\nexport class KeyboardSensor implements SensorInstance {\n public autoScrollEnabled = false;\n private referenceCoordinates: Coordinates | undefined;\n private listeners: Listeners;\n private windowListeners: Listeners;\n\n constructor(private props: KeyboardSensorProps) {\n const {\n event: { target },\n } = props;\n\n this.props = props;\n this.listeners = new Listeners(getOwnerDocument(target));\n this.windowListeners = new Listeners(getWindow(target));\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n\n this.attach();\n }\n\n private attach() {\n this.handleStart();\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n\n // Customization: deactivate reordering on blur event\n this.props.event.target?.addEventListener(EventName.Blur, this.handleCancel);\n\n setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown));\n }\n\n private handleStart() {\n const { activeNode, onStart } = this.props;\n const node = activeNode.node.current;\n\n if (node) {\n scrollElementIntoView(node);\n }\n\n onStart(defaultCoordinates);\n }\n\n private handleKeyDown(event: Event) {\n if (isKeyboardEvent(event)) {\n const { active, context, options } = this.props;\n const { keyboardCodes = defaultKeyboardCodes, coordinateGetter } = options;\n const { code } = event;\n\n if (keyboardCodes.end.indexOf(code) !== -1) {\n this.handleEnd(event);\n return;\n }\n\n if (keyboardCodes.cancel.indexOf(code) !== -1) {\n this.handleCancel(event);\n return;\n }\n\n const { collisionRect } = context.current;\n const currentCoordinates = collisionRect ? { x: collisionRect.left, y: collisionRect.top } : defaultCoordinates;\n\n if (!this.referenceCoordinates) {\n this.referenceCoordinates = currentCoordinates;\n }\n\n if (!coordinateGetter) {\n return;\n }\n\n const newCoordinates = coordinateGetter(event, {\n active,\n context: context.current,\n currentCoordinates,\n });\n\n if (newCoordinates) {\n const { scrollableAncestors } = context.current;\n const direction = event.code;\n\n const scrolled = applyScroll({ currentCoordinates, direction, newCoordinates, scrollableAncestors });\n\n if (!scrolled) {\n this.handleMove(event, getCoordinatesDelta(newCoordinates, this.referenceCoordinates));\n }\n }\n }\n }\n\n private handleMove(event: Event, coordinates: Coordinates) {\n const { onMove } = this.props;\n\n event.preventDefault();\n onMove(coordinates);\n }\n\n private handleEnd(event: Event) {\n const { onEnd } = this.props;\n\n event.preventDefault();\n this.detach();\n onEnd();\n }\n\n private handleCancel(event: Event) {\n const { onCancel } = this.props;\n\n // Customization: do not prevent browser from managing native focus\n if (event.type !== EventName.Blur) {\n event.preventDefault();\n }\n this.detach();\n onCancel();\n }\n\n private detach() {\n // Customization: clean up listener for blur event\n this.props.event.target?.removeEventListener(EventName.Blur, this.handleCancel);\n\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n }\n\n static activators: Activators<KeyboardSensorOptions> = [\n {\n eventName: 'onKeyDown' as const,\n handler: (event: React.KeyboardEvent, { keyboardCodes = defaultKeyboardCodes, onActivation }, { active }) => {\n const { code } = event.nativeEvent;\n\n if (keyboardCodes.start.indexOf(code) !== -1) {\n const activator = active.activatorNode.current;\n\n if (activator && event.target !== activator) {\n return false;\n }\n\n event.preventDefault();\n\n onActivation?.({ event: event.nativeEvent });\n\n return true;\n }\n\n return false;\n },\n },\n ];\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/sortable-area/keyboard-sensor/utilities/events.ts"],"names":[],"mappings":"AAEA,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,gBAAgB,qBAAqB;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../../../../src/internal/components/sortable-area/keyboard-sensor/utilities/events.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,MAAM,CAAN,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,gCAAmB,CAAA;IACnB,8BAAiB,CAAA;IACjB,kDAAqC,CAAA;AACvC,CAAC,EALW,SAAS,KAAT,SAAS,QAKpB","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport enum EventName {\n Blur = 'blur',\n Keydown = 'keydown',\n Resize = 'resize',\n VisibilityChange = 'visibilitychange',\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listeners.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/sortable-area/keyboard-sensor/utilities/listeners.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAS;IAGR,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,SAAS,CAAqG;gBAElG,MAAM,EAAE,WAAW,GAAG,IAAI;IAEvC,GAAG,CAAC,CAAC,SAAS,KAAK,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC3B,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO;IAMtC,SAAS,aAEd;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listeners.js","sourceRoot":"","sources":["../../../../../../../src/internal/components/sortable-area/keyboard-sensor/utilities/listeners.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,MAAM,OAAO,SAAS;IAGpB,YAAoB,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;QAFtC,cAAS,GAAkG,EAAE,CAAC;QAa/G,cAAS,GAAG,GAAG,EAAE;YACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAA,EAAA,CAAC,CAAC;QACpF,CAAC,CAAC;IAb+C,CAAC;IAE3C,GAAG,CACR,SAAiB,EACjB,OAA2B,EAC3B,OAA2C;;QAE3C,MAAA,IAAI,CAAC,MAAM,0CAAE,gBAAgB,CAAC,SAAS,EAAE,OAAwB,EAAE,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAwB,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;CAKF","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport class Listeners {\n private listeners: [string, EventListenerOrEventListenerObject, AddEventListenerOptions | boolean | undefined][] = [];\n\n constructor(private target: EventTarget | null) {}\n\n public add<T extends Event>(\n eventName: string,\n handler: (event: T) => void,\n options?: AddEventListenerOptions | boolean\n ) {\n this.target?.addEventListener(eventName, handler as EventListener, options);\n this.listeners.push([eventName, handler as EventListener, options]);\n }\n\n public removeAll = () => {\n this.listeners.forEach(listener => this.target?.removeEventListener(...listener));\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/sortable-area/keyboard-sensor/utilities/scroll.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,WAAW,EAAmC,MAAM,oBAAoB,CAAC;AAsE7F,wBAAgB,WAAW,CAAC,EAC1B,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,mBAAmB,GACpB,EAAE;IACD,kBAAkB,EAAE,WAAW,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,WAAW,CAAC;IAC5B,mBAAmB,EAAE,OAAO,EAAE,CAAC;CAChC,WA0CA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../../../../../src/internal/components/sortable-area/keyboard-sensor/utilities/scroll.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 { KeyboardCode } from '@dnd-kit/core';\nimport { canUseDOM, Coordinates, subtract as getCoordinatesDelta } from '@dnd-kit/utilities';\n\nfunction isDocumentScrollingElement(element: Element | null) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === document.scrollingElement;\n}\n\nfunction getScrollPosition(scrollingContainer: Element) {\n const minScroll = {\n x: 0,\n y: 0,\n };\n const dimensions = isDocumentScrollingElement(scrollingContainer)\n ? {\n height: window.innerHeight,\n width: window.innerWidth,\n }\n : {\n height: scrollingContainer.clientHeight,\n width: scrollingContainer.clientWidth,\n };\n const maxScroll = {\n x: scrollingContainer.scrollWidth - dimensions.width,\n y: scrollingContainer.scrollHeight - dimensions.height,\n };\n\n const isTop = scrollingContainer.scrollTop <= minScroll.y;\n const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n\n return {\n isTop,\n isLeft,\n isBottom,\n isRight,\n maxScroll,\n minScroll,\n };\n}\n\nfunction getScrollElementRect(element: Element) {\n if (element === document.scrollingElement) {\n const { innerWidth, innerHeight } = window;\n\n return {\n top: 0,\n left: 0,\n right: innerWidth,\n bottom: innerHeight,\n width: innerWidth,\n height: innerHeight,\n };\n }\n\n const { top, left, right, bottom } = element.getBoundingClientRect();\n\n return {\n top,\n left,\n right,\n bottom,\n width: element.clientWidth,\n height: element.clientHeight,\n };\n}\n\nexport function applyScroll({\n currentCoordinates,\n direction,\n newCoordinates,\n scrollableAncestors,\n}: {\n currentCoordinates: Coordinates;\n direction: string;\n newCoordinates: Coordinates;\n scrollableAncestors: Element[];\n}) {\n for (const scrollContainer of scrollableAncestors) {\n const coordinatesDelta = getCoordinatesDelta(newCoordinates, currentCoordinates);\n const { isTop, isBottom, maxScroll, minScroll } = getScrollPosition(scrollContainer);\n const scrollElementRect = getScrollElementRect(scrollContainer);\n\n const clampedCoordinates = {\n y: Math.min(\n direction === KeyboardCode.Down\n ? scrollElementRect.bottom - scrollElementRect.height / 2\n : scrollElementRect.bottom,\n Math.max(\n direction === KeyboardCode.Down\n ? scrollElementRect.top\n : scrollElementRect.top + scrollElementRect.height / 2,\n newCoordinates.y\n )\n ),\n };\n\n const canScrollY = (direction === KeyboardCode.Down && !isBottom) || (direction === KeyboardCode.Up && !isTop);\n\n if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y;\n const canScrollToNewCoordinates =\n (direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y) ||\n (direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y);\n\n if (canScrollToNewCoordinates) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n top: newScrollCoordinates,\n behavior: 'smooth',\n });\n return true;\n }\n\n break;\n }\n }\n return false;\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
import './styles.scoped.css';
|
|
3
|
+
export default {
|
|
4
|
+
"drag-overlay": "awsui_drag-overlay_1ksmw_lhzgl_145",
|
|
5
|
+
"drag-overlay-item": "awsui_drag-overlay-item_1ksmw_lhzgl_148",
|
|
6
|
+
"drag-overlay-container": "awsui_drag-overlay-container_1ksmw_lhzgl_175",
|
|
7
|
+
"active": "awsui_active_1ksmw_lhzgl_203",
|
|
8
|
+
"placeholder": "awsui_placeholder_1ksmw_lhzgl_213",
|
|
9
|
+
"placeholder-item": "awsui_placeholder-item_1ksmw_lhzgl_222",
|
|
10
|
+
"placeholder-container": "awsui_placeholder-container_1ksmw_lhzgl_228",
|
|
11
|
+
"sorting": "awsui_sorting_1ksmw_lhzgl_235"
|
|
12
|
+
};
|
|
13
|
+
|
|
@@ -142,23 +142,23 @@
|
|
|
142
142
|
*/
|
|
143
143
|
/* Style used for links in slots/components that are text heavy, to help links stand out among
|
|
144
144
|
surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F73#description */
|
|
145
|
-
.awsui_drag-
|
|
145
|
+
.awsui_drag-overlay_1ksmw_lhzgl_145:not(#\9) {
|
|
146
146
|
box-shadow: var(--shadow-container-active-kl29x9, 0px 1px 1px 1px #e9ebed, 0px 6px 36px rgba(0, 7, 22, 0.1019607843));
|
|
147
147
|
}
|
|
148
|
-
.awsui_drag-overlay-
|
|
148
|
+
.awsui_drag-overlay-item_1ksmw_lhzgl_148:not(#\9) {
|
|
149
149
|
border-start-start-radius: var(--border-radius-item-05df9h, 8px);
|
|
150
150
|
border-start-end-radius: var(--border-radius-item-05df9h, 8px);
|
|
151
151
|
border-end-start-radius: var(--border-radius-item-05df9h, 8px);
|
|
152
152
|
border-end-end-radius: var(--border-radius-item-05df9h, 8px);
|
|
153
153
|
}
|
|
154
|
-
body[data-awsui-focus-visible=true] .awsui_drag-overlay-
|
|
154
|
+
body[data-awsui-focus-visible=true] .awsui_drag-overlay-item_1ksmw_lhzgl_148:not(#\9) {
|
|
155
155
|
position: relative;
|
|
156
156
|
}
|
|
157
|
-
body[data-awsui-focus-visible=true] .awsui_drag-overlay-
|
|
157
|
+
body[data-awsui-focus-visible=true] .awsui_drag-overlay-item_1ksmw_lhzgl_148:not(#\9) {
|
|
158
158
|
outline: 2px dotted transparent;
|
|
159
159
|
outline-offset: calc(0px - 1px);
|
|
160
160
|
}
|
|
161
|
-
body[data-awsui-focus-visible=true] .awsui_drag-overlay-
|
|
161
|
+
body[data-awsui-focus-visible=true] .awsui_drag-overlay-item_1ksmw_lhzgl_148:not(#\9)::before {
|
|
162
162
|
content: " ";
|
|
163
163
|
display: block;
|
|
164
164
|
position: absolute;
|
|
@@ -172,20 +172,20 @@ body[data-awsui-focus-visible=true] .awsui_drag-overlay-item_1kgab_lhzgl_148:not
|
|
|
172
172
|
border-end-end-radius: var(--border-radius-item-05df9h, 8px);
|
|
173
173
|
box-shadow: 0 0 0 2px var(--color-border-item-focused-nv6mhz, #006ce0);
|
|
174
174
|
}
|
|
175
|
-
.awsui_drag-overlay-
|
|
175
|
+
.awsui_drag-overlay-container_1ksmw_lhzgl_175:not(#\9) {
|
|
176
176
|
border-start-start-radius: var(--border-radius-container-wqv1zi, 16px);
|
|
177
177
|
border-start-end-radius: var(--border-radius-container-wqv1zi, 16px);
|
|
178
178
|
border-end-start-radius: var(--border-radius-container-wqv1zi, 16px);
|
|
179
179
|
border-end-end-radius: var(--border-radius-container-wqv1zi, 16px);
|
|
180
180
|
}
|
|
181
|
-
body[data-awsui-focus-visible=true] .awsui_drag-overlay-
|
|
181
|
+
body[data-awsui-focus-visible=true] .awsui_drag-overlay-container_1ksmw_lhzgl_175:not(#\9) {
|
|
182
182
|
position: relative;
|
|
183
183
|
}
|
|
184
|
-
body[data-awsui-focus-visible=true] .awsui_drag-overlay-
|
|
184
|
+
body[data-awsui-focus-visible=true] .awsui_drag-overlay-container_1ksmw_lhzgl_175:not(#\9) {
|
|
185
185
|
outline: 2px dotted transparent;
|
|
186
186
|
outline-offset: calc(0px - 1px);
|
|
187
187
|
}
|
|
188
|
-
body[data-awsui-focus-visible=true] .awsui_drag-overlay-
|
|
188
|
+
body[data-awsui-focus-visible=true] .awsui_drag-overlay-container_1ksmw_lhzgl_175:not(#\9)::before {
|
|
189
189
|
content: " ";
|
|
190
190
|
display: block;
|
|
191
191
|
position: absolute;
|
|
@@ -200,7 +200,7 @@ body[data-awsui-focus-visible=true] .awsui_drag-overlay-container_1kgab_lhzgl_17
|
|
|
200
200
|
box-shadow: 0 0 0 2px var(--color-border-item-focused-nv6mhz, #006ce0);
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
-
.
|
|
203
|
+
.awsui_active_1ksmw_lhzgl_203:not(#\9) {
|
|
204
204
|
font-size: var(--font-size-body-m-x4okxb, 14px);
|
|
205
205
|
line-height: var(--line-height-body-m-30ar75, 20px);
|
|
206
206
|
color: var(--color-text-body-default-7v1jfn, #0f141a);
|
|
@@ -210,38 +210,38 @@ body[data-awsui-focus-visible=true] .awsui_drag-overlay-container_1kgab_lhzgl_17
|
|
|
210
210
|
-moz-osx-font-smoothing: auto;
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
-
.
|
|
213
|
+
.awsui_placeholder_1ksmw_lhzgl_213:not(#\9) {
|
|
214
214
|
position: relative;
|
|
215
215
|
}
|
|
216
|
-
.
|
|
216
|
+
.awsui_placeholder_1ksmw_lhzgl_213:not(#\9):after {
|
|
217
217
|
content: " ";
|
|
218
218
|
position: absolute;
|
|
219
219
|
inset: 0;
|
|
220
220
|
background: var(--color-drag-placeholder-hover-oikifl, #d1f1ff);
|
|
221
221
|
}
|
|
222
|
-
.awsui_placeholder-
|
|
222
|
+
.awsui_placeholder-item_1ksmw_lhzgl_222:not(#\9):after {
|
|
223
223
|
border-start-start-radius: var(--border-radius-item-05df9h, 8px);
|
|
224
224
|
border-start-end-radius: var(--border-radius-item-05df9h, 8px);
|
|
225
225
|
border-end-start-radius: var(--border-radius-item-05df9h, 8px);
|
|
226
226
|
border-end-end-radius: var(--border-radius-item-05df9h, 8px);
|
|
227
227
|
}
|
|
228
|
-
.awsui_placeholder-
|
|
228
|
+
.awsui_placeholder-container_1ksmw_lhzgl_228:not(#\9):after {
|
|
229
229
|
border-start-start-radius: var(--border-radius-container-wqv1zi, 16px);
|
|
230
230
|
border-start-end-radius: var(--border-radius-container-wqv1zi, 16px);
|
|
231
231
|
border-end-start-radius: var(--border-radius-container-wqv1zi, 16px);
|
|
232
232
|
border-end-end-radius: var(--border-radius-container-wqv1zi, 16px);
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
.
|
|
235
|
+
.awsui_sorting_1ksmw_lhzgl_235:not(#\9) {
|
|
236
236
|
transition: transform var(--motion-duration-transition-quick-6npj01, 90ms) var(--motion-easing-transition-quick-l9jfsx, linear);
|
|
237
237
|
}
|
|
238
238
|
@media (prefers-reduced-motion: reduce) {
|
|
239
|
-
.
|
|
239
|
+
.awsui_sorting_1ksmw_lhzgl_235:not(#\9) {
|
|
240
240
|
animation: none;
|
|
241
241
|
transition: none;
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
-
.awsui-motion-disabled .
|
|
244
|
+
.awsui-motion-disabled .awsui_sorting_1ksmw_lhzgl_235:not(#\9), .awsui-mode-entering .awsui_sorting_1ksmw_lhzgl_235:not(#\9) {
|
|
245
245
|
animation: none;
|
|
246
246
|
transition: none;
|
|
247
247
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
// es-module interop with Babel and Typescript
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
module.exports.default = {
|
|
5
|
+
"drag-overlay": "awsui_drag-overlay_1ksmw_lhzgl_145",
|
|
6
|
+
"drag-overlay-item": "awsui_drag-overlay-item_1ksmw_lhzgl_148",
|
|
7
|
+
"drag-overlay-container": "awsui_drag-overlay-container_1ksmw_lhzgl_175",
|
|
8
|
+
"active": "awsui_active_1ksmw_lhzgl_203",
|
|
9
|
+
"placeholder": "awsui_placeholder_1ksmw_lhzgl_213",
|
|
10
|
+
"placeholder-item": "awsui_placeholder-item_1ksmw_lhzgl_222",
|
|
11
|
+
"placeholder-container": "awsui_placeholder-container_1ksmw_lhzgl_228",
|
|
12
|
+
"sorting": "awsui_sorting_1ksmw_lhzgl_235"
|
|
13
|
+
};
|
|
14
|
+
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { CollisionDetection, KeyboardCoordinateGetter, UniqueIdentifier } from '@dnd-kit/core';
|
|
3
|
-
import {
|
|
4
|
-
export default function useDragAndDropReorder<
|
|
5
|
-
items: readonly
|
|
3
|
+
import { SortableAreaProps } from './interfaces';
|
|
4
|
+
export default function useDragAndDropReorder<Item>({ items, itemDefinition, }: {
|
|
5
|
+
items: readonly Item[];
|
|
6
|
+
itemDefinition: SortableAreaProps.ItemDefinition<Item>;
|
|
6
7
|
}): {
|
|
7
8
|
activeItemId: UniqueIdentifier | null;
|
|
8
9
|
setActiveItemId: (id: UniqueIdentifier | null) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-drag-and-drop-reorder.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/sortable-area/use-drag-and-drop-reorder.ts"],"names":[],"mappings":"AAEA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAChD,OAAO,EAGL,kBAAkB,EAElB,wBAAwB,EAExB,gBAAgB,EAGjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AA8BjD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,IAAI,EAAE,EAClD,KAAK,EACL,cAAc,GACf,EAAE;IACD,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,cAAc,EAAE,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;CACxD;;0BAK4B,gBAAgB,GAAG,IAAI;;;2BAQpB,mBAAmB;;EAwGlD"}
|
|
@@ -27,7 +27,7 @@ var KeyboardCode;
|
|
|
27
27
|
// We let our collisionDetection and customCoordinateGetter use the same
|
|
28
28
|
// getClosestId function which takes its value from the current component
|
|
29
29
|
// state, to make sure they are always in sync.
|
|
30
|
-
export default function useDragAndDropReorder({ items }) {
|
|
30
|
+
export default function useDragAndDropReorder({ items, itemDefinition, }) {
|
|
31
31
|
const isKeyboard = useRef(false);
|
|
32
32
|
const positionDelta = useRef(0);
|
|
33
33
|
const [activeItemId, setActiveItemId] = useState(null);
|
|
@@ -40,7 +40,7 @@ export default function useDragAndDropReorder({ items }) {
|
|
|
40
40
|
};
|
|
41
41
|
const handleKeyDown = (event) => {
|
|
42
42
|
if (isKeyboard.current && activeItemId) {
|
|
43
|
-
const currentTargetIndex = items.findIndex(item =>
|
|
43
|
+
const currentTargetIndex = items.findIndex(item => itemDefinition.id(item) === activeItemId) + positionDelta.current;
|
|
44
44
|
if (event.key === 'ArrowDown' && currentTargetIndex < items.length - 1) {
|
|
45
45
|
positionDelta.current += 1;
|
|
46
46
|
}
|
|
@@ -57,9 +57,9 @@ export default function useDragAndDropReorder({ items }) {
|
|
|
57
57
|
if (positionDelta.current === 0) {
|
|
58
58
|
return active.id;
|
|
59
59
|
}
|
|
60
|
-
const currentIndex = items.findIndex(item =>
|
|
60
|
+
const currentIndex = items.findIndex(item => itemDefinition.id(item) === active.id);
|
|
61
61
|
const newIndex = Math.max(0, Math.min(items.length - 1, currentIndex + positionDelta.current));
|
|
62
|
-
return items[newIndex]
|
|
62
|
+
return itemDefinition.id(items[newIndex]);
|
|
63
63
|
};
|
|
64
64
|
const collisionDetection = ({ active, collisionRect, droppableContainers, droppableRects, pointerCoordinates, }) => {
|
|
65
65
|
if (isKeyboard.current) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-drag-and-drop-reorder.js","sourceRoot":"","sources":["../../../../../src/internal/components/sortable-area/use-drag-and-drop-reorder.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 React, { useRef, useState } from 'react';\nimport {\n Active,\n closestCenter,\n CollisionDetection,\n DroppableContainer,\n KeyboardCoordinateGetter,\n PointerSensor,\n UniqueIdentifier,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { hasSortableData } from '@dnd-kit/sortable';\n\nimport { SortableAreaProps } from './interfaces';\nimport { KeyboardSensor } from './keyboard-sensor';\n\nenum KeyboardCode {\n Space = 'Space',\n Down = 'ArrowDown',\n Right = 'ArrowRight',\n Left = 'ArrowLeft',\n Up = 'ArrowUp',\n Esc = 'Escape',\n Enter = 'Enter',\n}\n\n// A custom collision detection algorithm is used when using a keyboard to\n// work around an unexpected behavior when reordering items of variable height\n// with the keyboard.\n\n// Neither closestCenter nor closestCorners work really well for this case,\n// because the center (or corners) of a tall rectangle might be so low that it\n// is detected as being closest to the rectangle below of the one it should\n// actually swap with.\n\n// Instead of relying on coordinates, the expected results are achieved by\n// moving X positions up or down in the initially sorted array, depending on\n// the desired direction.\n\n// We let our collisionDetection and customCoordinateGetter use the same\n// getClosestId function which takes its value from the current component\n// state, to make sure they are always in sync.\n\nexport default function useDragAndDropReorder<Item>({\n items,\n itemDefinition,\n}: {\n items: readonly Item[];\n itemDefinition: SortableAreaProps.ItemDefinition<Item>;\n}) {\n const isKeyboard = useRef(false);\n const positionDelta = useRef(0);\n const [activeItemId, setActiveItemId] = useState<UniqueIdentifier | null>(null);\n\n const setActiveItem = (id: UniqueIdentifier | null) => {\n setActiveItemId(id);\n if (!id) {\n isKeyboard.current = false;\n positionDelta.current = 0;\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (isKeyboard.current && activeItemId) {\n const currentTargetIndex =\n items.findIndex(item => itemDefinition.id(item) === activeItemId) + positionDelta.current;\n if (event.key === 'ArrowDown' && currentTargetIndex < items.length - 1) {\n positionDelta.current += 1;\n } else if (event.key === 'ArrowUp' && currentTargetIndex > 0) {\n positionDelta.current -= 1;\n }\n }\n if (activeItemId && isEscape(event.key)) {\n // Prevent modal from closing when pressing Esc to cancel the dragging action\n event.stopPropagation();\n }\n };\n\n const getClosestId = (active: Active) => {\n if (positionDelta.current === 0) {\n return active.id;\n }\n const currentIndex = items.findIndex(item => itemDefinition.id(item) === active.id);\n const newIndex = Math.max(0, Math.min(items.length - 1, currentIndex + positionDelta.current));\n return itemDefinition.id(items[newIndex]);\n };\n\n const collisionDetection: CollisionDetection = ({\n active,\n collisionRect,\n droppableContainers,\n droppableRects,\n pointerCoordinates,\n }) => {\n if (isKeyboard.current) {\n // For keyboard interaction, determine the colliding container based on the movements made by the arrow keys,\n // via getClosestId\n const collidingContainer = getCollidingContainer({\n activeId: active.id,\n closestId: getClosestId(active),\n droppableContainers,\n });\n return collidingContainer ? [collidingContainer] : [];\n } else {\n // For mouse interaction, use the closest center algorithm\n return closestCenter({ active, collisionRect, droppableRects, droppableContainers, pointerCoordinates });\n }\n };\n\n const coordinateGetter: KeyboardCoordinateGetter = (\n event,\n { context: { active, collisionRect, droppableRects, droppableContainers } }\n ) => {\n if (event.code === KeyboardCode.Up || event.code === KeyboardCode.Down) {\n event.preventDefault();\n\n if (!active || !collisionRect) {\n return;\n }\n\n const closestId = getClosestId(active);\n\n if (closestId !== null) {\n const activeDroppable = droppableContainers.get(active.id);\n const newDroppable = droppableContainers.get(closestId);\n const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null;\n const newNode = newDroppable?.node.current;\n\n if (newNode && newRect && activeDroppable && newDroppable) {\n const isAfterActive = isAfter(activeDroppable, newDroppable);\n const offset = {\n x: isAfterActive ? collisionRect.width - newRect.width : 0,\n y: isAfterActive ? collisionRect.height - newRect.height : 0,\n };\n const rectCoordinates = {\n x: newRect.left,\n y: newRect.top,\n };\n\n return {\n x: rectCoordinates.x - offset.x,\n y: rectCoordinates.y - offset.y,\n };\n }\n }\n }\n };\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter,\n onActivation: () => {\n isKeyboard.current = true;\n },\n })\n );\n\n return {\n activeItemId,\n setActiveItemId: setActiveItem,\n collisionDetection,\n coordinateGetter,\n handleKeyDown,\n sensors,\n };\n}\n\nfunction isAfter(a: DroppableContainer, b: DroppableContainer) {\n return hasSortableData(a) && hasSortableData(b) && a.data.current.sortable.index < b.data.current.sortable.index;\n}\n\nfunction getCollidingContainer({\n activeId,\n closestId,\n droppableContainers,\n}: {\n activeId: UniqueIdentifier;\n closestId: UniqueIdentifier;\n droppableContainers: DroppableContainer[];\n}) {\n if (closestId === activeId) {\n return;\n }\n const collidingContainer = droppableContainers.find(({ id }) => id === closestId);\n if (collidingContainer) {\n return {\n id: collidingContainer.id,\n data: {\n droppableContainer: collidingContainer,\n value: 0,\n },\n };\n }\n}\n\nconst isEscape = (key: string) => key === 'Escape' || key === 'Esc';\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DragEndEvent, DragOverEvent, DragStartEvent } from '@dnd-kit/core';
|
|
2
|
+
import { SortableAreaProps } from './interfaces';
|
|
3
|
+
export default function useLiveAnnouncements<Item>({ items, itemDefinition, isDragging, liveAnnouncementDndStarted, liveAnnouncementDndItemReordered, liveAnnouncementDndItemCommitted, liveAnnouncementDndDiscarded, }: {
|
|
4
|
+
items: readonly Item[];
|
|
5
|
+
itemDefinition: SortableAreaProps.ItemDefinition<Item>;
|
|
6
|
+
isDragging: boolean;
|
|
7
|
+
} & SortableAreaProps.DndAreaI18nStrings): {
|
|
8
|
+
onDragStart({ active }: DragStartEvent): string | undefined;
|
|
9
|
+
onDragOver({ active, over }: DragOverEvent): string | undefined;
|
|
10
|
+
onDragEnd({ active, over }: DragEndEvent): string | undefined;
|
|
11
|
+
onDragCancel(): string | undefined;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=use-live-announcements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-live-announcements.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/sortable-area/use-live-announcements.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,IAAI,EAAE,EACjD,KAAK,EACL,cAAc,EACd,UAAU,EACV,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,EAChC,4BAA4B,GAC7B,EAAE;IACD,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,cAAc,EAAE,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACvD,UAAU,EAAE,OAAO,CAAC;CACrB,GAAG,iBAAiB,CAAC,kBAAkB;4BAOZ,cAAc;iCAMT,aAAa;gCAcd,YAAY;;EAW3C"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { useRef } from 'react';
|
|
4
|
-
export default function useLiveAnnouncements({ items, isDragging, liveAnnouncementDndStarted, liveAnnouncementDndItemReordered, liveAnnouncementDndItemCommitted, liveAnnouncementDndDiscarded, }) {
|
|
4
|
+
export default function useLiveAnnouncements({ items, itemDefinition, isDragging, liveAnnouncementDndStarted, liveAnnouncementDndItemReordered, liveAnnouncementDndItemCommitted, liveAnnouncementDndDiscarded, }) {
|
|
5
5
|
const isFirstAnnouncement = useRef(true);
|
|
6
6
|
if (!isDragging) {
|
|
7
7
|
isFirstAnnouncement.current = true;
|
|
@@ -9,7 +9,7 @@ export default function useLiveAnnouncements({ items, isDragging, liveAnnounceme
|
|
|
9
9
|
return {
|
|
10
10
|
onDragStart({ active }) {
|
|
11
11
|
if (active && liveAnnouncementDndStarted) {
|
|
12
|
-
const index = items.findIndex(item =>
|
|
12
|
+
const index = items.findIndex(item => itemDefinition.id(item) === active.id);
|
|
13
13
|
return liveAnnouncementDndStarted(index + 1, items.length);
|
|
14
14
|
}
|
|
15
15
|
},
|
|
@@ -22,15 +22,15 @@ export default function useLiveAnnouncements({ items, isDragging, liveAnnounceme
|
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
const initialIndex = items.findIndex(item =>
|
|
26
|
-
const currentIdex = over ? items.findIndex(item =>
|
|
25
|
+
const initialIndex = items.findIndex(item => itemDefinition.id(item) === active.id);
|
|
26
|
+
const currentIdex = over ? items.findIndex(item => itemDefinition.id(item) === over.id) : initialIndex;
|
|
27
27
|
return liveAnnouncementDndItemReordered(initialIndex + 1, currentIdex + 1, items.length);
|
|
28
28
|
}
|
|
29
29
|
},
|
|
30
30
|
onDragEnd({ active, over }) {
|
|
31
31
|
if (liveAnnouncementDndItemCommitted) {
|
|
32
|
-
const initialIndex = items.findIndex(item =>
|
|
33
|
-
const finalIndex = over ? items.findIndex(item =>
|
|
32
|
+
const initialIndex = items.findIndex(item => itemDefinition.id(item) === active.id);
|
|
33
|
+
const finalIndex = over ? items.findIndex(item => itemDefinition.id(item) === over.id) : initialIndex;
|
|
34
34
|
return liveAnnouncementDndItemCommitted(initialIndex + 1, finalIndex + 1, items.length);
|
|
35
35
|
}
|
|
36
36
|
},
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-live-announcements.js","sourceRoot":"","sources":["../../../../../src/internal/components/sortable-area/use-live-announcements.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAK/B,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAO,EACjD,KAAK,EACL,cAAc,EACd,UAAU,EACV,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,EAChC,4BAA4B,GAKU;IACtC,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE;QACf,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC;KACpC;IAED,OAAO;QACL,WAAW,CAAC,EAAE,MAAM,EAAkB;YACpC,IAAI,MAAM,IAAI,0BAA0B,EAAE;gBACxC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7E,OAAO,0BAA0B,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;aAC5D;QACH,CAAC;QACD,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAiB;YACxC,IAAI,gCAAgC,EAAE;gBACpC,gFAAgF;gBAChF,IAAI,mBAAmB,CAAC,OAAO,EAAE;oBAC/B,mBAAmB,CAAC,OAAO,GAAG,KAAK,CAAC;oBACpC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE;wBAClC,OAAO;qBACR;iBACF;gBACD,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpF,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;gBACvG,OAAO,gCAAgC,CAAC,YAAY,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;aAC1F;QACH,CAAC;QACD,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAgB;YACtC,IAAI,gCAAgC,EAAE;gBACpC,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpF,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;gBACtG,OAAO,gCAAgC,CAAC,YAAY,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;aACzF;QACH,CAAC;QACD,YAAY;YACV,OAAO,4BAA4B,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useRef } from 'react';\nimport { DragEndEvent, DragOverEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { SortableAreaProps } from './interfaces';\n\nexport default function useLiveAnnouncements<Item>({\n items,\n itemDefinition,\n isDragging,\n liveAnnouncementDndStarted,\n liveAnnouncementDndItemReordered,\n liveAnnouncementDndItemCommitted,\n liveAnnouncementDndDiscarded,\n}: {\n items: readonly Item[];\n itemDefinition: SortableAreaProps.ItemDefinition<Item>;\n isDragging: boolean;\n} & SortableAreaProps.DndAreaI18nStrings) {\n const isFirstAnnouncement = useRef(true);\n if (!isDragging) {\n isFirstAnnouncement.current = true;\n }\n\n return {\n onDragStart({ active }: DragStartEvent) {\n if (active && liveAnnouncementDndStarted) {\n const index = items.findIndex(item => itemDefinition.id(item) === active.id);\n return liveAnnouncementDndStarted(index + 1, items.length);\n }\n },\n onDragOver({ active, over }: DragOverEvent) {\n if (liveAnnouncementDndItemReordered) {\n // Don't announce on the first dragOver because it's redundant with onDragStart.\n if (isFirstAnnouncement.current) {\n isFirstAnnouncement.current = false;\n if (!over || over.id === active.id) {\n return;\n }\n }\n const initialIndex = items.findIndex(item => itemDefinition.id(item) === active.id);\n const currentIdex = over ? items.findIndex(item => itemDefinition.id(item) === over.id) : initialIndex;\n return liveAnnouncementDndItemReordered(initialIndex + 1, currentIdex + 1, items.length);\n }\n },\n onDragEnd({ active, over }: DragEndEvent) {\n if (liveAnnouncementDndItemCommitted) {\n const initialIndex = items.findIndex(item => itemDefinition.id(item) === active.id);\n const finalIndex = over ? items.findIndex(item => itemDefinition.id(item) === over.id) : initialIndex;\n return liveAnnouncementDndItemCommitted(initialIndex + 1, finalIndex + 1, items.length);\n }\n },\n onDragCancel() {\n return liveAnnouncementDndDiscarded;\n },\n };\n}\n"]}
|
package/internal/environment.js
CHANGED
package/internal/manifest.json
CHANGED