@vuu-ui/vuu-layout 0.13.7 → 0.13.9

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 (245) hide show
  1. package/cjs/index.js +5513 -113
  2. package/cjs/index.js.map +1 -1
  3. package/esm/index.js +5436 -32
  4. package/esm/index.js.map +1 -1
  5. package/package.json +9 -9
  6. package/cjs/Component.js +0 -14
  7. package/cjs/Component.js.map +0 -1
  8. package/cjs/LayoutContainer.css.js +0 -6
  9. package/cjs/LayoutContainer.css.js.map +0 -1
  10. package/cjs/LayoutContainer.js +0 -33
  11. package/cjs/LayoutContainer.js.map +0 -1
  12. package/cjs/dock-layout/DockLayout.css.js +0 -6
  13. package/cjs/dock-layout/DockLayout.css.js.map +0 -1
  14. package/cjs/dock-layout/DockLayout.js +0 -41
  15. package/cjs/dock-layout/DockLayout.js.map +0 -1
  16. package/cjs/dock-layout/Drawer.css.js +0 -6
  17. package/cjs/dock-layout/Drawer.css.js.map +0 -1
  18. package/cjs/dock-layout/Drawer.js +0 -95
  19. package/cjs/dock-layout/Drawer.js.map +0 -1
  20. package/cjs/drag-drop/BoxModel.js +0 -416
  21. package/cjs/drag-drop/BoxModel.js.map +0 -1
  22. package/cjs/drag-drop/DragState.js +0 -161
  23. package/cjs/drag-drop/DragState.js.map +0 -1
  24. package/cjs/drag-drop/Draggable.js +0 -192
  25. package/cjs/drag-drop/Draggable.js.map +0 -1
  26. package/cjs/drag-drop/DropTarget.js +0 -257
  27. package/cjs/drag-drop/DropTarget.js.map +0 -1
  28. package/cjs/drag-drop/DropTargetRenderer.js +0 -218
  29. package/cjs/drag-drop/DropTargetRenderer.js.map +0 -1
  30. package/cjs/flexbox/Flexbox.css.js +0 -6
  31. package/cjs/flexbox/Flexbox.css.js.map +0 -1
  32. package/cjs/flexbox/Flexbox.js +0 -69
  33. package/cjs/flexbox/Flexbox.js.map +0 -1
  34. package/cjs/flexbox/FlexboxLayout.js +0 -30
  35. package/cjs/flexbox/FlexboxLayout.js.map +0 -1
  36. package/cjs/flexbox/Splitter.css.js +0 -6
  37. package/cjs/flexbox/Splitter.css.js.map +0 -1
  38. package/cjs/flexbox/Splitter.js +0 -122
  39. package/cjs/flexbox/Splitter.js.map +0 -1
  40. package/cjs/flexbox/flexbox-utils.js +0 -95
  41. package/cjs/flexbox/flexbox-utils.js.map +0 -1
  42. package/cjs/flexbox/useSplitterResizing.js +0 -198
  43. package/cjs/flexbox/useSplitterResizing.js.map +0 -1
  44. package/cjs/layout-action.js +0 -24
  45. package/cjs/layout-action.js.map +0 -1
  46. package/cjs/layout-header/Header.css.js +0 -6
  47. package/cjs/layout-header/Header.css.js.map +0 -1
  48. package/cjs/layout-header/Header.js +0 -152
  49. package/cjs/layout-header/Header.js.map +0 -1
  50. package/cjs/layout-header/useHeader.js +0 -86
  51. package/cjs/layout-header/useHeader.js.map +0 -1
  52. package/cjs/layout-provider/LayoutProvider.js +0 -306
  53. package/cjs/layout-provider/LayoutProvider.js.map +0 -1
  54. package/cjs/layout-provider/LayoutProviderContext.js +0 -23
  55. package/cjs/layout-provider/LayoutProviderContext.js.map +0 -1
  56. package/cjs/layout-provider/useLayoutDragDrop.js +0 -177
  57. package/cjs/layout-provider/useLayoutDragDrop.js.map +0 -1
  58. package/cjs/layout-reducer/flexUtils.js +0 -227
  59. package/cjs/layout-reducer/flexUtils.js.map +0 -1
  60. package/cjs/layout-reducer/insert-layout-element.js +0 -286
  61. package/cjs/layout-reducer/insert-layout-element.js.map +0 -1
  62. package/cjs/layout-reducer/layout-reducer.js +0 -202
  63. package/cjs/layout-reducer/layout-reducer.js.map +0 -1
  64. package/cjs/layout-reducer/layoutTypes.js +0 -40
  65. package/cjs/layout-reducer/layoutTypes.js.map +0 -1
  66. package/cjs/layout-reducer/layoutUtils.js +0 -237
  67. package/cjs/layout-reducer/layoutUtils.js.map +0 -1
  68. package/cjs/layout-reducer/move-layout-element.js +0 -31
  69. package/cjs/layout-reducer/move-layout-element.js.map +0 -1
  70. package/cjs/layout-reducer/remove-layout-element.js +0 -237
  71. package/cjs/layout-reducer/remove-layout-element.js.map +0 -1
  72. package/cjs/layout-reducer/replace-layout-element.js +0 -96
  73. package/cjs/layout-reducer/replace-layout-element.js.map +0 -1
  74. package/cjs/layout-reducer/resize-flex-children.js +0 -62
  75. package/cjs/layout-reducer/resize-flex-children.js.map +0 -1
  76. package/cjs/layout-reducer/wrap-layout-element.js +0 -211
  77. package/cjs/layout-reducer/wrap-layout-element.js.map +0 -1
  78. package/cjs/layout-view/View.css.js +0 -6
  79. package/cjs/layout-view/View.css.js.map +0 -1
  80. package/cjs/layout-view/View.js +0 -167
  81. package/cjs/layout-view/View.js.map +0 -1
  82. package/cjs/layout-view/useView.js +0 -91
  83. package/cjs/layout-view/useView.js.map +0 -1
  84. package/cjs/layout-view/useViewBroadcastChannel.js +0 -35
  85. package/cjs/layout-view/useViewBroadcastChannel.js.map +0 -1
  86. package/cjs/layout-view/useViewResize.js +0 -42
  87. package/cjs/layout-view/useViewResize.js.map +0 -1
  88. package/cjs/layout-view-actions/ViewContext.js +0 -16
  89. package/cjs/layout-view-actions/ViewContext.js.map +0 -1
  90. package/cjs/layout-view-actions/useViewActionDispatcher.js +0 -129
  91. package/cjs/layout-view-actions/useViewActionDispatcher.js.map +0 -1
  92. package/cjs/palette/Palette.css.js +0 -6
  93. package/cjs/palette/Palette.css.js.map +0 -1
  94. package/cjs/palette/Palette.js +0 -132
  95. package/cjs/palette/Palette.js.map +0 -1
  96. package/cjs/placeholder/LayoutStartPanel.css.js +0 -6
  97. package/cjs/placeholder/LayoutStartPanel.css.js.map +0 -1
  98. package/cjs/placeholder/LayoutStartPanel.js +0 -56
  99. package/cjs/placeholder/LayoutStartPanel.js.map +0 -1
  100. package/cjs/placeholder/Placeholder.css.js +0 -6
  101. package/cjs/placeholder/Placeholder.css.js.map +0 -1
  102. package/cjs/placeholder/Placeholder.js +0 -34
  103. package/cjs/placeholder/Placeholder.js.map +0 -1
  104. package/cjs/responsive/useResizeObserver.js +0 -118
  105. package/cjs/responsive/useResizeObserver.js.map +0 -1
  106. package/cjs/responsive/utils.js +0 -34
  107. package/cjs/responsive/utils.js.map +0 -1
  108. package/cjs/stack/Stack.css.js +0 -6
  109. package/cjs/stack/Stack.css.js.map +0 -1
  110. package/cjs/stack/Stack.js +0 -150
  111. package/cjs/stack/Stack.js.map +0 -1
  112. package/cjs/stack/StackLayout.js +0 -118
  113. package/cjs/stack/StackLayout.js.map +0 -1
  114. package/cjs/use-persistent-state.js +0 -112
  115. package/cjs/use-persistent-state.js.map +0 -1
  116. package/cjs/utils/pathUtils.js +0 -293
  117. package/cjs/utils/pathUtils.js.map +0 -1
  118. package/cjs/utils/propUtils.js +0 -27
  119. package/cjs/utils/propUtils.js.map +0 -1
  120. package/cjs/utils/refUtils.js +0 -12
  121. package/cjs/utils/refUtils.js.map +0 -1
  122. package/cjs/utils/styleUtils.js +0 -15
  123. package/cjs/utils/styleUtils.js.map +0 -1
  124. package/cjs/utils/typeOf.js +0 -27
  125. package/cjs/utils/typeOf.js.map +0 -1
  126. package/esm/Component.js +0 -12
  127. package/esm/Component.js.map +0 -1
  128. package/esm/LayoutContainer.css.js +0 -4
  129. package/esm/LayoutContainer.css.js.map +0 -1
  130. package/esm/LayoutContainer.js +0 -31
  131. package/esm/LayoutContainer.js.map +0 -1
  132. package/esm/dock-layout/DockLayout.css.js +0 -4
  133. package/esm/dock-layout/DockLayout.css.js.map +0 -1
  134. package/esm/dock-layout/DockLayout.js +0 -39
  135. package/esm/dock-layout/DockLayout.js.map +0 -1
  136. package/esm/dock-layout/Drawer.css.js +0 -4
  137. package/esm/dock-layout/Drawer.css.js.map +0 -1
  138. package/esm/dock-layout/Drawer.js +0 -93
  139. package/esm/dock-layout/Drawer.js.map +0 -1
  140. package/esm/drag-drop/BoxModel.js +0 -409
  141. package/esm/drag-drop/BoxModel.js.map +0 -1
  142. package/esm/drag-drop/DragState.js +0 -159
  143. package/esm/drag-drop/DragState.js.map +0 -1
  144. package/esm/drag-drop/Draggable.js +0 -190
  145. package/esm/drag-drop/Draggable.js.map +0 -1
  146. package/esm/drag-drop/DropTarget.js +0 -253
  147. package/esm/drag-drop/DropTarget.js.map +0 -1
  148. package/esm/drag-drop/DropTargetRenderer.js +0 -216
  149. package/esm/drag-drop/DropTargetRenderer.js.map +0 -1
  150. package/esm/flexbox/Flexbox.css.js +0 -4
  151. package/esm/flexbox/Flexbox.css.js.map +0 -1
  152. package/esm/flexbox/Flexbox.js +0 -67
  153. package/esm/flexbox/Flexbox.js.map +0 -1
  154. package/esm/flexbox/FlexboxLayout.js +0 -28
  155. package/esm/flexbox/FlexboxLayout.js.map +0 -1
  156. package/esm/flexbox/Splitter.css.js +0 -4
  157. package/esm/flexbox/Splitter.css.js.map +0 -1
  158. package/esm/flexbox/Splitter.js +0 -120
  159. package/esm/flexbox/Splitter.js.map +0 -1
  160. package/esm/flexbox/flexbox-utils.js +0 -89
  161. package/esm/flexbox/flexbox-utils.js.map +0 -1
  162. package/esm/flexbox/useSplitterResizing.js +0 -196
  163. package/esm/flexbox/useSplitterResizing.js.map +0 -1
  164. package/esm/layout-action.js +0 -22
  165. package/esm/layout-action.js.map +0 -1
  166. package/esm/layout-header/Header.css.js +0 -4
  167. package/esm/layout-header/Header.css.js.map +0 -1
  168. package/esm/layout-header/Header.js +0 -150
  169. package/esm/layout-header/Header.js.map +0 -1
  170. package/esm/layout-header/useHeader.js +0 -84
  171. package/esm/layout-header/useHeader.js.map +0 -1
  172. package/esm/layout-provider/LayoutProvider.js +0 -299
  173. package/esm/layout-provider/LayoutProvider.js.map +0 -1
  174. package/esm/layout-provider/LayoutProviderContext.js +0 -20
  175. package/esm/layout-provider/LayoutProviderContext.js.map +0 -1
  176. package/esm/layout-provider/useLayoutDragDrop.js +0 -175
  177. package/esm/layout-provider/useLayoutDragDrop.js.map +0 -1
  178. package/esm/layout-reducer/flexUtils.js +0 -218
  179. package/esm/layout-reducer/flexUtils.js.map +0 -1
  180. package/esm/layout-reducer/insert-layout-element.js +0 -282
  181. package/esm/layout-reducer/insert-layout-element.js.map +0 -1
  182. package/esm/layout-reducer/layout-reducer.js +0 -200
  183. package/esm/layout-reducer/layout-reducer.js.map +0 -1
  184. package/esm/layout-reducer/layoutTypes.js +0 -36
  185. package/esm/layout-reducer/layoutTypes.js.map +0 -1
  186. package/esm/layout-reducer/layoutUtils.js +0 -226
  187. package/esm/layout-reducer/layoutUtils.js.map +0 -1
  188. package/esm/layout-reducer/move-layout-element.js +0 -29
  189. package/esm/layout-reducer/move-layout-element.js.map +0 -1
  190. package/esm/layout-reducer/remove-layout-element.js +0 -235
  191. package/esm/layout-reducer/remove-layout-element.js.map +0 -1
  192. package/esm/layout-reducer/replace-layout-element.js +0 -92
  193. package/esm/layout-reducer/replace-layout-element.js.map +0 -1
  194. package/esm/layout-reducer/resize-flex-children.js +0 -59
  195. package/esm/layout-reducer/resize-flex-children.js.map +0 -1
  196. package/esm/layout-reducer/wrap-layout-element.js +0 -209
  197. package/esm/layout-reducer/wrap-layout-element.js.map +0 -1
  198. package/esm/layout-view/View.css.js +0 -4
  199. package/esm/layout-view/View.css.js.map +0 -1
  200. package/esm/layout-view/View.js +0 -165
  201. package/esm/layout-view/View.js.map +0 -1
  202. package/esm/layout-view/useView.js +0 -89
  203. package/esm/layout-view/useView.js.map +0 -1
  204. package/esm/layout-view/useViewBroadcastChannel.js +0 -33
  205. package/esm/layout-view/useViewBroadcastChannel.js.map +0 -1
  206. package/esm/layout-view/useViewResize.js +0 -40
  207. package/esm/layout-view/useViewResize.js.map +0 -1
  208. package/esm/layout-view-actions/ViewContext.js +0 -12
  209. package/esm/layout-view-actions/ViewContext.js.map +0 -1
  210. package/esm/layout-view-actions/useViewActionDispatcher.js +0 -127
  211. package/esm/layout-view-actions/useViewActionDispatcher.js.map +0 -1
  212. package/esm/palette/Palette.css.js +0 -4
  213. package/esm/palette/Palette.css.js.map +0 -1
  214. package/esm/palette/Palette.js +0 -129
  215. package/esm/palette/Palette.js.map +0 -1
  216. package/esm/placeholder/LayoutStartPanel.css.js +0 -4
  217. package/esm/placeholder/LayoutStartPanel.css.js.map +0 -1
  218. package/esm/placeholder/LayoutStartPanel.js +0 -54
  219. package/esm/placeholder/LayoutStartPanel.js.map +0 -1
  220. package/esm/placeholder/Placeholder.css.js +0 -4
  221. package/esm/placeholder/Placeholder.css.js.map +0 -1
  222. package/esm/placeholder/Placeholder.js +0 -32
  223. package/esm/placeholder/Placeholder.js.map +0 -1
  224. package/esm/responsive/useResizeObserver.js +0 -112
  225. package/esm/responsive/useResizeObserver.js.map +0 -1
  226. package/esm/responsive/utils.js +0 -31
  227. package/esm/responsive/utils.js.map +0 -1
  228. package/esm/stack/Stack.css.js +0 -4
  229. package/esm/stack/Stack.css.js.map +0 -1
  230. package/esm/stack/Stack.js +0 -148
  231. package/esm/stack/Stack.js.map +0 -1
  232. package/esm/stack/StackLayout.js +0 -116
  233. package/esm/stack/StackLayout.js.map +0 -1
  234. package/esm/use-persistent-state.js +0 -107
  235. package/esm/use-persistent-state.js.map +0 -1
  236. package/esm/utils/pathUtils.js +0 -280
  237. package/esm/utils/pathUtils.js.map +0 -1
  238. package/esm/utils/propUtils.js +0 -23
  239. package/esm/utils/propUtils.js.map +0 -1
  240. package/esm/utils/refUtils.js +0 -10
  241. package/esm/utils/refUtils.js.map +0 -1
  242. package/esm/utils/styleUtils.js +0 -13
  243. package/esm/utils/styleUtils.js.map +0 -1
  244. package/esm/utils/typeOf.js +0 -23
  245. 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":["../../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":["../../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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"}