@vuu-ui/vuu-ui-controls 0.9.2 → 0.10.0

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 (438) hide show
  1. package/cjs/calendar/Calendar.js.map +1 -1
  2. package/cjs/calendar/internal/CalendarCarousel.js.map +1 -1
  3. package/cjs/calendar/internal/CalendarContext.js.map +1 -1
  4. package/cjs/calendar/internal/CalendarDay.js.map +1 -1
  5. package/cjs/calendar/internal/CalendarMonth.js.map +1 -1
  6. package/cjs/calendar/internal/CalendarNavigation.js.map +1 -1
  7. package/cjs/calendar/internal/CalendarWeekHeader.js.map +1 -1
  8. package/cjs/calendar/internal/useFocusManagement.js.map +1 -1
  9. package/cjs/calendar/internal/utils.js.map +1 -1
  10. package/cjs/calendar/useCalendar.js.map +1 -1
  11. package/cjs/calendar/useCalendarDay.js.map +1 -1
  12. package/cjs/calendar/useSelection.js.map +1 -1
  13. package/cjs/column-picker/ColumnPicker.js.map +1 -1
  14. package/cjs/column-picker/ColumnSearch.js.map +1 -1
  15. package/cjs/common-hooks/collectionProvider.js.map +1 -1
  16. package/cjs/common-hooks/itemToString.js.map +1 -1
  17. package/cjs/common-hooks/selectionTypes.js.map +1 -1
  18. package/cjs/common-hooks/use-resize-observer.js.map +1 -1
  19. package/cjs/common-hooks/useCollectionItems.js.map +1 -1
  20. package/cjs/common-hooks/useControlled.js.map +1 -1
  21. package/cjs/common-hooks/useSelection.js.map +1 -1
  22. package/cjs/cycle-state-button/CycleStateButton.js.map +1 -1
  23. package/cjs/date-input/DateInput.js.map +1 -1
  24. package/cjs/date-picker/DatePicker.js.map +1 -1
  25. package/cjs/date-picker/DatePickerContext.js.map +1 -1
  26. package/cjs/date-picker/DatePickerPanel.js.map +1 -1
  27. package/cjs/drag-drop/DragDropProvider.js.map +1 -1
  28. package/cjs/drag-drop/DragDropState.js.map +1 -1
  29. package/cjs/drag-drop/Draggable.js +0 -5
  30. package/cjs/drag-drop/Draggable.js.map +1 -1
  31. package/cjs/drag-drop/dragDropTypes.js.map +1 -1
  32. package/cjs/drag-drop/drop-target-utils.js.map +1 -1
  33. package/cjs/drag-drop/useAutoScroll.js.map +1 -1
  34. package/cjs/drag-drop/useDragDisplacers.js.map +1 -1
  35. package/cjs/drag-drop/useDragDrop.js.map +1 -1
  36. package/cjs/drag-drop/useDragDropCopy.js.map +1 -1
  37. package/cjs/drag-drop/useDragDropIndicator.js.map +1 -1
  38. package/cjs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  39. package/cjs/drag-drop/useDropIndicator.js.map +1 -1
  40. package/cjs/drag-drop/useGlobalDragDrop.js.map +1 -1
  41. package/cjs/editable/useEditableText.js.map +1 -1
  42. package/cjs/editable-label/EditableLabel.css.js +1 -1
  43. package/cjs/editable-label/EditableLabel.js.map +1 -1
  44. package/cjs/expando-input/ExpandoInput.js +1 -1
  45. package/cjs/expando-input/ExpandoInput.js.map +1 -1
  46. package/cjs/icon-button/Icon.js.map +1 -1
  47. package/cjs/icon-button/IconButton.js.map +1 -1
  48. package/cjs/icon-button/ToggleIconButton.css.js +1 -1
  49. package/cjs/icon-button/ToggleIconButton.js.map +1 -1
  50. package/cjs/index.js +14 -5
  51. package/cjs/index.js.map +1 -1
  52. package/cjs/instrument-picker/TablePicker.js.map +1 -1
  53. package/cjs/instrument-picker/useTablePicker.js.map +1 -1
  54. package/cjs/list/Highlighter.js.map +1 -1
  55. package/cjs/list/List.js.map +1 -1
  56. package/cjs/list/ListItem.js.map +1 -1
  57. package/cjs/list/RadioIcon.js.map +1 -1
  58. package/cjs/list/common-hooks/keyUtils.js.map +1 -1
  59. package/cjs/list/common-hooks/list-dom-utils.js.map +1 -1
  60. package/cjs/list/common-hooks/useCollapsibleGroups.js.map +1 -1
  61. package/cjs/list/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  62. package/cjs/list/common-hooks/useKeyboardNavigation.js.map +1 -1
  63. package/cjs/list/common-hooks/useTypeahead.js.map +1 -1
  64. package/cjs/list/common-hooks/useViewportTracking.js.map +1 -1
  65. package/cjs/list/common-hooks/utils/collection-item-utils.js.map +1 -1
  66. package/cjs/list/common-hooks/utils/filter-utils.js.map +1 -1
  67. package/cjs/list/common-hooks/utils/isSelected.js.map +1 -1
  68. package/cjs/list/useList.js.map +1 -1
  69. package/cjs/list/useListDrop.js.map +1 -1
  70. package/cjs/list/useListHeight.js.map +1 -1
  71. package/cjs/list/useScrollPosition.js.map +1 -1
  72. package/cjs/measured-container/MeasuredContainer.js +1 -0
  73. package/cjs/measured-container/MeasuredContainer.js.map +1 -1
  74. package/cjs/measured-container/useMeasuredContainer.js +4 -1
  75. package/cjs/measured-container/useMeasuredContainer.js.map +1 -1
  76. package/cjs/measured-container/useResizeObserver.js.map +1 -1
  77. package/cjs/overflow-container/OverflowContainer.js.map +1 -1
  78. package/cjs/overflow-container/overflow-utils.js.map +1 -1
  79. package/cjs/overflow-container/useOverflowContainer.js.map +1 -1
  80. package/cjs/price-ticker/PriceTicker.js.map +1 -1
  81. package/cjs/split-button/SplitButton.css.js +1 -1
  82. package/cjs/split-button/SplitButton.js.map +1 -1
  83. package/cjs/split-button/SplitStateButton.css.js +1 -1
  84. package/cjs/split-button/SplitStateButton.js.map +1 -1
  85. package/cjs/split-button/useSplitButton.js.map +1 -1
  86. package/cjs/table-search/SearchCell.css.js +1 -1
  87. package/cjs/table-search/SearchCell.js +8 -3
  88. package/cjs/table-search/SearchCell.js.map +1 -1
  89. package/cjs/table-search/TableSearch.js +11 -18
  90. package/cjs/table-search/TableSearch.js.map +1 -1
  91. package/cjs/table-search/useTableSearch.js +1 -1
  92. package/cjs/table-search/useTableSearch.js.map +1 -1
  93. package/cjs/tabs-next/TabBar.css.js +6 -0
  94. package/cjs/tabs-next/TabBar.css.js.map +1 -0
  95. package/cjs/tabs-next/TabBar.js +41 -0
  96. package/cjs/tabs-next/TabBar.js.map +1 -0
  97. package/cjs/tabs-next/TabListNext.css.js +6 -0
  98. package/cjs/tabs-next/TabListNext.css.js.map +1 -0
  99. package/cjs/tabs-next/TabListNext.js +124 -0
  100. package/cjs/tabs-next/TabListNext.js.map +1 -0
  101. package/cjs/tabs-next/TabNext.css.js +6 -0
  102. package/cjs/tabs-next/TabNext.css.js.map +1 -0
  103. package/cjs/tabs-next/TabNext.js +110 -0
  104. package/cjs/tabs-next/TabNext.js.map +1 -0
  105. package/cjs/tabs-next/TabNextAction.js +35 -0
  106. package/cjs/tabs-next/TabNextAction.js.map +1 -0
  107. package/cjs/tabs-next/TabNextContext.js +23 -0
  108. package/cjs/tabs-next/TabNextContext.js.map +1 -0
  109. package/cjs/tabs-next/TabNextPanel.css.js +6 -0
  110. package/cjs/tabs-next/TabNextPanel.css.js.map +1 -0
  111. package/cjs/tabs-next/TabNextPanel.js +77 -0
  112. package/cjs/tabs-next/TabNextPanel.js.map +1 -0
  113. package/cjs/tabs-next/TabNextTrigger.css.js +6 -0
  114. package/cjs/tabs-next/TabNextTrigger.css.js.map +1 -0
  115. package/cjs/tabs-next/TabNextTrigger.js +74 -0
  116. package/cjs/tabs-next/TabNextTrigger.js.map +1 -0
  117. package/cjs/tabs-next/TabOverflowList.css.js +6 -0
  118. package/cjs/tabs-next/TabOverflowList.css.js.map +1 -0
  119. package/cjs/tabs-next/TabOverflowList.js +130 -0
  120. package/cjs/tabs-next/TabOverflowList.js.map +1 -0
  121. package/cjs/tabs-next/TabsNext.js +174 -0
  122. package/cjs/tabs-next/TabsNext.js.map +1 -0
  123. package/cjs/tabs-next/TabsNextContext.js +33 -0
  124. package/cjs/tabs-next/TabsNextContext.js.map +1 -0
  125. package/cjs/tabs-next/hooks/useCollection.js +91 -0
  126. package/cjs/tabs-next/hooks/useCollection.js.map +1 -0
  127. package/cjs/tabs-next/hooks/useFocusOutside.js +24 -0
  128. package/cjs/tabs-next/hooks/useFocusOutside.js.map +1 -0
  129. package/cjs/tabs-next/hooks/useOverflow.js +138 -0
  130. package/cjs/tabs-next/hooks/useOverflow.js.map +1 -0
  131. package/cjs/tabstrip/Tab.js.map +1 -1
  132. package/cjs/tabstrip/TabMenu.js.map +1 -1
  133. package/cjs/tabstrip/TabMenuOptions.js.map +1 -1
  134. package/cjs/tabstrip/Tabstrip.css.js +1 -1
  135. package/cjs/tabstrip/Tabstrip.js.map +1 -1
  136. package/cjs/tabstrip/tabstrip-dom-utils.js.map +1 -1
  137. package/cjs/tabstrip/useAnimatedSelectionThumb.js.map +1 -1
  138. package/cjs/tabstrip/useKeyboardNavigation.js.map +1 -1
  139. package/cjs/tabstrip/useSelection.js.map +1 -1
  140. package/cjs/tabstrip/useTabstrip.js.map +1 -1
  141. package/cjs/toolbar/Toolbar.js.map +1 -1
  142. package/cjs/toolbar/toolbar-dom-utils.js.map +1 -1
  143. package/cjs/toolbar/useKeyboardNavigation.js.map +1 -1
  144. package/cjs/toolbar/useSelection.js.map +1 -1
  145. package/cjs/toolbar/useToolbar.js.map +1 -1
  146. package/cjs/utils/escapeRegExp.js.map +1 -1
  147. package/cjs/utils/forwardCallbackProps.js.map +1 -1
  148. package/cjs/utils/isOverflowElement.js.map +1 -1
  149. package/cjs/vuu-date-picker/VuuDatePicker.js.map +1 -1
  150. package/cjs/vuu-input/VuuInput.js.map +1 -1
  151. package/cjs/vuu-typeahead-input/VuuTypeaheadInput.js.map +1 -1
  152. package/cjs/vuu-typeahead-input/useVuuTypeaheadInput.js.map +1 -1
  153. package/esm/calendar/Calendar.js.map +1 -1
  154. package/esm/calendar/internal/CalendarCarousel.js.map +1 -1
  155. package/esm/calendar/internal/CalendarContext.js.map +1 -1
  156. package/esm/calendar/internal/CalendarDay.js.map +1 -1
  157. package/esm/calendar/internal/CalendarMonth.js.map +1 -1
  158. package/esm/calendar/internal/CalendarNavigation.js.map +1 -1
  159. package/esm/calendar/internal/CalendarWeekHeader.js.map +1 -1
  160. package/esm/calendar/internal/useFocusManagement.js.map +1 -1
  161. package/esm/calendar/internal/utils.js.map +1 -1
  162. package/esm/calendar/useCalendar.js.map +1 -1
  163. package/esm/calendar/useCalendarDay.js.map +1 -1
  164. package/esm/calendar/useSelection.js.map +1 -1
  165. package/esm/column-picker/ColumnPicker.js.map +1 -1
  166. package/esm/column-picker/ColumnSearch.js.map +1 -1
  167. package/esm/common-hooks/collectionProvider.js.map +1 -1
  168. package/esm/common-hooks/itemToString.js.map +1 -1
  169. package/esm/common-hooks/selectionTypes.js.map +1 -1
  170. package/esm/common-hooks/use-resize-observer.js.map +1 -1
  171. package/esm/common-hooks/useCollectionItems.js.map +1 -1
  172. package/esm/common-hooks/useControlled.js.map +1 -1
  173. package/esm/common-hooks/useSelection.js.map +1 -1
  174. package/esm/cycle-state-button/CycleStateButton.js.map +1 -1
  175. package/esm/date-input/DateInput.js.map +1 -1
  176. package/esm/date-picker/DatePicker.js.map +1 -1
  177. package/esm/date-picker/DatePickerContext.js.map +1 -1
  178. package/esm/date-picker/DatePickerPanel.js.map +1 -1
  179. package/esm/drag-drop/DragDropProvider.js.map +1 -1
  180. package/esm/drag-drop/DragDropState.js.map +1 -1
  181. package/esm/drag-drop/Draggable.js +0 -5
  182. package/esm/drag-drop/Draggable.js.map +1 -1
  183. package/esm/drag-drop/dragDropTypes.js.map +1 -1
  184. package/esm/drag-drop/drop-target-utils.js.map +1 -1
  185. package/esm/drag-drop/useAutoScroll.js.map +1 -1
  186. package/esm/drag-drop/useDragDisplacers.js.map +1 -1
  187. package/esm/drag-drop/useDragDrop.js +1 -1
  188. package/esm/drag-drop/useDragDrop.js.map +1 -1
  189. package/esm/drag-drop/useDragDropCopy.js.map +1 -1
  190. package/esm/drag-drop/useDragDropIndicator.js +1 -1
  191. package/esm/drag-drop/useDragDropIndicator.js.map +1 -1
  192. package/esm/drag-drop/useDragDropNaturalMovement.js +1 -1
  193. package/esm/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  194. package/esm/drag-drop/useDropIndicator.js.map +1 -1
  195. package/esm/drag-drop/useGlobalDragDrop.js.map +1 -1
  196. package/esm/editable/useEditableText.js.map +1 -1
  197. package/esm/editable-label/EditableLabel.css.js +1 -1
  198. package/esm/editable-label/EditableLabel.js.map +1 -1
  199. package/esm/expando-input/ExpandoInput.js +1 -1
  200. package/esm/expando-input/ExpandoInput.js.map +1 -1
  201. package/esm/icon-button/Icon.js.map +1 -1
  202. package/esm/icon-button/IconButton.js.map +1 -1
  203. package/esm/icon-button/ToggleIconButton.css.js +1 -1
  204. package/esm/icon-button/ToggleIconButton.js.map +1 -1
  205. package/esm/index.js +7 -2
  206. package/esm/index.js.map +1 -1
  207. package/esm/instrument-picker/TablePicker.js.map +1 -1
  208. package/esm/instrument-picker/useTablePicker.js.map +1 -1
  209. package/esm/list/Highlighter.js.map +1 -1
  210. package/esm/list/List.js.map +1 -1
  211. package/esm/list/ListItem.js.map +1 -1
  212. package/esm/list/RadioIcon.js.map +1 -1
  213. package/esm/list/common-hooks/keyUtils.js.map +1 -1
  214. package/esm/list/common-hooks/list-dom-utils.js.map +1 -1
  215. package/esm/list/common-hooks/useCollapsibleGroups.js.map +1 -1
  216. package/esm/list/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  217. package/esm/list/common-hooks/useKeyboardNavigation.js.map +1 -1
  218. package/esm/list/common-hooks/useTypeahead.js.map +1 -1
  219. package/esm/list/common-hooks/useViewportTracking.js.map +1 -1
  220. package/esm/list/common-hooks/utils/collection-item-utils.js.map +1 -1
  221. package/esm/list/common-hooks/utils/filter-utils.js.map +1 -1
  222. package/esm/list/common-hooks/utils/isSelected.js.map +1 -1
  223. package/esm/list/useList.js.map +1 -1
  224. package/esm/list/useListDrop.js.map +1 -1
  225. package/esm/list/useListHeight.js.map +1 -1
  226. package/esm/list/useScrollPosition.js.map +1 -1
  227. package/esm/measured-container/MeasuredContainer.js +1 -0
  228. package/esm/measured-container/MeasuredContainer.js.map +1 -1
  229. package/esm/measured-container/useMeasuredContainer.js +4 -1
  230. package/esm/measured-container/useMeasuredContainer.js.map +1 -1
  231. package/esm/measured-container/useResizeObserver.js.map +1 -1
  232. package/esm/overflow-container/OverflowContainer.js.map +1 -1
  233. package/esm/overflow-container/overflow-utils.js.map +1 -1
  234. package/esm/overflow-container/useOverflowContainer.js.map +1 -1
  235. package/esm/price-ticker/PriceTicker.js.map +1 -1
  236. package/esm/split-button/SplitButton.css.js +1 -1
  237. package/esm/split-button/SplitButton.js.map +1 -1
  238. package/esm/split-button/SplitStateButton.css.js +1 -1
  239. package/esm/split-button/SplitStateButton.js.map +1 -1
  240. package/esm/split-button/useSplitButton.js.map +1 -1
  241. package/esm/table-search/SearchCell.css.js +1 -1
  242. package/esm/table-search/SearchCell.js +8 -3
  243. package/esm/table-search/SearchCell.js.map +1 -1
  244. package/esm/table-search/TableSearch.js +12 -19
  245. package/esm/table-search/TableSearch.js.map +1 -1
  246. package/esm/table-search/useTableSearch.js +1 -1
  247. package/esm/table-search/useTableSearch.js.map +1 -1
  248. package/esm/tabs-next/TabBar.css.js +4 -0
  249. package/esm/tabs-next/TabBar.css.js.map +1 -0
  250. package/esm/tabs-next/TabBar.js +39 -0
  251. package/esm/tabs-next/TabBar.js.map +1 -0
  252. package/esm/tabs-next/TabListNext.css.js +4 -0
  253. package/esm/tabs-next/TabListNext.css.js.map +1 -0
  254. package/esm/tabs-next/TabListNext.js +122 -0
  255. package/esm/tabs-next/TabListNext.js.map +1 -0
  256. package/esm/tabs-next/TabNext.css.js +4 -0
  257. package/esm/tabs-next/TabNext.css.js.map +1 -0
  258. package/esm/tabs-next/TabNext.js +108 -0
  259. package/esm/tabs-next/TabNext.js.map +1 -0
  260. package/esm/tabs-next/TabNextAction.js +33 -0
  261. package/esm/tabs-next/TabNextAction.js.map +1 -0
  262. package/esm/tabs-next/TabNextContext.js +20 -0
  263. package/esm/tabs-next/TabNextContext.js.map +1 -0
  264. package/esm/tabs-next/TabNextPanel.css.js +4 -0
  265. package/esm/tabs-next/TabNextPanel.css.js.map +1 -0
  266. package/esm/tabs-next/TabNextPanel.js +75 -0
  267. package/esm/tabs-next/TabNextPanel.js.map +1 -0
  268. package/esm/tabs-next/TabNextTrigger.css.js +4 -0
  269. package/esm/tabs-next/TabNextTrigger.css.js.map +1 -0
  270. package/esm/tabs-next/TabNextTrigger.js +72 -0
  271. package/esm/tabs-next/TabNextTrigger.js.map +1 -0
  272. package/esm/tabs-next/TabOverflowList.css.js +4 -0
  273. package/esm/tabs-next/TabOverflowList.css.js.map +1 -0
  274. package/esm/tabs-next/TabOverflowList.js +128 -0
  275. package/esm/tabs-next/TabOverflowList.js.map +1 -0
  276. package/esm/tabs-next/TabsNext.js +172 -0
  277. package/esm/tabs-next/TabsNext.js.map +1 -0
  278. package/esm/tabs-next/TabsNextContext.js +30 -0
  279. package/esm/tabs-next/TabsNextContext.js.map +1 -0
  280. package/esm/tabs-next/hooks/useCollection.js +89 -0
  281. package/esm/tabs-next/hooks/useCollection.js.map +1 -0
  282. package/esm/tabs-next/hooks/useFocusOutside.js +22 -0
  283. package/esm/tabs-next/hooks/useFocusOutside.js.map +1 -0
  284. package/esm/tabs-next/hooks/useOverflow.js +136 -0
  285. package/esm/tabs-next/hooks/useOverflow.js.map +1 -0
  286. package/esm/tabstrip/Tab.js.map +1 -1
  287. package/esm/tabstrip/TabMenu.js.map +1 -1
  288. package/esm/tabstrip/TabMenuOptions.js.map +1 -1
  289. package/esm/tabstrip/Tabstrip.css.js +1 -1
  290. package/esm/tabstrip/Tabstrip.js.map +1 -1
  291. package/esm/tabstrip/tabstrip-dom-utils.js.map +1 -1
  292. package/esm/tabstrip/useAnimatedSelectionThumb.js.map +1 -1
  293. package/esm/tabstrip/useKeyboardNavigation.js.map +1 -1
  294. package/esm/tabstrip/useSelection.js.map +1 -1
  295. package/esm/tabstrip/useTabstrip.js.map +1 -1
  296. package/esm/toolbar/Toolbar.js.map +1 -1
  297. package/esm/toolbar/toolbar-dom-utils.js.map +1 -1
  298. package/esm/toolbar/useKeyboardNavigation.js.map +1 -1
  299. package/esm/toolbar/useSelection.js.map +1 -1
  300. package/esm/toolbar/useToolbar.js.map +1 -1
  301. package/esm/utils/escapeRegExp.js.map +1 -1
  302. package/esm/utils/forwardCallbackProps.js.map +1 -1
  303. package/esm/utils/isOverflowElement.js.map +1 -1
  304. package/esm/vuu-date-picker/VuuDatePicker.js.map +1 -1
  305. package/esm/vuu-input/VuuInput.js.map +1 -1
  306. package/esm/vuu-typeahead-input/VuuTypeaheadInput.js.map +1 -1
  307. package/esm/vuu-typeahead-input/useVuuTypeaheadInput.js.map +1 -1
  308. package/package.json +15 -14
  309. package/types/calendar/Calendar.d.ts +0 -1
  310. package/types/calendar/internal/CalendarCarousel.d.ts +0 -1
  311. package/types/calendar/internal/CalendarContext.d.ts +0 -1
  312. package/types/calendar/internal/CalendarWeekHeader.d.ts +1 -1
  313. package/types/calendar/useCalendar.d.ts +4 -4
  314. package/types/calendar/useCalendarDay.d.ts +2 -2
  315. package/types/column-picker/ColumnPicker.d.ts +0 -1
  316. package/types/common-hooks/collectionProvider.d.ts +1 -1
  317. package/types/common-hooks/selectionTypes.d.ts +1 -1
  318. package/types/cycle-state-button/CycleStateButton.d.ts +2 -2
  319. package/types/date-picker/DatePickerContext.d.ts +0 -1
  320. package/types/drag-drop/DragDropProvider.d.ts +1 -1
  321. package/types/drag-drop/DropIndicator.d.ts +1 -2
  322. package/types/drag-drop/drop-target-utils.d.ts +24 -20
  323. package/types/drag-drop/useAutoScroll.d.ts +4 -4
  324. package/types/drag-drop/useGlobalDragDrop.d.ts +0 -1
  325. package/types/expando-input/ExpandoInput.d.ts +2 -2
  326. package/types/icon-button/Icon.d.ts +1 -1
  327. package/types/icon-button/IconButton.d.ts +0 -1
  328. package/types/icon-button/ToggleIconButton.d.ts +1 -2
  329. package/types/index.d.ts +1 -1
  330. package/types/instrument-picker/SearchCell.d.ts +1 -2
  331. package/types/instrument-picker/TablePicker.d.ts +1 -1
  332. package/types/instrument-picker/useTablePicker.d.ts +3 -10
  333. package/types/list/ChevronIcon.d.ts +1 -1
  334. package/types/list/ListItem.d.ts +1 -1
  335. package/types/list/RadioIcon.d.ts +1 -2
  336. package/types/list/common-hooks/useTypeahead.d.ts +0 -1
  337. package/types/measured-container/MeasuredContainer.d.ts +1 -1
  338. package/types/overflow-container/useOverflowContainer.d.ts +4 -5
  339. package/types/price-ticker/PriceTicker.d.ts +1 -1
  340. package/types/split-button/SplitStateButton.d.ts +0 -1
  341. package/types/split-button/useSplitButton.d.ts +71 -60
  342. package/types/table-search/SearchCell.d.ts +1 -2
  343. package/types/table-search/TableSearch.d.ts +2 -4
  344. package/types/table-search/useTableSearch.d.ts +4 -2
  345. package/types/tabs-next/TabBar.d.ts +12 -0
  346. package/types/tabs-next/TabListNext.d.ts +12 -0
  347. package/types/tabs-next/TabNext.d.ts +12 -0
  348. package/types/tabs-next/TabNextAction.d.ts +5 -0
  349. package/types/tabs-next/TabNextContext.d.ts +12 -0
  350. package/types/tabs-next/TabNextPanel.d.ts +8 -0
  351. package/types/tabs-next/TabNextTrigger.d.ts +5 -0
  352. package/types/tabs-next/TabOverflowList.d.ts +11 -0
  353. package/types/tabs-next/TabsNext.d.ts +17 -0
  354. package/types/tabs-next/TabsNextContext.d.ts +21 -0
  355. package/types/tabs-next/hooks/useCollection.d.ts +18 -0
  356. package/types/tabs-next/hooks/useFocusOutside.d.ts +2 -0
  357. package/types/tabs-next/hooks/useOverflow.d.ts +11 -0
  358. package/types/tabs-next/index.d.ts +7 -0
  359. package/types/tabstrip/Tab.d.ts +23 -22
  360. package/types/tabstrip/TabMenu.d.ts +1 -2
  361. package/types/tabstrip/Tabstrip.d.ts +1 -2
  362. package/types/tabstrip/useSelection.d.ts +3 -3
  363. package/types/tabstrip/useTabstrip.d.ts +5 -5
  364. package/types/toolbar/Toolbar.d.ts +1 -2
  365. package/types/toolbar/useToolbar.d.ts +1 -1
  366. package/types/vuu-date-picker/VuuDatePicker.d.ts +4 -6
  367. package/types/vuu-input/VuuInput.d.ts +1 -1
  368. package/types/vuu-typeahead-input/VuuTypeaheadInput.d.ts +1 -2
  369. package/cjs/tree/Tree.css.js +0 -6
  370. package/cjs/tree/Tree.css.js.map +0 -1
  371. package/cjs/tree/Tree.js +0 -179
  372. package/cjs/tree/Tree.js.map +0 -1
  373. package/cjs/tree/hierarchical-data-utils.js +0 -72
  374. package/cjs/tree/hierarchical-data-utils.js.map +0 -1
  375. package/cjs/tree/key-code.js +0 -62
  376. package/cjs/tree/key-code.js.map +0 -1
  377. package/cjs/tree/list-dom-utils.js +0 -19
  378. package/cjs/tree/list-dom-utils.js.map +0 -1
  379. package/cjs/tree/treeTypeUtils.js +0 -6
  380. package/cjs/tree/treeTypeUtils.js.map +0 -1
  381. package/cjs/tree/use-collapsible-groups.js +0 -85
  382. package/cjs/tree/use-collapsible-groups.js.map +0 -1
  383. package/cjs/tree/use-hierarchical-data.js +0 -51
  384. package/cjs/tree/use-hierarchical-data.js.map +0 -1
  385. package/cjs/tree/use-items-with-ids.js +0 -100
  386. package/cjs/tree/use-items-with-ids.js.map +0 -1
  387. package/cjs/tree/use-keyboard-navigation.js +0 -144
  388. package/cjs/tree/use-keyboard-navigation.js.map +0 -1
  389. package/cjs/tree/use-selection.js +0 -154
  390. package/cjs/tree/use-selection.js.map +0 -1
  391. package/cjs/tree/use-tree-keyboard-navigation.js +0 -41
  392. package/cjs/tree/use-tree-keyboard-navigation.js.map +0 -1
  393. package/cjs/tree/use-viewport-tracking.js +0 -76
  394. package/cjs/tree/use-viewport-tracking.js.map +0 -1
  395. package/cjs/tree/useTree.js +0 -106
  396. package/cjs/tree/useTree.js.map +0 -1
  397. package/esm/tree/Tree.css.js +0 -4
  398. package/esm/tree/Tree.css.js.map +0 -1
  399. package/esm/tree/Tree.js +0 -176
  400. package/esm/tree/Tree.js.map +0 -1
  401. package/esm/tree/hierarchical-data-utils.js +0 -65
  402. package/esm/tree/hierarchical-data-utils.js.map +0 -1
  403. package/esm/tree/key-code.js +0 -54
  404. package/esm/tree/key-code.js.map +0 -1
  405. package/esm/tree/list-dom-utils.js +0 -15
  406. package/esm/tree/list-dom-utils.js.map +0 -1
  407. package/esm/tree/treeTypeUtils.js +0 -4
  408. package/esm/tree/treeTypeUtils.js.map +0 -1
  409. package/esm/tree/use-collapsible-groups.js +0 -83
  410. package/esm/tree/use-collapsible-groups.js.map +0 -1
  411. package/esm/tree/use-hierarchical-data.js +0 -49
  412. package/esm/tree/use-hierarchical-data.js.map +0 -1
  413. package/esm/tree/use-items-with-ids.js +0 -98
  414. package/esm/tree/use-items-with-ids.js.map +0 -1
  415. package/esm/tree/use-keyboard-navigation.js +0 -142
  416. package/esm/tree/use-keyboard-navigation.js.map +0 -1
  417. package/esm/tree/use-selection.js +0 -147
  418. package/esm/tree/use-selection.js.map +0 -1
  419. package/esm/tree/use-tree-keyboard-navigation.js +0 -39
  420. package/esm/tree/use-tree-keyboard-navigation.js.map +0 -1
  421. package/esm/tree/use-viewport-tracking.js +0 -74
  422. package/esm/tree/use-viewport-tracking.js.map +0 -1
  423. package/esm/tree/useTree.js +0 -104
  424. package/esm/tree/useTree.js.map +0 -1
  425. package/types/tree/Tree.d.ts +0 -19
  426. package/types/tree/hierarchical-data-utils.d.ts +0 -8
  427. package/types/tree/index.d.ts +0 -3
  428. package/types/tree/key-code.d.ts +0 -11
  429. package/types/tree/list-dom-utils.d.ts +0 -6
  430. package/types/tree/treeTypeUtils.d.ts +0 -2
  431. package/types/tree/use-collapsible-groups.d.ts +0 -18
  432. package/types/tree/use-hierarchical-data.d.ts +0 -6
  433. package/types/tree/use-items-with-ids.d.ts +0 -8
  434. package/types/tree/use-keyboard-navigation.d.ts +0 -26
  435. package/types/tree/use-selection.d.ts +0 -31
  436. package/types/tree/use-tree-keyboard-navigation.d.ts +0 -12
  437. package/types/tree/use-viewport-tracking.d.ts +0 -2
  438. package/types/tree/useTree.d.ts +0 -30
