@elliemae/ds-shuttle-v2 3.14.0-next.1 → 3.14.0-next.11

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 (174) hide show
  1. package/dist/cjs/DSShuttleV2.js.map +2 -2
  2. package/dist/cjs/config/DSShuttleV2Definitions.js.map +1 -1
  3. package/dist/cjs/config/itemMovementHelpers.js +99 -74
  4. package/dist/cjs/config/itemMovementHelpers.js.map +2 -2
  5. package/dist/cjs/config/useAutoCalculated/useDataStructure.js +55 -34
  6. package/dist/cjs/config/useAutoCalculated/useDataStructure.js.map +2 -2
  7. package/dist/cjs/config/useAutoCalculated/useShuttleVirtualized.js.map +2 -2
  8. package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js +6 -6
  9. package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
  10. package/dist/cjs/config/useFocusTracker/useFocusItemTracker.js +15 -10
  11. package/dist/cjs/config/useFocusTracker/useFocusItemTracker.js.map +2 -2
  12. package/dist/cjs/config/useFocusTracker/useFocusRegionTrackers.js +2 -2
  13. package/dist/cjs/config/useFocusTracker/useFocusRegionTrackers.js.map +2 -2
  14. package/dist/cjs/config/useShuttleV2.js +2 -0
  15. package/dist/cjs/config/useShuttleV2.js.map +2 -2
  16. package/dist/cjs/config/useStore/createAtomInStore.bak +18 -0
  17. package/dist/cjs/config/useStore/useStore.js +14 -1
  18. package/dist/cjs/config/useStore/useStore.js.map +2 -2
  19. package/dist/cjs/config/{useStore/createAtomInStore.js → useValidateProps.js} +9 -13
  20. package/dist/cjs/config/useValidateProps.js.map +7 -0
  21. package/dist/cjs/constants/index.js +5 -2
  22. package/dist/cjs/constants/index.js.map +2 -2
  23. package/dist/cjs/parts/Dnd/DndHandle.js +17 -10
  24. package/dist/cjs/parts/Dnd/DndHandle.js.map +2 -2
  25. package/dist/cjs/parts/Dnd/DragOverlay.js +47 -0
  26. package/dist/cjs/parts/Dnd/DragOverlay.js.map +7 -0
  27. package/dist/cjs/parts/Header.js +5 -5
  28. package/dist/cjs/parts/Header.js.map +2 -2
  29. package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js +42 -17
  30. package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js.map +3 -3
  31. package/dist/cjs/parts/HoC/withConditionalUseSortable.js +4 -3
  32. package/dist/cjs/parts/HoC/withConditionalUseSortable.js.map +2 -2
  33. package/dist/cjs/parts/Item/Item.js +42 -33
  34. package/dist/cjs/parts/Item/Item.js.map +2 -2
  35. package/dist/cjs/parts/Item/ItemActions/ItemActions.js +16 -14
  36. package/dist/cjs/parts/Item/ItemActions/ItemActions.js.map +2 -2
  37. package/dist/cjs/parts/Item/ItemActions/useActionsHandlers.js +8 -3
  38. package/dist/cjs/parts/Item/ItemActions/useActionsHandlers.js.map +2 -2
  39. package/dist/cjs/parts/Item/ItemActions/useActionsLogicHandlers.js +27 -39
  40. package/dist/cjs/parts/Item/ItemActions/useActionsLogicHandlers.js.map +2 -2
  41. package/dist/cjs/parts/Item/ItemActions/useInnerRefHandlers.js +2 -2
  42. package/dist/cjs/parts/Item/ItemActions/useInnerRefHandlers.js.map +2 -2
  43. package/dist/cjs/parts/Item/ItemMiddleSection.js +21 -22
  44. package/dist/cjs/parts/Item/ItemMiddleSection.js.map +2 -2
  45. package/dist/cjs/parts/Item/ItemOverlay.js +15 -7
  46. package/dist/cjs/parts/Item/ItemOverlay.js.map +2 -2
  47. package/dist/cjs/parts/Item/ItemSelection.js +3 -1
  48. package/dist/cjs/parts/Item/ItemSelection.js.map +2 -2
  49. package/dist/cjs/parts/Item/TextSection.js +50 -0
  50. package/dist/cjs/parts/Item/TextSection.js.map +7 -0
  51. package/dist/cjs/parts/Item/useItemArrowNavigation.js +46 -20
  52. package/dist/cjs/parts/Item/useItemArrowNavigation.js.map +2 -2
  53. package/dist/cjs/parts/Item/useItemKeyboardSelection.js +57 -0
  54. package/dist/cjs/parts/Item/useItemKeyboardSelection.js.map +7 -0
  55. package/dist/cjs/parts/Item/useSelectionLogic.js +64 -21
  56. package/dist/cjs/parts/Item/useSelectionLogic.js.map +2 -2
  57. package/dist/cjs/parts/MainContent.js +5 -2
  58. package/dist/cjs/parts/MainContent.js.map +2 -2
  59. package/dist/cjs/parts/Panel/bottom/LoadMoreBtn.js +3 -3
  60. package/dist/cjs/parts/Panel/bottom/LoadMoreBtn.js.map +2 -2
  61. package/dist/cjs/parts/Panel/bottom/LoadingMore.js +1 -1
  62. package/dist/cjs/parts/Panel/bottom/LoadingMore.js.map +2 -2
  63. package/dist/cjs/parts/Panel/bottom/PanelContentBottomSection.js +13 -4
  64. package/dist/cjs/parts/Panel/bottom/PanelContentBottomSection.js.map +2 -2
  65. package/dist/cjs/parts/Panel/bottom/useInnerRefHandlers.js +4 -1
  66. package/dist/cjs/parts/Panel/bottom/useInnerRefHandlers.js.map +2 -2
  67. package/dist/cjs/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js +4 -3
  68. package/dist/cjs/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js.map +2 -2
  69. package/dist/cjs/parts/Panel/middle/{ItemListWrapper.js → ItemListWrapper/Index.js} +25 -19
  70. package/dist/cjs/parts/Panel/middle/ItemListWrapper/Index.js.map +7 -0
  71. package/dist/cjs/parts/Panel/middle/ItemListWrapper/getDatumFlags.js +44 -0
  72. package/dist/cjs/parts/Panel/middle/ItemListWrapper/getDatumFlags.js.map +7 -0
  73. package/dist/cjs/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js +57 -0
  74. package/dist/cjs/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js.map +7 -0
  75. package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js +30 -7
  76. package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
  77. package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js +20 -25
  78. package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
  79. package/dist/cjs/parts/Panel/top/SelectionHeader.js +1 -1
  80. package/dist/cjs/parts/Panel/top/SelectionHeader.js.map +2 -2
  81. package/dist/cjs/parts/PanelWrapper.js +8 -11
  82. package/dist/cjs/parts/PanelWrapper.js.map +2 -2
  83. package/dist/cjs/react-desc-prop-types.js +31 -14
  84. package/dist/cjs/react-desc-prop-types.js.map +2 -2
  85. package/dist/esm/DSShuttleV2.js.map +2 -2
  86. package/dist/esm/config/DSShuttleV2Definitions.js.map +1 -1
  87. package/dist/esm/config/itemMovementHelpers.js +99 -74
  88. package/dist/esm/config/itemMovementHelpers.js.map +2 -2
  89. package/dist/esm/config/useAutoCalculated/useDataStructure.js +55 -34
  90. package/dist/esm/config/useAutoCalculated/useDataStructure.js.map +2 -2
  91. package/dist/esm/config/useAutoCalculated/useShuttleVirtualized.js.map +2 -2
  92. package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js +6 -6
  93. package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
  94. package/dist/esm/config/useFocusTracker/useFocusItemTracker.js +15 -10
  95. package/dist/esm/config/useFocusTracker/useFocusItemTracker.js.map +2 -2
  96. package/dist/esm/config/useFocusTracker/useFocusRegionTrackers.js +2 -2
  97. package/dist/esm/config/useFocusTracker/useFocusRegionTrackers.js.map +2 -2
  98. package/dist/esm/config/useShuttleV2.js +3 -1
  99. package/dist/esm/config/useShuttleV2.js.map +2 -2
  100. package/dist/esm/config/useStore/createAtomInStore.bak +18 -0
  101. package/dist/esm/config/useStore/useStore.js +14 -1
  102. package/dist/esm/config/useStore/useStore.js.map +2 -2
  103. package/dist/esm/config/useValidateProps.js +10 -0
  104. package/dist/esm/config/useValidateProps.js.map +7 -0
  105. package/dist/esm/constants/index.js +5 -2
  106. package/dist/esm/constants/index.js.map +2 -2
  107. package/dist/esm/parts/Dnd/DndHandle.js +17 -10
  108. package/dist/esm/parts/Dnd/DndHandle.js.map +2 -2
  109. package/dist/esm/parts/Dnd/DragOverlay.js +21 -0
  110. package/dist/esm/parts/Dnd/DragOverlay.js.map +7 -0
  111. package/dist/esm/parts/Header.js +4 -4
  112. package/dist/esm/parts/Header.js.map +2 -2
  113. package/dist/esm/parts/HoC/withConditionalDnDRowContext.js +43 -18
  114. package/dist/esm/parts/HoC/withConditionalDnDRowContext.js.map +3 -3
  115. package/dist/esm/parts/HoC/withConditionalUseSortable.js +4 -3
  116. package/dist/esm/parts/HoC/withConditionalUseSortable.js.map +2 -2
  117. package/dist/esm/parts/Item/Item.js +42 -33
  118. package/dist/esm/parts/Item/Item.js.map +2 -2
  119. package/dist/esm/parts/Item/ItemActions/ItemActions.js +13 -11
  120. package/dist/esm/parts/Item/ItemActions/ItemActions.js.map +2 -2
  121. package/dist/esm/parts/Item/ItemActions/useActionsHandlers.js +8 -3
  122. package/dist/esm/parts/Item/ItemActions/useActionsHandlers.js.map +2 -2
  123. package/dist/esm/parts/Item/ItemActions/useActionsLogicHandlers.js +28 -40
  124. package/dist/esm/parts/Item/ItemActions/useActionsLogicHandlers.js.map +2 -2
  125. package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js +2 -2
  126. package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js.map +2 -2
  127. package/dist/esm/parts/Item/ItemMiddleSection.js +20 -21
  128. package/dist/esm/parts/Item/ItemMiddleSection.js.map +2 -2
  129. package/dist/esm/parts/Item/ItemOverlay.js +15 -7
  130. package/dist/esm/parts/Item/ItemOverlay.js.map +2 -2
  131. package/dist/esm/parts/Item/ItemSelection.js +3 -1
  132. package/dist/esm/parts/Item/ItemSelection.js.map +2 -2
  133. package/dist/esm/parts/Item/TextSection.js +24 -0
  134. package/dist/esm/parts/Item/TextSection.js.map +7 -0
  135. package/dist/esm/parts/Item/useItemArrowNavigation.js +47 -21
  136. package/dist/esm/parts/Item/useItemArrowNavigation.js.map +2 -2
  137. package/dist/esm/parts/Item/useItemKeyboardSelection.js +31 -0
  138. package/dist/esm/parts/Item/useItemKeyboardSelection.js.map +7 -0
  139. package/dist/esm/parts/Item/useSelectionLogic.js +64 -21
  140. package/dist/esm/parts/Item/useSelectionLogic.js.map +2 -2
  141. package/dist/esm/parts/MainContent.js +5 -2
  142. package/dist/esm/parts/MainContent.js.map +2 -2
  143. package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js +1 -1
  144. package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js.map +1 -1
  145. package/dist/esm/parts/Panel/bottom/LoadingMore.js +1 -1
  146. package/dist/esm/parts/Panel/bottom/LoadingMore.js.map +2 -2
  147. package/dist/esm/parts/Panel/bottom/PanelContentBottomSection.js +13 -4
  148. package/dist/esm/parts/Panel/bottom/PanelContentBottomSection.js.map +2 -2
  149. package/dist/esm/parts/Panel/bottom/useInnerRefHandlers.js +4 -1
  150. package/dist/esm/parts/Panel/bottom/useInnerRefHandlers.js.map +2 -2
  151. package/dist/esm/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js +4 -3
  152. package/dist/esm/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js.map +2 -2
  153. package/dist/esm/parts/Panel/middle/{ItemListWrapper.js → ItemListWrapper/Index.js} +22 -16
  154. package/dist/esm/parts/Panel/middle/ItemListWrapper/Index.js.map +7 -0
  155. package/dist/esm/parts/Panel/middle/ItemListWrapper/getDatumFlags.js +18 -0
  156. package/dist/esm/parts/Panel/middle/ItemListWrapper/getDatumFlags.js.map +7 -0
  157. package/dist/esm/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js +31 -0
  158. package/dist/esm/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js.map +7 -0
  159. package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js +29 -6
  160. package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
  161. package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js +19 -24
  162. package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
  163. package/dist/esm/parts/Panel/top/SelectionHeader.js +1 -1
  164. package/dist/esm/parts/Panel/top/SelectionHeader.js.map +2 -2
  165. package/dist/esm/parts/PanelWrapper.js +8 -11
  166. package/dist/esm/parts/PanelWrapper.js.map +2 -2
  167. package/dist/esm/react-desc-prop-types.js +32 -15
  168. package/dist/esm/react-desc-prop-types.js.map +2 -2
  169. package/package.json +13 -11
  170. package/dist/cjs/config/useStore/createAtomInStore.js.map +0 -7
  171. package/dist/cjs/parts/Panel/middle/ItemListWrapper.js.map +0 -7
  172. package/dist/esm/config/useStore/createAtomInStore.js +0 -14
  173. package/dist/esm/config/useStore/createAtomInStore.js.map +0 -7
  174. package/dist/esm/parts/Panel/middle/ItemListWrapper.js.map +0 -7
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
- import { jsx, jsxs } from "react/jsx-runtime";
3
- import { useCallback, useEffect } from "react";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import React2, { useCallback, useEffect } from "react";
4
4
  import { DndContext, DragOverlay, SortableContext, useTreeDndkitConfig } from "@elliemae/ds-drag-and-drop";
