@vuu-ui/vuu-layout 2.1.18 → 2.1.19-beta.1

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 (265) hide show
  1. package/package.json +14 -16
  2. package/types/dock-layout/DockLayout.d.ts +4 -4
  3. package/types/dock-layout/Drawer.d.ts +4 -4
  4. package/types/drag-drop/BoxModel.d.ts +7 -7
  5. package/types/flexbox/FlexboxLayout.d.ts +4 -4
  6. package/types/flexbox/Splitter.d.ts +1 -1
  7. package/types/layout-reducer/layoutUtils.d.ts +1 -1
  8. package/types/layout-reducer/remove-layout-element.d.ts +1 -1
  9. package/types/layout-reducer/replace-layout-element.d.ts +2 -2
  10. package/types/layout-reducer/resize-flex-children.d.ts +2 -2
  11. package/types/layout-view/useView.d.ts +1 -1
  12. package/types/placeholder/Placeholder.d.ts +4 -4
  13. package/types/responsive/overflowUtils.d.ts +2 -2
  14. package/types/stack/StackLayout.d.ts +4 -4
  15. package/types/tools/devtools-box/layout-configurator.d.ts +26 -26
  16. package/types/tools/devtools-tree/layout-tree-viewer.d.ts +2 -2
  17. package/types/utils/pathUtils.d.ts +1 -1
  18. package/cjs/Component.js +0 -14
  19. package/cjs/Component.js.map +0 -1
  20. package/cjs/LayoutContainer.css.js +0 -6
  21. package/cjs/LayoutContainer.css.js.map +0 -1
  22. package/cjs/LayoutContainer.js +0 -33
  23. package/cjs/LayoutContainer.js.map +0 -1
  24. package/cjs/dock-layout/DockLayout.css.js +0 -6
  25. package/cjs/dock-layout/DockLayout.css.js.map +0 -1
  26. package/cjs/dock-layout/DockLayout.js +0 -41
  27. package/cjs/dock-layout/DockLayout.js.map +0 -1
  28. package/cjs/dock-layout/Drawer.css.js +0 -6
  29. package/cjs/dock-layout/Drawer.css.js.map +0 -1
  30. package/cjs/dock-layout/Drawer.js +0 -95
  31. package/cjs/dock-layout/Drawer.js.map +0 -1
  32. package/cjs/drag-drop/BoxModel.js +0 -416
  33. package/cjs/drag-drop/BoxModel.js.map +0 -1
  34. package/cjs/drag-drop/DragState.js +0 -161
  35. package/cjs/drag-drop/DragState.js.map +0 -1
  36. package/cjs/drag-drop/Draggable.js +0 -192
  37. package/cjs/drag-drop/Draggable.js.map +0 -1
  38. package/cjs/drag-drop/DropTarget.js +0 -257
  39. package/cjs/drag-drop/DropTarget.js.map +0 -1
  40. package/cjs/drag-drop/DropTargetRenderer.js +0 -218
  41. package/cjs/drag-drop/DropTargetRenderer.js.map +0 -1
  42. package/cjs/flexbox/Flexbox.css.js +0 -6
  43. package/cjs/flexbox/Flexbox.css.js.map +0 -1
  44. package/cjs/flexbox/Flexbox.js +0 -69
  45. package/cjs/flexbox/Flexbox.js.map +0 -1
  46. package/cjs/flexbox/FlexboxLayout.js +0 -30
  47. package/cjs/flexbox/FlexboxLayout.js.map +0 -1
  48. package/cjs/flexbox/Splitter.css.js +0 -6
  49. package/cjs/flexbox/Splitter.css.js.map +0 -1
  50. package/cjs/flexbox/Splitter.js +0 -122
  51. package/cjs/flexbox/Splitter.js.map +0 -1
  52. package/cjs/flexbox/flexbox-utils.js +0 -95
  53. package/cjs/flexbox/flexbox-utils.js.map +0 -1
  54. package/cjs/flexbox/useSplitterResizing.js +0 -197
  55. package/cjs/flexbox/useSplitterResizing.js.map +0 -1
  56. package/cjs/index.js +0 -122
  57. package/cjs/index.js.map +0 -1
  58. package/cjs/layout-action.js +0 -24
  59. package/cjs/layout-action.js.map +0 -1
  60. package/cjs/layout-header/Header.css.js +0 -6
  61. package/cjs/layout-header/Header.css.js.map +0 -1
  62. package/cjs/layout-header/Header.js +0 -152
  63. package/cjs/layout-header/Header.js.map +0 -1
  64. package/cjs/layout-header/useHeader.js +0 -85
  65. package/cjs/layout-header/useHeader.js.map +0 -1
  66. package/cjs/layout-provider/LayoutProvider.js +0 -304
  67. package/cjs/layout-provider/LayoutProvider.js.map +0 -1
  68. package/cjs/layout-provider/LayoutProviderContext.js +0 -23
  69. package/cjs/layout-provider/LayoutProviderContext.js.map +0 -1
  70. package/cjs/layout-provider/useLayoutDragDrop.js +0 -177
  71. package/cjs/layout-provider/useLayoutDragDrop.js.map +0 -1
  72. package/cjs/layout-reducer/flexUtils.js +0 -227
  73. package/cjs/layout-reducer/flexUtils.js.map +0 -1
  74. package/cjs/layout-reducer/insert-layout-element.js +0 -286
  75. package/cjs/layout-reducer/insert-layout-element.js.map +0 -1
  76. package/cjs/layout-reducer/layout-reducer.js +0 -202
  77. package/cjs/layout-reducer/layout-reducer.js.map +0 -1
  78. package/cjs/layout-reducer/layoutTypes.js +0 -40
  79. package/cjs/layout-reducer/layoutTypes.js.map +0 -1
  80. package/cjs/layout-reducer/layoutUtils.js +0 -237
  81. package/cjs/layout-reducer/layoutUtils.js.map +0 -1
  82. package/cjs/layout-reducer/move-layout-element.js +0 -31
  83. package/cjs/layout-reducer/move-layout-element.js.map +0 -1
  84. package/cjs/layout-reducer/remove-layout-element.js +0 -237
  85. package/cjs/layout-reducer/remove-layout-element.js.map +0 -1
  86. package/cjs/layout-reducer/replace-layout-element.js +0 -96
  87. package/cjs/layout-reducer/replace-layout-element.js.map +0 -1
  88. package/cjs/layout-reducer/resize-flex-children.js +0 -62
  89. package/cjs/layout-reducer/resize-flex-children.js.map +0 -1
  90. package/cjs/layout-reducer/wrap-layout-element.js +0 -211
  91. package/cjs/layout-reducer/wrap-layout-element.js.map +0 -1
  92. package/cjs/layout-view/View.css.js +0 -6
  93. package/cjs/layout-view/View.css.js.map +0 -1
  94. package/cjs/layout-view/View.js +0 -160
  95. package/cjs/layout-view/View.js.map +0 -1
  96. package/cjs/layout-view/useView.js +0 -75
  97. package/cjs/layout-view/useView.js.map +0 -1
  98. package/cjs/layout-view/useViewBroadcastChannel.js +0 -35
  99. package/cjs/layout-view/useViewBroadcastChannel.js.map +0 -1
  100. package/cjs/layout-view/useViewResize.js +0 -42
  101. package/cjs/layout-view/useViewResize.js.map +0 -1
  102. package/cjs/layout-view-actions/ViewContext.js +0 -16
  103. package/cjs/layout-view-actions/ViewContext.js.map +0 -1
  104. package/cjs/layout-view-actions/useViewActionDispatcher.js +0 -112
  105. package/cjs/layout-view-actions/useViewActionDispatcher.js.map +0 -1
  106. package/cjs/layout-view-actions/useViewContributions.js +0 -33
  107. package/cjs/layout-view-actions/useViewContributions.js.map +0 -1
  108. package/cjs/palette/Palette.css.js +0 -6
  109. package/cjs/palette/Palette.css.js.map +0 -1
  110. package/cjs/palette/Palette.js +0 -115
  111. package/cjs/palette/Palette.js.map +0 -1
  112. package/cjs/placeholder/LayoutStartPanel.css.js +0 -6
  113. package/cjs/placeholder/LayoutStartPanel.css.js.map +0 -1
  114. package/cjs/placeholder/LayoutStartPanel.js +0 -56
  115. package/cjs/placeholder/LayoutStartPanel.js.map +0 -1
  116. package/cjs/placeholder/Placeholder.css.js +0 -6
  117. package/cjs/placeholder/Placeholder.css.js.map +0 -1
  118. package/cjs/placeholder/Placeholder.js +0 -34
  119. package/cjs/placeholder/Placeholder.js.map +0 -1
  120. package/cjs/responsive/useResizeObserver.js +0 -118
  121. package/cjs/responsive/useResizeObserver.js.map +0 -1
  122. package/cjs/responsive/utils.js +0 -34
  123. package/cjs/responsive/utils.js.map +0 -1
  124. package/cjs/stack/Stack.css.js +0 -6
  125. package/cjs/stack/Stack.css.js.map +0 -1
  126. package/cjs/stack/Stack.js +0 -150
  127. package/cjs/stack/Stack.js.map +0 -1
  128. package/cjs/stack/StackLayout.js +0 -116
  129. package/cjs/stack/StackLayout.js.map +0 -1
  130. package/cjs/use-persistent-state.js +0 -63
  131. package/cjs/use-persistent-state.js.map +0 -1
  132. package/cjs/utils/pathUtils.js +0 -293
  133. package/cjs/utils/pathUtils.js.map +0 -1
  134. package/cjs/utils/propUtils.js +0 -27
  135. package/cjs/utils/propUtils.js.map +0 -1
  136. package/cjs/utils/refUtils.js +0 -12
  137. package/cjs/utils/refUtils.js.map +0 -1
  138. package/cjs/utils/styleUtils.js +0 -15
  139. package/cjs/utils/styleUtils.js.map +0 -1
  140. package/cjs/utils/typeOf.js +0 -27
  141. package/cjs/utils/typeOf.js.map +0 -1
  142. package/esm/Component.js +0 -12
  143. package/esm/Component.js.map +0 -1
  144. package/esm/LayoutContainer.css.js +0 -4
  145. package/esm/LayoutContainer.css.js.map +0 -1
  146. package/esm/LayoutContainer.js +0 -31
  147. package/esm/LayoutContainer.js.map +0 -1
  148. package/esm/dock-layout/DockLayout.css.js +0 -4
  149. package/esm/dock-layout/DockLayout.css.js.map +0 -1
  150. package/esm/dock-layout/DockLayout.js +0 -39
  151. package/esm/dock-layout/DockLayout.js.map +0 -1
  152. package/esm/dock-layout/Drawer.css.js +0 -4
  153. package/esm/dock-layout/Drawer.css.js.map +0 -1
  154. package/esm/dock-layout/Drawer.js +0 -93
  155. package/esm/dock-layout/Drawer.js.map +0 -1
  156. package/esm/drag-drop/BoxModel.js +0 -409
  157. package/esm/drag-drop/BoxModel.js.map +0 -1
  158. package/esm/drag-drop/DragState.js +0 -159
  159. package/esm/drag-drop/DragState.js.map +0 -1
  160. package/esm/drag-drop/Draggable.js +0 -190
  161. package/esm/drag-drop/Draggable.js.map +0 -1
  162. package/esm/drag-drop/DropTarget.js +0 -253
  163. package/esm/drag-drop/DropTarget.js.map +0 -1
  164. package/esm/drag-drop/DropTargetRenderer.js +0 -216
  165. package/esm/drag-drop/DropTargetRenderer.js.map +0 -1
  166. package/esm/flexbox/Flexbox.css.js +0 -4
  167. package/esm/flexbox/Flexbox.css.js.map +0 -1
  168. package/esm/flexbox/Flexbox.js +0 -67
  169. package/esm/flexbox/Flexbox.js.map +0 -1
  170. package/esm/flexbox/FlexboxLayout.js +0 -28
  171. package/esm/flexbox/FlexboxLayout.js.map +0 -1
  172. package/esm/flexbox/Splitter.css.js +0 -4
  173. package/esm/flexbox/Splitter.css.js.map +0 -1
  174. package/esm/flexbox/Splitter.js +0 -120
  175. package/esm/flexbox/Splitter.js.map +0 -1
  176. package/esm/flexbox/flexbox-utils.js +0 -89
  177. package/esm/flexbox/flexbox-utils.js.map +0 -1
  178. package/esm/flexbox/useSplitterResizing.js +0 -195
  179. package/esm/flexbox/useSplitterResizing.js.map +0 -1
  180. package/esm/index.js +0 -33
  181. package/esm/index.js.map +0 -1
  182. package/esm/layout-action.js +0 -22
  183. package/esm/layout-action.js.map +0 -1
  184. package/esm/layout-header/Header.css.js +0 -4
  185. package/esm/layout-header/Header.css.js.map +0 -1
  186. package/esm/layout-header/Header.js +0 -150
  187. package/esm/layout-header/Header.js.map +0 -1
  188. package/esm/layout-header/useHeader.js +0 -83
  189. package/esm/layout-header/useHeader.js.map +0 -1
  190. package/esm/layout-provider/LayoutProvider.js +0 -297
  191. package/esm/layout-provider/LayoutProvider.js.map +0 -1
  192. package/esm/layout-provider/LayoutProviderContext.js +0 -20
  193. package/esm/layout-provider/LayoutProviderContext.js.map +0 -1
  194. package/esm/layout-provider/useLayoutDragDrop.js +0 -175
  195. package/esm/layout-provider/useLayoutDragDrop.js.map +0 -1
  196. package/esm/layout-reducer/flexUtils.js +0 -218
  197. package/esm/layout-reducer/flexUtils.js.map +0 -1
  198. package/esm/layout-reducer/insert-layout-element.js +0 -282
  199. package/esm/layout-reducer/insert-layout-element.js.map +0 -1
  200. package/esm/layout-reducer/layout-reducer.js +0 -200
  201. package/esm/layout-reducer/layout-reducer.js.map +0 -1
  202. package/esm/layout-reducer/layoutTypes.js +0 -36
  203. package/esm/layout-reducer/layoutTypes.js.map +0 -1
  204. package/esm/layout-reducer/layoutUtils.js +0 -226
  205. package/esm/layout-reducer/layoutUtils.js.map +0 -1
  206. package/esm/layout-reducer/move-layout-element.js +0 -29
  207. package/esm/layout-reducer/move-layout-element.js.map +0 -1
  208. package/esm/layout-reducer/remove-layout-element.js +0 -235
  209. package/esm/layout-reducer/remove-layout-element.js.map +0 -1
  210. package/esm/layout-reducer/replace-layout-element.js +0 -92
  211. package/esm/layout-reducer/replace-layout-element.js.map +0 -1
  212. package/esm/layout-reducer/resize-flex-children.js +0 -59
  213. package/esm/layout-reducer/resize-flex-children.js.map +0 -1
  214. package/esm/layout-reducer/wrap-layout-element.js +0 -209
  215. package/esm/layout-reducer/wrap-layout-element.js.map +0 -1
  216. package/esm/layout-view/View.css.js +0 -4
  217. package/esm/layout-view/View.css.js.map +0 -1
  218. package/esm/layout-view/View.js +0 -158
  219. package/esm/layout-view/View.js.map +0 -1
  220. package/esm/layout-view/useView.js +0 -73
  221. package/esm/layout-view/useView.js.map +0 -1
  222. package/esm/layout-view/useViewBroadcastChannel.js +0 -33
  223. package/esm/layout-view/useViewBroadcastChannel.js.map +0 -1
  224. package/esm/layout-view/useViewResize.js +0 -40
  225. package/esm/layout-view/useViewResize.js.map +0 -1
  226. package/esm/layout-view-actions/ViewContext.js +0 -12
  227. package/esm/layout-view-actions/ViewContext.js.map +0 -1
  228. package/esm/layout-view-actions/useViewActionDispatcher.js +0 -110
  229. package/esm/layout-view-actions/useViewActionDispatcher.js.map +0 -1
  230. package/esm/layout-view-actions/useViewContributions.js +0 -31
  231. package/esm/layout-view-actions/useViewContributions.js.map +0 -1
  232. package/esm/palette/Palette.css.js +0 -4
  233. package/esm/palette/Palette.css.js.map +0 -1
  234. package/esm/palette/Palette.js +0 -112
  235. package/esm/palette/Palette.js.map +0 -1
  236. package/esm/placeholder/LayoutStartPanel.css.js +0 -4
  237. package/esm/placeholder/LayoutStartPanel.css.js.map +0 -1
  238. package/esm/placeholder/LayoutStartPanel.js +0 -54
  239. package/esm/placeholder/LayoutStartPanel.js.map +0 -1
  240. package/esm/placeholder/Placeholder.css.js +0 -4
  241. package/esm/placeholder/Placeholder.css.js.map +0 -1
  242. package/esm/placeholder/Placeholder.js +0 -32
  243. package/esm/placeholder/Placeholder.js.map +0 -1
  244. package/esm/responsive/useResizeObserver.js +0 -112
  245. package/esm/responsive/useResizeObserver.js.map +0 -1
  246. package/esm/responsive/utils.js +0 -31
  247. package/esm/responsive/utils.js.map +0 -1
  248. package/esm/stack/Stack.css.js +0 -4
  249. package/esm/stack/Stack.css.js.map +0 -1
  250. package/esm/stack/Stack.js +0 -148
  251. package/esm/stack/Stack.js.map +0 -1
  252. package/esm/stack/StackLayout.js +0 -114
  253. package/esm/stack/StackLayout.js.map +0 -1
  254. package/esm/use-persistent-state.js +0 -58
  255. package/esm/use-persistent-state.js.map +0 -1
  256. package/esm/utils/pathUtils.js +0 -280
  257. package/esm/utils/pathUtils.js.map +0 -1
  258. package/esm/utils/propUtils.js +0 -23
  259. package/esm/utils/propUtils.js.map +0 -1
  260. package/esm/utils/refUtils.js +0 -10
  261. package/esm/utils/refUtils.js.map +0 -1
  262. package/esm/utils/styleUtils.js +0 -13
  263. package/esm/utils/styleUtils.js.map +0 -1
  264. package/esm/utils/typeOf.js +0 -23
  265. package/esm/utils/typeOf.js.map +0 -1
