@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,122 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var styles = require('@salt-ds/styles');
5
+ var window$1 = require('@salt-ds/window');
6
+ var cx = require('clsx');
7
+ var React = require('react');
8
+ var Splitter$1 = require('./Splitter.css.js');
9
+
10
+ const classBase = "vuuSplitter";
11
+ const Splitter = React.memo(function Splitter2({
12
+ column,
13
+ index,
14
+ onDrag,
15
+ onDragEnd,
16
+ onDragStart,
17
+ style
18
+ }) {
19
+ const targetWindow = window$1.useWindow();
20
+ styles.useComponentCssInjection({
21
+ testId: "vuu-splitter",
22
+ css: Splitter$1,
23
+ window: targetWindow
24
+ });
25
+ const ignoreClick = React.useRef();
26
+ const rootRef = React.useRef(null);
27
+ const lastPos = React.useRef(0);
28
+ const [active, setActive] = React.useState(false);
29
+ const handleKeyDownDrag = React.useCallback(
30
+ ({ key, shiftKey }) => {
31
+ const distance = shiftKey ? 10 : 1;
32
+ if (column && key === "ArrowDown") {
33
+ onDrag(index, distance);
34
+ } else if (column && key === "ArrowUp") {
35
+ onDrag(index, -distance);
36
+ } else if (!column && key === "ArrowLeft") {
37
+ onDrag(index, -distance);
38
+ } else if (!column && key === "ArrowRight") {
39
+ onDrag(index, distance);
40
+ }
41
+ },
42
+ [column, index, onDrag]
43
+ );
44
+ const handleKeyDownInitDrag = React.useCallback(
45
+ (evt) => {
46
+ const { key } = evt;
47
+ const horizontalMove = key === "ArrowLeft" || key === "ArrowRight";
48
+ const verticalMove = key === "ArrowUp" || key === "ArrowDown";
49
+ if (column && verticalMove || !column && horizontalMove) {
50
+ onDragStart(index);
51
+ handleKeyDownDrag(evt);
52
+ keyDownHandlerRef.current = handleKeyDownDrag;
53
+ }
54
+ },
55
+ [column, handleKeyDownDrag, index, onDragStart]
56
+ );
57
+ const keyDownHandlerRef = React.useRef(handleKeyDownInitDrag);
58
+ const handleKeyDown = (evt) => keyDownHandlerRef.current(evt);
59
+ const handleMouseMove = React.useCallback(
60
+ (e) => {
61
+ ignoreClick.current = true;
62
+ const pos = e[column ? "clientY" : "clientX"];
63
+ const diff = pos - lastPos.current;
64
+ if (pos && pos !== lastPos.current) {
65
+ onDrag(index, diff);
66
+ }
67
+ lastPos.current = pos;
68
+ },
69
+ [column, index, onDrag]
70
+ );
71
+ const handleMouseUp = React.useCallback(() => {
72
+ window.removeEventListener("mousemove", handleMouseMove, false);
73
+ window.removeEventListener("mouseup", handleMouseUp, false);
74
+ onDragEnd();
75
+ setActive(false);
76
+ rootRef.current?.focus();
77
+ }, [handleMouseMove, onDragEnd, setActive]);
78
+ const handleMouseDown = React.useCallback(
79
+ (e) => {
80
+ lastPos.current = column ? e.clientY : e.clientX;
81
+ onDragStart(index);
82
+ window.addEventListener("mousemove", handleMouseMove, false);
83
+ window.addEventListener("mouseup", handleMouseUp, false);
84
+ e.preventDefault();
85
+ setActive(true);
86
+ },
87
+ [column, handleMouseMove, handleMouseUp, index, onDragStart, setActive]
88
+ );
89
+ const handleClick = () => {
90
+ if (ignoreClick.current) {
91
+ ignoreClick.current = false;
92
+ } else {
93
+ rootRef.current?.focus();
94
+ }
95
+ };
96
+ const handleBlur = () => {
97
+ keyDownHandlerRef.current = handleKeyDownInitDrag;
98
+ };
99
+ const className = cx(classBase, {
100
+ [`${classBase}-active`]: active,
101
+ [`${classBase}-column`]: column
102
+ });
103
+ return /* @__PURE__ */ jsxRuntime.jsx(
104
+ "div",
105
+ {
106
+ className,
107
+ "data-splitter": true,
108
+ ref: rootRef,
109
+ role: "separator",
110
+ style,
111
+ onBlur: handleBlur,
112
+ onClick: handleClick,
113
+ onKeyDown: handleKeyDown,
114
+ onMouseDown: handleMouseDown,
115
+ tabIndex: 0,
116
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-grab-zone` })
117
+ }
118
+ );
119
+ });
120
+
121
+ exports.Splitter = Splitter;
122
+ //# sourceMappingURL=Splitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Splitter.js","sources":["../../src/flexbox/Splitter.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport React, {\n HTMLAttributes,\n KeyboardEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport splitterCss from \"./Splitter.css\";\n\nconst classBase = \"vuuSplitter\";\n\nexport type SplitterDragStartHandler = (index: number) => void;\nexport type SplitterDragHandler = (index: number, distance: number) => void;\nexport type SplitterDragEndHandler = () => void;\n\nexport interface SplitterProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onDrag\" | \"onDragStart\"> {\n //TODO change to alignment (vertical | horizontal)\n column: boolean;\n index: number;\n onDragStart: SplitterDragStartHandler;\n onDrag: SplitterDragHandler;\n onDragEnd: SplitterDragEndHandler;\n}\n\nexport const Splitter = React.memo(function Splitter({\n column,\n index,\n onDrag,\n onDragEnd,\n onDragStart,\n style,\n}: SplitterProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-splitter\",\n css: splitterCss,\n window: targetWindow,\n });\n\n const ignoreClick = useRef<boolean>();\n const rootRef = useRef<HTMLDivElement>(null);\n const lastPos = useRef<number>(0);\n\n const [active, setActive] = useState(false);\n\n const handleKeyDownDrag = useCallback(\n ({ key, shiftKey }) => {\n const distance = shiftKey ? 10 : 1;\n if (column && key === \"ArrowDown\") {\n onDrag(index, distance);\n } else if (column && key === \"ArrowUp\") {\n onDrag(index, -distance);\n } else if (!column && key === \"ArrowLeft\") {\n onDrag(index, -distance);\n } else if (!column && key === \"ArrowRight\") {\n onDrag(index, distance);\n }\n },\n [column, index, onDrag]\n );\n\n const handleKeyDownInitDrag = useCallback(\n (evt) => {\n const { key } = evt;\n const horizontalMove = key === \"ArrowLeft\" || key === \"ArrowRight\";\n const verticalMove = key === \"ArrowUp\" || key === \"ArrowDown\";\n if ((column && verticalMove) || (!column && horizontalMove)) {\n onDragStart(index);\n handleKeyDownDrag(evt);\n keyDownHandlerRef.current = handleKeyDownDrag;\n }\n },\n [column, handleKeyDownDrag, index, onDragStart]\n );\n\n const keyDownHandlerRef = useRef(handleKeyDownInitDrag);\n const handleKeyDown = (evt: KeyboardEvent) => keyDownHandlerRef.current(evt);\n\n const handleMouseMove = useCallback(\n (e) => {\n ignoreClick.current = true;\n const pos = e[column ? \"clientY\" : \"clientX\"];\n const diff = pos - lastPos.current;\n if (pos && pos !== lastPos.current) {\n onDrag(index, diff);\n }\n lastPos.current = pos;\n },\n [column, index, onDrag]\n );\n\n const handleMouseUp = useCallback(() => {\n window.removeEventListener(\"mousemove\", handleMouseMove, false);\n window.removeEventListener(\"mouseup\", handleMouseUp, false);\n onDragEnd();\n setActive(false);\n rootRef.current?.focus();\n }, [handleMouseMove, onDragEnd, setActive]);\n\n const handleMouseDown = useCallback(\n (e) => {\n lastPos.current = column ? e.clientY : e.clientX;\n onDragStart(index);\n window.addEventListener(\"mousemove\", handleMouseMove, false);\n window.addEventListener(\"mouseup\", handleMouseUp, false);\n e.preventDefault();\n setActive(true);\n },\n [column, handleMouseMove, handleMouseUp, index, onDragStart, setActive]\n );\n\n const handleClick = () => {\n if (ignoreClick.current) {\n ignoreClick.current = false;\n } else {\n rootRef.current?.focus();\n }\n };\n\n const handleBlur = () => {\n keyDownHandlerRef.current = handleKeyDownInitDrag;\n };\n\n const className = cx(classBase, {\n [`${classBase}-active`]: active,\n [`${classBase}-column`]: column,\n });\n return (\n <div\n className={className}\n data-splitter\n ref={rootRef}\n role=\"separator\"\n style={style}\n onBlur={handleBlur}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseDown={handleMouseDown}\n tabIndex={0}\n >\n <div className={`${classBase}-grab-zone`} />\n </div>\n );\n});\n"],"names":["Splitter","useWindow","useComponentCssInjection","splitterCss","useRef","useState","useCallback","jsx"],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ 'use strict';
2
+
3
+ var flexUtils = require('../layout-reducer/flexUtils.js');
4
+ require('react');
5
+ var propUtils = require('../utils/propUtils.js');
6
+
7
+ const NO_INTRINSIC_SIZE = {};
8
+ const SPLITTER = 1;
9
+ const PLACEHOLDER = 2;
10
+ const isIntrinsicallySized = (item) => typeof item.intrinsicSize === "number";
11
+ const getBreakPointValues = (breakPoints, component) => {
12
+ const values = {};
13
+ breakPoints.forEach((breakPoint) => {
14
+ values[breakPoint] = propUtils.getProp(component, breakPoint);
15
+ });
16
+ return values;
17
+ };
18
+ const gatherChildMeta = (children, dimension, breakPoints) => {
19
+ return children.map((child, index) => {
20
+ const resizeable = propUtils.getProp(child, "resizeable");
21
+ const { [dimension]: intrinsicSize } = flexUtils.getIntrinsicSize(child) ?? NO_INTRINSIC_SIZE;
22
+ const flexOpen = flexUtils.hasUnboundedFlexStyle(child);
23
+ if (breakPoints) {
24
+ return {
25
+ index,
26
+ flexOpen,
27
+ intrinsicSize,
28
+ resizeable,
29
+ ...getBreakPointValues(breakPoints, child)
30
+ };
31
+ } else {
32
+ return { index, flexOpen, intrinsicSize, resizeable };
33
+ }
34
+ });
35
+ };
36
+ const findSplitterAndPlaceholderPositions = (childMeta) => {
37
+ const count = childMeta.length;
38
+ const allIntrinsic = childMeta.every(isIntrinsicallySized);
39
+ const splitterPositions = Array(count).fill(0);
40
+ if (allIntrinsic && count > 0) {
41
+ splitterPositions[0] = PLACEHOLDER;
42
+ splitterPositions[count - 1] = PLACEHOLDER;
43
+ }
44
+ if (count < 2) {
45
+ return splitterPositions;
46
+ } else {
47
+ for (let i = 0, resizeablesLeft = 0; i < count - 1; i++) {
48
+ if (childMeta[i].resizeable && !resizeablesLeft) {
49
+ resizeablesLeft = SPLITTER;
50
+ }
51
+ splitterPositions[i] += resizeablesLeft;
52
+ }
53
+ for (let i = count - 1; i > 0; i--) {
54
+ if (splitterPositions[i] & SPLITTER) {
55
+ splitterPositions[i] -= SPLITTER;
56
+ }
57
+ if (childMeta[i].resizeable) {
58
+ break;
59
+ }
60
+ }
61
+ return splitterPositions;
62
+ }
63
+ };
64
+ const identifyResizeParties = (contentMeta, idx) => {
65
+ const idx1 = getLeadingResizeablePos(contentMeta, idx);
66
+ const idx2 = getTrailingResizeablePos(contentMeta, idx);
67
+ const participants = idx1 !== -1 && idx2 !== -1 ? [idx1, idx2] : void 0;
68
+ const bystanders = identifyResizeBystanders(contentMeta, participants);
69
+ return [participants, bystanders];
70
+ };
71
+ function identifyResizeBystanders(contentMeta, participants) {
72
+ if (participants) {
73
+ const bystanders = [];
74
+ for (let i = 0; i < contentMeta.length; i++) {
75
+ if (contentMeta[i].flexOpen && !participants.includes(i)) {
76
+ bystanders.push(i);
77
+ }
78
+ }
79
+ return bystanders;
80
+ }
81
+ }
82
+ function getLeadingResizeablePos(contentMeta, idx) {
83
+ let pos = idx, resizeable = false;
84
+ while (pos >= 1 && !resizeable) {
85
+ pos = pos - 1;
86
+ resizeable = isResizeable(contentMeta, pos);
87
+ }
88
+ return pos;
89
+ }
90
+ function getTrailingResizeablePos(contentMeta, idx) {
91
+ let pos = idx, resizeable = false;
92
+ const count = contentMeta.length;
93
+ while (pos < count - 1 && !resizeable) {
94
+ pos = pos + 1;
95
+ resizeable = isResizeable(contentMeta, pos);
96
+ }
97
+ return pos === count ? -1 : pos;
98
+ }
99
+ function isResizeable(contentMeta, idx) {
100
+ const { placeholder, splitter, resizeable, intrinsicSize } = contentMeta[idx];
101
+ return Boolean(!splitter && !intrinsicSize && (placeholder || resizeable));
102
+ }
103
+
104
+ exports.PLACEHOLDER = PLACEHOLDER;
105
+ exports.SPLITTER = SPLITTER;
106
+ exports.findSplitterAndPlaceholderPositions = findSplitterAndPlaceholderPositions;
107
+ exports.gatherChildMeta = gatherChildMeta;
108
+ exports.identifyResizeParties = identifyResizeParties;
109
+ //# sourceMappingURL=flexbox-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flexbox-utils.js","sources":["../../src/flexbox/flexbox-utils.ts"],"sourcesContent":["import { ReactElement } from \"react\";\nimport {\n getIntrinsicSize,\n hasUnboundedFlexStyle,\n} from \"../layout-reducer/flexUtils\";\nimport { getProp } from \"../utils\";\nimport type { BreakPoint, ContentMeta } from \"./flexboxTypes\";\n\nconst NO_INTRINSIC_SIZE: {\n height?: number;\n width?: number;\n} = {};\n\nexport const SPLITTER = 1;\nexport const PLACEHOLDER = 2;\n\nconst isIntrinsicallySized = (item: ContentMeta) =>\n typeof item.intrinsicSize === \"number\";\n\nconst getBreakPointValues = (\n breakPoints: BreakPoint[],\n component: ReactElement\n) => {\n const values: { [key: string]: number | undefined } = {};\n breakPoints.forEach((breakPoint) => {\n values[breakPoint] = getProp(component, breakPoint);\n });\n return values;\n};\n\nexport const gatherChildMeta = (\n children: ReactElement[],\n dimension: \"width\" | \"height\",\n breakPoints?: BreakPoint[]\n) => {\n return children.map((child, index) => {\n const resizeable = getProp(child, \"resizeable\");\n const { [dimension]: intrinsicSize } =\n getIntrinsicSize(child) ?? NO_INTRINSIC_SIZE;\n const flexOpen = hasUnboundedFlexStyle(child);\n if (breakPoints) {\n return {\n index,\n flexOpen,\n intrinsicSize,\n resizeable,\n ...getBreakPointValues(breakPoints, child),\n };\n } else {\n return { index, flexOpen, intrinsicSize, resizeable };\n }\n });\n};\n\n// Splitters are inserted AFTER the associated index, so\n// never a splitter in last position.\n// Placeholder goes before (first) OR after(last) index\nexport const findSplitterAndPlaceholderPositions = (\n childMeta: ContentMeta[]\n) => {\n const count = childMeta.length;\n const allIntrinsic = childMeta.every(isIntrinsicallySized);\n const splitterPositions = Array(count).fill(0);\n if (allIntrinsic && count > 0) {\n splitterPositions[0] = PLACEHOLDER;\n splitterPositions[count - 1] = PLACEHOLDER;\n }\n if (count < 2) {\n return splitterPositions;\n } else {\n // 1) From the left, check each item.\n // Once we hit a resizable item, set this index and all subsequent indices,\n // except for last, to SPLITTER\n for (let i = 0, resizeablesLeft = 0; i < count - 1; i++) {\n if (childMeta[i].resizeable && !resizeablesLeft) {\n resizeablesLeft = SPLITTER;\n }\n splitterPositions[i] += resizeablesLeft;\n }\n // 2) Now check from the right. Undo splitter insertion until we reach a point\n // where there is a resizeable to our right.\n for (let i = count - 1; i > 0; i--) {\n if (splitterPositions[i] & SPLITTER) {\n splitterPositions[i] -= SPLITTER;\n }\n if (childMeta[i].resizeable) {\n break;\n }\n }\n return splitterPositions;\n }\n};\n\nexport const identifyResizeParties = (\n contentMeta: ContentMeta[],\n idx: number\n) => {\n const idx1 = getLeadingResizeablePos(contentMeta, idx);\n const idx2 = getTrailingResizeablePos(contentMeta, idx);\n const participants = idx1 !== -1 && idx2 !== -1 ? [idx1, idx2] : undefined;\n const bystanders = identifyResizeBystanders(contentMeta, participants);\n return [participants, bystanders];\n};\n\nfunction identifyResizeBystanders(\n contentMeta: ContentMeta[],\n participants?: number[]\n) {\n if (participants) {\n const bystanders = [];\n for (let i = 0; i < contentMeta.length; i++) {\n if (contentMeta[i].flexOpen && !participants.includes(i)) {\n bystanders.push(i);\n }\n }\n return bystanders;\n }\n}\n\nfunction getLeadingResizeablePos(contentMeta: ContentMeta[], idx: number) {\n let pos = idx,\n resizeable = false;\n while (pos >= 1 && !resizeable) {\n pos = pos - 1;\n resizeable = isResizeable(contentMeta, pos);\n }\n return pos;\n}\n\nfunction getTrailingResizeablePos(contentMeta: ContentMeta[], idx: number) {\n let pos = idx,\n resizeable = false;\n const count = contentMeta.length;\n while (pos < count - 1 && !resizeable) {\n pos = pos + 1;\n resizeable = isResizeable(contentMeta, pos);\n }\n return pos === count ? -1 : pos;\n}\n\nfunction isResizeable(contentMeta: ContentMeta[], idx: number): boolean {\n const { placeholder, splitter, resizeable, intrinsicSize } = contentMeta[idx];\n return Boolean(!splitter && !intrinsicSize && (placeholder || resizeable));\n}\n"],"names":["getProp","getIntrinsicSize","hasUnboundedFlexStyle"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+ var React = require('react');
5
+ var flexboxUtils = require('./flexbox-utils.js');
6
+
7
+ const breakPoints = ["xs", "sm", "md", "lg", "xl"];
8
+ const DEFAULT_COLS = 12;
9
+ const useResponsiveSizing = ({
10
+ children: childrenProp,
11
+ cols: colsProp,
12
+ style
13
+ }) => {
14
+ const rootRef = React.useRef(null);
15
+ const metaRef = React.useRef(null);
16
+ const contentRef = React.useRef();
17
+ const cols = colsProp ?? DEFAULT_COLS;
18
+ const isColumn = style?.flexDirection === "column";
19
+ const dimension = isColumn ? "height" : "width";
20
+ const children = React.useMemo(
21
+ () => Array.isArray(childrenProp) ? childrenProp : React.isValidElement(childrenProp) ? [childrenProp] : [],
22
+ [childrenProp]
23
+ );
24
+ const buildContent = React.useCallback(
25
+ (children2, dimension2) => {
26
+ const childMeta = flexboxUtils.gatherChildMeta(children2, dimension2, breakPoints);
27
+ const content = [];
28
+ const meta = [];
29
+ for (let i = 0; i < children2.length; i++) {
30
+ const child = children2[i];
31
+ const {
32
+ style: { flex, ...rest }
33
+ } = child.props;
34
+ content.push(
35
+ React.cloneElement(child, {
36
+ key: vuuUtils.getUniqueId(),
37
+ style: {
38
+ ...rest,
39
+ "--parent-col-count": cols
40
+ }
41
+ })
42
+ );
43
+ meta.push(childMeta[i]);
44
+ }
45
+ return [content, meta];
46
+ },
47
+ [cols]
48
+ );
49
+ React.useMemo(() => {
50
+ const [content, meta] = buildContent(children, dimension);
51
+ metaRef.current = meta;
52
+ contentRef.current = content;
53
+ }, [buildContent, children, dimension]);
54
+ return {
55
+ cols,
56
+ content: contentRef.current,
57
+ rootRef
58
+ };
59
+ };
60
+
61
+ exports.useResponsiveSizing = useResponsiveSizing;
62
+ //# sourceMappingURL=useResponsiveSizing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResponsiveSizing.js","sources":["../../src/flexbox/useResponsiveSizing.ts"],"sourcesContent":["import { getUniqueId } from \"@vuu-ui/vuu-utils\";\nimport {\n cloneElement,\n CSSProperties,\n isValidElement,\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { gatherChildMeta } from \"./flexbox-utils\";\nimport { BreakPoint } from \"./flexboxTypes\";\n\nconst breakPoints: BreakPoint[] = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"];\n\nconst DEFAULT_COLS = 12;\n\nexport const useResponsiveSizing = ({\n children: childrenProp,\n cols: colsProp,\n style,\n}: {\n children: ReactElement[];\n cols?: number;\n style?: CSSProperties;\n}) => {\n const rootRef = useRef(null);\n const metaRef = useRef(null);\n const contentRef = useRef<ReactElement[]>();\n const cols = colsProp ?? DEFAULT_COLS;\n\n const isColumn = style?.flexDirection === \"column\";\n const dimension = isColumn ? \"height\" : \"width\";\n\n const children = useMemo(\n () =>\n Array.isArray(childrenProp)\n ? childrenProp\n : isValidElement(childrenProp)\n ? [childrenProp]\n : [],\n [childrenProp]\n );\n\n const buildContent = useCallback(\n (children, dimension): [ReactElement[], any] => {\n const childMeta = gatherChildMeta(children, dimension, breakPoints);\n const content = [];\n const meta = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const {\n style: { flex, ...rest },\n } = child.props;\n content.push(\n cloneElement(child, {\n key: getUniqueId(),\n style: {\n ...rest,\n \"--parent-col-count\": cols,\n },\n })\n );\n meta.push(childMeta[i]);\n }\n return [content, meta];\n },\n [cols]\n );\n\n useMemo(() => {\n const [content, meta] = buildContent(children, dimension);\n metaRef.current = meta;\n contentRef.current = content;\n }, [buildContent, children, dimension]);\n\n return {\n cols,\n content: contentRef.current,\n rootRef,\n };\n};\n"],"names":["useRef","useMemo","isValidElement","useCallback","children","dimension","gatherChildMeta","cloneElement","getUniqueId"],"mappings":";;;;;;AAaA,MAAM,cAA4B,CAAC,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAI,CAAA,CAAA;AAE/D,MAAM,YAAe,GAAA,EAAA,CAAA;AAEd,MAAM,sBAAsB,CAAC;AAAA,EAClC,QAAU,EAAA,YAAA;AAAA,EACV,IAAM,EAAA,QAAA;AAAA,EACN,KAAA;AACF,CAIM,KAAA;AACJ,EAAM,MAAA,OAAA,GAAUA,aAAO,IAAI,CAAA,CAAA;AAC3B,EAAM,MAAA,OAAA,GAAUA,aAAO,IAAI,CAAA,CAAA;AAC3B,EAAA,MAAM,aAAaA,YAAuB,EAAA,CAAA;AAC1C,EAAA,MAAM,OAAO,QAAY,IAAA,YAAA,CAAA;AAEzB,EAAM,MAAA,QAAA,GAAW,OAAO,aAAkB,KAAA,QAAA,CAAA;AAC1C,EAAM,MAAA,SAAA,GAAY,WAAW,QAAW,GAAA,OAAA,CAAA;AAExC,EAAA,MAAM,QAAW,GAAAC,aAAA;AAAA,IACf,MACE,KAAA,CAAM,OAAQ,CAAA,YAAY,CACtB,GAAA,YAAA,GACAC,oBAAe,CAAA,YAAY,CAC3B,GAAA,CAAC,YAAY,CAAA,GACb,EAAC;AAAA,IACP,CAAC,YAAY,CAAA;AAAA,GACf,CAAA;AAEA,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IACnB,CAACC,WAAUC,UAAqC,KAAA;AAC9C,MAAA,MAAM,SAAY,GAAAC,4BAAA,CAAgBF,SAAUC,EAAAA,UAAAA,EAAW,WAAW,CAAA,CAAA;AAClE,MAAA,MAAM,UAAU,EAAC,CAAA;AACjB,MAAA,MAAM,OAAO,EAAC,CAAA;AACd,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAID,GAAAA,SAAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACxC,QAAM,MAAA,KAAA,GAAQA,UAAS,CAAC,CAAA,CAAA;AACxB,QAAM,MAAA;AAAA,UACJ,KAAO,EAAA,EAAE,IAAM,EAAA,GAAG,IAAK,EAAA;AAAA,YACrB,KAAM,CAAA,KAAA,CAAA;AACV,QAAQ,OAAA,CAAA,IAAA;AAAA,UACNG,mBAAa,KAAO,EAAA;AAAA,YAClB,KAAKC,oBAAY,EAAA;AAAA,YACjB,KAAO,EAAA;AAAA,cACL,GAAG,IAAA;AAAA,cACH,oBAAsB,EAAA,IAAA;AAAA,aACxB;AAAA,WACD,CAAA;AAAA,SACH,CAAA;AACA,QAAK,IAAA,CAAA,IAAA,CAAK,SAAU,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,OACxB;AACA,MAAO,OAAA,CAAC,SAAS,IAAI,CAAA,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,IAAI,CAAA;AAAA,GACP,CAAA;AAEA,EAAAP,aAAA,CAAQ,MAAM;AACZ,IAAA,MAAM,CAAC,OAAS,EAAA,IAAI,CAAI,GAAA,YAAA,CAAa,UAAU,SAAS,CAAA,CAAA;AACxD,IAAA,OAAA,CAAQ,OAAU,GAAA,IAAA,CAAA;AAClB,IAAA,UAAA,CAAW,OAAU,GAAA,OAAA,CAAA;AAAA,GACpB,EAAA,CAAC,YAAc,EAAA,QAAA,EAAU,SAAS,CAAC,CAAA,CAAA;AAEtC,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,SAAS,UAAW,CAAA,OAAA;AAAA,IACpB,OAAA;AAAA,GACF,CAAA;AACF;;;;"}
@@ -0,0 +1,209 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+ var React = require('react');
5
+ var Placeholder = require('../placeholder/Placeholder.js');
6
+ var Splitter = require('./Splitter.js');
7
+ var flexboxUtils = require('./flexbox-utils.js');
8
+
9
+ const originalContentOnly = (meta) => !meta.splitter && !meta.placeholder;
10
+ const useSplitterResizing = ({
11
+ children: childrenProp,
12
+ onSplitterMoved,
13
+ style
14
+ }) => {
15
+ const rootRef = React.useRef(null);
16
+ const metaRef = React.useRef();
17
+ const contentRef = React.useRef();
18
+ const assignedKeys = React.useRef([]);
19
+ const [, forceUpdate] = React.useState({});
20
+ const setContent = (content) => {
21
+ contentRef.current = content;
22
+ forceUpdate({});
23
+ };
24
+ const isColumn = style?.flexDirection === "column";
25
+ const dimension = isColumn ? "height" : "width";
26
+ const children = React.useMemo(
27
+ () => Array.isArray(childrenProp) ? childrenProp : React.isValidElement(childrenProp) ? [childrenProp] : [],
28
+ [childrenProp]
29
+ );
30
+ const handleDragStart = React.useCallback(
31
+ (index) => {
32
+ const { current: contentMeta } = metaRef;
33
+ if (contentMeta) {
34
+ const [participants, bystanders] = flexboxUtils.identifyResizeParties(
35
+ contentMeta,
36
+ index
37
+ );
38
+ if (participants) {
39
+ participants.forEach((index2) => {
40
+ const el = rootRef.current?.childNodes[index2];
41
+ if (el) {
42
+ const { size, minSize } = measureElement(el, dimension);
43
+ contentMeta[index2].currentSize = size;
44
+ contentMeta[index2].minSize = minSize;
45
+ }
46
+ });
47
+ if (bystanders) {
48
+ bystanders.forEach((index2) => {
49
+ const el = rootRef.current?.childNodes[index2];
50
+ if (el) {
51
+ const { [dimension]: size } = el.getBoundingClientRect();
52
+ contentMeta[index2].flexBasis = size;
53
+ }
54
+ });
55
+ }
56
+ }
57
+ }
58
+ },
59
+ [dimension]
60
+ );
61
+ const handleDrag = React.useCallback(
62
+ (idx, distance) => {
63
+ if (contentRef.current && metaRef.current) {
64
+ setContent(
65
+ resizeContent(
66
+ contentRef.current,
67
+ metaRef.current,
68
+ distance,
69
+ dimension
70
+ )
71
+ );
72
+ }
73
+ },
74
+ [dimension]
75
+ );
76
+ const handleDragEnd = React.useCallback(() => {
77
+ const contentMeta = metaRef.current;
78
+ if (contentMeta) {
79
+ onSplitterMoved?.(contentMeta.filter(originalContentOnly));
80
+ }
81
+ contentMeta?.forEach((meta) => {
82
+ meta.currentSize = void 0;
83
+ meta.flexBasis = void 0;
84
+ meta.flexOpen = false;
85
+ });
86
+ }, [onSplitterMoved]);
87
+ const createSplitter = React.useCallback(
88
+ (i) => {
89
+ return React.createElement(Splitter.Splitter, {
90
+ column: isColumn,
91
+ index: i,
92
+ key: `splitter-${i}`,
93
+ onDrag: handleDrag,
94
+ onDragEnd: handleDragEnd,
95
+ onDragStart: handleDragStart
96
+ });
97
+ },
98
+ [handleDrag, handleDragEnd, handleDragStart, isColumn]
99
+ );
100
+ React.useMemo(() => {
101
+ const [content, meta] = buildContent(
102
+ children,
103
+ dimension,
104
+ createSplitter,
105
+ assignedKeys.current
106
+ );
107
+ metaRef.current = meta;
108
+ contentRef.current = content;
109
+ }, [children, createSplitter, dimension]);
110
+ return {
111
+ content: contentRef.current || [],
112
+ rootRef
113
+ };
114
+ };
115
+ function buildContent(children, dimension, createSplitter, keys) {
116
+ const childMeta = flexboxUtils.gatherChildMeta(children, dimension);
117
+ const splitterAndPlaceholderPositions = flexboxUtils.findSplitterAndPlaceholderPositions(childMeta);
118
+ const content = [];
119
+ const meta = [];
120
+ for (let i = 0; i < children.length; i++) {
121
+ const child = children[i];
122
+ if (i === 0 && splitterAndPlaceholderPositions[i] & flexboxUtils.PLACEHOLDER) {
123
+ content.push(createPlaceholder(i));
124
+ meta.push({ placeholder: true, shim: true });
125
+ }
126
+ if (child.key == null) {
127
+ const key = keys[i] || (keys[i] = vuuUtils.getUniqueId());
128
+ content.push(React.cloneElement(child, { key }));
129
+ } else {
130
+ content.push(child);
131
+ }
132
+ meta.push(childMeta[i]);
133
+ if (i > 0 && splitterAndPlaceholderPositions[i] & flexboxUtils.PLACEHOLDER) {
134
+ content.push(createPlaceholder(i));
135
+ meta.push({ placeholder: true });
136
+ } else if (splitterAndPlaceholderPositions[i] & flexboxUtils.SPLITTER) {
137
+ content.push(createSplitter(content.length));
138
+ meta.push({ splitter: true });
139
+ }
140
+ }
141
+ return [content, meta];
142
+ }
143
+ function resizeContent(content, contentMeta, distance, dimension) {
144
+ const metaUpdated = updateMeta(contentMeta, distance);
145
+ if (!metaUpdated) {
146
+ return content;
147
+ }
148
+ return content.map((child, idx) => {
149
+ const meta = contentMeta[idx];
150
+ const { currentSize, flexOpen, flexBasis } = meta;
151
+ const hasCurrentSize = currentSize !== void 0;
152
+ if (hasCurrentSize || flexOpen) {
153
+ const { flexBasis: actualFlexBasis } = child.props.style || {};
154
+ const size = hasCurrentSize ? meta.currentSize : flexBasis;
155
+ if (size !== actualFlexBasis) {
156
+ return React.cloneElement(child, {
157
+ style: {
158
+ ...child.props.style,
159
+ flexBasis: size,
160
+ [dimension]: "auto"
161
+ }
162
+ });
163
+ } else {
164
+ return child;
165
+ }
166
+ } else {
167
+ return child;
168
+ }
169
+ });
170
+ }
171
+ function updateMeta(contentMeta, distance) {
172
+ const resizeTargets = [];
173
+ contentMeta.forEach((meta, idx) => {
174
+ if (meta.currentSize !== void 0) {
175
+ resizeTargets.push(idx);
176
+ }
177
+ });
178
+ const target1 = distance < 0 ? resizeTargets[0] : resizeTargets[1];
179
+ const { currentSize = 0, minSize = 0 } = contentMeta[target1];
180
+ if (currentSize === minSize) {
181
+ return false;
182
+ } else if (Math.abs(distance) > currentSize - minSize) {
183
+ const multiplier = distance < 0 ? -1 : 1;
184
+ distance = Math.max(0, currentSize - minSize) * multiplier;
185
+ }
186
+ const leadingItem = contentMeta[resizeTargets[0]];
187
+ const { currentSize: leadingSize = 0 } = leadingItem;
188
+ leadingItem.currentSize = leadingSize + distance;
189
+ const trailingItem = contentMeta[resizeTargets[1]];
190
+ const { currentSize: trailingSize = 0 } = trailingItem;
191
+ trailingItem.currentSize = trailingSize - distance;
192
+ return true;
193
+ }
194
+ function createPlaceholder(index) {
195
+ return React.createElement(Placeholder.Placeholder, {
196
+ shim: index === 0,
197
+ key: `placeholder-${index}`
198
+ });
199
+ }
200
+ function measureElement(el, dimension) {
201
+ const { [dimension]: size } = el.getBoundingClientRect();
202
+ const style = getComputedStyle(el);
203
+ const minSizeVal = style.getPropertyValue(`min-${dimension}`);
204
+ const minSize = minSizeVal.endsWith("px") ? parseInt(minSizeVal, 10) : 0;
205
+ return { size, minSize };
206
+ }
207
+
208
+ exports.useSplitterResizing = useSplitterResizing;
209
+ //# sourceMappingURL=useSplitterResizing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSplitterResizing.js","sources":["../../src/flexbox/useSplitterResizing.ts"],"sourcesContent":["import { getUniqueId } from \"@vuu-ui/vuu-utils\";\nimport React, {\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Placeholder } from \"../placeholder\";\nimport { Splitter } from \"./Splitter\";\n\nimport {\n findSplitterAndPlaceholderPositions,\n gatherChildMeta,\n identifyResizeParties,\n PLACEHOLDER,\n SPLITTER,\n} from \"./flexbox-utils\";\nimport {\n ContentMeta,\n FlexSize,\n SplitterFactory,\n SplitterHookProps,\n SplitterHookResult,\n} from \"./flexboxTypes\";\n\nconst originalContentOnly = (meta: ContentMeta) =>\n !meta.splitter && !meta.placeholder;\n\nexport const useSplitterResizing = ({\n children: childrenProp,\n onSplitterMoved,\n style,\n}: SplitterHookProps): SplitterHookResult => {\n const rootRef = useRef<HTMLDivElement>(null);\n const metaRef = useRef<ContentMeta[]>();\n const contentRef = useRef<ReactElement[]>();\n const assignedKeys = useRef([]);\n const [, forceUpdate] = useState({});\n\n const setContent = (content: ReactElement[]) => {\n contentRef.current = content;\n forceUpdate({});\n };\n\n const isColumn = style?.flexDirection === \"column\";\n const dimension = isColumn ? \"height\" : \"width\";\n const children = useMemo(\n () =>\n Array.isArray(childrenProp)\n ? childrenProp\n : React.isValidElement(childrenProp)\n ? [childrenProp]\n : [],\n [childrenProp]\n );\n\n const handleDragStart = useCallback(\n (index) => {\n const { current: contentMeta } = metaRef;\n if (contentMeta) {\n const [participants, bystanders] = identifyResizeParties(\n contentMeta,\n index\n );\n if (participants) {\n participants.forEach((index) => {\n const el = rootRef.current?.childNodes[index] as HTMLElement;\n if (el) {\n const { size, minSize } = measureElement(el, dimension);\n contentMeta[index].currentSize = size;\n contentMeta[index].minSize = minSize;\n }\n });\n if (bystanders) {\n bystanders.forEach((index) => {\n const el = rootRef.current?.childNodes[index] as HTMLElement;\n if (el) {\n const { [dimension]: size } = el.getBoundingClientRect();\n contentMeta[index].flexBasis = size;\n }\n });\n }\n }\n }\n },\n [dimension]\n );\n\n const handleDrag = useCallback(\n (idx, distance) => {\n if (contentRef.current && metaRef.current) {\n setContent(\n resizeContent(\n contentRef.current,\n metaRef.current,\n distance,\n dimension\n )\n );\n }\n },\n [dimension]\n );\n\n const handleDragEnd = useCallback(() => {\n const contentMeta = metaRef.current;\n if (contentMeta) {\n onSplitterMoved?.(contentMeta.filter(originalContentOnly));\n }\n contentMeta?.forEach((meta) => {\n meta.currentSize = undefined;\n meta.flexBasis = undefined;\n meta.flexOpen = false;\n });\n }, [onSplitterMoved]);\n\n const createSplitter: SplitterFactory = useCallback(\n (i) => {\n return React.createElement(Splitter, {\n column: isColumn,\n index: i,\n key: `splitter-${i}`,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n onDragStart: handleDragStart,\n });\n },\n [handleDrag, handleDragEnd, handleDragStart, isColumn]\n );\n\n useMemo(() => {\n const [content, meta] = buildContent(\n children,\n dimension,\n createSplitter,\n assignedKeys.current\n );\n metaRef.current = meta;\n contentRef.current = content;\n }, [children, createSplitter, dimension]);\n\n return {\n content: contentRef.current || [],\n rootRef,\n };\n};\n\nfunction buildContent(\n children: ReactElement[],\n dimension: \"width\" | \"height\",\n createSplitter: SplitterFactory,\n keys: any[]\n): [any[], ContentMeta[]] {\n const childMeta = gatherChildMeta(children, dimension);\n const splitterAndPlaceholderPositions =\n findSplitterAndPlaceholderPositions(childMeta);\n const content = [];\n const meta: ContentMeta[] = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (i === 0 && splitterAndPlaceholderPositions[i] & PLACEHOLDER) {\n content.push(createPlaceholder(i));\n meta.push({ placeholder: true, shim: true });\n }\n if (child.key == null) {\n const key = keys[i] || (keys[i] = getUniqueId());\n content.push(React.cloneElement(child, { key }));\n } else {\n content.push(child);\n }\n meta.push(childMeta[i]);\n\n if (i > 0 && splitterAndPlaceholderPositions[i] & PLACEHOLDER) {\n content.push(createPlaceholder(i));\n meta.push({ placeholder: true });\n } else if (splitterAndPlaceholderPositions[i] & SPLITTER) {\n content.push(createSplitter(content.length));\n meta.push({ splitter: true });\n }\n }\n return [content, meta];\n}\n\nfunction resizeContent(\n content: ReactElement[],\n contentMeta: ContentMeta[],\n distance: number,\n dimension: \"width\" | \"height\"\n) {\n const metaUpdated = updateMeta(contentMeta, distance);\n if (!metaUpdated) {\n return content;\n }\n\n return content.map((child, idx) => {\n const meta = contentMeta[idx];\n const { currentSize, flexOpen, flexBasis } = meta;\n const hasCurrentSize = currentSize !== undefined;\n if (hasCurrentSize || flexOpen) {\n const { flexBasis: actualFlexBasis } = child.props.style || {};\n const size = hasCurrentSize ? meta.currentSize : flexBasis;\n if (size !== actualFlexBasis) {\n return React.cloneElement(child, {\n style: {\n ...child.props.style,\n flexBasis: size,\n [dimension]: \"auto\",\n },\n });\n } else {\n return child;\n }\n } else {\n return child;\n }\n });\n}\n\n//TODO detect cursor move beyond drag limit and suspend further resize until cursoe re-engages with splitter\nfunction updateMeta(contentMeta: ContentMeta[], distance: number) {\n const resizeTargets: number[] = [];\n\n contentMeta.forEach((meta, idx) => {\n if (meta.currentSize !== undefined) {\n resizeTargets.push(idx);\n }\n });\n\n // we want the target being reduced first, this may limit the distance we can apply\n const target1 = distance < 0 ? resizeTargets[0] : resizeTargets[1];\n\n const { currentSize = 0, minSize = 0 } = contentMeta[target1];\n if (currentSize === minSize) {\n // size is already 0, we cannot go further\n return false;\n } else if (Math.abs(distance) > currentSize - minSize) {\n // reduce to 0\n const multiplier = distance < 0 ? -1 : 1;\n distance = Math.max(0, currentSize - minSize) * multiplier;\n }\n\n const leadingItem = contentMeta[resizeTargets[0]] as ContentMeta;\n const { currentSize: leadingSize = 0 } = leadingItem;\n leadingItem.currentSize = leadingSize + distance;\n\n const trailingItem = contentMeta[resizeTargets[1]] as ContentMeta;\n const { currentSize: trailingSize = 0 } = trailingItem;\n trailingItem.currentSize = trailingSize - distance;\n\n return true;\n}\n\nfunction createPlaceholder(index: number) {\n return React.createElement(Placeholder, {\n shim: index === 0,\n key: `placeholder-${index}`,\n } as any);\n}\n\nfunction measureElement(\n el: HTMLElement,\n dimension: \"width\" | \"height\"\n): FlexSize {\n const { [dimension]: size } = el.getBoundingClientRect();\n const style = getComputedStyle(el);\n const minSizeVal = style.getPropertyValue(`min-${dimension}`);\n const minSize = minSizeVal.endsWith(\"px\") ? parseInt(minSizeVal, 10) : 0;\n return { size, minSize };\n}\n"],"names":["useRef","useState","useMemo","useCallback","identifyResizeParties","index","Splitter","gatherChildMeta","findSplitterAndPlaceholderPositions","PLACEHOLDER","getUniqueId","SPLITTER","Placeholder"],"mappings":"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"}