5
5
  import { createPortal } from "react-dom";
6
6
  import { useInternalStore, usePropsStore } from "../../config/useStore";
@@ -13,28 +13,47 @@ const withConditionalDnDRowContext = (Component) => (props) => {
13
13
  const withDragNDrop = usePropsStore(
14
14
  (state) => isDestinationPanel ? !state.removeDragAndDropFromDestination : state.addDragAndDropFromSource
15
15
  );
16
+ const setDndDraggingItemMeta = useInternalStore((state) => state.setDndDraggingItemMeta);
17
+ const dndDraggingItemMeta = useInternalStore((state) => state.dndDraggingItemMeta);
16
18
  const setOverId = useInternalStore((state) => state.setOverId);
17
19
  const setIsDropValid = useInternalStore((state) => state.setIsDropValid);
20
+ const setDndDraggingItem = useInternalStore((state) => state.setDndDraggingItem);
18
21
  const setLastActiveId = useInternalStore((state) => state.setLastActiveId);
19
22
  const setDropIndicatorPosition = useInternalStore((state) => state.setDropIndicatorPosition);
20
23
  const onItemsReorder = usePropsStore(
21
24
  (state) => isDestinationPanel ? state.onDestinationReorder : state.onSourceReorder
22
25
  );
23
26
  const onReorder = useCallback(
24
- (newData, metadata) => {
25
- onItemsReorder(newData, { active: metadata.active.original, targetIndex: metadata.targetIndex });
27
+ (_newData, metadata) => {
28
+ const { considerExpanding, active: dndActive, over: dndOver, ...dndData } = metadata;
29
+ const over = dndOver.original.original;
30
+ const active = dndActive.original.original;
31
+ const cleanedMetaData = { ...dndData, over, active };
32
+ onItemsReorder(active, cleanedMetaData);
26
33
  },
27
34
  [onItemsReorder]
28
35
  );
29
- const { dndContextProps, sortableContextProps, activeId, overId, dropIndicatorPosition, isDropValid } = useTreeDndkitConfig({
30
- flattenedItems: itemList,
31
- visibleItems: itemList,
32
- isHorizontalDnD: false,
33
- isExpandable: false,
34
- onReorder,
35
- maxDragAndDropLevel: 0,
36
- getIsDropValid: () => true
37
- });
36
+ const treeConfig = React2.useMemo(() => {
37
+ const configuredItemList = itemList.map((item, i) => ({
38
+ uid: item.hydratedId,
39
+ depth: 0,
40
+ parentId: null,
41
+ realIndex: i,
42
+ visibleIndex: i,
43
+ childrenCount: 0,
44
+ original: item
45
+ }));
46
+ return {
47
+ flattenedItems: configuredItemList,
48
+ visibleItems: configuredItemList,
49
+ isHorizontalDnD: false,
50
+ isExpandable: false,
51
+ onReorder,
52
+ maxDragAndDropLevel: 0,
53
+ getIsDropValid: () => true
54
+ };
55
+ }, [itemList, onReorder]);
56
+ const { dndContextProps, sortableContextProps, activeItem, activeId, overId, dropIndicatorPosition, isDropValid } = useTreeDndkitConfig(treeConfig);
38
57
  useEffect(() => {
39
58
  setLastActiveId(activeId);
40
59
  }, [activeId, setLastActiveId]);
@@ -44,18 +63,24 @@ const withConditionalDnDRowContext = (Component) => (props) => {
44
63
  useEffect(() => {
45
64
  setIsDropValid(isDropValid);
46
65
  }, [isDropValid, setIsDropValid]);
66
+ useEffect(() => {
67
+ setDndDraggingItem(activeItem?.original ?? null);
68
+ }, [activeItem, setDndDraggingItem]);
47
69
  useEffect(() => {
48
70
  setDropIndicatorPosition(dropIndicatorPosition);
49
71
  }, [dropIndicatorPosition, setDropIndicatorPosition]);
50
- const item = itemList.find((currentItem) => currentItem.original.id === activeId);
72
+ useEffect(() => {
73
+ if (!Boolean(activeId) || activeId === "")
74
+ setDndDraggingItemMeta(null);
75
+ }, [activeId, setDndDraggingItemMeta]);
51
76
  if (withDragNDrop)
52
- return /* @__PURE__ */ jsxs(DndContext, { ...dndContextProps, children: [
53
- /* @__PURE__ */ jsx(SortableContext, { ...sortableContextProps, children: /* @__PURE__ */ jsx(Component, { ...props }) }),
77
+ return /* @__PURE__ */ jsx(DndContext, { ...dndContextProps, children: /* @__PURE__ */ jsxs(SortableContext, { ...sortableContextProps, children: [
78
+ /* @__PURE__ */ jsx(Component, { ...props }),
54
79
  createPortal(
55
- /* @__PURE__ */ jsx(DragOverlay, { style: { width: "auto" }, children: activeId ? /* @__PURE__ */ jsx(ItemOverlay, { item, ...props }) : null }),
80
+ /* @__PURE__ */ jsx(DragOverlay, { style: { width: "auto" }, children: /* @__PURE__ */ jsx(Fragment, { children: dndDraggingItemMeta ? /* @__PURE__ */ jsx(ItemOverlay, { ...dndDraggingItemMeta }) : null }) }),
56
81
  document.body
57
82
  )
58
- ] });
83
+ ] }) });
59
84
  return /* @__PURE__ */ jsx(Component, { ...props });
60
85
  };
61
86
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/HoC/withConditionalDnDRowContext.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\n/* eslint-disable react/function-component-definition */\nimport React, { useCallback, useEffect } from 'react';\nimport { DndContext, DragOverlay, SortableContext, useTreeDndkitConfig } from '@elliemae/ds-drag-and-drop';\nimport { createPortal } from 'react-dom';\nimport { useInternalStore, usePropsStore } from '../../config/useStore';\nimport { ItemOverlay } from '../Item/ItemOverlay';\n\ntype FunctionalHOC = <T = any>(Component: React.ComponentType<T>, ...other: any[]) => (props: T) => JSX.Element;\n\n// only wraps in \"DnDContext\" and \"DnDTreeContext\" if any Drag and Drop functionality is requested\nexport const withConditionalDnDRowContext: FunctionalHOC = (Component) => (props) => {\n const { isDestinationPanel } = props;\n const itemList = useInternalStore((state) =>\n isDestinationPanel ? state.destinationConfiguredData : state.sourceConfiguredData,\n );\n\n const withDragNDrop = usePropsStore((state) =>\n isDestinationPanel ? !state.removeDragAndDropFromDestination : state.addDragAndDropFromSource,\n );\n\n const setOverId = useInternalStore((state) => state.setOverId);\n const setIsDropValid = useInternalStore((state) => state.setIsDropValid);\n const setLastActiveId = useInternalStore((state) => state.setLastActiveId);\n const setDropIndicatorPosition = useInternalStore((state) => state.setDropIndicatorPosition);\n\n const onItemsReorder = usePropsStore((state) =>\n isDestinationPanel ? state.onDestinationReorder : state.onSourceReorder,\n );\n\n const onReorder = useCallback(\n (newData: unknown, metadata: { targetIndex: number; active: unknown }) => {\n onItemsReorder(newData, { active: metadata.active.original, targetIndex: metadata.targetIndex });\n },\n [onItemsReorder],\n );\n\n const { dndContextProps, sortableContextProps, activeId, overId, dropIndicatorPosition, isDropValid } =\n useTreeDndkitConfig({\n flattenedItems: itemList,\n visibleItems: itemList,\n isHorizontalDnD: false,\n isExpandable: false,\n onReorder,\n maxDragAndDropLevel: 0,\n getIsDropValid: () => true,\n });\n\n useEffect(() => {\n setLastActiveId(activeId);\n }, [activeId, setLastActiveId]);\n\n useEffect(() => {\n setOverId(overId);\n }, [overId, setOverId]);\n\n useEffect(() => {\n setIsDropValid(isDropValid);\n }, [isDropValid, setIsDropValid]);\n\n useEffect(() => {\n setDropIndicatorPosition(dropIndicatorPosition);\n }, [dropIndicatorPosition, setDropIndicatorPosition]);\n\n const item = itemList.find((currentItem) => currentItem.original.id === activeId);\n if (withDragNDrop)\n return (\n <DndContext {...dndContextProps}>\n <SortableContext {...sortableContextProps}>\n <Component {...props} />\n </SortableContext>\n {createPortal(\n <DragOverlay style={{ width: 'auto' }}>\n {activeId ? <ItemOverlay item={item} {...props} /> : null}\n </DragOverlay>,\n document.body,\n )}\n </DndContext>\n );\n return <Component {...props} />;\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACmEjB,SAEI,KAFJ;AAjEN,SAAgB,aAAa,iBAAiB;AAC9C,SAAS,YAAY,aAAa,iBAAiB,2BAA2B;AAC9E,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB,qBAAqB;AAChD,SAAS,mBAAmB;AAKrB,MAAM,+BAA8C,CAAC,cAAc,CAAC,UAAU;AACnF,QAAM,EAAE,mBAAmB,IAAI;AAC/B,QAAM,WAAW;AAAA,IAAiB,CAAC,UACjC,qBAAqB,MAAM,4BAA4B,MAAM;AAAA,EAC/D;AAEA,QAAM,gBAAgB;AAAA,IAAc,CAAC,UACnC,qBAAqB,CAAC,MAAM,mCAAmC,MAAM;AAAA,EACvE;AAEA,QAAM,YAAY,iBAAiB,CAAC,UAAU,MAAM,SAAS;AAC7D,QAAM,iBAAiB,iBAAiB,CAAC,UAAU,MAAM,cAAc;AACvE,QAAM,kBAAkB,iBAAiB,CAAC,UAAU,MAAM,eAAe;AACzE,QAAM,2BAA2B,iBAAiB,CAAC,UAAU,MAAM,wBAAwB;AAE3F,QAAM,iBAAiB;AAAA,IAAc,CAAC,UACpC,qBAAqB,MAAM,uBAAuB,MAAM;AAAA,EAC1D;AAEA,QAAM,YAAY;AAAA,IAChB,CAAC,SAAkB,aAAuD;AACxE,qBAAe,SAAS,EAAE,QAAQ,SAAS,OAAO,UAAU,aAAa,SAAS,YAAY,CAAC;AAAA,IACjG;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,QAAM,EAAE,iBAAiB,sBAAsB,UAAU,QAAQ,uBAAuB,YAAY,IAClG,oBAAoB;AAAA,IAClB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd;AAAA,IACA,qBAAqB;AAAA,IACrB,gBAAgB,MAAM;AAAA,EACxB,CAAC;AAEH,YAAU,MAAM;AACd,oBAAgB,QAAQ;AAAA,EAC1B,GAAG,CAAC,UAAU,eAAe,CAAC;AAE9B,YAAU,MAAM;AACd,cAAU,MAAM;AAAA,EAClB,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,YAAU,MAAM;AACd,mBAAe,WAAW;AAAA,EAC5B,GAAG,CAAC,aAAa,cAAc,CAAC;AAEhC,YAAU,MAAM;AACd,6BAAyB,qBAAqB;AAAA,EAChD,GAAG,CAAC,uBAAuB,wBAAwB,CAAC;AAEpD,QAAM,OAAO,SAAS,KAAK,CAAC,gBAAgB,YAAY,SAAS,OAAO,QAAQ;AAChF,MAAI;AACF,WACE,qBAAC,cAAY,GAAG,iBACd;AAAA,0BAAC,mBAAiB,GAAG,sBACnB,8BAAC,aAAW,GAAG,OAAO,GACxB;AAAA,MACC;AAAA,QACC,oBAAC,eAAY,OAAO,EAAE,OAAO,OAAO,GACjC,qBAAW,oBAAC,eAAY,MAAa,GAAG,OAAO,IAAK,MACvD;AAAA,QACA,SAAS;AAAA,MACX;AAAA,OACF;AAEJ,SAAO,oBAAC,aAAW,GAAG,OAAO;AAC/B;",
6
- "names": []
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable indent */\n/* eslint-disable max-statements */\n/* eslint-disable max-params */\n/* eslint-disable react/function-component-definition */\nimport React, { useCallback, useEffect } from 'react';\nimport type { DnDKitTree } from '@elliemae/ds-drag-and-drop';\nimport { DndContext, DragOverlay, SortableContext, useTreeDndkitConfig } from '@elliemae/ds-drag-and-drop';\nimport { createPortal } from 'react-dom';\n\nimport { useInternalStore, usePropsStore } from '../../config/useStore';\nimport type { DSShuttleV2T } from '../../react-desc-prop-types';\nimport { ItemOverlay } from '../Item/ItemOverlay';\n\ntype HoCConfig = DSShuttleV2T.PanelMetaInfo;\ntype InternalHoCStates = {\n activeId?: DSShuttleV2T.HydratedId;\n overId?: DSShuttleV2T.HydratedId;\n isDropValid?: boolean;\n};\ntype ResultComponentProps = DSShuttleV2T.PanelMetaInfo & InternalHoCStates;\n\n// only wraps in \"DnDContext\" and \"DnDTreeContext\" if any Drag and Drop functionality is requested\nexport const withConditionalDnDRowContext: ConfiguredReactFunctionalHOC<HoCConfig, ResultComponentProps> =\n (Component) => (props) => {\n const { isDestinationPanel } = props;\n const itemList = useInternalStore((state) =>\n isDestinationPanel ? state.destinationConfiguredData : state.sourceConfiguredData,\n );\n\n const withDragNDrop = usePropsStore((state) =>\n isDestinationPanel ? !state.removeDragAndDropFromDestination : state.addDragAndDropFromSource,\n );\n\n const setDndDraggingItemMeta = useInternalStore((state) => state.setDndDraggingItemMeta);\n const dndDraggingItemMeta = useInternalStore((state) => state.dndDraggingItemMeta);\n const setOverId = useInternalStore((state) => state.setOverId);\n const setIsDropValid = useInternalStore((state) => state.setIsDropValid);\n const setDndDraggingItem = useInternalStore((state) => state.setDndDraggingItem);\n const setLastActiveId = useInternalStore((state) => state.setLastActiveId);\n const setDropIndicatorPosition = useInternalStore((state) => state.setDropIndicatorPosition);\n\n const onItemsReorder = usePropsStore((state) =>\n isDestinationPanel ? state.onDestinationReorder : state.onSourceReorder,\n );\n\n const onReorder: DnDKitTree.OnReorder<DSShuttleV2T.ConfiguredDatum> = useCallback(\n (_newData, metadata) => {\n // eslint-disable-next-line no-unused-vars\n const { considerExpanding, active: dndActive, over: dndOver, ...dndData } = metadata;\n const over = dndOver.original.original;\n const active = dndActive.original.original;\n const cleanedMetaData = { ...dndData, over, active };\n onItemsReorder(active, cleanedMetaData);\n },\n [onItemsReorder],\n );\n\n const treeConfig = React.useMemo(() => {\n const configuredItemList = itemList.map((item, i) => ({\n // dnd\n uid: item.hydratedId,\n depth: 0,\n parentId: null,\n realIndex: i,\n visibleIndex: i,\n childrenCount: 0,\n original: item,\n }));\n return {\n flattenedItems: configuredItemList,\n visibleItems: configuredItemList,\n isHorizontalDnD: false,\n isExpandable: false,\n onReorder,\n maxDragAndDropLevel: 0,\n getIsDropValid: () => true,\n };\n }, [itemList, onReorder]);\n\n const { dndContextProps, sortableContextProps, activeItem, activeId, overId, dropIndicatorPosition, isDropValid } =\n useTreeDndkitConfig(treeConfig);\n\n useEffect(() => {\n setLastActiveId(activeId);\n }, [activeId, setLastActiveId]);\n\n useEffect(() => {\n setOverId(overId);\n }, [overId, setOverId]);\n\n useEffect(() => {\n setIsDropValid(isDropValid);\n }, [isDropValid, setIsDropValid]);\n\n useEffect(() => {\n setDndDraggingItem(activeItem?.original ?? null);\n }, [activeItem, setDndDraggingItem]);\n\n useEffect(() => {\n setDropIndicatorPosition(dropIndicatorPosition);\n }, [dropIndicatorPosition, setDropIndicatorPosition]);\n\n useEffect(() => {\n if (!Boolean(activeId) || activeId === '') setDndDraggingItemMeta(null);\n }, [activeId, setDndDraggingItemMeta]);\n\n if (withDragNDrop)\n return (\n <DndContext {...dndContextProps}>\n <SortableContext {...sortableContextProps}>\n <Component {...props} />\n {createPortal(\n <DragOverlay style={{ width: 'auto' }}>\n <>{dndDraggingItemMeta ? <ItemOverlay {...dndDraggingItemMeta} /> : null}</>\n </DragOverlay>,\n document.body,\n )}\n </SortableContext>\n </DndContext>\n );\n return <Component {...props} />;\n };\n"],
5
+ "mappings": "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",
6
+ "names": ["React"]
7
7
  }
@@ -1,9 +1,10 @@
1
1
  import * as React from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { useSortable } from "@elliemae/ds-drag-and-drop";
4
- const withConditionalUseSortable = (Component) => (props) => {
5
- const { id } = props.item.original;
6
- const useSortableHelpers = useSortable({ id });
4
+ const withConditionalUseSortable = (Component) => function(props) {
5
+ const { datumInternalMeta } = props;
6
+ const { hydratedId } = datumInternalMeta;
7
+ const useSortableHelpers = useSortable({ id: hydratedId });
7
8
  return /* @__PURE__ */ jsx(Component, { ...props, useSortableHelpers });
8
9
  };
9
10
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/HoC/withConditionalUseSortable.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { useSortable } from '@elliemae/ds-drag-and-drop';\n\nexport const withConditionalUseSortable = (Component) => (props) => {\n const { id } = props.item.original;\n const useSortableHelpers = useSortable({ id });\n\n return <Component {...props} useSortableHelpers={useSortableHelpers} />;\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACOd;AANT,SAAS,mBAAmB;AAErB,MAAM,6BAA6B,CAAC,cAAc,CAAC,UAAU;AAClE,QAAM,EAAE,GAAG,IAAI,MAAM,KAAK;AAC1B,QAAM,qBAAqB,YAAY,EAAE,GAAG,CAAC;AAE7C,SAAO,oBAAC,aAAW,GAAG,OAAO,oBAAwC;AACvE;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { useSortable } from '@elliemae/ds-drag-and-drop';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\n\ntype HoCConfig = DSShuttleV2T.ItemMeta;\ntype ResultComponentProps = DSShuttleV2T.ItemMeta & { useSortableHelpers: ReturnType<typeof useSortable> };\nexport const withConditionalUseSortable: ConfiguredReactFunctionalHOC<HoCConfig, ResultComponentProps> = (Component) =>\n function (props) {\n const { datumInternalMeta } = props;\n const { hydratedId } = datumInternalMeta;\n const useSortableHelpers = useSortable({ id: hydratedId });\n\n return <Component {...props} useSortableHelpers={useSortableHelpers} />;\n };\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACYZ;AAXX,SAAS,mBAAmB;AAKrB,MAAM,6BAA4F,CAAC,cACxG,SAAU,OAAO;AACf,QAAM,EAAE,kBAAkB,IAAI;AAC9B,QAAM,EAAE,WAAW,IAAI;AACvB,QAAM,qBAAqB,YAAY,EAAE,IAAI,WAAW,CAAC;AAEzD,SAAO,oBAAC,aAAW,GAAG,OAAO,oBAAwC;AACvE;",
6
6
  "names": []
7
7
  }
@@ -17,6 +17,7 @@ import { DragHandle } from "../Dnd/DndHandle";
17
17
  import { DropIndicator } from "../Dnd/DropIndicator";
18
18
  import { withConditionalUseSortable } from "../HoC/withConditionalUseSortable";
19
19
  import { useInnerRefHandlers as useInnerRefActionHandlers } from "./ItemActions/useInnerRefHandlers";
20
+ import { useItemKeyboardSelection } from "./useItemKeyboardSelection";
20
21
  const cssDisabled = css`
21
22
  background-color: ${({ theme }) => theme.colors.neutral["100"]};
22
23
  color: ${({ theme }) => theme.colors.neutral["300"]};
@@ -27,7 +28,7 @@ const cssDisabled = css`
27
28
  }
28
29
  `;
29
30
  const ItemWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_WRAPPER })`
30
- min-height: 36px;
31
+ min-height: 2.769rem;
31
32
  position: relative;
32
33
  background-color: white;
33
34
  &:hover {
@@ -48,14 +49,14 @@ const ItemWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots
48
49
 
49
50
  ${({ isDragging }) => isDragging && cssDisabled}
50
51
  `;
51
- const useInnerRefHandlers = ({ item, isDestinationPanel }) => {
52
- const { isFirst, isLast } = item;
52
+ const useInnerRefHandlers = ({ datum, datumInternalMeta, isDestinationPanel }) => {
53
+ const { isFirst, isLast, hydratedId } = datumInternalMeta;
53
54
  const { trackFocusItem } = useFocusTracker();
54
55
  const focusRegion = useInternalStore((state) => state.focusRegion);
55
56
  const focusItem = useInternalStore((state) => state.focusItem);
56
57
  const focusItemAction = useInternalStore((state) => state.focusItemAction);
57
58
  const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL_ITEM : REGIONS_FOCUSES.SOURCE_PANEL_ITEM;
58
- const currItemId = item.original.id;
59
+ const currItemId = hydratedId;
59
60
  const shouldFocus = React2.useMemo(
60
61
  () => focusRegion === currRegion && focusItemAction === "parent" && (focusItem === currItemId || isFirst && focusItem === "first" || isLast && focusItem === "last"),
61
62
  [currItemId, currRegion, focusItem, focusItemAction, focusRegion, isFirst, isLast]
@@ -64,72 +65,80 @@ const useInnerRefHandlers = ({ item, isDestinationPanel }) => {
64
65
  (node) => {
65
66
  if (shouldFocus) {
66
67
  node?.focus();
67
- trackFocusItem(item);
68
+ trackFocusItem({ original: datum, ...datumInternalMeta });
68
69
  }
69
70
  },
70
- [item, shouldFocus, trackFocusItem]
71
+ [datum, datumInternalMeta, shouldFocus, trackFocusItem]
71
72
  );
72
73
  return React2.useMemo(() => ({ shouldFocus, innerRefHandlerParentItem }), [shouldFocus, innerRefHandlerParentItem]);
73
74
  };
74
75
  const Item = React2.memo((itemMeta) => {
75
- const { item, withDragNDrop, useSortableHelpers } = itemMeta;
76
- const { original, isSelected } = item;
77
- const { id } = original;
76
+ const { datumInternalMeta, withDragNDrop, useSortableHelpers, hasMultipleSelection } = itemMeta;
77
+ const { isSelected, hydratedId } = datumInternalMeta;
78
78
  const cols = useMemo(() => {
79
79
  if (withDragNDrop)
80
80
  return ["5px", "auto", "1fr", "auto"];
81
81
  return ["5px", "1fr", "auto"];
82
82
  }, [withDragNDrop]);
83
- const dndActiveId = useInternalStore((state) => state.lastActiveId);
84
- const isActive = useMemo(() => dndActiveId !== "", [dndActiveId]);
85
- const selectItem = useSelectionLogic(itemMeta);
83
+ const setDndDraggingItemMeta = useInternalStore((state) => state.setDndDraggingItemMeta);
84
+ const dndDraggingItemMeta = useInternalStore((state) => state.dndDraggingItemMeta);
85
+ const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);
86
+ const dndDraggingItem = useInternalStore((state) => state.dndDraggingItem);
87
+ const isDraggingThisItem = dndDraggingItem?.hydratedId === hydratedId;
88
+ React2.useEffect(() => {
89
+ if (isDraggingThisItem && dndDraggingItemMeta?.datumInternalMeta.hydratedId !== hydratedId)
90
+ setDndDraggingItemMeta(itemMeta);
91
+ }, [
92
+ dndDraggingItemMeta?.datumInternalMeta.hydratedId,
93
+ hydratedId,
94
+ isDraggingThisItem,
95
+ itemMeta,
96
+ setDndDraggingItemMeta
97
+ ]);
98
+ const { selectItem, onShiftMouseDownPreventTextSelection } = useSelectionLogic(itemMeta);
86
99
  const { onItemContainerKeyDown } = useItemArrowNavigation(itemMeta);
100
+ const { onItemKeyDownSelection } = useItemKeyboardSelection(itemMeta);
87
101
  const handleItemKeyDown = React2.useCallback(
88
102
  (event) => {
89
- const { key } = event;
90
- if (["Spacebar", " ", "Enter"].includes(key)) {
91
- if (isActive || event.target.id === `${id}-drag-handle`) {
92
- event.preventDefault();
93
- return;
94
- }
95
- event.preventDefault();
96
- event.stopPropagation();
97
- selectItem(event);
98
- }
103
+ onItemKeyDownSelection(event);
99
104
  onItemContainerKeyDown(event);
100
105
  },
101
- [isActive, id, onItemContainerKeyDown, selectItem]
106
+ [onItemKeyDownSelection, onItemContainerKeyDown]
102
107
  );
103
108
  const { shouldFocus, innerRefHandlerParentItem } = useInnerRefHandlers(itemMeta);
104
109
  const { innerRefHandlerDnd } = useInnerRefActionHandlers(itemMeta);
105
110
  const overId = useInternalStore((state) => state.overId);
106
111
  const isDropValid = useInternalStore((state) => state.isDropValid);
107
112
  const dropIndicatorPosition = useInternalStore((state) => state.dropIndicatorPosition);
108
- const showDropIndicatorPosition = id === overId && dropIndicatorPosition;
113
+ const showDropIndicatorPosition = hydratedId === overId && dropIndicatorPosition;
114
+ const sortableRef = useSortableHelpers?.setNodeRef ? useSortableHelpers?.setNodeRef : () => {
115
+ };
109
116
  return /* @__PURE__ */ jsxs(
110
117
  ItemWrapper,
111
118
  {
112
- isDragging: dndActiveId === id,
113
- isDndActive: isActive,
119
+ isDragging: isDraggingThisItem,
120
+ isDndActive: getIsDragAndDropHappening(),
114
121
  cols,
115
122
  alignItems: "center",
116
123
  onClick: selectItem,
117
- ref: mergeRefs(innerRefHandlerParentItem, useSortableHelpers?.setNodeRef),
124
+ ref: mergeRefs(innerRefHandlerParentItem, sortableRef),
118
125
  onKeyDown: handleItemKeyDown,
126
+ onMouseDown: onShiftMouseDownPreventTextSelection,
119
127
  tabIndex: shouldFocus ? 0 : -1,
120
128
  role: "checkbox",
121
129
  "aria-checked": isSelected,
122
- id: `${id}-wrapper`,
130
+ id: `${hydratedId}-wrapper`,
123
131
  children: [
124
132
  /* @__PURE__ */ jsx(ItemSelection, { ...itemMeta }),
125
- withDragNDrop ? /* @__PURE__ */ jsx(
133
+ withDragNDrop && useSortableHelpers ? /* @__PURE__ */ jsx(
126
134
  DragHandle,
127
135
  {
128
- id,
136
+ id: hydratedId,
129
137
  useSortableHelpers,
130
- isDndActive: !!isActive,
131
- isDragging: dndActiveId === id,
132
- innerRef: innerRefHandlerDnd
138
+ isDndActive: getIsDragAndDropHappening(),
139
+ isDragging: dndDraggingItem?.hydratedId === hydratedId,
140
+ innerRef: innerRefHandlerDnd,
141
+ disabled: hasMultipleSelection
133
142
  }
134
143
  ) : null,
135
144
  /* @__PURE__ */ jsx(ItemMiddleSection, { ...itemMeta }),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/Item.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useMemo } from 'react';\nimport { styled, css } from '@elliemae/ds-system';\nimport { mergeRefs } from '@elliemae/ds-utilities';\n\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../config/DSShuttleV2Definitions';\nimport { useInternalStore } from '../../config/useStore';\nimport { useFocusTracker } from '../../config/useFocusTracker';\nimport { ItemSelection } from './ItemSelection';\nimport { ItemActions } from './ItemActions';\nimport { ItemMiddleSection } from './ItemMiddleSection';\nimport { useSelectionLogic } from './useSelectionLogic';\nimport { useItemArrowNavigation } from './useItemArrowNavigation';\nimport { REGIONS_FOCUSES } from '../../constants';\nimport { DragHandle } from '../Dnd/DndHandle';\nimport { DropIndicator } from '../Dnd/DropIndicator';\nimport { withConditionalUseSortable } from '../HoC/withConditionalUseSortable';\nimport { useInnerRefHandlers as useInnerRefActionHandlers } from './ItemActions/useInnerRefHandlers';\n// we are using the class-name added via slot for the children `:hover` styling of icon colors\n\nconst cssDisabled = css`\n background-color: ${({ theme }) => theme.colors.neutral['100']};\n color: ${({ theme }) => theme.colors.neutral['300']};\n .ds-shuttle-v2-item-action-btn-to-source-icon > svg,\n .ds-shuttle-v2-item-action-btn-to-destination-icon > svg,\n .ds-shuttle-v2-item-action-btn-drilldown-icon > svg {\n fill: ${({ theme }) => theme.colors.neutral['300']};\n }\n`;\n\ninterface ItemWrapperT {\n isDragging: boolean;\n isDndActive: boolean;\n}\n\nconst ItemWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_WRAPPER })<ItemWrapperT>`\n min-height: 36px;\n position: relative;\n background-color: white;\n &:hover {\n background-color: ${({ isDndActive, theme }) => (!isDndActive ? theme.colors.brand['200'] : 'white')};\n .ds-shuttle-v2-item-action-btn-to-source-icon > svg,\n .ds-shuttle-v2-item-action-btn-to-destination-icon > svg,\n .ds-shuttle-v2-item-action-btn-drilldown-icon > svg {\n fill: brand-700;\n }\n ${({ isDragging }) => isDragging && cssDisabled}\n }\n\n &:focus {\n outline: 2px solid brand-700;\n outline-offset: -2px;\n }\n border-bottom: 1px solid neutral-100;\n\n ${({ isDragging }) => isDragging && cssDisabled}\n`;\n\nconst useInnerRefHandlers = ({ item, isDestinationPanel }: DSShuttleV2T.ItemMeta) => {\n const { isFirst, isLast } = item;\n const { trackFocusItem } = useFocusTracker();\n const focusRegion = useInternalStore((state) => state.focusRegion);\n const focusItem = useInternalStore((state) => state.focusItem);\n const focusItemAction = useInternalStore((state) => state.focusItemAction);\n const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL_ITEM : REGIONS_FOCUSES.SOURCE_PANEL_ITEM;\n const currItemId = item.original.id;\n\n const shouldFocus = React.useMemo(\n () =>\n focusRegion === currRegion &&\n focusItemAction === 'parent' &&\n (focusItem === currItemId || (isFirst && focusItem === 'first') || (isLast && focusItem === 'last')),\n [currItemId, currRegion, focusItem, focusItemAction, focusRegion, isFirst, isLast],\n );\n const innerRefHandlerParentItem = React.useCallback(\n (node: HTMLDivElement | null) => {\n if (shouldFocus) {\n node?.focus();\n trackFocusItem(item); // this converts 'first'/'last' to actual id -> prevents 'last' to focus \"new last\" if new items are added\n }\n },\n [item, shouldFocus, trackFocusItem],\n );\n return React.useMemo(() => ({ shouldFocus, innerRefHandlerParentItem }), [shouldFocus, innerRefHandlerParentItem]);\n};\n\nexport const Item = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const { item, withDragNDrop, useSortableHelpers } = itemMeta;\n const { original, isSelected } = item;\n const { id } = original;\n\n const cols = useMemo(() => {\n if (withDragNDrop) return ['5px', 'auto', '1fr', 'auto'];\n return ['5px', '1fr', 'auto'];\n }, [withDragNDrop]);\n\n const dndActiveId = useInternalStore((state) => state.lastActiveId);\n const isActive = useMemo(() => dndActiveId !== '', [dndActiveId]);\n\n const selectItem = useSelectionLogic(itemMeta);\n const { onItemContainerKeyDown } = useItemArrowNavigation(itemMeta);\n const handleItemKeyDown: React.KeyboardEventHandler<HTMLDivElement> = React.useCallback(\n (event) => {\n const { key } = event;\n\n // Spacebar AND ' ' are cross-browser compatibility thing\n if (['Spacebar', ' ', 'Enter'].includes(key)) {\n if (isActive || (event.target as HTMLElement).id === `${id}-drag-handle`) {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n selectItem(event);\n }\n onItemContainerKeyDown(event);\n },\n [isActive, id, onItemContainerKeyDown, selectItem],\n );\n const { shouldFocus, innerRefHandlerParentItem } = useInnerRefHandlers(itemMeta);\n const { innerRefHandlerDnd } = useInnerRefActionHandlers(itemMeta);\n const overId = useInternalStore((state) => state.overId);\n const isDropValid = useInternalStore((state) => state.isDropValid);\n const dropIndicatorPosition = useInternalStore((state) => state.dropIndicatorPosition);\n\n const showDropIndicatorPosition = id === overId && dropIndicatorPosition;\n\n return (\n <ItemWrapper\n isDragging={dndActiveId === id}\n isDndActive={isActive}\n cols={cols}\n alignItems=\"center\"\n onClick={selectItem}\n ref={mergeRefs(innerRefHandlerParentItem, useSortableHelpers?.setNodeRef)}\n onKeyDown={handleItemKeyDown}\n tabIndex={shouldFocus ? 0 : -1}\n role=\"checkbox\"\n aria-checked={isSelected}\n id={`${id}-wrapper`}\n >\n <ItemSelection {...itemMeta} />\n {withDragNDrop ? (\n <DragHandle\n id={id}\n useSortableHelpers={useSortableHelpers}\n isDndActive={!!isActive}\n isDragging={dndActiveId === id}\n innerRef={innerRefHandlerDnd}\n />\n ) : null}\n <ItemMiddleSection {...itemMeta} />\n <ItemActions {...itemMeta} />\n <DropIndicator vertical={false} dropIndicatorPosition={showDropIndicatorPosition} isDropValid={isDropValid} />\n </ItemWrapper>\n );\n});\n\nconst ItemSortable = withConditionalUseSortable(Item);\nexport { ItemSortable };\nexport default ItemSortable;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\nimport React, { useMemo } from 'react';\nimport { styled, css } from '@elliemae/ds-system';\nimport { mergeRefs } from '@elliemae/ds-utilities';\nimport { Grid } from '@elliemae/ds-grid';\n\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../config/DSShuttleV2Definitions';\nimport { useInternalStore } from '../../config/useStore';\nimport { useFocusTracker } from '../../config/useFocusTracker';\nimport { ItemSelection } from './ItemSelection';\nimport { ItemActions } from './ItemActions';\nimport { ItemMiddleSection } from './ItemMiddleSection';\nimport { useSelectionLogic } from './useSelectionLogic';\nimport { useItemArrowNavigation } from './useItemArrowNavigation';\nimport { REGIONS_FOCUSES } from '../../constants';\nimport { DragHandle } from '../Dnd/DndHandle';\nimport { DropIndicator } from '../Dnd/DropIndicator';\nimport { withConditionalUseSortable } from '../HoC/withConditionalUseSortable';\nimport { useInnerRefHandlers as useInnerRefActionHandlers } from './ItemActions/useInnerRefHandlers';\nimport { useItemKeyboardSelection } from './useItemKeyboardSelection';\n// we are using the class-name added via slot for the children `:hover` styling of icon colors\n\nconst cssDisabled = css`\n background-color: ${({ theme }) => theme.colors.neutral['100']};\n color: ${({ theme }) => theme.colors.neutral['300']};\n .ds-shuttle-v2-item-action-btn-to-source-icon > svg,\n .ds-shuttle-v2-item-action-btn-to-destination-icon > svg,\n .ds-shuttle-v2-item-action-btn-drilldown-icon > svg {\n fill: ${({ theme }) => theme.colors.neutral['300']};\n }\n`;\n\ninterface ItemWrapperT {\n isDragging: boolean;\n isDndActive: boolean;\n}\n\nconst ItemWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_WRAPPER })<ItemWrapperT>`\n min-height: 2.769rem;\n position: relative;\n background-color: white;\n &:hover {\n background-color: ${({ isDndActive, theme }) => (!isDndActive ? theme.colors.brand['200'] : 'white')};\n .ds-shuttle-v2-item-action-btn-to-source-icon > svg,\n .ds-shuttle-v2-item-action-btn-to-destination-icon > svg,\n .ds-shuttle-v2-item-action-btn-drilldown-icon > svg {\n fill: brand-700;\n }\n ${({ isDragging }) => isDragging && cssDisabled}\n }\n\n &:focus {\n outline: 2px solid brand-700;\n outline-offset: -2px;\n }\n border-bottom: 1px solid neutral-100;\n\n ${({ isDragging }) => isDragging && cssDisabled}\n`;\n\nconst useInnerRefHandlers = ({ datum, datumInternalMeta, isDestinationPanel }: DSShuttleV2T.ItemMeta) => {\n const { isFirst, isLast, hydratedId } = datumInternalMeta;\n const { trackFocusItem } = useFocusTracker();\n const focusRegion = useInternalStore((state) => state.focusRegion);\n const focusItem = useInternalStore((state) => state.focusItem);\n const focusItemAction = useInternalStore((state) => state.focusItemAction);\n const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL_ITEM : REGIONS_FOCUSES.SOURCE_PANEL_ITEM;\n const currItemId = hydratedId;\n\n const shouldFocus = React.useMemo(\n () =>\n focusRegion === currRegion &&\n focusItemAction === 'parent' &&\n (focusItem === currItemId || (isFirst && focusItem === 'first') || (isLast && focusItem === 'last')),\n [currItemId, currRegion, focusItem, focusItemAction, focusRegion, isFirst, isLast],\n );\n const innerRefHandlerParentItem = React.useCallback(\n (node: HTMLDivElement | null) => {\n if (shouldFocus) {\n node?.focus();\n trackFocusItem({ original: datum, ...datumInternalMeta }); // this converts 'first'/'last' to actual id -> prevents 'last' to focus \"new last\" if new items are added\n }\n },\n [datum, datumInternalMeta, shouldFocus, trackFocusItem],\n );\n return React.useMemo(() => ({ shouldFocus, innerRefHandlerParentItem }), [shouldFocus, innerRefHandlerParentItem]);\n};\n\nexport const Item = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const { datumInternalMeta, withDragNDrop, useSortableHelpers, hasMultipleSelection } = itemMeta;\n const { isSelected, hydratedId } = datumInternalMeta;\n\n const cols = useMemo(() => {\n if (withDragNDrop) return ['5px', 'auto', '1fr', 'auto'];\n return ['5px', '1fr', 'auto'];\n }, [withDragNDrop]);\n\n const setDndDraggingItemMeta = useInternalStore((state) => state.setDndDraggingItemMeta);\n const dndDraggingItemMeta = useInternalStore((state) => state.dndDraggingItemMeta);\n const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);\n const dndDraggingItem = useInternalStore((state) => state.dndDraggingItem);\n const isDraggingThisItem = dndDraggingItem?.hydratedId === hydratedId;\n React.useEffect(() => {\n if (isDraggingThisItem && dndDraggingItemMeta?.datumInternalMeta.hydratedId !== hydratedId)\n setDndDraggingItemMeta(itemMeta);\n }, [\n dndDraggingItemMeta?.datumInternalMeta.hydratedId,\n hydratedId,\n isDraggingThisItem,\n itemMeta,\n setDndDraggingItemMeta,\n ]);\n\n const { selectItem, onShiftMouseDownPreventTextSelection } = useSelectionLogic(itemMeta);\n const { onItemContainerKeyDown } = useItemArrowNavigation(itemMeta);\n const { onItemKeyDownSelection } = useItemKeyboardSelection(itemMeta);\n\n const handleItemKeyDown: React.KeyboardEventHandler<HTMLDivElement> = React.useCallback(\n (event) => {\n onItemKeyDownSelection(event);\n onItemContainerKeyDown(event);\n },\n [onItemKeyDownSelection, onItemContainerKeyDown],\n );\n const { shouldFocus, innerRefHandlerParentItem } = useInnerRefHandlers(itemMeta);\n const { innerRefHandlerDnd } = useInnerRefActionHandlers(itemMeta);\n const overId = useInternalStore((state) => state.overId);\n const isDropValid = useInternalStore((state) => state.isDropValid);\n const dropIndicatorPosition = useInternalStore((state) => state.dropIndicatorPosition);\n\n const showDropIndicatorPosition = hydratedId === overId && dropIndicatorPosition;\n const sortableRef = useSortableHelpers?.setNodeRef ? useSortableHelpers?.setNodeRef : () => {};\n return (\n <ItemWrapper\n isDragging={isDraggingThisItem}\n isDndActive={getIsDragAndDropHappening()}\n cols={cols}\n alignItems=\"center\"\n onClick={selectItem}\n ref={mergeRefs(innerRefHandlerParentItem, sortableRef)}\n onKeyDown={handleItemKeyDown}\n onMouseDown={onShiftMouseDownPreventTextSelection}\n tabIndex={shouldFocus ? 0 : -1}\n role=\"checkbox\"\n aria-checked={isSelected}\n id={`${hydratedId}-wrapper`}\n >\n <ItemSelection {...itemMeta} />\n {withDragNDrop && useSortableHelpers ? (\n <DragHandle\n id={hydratedId}\n useSortableHelpers={useSortableHelpers}\n isDndActive={getIsDragAndDropHappening()}\n isDragging={dndDraggingItem?.hydratedId === hydratedId}\n innerRef={innerRefHandlerDnd}\n disabled={hasMultipleSelection}\n />\n ) : null}\n <ItemMiddleSection {...itemMeta} />\n <ItemActions {...itemMeta} />\n <DropIndicator vertical={false} dropIndicatorPosition={showDropIndicatorPosition} isDropValid={isDropValid} />\n </ItemWrapper>\n );\n});\n\nconst ItemSortable = withConditionalUseSortable(Item);\nexport { ItemSortable };\nexport default ItemSortable;\n"],
5
+ "mappings": "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",
6
6
  "names": ["React"]
7
7
  }
@@ -3,7 +3,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import React2 from "react";
4
4
  import { styled } from "@elliemae/ds-system";
5
5
  import { Grid } from "@elliemae/ds-grid";
6
- import { DSButtonV2, BUTTON_SIZES } from "@elliemae/ds-button";
6
+ import { DSButtonV2, BUTTON_SIZES } from "@elliemae/ds-button-v2";
7
7
  import { ArrowShortReturn, ArrowShortRight, CloseMedium } from "@elliemae/ds-icons";
8
8
  import { useActionsHandlers } from "./useActionsHandlers";
9
9
  import { useInnerRefHandlers } from "./useInnerRefHandlers";
@@ -11,7 +11,7 @@ import { DSShuttleV2Name, DSShuttleV2Slots } from "../../../config/DSShuttleV2De
11
11
  const StyledItemActions = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTIONS_WRAPPER })``;
12
12
  const StyledItemActionWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_WRAPPER })``;
13
13
  const StyledButton = styled(DSButtonV2, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_BTN })`
14
- height: 22px !important;
14
+ height: 1.692rem !important;
15
15
  svg {
16
16
  fill: brand-600;
17
17
  }
@@ -31,24 +31,25 @@ const StyledArrowShortRightIcon = styled(ArrowShortRight, {
31
31
  name: DSShuttleV2Name,
32
32
  slot: DSShuttleV2Slots.ITEM_ACTION_BTN_TO_DESTINATION_ICON
33
33
  })``;
34
- const actionsCols = ["20px", "20px"];
34
+ const actionsCols = ["1.538rem", "1.538rem"];
35
35
  const ItemActions = React2.memo((itemMeta) => {
36
- const { item, isDestinationPanel } = itemMeta;
37
- const { original, withActions } = item;
38
- const { preventDrilldown, preventMove } = original;
36
+ const { datumHydratables, isDestinationPanel, datumRenderFlags } = itemMeta;
37
+ const { withActions, internallyDisabledDrilldown, internallyDisabledMove } = datumRenderFlags;
38
+ const { preventDrilldown, preventMove } = datumHydratables;
39
39
  const { shouldFocusDrilldown, shouldFocusMove, innerRefHandlerDrilldown, innerRefHandlerMove } = useInnerRefHandlers(itemMeta);
40
- const { handleClickDrilldown, handleClickSingleMove } = useActionsHandlers(itemMeta);
40
+ const { handleClickDrilldown, handleClickSingleMove, handleKeyDownSelectionBubbleUp } = useActionsHandlers(itemMeta);
41
41
  return /* @__PURE__ */ jsx(StyledItemActions, { cols: actionsCols, gutter: "xxs", pl: "xs", pr: "xxs", alignItems: "center", children: withActions ? /* @__PURE__ */ jsxs(Fragment, { children: [
42
42
  /* @__PURE__ */ jsx(StyledItemActionWrapper, { children: /* @__PURE__ */ jsx(
43
43
  StyledButton,
44
44
  {
45
45
  buttonType: "icon",
46
46
  onClick: handleClickDrilldown,
47
+ onKeyDown: handleKeyDownSelectionBubbleUp,
47
48
  size: BUTTON_SIZES.S,
48
49
  innerRef: innerRefHandlerDrilldown,
49
50
  tabIndex: shouldFocusDrilldown && !preventDrilldown ? 0 : -1,
50
- disabled: preventDrilldown === true,
51
- children: /* @__PURE__ */ jsx(StyledDrilldownIcon, { width: "20px", height: "20px" })
51
+ disabled: internallyDisabledDrilldown || preventDrilldown === true,
52
+ children: /* @__PURE__ */ jsx(StyledDrilldownIcon, { width: "1.538rem", height: "1.538rem" })
52
53
  }
53
54
  ) }),
54
55
  /* @__PURE__ */ jsx(StyledItemActionWrapper, { children: /* @__PURE__ */ jsx(
@@ -56,11 +57,12 @@ const ItemActions = React2.memo((itemMeta) => {
56
57
  {
57
58
  buttonType: "icon",
58
59
  onClick: handleClickSingleMove,
60
+ onKeyDown: handleKeyDownSelectionBubbleUp,
59
61
  size: BUTTON_SIZES.S,
60
62
  innerRef: innerRefHandlerMove,
61
63
  tabIndex: shouldFocusMove && !preventMove ? 0 : -1,
62
- disabled: preventMove === true,
63
- children: isDestinationPanel ? /* @__PURE__ */ jsx(StyledCloseMediumIcon, { width: "20px", height: "20px" }) : /* @__PURE__ */ jsx(StyledArrowShortRightIcon, { width: "20px", height: "20px" })
64
+ disabled: internallyDisabledMove || preventMove === true,
65
+ children: isDestinationPanel ? /* @__PURE__ */ jsx(StyledCloseMediumIcon, { width: "1.538rem", height: "1.538rem" }) : /* @__PURE__ */ jsx(StyledArrowShortRightIcon, { width: "1.538rem", height: "1.538rem" })
64
66
  }
65
67
  ) })
66
68
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Item/ItemActions/ItemActions.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButtonV2, BUTTON_SIZES } from '@elliemae/ds-button';\nimport { ArrowShortReturn, ArrowShortRight, CloseMedium } from '@elliemae/ds-icons';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useActionsHandlers } from './useActionsHandlers';\nimport { useInnerRefHandlers } from './useInnerRefHandlers';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../../config/DSShuttleV2Definitions';\n\nconst StyledItemActions = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTIONS_WRAPPER })``;\nconst StyledItemActionWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_WRAPPER })``;\nconst StyledButton = styled(DSButtonV2, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_BTN })`\n height: 22px !important;\n svg {\n fill: brand-600;\n }\n :disabled svg {\n fill: neutral-200 !important;\n }\n`;\nconst StyledDrilldownIcon = styled(ArrowShortReturn, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_DRILLDOWN_ICON,\n})``;\nconst StyledCloseMediumIcon = styled(CloseMedium, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_TO_SOURCE_ICON,\n})``;\nconst StyledArrowShortRightIcon = styled(ArrowShortRight, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_TO_DESTINATION_ICON,\n})``;\n\nconst actionsCols = ['20px', '20px'];\n\nexport const ItemActions = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const { item, isDestinationPanel } = itemMeta;\n // withActions is calculated in /src/config/configureAutoCalculated.ts\n const { original, withActions } = item;\n const { preventDrilldown, preventMove } = original;\n const { shouldFocusDrilldown, shouldFocusMove, innerRefHandlerDrilldown, innerRefHandlerMove } =\n useInnerRefHandlers(itemMeta);\n const { handleClickDrilldown, handleClickSingleMove } = useActionsHandlers(itemMeta);\n\n return (\n <StyledItemActions cols={actionsCols} gutter=\"xxs\" pl=\"xs\" pr=\"xxs\" alignItems=\"center\">\n {withActions ? (\n <>\n <StyledItemActionWrapper>\n <StyledButton\n buttonType=\"icon\"\n onClick={handleClickDrilldown}\n size={BUTTON_SIZES.S}\n innerRef={innerRefHandlerDrilldown}\n tabIndex={shouldFocusDrilldown && !preventDrilldown ? 0 : -1}\n disabled={preventDrilldown === true}\n >\n <StyledDrilldownIcon width=\"20px\" height=\"20px\" />\n </StyledButton>\n </StyledItemActionWrapper>\n <StyledItemActionWrapper>\n <StyledButton\n buttonType=\"icon\"\n onClick={handleClickSingleMove}\n size={BUTTON_SIZES.S}\n innerRef={innerRefHandlerMove}\n tabIndex={shouldFocusMove && !preventMove ? 0 : -1}\n disabled={preventMove === true}\n >\n {isDestinationPanel ? (\n <StyledCloseMediumIcon width=\"20px\" height=\"20px\" />\n ) : (\n <StyledArrowShortRightIcon width=\"20px\" height=\"20px\" />\n )}\n </StyledButton>\n </StyledItemActionWrapper>\n </>\n ) : (\n // this is a place-holder used for mantainting the grid spacing\n <>\n <div />\n <div />\n </>\n )}\n </StyledItemActions>\n );\n});\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACgDf,mBAUM,KAVN;AAhDR,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,YAAY,oBAAoB;AACzC,SAAS,kBAAkB,iBAAiB,mBAAmB;AAE/D,SAAS,0BAA0B;AACnC,SAAS,2BAA2B;AACpC,SAAS,iBAAiB,wBAAwB;AAElD,MAAM,oBAAoB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,qBAAqB,CAAC;AAC7G,MAAM,0BAA0B,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,oBAAoB,CAAC;AAClH,MAAM,eAAe,OAAO,YAAY,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASzG,MAAM,sBAAsB,OAAO,kBAAkB;AAAA,EACnD,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AACD,MAAM,wBAAwB,OAAO,aAAa;AAAA,EAChD,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AACD,MAAM,4BAA4B,OAAO,iBAAiB;AAAA,EACxD,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AAED,MAAM,cAAc,CAAC,QAAQ,MAAM;AAE5B,MAAM,cAAcA,OAAM,KAAK,CAAC,aAAoC;AACzE,QAAM,EAAE,MAAM,mBAAmB,IAAI;AAErC,QAAM,EAAE,UAAU,YAAY,IAAI;AAClC,QAAM,EAAE,kBAAkB,YAAY,IAAI;AAC1C,QAAM,EAAE,sBAAsB,iBAAiB,0BAA0B,oBAAoB,IAC3F,oBAAoB,QAAQ;AAC9B,QAAM,EAAE,sBAAsB,sBAAsB,IAAI,mBAAmB,QAAQ;AAEnF,SACE,oBAAC,qBAAkB,MAAM,aAAa,QAAO,OAAM,IAAG,MAAK,IAAG,OAAM,YAAW,UAC5E,wBACC,iCACE;AAAA,wBAAC,2BACC;AAAA,MAAC;AAAA;AAAA,QACC,YAAW;AAAA,QACX,SAAS;AAAA,QACT,MAAM,aAAa;AAAA,QACnB,UAAU;AAAA,QACV,UAAU,wBAAwB,CAAC,mBAAmB,IAAI;AAAA,QAC1D,UAAU,qBAAqB;AAAA,QAE/B,8BAAC,uBAAoB,OAAM,QAAO,QAAO,QAAO;AAAA;AAAA,IAClD,GACF;AAAA,IACA,oBAAC,2BACC;AAAA,MAAC;AAAA;AAAA,QACC,YAAW;AAAA,QACX,SAAS;AAAA,QACT,MAAM,aAAa;AAAA,QACnB,UAAU;AAAA,QACV,UAAU,mBAAmB,CAAC,cAAc,IAAI;AAAA,QAChD,UAAU,gBAAgB;AAAA,QAEzB,+BACC,oBAAC,yBAAsB,OAAM,QAAO,QAAO,QAAO,IAElD,oBAAC,6BAA0B,OAAM,QAAO,QAAO,QAAO;AAAA;AAAA,IAE1D,GACF;AAAA,KACF,IAGA,iCACE;AAAA,wBAAC,SAAI;AAAA,IACL,oBAAC,SAAI;AAAA,KACP,GAEJ;AAEJ,CAAC;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButtonV2, BUTTON_SIZES } from '@elliemae/ds-button-v2';\nimport { ArrowShortReturn, ArrowShortRight, CloseMedium } from '@elliemae/ds-icons';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useActionsHandlers } from './useActionsHandlers';\nimport { useInnerRefHandlers } from './useInnerRefHandlers';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../../config/DSShuttleV2Definitions';\n\nconst StyledItemActions = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTIONS_WRAPPER })``;\nconst StyledItemActionWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_WRAPPER })``;\nconst StyledButton = styled(DSButtonV2, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_BTN })`\n height: 1.692rem !important;\n svg {\n fill: brand-600;\n }\n :disabled svg {\n fill: neutral-200 !important;\n }\n`;\nconst StyledDrilldownIcon = styled(ArrowShortReturn, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_DRILLDOWN_ICON,\n})``;\nconst StyledCloseMediumIcon = styled(CloseMedium, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_TO_SOURCE_ICON,\n})``;\nconst StyledArrowShortRightIcon = styled(ArrowShortRight, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_TO_DESTINATION_ICON,\n})``;\n\nconst actionsCols = ['1.538rem', '1.538rem'];\n\nexport const ItemActions = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const { datumHydratables, isDestinationPanel, datumRenderFlags } = itemMeta;\n // withActions is calculated in /src/config/configureAutoCalculated.ts\n const { withActions, internallyDisabledDrilldown, internallyDisabledMove } = datumRenderFlags;\n const { preventDrilldown, preventMove } = datumHydratables;\n const { shouldFocusDrilldown, shouldFocusMove, innerRefHandlerDrilldown, innerRefHandlerMove } =\n useInnerRefHandlers(itemMeta);\n const { handleClickDrilldown, handleClickSingleMove, handleKeyDownSelectionBubbleUp } = useActionsHandlers(itemMeta);\n\n return (\n <StyledItemActions cols={actionsCols} gutter=\"xxs\" pl=\"xs\" pr=\"xxs\" alignItems=\"center\">\n {withActions ? (\n <>\n <StyledItemActionWrapper>\n <StyledButton\n buttonType=\"icon\"\n onClick={handleClickDrilldown}\n onKeyDown={handleKeyDownSelectionBubbleUp}\n size={BUTTON_SIZES.S}\n innerRef={innerRefHandlerDrilldown}\n tabIndex={shouldFocusDrilldown && !preventDrilldown ? 0 : -1}\n disabled={internallyDisabledDrilldown || preventDrilldown === true}\n >\n <StyledDrilldownIcon width=\"1.538rem\" height=\"1.538rem\" />\n </StyledButton>\n </StyledItemActionWrapper>\n <StyledItemActionWrapper>\n <StyledButton\n buttonType=\"icon\"\n onClick={handleClickSingleMove}\n onKeyDown={handleKeyDownSelectionBubbleUp}\n size={BUTTON_SIZES.S}\n innerRef={innerRefHandlerMove}\n tabIndex={shouldFocusMove && !preventMove ? 0 : -1}\n disabled={internallyDisabledMove || preventMove === true}\n >\n {isDestinationPanel ? (\n <StyledCloseMediumIcon width=\"1.538rem\" height=\"1.538rem\" />\n ) : (\n <StyledArrowShortRightIcon width=\"1.538rem\" height=\"1.538rem\" />\n )}\n </StyledButton>\n </StyledItemActionWrapper>\n </>\n ) : (\n // this is a place-holder used for mantainting the grid spacing when item has no actions (so when item is soft-deleted)\n <>\n <div />\n <div />\n </>\n )}\n </StyledItemActions>\n );\n});\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACgDf,mBAWM,KAXN;AAhDR,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,YAAY,oBAAoB;AACzC,SAAS,kBAAkB,iBAAiB,mBAAmB;AAE/D,SAAS,0BAA0B;AACnC,SAAS,2BAA2B;AACpC,SAAS,iBAAiB,wBAAwB;AAElD,MAAM,oBAAoB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,qBAAqB,CAAC;AAC7G,MAAM,0BAA0B,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,oBAAoB,CAAC;AAClH,MAAM,eAAe,OAAO,YAAY,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASzG,MAAM,sBAAsB,OAAO,kBAAkB;AAAA,EACnD,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AACD,MAAM,wBAAwB,OAAO,aAAa;AAAA,EAChD,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AACD,MAAM,4BAA4B,OAAO,iBAAiB;AAAA,EACxD,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AAED,MAAM,cAAc,CAAC,YAAY,UAAU;AAEpC,MAAM,cAAcA,OAAM,KAAK,CAAC,aAAoC;AACzE,QAAM,EAAE,kBAAkB,oBAAoB,iBAAiB,IAAI;AAEnE,QAAM,EAAE,aAAa,6BAA6B,uBAAuB,IAAI;AAC7E,QAAM,EAAE,kBAAkB,YAAY,IAAI;AAC1C,QAAM,EAAE,sBAAsB,iBAAiB,0BAA0B,oBAAoB,IAC3F,oBAAoB,QAAQ;AAC9B,QAAM,EAAE,sBAAsB,uBAAuB,+BAA+B,IAAI,mBAAmB,QAAQ;AAEnH,SACE,oBAAC,qBAAkB,MAAM,aAAa,QAAO,OAAM,IAAG,MAAK,IAAG,OAAM,YAAW,UAC5E,wBACC,iCACE;AAAA,wBAAC,2BACC;AAAA,MAAC;AAAA;AAAA,QACC,YAAW;AAAA,QACX,SAAS;AAAA,QACT,WAAW;AAAA,QACX,MAAM,aAAa;AAAA,QACnB,UAAU;AAAA,QACV,UAAU,wBAAwB,CAAC,mBAAmB,IAAI;AAAA,QAC1D,UAAU,+BAA+B,qBAAqB;AAAA,QAE9D,8BAAC,uBAAoB,OAAM,YAAW,QAAO,YAAW;AAAA;AAAA,IAC1D,GACF;AAAA,IACA,oBAAC,2BACC;AAAA,MAAC;AAAA;AAAA,QACC,YAAW;AAAA,QACX,SAAS;AAAA,QACT,WAAW;AAAA,QACX,MAAM,aAAa;AAAA,QACnB,UAAU;AAAA,QACV,UAAU,mBAAmB,CAAC,cAAc,IAAI;AAAA,QAChD,UAAU,0BAA0B,gBAAgB;AAAA,QAEnD,+BACC,oBAAC,yBAAsB,OAAM,YAAW,QAAO,YAAW,IAE1D,oBAAC,6BAA0B,OAAM,YAAW,QAAO,YAAW;AAAA;AAAA,IAElE,GACF;AAAA,KACF,IAGA,iCACE;AAAA,wBAAC,SAAI;AAAA,IACL,oBAAC,SAAI;AAAA,KACP,GAEJ;AAEJ,CAAC;",
6
6
  "names": ["React"]
7
7
  }