@@ -1,192 +0,0 @@
1
- 'use strict';
2
-
3
- var pathUtils = require('../utils/pathUtils.js');
4
- var propUtils = require('../utils/propUtils.js');
5
- var BoxModel = require('./BoxModel.js');
6
- var DragState = require('./DragState.js');
7
- var DropTarget = require('./DropTarget.js');
8
- var DropTargetRenderer = require('./DropTargetRenderer.js');
9
-
10
- let _dragStartCallback;
11
- let _dragMoveCallback;
12
- let _dragEndCallback;
13
- let _dragStartX;
14
- let _dragStartY;
15
- let _dragContainer;
16
- let _dragState;
17
- let _dropTarget = null;
18
- let _validDropTargetPaths;
19
- let _dragInstructions;
20
- let _measurements;
21
- let _simpleDrag;
22
- let _dragThreshold;
23
- let _mouseDownTimer = null;
24
- const DEFAULT_DRAG_THRESHOLD = 3;
25
- const _dropTargetRenderer = new DropTargetRenderer();
26
- const SCALE_FACTOR = 0.4;
27
- function getDragContainer(rootContainer, dragContainerPath) {
28
- if (dragContainerPath) {
29
- return pathUtils.followPath(rootContainer, dragContainerPath);
30
- } else {
31
- return pathUtils.findTarget(
32
- rootContainer,
33
- // TODO dropTarget is not good
34
- (props) => props.dropTarget
35
- );
36
- }
37
- }
38
- const Draggable = {
39
- handleMousedown(e, dragStartCallback, dragInstructions = {}) {
40
- _dragStartCallback = dragStartCallback;
41
- _dragInstructions = dragInstructions;
42
- _dragStartX = e.clientX;
43
- _dragStartY = e.clientY;
44
- _dragThreshold = dragInstructions.dragThreshold === void 0 ? DEFAULT_DRAG_THRESHOLD : dragInstructions.dragThreshold;
45
- if (_dragThreshold === 0) {
46
- _dragStartCallback(e, 0, 0);
47
- } else {
48
- window.addEventListener("mousemove", preDragMousemoveHandler, false);
49
- window.addEventListener("mouseup", preDragMouseupHandler, false);
50
- _mouseDownTimer = window.setTimeout(() => {
51
- window.removeEventListener("mousemove", preDragMousemoveHandler, false);
52
- window.removeEventListener("mouseup", preDragMouseupHandler, false);
53
- _dragStartCallback?.(e, 0, 0);
54
- }, 500);
55
- }
56
- e.preventDefault();
57
- },
58
- // called from handleDragStart (_dragCallback)
59
- initDrag(rootContainer, dragContainerPath, { top, left, right, bottom }, dragPos, dragHandler, intrinsicSize, dropTargets) {
60
- ({ drag: _dragMoveCallback, drop: _dragEndCallback } = dragHandler);
61
- return initDrag(
62
- rootContainer,
63
- dragContainerPath,
64
- { top, left, right, bottom },
65
- dragPos,
66
- intrinsicSize,
67
- dropTargets
68
- );
69
- }
70
- };
71
- function preDragMousemoveHandler(e) {
72
- const x_diff = e.clientX - _dragStartX ;
73
- const y_diff = e.clientY - _dragStartY ;
74
- const mouseMoveDistance = Math.max(Math.abs(x_diff), Math.abs(y_diff));
75
- if (mouseMoveDistance > _dragThreshold) {
76
- window.removeEventListener("mousemove", preDragMousemoveHandler, false);
77
- window.removeEventListener("mouseup", preDragMouseupHandler, false);
78
- _dragStartCallback?.(e, x_diff, y_diff);
79
- _dragStartCallback = null;
80
- }
81
- }
82
- function preDragMouseupHandler() {
83
- if (_mouseDownTimer) {
84
- window.clearTimeout(_mouseDownTimer);
85
- _mouseDownTimer = null;
86
- }
87
- window.removeEventListener("mousemove", preDragMousemoveHandler, false);
88
- window.removeEventListener("mouseup", preDragMouseupHandler, false);
89
- }
90
- function initDrag(rootContainer, dragContainerPath, dragRect, dragPos, intrinsicSize, dropTargets) {
91
- _dragContainer = getDragContainer(rootContainer, dragContainerPath);
92
- const { "data-path": dataPath, path = dataPath } = propUtils.getProps(_dragContainer);
93
- if (dropTargets) {
94
- const dropPaths = dropTargets.map((id) => pathUtils.findTarget(rootContainer, (props) => props.id === id)).map((target) => target.props.path);
95
- _validDropTargetPaths = dropPaths;
96
- }
97
- _measurements = BoxModel.BoxModel.measure(_dragContainer, dropTargets);
98
- const dragZone = _measurements[path];
99
- _dragState = new DragState.DragState(
100
- dragZone,
101
- dragPos.x,
102
- dragPos.y,
103
- dragRect,
104
- intrinsicSize
105
- );
106
- const pctX = Math.round(_dragState.x.mousePct * 100);
107
- const pctY = Math.round(_dragState.y.mousePct * 100);
108
- window.addEventListener("mousemove", dragMousemoveHandler, false);
109
- window.addEventListener("mouseup", dragMouseupHandler, false);
110
- window.addEventListener("keydown", dragKeydownHandler, false);
111
- _simpleDrag = false;
112
- _dropTargetRenderer.prepare(dragRect, "tab-only");
113
- return _dragInstructions.DoNotTransform ? "transform:none" : (
114
- // scale factor should be applied in caller, not here
115
- `transform:scale(${SCALE_FACTOR},${SCALE_FACTOR});transform-origin:${pctX}% ${pctY}%;`
116
- );
117
- }
118
- function dragMousemoveHandler(evt) {
119
- const x = evt.clientX;
120
- const y = evt.clientY;
121
- const dragState = _dragState;
122
- const currentDropTarget = _dropTarget;
123
- let dropTarget;
124
- let newX, newY;
125
- if (dragState.update("x", x)) {
126
- newX = dragState.x.pos;
127
- }
128
- if (dragState.update("y", y)) {
129
- newY = dragState.y.pos;
130
- }
131
- if (newX === void 0 && newY === void 0) ; else {
132
- _dragMoveCallback?.(newX, newY);
133
- }
134
- if (_simpleDrag || _dragContainer === void 0) {
135
- return;
136
- }
137
- if (dragState.inBounds()) {
138
- dropTarget = DropTarget.identifyDropTarget(
139
- x,
140
- y,
141
- _dragContainer,
142
- _measurements,
143
- dragState.hasIntrinsicSize(),
144
- _validDropTargetPaths
145
- );
146
- } else {
147
- dropTarget = DropTarget.identifyDropTarget(
148
- dragState.dropX(),
149
- dragState.dropY(),
150
- _dragContainer,
151
- _measurements
152
- );
153
- }
154
- if (currentDropTarget) {
155
- if (dropTarget == null || dropTarget.box !== currentDropTarget.box) {
156
- _dropTarget = null;
157
- }
158
- }
159
- if (dropTarget) {
160
- _dropTargetRenderer.draw(dropTarget, dragState);
161
- _dropTarget = dropTarget;
162
- }
163
- }
164
- function dragKeydownHandler(evt) {
165
- if (evt.key === "Escape") {
166
- _dropTarget = null;
167
- onDragEnd();
168
- }
169
- }
170
- function dragMouseupHandler() {
171
- onDragEnd();
172
- }
173
- function onDragEnd() {
174
- if (_dropTarget) {
175
- const dropTarget = _dropTargetRenderer.hoverDropTarget || DropTarget.DropTarget.getActiveDropTarget(_dropTarget);
176
- _dragEndCallback?.(dropTarget);
177
- _dropTarget = null;
178
- } else {
179
- _dragEndCallback?.();
180
- }
181
- _dragMoveCallback = null;
182
- _dragEndCallback = null;
183
- _dragContainer = void 0;
184
- _dropTargetRenderer.clear();
185
- _validDropTargetPaths = void 0;
186
- window.removeEventListener("mousemove", dragMousemoveHandler, false);
187
- window.removeEventListener("mouseup", dragMouseupHandler, false);
188
- window.removeEventListener("keydown", dragKeydownHandler, false);
189
- }
190
-
191
- exports.Draggable = Draggable;
192
- //# sourceMappingURL=Draggable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Draggable.js","sources":["../../../../packages/vuu-layout/src/drag-drop/Draggable.ts"],"sourcesContent":["import { rect } from \"@vuu-ui/vuu-utils\";\nimport { ReactElement } from \"react\";\nimport { findTarget, followPath, getProps } from \"../utils\";\nimport { BoxModel, Measurements } from \"./BoxModel\";\nimport { DragDropRect } from \"./dragDropTypes\";\nimport { DragState, IntrinsicSizes } from \"./DragState\";\nimport { DropTarget, identifyDropTarget } from \"./DropTarget\";\nimport DropTargetRenderer from \"./DropTargetRenderer\";\n\nexport type DragStartCallback = (e: MouseEvent, x: number, y: number) => void;\nexport type DragMoveCallback = (\n x: number | undefined,\n y: number | undefined,\n) => void;\nexport type DragEndCallback = (droppedTarget?: Partial<DropTarget>) => void;\nexport type DragInstructions = {\n DoNotRemove?: boolean;\n DoNotTransform?: boolean;\n dragThreshold?: number;\n DriftHomeIfNoDropTarget?: boolean;\n RemoveDraggableOnDragEnd?: boolean;\n};\n\nlet _dragStartCallback: DragStartCallback | null;\nlet _dragMoveCallback: DragMoveCallback | null;\nlet _dragEndCallback: DragEndCallback | null;\n\nlet _dragStartX: number;\nlet _dragStartY: number;\nlet _dragContainer: ReactElement | undefined;\nlet _dragState: DragState;\nlet _dropTarget: DropTarget | null = null;\nlet _validDropTargetPaths: string[] | undefined;\nlet _dragInstructions: DragInstructions;\nlet _measurements: Measurements;\nlet _simpleDrag: boolean;\nlet _dragThreshold: number;\nlet _mouseDownTimer: number | null = null;\n\nconst DEFAULT_DRAG_THRESHOLD = 3;\nconst _dropTargetRenderer = new DropTargetRenderer();\nconst SCALE_FACTOR = 0.4;\n\nfunction getDragContainer(\n rootContainer: ReactElement,\n dragContainerPath: string,\n) {\n if (dragContainerPath) {\n return followPath(rootContainer, dragContainerPath) as ReactElement;\n } else {\n return findTarget(\n rootContainer,\n // TODO dropTarget is not good\n (props) => props.dropTarget,\n ) as ReactElement;\n }\n}\n\nexport const Draggable = {\n handleMousedown(\n e: MouseEvent,\n dragStartCallback: DragStartCallback,\n dragInstructions: DragInstructions = {},\n ) {\n _dragStartCallback = dragStartCallback;\n _dragInstructions = dragInstructions;\n\n _dragStartX = e.clientX;\n _dragStartY = e.clientY;\n\n _dragThreshold =\n dragInstructions.dragThreshold === undefined\n ? DEFAULT_DRAG_THRESHOLD\n : dragInstructions.dragThreshold;\n\n if (_dragThreshold === 0) {\n // maybe this should be -1\n _dragStartCallback(e, 0, 0);\n } else {\n window.addEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.addEventListener(\"mouseup\", preDragMouseupHandler, false);\n\n _mouseDownTimer = window.setTimeout(() => {\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n _dragStartCallback?.(e, 0, 0);\n }, 500);\n }\n\n e.preventDefault();\n },\n\n // called from handleDragStart (_dragCallback)\n initDrag(\n rootContainer: ReactElement,\n dragContainerPath: string,\n { top, left, right, bottom }: rect,\n dragPos: { x: number; y: number },\n dragHandler: {\n drag: DragMoveCallback;\n drop: DragEndCallback;\n },\n intrinsicSize?: IntrinsicSizes,\n dropTargets?: string[],\n ) {\n ({ drag: _dragMoveCallback, drop: _dragEndCallback } = dragHandler);\n return initDrag(\n rootContainer,\n dragContainerPath,\n { top, left, right, bottom } as DragDropRect,\n dragPos,\n intrinsicSize,\n dropTargets,\n );\n },\n};\n\nfunction preDragMousemoveHandler(e: MouseEvent) {\n const x = true;\n const y = true;\n\n const x_diff = x ? e.clientX - _dragStartX : 0;\n const y_diff = y ? e.clientY - _dragStartY : 0;\n const mouseMoveDistance = Math.max(Math.abs(x_diff), Math.abs(y_diff));\n\n // when we do finally move the draggee, we are going to 'jump' by the amount of the drag threshold, should we\n // attempt to animate this ?\n if (mouseMoveDistance > _dragThreshold) {\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n _dragStartCallback?.(e, x_diff, y_diff);\n _dragStartCallback = null;\n }\n}\n\nfunction preDragMouseupHandler() {\n if (_mouseDownTimer) {\n window.clearTimeout(_mouseDownTimer);\n _mouseDownTimer = null;\n }\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n}\n\nfunction initDrag(\n rootContainer: ReactElement,\n dragContainerPath: string,\n dragRect: DragDropRect,\n dragPos: { x: number; y: number },\n intrinsicSize?: IntrinsicSizes,\n dropTargets?: string[],\n) {\n _dragContainer = getDragContainer(rootContainer, dragContainerPath);\n\n const { \"data-path\": dataPath, path = dataPath } = getProps(_dragContainer);\n\n if (dropTargets) {\n const dropPaths = dropTargets\n .map((id) => findTarget(rootContainer, (props) => props.id === id))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((target) => (target as any).props.path);\n _validDropTargetPaths = dropPaths;\n }\n\n // const start = window.performance.now();\n // translate the layout $position to drag-oriented co-ordinates, ignoring splitters\n\n _measurements = BoxModel.measure(_dragContainer, dropTargets);\n // console.log({ _measurements });\n // onsole.log({ measurements: _measurements });\n // const end = window.performance.now();\n // console.log(`[Draggable] measurements took ${end - start}ms`, _measurements);\n\n const dragZone = _measurements[path];\n\n _dragState = new DragState(\n dragZone,\n dragPos.x,\n dragPos.y,\n dragRect,\n intrinsicSize,\n );\n\n const pctX = Math.round(_dragState.x.mousePct * 100);\n const pctY = Math.round(_dragState.y.mousePct * 100);\n\n window.addEventListener(\"mousemove\", dragMousemoveHandler, false);\n window.addEventListener(\"mouseup\", dragMouseupHandler, false);\n window.addEventListener(\"keydown\", dragKeydownHandler, false);\n\n _simpleDrag = false;\n\n _dropTargetRenderer.prepare(dragRect, \"tab-only\");\n\n return _dragInstructions.DoNotTransform\n ? \"transform:none\"\n : // scale factor should be applied in caller, not here\n `transform:scale(${SCALE_FACTOR},${SCALE_FACTOR});transform-origin:${pctX}% ${pctY}%;`;\n}\n\nfunction dragMousemoveHandler(evt: MouseEvent) {\n const x = evt.clientX;\n const y = evt.clientY;\n const dragState = _dragState;\n const currentDropTarget = _dropTarget;\n let dropTarget;\n let newX, newY;\n\n if (dragState.update(\"x\", x)) {\n newX = dragState.x.pos;\n }\n\n if (dragState.update(\"y\", y)) {\n newY = dragState.y.pos;\n }\n\n if (newX === undefined && newY === undefined) {\n //onsole.log('both x and y are unchanged');\n } else {\n _dragMoveCallback?.(newX, newY);\n }\n\n if (_simpleDrag || _dragContainer === undefined) {\n return;\n }\n\n if (dragState.inBounds()) {\n dropTarget = identifyDropTarget(\n x,\n y,\n _dragContainer,\n _measurements,\n dragState.hasIntrinsicSize(),\n _validDropTargetPaths,\n );\n } else {\n dropTarget = identifyDropTarget(\n dragState.dropX(),\n dragState.dropY(),\n _dragContainer,\n _measurements,\n );\n }\n\n // did we have an existing droptarget which is no longer such ...\n if (currentDropTarget) {\n if (dropTarget == null || dropTarget.box !== currentDropTarget.box) {\n _dropTarget = null;\n }\n }\n\n if (dropTarget) {\n _dropTargetRenderer.draw(dropTarget, dragState);\n _dropTarget = dropTarget;\n }\n}\n\nfunction dragKeydownHandler(evt: KeyboardEvent) {\n if (evt.key === \"Escape\") {\n _dropTarget = null;\n onDragEnd();\n }\n}\n\nfunction dragMouseupHandler() {\n onDragEnd();\n}\n\nfunction onDragEnd() {\n if (_dropTarget) {\n const dropTarget =\n _dropTargetRenderer.hoverDropTarget ||\n DropTarget.getActiveDropTarget(_dropTarget);\n\n _dragEndCallback?.(dropTarget as DropTarget);\n\n _dropTarget = null;\n } else {\n _dragEndCallback?.();\n }\n\n _dragMoveCallback = null;\n _dragEndCallback = null;\n\n _dragContainer = undefined;\n _dropTargetRenderer.clear();\n _validDropTargetPaths = undefined;\n window.removeEventListener(\"mousemove\", dragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", dragMouseupHandler, false);\n window.removeEventListener(\"keydown\", dragKeydownHandler, false);\n}\n"],"names":["followPath","findTarget","getProps","BoxModel","DragState","identifyDropTarget","DropTarget"],"mappings":"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"}
@@ -1,257 +0,0 @@
1
- 'use strict';
2
-
3
- require('@vuu-ui/vuu-utils');
4
- require('react');
5
- var propUtils = require('../utils/propUtils.js');
6
- var typeOf = require('../utils/typeOf.js');
7
- var BoxModel = require('./BoxModel.js');
8
-
9
- var __defProp = Object.defineProperty;
10
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
12
- const isTabstrip = (dropTarget) => dropTarget.pos.tab && typeOf.typeOf(dropTarget.component) === "Stack" && dropTarget.pos.position.Header;
13
- const { north, south, east, west } = BoxModel.positionValues;
14
- const eastwest = east + west;
15
- const northsouth = north + south;
16
- class DropTarget {
17
- constructor({
18
- component,
19
- pos,
20
- clientRect,
21
- nextDropTarget
22
- }) {
23
- __publicField(this, "active");
24
- __publicField(this, "box");
25
- __publicField(this, "clientRect");
26
- __publicField(this, "component");
27
- __publicField(this, "dropRect");
28
- __publicField(this, "nextDropTarget");
29
- __publicField(this, "pos");
30
- this.component = component;
31
- this.pos = pos;
32
- this.clientRect = clientRect;
33
- this.nextDropTarget = nextDropTarget;
34
- this.active = false;
35
- this.dropRect = void 0;
36
- }
37
- targetTabPos(tab) {
38
- const { left: tabLeft, width: tabWidth, positionRelativeToTab } = tab;
39
- return positionRelativeToTab === BoxModel.RelativeDropPosition.BEFORE ? tabLeft : tabLeft + tabWidth;
40
- }
41
- /**
42
- * Determine what will be rendered by the dropTargetRenderer
43
- *
44
- * @param {*} lineWidth
45
- * @param {*} dragState
46
- * @returns {l, t, r, b, tabLeft, tabWidth, tabHeight}
47
- */
48
- getTargetDropOutline(lineWidth, dragState) {
49
- if (this.pos.tab) {
50
- return this.getDropTabOutline(lineWidth, this.pos.tab);
51
- } else if (dragState && dragState.hasIntrinsicSize()) {
52
- return this.getIntrinsicDropRect(dragState);
53
- } else {
54
- const [l, t, r, b] = this.getDropRectOutline(
55
- lineWidth,
56
- dragState
57
- );
58
- return { l, t, r, b };
59
- }
60
- }
61
- getDropTabOutline(lineWidth, tab) {
62
- const {
63
- clientRect: { top, left, right, bottom, header }
64
- } = this;
65
- const inset = 0;
66
- const gap = Math.round(lineWidth / 2) + inset;
67
- const t = Math.round(top);
68
- const l = Math.round(left + gap);
69
- const r = Math.round(right - gap);
70
- const b = Math.round(bottom - gap);
71
- const tabLeft = this.targetTabPos(tab);
72
- const tabWidth = 60;
73
- const tabHeight = (header?.bottom ?? 0) - (header?.top ?? 0);
74
- return { l, t, r, b, tabLeft, tabWidth, tabHeight };
75
- }
76
- getIntrinsicDropRect(dragState) {
77
- const { pos, clientRect: rect2 } = this;
78
- const { x, y } = dragState;
79
- let height = dragState.intrinsicSize?.height ?? 0;
80
- let width = dragState.intrinsicSize?.height ?? 0;
81
- if (height && height > rect2.height) {
82
- console.log(`DropTarget: we're going to blow the gaff`);
83
- height = rect2.height;
84
- } else if (width && width > rect2.width) {
85
- console.log(`DropTarget: we're going to blow the gaff`);
86
- width = rect2.width;
87
- }
88
- const left = Math.min(
89
- rect2.right - width,
90
- Math.max(rect2.left, Math.round(pos.x - x.mousePct * width))
91
- );
92
- const top = Math.min(
93
- rect2.bottom - height,
94
- Math.max(rect2.top, Math.round(pos.y - y.mousePct * height))
95
- );
96
- const [l, t, r, b] = this.dropRect = [
97
- left,
98
- top,
99
- left + width,
100
- top + height
101
- ];
102
- const guideLines = pos.position.EastOrWest ? [l, rect2.top, l, rect2.bottom, r, rect2.top, r, rect2.bottom] : [rect2.left, t, rect2.right, t, rect2.left, b, rect2.right, b];
103
- return { l, r, t, b, guideLines };
104
- }
105
- /**
106
- * @returns [left, top, right, bottom]
107
- */
108
- getDropRectOutline(lineWidth, dragState) {
109
- const { pos, clientRect: rect2 } = this;
110
- const { width: suggestedWidth, height: suggestedHeight, position } = pos;
111
- const { width: intrinsicWidth, height: intrinsicHeight } = dragState?.intrinsicSize ?? {};
112
- const sizeHeight = intrinsicHeight ?? suggestedHeight ?? 0;
113
- const sizeWidth = intrinsicWidth ?? suggestedWidth ?? 0;
114
- this.dropRect = void 0;
115
- const { top: t, left: l, right: r, bottom: b } = rect2;
116
- const inset = 0;
117
- const gap = Math.round(lineWidth / 2) + inset;
118
- switch (position) {
119
- case BoxModel.Position.North:
120
- case BoxModel.Position.Header: {
121
- const halfHeight = Math.round((b - t) / 2);
122
- const height = sizeHeight ? Math.min(halfHeight, Math.round(sizeHeight)) : halfHeight;
123
- return sizeWidth && l + sizeWidth < r ? [l + gap, t + gap, l + sizeWidth - gap, t + gap + height] : [l + gap, t + gap, r - gap, t + gap + height];
124
- }
125
- case BoxModel.Position.West: {
126
- const halfWidth = Math.round((r - l) / 2);
127
- const width = sizeWidth ? Math.min(halfWidth, Math.round(sizeWidth)) : halfWidth;
128
- return sizeHeight && t + sizeHeight < b ? [l + gap, t + gap, l - gap + width, t + sizeHeight + gap] : [l + gap, t + gap, l - gap + width, b - gap];
129
- }
130
- case BoxModel.Position.East: {
131
- const halfWidth = Math.round((r - l) / 2);
132
- const width = sizeWidth ? Math.min(halfWidth, Math.round(sizeWidth)) : halfWidth;
133
- return sizeHeight && t + sizeHeight < b ? [r - gap - width, t + gap, r - gap, t + sizeHeight + gap] : [r - gap - width, t + gap, r - gap, b - gap];
134
- }
135
- case BoxModel.Position.South: {
136
- const halfHeight = Math.round((b - t) / 2);
137
- const height = sizeHeight ? Math.min(halfHeight, Math.round(sizeHeight)) : halfHeight;
138
- return sizeWidth && l + sizeWidth < r ? [l + gap, b - gap - height, l + sizeWidth - gap, b - gap] : [l + gap, b - gap - height, r - gap, b - gap];
139
- }
140
- case BoxModel.Position.Centre: {
141
- return [l + gap, t + gap, r - gap, b - gap];
142
- }
143
- default:
144
- console.warn(`DropTarget does not recognize position ${position}`);
145
- return null;
146
- }
147
- }
148
- activate() {
149
- this.active = true;
150
- return this;
151
- }
152
- toArray() {
153
- let dropTarget = this;
154
- const dropTargets = [dropTarget];
155
- while (dropTarget = dropTarget.nextDropTarget) {
156
- dropTargets.push(dropTarget);
157
- }
158
- return dropTargets;
159
- }
160
- static getActiveDropTarget(dropTarget) {
161
- return dropTarget === null ? null : dropTarget?.active ? dropTarget : DropTarget.getActiveDropTarget(dropTarget.nextDropTarget);
162
- }
163
- }
164
- function identifyDropTarget(x, y, rootLayout, measurements, intrinsicSize, validDropTargets) {
165
- let dropTarget = null;
166
- const allBoxesContainingPoint = BoxModel.BoxModel.allBoxesContainingPoint(
167
- rootLayout,
168
- measurements,
169
- x,
170
- y,
171
- validDropTargets
172
- );
173
- if (allBoxesContainingPoint.length) {
174
- const [component, ...containers] = allBoxesContainingPoint;
175
- const {
176
- "data-path": dataPath,
177
- path = dataPath,
178
- "data-row-placeholder": isRowPlaceholder
179
- } = propUtils.getProps(component);
180
- const clientRect = measurements[path];
181
- const placeholderOrientation = intrinsicSize && isRowPlaceholder ? "row" : void 0;
182
- const pos = BoxModel.getPosition(x, y, clientRect, placeholderOrientation);
183
- const box = measurements[path];
184
- const nextDropTarget = ([nextTarget, ...targets]) => {
185
- if (pos.position?.Header || pos.closeToTheEdge) {
186
- const targetPosition = getTargetPosition(
187
- nextTarget,
188
- pos,
189
- box,
190
- measurements,
191
- x,
192
- y
193
- );
194
- if (targetPosition) {
195
- const [containerPos, clientRect2] = targetPosition;
196
- return new DropTarget({
197
- component: nextTarget,
198
- pos: containerPos,
199
- clientRect: clientRect2,
200
- nextDropTarget: nextDropTarget(targets) ?? null
201
- });
202
- } else if (targets.length) {
203
- return nextDropTarget(targets);
204
- }
205
- }
206
- };
207
- dropTarget = new DropTarget({
208
- component,
209
- pos,
210
- clientRect,
211
- nextDropTarget: nextDropTarget(containers) ?? null
212
- }).activate();
213
- }
214
- return dropTarget;
215
- }
216
- function getTargetPosition(container, { closeToTheEdge, position }, box, measurements, x, y) {
217
- if (!container || container.type === "LayoutContainer") {
218
- return;
219
- }
220
- const containingBox = measurements[container.props.path];
221
- const closeToTop = closeToTheEdge & BoxModel.positionValues.north;
222
- const closeToRight = closeToTheEdge & BoxModel.positionValues.east;
223
- const closeToBottom = closeToTheEdge & BoxModel.positionValues.south;
224
- const closeToLeft = closeToTheEdge & BoxModel.positionValues.west;
225
- const atTop = (closeToTop || position.Header) && Math.round(box.top) === Math.round(containingBox.top);
226
- const atRight = closeToRight && Math.round(box.right) === Math.round(containingBox.right);
227
- const atBottom = closeToBottom && Math.round(box.bottom) === Math.round(containingBox.bottom);
228
- const atLeft = closeToLeft && Math.round(box.left) === Math.round(containingBox.left);
229
- if (atTop || atRight || atBottom || atLeft) {
230
- const { "data-path": dataPath, path = dataPath } = container.props;
231
- const clientRect = measurements[path];
232
- const containerPos = BoxModel.getPosition(x, y, clientRect);
233
- if ((isVBox(container) || isTabbedContainer(container)) && closeToTheEdge & eastwest) {
234
- containerPos.width = 120;
235
- return [containerPos, clientRect];
236
- } else if ((isHBox(container) || isTabbedContainer(container)) && (position.Header || closeToTheEdge & northsouth)) {
237
- containerPos.height = 120;
238
- return [containerPos, clientRect];
239
- }
240
- }
241
- }
242
- function isTabbedContainer(component) {
243
- return typeOf.typeOf(component) === "Stack";
244
- }
245
- function isVBox(component) {
246
- return typeOf.typeOf(component) === "Flexbox" && // eslint-disable-next-line @typescript-eslint/no-explicit-any
247
- component.props.style.flexDirection === "column";
248
- }
249
- function isHBox(component) {
250
- return typeOf.typeOf(component) === "Flexbox" && // eslint-disable-next-line @typescript-eslint/no-explicit-any
251
- component.props.style.flexDirection === "row";
252
- }
253
-
254
- exports.DropTarget = DropTarget;
255
- exports.identifyDropTarget = identifyDropTarget;
256
- exports.isTabstrip = isTabstrip;
257
- //# sourceMappingURL=DropTarget.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DropTarget.js","sources":["../../../../packages/vuu-layout/src/drag-drop/DropTarget.ts"],"sourcesContent":["import { LayoutModel, rect, rectTuple } from \"@vuu-ui/vuu-utils\";\nimport { getProps, typeOf } from \"../utils\";\nimport {\n BoxModel,\n getPosition,\n Measurements,\n Position,\n positionValues,\n RelativeDropPosition,\n} from \"./BoxModel\";\nimport { DragDropRect, DropPos, DropPosTab } from \"./dragDropTypes\";\nimport { DragState } from \"./DragState\";\n\nexport const isTabstrip = (dropTarget: DropTarget) =>\n dropTarget.pos.tab &&\n typeOf(dropTarget.component) === \"Stack\" &&\n dropTarget.pos.position.Header;\n\nconst { north, south, east, west } = positionValues;\nconst eastwest = east + west;\nconst northsouth = north + south;\n\nexport interface DropTargetProps {\n component: LayoutModel;\n pos: DropPos;\n clientRect: DragDropRect;\n nextDropTarget: DropTarget | null;\n}\n\nexport type GuideLine = [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n];\nexport interface TargetDropOutline {\n l: number;\n r: number;\n t: number;\n b: number;\n tabLeft?: number;\n tabWidth?: number;\n tabHeight?: number;\n guideLines?: GuideLine;\n}\n\nexport class DropTarget {\n private active: boolean;\n\n public box: unknown;\n public clientRect: DragDropRect;\n public component: LayoutModel;\n public dropRect: rectTuple | undefined;\n public nextDropTarget: DropTarget | null;\n public pos: DropPos;\n\n constructor({\n component,\n pos,\n clientRect /*, closeToTheEdge*/,\n nextDropTarget,\n }: DropTargetProps) {\n this.component = component;\n this.pos = pos;\n this.clientRect = clientRect;\n this.nextDropTarget = nextDropTarget;\n this.active = false;\n this.dropRect = undefined;\n }\n\n targetTabPos(tab: DropPosTab) {\n const { left: tabLeft, width: tabWidth, positionRelativeToTab } = tab;\n return positionRelativeToTab === RelativeDropPosition.BEFORE\n ? tabLeft\n : tabLeft + tabWidth;\n }\n\n /**\n * Determine what will be rendered by the dropTargetRenderer\n *\n * @param {*} lineWidth\n * @param {*} dragState\n * @returns {l, t, r, b, tabLeft, tabWidth, tabHeight}\n */\n getTargetDropOutline(\n lineWidth: number,\n dragState?: DragState,\n ): TargetDropOutline {\n if (this.pos.tab) {\n return this.getDropTabOutline(lineWidth, this.pos.tab);\n } else if (dragState && dragState.hasIntrinsicSize()) {\n return this.getIntrinsicDropRect(dragState);\n } else {\n const [l, t, r, b] = this.getDropRectOutline(\n lineWidth,\n dragState,\n ) as rectTuple;\n return { l, t, r, b };\n }\n }\n\n getDropTabOutline(lineWidth: number, tab: DropPosTab): TargetDropOutline {\n const {\n clientRect: { top, left, right, bottom, header },\n } = this;\n\n const inset = 0;\n const gap = Math.round(lineWidth / 2) + inset;\n\n const t = Math.round(top);\n const l = Math.round(left + gap);\n const r = Math.round(right - gap);\n const b = Math.round(bottom - gap);\n const tabLeft = this.targetTabPos(tab);\n const tabWidth = 60; // should really measure text\n const tabHeight = (header?.bottom ?? 0) - (header?.top ?? 0);\n return { l, t, r, b, tabLeft, tabWidth, tabHeight };\n }\n\n getIntrinsicDropRect(dragState: DragState): TargetDropOutline {\n const { pos, clientRect: rect } = this;\n\n const { x, y } = dragState;\n\n let height = dragState.intrinsicSize?.height ?? 0;\n let width = dragState.intrinsicSize?.height ?? 0;\n\n if (height && height > rect.height) {\n console.log(`DropTarget: we're going to blow the gaff`);\n height = rect.height;\n } else if (width && width > rect.width) {\n console.log(`DropTarget: we're going to blow the gaff`);\n width = rect.width;\n }\n\n const left = Math.min(\n rect.right - width,\n Math.max(rect.left, Math.round(pos.x - x.mousePct * width)),\n );\n const top = Math.min(\n rect.bottom - height,\n Math.max(rect.top, Math.round(pos.y - y.mousePct * height)),\n );\n const [l, t, r, b] = (this.dropRect = [\n left,\n top,\n left + width,\n top + height,\n ]);\n\n const guideLines: GuideLine = pos.position.EastOrWest\n ? [l, rect.top, l, rect.bottom, r, rect.top, r, rect.bottom]\n : [rect.left, t, rect.right, t, rect.left, b, rect.right, b];\n\n return { l, r, t, b, guideLines };\n }\n\n /**\n * @returns [left, top, right, bottom]\n */\n getDropRectOutline(lineWidth: number, dragState?: DragState) {\n const { pos, clientRect: rect } = this;\n const { width: suggestedWidth, height: suggestedHeight, position } = pos;\n\n const { width: intrinsicWidth, height: intrinsicHeight } =\n dragState?.intrinsicSize ?? {};\n const sizeHeight = intrinsicHeight ?? suggestedHeight ?? 0;\n const sizeWidth = intrinsicWidth ?? suggestedWidth ?? 0;\n\n this.dropRect = undefined;\n\n const { top: t, left: l, right: r, bottom: b } = rect;\n\n const inset = 0;\n const gap = Math.round(lineWidth / 2) + inset;\n\n switch (position) {\n case Position.North:\n case Position.Header: {\n const halfHeight = Math.round((b - t) / 2);\n const height = sizeHeight\n ? Math.min(halfHeight, Math.round(sizeHeight))\n : halfHeight;\n return sizeWidth && l + sizeWidth < r\n ? [l + gap, t + gap, l + sizeWidth - gap, t + gap + height] // need flex direction indicator\n : [l + gap, t + gap, r - gap, t + gap + height];\n }\n case Position.West: {\n const halfWidth = Math.round((r - l) / 2);\n const width = sizeWidth\n ? Math.min(halfWidth, Math.round(sizeWidth))\n : halfWidth;\n return sizeHeight && t + sizeHeight < b\n ? [l + gap, t + gap, l - gap + width, t + sizeHeight + gap] // need flex direction indicator\n : [l + gap, t + gap, l - gap + width, b - gap];\n }\n case Position.East: {\n const halfWidth = Math.round((r - l) / 2);\n const width = sizeWidth\n ? Math.min(halfWidth, Math.round(sizeWidth))\n : halfWidth;\n return sizeHeight && t + sizeHeight < b\n ? [r - gap - width, t + gap, r - gap, t + sizeHeight + gap] // need flex direction indicator\n : [r - gap - width, t + gap, r - gap, b - gap];\n }\n case Position.South: {\n const halfHeight = Math.round((b - t) / 2);\n const height = sizeHeight\n ? Math.min(halfHeight, Math.round(sizeHeight))\n : halfHeight;\n\n return sizeWidth && l + sizeWidth < r\n ? [l + gap, b - gap - height, l + sizeWidth - gap, b - gap] // need flex direction indicator\n : [l + gap, b - gap - height, r - gap, b - gap];\n }\n case Position.Centre: {\n return [l + gap, t + gap, r - gap, b - gap];\n }\n default:\n console.warn(`DropTarget does not recognize position ${position}`);\n return null;\n }\n }\n\n activate() {\n this.active = true;\n return this;\n }\n\n toArray(this: DropTarget) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let dropTarget: DropTarget | null = this;\n const dropTargets = [dropTarget];\n // eslint-disable-next-line no-cond-assign\n while ((dropTarget = dropTarget.nextDropTarget)) {\n dropTargets.push(dropTarget);\n }\n return dropTargets;\n }\n\n static getActiveDropTarget(dropTarget: DropTarget | null): DropTarget | null {\n return dropTarget === null\n ? null\n : dropTarget?.active\n ? dropTarget\n : DropTarget.getActiveDropTarget(dropTarget.nextDropTarget);\n }\n}\n\n// Initial entry to this method is always via the app (may be it should be *on* the app)\nexport function identifyDropTarget(\n x: number,\n y: number,\n rootLayout: LayoutModel,\n measurements: Measurements,\n intrinsicSize?: number,\n validDropTargets?: string[],\n) {\n let dropTarget = null;\n\n const allBoxesContainingPoint = BoxModel.allBoxesContainingPoint(\n rootLayout,\n measurements,\n x,\n y,\n validDropTargets,\n );\n\n if (allBoxesContainingPoint.length) {\n const [component, ...containers] = allBoxesContainingPoint;\n const {\n \"data-path\": dataPath,\n path = dataPath,\n \"data-row-placeholder\": isRowPlaceholder,\n } = getProps(component);\n const clientRect = measurements[path];\n const placeholderOrientation =\n intrinsicSize && isRowPlaceholder ? \"row\" : undefined;\n const pos = getPosition(x, y, clientRect, placeholderOrientation);\n const box = measurements[path];\n\n const nextDropTarget = ([nextTarget, ...targets]: LayoutModel[]):\n | DropTarget\n | undefined => {\n if (pos.position?.Header || pos.closeToTheEdge) {\n const targetPosition = getTargetPosition(\n nextTarget,\n pos,\n box,\n measurements,\n x,\n y,\n );\n if (targetPosition) {\n const [containerPos, clientRect] = targetPosition;\n\n return new DropTarget({\n component: nextTarget,\n pos: containerPos,\n clientRect,\n nextDropTarget: nextDropTarget(targets) ?? null,\n });\n } else if (targets.length) {\n return nextDropTarget(targets);\n }\n }\n };\n dropTarget = new DropTarget({\n component,\n pos,\n clientRect,\n nextDropTarget: nextDropTarget(containers) ?? null,\n }).activate();\n }\n\n return dropTarget;\n}\n\nfunction getTargetPosition(\n container: LayoutModel,\n { closeToTheEdge, position }: DropPos,\n box: rect,\n measurements: Measurements,\n x: number,\n y: number,\n): [DropPos, DragDropRect] | undefined {\n if (!container || container.type === \"LayoutContainer\") {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const containingBox = measurements[(container.props as any).path];\n const closeToTop = closeToTheEdge & positionValues.north;\n const closeToRight = closeToTheEdge & positionValues.east;\n const closeToBottom = closeToTheEdge & positionValues.south;\n const closeToLeft = closeToTheEdge & positionValues.west;\n\n const atTop =\n (closeToTop || position.Header) &&\n Math.round(box.top) === Math.round(containingBox.top);\n const atRight =\n closeToRight && Math.round(box.right) === Math.round(containingBox.right);\n const atBottom =\n closeToBottom &&\n Math.round(box.bottom) === Math.round(containingBox.bottom);\n const atLeft =\n closeToLeft && Math.round(box.left) === Math.round(containingBox.left);\n\n if (atTop || atRight || atBottom || atLeft) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { \"data-path\": dataPath, path = dataPath } = container.props as any;\n const clientRect = measurements[path];\n const containerPos = getPosition(x, y, clientRect);\n\n // if its a VBox and we're close to left or right ...\n if (\n (isVBox(container) || isTabbedContainer(container)) &&\n closeToTheEdge & eastwest\n ) {\n containerPos.width = 120;\n return [containerPos, clientRect];\n }\n // if it's a HBox and we're close to top or bottom ...\n else if (\n (isHBox(container) || isTabbedContainer(container)) &&\n (position.Header || closeToTheEdge & northsouth)\n ) {\n containerPos.height = 120;\n return [containerPos, clientRect];\n }\n }\n}\n\nfunction isTabbedContainer(component: LayoutModel) {\n return typeOf(component) === \"Stack\";\n}\n\nfunction isVBox(component: LayoutModel) {\n return (\n typeOf(component) === \"Flexbox\" &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (component.props as any).style.flexDirection === \"column\"\n );\n}\n\nfunction isHBox(component: LayoutModel) {\n return (\n typeOf(component) === \"Flexbox\" &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (component.props as any).style.flexDirection === \"row\"\n );\n}\n"],"names":["typeOf","positionValues","RelativeDropPosition","rect","Position","BoxModel","getProps","getPosition","clientRect"],"mappings":"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"}