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

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 (170) 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 +5 -5
  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 +3 -1
  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 +1 -1
  64. package/dist/cjs/parts/Panel/bottom/PanelContentBottomSection.js.map +1 -1
  65. package/dist/cjs/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js +4 -3
  66. package/dist/cjs/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js.map +2 -2
  67. package/dist/cjs/parts/Panel/middle/{ItemListWrapper.js → ItemListWrapper/Index.js} +25 -19
  68. package/dist/cjs/parts/Panel/middle/ItemListWrapper/Index.js.map +7 -0
  69. package/dist/cjs/parts/Panel/middle/ItemListWrapper/getDatumFlags.js +44 -0
  70. package/dist/cjs/parts/Panel/middle/ItemListWrapper/getDatumFlags.js.map +7 -0
  71. package/dist/cjs/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js +57 -0
  72. package/dist/cjs/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js.map +7 -0
  73. package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js +30 -7
  74. package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
  75. package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js +12 -22
  76. package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
  77. package/dist/cjs/parts/Panel/top/SelectionHeader.js +1 -1
  78. package/dist/cjs/parts/Panel/top/SelectionHeader.js.map +2 -2
  79. package/dist/cjs/parts/PanelWrapper.js +8 -11
  80. package/dist/cjs/parts/PanelWrapper.js.map +2 -2
  81. package/dist/cjs/react-desc-prop-types.js +31 -14
  82. package/dist/cjs/react-desc-prop-types.js.map +2 -2
  83. package/dist/esm/DSShuttleV2.js.map +2 -2
  84. package/dist/esm/config/DSShuttleV2Definitions.js.map +1 -1
  85. package/dist/esm/config/itemMovementHelpers.js +99 -74
  86. package/dist/esm/config/itemMovementHelpers.js.map +2 -2
  87. package/dist/esm/config/useAutoCalculated/useDataStructure.js +55 -34
  88. package/dist/esm/config/useAutoCalculated/useDataStructure.js.map +2 -2
  89. package/dist/esm/config/useAutoCalculated/useShuttleVirtualized.js.map +2 -2
  90. package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js +6 -6
  91. package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
  92. package/dist/esm/config/useFocusTracker/useFocusItemTracker.js +5 -5
  93. package/dist/esm/config/useFocusTracker/useFocusItemTracker.js.map +2 -2
  94. package/dist/esm/config/useFocusTracker/useFocusRegionTrackers.js +2 -2
  95. package/dist/esm/config/useFocusTracker/useFocusRegionTrackers.js.map +2 -2
  96. package/dist/esm/config/useShuttleV2.js +3 -1
  97. package/dist/esm/config/useShuttleV2.js.map +2 -2
  98. package/dist/esm/config/useStore/createAtomInStore.bak +18 -0
  99. package/dist/esm/config/useStore/useStore.js +14 -1
  100. package/dist/esm/config/useStore/useStore.js.map +2 -2
  101. package/dist/esm/config/useValidateProps.js +10 -0
  102. package/dist/esm/config/useValidateProps.js.map +7 -0
  103. package/dist/esm/constants/index.js +3 -1
  104. package/dist/esm/constants/index.js.map +2 -2
  105. package/dist/esm/parts/Dnd/DndHandle.js +17 -10
  106. package/dist/esm/parts/Dnd/DndHandle.js.map +2 -2
  107. package/dist/esm/parts/Dnd/DragOverlay.js +21 -0
  108. package/dist/esm/parts/Dnd/DragOverlay.js.map +7 -0
  109. package/dist/esm/parts/Header.js +4 -4
  110. package/dist/esm/parts/Header.js.map +2 -2
  111. package/dist/esm/parts/HoC/withConditionalDnDRowContext.js +43 -18
  112. package/dist/esm/parts/HoC/withConditionalDnDRowContext.js.map +3 -3
  113. package/dist/esm/parts/HoC/withConditionalUseSortable.js +4 -3
  114. package/dist/esm/parts/HoC/withConditionalUseSortable.js.map +2 -2
  115. package/dist/esm/parts/Item/Item.js +42 -33
  116. package/dist/esm/parts/Item/Item.js.map +2 -2
  117. package/dist/esm/parts/Item/ItemActions/ItemActions.js +13 -11
  118. package/dist/esm/parts/Item/ItemActions/ItemActions.js.map +2 -2
  119. package/dist/esm/parts/Item/ItemActions/useActionsHandlers.js +8 -3
  120. package/dist/esm/parts/Item/ItemActions/useActionsHandlers.js.map +2 -2
  121. package/dist/esm/parts/Item/ItemActions/useActionsLogicHandlers.js +28 -40
  122. package/dist/esm/parts/Item/ItemActions/useActionsLogicHandlers.js.map +2 -2
  123. package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js +2 -2
  124. package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js.map +2 -2
  125. package/dist/esm/parts/Item/ItemMiddleSection.js +20 -21
  126. package/dist/esm/parts/Item/ItemMiddleSection.js.map +2 -2
  127. package/dist/esm/parts/Item/ItemOverlay.js +15 -7
  128. package/dist/esm/parts/Item/ItemOverlay.js.map +2 -2
  129. package/dist/esm/parts/Item/ItemSelection.js +3 -1
  130. package/dist/esm/parts/Item/ItemSelection.js.map +2 -2
  131. package/dist/esm/parts/Item/TextSection.js +24 -0
  132. package/dist/esm/parts/Item/TextSection.js.map +7 -0
  133. package/dist/esm/parts/Item/useItemArrowNavigation.js +47 -21
  134. package/dist/esm/parts/Item/useItemArrowNavigation.js.map +2 -2
  135. package/dist/esm/parts/Item/useItemKeyboardSelection.js +31 -0
  136. package/dist/esm/parts/Item/useItemKeyboardSelection.js.map +7 -0
  137. package/dist/esm/parts/Item/useSelectionLogic.js +64 -21
  138. package/dist/esm/parts/Item/useSelectionLogic.js.map +2 -2
  139. package/dist/esm/parts/MainContent.js +5 -2
  140. package/dist/esm/parts/MainContent.js.map +2 -2
  141. package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js +1 -1
  142. package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js.map +1 -1
  143. package/dist/esm/parts/Panel/bottom/LoadingMore.js +1 -1
  144. package/dist/esm/parts/Panel/bottom/LoadingMore.js.map +2 -2
  145. package/dist/esm/parts/Panel/bottom/PanelContentBottomSection.js +1 -1
  146. package/dist/esm/parts/Panel/bottom/PanelContentBottomSection.js.map +1 -1
  147. package/dist/esm/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js +4 -3
  148. package/dist/esm/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js.map +2 -2
  149. package/dist/esm/parts/Panel/middle/{ItemListWrapper.js → ItemListWrapper/Index.js} +22 -16
  150. package/dist/esm/parts/Panel/middle/ItemListWrapper/Index.js.map +7 -0
  151. package/dist/esm/parts/Panel/middle/ItemListWrapper/getDatumFlags.js +18 -0
  152. package/dist/esm/parts/Panel/middle/ItemListWrapper/getDatumFlags.js.map +7 -0
  153. package/dist/esm/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js +31 -0
  154. package/dist/esm/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js.map +7 -0
  155. package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js +29 -6
  156. package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
  157. package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js +11 -21
  158. package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
  159. package/dist/esm/parts/Panel/top/SelectionHeader.js +1 -1
  160. package/dist/esm/parts/Panel/top/SelectionHeader.js.map +2 -2
  161. package/dist/esm/parts/PanelWrapper.js +8 -11
  162. package/dist/esm/parts/PanelWrapper.js.map +2 -2
  163. package/dist/esm/react-desc-prop-types.js +32 -15
  164. package/dist/esm/react-desc-prop-types.js.map +2 -2
  165. package/package.json +13 -11
  166. package/dist/cjs/config/useStore/createAtomInStore.js.map +0 -7
  167. package/dist/cjs/parts/Panel/middle/ItemListWrapper.js.map +0 -7
  168. package/dist/esm/config/useStore/createAtomInStore.js +0 -14
  169. package/dist/esm/config/useStore/createAtomInStore.js.map +0 -7
  170. package/dist/esm/parts/Panel/middle/ItemListWrapper.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/config/useFocusTracker/useFocusItemTracker.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { useMemo, useCallback } from 'react';\nimport { useMakeMutable } from '@elliemae/ds-utilities';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore, usePropsStore } from '../useStore';\nimport { ITEMS_FOCUSES } from '../../constants/index';\n\nexport const useFocusItemTracker = () => {\n const focusItem = useInternalStore((state) => state.focusItem);\n // tracking actions are always triggered as user action callbacks\n // this means it should always be invoked after all the useEffect execute\n // since this is the case, we can avoid re-declaring the function with mutable pattern\n // this way we avoid useless re-renders\n const mutableFocusItem = useMakeMutable(focusItem);\n\n const setFocusItem = useInternalStore((state) => state.setFocusItem);\n const sourceData = usePropsStore((state) => state.sourceData);\n const destinationData = usePropsStore((state) => state.destinationData);\n const sourceWithLoadMore = usePropsStore((state) => state.sourceWithLoadMore);\n const destinationWithLoadMore = usePropsStore((state) => state.destinationWithLoadMore);\n const trackFocusPrevItem = useCallback(\n ({ isDestinationPanel }: DSShuttleV2T.PanelMetaInfo) => {\n const referenceData = isDestinationPanel ? destinationData : sourceData;\n const withLoadMore = isDestinationPanel ? destinationWithLoadMore : sourceWithLoadMore;\n if (mutableFocusItem.current === ITEMS_FOCUSES.FIRST) {\n if (withLoadMore) setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN);\n else {\n const prevItemIndex = referenceData.length > 1 ? referenceData.length - 1 : 0;\n const prevItem = referenceData[prevItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(prevItem));\n }\n return;\n }\n if (mutableFocusItem.current === ITEMS_FOCUSES.LAST) {\n const prevItemIndex = referenceData.length > 2 ? referenceData.length - 2 : 0;\n const prevItem = referenceData[prevItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(prevItem));\n return;\n }\n // loop logic\n const currentItemIndex = referenceData.findIndex((currItem) => currItem.id === mutableFocusItem.current);\n if (currentItemIndex === 0 && withLoadMore) setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN);\n else if (currentItemIndex !== -1) {\n const prevItemIndex = currentItemIndex === 0 ? referenceData.length - 1 : currentItemIndex - 1;\n const prevItem = referenceData[prevItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(prevItem));\n } else {\n const prevItemIndex = 0;\n const prevItem = referenceData[prevItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(prevItem));\n }\n },\n [destinationData, destinationWithLoadMore, mutableFocusItem, setFocusItem, sourceData, sourceWithLoadMore],\n );\n const trackFocusNextItem = useCallback(\n ({ isDestinationPanel }: DSShuttleV2T.PanelMetaInfo) => {\n const referenceData = isDestinationPanel ? destinationData : sourceData;\n const withLoadMore = isDestinationPanel ? destinationWithLoadMore : sourceWithLoadMore;\n if (mutableFocusItem.current === ITEMS_FOCUSES.FIRST) {\n // \"next\" after the first is position 1,\n // if position 1 exist,\n // else is the \"first\" (position 0) looped back\n const nextItemIndex = referenceData.length > 1 ? 1 : 0;\n const nextItem = referenceData[nextItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(nextItem));\n return;\n }\n if (mutableFocusItem.current === ITEMS_FOCUSES.LAST) {\n if (withLoadMore) setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN);\n else {\n const nextItemIndex = 0;\n const nextItem = referenceData[nextItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(nextItem));\n }\n return;\n }\n // loop logic\n const currentItemIndex = referenceData.findIndex((currItem) => currItem.id === mutableFocusItem.current);\n if (currentItemIndex === referenceData.length - 1 && withLoadMore) setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN);\n else if (currentItemIndex !== -1) {\n const nextItemIndex = currentItemIndex === referenceData.length - 1 ? 0 : currentItemIndex + 1;\n const nextItem = referenceData[nextItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(nextItem));\n } else {\n const nextItemIndex = referenceData.length - 1;\n const nextItem = referenceData[nextItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(nextItem));\n }\n },\n [destinationData, destinationWithLoadMore, mutableFocusItem, setFocusItem, sourceData, sourceWithLoadMore],\n );\n return useMemo(\n () => ({\n mutableFocusItem,\n trackFocusItem: (item: DSShuttleV2T.ConfiguredDatum) => setFocusItem(item.original.id),\n trackFocusItemReset: () => setFocusItem(ITEMS_FOCUSES.RESET),\n trackFocusItemFirst: () => setFocusItem(ITEMS_FOCUSES.FIRST),\n trackFocusItemLast: () => setFocusItem(ITEMS_FOCUSES.LAST),\n trackFocusLoadMoreBtn: () => setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN),\n trackFocusPrevItem,\n trackFocusNextItem,\n }),\n [mutableFocusItem, setFocusItem, trackFocusNextItem, trackFocusPrevItem],\n );\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { useMemo, useCallback } from 'react';\nimport { useMakeMutable } from '@elliemae/ds-utilities';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore, usePropsStore } from '../useStore';\nimport { ITEMS_FOCUSES } from '../../constants/index';\n\nexport const useFocusItemTracker = () => {\n const focusItem = useInternalStore((state) => state.focusItem);\n // tracking actions are always triggered as user action callbacks\n // this means it should always be invoked after all the useEffect execute\n // since this is the case, we can avoid re-declaring the function with mutable pattern\n // this way we avoid useless re-renders\n const mutableFocusItem = useMakeMutable(focusItem);\n const setFocusItem = useInternalStore((state) => state.setFocusItem);\n const sourceData = useInternalStore((state) => state.sourceConfiguredData);\n const destinationData = useInternalStore((state) => state.destinationConfiguredData);\n const sourceWithLoadMore = usePropsStore((state) => state.sourceWithLoadMore);\n const destinationWithLoadMore = usePropsStore((state) => state.destinationWithLoadMore);\n const trackFocusPrevItem = useCallback(\n ({ isDestinationPanel }: DSShuttleV2T.PanelMetaInfo) => {\n const referenceData = isDestinationPanel ? destinationData : sourceData;\n const withLoadMore = isDestinationPanel ? destinationWithLoadMore : sourceWithLoadMore;\n if (mutableFocusItem.current === ITEMS_FOCUSES.FIRST) {\n if (withLoadMore) setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN);\n else {\n const prevItemIndex = referenceData.length > 1 ? referenceData.length - 1 : 0;\n const prevItem = referenceData[prevItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(prevItem));\n }\n return;\n }\n if (mutableFocusItem.current === ITEMS_FOCUSES.LAST) {\n const prevItemIndex = referenceData.length > 2 ? referenceData.length - 2 : 0;\n const prevItem = referenceData[prevItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(prevItem));\n return;\n }\n // loop logic\n const currentItemIndex = referenceData.findIndex((currItem) => currItem.hydratedId === mutableFocusItem.current);\n if (currentItemIndex === 0 && withLoadMore) setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN);\n else if (currentItemIndex !== -1) {\n const prevItemIndex = currentItemIndex === 0 ? referenceData.length - 1 : currentItemIndex - 1;\n const prevItem = referenceData[prevItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(prevItem));\n } else {\n const prevItemIndex = 0;\n const prevItem = referenceData[prevItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(prevItem));\n }\n },\n [destinationData, destinationWithLoadMore, mutableFocusItem, setFocusItem, sourceData, sourceWithLoadMore],\n );\n const trackFocusNextItem = useCallback(\n ({ isDestinationPanel }: DSShuttleV2T.PanelMetaInfo) => {\n const referenceData = isDestinationPanel ? destinationData : sourceData;\n const withLoadMore = isDestinationPanel ? destinationWithLoadMore : sourceWithLoadMore;\n if (mutableFocusItem.current === ITEMS_FOCUSES.FIRST) {\n // \"next\" after the first is position 1,\n // if position 1 exist,\n // else is the \"first\" (position 0) looped back\n const nextItemIndex = referenceData.length > 1 ? 1 : 0;\n const nextItem = referenceData[nextItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(nextItem));\n return;\n }\n if (mutableFocusItem.current === ITEMS_FOCUSES.LAST) {\n if (withLoadMore) setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN);\n else {\n const nextItemIndex = 0;\n const nextItem = referenceData[nextItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(nextItem));\n }\n return;\n }\n // focus loop logic\n const currentItemIndex = referenceData.findIndex((currItem) => currItem.hydratedId === mutableFocusItem.current);\n if (currentItemIndex === referenceData.length - 1 && withLoadMore) setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN);\n else if (currentItemIndex !== -1) {\n const nextItemIndex = currentItemIndex === referenceData.length - 1 ? 0 : currentItemIndex + 1;\n const nextItem = referenceData[nextItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(nextItem));\n } else {\n const nextItemIndex = referenceData.length - 1;\n const nextItem = referenceData[nextItemIndex];\n setFocusItem(ITEMS_FOCUSES.GET_SPECIFIC_ITEM(nextItem));\n }\n },\n [destinationData, destinationWithLoadMore, mutableFocusItem, setFocusItem, sourceData, sourceWithLoadMore],\n );\n return useMemo(\n () => ({\n mutableFocusItem,\n trackFocusItem: (item: DSShuttleV2T.ConfiguredDatum) => setFocusItem(item.hydratedId),\n trackFocusItemReset: () => setFocusItem(ITEMS_FOCUSES.RESET),\n trackFocusItemFirst: () => setFocusItem(ITEMS_FOCUSES.FIRST),\n trackFocusItemLast: () => setFocusItem(ITEMS_FOCUSES.LAST),\n trackFocusLoadMoreBtn: () => setFocusItem(ITEMS_FOCUSES.LOAD_MORE_BTN),\n trackFocusPrevItem,\n trackFocusNextItem,\n }),\n [mutableFocusItem, setFocusItem, trackFocusNextItem, trackFocusPrevItem],\n );\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -19,7 +19,7 @@ const useFocusRegionTrackers = () => {
19
19
  trackFocusRegionDestinationPanel: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL),