@@ -2,15 +2,20 @@ import * as React from "react";
2
2
  import React2 from "react";
3
3
  import { useActionsLogicHandlers } from "./useActionsLogicHandlers";
4
4
  const useActionsHandlers = (itemMeta) => {
5
- const { handleDrilldown, handleSingleMove } = useActionsLogicHandlers(itemMeta);
5
+ const { handleDrilldown, handleSingleMove, preventKeyDownSelectionBubbleUp } = useActionsLogicHandlers(itemMeta);
6
6
  const handleClickDrilldown = React2.useCallback(handleDrilldown, [handleDrilldown]);
7
7
  const handleClickSingleMove = React2.useCallback(handleSingleMove, [handleSingleMove]);
8
+ const handleKeyDownSelectionBubbleUp = React2.useCallback(
9
+ preventKeyDownSelectionBubbleUp,
10
+ [preventKeyDownSelectionBubbleUp]
11
+ );
8
12
  return React2.useMemo(
9
13
  () => ({
10
14
  handleClickDrilldown,
11
- handleClickSingleMove
15
+ handleClickSingleMove,
16
+ handleKeyDownSelectionBubbleUp
12
17
  }),
13
- [handleClickDrilldown, handleClickSingleMove]
18
+ [handleClickDrilldown, handleClickSingleMove, handleKeyDownSelectionBubbleUp]
14
19
  );
15
20
  };
