@cloudscape-design/board-components 3.0.60 → 3.0.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/board/internal.js +12 -7
  2. package/board/internal.js.map +1 -1
  3. package/board/styles.css.js +5 -5
  4. package/board/styles.scoped.css +10 -8
  5. package/board/styles.selectors.js +5 -5
  6. package/board/transition.d.ts +3 -1
  7. package/board/transition.js +32 -24
  8. package/board/transition.js.map +1 -1
  9. package/board-item/styles.css.js +11 -11
  10. package/board-item/styles.scoped.css +27 -26
  11. package/board-item/styles.selectors.js +11 -11
  12. package/internal/drag-handle/styles.css.js +2 -2
  13. package/internal/drag-handle/styles.scoped.css +9 -9
  14. package/internal/drag-handle/styles.selectors.js +2 -2
  15. package/internal/environment.js +1 -1
  16. package/internal/environment.json +1 -1
  17. package/internal/global-drag-state-styles/styles.css.js +3 -3
  18. package/internal/global-drag-state-styles/styles.scoped.css +6 -3
  19. package/internal/global-drag-state-styles/styles.selectors.js +3 -3
  20. package/internal/grid/grid.d.ts +1 -1
  21. package/internal/grid/grid.js +5 -2
  22. package/internal/grid/grid.js.map +1 -1
  23. package/internal/grid/interfaces.d.ts +1 -0
  24. package/internal/grid/interfaces.js.map +1 -1
  25. package/internal/handle/styles.css.js +1 -1
  26. package/internal/handle/styles.scoped.css +4 -3
  27. package/internal/handle/styles.selectors.js +1 -1
  28. package/internal/item-container/get-next-droppable.d.ts +6 -1
  29. package/internal/item-container/get-next-droppable.js +7 -2
  30. package/internal/item-container/get-next-droppable.js.map +1 -1
  31. package/internal/item-container/index.d.ts +1 -0
  32. package/internal/item-container/index.js +30 -18
  33. package/internal/item-container/index.js.map +1 -1
  34. package/internal/item-container/styles.css.js +7 -7
  35. package/internal/item-container/styles.scoped.css +8 -8
  36. package/internal/item-container/styles.selectors.js +7 -7
  37. package/internal/manifest.json +1 -1
  38. package/internal/resize-handle/styles.css.js +2 -2
  39. package/internal/resize-handle/styles.scoped.css +11 -8
  40. package/internal/resize-handle/styles.selectors.js +2 -2
  41. package/internal/screenreader-grid-navigation/styles.css.js +2 -2
  42. package/internal/screenreader-grid-navigation/styles.scoped.css +4 -3
  43. package/internal/screenreader-grid-navigation/styles.selectors.js +2 -2
  44. package/internal/screenreader-only/styles.css.js +1 -1
  45. package/internal/screenreader-only/styles.scoped.css +3 -3
  46. package/internal/screenreader-only/styles.selectors.js +1 -1
  47. package/internal/utils/coordinates.d.ts +3 -1
  48. package/internal/utils/coordinates.js +5 -2
  49. package/internal/utils/coordinates.js.map +1 -1
  50. package/internal/utils/rects.d.ts +6 -1
  51. package/internal/utils/rects.js +7 -1
  52. package/internal/utils/rects.js.map +1 -1
  53. package/internal/utils/screen.d.ts +30 -1
  54. package/internal/utils/screen.js +46 -11
  55. package/internal/utils/screen.js.map +1 -1
  56. package/items-palette/internal.js +3 -1
  57. package/items-palette/internal.js.map +1 -1
  58. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
 
2
2
  import './styles.scoped.css';
3
3
  export default {
4
- "handle": "awsui_handle_umbhe_1bn34_1",
5
- "active": "awsui_active_umbhe_1bn34_9"
4
+ "handle": "awsui_handle_umbhe_1vpmb_1",
5
+ "active": "awsui_active_umbhe_1vpmb_9"
6
6
  };
7
7
 
