@vuu-ui/vuu-layout 2.1.17 → 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,115 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var core = require('@salt-ds/core');
5
- var vuuUtils = require('@vuu-ui/vuu-utils');
6
- var styles = require('@salt-ds/styles');
7
- var window = require('@salt-ds/window');
8
- var cx = require('clsx');
9
- var React = require('react');
10
- var LayoutProvider = require('../layout-provider/LayoutProvider.js');
11
- require('../layout-provider/LayoutProviderContext.js');
12
- var View = require('../layout-view/View.js');
13
- var Palette$1 = require('./Palette.css.js');
14
-
15
- const classBase = "vuuPalette";
16
- const clonePaletteItem = (paletteItem) => {
17
- const dolly = paletteItem.cloneNode(true);
18
- dolly.id = "";
19
- delete dolly.dataset.idx;
20
- return dolly;
21
- };
22
- const wrapInView = (component, viewProps) => {
23
- const id = vuuUtils.uuid();
24
- return /* @__PURE__ */ jsxRuntime.jsx(View.View, { id, ...viewProps, children: component }, id);
25
- };
26
- const PaletteItem = React.memo(
27
- ({
28
- className,
29
- component,
30
- idx,
31
- key,
32
- value,
33
- ViewProps,
34
- ...props
35
- }) => {
36
- const targetWindow = window.useWindow();
37
- styles.useComponentCssInjection({
38
- testId: "vuu-palette",
39
- css: Palette$1,
40
- window: targetWindow
41
- });
42
- const dispatch = LayoutProvider.useLayoutProviderDispatch();
43
- const handleMouseDown = React.useCallback(
44
- (e) => {
45
- const el = vuuUtils.queryClosest(e.target, ".vuuPaletteItem", true);
46
- const { height, left, top, width } = el.getBoundingClientRect();
47
- dispatch({
48
- dragRect: {
49
- left,
50
- top,
51
- right: left + width,
52
- bottom: top + 150,
53
- width,
54
- height
55
- },
56
- dragElement: clonePaletteItem(el),
57
- evt: e.nativeEvent,
58
- instructions: {
59
- DoNotRemove: true,
60
- DoNotTransform: true,
61
- DriftHomeIfNoDropTarget: true,
62
- RemoveDraggableOnDragEnd: true,
63
- dragThreshold: 10
64
- },
65
- path: "*",
66
- payload: wrapInView(component, ViewProps),
67
- type: "drag-start"
68
- });
69
- },
70
- [ViewProps, component, dispatch]
71
- );
72
- return /* @__PURE__ */ jsxRuntime.jsx(
73
- core.Option,
74
- {
75
- className: cx("vuuPaletteItem", className),
76
- "data-draggable": true,
77
- "data-index": idx,
78
- onMouseDown: handleMouseDown,
79
- value,
80
- ...props
81
- }
82
- );
83
- }
84
- );
85
- PaletteItem.displayName = "PaletteItem";
86
- const Palette = ({
87
- ListBoxProps: ListBoxProps2,
88
- ViewProps,
89
- children,
90
- className,
91
- orientation = "horizontal",
92
- ...props
93
- }) => {
94
- return /* @__PURE__ */ jsxRuntime.jsx(
95
- core.ListBox,
96
- {
97
- ...ListBoxProps2,
98
- ...props,
99
- className: cx(classBase, className, `${classBase}-${orientation}`),
100
- selected: [],
101
- children: children.map(
102
- (child, idx) => child.type === PaletteItem ? React.cloneElement(child, {
103
- idx,
104
- key: idx
105
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
- }) : child
107
- )
108
- }
109
- );
110
- };
111
- vuuUtils.registerComponent("Palette", Palette, "view");
112
-
113
- exports.Palette = Palette;
114
- exports.PaletteItem = PaletteItem;
115
- //# sourceMappingURL=Palette.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Palette.js","sources":["../../../../packages/vuu-layout/src/palette/Palette.tsx"],"sourcesContent":["import { ListBox, ListBoxProps, Option, OptionProps } from \"@salt-ds/core\";\nimport { queryClosest, registerComponent, uuid } from \"@vuu-ui/vuu-utils\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n MouseEventHandler,\n ReactElement,\n cloneElement,\n memo,\n useCallback,\n} from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { View } from \"../layout-view/View\";\nimport type { ViewProps } from \"../layout-view/viewTypes\";\n\nimport paletteCss from \"./Palette.css\";\n\nconst classBase = \"vuuPalette\";\n\nconst clonePaletteItem = (paletteItem: HTMLElement) => {\n const dolly = paletteItem.cloneNode(true) as HTMLElement;\n dolly.id = \"\";\n delete dolly.dataset.idx;\n return dolly;\n};\n\nconst wrapInView = (\n component: ReactElement,\n viewProps?: Partial<ViewProps>,\n) => {\n const id = uuid();\n return (\n <View id={id} key={id} {...viewProps}>\n {component}\n </View>\n );\n};\nexport interface PaletteItemProps extends OptionProps {\n /**\n * This is the payload that will be created when the\n * palette item is dropped\n */\n ViewProps?: Pick<\n ViewProps,\n \"allowRename\" | \"closeable\" | \"header\" | \"resizeable\" | \"resize\" | \"title\"\n >;\n component: ReactElement;\n idx?: number;\n}\n\nexport const PaletteItem = memo(\n ({\n className,\n component,\n idx,\n key,\n value,\n ViewProps,\n ...props\n }: PaletteItemProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-palette\",\n css: paletteCss,\n window: targetWindow,\n });\n const dispatch = useLayoutProviderDispatch();\n\n const handleMouseDown = useCallback<MouseEventHandler<HTMLDivElement>>(\n (e) => {\n const el = queryClosest(e.target, \".vuuPaletteItem\", true);\n const { height, left, top, width } = el.getBoundingClientRect();\n\n dispatch({\n dragRect: {\n left,\n top,\n right: left + width,\n bottom: top + 150,\n width,\n height,\n },\n dragElement: clonePaletteItem(el),\n evt: e.nativeEvent,\n instructions: {\n DoNotRemove: true,\n DoNotTransform: true,\n DriftHomeIfNoDropTarget: true,\n RemoveDraggableOnDragEnd: true,\n dragThreshold: 10,\n },\n path: \"*\",\n payload: wrapInView(component, ViewProps),\n type: \"drag-start\",\n });\n },\n [ViewProps, component, dispatch],\n );\n\n return (\n <Option\n className={cx(\"vuuPaletteItem\", className)}\n data-draggable\n data-index={idx}\n onMouseDown={handleMouseDown}\n value={value}\n {...props}\n />\n );\n },\n);\n\nPaletteItem.displayName = \"PaletteItem\";\n\nexport interface PaletteProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onDragStart\" | \"onDrop\" | \"onSelect\"\n > {\n ListBoxProps?: Partial<ListBoxProps>;\n ViewProps?: Partial<ViewProps>;\n children: ReactElement[];\n orientation: \"horizontal\" | \"vertical\";\n selection?: string;\n}\n\nexport const Palette = ({\n ListBoxProps,\n ViewProps,\n children,\n className,\n orientation = \"horizontal\",\n ...props\n}: PaletteProps) => {\n return (\n <ListBox\n {...ListBoxProps}\n {...props}\n className={cx(classBase, className, `${classBase}-${orientation}`)}\n selected={[]}\n >\n {children.map((child, idx) =>\n child.type === PaletteItem\n ? cloneElement(child, {\n idx,\n key: idx,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any)\n : child,\n )}\n </ListBox>\n );\n};\n\nregisterComponent(\"Palette\", Palette, \"view\");\n"],"names":["uuid","View","memo","useWindow","useComponentCssInjection","paletteCss","useLayoutProviderDispatch","useCallback","queryClosest","jsx","Option","ListBoxProps","ListBox","cloneElement","registerComponent"],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- 'use strict';
2
-
3
- var layoutStartPanelCss = ".vuuLayoutStartPanel {\n align-items: center;\n flex: 0 0 auto !important;\n display: flex;\n flex-direction: column;\n font-weight: 700;\n gap: 12px;\n}\n\n.vuuLayoutStartPanel-title {\n color: var(--vuu-color-gray-80);\n font-size: 28px;\n line-height: 1.5;\n text-align: center;\n}\n\n.vuuLayoutStartPanel-text {\n color: var(--vuu-color-gray-50);\n font-size: 18px;\n line-height: 1.5;\n max-width: 460px;\n}\n\n.vuuLayoutStartPanel-addButton {\n --vuu-icon-size: 20px;\n --saltButton-borderRadius: 28px !important;\n --saltButton-height: 56px;\n --saltButton-width: 56px;\n box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);\n}";
4
-
5
- module.exports = layoutStartPanelCss;
6
- //# sourceMappingURL=LayoutStartPanel.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LayoutStartPanel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,56 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
5
- var vuuUtils = require('@vuu-ui/vuu-utils');
6
- var styles = require('@salt-ds/styles');
7
- var window = require('@salt-ds/window');
8
- var React = require('react');
9
- var ViewContext = require('../layout-view-actions/ViewContext.js');
10
- var LayoutStartPanel$1 = require('./LayoutStartPanel.css.js');
11
-
12
- const classBase = "vuuLayoutStartPanel";
13
- const LayoutStartPanel = (htmlAttributes) => {
14
- const targetWindow = window.useWindow();
15
- styles.useComponentCssInjection({
16
- testId: "vuu-layout-start-panel",
17
- css: LayoutStartPanel$1,
18
- window: targetWindow
19
- });
20
- const { dispatch, path } = ViewContext.useViewContext();
21
- const [displayState, setDisplayState] = React.useState();
22
- React.useMemo(() => {
23
- dispatch?.({
24
- type: "query",
25
- path,
26
- query: "PARENT_CONTAINER"
27
- }).then((response) => {
28
- if (response?.parentContainerId === vuuUtils.VuuShellLocation.Workspace) {
29
- setDisplayState("initial");
30
- } else {
31
- setDisplayState("nested");
32
- }
33
- });
34
- }, [dispatch, path]);
35
- if (displayState === void 0) {
36
- return null;
37
- }
38
- const showInitialState = displayState === "initial";
39
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...htmlAttributes, className: classBase, children: [
40
- showInitialState ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
41
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-title`, children: "Start by adding a table" }),
42
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-text`, children: "To add a table, drag any of the Vuu Tables to this area or click the button below" })
43
- ] }) : null,
44
- /* @__PURE__ */ jsxRuntime.jsx(
45
- vuuUiControls.IconButton,
46
- {
47
- className: `${classBase}-addButton`,
48
- icon: "add",
49
- variant: "cta"
50
- }
51
- )
52
- ] });
53
- };
54
-
55
- exports.LayoutStartPanel = LayoutStartPanel;
56
- //# sourceMappingURL=LayoutStartPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LayoutStartPanel.js","sources":["../../../../packages/vuu-layout/src/placeholder/LayoutStartPanel.tsx"],"sourcesContent":["import { IconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { VuuShellLocation } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, useMemo, useState } from \"react\";\nimport {\n QueryResponse,\n useViewContext,\n} from \"../layout-view-actions/ViewContext\";\n\nimport layoutStartPanelCss from \"./LayoutStartPanel.css\";\n\nconst classBase = \"vuuLayoutStartPanel\";\n\nexport interface LayoutStartPanelProps extends HTMLAttributes<HTMLDivElement> {\n label?: string;\n}\n\nexport const LayoutStartPanel = (htmlAttributes: LayoutStartPanelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-layout-start-panel\",\n css: layoutStartPanelCss,\n window: targetWindow,\n });\n\n const { dispatch, path } = useViewContext();\n const [displayState, setDisplayState] = useState<\n \"initial\" | \"nested\" | undefined\n >();\n\n useMemo(() => {\n dispatch?.({\n type: \"query\",\n path,\n query: \"PARENT_CONTAINER\",\n }).then((response) => {\n if (\n (response as QueryResponse)?.parentContainerId ===\n VuuShellLocation.Workspace\n ) {\n setDisplayState(\"initial\");\n } else {\n setDisplayState(\"nested\");\n }\n });\n }, [dispatch, path]);\n\n if (displayState === undefined) {\n return null;\n }\n\n const showInitialState = displayState === \"initial\";\n\n return (\n <div {...htmlAttributes} className={classBase}>\n {showInitialState ? (\n <>\n <div className={`${classBase}-title`}>Start by adding a table</div>\n <div className={`${classBase}-text`}>\n To add a table, drag any of the Vuu Tables to this area or click the\n button below\n </div>\n </>\n ) : null}\n <IconButton\n className={`${classBase}-addButton`}\n icon=\"add\"\n variant=\"cta\"\n />\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","layoutStartPanelCss","useViewContext","useState","useMemo","VuuShellLocation","jsxs","Fragment","jsx","IconButton"],"mappings":";;;;;;;;;;;AAYA,MAAM,SAAY,GAAA,qBAAA;AAML,MAAA,gBAAA,GAAmB,CAAC,cAA0C,KAAA;AACzE,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAAC,kBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,QAAA,EAAU,IAAK,EAAA,GAAIC,0BAAe,EAAA;AAC1C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,cAEtC,EAAA;AAEF,EAAAC,aAAA,CAAQ,MAAM;AACZ,IAAW,QAAA,GAAA;AAAA,MACT,IAAM,EAAA,OAAA;AAAA,MACN,IAAA;AAAA,MACA,KAAO,EAAA;AAAA,KACR,CAAA,CAAE,IAAK,CAAA,CAAC,QAAa,KAAA;AACpB,MACG,IAAA,QAAA,EAA4B,iBAC7B,KAAAC,yBAAA,CAAiB,SACjB,EAAA;AACA,QAAA,eAAA,CAAgB,SAAS,CAAA;AAAA,OACpB,MAAA;AACL,QAAA,eAAA,CAAgB,QAAQ,CAAA;AAAA;AAC1B,KACD,CAAA;AAAA,GACA,EAAA,CAAC,QAAU,EAAA,IAAI,CAAC,CAAA;AAEnB,EAAA,IAAI,iBAAiB,KAAW,CAAA,EAAA;AAC9B,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,MAAM,mBAAmB,YAAiB,KAAA,SAAA;AAE1C,EAAA,uBACGC,eAAA,CAAA,KAAA,EAAA,EAAK,GAAG,cAAA,EAAgB,WAAW,SACjC,EAAA,QAAA,EAAA;AAAA,IAAA,gBAAA,mBAEGA,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAU,QAAuB,EAAA,yBAAA,EAAA,CAAA;AAAA,qCAC5D,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,SAAS,QAGrC,EAAA,mFAAA,EAAA;AAAA,KAAA,EACF,CACE,GAAA,IAAA;AAAA,oBACJA,cAAA;AAAA,MAACC,wBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,SAAS,CAAA,UAAA,CAAA;AAAA,QACvB,IAAK,EAAA,KAAA;AAAA,QACL,OAAQ,EAAA;AAAA;AAAA;AACV,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,6 +0,0 @@
1
- 'use strict';
2
-
3
- var placeholderCss = ".vuuPlaceholder {\n --vuuView-justify: center;\n align-items: center;\n display: flex;\n flex-basis: 0;\n flex-grow: 1;\n flex-shrink: 1;\n}\n\n.vuuPlaceholder-nested {\n background-color: red;\n}\n\n.vuuPlaceholder-shim {\n flex-grow: 0;\n flex-shrink: 0;\n}\n";
4
-
5
- module.exports = placeholderCss;
6
- //# sourceMappingURL=Placeholder.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Placeholder.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,34 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var cx = require('clsx');
5
- var styles = require('@salt-ds/styles');
6
- var window = require('@salt-ds/window');
7
- var vuuUtils = require('@vuu-ui/vuu-utils');
8
- var LayoutStartPanel = require('./LayoutStartPanel.js');
9
- var View = require('../layout-view/View.js');
10
- var Placeholder$1 = require('./Placeholder.css.js');
11
-
12
- const classBase = "vuuPlaceholder";
13
- const PlaceholderCore = ({ showStartMenu = true }) => {
14
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: showStartMenu ? /* @__PURE__ */ jsxRuntime.jsx(LayoutStartPanel.LayoutStartPanel, {}) : null });
15
- };
16
- const Placeholder = ({
17
- className: classNameProp,
18
- showStartMenu,
19
- ...viewProps
20
- }) => {
21
- const targetWindow = window.useWindow();
22
- styles.useComponentCssInjection({
23
- testId: "vuu-placeholder",
24
- css: Placeholder$1,
25
- window: targetWindow
26
- });
27
- const className = cx(classBase, classNameProp);
28
- return /* @__PURE__ */ jsxRuntime.jsx(View.View, { ...viewProps, className, "data-placeholder": true, resizeable: true, children: /* @__PURE__ */ jsxRuntime.jsx(PlaceholderCore, { showStartMenu }) });
29
- };
30
- Placeholder.displayName = "Placeholder";
31
- vuuUtils.registerComponent("Placeholder", Placeholder, "component");
32
-
33
- exports.Placeholder = Placeholder;
34
- //# sourceMappingURL=Placeholder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Placeholder.js","sources":["../../../../packages/vuu-layout/src/placeholder/Placeholder.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { LayoutStartPanel } from \"./LayoutStartPanel\";\nimport { View } from \"../layout-view/View\";\nimport type { ViewProps } from \"../layout-view/viewTypes\";\n\nimport placeholderCss from \"./Placeholder.css\";\n\nconst classBase = \"vuuPlaceholder\";\n\nexport interface PlaceholderProps extends ViewProps {\n closeable?: boolean;\n flexFill?: boolean;\n resizeable?: boolean;\n showStartMenu?: boolean;\n /**\n * shim is only when we're dealing with intrinsically sized children, which is never\n * in an actual application. Intrinsic sizing is still experimental.\n */\n shim?: boolean;\n}\n\nconst PlaceholderCore = ({ showStartMenu = true }: PlaceholderProps) => {\n return <>{showStartMenu ? <LayoutStartPanel /> : null}</>;\n};\n\nexport const Placeholder = ({\n className: classNameProp,\n showStartMenu,\n ...viewProps\n}: PlaceholderProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-placeholder\",\n css: placeholderCss,\n window: targetWindow,\n });\n\n const className = cx(classBase, classNameProp);\n\n return (\n <View {...viewProps} className={className} data-placeholder resizeable>\n <PlaceholderCore showStartMenu={showStartMenu} />\n </View>\n );\n};\n\nPlaceholder.displayName = \"Placeholder\";\nregisterComponent(\"Placeholder\", Placeholder, \"component\");\n"],"names":["jsx","Fragment","LayoutStartPanel","useWindow","useComponentCssInjection","placeholderCss","View","registerComponent"],"mappings":";;;;;;;;;;;AAUA,MAAM,SAAY,GAAA,gBAAA;AAclB,MAAM,eAAkB,GAAA,CAAC,EAAE,aAAA,GAAgB,MAA6B,KAAA;AACtE,EAAA,uBAAUA,cAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA,aAAA,mBAAiBD,cAAA,CAAAE,iCAAA,EAAA,EAAiB,IAAK,IAAK,EAAA,CAAA;AACxD,CAAA;AAEO,MAAM,cAAc,CAAC;AAAA,EAC1B,SAAW,EAAA,aAAA;AAAA,EACX,aAAA;AAAA,EACA,GAAG;AACL,CAAwB,KAAA;AACtB,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAa,CAAA;AAE7C,EAAA,uBACGL,cAAA,CAAAM,SAAA,EAAA,EAAM,GAAG,SAAA,EAAW,SAAsB,EAAA,kBAAA,EAAgB,IAAC,EAAA,UAAA,EAAU,IACpE,EAAA,QAAA,kBAAAN,cAAA,CAAC,eAAgB,EAAA,EAAA,aAAA,EAA8B,CACjD,EAAA,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAc,GAAA,aAAA;AAC1BO,0BAAkB,CAAA,aAAA,EAAe,aAAa,WAAW,CAAA;;;;"}
@@ -1,118 +0,0 @@
1
- 'use strict';
2
-
3
- var React = require('react');
4
-
5
- const WidthHeight = ["height", "width"];
6
- const HeightOnly = ["height"];
7
- const WidthOnly = ["width"];
8
- const observedMap = /* @__PURE__ */ new WeakMap();
9
- const getTargetSize = (element, contentRect, dimension) => {
10
- switch (dimension) {
11
- case "height":
12
- return contentRect.height;
13
- case "scrollHeight":
14
- return element.scrollHeight;
15
- case "scrollWidth":
16
- return element.scrollWidth;
17
- case "width":
18
- return contentRect.width;
19
- default:
20
- return 0;
21
- }
22
- };
23
- const resizeObserver = new ResizeObserver(
24
- (entries) => {
25
- for (const entry of entries) {
26
- const { target, contentRect } = entry;
27
- const observedTarget = observedMap.get(target);
28
- if (observedTarget) {
29
- const { onResize, measurements } = observedTarget;
30
- let sizeChanged = false;
31
- for (const [dimension, size] of Object.entries(measurements)) {
32
- const newSize = getTargetSize(
33
- target,
34
- contentRect,
35
- dimension
36
- );
37
- if (newSize !== size) {
38
- sizeChanged = true;
39
- measurements[dimension] = newSize;
40
- }
41
- }
42
- if (sizeChanged) {
43
- onResize && onResize(measurements);
44
- }
45
- }
46
- }
47
- }
48
- );
49
- function useResizeObserver(ref, dimensions, onResize, reportInitialSize = false) {
50
- const dimensionsRef = React.useRef(dimensions);
51
- const measure = React.useCallback((target) => {
52
- const rect = target.getBoundingClientRect();
53
- return dimensionsRef.current.reduce(
54
- (map, dim) => {
55
- map[dim] = getTargetSize(target, rect, dim);
56
- return map;
57
- },
58
- {}
59
- );
60
- }, []);
61
- React.useLayoutEffect(() => {
62
- const target = ref.current;
63
- let cleanedUp = false;
64
- async function registerObserver() {
65
- observedMap.set(target, { measurements: {} });
66
- cleanedUp = false;
67
- const { fonts } = document;
68
- if (fonts) {
69
- await fonts.ready;
70
- }
71
- if (!cleanedUp) {
72
- const observedTarget = observedMap.get(target);
73
- if (observedTarget) {
74
- const measurements = measure(target);
75
- observedTarget.measurements = measurements;
76
- resizeObserver.observe(target);
77
- if (reportInitialSize) {
78
- onResize(measurements);
79
- }
80
- }
81
- }
82
- }
83
- if (target) {
84
- if (observedMap.has(target)) {
85
- throw Error(
86
- "useResizeObserver attemping to observe same element twice"
87
- );
88
- }
89
- void registerObserver();
90
- }
91
- return () => {
92
- if (target && observedMap.has(target)) {
93
- resizeObserver.unobserve(target);
94
- observedMap.delete(target);
95
- cleanedUp = true;
96
- }
97
- };
98
- }, [ref, measure, reportInitialSize, onResize]);
99
- React.useLayoutEffect(() => {
100
- const target = ref.current;
101
- const record = observedMap.get(target);
102
- if (record) {
103
- if (dimensionsRef.current !== dimensions) {
104
- dimensionsRef.current = dimensions;
105
- const measurements = measure(target);
106
- record.measurements = measurements;
107
- }
108
- record.onResize = onResize;
109
- }
110
- }, [dimensions, measure, ref, onResize]);
111
- }
112
-
113
- exports.HeightOnly = HeightOnly;
114
- exports.WidthHeight = WidthHeight;
115
- exports.WidthOnly = WidthOnly;
116
- exports.resizeObserver = resizeObserver;
117
- exports.useResizeObserver = useResizeObserver;
118
- //# sourceMappingURL=useResizeObserver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useResizeObserver.js","sources":["../../../../packages/vuu-layout/src/responsive/useResizeObserver.ts"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\nimport { useCallback, useLayoutEffect, useRef, RefObject } from \"react\";\nexport const WidthHeight = [\"height\", \"width\"];\nexport const HeightOnly = [\"height\"];\nexport const WidthOnly = [\"width\"];\n\nexport type measurements<T = string | number> = {\n height?: T;\n scrollHeight?: T;\n scrollWidth?: T;\n width?: T;\n};\ntype measuredDimension = keyof measurements<number>;\n\nexport type ResizeHandler = (measurements: measurements<number>) => void;\n\ntype observedDetails = {\n onResize?: ResizeHandler;\n measurements: measurements<number>;\n};\nconst observedMap = new WeakMap<HTMLElement, observedDetails>();\n\nconst getTargetSize = (\n element: HTMLElement,\n contentRect: DOMRectReadOnly,\n dimension: measuredDimension\n): number => {\n switch (dimension) {\n case \"height\":\n return contentRect.height;\n case \"scrollHeight\":\n return element.scrollHeight;\n case \"scrollWidth\":\n return element.scrollWidth;\n case \"width\":\n return contentRect.width;\n default:\n return 0;\n }\n};\n\nexport const resizeObserver = new ResizeObserver(\n (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, contentRect } = entry;\n const observedTarget = observedMap.get(target as HTMLElement);\n if (observedTarget) {\n const { onResize, measurements } = observedTarget;\n let sizeChanged = false;\n for (const [dimension, size] of Object.entries(measurements)) {\n const newSize = getTargetSize(\n target as HTMLElement,\n contentRect,\n dimension as measuredDimension\n );\n if (newSize !== size) {\n sizeChanged = true;\n measurements[dimension as measuredDimension] = newSize;\n }\n }\n if (sizeChanged) {\n onResize && onResize(measurements);\n }\n }\n }\n }\n);\n\n// TODO use an optional lag (default to false) to ask to fire onResize\n// with initial size\n// Note asking for scrollHeight alone will not trigger onResize, this is only triggered by height,\n// with scrollHeight returned as an auxilliary value\nexport function useResizeObserver(\n ref: RefObject<Element | HTMLElement | null>,\n dimensions: string[],\n onResize: ResizeHandler,\n reportInitialSize = false\n): void {\n const dimensionsRef = useRef(dimensions);\n const measure = useCallback((target: HTMLElement): measurements<number> => {\n const rect = target.getBoundingClientRect();\n return dimensionsRef.current.reduce(\n (map: { [key: string]: number }, dim) => {\n map[dim] = getTargetSize(target, rect, dim as measuredDimension);\n return map;\n },\n {}\n );\n }, []);\n\n // TODO use ref to store resizeHandler here\n // resize handler registered with REsizeObserver will never change\n // use ref to store user onResize callback here\n // resizeHandler will call user callback.current\n\n // Keep this effect separate in case user inadvertently passes different\n // dimensions or callback instance each time - we only ever want to\n // initiate new observation when ref changes.\n useLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n let cleanedUp = false;\n\n async function registerObserver() {\n // Create the map entry immediately. useEffect may fire below\n // before fonts are ready and attempt to update entry\n observedMap.set(target, { measurements: {} as measurements<number> });\n cleanedUp = false;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { fonts } = document as any;\n if (fonts) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n await fonts.ready;\n }\n if (!cleanedUp) {\n const observedTarget = observedMap.get(target);\n if (observedTarget) {\n const measurements = measure(target);\n observedTarget.measurements = measurements;\n resizeObserver.observe(target);\n if (reportInitialSize) {\n onResize(measurements);\n }\n }\n }\n }\n\n if (target) {\n // TODO might we want multiple callers to attach a listener to the same element ?\n if (observedMap.has(target)) {\n throw Error(\n \"useResizeObserver attemping to observe same element twice\"\n );\n }\n void registerObserver();\n }\n return () => {\n if (target && observedMap.has(target)) {\n resizeObserver.unobserve(target);\n observedMap.delete(target);\n cleanedUp = true;\n }\n };\n }, [ref, measure, reportInitialSize, onResize]);\n\n useLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n const record = observedMap.get(target);\n if (record) {\n if (dimensionsRef.current !== dimensions) {\n dimensionsRef.current = dimensions;\n const measurements = measure(target);\n record.measurements = measurements;\n }\n // Might not have changed, but no harm ...\n record.onResize = onResize;\n }\n }, [dimensions, measure, ref, onResize]);\n\n // TODO might be a good idea to ref and return the current measurememnts. That way, derived hooks\n // e.g useBreakpoints don't have to measure and client cn make onResize callback simpler\n}\n"],"names":["useRef","useCallback","useLayoutEffect"],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- 'use strict';
2
-
3
- const COLLAPSIBLE = "data-collapsible";
4
- const RESPONSIVE_ATTRIBUTE = {
5
- [COLLAPSIBLE]: true,
6
- "data-pad-start": true,
7
- "data-pad-end": true
8
- };
9
- const isResponsiveAttribute = (propName) => RESPONSIVE_ATTRIBUTE[propName] ?? false;
10
- const isCollapsible = (propName) => propName === COLLAPSIBLE;
11
- const COLLAPSIBLE_VALUE = {
12
- dynamic: "dynamic",
13
- instant: "instant",
14
- true: "instant"
15
- };
16
- const collapsibleValue = (value) => COLLAPSIBLE_VALUE[value] ?? "none";
17
- const extractResponsiveProps = (props) => {
18
- return Object.keys(props).reduce(
19
- (result, propName) => {
20
- const [toolbarProps, rest] = result;
21
- if (isResponsiveAttribute(propName)) {
22
- const value = isCollapsible(propName) ? collapsibleValue(props[propName]) : props[propName];
23
- toolbarProps[propName] = value;
24
- rest[propName] = void 0;
25
- }
26
- return result;
27
- },
28
- [{}, {}]
29
- );
30
- };
31
-
32
- exports.extractResponsiveProps = extractResponsiveProps;
33
- exports.isResponsiveAttribute = isResponsiveAttribute;
34
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../packages/vuu-layout/src/responsive/utils.ts"],"sourcesContent":["const COLLAPSIBLE = 'data-collapsible';\n\nconst RESPONSIVE_ATTRIBUTE: { [key: string]: boolean } = {\n [COLLAPSIBLE]: true,\n 'data-pad-start': true,\n 'data-pad-end': true\n};\n\nexport const isResponsiveAttribute = (propName: string): boolean =>\n RESPONSIVE_ATTRIBUTE[propName] ?? false;\n\nconst isCollapsible = (propName: string) => propName === COLLAPSIBLE;\n\nconst COLLAPSIBLE_VALUE: { [key: string]: string } = {\n dynamic: 'dynamic',\n instant: 'instant',\n true: 'instant'\n};\n\nconst collapsibleValue = (value: string) => COLLAPSIBLE_VALUE[value] ?? 'none';\n\ntype Props = { [key: string]: any };\nexport const extractResponsiveProps = (props: Props) => {\n return Object.keys(props).reduce<[Props, Props]>(\n (result, propName) => {\n const [toolbarProps, rest] = result;\n if (isResponsiveAttribute(propName)) {\n const value = isCollapsible(propName) ? collapsibleValue(props[propName]) : props[propName];\n\n toolbarProps[propName] = value;\n rest[propName] = undefined;\n }\n return result;\n },\n [{}, {}]\n );\n};\n"],"names":[],"mappings":";;AAAA,MAAM,WAAc,GAAA,kBAAA;AAEpB,MAAM,oBAAmD,GAAA;AAAA,EACvD,CAAC,WAAW,GAAG,IAAA;AAAA,EACf,gBAAkB,EAAA,IAAA;AAAA,EAClB,cAAgB,EAAA;AAClB,CAAA;AAEO,MAAM,qBAAwB,GAAA,CAAC,QACpC,KAAA,oBAAA,CAAqB,QAAQ,CAAK,IAAA;AAEpC,MAAM,aAAA,GAAgB,CAAC,QAAA,KAAqB,QAAa,KAAA,WAAA;AAEzD,MAAM,iBAA+C,GAAA;AAAA,EACnD,OAAS,EAAA,SAAA;AAAA,EACT,OAAS,EAAA,SAAA;AAAA,EACT,IAAM,EAAA;AACR,CAAA;AAEA,MAAM,gBAAmB,GAAA,CAAC,KAAkB,KAAA,iBAAA,CAAkB,KAAK,CAAK,IAAA,MAAA;AAG3D,MAAA,sBAAA,GAAyB,CAAC,KAAiB,KAAA;AACtD,EAAO,OAAA,MAAA,CAAO,IAAK,CAAA,KAAK,CAAE,CAAA,MAAA;AAAA,IACxB,CAAC,QAAQ,QAAa,KAAA;AACpB,MAAM,MAAA,CAAC,YAAc,EAAA,IAAI,CAAI,GAAA,MAAA;AAC7B,MAAI,IAAA,qBAAA,CAAsB,QAAQ,CAAG,EAAA;AACnC,QAAM,MAAA,KAAA,GAAQ,aAAc,CAAA,QAAQ,CAAI,GAAA,gBAAA,CAAiB,MAAM,QAAQ,CAAC,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAA;AAE1F,QAAA,YAAA,CAAa,QAAQ,CAAI,GAAA,KAAA;AACzB,QAAA,IAAA,CAAK,QAAQ,CAAI,GAAA,KAAA,CAAA;AAAA;AAEnB,MAAO,OAAA,MAAA;AAAA,KACT;AAAA,IACA,CAAC,EAAI,EAAA,EAAE;AAAA,GACT;AACF;;;;;"}
@@ -1,6 +0,0 @@
1
- 'use strict';
2
-
3
- var stackCss = ".vuuTabs {\n display: flex;\n box-sizing: border-box;\n flex-direction: column;\n}\n\n.vuuTabs-horizontal {\n --vuu-tabs-border-style: none solid none none;\n flex-direction: row;\n}\n\n.vuuTabs .Toolbar:before {\n left: 0;\n width: 100%;\n bottom: 0;\n height: 1px;\n content: '';\n position: absolute;\n background: var(--grey60);\n}\n\n.vuuTabs-tabPanel {\n display: flex;\n flex: 1; \n flex-direction: column;\n}\n\n.vuuTabs-tabPanel > * {\n flex: 1 1 auto;\n}\n\n.vuuTabHeader + .vuuView > .vuuHeader {\n height: 0;\n overflow: hidden;\n}\n\n.Layout-svg-button {\n --spacing-medium: 5px;\n}\n";
4
-
5
- module.exports = stackCss;
6
- //# sourceMappingURL=Stack.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Stack.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,150 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
5
- var vuuUtils = require('@vuu-ui/vuu-utils');
6
- var cx = require('clsx');
7
- var styles = require('@salt-ds/styles');
8
- var window = require('@salt-ds/window');
9
- var React = require('react');
10
- var layoutUtils = require('../layout-reducer/layoutUtils.js');
11
- var Stack$1 = require('./Stack.css.js');
12
-
13
- const classBase = "vuuTabs";
14
- const getDefaultTabIcon = () => void 0;
15
- const getChildElements = (children) => {
16
- const elements = [];
17
- React.Children.forEach(children, (child) => {
18
- if (React.isValidElement(child)) {
19
- elements.push(child);
20
- } else {
21
- console.warn(`Stack has unexpected child element type`);
22
- }
23
- });
24
- return elements;
25
- };
26
- const DefaultTabstripProps = {
27
- allowAddTab: false,
28
- allowCloseTab: false,
29
- allowRenameTab: false
30
- };
31
- const Stack = React.forwardRef(function Stack2({
32
- TabstripProps: TabstripProps2 = DefaultTabstripProps,
33
- active = 0,
34
- children,
35
- className: classNameProp,
36
- getTabIcon = getDefaultTabIcon,
37
- getTabLabel = layoutUtils.getDefaultTabLabel,
38
- id: idProp,
39
- keyBoardActivation = "manual",
40
- // onMouseDown,
41
- onAddTab,
42
- onMoveTab,
43
- onTabClose,
44
- onTabEdit,
45
- onTabSelectionChanged,
46
- showTabs = "top",
47
- style
48
- }, ref) {
49
- const targetWindow = window.useWindow();
50
- styles.useComponentCssInjection({
51
- testId: "vuu-stack",
52
- css: Stack$1,
53
- window: targetWindow
54
- });
55
- const id = vuuUtils.useId(idProp);
56
- const tabLabelsRef = React.useRef([]);
57
- const {
58
- allowCloseTab,
59
- allowRenameTab,
60
- className: tabstripClassName
61
- } = TabstripProps2;
62
- const handleExitEditMode = React.useCallback(
63
- (_oldText, newText, _allowDeactivation, tabIndex) => {
64
- onTabEdit?.(tabIndex, newText);
65
- },
66
- [onTabEdit]
67
- );
68
- const activeChild = () => {
69
- if (React.isValidElement(children)) {
70
- return children;
71
- }
72
- if (Array.isArray(children)) {
73
- return children[active] ?? null;
74
- }
75
- return null;
76
- };
77
- tabLabelsRef.current.length = 0;
78
- const renderTabs = () => getChildElements(children).map((child2, idx) => {
79
- const {
80
- closeable = allowCloseTab,
81
- id: childId = `${id}-${idx}`,
82
- "data-tab-location": tabLocation
83
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
- } = child2.props;
85
- const label = getTabLabel(child2, idx, tabLabelsRef.current);
86
- tabLabelsRef.current.push(label);
87
- return /* @__PURE__ */ jsxRuntime.jsx(
88
- vuuUiControls.Tab,
89
- {
90
- ariaControls: childId,
91
- "data-icon": getTabIcon(child2, idx),
92
- id: `${childId}-tab`,
93
- index: idx,
94
- label,
95
- location: tabLocation,
96
- closeable,
97
- editable: allowRenameTab
98
- },
99
- childId
100
- );
101
- });
102
- const child = activeChild();
103
- const isHorizontal = showTabs === "left" || showTabs === "right";
104
- const tabstripOrientation = isHorizontal ? "vertical" : "horizontal";
105
- return /* @__PURE__ */ jsxRuntime.jsxs(
106
- "div",
107
- {
108
- className: cx(classBase, classNameProp, {
109
- [`${classBase}-horizontal`]: isHorizontal
110
- }),
111
- style,
112
- id,
113
- ref,
114
- children: [
115
- showTabs ? /* @__PURE__ */ jsxRuntime.jsx(
116
- vuuUiControls.Tabstrip,
117
- {
118
- "aria-label": "data tabs",
119
- ...TabstripProps2,
120
- activeTabIndex: TabstripProps2?.activeTabIndex ?? (child === null ? -1 : active),
121
- allowDragDrop: TabstripProps2.allowDragDrop !== false,
122
- animateSelectionThumb: true,
123
- className: cx("vuuTabHeader", tabstripClassName),
124
- keyBoardActivation,
125
- onActiveChange: onTabSelectionChanged,
126
- onAddTab,
127
- onCloseTab: onTabClose,
128
- onExitEditMode: handleExitEditMode,
129
- onMoveTab,
130
- orientation: tabstripOrientation,
131
- children: renderTabs()
132
- }
133
- ) : null,
134
- /* @__PURE__ */ jsxRuntime.jsx(
135
- "div",
136
- {
137
- "aria-labelledby": `${id}-${active}`,
138
- className: `${classBase}-tabPanel`,
139
- role: "tabpanel",
140
- children: child
141
- }
142
- )
143
- ]
144
- }
145
- );
146
- });
147
- Stack.displayName = "Stack";
148
-
149
- exports.Stack = Stack;
150
- //# sourceMappingURL=Stack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Stack.js","sources":["../../../../packages/vuu-layout/src/stack/Stack.tsx"],"sourcesContent":["import { Tab, Tabstrip, TabstripProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { useId } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n useCallback,\n useRef,\n} from \"react\";\nimport { getDefaultTabLabel } from \"../layout-reducer\";\nimport { StackProps } from \"./stackTypes\";\n\nimport stackCss from \"./Stack.css\";\n\nconst classBase = \"vuuTabs\";\n\nconst getDefaultTabIcon = () => undefined;\n\nconst getChildElements = <T extends ReactElement = ReactElement>(\n children: ReactNode,\n): T[] => {\n const elements: T[] = [];\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n elements.push(child as T);\n } else {\n console.warn(`Stack has unexpected child element type`);\n }\n });\n return elements;\n};\n\nconst DefaultTabstripProps: Partial<TabstripProps> = {\n allowAddTab: false,\n allowCloseTab: false,\n allowRenameTab: false,\n};\n\nexport const Stack = forwardRef(function Stack(\n {\n TabstripProps = DefaultTabstripProps,\n active = 0,\n children,\n className: classNameProp,\n getTabIcon = getDefaultTabIcon,\n getTabLabel = getDefaultTabLabel,\n id: idProp,\n keyBoardActivation = \"manual\",\n // onMouseDown,\n onAddTab,\n onMoveTab,\n onTabClose,\n onTabEdit,\n onTabSelectionChanged,\n showTabs = \"top\",\n style,\n }: StackProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-stack\",\n css: stackCss,\n window: targetWindow,\n });\n\n const id = useId(idProp);\n const tabLabelsRef = useRef<string[]>([]);\n const {\n allowCloseTab,\n allowRenameTab,\n className: tabstripClassName,\n } = TabstripProps;\n\n const handleExitEditMode = useCallback(\n (\n _oldText: string,\n newText: string,\n _allowDeactivation: boolean,\n tabIndex: number,\n ) => {\n onTabEdit?.(tabIndex, newText);\n },\n [onTabEdit],\n );\n\n const activeChild = () => {\n //TODO need to inject an id if child does not have one, so we can\n // establish the aria-controls relationship. In a Vuu layout, there\n // will always be an id.\n if (React.isValidElement(children)) {\n return children;\n }\n if (Array.isArray(children)) {\n return children[active] ?? null;\n }\n return null;\n };\n\n // The list of existing Tab Labels is required only when assigning a default label\n // to a new Tab. We rebuild on each render\n tabLabelsRef.current.length = 0;\n\n const renderTabs = () =>\n getChildElements(children).map((child, idx) => {\n const {\n closeable = allowCloseTab,\n id: childId = `${id}-${idx}`,\n \"data-tab-location\": tabLocation,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } = child.props as any;\n const label = getTabLabel(child, idx, tabLabelsRef.current);\n tabLabelsRef.current.push(label);\n return (\n <Tab\n ariaControls={childId}\n data-icon={getTabIcon(child, idx)}\n key={childId}\n id={`${childId}-tab`}\n index={idx}\n label={label}\n location={tabLocation}\n closeable={closeable}\n editable={allowRenameTab}\n />\n );\n });\n\n const child = activeChild();\n const isHorizontal = showTabs === \"left\" || showTabs === \"right\";\n const tabstripOrientation = isHorizontal ? \"vertical\" : \"horizontal\";\n\n return (\n <div\n className={cx(classBase, classNameProp, {\n [`${classBase}-horizontal`]: isHorizontal,\n })}\n style={style}\n id={id}\n ref={ref}\n >\n {showTabs ? (\n <Tabstrip\n aria-label=\"data tabs\"\n {...TabstripProps}\n activeTabIndex={\n TabstripProps?.activeTabIndex ?? (child === null ? -1 : active)\n }\n allowDragDrop={TabstripProps.allowDragDrop !== false}\n animateSelectionThumb\n className={cx(\"vuuTabHeader\", tabstripClassName)}\n keyBoardActivation={keyBoardActivation}\n onActiveChange={onTabSelectionChanged}\n onAddTab={onAddTab}\n onCloseTab={onTabClose}\n onExitEditMode={handleExitEditMode}\n onMoveTab={onMoveTab}\n orientation={tabstripOrientation}\n >\n {renderTabs()}\n </Tabstrip>\n ) : null}\n <div\n aria-labelledby={`${id}-${active}`}\n className={`${classBase}-tabPanel`}\n role=\"tabpanel\"\n >\n {child}\n </div>\n </div>\n );\n});\nStack.displayName = \"Stack\";\n"],"names":["forwardRef","Stack","TabstripProps","getDefaultTabLabel","useWindow","useComponentCssInjection","stackCss","useId","useRef","useCallback","child","jsx","Tab","jsxs","Tabstrip"],"mappings":"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"}