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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/package.json +14 -16
  2. package/types/dock-layout/DockLayout.d.ts +4 -4
  3. package/types/dock-layout/Drawer.d.ts +4 -4
  4. package/types/drag-drop/BoxModel.d.ts +7 -7
  5. package/types/flexbox/FlexboxLayout.d.ts +4 -4
  6. package/types/flexbox/Splitter.d.ts +1 -1
  7. package/types/layout-reducer/layoutUtils.d.ts +1 -1
  8. package/types/layout-reducer/remove-layout-element.d.ts +1 -1
  9. package/types/layout-reducer/replace-layout-element.d.ts +2 -2
  10. package/types/layout-reducer/resize-flex-children.d.ts +2 -2
  11. package/types/layout-view/useView.d.ts +1 -1
  12. package/types/placeholder/Placeholder.d.ts +4 -4
  13. package/types/responsive/overflowUtils.d.ts +2 -2
  14. package/types/stack/StackLayout.d.ts +4 -4
  15. package/types/tools/devtools-box/layout-configurator.d.ts +26 -26
  16. package/types/tools/devtools-tree/layout-tree-viewer.d.ts +2 -2
  17. package/types/utils/pathUtils.d.ts +1 -1
  18. package/cjs/Component.js +0 -14
  19. package/cjs/Component.js.map +0 -1
  20. package/cjs/LayoutContainer.css.js +0 -6
  21. package/cjs/LayoutContainer.css.js.map +0 -1
  22. package/cjs/LayoutContainer.js +0 -33
  23. package/cjs/LayoutContainer.js.map +0 -1
  24. package/cjs/dock-layout/DockLayout.css.js +0 -6
  25. package/cjs/dock-layout/DockLayout.css.js.map +0 -1
  26. package/cjs/dock-layout/DockLayout.js +0 -41
  27. package/cjs/dock-layout/DockLayout.js.map +0 -1
  28. package/cjs/dock-layout/Drawer.css.js +0 -6
  29. package/cjs/dock-layout/Drawer.css.js.map +0 -1
  30. package/cjs/dock-layout/Drawer.js +0 -95
  31. package/cjs/dock-layout/Drawer.js.map +0 -1
  32. package/cjs/drag-drop/BoxModel.js +0 -416
  33. package/cjs/drag-drop/BoxModel.js.map +0 -1
  34. package/cjs/drag-drop/DragState.js +0 -161
  35. package/cjs/drag-drop/DragState.js.map +0 -1
  36. package/cjs/drag-drop/Draggable.js +0 -192
  37. package/cjs/drag-drop/Draggable.js.map +0 -1
  38. package/cjs/drag-drop/DropTarget.js +0 -257
  39. package/cjs/drag-drop/DropTarget.js.map +0 -1
  40. package/cjs/drag-drop/DropTargetRenderer.js +0 -218
  41. package/cjs/drag-drop/DropTargetRenderer.js.map +0 -1
  42. package/cjs/flexbox/Flexbox.css.js +0 -6
  43. package/cjs/flexbox/Flexbox.css.js.map +0 -1
  44. package/cjs/flexbox/Flexbox.js +0 -69
  45. package/cjs/flexbox/Flexbox.js.map +0 -1
  46. package/cjs/flexbox/FlexboxLayout.js +0 -30
  47. package/cjs/flexbox/FlexboxLayout.js.map +0 -1
  48. package/cjs/flexbox/Splitter.css.js +0 -6
  49. package/cjs/flexbox/Splitter.css.js.map +0 -1
  50. package/cjs/flexbox/Splitter.js +0 -122
  51. package/cjs/flexbox/Splitter.js.map +0 -1
  52. package/cjs/flexbox/flexbox-utils.js +0 -95
  53. package/cjs/flexbox/flexbox-utils.js.map +0 -1
  54. package/cjs/flexbox/useSplitterResizing.js +0 -197
  55. package/cjs/flexbox/useSplitterResizing.js.map +0 -1
  56. package/cjs/index.js +0 -122
  57. package/cjs/index.js.map +0 -1
  58. package/cjs/layout-action.js +0 -24
  59. package/cjs/layout-action.js.map +0 -1
  60. package/cjs/layout-header/Header.css.js +0 -6
  61. package/cjs/layout-header/Header.css.js.map +0 -1
  62. package/cjs/layout-header/Header.js +0 -152
  63. package/cjs/layout-header/Header.js.map +0 -1
  64. package/cjs/layout-header/useHeader.js +0 -85
  65. package/cjs/layout-header/useHeader.js.map +0 -1
  66. package/cjs/layout-provider/LayoutProvider.js +0 -304
  67. package/cjs/layout-provider/LayoutProvider.js.map +0 -1
  68. package/cjs/layout-provider/LayoutProviderContext.js +0 -23
  69. package/cjs/layout-provider/LayoutProviderContext.js.map +0 -1
  70. package/cjs/layout-provider/useLayoutDragDrop.js +0 -177
  71. package/cjs/layout-provider/useLayoutDragDrop.js.map +0 -1
  72. package/cjs/layout-reducer/flexUtils.js +0 -227
  73. package/cjs/layout-reducer/flexUtils.js.map +0 -1
  74. package/cjs/layout-reducer/insert-layout-element.js +0 -286
  75. package/cjs/layout-reducer/insert-layout-element.js.map +0 -1
  76. package/cjs/layout-reducer/layout-reducer.js +0 -202
  77. package/cjs/layout-reducer/layout-reducer.js.map +0 -1
  78. package/cjs/layout-reducer/layoutTypes.js +0 -40
  79. package/cjs/layout-reducer/layoutTypes.js.map +0 -1
  80. package/cjs/layout-reducer/layoutUtils.js +0 -237
  81. package/cjs/layout-reducer/layoutUtils.js.map +0 -1
  82. package/cjs/layout-reducer/move-layout-element.js +0 -31
  83. package/cjs/layout-reducer/move-layout-element.js.map +0 -1
  84. package/cjs/layout-reducer/remove-layout-element.js +0 -237
  85. package/cjs/layout-reducer/remove-layout-element.js.map +0 -1
  86. package/cjs/layout-reducer/replace-layout-element.js +0 -96
  87. package/cjs/layout-reducer/replace-layout-element.js.map +0 -1
  88. package/cjs/layout-reducer/resize-flex-children.js +0 -62
  89. package/cjs/layout-reducer/resize-flex-children.js.map +0 -1
  90. package/cjs/layout-reducer/wrap-layout-element.js +0 -211
  91. package/cjs/layout-reducer/wrap-layout-element.js.map +0 -1
  92. package/cjs/layout-view/View.css.js +0 -6
  93. package/cjs/layout-view/View.css.js.map +0 -1
  94. package/cjs/layout-view/View.js +0 -160
  95. package/cjs/layout-view/View.js.map +0 -1
  96. package/cjs/layout-view/useView.js +0 -75
  97. package/cjs/layout-view/useView.js.map +0 -1
  98. package/cjs/layout-view/useViewBroadcastChannel.js +0 -35
  99. package/cjs/layout-view/useViewBroadcastChannel.js.map +0 -1
  100. package/cjs/layout-view/useViewResize.js +0 -42
  101. package/cjs/layout-view/useViewResize.js.map +0 -1
  102. package/cjs/layout-view-actions/ViewContext.js +0 -16
  103. package/cjs/layout-view-actions/ViewContext.js.map +0 -1
  104. package/cjs/layout-view-actions/useViewActionDispatcher.js +0 -112
  105. package/cjs/layout-view-actions/useViewActionDispatcher.js.map +0 -1
  106. package/cjs/layout-view-actions/useViewContributions.js +0 -33
  107. package/cjs/layout-view-actions/useViewContributions.js.map +0 -1
  108. package/cjs/palette/Palette.css.js +0 -6
  109. package/cjs/palette/Palette.css.js.map +0 -1
  110. package/cjs/palette/Palette.js +0 -115
  111. package/cjs/palette/Palette.js.map +0 -1
  112. package/cjs/placeholder/LayoutStartPanel.css.js +0 -6
  113. package/cjs/placeholder/LayoutStartPanel.css.js.map +0 -1
  114. package/cjs/placeholder/LayoutStartPanel.js +0 -56
  115. package/cjs/placeholder/LayoutStartPanel.js.map +0 -1
  116. package/cjs/placeholder/Placeholder.css.js +0 -6
  117. package/cjs/placeholder/Placeholder.css.js.map +0 -1
  118. package/cjs/placeholder/Placeholder.js +0 -34
  119. package/cjs/placeholder/Placeholder.js.map +0 -1
  120. package/cjs/responsive/useResizeObserver.js +0 -118
  121. package/cjs/responsive/useResizeObserver.js.map +0 -1
  122. package/cjs/responsive/utils.js +0 -34
  123. package/cjs/responsive/utils.js.map +0 -1
  124. package/cjs/stack/Stack.css.js +0 -6
  125. package/cjs/stack/Stack.css.js.map +0 -1
  126. package/cjs/stack/Stack.js +0 -150
  127. package/cjs/stack/Stack.js.map +0 -1
  128. package/cjs/stack/StackLayout.js +0 -116
  129. package/cjs/stack/StackLayout.js.map +0 -1
  130. package/cjs/use-persistent-state.js +0 -63
  131. package/cjs/use-persistent-state.js.map +0 -1
  132. package/cjs/utils/pathUtils.js +0 -293
  133. package/cjs/utils/pathUtils.js.map +0 -1
  134. package/cjs/utils/propUtils.js +0 -27
  135. package/cjs/utils/propUtils.js.map +0 -1
  136. package/cjs/utils/refUtils.js +0 -12
  137. package/cjs/utils/refUtils.js.map +0 -1
  138. package/cjs/utils/styleUtils.js +0 -15
  139. package/cjs/utils/styleUtils.js.map +0 -1
  140. package/cjs/utils/typeOf.js +0 -27
  141. package/cjs/utils/typeOf.js.map +0 -1
  142. package/esm/Component.js +0 -12
  143. package/esm/Component.js.map +0 -1
  144. package/esm/LayoutContainer.css.js +0 -4
  145. package/esm/LayoutContainer.css.js.map +0 -1
  146. package/esm/LayoutContainer.js +0 -31
  147. package/esm/LayoutContainer.js.map +0 -1
  148. package/esm/dock-layout/DockLayout.css.js +0 -4
  149. package/esm/dock-layout/DockLayout.css.js.map +0 -1
  150. package/esm/dock-layout/DockLayout.js +0 -39
  151. package/esm/dock-layout/DockLayout.js.map +0 -1
  152. package/esm/dock-layout/Drawer.css.js +0 -4
  153. package/esm/dock-layout/Drawer.css.js.map +0 -1
  154. package/esm/dock-layout/Drawer.js +0 -93
  155. package/esm/dock-layout/Drawer.js.map +0 -1
  156. package/esm/drag-drop/BoxModel.js +0 -409
  157. package/esm/drag-drop/BoxModel.js.map +0 -1
  158. package/esm/drag-drop/DragState.js +0 -159
  159. package/esm/drag-drop/DragState.js.map +0 -1
  160. package/esm/drag-drop/Draggable.js +0 -190
  161. package/esm/drag-drop/Draggable.js.map +0 -1
  162. package/esm/drag-drop/DropTarget.js +0 -253
  163. package/esm/drag-drop/DropTarget.js.map +0 -1
  164. package/esm/drag-drop/DropTargetRenderer.js +0 -216
  165. package/esm/drag-drop/DropTargetRenderer.js.map +0 -1
  166. package/esm/flexbox/Flexbox.css.js +0 -4
  167. package/esm/flexbox/Flexbox.css.js.map +0 -1
  168. package/esm/flexbox/Flexbox.js +0 -67
  169. package/esm/flexbox/Flexbox.js.map +0 -1
  170. package/esm/flexbox/FlexboxLayout.js +0 -28
  171. package/esm/flexbox/FlexboxLayout.js.map +0 -1
  172. package/esm/flexbox/Splitter.css.js +0 -4
  173. package/esm/flexbox/Splitter.css.js.map +0 -1
  174. package/esm/flexbox/Splitter.js +0 -120
  175. package/esm/flexbox/Splitter.js.map +0 -1
  176. package/esm/flexbox/flexbox-utils.js +0 -89
  177. package/esm/flexbox/flexbox-utils.js.map +0 -1
  178. package/esm/flexbox/useSplitterResizing.js +0 -195
  179. package/esm/flexbox/useSplitterResizing.js.map +0 -1
  180. package/esm/index.js +0 -33
  181. package/esm/index.js.map +0 -1
  182. package/esm/layout-action.js +0 -22
  183. package/esm/layout-action.js.map +0 -1
  184. package/esm/layout-header/Header.css.js +0 -4
  185. package/esm/layout-header/Header.css.js.map +0 -1
  186. package/esm/layout-header/Header.js +0 -150
  187. package/esm/layout-header/Header.js.map +0 -1
  188. package/esm/layout-header/useHeader.js +0 -83
  189. package/esm/layout-header/useHeader.js.map +0 -1
  190. package/esm/layout-provider/LayoutProvider.js +0 -297
  191. package/esm/layout-provider/LayoutProvider.js.map +0 -1
  192. package/esm/layout-provider/LayoutProviderContext.js +0 -20
  193. package/esm/layout-provider/LayoutProviderContext.js.map +0 -1
  194. package/esm/layout-provider/useLayoutDragDrop.js +0 -175
  195. package/esm/layout-provider/useLayoutDragDrop.js.map +0 -1
  196. package/esm/layout-reducer/flexUtils.js +0 -218
  197. package/esm/layout-reducer/flexUtils.js.map +0 -1
  198. package/esm/layout-reducer/insert-layout-element.js +0 -282
  199. package/esm/layout-reducer/insert-layout-element.js.map +0 -1
  200. package/esm/layout-reducer/layout-reducer.js +0 -200
  201. package/esm/layout-reducer/layout-reducer.js.map +0 -1
  202. package/esm/layout-reducer/layoutTypes.js +0 -36
  203. package/esm/layout-reducer/layoutTypes.js.map +0 -1
  204. package/esm/layout-reducer/layoutUtils.js +0 -226
  205. package/esm/layout-reducer/layoutUtils.js.map +0 -1
  206. package/esm/layout-reducer/move-layout-element.js +0 -29
  207. package/esm/layout-reducer/move-layout-element.js.map +0 -1
  208. package/esm/layout-reducer/remove-layout-element.js +0 -235
  209. package/esm/layout-reducer/remove-layout-element.js.map +0 -1
  210. package/esm/layout-reducer/replace-layout-element.js +0 -92
  211. package/esm/layout-reducer/replace-layout-element.js.map +0 -1
  212. package/esm/layout-reducer/resize-flex-children.js +0 -59
  213. package/esm/layout-reducer/resize-flex-children.js.map +0 -1
  214. package/esm/layout-reducer/wrap-layout-element.js +0 -209
  215. package/esm/layout-reducer/wrap-layout-element.js.map +0 -1
  216. package/esm/layout-view/View.css.js +0 -4
  217. package/esm/layout-view/View.css.js.map +0 -1
  218. package/esm/layout-view/View.js +0 -158
  219. package/esm/layout-view/View.js.map +0 -1
  220. package/esm/layout-view/useView.js +0 -73
  221. package/esm/layout-view/useView.js.map +0 -1
  222. package/esm/layout-view/useViewBroadcastChannel.js +0 -33
  223. package/esm/layout-view/useViewBroadcastChannel.js.map +0 -1
  224. package/esm/layout-view/useViewResize.js +0 -40
  225. package/esm/layout-view/useViewResize.js.map +0 -1
  226. package/esm/layout-view-actions/ViewContext.js +0 -12
  227. package/esm/layout-view-actions/ViewContext.js.map +0 -1
  228. package/esm/layout-view-actions/useViewActionDispatcher.js +0 -110
  229. package/esm/layout-view-actions/useViewActionDispatcher.js.map +0 -1
  230. package/esm/layout-view-actions/useViewContributions.js +0 -31
  231. package/esm/layout-view-actions/useViewContributions.js.map +0 -1
  232. package/esm/palette/Palette.css.js +0 -4
  233. package/esm/palette/Palette.css.js.map +0 -1
  234. package/esm/palette/Palette.js +0 -112
  235. package/esm/palette/Palette.js.map +0 -1
  236. package/esm/placeholder/LayoutStartPanel.css.js +0 -4
  237. package/esm/placeholder/LayoutStartPanel.css.js.map +0 -1
  238. package/esm/placeholder/LayoutStartPanel.js +0 -54
  239. package/esm/placeholder/LayoutStartPanel.js.map +0 -1
  240. package/esm/placeholder/Placeholder.css.js +0 -4
  241. package/esm/placeholder/Placeholder.css.js.map +0 -1
  242. package/esm/placeholder/Placeholder.js +0 -32
  243. package/esm/placeholder/Placeholder.js.map +0 -1
  244. package/esm/responsive/useResizeObserver.js +0 -112
  245. package/esm/responsive/useResizeObserver.js.map +0 -1
  246. package/esm/responsive/utils.js +0 -31
  247. package/esm/responsive/utils.js.map +0 -1
  248. package/esm/stack/Stack.css.js +0 -4
  249. package/esm/stack/Stack.css.js.map +0 -1
  250. package/esm/stack/Stack.js +0 -148
  251. package/esm/stack/Stack.js.map +0 -1
  252. package/esm/stack/StackLayout.js +0 -114
  253. package/esm/stack/StackLayout.js.map +0 -1
  254. package/esm/use-persistent-state.js +0 -58
  255. package/esm/use-persistent-state.js.map +0 -1
  256. package/esm/utils/pathUtils.js +0 -280
  257. package/esm/utils/pathUtils.js.map +0 -1
  258. package/esm/utils/propUtils.js +0 -23
  259. package/esm/utils/propUtils.js.map +0 -1
  260. package/esm/utils/refUtils.js +0 -10
  261. package/esm/utils/refUtils.js.map +0 -1
  262. package/esm/utils/styleUtils.js +0 -13
  263. package/esm/utils/styleUtils.js.map +0 -1
  264. package/esm/utils/typeOf.js +0 -23
  265. package/esm/utils/typeOf.js.map +0 -1