20
20
  trackFocusRegionDestinationBottom: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_BOTTOM),
21
21
  trackFocusRegionDestinationPanelItem: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM),
22
- trackFocusRegionDestinationPanelFocusAll: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM_MOVE_ALL),
22
+ trackFocusRegionDestinationPanelFocusMoveAll: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM_MOVE_ALL),
23
23
  trackFocusRegionHeader: (isDestinationPanel) => {
24
24
  if (isDestinationPanel)
25
25
  setFocusRegion(REGIONS_FOCUSES.DESTINATION_HEADER);
@@ -44,7 +44,7 @@ const useFocusRegionTrackers = () => {
44
44
  else
45
45
  setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL_ITEM);
46
46
  },
47
- trackFocusRegionPanelFocusAll: (isDestinationPanel) => {
47
+ trackFocusRegionPanelFocusMoveAll: (isDestinationPanel) => {
48
48
  if (isDestinationPanel)
49
49
  setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM_MOVE_ALL);
50
50
  else
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/config/useFocusTracker/useFocusRegionTrackers.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useMemo } from 'react';\nimport { useMakeMutable } from '@elliemae/ds-utilities';\nimport { useInternalStore } from '../useStore';\nimport { REGIONS_FOCUSES } from '../../constants/index';\n\nexport const useFocusRegionTrackers = () => {\n const focusRegion = useInternalStore((state) => state.focusRegion);\n // tracking actions are always triggered as user action callbacks\n // this means it should always be invoked after all the useEffect execute\n // since this is the case, we can avoid re-declaring the function with mutable pattern\n // this way we avoid useless re-renders\n const mutableFocusRegion = useMakeMutable(focusRegion);\n const setFocusRegion = useInternalStore((state) => state.setFocusRegion);\n return useMemo(\n () => ({\n mutableFocusRegion,\n trackFocusRegionSourceHeader: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_HEADER),\n trackFocusRegionSourcePanel: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL),\n trackFocusRegionSourceBottom: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_BOTTOM),\n trackFocusRegionSourcePanelItem: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL_ITEM),\n trackFocusRegionSourcePanelFocusAll: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL_ITEM_MOVE_ALL),\n trackFocusRegionDestinationHeader: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_HEADER),\n trackFocusRegionDestinationPanel: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL),\n trackFocusRegionDestinationBottom: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_BOTTOM),\n trackFocusRegionDestinationPanelItem: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM),\n trackFocusRegionDestinationPanelFocusAll: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM_MOVE_ALL),\n trackFocusRegionHeader: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_HEADER);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_HEADER);\n },\n trackFocusRegionBottom: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_BOTTOM);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_BOTTOM);\n },\n trackFocusRegionPanel: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL);\n },\n trackFocusRegionPanelItem: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL_ITEM);\n },\n trackFocusRegionPanelFocusAll: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM_MOVE_ALL);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL_ITEM_MOVE_ALL);\n },\n trackFocusRegionReset: () => setFocusRegion(''),\n }),\n [mutableFocusRegion, setFocusRegion],\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,eAAe;AACxB,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAEzB,MAAM,yBAAyB,MAAM;AAC1C,QAAM,cAAc,iBAAiB,CAAC,UAAU,MAAM,WAAW;AAKjE,QAAM,qBAAqB,eAAe,WAAW;AACrD,QAAM,iBAAiB,iBAAiB,CAAC,UAAU,MAAM,cAAc;AACvE,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA,8BAA8B,MAAM,eAAe,gBAAgB,aAAa;AAAA,MAChF,6BAA6B,MAAM,eAAe,gBAAgB,YAAY;AAAA,MAC9E,8BAA8B,MAAM,eAAe,gBAAgB,aAAa;AAAA,MAChF,iCAAiC,MAAM,eAAe,gBAAgB,iBAAiB;AAAA,MACvF,qCAAqC,MAAM,eAAe,gBAAgB,0BAA0B;AAAA,MACpG,mCAAmC,MAAM,eAAe,gBAAgB,kBAAkB;AAAA,MAC1F,kCAAkC,MAAM,eAAe,gBAAgB,iBAAiB;AAAA,MACxF,mCAAmC,MAAM,eAAe,gBAAgB,kBAAkB;AAAA,MAC1F,sCAAsC,MAAM,eAAe,gBAAgB,sBAAsB;AAAA,MACjG,0CAA0C,MAAM,eAAe,gBAAgB,+BAA+B;AAAA,MAC9G,wBAAwB,CAAC,uBAAgC;AACvD,YAAI;AAAoB,yBAAe,gBAAgB,kBAAkB;AAAA;AACpE,yBAAe,gBAAgB,aAAa;AAAA,MACnD;AAAA,MACA,wBAAwB,CAAC,uBAAgC;AACvD,YAAI;AAAoB,yBAAe,gBAAgB,kBAAkB;AAAA;AACpE,yBAAe,gBAAgB,aAAa;AAAA,MACnD;AAAA,MACA,uBAAuB,CAAC,uBAAgC;AACtD,YAAI;AAAoB,yBAAe,gBAAgB,iBAAiB;AAAA;AACnE,yBAAe,gBAAgB,YAAY;AAAA,MAClD;AAAA,MACA,2BAA2B,CAAC,uBAAgC;AAC1D,YAAI;AAAoB,yBAAe,gBAAgB,sBAAsB;AAAA;AACxE,yBAAe,gBAAgB,iBAAiB;AAAA,MACvD;AAAA,MACA,+BAA+B,CAAC,uBAAgC;AAC9D,YAAI;AAAoB,yBAAe,gBAAgB,+BAA+B;AAAA;AACjF,yBAAe,gBAAgB,0BAA0B;AAAA,MAChE;AAAA,MACA,uBAAuB,MAAM,eAAe,EAAE;AAAA,IAChD;AAAA,IACA,CAAC,oBAAoB,cAAc;AAAA,EACrC;AACF;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useMemo } from 'react';\nimport { useMakeMutable } from '@elliemae/ds-utilities';\nimport { useInternalStore } from '../useStore';\nimport { REGIONS_FOCUSES } from '../../constants/index';\n\nexport const useFocusRegionTrackers = () => {\n const focusRegion = useInternalStore((state) => state.focusRegion);\n // tracking actions are always triggered as user action callbacks\n // this means it should always be invoked after all the useEffect execute\n // since this is the case, we can avoid re-declaring the function with mutable pattern\n // this way we avoid useless re-renders\n const mutableFocusRegion = useMakeMutable(focusRegion);\n const setFocusRegion = useInternalStore((state) => state.setFocusRegion);\n return useMemo(\n () => ({\n mutableFocusRegion,\n trackFocusRegionSourceHeader: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_HEADER),\n trackFocusRegionSourcePanel: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL),\n trackFocusRegionSourceBottom: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_BOTTOM),\n trackFocusRegionSourcePanelItem: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL_ITEM),\n trackFocusRegionSourcePanelFocusAll: () => setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL_ITEM_MOVE_ALL),\n trackFocusRegionDestinationHeader: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_HEADER),\n trackFocusRegionDestinationPanel: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL),\n trackFocusRegionDestinationBottom: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_BOTTOM),\n trackFocusRegionDestinationPanelItem: () => setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM),\n trackFocusRegionDestinationPanelFocusMoveAll: () =>\n setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM_MOVE_ALL),\n trackFocusRegionHeader: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_HEADER);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_HEADER);\n },\n trackFocusRegionBottom: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_BOTTOM);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_BOTTOM);\n },\n trackFocusRegionPanel: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL);\n },\n trackFocusRegionPanelItem: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL_ITEM);\n },\n trackFocusRegionPanelFocusMoveAll: (isDestinationPanel: boolean) => {\n if (isDestinationPanel) setFocusRegion(REGIONS_FOCUSES.DESTINATION_PANEL_ITEM_MOVE_ALL);\n else setFocusRegion(REGIONS_FOCUSES.SOURCE_PANEL_ITEM_MOVE_ALL);\n },\n trackFocusRegionReset: () => setFocusRegion(''),\n }),\n [mutableFocusRegion, setFocusRegion],\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,eAAe;AACxB,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAEzB,MAAM,yBAAyB,MAAM;AAC1C,QAAM,cAAc,iBAAiB,CAAC,UAAU,MAAM,WAAW;AAKjE,QAAM,qBAAqB,eAAe,WAAW;AACrD,QAAM,iBAAiB,iBAAiB,CAAC,UAAU,MAAM,cAAc;AACvE,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA,8BAA8B,MAAM,eAAe,gBAAgB,aAAa;AAAA,MAChF,6BAA6B,MAAM,eAAe,gBAAgB,YAAY;AAAA,MAC9E,8BAA8B,MAAM,eAAe,gBAAgB,aAAa;AAAA,MAChF,iCAAiC,MAAM,eAAe,gBAAgB,iBAAiB;AAAA,MACvF,qCAAqC,MAAM,eAAe,gBAAgB,0BAA0B;AAAA,MACpG,mCAAmC,MAAM,eAAe,gBAAgB,kBAAkB;AAAA,MAC1F,kCAAkC,MAAM,eAAe,gBAAgB,iBAAiB;AAAA,MACxF,mCAAmC,MAAM,eAAe,gBAAgB,kBAAkB;AAAA,MAC1F,sCAAsC,MAAM,eAAe,gBAAgB,sBAAsB;AAAA,MACjG,8CAA8C,MAC5C,eAAe,gBAAgB,+BAA+B;AAAA,MAChE,wBAAwB,CAAC,uBAAgC;AACvD,YAAI;AAAoB,yBAAe,gBAAgB,kBAAkB;AAAA;AACpE,yBAAe,gBAAgB,aAAa;AAAA,MACnD;AAAA,MACA,wBAAwB,CAAC,uBAAgC;AACvD,YAAI;AAAoB,yBAAe,gBAAgB,kBAAkB;AAAA;AACpE,yBAAe,gBAAgB,aAAa;AAAA,MACnD;AAAA,MACA,uBAAuB,CAAC,uBAAgC;AACtD,YAAI;AAAoB,yBAAe,gBAAgB,iBAAiB;AAAA;AACnE,yBAAe,gBAAgB,YAAY;AAAA,MAClD;AAAA,MACA,2BAA2B,CAAC,uBAAgC;AAC1D,YAAI;AAAoB,yBAAe,gBAAgB,sBAAsB;AAAA;AACxE,yBAAe,gBAAgB,iBAAiB;AAAA,MACvD;AAAA,MACA,mCAAmC,CAAC,uBAAgC;AAClE,YAAI;AAAoB,yBAAe,gBAAgB,+BAA+B;AAAA;AACjF,yBAAe,gBAAgB,0BAA0B;AAAA,MAChE;AAAA,MACA,uBAAuB,MAAM,eAAe,EAAE;AAAA,IAChD;AAAA,IACA,CAAC,oBAAoB,cAAc;AAAA,EACrC;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,11 +1,13 @@
1
1
  import * as React from "react";
2
2
  import { useEffect } from "react";
3
3
  import { useMemoMergePropsWithDefault } from "@elliemae/ds-utilities";
4
- import { defaultProps } from "../react-desc-prop-types";
4
+ import { defaultProps, DSShuttleV2PropTypesSchema } from "../react-desc-prop-types";
5
5
  import { usePropsStore, useInternalStore } from "./useStore";
6
+ import { useValidateProps } from "./useValidateProps";
6
7
  import { useAutoCalculated } from "./useAutoCalculated";
7
8
  const useShuttleV2 = (propsFromUser) => {
8
9
  const propsWithDefaults = useMemoMergePropsWithDefault(propsFromUser, defaultProps);
10
+ useValidateProps(propsWithDefaults, DSShuttleV2PropTypesSchema);
9
11
  const setProps = usePropsStore((state) => state.set);
10
12
  const setAutoCalculated = useInternalStore((state) => state.set);
11
13
  const autoCalculatedConfig = useAutoCalculated(propsWithDefaults);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/config/useShuttleV2.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useEffect } from 'react';\nimport { useMemoMergePropsWithDefault } from '@elliemae/ds-utilities';\n\nimport { type DSShuttleV2T, defaultProps } from '../react-desc-prop-types';\nimport { usePropsStore, useInternalStore } from './useStore';\nimport { useAutoCalculated } from './useAutoCalculated';\nexport const useShuttleV2 = (propsFromUser: DSShuttleV2T.Props) => {\n // auto-update props-store and auto-calculated when props changes\n const propsWithDefaults = useMemoMergePropsWithDefault<DSShuttleV2T.InternalProps>(propsFromUser, defaultProps);\n const setProps = usePropsStore((state) => state.set);\n const setAutoCalculated = useInternalStore((state) => state.set);\n\n const autoCalculatedConfig = useAutoCalculated(propsWithDefaults);\n useEffect(() => {\n setProps({ ...propsWithDefaults });\n setAutoCalculated(autoCalculatedConfig);\n }, [propsWithDefaults, setProps, setAutoCalculated, autoCalculatedConfig]);\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,iBAAiB;AAC1B,SAAS,oCAAoC;AAE7C,SAA4B,oBAAoB;AAChD,SAAS,eAAe,wBAAwB;AAChD,SAAS,yBAAyB;AAC3B,MAAM,eAAe,CAAC,kBAAsC;AAEjE,QAAM,oBAAoB,6BAAyD,eAAe,YAAY;AAC9G,QAAM,WAAW,cAAc,CAAC,UAAU,MAAM,GAAG;AACnD,QAAM,oBAAoB,iBAAiB,CAAC,UAAU,MAAM,GAAG;AAE/D,QAAM,uBAAuB,kBAAkB,iBAAiB;AAChE,YAAU,MAAM;AACd,aAAS,EAAE,GAAG,kBAAkB,CAAC;AACjC,sBAAkB,oBAAoB;AAAA,EACxC,GAAG,CAAC,mBAAmB,UAAU,mBAAmB,oBAAoB,CAAC;AAC3E;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useEffect } from 'react';\nimport { useMemoMergePropsWithDefault } from '@elliemae/ds-utilities';\n\nimport { type DSShuttleV2T, defaultProps, DSShuttleV2PropTypesSchema } from '../react-desc-prop-types';\nimport { usePropsStore, useInternalStore } from './useStore';\nimport { useValidateProps } from './useValidateProps';\nimport { useAutoCalculated } from './useAutoCalculated';\nexport const useShuttleV2 = (propsFromUser: DSShuttleV2T.Props) => {\n // =============================================================================\n // MERGE WITH DEFAULT AND VALIDATE PROPS\n // =============================================================================\n const propsWithDefaults = useMemoMergePropsWithDefault<DSShuttleV2T.InternalProps>(propsFromUser, defaultProps);\n useValidateProps(propsWithDefaults, DSShuttleV2PropTypesSchema);\n // auto-update props-store and auto-calculated when props changes\n const setProps = usePropsStore((state) => state.set);\n const setAutoCalculated = useInternalStore((state) => state.set);\n\n const autoCalculatedConfig = useAutoCalculated(propsWithDefaults);\n useEffect(() => {\n setProps({ ...propsWithDefaults });\n setAutoCalculated(autoCalculatedConfig);\n }, [propsWithDefaults, setProps, setAutoCalculated, autoCalculatedConfig]);\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,iBAAiB;AAC1B,SAAS,oCAAoC;AAE7C,SAA4B,cAAc,kCAAkC;AAC5E,SAAS,eAAe,wBAAwB;AAChD,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAC3B,MAAM,eAAe,CAAC,kBAAsC;AAIjE,QAAM,oBAAoB,6BAAyD,eAAe,YAAY;AAC9G,mBAAiB,mBAAmB,0BAA0B;AAE9D,QAAM,WAAW,cAAc,CAAC,UAAU,MAAM,GAAG;AACnD,QAAM,oBAAoB,iBAAiB,CAAC,UAAU,MAAM,GAAG;AAE/D,QAAM,uBAAuB,kBAAkB,iBAAiB;AAChE,YAAU,MAAM;AACd,aAAS,EAAE,GAAG,kBAAkB,CAAC;AACjC,sBAAkB,oBAAoB;AAAA,EACxC,GAAG,CAAC,mBAAmB,UAAU,mBAAmB,oBAAoB,CAAC;AAC3E;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,18 @@
1
+ import { type StoreApi } from 'zustand';
2
+ import type { InternalAtoms, Store } from './useStore';
3
+
4
+ type StateSetterNewVal =
5
+ | InternalAtoms[keyof InternalAtoms][0]
6
+ | ((oldVal: InternalAtoms[keyof InternalAtoms][0]) => InternalAtoms[keyof InternalAtoms][0]);
7
+ export const createAtomInStore = (
8
+ defaultVal: InternalAtoms[keyof InternalAtoms][0],
9
+ stateKey: keyof InternalAtoms,
10
+ set: StoreApi<Store>['setState'],
11
+ get: StoreApi<Store>['getState'],
12
+ ) => {
13
+ const stateSetter = (newVal: StateSetterNewVal) => {
14
+ if (typeof newVal === 'function') set({ [stateKey]: [newVal(get()[stateKey][0]), stateSetter] });
15
+ else set({ [stateKey]: [newVal, stateSetter] });
16
+ };
17
+ return [defaultVal, stateSetter] as const;
18
+ };
@@ -37,12 +37,25 @@ const internalStoreCreatorFunc = (autoCalculatedData) => create((set, get) => {
37
37
  setOverId: (overId) => set({ overId }),
38
38
  lastActiveId: "",
39
39
  setLastActiveId: (lastActiveId) => set({ lastActiveId }),
40
+ dndDraggingItem: null,
41
+ setDndDraggingItem: (dndDraggingItem) => set({ dndDraggingItem }),
42
+ dndDraggingItemMeta: null,
43
+ setDndDraggingItemMeta: (dndDraggingItemMeta) => set({ dndDraggingItemMeta }),
40
44
  isDropValid: false,
41
- setIsDropValid: (isDropValid) => set({ isDropValid })
45
+ setIsDropValid: (isDropValid) => set({ isDropValid }),
46
+ sourceLastSelectedItem: null,
47
+ setSourceLastSelectedItem: (sourceLastSelectedItem) => set({ sourceLastSelectedItem }),
48
+ destinationLastSelectedItem: null,
49
+ setDestinationLastSelectedItem: (destinationLastSelectedItem) => set({ destinationLastSelectedItem })
50
+ };
51
+ const composedInformation = {
52
+ getIsDragAndDropHappening: () => Boolean(get()?.lastActiveId) && get()?.lastActiveId !== "",
53
+ getPanelLastSelectedItem: (isDestinationPanel) => isDestinationPanel ? get().destinationLastSelectedItem : get().sourceLastSelectedItem
42
54
  };
43
55
  return {
44
56
  ...constants,
45
57
  ...internalAtoms,
58
+ ...composedInformation,
46
59
  ...autoCalculatedData
47
60
  };
48
61
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/config/useStore/useStore.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useCallback } from 'react';\nimport create, { type StoreApi } from 'zustand';\nimport createContext from 'zustand/context';\nimport { useMemoMergePropsWithDefault } from '@elliemae/ds-utilities';\nimport { type useShuttleVirtualized } from '../useAutoCalculated/useShuttleVirtualized';\nimport { type DSShuttleV2T, defaultProps } from '../../react-desc-prop-types';\nimport type { REGIONS_FOCUSES, ACTIONS_FOCUSES, ITEMS_FOCUSES } from '../../constants';\nimport { useAutoCalculated } from '../useAutoCalculated';\n\ntype FocusRegion = typeof REGIONS_FOCUSES[keyof typeof REGIONS_FOCUSES];\ntype FocusRegionSetter = (newVal: FocusRegion | ((arg: FocusRegion, store: InternalStore) => FocusRegion)) => void;\n\ntype FocusItem = Omit<typeof ITEMS_FOCUSES[keyof typeof ITEMS_FOCUSES], 'GET_SPECIFIC_ITEM'> & string;\ntype FocusItemSetter = (newVal: FocusItem | ((arg: FocusItem, store: InternalStore) => FocusItem)) => void;\n\ntype FocusItemAction = typeof ACTIONS_FOCUSES[keyof typeof ACTIONS_FOCUSES];\ntype FocusItemActionSetter = (\n newVal: FocusItemAction | ((arg: FocusItemAction, store: InternalStore) => FocusItemAction),\n) => void;\n\ntype UseShuttleVirtualizedT = ReturnType<typeof useShuttleVirtualized>;\nexport interface InternalAtoms {\n focusRegion: FocusRegion;\n setFocusRegion: FocusRegionSetter;\n focusItem: FocusItem;\n setFocusItem: FocusItemSetter;\n focusItemAction: FocusItemAction;\n setFocusItemAction: FocusItemActionSetter;\n dropIndicatorPosition: number;\n setDropIndicatorPosition: (newVal: number) => void;\n overId: string;\n setOverId: (newVal: string) => void;\n lastActiveId: string;\n setLastActiveId: (newVal: string) => void;\n isDropValid: boolean;\n setIsDropValid: (newVal: boolean) => void;\n}\nexport interface StoreConstants {\n set: StoreApi<InternalStore>['setState'];\n}\n\nexport interface InternalStore\n extends InternalAtoms,\n UseShuttleVirtualizedT,\n StoreConstants,\n ReturnType<typeof useAutoCalculated> {}\nexport interface PropsStore extends DSShuttleV2T.InternalProps {\n set: StoreApi<PropsStore>['setState'];\n}\n\nconst internalStoreCreatorFunc = (autoCalculatedData: ReturnType<typeof useAutoCalculated>) =>\n create<InternalStore>((set, get) => {\n const constants: StoreConstants = {\n set,\n };\n const internalAtoms: InternalAtoms = {\n focusRegion: '',\n setFocusRegion: (focusRegion) => {\n if (typeof focusRegion === 'function') set({ focusRegion: focusRegion(get().focusRegion, get()) });\n else set({ focusRegion });\n },\n focusItem: '',\n setFocusItem: (focusItem) => {\n if (typeof focusItem === 'function') set({ focusItem: focusItem(get().focusItem, get()) });\n else set({ focusItem });\n },\n focusItemAction: '',\n setFocusItemAction: (focusItemAction) => {\n if (typeof focusItemAction === 'function')\n set({ focusItemAction: focusItemAction(get().focusItemAction, get()) });\n else set({ focusItemAction });\n },\n dropIndicatorPosition: 0,\n setDropIndicatorPosition: (dropIndicatorPosition) => set({ dropIndicatorPosition }),\n overId: '',\n setOverId: (overId) => set({ overId }),\n lastActiveId: '',\n setLastActiveId: (lastActiveId) => set({ lastActiveId }),\n isDropValid: false,\n setIsDropValid: (isDropValid) => set({ isDropValid }),\n };\n\n return {\n ...constants,\n ...internalAtoms,\n ...autoCalculatedData,\n };\n });\nconst propsStoreCreatorFunc = (propsWithDefaults: DSShuttleV2T.InternalProps) =>\n create<PropsStore>((set) => ({\n set,\n ...propsWithDefaults,\n }));\n\nconst {\n Provider: InternalProvider,\n useStore: useInternalStore,\n useStoreApi: useInternalStoreApi,\n} = createContext<ReturnType<typeof internalStoreCreatorFunc>>();\nconst {\n Provider: PropsProvider,\n useStore: usePropsStore,\n useStoreApi: usePropsStoreApi,\n} = createContext<ReturnType<typeof propsStoreCreatorFunc>>();\n\nconst useShuttleV2InternalStoreConfig = (propsFromUser: DSShuttleV2T.Props) => {\n const propsWithDefaults = useMemoMergePropsWithDefault<DSShuttleV2T.InternalProps>(propsFromUser, defaultProps);\n const autoCalculatedData = useAutoCalculated(propsWithDefaults);\n return useCallback(() => internalStoreCreatorFunc(autoCalculatedData), [autoCalculatedData]);\n};\nconst useShuttleV2PropsStoreConfig = (propsFromUser: DSShuttleV2T.Props) => {\n const propsWithDefaults = useMemoMergePropsWithDefault<DSShuttleV2T.InternalProps>(propsFromUser, defaultProps);\n\n return useCallback(() => propsStoreCreatorFunc(propsWithDefaults), [propsWithDefaults]);\n};\n\nexport {\n useInternalStore,\n usePropsStore,\n useInternalStoreApi,\n usePropsStoreApi,\n InternalProvider,\n PropsProvider,\n useShuttleV2InternalStoreConfig,\n useShuttleV2PropsStoreConfig,\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,mBAAmB;AAC5B,OAAO,YAA+B;AACtC,OAAO,mBAAmB;AAC1B,SAAS,oCAAoC;AAE7C,SAA4B,oBAAoB;AAEhD,SAAS,yBAAyB;AA2ClC,MAAM,2BAA2B,CAAC,uBAChC,OAAsB,CAAC,KAAK,QAAQ;AAClC,QAAM,YAA4B;AAAA,IAChC;AAAA,EACF;AACA,QAAM,gBAA+B;AAAA,IACnC,aAAa;AAAA,IACb,gBAAgB,CAAC,gBAAgB;AAC/B,UAAI,OAAO,gBAAgB;AAAY,YAAI,EAAE,aAAa,YAAY,IAAI,EAAE,aAAa,IAAI,CAAC,EAAE,CAAC;AAAA;AAC5F,YAAI,EAAE,YAAY,CAAC;AAAA,IAC1B;AAAA,IACA,WAAW;AAAA,IACX,cAAc,CAAC,cAAc;AAC3B,UAAI,OAAO,cAAc;AAAY,YAAI,EAAE,WAAW,UAAU,IAAI,EAAE,WAAW,IAAI,CAAC,EAAE,CAAC;AAAA;AACpF,YAAI,EAAE,UAAU,CAAC;AAAA,IACxB;AAAA,IACA,iBAAiB;AAAA,IACjB,oBAAoB,CAAC,oBAAoB;AACvC,UAAI,OAAO,oBAAoB;AAC7B,YAAI,EAAE,iBAAiB,gBAAgB,IAAI,EAAE,iBAAiB,IAAI,CAAC,EAAE,CAAC;AAAA;AACnE,YAAI,EAAE,gBAAgB,CAAC;AAAA,IAC9B;AAAA,IACA,uBAAuB;AAAA,IACvB,0BAA0B,CAAC,0BAA0B,IAAI,EAAE,sBAAsB,CAAC;AAAA,IAClF,QAAQ;AAAA,IACR,WAAW,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AAAA,IACrC,cAAc;AAAA,IACd,iBAAiB,CAAC,iBAAiB,IAAI,EAAE,aAAa,CAAC;AAAA,IACvD,aAAa;AAAA,IACb,gBAAgB,CAAC,gBAAgB,IAAI,EAAE,YAAY,CAAC;AAAA,EACtD;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF,CAAC;AACH,MAAM,wBAAwB,CAAC,sBAC7B,OAAmB,CAAC,SAAS;AAAA,EAC3B;AAAA,EACA,GAAG;AACL,EAAE;AAEJ,MAAM;AAAA,EACJ,UAAU;AAAA,EACV,UAAU;AAAA,EACV,aAAa;AACf,IAAI,cAA2D;AAC/D,MAAM;AAAA,EACJ,UAAU;AAAA,EACV,UAAU;AAAA,EACV,aAAa;AACf,IAAI,cAAwD;AAE5D,MAAM,kCAAkC,CAAC,kBAAsC;AAC7E,QAAM,oBAAoB,6BAAyD,eAAe,YAAY;AAC9G,QAAM,qBAAqB,kBAAkB,iBAAiB;AAC9D,SAAO,YAAY,MAAM,yBAAyB,kBAAkB,GAAG,CAAC,kBAAkB,CAAC;AAC7F;AACA,MAAM,+BAA+B,CAAC,kBAAsC;AAC1E,QAAM,oBAAoB,6BAAyD,eAAe,YAAY;AAE9G,SAAO,YAAY,MAAM,sBAAsB,iBAAiB,GAAG,CAAC,iBAAiB,CAAC;AACxF;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* @typescript-eslint/eslint no-use-before-define: ['error',{ typedefs: false }] */\nimport { useCallback } from 'react';\nimport create, { type StoreApi } from 'zustand';\nimport createContext from 'zustand/context';\nimport { useMemoMergePropsWithDefault } from '@elliemae/ds-utilities';\nimport { type useShuttleVirtualized } from '../useAutoCalculated/useShuttleVirtualized';\nimport { type DSShuttleV2T, defaultProps } from '../../react-desc-prop-types';\nimport type { REGIONS_FOCUSES, ACTIONS_FOCUSES, ITEMS_FOCUSES } from '../../constants';\nimport { useAutoCalculated } from '../useAutoCalculated';\n\ntype FocusRegion = (typeof REGIONS_FOCUSES)[keyof typeof REGIONS_FOCUSES];\ntype FocusRegionSetter = (newVal: FocusRegion | ((arg: FocusRegion, store: InternalStore) => FocusRegion)) => void;\n\ntype FocusItem = Omit<(typeof ITEMS_FOCUSES)[keyof typeof ITEMS_FOCUSES], 'GET_SPECIFIC_ITEM'> & string;\ntype FocusItemSetter = (newVal: FocusItem | ((arg: FocusItem, store: InternalStore) => FocusItem)) => void;\n\ntype FocusItemAction = (typeof ACTIONS_FOCUSES)[keyof typeof ACTIONS_FOCUSES];\ntype FocusItemActionSetter = (\n newVal: FocusItemAction | ((arg: FocusItemAction, store: InternalStore) => FocusItemAction),\n) => void;\n\ntype UseShuttleVirtualizedT = ReturnType<typeof useShuttleVirtualized>;\nexport type InternalAtoms = {\n focusRegion: FocusRegion;\n setFocusRegion: FocusRegionSetter;\n focusItem: FocusItem;\n setFocusItem: FocusItemSetter;\n focusItemAction: FocusItemAction;\n setFocusItemAction: FocusItemActionSetter;\n dropIndicatorPosition: number;\n setDropIndicatorPosition: (newVal: number) => void;\n overId: string;\n setOverId: (newVal: string) => void;\n dndDraggingItem: DSShuttleV2T.ConfiguredDatum | null;\n setDndDraggingItem: (newVal: DSShuttleV2T.ConfiguredDatum | null) => void;\n dndDraggingItemMeta: DSShuttleV2T.ItemMeta | null;\n setDndDraggingItemMeta: (newVal: DSShuttleV2T.ItemMeta | null) => void;\n lastActiveId: string;\n setLastActiveId: (newVal: string) => void;\n isDropValid: boolean;\n setIsDropValid: (newVal: boolean) => void;\n sourceLastSelectedItem: string | null | undefined;\n setSourceLastSelectedItem: (newVal: string | null | undefined) => void;\n destinationLastSelectedItem: string | null | undefined;\n setDestinationLastSelectedItem: (newVal: string | null | undefined) => void;\n};\nexport type ComposedInformation = {\n getIsDragAndDropHappening: () => boolean;\n getPanelLastSelectedItem: (isDestinationPanel: boolean) => string | null | undefined;\n};\n\nexport type StoreConstants = {\n set: StoreApi<InternalStore>['setState'];\n};\n\nexport interface InternalStore\n extends InternalAtoms,\n UseShuttleVirtualizedT,\n StoreConstants,\n ComposedInformation,\n ReturnType<typeof useAutoCalculated> {}\nexport interface PropsStore extends DSShuttleV2T.InternalProps {\n set: StoreApi<PropsStore>['setState'];\n}\n\nconst internalStoreCreatorFunc = (autoCalculatedData: ReturnType<typeof useAutoCalculated>) =>\n create<InternalStore>((set, get) => {\n const constants: StoreConstants = {\n set,\n };\n const internalAtoms: InternalAtoms = {\n focusRegion: '',\n setFocusRegion: (focusRegion) => {\n if (typeof focusRegion === 'function') set({ focusRegion: focusRegion(get().focusRegion, get()) });\n else set({ focusRegion });\n },\n focusItem: '',\n setFocusItem: (focusItem) => {\n if (typeof focusItem === 'function') set({ focusItem: focusItem(get().focusItem, get()) });\n else set({ focusItem });\n },\n focusItemAction: '',\n setFocusItemAction: (focusItemAction) => {\n if (typeof focusItemAction === 'function')\n set({ focusItemAction: focusItemAction(get().focusItemAction, get()) });\n else set({ focusItemAction });\n },\n dropIndicatorPosition: 0,\n setDropIndicatorPosition: (dropIndicatorPosition) => set({ dropIndicatorPosition }),\n overId: '',\n setOverId: (overId) => set({ overId }),\n lastActiveId: '',\n setLastActiveId: (lastActiveId) => set({ lastActiveId }),\n dndDraggingItem: null,\n setDndDraggingItem: (dndDraggingItem) => set({ dndDraggingItem }),\n dndDraggingItemMeta: null,\n setDndDraggingItemMeta: (dndDraggingItemMeta) => set({ dndDraggingItemMeta }),\n isDropValid: false,\n setIsDropValid: (isDropValid) => set({ isDropValid }),\n sourceLastSelectedItem: null,\n setSourceLastSelectedItem: (sourceLastSelectedItem) => set({ sourceLastSelectedItem }),\n destinationLastSelectedItem: null,\n setDestinationLastSelectedItem: (destinationLastSelectedItem) => set({ destinationLastSelectedItem }),\n };\n\n const composedInformation: ComposedInformation = {\n getIsDragAndDropHappening: () => Boolean(get()?.lastActiveId) && get()?.lastActiveId !== '',\n getPanelLastSelectedItem: (isDestinationPanel) =>\n isDestinationPanel ? get().destinationLastSelectedItem : get().sourceLastSelectedItem,\n };\n\n return {\n ...constants,\n ...internalAtoms,\n ...composedInformation,\n ...autoCalculatedData,\n };\n });\nconst propsStoreCreatorFunc = (propsWithDefaults: DSShuttleV2T.InternalProps) =>\n create<PropsStore>((set) => ({\n set,\n ...propsWithDefaults,\n }));\n\nconst {\n Provider: InternalProvider,\n useStore: useInternalStore,\n useStoreApi: useInternalStoreApi,\n} = createContext<ReturnType<typeof internalStoreCreatorFunc>>();\nconst {\n Provider: PropsProvider,\n useStore: usePropsStore,\n useStoreApi: usePropsStoreApi,\n} = createContext<ReturnType<typeof propsStoreCreatorFunc>>();\n\nconst useShuttleV2InternalStoreConfig = (propsFromUser: DSShuttleV2T.Props) => {\n const propsWithDefaults = useMemoMergePropsWithDefault<DSShuttleV2T.InternalProps>(propsFromUser, defaultProps);\n const autoCalculatedData = useAutoCalculated(propsWithDefaults);\n return useCallback(() => internalStoreCreatorFunc(autoCalculatedData), [autoCalculatedData]);\n};\nconst useShuttleV2PropsStoreConfig = (propsFromUser: DSShuttleV2T.Props) => {\n const propsWithDefaults = useMemoMergePropsWithDefault<DSShuttleV2T.InternalProps>(propsFromUser, defaultProps);\n\n return useCallback(() => propsStoreCreatorFunc(propsWithDefaults), [propsWithDefaults]);\n};\n\nexport {\n useInternalStore,\n usePropsStore,\n useInternalStoreApi,\n usePropsStoreApi,\n InternalProvider,\n PropsProvider,\n useShuttleV2InternalStoreConfig,\n useShuttleV2PropsStoreConfig,\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import { useValidateTypescriptPropTypes } from "@elliemae/ds-utilities";
3
+ import { DSShuttleV2Name } from "../constants";
4
+ const useValidateProps = (props, propTypes) => {
5
+ useValidateTypescriptPropTypes(props, propTypes, DSShuttleV2Name);
6
+ };
7
+ export {
8
+ useValidateProps
9
+ };
10
+ //# sourceMappingURL=useValidateProps.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/config/useValidateProps.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useValidateTypescriptPropTypes } from '@elliemae/ds-utilities';\nimport type { WeakValidationMap } from 'react';\nimport { DSShuttleV2Name } from '../constants';\nimport type { DSShuttleV2T } from '../react-desc-prop-types';\n\nexport const useValidateProps = (props: DSShuttleV2T.Props, propTypes: WeakValidationMap<unknown>): void => {\n // we validate the \"required if\" via 'isRequiredIf from our custom PropTypes\n useValidateTypescriptPropTypes(props, propTypes, DSShuttleV2Name);\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,sCAAsC;AAE/C,SAAS,uBAAuB;AAGzB,MAAM,mBAAmB,CAAC,OAA2B,cAAgD;AAE1G,iCAA+B,OAAO,WAAW,eAAe;AAClE;",
6
+ "names": []
7
+ }
@@ -1,4 +1,5 @@
1
1
  import * as React from "react";
2
+ const DSShuttleV2Name = "ds-shuttle-v2";
2
3
  const REGIONS_FOCUSES = {
3
4
  SOURCE_HEADER: "source-header",
4
5
  SOURCE_PANEL: "source-panel",
@@ -23,7 +24,7 @@ const ITEMS_FOCUSES = {
23
24
  FIRST: "first",
24
25
  LAST: "last",
25
26
  LOAD_MORE_BTN: "load-more-btn",
26
- GET_SPECIFIC_ITEM: ({ id }) => id,
27
+ GET_SPECIFIC_ITEM: ({ hydratedId }) => hydratedId,
27
28
  RESET: ""
28
29
  };
29
30
  const DATA_TESTID = {
@@ -32,6 +33,7 @@ const DATA_TESTID = {
32
33
  export {
33
34
  ACTIONS_FOCUSES,
34
35
  DATA_TESTID,
36
+ DSShuttleV2Name,
35
37
  ITEMS_FOCUSES,
36
38
  REGIONS_FOCUSES
37
39
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/constants/index.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const REGIONS_FOCUSES = {\n SOURCE_HEADER: 'source-header',\n SOURCE_PANEL: 'source-panel',\n SOURCE_PANEL_ITEM: 'source-panel-item',\n SOURCE_PANEL_ITEM_MOVE_ALL: 'source-panel-move-all',\n SOURCE_BOTTOM: 'source-bottom',\n DESTINATION_HEADER: 'destination-header',\n DESTINATION_PANEL: 'destination-panel',\n DESTINATION_PANEL_ITEM: 'destination-panel-item',\n DESTINATION_PANEL_ITEM_MOVE_ALL: 'destination-panel-move-all',\n DESTINATION_BOTTOM: 'destination-bottom',\n RESET: '',\n} as const;\n\nexport const ACTIONS_FOCUSES = {\n MOVE_BTN: 'move-btn',\n DRILLDOWN_BTN: 'drilldown-btn',\n DRAG_N_DROP: 'drag-n-drop',\n PARENT: 'parent',\n RESET: '',\n} as const;\n\nexport const ITEMS_FOCUSES = {\n FIRST: 'first',\n LAST: 'last',\n LOAD_MORE_BTN: 'load-more-btn',\n GET_SPECIFIC_ITEM: ({ id }: { id: string }) => id,\n RESET: '',\n} as const;\n\nexport const DATA_TESTID = {\n SHUTTLE_DRAG_HANDLE: 'shuttle-drag-handle',\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAhB,MAAM,kBAAkB;AAAA,EAC7B,eAAe;AAAA,EACf,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,4BAA4B;AAAA,EAC5B,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,iCAAiC;AAAA,EACjC,oBAAoB;AAAA,EACpB,OAAO;AACT;AAEO,MAAM,kBAAkB;AAAA,EAC7B,UAAU;AAAA,EACV,eAAe;AAAA,EACf,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,OAAO;AACT;AAEO,MAAM,gBAAgB;AAAA,EAC3B,OAAO;AAAA,EACP,MAAM;AAAA,EACN,eAAe;AAAA,EACf,mBAAmB,CAAC,EAAE,GAAG,MAAsB;AAAA,EAC/C,OAAO;AACT;AAEO,MAAM,cAAc;AAAA,EACzB,qBAAqB;AACvB;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const DSShuttleV2Name = 'ds-shuttle-v2' as const;\nexport const REGIONS_FOCUSES = {\n SOURCE_HEADER: 'source-header',\n SOURCE_PANEL: 'source-panel',\n SOURCE_PANEL_ITEM: 'source-panel-item',\n SOURCE_PANEL_ITEM_MOVE_ALL: 'source-panel-move-all',\n SOURCE_BOTTOM: 'source-bottom',\n DESTINATION_HEADER: 'destination-header',\n DESTINATION_PANEL: 'destination-panel',\n DESTINATION_PANEL_ITEM: 'destination-panel-item',\n DESTINATION_PANEL_ITEM_MOVE_ALL: 'destination-panel-move-all',\n DESTINATION_BOTTOM: 'destination-bottom',\n RESET: '',\n} as const;\n\nexport const ACTIONS_FOCUSES = {\n MOVE_BTN: 'move-btn',\n DRILLDOWN_BTN: 'drilldown-btn',\n DRAG_N_DROP: 'drag-n-drop',\n PARENT: 'parent',\n RESET: '',\n} as const;\n\nexport const ITEMS_FOCUSES = {\n FIRST: 'first',\n LAST: 'last',\n LOAD_MORE_BTN: 'load-more-btn',\n GET_SPECIFIC_ITEM: ({ hydratedId }: { hydratedId: string }) => hydratedId,\n RESET: '',\n} as const;\n\nexport const DATA_TESTID = {\n SHUTTLE_DRAG_HANDLE: 'shuttle-drag-handle',\n} as const;\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAhB,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AAAA,EAC7B,eAAe;AAAA,EACf,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,4BAA4B;AAAA,EAC5B,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,iCAAiC;AAAA,EACjC,oBAAoB;AAAA,EACpB,OAAO;AACT;AAEO,MAAM,kBAAkB;AAAA,EAC7B,UAAU;AAAA,EACV,eAAe;AAAA,EACf,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,OAAO;AACT;AAEO,MAAM,gBAAgB;AAAA,EAC3B,OAAO;AAAA,EACP,MAAM;AAAA,EACN,eAAe;AAAA,EACf,mBAAmB,CAAC,EAAE,WAAW,MAA8B;AAAA,EAC/D,OAAO;AACT;AAEO,MAAM,cAAc;AAAA,EACzB,qBAAqB;AACvB;",
6
6
  "names": []
7
7
  }
@@ -5,8 +5,14 @@ import { GripperVertical } from "@elliemae/ds-icons";
5
5
  import { styled } from "@elliemae/ds-system";
6
6
  import { mergeRefs } from "@elliemae/ds-utilities";
7
7
  import { DATA_TESTID } from "../../constants";
8
- const StyledGripperButton = styled.div`
9
- cursor: ${({ isActive, isDragOverlay }) => isActive || isDragOverlay ? "grabbing" : "grab"};
8
+ const StyledGripperButtonOrOverlay = styled.div`
9
+ cursor: ${({ isActive, isDragOverlay, disabled }) => {
10
+ if (isActive || isDragOverlay)
11
+ return "grabbing";
12
+ if (disabled)
13
+ return "not-allowed";
14
+ return "grab";
15
+ }};
10
16
  outline: none;
11
17
  display: flex;
12
18
  align-items: center;
@@ -15,24 +21,25 @@ const StyledGripperButton = styled.div`
15
21
  outline: 1px solid brand-700;
16
22
  }
17
23
  `;
18
- const DragHandle = ({ id, isDndActive, isDragging, isDragOverlay, innerRef, useSortableHelpers }) => /* @__PURE__ */ createElement(
19
- StyledGripperButton,
24
+ const DragHandle = ({ id, isDndActive, isDragging, disabled = false, innerRef, useSortableHelpers }) => /* @__PURE__ */ createElement(
25
+ StyledGripperButtonOrOverlay,
20
26
  {
21
- ...useSortableHelpers && {
27
+ ...!disabled && useSortableHelpers ? {
22
28
  ...useSortableHelpers.listeners,
23
29
  ...useSortableHelpers.attributes
24
- },
30
+ } : {},
25
31
  isActive: isDndActive,
26
- isDragOverlay,
27
32
  ref: mergeRefs(innerRef, useSortableHelpers?.setActivatorNodeRef),
28
33
  tabIndex: -1,
29
34
  "data-testid": DATA_TESTID.SHUTTLE_DRAG_HANDLE,
30
35
  id: `${id}-drag-handle`,
31
- key: `${id}-drag-handle`
36
+ key: `${id}-drag-handle`,
37
+ disabled
32
38
  },
33
- /* @__PURE__ */ jsx(GripperVertical, { size: "s", color: isDragging ? ["neutral", "500"] : ["brand-primary", "800"] })
39
+ /* @__PURE__ */ jsx(GripperVertical, { size: "s", color: isDragging || disabled ? ["neutral", "500"] : ["brand-primary", "800"] })
34
40
  );
35
41
  export {
36
- DragHandle
42
+ DragHandle,
43
+ StyledGripperButtonOrOverlay
37
44
  };
38
45
  //# sourceMappingURL=DndHandle.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Dnd/DndHandle.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { GripperVertical } from '@elliemae/ds-icons';\nimport type { useSortable } from '@elliemae/ds-drag-and-drop';\n\nimport { styled } from '@elliemae/ds-system';\nimport { mergeRefs } from '@elliemae/ds-utilities';\nimport { DATA_TESTID } from '../../constants';\n\nconst StyledGripperButton = styled.div<{\n isActive: boolean;\n isDragOverlay: boolean;\n}>`\n cursor: ${({ isActive, isDragOverlay }) => (isActive || isDragOverlay ? 'grabbing' : 'grab')};\n outline: none;\n display: flex;\n align-items: center;\n touch-action: none;\n &:focus {\n outline: 1px solid brand-700;\n }\n`;\n\nexport const DragHandle: React.ComponentType<{\n id: string;\n isDragOverlay?: boolean;\n innerRef: React.RefObject<HTMLDivElement> | React.RefCallback<HTMLDivElement>;\n useSortableHelpers: ReturnType<typeof useSortable>;\n isDndActive: boolean;\n isDragging: boolean;\n}> = ({ id, isDndActive, isDragging, isDragOverlay, innerRef, useSortableHelpers }) => (\n <StyledGripperButton\n {...(useSortableHelpers && {\n ...useSortableHelpers.listeners,\n ...useSortableHelpers.attributes,\n })}\n isActive={isDndActive}\n isDragOverlay={isDragOverlay}\n ref={mergeRefs(innerRef, useSortableHelpers?.setActivatorNodeRef)}\n tabIndex={-1}\n data-testid={DATA_TESTID.SHUTTLE_DRAG_HANDLE}\n id={`${id}-drag-handle`}\n key={`${id}-drag-handle`}\n >\n <GripperVertical size=\"s\" color={isDragging ? ['neutral', '500'] : ['brand-primary', '800']} />\n </StyledGripperButton>\n);\n"],
5
- "mappings": "AAAA,YAAY,WAAW;AC2CnB;AAbF;AA7BF,SAAS,uBAAuB;AAGhC,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAE5B,MAAM,sBAAsB,OAAO;AAAA,YAIvB,CAAC,EAAE,UAAU,cAAc,MAAO,YAAY,gBAAgB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUhF,MAAM,aAOR,CAAC,EAAE,IAAI,aAAa,YAAY,eAAe,UAAU,mBAAmB,MAC/E;AAAA,EAAC;AAAA;AAAA,IACE,GAAI,sBAAsB;AAAA,MACzB,GAAG,mBAAmB;AAAA,MACtB,GAAG,mBAAmB;AAAA,IACxB;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,KAAK,UAAU,UAAU,oBAAoB,mBAAmB;AAAA,IAChE,UAAU;AAAA,IACV,eAAa,YAAY;AAAA,IACzB,IAAI,GAAG;AAAA,IACP,KAAK,GAAG;AAAA;AAAA,EAER,oBAAC,mBAAgB,MAAK,KAAI,OAAO,aAAa,CAAC,WAAW,KAAK,IAAI,CAAC,iBAAiB,KAAK,GAAG;AAC/F;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable indent */\nimport React from 'react';\nimport { GripperVertical } from '@elliemae/ds-icons';\nimport type { useSortable } from '@elliemae/ds-drag-and-drop';\n\nimport { styled } from '@elliemae/ds-system';\nimport { mergeRefs } from '@elliemae/ds-utilities';\nimport { DATA_TESTID } from '../../constants';\n\nexport const StyledGripperButtonOrOverlay = styled.div<{\n isActive: boolean;\n isDragOverlay: boolean;\n disabled: boolean;\n}>`\n cursor: ${({ isActive, isDragOverlay, disabled }) => {\n if (isActive || isDragOverlay) return 'grabbing';\n if (disabled) return 'not-allowed';\n return 'grab';\n }};\n outline: none;\n display: flex;\n align-items: center;\n touch-action: none;\n &:focus {\n outline: 1px solid brand-700;\n }\n`;\n\nexport const DragHandle: React.ComponentType<{\n id: string;\n innerRef: React.RefObject<HTMLDivElement> | React.RefCallback<HTMLDivElement>;\n useSortableHelpers: ReturnType<typeof useSortable>;\n isDndActive: boolean;\n isDragging: boolean;\n disabled?: boolean;\n}> = ({ id, isDndActive, isDragging, disabled = false, innerRef, useSortableHelpers }) => (\n <StyledGripperButtonOrOverlay\n {...(!disabled && useSortableHelpers\n ? {\n ...useSortableHelpers.listeners,\n ...useSortableHelpers.attributes,\n }\n : {})}\n isActive={isDndActive}\n ref={mergeRefs(innerRef, useSortableHelpers?.setActivatorNodeRef)}\n tabIndex={-1}\n data-testid={DATA_TESTID.SHUTTLE_DRAG_HANDLE}\n id={`${id}-drag-handle`}\n key={`${id}-drag-handle`}\n disabled={disabled}\n >\n <GripperVertical size=\"s\" color={isDragging || disabled ? ['neutral', '500'] : ['brand-primary', '800']} />\n </StyledGripperButtonOrOverlay>\n);\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACmDnB;AAfF;AAlCF,SAAS,uBAAuB;AAGhC,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAErB,MAAM,+BAA+B,OAAO;AAAA,YAKvC,CAAC,EAAE,UAAU,eAAe,SAAS,MAAM;AACnD,MAAI,YAAY;AAAe,WAAO;AACtC,MAAI;AAAU,WAAO;AACrB,SAAO;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUK,MAAM,aAOR,CAAC,EAAE,IAAI,aAAa,YAAY,WAAW,OAAO,UAAU,mBAAmB,MAClF;AAAA,EAAC;AAAA;AAAA,IACE,GAAI,CAAC,YAAY,qBACd;AAAA,MACE,GAAG,mBAAmB;AAAA,MACtB,GAAG,mBAAmB;AAAA,IACxB,IACA,CAAC;AAAA,IACL,UAAU;AAAA,IACV,KAAK,UAAU,UAAU,oBAAoB,mBAAmB;AAAA,IAChE,UAAU;AAAA,IACV,eAAa,YAAY;AAAA,IACzB,IAAI,GAAG;AAAA,IACP,KAAK,GAAG;AAAA,IACR;AAAA;AAAA,EAEA,oBAAC,mBAAgB,MAAK,KAAI,OAAO,cAAc,WAAW,CAAC,WAAW,KAAK,IAAI,CAAC,iBAAiB,KAAK,GAAG;AAC3G;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { GripperVertical } from "@elliemae/ds-icons";
4
+ import { DATA_TESTID } from "../../constants";
5
+ import { StyledGripperButtonOrOverlay } from "./DndHandle";
6
+ const DragOverlay = ({ id, isDragging, isDndActive }) => /* @__PURE__ */ jsx(
7
+ StyledGripperButtonOrOverlay,
8
+ {
9
+ isDragOverlay: true,
10
+ isActive: isDndActive,
11
+ tabIndex: -1,
12
+ "data-testid": DATA_TESTID.SHUTTLE_DRAG_HANDLE,
13
+ id: `${id}-drag-overlay`,
14
+ children: /* @__PURE__ */ jsx(GripperVertical, { size: "s", color: isDragging ? ["neutral", "500"] : ["brand-primary", "800"] })
15
+ },
16
+ `${id}-drag-overlay`
17
+ );
18
+ export {
19
+ DragOverlay
20
+ };
21
+ //# sourceMappingURL=DragOverlay.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Dnd/DragOverlay.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { GripperVertical } from '@elliemae/ds-icons';\nimport { DATA_TESTID } from '../../constants';\nimport { StyledGripperButtonOrOverlay } from './DndHandle';\n\nexport const DragOverlay: React.ComponentType<{\n id: string;\n isDndActive: boolean;\n isDragging: boolean;\n}> = ({ id, isDragging, isDndActive }) => (\n <StyledGripperButtonOrOverlay\n isDragOverlay\n isActive={isDndActive}\n tabIndex={-1}\n data-testid={DATA_TESTID.SHUTTLE_DRAG_HANDLE}\n id={`${id}-drag-overlay`}\n key={`${id}-drag-overlay`}\n >\n <GripperVertical size=\"s\" color={isDragging ? ['neutral', '500'] : ['brand-primary', '800']} />\n </StyledGripperButtonOrOverlay>\n);\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACkBnB;AAjBJ,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,oCAAoC;AAEtC,MAAM,cAIR,CAAC,EAAE,IAAI,YAAY,YAAY,MAClC;AAAA,EAAC;AAAA;AAAA,IACC,eAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAa,YAAY;AAAA,IACzB,IAAI,GAAG;AAAA,IAGP,8BAAC,mBAAgB,MAAK,KAAI,OAAO,aAAa,CAAC,WAAW,KAAK,IAAI,CAAC,iBAAiB,KAAK,GAAG;AAAA;AAAA,EAFxF,GAAG;AAGV;",
6
+ "names": []
7
+ }
@@ -5,14 +5,14 @@ import { Grid } from "@elliemae/ds-grid";
5
5
  import { Search } from "@elliemae/ds-icons";
6
6
  import {
7
7
  DSButtonV2
8
- } from "@elliemae/ds-button";
8
+ } from "@elliemae/ds-button-v2";
9
9
  import { styled } from "@elliemae/ds-system";
10
10
  import { DSShuttleV2Name, DSShuttleV2Slots } from "../config/DSShuttleV2Definitions";
11
11
  import { usePropsStore } from "../config/useStore";
12
12
  import { useFocusTracker } from "../config/useFocusTracker";
13
13
  const StyledIconButton = styled(DSButtonV2, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.HEADER_SEARCH_ICON })`
14
- width: 16px;
15
- height: 16px;
14
+ width: 1.231rem;
15
+ height: 1.231rem;
16
16
  `;
17
17
  const Header = React2.memo(({ isDestinationPanel }) => {
18
18
  const HeaderRenderer = usePropsStore((state) => isDestinationPanel ? state.DestinationHeader : state.SourceHeader);
@@ -42,7 +42,7 @@ const Header = React2.memo(({ isDestinationPanel }) => {
42
42
  }, [onSearchBarOpen]);
43
43
  return /* @__PURE__ */ jsxs(Grid, { onFocus: onHeaderFocus, cols, children: [
44
44
  /* @__PURE__ */ jsx(HeaderRenderer, {}),
45
- onSearchBarOpen ? /* @__PURE__ */ jsx(StyledIconButton, { buttonType: "icon", onClick: handleFilterClick, children: /* @__PURE__ */ jsx(Search, { width: "14px", height: "14px" }) }) : null
45
+ onSearchBarOpen ? /* @__PURE__ */ jsx(StyledIconButton, { buttonType: "icon", onClick: handleFilterClick, children: /* @__PURE__ */ jsx(Search, { width: "1.077rem", height: "1.077rem" }) }) : null
46
46
  ] });
47
47
  });
48
48
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/Header.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { Search } from '@elliemae/ds-icons';\nimport {\n DSButtonV2,\n type DSButtonT,\n // BUTTON_SIZES\n} from '@elliemae/ds-button';\nimport { styled } from '@elliemae/ds-system';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../config/DSShuttleV2Definitions';\nimport { usePropsStore } from '../config/useStore';\nimport { useFocusTracker } from '../config/useFocusTracker';\nimport { type DSShuttleV2T } from '../react-desc-prop-types';\n\nconst StyledIconButton = styled(DSButtonV2, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.HEADER_SEARCH_ICON })`\n width: 16px;\n height: 16px;\n`;\nexport const Header = React.memo(({ isDestinationPanel }: DSShuttleV2T.PanelMetaInfo) => {\n const HeaderRenderer = usePropsStore((state) => (isDestinationPanel ? state.DestinationHeader : state.SourceHeader));\n const onSearchBarOpen = usePropsStore((state) =>\n isDestinationPanel ? state.onDesinationOpenSearchbar : state.onSourceOpenSearchbar,\n );\n const isSearchBarOpen = usePropsStore((state) =>\n isDestinationPanel ? state.destinationShowSearchbar : state.sourceShowSearchbar,\n );\n const { trackFocusRegionHeader, trackFocusItemReset, trackFocusActionReset } = useFocusTracker();\n const onHeaderFocus = React.useCallback(() => {\n trackFocusRegionHeader(isDestinationPanel);\n trackFocusItemReset();\n trackFocusActionReset();\n }, [isDestinationPanel, trackFocusActionReset, trackFocusItemReset, trackFocusRegionHeader]);\n\n const handleFilterClick = React.useCallback(\n (event: Parameters<Required<DSButtonT.Props>['onClick']>[0]) => {\n onSearchBarOpen?.(!isSearchBarOpen, { event });\n },\n [isSearchBarOpen, onSearchBarOpen],\n );\n\n const cols = React.useMemo(() => {\n const finalCols = ['1fr'];\n if (onSearchBarOpen) finalCols.push('auto');\n return finalCols;\n }, [onSearchBarOpen]);\n\n return (\n <Grid onFocus={onHeaderFocus} cols={cols}>\n <HeaderRenderer />\n {onSearchBarOpen ? (\n <StyledIconButton buttonType=\"icon\" onClick={handleFilterClick}>\n <Search width=\"14px\" height=\"14px\" />\n </StyledIconButton>\n ) : null}\n </Grid>\n );\n});\n"],
5
- "mappings": "AAAA,YAAY,WAAW;AC+CnB,SACE,KADF;AA/CJ,OAAOA,YAAW;AAClB,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,OAGK;AACP,SAAS,cAAc;AACvB,SAAS,iBAAiB,wBAAwB;AAClD,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAGhC,MAAM,mBAAmB,OAAO,YAAY,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,mBAAmB,CAAC;AAAA;AAAA;AAAA;AAIzG,MAAM,SAASA,OAAM,KAAK,CAAC,EAAE,mBAAmB,MAAkC;AACvF,QAAM,iBAAiB,cAAc,CAAC,UAAW,qBAAqB,MAAM,oBAAoB,MAAM,YAAa;AACnH,QAAM,kBAAkB;AAAA,IAAc,CAAC,UACrC,qBAAqB,MAAM,4BAA4B,MAAM;AAAA,EAC/D;AACA,QAAM,kBAAkB;AAAA,IAAc,CAAC,UACrC,qBAAqB,MAAM,2BAA2B,MAAM;AAAA,EAC9D;AACA,QAAM,EAAE,wBAAwB,qBAAqB,sBAAsB,IAAI,gBAAgB;AAC/F,QAAM,gBAAgBA,OAAM,YAAY,MAAM;AAC5C,2BAAuB,kBAAkB;AACzC,wBAAoB;AACpB,0BAAsB;AAAA,EACxB,GAAG,CAAC,oBAAoB,uBAAuB,qBAAqB,sBAAsB,CAAC;AAE3F,QAAM,oBAAoBA,OAAM;AAAA,IAC9B,CAAC,UAA+D;AAC9D,wBAAkB,CAAC,iBAAiB,EAAE,MAAM,CAAC;AAAA,IAC/C;AAAA,IACA,CAAC,iBAAiB,eAAe;AAAA,EACnC;AAEA,QAAM,OAAOA,OAAM,QAAQ,MAAM;AAC/B,UAAM,YAAY,CAAC,KAAK;AACxB,QAAI;AAAiB,gBAAU,KAAK,MAAM;AAC1C,WAAO;AAAA,EACT,GAAG,CAAC,eAAe,CAAC;AAEpB,SACE,qBAAC,QAAK,SAAS,eAAe,MAC5B;AAAA,wBAAC,kBAAe;AAAA,IACf,kBACC,oBAAC,oBAAiB,YAAW,QAAO,SAAS,mBAC3C,8BAAC,UAAO,OAAM,QAAO,QAAO,QAAO,GACrC,IACE;AAAA,KACN;AAEJ,CAAC;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { Search } from '@elliemae/ds-icons';\nimport {\n DSButtonV2,\n type DSButtonT,\n // BUTTON_SIZES\n} from '@elliemae/ds-button-v2';\nimport { styled } from '@elliemae/ds-system';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../config/DSShuttleV2Definitions';\nimport { usePropsStore } from '../config/useStore';\nimport { useFocusTracker } from '../config/useFocusTracker';\nimport { type DSShuttleV2T } from '../react-desc-prop-types';\n\nconst StyledIconButton = styled(DSButtonV2, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.HEADER_SEARCH_ICON })`\n width: 1.231rem;\n height: 1.231rem;\n`;\nexport const Header = React.memo(({ isDestinationPanel }: DSShuttleV2T.PanelMetaInfo) => {\n const HeaderRenderer = usePropsStore((state) => (isDestinationPanel ? state.DestinationHeader : state.SourceHeader));\n const onSearchBarOpen = usePropsStore((state) =>\n isDestinationPanel ? state.onDesinationOpenSearchbar : state.onSourceOpenSearchbar,\n );\n const isSearchBarOpen = usePropsStore((state) =>\n isDestinationPanel ? state.destinationShowSearchbar : state.sourceShowSearchbar,\n );\n const { trackFocusRegionHeader, trackFocusItemReset, trackFocusActionReset } = useFocusTracker();\n const onHeaderFocus = React.useCallback(() => {\n trackFocusRegionHeader(isDestinationPanel);\n trackFocusItemReset();\n trackFocusActionReset();\n }, [isDestinationPanel, trackFocusActionReset, trackFocusItemReset, trackFocusRegionHeader]);\n\n const handleFilterClick = React.useCallback(\n (event: Parameters<Required<DSButtonT.Props>['onClick']>[0]) => {\n onSearchBarOpen?.(!isSearchBarOpen, { event });\n },\n [isSearchBarOpen, onSearchBarOpen],\n );\n\n const cols = React.useMemo(() => {\n const finalCols = ['1fr'];\n if (onSearchBarOpen) finalCols.push('auto');\n return finalCols;\n }, [onSearchBarOpen]);\n\n return (\n <Grid onFocus={onHeaderFocus} cols={cols}>\n <HeaderRenderer />\n {onSearchBarOpen ? (\n <StyledIconButton buttonType=\"icon\" onClick={handleFilterClick}>\n <Search width=\"1.077rem\" height=\"1.077rem\" />\n </StyledIconButton>\n ) : null}\n </Grid>\n );\n});\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;AC+CnB,SACE,KADF;AA/CJ,OAAOA,YAAW;AAClB,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,OAGK;AACP,SAAS,cAAc;AACvB,SAAS,iBAAiB,wBAAwB;AAClD,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAGhC,MAAM,mBAAmB,OAAO,YAAY,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,mBAAmB,CAAC;AAAA;AAAA;AAAA;AAIzG,MAAM,SAASA,OAAM,KAAK,CAAC,EAAE,mBAAmB,MAAkC;AACvF,QAAM,iBAAiB,cAAc,CAAC,UAAW,qBAAqB,MAAM,oBAAoB,MAAM,YAAa;AACnH,QAAM,kBAAkB;AAAA,IAAc,CAAC,UACrC,qBAAqB,MAAM,4BAA4B,MAAM;AAAA,EAC/D;AACA,QAAM,kBAAkB;AAAA,IAAc,CAAC,UACrC,qBAAqB,MAAM,2BAA2B,MAAM;AAAA,EAC9D;AACA,QAAM,EAAE,wBAAwB,qBAAqB,sBAAsB,IAAI,gBAAgB;AAC/F,QAAM,gBAAgBA,OAAM,YAAY,MAAM;AAC5C,2BAAuB,kBAAkB;AACzC,wBAAoB;AACpB,0BAAsB;AAAA,EACxB,GAAG,CAAC,oBAAoB,uBAAuB,qBAAqB,sBAAsB,CAAC;AAE3F,QAAM,oBAAoBA,OAAM;AAAA,IAC9B,CAAC,UAA+D;AAC9D,wBAAkB,CAAC,iBAAiB,EAAE,MAAM,CAAC;AAAA,IAC/C;AAAA,IACA,CAAC,iBAAiB,eAAe;AAAA,EACnC;AAEA,QAAM,OAAOA,OAAM,QAAQ,MAAM;AAC/B,UAAM,YAAY,CAAC,KAAK;AACxB,QAAI;AAAiB,gBAAU,KAAK,MAAM;AAC1C,WAAO;AAAA,EACT,GAAG,CAAC,eAAe,CAAC;AAEpB,SACE,qBAAC,QAAK,SAAS,eAAe,MAC5B;AAAA,wBAAC,kBAAe;AAAA,IACf,kBACC,oBAAC,oBAAiB,YAAW,QAAO,SAAS,mBAC3C,8BAAC,UAAO,OAAM,YAAW,QAAO,YAAW,GAC7C,IACE;AAAA,KACN;AAEJ,CAAC;",
6
6
  "names": ["React"]
7
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": "AAAA,YAAY,WAAW;AC6Gb,SAIM,UAHJ,KADF;AAzGV,OAAOA,UAAS,aAAa,iBAAiB;AAE9C,SAAS,YAAY,aAAa,iBAAiB,2BAA2B;AAC9E,SAAS,oBAAoB;AAE7B,SAAS,kBAAkB,qBAAqB;AAEhD,SAAS,mBAAmB;AAWrB,MAAM,+BACX,CAAC,cAAc,CAAC,UAAU;AACxB,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,yBAAyB,iBAAiB,CAAC,UAAU,MAAM,sBAAsB;AACvF,QAAM,sBAAsB,iBAAiB,CAAC,UAAU,MAAM,mBAAmB;AACjF,QAAM,YAAY,iBAAiB,CAAC,UAAU,MAAM,SAAS;AAC7D,QAAM,iBAAiB,iBAAiB,CAAC,UAAU,MAAM,cAAc;AACvE,QAAM,qBAAqB,iBAAiB,CAAC,UAAU,MAAM,kBAAkB;AAC/E,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,YAAgE;AAAA,IACpE,CAAC,UAAU,aAAa;AAEtB,YAAM,EAAE,mBAAmB,QAAQ,WAAW,MAAM,YAAY,QAAQ,IAAI;AAC5E,YAAM,OAAO,QAAQ,SAAS;AAC9B,YAAM,SAAS,UAAU,SAAS;AAClC,YAAM,kBAAkB,EAAE,GAAG,SAAS,MAAM,OAAO;AACnD,qBAAe,QAAQ,eAAe;AAAA,IACxC;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,QAAM,aAAaA,OAAM,QAAQ,MAAM;AACrC,UAAM,qBAAqB,SAAS,IAAI,CAAC,MAAM,OAAO;AAAA,MAEpD,KAAK,KAAK;AAAA,MACV,OAAO;AAAA,MACP,UAAU;AAAA,MACV,WAAW;AAAA,MACX,cAAc;AAAA,MACd,eAAe;AAAA,MACf,UAAU;AAAA,IACZ,EAAE;AACF,WAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd;AAAA,MACA,qBAAqB;AAAA,MACrB,gBAAgB,MAAM;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,UAAU,SAAS,CAAC;AAExB,QAAM,EAAE,iBAAiB,sBAAsB,YAAY,UAAU,QAAQ,uBAAuB,YAAY,IAC9G,oBAAoB,UAAU;AAEhC,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,uBAAmB,YAAY,YAAY,IAAI;AAAA,EACjD,GAAG,CAAC,YAAY,kBAAkB,CAAC;AAEnC,YAAU,MAAM;AACd,6BAAyB,qBAAqB;AAAA,EAChD,GAAG,CAAC,uBAAuB,wBAAwB,CAAC;AAEpD,YAAU,MAAM;AACd,QAAI,CAAC,QAAQ,QAAQ,KAAK,aAAa;AAAI,6BAAuB,IAAI;AAAA,EACxE,GAAG,CAAC,UAAU,sBAAsB,CAAC;AAErC,MAAI;AACF,WACE,oBAAC,cAAY,GAAG,iBACd,+BAAC,mBAAiB,GAAG,sBACnB;AAAA,0BAAC,aAAW,GAAG,OAAO;AAAA,MACrB;AAAA,QACC,oBAAC,eAAY,OAAO,EAAE,OAAO,OAAO,GAClC,0CAAG,gCAAsB,oBAAC,eAAa,GAAG,qBAAqB,IAAK,MAAK,GAC3E;AAAA,QACA,SAAS;AAAA,MACX;AAAA,OACF,GACF;AAEJ,SAAO,oBAAC,aAAW,GAAG,OAAO;AAC/B;",
6
+ "names": ["React"]
7
7
  }