@@ -1 +1 @@
1
- {"version":3,"file":"DragDropProvider.js","sources":["../../src/drag-drop/DragDropProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport { DragDropState } from \"./DragDropState\";\nimport {\n GlobalDropHandler,\n ResumeDragHandler,\n useGlobalDragDrop,\n} from \"./useGlobalDragDrop\";\n\nconst NO_DRAG_CONTEXT = {\n isDragSource: undefined,\n isDropTarget: undefined,\n register: () => undefined,\n};\n\nconst unconfiguredRegistrationCall = () =>\n console.log(`have you forgotten to provide a DragDrop Provider ?`);\n\nexport type DragOutHandler = (\n id: string,\n dragDropState: DragDropState\n) => boolean;\n\nexport type DragDropRegistrationFn = (\n id: string,\n resumeDrag: ResumeDragHandler | false,\n onDrop?: GlobalDropHandler\n) => void;\n\nexport type EndOfDragOperationHandler = (id: string) => void;\n\nexport interface DragDropContextProps {\n dragSources?: Map<string, string[]>;\n dropTargets?: Map<string, string[]>;\n onDragOut?: DragOutHandler;\n onEndOfDragOperation?: EndOfDragOperationHandler;\n registerDragDropParty: DragDropRegistrationFn;\n}\n\nconst DragDropContext = createContext<DragDropContextProps>({\n registerDragDropParty: unconfiguredRegistrationCall,\n});\n\nexport type DragSources = {\n [key: string]: { dropTargets: string | string[]; payloadType?: string };\n};\nexport interface DragDropProviderProps {\n children: ReactNode;\n dragSources: DragSources;\n}\n\nexport type MeasuredTarget = {\n bottom: number;\n left: number;\n right: number;\n top: number;\n};\n\nconst measureDropTargets = (dropTargetIds: string[] = []) => {\n return dropTargetIds.reduce<Record<string, MeasuredTarget>>((map, id) => {\n const el = document.getElementById(id);\n if (el) {\n const { top, right, bottom, left } = el.getBoundingClientRect();\n map[id] = { top, right, bottom, left };\n }\n return map;\n }, {});\n};\n\nexport const DragDropProvider = ({\n children,\n dragSources: dragSourcesProp,\n}: DragDropProviderProps) => {\n const resumeDragHandlers = useMemo(\n () => new Map<string, ResumeDragHandler>(),\n []\n );\n const dropHandlers = useMemo(() => new Map<string, GlobalDropHandler>(), []);\n const handleDragOverDropTarget = useCallback(\n (dropTargetId: string, dragDropState: DragDropState) => {\n const resumeDrag = resumeDragHandlers.get(dropTargetId);\n if (resumeDrag) {\n return resumeDrag(dragDropState);\n } else {\n return false;\n }\n },\n [resumeDragHandlers]\n );\n\n const handleDrop = useCallback(\n (dropTargetId: string, dragDropState: DragDropState) => {\n const handleDrop = dropHandlers.get(dropTargetId);\n if (handleDrop) {\n handleDrop(dragDropState);\n }\n },\n [dropHandlers]\n );\n\n const { measuredDropTargetsRef, resumeDrag } = useGlobalDragDrop({\n onDragOverDropTarget: handleDragOverDropTarget,\n onDrop: handleDrop,\n });\n const [dragSources, dropTargets] = useMemo(() => {\n const sources = new Map<string, string[]>();\n // TODO do we need the targets ?\n const targets = new Map<string, string[]>();\n\n for (const [sourceId, { dropTargets }] of Object.entries(dragSourcesProp)) {\n const sourceEntry = sources.get(sourceId);\n const targetIds = Array.isArray(dropTargets)\n ? dropTargets\n : [dropTargets];\n if (sourceEntry) {\n sourceEntry.push(...targetIds);\n } else {\n sources.set(sourceId, targetIds);\n }\n for (const targetId of targetIds) {\n const targetEntry = targets.get(targetId);\n if (targetEntry) {\n targetEntry.push(sourceId);\n } else {\n targets.set(targetId, [sourceId]);\n }\n }\n }\n return [sources, targets];\n }, [dragSourcesProp]);\n\n const onDragOut = useCallback<DragOutHandler>(\n (id, dragDropState) => {\n // we call releaseItem if and when the dragged item is dropped onto a remote dropTarget\n measuredDropTargetsRef.current = measureDropTargets(dragSources.get(id));\n resumeDrag(dragDropState);\n return true;\n },\n [dragSources, measuredDropTargetsRef, resumeDrag]\n );\n\n const onEndOfDragOperation = useCallback<EndOfDragOperationHandler>((id) => {\n console.log(`end of drag operation, id= ${id}`);\n }, []);\n\n const registerDragDropParty = useCallback<DragDropRegistrationFn>(\n (id, resumeDrag, onDrop) => {\n if (resumeDrag) {\n resumeDragHandlers.set(id, resumeDrag);\n } else if (onDrop) {\n dropHandlers.set(id, onDrop);\n }\n },\n [dropHandlers, resumeDragHandlers]\n );\n\n const contextValue: DragDropContextProps = useMemo(\n () => ({\n dragSources,\n dropTargets,\n onDragOut,\n onEndOfDragOperation,\n registerDragDropParty,\n }),\n [\n dragSources,\n dropTargets,\n onDragOut,\n onEndOfDragOperation,\n registerDragDropParty,\n ]\n );\n\n return (\n <DragDropContext.Provider value={contextValue}>\n {children}\n </DragDropContext.Provider>\n );\n};\n\nexport interface DragDropProviderResult {\n isDragSource?: boolean;\n isDropTarget?: boolean;\n onDragOut?: DragOutHandler;\n onEndOfDragOperation?: (id: string) => void;\n register: DragDropRegistrationFn;\n}\n\nexport const useDragDropProvider = (id?: string): DragDropProviderResult => {\n const {\n dragSources,\n dropTargets,\n onDragOut,\n onEndOfDragOperation,\n registerDragDropParty,\n } = useContext(DragDropContext);\n if (id && (dragSources || dropTargets)) {\n const isDragSource = dragSources?.has(id) ?? false;\n const isDropTarget = dropTargets?.has(id) ?? false;\n\n return {\n isDragSource,\n isDropTarget,\n onDragOut,\n onEndOfDragOperation,\n register: registerDragDropParty,\n };\n } else {\n return NO_DRAG_CONTEXT;\n }\n};\n"],"names":["createContext","useMemo","useCallback","resumeDrag","handleDrop","useGlobalDragDrop","dropTargets","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"DragDropProvider.js","sources":["../../src/drag-drop/DragDropProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport { DragDropState } from \"./DragDropState\";\nimport {\n GlobalDropHandler,\n ResumeDragHandler,\n useGlobalDragDrop,\n} from \"./useGlobalDragDrop\";\n\nconst NO_DRAG_CONTEXT = {\n isDragSource: undefined,\n isDropTarget: undefined,\n register: () => undefined,\n};\n\nconst unconfiguredRegistrationCall = () =>\n console.log(`have you forgotten to provide a DragDrop Provider ?`);\n\nexport type DragOutHandler = (\n id: string,\n dragDropState: DragDropState\n) => boolean;\n\nexport type DragDropRegistrationFn = (\n id: string,\n resumeDrag: ResumeDragHandler | false,\n onDrop?: GlobalDropHandler\n) => void;\n\nexport type EndOfDragOperationHandler = (id: string) => void;\n\nexport interface DragDropContextProps {\n dragSources?: Map<string, string[]>;\n dropTargets?: Map<string, string[]>;\n onDragOut?: DragOutHandler;\n onEndOfDragOperation?: EndOfDragOperationHandler;\n registerDragDropParty: DragDropRegistrationFn;\n}\n\nconst DragDropContext = createContext<DragDropContextProps>({\n registerDragDropParty: unconfiguredRegistrationCall,\n});\n\nexport type DragSources = {\n [key: string]: { dropTargets: string | string[]; payloadType?: string };\n};\nexport interface DragDropProviderProps {\n children: ReactNode;\n dragSources: DragSources;\n}\n\nexport type MeasuredTarget = {\n bottom: number;\n left: number;\n right: number;\n top: number;\n};\n\nconst measureDropTargets = (dropTargetIds: string[] = []) => {\n return dropTargetIds.reduce<Record<string, MeasuredTarget>>((map, id) => {\n const el = document.getElementById(id);\n if (el) {\n const { top, right, bottom, left } = el.getBoundingClientRect();\n map[id] = { top, right, bottom, left };\n }\n return map;\n }, {});\n};\n\nexport const DragDropProvider = ({\n children,\n dragSources: dragSourcesProp,\n}: DragDropProviderProps) => {\n const resumeDragHandlers = useMemo(\n () => new Map<string, ResumeDragHandler>(),\n []\n );\n const dropHandlers = useMemo(() => new Map<string, GlobalDropHandler>(), []);\n const handleDragOverDropTarget = useCallback(\n (dropTargetId: string, dragDropState: DragDropState) => {\n const resumeDrag = resumeDragHandlers.get(dropTargetId);\n if (resumeDrag) {\n return resumeDrag(dragDropState);\n } else {\n return false;\n }\n },\n [resumeDragHandlers]\n );\n\n const handleDrop = useCallback(\n (dropTargetId: string, dragDropState: DragDropState) => {\n const handleDrop = dropHandlers.get(dropTargetId);\n if (handleDrop) {\n handleDrop(dragDropState);\n }\n },\n [dropHandlers]\n );\n\n const { measuredDropTargetsRef, resumeDrag } = useGlobalDragDrop({\n onDragOverDropTarget: handleDragOverDropTarget,\n onDrop: handleDrop,\n });\n const [dragSources, dropTargets] = useMemo(() => {\n const sources = new Map<string, string[]>();\n // TODO do we need the targets ?\n const targets = new Map<string, string[]>();\n\n for (const [sourceId, { dropTargets }] of Object.entries(dragSourcesProp)) {\n const sourceEntry = sources.get(sourceId);\n const targetIds = Array.isArray(dropTargets)\n ? dropTargets\n : [dropTargets];\n if (sourceEntry) {\n sourceEntry.push(...targetIds);\n } else {\n sources.set(sourceId, targetIds);\n }\n for (const targetId of targetIds) {\n const targetEntry = targets.get(targetId);\n if (targetEntry) {\n targetEntry.push(sourceId);\n } else {\n targets.set(targetId, [sourceId]);\n }\n }\n }\n return [sources, targets];\n }, [dragSourcesProp]);\n\n const onDragOut = useCallback<DragOutHandler>(\n (id, dragDropState) => {\n // we call releaseItem if and when the dragged item is dropped onto a remote dropTarget\n measuredDropTargetsRef.current = measureDropTargets(dragSources.get(id));\n resumeDrag(dragDropState);\n return true;\n },\n [dragSources, measuredDropTargetsRef, resumeDrag]\n );\n\n const onEndOfDragOperation = useCallback<EndOfDragOperationHandler>((id) => {\n console.log(`end of drag operation, id= ${id}`);\n }, []);\n\n const registerDragDropParty = useCallback<DragDropRegistrationFn>(\n (id, resumeDrag, onDrop) => {\n if (resumeDrag) {\n resumeDragHandlers.set(id, resumeDrag);\n } else if (onDrop) {\n dropHandlers.set(id, onDrop);\n }\n },\n [dropHandlers, resumeDragHandlers]\n );\n\n const contextValue: DragDropContextProps = useMemo(\n () => ({\n dragSources,\n dropTargets,\n onDragOut,\n onEndOfDragOperation,\n registerDragDropParty,\n }),\n [\n dragSources,\n dropTargets,\n onDragOut,\n onEndOfDragOperation,\n registerDragDropParty,\n ]\n );\n\n return (\n <DragDropContext.Provider value={contextValue}>\n {children}\n </DragDropContext.Provider>\n );\n};\n\nexport interface DragDropProviderResult {\n isDragSource?: boolean;\n isDropTarget?: boolean;\n onDragOut?: DragOutHandler;\n onEndOfDragOperation?: (id: string) => void;\n register: DragDropRegistrationFn;\n}\n\nexport const useDragDropProvider = (id?: string): DragDropProviderResult => {\n const {\n dragSources,\n dropTargets,\n onDragOut,\n onEndOfDragOperation,\n registerDragDropParty,\n } = useContext(DragDropContext);\n if (id && (dragSources || dropTargets)) {\n const isDragSource = dragSources?.has(id) ?? false;\n const isDropTarget = dropTargets?.has(id) ?? false;\n\n return {\n isDragSource,\n isDropTarget,\n onDragOut,\n onEndOfDragOperation,\n register: registerDragDropParty,\n };\n } else {\n return NO_DRAG_CONTEXT;\n }\n};\n"],"names":["createContext","useMemo","useCallback","resumeDrag","handleDrop","useGlobalDragDrop","dropTargets","useContext"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DragDropState.js","sources":["../../src/drag-drop/DragDropState.ts"],"sourcesContent":["import { MouseOffset, MousePosition } from \"./dragDropTypes\";\n\nexport class DragDropState {\n /** Distance between start (top | left) of dragged element and point where user pressed to drag */\n readonly mouseOffset: MouseOffset;\n /** Element where the initial mousedown triggered the drag operation */\n readonly initialDragElement: HTMLElement;\n /** Element being dragged, (initial element cloned and rendered in portal). */\n draggableElement: HTMLElement | null = null;\n\n payload: unknown = null;\n\n constructor(mousePosition: MousePosition, dragElement: HTMLElement) {\n this.initialDragElement = dragElement;\n this.mouseOffset = this.getMouseOffset(mousePosition, dragElement);\n }\n\n /** Used to capture a ref to the Draggable JSX.Element */\n setDraggable = (el: HTMLElement | null) => {\n this.draggableElement = el;\n };\n\n setPayload(payload: unknown) {\n this.payload = payload;\n }\n\n private getMouseOffset(\n mousePosition: MousePosition,\n dragElement: HTMLElement\n ) {\n const { clientX, clientY } = mousePosition;\n const draggableRect = dragElement.getBoundingClientRect();\n\n return {\n x: clientX - draggableRect.left,\n y: clientY - draggableRect.top,\n };\n }\n}\n"],"names":[],"mappings":";;;;;AAEO,MAAM,aAAc,CAAA;AAAA,EAUzB,WAAA,CAAY,eAA8B,WAA0B,EAAA;AARpE;AAAA,IAAS,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAET;AAAA,IAAS,aAAA,CAAA,IAAA,EAAA,oBAAA,CAAA,CAAA;AAET;AAAA,IAAuC,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,IAAA,CAAA,CAAA;AAEvC,IAAmB,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AAQnB;AAAA,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,EAAe,CAAC,EAA2B,KAAA;AACzC,MAAA,IAAA,CAAK,gBAAmB,GAAA,EAAA,CAAA;AAAA,KAC1B,CAAA,CAAA;AAPE,IAAA,IAAA,CAAK,kBAAqB,GAAA,WAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,WAAc,GAAA,IAAA,CAAK,cAAe,CAAA,aAAA,EAAe,WAAW,CAAA,CAAA;AAAA,GACnE;AAAA,EAOA,WAAW,OAAkB,EAAA;AAC3B,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA,CAAA;AAAA,GACjB;AAAA,EAEQ,cAAA,CACN,eACA,WACA,EAAA;AACA,IAAM,MAAA,EAAE,OAAS,EAAA,OAAA,EAAY,GAAA,aAAA,CAAA;AAC7B,IAAM,MAAA,aAAA,GAAgB,YAAY,qBAAsB,EAAA,CAAA;AAExD,IAAO,OAAA;AAAA,MACL,CAAA,EAAG,UAAU,aAAc,CAAA,IAAA;AAAA,MAC3B,CAAA,EAAG,UAAU,aAAc,CAAA,GAAA;AAAA,KAC7B,CAAA;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"DragDropState.js","sources":["../../src/drag-drop/DragDropState.ts"],"sourcesContent":["import { MouseOffset, MousePosition } from \"./dragDropTypes\";\n\nexport class DragDropState {\n /** Distance between start (top | left) of dragged element and point where user pressed to drag */\n readonly mouseOffset: MouseOffset;\n /** Element where the initial mousedown triggered the drag operation */\n readonly initialDragElement: HTMLElement;\n /** Element being dragged, (initial element cloned and rendered in portal). */\n draggableElement: HTMLElement | null = null;\n\n payload: unknown = null;\n\n constructor(mousePosition: MousePosition, dragElement: HTMLElement) {\n this.initialDragElement = dragElement;\n this.mouseOffset = this.getMouseOffset(mousePosition, dragElement);\n }\n\n /** Used to capture a ref to the Draggable JSX.Element */\n setDraggable = (el: HTMLElement | null) => {\n this.draggableElement = el;\n };\n\n setPayload(payload: unknown) {\n this.payload = payload;\n }\n\n private getMouseOffset(\n mousePosition: MousePosition,\n dragElement: HTMLElement\n ) {\n const { clientX, clientY } = mousePosition;\n const draggableRect = dragElement.getBoundingClientRect();\n\n return {\n x: clientX - draggableRect.left,\n y: clientY - draggableRect.top,\n };\n }\n}\n"],"names":[],"mappings":";;;;;AAEO,MAAM,aAAc,CAAA;AAAA,EAUzB,WAAA,CAAY,eAA8B,WAA0B,EAAA;AARpE;AAAA,IAAS,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA;AAET;AAAA,IAAS,aAAA,CAAA,IAAA,EAAA,oBAAA,CAAA;AAET;AAAA,IAAuC,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAEvC,IAAmB,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA;AAQnB;AAAA,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,EAAe,CAAC,EAA2B,KAAA;AACzC,MAAA,IAAA,CAAK,gBAAmB,GAAA,EAAA;AAAA,KAC1B,CAAA;AAPE,IAAA,IAAA,CAAK,kBAAqB,GAAA,WAAA;AAC1B,IAAA,IAAA,CAAK,WAAc,GAAA,IAAA,CAAK,cAAe,CAAA,aAAA,EAAe,WAAW,CAAA;AAAA;AACnE,EAOA,WAAW,OAAkB,EAAA;AAC3B,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA;AAAA;AACjB,EAEQ,cAAA,CACN,eACA,WACA,EAAA;AACA,IAAM,MAAA,EAAE,OAAS,EAAA,OAAA,EAAY,GAAA,aAAA;AAC7B,IAAM,MAAA,aAAA,GAAgB,YAAY,qBAAsB,EAAA;AAExD,IAAO,OAAA;AAAA,MACL,CAAA,EAAG,UAAU,aAAc,CAAA,IAAA;AAAA,MAC3B,CAAA,EAAG,UAAU,aAAc,CAAA;AAAA,KAC7B;AAAA;AAEJ;;;;"}
@@ -80,11 +80,6 @@ const createDropIndicatorPosition = () => {
80
80
  const createDropIndicator = (transitioning) => {
81
81
  const spacer = document.createElement("div");
82
82
  spacer.className = "vuuDraggable-dropIndicator";
83
- if (transitioning) {
84
- spacer.addEventListener("transitionend", () => {
85
- transitioning.current = false;
86
- });
87
- }
88
83
  return spacer;
89
84
  };
90
85
 
@@ -1 +1 @@
1
- {"version":3,"file":"Draggable.js","sources":["../../src/drag-drop/Draggable.tsx"],"sourcesContent":["import { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n CSSProperties,\n forwardRef,\n HTMLAttributes,\n MutableRefObject,\n RefCallback,\n TransitionEventHandler,\n useCallback,\n useMemo,\n} from \"react\";\nimport { PopupComponent as Popup, Portal } from \"@vuu-ui/vuu-popups\";\n\nimport draggableCss from \"./Draggable.css\";\n\nconst makeClassNames = (classNames: string) =>\n classNames.split(\" \").map((className) => `vuuDraggable-${className}`);\n\nexport interface DraggableProps extends HTMLAttributes<HTMLDivElement> {\n wrapperClassName: string;\n element: HTMLElement;\n onDropped?: () => void;\n onTransitionEnd?: TransitionEventHandler;\n scale?: number;\n style: CSSProperties;\n}\n\nexport const Draggable = forwardRef<HTMLDivElement, DraggableProps>(\n function Draggable(\n { wrapperClassName, element, onDropped, onTransitionEnd, style, scale = 1 },\n forwardedRef,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-draggable\",\n css: draggableCss,\n window: targetWindow,\n });\n\n const handleVuuDrop = useCallback(() => {\n onDropped?.();\n }, [onDropped]);\n\n const callbackRef = useCallback<RefCallback<HTMLDivElement>>(\n (el: HTMLDivElement) => {\n if (el) {\n el.innerHTML = \"\";\n el.appendChild(element);\n if (scale !== 1) {\n el.style.transform = `scale(${scale},${scale})`;\n }\n el.addEventListener(\"vuu-dropped\", handleVuuDrop);\n }\n },\n [element, handleVuuDrop, scale],\n );\n const forkedRef = useForkRef<HTMLDivElement>(forwardedRef, callbackRef);\n\n const position = useMemo(\n () => ({\n left: 0,\n top: 0,\n }),\n [],\n );\n\n return (\n <Portal>\n <Popup\n anchorElement={{ current: document.body }}\n className=\"vuuPopup\"\n placement=\"absolute\"\n position={position}\n >\n <div\n className={cx(\"vuuDraggable\", ...makeClassNames(wrapperClassName))}\n ref={forkedRef}\n onTransitionEnd={onTransitionEnd}\n style={style}\n />\n </Popup>\n </Portal>\n );\n },\n);\n\n// const colors = [\"black\", \"red\", \"green\", \"yellow\"];\n// let color_idx = 0;\nexport const createDragSpacer = (\n transitioning?: MutableRefObject<boolean>,\n): HTMLElement => {\n // const idx = color_idx++ % 4;\n\n const spacer = document.createElement(\"div\");\n spacer.className = \"vuuDraggable-spacer\";\n if (transitioning) {\n spacer.addEventListener(\"transitionend\", () => {\n transitioning.current = false;\n });\n }\n return spacer;\n};\n\nexport const createDropIndicatorPosition = (): HTMLElement => {\n const spacer = document.createElement(\"div\");\n spacer.className = \"vuuDraggable-dropIndicatorPosition\";\n return spacer;\n};\n\nexport const createDropIndicator = (\n transitioning?: MutableRefObject<boolean>,\n): HTMLElement => {\n // const idx = color_idx++ % 4;\n const spacer = document.createElement(\"div\");\n spacer.className = \"vuuDraggable-dropIndicator\";\n if (transitioning) {\n spacer.addEventListener(\"transitionend\", () => {\n transitioning.current = false;\n });\n }\n return spacer;\n};\n"],"names":["forwardRef","Draggable","useWindow","useComponentCssInjection","draggableCss","useCallback","useForkRef","useMemo","Portal","jsx","Popup"],"mappings":"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"}
1
+ {"version":3,"file":"Draggable.js","sources":["../../src/drag-drop/Draggable.tsx"],"sourcesContent":["import { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n CSSProperties,\n forwardRef,\n HTMLAttributes,\n MutableRefObject,\n RefCallback,\n TransitionEventHandler,\n useCallback,\n useMemo,\n} from \"react\";\nimport { PopupComponent as Popup, Portal } from \"@vuu-ui/vuu-popups\";\n\nimport draggableCss from \"./Draggable.css\";\n\nconst makeClassNames = (classNames: string) =>\n classNames.split(\" \").map((className) => `vuuDraggable-${className}`);\n\nexport interface DraggableProps extends HTMLAttributes<HTMLDivElement> {\n wrapperClassName: string;\n element: HTMLElement;\n onDropped?: () => void;\n onTransitionEnd?: TransitionEventHandler;\n scale?: number;\n style: CSSProperties;\n}\n\nexport const Draggable = forwardRef<HTMLDivElement, DraggableProps>(\n function Draggable(\n { wrapperClassName, element, onDropped, onTransitionEnd, style, scale = 1 },\n forwardedRef,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-draggable\",\n css: draggableCss,\n window: targetWindow,\n });\n\n const handleVuuDrop = useCallback(() => {\n onDropped?.();\n }, [onDropped]);\n\n const callbackRef = useCallback<RefCallback<HTMLDivElement>>(\n (el: HTMLDivElement) => {\n if (el) {\n el.innerHTML = \"\";\n el.appendChild(element);\n if (scale !== 1) {\n el.style.transform = `scale(${scale},${scale})`;\n }\n el.addEventListener(\"vuu-dropped\", handleVuuDrop);\n }\n },\n [element, handleVuuDrop, scale],\n );\n const forkedRef = useForkRef<HTMLDivElement>(forwardedRef, callbackRef);\n\n const position = useMemo(\n () => ({\n left: 0,\n top: 0,\n }),\n [],\n );\n\n return (\n <Portal>\n <Popup\n anchorElement={{ current: document.body }}\n className=\"vuuPopup\"\n placement=\"absolute\"\n position={position}\n >\n <div\n className={cx(\"vuuDraggable\", ...makeClassNames(wrapperClassName))}\n ref={forkedRef}\n onTransitionEnd={onTransitionEnd}\n style={style}\n />\n </Popup>\n </Portal>\n );\n },\n);\n\n// const colors = [\"black\", \"red\", \"green\", \"yellow\"];\n// let color_idx = 0;\nexport const createDragSpacer = (\n transitioning?: MutableRefObject<boolean>,\n): HTMLElement => {\n // const idx = color_idx++ % 4;\n\n const spacer = document.createElement(\"div\");\n spacer.className = \"vuuDraggable-spacer\";\n if (transitioning) {\n spacer.addEventListener(\"transitionend\", () => {\n transitioning.current = false;\n });\n }\n return spacer;\n};\n\nexport const createDropIndicatorPosition = (): HTMLElement => {\n const spacer = document.createElement(\"div\");\n spacer.className = \"vuuDraggable-dropIndicatorPosition\";\n return spacer;\n};\n\nexport const createDropIndicator = (\n transitioning?: MutableRefObject<boolean>,\n): HTMLElement => {\n // const idx = color_idx++ % 4;\n const spacer = document.createElement(\"div\");\n spacer.className = \"vuuDraggable-dropIndicator\";\n if (transitioning) {\n spacer.addEventListener(\"transitionend\", () => {\n transitioning.current = false;\n });\n }\n return spacer;\n};\n"],"names":["forwardRef","Draggable","useWindow","useComponentCssInjection","draggableCss","useCallback","useForkRef","useMemo","Portal","jsx","Popup"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dragDropTypes.js","sources":["../../src/drag-drop/dragDropTypes.ts"],"sourcesContent":["import { MouseEventHandler, RefObject } from \"react\";\nimport { orientationType } from \"@vuu-ui/vuu-utils\";\nimport { DragDropState } from \"./DragDropState\";\n\n//-----------------------------------\n// From useScrollPosition in List\nexport type ViewportRange = {\n atEnd: boolean;\n atStart: boolean;\n from: number;\n to: number;\n};\n\n// From overflow types - probably don't need\ntype dimension = \"width\" | \"height\" | \"scrollWidth\" | \"scrollHeight\";\n\ntype dimensions = {\n size: dimension;\n depth: dimension;\n scrollDepth: dimension;\n};\n\nexport type dimensionsType = {\n horizontal: dimensions;\n vertical: dimensions;\n};\n\n//-----------------------------------\n\nexport type dragStrategy =\n | \"drop-indicator\"\n | \"natural-movement\"\n | \"drag-copy\"\n | \"drop-only\";\n\nexport type Direction = \"fwd\" | \"bwd\";\nexport const FWD: Direction = \"fwd\";\nexport const BWD: Direction = \"bwd\";\n\nexport interface MousePosition {\n clientX: number;\n clientY: number;\n}\n\nexport interface MouseOffset {\n x: number;\n y: number;\n}\n\nexport type Rect = {\n height: number;\n left: number;\n top: number;\n width: number;\n};\n\nexport interface DragHookResult {\n draggable?: JSX.Element;\n dropIndicator?: JSX.Element;\n draggedItemIndex?: number;\n isDragging: boolean;\n isScrolling: RefObject<boolean>;\n onMouseDown?: MouseEventHandler;\n revealOverflowedItems?: boolean;\n}\n\nexport interface InternalDragHookResult\n extends Omit<DragHookResult, \"isDragging\" | \"isScrolling\"> {\n beginDrag: (dragElement: HTMLElement) => void;\n drag: (dragPos: number, mouseMoveDirection: \"fwd\" | \"bwd\") => void;\n drop: () => DropOptions;\n handleScrollStart?: (scrollDirection: \"fwd\" | \"bwd\") => void;\n handleScrollStop?: (\n scrollDirection: \"fwd\" | \"bwd\",\n _scrollPos: number,\n atEnd: boolean,\n ) => void;\n /**\n * Draggable item has been dragged out of container. Remove any local drop\n * indicators. Dragged element itself should not yet be removed from DOM.\n */\n releaseDrag?: () => void;\n}\n\nexport interface DropOptions {\n fromIndex: number;\n toIndex: number;\n isExternal?: boolean;\n payload?: unknown;\n}\n\nexport type DragStartHandler = (dragDropState: DragDropState) => void;\n\nexport type DropHandler = (options: DropOptions) => void;\n\nexport interface DragDropProps {\n allowDragDrop?: boolean | dragStrategy;\n containerRef: RefObject<HTMLElement>;\n /** this is the className that will be assigned during drag to the dragged element */\n draggableClassName: string;\n extendedDropZone?: boolean;\n getDragPayload?: (dragElement: HTMLElement) => unknown;\n id?: string;\n isDragSource?: boolean;\n isDropTarget?: boolean;\n itemQuery?: string;\n onDragStart?: DragStartHandler;\n onDrop: DropHandler;\n onDropSettle?: (toIndex: number) => void;\n orientation: orientationType;\n /**\n * The scrolling container does not necessarily have to be a\n * descendant of the container, it may be an ancestor element;\n */\n scrollingContainerRef?: RefObject<HTMLElement>;\n // selected?: CollectionItem<unknown> | CollectionItem<unknown>[] | null;\n viewportRange?: ViewportRange;\n}\n\nexport type DragDropHook = (props: DragDropProps) => DragHookResult;\n\nexport interface InternalDragDropProps\n extends Omit<DragDropProps, \"draggableClassName\" | \"id\" | \"onDrop\"> {\n isDragSource?: boolean;\n isDropTarget?: boolean;\n selected?: unknown;\n}\n\nexport type DragDropContext = {\n dragElement: HTMLElement;\n dragPayload: unknown;\n mouseOffset: MouseOffset;\n};\n"],"names":[],"mappings":";;AAoCO,MAAM,GAAiB,GAAA,MAAA;AACvB,MAAM,GAAiB,GAAA;;;;;"}
1
+ {"version":3,"file":"dragDropTypes.js","sources":["../../src/drag-drop/dragDropTypes.ts"],"sourcesContent":["import { MouseEventHandler, RefObject } from \"react\";\nimport { orientationType } from \"@vuu-ui/vuu-utils\";\nimport { DragDropState } from \"./DragDropState\";\n\n//-----------------------------------\n// From useScrollPosition in List\nexport type ViewportRange = {\n atEnd: boolean;\n atStart: boolean;\n from: number;\n to: number;\n};\n\n// From overflow types - probably don't need\ntype dimension = \"width\" | \"height\" | \"scrollWidth\" | \"scrollHeight\";\n\ntype dimensions = {\n size: dimension;\n depth: dimension;\n scrollDepth: dimension;\n};\n\nexport type dimensionsType = {\n horizontal: dimensions;\n vertical: dimensions;\n};\n\n//-----------------------------------\n\nexport type dragStrategy =\n | \"drop-indicator\"\n | \"natural-movement\"\n | \"drag-copy\"\n | \"drop-only\";\n\nexport type Direction = \"fwd\" | \"bwd\";\nexport const FWD: Direction = \"fwd\";\nexport const BWD: Direction = \"bwd\";\n\nexport interface MousePosition {\n clientX: number;\n clientY: number;\n}\n\nexport interface MouseOffset {\n x: number;\n y: number;\n}\n\nexport type Rect = {\n height: number;\n left: number;\n top: number;\n width: number;\n};\n\nexport interface DragHookResult {\n draggable?: JSX.Element;\n dropIndicator?: JSX.Element;\n draggedItemIndex?: number;\n isDragging: boolean;\n isScrolling: RefObject<boolean>;\n onMouseDown?: MouseEventHandler;\n revealOverflowedItems?: boolean;\n}\n\nexport interface InternalDragHookResult\n extends Omit<DragHookResult, \"isDragging\" | \"isScrolling\"> {\n beginDrag: (dragElement: HTMLElement) => void;\n drag: (dragPos: number, mouseMoveDirection: \"fwd\" | \"bwd\") => void;\n drop: () => DropOptions;\n handleScrollStart?: (scrollDirection: \"fwd\" | \"bwd\") => void;\n handleScrollStop?: (\n scrollDirection: \"fwd\" | \"bwd\",\n _scrollPos: number,\n atEnd: boolean,\n ) => void;\n /**\n * Draggable item has been dragged out of container. Remove any local drop\n * indicators. Dragged element itself should not yet be removed from DOM.\n */\n releaseDrag?: () => void;\n}\n\nexport interface DropOptions {\n fromIndex: number;\n toIndex: number;\n isExternal?: boolean;\n payload?: unknown;\n}\n\nexport type DragStartHandler = (dragDropState: DragDropState) => void;\n\nexport type DropHandler = (options: DropOptions) => void;\n\nexport interface DragDropProps {\n allowDragDrop?: boolean | dragStrategy;\n containerRef: RefObject<HTMLElement>;\n /** this is the className that will be assigned during drag to the dragged element */\n draggableClassName: string;\n extendedDropZone?: boolean;\n getDragPayload?: (dragElement: HTMLElement) => unknown;\n id?: string;\n isDragSource?: boolean;\n isDropTarget?: boolean;\n itemQuery?: string;\n onDragStart?: DragStartHandler;\n onDrop: DropHandler;\n onDropSettle?: (toIndex: number) => void;\n orientation: orientationType;\n /**\n * The scrolling container does not necessarily have to be a\n * descendant of the container, it may be an ancestor element;\n */\n scrollingContainerRef?: RefObject<HTMLElement>;\n // selected?: CollectionItem<unknown> | CollectionItem<unknown>[] | null;\n viewportRange?: ViewportRange;\n}\n\nexport type DragDropHook = (props: DragDropProps) => DragHookResult;\n\nexport interface InternalDragDropProps\n extends Omit<DragDropProps, \"draggableClassName\" | \"id\" | \"onDrop\"> {\n isDragSource?: boolean;\n isDropTarget?: boolean;\n selected?: unknown;\n}\n\nexport type DragDropContext = {\n dragElement: HTMLElement;\n dragPayload: unknown;\n mouseOffset: MouseOffset;\n};\n"],"names":[],"mappings":";;AAoCO,MAAM,GAAiB,GAAA;AACvB,MAAM,GAAiB,GAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"drop-target-utils.js","sources":["../../src/drag-drop/drop-target-utils.ts"],"sourcesContent":["import { orientationType } from \"@vuu-ui/vuu-utils\";\nimport { ViewportRange } from \"./dragDropTypes\";\nimport { Direction, Rect } from \"./dragDropTypes\";\n\nconst LEFT_RIGHT = [\"left\", \"right\"];\nconst TOP_BOTTOM = [\"top\", \"bottom\"];\n// duplicated in repsonsive\n\nexport const NOT_OVERFLOWED = \":not(.wrapped)\";\nexport const NOT_HIDDEN = ':not([aria-hidden=\"true\"])';\n\n// TODO figure out which of these attributes we no longer need\nexport type MeasuredDropTarget = {\n /** \n The index position currently occupied by this item. If draggable \n is dropped here, this will be the destination drop position.\n */\n currentIndex: number;\n element: HTMLElement;\n id: string;\n index: number;\n isDraggedItem: boolean;\n isExternal?: boolean;\n isLast?: boolean;\n isOverflowIndicator?: boolean;\n start: number;\n end: number;\n mid: number;\n size: number;\n};\n\nexport type targetType = {\n element: HTMLElement | null;\n index: number;\n isLast?: boolean;\n};\n\n/** clones and removes id */\nexport const cloneElement = <T extends HTMLElement>(element: T): T => {\n const dolly = element.cloneNode(true) as T;\n // TOSO should we care about nested id values - perhaps an additional param, defaulting to false ?\n dolly.removeAttribute(\"id\");\n // Set index to -1 in case a moueMove event as we wait for drop to take effect might set highlighted\n // index to wrong value (see useList) -1 will be ignored;\n dolly.dataset.index = \"-1\";\n return dolly;\n};\n\ntype MousePosKey = keyof Pick<MouseEvent, \"clientX\" | \"clientY\">;\ntype DOMRectKey = keyof Omit<DOMRect, \"toJSON\">;\ntype DOMRectDimensionKey = keyof Pick<DOMRect, \"width\" | \"height\">;\ntype Dimension = keyof Pick<DOMRect, \"width\" | \"height\">;\ntype ElementDimension = keyof Pick<\n HTMLElement,\n | \"scrollHeight\"\n | \"scrollWidth\"\n | \"clientHeight\"\n | \"clientWidth\"\n | \"scrollTop\"\n | \"scrollLeft\"\n>;\n\ntype ElementPosition = \"x\" | \"y\";\n\nexport const measureElementSizeAndPosition = (\n element: HTMLElement,\n dimension: Dimension = \"width\",\n includeAutoMargin = false,\n) => {\n const pos = dimension === \"width\" ? \"left\" : \"top\";\n const { [dimension]: size, [pos]: position } =\n element.getBoundingClientRect();\n const { padEnd = false, padStart = false } = element.dataset;\n const style = getComputedStyle(element);\n const [start, end] = dimension === \"width\" ? LEFT_RIGHT : TOP_BOTTOM;\n const marginStart =\n padStart && !includeAutoMargin\n ? 0\n : parseInt(style.getPropertyValue(`margin-${start}`), 10);\n const marginEnd =\n padEnd && !includeAutoMargin\n ? 0\n : parseInt(style.getPropertyValue(`margin-${end}`), 10);\n\n let minWidth = size;\n const flexShrink = parseInt(style.getPropertyValue(\"flex-shrink\"), 10);\n if (flexShrink > 0) {\n const flexBasis = parseInt(style.getPropertyValue(\"flex-basis\"), 10);\n if (!isNaN(flexBasis) && flexBasis > 0) {\n minWidth = flexBasis;\n }\n }\n return [position, marginStart + minWidth + marginEnd];\n};\n\nconst DIMENSIONS = {\n horizontal: {\n CLIENT_POS: \"clientX\" as MousePosKey,\n CLIENT_SIZE: \"clientWidth\" as ElementDimension,\n CONTRA: \"top\" as DOMRectKey,\n CONTRA_CLIENT_POS: \"clientY\" as MousePosKey,\n CONTRA_END: \"bottom\" as DOMRectDimensionKey,\n CONTRA_POS: \"y\" as ElementPosition,\n DIMENSION: \"width\" as DOMRectDimensionKey,\n END: \"right\" as DOMRectKey,\n POS: \"x\" as ElementPosition,\n SCROLL_POS: \"scrollLeft\" as ElementDimension,\n SCROLL_SIZE: \"scrollWidth\" as ElementDimension,\n START: \"left\" as DOMRectKey,\n },\n vertical: {\n CLIENT_POS: \"clientY\" as MousePosKey,\n CLIENT_SIZE: \"clientHeight\" as ElementDimension,\n CONTRA: \"left\" as DOMRectKey,\n CONTRA_CLIENT_POS: \"clientX\" as MousePosKey,\n CONTRA_END: \"right\" as DOMRectDimensionKey,\n CONTRA_POS: \"x\" as ElementPosition,\n DIMENSION: \"height\" as DOMRectDimensionKey,\n END: \"bottom\" as DOMRectKey,\n POS: \"y\" as ElementPosition,\n SCROLL_POS: \"scrollTop\" as ElementDimension,\n SCROLL_SIZE: \"scrollHeight\" as ElementDimension,\n START: \"top\" as DOMRectKey,\n },\n};\nexport const dimensions = (orientation: orientationType) =>\n DIMENSIONS[orientation];\n\nexport const getItemById = (\n measuredItems: MeasuredDropTarget[],\n id: string,\n) => {\n const result = measuredItems.find((item) => item.id === id);\n if (result) {\n return result;\n }\n // else {\n // throw Error(`measuredItems do not contain an item with id #${id}`);\n // }\n};\n\nexport const removeDraggedItem = (\n measuredItems: MeasuredDropTarget[],\n index: number,\n) => {\n measuredItems.splice(index, 1);\n for (let i = index; i < measuredItems.length; i++) {\n measuredItems[i].currentIndex -= 1;\n }\n};\n\nexport type dropZone = \"start\" | \"end\";\n\nexport const measureDropTargets = (\n container: HTMLElement,\n orientation: orientationType,\n itemQuery?: string,\n viewportRange?: ViewportRange,\n draggedItemId?: string,\n) => {\n const dragThresholds: MeasuredDropTarget[] = [];\n const { DIMENSION } = dimensions(orientation);\n const children = Array.from(\n itemQuery ? container.querySelectorAll(itemQuery) : container.children,\n );\n\n const itemCount = children.length;\n const start =\n typeof viewportRange?.from === \"number\"\n ? viewportRange.atEnd\n ? Math.max(0, viewportRange.from - 1)\n : viewportRange.from\n : 0;\n const end =\n typeof viewportRange?.to === \"number\"\n ? Math.min(viewportRange.to + 2, itemCount - 1)\n : itemCount - 1;\n for (let index = start; index <= end; index++) {\n const element = children[index] as HTMLElement;\n const [start, size] = measureElementSizeAndPosition(element, DIMENSION);\n const isLast = index === itemCount - 1;\n const id = element.id;\n\n dragThresholds.push({\n currentIndex: index,\n id,\n index,\n isDraggedItem: draggedItemId === id,\n isLast,\n isOverflowIndicator: element.dataset.index === \"overflow\",\n element: element as HTMLElement,\n start,\n end: start + size,\n size,\n mid: start + size / 2,\n });\n }\n return dragThresholds;\n};\n\nexport const getIndexOfDraggedItem = (dropTargets: MeasuredDropTarget[]) =>\n dropTargets.findIndex((d) => d.isDraggedItem);\n\n// As the draggedItem is moved, displacing existing items, mirror\n// the movements within the dropTargets collection\nexport const mutateDropTargetsSwitchDropTargetPosition = (\n dropTargets: MeasuredDropTarget[],\n direction: Direction,\n) => {\n const indexOfDraggedItem = getIndexOfDraggedItem(dropTargets);\n const indexOfTarget =\n direction === \"fwd\" ? indexOfDraggedItem + 1 : indexOfDraggedItem - 1;\n\n if (indexOfTarget < 0 || indexOfTarget >= dropTargets.length) {\n throw Error(\"switchDropTargetPosition index out of range\");\n }\n\n const draggedItem = dropTargets.at(indexOfDraggedItem) as MeasuredDropTarget;\n const targetItem = dropTargets.at(indexOfTarget) as MeasuredDropTarget;\n\n const diff = targetItem.size - draggedItem.size;\n\n if (direction === \"fwd\") {\n const draggedStart = targetItem.start + diff;\n const draggedEnd = targetItem.end;\n\n const newDraggedItem = {\n ...draggedItem,\n start: draggedStart,\n mid: Math.floor(draggedStart + (draggedEnd - draggedStart) / 2),\n end: draggedEnd,\n } as MeasuredDropTarget;\n\n const targetStart = draggedItem.start;\n const targetEnd = draggedItem.end + diff;\n\n const newTargetItem = {\n ...targetItem,\n start: targetStart,\n mid: Math.floor(targetStart + (targetEnd - targetStart) / 2),\n end: targetEnd,\n } as MeasuredDropTarget;\n dropTargets.splice(indexOfDraggedItem, 2, newTargetItem, newDraggedItem);\n } else {\n const draggedStart = targetItem.start;\n const draggedEnd = targetItem.end - diff;\n\n const newDraggedItem = {\n ...draggedItem,\n start: draggedStart,\n mid: Math.floor(draggedStart + (draggedEnd - draggedStart) / 2),\n end: draggedEnd,\n } as MeasuredDropTarget;\n\n const targetStart = draggedItem.start - diff;\n const targetEnd = draggedItem.end;\n\n const newTargetItem = {\n ...targetItem,\n start: targetStart,\n mid: Math.floor(targetStart + (targetEnd - targetStart) / 2),\n end: targetEnd,\n } as MeasuredDropTarget;\n dropTargets.splice(indexOfTarget, 2, newDraggedItem, newTargetItem);\n }\n};\n\nexport const getNextDropTarget = (\n dropTargets: MeasuredDropTarget[],\n pos: number,\n draggedItemSize: number,\n mouseMoveDirection: Direction,\n): MeasuredDropTarget => {\n const len = dropTargets.length;\n const indexOfDraggedItem = getIndexOfDraggedItem(dropTargets);\n // draggedItem will be undefined if we are handling an external drag\n const draggedItem = dropTargets[indexOfDraggedItem];\n if (mouseMoveDirection === \"fwd\") {\n const leadingEdge = Math.round(pos + draggedItemSize);\n for (let index = len - 1; index >= 0; index--) {\n const dropTarget = dropTargets[index];\n if (leadingEdge > dropTarget.mid) {\n if (draggedItem && index < indexOfDraggedItem) {\n return draggedItem;\n } else {\n return dropTarget;\n }\n }\n }\n } else {\n const leadingEdge = Math.round(pos);\n for (let index = 0; index < len; index++) {\n const dropTarget = dropTargets[index];\n if (leadingEdge < dropTarget.mid) {\n if (index > indexOfDraggedItem) {\n return draggedItem;\n } else {\n return dropTarget;\n }\n }\n }\n }\n throw Error(\"no dropTarget identified\");\n};\n\n/**\n * An item within a scrollable container might have a width or height greater than that of\n * the container. If we drag such an item, we don't want the draggable to be larger than\n * the container.\n */\nexport function constrainRect(targetRect: Rect, constraintRect: Rect): Rect {\n const { height, left, top, width } = targetRect;\n const { height: constrainedHeight, width: constrainedWidth } = constraintRect;\n return {\n height: Math.min(height, constrainedHeight),\n left,\n top,\n width: Math.min(width, constrainedWidth),\n };\n}\n\nexport const dropTargetsDebugString = (dropTargets: MeasuredDropTarget[]) =>\n dropTargets\n .map(\n (d, i) =>\n `\\n${d.isDraggedItem ? \"*\" : \" \"}[${i}] width : ${Math.floor(\n d.size,\n )} ${Math.floor(d.start)} - ${Math.floor(d.end)} (mid ${Math.floor(\n d.mid,\n )}) ${d.element?.textContent} `,\n )\n .join(\"\");\n\nexport const getItemParentContainer = (\n container: HTMLElement | null,\n itemQuery: string,\n) => {\n const firstItem = container?.querySelector(\n `${itemQuery}:not([aria-hidden=\"true\"])`,\n );\n if (firstItem) {\n // generally, we expect the immediateParent to be a contentContainer, the\n // parent of that will be the scrollable container. This may or may not be\n // the outer container (likely not)\n return firstItem.parentElement;\n } else {\n return null;\n }\n};\n\nexport const getScrollableContainer = (\n container: HTMLElement | null,\n itemQuery: string,\n) => {\n const immediateParent = getItemParentContainer(container, itemQuery);\n if (immediateParent === container) {\n return container;\n } else {\n return immediateParent?.parentElement as HTMLElement;\n }\n};\n\nexport const isContainerScrollable = (\n scrollableContainer: HTMLElement | null,\n orientation: orientationType,\n) => {\n if (scrollableContainer === null) {\n return false;\n } else {\n const { SCROLL_SIZE, CLIENT_SIZE } = dimensions(orientation);\n const { [SCROLL_SIZE]: scrollSize, [CLIENT_SIZE]: clientSize } =\n scrollableContainer;\n return scrollSize > clientSize;\n }\n};\n"],"names":["start"],"mappings":"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"}
1
+ {"version":3,"file":"drop-target-utils.js","sources":["../../src/drag-drop/drop-target-utils.ts"],"sourcesContent":["import { orientationType } from \"@vuu-ui/vuu-utils\";\nimport { ViewportRange } from \"./dragDropTypes\";\nimport { Direction, Rect } from \"./dragDropTypes\";\n\nconst LEFT_RIGHT = [\"left\", \"right\"];\nconst TOP_BOTTOM = [\"top\", \"bottom\"];\n// duplicated in repsonsive\n\nexport const NOT_OVERFLOWED = \":not(.wrapped)\";\nexport const NOT_HIDDEN = ':not([aria-hidden=\"true\"])';\n\n// TODO figure out which of these attributes we no longer need\nexport type MeasuredDropTarget = {\n /** \n The index position currently occupied by this item. If draggable \n is dropped here, this will be the destination drop position.\n */\n currentIndex: number;\n element: HTMLElement;\n id: string;\n index: number;\n isDraggedItem: boolean;\n isExternal?: boolean;\n isLast?: boolean;\n isOverflowIndicator?: boolean;\n start: number;\n end: number;\n mid: number;\n size: number;\n};\n\nexport type targetType = {\n element: HTMLElement | null;\n index: number;\n isLast?: boolean;\n};\n\n/** clones and removes id */\nexport const cloneElement = <T extends HTMLElement>(element: T): T => {\n const dolly = element.cloneNode(true) as T;\n // TOSO should we care about nested id values - perhaps an additional param, defaulting to false ?\n dolly.removeAttribute(\"id\");\n // Set index to -1 in case a moueMove event as we wait for drop to take effect might set highlighted\n // index to wrong value (see useList) -1 will be ignored;\n dolly.dataset.index = \"-1\";\n return dolly;\n};\n\ntype MousePosKey = keyof Pick<MouseEvent, \"clientX\" | \"clientY\">;\ntype DOMRectKey = keyof Omit<DOMRect, \"toJSON\">;\ntype DOMRectDimensionKey = keyof Pick<DOMRect, \"width\" | \"height\">;\ntype Dimension = keyof Pick<DOMRect, \"width\" | \"height\">;\ntype ElementDimension = keyof Pick<\n HTMLElement,\n | \"scrollHeight\"\n | \"scrollWidth\"\n | \"clientHeight\"\n | \"clientWidth\"\n | \"scrollTop\"\n | \"scrollLeft\"\n>;\n\ntype ElementPosition = \"x\" | \"y\";\n\nexport const measureElementSizeAndPosition = (\n element: HTMLElement,\n dimension: Dimension = \"width\",\n includeAutoMargin = false,\n) => {\n const pos = dimension === \"width\" ? \"left\" : \"top\";\n const { [dimension]: size, [pos]: position } =\n element.getBoundingClientRect();\n const { padEnd = false, padStart = false } = element.dataset;\n const style = getComputedStyle(element);\n const [start, end] = dimension === \"width\" ? LEFT_RIGHT : TOP_BOTTOM;\n const marginStart =\n padStart && !includeAutoMargin\n ? 0\n : parseInt(style.getPropertyValue(`margin-${start}`), 10);\n const marginEnd =\n padEnd && !includeAutoMargin\n ? 0\n : parseInt(style.getPropertyValue(`margin-${end}`), 10);\n\n let minWidth = size;\n const flexShrink = parseInt(style.getPropertyValue(\"flex-shrink\"), 10);\n if (flexShrink > 0) {\n const flexBasis = parseInt(style.getPropertyValue(\"flex-basis\"), 10);\n if (!isNaN(flexBasis) && flexBasis > 0) {\n minWidth = flexBasis;\n }\n }\n return [position, marginStart + minWidth + marginEnd];\n};\n\nconst DIMENSIONS = {\n horizontal: {\n CLIENT_POS: \"clientX\" as MousePosKey,\n CLIENT_SIZE: \"clientWidth\" as ElementDimension,\n CONTRA: \"top\" as DOMRectKey,\n CONTRA_CLIENT_POS: \"clientY\" as MousePosKey,\n CONTRA_END: \"bottom\" as DOMRectDimensionKey,\n CONTRA_POS: \"y\" as ElementPosition,\n DIMENSION: \"width\" as DOMRectDimensionKey,\n END: \"right\" as DOMRectKey,\n POS: \"x\" as ElementPosition,\n SCROLL_POS: \"scrollLeft\" as ElementDimension,\n SCROLL_SIZE: \"scrollWidth\" as ElementDimension,\n START: \"left\" as DOMRectKey,\n },\n vertical: {\n CLIENT_POS: \"clientY\" as MousePosKey,\n CLIENT_SIZE: \"clientHeight\" as ElementDimension,\n CONTRA: \"left\" as DOMRectKey,\n CONTRA_CLIENT_POS: \"clientX\" as MousePosKey,\n CONTRA_END: \"right\" as DOMRectDimensionKey,\n CONTRA_POS: \"x\" as ElementPosition,\n DIMENSION: \"height\" as DOMRectDimensionKey,\n END: \"bottom\" as DOMRectKey,\n POS: \"y\" as ElementPosition,\n SCROLL_POS: \"scrollTop\" as ElementDimension,\n SCROLL_SIZE: \"scrollHeight\" as ElementDimension,\n START: \"top\" as DOMRectKey,\n },\n};\nexport const dimensions = (orientation: orientationType) =>\n DIMENSIONS[orientation];\n\nexport const getItemById = (\n measuredItems: MeasuredDropTarget[],\n id: string,\n) => {\n const result = measuredItems.find((item) => item.id === id);\n if (result) {\n return result;\n }\n // else {\n // throw Error(`measuredItems do not contain an item with id #${id}`);\n // }\n};\n\nexport const removeDraggedItem = (\n measuredItems: MeasuredDropTarget[],\n index: number,\n) => {\n measuredItems.splice(index, 1);\n for (let i = index; i < measuredItems.length; i++) {\n measuredItems[i].currentIndex -= 1;\n }\n};\n\nexport type dropZone = \"start\" | \"end\";\n\nexport const measureDropTargets = (\n container: HTMLElement,\n orientation: orientationType,\n itemQuery?: string,\n viewportRange?: ViewportRange,\n draggedItemId?: string,\n) => {\n const dragThresholds: MeasuredDropTarget[] = [];\n const { DIMENSION } = dimensions(orientation);\n const children = Array.from(\n itemQuery ? container.querySelectorAll(itemQuery) : container.children,\n );\n\n const itemCount = children.length;\n const start =\n typeof viewportRange?.from === \"number\"\n ? viewportRange.atEnd\n ? Math.max(0, viewportRange.from - 1)\n : viewportRange.from\n : 0;\n const end =\n typeof viewportRange?.to === \"number\"\n ? Math.min(viewportRange.to + 2, itemCount - 1)\n : itemCount - 1;\n for (let index = start; index <= end; index++) {\n const element = children[index] as HTMLElement;\n const [start, size] = measureElementSizeAndPosition(element, DIMENSION);\n const isLast = index === itemCount - 1;\n const id = element.id;\n\n dragThresholds.push({\n currentIndex: index,\n id,\n index,\n isDraggedItem: draggedItemId === id,\n isLast,\n isOverflowIndicator: element.dataset.index === \"overflow\",\n element: element as HTMLElement,\n start,\n end: start + size,\n size,\n mid: start + size / 2,\n });\n }\n return dragThresholds;\n};\n\nexport const getIndexOfDraggedItem = (dropTargets: MeasuredDropTarget[]) =>\n dropTargets.findIndex((d) => d.isDraggedItem);\n\n// As the draggedItem is moved, displacing existing items, mirror\n// the movements within the dropTargets collection\nexport const mutateDropTargetsSwitchDropTargetPosition = (\n dropTargets: MeasuredDropTarget[],\n direction: Direction,\n) => {\n const indexOfDraggedItem = getIndexOfDraggedItem(dropTargets);\n const indexOfTarget =\n direction === \"fwd\" ? indexOfDraggedItem + 1 : indexOfDraggedItem - 1;\n\n if (indexOfTarget < 0 || indexOfTarget >= dropTargets.length) {\n throw Error(\"switchDropTargetPosition index out of range\");\n }\n\n const draggedItem = dropTargets.at(indexOfDraggedItem) as MeasuredDropTarget;\n const targetItem = dropTargets.at(indexOfTarget) as MeasuredDropTarget;\n\n const diff = targetItem.size - draggedItem.size;\n\n if (direction === \"fwd\") {\n const draggedStart = targetItem.start + diff;\n const draggedEnd = targetItem.end;\n\n const newDraggedItem = {\n ...draggedItem,\n start: draggedStart,\n mid: Math.floor(draggedStart + (draggedEnd - draggedStart) / 2),\n end: draggedEnd,\n } as MeasuredDropTarget;\n\n const targetStart = draggedItem.start;\n const targetEnd = draggedItem.end + diff;\n\n const newTargetItem = {\n ...targetItem,\n start: targetStart,\n mid: Math.floor(targetStart + (targetEnd - targetStart) / 2),\n end: targetEnd,\n } as MeasuredDropTarget;\n dropTargets.splice(indexOfDraggedItem, 2, newTargetItem, newDraggedItem);\n } else {\n const draggedStart = targetItem.start;\n const draggedEnd = targetItem.end - diff;\n\n const newDraggedItem = {\n ...draggedItem,\n start: draggedStart,\n mid: Math.floor(draggedStart + (draggedEnd - draggedStart) / 2),\n end: draggedEnd,\n } as MeasuredDropTarget;\n\n const targetStart = draggedItem.start - diff;\n const targetEnd = draggedItem.end;\n\n const newTargetItem = {\n ...targetItem,\n start: targetStart,\n mid: Math.floor(targetStart + (targetEnd - targetStart) / 2),\n end: targetEnd,\n } as MeasuredDropTarget;\n dropTargets.splice(indexOfTarget, 2, newDraggedItem, newTargetItem);\n }\n};\n\nexport const getNextDropTarget = (\n dropTargets: MeasuredDropTarget[],\n pos: number,\n draggedItemSize: number,\n mouseMoveDirection: Direction,\n): MeasuredDropTarget => {\n const len = dropTargets.length;\n const indexOfDraggedItem = getIndexOfDraggedItem(dropTargets);\n // draggedItem will be undefined if we are handling an external drag\n const draggedItem = dropTargets[indexOfDraggedItem];\n if (mouseMoveDirection === \"fwd\") {\n const leadingEdge = Math.round(pos + draggedItemSize);\n for (let index = len - 1; index >= 0; index--) {\n const dropTarget = dropTargets[index];\n if (leadingEdge > dropTarget.mid) {\n if (draggedItem && index < indexOfDraggedItem) {\n return draggedItem;\n } else {\n return dropTarget;\n }\n }\n }\n } else {\n const leadingEdge = Math.round(pos);\n for (let index = 0; index < len; index++) {\n const dropTarget = dropTargets[index];\n if (leadingEdge < dropTarget.mid) {\n if (index > indexOfDraggedItem) {\n return draggedItem;\n } else {\n return dropTarget;\n }\n }\n }\n }\n throw Error(\"no dropTarget identified\");\n};\n\n/**\n * An item within a scrollable container might have a width or height greater than that of\n * the container. If we drag such an item, we don't want the draggable to be larger than\n * the container.\n */\nexport function constrainRect(targetRect: Rect, constraintRect: Rect): Rect {\n const { height, left, top, width } = targetRect;\n const { height: constrainedHeight, width: constrainedWidth } = constraintRect;\n return {\n height: Math.min(height, constrainedHeight),\n left,\n top,\n width: Math.min(width, constrainedWidth),\n };\n}\n\nexport const dropTargetsDebugString = (dropTargets: MeasuredDropTarget[]) =>\n dropTargets\n .map(\n (d, i) =>\n `\\n${d.isDraggedItem ? \"*\" : \" \"}[${i}] width : ${Math.floor(\n d.size,\n )} ${Math.floor(d.start)} - ${Math.floor(d.end)} (mid ${Math.floor(\n d.mid,\n )}) ${d.element?.textContent} `,\n )\n .join(\"\");\n\nexport const getItemParentContainer = (\n container: HTMLElement | null,\n itemQuery: string,\n) => {\n const firstItem = container?.querySelector(\n `${itemQuery}:not([aria-hidden=\"true\"])`,\n );\n if (firstItem) {\n // generally, we expect the immediateParent to be a contentContainer, the\n // parent of that will be the scrollable container. This may or may not be\n // the outer container (likely not)\n return firstItem.parentElement;\n } else {\n return null;\n }\n};\n\nexport const getScrollableContainer = (\n container: HTMLElement | null,\n itemQuery: string,\n) => {\n const immediateParent = getItemParentContainer(container, itemQuery);\n if (immediateParent === container) {\n return container;\n } else {\n return immediateParent?.parentElement as HTMLElement;\n }\n};\n\nexport const isContainerScrollable = (\n scrollableContainer: HTMLElement | null,\n orientation: orientationType,\n) => {\n if (scrollableContainer === null) {\n return false;\n } else {\n const { SCROLL_SIZE, CLIENT_SIZE } = dimensions(orientation);\n const { [SCROLL_SIZE]: scrollSize, [CLIENT_SIZE]: clientSize } =\n scrollableContainer;\n return scrollSize > clientSize;\n }\n};\n"],"names":["start"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAutoScroll.js","sources":["../../src/drag-drop/useAutoScroll.ts"],"sourcesContent":["import { RefObject, useCallback, useRef } from \"react\";\nimport { dimensions } from \"./drop-target-utils\";\n\nexport type ScrollStopHandler = (\n scrollDirection: \"fwd\" | \"bwd\",\n scrollPos: number,\n atEnd: boolean\n) => void;\n\nexport const useAutoScroll = ({\n containerRef,\n onScrollingStopped,\n orientation = \"vertical\",\n}: {\n containerRef: RefObject<HTMLElement>;\n onScrollingStopped?: ScrollStopHandler;\n orientation?: \"horizontal\" | \"vertical\";\n}) => {\n const scrollTimer = useRef<number | null>(null);\n const isScrolling = useRef(false);\n const scrollPosRef = useRef(0);\n const lastScrollDirectionRef = useRef<\"fwd\" | \"bwd\">(\"fwd\");\n\n const stopScrolling = useCallback(\n (atEnd = false) => {\n if (scrollTimer.current !== null) {\n clearTimeout(scrollTimer.current);\n scrollTimer.current = null;\n }\n isScrolling.current = false;\n onScrollingStopped?.(\n lastScrollDirectionRef.current,\n scrollPosRef.current,\n atEnd\n );\n },\n [onScrollingStopped]\n );\n\n const startScrolling = useCallback(\n (direction: \"fwd\" | \"bwd\", scrollRate: number, scrollUnit = 100) => {\n const { current: container } = containerRef;\n if (container) {\n const { SCROLL_POS, SCROLL_SIZE, CLIENT_SIZE } =\n dimensions(orientation);\n const {\n [SCROLL_POS]: scrollPos,\n [SCROLL_SIZE]: scrollSize,\n [CLIENT_SIZE]: clientSize,\n } = container;\n const maxScroll =\n direction === \"fwd\" ? scrollSize - clientSize - scrollPos : scrollPos;\n const nextScroll = Math.min(maxScroll, scrollUnit);\n\n if (direction === \"fwd\") {\n lastScrollDirectionRef.current = \"fwd\";\n container[SCROLL_POS as \"scrollTop\" | \"scrollLeft\"] =\n scrollPosRef.current = scrollPos + nextScroll;\n } else {\n lastScrollDirectionRef.current = \"bwd\";\n container[SCROLL_POS as \"scrollTop\" | \"scrollLeft\"] =\n scrollPosRef.current = scrollPos - nextScroll;\n }\n\n if (nextScroll === maxScroll) {\n // delay this to allow any scroll listeners to do their work\n requestAnimationFrame(() => {\n stopScrolling(true);\n });\n } else {\n isScrolling.current = true;\n scrollTimer.current = window.setTimeout(() => {\n startScrolling(direction, scrollRate, scrollUnit);\n }, 100);\n }\n }\n },\n [containerRef, orientation, stopScrolling]\n );\n\n return {\n isScrolling,\n startScrolling,\n stopScrolling,\n };\n};\n"],"names":["useRef","useCallback","dimensions"],"mappings":";;;;;AASO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAc,GAAA,UAAA;AAChB,CAIM,KAAA;AACJ,EAAM,MAAA,WAAA,GAAcA,aAAsB,IAAI,CAAA,CAAA;AAC9C,EAAM,MAAA,WAAA,GAAcA,aAAO,KAAK,CAAA,CAAA;AAChC,EAAM,MAAA,YAAA,GAAeA,aAAO,CAAC,CAAA,CAAA;AAC7B,EAAM,MAAA,sBAAA,GAAyBA,aAAsB,KAAK,CAAA,CAAA;AAE1D,EAAA,MAAM,aAAgB,GAAAC,iBAAA;AAAA,IACpB,CAAC,QAAQ,KAAU,KAAA;AACjB,MAAI,IAAA,WAAA,CAAY,YAAY,IAAM,EAAA;AAChC,QAAA,YAAA,CAAa,YAAY,OAAO,CAAA,CAAA;AAChC,QAAA,WAAA,CAAY,OAAU,GAAA,IAAA,CAAA;AAAA,OACxB;AACA,MAAA,WAAA,CAAY,OAAU,GAAA,KAAA,CAAA;AACtB,MAAA,kBAAA;AAAA,QACE,sBAAuB,CAAA,OAAA;AAAA,QACvB,YAAa,CAAA,OAAA;AAAA,QACb,KAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,IACA,CAAC,kBAAkB,CAAA;AAAA,GACrB,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAAA,iBAAA;AAAA,IACrB,CAAC,SAAA,EAA0B,UAAoB,EAAA,UAAA,GAAa,GAAQ,KAAA;AAClE,MAAM,MAAA,EAAE,OAAS,EAAA,SAAA,EAAc,GAAA,YAAA,CAAA;AAC/B,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,MAAM,EAAE,UAAY,EAAA,WAAA,EAAa,WAAY,EAAA,GAC3CC,2BAAW,WAAW,CAAA,CAAA;AACxB,QAAM,MAAA;AAAA,UACJ,CAAC,UAAU,GAAG,SAAA;AAAA,UACd,CAAC,WAAW,GAAG,UAAA;AAAA,UACf,CAAC,WAAW,GAAG,UAAA;AAAA,SACb,GAAA,SAAA,CAAA;AACJ,QAAA,MAAM,SACJ,GAAA,SAAA,KAAc,KAAQ,GAAA,UAAA,GAAa,aAAa,SAAY,GAAA,SAAA,CAAA;AAC9D,QAAA,MAAM,UAAa,GAAA,IAAA,CAAK,GAAI,CAAA,SAAA,EAAW,UAAU,CAAA,CAAA;AAEjD,QAAA,IAAI,cAAc,KAAO,EAAA;AACvB,UAAA,sBAAA,CAAuB,OAAU,GAAA,KAAA,CAAA;AACjC,UAAA,SAAA,CAAU,UAAwC,CAAA,GAChD,YAAa,CAAA,OAAA,GAAU,SAAY,GAAA,UAAA,CAAA;AAAA,SAChC,MAAA;AACL,UAAA,sBAAA,CAAuB,OAAU,GAAA,KAAA,CAAA;AACjC,UAAA,SAAA,CAAU,UAAwC,CAAA,GAChD,YAAa,CAAA,OAAA,GAAU,SAAY,GAAA,UAAA,CAAA;AAAA,SACvC;AAEA,QAAA,IAAI,eAAe,SAAW,EAAA;AAE5B,UAAA,qBAAA,CAAsB,MAAM;AAC1B,YAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAAA,WACnB,CAAA,CAAA;AAAA,SACI,MAAA;AACL,UAAA,WAAA,CAAY,OAAU,GAAA,IAAA,CAAA;AACtB,UAAY,WAAA,CAAA,OAAA,GAAU,MAAO,CAAA,UAAA,CAAW,MAAM;AAC5C,YAAe,cAAA,CAAA,SAAA,EAAW,YAAY,UAAU,CAAA,CAAA;AAAA,aAC/C,GAAG,CAAA,CAAA;AAAA,SACR;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,YAAc,EAAA,WAAA,EAAa,aAAa,CAAA;AAAA,GAC3C,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"useAutoScroll.js","sources":["../../src/drag-drop/useAutoScroll.ts"],"sourcesContent":["import { RefObject, useCallback, useRef } from \"react\";\nimport { dimensions } from \"./drop-target-utils\";\n\nexport type ScrollStopHandler = (\n scrollDirection: \"fwd\" | \"bwd\",\n scrollPos: number,\n atEnd: boolean\n) => void;\n\nexport const useAutoScroll = ({\n containerRef,\n onScrollingStopped,\n orientation = \"vertical\",\n}: {\n containerRef: RefObject<HTMLElement>;\n onScrollingStopped?: ScrollStopHandler;\n orientation?: \"horizontal\" | \"vertical\";\n}) => {\n const scrollTimer = useRef<number | null>(null);\n const isScrolling = useRef(false);\n const scrollPosRef = useRef(0);\n const lastScrollDirectionRef = useRef<\"fwd\" | \"bwd\">(\"fwd\");\n\n const stopScrolling = useCallback(\n (atEnd = false) => {\n if (scrollTimer.current !== null) {\n clearTimeout(scrollTimer.current);\n scrollTimer.current = null;\n }\n isScrolling.current = false;\n onScrollingStopped?.(\n lastScrollDirectionRef.current,\n scrollPosRef.current,\n atEnd\n );\n },\n [onScrollingStopped]\n );\n\n const startScrolling = useCallback(\n (direction: \"fwd\" | \"bwd\", scrollRate: number, scrollUnit = 100) => {\n const { current: container } = containerRef;\n if (container) {\n const { SCROLL_POS, SCROLL_SIZE, CLIENT_SIZE } =\n dimensions(orientation);\n const {\n [SCROLL_POS]: scrollPos,\n [SCROLL_SIZE]: scrollSize,\n [CLIENT_SIZE]: clientSize,\n } = container;\n const maxScroll =\n direction === \"fwd\" ? scrollSize - clientSize - scrollPos : scrollPos;\n const nextScroll = Math.min(maxScroll, scrollUnit);\n\n if (direction === \"fwd\") {\n lastScrollDirectionRef.current = \"fwd\";\n container[SCROLL_POS as \"scrollTop\" | \"scrollLeft\"] =\n scrollPosRef.current = scrollPos + nextScroll;\n } else {\n lastScrollDirectionRef.current = \"bwd\";\n container[SCROLL_POS as \"scrollTop\" | \"scrollLeft\"] =\n scrollPosRef.current = scrollPos - nextScroll;\n }\n\n if (nextScroll === maxScroll) {\n // delay this to allow any scroll listeners to do their work\n requestAnimationFrame(() => {\n stopScrolling(true);\n });\n } else {\n isScrolling.current = true;\n scrollTimer.current = window.setTimeout(() => {\n startScrolling(direction, scrollRate, scrollUnit);\n }, 100);\n }\n }\n },\n [containerRef, orientation, stopScrolling]\n );\n\n return {\n isScrolling,\n startScrolling,\n stopScrolling,\n };\n};\n"],"names":["useRef","useCallback","dimensions"],"mappings":";;;;;AASO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAc,GAAA;AAChB,CAIM,KAAA;AACJ,EAAM,MAAA,WAAA,GAAcA,aAAsB,IAAI,CAAA;AAC9C,EAAM,MAAA,WAAA,GAAcA,aAAO,KAAK,CAAA;AAChC,EAAM,MAAA,YAAA,GAAeA,aAAO,CAAC,CAAA;AAC7B,EAAM,MAAA,sBAAA,GAAyBA,aAAsB,KAAK,CAAA;AAE1D,EAAA,MAAM,aAAgB,GAAAC,iBAAA;AAAA,IACpB,CAAC,QAAQ,KAAU,KAAA;AACjB,MAAI,IAAA,WAAA,CAAY,YAAY,IAAM,EAAA;AAChC,QAAA,YAAA,CAAa,YAAY,OAAO,CAAA;AAChC,QAAA,WAAA,CAAY,OAAU,GAAA,IAAA;AAAA;AAExB,MAAA,WAAA,CAAY,OAAU,GAAA,KAAA;AACtB,MAAA,kBAAA;AAAA,QACE,sBAAuB,CAAA,OAAA;AAAA,QACvB,YAAa,CAAA,OAAA;AAAA,QACb;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,kBAAkB;AAAA,GACrB;AAEA,EAAA,MAAM,cAAiB,GAAAA,iBAAA;AAAA,IACrB,CAAC,SAAA,EAA0B,UAAoB,EAAA,UAAA,GAAa,GAAQ,KAAA;AAClE,MAAM,MAAA,EAAE,OAAS,EAAA,SAAA,EAAc,GAAA,YAAA;AAC/B,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,MAAM,EAAE,UAAY,EAAA,WAAA,EAAa,WAAY,EAAA,GAC3CC,2BAAW,WAAW,CAAA;AACxB,QAAM,MAAA;AAAA,UACJ,CAAC,UAAU,GAAG,SAAA;AAAA,UACd,CAAC,WAAW,GAAG,UAAA;AAAA,UACf,CAAC,WAAW,GAAG;AAAA,SACb,GAAA,SAAA;AACJ,QAAA,MAAM,SACJ,GAAA,SAAA,KAAc,KAAQ,GAAA,UAAA,GAAa,aAAa,SAAY,GAAA,SAAA;AAC9D,QAAA,MAAM,UAAa,GAAA,IAAA,CAAK,GAAI,CAAA,SAAA,EAAW,UAAU,CAAA;AAEjD,QAAA,IAAI,cAAc,KAAO,EAAA;AACvB,UAAA,sBAAA,CAAuB,OAAU,GAAA,KAAA;AACjC,UAAA,SAAA,CAAU,UAAwC,CAAA,GAChD,YAAa,CAAA,OAAA,GAAU,SAAY,GAAA,UAAA;AAAA,SAChC,MAAA;AACL,UAAA,sBAAA,CAAuB,OAAU,GAAA,KAAA;AACjC,UAAA,SAAA,CAAU,UAAwC,CAAA,GAChD,YAAa,CAAA,OAAA,GAAU,SAAY,GAAA,UAAA;AAAA;AAGvC,QAAA,IAAI,eAAe,SAAW,EAAA;AAE5B,UAAA,qBAAA,CAAsB,MAAM;AAC1B,YAAA,aAAA,CAAc,IAAI,CAAA;AAAA,WACnB,CAAA;AAAA,SACI,MAAA;AACL,UAAA,WAAA,CAAY,OAAU,GAAA,IAAA;AACtB,UAAY,WAAA,CAAA,OAAA,GAAU,MAAO,CAAA,UAAA,CAAW,MAAM;AAC5C,YAAe,cAAA,CAAA,SAAA,EAAW,YAAY,UAAU,CAAA;AAAA,aAC/C,GAAG,CAAA;AAAA;AACR;AACF,KACF;AAAA,IACA,CAAC,YAAc,EAAA,WAAA,EAAa,aAAa;AAAA,GAC3C;AAEA,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDragDisplacers.js","sources":["../../src/drag-drop/useDragDisplacers.ts"],"sourcesContent":["import type { orientationType } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { Direction } from \"./dragDropTypes\";\nimport { createDragSpacer as createDragDisplacer } from \"./Draggable\";\nimport {\n MeasuredDropTarget,\n mutateDropTargetsSwitchDropTargetPosition,\n} from \"./drop-target-utils\";\n\nexport type DragDisplacersHookResult = {\n displaceItem: (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition?: boolean,\n direction?: Direction | \"static\",\n orientation?: \"horizontal\" | \"vertical\",\n ) => number;\n displaceLastItem: (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition?: boolean,\n direction?: Direction | \"static\",\n orientation?: \"horizontal\" | \"vertical\",\n ) => number;\n clearSpacers: (useAnimation?: boolean) => void;\n /** Insert the sized spacer at start or end of collection */\n setTerminalSpacer: (\n container: HTMLElement,\n position: \"start\" | \"end\",\n size: number,\n ) => void;\n};\n\nexport type DragDisplacersHook = (\n orientation: orientationType,\n) => DragDisplacersHookResult;\n/**\n * Manage a pair of displacer elements to smoothly display a moving gap between\n * list items of any kind. Designed to be used in a drag drop operation. The 'static'\n * direction option should be used at drag start or following scroll.\n */\nexport const useDragDisplacers: DragDisplacersHook = (\n orientation = \"horizontal\",\n) => {\n const animationFrame = useRef(0);\n const transitioning = useRef(false);\n\n const spacers = useMemo(\n // We only need to listen for transition end on one of the spacers\n () => [createDragDisplacer(transitioning), createDragDisplacer()],\n [],\n );\n\n const animateTransition = useCallback(\n (size: number, propertyName = \"width\") => {\n const [spacer1, spacer2] = spacers;\n animationFrame.current = requestAnimationFrame(() => {\n transitioning.current = true;\n spacer1.style.cssText = `${propertyName}: 0px`;\n spacer2.style.cssText = `${propertyName}: ${size}px`;\n spacers[0] = spacer2;\n spacers[1] = spacer1;\n });\n },\n [spacers],\n );\n\n const clearSpacers = useCallback(\n (useTransition = false) => {\n if (useTransition === true) {\n const [spacer] = spacers;\n const cleanup = () => {\n spacer.removeEventListener(\"transitionend\", cleanup);\n clearSpacers();\n };\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n spacer.addEventListener(\"transitionend\", cleanup);\n animateTransition(0, propertyName);\n } else {\n spacers.forEach((spacer) => spacer.remove());\n }\n },\n [animateTransition, orientation, spacers],\n );\n\n const setTerminalSpacer = useCallback(\n (container: HTMLElement, position: \"start\" | \"end\", size: number) => {\n clearSpacers();\n\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [spacer] = spacers;\n spacer.style.cssText = `${propertyName}: ${size}px`;\n\n if (position === \"start\") {\n container.firstChild?.before(spacer);\n } else {\n container.lastChild?.after(spacer);\n }\n },\n [clearSpacers, orientation, spacers],\n );\n\n const cancelAnyPendingAnimation = useCallback(() => {\n if (animationFrame.current) {\n cancelAnimationFrame(animationFrame.current);\n animationFrame.current = 0;\n }\n }, []);\n\n const displaceItem = useCallback(\n (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition = false,\n direction: Direction | \"static\" = \"static\",\n ): number => {\n if (dropTarget) {\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [spacer1, spacer2] = spacers;\n cancelAnyPendingAnimation();\n if (useTransition) {\n if (transitioning.current) {\n clearSpacers();\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n spacer2.style.cssText = `${propertyName}: 0px`;\n if (direction === \"fwd\") {\n dropTarget.element.before(spacer1);\n dropTarget.element.after(spacer2);\n } else {\n dropTarget.element.after(spacer1);\n dropTarget.element.before(spacer2);\n }\n } else {\n if (direction === \"fwd\") {\n dropTarget.element.after(spacer2);\n } else {\n dropTarget.element.before(spacer2);\n }\n }\n animateTransition(size, propertyName);\n } else if (direction === \"static\") {\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n dropTarget.element.before(spacer1);\n } else {\n throw Error(\n \"useDragDisplacers currently only supports noTransition for static displacement\",\n );\n }\n if (direction !== \"static\") {\n mutateDropTargetsSwitchDropTargetPosition(dropTargets, direction);\n }\n return direction === \"bwd\" ? dropTarget.index : dropTarget.index + 1;\n }\n return -1;\n },\n [\n animateTransition,\n cancelAnyPendingAnimation,\n clearSpacers,\n orientation,\n spacers,\n ],\n );\n const displaceLastItem = useCallback(\n (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition = false,\n direction: Direction | \"static\" = \"static\",\n ): number => {\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [spacer1, spacer2] = spacers;\n\n cancelAnyPendingAnimation();\n\n if (useTransition) {\n if (transitioning.current) {\n clearSpacers();\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n spacer2.style.cssText = `${propertyName}: 0px`;\n dropTarget.element.before(spacer1);\n dropTarget.element.after(spacer2);\n } else {\n if (direction === \"fwd\") {\n dropTarget.element.after(spacer2);\n } else {\n dropTarget.element.before(spacer2);\n }\n }\n animateTransition(size, propertyName);\n } else {\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n dropTarget.element.after(spacer1);\n }\n\n if (direction !== \"static\") {\n mutateDropTargetsSwitchDropTargetPosition(dropTargets, direction);\n }\n\n return dropTarget.index;\n },\n [\n animateTransition,\n cancelAnyPendingAnimation,\n clearSpacers,\n orientation,\n spacers,\n ],\n );\n\n return {\n displaceItem,\n displaceLastItem,\n clearSpacers,\n setTerminalSpacer,\n };\n};\n"],"names":["useRef","useMemo","createDragDisplacer","useCallback","mutateDropTargetsSwitchDropTargetPosition"],"mappings":";;;;;;AA2Ca,MAAA,iBAAA,GAAwC,CACnD,WAAA,GAAc,YACX,KAAA;AACH,EAAM,MAAA,cAAA,GAAiBA,aAAO,CAAC,CAAA,CAAA;AAC/B,EAAM,MAAA,aAAA,GAAgBA,aAAO,KAAK,CAAA,CAAA;AAElC,EAAA,MAAM,OAAU,GAAAC,aAAA;AAAA;AAAA,IAEd,MAAM,CAACC,0BAAA,CAAoB,aAAa,CAAA,EAAGA,4BAAqB,CAAA;AAAA,IAChE,EAAC;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,iBAAoB,GAAAC,iBAAA;AAAA,IACxB,CAAC,IAAc,EAAA,YAAA,GAAe,OAAY,KAAA;AACxC,MAAM,MAAA,CAAC,OAAS,EAAA,OAAO,CAAI,GAAA,OAAA,CAAA;AAC3B,MAAe,cAAA,CAAA,OAAA,GAAU,sBAAsB,MAAM;AACnD,QAAA,aAAA,CAAc,OAAU,GAAA,IAAA,CAAA;AACxB,QAAQ,OAAA,CAAA,KAAA,CAAM,OAAU,GAAA,CAAA,EAAG,YAAY,CAAA,KAAA,CAAA,CAAA;AACvC,QAAA,OAAA,CAAQ,KAAM,CAAA,OAAA,GAAU,CAAG,EAAA,YAAY,KAAK,IAAI,CAAA,EAAA,CAAA,CAAA;AAChD,QAAA,OAAA,CAAQ,CAAC,CAAI,GAAA,OAAA,CAAA;AACb,QAAA,OAAA,CAAQ,CAAC,CAAI,GAAA,OAAA,CAAA;AAAA,OACd,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,gBAAgB,KAAU,KAAA;AACzB,MAAA,IAAI,kBAAkB,IAAM,EAAA;AAC1B,QAAM,MAAA,CAAC,MAAM,CAAI,GAAA,OAAA,CAAA;AACjB,QAAA,MAAM,UAAU,MAAM;AACpB,UAAO,MAAA,CAAA,mBAAA,CAAoB,iBAAiB,OAAO,CAAA,CAAA;AACnD,UAAa,YAAA,EAAA,CAAA;AAAA,SACf,CAAA;AACA,QAAM,MAAA,YAAA,GAAe,WAAgB,KAAA,YAAA,GAAe,OAAU,GAAA,QAAA,CAAA;AAC9D,QAAO,MAAA,CAAA,gBAAA,CAAiB,iBAAiB,OAAO,CAAA,CAAA;AAChD,QAAA,iBAAA,CAAkB,GAAG,YAAY,CAAA,CAAA;AAAA,OAC5B,MAAA;AACL,QAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,MAAW,KAAA,MAAA,CAAO,QAAQ,CAAA,CAAA;AAAA,OAC7C;AAAA,KACF;AAAA,IACA,CAAC,iBAAmB,EAAA,WAAA,EAAa,OAAO,CAAA;AAAA,GAC1C,CAAA;AAEA,EAAA,MAAM,iBAAoB,GAAAA,iBAAA;AAAA,IACxB,CAAC,SAAwB,EAAA,QAAA,EAA2B,IAAiB,KAAA;AACnE,MAAa,YAAA,EAAA,CAAA;AAEb,MAAM,MAAA,YAAA,GAAe,WAAgB,KAAA,YAAA,GAAe,OAAU,GAAA,QAAA,CAAA;AAC9D,MAAM,MAAA,CAAC,MAAM,CAAI,GAAA,OAAA,CAAA;AACjB,MAAA,MAAA,CAAO,KAAM,CAAA,OAAA,GAAU,CAAG,EAAA,YAAY,KAAK,IAAI,CAAA,EAAA,CAAA,CAAA;AAE/C,MAAA,IAAI,aAAa,OAAS,EAAA;AACxB,QAAU,SAAA,CAAA,UAAA,EAAY,OAAO,MAAM,CAAA,CAAA;AAAA,OAC9B,MAAA;AACL,QAAU,SAAA,CAAA,SAAA,EAAW,MAAM,MAAM,CAAA,CAAA;AAAA,OACnC;AAAA,KACF;AAAA,IACA,CAAC,YAAc,EAAA,WAAA,EAAa,OAAO,CAAA;AAAA,GACrC,CAAA;AAEA,EAAM,MAAA,yBAAA,GAA4BA,kBAAY,MAAM;AAClD,IAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,MAAA,oBAAA,CAAqB,eAAe,OAAO,CAAA,CAAA;AAC3C,MAAA,cAAA,CAAe,OAAU,GAAA,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF,EAAG,EAAE,CAAA,CAAA;AAEL,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CACE,WACA,EAAA,UAAA,EACA,MACA,aAAgB,GAAA,KAAA,EAChB,YAAkC,QACvB,KAAA;AACX,MAAA,IAAI,UAAY,EAAA;AACd,QAAM,MAAA,YAAA,GAAe,WAAgB,KAAA,YAAA,GAAe,OAAU,GAAA,QAAA,CAAA;AAC9D,QAAM,MAAA,CAAC,OAAS,EAAA,OAAO,CAAI,GAAA,OAAA,CAAA;AAC3B,QAA0B,yBAAA,EAAA,CAAA;AAC1B,QAAA,IAAI,aAAe,EAAA;AACjB,UAAA,IAAI,cAAc,OAAS,EAAA;AACzB,YAAa,YAAA,EAAA,CAAA;AACb,YAAA,OAAA,CAAQ,KAAM,CAAA,OAAA,GAAU,CAAG,EAAA,YAAY,KAAK,IAAI,CAAA,EAAA,CAAA,CAAA;AAChD,YAAQ,OAAA,CAAA,KAAA,CAAM,OAAU,GAAA,CAAA,EAAG,YAAY,CAAA,KAAA,CAAA,CAAA;AACvC,YAAA,IAAI,cAAc,KAAO,EAAA;AACvB,cAAW,UAAA,CAAA,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAA;AACjC,cAAW,UAAA,CAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAA;AAAA,aAC3B,MAAA;AACL,cAAW,UAAA,CAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAA;AAChC,cAAW,UAAA,CAAA,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAA;AAAA,aACnC;AAAA,WACK,MAAA;AACL,YAAA,IAAI,cAAc,KAAO,EAAA;AACvB,cAAW,UAAA,CAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAA;AAAA,aAC3B,MAAA;AACL,cAAW,UAAA,CAAA,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAA;AAAA,aACnC;AAAA,WACF;AACA,UAAA,iBAAA,CAAkB,MAAM,YAAY,CAAA,CAAA;AAAA,SACtC,MAAA,IAAW,cAAc,QAAU,EAAA;AACjC,UAAA,OAAA,CAAQ,KAAM,CAAA,OAAA,GAAU,CAAG,EAAA,YAAY,KAAK,IAAI,CAAA,EAAA,CAAA,CAAA;AAChD,UAAW,UAAA,CAAA,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAA;AAAA,SAC5B,MAAA;AACL,UAAM,MAAA,KAAA;AAAA,YACJ,gFAAA;AAAA,WACF,CAAA;AAAA,SACF;AACA,QAAA,IAAI,cAAc,QAAU,EAAA;AAC1B,UAAAC,yDAAA,CAA0C,aAAa,SAAS,CAAA,CAAA;AAAA,SAClE;AACA,QAAA,OAAO,SAAc,KAAA,KAAA,GAAQ,UAAW,CAAA,KAAA,GAAQ,WAAW,KAAQ,GAAA,CAAA,CAAA;AAAA,OACrE;AACA,MAAO,OAAA,CAAA,CAAA,CAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,iBAAA;AAAA,MACA,yBAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA,KACF;AAAA,GACF,CAAA;AACA,EAAA,MAAM,gBAAmB,GAAAD,iBAAA;AAAA,IACvB,CACE,WACA,EAAA,UAAA,EACA,MACA,aAAgB,GAAA,KAAA,EAChB,YAAkC,QACvB,KAAA;AACX,MAAM,MAAA,YAAA,GAAe,WAAgB,KAAA,YAAA,GAAe,OAAU,GAAA,QAAA,CAAA;AAC9D,MAAM,MAAA,CAAC,OAAS,EAAA,OAAO,CAAI,GAAA,OAAA,CAAA;AAE3B,MAA0B,yBAAA,EAAA,CAAA;AAE1B,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,IAAI,cAAc,OAAS,EAAA;AACzB,UAAa,YAAA,EAAA,CAAA;AACb,UAAA,OAAA,CAAQ,KAAM,CAAA,OAAA,GAAU,CAAG,EAAA,YAAY,KAAK,IAAI,CAAA,EAAA,CAAA,CAAA;AAChD,UAAQ,OAAA,CAAA,KAAA,CAAM,OAAU,GAAA,CAAA,EAAG,YAAY,CAAA,KAAA,CAAA,CAAA;AACvC,UAAW,UAAA,CAAA,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAA;AACjC,UAAW,UAAA,CAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAA;AAAA,SAC3B,MAAA;AACL,UAAA,IAAI,cAAc,KAAO,EAAA;AACvB,YAAW,UAAA,CAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAA;AAAA,WAC3B,MAAA;AACL,YAAW,UAAA,CAAA,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAA;AAAA,WACnC;AAAA,SACF;AACA,QAAA,iBAAA,CAAkB,MAAM,YAAY,CAAA,CAAA;AAAA,OAC/B,MAAA;AACL,QAAA,OAAA,CAAQ,KAAM,CAAA,OAAA,GAAU,CAAG,EAAA,YAAY,KAAK,IAAI,CAAA,EAAA,CAAA,CAAA;AAChD,QAAW,UAAA,CAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAA;AAAA,OAClC;AAEA,MAAA,IAAI,cAAc,QAAU,EAAA;AAC1B,QAAAC,yDAAA,CAA0C,aAAa,SAAS,CAAA,CAAA;AAAA,OAClE;AAEA,MAAA,OAAO,UAAW,CAAA,KAAA,CAAA;AAAA,KACpB;AAAA,IACA;AAAA,MACE,iBAAA;AAAA,MACA,yBAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"useDragDisplacers.js","sources":["../../src/drag-drop/useDragDisplacers.ts"],"sourcesContent":["import type { orientationType } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { Direction } from \"./dragDropTypes\";\nimport { createDragSpacer as createDragDisplacer } from \"./Draggable\";\nimport {\n MeasuredDropTarget,\n mutateDropTargetsSwitchDropTargetPosition,\n} from \"./drop-target-utils\";\n\nexport type DragDisplacersHookResult = {\n displaceItem: (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition?: boolean,\n direction?: Direction | \"static\",\n orientation?: \"horizontal\" | \"vertical\",\n ) => number;\n displaceLastItem: (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition?: boolean,\n direction?: Direction | \"static\",\n orientation?: \"horizontal\" | \"vertical\",\n ) => number;\n clearSpacers: (useAnimation?: boolean) => void;\n /** Insert the sized spacer at start or end of collection */\n setTerminalSpacer: (\n container: HTMLElement,\n position: \"start\" | \"end\",\n size: number,\n ) => void;\n};\n\nexport type DragDisplacersHook = (\n orientation: orientationType,\n) => DragDisplacersHookResult;\n/**\n * Manage a pair of displacer elements to smoothly display a moving gap between\n * list items of any kind. Designed to be used in a drag drop operation. The 'static'\n * direction option should be used at drag start or following scroll.\n */\nexport const useDragDisplacers: DragDisplacersHook = (\n orientation = \"horizontal\",\n) => {\n const animationFrame = useRef(0);\n const transitioning = useRef(false);\n\n const spacers = useMemo(\n // We only need to listen for transition end on one of the spacers\n () => [createDragDisplacer(transitioning), createDragDisplacer()],\n [],\n );\n\n const animateTransition = useCallback(\n (size: number, propertyName = \"width\") => {\n const [spacer1, spacer2] = spacers;\n animationFrame.current = requestAnimationFrame(() => {\n transitioning.current = true;\n spacer1.style.cssText = `${propertyName}: 0px`;\n spacer2.style.cssText = `${propertyName}: ${size}px`;\n spacers[0] = spacer2;\n spacers[1] = spacer1;\n });\n },\n [spacers],\n );\n\n const clearSpacers = useCallback(\n (useTransition = false) => {\n if (useTransition === true) {\n const [spacer] = spacers;\n const cleanup = () => {\n spacer.removeEventListener(\"transitionend\", cleanup);\n clearSpacers();\n };\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n spacer.addEventListener(\"transitionend\", cleanup);\n animateTransition(0, propertyName);\n } else {\n spacers.forEach((spacer) => spacer.remove());\n }\n },\n [animateTransition, orientation, spacers],\n );\n\n const setTerminalSpacer = useCallback(\n (container: HTMLElement, position: \"start\" | \"end\", size: number) => {\n clearSpacers();\n\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [spacer] = spacers;\n spacer.style.cssText = `${propertyName}: ${size}px`;\n\n if (position === \"start\") {\n container.firstChild?.before(spacer);\n } else {\n container.lastChild?.after(spacer);\n }\n },\n [clearSpacers, orientation, spacers],\n );\n\n const cancelAnyPendingAnimation = useCallback(() => {\n if (animationFrame.current) {\n cancelAnimationFrame(animationFrame.current);\n animationFrame.current = 0;\n }\n }, []);\n\n const displaceItem = useCallback(\n (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition = false,\n direction: Direction | \"static\" = \"static\",\n ): number => {\n if (dropTarget) {\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [spacer1, spacer2] = spacers;\n cancelAnyPendingAnimation();\n if (useTransition) {\n if (transitioning.current) {\n clearSpacers();\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n spacer2.style.cssText = `${propertyName}: 0px`;\n if (direction === \"fwd\") {\n dropTarget.element.before(spacer1);\n dropTarget.element.after(spacer2);\n } else {\n dropTarget.element.after(spacer1);\n dropTarget.element.before(spacer2);\n }\n } else {\n if (direction === \"fwd\") {\n dropTarget.element.after(spacer2);\n } else {\n dropTarget.element.before(spacer2);\n }\n }\n animateTransition(size, propertyName);\n } else if (direction === \"static\") {\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n dropTarget.element.before(spacer1);\n } else {\n throw Error(\n \"useDragDisplacers currently only supports noTransition for static displacement\",\n );\n }\n if (direction !== \"static\") {\n mutateDropTargetsSwitchDropTargetPosition(dropTargets, direction);\n }\n return direction === \"bwd\" ? dropTarget.index : dropTarget.index + 1;\n }\n return -1;\n },\n [\n animateTransition,\n cancelAnyPendingAnimation,\n clearSpacers,\n orientation,\n spacers,\n ],\n );\n const displaceLastItem = useCallback(\n (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition = false,\n direction: Direction | \"static\" = \"static\",\n ): number => {\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [spacer1, spacer2] = spacers;\n\n cancelAnyPendingAnimation();\n\n if (useTransition) {\n if (transitioning.current) {\n clearSpacers();\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n spacer2.style.cssText = `${propertyName}: 0px`;\n dropTarget.element.before(spacer1);\n dropTarget.element.after(spacer2);\n } else {\n if (direction === \"fwd\") {\n dropTarget.element.after(spacer2);\n } else {\n dropTarget.element.before(spacer2);\n }\n }\n animateTransition(size, propertyName);\n } else {\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n dropTarget.element.after(spacer1);\n }\n\n if (direction !== \"static\") {\n mutateDropTargetsSwitchDropTargetPosition(dropTargets, direction);\n }\n\n return dropTarget.index;\n },\n [\n animateTransition,\n cancelAnyPendingAnimation,\n clearSpacers,\n orientation,\n spacers,\n ],\n );\n\n return {\n displaceItem,\n displaceLastItem,\n clearSpacers,\n setTerminalSpacer,\n };\n};\n"],"names":["useRef","useMemo","createDragDisplacer","useCallback","mutateDropTargetsSwitchDropTargetPosition"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDragDrop.js","sources":["../../src/drag-drop/useDragDrop.tsx"],"sourcesContent":["import { dispatchCustomEvent } from \"@vuu-ui/vuu-utils\";\nimport {\n MouseEventHandler,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useDragDropProvider } from \"./DragDropProvider\";\nimport { DragDropState } from \"./DragDropState\";\nimport {\n DragDropHook,\n DropHandler,\n InternalDragDropProps,\n InternalDragHookResult,\n MouseOffset,\n MousePosition,\n} from \"./dragDropTypes\";\nimport { Draggable } from \"./Draggable\";\nimport {\n cloneElement,\n constrainRect,\n dimensions,\n getScrollableContainer,\n isContainerScrollable,\n NOT_OVERFLOWED,\n} from \"./drop-target-utils\";\nimport { ScrollStopHandler, useAutoScroll } from \"./useAutoScroll\";\nimport { useDragDropCopy, NULL_DROP_OPTIONS } from \"./useDragDropCopy\";\nimport { useDragDropIndicator } from \"./useDragDropIndicator\";\nimport { useDragDropNaturalMovement } from \"./useDragDropNaturalMovement\";\nimport { ResumeDragHandler } from \"./useGlobalDragDrop\";\nimport { isOverflowElement } from \"../utils\";\n\nconst NULL_DRAG_DROP_RESULT = {\n beginDrag: () => undefined,\n drag: () => undefined,\n draggableRef: { current: null },\n drop: () => NULL_DROP_OPTIONS,\n isDragging: false,\n isScrolling: false,\n handleScrollStart: () => undefined,\n handleScrollStop: () => undefined,\n revealOverflowedItems: false,\n};\n\ntype DraggableStatus = {\n draggable?: JSX.Element;\n draggedItemIndex: number;\n isDragging: boolean;\n};\n\ntype DragBoundary = {\n start: number;\n end: number;\n contraStart: number;\n contraEnd: number;\n};\n\nconst UNBOUNDED: DragBoundary = {\n start: 0,\n end: 1000,\n contraStart: 0,\n contraEnd: 1000,\n};\n\ntype InternalHook = (props: InternalDragDropProps) => InternalDragHookResult;\nconst noDragDrop: InternalHook = () => NULL_DRAG_DROP_RESULT;\nconst dragThreshold = 3;\n\nconst getDraggableElement = (\n el: EventTarget | null,\n query: string,\n): HTMLElement => (el as HTMLElement)?.closest(query) as HTMLElement;\n\nconst getLastElement = (\n container: HTMLElement,\n itemQuery: string,\n): [HTMLElement, boolean] => {\n const fullItemQuery = `:is(${itemQuery}${NOT_OVERFLOWED},.vuuOverflowContainer-OverflowIndicator)`;\n const childElements = Array.from(container.querySelectorAll(fullItemQuery));\n const lastElement = childElements.pop() as HTMLElement;\n return [lastElement, isOverflowElement(lastElement)];\n};\n\nexport const useDragDrop: DragDropHook = ({\n allowDragDrop,\n containerRef,\n draggableClassName,\n getDragPayload,\n id,\n itemQuery = \"*\",\n onDragStart,\n onDrop,\n onDropSettle,\n orientation,\n scrollingContainerRef,\n ...dragDropProps\n}) => {\n const dragBoundaries = useRef<DragBoundary>({\n start: 0,\n end: 0,\n contraStart: 0,\n contraEnd: 0,\n });\n const [draggableStatus, setDraggableStatus] = useState<DraggableStatus>({\n draggable: undefined,\n draggedItemIndex: -1,\n isDragging: false,\n });\n\n const dragDropStateRef = useRef<DragDropState | null>(null);\n const mouseDownTimer = useRef<number | null>(null);\n /** do we actually have scrollable content */\n const isScrollableRef = useRef(false);\n\n /** save this on mousedown. We cannot rely on the target of mousemove being same element*/\n const mousedownElementRef = useRef<HTMLElement | null>(null);\n\n /** current mouse position */\n const mousePosRef = useRef<MouseOffset>({ x: 0, y: 0 });\n /** mouse position when mousedown initiated drag */\n const startPosRef = useRef<MouseOffset>({ x: 0, y: 0 });\n /** references the dragged Item during its final 'settling' phase post drop */\n const settlingItemRef = useRef<HTMLElement | null>(null);\n /** the container which will scroll if content overflows */\n const scrollableContainerRef = useRef<HTMLElement | null>(null);\n const dropPosRef = useRef(-1);\n const dropIndexRef = useRef(-1);\n\n const handleScrollStopRef = useRef<ScrollStopHandler>();\n\n const {\n isDragSource,\n isDropTarget,\n onDragOut,\n onEndOfDragOperation,\n register,\n } = useDragDropProvider(id);\n\n type NativeMouseHandler = (evt: MouseEvent) => void;\n /** refs for drag handlers to avoid circular dependency issues */\n const dragMouseMoveHandlerRef = useRef<NativeMouseHandler>();\n const dragMouseUpHandlerRef = useRef<NativeMouseHandler>();\n\n const attachDragHandlers = useCallback(() => {\n const { current: dragMove } = dragMouseMoveHandlerRef;\n const { current: dragUp } = dragMouseUpHandlerRef;\n if (dragMove && dragUp) {\n // prettier-ignore\n document.addEventListener(\"mousemove\", dragMove, false);\n document.addEventListener(\"mouseup\", dragUp, false);\n }\n }, []);\n const removeDragHandlers = useCallback(() => {\n const { current: dragMove } = dragMouseMoveHandlerRef;\n const { current: dragUp } = dragMouseUpHandlerRef;\n if (dragMove && dragUp) {\n // prettier-ignore\n document.removeEventListener(\"mousemove\", dragMove, false);\n document.removeEventListener(\"mouseup\", dragUp, false);\n }\n }, []);\n\n /**\n * Establish the boundaries for the current drag operation. When dragging along\n * a single axis (eg list items within a list, tabs within a tabstrip), constrain\n * valid drag positions to the confines of the container. A sharp drag away from\n * the primary drag axis is interpreted as a request to drag an item out of the\n * container. This will be allowed if configured appropriately.\n */\n const setDragBoundaries = useCallback(\n (containerRect: DOMRect, draggableRect: DOMRect) => {\n const { current: container } = containerRef;\n if (container) {\n const [lastElement, lastItemIsOverflowIndicator] = getLastElement(\n container,\n itemQuery,\n );\n const { CONTRA, CONTRA_END, DIMENSION, END, START } =\n dimensions(orientation);\n\n const draggableSize = draggableRect[DIMENSION];\n const { [START]: lastItemStart, [END]: lastItemEnd } =\n lastElement.getBoundingClientRect();\n\n dragBoundaries.current.start = containerRect[START];\n dragBoundaries.current.end = lastItemIsOverflowIndicator\n ? Math.max(lastItemStart, containerRect.right - draggableSize)\n : isScrollableRef.current\n ? containerRect[START] + containerRect[DIMENSION] - draggableSize\n : lastItemEnd - draggableSize;\n dragBoundaries.current.contraStart = containerRect[CONTRA];\n dragBoundaries.current.contraEnd = containerRect[CONTRA_END];\n }\n },\n [containerRef, itemQuery, orientation],\n );\n\n const terminateDrag = useCallback(() => {\n const { current: settlingItem } = settlingItemRef;\n settlingItemRef.current = null;\n\n const { current: toIndex } = dropIndexRef;\n const droppedItem = containerRef.current?.querySelector(\n `${itemQuery}[data-index=\"${toIndex}\"]`,\n );\n if (droppedItem) {\n droppedItem.classList.remove(\"vuuDropTarget-settling\");\n }\n dropIndexRef.current = -1;\n onDropSettle?.(toIndex);\n setDraggableStatus((status) => ({\n ...status,\n draggable: undefined,\n }));\n\n if (settlingItem) {\n dispatchCustomEvent(settlingItem, \"vuu-dropped\");\n }\n }, [containerRef, itemQuery, onDropSettle]);\n\n const getScrollDirection = useCallback(\n (mousePos: number) => {\n if (scrollableContainerRef.current && dragDropStateRef.current) {\n const { mouseOffset } = dragDropStateRef.current;\n\n const { POS, SCROLL_POS, SCROLL_SIZE, CLIENT_SIZE } =\n dimensions(orientation);\n const {\n [SCROLL_POS]: scrollPos,\n [SCROLL_SIZE]: scrollSize,\n [CLIENT_SIZE]: clientSize,\n } = scrollableContainerRef.current;\n\n const maxScroll = scrollSize - clientSize;\n const canScrollFwd = scrollPos < maxScroll;\n const viewportEnd = dragBoundaries.current.end;\n const bwd =\n scrollPos > 0 &&\n mousePos - mouseOffset[POS] <= dragBoundaries.current.start;\n const fwd = canScrollFwd && mousePos - mouseOffset[POS] >= viewportEnd;\n\n return bwd ? \"bwd\" : fwd ? \"fwd\" : \"\";\n }\n },\n [scrollableContainerRef, orientation],\n );\n\n const useDragDropHook: InternalHook =\n allowDragDrop === true || allowDragDrop === \"natural-movement\"\n ? useDragDropNaturalMovement\n : allowDragDrop === \"drop-indicator\"\n ? useDragDropIndicator\n : allowDragDrop === \"drag-copy\"\n ? useDragDropCopy\n : noDragDrop;\n\n const onScrollingStopped = useCallback(\n (scrollDirection: \"fwd\" | \"bwd\", scrollPos: number, atEnd: boolean) => {\n handleScrollStopRef.current?.(scrollDirection, scrollPos, atEnd);\n },\n [],\n );\n\n const { isScrolling, startScrolling, stopScrolling } = useAutoScroll({\n containerRef: scrollableContainerRef,\n onScrollingStopped,\n orientation,\n });\n\n const handleDrop = useCallback<DropHandler>(\n (options) => {\n //TODO why do we need both this and dropIndexRef ?\n dropPosRef.current = options.toIndex;\n if (options.isExternal) {\n onDrop?.({\n ...options,\n payload: dragDropStateRef.current?.payload,\n });\n } else {\n onDrop?.(options);\n }\n dropIndexRef.current = options.toIndex;\n if (id) {\n onEndOfDragOperation?.(id);\n }\n dragDropStateRef.current = null;\n },\n [id, onDrop, onEndOfDragOperation],\n );\n\n const {\n beginDrag,\n drag,\n drop,\n handleScrollStart,\n handleScrollStop,\n releaseDrag,\n ...dragResult\n } = useDragDropHook({\n ...dragDropProps,\n containerRef,\n isDragSource,\n isDropTarget,\n itemQuery,\n orientation,\n });\n // To avoid circular ref between hooks\n handleScrollStopRef.current = handleScrollStop;\n\n const dragHandedOvertoProvider = useCallback(\n (dragDistance: number, clientContraPos: number) => {\n const { CONTRA_POS } = dimensions(orientation);\n const lastClientContraPos = mousePosRef.current[CONTRA_POS];\n\n const dragOutDistance = isDragSource\n ? Math.abs(lastClientContraPos - clientContraPos)\n : 0;\n\n if (allowDragDrop === true && !isDragSource && !isDropTarget) {\n //This is a simple internal drag\n return false;\n }\n\n // If isDropTarget is false, there are configured dropTargets in context\n // but this is not one, so drag will be handed straight over to DragProvider\n // (global drag). If isDropTarget is undefined, we have no DragProvider\n // so we are dealing with a simple local drag drop operation.\n const handoverToProvider =\n isDropTarget === false || dragOutDistance - dragDistance > 5;\n\n if (dragDropStateRef.current && handoverToProvider) {\n if (onDragOut?.(id as string, dragDropStateRef.current)) {\n // TODO create a cleanup function\n removeDragHandlers();\n releaseDrag?.();\n dragDropStateRef.current = null;\n }\n // remove the drag boundaries\n dragBoundaries.current = UNBOUNDED;\n return true;\n }\n },\n [\n allowDragDrop,\n id,\n isDragSource,\n isDropTarget,\n onDragOut,\n orientation,\n releaseDrag,\n removeDragHandlers,\n ],\n );\n\n const dragMouseMoveHandler = useCallback(\n (evt: MouseEvent) => {\n const { CLIENT_POS, CONTRA_CLIENT_POS, POS } = dimensions(orientation);\n const { clientX, clientY } = evt;\n const { [CLIENT_POS]: clientPos, [CONTRA_CLIENT_POS]: clientContraPos } =\n evt;\n const lastClientPos = mousePosRef.current[POS];\n const dragDistance = Math.abs(lastClientPos - clientPos);\n const { current: dragDropState } = dragDropStateRef;\n const { current: boundary } = dragBoundaries;\n\n if (dragHandedOvertoProvider(dragDistance, clientContraPos)) {\n return;\n }\n\n mousePosRef.current.x = clientX;\n mousePosRef.current.y = clientY;\n\n if (dragDropState) {\n const { draggableElement, mouseOffset } = dragDropState;\n\n if (dragBoundaries.current === UNBOUNDED && draggableElement) {\n const dragPosX = mousePosRef.current.x - mouseOffset.x;\n const dragPosY = mousePosRef.current.y - mouseOffset.y;\n draggableElement.style.top = `${dragPosY}px`;\n draggableElement.style.left = `${dragPosX}px`;\n } else if (dragDistance > 0 && draggableElement) {\n const mouseMoveDirection = lastClientPos < clientPos ? \"fwd\" : \"bwd\";\n const scrollDirection = getScrollDirection(clientPos);\n const dragPos = mousePosRef.current[POS] - mouseOffset[POS];\n const START = orientation === \"horizontal\" ? \"left\" : \"top\";\n\n if (\n scrollDirection &&\n isScrollableRef.current &&\n !isScrolling.current\n ) {\n handleScrollStart?.(scrollDirection);\n startScrolling(scrollDirection, 1);\n\n if (scrollDirection === \"fwd\") {\n draggableElement.style[START] = `${boundary.end}px`;\n } else {\n draggableElement.style[START] = `${boundary.start}px`;\n }\n } else if (!scrollDirection && isScrolling.current) {\n stopScrolling();\n }\n\n if (!isScrolling.current) {\n const renderDragPos = Math.round(\n Math.max(boundary.start, Math.min(boundary.end, dragPos)),\n );\n draggableElement.style[START] = `${renderDragPos}px`;\n drag(renderDragPos, mouseMoveDirection);\n }\n }\n }\n },\n [\n drag,\n dragHandedOvertoProvider,\n getScrollDirection,\n handleScrollStart,\n isScrolling,\n orientation,\n startScrolling,\n stopScrolling,\n ],\n );\n const dragMouseUpHandler = useCallback(() => {\n removeDragHandlers();\n if (dragDropStateRef.current) {\n settlingItemRef.current = dragDropStateRef.current.draggableElement;\n }\n const dropOptions = drop();\n handleDrop(dropOptions);\n\n setDraggableStatus((status) => ({\n ...status,\n draggedItemIndex: -1,\n isDragging: false,\n }));\n // TODO clear the dragDropState\n }, [drop, handleDrop, removeDragHandlers]);\n\n dragMouseMoveHandlerRef.current = dragMouseMoveHandler;\n dragMouseUpHandlerRef.current = dragMouseUpHandler;\n\n const resumeDrag = useCallback<ResumeDragHandler>(\n (dragDropState: DragDropState) => {\n dragDropStateRef.current = dragDropState;\n // Note this is using the draggable element rather than the original draggedElement\n const { draggableElement, mouseOffset } = dragDropState;\n const { current: container } = containerRef;\n\n if (container && draggableElement) {\n const containerRect = container.getBoundingClientRect();\n const draggableRect = draggableElement.getBoundingClientRect();\n setDragBoundaries(containerRect, draggableRect);\n\n mousePosRef.current.x = draggableRect.left + mouseOffset.x;\n mousePosRef.current.y = draggableRect.top + mouseOffset.y;\n\n // why doesn't this work if we use the initialDragEement\n beginDrag(draggableElement);\n\n attachDragHandlers();\n\n return true;\n } else {\n return false;\n }\n },\n [attachDragHandlers, beginDrag, containerRef, setDragBoundaries],\n );\n\n const dragStart = useCallback(\n (mousePosition: MousePosition) => {\n const { current: container } = containerRef;\n const { current: target } = mousedownElementRef;\n const dragElement = getDraggableElement(target, itemQuery);\n const scrollableContainer =\n scrollingContainerRef?.current ??\n getScrollableContainer(container, itemQuery);\n if (container && scrollableContainer && dragElement) {\n isScrollableRef.current = isContainerScrollable(\n scrollableContainer,\n orientation,\n );\n scrollableContainerRef.current = scrollableContainer;\n\n const containerRect = scrollableContainer.getBoundingClientRect();\n const draggableRect = dragElement.getBoundingClientRect();\n\n const dragDropState = (dragDropStateRef.current = new DragDropState(\n mousePosition,\n dragElement,\n ));\n\n setDragBoundaries(containerRect, draggableRect);\n\n beginDrag(dragElement);\n\n const {\n dataset: { index = \"-1\" },\n } = dragElement;\n\n setDraggableStatus({\n isDragging: true,\n draggable: (\n <Draggable\n element={cloneElement(dragElement)}\n onDropped={terminateDrag}\n onTransitionEnd={terminateDrag}\n ref={dragDropState.setDraggable}\n style={constrainRect(draggableRect, containerRect)}\n wrapperClassName={draggableClassName}\n />\n ),\n draggedItemIndex: parseInt(index),\n });\n\n onDragStart?.(dragDropState);\n attachDragHandlers();\n\n mousedownElementRef.current = null;\n }\n },\n [\n attachDragHandlers,\n beginDrag,\n containerRef,\n draggableClassName,\n itemQuery,\n onDragStart,\n orientation,\n scrollingContainerRef,\n setDragBoundaries,\n terminateDrag,\n ],\n );\n\n const preDragMouseMoveHandler = useCallback(\n (evt: MouseEvent) => {\n const { current: mouseDownPosition } = startPosRef;\n const { CLIENT_POS, POS } = dimensions(orientation);\n const { [CLIENT_POS]: clientPos } = evt;\n const mouseMoveDistance = Math.abs(clientPos - mouseDownPosition[POS]);\n if (mouseMoveDistance > dragThreshold && containerRef.current) {\n if (mouseDownTimer.current) {\n window.clearTimeout(mouseDownTimer.current);\n mouseDownTimer.current = null;\n }\n document.removeEventListener(\"mousemove\", preDragMouseMoveHandler);\n document.removeEventListener(\"mouseup\", preDragMouseUpHandler, false);\n\n const mousePosition = {\n clientX: mouseDownPosition.x,\n clientY: mouseDownPosition.y,\n };\n dragStart(mousePosition);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [containerRef, beginDrag, orientation],\n );\n\n const preDragMouseUpHandler = useCallback(() => {\n if (mouseDownTimer.current) {\n window.clearTimeout(mouseDownTimer.current);\n mouseDownTimer.current = null;\n }\n document.removeEventListener(\"mousemove\", preDragMouseMoveHandler, false);\n document.removeEventListener(\"mouseup\", preDragMouseUpHandler, false);\n }, [preDragMouseMoveHandler]);\n\n const mouseDownHandler: MouseEventHandler = useCallback(\n (evt) => {\n if (evt.button !== 0) {\n return;\n }\n // TODO runtime check here for valid drop targets ?\n const { current: container } = containerRef;\n // We don't want to prevent other handlers on this element from working\n // but we do want to stop a drag drop being initiated on a bubbled event.\n evt.stopPropagation();\n if (container && !evt.defaultPrevented) {\n const { clientX, clientY } = evt;\n mousePosRef.current.x = startPosRef.current.x = clientX;\n mousePosRef.current.y = startPosRef.current.y = clientY;\n mousedownElementRef.current = evt.target as HTMLElement;\n\n const mousePosition = {\n clientX,\n clientY,\n };\n\n document.addEventListener(\"mousemove\", preDragMouseMoveHandler, false);\n document.addEventListener(\"mouseup\", preDragMouseUpHandler, false);\n\n evt.persist();\n\n mouseDownTimer.current = window.setTimeout(() => {\n document.removeEventListener(\n \"mousemove\",\n preDragMouseMoveHandler,\n false,\n );\n document.removeEventListener(\"mouseup\", preDragMouseUpHandler, false);\n dragStart(mousePosition);\n }, 500);\n }\n },\n [containerRef, dragStart, preDragMouseMoveHandler, preDragMouseUpHandler],\n );\n\n const { current: settlingItem } = settlingItemRef;\n useLayoutEffect(() => {\n if (settlingItem && containerRef.current) {\n const dropPos = dropPosRef.current;\n const droppedItem = containerRef.current.querySelector(\n `${itemQuery}[data-index=\"${dropPos}\"]`,\n );\n\n if (droppedItem) {\n droppedItem.classList.add(\"vuuDropTarget-settling\");\n requestAnimationFrame(() => {\n const { top: targetTop, left: targetLeft } =\n droppedItem.getBoundingClientRect();\n // If the droppedItem is already exactly in the drop position, we can just\n // terminate the drag here and now. Most likely, though, it is out by a few\n // pixels. We animate the dragged item into the final resting place before\n // terminating the drag.\n const style = getComputedStyle(settlingItem);\n const currentLeft = parseInt(style.getPropertyValue(\"left\"));\n const currentTop = parseInt(style.getPropertyValue(\"top\"));\n if (currentLeft !== targetLeft || currentTop !== targetTop) {\n settlingItem.classList.add(\"vuuDraggable-settling\");\n settlingItem.style.top = `${targetTop}px`;\n settlingItem.style.left = `${targetLeft}px`;\n } else {\n terminateDrag();\n }\n });\n } else {\n // didn't find the dragged item. This is currently happening\n // because of a quirk with last item when scrolling has taken\n // place. Take no chances, make sure we don't keep an orphaned draggable\n setDraggableStatus((status) => ({\n ...status,\n draggable: undefined,\n }));\n }\n }\n }, [containerRef, itemQuery, settlingItem, terminateDrag]);\n\n useEffect(() => {\n if (id && (isDragSource || isDropTarget)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore TODO drah drop WIP\n register(id, allowDragDrop === \"drop-only\" ? false : resumeDrag, onDrop);\n }\n }, [\n allowDragDrop,\n id,\n isDragSource,\n isDropTarget,\n onDrop,\n register,\n resumeDrag,\n ]);\n\n return {\n ...dragResult,\n ...draggableStatus,\n isScrolling,\n onMouseDown:\n allowDragDrop && allowDragDrop !== \"drop-only\"\n ? mouseDownHandler\n : undefined,\n };\n};\n"],"names":["NULL_DROP_OPTIONS","NOT_OVERFLOWED","isOverflowElement","useRef","useState","useDragDropProvider","useCallback","dimensions","settlingItem","dispatchCustomEvent","useDragDropNaturalMovement","useDragDropIndicator","useDragDropCopy","useAutoScroll","getScrollableContainer","isContainerScrollable","DragDropState","jsx","Draggable","cloneElement","constrainRect","useLayoutEffect","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useDragDrop.js","sources":["../../src/drag-drop/useDragDrop.tsx"],"sourcesContent":["import { dispatchCustomEvent } from \"@vuu-ui/vuu-utils\";\nimport {\n MouseEventHandler,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useDragDropProvider } from \"./DragDropProvider\";\nimport { DragDropState } from \"./DragDropState\";\nimport {\n DragDropHook,\n DropHandler,\n InternalDragDropProps,\n InternalDragHookResult,\n MouseOffset,\n MousePosition,\n} from \"./dragDropTypes\";\nimport { Draggable } from \"./Draggable\";\nimport {\n cloneElement,\n constrainRect,\n dimensions,\n getScrollableContainer,\n isContainerScrollable,\n NOT_OVERFLOWED,\n} from \"./drop-target-utils\";\nimport { ScrollStopHandler, useAutoScroll } from \"./useAutoScroll\";\nimport { useDragDropCopy, NULL_DROP_OPTIONS } from \"./useDragDropCopy\";\nimport { useDragDropIndicator } from \"./useDragDropIndicator\";\nimport { useDragDropNaturalMovement } from \"./useDragDropNaturalMovement\";\nimport { ResumeDragHandler } from \"./useGlobalDragDrop\";\nimport { isOverflowElement } from \"../utils\";\n\nconst NULL_DRAG_DROP_RESULT = {\n beginDrag: () => undefined,\n drag: () => undefined,\n draggableRef: { current: null },\n drop: () => NULL_DROP_OPTIONS,\n isDragging: false,\n isScrolling: false,\n handleScrollStart: () => undefined,\n handleScrollStop: () => undefined,\n revealOverflowedItems: false,\n};\n\ntype DraggableStatus = {\n draggable?: JSX.Element;\n draggedItemIndex: number;\n isDragging: boolean;\n};\n\ntype DragBoundary = {\n start: number;\n end: number;\n contraStart: number;\n contraEnd: number;\n};\n\nconst UNBOUNDED: DragBoundary = {\n start: 0,\n end: 1000,\n contraStart: 0,\n contraEnd: 1000,\n};\n\ntype InternalHook = (props: InternalDragDropProps) => InternalDragHookResult;\nconst noDragDrop: InternalHook = () => NULL_DRAG_DROP_RESULT;\nconst dragThreshold = 3;\n\nconst getDraggableElement = (\n el: EventTarget | null,\n query: string,\n): HTMLElement => (el as HTMLElement)?.closest(query) as HTMLElement;\n\nconst getLastElement = (\n container: HTMLElement,\n itemQuery: string,\n): [HTMLElement, boolean] => {\n const fullItemQuery = `:is(${itemQuery}${NOT_OVERFLOWED},.vuuOverflowContainer-OverflowIndicator)`;\n const childElements = Array.from(container.querySelectorAll(fullItemQuery));\n const lastElement = childElements.pop() as HTMLElement;\n return [lastElement, isOverflowElement(lastElement)];\n};\n\nexport const useDragDrop: DragDropHook = ({\n allowDragDrop,\n containerRef,\n draggableClassName,\n getDragPayload,\n id,\n itemQuery = \"*\",\n onDragStart,\n onDrop,\n onDropSettle,\n orientation,\n scrollingContainerRef,\n ...dragDropProps\n}) => {\n const dragBoundaries = useRef<DragBoundary>({\n start: 0,\n end: 0,\n contraStart: 0,\n contraEnd: 0,\n });\n const [draggableStatus, setDraggableStatus] = useState<DraggableStatus>({\n draggable: undefined,\n draggedItemIndex: -1,\n isDragging: false,\n });\n\n const dragDropStateRef = useRef<DragDropState | null>(null);\n const mouseDownTimer = useRef<number | null>(null);\n /** do we actually have scrollable content */\n const isScrollableRef = useRef(false);\n\n /** save this on mousedown. We cannot rely on the target of mousemove being same element*/\n const mousedownElementRef = useRef<HTMLElement | null>(null);\n\n /** current mouse position */\n const mousePosRef = useRef<MouseOffset>({ x: 0, y: 0 });\n /** mouse position when mousedown initiated drag */\n const startPosRef = useRef<MouseOffset>({ x: 0, y: 0 });\n /** references the dragged Item during its final 'settling' phase post drop */\n const settlingItemRef = useRef<HTMLElement | null>(null);\n /** the container which will scroll if content overflows */\n const scrollableContainerRef = useRef<HTMLElement | null>(null);\n const dropPosRef = useRef(-1);\n const dropIndexRef = useRef(-1);\n\n const handleScrollStopRef = useRef<ScrollStopHandler>();\n\n const {\n isDragSource,\n isDropTarget,\n onDragOut,\n onEndOfDragOperation,\n register,\n } = useDragDropProvider(id);\n\n type NativeMouseHandler = (evt: MouseEvent) => void;\n /** refs for drag handlers to avoid circular dependency issues */\n const dragMouseMoveHandlerRef = useRef<NativeMouseHandler>();\n const dragMouseUpHandlerRef = useRef<NativeMouseHandler>();\n\n const attachDragHandlers = useCallback(() => {\n const { current: dragMove } = dragMouseMoveHandlerRef;\n const { current: dragUp } = dragMouseUpHandlerRef;\n if (dragMove && dragUp) {\n // prettier-ignore\n document.addEventListener(\"mousemove\", dragMove, false);\n document.addEventListener(\"mouseup\", dragUp, false);\n }\n }, []);\n const removeDragHandlers = useCallback(() => {\n const { current: dragMove } = dragMouseMoveHandlerRef;\n const { current: dragUp } = dragMouseUpHandlerRef;\n if (dragMove && dragUp) {\n // prettier-ignore\n document.removeEventListener(\"mousemove\", dragMove, false);\n document.removeEventListener(\"mouseup\", dragUp, false);\n }\n }, []);\n\n /**\n * Establish the boundaries for the current drag operation. When dragging along\n * a single axis (eg list items within a list, tabs within a tabstrip), constrain\n * valid drag positions to the confines of the container. A sharp drag away from\n * the primary drag axis is interpreted as a request to drag an item out of the\n * container. This will be allowed if configured appropriately.\n */\n const setDragBoundaries = useCallback(\n (containerRect: DOMRect, draggableRect: DOMRect) => {\n const { current: container } = containerRef;\n if (container) {\n const [lastElement, lastItemIsOverflowIndicator] = getLastElement(\n container,\n itemQuery,\n );\n const { CONTRA, CONTRA_END, DIMENSION, END, START } =\n dimensions(orientation);\n\n const draggableSize = draggableRect[DIMENSION];\n const { [START]: lastItemStart, [END]: lastItemEnd } =\n lastElement.getBoundingClientRect();\n\n dragBoundaries.current.start = containerRect[START];\n dragBoundaries.current.end = lastItemIsOverflowIndicator\n ? Math.max(lastItemStart, containerRect.right - draggableSize)\n : isScrollableRef.current\n ? containerRect[START] + containerRect[DIMENSION] - draggableSize\n : lastItemEnd - draggableSize;\n dragBoundaries.current.contraStart = containerRect[CONTRA];\n dragBoundaries.current.contraEnd = containerRect[CONTRA_END];\n }\n },\n [containerRef, itemQuery, orientation],\n );\n\n const terminateDrag = useCallback(() => {\n const { current: settlingItem } = settlingItemRef;\n settlingItemRef.current = null;\n\n const { current: toIndex } = dropIndexRef;\n const droppedItem = containerRef.current?.querySelector(\n `${itemQuery}[data-index=\"${toIndex}\"]`,\n );\n if (droppedItem) {\n droppedItem.classList.remove(\"vuuDropTarget-settling\");\n }\n dropIndexRef.current = -1;\n onDropSettle?.(toIndex);\n setDraggableStatus((status) => ({\n ...status,\n draggable: undefined,\n }));\n\n if (settlingItem) {\n dispatchCustomEvent(settlingItem, \"vuu-dropped\");\n }\n }, [containerRef, itemQuery, onDropSettle]);\n\n const getScrollDirection = useCallback(\n (mousePos: number) => {\n if (scrollableContainerRef.current && dragDropStateRef.current) {\n const { mouseOffset } = dragDropStateRef.current;\n\n const { POS, SCROLL_POS, SCROLL_SIZE, CLIENT_SIZE } =\n dimensions(orientation);\n const {\n [SCROLL_POS]: scrollPos,\n [SCROLL_SIZE]: scrollSize,\n [CLIENT_SIZE]: clientSize,\n } = scrollableContainerRef.current;\n\n const maxScroll = scrollSize - clientSize;\n const canScrollFwd = scrollPos < maxScroll;\n const viewportEnd = dragBoundaries.current.end;\n const bwd =\n scrollPos > 0 &&\n mousePos - mouseOffset[POS] <= dragBoundaries.current.start;\n const fwd = canScrollFwd && mousePos - mouseOffset[POS] >= viewportEnd;\n\n return bwd ? \"bwd\" : fwd ? \"fwd\" : \"\";\n }\n },\n [scrollableContainerRef, orientation],\n );\n\n const useDragDropHook: InternalHook =\n allowDragDrop === true || allowDragDrop === \"natural-movement\"\n ? useDragDropNaturalMovement\n : allowDragDrop === \"drop-indicator\"\n ? useDragDropIndicator\n : allowDragDrop === \"drag-copy\"\n ? useDragDropCopy\n : noDragDrop;\n\n const onScrollingStopped = useCallback(\n (scrollDirection: \"fwd\" | \"bwd\", scrollPos: number, atEnd: boolean) => {\n handleScrollStopRef.current?.(scrollDirection, scrollPos, atEnd);\n },\n [],\n );\n\n const { isScrolling, startScrolling, stopScrolling } = useAutoScroll({\n containerRef: scrollableContainerRef,\n onScrollingStopped,\n orientation,\n });\n\n const handleDrop = useCallback<DropHandler>(\n (options) => {\n //TODO why do we need both this and dropIndexRef ?\n dropPosRef.current = options.toIndex;\n if (options.isExternal) {\n onDrop?.({\n ...options,\n payload: dragDropStateRef.current?.payload,\n });\n } else {\n onDrop?.(options);\n }\n dropIndexRef.current = options.toIndex;\n if (id) {\n onEndOfDragOperation?.(id);\n }\n dragDropStateRef.current = null;\n },\n [id, onDrop, onEndOfDragOperation],\n );\n\n const {\n beginDrag,\n drag,\n drop,\n handleScrollStart,\n handleScrollStop,\n releaseDrag,\n ...dragResult\n } = useDragDropHook({\n ...dragDropProps,\n containerRef,\n isDragSource,\n isDropTarget,\n itemQuery,\n orientation,\n });\n // To avoid circular ref between hooks\n handleScrollStopRef.current = handleScrollStop;\n\n const dragHandedOvertoProvider = useCallback(\n (dragDistance: number, clientContraPos: number) => {\n const { CONTRA_POS } = dimensions(orientation);\n const lastClientContraPos = mousePosRef.current[CONTRA_POS];\n\n const dragOutDistance = isDragSource\n ? Math.abs(lastClientContraPos - clientContraPos)\n : 0;\n\n if (allowDragDrop === true && !isDragSource && !isDropTarget) {\n //This is a simple internal drag\n return false;\n }\n\n // If isDropTarget is false, there are configured dropTargets in context\n // but this is not one, so drag will be handed straight over to DragProvider\n // (global drag). If isDropTarget is undefined, we have no DragProvider\n // so we are dealing with a simple local drag drop operation.\n const handoverToProvider =\n isDropTarget === false || dragOutDistance - dragDistance > 5;\n\n if (dragDropStateRef.current && handoverToProvider) {\n if (onDragOut?.(id as string, dragDropStateRef.current)) {\n // TODO create a cleanup function\n removeDragHandlers();\n releaseDrag?.();\n dragDropStateRef.current = null;\n }\n // remove the drag boundaries\n dragBoundaries.current = UNBOUNDED;\n return true;\n }\n },\n [\n allowDragDrop,\n id,\n isDragSource,\n isDropTarget,\n onDragOut,\n orientation,\n releaseDrag,\n removeDragHandlers,\n ],\n );\n\n const dragMouseMoveHandler = useCallback(\n (evt: MouseEvent) => {\n const { CLIENT_POS, CONTRA_CLIENT_POS, POS } = dimensions(orientation);\n const { clientX, clientY } = evt;\n const { [CLIENT_POS]: clientPos, [CONTRA_CLIENT_POS]: clientContraPos } =\n evt;\n const lastClientPos = mousePosRef.current[POS];\n const dragDistance = Math.abs(lastClientPos - clientPos);\n const { current: dragDropState } = dragDropStateRef;\n const { current: boundary } = dragBoundaries;\n\n if (dragHandedOvertoProvider(dragDistance, clientContraPos)) {\n return;\n }\n\n mousePosRef.current.x = clientX;\n mousePosRef.current.y = clientY;\n\n if (dragDropState) {\n const { draggableElement, mouseOffset } = dragDropState;\n\n if (dragBoundaries.current === UNBOUNDED && draggableElement) {\n const dragPosX = mousePosRef.current.x - mouseOffset.x;\n const dragPosY = mousePosRef.current.y - mouseOffset.y;\n draggableElement.style.top = `${dragPosY}px`;\n draggableElement.style.left = `${dragPosX}px`;\n } else if (dragDistance > 0 && draggableElement) {\n const mouseMoveDirection = lastClientPos < clientPos ? \"fwd\" : \"bwd\";\n const scrollDirection = getScrollDirection(clientPos);\n const dragPos = mousePosRef.current[POS] - mouseOffset[POS];\n const START = orientation === \"horizontal\" ? \"left\" : \"top\";\n\n if (\n scrollDirection &&\n isScrollableRef.current &&\n !isScrolling.current\n ) {\n handleScrollStart?.(scrollDirection);\n startScrolling(scrollDirection, 1);\n\n if (scrollDirection === \"fwd\") {\n draggableElement.style[START] = `${boundary.end}px`;\n } else {\n draggableElement.style[START] = `${boundary.start}px`;\n }\n } else if (!scrollDirection && isScrolling.current) {\n stopScrolling();\n }\n\n if (!isScrolling.current) {\n const renderDragPos = Math.round(\n Math.max(boundary.start, Math.min(boundary.end, dragPos)),\n );\n draggableElement.style[START] = `${renderDragPos}px`;\n drag(renderDragPos, mouseMoveDirection);\n }\n }\n }\n },\n [\n drag,\n dragHandedOvertoProvider,\n getScrollDirection,\n handleScrollStart,\n isScrolling,\n orientation,\n startScrolling,\n stopScrolling,\n ],\n );\n const dragMouseUpHandler = useCallback(() => {\n removeDragHandlers();\n if (dragDropStateRef.current) {\n settlingItemRef.current = dragDropStateRef.current.draggableElement;\n }\n const dropOptions = drop();\n handleDrop(dropOptions);\n\n setDraggableStatus((status) => ({\n ...status,\n draggedItemIndex: -1,\n isDragging: false,\n }));\n // TODO clear the dragDropState\n }, [drop, handleDrop, removeDragHandlers]);\n\n dragMouseMoveHandlerRef.current = dragMouseMoveHandler;\n dragMouseUpHandlerRef.current = dragMouseUpHandler;\n\n const resumeDrag = useCallback<ResumeDragHandler>(\n (dragDropState: DragDropState) => {\n dragDropStateRef.current = dragDropState;\n // Note this is using the draggable element rather than the original draggedElement\n const { draggableElement, mouseOffset } = dragDropState;\n const { current: container } = containerRef;\n\n if (container && draggableElement) {\n const containerRect = container.getBoundingClientRect();\n const draggableRect = draggableElement.getBoundingClientRect();\n setDragBoundaries(containerRect, draggableRect);\n\n mousePosRef.current.x = draggableRect.left + mouseOffset.x;\n mousePosRef.current.y = draggableRect.top + mouseOffset.y;\n\n // why doesn't this work if we use the initialDragEement\n beginDrag(draggableElement);\n\n attachDragHandlers();\n\n return true;\n } else {\n return false;\n }\n },\n [attachDragHandlers, beginDrag, containerRef, setDragBoundaries],\n );\n\n const dragStart = useCallback(\n (mousePosition: MousePosition) => {\n const { current: container } = containerRef;\n const { current: target } = mousedownElementRef;\n const dragElement = getDraggableElement(target, itemQuery);\n const scrollableContainer =\n scrollingContainerRef?.current ??\n getScrollableContainer(container, itemQuery);\n if (container && scrollableContainer && dragElement) {\n isScrollableRef.current = isContainerScrollable(\n scrollableContainer,\n orientation,\n );\n scrollableContainerRef.current = scrollableContainer;\n\n const containerRect = scrollableContainer.getBoundingClientRect();\n const draggableRect = dragElement.getBoundingClientRect();\n\n const dragDropState = (dragDropStateRef.current = new DragDropState(\n mousePosition,\n dragElement,\n ));\n\n setDragBoundaries(containerRect, draggableRect);\n\n beginDrag(dragElement);\n\n const {\n dataset: { index = \"-1\" },\n } = dragElement;\n\n setDraggableStatus({\n isDragging: true,\n draggable: (\n <Draggable\n element={cloneElement(dragElement)}\n onDropped={terminateDrag}\n onTransitionEnd={terminateDrag}\n ref={dragDropState.setDraggable}\n style={constrainRect(draggableRect, containerRect)}\n wrapperClassName={draggableClassName}\n />\n ),\n draggedItemIndex: parseInt(index),\n });\n\n onDragStart?.(dragDropState);\n attachDragHandlers();\n\n mousedownElementRef.current = null;\n }\n },\n [\n attachDragHandlers,\n beginDrag,\n containerRef,\n draggableClassName,\n itemQuery,\n onDragStart,\n orientation,\n scrollingContainerRef,\n setDragBoundaries,\n terminateDrag,\n ],\n );\n\n const preDragMouseMoveHandler = useCallback(\n (evt: MouseEvent) => {\n const { current: mouseDownPosition } = startPosRef;\n const { CLIENT_POS, POS } = dimensions(orientation);\n const { [CLIENT_POS]: clientPos } = evt;\n const mouseMoveDistance = Math.abs(clientPos - mouseDownPosition[POS]);\n if (mouseMoveDistance > dragThreshold && containerRef.current) {\n if (mouseDownTimer.current) {\n window.clearTimeout(mouseDownTimer.current);\n mouseDownTimer.current = null;\n }\n document.removeEventListener(\"mousemove\", preDragMouseMoveHandler);\n document.removeEventListener(\"mouseup\", preDragMouseUpHandler, false);\n\n const mousePosition = {\n clientX: mouseDownPosition.x,\n clientY: mouseDownPosition.y,\n };\n dragStart(mousePosition);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [containerRef, beginDrag, orientation],\n );\n\n const preDragMouseUpHandler = useCallback(() => {\n if (mouseDownTimer.current) {\n window.clearTimeout(mouseDownTimer.current);\n mouseDownTimer.current = null;\n }\n document.removeEventListener(\"mousemove\", preDragMouseMoveHandler, false);\n document.removeEventListener(\"mouseup\", preDragMouseUpHandler, false);\n }, [preDragMouseMoveHandler]);\n\n const mouseDownHandler: MouseEventHandler = useCallback(\n (evt) => {\n if (evt.button !== 0) {\n return;\n }\n // TODO runtime check here for valid drop targets ?\n const { current: container } = containerRef;\n // We don't want to prevent other handlers on this element from working\n // but we do want to stop a drag drop being initiated on a bubbled event.\n evt.stopPropagation();\n if (container && !evt.defaultPrevented) {\n const { clientX, clientY } = evt;\n mousePosRef.current.x = startPosRef.current.x = clientX;\n mousePosRef.current.y = startPosRef.current.y = clientY;\n mousedownElementRef.current = evt.target as HTMLElement;\n\n const mousePosition = {\n clientX,\n clientY,\n };\n\n document.addEventListener(\"mousemove\", preDragMouseMoveHandler, false);\n document.addEventListener(\"mouseup\", preDragMouseUpHandler, false);\n\n evt.persist();\n\n mouseDownTimer.current = window.setTimeout(() => {\n document.removeEventListener(\n \"mousemove\",\n preDragMouseMoveHandler,\n false,\n );\n document.removeEventListener(\"mouseup\", preDragMouseUpHandler, false);\n dragStart(mousePosition);\n }, 500);\n }\n },\n [containerRef, dragStart, preDragMouseMoveHandler, preDragMouseUpHandler],\n );\n\n const { current: settlingItem } = settlingItemRef;\n useLayoutEffect(() => {\n if (settlingItem && containerRef.current) {\n const dropPos = dropPosRef.current;\n const droppedItem = containerRef.current.querySelector(\n `${itemQuery}[data-index=\"${dropPos}\"]`,\n );\n\n if (droppedItem) {\n droppedItem.classList.add(\"vuuDropTarget-settling\");\n requestAnimationFrame(() => {\n const { top: targetTop, left: targetLeft } =\n droppedItem.getBoundingClientRect();\n // If the droppedItem is already exactly in the drop position, we can just\n // terminate the drag here and now. Most likely, though, it is out by a few\n // pixels. We animate the dragged item into the final resting place before\n // terminating the drag.\n const style = getComputedStyle(settlingItem);\n const currentLeft = parseInt(style.getPropertyValue(\"left\"));\n const currentTop = parseInt(style.getPropertyValue(\"top\"));\n if (currentLeft !== targetLeft || currentTop !== targetTop) {\n settlingItem.classList.add(\"vuuDraggable-settling\");\n settlingItem.style.top = `${targetTop}px`;\n settlingItem.style.left = `${targetLeft}px`;\n } else {\n terminateDrag();\n }\n });\n } else {\n // didn't find the dragged item. This is currently happening\n // because of a quirk with last item when scrolling has taken\n // place. Take no chances, make sure we don't keep an orphaned draggable\n setDraggableStatus((status) => ({\n ...status,\n draggable: undefined,\n }));\n }\n }\n }, [containerRef, itemQuery, settlingItem, terminateDrag]);\n\n useEffect(() => {\n if (id && (isDragSource || isDropTarget)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore TODO drah drop WIP\n register(id, allowDragDrop === \"drop-only\" ? false : resumeDrag, onDrop);\n }\n }, [\n allowDragDrop,\n id,\n isDragSource,\n isDropTarget,\n onDrop,\n register,\n resumeDrag,\n ]);\n\n return {\n ...dragResult,\n ...draggableStatus,\n isScrolling,\n onMouseDown:\n allowDragDrop && allowDragDrop !== \"drop-only\"\n ? mouseDownHandler\n : undefined,\n };\n};\n"],"names":["NULL_DROP_OPTIONS","NOT_OVERFLOWED","isOverflowElement","useRef","useState","useDragDropProvider","useCallback","dimensions","settlingItem","dispatchCustomEvent","useDragDropNaturalMovement","useDragDropIndicator","useDragDropCopy","useAutoScroll","getScrollableContainer","isContainerScrollable","DragDropState","jsx","Draggable","cloneElement","constrainRect","useLayoutEffect","useEffect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDragDropCopy.js","sources":["../../src/drag-drop/useDragDropCopy.ts"],"sourcesContent":["import { useCallback, useRef } from \"react\";\n\nimport type {\n InternalDragDropProps,\n InternalDragHookResult,\n ViewportRange,\n} from \"./dragDropTypes\";\n\nexport const NULL_DROP_OPTIONS = {\n fromIndex: -1,\n toIndex: -1,\n} as const;\n\nexport const useDragDropCopy = ({\n selected,\n viewportRange,\n}: InternalDragDropProps): InternalDragHookResult => {\n const rangeRef = useRef<ViewportRange>();\n rangeRef.current = viewportRange;\n\n const beginDrag = useCallback(\n (dragElement: HTMLElement) => {\n if (\n dragElement.ariaSelected &&\n Array.isArray(selected) &&\n selected.length > 1\n ) {\n console.log(\"its a selected element, and we have a multi select\");\n }\n },\n [selected]\n );\n\n const drag = useCallback(() => undefined, []);\n const drop = useCallback(() => NULL_DROP_OPTIONS, []);\n\n return {\n beginDrag,\n drag,\n drop,\n };\n};\n"],"names":["useRef","useCallback"],"mappings":";;;;AAQO,MAAM,iBAAoB,GAAA;AAAA,EAC/B,SAAW,EAAA,CAAA,CAAA;AAAA,EACX,OAAS,EAAA,CAAA,CAAA;AACX,EAAA;AAEO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAA;AAAA,EACA,aAAA;AACF,CAAqD,KAAA;AACnD,EAAA,MAAM,WAAWA,YAAsB,EAAA,CAAA;AACvC,EAAA,QAAA,CAAS,OAAU,GAAA,aAAA,CAAA;AAEnB,EAAA,MAAM,SAAY,GAAAC,iBAAA;AAAA,IAChB,CAAC,WAA6B,KAAA;AAC5B,MACE,IAAA,WAAA,CAAY,gBACZ,KAAM,CAAA,OAAA,CAAQ,QAAQ,CACtB,IAAA,QAAA,CAAS,SAAS,CAClB,EAAA;AACA,QAAA,OAAA,CAAQ,IAAI,oDAAoD,CAAA,CAAA;AAAA,OAClE;AAAA,KACF;AAAA,IACA,CAAC,QAAQ,CAAA;AAAA,GACX,CAAA;AAEA,EAAA,MAAM,IAAO,GAAAA,iBAAA,CAAY,MAAM,KAAA,CAAA,EAAW,EAAE,CAAA,CAAA;AAC5C,EAAA,MAAM,IAAO,GAAAA,iBAAA,CAAY,MAAM,iBAAA,EAAmB,EAAE,CAAA,CAAA;AAEpD,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,GACF,CAAA;AACF;;;;;"}
1
+ {"version":3,"file":"useDragDropCopy.js","sources":["../../src/drag-drop/useDragDropCopy.ts"],"sourcesContent":["import { useCallback, useRef } from \"react\";\n\nimport type {\n InternalDragDropProps,\n InternalDragHookResult,\n ViewportRange,\n} from \"./dragDropTypes\";\n\nexport const NULL_DROP_OPTIONS = {\n fromIndex: -1,\n toIndex: -1,\n} as const;\n\nexport const useDragDropCopy = ({\n selected,\n viewportRange,\n}: InternalDragDropProps): InternalDragHookResult => {\n const rangeRef = useRef<ViewportRange>();\n rangeRef.current = viewportRange;\n\n const beginDrag = useCallback(\n (dragElement: HTMLElement) => {\n if (\n dragElement.ariaSelected &&\n Array.isArray(selected) &&\n selected.length > 1\n ) {\n console.log(\"its a selected element, and we have a multi select\");\n }\n },\n [selected]\n );\n\n const drag = useCallback(() => undefined, []);\n const drop = useCallback(() => NULL_DROP_OPTIONS, []);\n\n return {\n beginDrag,\n drag,\n drop,\n };\n};\n"],"names":["useRef","useCallback"],"mappings":";;;;AAQO,MAAM,iBAAoB,GAAA;AAAA,EAC/B,SAAW,EAAA,CAAA,CAAA;AAAA,EACX,OAAS,EAAA,CAAA;AACX;AAEO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAA;AAAA,EACA;AACF,CAAqD,KAAA;AACnD,EAAA,MAAM,WAAWA,YAAsB,EAAA;AACvC,EAAA,QAAA,CAAS,OAAU,GAAA,aAAA;AAEnB,EAAA,MAAM,SAAY,GAAAC,iBAAA;AAAA,IAChB,CAAC,WAA6B,KAAA;AAC5B,MACE,IAAA,WAAA,CAAY,gBACZ,KAAM,CAAA,OAAA,CAAQ,QAAQ,CACtB,IAAA,QAAA,CAAS,SAAS,CAClB,EAAA;AACA,QAAA,OAAA,CAAQ,IAAI,oDAAoD,CAAA;AAAA;AAClE,KACF;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,IAAO,GAAAA,iBAAA,CAAY,MAAM,KAAA,CAAA,EAAW,EAAE,CAAA;AAC5C,EAAA,MAAM,IAAO,GAAAA,iBAAA,CAAY,MAAM,iBAAA,EAAmB,EAAE,CAAA;AAEpD,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;;;;;"}