@vuu-ui/vuu-layout 0.8.35 → 0.8.37

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 (249) hide show
  1. package/README.md +1 -0
  2. package/cjs/Component.js +14 -0
  3. package/cjs/Component.js.map +1 -0
  4. package/cjs/DraggableLayout.css +18 -0
  5. package/cjs/DraggableLayout.js +24 -0
  6. package/cjs/DraggableLayout.js.map +1 -0
  7. package/cjs/dock-layout/DockLayout.css +36 -0
  8. package/cjs/dock-layout/DockLayout.js +27 -0
  9. package/cjs/dock-layout/DockLayout.js.map +1 -0
  10. package/cjs/dock-layout/Drawer.css +159 -0
  11. package/cjs/dock-layout/Drawer.js +87 -0
  12. package/cjs/dock-layout/Drawer.js.map +1 -0
  13. package/cjs/drag-drop/BoxModel.js +422 -0
  14. package/cjs/drag-drop/BoxModel.js.map +1 -0
  15. package/cjs/drag-drop/DragState.js +154 -0
  16. package/cjs/drag-drop/DragState.js.map +1 -0
  17. package/cjs/drag-drop/Draggable.js +192 -0
  18. package/cjs/drag-drop/Draggable.js.map +1 -0
  19. package/cjs/drag-drop/DropMenu.css +71 -0
  20. package/cjs/drag-drop/DropMenu.js +46 -0
  21. package/cjs/drag-drop/DropMenu.js.map +1 -0
  22. package/cjs/drag-drop/DropTarget.js +244 -0
  23. package/cjs/drag-drop/DropTarget.js.map +1 -0
  24. package/cjs/drag-drop/DropTargetRenderer.css +40 -0
  25. package/cjs/drag-drop/DropTargetRenderer.js +233 -0
  26. package/cjs/drag-drop/DropTargetRenderer.js.map +1 -0
  27. package/cjs/flexbox/Flexbox.css +45 -0
  28. package/cjs/flexbox/Flexbox.js +61 -0
  29. package/cjs/flexbox/Flexbox.js.map +1 -0
  30. package/cjs/flexbox/FlexboxLayout.js +30 -0
  31. package/cjs/flexbox/FlexboxLayout.js.map +1 -0
  32. package/cjs/flexbox/FluidGrid.css +134 -0
  33. package/cjs/flexbox/FluidGrid.js +78 -0
  34. package/cjs/flexbox/FluidGrid.js.map +1 -0
  35. package/cjs/flexbox/FluidGridLayout.js +14 -0
  36. package/cjs/flexbox/FluidGridLayout.js.map +1 -0
  37. package/cjs/flexbox/Splitter.css +148 -0
  38. package/cjs/flexbox/Splitter.js +113 -0
  39. package/cjs/flexbox/Splitter.js.map +1 -0
  40. package/cjs/flexbox/flexbox-utils.js +109 -0
  41. package/cjs/flexbox/flexbox-utils.js.map +1 -0
  42. package/cjs/flexbox/useResponsiveSizing.js +62 -0
  43. package/cjs/flexbox/useResponsiveSizing.js.map +1 -0
  44. package/cjs/flexbox/useSplitterResizing.js +209 -0
  45. package/cjs/flexbox/useSplitterResizing.js.map +1 -0
  46. package/cjs/index.js.map +1 -0
  47. package/cjs/layout-action.js +27 -0
  48. package/cjs/layout-action.js.map +1 -0
  49. package/cjs/layout-header/Header.css +9 -0
  50. package/cjs/layout-header/Header.js +122 -0
  51. package/cjs/layout-header/Header.js.map +1 -0
  52. package/cjs/layout-provider/LayoutProvider.js +178 -0
  53. package/cjs/layout-provider/LayoutProvider.js.map +1 -0
  54. package/cjs/layout-provider/LayoutProviderContext.js +14 -0
  55. package/cjs/layout-provider/LayoutProviderContext.js.map +1 -0
  56. package/cjs/layout-provider/useLayoutDragDrop.js +170 -0
  57. package/cjs/layout-provider/useLayoutDragDrop.js.map +1 -0
  58. package/cjs/layout-reducer/flexUtils.js +219 -0
  59. package/cjs/layout-reducer/flexUtils.js.map +1 -0
  60. package/cjs/layout-reducer/insert-layout-element.js +273 -0
  61. package/cjs/layout-reducer/insert-layout-element.js.map +1 -0
  62. package/cjs/layout-reducer/layout-reducer.js +198 -0
  63. package/cjs/layout-reducer/layout-reducer.js.map +1 -0
  64. package/cjs/layout-reducer/layoutTypes.js +41 -0
  65. package/cjs/layout-reducer/layoutTypes.js.map +1 -0
  66. package/cjs/layout-reducer/layoutUtils.js +226 -0
  67. package/cjs/layout-reducer/layoutUtils.js.map +1 -0
  68. package/cjs/layout-reducer/move-layout-element.js +31 -0
  69. package/cjs/layout-reducer/move-layout-element.js.map +1 -0
  70. package/cjs/layout-reducer/remove-layout-element.js +223 -0
  71. package/cjs/layout-reducer/remove-layout-element.js.map +1 -0
  72. package/cjs/layout-reducer/replace-layout-element.js +91 -0
  73. package/cjs/layout-reducer/replace-layout-element.js.map +1 -0
  74. package/cjs/layout-reducer/resize-flex-children.js +61 -0
  75. package/cjs/layout-reducer/resize-flex-children.js.map +1 -0
  76. package/cjs/layout-reducer/wrap-layout-element.js +212 -0
  77. package/cjs/layout-reducer/wrap-layout-element.js.map +1 -0
  78. package/cjs/layout-view/View.css +62 -0
  79. package/cjs/layout-view/View.js +155 -0
  80. package/cjs/layout-view/View.js.map +1 -0
  81. package/cjs/layout-view/useView.js +92 -0
  82. package/cjs/layout-view/useView.js.map +1 -0
  83. package/cjs/layout-view/useViewResize.js +42 -0
  84. package/cjs/layout-view/useViewResize.js.map +1 -0
  85. package/cjs/layout-view-actions/ViewContext.js +16 -0
  86. package/cjs/layout-view-actions/ViewContext.js.map +1 -0
  87. package/cjs/layout-view-actions/useViewActionDispatcher.js +103 -0
  88. package/cjs/layout-view-actions/useViewActionDispatcher.js.map +1 -0
  89. package/cjs/palette/Palette.css +33 -0
  90. package/cjs/palette/Palette.js +118 -0
  91. package/cjs/palette/Palette.js.map +1 -0
  92. package/cjs/placeholder/LayoutStartPanel.css +30 -0
  93. package/cjs/placeholder/LayoutStartPanel.js +51 -0
  94. package/cjs/placeholder/LayoutStartPanel.js.map +1 -0
  95. package/cjs/placeholder/Placeholder.css +17 -0
  96. package/cjs/placeholder/Placeholder.js +25 -0
  97. package/cjs/placeholder/Placeholder.js.map +1 -0
  98. package/cjs/registry/ComponentRegistry.js +27 -0
  99. package/cjs/registry/ComponentRegistry.js.map +1 -0
  100. package/cjs/responsive/breakpoints.js +36 -0
  101. package/cjs/responsive/breakpoints.js.map +1 -0
  102. package/cjs/responsive/use-breakpoints.js +76 -0
  103. package/cjs/responsive/use-breakpoints.js.map +1 -0
  104. package/cjs/responsive/useResizeObserver.js +118 -0
  105. package/cjs/responsive/useResizeObserver.js.map +1 -0
  106. package/cjs/responsive/utils.js +34 -0
  107. package/cjs/responsive/utils.js.map +1 -0
  108. package/cjs/stack/Stack.css +39 -0
  109. package/cjs/stack/Stack.js +139 -0
  110. package/cjs/stack/Stack.js.map +1 -0
  111. package/cjs/stack/StackLayout.js +122 -0
  112. package/cjs/stack/StackLayout.js.map +1 -0
  113. package/cjs/use-persistent-state.js +109 -0
  114. package/cjs/use-persistent-state.js.map +1 -0
  115. package/cjs/utils/pathUtils.js +293 -0
  116. package/cjs/utils/pathUtils.js.map +1 -0
  117. package/cjs/utils/propUtils.js +27 -0
  118. package/cjs/utils/propUtils.js.map +1 -0
  119. package/cjs/utils/refUtils.js +12 -0
  120. package/cjs/utils/refUtils.js.map +1 -0
  121. package/cjs/utils/styleUtils.js +15 -0
  122. package/cjs/utils/styleUtils.js.map +1 -0
  123. package/cjs/utils/typeOf.js +27 -0
  124. package/cjs/utils/typeOf.js.map +1 -0
  125. package/esm/Component.js +12 -0
  126. package/esm/Component.js.map +1 -0
  127. package/esm/DraggableLayout.css +18 -0
  128. package/esm/DraggableLayout.js +22 -0
  129. package/esm/DraggableLayout.js.map +1 -0
  130. package/esm/dock-layout/DockLayout.css +36 -0
  131. package/esm/dock-layout/DockLayout.js +25 -0
  132. package/esm/dock-layout/DockLayout.js.map +1 -0
  133. package/esm/dock-layout/Drawer.css +159 -0
  134. package/esm/dock-layout/Drawer.js +85 -0
  135. package/esm/dock-layout/Drawer.js.map +1 -0
  136. package/esm/drag-drop/BoxModel.js +415 -0
  137. package/esm/drag-drop/BoxModel.js.map +1 -0
  138. package/esm/drag-drop/DragState.js +152 -0
  139. package/esm/drag-drop/DragState.js.map +1 -0
  140. package/esm/drag-drop/Draggable.js +190 -0
  141. package/esm/drag-drop/Draggable.js.map +1 -0
  142. package/esm/drag-drop/DropMenu.css +71 -0
  143. package/esm/drag-drop/DropMenu.js +43 -0
  144. package/esm/drag-drop/DropMenu.js.map +1 -0
  145. package/esm/drag-drop/DropTarget.js +240 -0
  146. package/esm/drag-drop/DropTarget.js.map +1 -0
  147. package/esm/drag-drop/DropTargetRenderer.css +40 -0
  148. package/esm/drag-drop/DropTargetRenderer.js +231 -0
  149. package/esm/drag-drop/DropTargetRenderer.js.map +1 -0
  150. package/esm/flexbox/Flexbox.css +45 -0
  151. package/esm/flexbox/Flexbox.js +59 -0
  152. package/esm/flexbox/Flexbox.js.map +1 -0
  153. package/esm/flexbox/FlexboxLayout.js +28 -0
  154. package/esm/flexbox/FlexboxLayout.js.map +1 -0
  155. package/esm/flexbox/FluidGrid.css +134 -0
  156. package/esm/flexbox/FluidGrid.js +76 -0
  157. package/esm/flexbox/FluidGrid.js.map +1 -0
  158. package/esm/flexbox/FluidGridLayout.js +12 -0
  159. package/esm/flexbox/FluidGridLayout.js.map +1 -0
  160. package/esm/flexbox/Splitter.css +148 -0
  161. package/esm/flexbox/Splitter.js +111 -0
  162. package/esm/flexbox/Splitter.js.map +1 -0
  163. package/esm/flexbox/flexbox-utils.js +103 -0
  164. package/esm/flexbox/flexbox-utils.js.map +1 -0
  165. package/esm/flexbox/useResponsiveSizing.js +60 -0
  166. package/esm/flexbox/useResponsiveSizing.js.map +1 -0
  167. package/esm/flexbox/useSplitterResizing.js +207 -0
  168. package/esm/flexbox/useSplitterResizing.js.map +1 -0
  169. package/esm/index.js +37 -0
  170. package/esm/index.js.map +1 -0
  171. package/esm/layout-action.js +25 -0
  172. package/esm/layout-action.js.map +1 -0
  173. package/esm/layout-header/Header.css +9 -0
  174. package/esm/layout-header/Header.js +120 -0
  175. package/esm/layout-header/Header.js.map +1 -0
  176. package/esm/layout-provider/LayoutProvider.js +172 -0
  177. package/esm/layout-provider/LayoutProvider.js.map +1 -0
  178. package/esm/layout-provider/LayoutProviderContext.js +12 -0
  179. package/esm/layout-provider/LayoutProviderContext.js.map +1 -0
  180. package/esm/layout-provider/useLayoutDragDrop.js +168 -0
  181. package/esm/layout-provider/useLayoutDragDrop.js.map +1 -0
  182. package/esm/layout-reducer/flexUtils.js +210 -0
  183. package/esm/layout-reducer/flexUtils.js.map +1 -0
  184. package/esm/layout-reducer/insert-layout-element.js +269 -0
  185. package/esm/layout-reducer/insert-layout-element.js.map +1 -0
  186. package/esm/layout-reducer/layout-reducer.js +196 -0
  187. package/esm/layout-reducer/layout-reducer.js.map +1 -0
  188. package/esm/layout-reducer/layoutTypes.js +37 -0
  189. package/esm/layout-reducer/layoutTypes.js.map +1 -0
  190. package/esm/layout-reducer/layoutUtils.js +215 -0
  191. package/esm/layout-reducer/layoutUtils.js.map +1 -0
  192. package/esm/layout-reducer/move-layout-element.js +29 -0
  193. package/esm/layout-reducer/move-layout-element.js.map +1 -0
  194. package/esm/layout-reducer/remove-layout-element.js +221 -0
  195. package/esm/layout-reducer/remove-layout-element.js.map +1 -0
  196. package/esm/layout-reducer/replace-layout-element.js +87 -0
  197. package/esm/layout-reducer/replace-layout-element.js.map +1 -0
  198. package/esm/layout-reducer/resize-flex-children.js +58 -0
  199. package/esm/layout-reducer/resize-flex-children.js.map +1 -0
  200. package/esm/layout-reducer/wrap-layout-element.js +210 -0
  201. package/esm/layout-reducer/wrap-layout-element.js.map +1 -0
  202. package/esm/layout-view/View.css +62 -0
  203. package/esm/layout-view/View.js +153 -0
  204. package/esm/layout-view/View.js.map +1 -0
  205. package/esm/layout-view/useView.js +90 -0
  206. package/esm/layout-view/useView.js.map +1 -0
  207. package/esm/layout-view/useViewResize.js +40 -0
  208. package/esm/layout-view/useViewResize.js.map +1 -0
  209. package/esm/layout-view-actions/ViewContext.js +12 -0
  210. package/esm/layout-view-actions/ViewContext.js.map +1 -0
  211. package/esm/layout-view-actions/useViewActionDispatcher.js +101 -0
  212. package/esm/layout-view-actions/useViewActionDispatcher.js.map +1 -0
  213. package/esm/palette/Palette.css +33 -0
  214. package/esm/palette/Palette.js +115 -0
  215. package/esm/palette/Palette.js.map +1 -0
  216. package/esm/placeholder/LayoutStartPanel.css +30 -0
  217. package/esm/placeholder/LayoutStartPanel.js +49 -0
  218. package/esm/placeholder/LayoutStartPanel.js.map +1 -0
  219. package/esm/placeholder/Placeholder.css +17 -0
  220. package/esm/placeholder/Placeholder.js +23 -0
  221. package/esm/placeholder/Placeholder.js.map +1 -0
  222. package/esm/registry/ComponentRegistry.js +21 -0
  223. package/esm/registry/ComponentRegistry.js.map +1 -0
  224. package/esm/responsive/breakpoints.js +33 -0
  225. package/esm/responsive/breakpoints.js.map +1 -0
  226. package/esm/responsive/use-breakpoints.js +74 -0
  227. package/esm/responsive/use-breakpoints.js.map +1 -0
  228. package/esm/responsive/useResizeObserver.js +112 -0
  229. package/esm/responsive/useResizeObserver.js.map +1 -0
  230. package/esm/responsive/utils.js +31 -0
  231. package/esm/responsive/utils.js.map +1 -0
  232. package/esm/stack/Stack.css +39 -0
  233. package/esm/stack/Stack.js +137 -0
  234. package/esm/stack/Stack.js.map +1 -0
  235. package/esm/stack/StackLayout.js +120 -0
  236. package/esm/stack/StackLayout.js.map +1 -0
  237. package/esm/use-persistent-state.js +104 -0
  238. package/esm/use-persistent-state.js.map +1 -0
  239. package/esm/utils/pathUtils.js +280 -0
  240. package/esm/utils/pathUtils.js.map +1 -0
  241. package/esm/utils/propUtils.js +23 -0
  242. package/esm/utils/propUtils.js.map +1 -0
  243. package/esm/utils/refUtils.js +10 -0
  244. package/esm/utils/refUtils.js.map +1 -0
  245. package/esm/utils/styleUtils.js +13 -0
  246. package/esm/utils/styleUtils.js.map +1 -0
  247. package/esm/utils/typeOf.js +23 -0
  248. package/esm/utils/typeOf.js.map +1 -0
  249. package/package.json +10 -8
