@vuu-ui/vuu-layout 0.0.26

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 (359) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -0
  3. package/cjs/Component.js +14 -0
  4. package/cjs/Component.js.map +1 -0
  5. package/cjs/DraggableLayout.css.js +6 -0
  6. package/cjs/DraggableLayout.css.js.map +1 -0
  7. package/cjs/DraggableLayout.js +33 -0
  8. package/cjs/DraggableLayout.js.map +1 -0
  9. package/cjs/dock-layout/DockLayout.css.js +6 -0
  10. package/cjs/dock-layout/DockLayout.css.js.map +1 -0
  11. package/cjs/dock-layout/DockLayout.js +36 -0
  12. package/cjs/dock-layout/DockLayout.js.map +1 -0
  13. package/cjs/dock-layout/Drawer.css.js +6 -0
  14. package/cjs/dock-layout/Drawer.css.js.map +1 -0
  15. package/cjs/dock-layout/Drawer.js +96 -0
  16. package/cjs/dock-layout/Drawer.js.map +1 -0
  17. package/cjs/drag-drop/BoxModel.js +422 -0
  18. package/cjs/drag-drop/BoxModel.js.map +1 -0
  19. package/cjs/drag-drop/DragState.js +154 -0
  20. package/cjs/drag-drop/DragState.js.map +1 -0
  21. package/cjs/drag-drop/Draggable.js +192 -0
  22. package/cjs/drag-drop/Draggable.js.map +1 -0
  23. package/cjs/drag-drop/DropMenu.css.js +6 -0
  24. package/cjs/drag-drop/DropMenu.css.js.map +1 -0
  25. package/cjs/drag-drop/DropMenu.js +55 -0
  26. package/cjs/drag-drop/DropMenu.js.map +1 -0
  27. package/cjs/drag-drop/DropTarget.js +244 -0
  28. package/cjs/drag-drop/DropTarget.js.map +1 -0
  29. package/cjs/drag-drop/DropTargetRenderer.js +244 -0
  30. package/cjs/drag-drop/DropTargetRenderer.js.map +1 -0
  31. package/cjs/flexbox/Flexbox.css.js +6 -0
  32. package/cjs/flexbox/Flexbox.css.js.map +1 -0
  33. package/cjs/flexbox/Flexbox.js +70 -0
  34. package/cjs/flexbox/Flexbox.js.map +1 -0
  35. package/cjs/flexbox/FlexboxLayout.js +30 -0
  36. package/cjs/flexbox/FlexboxLayout.js.map +1 -0
  37. package/cjs/flexbox/FluidGrid.css.js +6 -0
  38. package/cjs/flexbox/FluidGrid.css.js.map +1 -0
  39. package/cjs/flexbox/FluidGrid.js +87 -0
  40. package/cjs/flexbox/FluidGrid.js.map +1 -0
  41. package/cjs/flexbox/FluidGridLayout.js +14 -0
  42. package/cjs/flexbox/FluidGridLayout.js.map +1 -0
  43. package/cjs/flexbox/Splitter.css.js +6 -0
  44. package/cjs/flexbox/Splitter.css.js.map +1 -0
  45. package/cjs/flexbox/Splitter.js +122 -0
  46. package/cjs/flexbox/Splitter.js.map +1 -0
  47. package/cjs/flexbox/flexbox-utils.js +109 -0
  48. package/cjs/flexbox/flexbox-utils.js.map +1 -0
  49. package/cjs/flexbox/useResponsiveSizing.js +62 -0
  50. package/cjs/flexbox/useResponsiveSizing.js.map +1 -0
  51. package/cjs/flexbox/useSplitterResizing.js +209 -0
  52. package/cjs/flexbox/useSplitterResizing.js.map +1 -0
  53. package/cjs/index.js +133 -0
  54. package/cjs/index.js.map +1 -0
  55. package/cjs/layout-action.js +27 -0
  56. package/cjs/layout-action.js.map +1 -0
  57. package/cjs/layout-header/Header.css.js +6 -0
  58. package/cjs/layout-header/Header.css.js.map +1 -0
  59. package/cjs/layout-header/Header.js +131 -0
  60. package/cjs/layout-header/Header.js.map +1 -0
  61. package/cjs/layout-provider/LayoutProvider.js +178 -0
  62. package/cjs/layout-provider/LayoutProvider.js.map +1 -0
  63. package/cjs/layout-provider/LayoutProviderContext.js +14 -0
  64. package/cjs/layout-provider/LayoutProviderContext.js.map +1 -0
  65. package/cjs/layout-provider/useLayoutDragDrop.js +172 -0
  66. package/cjs/layout-provider/useLayoutDragDrop.js.map +1 -0
  67. package/cjs/layout-reducer/flexUtils.js +219 -0
  68. package/cjs/layout-reducer/flexUtils.js.map +1 -0
  69. package/cjs/layout-reducer/insert-layout-element.js +273 -0
  70. package/cjs/layout-reducer/insert-layout-element.js.map +1 -0
  71. package/cjs/layout-reducer/layout-reducer.js +198 -0
  72. package/cjs/layout-reducer/layout-reducer.js.map +1 -0
  73. package/cjs/layout-reducer/layoutTypes.js +41 -0
  74. package/cjs/layout-reducer/layoutTypes.js.map +1 -0
  75. package/cjs/layout-reducer/layoutUtils.js +226 -0
  76. package/cjs/layout-reducer/layoutUtils.js.map +1 -0
  77. package/cjs/layout-reducer/move-layout-element.js +31 -0
  78. package/cjs/layout-reducer/move-layout-element.js.map +1 -0
  79. package/cjs/layout-reducer/remove-layout-element.js +223 -0
  80. package/cjs/layout-reducer/remove-layout-element.js.map +1 -0
  81. package/cjs/layout-reducer/replace-layout-element.js +91 -0
  82. package/cjs/layout-reducer/replace-layout-element.js.map +1 -0
  83. package/cjs/layout-reducer/resize-flex-children.js +61 -0
  84. package/cjs/layout-reducer/resize-flex-children.js.map +1 -0
  85. package/cjs/layout-reducer/wrap-layout-element.js +212 -0
  86. package/cjs/layout-reducer/wrap-layout-element.js.map +1 -0
  87. package/cjs/layout-view/View.css.js +6 -0
  88. package/cjs/layout-view/View.css.js.map +1 -0
  89. package/cjs/layout-view/View.js +164 -0
  90. package/cjs/layout-view/View.js.map +1 -0
  91. package/cjs/layout-view/useView.js +92 -0
  92. package/cjs/layout-view/useView.js.map +1 -0
  93. package/cjs/layout-view/useViewResize.js +42 -0
  94. package/cjs/layout-view/useViewResize.js.map +1 -0
  95. package/cjs/layout-view-actions/ViewContext.js +16 -0
  96. package/cjs/layout-view-actions/ViewContext.js.map +1 -0
  97. package/cjs/layout-view-actions/useViewActionDispatcher.js +103 -0
  98. package/cjs/layout-view-actions/useViewActionDispatcher.js.map +1 -0
  99. package/cjs/palette/Palette.css.js +6 -0
  100. package/cjs/palette/Palette.css.js.map +1 -0
  101. package/cjs/palette/Palette.js +127 -0
  102. package/cjs/palette/Palette.js.map +1 -0
  103. package/cjs/placeholder/LayoutStartPanel.css.js +6 -0
  104. package/cjs/placeholder/LayoutStartPanel.css.js.map +1 -0
  105. package/cjs/placeholder/LayoutStartPanel.js +60 -0
  106. package/cjs/placeholder/LayoutStartPanel.js.map +1 -0
  107. package/cjs/placeholder/Placeholder.css.js +6 -0
  108. package/cjs/placeholder/Placeholder.css.js.map +1 -0
  109. package/cjs/placeholder/Placeholder.js +34 -0
  110. package/cjs/placeholder/Placeholder.js.map +1 -0
  111. package/cjs/registry/ComponentRegistry.js +27 -0
  112. package/cjs/registry/ComponentRegistry.js.map +1 -0
  113. package/cjs/responsive/breakpoints.js +36 -0
  114. package/cjs/responsive/breakpoints.js.map +1 -0
  115. package/cjs/responsive/use-breakpoints.js +76 -0
  116. package/cjs/responsive/use-breakpoints.js.map +1 -0
  117. package/cjs/responsive/useResizeObserver.js +118 -0
  118. package/cjs/responsive/useResizeObserver.js.map +1 -0
  119. package/cjs/responsive/utils.js +34 -0
  120. package/cjs/responsive/utils.js.map +1 -0
  121. package/cjs/stack/Stack.css.js +6 -0
  122. package/cjs/stack/Stack.css.js.map +1 -0
  123. package/cjs/stack/Stack.js +148 -0
  124. package/cjs/stack/Stack.js.map +1 -0
  125. package/cjs/stack/StackLayout.js +122 -0
  126. package/cjs/stack/StackLayout.js.map +1 -0
  127. package/cjs/use-persistent-state.js +109 -0
  128. package/cjs/use-persistent-state.js.map +1 -0
  129. package/cjs/utils/pathUtils.js +293 -0
  130. package/cjs/utils/pathUtils.js.map +1 -0
  131. package/cjs/utils/propUtils.js +27 -0
  132. package/cjs/utils/propUtils.js.map +1 -0
  133. package/cjs/utils/refUtils.js +12 -0
  134. package/cjs/utils/refUtils.js.map +1 -0
  135. package/cjs/utils/styleUtils.js +15 -0
  136. package/cjs/utils/styleUtils.js.map +1 -0
  137. package/cjs/utils/typeOf.js +27 -0
  138. package/cjs/utils/typeOf.js.map +1 -0
  139. package/esm/Component.js +12 -0
  140. package/esm/Component.js.map +1 -0
  141. package/esm/DraggableLayout.css.js +4 -0
  142. package/esm/DraggableLayout.css.js.map +1 -0
  143. package/esm/DraggableLayout.js +31 -0
  144. package/esm/DraggableLayout.js.map +1 -0
  145. package/esm/dock-layout/DockLayout.css.js +4 -0
  146. package/esm/dock-layout/DockLayout.css.js.map +1 -0
  147. package/esm/dock-layout/DockLayout.js +34 -0
  148. package/esm/dock-layout/DockLayout.js.map +1 -0
  149. package/esm/dock-layout/Drawer.css.js +4 -0
  150. package/esm/dock-layout/Drawer.css.js.map +1 -0
  151. package/esm/dock-layout/Drawer.js +94 -0
  152. package/esm/dock-layout/Drawer.js.map +1 -0
  153. package/esm/drag-drop/BoxModel.js +415 -0
  154. package/esm/drag-drop/BoxModel.js.map +1 -0
  155. package/esm/drag-drop/DragState.js +152 -0
  156. package/esm/drag-drop/DragState.js.map +1 -0
  157. package/esm/drag-drop/Draggable.js +190 -0
  158. package/esm/drag-drop/Draggable.js.map +1 -0
  159. package/esm/drag-drop/DropMenu.css.js +4 -0
  160. package/esm/drag-drop/DropMenu.css.js.map +1 -0
  161. package/esm/drag-drop/DropMenu.js +52 -0
  162. package/esm/drag-drop/DropMenu.js.map +1 -0
  163. package/esm/drag-drop/DropTarget.js +240 -0
  164. package/esm/drag-drop/DropTarget.js.map +1 -0
  165. package/esm/drag-drop/DropTargetRenderer.js +242 -0
  166. package/esm/drag-drop/DropTargetRenderer.js.map +1 -0
  167. package/esm/flexbox/Flexbox.css.js +4 -0
  168. package/esm/flexbox/Flexbox.css.js.map +1 -0
  169. package/esm/flexbox/Flexbox.js +68 -0
  170. package/esm/flexbox/Flexbox.js.map +1 -0
  171. package/esm/flexbox/FlexboxLayout.js +28 -0
  172. package/esm/flexbox/FlexboxLayout.js.map +1 -0
  173. package/esm/flexbox/FluidGrid.css.js +4 -0
  174. package/esm/flexbox/FluidGrid.css.js.map +1 -0
  175. package/esm/flexbox/FluidGrid.js +85 -0
  176. package/esm/flexbox/FluidGrid.js.map +1 -0
  177. package/esm/flexbox/FluidGridLayout.js +12 -0
  178. package/esm/flexbox/FluidGridLayout.js.map +1 -0
  179. package/esm/flexbox/Splitter.css.js +4 -0
  180. package/esm/flexbox/Splitter.css.js.map +1 -0
  181. package/esm/flexbox/Splitter.js +120 -0
  182. package/esm/flexbox/Splitter.js.map +1 -0
  183. package/esm/flexbox/flexbox-utils.js +103 -0
  184. package/esm/flexbox/flexbox-utils.js.map +1 -0
  185. package/esm/flexbox/useResponsiveSizing.js +60 -0
  186. package/esm/flexbox/useResponsiveSizing.js.map +1 -0
  187. package/esm/flexbox/useSplitterResizing.js +207 -0
  188. package/esm/flexbox/useSplitterResizing.js.map +1 -0
  189. package/esm/index.js +37 -0
  190. package/esm/index.js.map +1 -0
  191. package/esm/layout-action.js +25 -0
  192. package/esm/layout-action.js.map +1 -0
  193. package/esm/layout-header/Header.css.js +4 -0
  194. package/esm/layout-header/Header.css.js.map +1 -0
  195. package/esm/layout-header/Header.js +129 -0
  196. package/esm/layout-header/Header.js.map +1 -0
  197. package/esm/layout-provider/LayoutProvider.js +172 -0
  198. package/esm/layout-provider/LayoutProvider.js.map +1 -0
  199. package/esm/layout-provider/LayoutProviderContext.js +12 -0
  200. package/esm/layout-provider/LayoutProviderContext.js.map +1 -0
  201. package/esm/layout-provider/useLayoutDragDrop.js +170 -0
  202. package/esm/layout-provider/useLayoutDragDrop.js.map +1 -0
  203. package/esm/layout-reducer/flexUtils.js +210 -0
  204. package/esm/layout-reducer/flexUtils.js.map +1 -0
  205. package/esm/layout-reducer/insert-layout-element.js +269 -0
  206. package/esm/layout-reducer/insert-layout-element.js.map +1 -0
  207. package/esm/layout-reducer/layout-reducer.js +196 -0
  208. package/esm/layout-reducer/layout-reducer.js.map +1 -0
  209. package/esm/layout-reducer/layoutTypes.js +37 -0
  210. package/esm/layout-reducer/layoutTypes.js.map +1 -0
  211. package/esm/layout-reducer/layoutUtils.js +215 -0
  212. package/esm/layout-reducer/layoutUtils.js.map +1 -0
  213. package/esm/layout-reducer/move-layout-element.js +29 -0
  214. package/esm/layout-reducer/move-layout-element.js.map +1 -0
  215. package/esm/layout-reducer/remove-layout-element.js +221 -0
  216. package/esm/layout-reducer/remove-layout-element.js.map +1 -0
  217. package/esm/layout-reducer/replace-layout-element.js +87 -0
  218. package/esm/layout-reducer/replace-layout-element.js.map +1 -0
  219. package/esm/layout-reducer/resize-flex-children.js +58 -0
  220. package/esm/layout-reducer/resize-flex-children.js.map +1 -0
  221. package/esm/layout-reducer/wrap-layout-element.js +210 -0
  222. package/esm/layout-reducer/wrap-layout-element.js.map +1 -0
  223. package/esm/layout-view/View.css.js +4 -0
  224. package/esm/layout-view/View.css.js.map +1 -0
  225. package/esm/layout-view/View.js +162 -0
  226. package/esm/layout-view/View.js.map +1 -0
  227. package/esm/layout-view/useView.js +90 -0
  228. package/esm/layout-view/useView.js.map +1 -0
  229. package/esm/layout-view/useViewResize.js +40 -0
  230. package/esm/layout-view/useViewResize.js.map +1 -0
  231. package/esm/layout-view-actions/ViewContext.js +12 -0
  232. package/esm/layout-view-actions/ViewContext.js.map +1 -0
  233. package/esm/layout-view-actions/useViewActionDispatcher.js +101 -0
  234. package/esm/layout-view-actions/useViewActionDispatcher.js.map +1 -0
  235. package/esm/palette/Palette.css.js +4 -0
  236. package/esm/palette/Palette.css.js.map +1 -0
  237. package/esm/palette/Palette.js +124 -0
  238. package/esm/palette/Palette.js.map +1 -0
  239. package/esm/placeholder/LayoutStartPanel.css.js +4 -0
  240. package/esm/placeholder/LayoutStartPanel.css.js.map +1 -0
  241. package/esm/placeholder/LayoutStartPanel.js +58 -0
  242. package/esm/placeholder/LayoutStartPanel.js.map +1 -0
  243. package/esm/placeholder/Placeholder.css.js +4 -0
  244. package/esm/placeholder/Placeholder.css.js.map +1 -0
  245. package/esm/placeholder/Placeholder.js +32 -0
  246. package/esm/placeholder/Placeholder.js.map +1 -0
  247. package/esm/registry/ComponentRegistry.js +21 -0
  248. package/esm/registry/ComponentRegistry.js.map +1 -0
  249. package/esm/responsive/breakpoints.js +33 -0
  250. package/esm/responsive/breakpoints.js.map +1 -0
  251. package/esm/responsive/use-breakpoints.js +74 -0
  252. package/esm/responsive/use-breakpoints.js.map +1 -0
  253. package/esm/responsive/useResizeObserver.js +112 -0
  254. package/esm/responsive/useResizeObserver.js.map +1 -0
  255. package/esm/responsive/utils.js +31 -0
  256. package/esm/responsive/utils.js.map +1 -0
  257. package/esm/stack/Stack.css.js +4 -0
  258. package/esm/stack/Stack.css.js.map +1 -0
  259. package/esm/stack/Stack.js +146 -0
  260. package/esm/stack/Stack.js.map +1 -0
  261. package/esm/stack/StackLayout.js +120 -0
  262. package/esm/stack/StackLayout.js.map +1 -0
  263. package/esm/use-persistent-state.js +104 -0
  264. package/esm/use-persistent-state.js.map +1 -0
  265. package/esm/utils/pathUtils.js +280 -0
  266. package/esm/utils/pathUtils.js.map +1 -0
  267. package/esm/utils/propUtils.js +23 -0
  268. package/esm/utils/propUtils.js.map +1 -0
  269. package/esm/utils/refUtils.js +10 -0
  270. package/esm/utils/refUtils.js.map +1 -0
  271. package/esm/utils/styleUtils.js +13 -0
  272. package/esm/utils/styleUtils.js.map +1 -0
  273. package/esm/utils/typeOf.js +23 -0
  274. package/esm/utils/typeOf.js.map +1 -0
  275. package/package.json +43 -0
  276. package/types/Component.d.ts +7 -0
  277. package/types/DraggableLayout.d.ts +6 -0
  278. package/types/debug.d.ts +2 -0
  279. package/types/dock-layout/DockLayout.d.ts +9 -0
  280. package/types/dock-layout/Drawer.d.ts +17 -0
  281. package/types/dock-layout/index.d.ts +2 -0
  282. package/types/drag-drop/BoxModel.d.ts +143 -0
  283. package/types/drag-drop/DragState.d.ts +46 -0
  284. package/types/drag-drop/Draggable.d.ts +24 -0
  285. package/types/drag-drop/DropMenu.d.ts +9 -0
  286. package/types/drag-drop/DropTarget.d.ts +61 -0
  287. package/types/drag-drop/DropTargetRenderer.d.ts +17 -0
  288. package/types/drag-drop/dragDropTypes.d.ts +51 -0
  289. package/types/drag-drop/index.d.ts +4 -0
  290. package/types/flexbox/Flexbox.d.ts +4 -0
  291. package/types/flexbox/FlexboxLayout.d.ts +6 -0
  292. package/types/flexbox/FluidGrid.d.ts +6 -0
  293. package/types/flexbox/FluidGridLayout.d.ts +6 -0
  294. package/types/flexbox/Splitter.d.ts +12 -0
  295. package/types/flexbox/flexbox-utils.d.ts +12 -0
  296. package/types/flexbox/flexboxTypes.d.ts +51 -0
  297. package/types/flexbox/index.d.ts +4 -0
  298. package/types/flexbox/useResponsiveSizing.d.ts +10 -0
  299. package/types/flexbox/useSplitterResizing.d.ts +2 -0
  300. package/types/index.d.ts +18 -0
  301. package/types/layout-action.d.ts +22 -0
  302. package/types/layout-header/ActionButton.d.ts +8 -0
  303. package/types/layout-header/Header.d.ts +12 -0
  304. package/types/layout-header/index.d.ts +1 -0
  305. package/types/layout-provider/LayoutProvider.d.ts +15 -0
  306. package/types/layout-provider/LayoutProviderContext.d.ts +9 -0
  307. package/types/layout-provider/index.d.ts +2 -0
  308. package/types/layout-provider/useLayoutDragDrop.d.ts +4 -0
  309. package/types/layout-reducer/flexUtils.d.ts +22 -0
  310. package/types/layout-reducer/index.d.ts +4 -0
  311. package/types/layout-reducer/insert-layout-element.d.ts +8 -0
  312. package/types/layout-reducer/layout-reducer.d.ts +3 -0
  313. package/types/layout-reducer/layoutTypes.d.ts +193 -0
  314. package/types/layout-reducer/layoutUtils.d.ts +38 -0
  315. package/types/layout-reducer/move-layout-element.d.ts +3 -0
  316. package/types/layout-reducer/remove-layout-element.d.ts +3 -0
  317. package/types/layout-reducer/replace-layout-element.d.ts +6 -0
  318. package/types/layout-reducer/resize-flex-children.d.ts +4 -0
  319. package/types/layout-reducer/wrap-layout-element.d.ts +9 -0
  320. package/types/layout-view/View.d.ts +10 -0
  321. package/types/layout-view/index.d.ts +2 -0
  322. package/types/layout-view/useView.d.ts +21 -0
  323. package/types/layout-view/useViewResize.d.ts +7 -0
  324. package/types/layout-view/viewTypes.d.ts +21 -0
  325. package/types/layout-view-actions/ViewContext.d.ts +33 -0
  326. package/types/layout-view-actions/index.d.ts +2 -0
  327. package/types/layout-view-actions/useViewActionDispatcher.d.ts +9 -0
  328. package/types/palette/Palette.d.ts +21 -0
  329. package/types/palette/index.d.ts +1 -0
  330. package/types/placeholder/LayoutStartPanel.d.ts +5 -0
  331. package/types/placeholder/Placeholder.d.ts +17 -0
  332. package/types/placeholder/index.d.ts +1 -0
  333. package/types/registry/ComponentRegistry.d.ts +13 -0
  334. package/types/registry/index.d.ts +1 -0
  335. package/types/responsive/breakpoints.d.ts +4 -0
  336. package/types/responsive/index.d.ts +3 -0
  337. package/types/responsive/measureMinimumNodeSize.d.ts +1 -0
  338. package/types/responsive/overflowUtils.d.ts +2 -0
  339. package/types/responsive/use-breakpoints.d.ts +7 -0
  340. package/types/responsive/useResizeObserver.d.ts +13 -0
  341. package/types/responsive/utils.d.ts +6 -0
  342. package/types/stack/Stack.d.ts +3 -0
  343. package/types/stack/StackLayout.d.ts +6 -0
  344. package/types/stack/index.d.ts +3 -0
  345. package/types/stack/stackTypes.d.ts +22 -0
  346. package/types/tabs/TabPanel.d.ts +7 -0
  347. package/types/tabs/index.d.ts +1 -0
  348. package/types/tools/config-wrapper/ConfigWrapper.d.ts +2 -0
  349. package/types/tools/config-wrapper/index.d.ts +1 -0
  350. package/types/tools/devtools-box/layout-configurator.d.ts +31 -0
  351. package/types/tools/devtools-tree/layout-tree-viewer.d.ts +5 -0
  352. package/types/tools/index.d.ts +3 -0
  353. package/types/use-persistent-state.d.ts +11 -0
  354. package/types/utils/index.d.ts +5 -0
  355. package/types/utils/pathUtils.d.ts +31 -0
  356. package/types/utils/propUtils.d.ts +5 -0
  357. package/types/utils/refUtils.d.ts +2 -0
  358. package/types/utils/styleUtils.d.ts +3 -0
  359. package/types/utils/typeOf.d.ts +5 -0