@@ -1,30 +1,30 @@
1
- .awsui_handle_umbhe_1bn34_1:not(#\9) {
1
+ .awsui_handle_umbhe_1vpmb_1:not(#\9) {
2
2
  cursor: grab;
3
3
  }
4
4
 
5
- .awsui_handle_umbhe_1bn34_1:not(#\9):active {
5
+ .awsui_handle_umbhe_1vpmb_1:not(#\9):active {
6
6
  cursor: grabbing;
7
7
  }
8
8
 
9
- .awsui_handle_umbhe_1bn34_1:not(#\9):not(.awsui_active_umbhe_1bn34_9):focus-visible {
9
+ .awsui_handle_umbhe_1vpmb_1:not(#\9):not(.awsui_active_umbhe_1vpmb_9):focus-visible {
10
10
  position: relative;
11
11
  box-sizing: border-box;
12
12
  outline: 2px dotted transparent;
13
13
  outline-offset: 3px;
14
14
  }
15
- .awsui_handle_umbhe_1bn34_1:not(#\9):not(.awsui_active_umbhe_1bn34_9):focus-visible::before {
15
+ .awsui_handle_umbhe_1vpmb_1:not(#\9):not(.awsui_active_umbhe_1vpmb_9):focus-visible::before {
16
16
  content: " ";
17
17
  display: block;
18
18
  position: absolute;
19
19
  box-sizing: border-box;
20
- left: calc(-1 * 4px);
21
- top: calc(-1 * 4px);
22
- width: calc(100% + 2 * 4px);
23
- height: calc(100% + 2 * 4px);
20
+ inset-inline-start: calc(-1 * 4px);
21
+ inset-block-start: calc(-1 * 4px);
22
+ inline-size: calc(100% + 2 * 4px);
23
+ block-size: calc(100% + 2 * 4px);
24
24
  border-radius: var(--border-radius-control-default-focus-ring-u8zbsz, 4px);
25
25
  border: 2px solid var(--color-border-item-focused-b2ntyl, #0972d3);
26
26
  }
27
27
 
28
- .awsui_active_umbhe_1bn34_9:not(#\9) {
28
+ .awsui_active_umbhe_1vpmb_9:not(#\9) {
29
29
  outline: none;
30
30
  }
@@ -2,7 +2,7 @@
2
2
  // es-module interop with Babel and Typescript
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  module.exports.default = {
5
- "handle": "awsui_handle_umbhe_1bn34_1",
6
- "active": "awsui_active_umbhe_1bn34_9"
5
+ "handle": "awsui_handle_umbhe_1vpmb_1",
6
+ "active": "awsui_active_umbhe_1vpmb_9"
7
7
  };
8
8
 
@@ -1,4 +1,4 @@
1
1
  export var PACKAGE_SOURCE = "board-components";
2
- export var PACKAGE_VERSION = "3.0.0 (ebd35331)";
2
+ export var PACKAGE_VERSION = "3.0.0 (b6e83249)";
3
3
  export var THEME = "open-source-visual-refresh";
4
4
  export var ALWAYS_VISUAL_REFRESH = true;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "PACKAGE_SOURCE": "board-components",
3
- "PACKAGE_VERSION": "3.0.0 (ebd35331)",
3
+ "PACKAGE_VERSION": "3.0.0 (b6e83249)",
4
4
  "THEME": "open-source-visual-refresh",
5
5
  "ALWAYS_VISUAL_REFRESH": true
6
6
  }
@@ -1,8 +1,8 @@
1
1
 
2
2
  import './styles.scoped.css';
3
3
  export default {
4
- "show-grab-cursor": "awsui_show-grab-cursor_1fgk7_1nqmi_1",
5
- "show-resize-cursor": "awsui_show-resize-cursor_1fgk7_1nqmi_5",
6
- "disable-selection": "awsui_disable-selection_1fgk7_1nqmi_9"
4
+ "show-grab-cursor": "awsui_show-grab-cursor_1fgk7_to1u8_1",
5
+ "show-resize-cursor": "awsui_show-resize-cursor_1fgk7_to1u8_5",
6
+ "disable-selection": "awsui_disable-selection_1fgk7_to1u8_12"
7
7
  };
8
8
 
@@ -1,12 +1,15 @@
1
- .awsui_show-grab-cursor_1fgk7_1nqmi_1 *:not(#\9) {
1
+ .awsui_show-grab-cursor_1fgk7_to1u8_1 *:not(#\9) {
2
2
  cursor: grabbing;
3
3
  }
4
4
 
5
- .awsui_show-resize-cursor_1fgk7_1nqmi_5 *:not(#\9) {
5
+ .awsui_show-resize-cursor_1fgk7_to1u8_5 *:not(#\9) {
6
6
  cursor: nwse-resize;
7
7
  }
8
+ .awsui_show-resize-cursor_1fgk7_to1u8_5 *:not(#\9):dir(rtl) {
9
+ cursor: nesw-resize;
10
+ }
8
11
 
9
- .awsui_disable-selection_1fgk7_1nqmi_9 *:not(#\9) {
12
+ .awsui_disable-selection_1fgk7_to1u8_12 *:not(#\9) {
10
13
  -webkit-user-select: none;
11
14
  user-select: none;
12
15
  }
@@ -2,8 +2,8 @@
2
2
  // es-module interop with Babel and Typescript
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  module.exports.default = {
5
- "show-grab-cursor": "awsui_show-grab-cursor_1fgk7_1nqmi_1",
6
- "show-resize-cursor": "awsui_show-resize-cursor_1fgk7_1nqmi_5",
7
- "disable-selection": "awsui_disable-selection_1fgk7_1nqmi_9"
5
+ "show-grab-cursor": "awsui_show-grab-cursor_1fgk7_to1u8_1",
6
+ "show-resize-cursor": "awsui_show-resize-cursor_1fgk7_to1u8_5",
7
+ "disable-selection": "awsui_disable-selection_1fgk7_to1u8_12"
8
8
  };
9
9
 
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import { GridProps } from "./interfaces";
3
- export default function Grid({ layout, children: render, columns }: GridProps): JSX.Element;
3
+ export default function Grid({ layout, children: render, columns, isRtl }: GridProps): JSX.Element;
@@ -19,7 +19,7 @@ const ROWSPAN_HEIGHT = {
19
19
  comfortable: 96,
20
20
  compact: 76,
21
21
  };
22
- export default function Grid({ layout, children: render, columns }) {
22
+ export default function Grid({ layout, children: render, columns, isRtl }) {
23
23
  const gridRef = useRef(null);
24
24
  const [gridWidth, containerQueryRef] = useContainerQuery((entry) => entry.contentBoxWidth, []);
25
25
  const densityMode = useDensityMode(gridRef);
@@ -32,7 +32,10 @@ export default function Grid({ layout, children: render, columns }) {
32
32
  return colspan * cellWidth + (colspan - 1) * gridGap;
33
33
  };
34
34
  const getHeight = (rowspan) => rowspan * rowspanHeight + (rowspan - 1) * gridGap;
35
- const getColOffset = (x) => getWidth(x) + gridGap;
35
+ const getColOffset = (x) => {
36
+ const offset = getWidth(x) + gridGap;
37
+ return !(isRtl === null || isRtl === void 0 ? void 0 : isRtl()) ? offset : -offset;
38
+ };
36
39
  const getRowOffset = (y) => getHeight(y) + gridGap;
37
40
  const gridContext = { getWidth, getHeight, getColOffset, getRowOffset };
38
41
  const children = render === null || render === void 0 ? void 0 : render(gridContext);
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../../../src/internal/grid/grid.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 { useContainerQuery } from \"@cloudscape-design/component-toolkit\";\nimport { useDensityMode } from \"@cloudscape-design/component-toolkit/internal\";\nimport clsx from \"clsx\";\nimport { Children, useRef } from \"react\";\nimport { useMergeRefs } from \"../utils/use-merge-refs\";\nimport { zipTwoArrays } from \"../utils/zip-arrays\";\n\nimport { GridProps } from \"./interfaces\";\nimport GridItem from \"./item\";\nimport styles from \"./styles.css.js\";\n\n/* Matches grid gap in CSS. */\nconst GRID_GAP = {\n comfortable: 20,\n compact: 16,\n};\n\n/* Matches grid-auto-rows in CSS. */\nconst ROWSPAN_HEIGHT = {\n comfortable: 96,\n compact: 76,\n};\n\nexport default function Grid({ layout, children: render, columns }: GridProps) {\n const gridRef = useRef<HTMLDivElement>(null);\n const [gridWidth, containerQueryRef] = useContainerQuery((entry) => entry.contentBoxWidth, []);\n const densityMode = useDensityMode(gridRef);\n const gridGap = GRID_GAP[densityMode];\n const rowspanHeight = ROWSPAN_HEIGHT[densityMode];\n\n // The below getters translate relative grid units into size/offset values in pixels.\n const getWidth = (colspan: number) => {\n colspan = Math.min(columns, colspan);\n const cellWidth = ((gridWidth || 0) - (columns - 1) * gridGap) / columns;\n return colspan * cellWidth + (colspan - 1) * gridGap;\n };\n const getHeight = (rowspan: number) => rowspan * rowspanHeight + (rowspan - 1) * gridGap;\n const getColOffset = (x: number) => getWidth(x) + gridGap;\n const getRowOffset = (y: number) => getHeight(y) + gridGap;\n\n const gridContext = { getWidth, getHeight, getColOffset, getRowOffset };\n const children = render?.(gridContext);\n\n const zipped = zipTwoArrays(layout, Children.toArray(children));\n\n const ref = useMergeRefs(gridRef, containerQueryRef);\n return (\n <div ref={ref} className={clsx(styles.grid, styles[`grid-${densityMode}`], styles[`columns-${columns}`])}>\n {zipped.map(([item, children]) => (\n <GridItem key={item.id} item={item}>\n {children}\n </GridItem>\n ))}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../../../src/internal/grid/grid.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 { useContainerQuery } from \"@cloudscape-design/component-toolkit\";\nimport { useDensityMode } from \"@cloudscape-design/component-toolkit/internal\";\nimport clsx from \"clsx\";\nimport { Children, useRef } from \"react\";\nimport { useMergeRefs } from \"../utils/use-merge-refs\";\nimport { zipTwoArrays } from \"../utils/zip-arrays\";\n\nimport { GridProps } from \"./interfaces\";\nimport GridItem from \"./item\";\nimport styles from \"./styles.css.js\";\n\n/* Matches grid gap in CSS. */\nconst GRID_GAP = {\n comfortable: 20,\n compact: 16,\n};\n\n/* Matches grid-auto-rows in CSS. */\nconst ROWSPAN_HEIGHT = {\n comfortable: 96,\n compact: 76,\n};\n\nexport default function Grid({ layout, children: render, columns, isRtl }: GridProps) {\n const gridRef = useRef<HTMLDivElement>(null);\n const [gridWidth, containerQueryRef] = useContainerQuery((entry) => entry.contentBoxWidth, []);\n const densityMode = useDensityMode(gridRef);\n const gridGap = GRID_GAP[densityMode];\n const rowspanHeight = ROWSPAN_HEIGHT[densityMode];\n\n // The below getters translate relative grid units into size/offset values in pixels.\n const getWidth = (colspan: number) => {\n colspan = Math.min(columns, colspan);\n const cellWidth = ((gridWidth || 0) - (columns - 1) * gridGap) / columns;\n return colspan * cellWidth + (colspan - 1) * gridGap;\n };\n const getHeight = (rowspan: number) => rowspan * rowspanHeight + (rowspan - 1) * gridGap;\n const getColOffset = (x: number) => {\n const offset = getWidth(x) + gridGap;\n return !isRtl?.() ? offset : -offset;\n };\n const getRowOffset = (y: number) => getHeight(y) + gridGap;\n\n const gridContext = { getWidth, getHeight, getColOffset, getRowOffset };\n const children = render?.(gridContext);\n\n const zipped = zipTwoArrays(layout, Children.toArray(children));\n\n const ref = useMergeRefs(gridRef, containerQueryRef);\n return (\n <div ref={ref} className={clsx(styles.grid, styles[`grid-${densityMode}`], styles[`columns-${columns}`])}>\n {zipped.map(([item, children]) => (\n <GridItem key={item.id} item={item}>\n {children}\n </GridItem>\n ))}\n </div>\n );\n}\n"]}
@@ -4,6 +4,7 @@ export interface GridProps {
4
4
  layout: GridLayoutItem[];
5
5
  columns: number;
6
6
  children?: (context: GridContext) => ReactNode;
7
+ isRtl?: () => boolean;
7
8
  }
8
9
  export interface GridContext {
9
10
  getWidth: (colspan: number) => number;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/internal/grid/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 { ReactNode } from \"react\";\nimport { GridLayoutItem } from \"../interfaces\";\n\nexport interface GridProps {\n layout: GridLayoutItem[];\n columns: number;\n children?: (context: GridContext) => ReactNode;\n}\n\nexport interface GridContext {\n getWidth: (colspan: number) => number;\n getHeight: (rowspan: number) => number;\n getColOffset: (x: number) => number;\n getRowOffset: (y: number) => number;\n}\n"]}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/internal/grid/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 { ReactNode } from \"react\";\nimport { GridLayoutItem } from \"../interfaces\";\n\nexport interface GridProps {\n layout: GridLayoutItem[];\n columns: number;\n children?: (context: GridContext) => ReactNode;\n isRtl?: () => boolean;\n}\n\nexport interface GridContext {\n getWidth: (colspan: number) => number;\n getHeight: (rowspan: number) => number;\n getColOffset: (x: number) => number;\n getRowOffset: (y: number) => number;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
 
2
2
  import './styles.scoped.css';
3
3
  export default {
4
- "handle": "awsui_handle_cc1pu_y0i9t_1"
4
+ "handle": "awsui_handle_cc1pu_1avwz_1"
5
5
  };
6
6
 
@@ -1,11 +1,12 @@
1
- .awsui_handle_cc1pu_y0i9t_1:not(#\9) {
1
+ .awsui_handle_cc1pu_1avwz_1:not(#\9) {
2
2
  -webkit-appearance: none;
3
3
  appearance: none;
4
4
  background: transparent;
5
5
  border: none;
6
- padding: var(--space-scaled-xxs-7597g1, 4px);
6
+ padding-block: var(--space-scaled-xxs-7597g1, 4px);
7
+ padding-inline: var(--space-scaled-xxs-7597g1, 4px);
7
8
  color: var(--color-text-interactive-default-lnx6lk, #414d5c);
8
9
  }
9
- .awsui_handle_cc1pu_y0i9t_1:not(#\9):hover {
10
+ .awsui_handle_cc1pu_1avwz_1:not(#\9):hover {
10
11
  color: var(--color-text-interactive-hover-mj8add, #000716);
11
12
  }
@@ -2,6 +2,6 @@
2
2
  // es-module interop with Babel and Typescript
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  module.exports.default = {
5
- "handle": "awsui_handle_cc1pu_y0i9t_1"
5
+ "handle": "awsui_handle_cc1pu_1avwz_1"
6
6
  };
7
7
 
@@ -4,4 +4,9 @@ import { Direction, ItemId } from "../interfaces";
4
4
  * Finds closest droppable to provided draggable element and direction.
5
5
  * Returns null if there is no droppable in the given direction.
6
6
  */
7
- export declare function getNextDroppable(draggableElement: HTMLElement, droppables: readonly [ItemId, Droppable][], direction: Direction): null | ItemId;
7
+ export declare function getNextDroppable({ draggableElement, droppables, direction, isRtl, }: {
8
+ draggableElement: HTMLElement;
9
+ droppables: readonly [ItemId, Droppable][];
10
+ direction: Direction;
11
+ isRtl: boolean;
12
+ }): null | ItemId;
@@ -6,11 +6,16 @@ import { getNormalizedElementRect } from "../utils/screen";
6
6
  * Finds closest droppable to provided draggable element and direction.
7
7
  * Returns null if there is no droppable in the given direction.
8
8
  */
9
- export function getNextDroppable(draggableElement, droppables, direction) {
9
+ export function getNextDroppable({ draggableElement, droppables, direction, isRtl, }) {
10
10
  var _a;
11
11
  const draggableRect = getNormalizedElementRect(draggableElement);
12
12
  const sources = new Map(droppables.map(([id, d]) => [getNormalizedElementRect(d.element), id]));
13
- const closest = getClosestNeighbor(draggableRect, [...sources.keys()], direction);
13
+ const closest = getClosestNeighbor({
14
+ target: draggableRect,
15
+ sources: [...sources.keys()],
16
+ direction,
17
+ isRtl,
18
+ });
14
19
  return (_a = sources.get(closest)) !== null && _a !== void 0 ? _a : null;
15
20
  }
16
21
  //# sourceMappingURL=get-next-droppable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-next-droppable.js","sourceRoot":"","sources":["../../../../src/internal/item-container/get-next-droppable.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAItC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,gBAA6B,EAC7B,UAA0C,EAC1C,SAAoB;;IAEpB,MAAM,aAAa,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,OAAO,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAClF,OAAO,MAAA,OAAO,CAAC,GAAG,CAAC,OAAkB,CAAC,mCAAI,IAAI,CAAC;AACjD,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Droppable } from \"../dnd-controller/controller\";\nimport { Direction, ItemId } from \"../interfaces\";\nimport { getClosestNeighbor } from \"../utils/rects\";\nimport { getNormalizedElementRect } from \"../utils/screen\";\n\n/**\n * Finds closest droppable to provided draggable element and direction.\n * Returns null if there is no droppable in the given direction.\n */\nexport function getNextDroppable(\n draggableElement: HTMLElement,\n droppables: readonly [ItemId, Droppable][],\n direction: Direction,\n): null | ItemId {\n const draggableRect = getNormalizedElementRect(draggableElement);\n const sources = new Map(droppables.map(([id, d]) => [getNormalizedElementRect(d.element), id]));\n const closest = getClosestNeighbor(draggableRect, [...sources.keys()], direction);\n return sources.get(closest as DOMRect) ?? null;\n}\n"]}
1
+ {"version":3,"file":"get-next-droppable.js","sourceRoot":"","sources":["../../../../src/internal/item-container/get-next-droppable.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAItC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,KAAK,GAMN;;IACC,MAAM,aAAa,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,OAAO,GAAG,kBAAkB,CAAC;QACjC,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,SAAS;QACT,KAAK;KACN,CAAC,CAAC;IACH,OAAO,MAAA,OAAO,CAAC,GAAG,CAAC,OAAkB,CAAC,mCAAI,IAAI,CAAC;AACjD,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Droppable } from \"../dnd-controller/controller\";\nimport { Direction, ItemId } from \"../interfaces\";\nimport { getClosestNeighbor } from \"../utils/rects\";\nimport { getNormalizedElementRect } from \"../utils/screen\";\n\n/**\n * Finds closest droppable to provided draggable element and direction.\n * Returns null if there is no droppable in the given direction.\n */\nexport function getNextDroppable({\n draggableElement,\n droppables,\n direction,\n isRtl,\n}: {\n draggableElement: HTMLElement;\n droppables: readonly [ItemId, Droppable][];\n direction: Direction;\n isRtl: boolean;\n}): null | ItemId {\n const draggableRect = getNormalizedElementRect(draggableElement);\n const sources = new Map(droppables.map(([id, d]) => [getNormalizedElementRect(d.element), id]));\n const closest = getClosestNeighbor({\n target: draggableRect,\n sources: [...sources.keys()],\n direction,\n isRtl,\n });\n return sources.get(closest as DOMRect) ?? null;\n}\n"]}
@@ -47,6 +47,7 @@ export interface ItemContainerProps {
47
47
  };
48
48
  onKeyMove?(direction: Direction): void;
49
49
  children: (hasDropTarget: boolean) => ReactNode;
50
+ isRtl: () => boolean;
50
51
  }
51
52
  export declare const ItemContainer: import("react").ForwardRefExoticComponent<ItemContainerProps & import("react").RefAttributes<ItemContainerRef>>;
52
53
  export {};
@@ -7,7 +7,7 @@ import { createContext, forwardRef, useContext, useEffect, useImperativeHandle,
7
7
  import { createPortal } from "react-dom";
8
8
  import { useDragSubscription, useDraggable, } from "../dnd-controller/controller";
9
9
  import { Coordinates } from "../utils/coordinates";
10
- import { getNormalizedElementRect } from "../utils/screen";
10
+ import { getLogicalBoundingClientRect, getLogicalClientX, getNormalizedElementRect } from "../utils/screen";
11
11
  import { throttle } from "../utils/throttle";
12
12
  import { getCollisionRect } from "./get-collision-rect";
13
13
  import { getNextDroppable } from "./get-next-droppable";
@@ -21,7 +21,7 @@ export function useItemContext() {
21
21
  return ctx;
22
22
  }
23
23
  export const ItemContainer = forwardRef(ItemContainerComponent);
24
- function ItemContainerComponent({ item, placed, acquired, inTransition, transform, getItemSize, onKeyMove, children }, ref) {
24
+ function ItemContainerComponent({ item, placed, acquired, inTransition, transform, getItemSize, onKeyMove, children, isRtl }, ref) {
25
25
  var _a, _b, _c, _d, _e, _f;
26
26
  const originalSizeRef = useRef({ width: 0, height: 0 });
27
27
  const pointerOffsetRef = useRef(new Coordinates({ x: 0, y: 0 }));
@@ -83,7 +83,7 @@ function ItemContainerComponent({ item, placed, acquired, inTransition, transfor
83
83
  useEffect(() => {
84
84
  const onPointerMove = throttle((event) => {
85
85
  var _a, _b, _c, _d;
86
- const coordinates = Coordinates.fromEvent(event);
86
+ const coordinates = Coordinates.fromEvent(event, { isRtl: isRtl() });
87
87
  draggableApi.updateTransition(new Coordinates({
88
88
  x: Math.max(coordinates.x, (_b = (_a = pointerBoundariesRef.current) === null || _a === void 0 ? void 0 : _a.x) !== null && _b !== void 0 ? _b : Number.NEGATIVE_INFINITY),
89
89
  y: Math.max(coordinates.y, (_d = (_c = pointerBoundariesRef.current) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : Number.NEGATIVE_INFINITY),
@@ -146,7 +146,12 @@ function ItemContainerComponent({ item, placed, acquired, inTransition, transfor
146
146
  function handleInsert(direction) {
147
147
  // Find the closest droppable (in the direction) to the item.
148
148
  const droppables = draggableApi.getDroppables();
149
- const nextDroppable = getNextDroppable(itemRef.current, droppables, direction);
149
+ const nextDroppable = getNextDroppable({
150
+ draggableElement: itemRef.current,
151
+ droppables,
152
+ direction,
153
+ isRtl: isRtl(),
154
+ });
150
155
  if (!nextDroppable) {
151
156
  // TODO: add announcement
152
157
  // Context: the keyboard insertion only works when there is some droppable area in the specified direction.
@@ -202,28 +207,35 @@ function ItemContainerComponent({ item, placed, acquired, inTransition, transfor
202
207
  }
203
208
  function onDragHandlePointerDown(event) {
204
209
  // Calculate the offset between item's top-left corner and the pointer landing position.
205
- const rect = itemRef.current.getBoundingClientRect();
206
- pointerOffsetRef.current = new Coordinates({ x: event.clientX - rect.left, y: event.clientY - rect.top });
207
- originalSizeRef.current = { width: rect.width, height: rect.height };
210
+ const rect = getLogicalBoundingClientRect(itemRef.current);
211
+ const clientX = getLogicalClientX(event, isRtl());
212
+ const clientY = event.clientY;
213
+ pointerOffsetRef.current = new Coordinates({
214
+ x: clientX - rect.insetInlineStart,
215
+ y: clientY - rect.insetBlockStart,
216
+ });
217
+ originalSizeRef.current = { width: rect.inlineSize, height: rect.blockSize };
208
218
  pointerBoundariesRef.current = null;
209
- draggableApi.start(!placed ? "insert" : "reorder", "pointer", Coordinates.fromEvent(event));
219
+ draggableApi.start(!placed ? "insert" : "reorder", "pointer", Coordinates.fromEvent(event, { isRtl: isRtl() }));
210
220
  }
211
221
  function onDragHandleKeyDown(event) {
212
222
  onHandleKeyDown("drag", event);
213
223
  }
214
224
  function onResizeHandlePointerDown(event) {
215
225
  // Calculate the offset between item's bottom-right corner and the pointer landing position.
216
- const rect = itemRef.current.getBoundingClientRect();
217
- pointerOffsetRef.current = new Coordinates({ x: event.clientX - rect.right, y: event.clientY - rect.bottom });
218
- originalSizeRef.current = { width: rect.width, height: rect.height };
226
+ const rect = getLogicalBoundingClientRect(itemRef.current);
227
+ const clientX = getLogicalClientX(event, isRtl());
228
+ const clientY = event.clientY;
229
+ pointerOffsetRef.current = new Coordinates({ x: clientX - rect.insetInlineEnd, y: clientY - rect.insetBlockEnd });
230
+ originalSizeRef.current = { width: rect.inlineSize, height: rect.blockSize };
219
231
  // Calculate boundaries below which the cursor cannot move.
220
232
  const minWidth = getItemSize(null).minWidth;
221
233
  const minHeight = getItemSize(null).minHeight;
222
234
  pointerBoundariesRef.current = new Coordinates({
223
- x: event.clientX - rect.width + minWidth,
224
- y: event.clientY - rect.height + minHeight,
235
+ x: clientX - rect.inlineSize + minWidth,
236
+ y: clientY - rect.blockSize + minHeight,
225
237
  });
226
- draggableApi.start("resize", "pointer", Coordinates.fromEvent(event));
238
+ draggableApi.start("resize", "pointer", Coordinates.fromEvent(event, { isRtl: isRtl() }));
227
239
  }
228
240
  function onResizeHandleKeyDown(event) {
229
241
  onHandleKeyDown("resize", event);
@@ -236,10 +248,10 @@ function ItemContainerComponent({ item, placed, acquired, inTransition, transfor
236
248
  if (transition && transition.interactionType === "pointer") {
237
249
  // Adjust the dragged/resized item to the pointer's location.
238
250
  itemTransitionClassNames.push(transition.operation === "resize" ? styles.resized : styles.dragged);
239
- itemTransitionStyle.left = (_c = transition.positionTransform) === null || _c === void 0 ? void 0 : _c.x;
240
- itemTransitionStyle.top = (_d = transition.positionTransform) === null || _d === void 0 ? void 0 : _d.y;
241
- itemTransitionStyle.width = (_e = transition.sizeTransform) === null || _e === void 0 ? void 0 : _e.width;
242
- itemTransitionStyle.height = (_f = transition.sizeTransform) === null || _f === void 0 ? void 0 : _f.height;
251
+ itemTransitionStyle.insetInlineStart = (_c = transition.positionTransform) === null || _c === void 0 ? void 0 : _c.x;
252
+ itemTransitionStyle.insetBlockStart = (_d = transition.positionTransform) === null || _d === void 0 ? void 0 : _d.y;
253
+ itemTransitionStyle.inlineSize = (_e = transition.sizeTransform) === null || _e === void 0 ? void 0 : _e.width;
254
+ itemTransitionStyle.blockSize = (_f = transition.sizeTransform) === null || _f === void 0 ? void 0 : _f.height;
243
255
  itemTransitionStyle.pointerEvents = "none";
244
256
  }
245
257
  if (isHidden) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/internal/item-container/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { CSS as CSSUtil } from \"@dnd-kit/utilities\";\nimport clsx from \"clsx\";\nimport {\n CSSProperties,\n KeyboardEvent,\n ReactNode,\n PointerEvent as ReactPointerEvent,\n Ref,\n RefObject,\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n DragAndDropData,\n DropTargetContext,\n InteractionType,\n Operation,\n useDragSubscription,\n useDraggable,\n} from \"../dnd-controller/controller\";\nimport { BoardItemDefinitionBase, Direction, ItemId, Transform } from \"../interfaces\";\nimport { Coordinates } from \"../utils/coordinates\";\nimport { getNormalizedElementRect } from \"../utils/screen\";\nimport { throttle } from \"../utils/throttle\";\nimport { getCollisionRect } from \"./get-collision-rect\";\nimport { getNextDroppable } from \"./get-next-droppable\";\nimport styles from \"./styles.css.js\";\n\nexport interface ItemContainerRef {\n focusDragHandle(): void;\n}\n\ninterface ItemContextType {\n isActive: boolean;\n dragHandle: {\n ref: RefObject<HTMLButtonElement>;\n onPointerDown(event: ReactPointerEvent): void;\n onKeyDown(event: KeyboardEvent): void;\n isActive: boolean;\n };\n resizeHandle: null | {\n onPointerDown(event: ReactPointerEvent): void;\n onKeyDown(event: KeyboardEvent): void;\n isActive: boolean;\n };\n}\n\nexport const ItemContext = createContext<ItemContextType | null>(null);\n\nexport function useItemContext() {\n const ctx = useContext(ItemContext);\n if (!ctx) {\n throw new Error(\"Unable to find BoardItem context.\");\n }\n return ctx;\n}\n\ninterface Transition {\n itemId: ItemId;\n operation: Operation;\n interactionType: InteractionType;\n sizeTransform: null | { width: number; height: number };\n positionTransform: null | { x: number; y: number };\n hasDropTarget?: boolean;\n}\n\n/**\n * Defines item's parameters and its relation with the layout.\n *\n * `item` - the unique board item base object to be used in d&d context.\n * `placed` - specifies if the item already belongs to the board.\n * `acquired` - specifies if the item is essentially a copy temporarily acquired by a droppable but not submitted yet.\n * `inTransition` - specifies if the item is currently being moved.\n * `transform` - specifies if the item's position needs to be altered.\n * `getItemSize` - item size getter that takes droppable context as argument.\n * `onKeyMove` - a callback that fires when arrow keys are pressed in drag- or resize handle.\n */\nexport interface ItemContainerProps {\n item: BoardItemDefinitionBase<unknown>;\n placed: boolean;\n acquired: boolean;\n inTransition: boolean;\n transform: Transform | undefined;\n getItemSize: (context: null | DropTargetContext) => {\n width: number;\n minWidth: number;\n maxWidth: number;\n height: number;\n minHeight: number;\n maxHeight: number;\n };\n onKeyMove?(direction: Direction): void;\n children: (hasDropTarget: boolean) => ReactNode;\n}\n\nexport const ItemContainer = forwardRef(ItemContainerComponent);\n\nfunction ItemContainerComponent(\n { item, placed, acquired, inTransition, transform, getItemSize, onKeyMove, children }: ItemContainerProps,\n ref: Ref<ItemContainerRef>,\n) {\n const originalSizeRef = useRef({ width: 0, height: 0 });\n const pointerOffsetRef = useRef(new Coordinates({ x: 0, y: 0 }));\n const pointerBoundariesRef = useRef<null | Coordinates>(null);\n const [transition, setTransition] = useState<null | Transition>(null);\n const [isHidden, setIsHidden] = useState(false);\n const muteEventsRef = useRef(false);\n const itemRef = useRef<HTMLDivElement>(null);\n const draggableApi = useDraggable({\n draggableItem: item,\n getCollisionRect: (operation, coordinates, dropTarget) => {\n const sizeOverride = operation === \"insert\" && dropTarget ? getItemSize(dropTarget) : null;\n return getCollisionRect(operation, itemRef.current!, coordinates, sizeOverride);\n },\n });\n\n function updateTransition({\n operation,\n interactionType,\n draggableItem,\n collisionRect,\n coordinates,\n dropTarget,\n }: DragAndDropData) {\n if (item.id === draggableItem.id) {\n const [width, height] = [collisionRect.right - collisionRect.left, collisionRect.bottom - collisionRect.top];\n const pointerOffset = pointerOffsetRef.current;\n\n if (operation === \"resize\") {\n setTransition({\n operation,\n interactionType,\n itemId: draggableItem.id,\n sizeTransform: {\n width: Math.max(getItemSize(null).minWidth, Math.min(getItemSize(null).maxWidth, width - pointerOffset.x)),\n height: Math.max(getItemSize(null).minHeight, height - pointerOffset.y),\n },\n positionTransform: null,\n });\n } else if (operation === \"insert\" || operation === \"reorder\") {\n setTransition({\n operation,\n interactionType,\n itemId: draggableItem.id,\n sizeTransform: dropTarget ? getItemSize(dropTarget) : originalSizeRef.current,\n positionTransform: { x: coordinates.x - pointerOffset.x, y: coordinates.y - pointerOffset.y },\n hasDropTarget: !!dropTarget,\n });\n }\n }\n }\n\n useDragSubscription(\"start\", (detail) => updateTransition(detail));\n useDragSubscription(\"update\", (detail) => updateTransition(detail));\n useDragSubscription(\"submit\", () => {\n setTransition(null);\n setIsHidden(false);\n muteEventsRef.current = false;\n });\n useDragSubscription(\"discard\", () => {\n setTransition(null);\n setIsHidden(false);\n muteEventsRef.current = false;\n });\n\n // During the transition listen to pointer move and pointer up events to update/submit transition.\n const transitionInteractionType = transition?.interactionType ?? null;\n const transitionItemId = transition?.itemId ?? null;\n useEffect(() => {\n const onPointerMove = throttle((event: PointerEvent) => {\n const coordinates = Coordinates.fromEvent(event);\n draggableApi.updateTransition(\n new Coordinates({\n x: Math.max(coordinates.x, pointerBoundariesRef.current?.x ?? Number.NEGATIVE_INFINITY),\n y: Math.max(coordinates.y, pointerBoundariesRef.current?.y ?? Number.NEGATIVE_INFINITY),\n }),\n );\n }, 10);\n const onPointerUp = () => {\n onPointerMove.cancel();\n draggableApi.submitTransition();\n };\n\n if (transitionInteractionType === \"pointer\" && transitionItemId === item.id) {\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n }\n return () => {\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n };\n // draggableApi is not expected to change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [item.id, transitionInteractionType, transitionItemId]);\n\n useEffect(() => {\n if (transitionInteractionType === \"keyboard\" && transitionItemId === item.id) {\n const onPointerDown = () => draggableApi.submitTransition();\n window.addEventListener(\"pointerdown\", onPointerDown, true);\n return () => {\n window.removeEventListener(\"pointerdown\", onPointerDown, true);\n };\n }\n // draggableApi is not expected to change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [item.id, transitionInteractionType, transitionItemId]);\n\n function onKeyboardTransitionToggle(operation: \"drag\" | \"resize\") {\n // The acquired item is a copy and does not have the transition state.\n // However, pressing \"Space\" or \"Enter\" on the acquired item must submit the active transition.\n if (acquired) {\n return draggableApi.submitTransition();\n }\n\n // Create new transition if missing.\n if (!transition) {\n const rect = getNormalizedElementRect(itemRef.current!);\n const coordinates = new Coordinates({\n x: operation === \"drag\" ? rect.left : rect.right,\n y: operation === \"drag\" ? rect.top : rect.bottom,\n });\n\n if (operation === \"drag\" && !placed) {\n draggableApi.start(\"insert\", \"keyboard\", coordinates);\n } else if (operation === \"drag\") {\n draggableApi.start(\"reorder\", \"keyboard\", coordinates);\n } else {\n draggableApi.start(\"resize\", \"keyboard\", coordinates);\n }\n }\n // Submit a transition if existing.\n else {\n draggableApi.submitTransition();\n }\n }\n\n function handleInsert(direction: Direction) {\n // Find the closest droppable (in the direction) to the item.\n const droppables = draggableApi.getDroppables();\n const nextDroppable = getNextDroppable(itemRef.current!, droppables, direction);\n\n if (!nextDroppable) {\n // TODO: add announcement\n // Context: the keyboard insertion only works when there is some droppable area in the specified direction.\n // That means that only some arrow keys might work which is confusing for a screen-reader user.\n // Alternatively, we can consider a multi-step insertion where the user would first explicitly select the desired board.\n return;\n }\n\n // Notify the respective droppable of the intention to insert the item in it.\n draggableApi.acquire(nextDroppable, () => children(true));\n setIsHidden(true);\n muteEventsRef.current = true;\n }\n\n function onHandleKeyDown(operation: \"drag\" | \"resize\", event: KeyboardEvent) {\n const canInsert = transition && operation === \"drag\" && !placed;\n const canNavigate = transition || operation === \"drag\";\n\n // The insert is handled by the item and the navigation is delegated to the containing layout.\n const move = (direction: Direction) => {\n if (canInsert) {\n handleInsert(direction);\n } else if (canNavigate) {\n onKeyMove?.(direction);\n }\n };\n\n const discard = () => {\n if (transition || acquired) {\n draggableApi.discardTransition();\n }\n };\n\n switch (event.key) {\n case \"ArrowUp\":\n return move(\"up\");\n case \"ArrowDown\":\n return move(\"down\");\n case \"ArrowLeft\":\n return move(\"left\");\n case \"ArrowRight\":\n return move(\"right\");\n case \" \":\n case \"Enter\":\n return onKeyboardTransitionToggle(operation);\n case \"Escape\":\n return discard();\n }\n }\n\n function onBlur() {\n // When drag- or resize handle on palette or board item loses focus the transition must be submitted with two exceptions:\n // 1. If the last interaction is not \"keyboard\" (the user clicked on another handle issuing a new transition);\n // 2. If the item is acquired by the board (in that case the focus moves to the board item which is expected, palette item is hidden and all events handlers must be muted).\n if (transition && transition.interactionType === \"keyboard\" && !muteEventsRef.current) {\n draggableApi.submitTransition();\n }\n }\n\n function onDragHandlePointerDown(event: ReactPointerEvent) {\n // Calculate the offset between item's top-left corner and the pointer landing position.\n const rect = itemRef.current!.getBoundingClientRect();\n pointerOffsetRef.current = new Coordinates({ x: event.clientX - rect.left, y: event.clientY - rect.top });\n originalSizeRef.current = { width: rect.width, height: rect.height };\n pointerBoundariesRef.current = null;\n\n draggableApi.start(!placed ? \"insert\" : \"reorder\", \"pointer\", Coordinates.fromEvent(event));\n }\n\n function onDragHandleKeyDown(event: KeyboardEvent) {\n onHandleKeyDown(\"drag\", event);\n }\n\n function onResizeHandlePointerDown(event: ReactPointerEvent) {\n // Calculate the offset between item's bottom-right corner and the pointer landing position.\n const rect = itemRef.current!.getBoundingClientRect();\n pointerOffsetRef.current = new Coordinates({ x: event.clientX - rect.right, y: event.clientY - rect.bottom });\n originalSizeRef.current = { width: rect.width, height: rect.height };\n\n // Calculate boundaries below which the cursor cannot move.\n const minWidth = getItemSize(null).minWidth;\n const minHeight = getItemSize(null).minHeight;\n pointerBoundariesRef.current = new Coordinates({\n x: event.clientX - rect.width + minWidth,\n y: event.clientY - rect.height + minHeight,\n });\n\n draggableApi.start(\"resize\", \"pointer\", Coordinates.fromEvent(event));\n }\n\n function onResizeHandleKeyDown(event: KeyboardEvent) {\n onHandleKeyDown(\"resize\", event);\n }\n\n const itemTransitionStyle: CSSProperties = {};\n const itemTransitionClassNames: string[] = [];\n\n if (inTransition) {\n itemTransitionClassNames.push(styles.inTransition);\n }\n\n if (transition && transition.interactionType === \"pointer\") {\n // Adjust the dragged/resized item to the pointer's location.\n itemTransitionClassNames.push(transition.operation === \"resize\" ? styles.resized : styles.dragged);\n itemTransitionStyle.left = transition.positionTransform?.x;\n itemTransitionStyle.top = transition.positionTransform?.y;\n itemTransitionStyle.width = transition.sizeTransform?.width;\n itemTransitionStyle.height = transition.sizeTransform?.height;\n itemTransitionStyle.pointerEvents = \"none\";\n }\n\n if (isHidden) {\n itemTransitionClassNames.push(styles.hidden);\n }\n\n if (transform) {\n // The moved items positions are altered with CSS transform.\n if (transform.type === \"move\") {\n itemTransitionClassNames.push(styles.transformed);\n itemTransitionStyle.transform = CSSUtil.Transform.toString({\n x: transform.x,\n y: transform.y,\n scaleX: 1,\n scaleY: 1,\n });\n itemTransitionStyle.width = transform.width + \"px\";\n itemTransitionStyle.height = transform.height + \"px\";\n }\n // The item is removed from the DOM after animations play.\n // During the animations the removed item is hidden with styles.\n if (transform.type === \"remove\") {\n itemTransitionClassNames.push(styles.removed);\n }\n }\n\n const dragHandleRef = useRef<HTMLButtonElement>(null);\n useImperativeHandle(ref, () => ({\n focusDragHandle: () => dragHandleRef.current?.focus(),\n }));\n\n const isActive = (!!transition && !isHidden) || !!acquired;\n const shouldUsePortal = transition?.operation === \"insert\" && transition?.interactionType === \"pointer\";\n const childrenRef = useRef<ReactNode>(null);\n if (!inTransition || isActive) {\n childrenRef.current = children(!!transition?.hasDropTarget);\n }\n\n const content = (\n <div\n ref={itemRef}\n className={clsx(styles.root, ...itemTransitionClassNames)}\n style={itemTransitionStyle}\n data-item-id={item.id}\n onBlur={onBlur}\n >\n <ItemContext.Provider\n value={{\n isActive,\n dragHandle: {\n ref: dragHandleRef,\n onPointerDown: onDragHandlePointerDown,\n onKeyDown: onDragHandleKeyDown,\n isActive: isActive && transition?.operation === \"reorder\",\n },\n resizeHandle: placed\n ? {\n onPointerDown: onResizeHandlePointerDown,\n onKeyDown: onResizeHandleKeyDown,\n isActive: isActive && transition?.operation === \"resize\",\n }\n : null,\n }}\n >\n {childrenRef.current}\n </ItemContext.Provider>\n </div>\n );\n\n return shouldUsePortal ? <div>{createPortal(content, document.body)}</div> : content;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/internal/item-container/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { CSS as CSSUtil } from \"@dnd-kit/utilities\";\nimport clsx from \"clsx\";\nimport {\n CSSProperties,\n KeyboardEvent,\n ReactNode,\n PointerEvent as ReactPointerEvent,\n Ref,\n RefObject,\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n DragAndDropData,\n DropTargetContext,\n InteractionType,\n Operation,\n useDragSubscription,\n useDraggable,\n} from \"../dnd-controller/controller\";\nimport { BoardItemDefinitionBase, Direction, ItemId, Transform } from \"../interfaces\";\nimport { Coordinates } from \"../utils/coordinates\";\nimport { getLogicalBoundingClientRect, getLogicalClientX, getNormalizedElementRect } from \"../utils/screen\";\nimport { throttle } from \"../utils/throttle\";\nimport { getCollisionRect } from \"./get-collision-rect\";\nimport { getNextDroppable } from \"./get-next-droppable\";\nimport styles from \"./styles.css.js\";\n\nexport interface ItemContainerRef {\n focusDragHandle(): void;\n}\n\ninterface ItemContextType {\n isActive: boolean;\n dragHandle: {\n ref: RefObject<HTMLButtonElement>;\n onPointerDown(event: ReactPointerEvent): void;\n onKeyDown(event: KeyboardEvent): void;\n isActive: boolean;\n };\n resizeHandle: null | {\n onPointerDown(event: ReactPointerEvent): void;\n onKeyDown(event: KeyboardEvent): void;\n isActive: boolean;\n };\n}\n\nexport const ItemContext = createContext<ItemContextType | null>(null);\n\nexport function useItemContext() {\n const ctx = useContext(ItemContext);\n if (!ctx) {\n throw new Error(\"Unable to find BoardItem context.\");\n }\n return ctx;\n}\n\ninterface Transition {\n itemId: ItemId;\n operation: Operation;\n interactionType: InteractionType;\n sizeTransform: null | { width: number; height: number };\n positionTransform: null | { x: number; y: number };\n hasDropTarget?: boolean;\n}\n\n/**\n * Defines item's parameters and its relation with the layout.\n *\n * `item` - the unique board item base object to be used in d&d context.\n * `placed` - specifies if the item already belongs to the board.\n * `acquired` - specifies if the item is essentially a copy temporarily acquired by a droppable but not submitted yet.\n * `inTransition` - specifies if the item is currently being moved.\n * `transform` - specifies if the item's position needs to be altered.\n * `getItemSize` - item size getter that takes droppable context as argument.\n * `onKeyMove` - a callback that fires when arrow keys are pressed in drag- or resize handle.\n */\nexport interface ItemContainerProps {\n item: BoardItemDefinitionBase<unknown>;\n placed: boolean;\n acquired: boolean;\n inTransition: boolean;\n transform: Transform | undefined;\n getItemSize: (context: null | DropTargetContext) => {\n width: number;\n minWidth: number;\n maxWidth: number;\n height: number;\n minHeight: number;\n maxHeight: number;\n };\n onKeyMove?(direction: Direction): void;\n children: (hasDropTarget: boolean) => ReactNode;\n isRtl: () => boolean;\n}\n\nexport const ItemContainer = forwardRef(ItemContainerComponent);\n\nfunction ItemContainerComponent(\n { item, placed, acquired, inTransition, transform, getItemSize, onKeyMove, children, isRtl }: ItemContainerProps,\n ref: Ref<ItemContainerRef>,\n) {\n const originalSizeRef = useRef({ width: 0, height: 0 });\n const pointerOffsetRef = useRef(new Coordinates({ x: 0, y: 0 }));\n const pointerBoundariesRef = useRef<null | Coordinates>(null);\n const [transition, setTransition] = useState<null | Transition>(null);\n const [isHidden, setIsHidden] = useState(false);\n const muteEventsRef = useRef(false);\n const itemRef = useRef<HTMLDivElement>(null);\n const draggableApi = useDraggable({\n draggableItem: item,\n getCollisionRect: (operation, coordinates, dropTarget) => {\n const sizeOverride = operation === \"insert\" && dropTarget ? getItemSize(dropTarget) : null;\n return getCollisionRect(operation, itemRef.current!, coordinates, sizeOverride);\n },\n });\n\n function updateTransition({\n operation,\n interactionType,\n draggableItem,\n collisionRect,\n coordinates,\n dropTarget,\n }: DragAndDropData) {\n if (item.id === draggableItem.id) {\n const [width, height] = [collisionRect.right - collisionRect.left, collisionRect.bottom - collisionRect.top];\n const pointerOffset = pointerOffsetRef.current;\n\n if (operation === \"resize\") {\n setTransition({\n operation,\n interactionType,\n itemId: draggableItem.id,\n sizeTransform: {\n width: Math.max(getItemSize(null).minWidth, Math.min(getItemSize(null).maxWidth, width - pointerOffset.x)),\n height: Math.max(getItemSize(null).minHeight, height - pointerOffset.y),\n },\n positionTransform: null,\n });\n } else if (operation === \"insert\" || operation === \"reorder\") {\n setTransition({\n operation,\n interactionType,\n itemId: draggableItem.id,\n sizeTransform: dropTarget ? getItemSize(dropTarget) : originalSizeRef.current,\n positionTransform: { x: coordinates.x - pointerOffset.x, y: coordinates.y - pointerOffset.y },\n hasDropTarget: !!dropTarget,\n });\n }\n }\n }\n\n useDragSubscription(\"start\", (detail) => updateTransition(detail));\n useDragSubscription(\"update\", (detail) => updateTransition(detail));\n useDragSubscription(\"submit\", () => {\n setTransition(null);\n setIsHidden(false);\n muteEventsRef.current = false;\n });\n useDragSubscription(\"discard\", () => {\n setTransition(null);\n setIsHidden(false);\n muteEventsRef.current = false;\n });\n\n // During the transition listen to pointer move and pointer up events to update/submit transition.\n const transitionInteractionType = transition?.interactionType ?? null;\n const transitionItemId = transition?.itemId ?? null;\n useEffect(() => {\n const onPointerMove = throttle((event: PointerEvent) => {\n const coordinates = Coordinates.fromEvent(event, { isRtl: isRtl() });\n draggableApi.updateTransition(\n new Coordinates({\n x: Math.max(coordinates.x, pointerBoundariesRef.current?.x ?? Number.NEGATIVE_INFINITY),\n y: Math.max(coordinates.y, pointerBoundariesRef.current?.y ?? Number.NEGATIVE_INFINITY),\n }),\n );\n }, 10);\n const onPointerUp = () => {\n onPointerMove.cancel();\n draggableApi.submitTransition();\n };\n\n if (transitionInteractionType === \"pointer\" && transitionItemId === item.id) {\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n }\n return () => {\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n };\n // draggableApi is not expected to change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [item.id, transitionInteractionType, transitionItemId]);\n\n useEffect(() => {\n if (transitionInteractionType === \"keyboard\" && transitionItemId === item.id) {\n const onPointerDown = () => draggableApi.submitTransition();\n window.addEventListener(\"pointerdown\", onPointerDown, true);\n return () => {\n window.removeEventListener(\"pointerdown\", onPointerDown, true);\n };\n }\n // draggableApi is not expected to change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [item.id, transitionInteractionType, transitionItemId]);\n\n function onKeyboardTransitionToggle(operation: \"drag\" | \"resize\") {\n // The acquired item is a copy and does not have the transition state.\n // However, pressing \"Space\" or \"Enter\" on the acquired item must submit the active transition.\n if (acquired) {\n return draggableApi.submitTransition();\n }\n\n // Create new transition if missing.\n if (!transition) {\n const rect = getNormalizedElementRect(itemRef.current!);\n const coordinates = new Coordinates({\n x: operation === \"drag\" ? rect.left : rect.right,\n y: operation === \"drag\" ? rect.top : rect.bottom,\n });\n\n if (operation === \"drag\" && !placed) {\n draggableApi.start(\"insert\", \"keyboard\", coordinates);\n } else if (operation === \"drag\") {\n draggableApi.start(\"reorder\", \"keyboard\", coordinates);\n } else {\n draggableApi.start(\"resize\", \"keyboard\", coordinates);\n }\n }\n // Submit a transition if existing.\n else {\n draggableApi.submitTransition();\n }\n }\n\n function handleInsert(direction: Direction) {\n // Find the closest droppable (in the direction) to the item.\n const droppables = draggableApi.getDroppables();\n const nextDroppable = getNextDroppable({\n draggableElement: itemRef.current!,\n droppables,\n direction,\n isRtl: isRtl(),\n });\n\n if (!nextDroppable) {\n // TODO: add announcement\n // Context: the keyboard insertion only works when there is some droppable area in the specified direction.\n // That means that only some arrow keys might work which is confusing for a screen-reader user.\n // Alternatively, we can consider a multi-step insertion where the user would first explicitly select the desired board.\n return;\n }\n\n // Notify the respective droppable of the intention to insert the item in it.\n draggableApi.acquire(nextDroppable, () => children(true));\n setIsHidden(true);\n muteEventsRef.current = true;\n }\n\n function onHandleKeyDown(operation: \"drag\" | \"resize\", event: KeyboardEvent) {\n const canInsert = transition && operation === \"drag\" && !placed;\n const canNavigate = transition || operation === \"drag\";\n\n // The insert is handled by the item and the navigation is delegated to the containing layout.\n const move = (direction: Direction) => {\n if (canInsert) {\n handleInsert(direction);\n } else if (canNavigate) {\n onKeyMove?.(direction);\n }\n };\n\n const discard = () => {\n if (transition || acquired) {\n draggableApi.discardTransition();\n }\n };\n\n switch (event.key) {\n case \"ArrowUp\":\n return move(\"up\");\n case \"ArrowDown\":\n return move(\"down\");\n case \"ArrowLeft\":\n return move(\"left\");\n case \"ArrowRight\":\n return move(\"right\");\n case \" \":\n case \"Enter\":\n return onKeyboardTransitionToggle(operation);\n case \"Escape\":\n return discard();\n }\n }\n\n function onBlur() {\n // When drag- or resize handle on palette or board item loses focus the transition must be submitted with two exceptions:\n // 1. If the last interaction is not \"keyboard\" (the user clicked on another handle issuing a new transition);\n // 2. If the item is acquired by the board (in that case the focus moves to the board item which is expected, palette item is hidden and all events handlers must be muted).\n if (transition && transition.interactionType === \"keyboard\" && !muteEventsRef.current) {\n draggableApi.submitTransition();\n }\n }\n\n function onDragHandlePointerDown(event: ReactPointerEvent) {\n // Calculate the offset between item's top-left corner and the pointer landing position.\n const rect = getLogicalBoundingClientRect(itemRef.current!);\n const clientX = getLogicalClientX(event, isRtl());\n const clientY = event.clientY;\n pointerOffsetRef.current = new Coordinates({\n x: clientX - rect.insetInlineStart,\n y: clientY - rect.insetBlockStart,\n });\n originalSizeRef.current = { width: rect.inlineSize, height: rect.blockSize };\n pointerBoundariesRef.current = null;\n\n draggableApi.start(!placed ? \"insert\" : \"reorder\", \"pointer\", Coordinates.fromEvent(event, { isRtl: isRtl() }));\n }\n\n function onDragHandleKeyDown(event: KeyboardEvent) {\n onHandleKeyDown(\"drag\", event);\n }\n\n function onResizeHandlePointerDown(event: ReactPointerEvent) {\n // Calculate the offset between item's bottom-right corner and the pointer landing position.\n const rect = getLogicalBoundingClientRect(itemRef.current!);\n const clientX = getLogicalClientX(event, isRtl());\n const clientY = event.clientY;\n pointerOffsetRef.current = new Coordinates({ x: clientX - rect.insetInlineEnd, y: clientY - rect.insetBlockEnd });\n originalSizeRef.current = { width: rect.inlineSize, height: rect.blockSize };\n\n // Calculate boundaries below which the cursor cannot move.\n const minWidth = getItemSize(null).minWidth;\n const minHeight = getItemSize(null).minHeight;\n pointerBoundariesRef.current = new Coordinates({\n x: clientX - rect.inlineSize + minWidth,\n y: clientY - rect.blockSize + minHeight,\n });\n\n draggableApi.start(\"resize\", \"pointer\", Coordinates.fromEvent(event, { isRtl: isRtl() }));\n }\n\n function onResizeHandleKeyDown(event: KeyboardEvent) {\n onHandleKeyDown(\"resize\", event);\n }\n\n const itemTransitionStyle: CSSProperties = {};\n const itemTransitionClassNames: string[] = [];\n\n if (inTransition) {\n itemTransitionClassNames.push(styles.inTransition);\n }\n\n if (transition && transition.interactionType === \"pointer\") {\n // Adjust the dragged/resized item to the pointer's location.\n itemTransitionClassNames.push(transition.operation === \"resize\" ? styles.resized : styles.dragged);\n itemTransitionStyle.insetInlineStart = transition.positionTransform?.x;\n itemTransitionStyle.insetBlockStart = transition.positionTransform?.y;\n itemTransitionStyle.inlineSize = transition.sizeTransform?.width;\n itemTransitionStyle.blockSize = transition.sizeTransform?.height;\n itemTransitionStyle.pointerEvents = \"none\";\n }\n\n if (isHidden) {\n itemTransitionClassNames.push(styles.hidden);\n }\n\n if (transform) {\n // The moved items positions are altered with CSS transform.\n if (transform.type === \"move\") {\n itemTransitionClassNames.push(styles.transformed);\n itemTransitionStyle.transform = CSSUtil.Transform.toString({\n x: transform.x,\n y: transform.y,\n scaleX: 1,\n scaleY: 1,\n });\n itemTransitionStyle.width = transform.width + \"px\";\n itemTransitionStyle.height = transform.height + \"px\";\n }\n // The item is removed from the DOM after animations play.\n // During the animations the removed item is hidden with styles.\n if (transform.type === \"remove\") {\n itemTransitionClassNames.push(styles.removed);\n }\n }\n\n const dragHandleRef = useRef<HTMLButtonElement>(null);\n useImperativeHandle(ref, () => ({\n focusDragHandle: () => dragHandleRef.current?.focus(),\n }));\n\n const isActive = (!!transition && !isHidden) || !!acquired;\n const shouldUsePortal = transition?.operation === \"insert\" && transition?.interactionType === \"pointer\";\n const childrenRef = useRef<ReactNode>(null);\n if (!inTransition || isActive) {\n childrenRef.current = children(!!transition?.hasDropTarget);\n }\n\n const content = (\n <div\n ref={itemRef}\n className={clsx(styles.root, ...itemTransitionClassNames)}\n style={itemTransitionStyle}\n data-item-id={item.id}\n onBlur={onBlur}\n >\n <ItemContext.Provider\n value={{\n isActive,\n dragHandle: {\n ref: dragHandleRef,\n onPointerDown: onDragHandlePointerDown,\n onKeyDown: onDragHandleKeyDown,\n isActive: isActive && transition?.operation === \"reorder\",\n },\n resizeHandle: placed\n ? {\n onPointerDown: onResizeHandlePointerDown,\n onKeyDown: onResizeHandleKeyDown,\n isActive: isActive && transition?.operation === \"resize\",\n }\n : null,\n }}\n >\n {childrenRef.current}\n </ItemContext.Provider>\n </div>\n );\n\n return shouldUsePortal ? <div>{createPortal(content, document.body)}</div> : content;\n}\n"]}
@@ -1,12 +1,12 @@
1
1
 
2
2
  import './styles.scoped.css';
3
3
  export default {
4
- "root": "awsui_root_lljvd_1jk2l_1",
5
- "inTransition": "awsui_inTransition_lljvd_1jk2l_7",
6
- "transformed": "awsui_transformed_lljvd_1jk2l_12",
7
- "removed": "awsui_removed_lljvd_1jk2l_17",
8
- "dragged": "awsui_dragged_lljvd_1jk2l_21",
9
- "resized": "awsui_resized_lljvd_1jk2l_26",
10
- "hidden": "awsui_hidden_lljvd_1jk2l_31"
4
+ "root": "awsui_root_lljvd_bapad_1",
5
+ "inTransition": "awsui_inTransition_lljvd_bapad_7",
6
+ "transformed": "awsui_transformed_lljvd_bapad_12",
7
+ "removed": "awsui_removed_lljvd_bapad_17",
8
+ "dragged": "awsui_dragged_lljvd_bapad_21",
9
+ "resized": "awsui_resized_lljvd_bapad_26",
10
+ "hidden": "awsui_hidden_lljvd_bapad_31"
11
11
  };
12
12
 
@@ -1,33 +1,33 @@
1
- .awsui_root_lljvd_1jk2l_1:not(#\9) {
1
+ .awsui_root_lljvd_bapad_1:not(#\9) {
2
2
  touch-action: none;
3
3
  position: relative;
4
- height: 100%;
4
+ block-size: 100%;
5
5
  }
6
6
 
7
- .awsui_inTransition_lljvd_1jk2l_7:not(#\9) {
7
+ .awsui_inTransition_lljvd_bapad_7:not(#\9) {
8
8
  transition: transform 200ms;
9
9
  transition-timing-function: ease;
10
10
  }
11
11
 
12
- .awsui_transformed_lljvd_1jk2l_12:not(#\9) {
12
+ .awsui_transformed_lljvd_bapad_12:not(#\9) {
13
13
  position: absolute;
14
14
  z-index: 1;
15
15
  }
16
16
 
17
- .awsui_removed_lljvd_1jk2l_17:not(#\9) {
17
+ .awsui_removed_lljvd_bapad_17:not(#\9) {
18
18
  display: none;
19
19
  }
20
20
 
21
- .awsui_dragged_lljvd_1jk2l_21:not(#\9) {
21
+ .awsui_dragged_lljvd_bapad_21:not(#\9) {
22
22
  z-index: 2000;
23
23
  position: fixed;
24
24
  }
25
25
 
26
- .awsui_resized_lljvd_1jk2l_26:not(#\9) {
26
+ .awsui_resized_lljvd_bapad_26:not(#\9) {
27
27
  z-index: 2000;
28
28
  position: absolute;
29
29
  }
30
30
 
31
- .awsui_hidden_lljvd_1jk2l_31:not(#\9) {
31
+ .awsui_hidden_lljvd_bapad_31:not(#\9) {
32
32
  display: none;
33
33
  }
@@ -2,12 +2,12 @@
2
2
  // es-module interop with Babel and Typescript
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  module.exports.default = {
5
- "root": "awsui_root_lljvd_1jk2l_1",
6
- "inTransition": "awsui_inTransition_lljvd_1jk2l_7",
7
- "transformed": "awsui_transformed_lljvd_1jk2l_12",
8
- "removed": "awsui_removed_lljvd_1jk2l_17",
9
- "dragged": "awsui_dragged_lljvd_1jk2l_21",
10
- "resized": "awsui_resized_lljvd_1jk2l_26",
11
- "hidden": "awsui_hidden_lljvd_1jk2l_31"
5
+ "root": "awsui_root_lljvd_bapad_1",
6
+ "inTransition": "awsui_inTransition_lljvd_bapad_7",
7
+ "transformed": "awsui_transformed_lljvd_bapad_12",
8
+ "removed": "awsui_removed_lljvd_bapad_17",
9
+ "dragged": "awsui_dragged_lljvd_bapad_21",
10
+ "resized": "awsui_resized_lljvd_bapad_26",
11
+ "hidden": "awsui_hidden_lljvd_bapad_31"
12
12
  };
13
13
 
@@ -1,3 +1,3 @@
1
1
  {
2
- "commit": "ebd353313c119ec86d3b4667729aa3753fda3bd2"
2
+ "commit": "b6e83249cceeb769c4283e011bfc1e8658c69f51"
3
3
  }