16
21
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Item/ItemActions/useActionsHandlers.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { type DSButtonT } from '@elliemae/ds-button';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useActionsLogicHandlers } from './useActionsLogicHandlers';\n\nexport const useActionsHandlers = (itemMeta: DSShuttleV2T.ItemMeta) => {\n const { handleDrilldown, handleSingleMove } = useActionsLogicHandlers(itemMeta);\n const handleClickDrilldown: DSButtonT.Props['onClick'] = React.useCallback(handleDrilldown, [handleDrilldown]);\n const handleClickSingleMove: DSButtonT.Props['onClick'] = React.useCallback(handleSingleMove, [handleSingleMove]);\n\n return React.useMemo(\n () => ({\n handleClickDrilldown,\n handleClickSingleMove,\n }),\n [handleClickDrilldown, handleClickSingleMove],\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB,OAAOA,YAAW;AAGlB,SAAS,+BAA+B;AAEjC,MAAM,qBAAqB,CAAC,aAAoC;AACrE,QAAM,EAAE,iBAAiB,iBAAiB,IAAI,wBAAwB,QAAQ;AAC9E,QAAM,uBAAmDA,OAAM,YAAY,iBAAiB,CAAC,eAAe,CAAC;AAC7G,QAAM,wBAAoDA,OAAM,YAAY,kBAAkB,CAAC,gBAAgB,CAAC;AAEhH,SAAOA,OAAM;AAAA,IACX,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,sBAAsB,qBAAqB;AAAA,EAC9C;AACF;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { type DSButtonT } from '@elliemae/ds-button-v2';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useActionsLogicHandlers } from './useActionsLogicHandlers';\n\nexport const useActionsHandlers = (itemMeta: DSShuttleV2T.ItemMeta) => {\n const { handleDrilldown, handleSingleMove, preventKeyDownSelectionBubbleUp } = useActionsLogicHandlers(itemMeta);\n const handleClickDrilldown: DSButtonT.Props['onClick'] = React.useCallback(handleDrilldown, [handleDrilldown]);\n const handleClickSingleMove: DSButtonT.Props['onClick'] = React.useCallback(handleSingleMove, [handleSingleMove]);\n const handleKeyDownSelectionBubbleUp: DSButtonT.Props['onKeyDown'] = React.useCallback(\n preventKeyDownSelectionBubbleUp,\n [preventKeyDownSelectionBubbleUp],\n );\n return React.useMemo(\n () => ({\n handleClickDrilldown,\n handleClickSingleMove,\n handleKeyDownSelectionBubbleUp,\n }),\n [handleClickDrilldown, handleClickSingleMove, handleKeyDownSelectionBubbleUp],\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,OAAOA,YAAW;AAGlB,SAAS,+BAA+B;AAEjC,MAAM,qBAAqB,CAAC,aAAoC;AACrE,QAAM,EAAE,iBAAiB,kBAAkB,gCAAgC,IAAI,wBAAwB,QAAQ;AAC/G,QAAM,uBAAmDA,OAAM,YAAY,iBAAiB,CAAC,eAAe,CAAC;AAC7G,QAAM,wBAAoDA,OAAM,YAAY,kBAAkB,CAAC,gBAAgB,CAAC;AAChH,QAAM,iCAA+DA,OAAM;AAAA,IACzE;AAAA,IACA,CAAC,+BAA+B;AAAA,EAClC;AACA,SAAOA,OAAM;AAAA,IACX,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,sBAAsB,uBAAuB,8BAA8B;AAAA,EAC9E;AACF;",
6
6
  "names": ["React"]
7
7
  }