@@ -0,0 +1,172 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var Draggable = require('../drag-drop/Draggable.js');
5
+ require('react/jsx-runtime');
6
+ require('clsx');
7
+ require('@salt-ds/styles');
8
+ require('@salt-ds/window');
9
+ var pathUtils = require('../utils/pathUtils.js');
10
+ require('../drag-drop/BoxModel.js');
11
+ var flexUtils = require('../layout-reducer/flexUtils.js');
12
+
13
+ const NO_INSTRUCTIONS = {};
14
+ const NO_OFFSETS = [0, 0];
15
+ const getDragElement = (rect, id, dragElement) => {
16
+ const wrapper = document.createElement("div");
17
+ wrapper.className = "vuuSimpleDraggableWrapper";
18
+ wrapper.classList.add(
19
+ "vuuSimpleDraggableWrapper",
20
+ "salt-theme",
21
+ "salt-density-medium"
22
+ );
23
+ wrapper.dataset.dragging = "true";
24
+ const div = dragElement ?? document.createElement("div");
25
+ div.id = id;
26
+ wrapper.appendChild(div);
27
+ document.body.appendChild(wrapper);
28
+ const cssText = `top:${rect.top}px;left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`;
29
+ return [wrapper, cssText, rect.left, rect.top];
30
+ };
31
+ const determineDragOffsets = (draggedElement) => {
32
+ const { offsetParent } = draggedElement;
33
+ if (offsetParent === null) {
34
+ return NO_OFFSETS;
35
+ } else {
36
+ const { left: offsetLeft, top: offsetTop } = offsetParent.getBoundingClientRect();
37
+ return [offsetLeft, offsetTop];
38
+ }
39
+ };
40
+ const useLayoutDragDrop = (rootLayoutRef, dispatch, pathToDropTarget) => {
41
+ const dragActionRef = React.useRef();
42
+ const dragOperationRef = React.useRef();
43
+ const draggableHTMLElementRef = React.useRef();
44
+ const handleDrag = React.useCallback((x, y) => {
45
+ if (dragOperationRef.current && draggableHTMLElementRef.current) {
46
+ const {
47
+ dragOffsets: [offsetX, offsetY],
48
+ targetPosition
49
+ } = dragOperationRef.current;
50
+ const left = typeof x === "number" ? x - offsetX : targetPosition.left;
51
+ const top = typeof y === "number" ? y - offsetY : targetPosition.top;
52
+ if (left !== targetPosition.left || top !== targetPosition.top) {
53
+ dragOperationRef.current.targetPosition.left = left;
54
+ dragOperationRef.current.targetPosition.top = top;
55
+ draggableHTMLElementRef.current.style.top = top + "px";
56
+ draggableHTMLElementRef.current.style.left = left + "px";
57
+ }
58
+ }
59
+ }, []);
60
+ const handleDrop = React.useCallback(
61
+ (dropTarget) => {
62
+ if (dragOperationRef.current) {
63
+ const {
64
+ dragInstructions,
65
+ payload: draggedReactElement,
66
+ originalCSS
67
+ } = dragOperationRef.current;
68
+ if (dropTarget) {
69
+ dispatch({
70
+ type: "drag-drop",
71
+ draggedReactElement,
72
+ dragInstructions,
73
+ dropTarget
74
+ });
75
+ }
76
+ if (draggableHTMLElementRef.current) {
77
+ if (!dropTarget && dragInstructions.DriftHomeIfNoDropTarget) {
78
+ console.log("drift back to start");
79
+ document.body.removeChild(draggableHTMLElementRef.current);
80
+ } else if (dragInstructions.RemoveDraggableOnDragEnd) {
81
+ document.body.removeChild(draggableHTMLElementRef.current);
82
+ } else {
83
+ draggableHTMLElementRef.current.style.cssText = originalCSS;
84
+ delete draggableHTMLElementRef.current.dataset.dragging;
85
+ }
86
+ }
87
+ dragActionRef.current = void 0;
88
+ dragOperationRef.current = void 0;
89
+ draggableHTMLElementRef.current = void 0;
90
+ }
91
+ },
92
+ [dispatch]
93
+ );
94
+ const handleDragStart = React.useCallback(
95
+ (evt) => {
96
+ if (dragActionRef.current) {
97
+ const {
98
+ payload: component,
99
+ dragContainerPath,
100
+ dragElement,
101
+ dragRect,
102
+ instructions = NO_INSTRUCTIONS,
103
+ path
104
+ } = dragActionRef.current;
105
+ const { current: rootLayout } = rootLayoutRef;
106
+ const dragPos = { x: evt.clientX, y: evt.clientY };
107
+ const dragPayload = component ?? pathUtils.followPath(rootLayout, path, true);
108
+ const { id: dragPayloadId } = dragPayload.props;
109
+ const intrinsicSize = flexUtils.getIntrinsicSize(dragPayload);
110
+ let originalCSS = "", dragCSS = "", dragTransform = "";
111
+ let dragStartLeft = -1;
112
+ let dragStartTop = -1;
113
+ let dragOffsets = NO_OFFSETS;
114
+ let element = document.getElementById(dragPayloadId);
115
+ if (element === null) {
116
+ [element, dragCSS, dragStartLeft, dragStartTop] = getDragElement(
117
+ dragRect,
118
+ dragPayloadId,
119
+ dragElement
120
+ );
121
+ } else {
122
+ dragOffsets = determineDragOffsets(element);
123
+ const [offsetLeft, offsetTop] = dragOffsets;
124
+ const { width, height, left, top } = element.getBoundingClientRect();
125
+ dragStartLeft = left - offsetLeft;
126
+ dragStartTop = top - offsetTop;
127
+ dragCSS = `width:${width}px;height:${height}px;left:${dragStartLeft}px;top:${dragStartTop}px;z-index: 100;background-color:#ccc;opacity: 0.6;`;
128
+ element.dataset.dragging = "true";
129
+ originalCSS = element.style.cssText;
130
+ }
131
+ dragTransform = Draggable.Draggable.initDrag(
132
+ rootLayoutRef.current,
133
+ dragContainerPath,
134
+ dragRect,
135
+ dragPos,
136
+ {
137
+ drag: handleDrag,
138
+ drop: handleDrop
139
+ },
140
+ intrinsicSize
141
+ // dropTargets
142
+ );
143
+ element.style.cssText = dragCSS + dragTransform;
144
+ draggableHTMLElementRef.current = element;
145
+ dragOperationRef.current = {
146
+ payload: dragPayload,
147
+ originalCSS,
148
+ dragRect,
149
+ dragOffsets,
150
+ dragInstructions: instructions,
151
+ targetPosition: { left: dragStartLeft, top: dragStartTop }
152
+ };
153
+ }
154
+ },
155
+ [handleDrag, handleDrop, rootLayoutRef]
156
+ );
157
+ const prepareToDrag = React.useCallback(
158
+ (action) => {
159
+ const { evt, ...options } = action;
160
+ dragActionRef.current = {
161
+ ...options,
162
+ dragContainerPath: pathUtils.resolvePath(rootLayoutRef.current, pathToDropTarget)
163
+ };
164
+ Draggable.Draggable.handleMousedown(evt, handleDragStart, options.instructions);
165
+ },
166
+ [handleDragStart, pathToDropTarget, rootLayoutRef]
167
+ );
168
+ return prepareToDrag;
169
+ };
170
+
171
+ exports.useLayoutDragDrop = useLayoutDragDrop;
172
+ //# sourceMappingURL=useLayoutDragDrop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLayoutDragDrop.js","sources":["../../src/layout-provider/useLayoutDragDrop.ts"],"sourcesContent":["import { MutableRefObject, ReactElement, useCallback, useRef } from \"react\";\nimport {\n DragDropRect,\n DragEndCallback,\n Draggable,\n DragInstructions,\n} from \"../drag-drop\";\nimport { DragStartAction } from \"../layout-reducer\";\nimport { getIntrinsicSize } from \"../layout-reducer/flexUtils\";\nimport { followPath, resolvePath } from \"../utils\";\nimport { LayoutProviderDispatch } from \"./LayoutProviderContext\";\n\nconst NO_INSTRUCTIONS = {} as DragInstructions;\nconst NO_OFFSETS: [number, number] = [0, 0];\n\ninterface CurrentDragAction extends Omit<DragStartAction, \"evt\" | \"type\"> {\n dragContainerPath: string;\n}\n\ninterface DragOperation {\n payload: ReactElement;\n originalCSS: string;\n dragRect: unknown;\n dragInstructions: DragInstructions;\n dragOffsets: [number, number];\n targetPosition: { left: number; top: number };\n}\n\nconst getDragElement = (\n rect: DragDropRect,\n id: string,\n dragElement?: HTMLElement\n): [HTMLElement, string, number, number] => {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"vuuSimpleDraggableWrapper\";\n wrapper.classList.add(\n \"vuuSimpleDraggableWrapper\",\n \"salt-theme\",\n \"salt-density-medium\"\n );\n wrapper.dataset.dragging = \"true\";\n\n const div = dragElement ?? document.createElement(\"div\");\n div.id = id;\n\n wrapper.appendChild(div);\n document.body.appendChild(wrapper);\n const cssText = `top:${rect.top}px;left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`;\n return [wrapper, cssText, rect.left, rect.top];\n};\n\nconst determineDragOffsets = (\n draggedElement: HTMLElement\n): [number, number] => {\n const { offsetParent } = draggedElement;\n if (offsetParent === null) {\n return NO_OFFSETS;\n } else {\n const { left: offsetLeft, top: offsetTop } =\n offsetParent.getBoundingClientRect();\n return [offsetLeft, offsetTop];\n }\n};\n\nexport const useLayoutDragDrop = (\n rootLayoutRef: MutableRefObject<ReactElement>,\n dispatch: LayoutProviderDispatch,\n pathToDropTarget?: string\n) => {\n const dragActionRef = useRef<CurrentDragAction>();\n const dragOperationRef = useRef<DragOperation>();\n const draggableHTMLElementRef = useRef<HTMLElement>();\n\n const handleDrag = useCallback((x, y) => {\n if (dragOperationRef.current && draggableHTMLElementRef.current) {\n const {\n dragOffsets: [offsetX, offsetY],\n targetPosition,\n } = dragOperationRef.current;\n const left = typeof x === \"number\" ? x - offsetX : targetPosition.left;\n const top = typeof y === \"number\" ? y - offsetY : targetPosition.top;\n if (left !== targetPosition.left || top !== targetPosition.top) {\n dragOperationRef.current.targetPosition.left = left;\n dragOperationRef.current.targetPosition.top = top;\n draggableHTMLElementRef.current.style.top = top + \"px\";\n draggableHTMLElementRef.current.style.left = left + \"px\";\n }\n }\n }, []);\n\n const handleDrop: DragEndCallback = useCallback(\n (dropTarget) => {\n if (dragOperationRef.current) {\n const {\n dragInstructions,\n payload: draggedReactElement,\n originalCSS,\n } = dragOperationRef.current;\n\n if (dropTarget) {\n dispatch({\n type: \"drag-drop\",\n draggedReactElement,\n dragInstructions,\n dropTarget,\n });\n }\n\n if (draggableHTMLElementRef.current) {\n if (!dropTarget && dragInstructions.DriftHomeIfNoDropTarget) {\n console.log(\"drift back to start\");\n document.body.removeChild(draggableHTMLElementRef.current);\n } else if (dragInstructions.RemoveDraggableOnDragEnd) {\n document.body.removeChild(draggableHTMLElementRef.current);\n } else {\n draggableHTMLElementRef.current.style.cssText = originalCSS;\n delete draggableHTMLElementRef.current.dataset.dragging;\n }\n }\n\n dragActionRef.current = undefined;\n dragOperationRef.current = undefined;\n draggableHTMLElementRef.current = undefined;\n }\n },\n [dispatch]\n );\n\n const handleDragStart = useCallback(\n (evt: MouseEvent) => {\n if (dragActionRef.current) {\n const {\n payload: component,\n dragContainerPath,\n dragElement,\n dragRect,\n instructions = NO_INSTRUCTIONS,\n path,\n } = dragActionRef.current;\n const { current: rootLayout } = rootLayoutRef;\n const dragPos = { x: evt.clientX, y: evt.clientY };\n const dragPayload = component ?? followPath(rootLayout, path, true);\n const { id: dragPayloadId } = dragPayload.props;\n const intrinsicSize = getIntrinsicSize(dragPayload);\n let originalCSS = \"\",\n dragCSS = \"\",\n dragTransform = \"\";\n\n let dragStartLeft = -1;\n let dragStartTop = -1;\n let dragOffsets: [number, number] = NO_OFFSETS;\n\n let element = document.getElementById(dragPayloadId);\n\n if (element === null) {\n [element, dragCSS, dragStartLeft, dragStartTop] = getDragElement(\n dragRect,\n dragPayloadId,\n dragElement\n );\n } else {\n dragOffsets = determineDragOffsets(element);\n const [offsetLeft, offsetTop] = dragOffsets;\n const { width, height, left, top } = element.getBoundingClientRect();\n dragStartLeft = left - offsetLeft;\n dragStartTop = top - offsetTop;\n dragCSS = `width:${width}px;height:${height}px;left:${dragStartLeft}px;top:${dragStartTop}px;z-index: 100;background-color:#ccc;opacity: 0.6;`;\n element.dataset.dragging = \"true\";\n originalCSS = element.style.cssText;\n }\n\n dragTransform = Draggable.initDrag(\n rootLayoutRef.current,\n dragContainerPath,\n dragRect,\n dragPos,\n {\n drag: handleDrag,\n drop: handleDrop,\n },\n intrinsicSize\n // dropTargets\n );\n\n element.style.cssText = dragCSS + dragTransform;\n draggableHTMLElementRef.current = element;\n\n dragOperationRef.current = {\n payload: dragPayload,\n originalCSS,\n dragRect,\n dragOffsets,\n dragInstructions: instructions,\n targetPosition: { left: dragStartLeft, top: dragStartTop },\n };\n }\n },\n [handleDrag, handleDrop, rootLayoutRef]\n );\n\n const prepareToDrag = useCallback(\n (action: DragStartAction) => {\n const { evt, ...options } = action;\n dragActionRef.current = {\n ...options,\n dragContainerPath: resolvePath(rootLayoutRef.current, pathToDropTarget),\n };\n Draggable.handleMousedown(evt, handleDragStart, options.instructions);\n },\n [handleDragStart, pathToDropTarget, rootLayoutRef]\n );\n\n return prepareToDrag;\n};\n"],"names":["useRef","useCallback","followPath","getIntrinsicSize","Draggable","resolvePath"],"mappings":"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"}
@@ -0,0 +1,219 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+ var React = require('react');
5
+ var ComponentRegistry = require('../registry/ComponentRegistry.js');
6
+ var pathUtils = require('../utils/pathUtils.js');
7
+ var propUtils = require('../utils/propUtils.js');
8
+
9
+ const placeHolderProps = { "data-placeholder": true, "data-resizeable": true };
10
+ const NO_STYLE = {};
11
+ const auto = "auto";
12
+ const defaultFlexStyle = {
13
+ flexBasis: 0,
14
+ flexGrow: 1,
15
+ flexShrink: 1,
16
+ height: auto,
17
+ width: auto
18
+ };
19
+ const CROSS_DIMENSION = {
20
+ height: "width",
21
+ width: "height"
22
+ };
23
+ const getFlexDimensions = (flexDirection = "row") => {
24
+ if (flexDirection === "row") {
25
+ return ["width", "height", "column"];
26
+ } else {
27
+ return ["height", "width", "row"];
28
+ }
29
+ };
30
+ const isPercentageSize = (value) => typeof value === "string" && value.endsWith("%");
31
+ const getIntrinsicSize = (component) => {
32
+ const { style: { width = auto, height = auto } = NO_STYLE } = component.props;
33
+ const numHeight = typeof height === "number";
34
+ const numWidth = typeof width === "number";
35
+ if (numHeight && numWidth) {
36
+ return { height, width };
37
+ } else if (numHeight) {
38
+ return { height };
39
+ } else if (numWidth) {
40
+ return { width };
41
+ } else {
42
+ return void 0;
43
+ }
44
+ };
45
+ function getFlexStyle(component, dimension2, pos) {
46
+ const crossDimension = CROSS_DIMENSION[dimension2];
47
+ const {
48
+ style: {
49
+ [crossDimension]: intrinsicCrossSize = auto,
50
+ ...intrinsicStyles
51
+ } = NO_STYLE
52
+ } = component.props;
53
+ if (pos && pos[dimension2]) {
54
+ return {
55
+ ...intrinsicStyles,
56
+ ...defaultFlexStyle,
57
+ flexBasis: pos[dimension2],
58
+ flexGrow: 0,
59
+ flexShrink: 0
60
+ };
61
+ } else {
62
+ return {
63
+ ...intrinsicStyles,
64
+ ...defaultFlexStyle,
65
+ [crossDimension]: intrinsicCrossSize
66
+ };
67
+ }
68
+ }
69
+ function hasUnboundedFlexStyle(component) {
70
+ const { style: { flex, flexGrow, flexShrink, flexBasis } = NO_STYLE } = component.props;
71
+ if (typeof flex === "number") {
72
+ return true;
73
+ }
74
+ if (flexBasis === 0 && flexGrow === 1 && flexShrink === 1) {
75
+ return true;
76
+ }
77
+ if (typeof flexBasis === "number") {
78
+ return false;
79
+ }
80
+ return true;
81
+ }
82
+ function getFlexOrIntrinsicStyle(component, dimension2, pos) {
83
+ const crossDimension = CROSS_DIMENSION[dimension2];
84
+ const {
85
+ style: {
86
+ [dimension2]: intrinsicSize = auto,
87
+ [crossDimension]: intrinsicCrossSize = auto,
88
+ ...intrinsicStyles
89
+ } = NO_STYLE
90
+ } = component.props;
91
+ if (intrinsicSize !== auto) {
92
+ if (isPercentageSize(intrinsicSize)) {
93
+ return {
94
+ flexBasis: 0,
95
+ flexGrow: 1,
96
+ flexShrink: 1,
97
+ [dimension2]: void 0,
98
+ [crossDimension]: intrinsicCrossSize
99
+ };
100
+ }
101
+ return {
102
+ flexBasis: intrinsicSize,
103
+ flexGrow: 0,
104
+ flexShrink: 0,
105
+ [dimension2]: intrinsicSize,
106
+ [crossDimension]: intrinsicCrossSize
107
+ };
108
+ }
109
+ if (pos && pos[dimension2]) {
110
+ return {
111
+ ...intrinsicStyles,
112
+ ...defaultFlexStyle,
113
+ flexBasis: pos[dimension2],
114
+ flexGrow: 0,
115
+ flexShrink: 0
116
+ };
117
+ }
118
+ return {
119
+ ...intrinsicStyles,
120
+ [crossDimension]: intrinsicCrossSize
121
+ };
122
+ }
123
+ function wrapIntrinsicSizeComponentWithFlexbox(component, flexDirection, path, clientRect, dropRect) {
124
+ const wrappedChildren = [];
125
+ let pathIndex = 0;
126
+ let endPlaceholder;
127
+ if (clientRect && dropRect) {
128
+ let startPlaceholder;
129
+ const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;
130
+ [startPlaceholder, endPlaceholder] = flexDirection === "column" ? [dropTop - clientRect.top, clientRect.bottom - dropBottom] : [dropLeft - clientRect.left, clientRect.right - dropRight];
131
+ if (startPlaceholder) {
132
+ wrappedChildren.push(
133
+ createPlaceHolder(`${path}.${pathIndex++}`, startPlaceholder, {
134
+ flexGrow: 0,
135
+ flexShrink: 0
136
+ })
137
+ );
138
+ }
139
+ } else {
140
+ endPlaceholder = true;
141
+ }
142
+ const { version = 0, style } = propUtils.getProps(component);
143
+ wrappedChildren.push(
144
+ pathUtils.resetPath(component, `${path}.${pathIndex++}`, {
145
+ version: version + 1,
146
+ style: {
147
+ ...style,
148
+ flexBasis: "auto",
149
+ flexGrow: 0,
150
+ flexShrink: 0
151
+ }
152
+ })
153
+ );
154
+ if (endPlaceholder) {
155
+ wrappedChildren.push(
156
+ createPlaceHolder(`${path}.${pathIndex++}`, 0, void 0, {
157
+ [`data-${flexDirection}-placeholder`]: true
158
+ })
159
+ );
160
+ }
161
+ return createFlexbox(
162
+ flexDirection,
163
+ { resizeable: false, style: { flexBasis: "auto" } },
164
+ wrappedChildren,
165
+ path
166
+ );
167
+ }
168
+ const getFlexValue = (flexBasis, flexFill) => {
169
+ if (flexFill) {
170
+ return void 0;
171
+ }
172
+ return flexBasis === 0 ? 1 : 0;
173
+ };
174
+ function createFlexbox(flexDirection, props, children, path) {
175
+ const id = vuuUtils.uuid();
176
+ const { flexFill, style, resizeable = true } = props;
177
+ const { flexBasis = flexFill ? void 0 : "auto" } = style;
178
+ const flex = getFlexValue(flexBasis, flexFill);
179
+ return React.createElement(
180
+ ComponentRegistry.ComponentRegistry.Flexbox,
181
+ {
182
+ id,
183
+ key: id,
184
+ path,
185
+ flexFill,
186
+ style: {
187
+ ...style,
188
+ flexDirection,
189
+ flexBasis,
190
+ flexGrow: flex,
191
+ flexShrink: flex
192
+ },
193
+ resizeable
194
+ },
195
+ children
196
+ );
197
+ }
198
+ const baseStyle = { flexGrow: 1, flexShrink: 1 };
199
+ function createPlaceHolder(path, size, style, props) {
200
+ const id = vuuUtils.uuid();
201
+ return React.createElement("div", {
202
+ ...placeHolderProps,
203
+ ...props,
204
+ "data-path": path,
205
+ id,
206
+ key: id,
207
+ style: { ...baseStyle, ...style, flexBasis: size }
208
+ });
209
+ }
210
+
211
+ exports.createFlexbox = createFlexbox;
212
+ exports.createPlaceHolder = createPlaceHolder;
213
+ exports.getFlexDimensions = getFlexDimensions;
214
+ exports.getFlexOrIntrinsicStyle = getFlexOrIntrinsicStyle;
215
+ exports.getFlexStyle = getFlexStyle;
216
+ exports.getIntrinsicSize = getIntrinsicSize;
217
+ exports.hasUnboundedFlexStyle = hasUnboundedFlexStyle;
218
+ exports.wrapIntrinsicSizeComponentWithFlexbox = wrapIntrinsicSizeComponentWithFlexbox;
219
+ //# sourceMappingURL=flexUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flexUtils.js","sources":["../../src/layout-reducer/flexUtils.ts"],"sourcesContent":["import { dimension, rect, rectTuple, uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { ComponentRegistry } from \"../registry/ComponentRegistry\";\nimport { getProps, resetPath } from \"../utils\";\nconst placeHolderProps = { \"data-placeholder\": true, \"data-resizeable\": true };\n\nconst NO_STYLE = {};\nconst auto = \"auto\";\nconst defaultFlexStyle = {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n height: auto,\n width: auto,\n};\n\nconst CROSS_DIMENSION = {\n height: \"width\",\n width: \"height\",\n};\n\nexport type flexDirection = \"row\" | \"column\";\n\ntype contraDimension = dimension;\ntype flexDimensionTuple = [dimension, contraDimension, flexDirection];\nexport type position = {\n height?: number;\n width?: number;\n};\n\nexport const getFlexDimensions = (flexDirection: flexDirection = \"row\") => {\n if (flexDirection === \"row\") {\n return [\"width\", \"height\", \"column\"] as flexDimensionTuple;\n } else {\n return [\"height\", \"width\", \"row\"] as flexDimensionTuple;\n }\n};\n\nconst isPercentageSize = (value: string | number) =>\n typeof value === \"string\" && value.endsWith(\"%\");\n\nexport const getIntrinsicSize = (\n component: ReactElement\n): { height?: number; width?: number } | undefined => {\n const { style: { width = auto, height = auto } = NO_STYLE } = component.props;\n\n const numHeight = typeof height === \"number\";\n const numWidth = typeof width === \"number\";\n\n if (numHeight && numWidth) {\n return { height, width };\n } else if (numHeight) {\n return { height };\n } else if (numWidth) {\n return { width };\n } else {\n return undefined;\n }\n};\n\nexport function getFlexStyle(\n component: ReactElement,\n dimension: dimension,\n pos?: DropPos\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n } = component.props;\n\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n } else {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n}\n\nexport function hasUnboundedFlexStyle(component: ReactElement) {\n const { style: { flex, flexGrow, flexShrink, flexBasis } = NO_STYLE } =\n component.props;\n if (typeof flex === \"number\") {\n return true;\n }\n if (flexBasis === 0 && flexGrow === 1 && flexShrink === 1) {\n return true;\n }\n if (typeof flexBasis === \"number\") {\n return false;\n }\n return true;\n}\n\nexport function getFlexOrIntrinsicStyle(\n component: ReactElement,\n dimension: dimension,\n pos: position\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [dimension]: intrinsicSize = auto,\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n } = component.props;\n\n if (intrinsicSize !== auto) {\n if (isPercentageSize(intrinsicSize)) {\n return {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n [dimension]: undefined,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n return {\n flexBasis: intrinsicSize,\n flexGrow: 0,\n flexShrink: 0,\n [dimension]: intrinsicSize,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n }\n return {\n ...intrinsicStyles,\n [crossDimension]: intrinsicCrossSize,\n };\n}\n\nexport function wrapIntrinsicSizeComponentWithFlexbox(\n component: ReactElement,\n flexDirection: flexDirection,\n path: string,\n clientRect?: rect,\n dropRect?: rectTuple\n) {\n const wrappedChildren = [];\n let pathIndex = 0;\n let endPlaceholder;\n\n if (clientRect && dropRect) {\n let startPlaceholder;\n const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;\n [startPlaceholder, endPlaceholder] =\n flexDirection === \"column\"\n ? [dropTop - clientRect.top, clientRect.bottom - dropBottom]\n : [dropLeft - clientRect.left, clientRect.right - dropRight];\n\n if (startPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, startPlaceholder, {\n flexGrow: 0,\n flexShrink: 0,\n })\n );\n }\n } else {\n endPlaceholder = true;\n }\n\n const { version = 0, style } = getProps(component);\n\n wrappedChildren.push(\n resetPath(component, `${path}.${pathIndex++}`, {\n version: version + 1,\n style: {\n ...style,\n flexBasis: \"auto\",\n flexGrow: 0,\n flexShrink: 0,\n },\n })\n );\n\n if (endPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, 0, undefined, {\n [`data-${flexDirection}-placeholder`]: true,\n })\n );\n }\n\n return createFlexbox(\n flexDirection,\n { resizeable: false, style: { flexBasis: \"auto\" } },\n wrappedChildren,\n path\n );\n}\n\nconst getFlexValue = (\n flexBasis: number,\n flexFill: boolean\n): number | undefined => {\n if (flexFill) {\n return undefined;\n }\n return flexBasis === 0 ? 1 : 0;\n};\n\nexport function createFlexbox(\n flexDirection: flexDirection,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props: any,\n children: ReactNode,\n path: string\n) {\n const id = uuid();\n const { flexFill, style, resizeable = true } = props;\n const { flexBasis = flexFill ? undefined : \"auto\" } = style;\n const flex = getFlexValue(flexBasis, flexFill);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return React.createElement<any>(\n ComponentRegistry.Flexbox,\n {\n id,\n key: id,\n path,\n flexFill,\n style: {\n ...style,\n flexDirection,\n flexBasis,\n flexGrow: flex,\n flexShrink: flex,\n },\n resizeable,\n },\n children\n );\n}\n\nconst baseStyle = { flexGrow: 1, flexShrink: 1 };\n\nexport function createPlaceHolder(\n path: string,\n size: number,\n style?: CSSProperties,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props?: any\n) {\n const id = uuid();\n return React.createElement(\"div\", {\n ...placeHolderProps,\n ...props,\n \"data-path\": path,\n id,\n key: id,\n style: { ...baseStyle, ...style, flexBasis: size },\n });\n}\n"],"names":["dimension","getProps","resetPath","uuid","ComponentRegistry"],"mappings":"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"}