@@ -0,0 +1,40 @@
1
+ #hw-drag-canvas {
2
+ visibility: hidden;
3
+ z-index: 10;
4
+ position: absolute;
5
+ top: 0px;
6
+ left: 0;
7
+ right: 0;
8
+ bottom: 0;
9
+ background-color: transparent;
10
+ }
11
+
12
+ #hw-drag-canvas > svg {
13
+ position: absolute;
14
+ }
15
+
16
+ .drawing #hw-drag-canvas {
17
+ visibility: visible;
18
+ }
19
+
20
+ path.drop-target {
21
+ stroke: blue;
22
+ stroke-width: 4px;
23
+ fill: transparent;
24
+ }
25
+
26
+ path.drop-target.centre {
27
+ stroke: red;
28
+ }
29
+
30
+ #vuu-drop-outline {
31
+ fill: rgba(0,0,255,.3);
32
+ stroke: none;
33
+ stroke-dasharray: 4 2;
34
+ }
35
+
36
+ #hw-drop-guides {
37
+ fill: none;
38
+ stroke: rgba(0, 0, 0, 0.3);
39
+ stroke-dasharray: 2 3;
40
+ }
@@ -0,0 +1,233 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuPopups = require('@vuu-ui/vuu-popups');
5
+ var BoxModel = require('./BoxModel.js');
6
+ var DropMenu = require('./DropMenu.js');
7
+
8
+ let _multiDropOptions = false;
9
+ let _hoverDropTarget = null;
10
+ let _shiftedTab = null;
11
+ const onHoverDropTarget = (dropTarget) => _hoverDropTarget = dropTarget;
12
+ const start = ([x, y]) => `M${x},${y}`;
13
+ const point = ([x, y]) => `L${x},${y}`;
14
+ const pathFromPoints = ([p1, ...points]) => `${start(p1)} ${points.map(point)}Z`;
15
+ const pathFromGuideLines = (guideLines) => {
16
+ if (guideLines) {
17
+ const [x1, y1, x2, y2, x3, y3, x4, y4] = guideLines;
18
+ return `M${x1},${y1} L${x2},${y2} M${x3},${y3} L${x4},${y4}`;
19
+ } else {
20
+ return "";
21
+ }
22
+ };
23
+ function insertSVGRoot() {
24
+ if (document.getElementById("hw-drag-canvas") === null) {
25
+ const root = document.getElementById("root");
26
+ const container = document.createElement("div");
27
+ container.id = "hw-drag-canvas";
28
+ container.innerHTML = `
29
+ <svg width="100%" height="100%">
30
+ <path id="hw-drop-guides" />
31
+ <path
32
+ id="vuu-drop-outline"
33
+ d="M300,132 L380,132 L380,100 L460,100 L460,132, L550,132 L550,350 L300,350z">
34
+ <animate
35
+ attributeName="d"
36
+ id="hw-drop-outline-animate"
37
+ begin="indefinite"
38
+ dur="300ms"
39
+ fill="freeze"
40
+ to="M255,33 L255,33,L255,1,L315,1,L315,1,L794,1,L794,164,L255,164Z"
41
+ />
42
+ </path>
43
+ </svg>
44
+ `;
45
+ document.body.insertBefore(container, root);
46
+ }
47
+ }
48
+ class DropTargetCanvas {
49
+ constructor() {
50
+ this.currentPath = null;
51
+ this.tabMode = null;
52
+ insertSVGRoot();
53
+ }
54
+ prepare(dragRect, tabMode = "full-view") {
55
+ document.body.classList.add("drawing");
56
+ this.currentPath = null;
57
+ this.tabMode = tabMode;
58
+ const points = this.getPoints(0, 0, 0, 0);
59
+ const d = pathFromPoints(points);
60
+ const dropOutlinePath = document.getElementById("vuu-drop-outline");
61
+ dropOutlinePath?.setAttribute("d", d);
62
+ this.currentPath = d;
63
+ }
64
+ clear() {
65
+ _hoverDropTarget = null;
66
+ clearShiftedTab();
67
+ document.body.classList.remove("drawing");
68
+ vuuPopups.PopupService.hidePopup();
69
+ }
70
+ get hoverDropTarget() {
71
+ return _hoverDropTarget;
72
+ }
73
+ getPoints(x, y, width, height, tabLeft = 0, tabWidth = 0, tabHeight = 0) {
74
+ const tabOnly = this.tabMode === "tab-only";
75
+ if (tabWidth === 0) {
76
+ return [
77
+ [x, y + tabHeight],
78
+ [x, y + tabHeight],
79
+ [x, y],
80
+ [x + tabWidth, y],
81
+ [x + tabWidth, y],
82
+ [x + width, y],
83
+ [x + width, y + height],
84
+ [x, y + height]
85
+ ];
86
+ } else if (tabOnly) {
87
+ const left = tabLeft;
88
+ return [
89
+ [left, y],
90
+ [left, y],
91
+ [left + tabWidth, y],
92
+ [left + tabWidth, y],
93
+ [left + tabWidth, y + tabHeight],
94
+ [left + tabWidth, y + tabHeight],
95
+ [left, y + tabHeight],
96
+ [left, y + tabHeight]
97
+ ];
98
+ } else if (tabLeft === 0) {
99
+ return [
100
+ [x, y + tabHeight],
101
+ [x, y + tabHeight],
102
+ [x, y],
103
+ [x + tabWidth, y],
104
+ [x + tabWidth, y + tabHeight],
105
+ [x + width, y + tabHeight],
106
+ [x + width, y + height],
107
+ [x, y + height]
108
+ ];
109
+ } else {
110
+ return [
111
+ [x, y + tabHeight],
112
+ [x + tabLeft, y + tabHeight],
113
+ [x + tabLeft, y],
114
+ [x + tabLeft, y],
115
+ [x + tabLeft, y + tabHeight],
116
+ [x + width, y + tabHeight],
117
+ [x + width, y + height],
118
+ [x, y + height]
119
+ ];
120
+ }
121
+ }
122
+ draw(dropTarget, dragState) {
123
+ const sameDropTarget = false;
124
+ const wasMultiDrop = _multiDropOptions;
125
+ if (_hoverDropTarget !== null) {
126
+ this.drawTarget(_hoverDropTarget);
127
+ } else {
128
+ {
129
+ _multiDropOptions = dropTarget.nextDropTarget != null;
130
+ if (dropTarget.pos.tab) {
131
+ moveExistingTabs(dropTarget);
132
+ } else if (_shiftedTab) {
133
+ clearShiftedTab();
134
+ }
135
+ this.drawTarget(dropTarget, dragState);
136
+ }
137
+ if (_multiDropOptions) {
138
+ const [left, top, orientation] = DropMenu.computeMenuPosition(dropTarget);
139
+ if (!wasMultiDrop || !sameDropTarget) {
140
+ const component = /* @__PURE__ */ jsxRuntime.jsx(
141
+ DropMenu.DropMenu,
142
+ {
143
+ dropTarget,
144
+ onHover: onHoverDropTarget,
145
+ orientation
146
+ }
147
+ );
148
+ vuuPopups.PopupService.showPopup({
149
+ left,
150
+ top,
151
+ component
152
+ });
153
+ }
154
+ } else {
155
+ vuuPopups.PopupService.hidePopup();
156
+ }
157
+ }
158
+ }
159
+ drawTarget(dropTarget, dragState) {
160
+ const lineWidth = 6;
161
+ const targetDropOutline = dropTarget.getTargetDropOutline(
162
+ lineWidth,
163
+ dragState
164
+ );
165
+ if (targetDropOutline) {
166
+ const { l, t, r, b, tabLeft, tabWidth, tabHeight, guideLines } = targetDropOutline;
167
+ const w = r - l;
168
+ const h = b - t;
169
+ if (this.currentPath) {
170
+ const path2 = document.getElementById("vuu-drop-outline");
171
+ path2?.setAttribute("d", this.currentPath);
172
+ }
173
+ const points = this.getPoints(l, t, w, h, tabLeft, tabWidth, tabHeight);
174
+ const path = pathFromPoints(points);
175
+ const animation = document.getElementById(
176
+ "hw-drop-outline-animate"
177
+ );
178
+ animation?.setAttribute("to", path);
179
+ animation?.beginElement();
180
+ this.currentPath = path;
181
+ const dropGuidePath = document.getElementById("hw-drop-guides");
182
+ dropGuidePath?.setAttribute("d", pathFromGuideLines(guideLines));
183
+ }
184
+ }
185
+ }
186
+ const cssShiftRight = "transition:margin-left .4s ease-out;margin-left: 63px";
187
+ const cssShiftBack = "transition:margin-left .4s ease-out;margin-left: 0px";
188
+ function moveExistingTabs(dropTarget) {
189
+ const { AFTER, BEFORE } = BoxModel.RelativeDropPosition;
190
+ const {
191
+ clientRect: { Stack },
192
+ pos: {
193
+ // tab: { index: tabIndex, positionRelativeToTab }
194
+ tab
195
+ }
196
+ } = dropTarget;
197
+ const { id } = dropTarget.component.props;
198
+ let tabEl = null;
199
+ if (Stack && tab && tab.positionRelativeToTab !== AFTER) {
200
+ const tabOffset = tab.positionRelativeToTab === BEFORE ? 1 : 2;
201
+ const selector = `:scope .hwTabstrip > .hwTabstrip-inner > .hwTab:nth-child(${tab.index + tabOffset})`;
202
+ tabEl = document.getElementById(id)?.querySelector(selector);
203
+ if (tabEl) {
204
+ if (_shiftedTab === null || _shiftedTab !== tabEl) {
205
+ tabEl.style.cssText = cssShiftRight;
206
+ if (_shiftedTab) {
207
+ _shiftedTab.style.cssText = cssShiftBack;
208
+ }
209
+ _shiftedTab = tabEl;
210
+ }
211
+ } else {
212
+ clearShiftedTab();
213
+ }
214
+ } else if (tab?.positionRelativeToTab === BEFORE) {
215
+ if (_shiftedTab === null) {
216
+ const selector = ".vuuHeader-title";
217
+ tabEl = document.getElementById(id)?.querySelector(selector);
218
+ tabEl.style.cssText = cssShiftRight;
219
+ _shiftedTab = tabEl;
220
+ }
221
+ } else {
222
+ clearShiftedTab();
223
+ }
224
+ }
225
+ function clearShiftedTab() {
226
+ if (_shiftedTab) {
227
+ _shiftedTab.style.cssText = cssShiftBack;
228
+ _shiftedTab = null;
229
+ }
230
+ }
231
+
232
+ module.exports = DropTargetCanvas;
233
+ //# sourceMappingURL=DropTargetRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropTargetRenderer.js","sources":["../../src/drag-drop/DropTargetRenderer.tsx"],"sourcesContent":["import { PopupService } from \"@vuu-ui/vuu-popups\";\nimport { RelativeDropPosition } from \"./BoxModel\";\nimport { DragDropRect } from \"./dragDropTypes\";\nimport { DragState } from \"./DragState\";\nimport { computeMenuPosition, DropMenu } from \"./DropMenu\";\nimport { DropTarget, GuideLine } from \"./DropTarget\";\n\nimport \"./DropTargetRenderer.css\";\n\ntype Point = [number, number];\ntype TabMode = \"full-view\" | \"tab-only\";\n\nlet _multiDropOptions = false;\nlet _hoverDropTarget: DropTarget | null = null;\nlet _shiftedTab: HTMLElement | null = null;\n\nconst onHoverDropTarget = (dropTarget: DropTarget | null) =>\n (_hoverDropTarget = dropTarget);\n\nconst start = ([x, y]: Point) => `M${x},${y}`;\nconst point = ([x, y]: Point) => `L${x},${y}`;\nconst pathFromPoints = ([p1, ...points]: Point[]) =>\n `${start(p1)} ${points.map(point)}Z`;\n\nconst pathFromGuideLines = (guideLines?: GuideLine) => {\n if (guideLines) {\n const [x1, y1, x2, y2, x3, y3, x4, y4] = guideLines;\n return `M${x1},${y1} L${x2},${y2} M${x3},${y3} L${x4},${y4}`;\n } else {\n return \"\";\n }\n};\n\nfunction insertSVGRoot() {\n if (document.getElementById(\"hw-drag-canvas\") === null) {\n const root = document.getElementById(\"root\");\n const container = document.createElement(\"div\");\n container.id = \"hw-drag-canvas\";\n container.innerHTML = `\n <svg width=\"100%\" height=\"100%\">\n <path id=\"hw-drop-guides\" />\n <path\n id=\"vuu-drop-outline\"\n d=\"M300,132 L380,132 L380,100 L460,100 L460,132, L550,132 L550,350 L300,350z\">\n <animate\n attributeName=\"d\"\n id=\"hw-drop-outline-animate\"\n begin=\"indefinite\"\n dur=\"300ms\"\n fill=\"freeze\"\n to=\"M255,33 L255,33,L255,1,L315,1,L315,1,L794,1,L794,164,L255,164Z\"\n />\n </path>\n </svg>\n `;\n document.body.insertBefore(container, root);\n }\n}\nexport default class DropTargetCanvas {\n private currentPath: string | null = null;\n private tabMode: TabMode | null = null;\n\n constructor() {\n insertSVGRoot();\n }\n\n prepare(dragRect: DragDropRect, tabMode: TabMode = \"full-view\") {\n // don't do this on body\n document.body.classList.add(\"drawing\");\n this.currentPath = null;\n this.tabMode = tabMode;\n\n const points = this.getPoints(0, 0, 0, 0);\n // const points = this.getPoints(left, top, width, height);\n const d = pathFromPoints(points);\n\n const dropOutlinePath = document.getElementById(\"vuu-drop-outline\");\n dropOutlinePath?.setAttribute(\"d\", d);\n this.currentPath = d;\n }\n\n clear() {\n // don't do this on body\n _hoverDropTarget = null;\n clearShiftedTab();\n document.body.classList.remove(\"drawing\");\n PopupService.hidePopup();\n }\n\n get hoverDropTarget() {\n return _hoverDropTarget;\n }\n\n getPoints(\n x: number,\n y: number,\n width: number,\n height: number,\n tabLeft = 0,\n tabWidth = 0,\n tabHeight = 0\n ): Point[] {\n const tabOnly = this.tabMode === \"tab-only\";\n if (tabWidth === 0) {\n return [\n [x, y + tabHeight],\n [x, y + tabHeight],\n [x, y],\n [x + tabWidth, y],\n [x + tabWidth, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height],\n ];\n } else if (tabOnly) {\n const left = tabLeft;\n return [\n [left, y],\n [left, y],\n [left + tabWidth, y],\n [left + tabWidth, y],\n [left + tabWidth, y + tabHeight],\n [left + tabWidth, y + tabHeight],\n [left, y + tabHeight],\n [left, y + tabHeight],\n ];\n } else if (tabLeft === 0) {\n return [\n [x, y + tabHeight],\n [x, y + tabHeight],\n [x, y],\n [x + tabWidth, y],\n [x + tabWidth, y + tabHeight],\n [x + width, y + tabHeight],\n [x + width, y + height],\n [x, y + height],\n ];\n } else {\n return [\n [x, y + tabHeight],\n [x + tabLeft, y + tabHeight],\n [x + tabLeft, y],\n [x + tabLeft, y],\n [x + tabLeft, y + tabHeight],\n [x + width, y + tabHeight],\n [x + width, y + height],\n [x, y + height],\n ];\n }\n }\n\n draw(dropTarget: DropTarget, dragState: DragState) {\n const sameDropTarget = false;\n const wasMultiDrop = _multiDropOptions;\n\n if (_hoverDropTarget !== null) {\n this.drawTarget(_hoverDropTarget);\n } else {\n if (sameDropTarget === false) {\n _multiDropOptions = dropTarget.nextDropTarget != null;\n if (dropTarget.pos.tab) {\n moveExistingTabs(dropTarget);\n } else if (_shiftedTab) {\n clearShiftedTab();\n }\n this.drawTarget(dropTarget, dragState);\n }\n\n if (_multiDropOptions) {\n const [left, top, orientation] = computeMenuPosition(dropTarget);\n if (!wasMultiDrop || !sameDropTarget) {\n const component = (\n <DropMenu\n dropTarget={dropTarget}\n onHover={onHoverDropTarget}\n orientation={orientation}\n />\n );\n PopupService.showPopup({\n left,\n top,\n component,\n });\n }\n } else {\n PopupService.hidePopup();\n }\n }\n }\n\n drawTarget(dropTarget: DropTarget, dragState?: DragState) {\n const lineWidth = 6;\n\n const targetDropOutline = dropTarget.getTargetDropOutline(\n lineWidth,\n dragState\n );\n\n if (targetDropOutline) {\n const { l, t, r, b, tabLeft, tabWidth, tabHeight, guideLines } =\n targetDropOutline;\n const w = r - l;\n const h = b - t;\n\n if (this.currentPath) {\n const path = document.getElementById(\"vuu-drop-outline\");\n path?.setAttribute(\"d\", this.currentPath);\n }\n\n const points = this.getPoints(l, t, w, h, tabLeft, tabWidth, tabHeight);\n const path = pathFromPoints(points);\n const animation = document.getElementById(\n \"hw-drop-outline-animate\"\n ) as unknown as SVGAnimateElement;\n animation?.setAttribute(\"to\", path);\n animation?.beginElement();\n this.currentPath = path;\n\n const dropGuidePath = document.getElementById(\"hw-drop-guides\");\n dropGuidePath?.setAttribute(\"d\", pathFromGuideLines(guideLines));\n }\n }\n}\n\nconst cssShiftRight = \"transition:margin-left .4s ease-out;margin-left: 63px\";\nconst cssShiftBack = \"transition:margin-left .4s ease-out;margin-left: 0px\";\n\nfunction moveExistingTabs(dropTarget: DropTarget) {\n const { AFTER, BEFORE } = RelativeDropPosition;\n const {\n clientRect: { Stack },\n pos: {\n // tab: { index: tabIndex, positionRelativeToTab }\n tab,\n },\n } = dropTarget;\n\n const { id } = dropTarget.component.props;\n let tabEl = null;\n // console.log(`tabPos = ${tabPos} (width=${tabWidth}) x=${x}`)\n if (Stack && tab && tab.positionRelativeToTab !== AFTER) {\n const tabOffset = tab.positionRelativeToTab === BEFORE ? 1 : 2;\n const selector = `:scope .hwTabstrip > .hwTabstrip-inner > .hwTab:nth-child(${\n tab.index + tabOffset\n })`;\n tabEl = document.getElementById(id)?.querySelector(selector) as HTMLElement;\n if (tabEl) {\n if (_shiftedTab === null || _shiftedTab !== tabEl) {\n tabEl.style.cssText = cssShiftRight;\n if (_shiftedTab) {\n _shiftedTab.style.cssText = cssShiftBack;\n }\n _shiftedTab = tabEl;\n }\n } else {\n clearShiftedTab();\n }\n } else if (tab?.positionRelativeToTab === BEFORE) {\n if (_shiftedTab === null) {\n const selector = \".vuuHeader-title\";\n tabEl = document\n .getElementById(id)\n ?.querySelector(selector) as HTMLElement;\n tabEl.style.cssText = cssShiftRight;\n _shiftedTab = tabEl;\n }\n } else {\n clearShiftedTab();\n }\n}\n\nfunction clearShiftedTab() {\n if (_shiftedTab) {\n _shiftedTab.style.cssText = cssShiftBack;\n _shiftedTab = null;\n }\n}\n"],"names":["PopupService","computeMenuPosition","jsx","DropMenu","path","RelativeDropPosition"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ :root {
2
+ --hw-space-unit: 4px;
3
+ --hw-flex-gap: 3;
4
+ --hw-fluid-grid-col-bg: rgba(200, 200, 200, 0.3);
5
+ }
6
+
7
+ .hwFlexbox {
8
+ background-color: var(--container1-background);
9
+ box-sizing: border-box;
10
+ display: flex;
11
+ gap: calc(var(--spacing) * var(--space));
12
+ min-height: 0;
13
+ min-width: 0;
14
+ overflow: hidden;
15
+ }
16
+
17
+ .hwFlexbox-column {
18
+ flex-direction: column;
19
+ }
20
+
21
+ .hwFlexbox-row {
22
+ flex-direction: row;
23
+ }
24
+
25
+ .hwFlexbox > .Splitter {
26
+ flex-basis: auto;
27
+ flex-grow: 0;
28
+ flex-shrink: 0;
29
+ }
30
+
31
+ .hwFlexbox.full-page {
32
+ height: 100vh;
33
+ width: 100vw;
34
+ }
35
+
36
+ .flex-fill {
37
+ border-color: red;
38
+ flex: 0;
39
+ flex-grow: 1;
40
+ flex-shrink: 1;
41
+ }
42
+
43
+ .vuuView.flex-fill {
44
+ border-color: red;
45
+ }
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var cx = require('clsx');
6
+ var React = require('react');
7
+ var useSplitterResizing = require('./useSplitterResizing.js');
8
+
9
+ const classBase = "hwFlexbox";
10
+ const Flexbox = React.forwardRef(function Flexbox2(props, ref) {
11
+ const {
12
+ breakPoints,
13
+ children,
14
+ // cols: colsProp,
15
+ column,
16
+ className: classNameProp,
17
+ flexFill,
18
+ gap,
19
+ fullPage,
20
+ id,
21
+ onSplitterMoved,
22
+ resizeable,
23
+ row,
24
+ spacing,
25
+ splitterSize,
26
+ style,
27
+ ...rest
28
+ } = props;
29
+ const { content, rootRef } = useSplitterResizing.useSplitterResizing({
30
+ children,
31
+ // cols: colsProp,
32
+ onSplitterMoved,
33
+ style
34
+ });
35
+ const className = cx(classBase, classNameProp, {
36
+ [`${classBase}-column`]: column,
37
+ [`${classBase}-row`]: row,
38
+ "flex-fill": flexFill,
39
+ "full-page": fullPage
40
+ });
41
+ return /* @__PURE__ */ jsxRuntime.jsx(
42
+ "div",
43
+ {
44
+ ...rest,
45
+ className,
46
+ "data-resizeable": resizeable || void 0,
47
+ id,
48
+ ref: core.useForkRef(rootRef, ref),
49
+ style: {
50
+ ...style,
51
+ gap,
52
+ "--spacing": spacing
53
+ },
54
+ children: content
55
+ }
56
+ );
57
+ });
58
+ Flexbox.displayName = "Flexbox";
59
+
60
+ module.exports = Flexbox;
61
+ //# sourceMappingURL=Flexbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Flexbox.js","sources":["../../src/flexbox/Flexbox.tsx"],"sourcesContent":["import { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { CSSProperties, ForwardedRef, forwardRef } from \"react\";\nimport { FlexboxProps } from \"./flexboxTypes\";\nimport { useSplitterResizing } from \"./useSplitterResizing\";\n\nimport \"./Flexbox.css\";\n\nconst classBase = \"hwFlexbox\";\n\nconst Flexbox = forwardRef(function Flexbox(\n props: FlexboxProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const {\n breakPoints,\n children,\n // cols: colsProp,\n column,\n className: classNameProp,\n flexFill,\n gap,\n fullPage,\n id,\n onSplitterMoved,\n resizeable,\n row,\n spacing,\n splitterSize,\n style,\n ...rest\n } = props;\n\n const { content, rootRef } = useSplitterResizing({\n children,\n // cols: colsProp,\n onSplitterMoved,\n style,\n });\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-column`]: column,\n [`${classBase}-row`]: row,\n \"flex-fill\": flexFill,\n \"full-page\": fullPage,\n });\n\n return (\n <div\n {...rest}\n className={className}\n // data-cols={cols}\n data-resizeable={resizeable || undefined}\n id={id}\n ref={useForkRef(rootRef, ref)}\n style={\n {\n ...style,\n gap,\n \"--spacing\": spacing,\n } as CSSProperties\n }\n >\n {content}\n </div>\n );\n});\nFlexbox.displayName = \"Flexbox\";\n\nexport default Flexbox;\n"],"names":["forwardRef","Flexbox","useSplitterResizing","jsx","useForkRef"],"mappings":";;;;;;;;AAQA,MAAM,SAAY,GAAA,WAAA,CAAA;AAElB,MAAM,OAAU,GAAAA,gBAAA,CAAW,SAASC,QAAAA,CAClC,OACA,GACA,EAAA;AACA,EAAM,MAAA;AAAA,IACJ,WAAA;AAAA,IACA,QAAA;AAAA;AAAA,IAEA,MAAA;AAAA,IACA,SAAW,EAAA,aAAA;AAAA,IACX,QAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA;AAAA,IACA,EAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG,IAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,EAAE,OAAA,EAAS,OAAQ,EAAA,GAAIC,uCAAoB,CAAA;AAAA,IAC/C,QAAA;AAAA;AAAA,IAEA,eAAA;AAAA,IACA,KAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAe,EAAA;AAAA,IAC7C,CAAC,CAAA,EAAG,SAAS,CAAA,OAAA,CAAS,GAAG,MAAA;AAAA,IACzB,CAAC,CAAA,EAAG,SAAS,CAAA,IAAA,CAAM,GAAG,GAAA;AAAA,IACtB,WAAa,EAAA,QAAA;AAAA,IACb,WAAa,EAAA,QAAA;AAAA,GACd,CAAA,CAAA;AAED,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,SAAA;AAAA,MAEA,mBAAiB,UAAc,IAAA,KAAA,CAAA;AAAA,MAC/B,EAAA;AAAA,MACA,GAAA,EAAKC,eAAW,CAAA,OAAA,EAAS,GAAG,CAAA;AAAA,MAC5B,KACE,EAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACH,GAAA;AAAA,QACA,WAAa,EAAA,OAAA;AAAA,OACf;AAAA,MAGD,QAAA,EAAA,OAAA;AAAA,KAAA;AAAA,GACH,CAAA;AAEJ,CAAC,EAAA;AACD,OAAA,CAAQ,WAAc,GAAA,SAAA;;;;"}
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var layoutAction = require('../layout-action.js');
6
+ var LayoutProvider = require('../layout-provider/LayoutProvider.js');
7
+ require('../layout-provider/LayoutProviderContext.js');
8
+ var ComponentRegistry = require('../registry/ComponentRegistry.js');
9
+ var Flexbox = require('./Flexbox.js');
10
+
11
+ const FlexboxLayout = function FlexboxLayout2(props) {
12
+ const { path } = props;
13
+ const dispatch = LayoutProvider.useLayoutProviderDispatch();
14
+ const handleSplitterMoved = React.useCallback(
15
+ (sizes) => {
16
+ dispatch({
17
+ type: layoutAction.Action.SPLITTER_RESIZE,
18
+ path,
19
+ sizes
20
+ });
21
+ },
22
+ [dispatch, path]
23
+ );
24
+ return /* @__PURE__ */ jsxRuntime.jsx(Flexbox, { ...props, onSplitterMoved: handleSplitterMoved });
25
+ };
26
+ FlexboxLayout.displayName = "Flexbox";
27
+ ComponentRegistry.registerComponent("Flexbox", FlexboxLayout, "container");
28
+
29
+ exports.FlexboxLayout = FlexboxLayout;
30
+ //# sourceMappingURL=FlexboxLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlexboxLayout.js","sources":["../../src/flexbox/FlexboxLayout.tsx"],"sourcesContent":["import { useCallback } from \"react\";\nimport { Action } from \"../layout-action\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { SplitterResizeAction } from \"../layout-reducer\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport Flexbox from \"./Flexbox\";\nimport { FlexboxLayoutProps } from \"./flexboxTypes\";\n\nexport const FlexboxLayout = function FlexboxLayout(props: FlexboxLayoutProps) {\n const { path } = props;\n const dispatch = useLayoutProviderDispatch();\n\n const handleSplitterMoved = useCallback(\n (sizes) => {\n dispatch({\n type: Action.SPLITTER_RESIZE,\n path,\n sizes,\n } as SplitterResizeAction);\n },\n [dispatch, path]\n );\n\n return <Flexbox {...props} onSplitterMoved={handleSplitterMoved} />;\n};\nFlexboxLayout.displayName = \"Flexbox\";\n\nregisterComponent(\"Flexbox\", FlexboxLayout, \"container\");\n"],"names":["FlexboxLayout","useLayoutProviderDispatch","useCallback","Action","jsx","registerComponent"],"mappings":";;;;;;;;;;AAQa,MAAA,aAAA,GAAgB,SAASA,cAAAA,CAAc,KAA2B,EAAA;AAC7E,EAAM,MAAA,EAAE,MAAS,GAAA,KAAA,CAAA;AACjB,EAAA,MAAM,WAAWC,wCAA0B,EAAA,CAAA;AAE3C,EAAA,MAAM,mBAAsB,GAAAC,iBAAA;AAAA,IAC1B,CAAC,KAAU,KAAA;AACT,MAAS,QAAA,CAAA;AAAA,QACP,MAAMC,mBAAO,CAAA,eAAA;AAAA,QACb,IAAA;AAAA,QACA,KAAA;AAAA,OACuB,CAAA,CAAA;AAAA,KAC3B;AAAA,IACA,CAAC,UAAU,IAAI,CAAA;AAAA,GACjB,CAAA;AAEA,EAAA,uBAAQC,cAAA,CAAA,OAAA,EAAA,EAAS,GAAG,KAAA,EAAO,iBAAiB,mBAAqB,EAAA,CAAA,CAAA;AACnE,EAAA;AACA,aAAA,CAAc,WAAc,GAAA,SAAA,CAAA;AAE5BC,mCAAkB,CAAA,SAAA,EAAW,eAAe,WAAW,CAAA;;;;"}
@@ -0,0 +1,134 @@
1
+ :root {
2
+ --hw-space-unit: 4px;
3
+ --hw-fluid-grid-col-bg: rgba(252, 209, 232, 0.7);
4
+ }
5
+
6
+ .hwFluidGrid {
7
+ --gap: var(--gutter-width);
8
+
9
+ display: flex;
10
+ gap: calc(var(--grid-gap) * var(--hw-space-unit));
11
+ flex-wrap: wrap;
12
+ padding: 0;
13
+ }
14
+
15
+ .hwFluidGrid > * {
16
+ --gutter-width: calc(var(--hw-flex-gap) * var(--hw-space-unit));
17
+ --gutter-count: calc(var(--parent-col-count) - 1);
18
+ --total-gutter-width: calc(var(--gutter-count) * var(--gutter-width));
19
+ --available-width: calc(100% - var(--total-gutter-width));
20
+
21
+ flex-basis: 0;
22
+ flex-grow: 1;
23
+ flex-shrink: 1;
24
+ position: relative;
25
+ }
26
+
27
+ .hwFluidGrid > *:after {
28
+ content: '';
29
+ position: absolute;
30
+ top: 0;
31
+ left: 0;
32
+ right: 0;
33
+ bottom: 0;
34
+ border: dashed 2px blue;
35
+ }
36
+
37
+ .hwFluidGrid > [data-xs] {
38
+ --internal-gutter-count: calc(var(--col-span) - 1);
39
+ --percent-width: calc(var(--col-span) / var(--parent-col-count));
40
+ --internal-gutter-width: calc(var(--internal-gutter-count) * var(--gutter-width));
41
+ flex-basis: calc(var(--available-width) * var(--percent-width) + var(--internal-gutter-width));
42
+ flex-grow: 0;
43
+ }
44
+
45
+ .hwFluidGrid > [data-xs='1'] {
46
+ --col-span: 1;
47
+ }
48
+ .hwFluidGrid > [data-xs='2'] {
49
+ --col-span: 2;
50
+ }
51
+ .hwFluidGrid > [data-xs='3'] {
52
+ --col-span: 3;
53
+ }
54
+
55
+ .hwFluidGrid > [data-xs='4'] {
56
+ --col-span: 4;
57
+ }
58
+
59
+ .hwFluidGrid > [data-xs='6'] {
60
+ --col-span: 6;
61
+ }
62
+
63
+ .hwFluidGrid > [data-xs='8'] {
64
+ --col-span: 8;
65
+ }
66
+
67
+ .hwFluidGrid > [data-xs='9'] {
68
+ --col-span: 9;
69
+ }
70
+ .hwFluidGrid > [data-xs='10'] {
71
+ --col-span: 10;
72
+ }
73
+ .hwFluidGrid > [data-xs='11'] {
74
+ --col-span: 11;
75
+ }
76
+
77
+ .hwFluidGrid > [data-xs='12'] {
78
+ --col-span: 12;
79
+ }
80
+
81
+ @media (min-width: 600px) {
82
+ .hwFluidGrid > [data-sm='1'] {
83
+ --col-span: 1;
84
+ }
85
+ .hwFluidGrid > [data-sm='2'] {
86
+ --col-span: 2;
87
+ }
88
+
89
+ .hwFluidGrid > [data-sm='3'] {
90
+ --col-span: 3;
91
+ }
92
+
93
+ .hwFluidGrid > [data-sm='4'] {
94
+ --col-span: 4;
95
+ }
96
+
97
+ .hwFluidGrid > [data-sm='6'] {
98
+ --col-span: 6;
99
+ }
100
+
101
+ .hwFluidGrid > [data-sm='8'] {
102
+ --col-span: 8;
103
+ }
104
+ .hwFluidGrid > [data-sm='9'] {
105
+ --col-span: 9;
106
+ }
107
+ .hwFluidGrid > [data-sm='10'] {
108
+ --col-span: 10;
109
+ }
110
+ .hwFluidGrid > [data-sm='11'] {
111
+ --col-span: 11;
112
+ }
113
+ .hwFluidGrid > [data-sm='12'] {
114
+ --col-span: 12;
115
+ }
116
+ }
117
+
118
+ /* Display the grid background */
119
+
120
+ .hwFluidGrid-show-grid {
121
+ --gutter-width: calc(var(--hw-flex-gap) * var(--hw-space-unit));
122
+ --grid-gutter-count: calc(var(--grid-col-count, var(--parent-col-count)) - 1);
123
+ --grid-total-gutter-width: calc(var(--grid-gutter-count) * var(--gutter-width));
124
+ --grid-available-width: calc(100% - var(--grid-total-gutter-width));
125
+ --grid-percent-width: calc(1 / var(--grid-col-count, var(--parent-col-count)));
126
+ --column-width: calc(var(--grid-available-width) * var(--grid-percent-width));
127
+ background: repeating-linear-gradient(
128
+ to right,
129
+ var(--hw-fluid-grid-col-bg) 0,
130
+ var(--hw-fluid-grid-col-bg) var(--column-width),
131
+ white var(--column-width),
132
+ white calc(var(--column-width) + var(--gutter-width))
133
+ );
134
+ }
@@ -0,0 +1,78 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuUtils = require('@vuu-ui/vuu-utils');
5
+ var core = require('@salt-ds/core');
6
+ var cx = require('clsx');
7
+ var React = require('react');
8
+ var useBreakpoints = require('../responsive/use-breakpoints.js');
9
+ require('../responsive/useResizeObserver.js');
10
+ var useResponsiveSizing = require('./useResponsiveSizing.js');
11
+
12
+ const classBase = "hwFluidGrid";
13
+ const FluidGrid = React.forwardRef(function FluidGrid2(props, ref) {
14
+ const {
15
+ breakPoints,
16
+ children: childrenProp,
17
+ column,
18
+ cols: colsProp = 12,
19
+ className: classNameProp,
20
+ flexFill,
21
+ gap = 3,
22
+ fullPage,
23
+ id,
24
+ onSplitterMoved,
25
+ resizeable,
26
+ row,
27
+ showGrid,
28
+ spacing,
29
+ splitterSize,
30
+ style: styleProp,
31
+ ...rest
32
+ } = props;
33
+ const children = React.useMemo(() => {
34
+ return vuuUtils.asReactElements(childrenProp);
35
+ }, [childrenProp]);
36
+ const { cols, content, rootRef } = useResponsiveSizing.useResponsiveSizing({
37
+ children,
38
+ cols: colsProp,
39
+ style: styleProp
40
+ });
41
+ const breakpoint = useBreakpoints.useBreakpoints(
42
+ {
43
+ breakPoints
44
+ },
45
+ rootRef
46
+ );
47
+ const className = cx(classBase, classNameProp, {
48
+ [`${classBase}-column`]: column,
49
+ [`${classBase}-row`]: row,
50
+ [`${classBase}-show-grid`]: showGrid,
51
+ "flex-fill": flexFill,
52
+ "full-page": fullPage
53
+ });
54
+ const style = {
55
+ ...styleProp,
56
+ "--spacing": spacing,
57
+ "--grid-col-count": cols,
58
+ "--grid-gap": gap
59
+ };
60
+ return /* @__PURE__ */ jsxRuntime.jsx(
61
+ "div",
62
+ {
63
+ ...rest,
64
+ className,
65
+ "data-breakpoint": breakpoint,
66
+ "data-cols": cols,
67
+ "data-resizeable": resizeable || void 0,
68
+ id,
69
+ ref: core.useForkRef(rootRef, ref),
70
+ style,
71
+ children: content
72
+ }
73
+ );
74
+ });
75
+ FluidGrid.displayName = "FluidGrid";
76
+
77
+ exports.FluidGrid = FluidGrid;
78
+ //# sourceMappingURL=FluidGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FluidGrid.js","sources":["../../src/flexbox/FluidGrid.tsx"],"sourcesContent":["import { asReactElements } from \"@vuu-ui/vuu-utils\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { ForwardedRef, forwardRef, useMemo } from \"react\";\nimport { useBreakpoints } from \"../responsive\";\nimport { FlexboxProps } from \"./flexboxTypes\";\nimport \"./FluidGrid.css\";\nimport { useResponsiveSizing } from \"./useResponsiveSizing\";\n\nconst classBase = \"hwFluidGrid\";\n\nexport interface FluidGridProps extends FlexboxProps {\n showGrid?: boolean;\n}\n\nexport const FluidGrid = forwardRef(function FluidGrid(\n props: FluidGridProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const {\n breakPoints,\n children: childrenProp,\n column,\n cols: colsProp = 12,\n className: classNameProp,\n flexFill,\n gap = 3,\n fullPage,\n id,\n onSplitterMoved,\n resizeable,\n row,\n showGrid,\n spacing,\n splitterSize,\n style: styleProp,\n ...rest\n } = props;\n\n //TODO does thie useMemo serve any actual purpose or will childrenProp\n // always be new anyway ?\n const children = useMemo(() => {\n return asReactElements(childrenProp);\n }, [childrenProp]);\n\n const { cols, content, rootRef } = useResponsiveSizing({\n children,\n cols: colsProp,\n style: styleProp,\n });\n\n const breakpoint = useBreakpoints(\n {\n breakPoints,\n },\n rootRef\n );\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-column`]: column,\n [`${classBase}-row`]: row,\n [`${classBase}-show-grid`]: showGrid,\n \"flex-fill\": flexFill,\n \"full-page\": fullPage,\n });\n\n const style = {\n ...styleProp,\n \"--spacing\": spacing,\n \"--grid-col-count\": cols,\n \"--grid-gap\": gap,\n };\n\n return (\n <div\n {...rest}\n className={className}\n data-breakpoint={breakpoint}\n data-cols={cols}\n data-resizeable={resizeable || undefined}\n id={id}\n ref={useForkRef(rootRef, ref)}\n style={style}\n >\n {content}\n </div>\n );\n});\nFluidGrid.displayName = \"FluidGrid\";\n"],"names":["forwardRef","FluidGrid","useMemo","asReactElements","useResponsiveSizing","useBreakpoints","jsx","useForkRef"],"mappings":";;;;;;;;;;;AASA,MAAM,SAAY,GAAA,aAAA,CAAA;AAMX,MAAM,SAAY,GAAAA,gBAAA,CAAW,SAASC,UAAAA,CAC3C,OACA,GACA,EAAA;AACA,EAAM,MAAA;AAAA,IACJ,WAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,MAAA;AAAA,IACA,MAAM,QAAW,GAAA,EAAA;AAAA,IACjB,SAAW,EAAA,aAAA;AAAA,IACX,QAAA;AAAA,IACA,GAAM,GAAA,CAAA;AAAA,IACN,QAAA;AAAA,IACA,EAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAO,EAAA,SAAA;AAAA,IACP,GAAG,IAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAIJ,EAAM,MAAA,QAAA,GAAWC,cAAQ,MAAM;AAC7B,IAAA,OAAOC,yBAAgB,YAAY,CAAA,CAAA;AAAA,GACrC,EAAG,CAAC,YAAY,CAAC,CAAA,CAAA;AAEjB,EAAA,MAAM,EAAE,IAAA,EAAM,OAAS,EAAA,OAAA,KAAYC,uCAAoB,CAAA;AAAA,IACrD,QAAA;AAAA,IACA,IAAM,EAAA,QAAA;AAAA,IACN,KAAO,EAAA,SAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,MAAM,UAAa,GAAAC,6BAAA;AAAA,IACjB;AAAA,MACE,WAAA;AAAA,KACF;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAe,EAAA;AAAA,IAC7C,CAAC,CAAA,EAAG,SAAS,CAAA,OAAA,CAAS,GAAG,MAAA;AAAA,IACzB,CAAC,CAAA,EAAG,SAAS,CAAA,IAAA,CAAM,GAAG,GAAA;AAAA,IACtB,CAAC,CAAA,EAAG,SAAS,CAAA,UAAA,CAAY,GAAG,QAAA;AAAA,IAC5B,WAAa,EAAA,QAAA;AAAA,IACb,WAAa,EAAA,QAAA;AAAA,GACd,CAAA,CAAA;AAED,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,GAAG,SAAA;AAAA,IACH,WAAa,EAAA,OAAA;AAAA,IACb,kBAAoB,EAAA,IAAA;AAAA,IACpB,YAAc,EAAA,GAAA;AAAA,GAChB,CAAA;AAEA,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,SAAA;AAAA,MACA,iBAAiB,EAAA,UAAA;AAAA,MACjB,WAAW,EAAA,IAAA;AAAA,MACX,mBAAiB,UAAc,IAAA,KAAA,CAAA;AAAA,MAC/B,EAAA;AAAA,MACA,GAAA,EAAKC,eAAW,CAAA,OAAA,EAAS,GAAG,CAAA;AAAA,MAC5B,KAAA;AAAA,MAEC,QAAA,EAAA,OAAA;AAAA,KAAA;AAAA,GACH,CAAA;AAEJ,CAAC,EAAA;AACD,SAAA,CAAU,WAAc,GAAA,WAAA;;;;"}