@@ -1,202 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var React = require('react');
5
- var pathUtils = require('../utils/pathUtils.js');
6
- var propUtils = require('../utils/propUtils.js');
7
- var typeOf = require('../utils/typeOf.js');
8
- var flexUtils = require('./flexUtils.js');
9
- var insertLayoutElement = require('./insert-layout-element.js');
10
- var moveLayoutElement = require('./move-layout-element.js');
11
- var layoutTypes = require('./layoutTypes.js');
12
- var removeLayoutElement = require('./remove-layout-element.js');
13
- var replaceLayoutElement = require('./replace-layout-element.js');
14
- var resizeFlexChildren = require('./resize-flex-children.js');
15
- var wrapLayoutElement = require('./wrap-layout-element.js');
16
-
17
- const layoutReducer = (state, action) => {
18
- switch (action.type) {
19
- case layoutTypes.LayoutActionType.ADD:
20
- return addChild(state, action);
21
- case layoutTypes.LayoutActionType.DRAG_DROP:
22
- return dragDrop(state, action);
23
- case "collapse":
24
- case "expand":
25
- return setChildProps(state, action);
26
- case layoutTypes.LayoutActionType.REMOVE:
27
- return removeLayoutElement.removeChild(state, action);
28
- case layoutTypes.LayoutActionType.REPLACE:
29
- return replaceLayoutElement.replaceChild(state, action);
30
- case layoutTypes.LayoutActionType.SET_PROP:
31
- return setProp(state, action);
32
- case layoutTypes.LayoutActionType.SET_PROPS:
33
- return setProps(state, action);
34
- case layoutTypes.LayoutActionType.SET_TITLE:
35
- return setProp(state, {
36
- type: "set-prop",
37
- path: action.path,
38
- propName: "title",
39
- propValue: action.title
40
- });
41
- case layoutTypes.LayoutActionType.SPLITTER_RESIZE:
42
- return resizeFlexChildren.resizeFlexChildren(state, action);
43
- case layoutTypes.LayoutActionType.LAYOUT_RESIZE:
44
- return resizeFlexChildren.resizeFlexChild(state, action);
45
- case layoutTypes.LayoutActionType.SWITCH_TAB:
46
- return switchTab(state, action);
47
- case layoutTypes.LayoutActionType.MOVE_CHILD:
48
- return moveLayoutElement.moveChild(state, action);
49
- default:
50
- return state;
51
- }
52
- };
53
- const switchTab = (state, { path, nextIdx }) => {
54
- const target = pathUtils.followPath(state, path, true);
55
- const replacement = React.cloneElement(target, {
56
- active: nextIdx
57
- });
58
- return replaceLayoutElement.swapChild(state, target, replacement);
59
- };
60
- const setProp = (state, { path, propName, propValue }) => {
61
- const target = pathUtils.followPath(state, path, true);
62
- const replacement = React.cloneElement(target, {
63
- [propName]: propValue
64
- });
65
- return replaceLayoutElement.swapChild(state, target, replacement);
66
- };
67
- const setProps = (state, { path, props }) => {
68
- const target = pathUtils.followPath(state, path, true);
69
- const replacement = React.cloneElement(target, props);
70
- return replaceLayoutElement.swapChild(state, target, replacement);
71
- };
72
- const setChildProps = (state, { path, type }) => {
73
- if (path) {
74
- const target = pathUtils.followPath(state, path, true);
75
- return replaceLayoutElement.swapChild(state, target, target, type);
76
- } else {
77
- return state;
78
- }
79
- };
80
- const dragDrop = (layoutRoot, action) => {
81
- const {
82
- draggedReactElement: newComponent,
83
- dragInstructions,
84
- dropTarget
85
- } = action;
86
- const existingComponent = dropTarget.component;
87
- const { pos } = dropTarget;
88
- const destinationTabstrip = pos?.position?.Header && typeOf.typeOf(existingComponent) === "Stack";
89
- const { id, version } = propUtils.getProps(newComponent);
90
- const intrinsicSize = flexUtils.getIntrinsicSize(newComponent);
91
- let newLayoutRoot;
92
- if (destinationTabstrip) {
93
- const [targetTab, insertionPosition] = insertLayoutElement.getInsertTabBeforeAfter(
94
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
95
- existingComponent,
96
- pos
97
- );
98
- if (targetTab === void 0) {
99
- newLayoutRoot = insertLayoutElement.insertIntoContainer(
100
- layoutRoot,
101
- existingComponent,
102
- newComponent
103
- );
104
- } else {
105
- newLayoutRoot = insertLayoutElement.insertBesideChild(
106
- layoutRoot,
107
- targetTab,
108
- newComponent,
109
- insertionPosition
110
- );
111
- }
112
- } else if (!intrinsicSize && pos?.position?.Centre) {
113
- newLayoutRoot = replaceLayoutElement._replaceChild(
114
- layoutRoot,
115
- existingComponent,
116
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
117
- newComponent
118
- );
119
- } else {
120
- newLayoutRoot = dropLayoutIntoContainer(
121
- layoutRoot,
122
- dropTarget,
123
- newComponent
124
- );
125
- }
126
- if (dragInstructions.DoNotRemove) {
127
- return newLayoutRoot;
128
- }
129
- const finalTarget = pathUtils.findTarget(
130
- newLayoutRoot,
131
- (props) => props.id === id && props.version === version
132
- );
133
- const finalPath = propUtils.getProp(finalTarget, "path");
134
- return removeLayoutElement.removeChild(newLayoutRoot, { path: finalPath, type: "remove" });
135
- };
136
- const addChild = (layoutRoot, { path: containerPath, component }) => {
137
- return insertLayoutElement.insertIntoContainer(
138
- layoutRoot,
139
- pathUtils.followPath(layoutRoot, containerPath),
140
- component
141
- );
142
- };
143
- const dropLayoutIntoContainer = (layoutRoot, dropTarget, newComponent) => {
144
- const { component, pos, clientRect, dropRect } = dropTarget;
145
- const existingComponent = component;
146
- const existingComponentPath = propUtils.getProp(existingComponent, "path");
147
- if (existingComponentPath === "0.0") {
148
- return wrapLayoutElement.wrap(
149
- layoutRoot,
150
- existingComponent,
151
- newComponent,
152
- pos
153
- );
154
- }
155
- const targetContainer = pathUtils.followPathToParent(
156
- layoutRoot,
157
- existingComponentPath
158
- );
159
- if (withTheGrain(pos, targetContainer)) {
160
- const insertionPosition = pos.position.SouthOrEast ? "after" : "before";
161
- return insertLayoutElement.insertBesideChild(
162
- layoutRoot,
163
- existingComponent,
164
- newComponent,
165
- insertionPosition,
166
- pos,
167
- clientRect,
168
- dropRect
169
- );
170
- }
171
- if (!withTheGrain(pos, targetContainer)) {
172
- return wrapLayoutElement.wrap(
173
- layoutRoot,
174
- existingComponent,
175
- newComponent,
176
- pos,
177
- clientRect,
178
- dropRect
179
- );
180
- }
181
- if (vuuUtils.isContainer(typeOf.typeOf(targetContainer))) {
182
- return wrapLayoutElement.wrap(layoutRoot, existingComponent, newComponent, pos);
183
- }
184
- throw Error(`no support right now for position = ${pos.position}`);
185
- };
186
- const withTheGrain = (pos, container) => {
187
- if (pos.position.Centre) {
188
- return isTerrace(container) || isTower(container);
189
- }
190
- return pos.position.NorthOrSouth ? isTower(container) : pos.position.EastOrWest ? isTerrace(container) : false;
191
- };
192
- const isTower = (container) => {
193
- const { style } = container.props;
194
- return typeOf.typeOf(container) === "Flexbox" && style.flexDirection === "column";
195
- };
196
- const isTerrace = (container) => {
197
- const { style } = container.props;
198
- return typeOf.typeOf(container) === "Flexbox" && style.flexDirection !== "column";
199
- };
200
-
201
- exports.layoutReducer = layoutReducer;
202
- //# sourceMappingURL=layout-reducer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layout-reducer.js","sources":["../../../../packages/vuu-layout/src/layout-reducer/layout-reducer.ts"],"sourcesContent":["import { isContainer } from \"@vuu-ui/vuu-utils\";\nimport React, { ReactElement } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport {\n findTarget,\n followPath,\n followPathToParent,\n getProp,\n getProps,\n typeOf,\n} from \"../utils\";\nimport { getIntrinsicSize } from \"./flexUtils\";\nimport {\n getInsertTabBeforeAfter,\n insertBesideChild,\n insertIntoContainer,\n} from \"./insert-layout-element\";\nimport { moveChild } from \"./move-layout-element\";\nimport {\n AddAction,\n CollapseAction,\n DragDropAction,\n ExpandAction,\n LayoutActionType,\n LayoutReducerAction,\n SetPropAction,\n SetPropsAction,\n SwitchTabAction,\n} from \"./layoutTypes\";\nimport { LayoutProps } from \"./layoutUtils\";\nimport { removeChild } from \"./remove-layout-element\";\nimport {\n replaceChild,\n swapChild,\n _replaceChild,\n} from \"./replace-layout-element\";\nimport { resizeFlexChild, resizeFlexChildren } from \"./resize-flex-children\";\nimport { wrap } from \"./wrap-layout-element\";\n\nexport const layoutReducer = (\n state: ReactElement,\n action: LayoutReducerAction,\n): ReactElement => {\n switch (action.type) {\n case LayoutActionType.ADD:\n return addChild(state, action);\n case LayoutActionType.DRAG_DROP:\n return dragDrop(state, action);\n case \"collapse\":\n case \"expand\":\n return setChildProps(state, action);\n case LayoutActionType.REMOVE:\n return removeChild(state, action);\n case LayoutActionType.REPLACE:\n return replaceChild(state, action);\n case LayoutActionType.SET_PROP:\n return setProp(state, action);\n case LayoutActionType.SET_PROPS:\n return setProps(state, action);\n case LayoutActionType.SET_TITLE:\n return setProp(state, {\n type: \"set-prop\",\n path: action.path,\n propName: \"title\",\n propValue: action.title,\n });\n case LayoutActionType.SPLITTER_RESIZE:\n return resizeFlexChildren(state, action);\n case LayoutActionType.LAYOUT_RESIZE:\n return resizeFlexChild(state, action);\n case LayoutActionType.SWITCH_TAB:\n return switchTab(state, action);\n case LayoutActionType.MOVE_CHILD:\n return moveChild(state, action);\n default:\n return state;\n }\n};\n\nconst switchTab = (state: ReactElement, { path, nextIdx }: SwitchTabAction) => {\n const target = followPath(state, path, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const replacement = React.cloneElement<any>(target, {\n active: nextIdx,\n });\n return swapChild(state, target, replacement);\n};\n\nconst setProp = (\n state: ReactElement,\n { path, propName, propValue }: SetPropAction,\n) => {\n const target = followPath(state, path, true);\n const replacement = React.cloneElement(target, {\n [propName]: propValue,\n });\n return swapChild(state, target, replacement);\n};\n\nconst setProps = (state: ReactElement, { path, props }: SetPropsAction) => {\n const target = followPath(state, path, true);\n const replacement = React.cloneElement(target, props);\n return swapChild(state, target, replacement);\n};\n\nconst setChildProps = (\n state: ReactElement,\n { path, type }: CollapseAction | ExpandAction,\n) => {\n if (path) {\n const target = followPath(state, path, true);\n return swapChild(state, target, target, type);\n } else {\n return state;\n }\n};\n\nconst dragDrop = (\n layoutRoot: ReactElement,\n action: DragDropAction,\n): ReactElement => {\n const {\n draggedReactElement: newComponent,\n dragInstructions,\n dropTarget,\n } = action;\n const existingComponent = dropTarget.component as ReactElement;\n const { pos } = dropTarget;\n const destinationTabstrip =\n pos?.position?.Header && typeOf(existingComponent) === \"Stack\";\n const { id, version } = getProps(newComponent);\n const intrinsicSize = getIntrinsicSize(newComponent);\n let newLayoutRoot: ReactElement;\n if (destinationTabstrip) {\n const [targetTab, insertionPosition] = getInsertTabBeforeAfter(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n existingComponent!,\n pos,\n );\n if (targetTab === undefined) {\n newLayoutRoot = insertIntoContainer(\n layoutRoot,\n existingComponent,\n newComponent,\n );\n } else {\n newLayoutRoot = insertBesideChild(\n layoutRoot,\n targetTab,\n newComponent,\n insertionPosition,\n );\n }\n } else if (!intrinsicSize && pos?.position?.Centre) {\n newLayoutRoot = _replaceChild(\n layoutRoot,\n existingComponent as ReactElement,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newComponent as any,\n );\n } else {\n newLayoutRoot = dropLayoutIntoContainer(\n layoutRoot,\n dropTarget as DropTarget,\n newComponent,\n );\n }\n\n if (dragInstructions.DoNotRemove) {\n return newLayoutRoot;\n }\n\n const finalTarget = findTarget(\n newLayoutRoot,\n (props: LayoutProps) => props.id === id && props.version === version,\n ) as ReactElement;\n const finalPath = getProp(finalTarget, \"path\");\n return removeChild(newLayoutRoot, { path: finalPath, type: \"remove\" });\n};\n\nconst addChild = (\n layoutRoot: ReactElement,\n { path: containerPath, component }: AddAction,\n) => {\n return insertIntoContainer(\n layoutRoot,\n followPath(layoutRoot, containerPath) as ReactElement,\n component,\n );\n};\n\nconst dropLayoutIntoContainer = (\n layoutRoot: ReactElement,\n dropTarget: DropTarget,\n newComponent: ReactElement,\n): ReactElement => {\n const { component, pos, clientRect, dropRect } = dropTarget;\n const existingComponent = component as ReactElement;\n\n const existingComponentPath = getProp(existingComponent, \"path\");\n\n if (existingComponentPath === \"0.0\") {\n return wrap(\n layoutRoot,\n existingComponent as ReactElement,\n newComponent,\n pos,\n );\n }\n\n const targetContainer = followPathToParent(\n layoutRoot,\n existingComponentPath,\n ) as ReactElement;\n\n if (withTheGrain(pos, targetContainer)) {\n const insertionPosition = pos.position.SouthOrEast ? \"after\" : \"before\";\n return insertBesideChild(\n layoutRoot,\n existingComponent,\n newComponent,\n insertionPosition,\n pos,\n clientRect,\n dropRect,\n );\n }\n\n if (!withTheGrain(pos, targetContainer)) {\n return wrap(\n layoutRoot,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect,\n );\n }\n\n if (isContainer(typeOf(targetContainer) as string)) {\n return wrap(layoutRoot, existingComponent, newComponent, pos);\n }\n\n throw Error(`no support right now for position = ${pos.position}`);\n};\n\nconst withTheGrain = (pos: DropPos, container: ReactElement) => {\n if (pos.position.Centre) {\n return isTerrace(container) || isTower(container);\n }\n\n return pos.position.NorthOrSouth\n ? isTower(container)\n : pos.position.EastOrWest\n ? isTerrace(container)\n : false;\n};\n\nconst isTower = (container: ReactElement) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { style } = container.props as any;\n return typeOf(container) === \"Flexbox\" && style.flexDirection === \"column\";\n};\n\nconst isTerrace = (container: ReactElement) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { style } = container.props as any;\n return typeOf(container) === \"Flexbox\" && style.flexDirection !== \"column\";\n};\n"],"names":["LayoutActionType","removeChild","replaceChild","resizeFlexChildren","resizeFlexChild","moveChild","followPath","swapChild","typeOf","getProps","getIntrinsicSize","getInsertTabBeforeAfter","insertIntoContainer","insertBesideChild","_replaceChild","findTarget","getProp","wrap","followPathToParent","isContainer"],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- 'use strict';
2
-
3
- const LayoutActionType = {
4
- ADD: "add",
5
- DRAG_START: "drag-start",
6
- DRAG_DROP: "drag-drop",
7
- LAYOUT_RESIZE: "layout-resize",
8
- MAXIMIZE: "maximize",
9
- MINIMIZE: "minimize",
10
- MOVE_CHILD: "move-child",
11
- QUERY: "query",
12
- REMOVE: "remove",
13
- REPLACE: "replace",
14
- RESTORE: "restore",
15
- SET_PROP: "set-prop",
16
- SET_PROPS: "set-props",
17
- SET_TITLE: "set-title",
18
- SPLITTER_RESIZE: "splitter-resize",
19
- SWITCH_TAB: "switch-tab",
20
- TEAROUT: "tearout"
21
- };
22
- const isApplicationLevelChange = (layoutChangeReason) => [
23
- "switch-active-layout",
24
- "open-layout",
25
- "close-layout",
26
- "rename-layout"
27
- ].includes(layoutChangeReason);
28
- const isLayoutLevelChange = (layoutChangeReason) => [
29
- "switch-active-tab",
30
- "edit-feature-title",
31
- "save-feature-props",
32
- "remove-component",
33
- "resize-component",
34
- "drag-drop-operation"
35
- ].includes(layoutChangeReason);
36
-
37
- exports.LayoutActionType = LayoutActionType;
38
- exports.isApplicationLevelChange = isApplicationLevelChange;
39
- exports.isLayoutLevelChange = isLayoutLevelChange;
40
- //# sourceMappingURL=layoutTypes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layoutTypes.js","sources":["../../../../packages/vuu-layout/src/layout-reducer/layoutTypes.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { LayoutJSON } from \"@vuu-ui/vuu-utils\";\nimport { ReactElement } from \"react\";\nimport { DragDropRect, DragInstructions } from \"../drag-drop\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\n\nexport type layoutType = \"Flexbox\" | \"View\" | \"LayoutContainer\" | \"Stack\";\n\n// TODO duplicated in layout-action\nexport const LayoutActionType = {\n ADD: \"add\",\n DRAG_START: \"drag-start\",\n DRAG_DROP: \"drag-drop\",\n LAYOUT_RESIZE: \"layout-resize\",\n MAXIMIZE: \"maximize\",\n MINIMIZE: \"minimize\",\n MOVE_CHILD: \"move-child\",\n QUERY: \"query\",\n REMOVE: \"remove\",\n REPLACE: \"replace\",\n RESTORE: \"restore\",\n SET_PROP: \"set-prop\",\n SET_PROPS: \"set-props\",\n SET_TITLE: \"set-title\",\n SPLITTER_RESIZE: \"splitter-resize\",\n SWITCH_TAB: \"switch-tab\",\n TEAROUT: \"tearout\",\n} as const;\n\nexport type AddAction = {\n component: any;\n path: string;\n type: typeof LayoutActionType.ADD;\n};\n\nexport type DragDropAction = {\n draggedReactElement: ReactElement;\n dragInstructions: any;\n dropTarget: Partial<DropTarget>;\n type: typeof LayoutActionType.DRAG_DROP;\n};\n\nexport type MaximizeAction = {\n path?: string;\n type: typeof LayoutActionType.MAXIMIZE;\n};\n\nexport type CollapseAction = {\n path?: string;\n type: \"collapse\";\n};\n\nexport type ExpandAction = {\n path?: string;\n type: \"expand\";\n};\n\nexport type MoveChildAction = {\n fromIndex: number;\n toIndex: number;\n path: string;\n type: typeof LayoutActionType.MOVE_CHILD;\n};\n\nexport type QueryAction = {\n path?: string;\n query: string;\n type: typeof LayoutActionType.QUERY;\n};\n\nexport type RemoveAction = {\n path?: string;\n type: typeof LayoutActionType.REMOVE;\n};\n\nexport type ReplaceAction = {\n replacement: any;\n target: any;\n type: typeof LayoutActionType.REPLACE;\n};\n\nexport type RestoreAction = {\n path?: string;\n type: typeof LayoutActionType.RESTORE;\n};\n\nexport type SetPropAction = {\n path: string;\n propName: string;\n propValue: string | number | boolean;\n type: typeof LayoutActionType.SET_PROP;\n};\n\nexport type SetPropsAction = {\n path: string;\n props: { [key: string]: unknown };\n type: typeof LayoutActionType.SET_PROPS;\n};\n\nexport type SetTitleAction = {\n path: string;\n title: string;\n type: typeof LayoutActionType.SET_TITLE;\n};\n\nexport type SplitterResizeAction = {\n path: string;\n sizes: { currentSize: number; flexBasis: number }[];\n type: typeof LayoutActionType.SPLITTER_RESIZE;\n};\n\nexport type LayoutResizeAction = {\n path: string;\n size: number;\n type: typeof LayoutActionType.LAYOUT_RESIZE;\n};\n\nexport type SwitchTabAction = {\n id?: string;\n nextIdx: number;\n path: string;\n type: typeof LayoutActionType.SWITCH_TAB;\n};\n\nexport type TearoutAction = {\n path?: string;\n type: typeof LayoutActionType.TEAROUT;\n};\n\nexport type LayoutReducerAction =\n | AddAction\n | DragDropAction\n | LayoutResizeAction\n | CollapseAction\n | ExpandAction\n | MoveChildAction\n | RemoveAction\n | ReplaceAction\n | RestoreAction\n | SetPropAction\n | SetPropsAction\n | SetTitleAction\n | SplitterResizeAction\n | SwitchTabAction;\n\nexport type MousedownViewAction = {\n preDragActivity?: unknown;\n index?: number;\n type: \"mousedown\";\n};\n\nexport type DragStartAction = {\n payload?: ReactElement;\n dragContainerPath?: string;\n dragElement?: HTMLElement;\n dragRect: DragDropRect;\n dropTargets?: string[];\n evt: MouseEvent;\n instructions?: DragInstructions;\n path: string;\n type: typeof LayoutActionType.DRAG_START;\n};\n\nexport type LayoutLevelChange =\n | \"add-component\"\n | \"drag-drop-operation\"\n | \"edit-feature-title\"\n | \"remove-component\"\n | \"resize-component\"\n | \"switch-active-tab\"\n | \"save-feature-props\";\n\nexport type ApplicationLevelChange =\n | \"switch-active-layout\"\n | \"open-layout\"\n | \"close-layout\"\n | \"rename-layout\"\n | \"resize-application-chrome\";\n\nexport type LayoutChangeReason = LayoutLevelChange | ApplicationLevelChange;\n\nexport type LayoutChangeHandler = (\n layout: LayoutJSON,\n layoutChangeReason: LayoutChangeReason,\n) => void;\n\nexport const isApplicationLevelChange = (\n layoutChangeReason: LayoutChangeReason,\n): layoutChangeReason is ApplicationLevelChange =>\n [\n \"switch-active-layout\",\n \"open-layout\",\n \"close-layout\",\n \"rename-layout\",\n ].includes(layoutChangeReason);\n\nexport const isLayoutLevelChange = (\n layoutChangeReason: LayoutChangeReason,\n): layoutChangeReason is LayoutLevelChange =>\n [\n \"switch-active-tab\",\n \"edit-feature-title\",\n \"save-feature-props\",\n \"remove-component\",\n \"resize-component\",\n \"drag-drop-operation\",\n ].includes(layoutChangeReason);\n"],"names":[],"mappings":";;AASO,MAAM,gBAAmB,GAAA;AAAA,EAC9B,GAAK,EAAA,KAAA;AAAA,EACL,UAAY,EAAA,YAAA;AAAA,EACZ,SAAW,EAAA,WAAA;AAAA,EACX,aAAe,EAAA,eAAA;AAAA,EACf,QAAU,EAAA,UAAA;AAAA,EACV,QAAU,EAAA,UAAA;AAAA,EACV,UAAY,EAAA,YAAA;AAAA,EACZ,KAAO,EAAA,OAAA;AAAA,EACP,MAAQ,EAAA,QAAA;AAAA,EACR,OAAS,EAAA,SAAA;AAAA,EACT,OAAS,EAAA,SAAA;AAAA,EACT,QAAU,EAAA,UAAA;AAAA,EACV,SAAW,EAAA,WAAA;AAAA,EACX,SAAW,EAAA,WAAA;AAAA,EACX,eAAiB,EAAA,iBAAA;AAAA,EACjB,UAAY,EAAA,YAAA;AAAA,EACZ,OAAS,EAAA;AACX;AA+Ja,MAAA,wBAAA,GAA2B,CACtC,kBAEA,KAAA;AAAA,EACE,sBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,CAAE,SAAS,kBAAkB;AAElB,MAAA,mBAAA,GAAsB,CACjC,kBAEA,KAAA;AAAA,EACE,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,CAAE,SAAS,kBAAkB;;;;;;"}
@@ -1,237 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var React = require('react');
5
- var usePersistentState = require('../use-persistent-state.js');
6
- var pathUtils = require('../utils/pathUtils.js');
7
- var propUtils = require('../utils/propUtils.js');
8
- var styleUtils = require('../utils/styleUtils.js');
9
- var typeOf = require('../utils/typeOf.js');
10
-
11
- const getManagedDimension = (style) => style.flexDirection === "column" ? ["height", "width"] : ["width", "height"];
12
- const theKidHasNoStyle = {};
13
- const applyLayoutProps = (component, path = "0") => {
14
- const [layoutProps, children] = getChildLayoutProps(
15
- typeOf.typeOf(component),
16
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
- component.props,
18
- path
19
- );
20
- return React.cloneElement(component, layoutProps, children);
21
- };
22
- const cloneElementAddLayoutProps = (layoutElement, previousLayout) => {
23
- const type = typeOf.typeOf(layoutElement);
24
- const [layoutProps, children] = getChildLayoutProps(
25
- type,
26
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
- layoutElement.props,
28
- "0",
29
- void 0,
30
- previousLayout
31
- );
32
- return React.cloneElement(layoutElement, layoutProps, children);
33
- };
34
- const applyLayout = (type, props, previousLayout) => {
35
- const [layoutProps, children] = getChildLayoutProps(
36
- type,
37
- props,
38
- "0",
39
- void 0,
40
- previousLayout
41
- );
42
- return {
43
- ...props,
44
- ...layoutProps,
45
- type,
46
- children
47
- };
48
- };
49
- function getLayoutProps(type, props, path = "0", parentType = null, previousLayout) {
50
- const {
51
- active: prevActive = 0,
52
- "data-path": dataPath,
53
- path: prevPath = dataPath,
54
- id: prevId,
55
- style: prevStyle
56
- } = propUtils.getProps(previousLayout);
57
- const prevMatch = typeOf.typeOf(previousLayout) === type && path === prevPath;
58
- const id = prevMatch ? prevId : props.id ?? vuuUtils.uuid();
59
- const active = type === "Stack" ? props.active ?? prevActive : void 0;
60
- const key = id;
61
- const style = prevMatch ? prevStyle : getStyle(type, props, parentType);
62
- return vuuUtils.isLayoutComponent(type) ? { id, key, path, style, type, active } : { id, key, style, "data-path": path };
63
- }
64
- function getChildLayoutProps(type, props, path, parentType = null, previousLayout) {
65
- const layoutProps = getLayoutProps(
66
- type,
67
- props,
68
- path,
69
- parentType,
70
- previousLayout
71
- );
72
- if (props.layout && !previousLayout) {
73
- return [layoutProps, [layoutFromJson(props.layout, `${path}.0`)]];
74
- }
75
- const previousChildren = (
76
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
- previousLayout?.children ?? // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
- previousLayout?.props?.children
79
- );
80
- const hasDynamicChildren = props.dropTarget && previousChildren;
81
- const children = hasDynamicChildren ? previousChildren : getLayoutChildren(type, props.children, path, previousChildren);
82
- return [layoutProps, children];
83
- }
84
- function getLayoutChildren(type, children, path = "0", previousChildren) {
85
- const kids = Array.isArray(children) ? children : React.isValidElement(children) ? [children] : [];
86
- return vuuUtils.isContainer(type) ? kids.map((child, i) => {
87
- const childType = typeOf.typeOf(child);
88
- const previousType = typeOf.typeOf(previousChildren?.[i]);
89
- if (!previousType || childType === previousType) {
90
- const [layoutProps, children2] = getChildLayoutProps(
91
- childType,
92
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
93
- child.props,
94
- `${path}.${i}`,
95
- type,
96
- previousChildren?.[i]
97
- );
98
- return React.cloneElement(child, layoutProps, children2);
99
- }
100
- return previousChildren?.[i];
101
- }) : children;
102
- }
103
- const getStyle = (type, props, parentType) => {
104
- let { style = theKidHasNoStyle } = props;
105
- if (type === "Flexbox") {
106
- style = {
107
- flexDirection: props.column ? "column" : "row",
108
- ...style,
109
- display: "flex"
110
- };
111
- }
112
- if (style.flex) {
113
- const { flex, ...otherStyles } = style;
114
- style = {
115
- ...otherStyles,
116
- ...styleUtils.expandFlex(typeof flex === "number" ? flex : 0)
117
- };
118
- } else if (parentType === "Stack") {
119
- style = {
120
- ...style,
121
- ...styleUtils.expandFlex(1)
122
- };
123
- } else if (parentType === "Flexbox" && (style.width || style.height) && style.flexBasis === void 0) {
124
- style = {
125
- ...style,
126
- flexBasis: "auto",
127
- flexGrow: 0,
128
- flexShrink: 0
129
- };
130
- }
131
- return style;
132
- };
133
- function layoutFromJson({ active, id = vuuUtils.uuid(), type, children, props, state }, path) {
134
- const componentType = type.match(/^[a-z]/) ? type : vuuUtils.getLayoutComponent(type);
135
- if (componentType === void 0) {
136
- throw Error(
137
- `layoutUtils unable to create component from JSON, unknown type ${type}`
138
- );
139
- }
140
- if (state) {
141
- usePersistentState.setPersistentState(id, state);
142
- }
143
- return React.createElement(
144
- componentType,
145
- {
146
- active,
147
- id,
148
- ...props,
149
- key: id,
150
- path
151
- },
152
- children ? children.map((child, i) => layoutFromJson(child, `${path}.${i}`)) : void 0
153
- );
154
- }
155
- function layoutToJSON(component) {
156
- return componentToJson(component);
157
- }
158
- function componentToJson(component) {
159
- const type = typeOf.typeOf(component);
160
- const { id, children, type: _omit, ...props } = propUtils.getProps(component);
161
- const state = usePersistentState.hasPersistentState(id) ? usePersistentState.getPersistentState(id) : void 0;
162
- return {
163
- id,
164
- type,
165
- props: serializeProps(props),
166
- state,
167
- children: React.Children.map(children, componentToJson)
168
- };
169
- }
170
- function serializeProps(props) {
171
- if (props) {
172
- const { path, ...otherProps } = props;
173
- const result = {};
174
- for (const [key, value] of Object.entries(otherProps)) {
175
- result[key] = serializeValue(value);
176
- }
177
- return result;
178
- }
179
- }
180
- function serializeValue(value) {
181
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
182
- return value;
183
- } else if (Array.isArray(value)) {
184
- return value.map(serializeValue);
185
- } else if (typeof value === "object" && value !== null) {
186
- const result = {};
187
- for (const [k, v] of Object.entries(value)) {
188
- result[k] = serializeValue(v);
189
- }
190
- return result;
191
- }
192
- }
193
- const layoutQuery = (query, path, layoutRoot) => {
194
- if (path && layoutRoot) {
195
- const parentElement = pathUtils.followPathToParent(layoutRoot, path);
196
- if (parentElement) {
197
- const { id: parentContainerId } = propUtils.getProps(parentElement);
198
- const parentContainerType = typeOf.typeOf(parentElement);
199
- return {
200
- parentContainerId,
201
- parentContainerType
202
- };
203
- }
204
- return {
205
- parentContainerType: "Stack",
206
- parentContainerId: "blah"
207
- };
208
- }
209
- };
210
- const getDefaultTabLabel = (component, tabIndex, existingLabels = []) => {
211
- let label = (
212
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
213
- component.props?.title ?? // eslint-disable-next-line @typescript-eslint/no-explicit-any
214
- component.props?.["data-tab-title"] ?? existingLabels[tabIndex]
215
- );
216
- if (label) {
217
- return label;
218
- } else {
219
- let count = tabIndex;
220
- do {
221
- label = `Tab ${++count}`;
222
- } while (existingLabels.includes(label));
223
- return label;
224
- }
225
- };
226
-
227
- exports.applyLayout = applyLayout;
228
- exports.applyLayoutProps = applyLayoutProps;
229
- exports.cloneElementAddLayoutProps = cloneElementAddLayoutProps;
230
- exports.componentToJson = componentToJson;
231
- exports.getDefaultTabLabel = getDefaultTabLabel;
232
- exports.getManagedDimension = getManagedDimension;
233
- exports.layoutFromJson = layoutFromJson;
234
- exports.layoutQuery = layoutQuery;
235
- exports.layoutToJSON = layoutToJSON;
236
- exports.serializeProps = serializeProps;
237
- //# sourceMappingURL=layoutUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layoutUtils.js","sources":["../../../../packages/vuu-layout/src/layout-reducer/layoutUtils.ts"],"sourcesContent":["import {\n LayoutJSON,\n LayoutModel,\n dimension,\n getLayoutComponent,\n isContainer,\n isLayoutComponent,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport React, { CSSProperties, ReactElement, cloneElement } from \"react\";\nimport { TabLabelFactory } from \"../stack\";\nimport {\n getPersistentState,\n hasPersistentState,\n setPersistentState,\n} from \"../use-persistent-state\";\nimport { expandFlex, followPathToParent, getProps, typeOf } from \"../utils\";\nimport { layoutType } from \"./layoutTypes\";\n\ninterface ComponentWithId {\n id: string;\n [key: string]: unknown;\n}\n\nexport const getManagedDimension = (\n style: CSSProperties,\n): [dimension, dimension] =>\n style.flexDirection === \"column\" ? [\"height\", \"width\"] : [\"width\", \"height\"];\n\nconst theKidHasNoStyle: CSSProperties = {};\n\nexport const applyLayoutProps = (component: ReactElement, path = \"0\") => {\n const [layoutProps, children] = getChildLayoutProps(\n typeOf(component) as string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component.props as any,\n path,\n );\n return React.cloneElement(component, layoutProps, children);\n};\n\nexport interface LayoutProps extends ComponentWithId {\n active?: number;\n \"data-path\"?: string;\n children?: ReactElement[];\n column?: boolean;\n dropTarget?: boolean;\n key: string;\n layout?: LayoutJSON;\n path?: string;\n resizeable?: boolean;\n style: CSSProperties;\n type?: string;\n version?: number;\n}\n\n/**\n * parse the declarative JSX and clone adding layout attributes\n */\nexport const cloneElementAddLayoutProps = (\n layoutElement: ReactElement,\n previousLayout?: ReactElement,\n): ReactElement => {\n const type = typeOf(layoutElement) as string;\n const [layoutProps, children] = getChildLayoutProps(\n type,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n layoutElement.props as any,\n \"0\",\n undefined,\n previousLayout,\n );\n return cloneElement(layoutElement, layoutProps, children);\n};\n\nexport const applyLayout = (\n type: layoutType,\n props: LayoutProps,\n previousLayout?: LayoutModel,\n): LayoutModel => {\n const [layoutProps, children] = getChildLayoutProps(\n type,\n props,\n \"0\",\n undefined,\n previousLayout,\n );\n return {\n ...props,\n ...layoutProps,\n type,\n children,\n };\n};\n\nfunction getLayoutProps(\n type: string,\n props: LayoutProps,\n path = \"0\",\n parentType: string | null = null,\n previousLayout?: LayoutModel,\n): LayoutProps {\n const {\n active: prevActive = 0,\n \"data-path\": dataPath,\n path: prevPath = dataPath,\n id: prevId,\n style: prevStyle,\n } = getProps(previousLayout);\n\n const prevMatch = typeOf(previousLayout) === type && path === prevPath;\n const id = prevMatch ? prevId : (props.id ?? uuid());\n const active = type === \"Stack\" ? (props.active ?? prevActive) : undefined;\n\n const key = id;\n const style = prevMatch ? prevStyle : getStyle(type, props, parentType);\n return isLayoutComponent(type)\n ? { id, key, path, style, type, active }\n : { id, key, style, \"data-path\": path };\n}\n\nfunction getChildLayoutProps(\n type: string,\n props: LayoutProps,\n path: string,\n parentType: string | null = null,\n previousLayout?: LayoutModel,\n): [LayoutProps, ReactElement[]] {\n const layoutProps = getLayoutProps(\n type,\n props,\n path,\n parentType,\n previousLayout,\n );\n\n if (props.layout && !previousLayout) {\n return [layoutProps, [layoutFromJson(props.layout, `${path}.0`)]];\n }\n\n const previousChildren =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (previousLayout as any)?.children ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (previousLayout as any)?.props?.children;\n const hasDynamicChildren = props.dropTarget && previousChildren;\n const children = hasDynamicChildren\n ? previousChildren\n : getLayoutChildren(type, props.children, path, previousChildren);\n return [layoutProps, children];\n}\n\nfunction getLayoutChildren(\n type: string,\n children?: ReactElement[],\n path = \"0\",\n previousChildren?: ReactElement[],\n) {\n const kids = Array.isArray(children)\n ? children\n : React.isValidElement(children)\n ? [children]\n : [];\n return isContainer(type)\n ? kids.map((child, i) => {\n const childType = typeOf(child) as string;\n const previousType = typeOf(previousChildren?.[i]);\n\n if (!previousType || childType === previousType) {\n const [layoutProps, children] = getChildLayoutProps(\n childType,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n child.props as any,\n `${path}.${i}`,\n type,\n previousChildren?.[i],\n );\n return React.cloneElement(child, layoutProps, children);\n }\n\n return previousChildren?.[i];\n })\n : children;\n}\n\nconst getStyle = (\n type: string,\n props: LayoutProps,\n parentType?: string | null,\n) => {\n let { style = theKidHasNoStyle } = props;\n if (type === \"Flexbox\") {\n style = {\n flexDirection: props.column ? \"column\" : \"row\",\n ...style,\n display: \"flex\",\n };\n }\n\n if (style.flex) {\n const { flex, ...otherStyles } = style;\n style = {\n ...otherStyles,\n ...expandFlex(typeof flex === \"number\" ? flex : 0),\n };\n } else if (parentType === \"Stack\") {\n style = {\n ...style,\n ...expandFlex(1),\n };\n } else if (\n parentType === \"Flexbox\" &&\n (style.width || style.height) &&\n style.flexBasis === undefined\n ) {\n style = {\n ...style,\n flexBasis: \"auto\",\n flexGrow: 0,\n flexShrink: 0,\n };\n }\n\n return style;\n};\n\nexport function layoutFromJson(\n { active, id = uuid(), type, children, props, state }: LayoutJSON,\n path: string,\n): ReactElement {\n const componentType = type.match(/^[a-z]/) ? type : getLayoutComponent(type);\n\n if (componentType === undefined) {\n throw Error(\n `layoutUtils unable to create component from JSON, unknown type ${type}`,\n );\n }\n\n if (state) {\n setPersistentState(id, state);\n }\n\n return React.createElement(\n componentType,\n {\n active,\n id,\n ...props,\n key: id,\n path,\n },\n children\n ? children.map((child, i) => layoutFromJson(child, `${path}.${i}`))\n : undefined,\n );\n}\n\nexport function layoutToJSON(component: ReactElement) {\n return componentToJson(component);\n}\n\nexport function componentToJson(component: ReactElement): LayoutJSON {\n const type = typeOf(component) as string;\n const { id, children, type: _omit, ...props } = getProps(component);\n\n const state = hasPersistentState(id) ? getPersistentState(id) : undefined;\n\n return {\n id,\n type,\n props: serializeProps(props as LayoutProps),\n state,\n children: React.Children.map(children, componentToJson),\n };\n}\n\nexport function serializeProps(props?: LayoutProps) {\n if (props) {\n const { path, ...otherProps } = props;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result: { [key: string]: any } = {};\n for (const [key, value] of Object.entries(otherProps)) {\n result[key] = serializeValue(value);\n }\n return result;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction serializeValue(value: unknown): any {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n } else if (Array.isArray(value)) {\n return value.map(serializeValue);\n } else if (typeof value === \"object\" && value !== null) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result: { [key: string]: any } = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = serializeValue(v);\n }\n return result;\n }\n}\n\n// This is experimental and the only query we support to start off with is\n// PARENT_CONTAINER\nexport type LayoutQuery = \"PARENT_CONTAINER\";\n\nexport const layoutQuery = (\n query: LayoutQuery,\n path?: string,\n layoutRoot?: ReactElement,\n) => {\n if (path && layoutRoot) {\n const parentElement = followPathToParent(layoutRoot, path);\n if (parentElement) {\n const { id: parentContainerId } = getProps(parentElement);\n const parentContainerType = typeOf(parentElement);\n return {\n parentContainerId,\n parentContainerType,\n };\n }\n return {\n parentContainerType: \"Stack\",\n parentContainerId: \"blah\",\n };\n }\n};\n\nexport const getDefaultTabLabel: TabLabelFactory = (\n component,\n tabIndex,\n existingLabels = [],\n): string => {\n let label =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (component.props as any)?.title ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (component.props as any)?.[\"data-tab-title\"] ??\n existingLabels[tabIndex];\n if (label) {\n return label;\n } else {\n let count = tabIndex;\n do {\n label = `Tab ${++count}`;\n } while (existingLabels.includes(label));\n return label;\n }\n};\n"],"names":["typeOf","cloneElement","getProps","uuid","isLayoutComponent","isContainer","children","expandFlex","getLayoutComponent","setPersistentState","hasPersistentState","getPersistentState","followPathToParent"],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- 'use strict';
2
-
3
- var React = require('react');
4
- var pathUtils = require('../utils/pathUtils.js');
5
- var propUtils = require('../utils/propUtils.js');
6
- var replaceLayoutElement = require('./replace-layout-element.js');
7
-
8
- function moveChild(layoutRoot, { fromIndex, path, toIndex }) {
9
- const target = pathUtils.followPath(layoutRoot, path, true);
10
- const { children } = propUtils.getProps(target);
11
- const replacementChildren = moveChildWithinChildren(
12
- children,
13
- fromIndex,
14
- toIndex
15
- );
16
- const replacement = React.cloneElement(target, void 0, replacementChildren);
17
- return replaceLayoutElement.swapChild(layoutRoot, target, replacement);
18
- }
19
- function moveChildWithinChildren(children, fromIndex, toIndex) {
20
- const newChildren = children.slice();
21
- const [child] = newChildren.splice(fromIndex, 1);
22
- if (toIndex === -1) {
23
- return newChildren.concat(child);
24
- } else {
25
- newChildren.splice(toIndex, 0, child);
26
- return newChildren;
27
- }
28
- }
29
-
30
- exports.moveChild = moveChild;
31
- //# sourceMappingURL=move-layout-element.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"move-layout-element.js","sources":["../../../../packages/vuu-layout/src/layout-reducer/move-layout-element.ts"],"sourcesContent":["import { cloneElement, ReactElement } from \"react\";\nimport { followPath, getProps } from \"../utils\";\nimport { MoveChildAction } from \"./layoutTypes\";\nimport { swapChild } from \"./replace-layout-element\";\n\nexport function moveChild(\n layoutRoot: ReactElement,\n { fromIndex, path, toIndex }: MoveChildAction\n) {\n const target = followPath(layoutRoot, path, true);\n const { children } = getProps(target);\n const replacementChildren = moveChildWithinChildren(\n children,\n fromIndex,\n toIndex\n );\n const replacement = cloneElement(target, undefined, replacementChildren);\n return swapChild(layoutRoot, target, replacement);\n}\n\nfunction moveChildWithinChildren(\n children: ReactElement[],\n fromIndex: number,\n toIndex: number\n) {\n const newChildren = children.slice();\n const [child] = newChildren.splice(fromIndex, 1);\n if (toIndex === -1) {\n return newChildren.concat(child);\n } else {\n newChildren.splice(toIndex, 0, child);\n return newChildren;\n }\n}\n"],"names":["followPath","getProps","cloneElement","swapChild"],"mappings":";;;;;;;AAKO,SAAS,UACd,UACA,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,SACnB,EAAA;AACA,EAAA,MAAM,MAAS,GAAAA,oBAAA,CAAW,UAAY,EAAA,IAAA,EAAM,IAAI,CAAA;AAChD,EAAA,MAAM,EAAE,QAAA,EAAa,GAAAC,kBAAA,CAAS,MAAM,CAAA;AACpC,EAAA,MAAM,mBAAsB,GAAA,uBAAA;AAAA,IAC1B,QAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,WAAc,GAAAC,kBAAA,CAAa,MAAQ,EAAA,KAAA,CAAA,EAAW,mBAAmB,CAAA;AACvE,EAAO,OAAAC,8BAAA,CAAU,UAAY,EAAA,MAAA,EAAQ,WAAW,CAAA;AAClD;AAEA,SAAS,uBAAA,CACP,QACA,EAAA,SAAA,EACA,OACA,EAAA;AACA,EAAM,MAAA,WAAA,GAAc,SAAS,KAAM,EAAA;AACnC,EAAA,MAAM,CAAC,KAAK,CAAA,GAAI,WAAY,CAAA,MAAA,CAAO,WAAW,CAAC,CAAA;AAC/C,EAAA,IAAI,YAAY,CAAI,CAAA,EAAA;AAClB,IAAO,OAAA,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,GAC1B,MAAA;AACL,IAAY,WAAA,CAAA,MAAA,CAAO,OAAS,EAAA,CAAA,EAAG,KAAK,CAAA;AACpC,IAAO,OAAA,WAAA;AAAA;AAEX;;;;"}