@vuu-ui/vuu-shell 2.1.19-beta.2 → 2.1.19-beta.4

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 (254) hide show
  1. package/cjs/ShellContextProvider.js +25 -0
  2. package/cjs/ShellContextProvider.js.map +1 -0
  3. package/cjs/app-header/AppHeader.css.js +6 -0
  4. package/cjs/app-header/AppHeader.css.js.map +1 -0
  5. package/cjs/app-header/AppHeader.js +118 -0
  6. package/cjs/app-header/AppHeader.js.map +1 -0
  7. package/cjs/application-provider/ApplicationContext.js +17 -0
  8. package/cjs/application-provider/ApplicationContext.js.map +1 -0
  9. package/cjs/application-provider/ApplicationProvider.js +102 -0
  10. package/cjs/application-provider/ApplicationProvider.js.map +1 -0
  11. package/cjs/feature/Feature.js +54 -0
  12. package/cjs/feature/Feature.js.map +1 -0
  13. package/cjs/feature/FeatureErrorBoundary.js +30 -0
  14. package/cjs/feature/FeatureErrorBoundary.js.map +1 -0
  15. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js +60 -0
  16. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +1 -0
  17. package/cjs/feature-list/FeatureList.css.js +6 -0
  18. package/cjs/feature-list/FeatureList.css.js.map +1 -0
  19. package/cjs/feature-list/FeatureList.js +109 -0
  20. package/cjs/feature-list/FeatureList.js.map +1 -0
  21. package/cjs/index.js +71 -0
  22. package/cjs/index.js.map +1 -0
  23. package/cjs/left-nav/LeftNav.css.js +6 -0
  24. package/cjs/left-nav/LeftNav.css.js.map +1 -0
  25. package/cjs/left-nav/LeftNav.js +202 -0
  26. package/cjs/left-nav/LeftNav.js.map +1 -0
  27. package/cjs/login/LoginPanel.css.js +6 -0
  28. package/cjs/login/LoginPanel.css.js.map +1 -0
  29. package/cjs/login/LoginPanel.js +110 -0
  30. package/cjs/login/LoginPanel.js.map +1 -0
  31. package/cjs/login/VuuLogo.js +134 -0
  32. package/cjs/login/VuuLogo.js.map +1 -0
  33. package/cjs/persistence-manager/LocalPersistenceManager.js +193 -0
  34. package/cjs/persistence-manager/LocalPersistenceManager.js.map +1 -0
  35. package/cjs/persistence-manager/PersistenceProvider.js +21 -0
  36. package/cjs/persistence-manager/PersistenceProvider.js.map +1 -0
  37. package/cjs/persistence-manager/RemotePersistenceManager.js +165 -0
  38. package/cjs/persistence-manager/RemotePersistenceManager.js.map +1 -0
  39. package/cjs/persistence-manager/StaticPersistenceManager.js +73 -0
  40. package/cjs/persistence-manager/StaticPersistenceManager.js.map +1 -0
  41. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js +6 -0
  42. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js.map +1 -0
  43. package/cjs/shell-layout-templates/context-panel/ContextPanel.js +100 -0
  44. package/cjs/shell-layout-templates/context-panel/ContextPanel.js.map +1 -0
  45. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +51 -0
  46. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +1 -0
  47. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +83 -0
  48. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +1 -0
  49. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +46 -0
  50. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +1 -0
  51. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js +6 -0
  52. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js.map +1 -0
  53. package/cjs/shell-layout-templates/side-panel/SidePanel.js +36 -0
  54. package/cjs/shell-layout-templates/side-panel/SidePanel.js.map +1 -0
  55. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +48 -0
  56. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +1 -0
  57. package/cjs/shell-layout-templates/useShellLayout.js +23 -0
  58. package/cjs/shell-layout-templates/useShellLayout.js.map +1 -0
  59. package/cjs/shell.css.js +6 -0
  60. package/cjs/shell.css.js.map +1 -0
  61. package/cjs/shell.js +137 -0
  62. package/cjs/shell.js.map +1 -0
  63. package/cjs/theme-switch/ThemeSwitch.css.js +6 -0
  64. package/cjs/theme-switch/ThemeSwitch.css.js.map +1 -0
  65. package/cjs/theme-switch/ThemeSwitch.js +56 -0
  66. package/cjs/theme-switch/ThemeSwitch.js.map +1 -0
  67. package/cjs/user-settings/SettingsForm.css.js +6 -0
  68. package/cjs/user-settings/SettingsForm.css.js.map +1 -0
  69. package/cjs/user-settings/SettingsForm.js +168 -0
  70. package/cjs/user-settings/SettingsForm.js.map +1 -0
  71. package/cjs/user-settings/UserSettingsPanel.css.js +6 -0
  72. package/cjs/user-settings/UserSettingsPanel.css.js.map +1 -0
  73. package/cjs/user-settings/UserSettingsPanel.js +42 -0
  74. package/cjs/user-settings/UserSettingsPanel.js.map +1 -0
  75. package/cjs/workspace-management/LayoutList.css.js +6 -0
  76. package/cjs/workspace-management/LayoutList.css.js.map +1 -0
  77. package/cjs/workspace-management/LayoutList.js +116 -0
  78. package/cjs/workspace-management/LayoutList.js.map +1 -0
  79. package/cjs/workspace-management/LayoutTile.css.js +6 -0
  80. package/cjs/workspace-management/LayoutTile.css.js.map +1 -0
  81. package/cjs/workspace-management/LayoutTile.js +41 -0
  82. package/cjs/workspace-management/LayoutTile.js.map +1 -0
  83. package/cjs/workspace-management/SaveLayoutPanel.css.js +6 -0
  84. package/cjs/workspace-management/SaveLayoutPanel.css.js.map +1 -0
  85. package/cjs/workspace-management/SaveLayoutPanel.js +128 -0
  86. package/cjs/workspace-management/SaveLayoutPanel.js.map +1 -0
  87. package/cjs/workspace-management/WorkspaceProvider.js +265 -0
  88. package/cjs/workspace-management/WorkspaceProvider.js.map +1 -0
  89. package/cjs/workspace-management/defaultWorkspaceJSON.js +101 -0
  90. package/cjs/workspace-management/defaultWorkspaceJSON.js.map +1 -0
  91. package/cjs/workspace-management/screenshot-utils.js +25 -0
  92. package/cjs/workspace-management/screenshot-utils.js.map +1 -0
  93. package/cjs/workspace-management/useWorkspaceContextMenuItems.js +72 -0
  94. package/cjs/workspace-management/useWorkspaceContextMenuItems.js.map +1 -0
  95. package/esm/ShellContextProvider.js +23 -0
  96. package/esm/ShellContextProvider.js.map +1 -0
  97. package/esm/app-header/AppHeader.css.js +4 -0
  98. package/esm/app-header/AppHeader.css.js.map +1 -0
  99. package/esm/app-header/AppHeader.js +116 -0
  100. package/esm/app-header/AppHeader.js.map +1 -0
  101. package/esm/application-provider/ApplicationContext.js +15 -0
  102. package/esm/application-provider/ApplicationContext.js.map +1 -0
  103. package/esm/application-provider/ApplicationProvider.js +96 -0
  104. package/esm/application-provider/ApplicationProvider.js.map +1 -0
  105. package/esm/feature/Feature.js +52 -0
  106. package/esm/feature/Feature.js.map +1 -0
  107. package/esm/feature/FeatureErrorBoundary.js +28 -0
  108. package/esm/feature/FeatureErrorBoundary.js.map +1 -0
  109. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js +56 -0
  110. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +1 -0
  111. package/esm/feature-list/FeatureList.css.js +4 -0
  112. package/esm/feature-list/FeatureList.css.js.map +1 -0
  113. package/esm/feature-list/FeatureList.js +107 -0
  114. package/esm/feature-list/FeatureList.js.map +1 -0
  115. package/esm/index.js +25 -0
  116. package/esm/index.js.map +1 -0
  117. package/esm/left-nav/LeftNav.css.js +4 -0
  118. package/esm/left-nav/LeftNav.css.js.map +1 -0
  119. package/esm/left-nav/LeftNav.js +200 -0
  120. package/esm/left-nav/LeftNav.js.map +1 -0
  121. package/esm/login/LoginPanel.css.js +4 -0
  122. package/esm/login/LoginPanel.css.js.map +1 -0
  123. package/esm/login/LoginPanel.js +108 -0
  124. package/esm/login/LoginPanel.js.map +1 -0
  125. package/esm/login/VuuLogo.js +132 -0
  126. package/esm/login/VuuLogo.js.map +1 -0
  127. package/esm/persistence-manager/LocalPersistenceManager.js +191 -0
  128. package/esm/persistence-manager/LocalPersistenceManager.js.map +1 -0
  129. package/esm/persistence-manager/PersistenceProvider.js +17 -0
  130. package/esm/persistence-manager/PersistenceProvider.js.map +1 -0
  131. package/esm/persistence-manager/RemotePersistenceManager.js +163 -0
  132. package/esm/persistence-manager/RemotePersistenceManager.js.map +1 -0
  133. package/esm/persistence-manager/StaticPersistenceManager.js +71 -0
  134. package/esm/persistence-manager/StaticPersistenceManager.js.map +1 -0
  135. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js +4 -0
  136. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js.map +1 -0
  137. package/esm/shell-layout-templates/context-panel/ContextPanel.js +98 -0
  138. package/esm/shell-layout-templates/context-panel/ContextPanel.js.map +1 -0
  139. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +49 -0
  140. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +1 -0
  141. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +81 -0
  142. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +1 -0
  143. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +44 -0
  144. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +1 -0
  145. package/esm/shell-layout-templates/side-panel/SidePanel.css.js +4 -0
  146. package/esm/shell-layout-templates/side-panel/SidePanel.css.js.map +1 -0
  147. package/esm/shell-layout-templates/side-panel/SidePanel.js +34 -0
  148. package/esm/shell-layout-templates/side-panel/SidePanel.js.map +1 -0
  149. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +46 -0
  150. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +1 -0
  151. package/esm/shell-layout-templates/useShellLayout.js +21 -0
  152. package/esm/shell-layout-templates/useShellLayout.js.map +1 -0
  153. package/esm/shell.css.js +4 -0
  154. package/esm/shell.css.js.map +1 -0
  155. package/esm/shell.js +135 -0
  156. package/esm/shell.js.map +1 -0
  157. package/esm/theme-switch/ThemeSwitch.css.js +4 -0
  158. package/esm/theme-switch/ThemeSwitch.css.js.map +1 -0
  159. package/esm/theme-switch/ThemeSwitch.js +54 -0
  160. package/esm/theme-switch/ThemeSwitch.js.map +1 -0
  161. package/esm/user-settings/SettingsForm.css.js +4 -0
  162. package/esm/user-settings/SettingsForm.css.js.map +1 -0
  163. package/esm/user-settings/SettingsForm.js +162 -0
  164. package/esm/user-settings/SettingsForm.js.map +1 -0
  165. package/esm/user-settings/UserSettingsPanel.css.js +4 -0
  166. package/esm/user-settings/UserSettingsPanel.css.js.map +1 -0
  167. package/esm/user-settings/UserSettingsPanel.js +40 -0
  168. package/esm/user-settings/UserSettingsPanel.js.map +1 -0
  169. package/esm/workspace-management/LayoutList.css.js +4 -0
  170. package/esm/workspace-management/LayoutList.css.js.map +1 -0
  171. package/esm/workspace-management/LayoutList.js +114 -0
  172. package/esm/workspace-management/LayoutList.js.map +1 -0
  173. package/esm/workspace-management/LayoutTile.css.js +4 -0
  174. package/esm/workspace-management/LayoutTile.css.js.map +1 -0
  175. package/esm/workspace-management/LayoutTile.js +39 -0
  176. package/esm/workspace-management/LayoutTile.js.map +1 -0
  177. package/esm/workspace-management/SaveLayoutPanel.css.js +4 -0
  178. package/esm/workspace-management/SaveLayoutPanel.css.js.map +1 -0
  179. package/esm/workspace-management/SaveLayoutPanel.js +126 -0
  180. package/esm/workspace-management/SaveLayoutPanel.js.map +1 -0
  181. package/esm/workspace-management/WorkspaceProvider.js +262 -0
  182. package/esm/workspace-management/WorkspaceProvider.js.map +1 -0
  183. package/esm/workspace-management/defaultWorkspaceJSON.js +95 -0
  184. package/esm/workspace-management/defaultWorkspaceJSON.js.map +1 -0
  185. package/esm/workspace-management/screenshot-utils.js +23 -0
  186. package/esm/workspace-management/screenshot-utils.js.map +1 -0
  187. package/esm/workspace-management/useWorkspaceContextMenuItems.js +70 -0
  188. package/esm/workspace-management/useWorkspaceContextMenuItems.js.map +1 -0
  189. package/package.json +20 -17
  190. package/types/feature/FeatureErrorBoundary.d.ts +1 -1
  191. package/types/workspace-management/WorkspaceProvider.d.ts +5 -5
  192. package/src/ShellContextProvider.js +0 -20
  193. package/src/app-header/AppHeader.css.js +0 -21
  194. package/src/app-header/AppHeader.js +0 -97
  195. package/src/app-header/index.js +0 -1
  196. package/src/application-provider/ApplicationContext.js +0 -9
  197. package/src/application-provider/ApplicationProvider.js +0 -77
  198. package/src/application-provider/index.js +0 -1
  199. package/src/feature/Feature.js +0 -37
  200. package/src/feature/FeatureErrorBoundary.js +0 -33
  201. package/src/feature/Loader.js +0 -5
  202. package/src/feature/index.js +0 -1
  203. package/src/feature-and-layout-provider/FeatureAndLayoutProvider.js +0 -42
  204. package/src/feature-and-layout-provider/index.js +0 -1
  205. package/src/feature-list/FeatureList.css.js +0 -62
  206. package/src/feature-list/FeatureList.js +0 -128
  207. package/src/feature-list/index.js +0 -1
  208. package/src/get-layout-history.js +0 -7
  209. package/src/index.js +0 -14
  210. package/src/left-nav/LeftNav.css.js +0 -177
  211. package/src/left-nav/LeftNav.js +0 -193
  212. package/src/left-nav/index.js +0 -1
  213. package/src/login/LoginPanel.css.js +0 -72
  214. package/src/login/LoginPanel.js +0 -124
  215. package/src/login/VuuLogo.js +0 -108
  216. package/src/persistence-manager/LocalPersistenceManager.js +0 -156
  217. package/src/persistence-manager/PersistenceManager.js +0 -0
  218. package/src/persistence-manager/PersistenceProvider.js +0 -14
  219. package/src/persistence-manager/RemotePersistenceManager.js +0 -123
  220. package/src/persistence-manager/StaticPersistenceManager.js +0 -53
  221. package/src/persistence-manager/index.js +0 -5
  222. package/src/shell-layout-templates/context-panel/ContextPanel.css.js +0 -66
  223. package/src/shell-layout-templates/context-panel/ContextPanel.js +0 -92
  224. package/src/shell-layout-templates/context-panel/index.js +0 -1
  225. package/src/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +0 -44
  226. package/src/shell-layout-templates/index.js +0 -3
  227. package/src/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +0 -68
  228. package/src/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +0 -32
  229. package/src/shell-layout-templates/side-panel/SidePanel.css.js +0 -9
  230. package/src/shell-layout-templates/side-panel/SidePanel.js +0 -31
  231. package/src/shell-layout-templates/side-panel/index.js +0 -1
  232. package/src/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +0 -38
  233. package/src/shell-layout-templates/useShellLayout.js +0 -15
  234. package/src/shell.css.js +0 -59
  235. package/src/shell.js +0 -108
  236. package/src/theme-switch/ThemeSwitch.css.js +0 -34
  237. package/src/theme-switch/ThemeSwitch.js +0 -50
  238. package/src/theme-switch/index.js +0 -1
  239. package/src/user-settings/SettingsForm.css.js +0 -10
  240. package/src/user-settings/SettingsForm.js +0 -141
  241. package/src/user-settings/UserSettingsPanel.css.js +0 -9
  242. package/src/user-settings/UserSettingsPanel.js +0 -29
  243. package/src/user-settings/index.js +0 -2
  244. package/src/workspace-management/LayoutList.css.js +0 -74
  245. package/src/workspace-management/LayoutList.js +0 -130
  246. package/src/workspace-management/LayoutTile.css.js +0 -31
  247. package/src/workspace-management/LayoutTile.js +0 -41
  248. package/src/workspace-management/SaveLayoutPanel.css.js +0 -123
  249. package/src/workspace-management/SaveLayoutPanel.js +0 -141
  250. package/src/workspace-management/WorkspaceProvider.js +0 -209
  251. package/src/workspace-management/defaultWorkspaceJSON.js +0 -88
  252. package/src/workspace-management/index.js +0 -5
  253. package/src/workspace-management/screenshot-utils.js +0 -13
  254. package/src/workspace-management/useWorkspaceContextMenuItems.js +0 -58
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuLayout = require('@vuu-ui/vuu-layout');
5
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
6
+ var vuuUtils = require('@vuu-ui/vuu-utils');
7
+ var styles = require('@salt-ds/styles');
8
+ var window = require('@salt-ds/window');
9
+ var cx = require('clsx');
10
+ var React = require('react');
11
+ var ContextPanel$1 = require('./ContextPanel.css.js');
12
+
13
+ const classBase = "vuuContextPanel";
14
+ const ContextPanel = ({
15
+ className: classNameProp,
16
+ expanded = false,
17
+ content: contentProp,
18
+ id,
19
+ onClose,
20
+ overlay = false,
21
+ title
22
+ }) => {
23
+ const targetWindow = window.useWindow();
24
+ styles.useComponentCssInjection({
25
+ testId: "vuu-context-panel",
26
+ css: ContextPanel$1,
27
+ window: targetWindow
28
+ });
29
+ const hideContextPanel = vuuUiControls.useHideContextPanel();
30
+ const closeButtonRef = React.useRef(null);
31
+ const dispatchLayoutAction = vuuLayout.useLayoutProviderDispatch();
32
+ const handleClose = React.useCallback(() => {
33
+ if (hideContextPanel) {
34
+ hideContextPanel();
35
+ } else {
36
+ dispatchLayoutAction({
37
+ path: `#${vuuUtils.VuuShellLocation.ContextPanel}`,
38
+ propName: "expanded",
39
+ propValue: false,
40
+ type: "set-prop"
41
+ });
42
+ }
43
+ }, [dispatchLayoutAction, hideContextPanel]);
44
+ const handleKeyDown = React.useCallback(
45
+ (e) => {
46
+ if (e.key === "Escape") {
47
+ handleClose();
48
+ }
49
+ },
50
+ [handleClose]
51
+ );
52
+ const className = cx(classBase, classNameProp, {
53
+ [`${classBase}-expanded`]: expanded,
54
+ [`${classBase}-inline`]: overlay !== true,
55
+ [`${classBase}-overlay`]: overlay
56
+ });
57
+ const content = React.useMemo(
58
+ () => contentProp && expanded ? React.isValidElement(contentProp) ? contentProp : vuuLayout.layoutFromJson(contentProp, "context-0") : null,
59
+ [contentProp, expanded]
60
+ );
61
+ React.useLayoutEffect(() => {
62
+ if (expanded) {
63
+ closeButtonRef.current?.focus();
64
+ } else {
65
+ onClose?.();
66
+ }
67
+ }, [expanded, onClose]);
68
+ return /* @__PURE__ */ jsxRuntime.jsx(
69
+ "div",
70
+ {
71
+ className: cx(classBase, className, "vuuScrollable", {
72
+ [`${classBase}-expanded`]: expanded
73
+ }),
74
+ id,
75
+ children: /* @__PURE__ */ jsxRuntime.jsxs(vuuLayout.View, { className: `${classBase}-inner`, header: false, id, children: [
76
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-header`, children: [
77
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: `${classBase}-title`, children: title }),
78
+ /* @__PURE__ */ jsxRuntime.jsx(
79
+ vuuUiControls.IconButton,
80
+ {
81
+ appearance: "transparent",
82
+ className: `${classBase}-close`,
83
+ "data-embedded": true,
84
+ icon: "close",
85
+ onClick: handleClose,
86
+ onKeyDown: handleKeyDown,
87
+ ref: closeButtonRef,
88
+ sentiment: "neutral",
89
+ size: 16
90
+ }
91
+ )
92
+ ] }),
93
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-content`, children: content })
94
+ ] })
95
+ }
96
+ );
97
+ };
98
+
99
+ exports.ContextPanel = ContextPanel;
100
+ //# sourceMappingURL=ContextPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextPanel.js","sources":["../../../../../packages/vuu-shell/src/shell-layout-templates/context-panel/ContextPanel.tsx"],"sourcesContent":["import {\n View,\n layoutFromJson,\n useLayoutProviderDispatch,\n} from \"@vuu-ui/vuu-layout\";\nimport { IconButton, useHideContextPanel } from \"@vuu-ui/vuu-ui-controls\";\nimport { LayoutJSON, VuuShellLocation } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport React, {\n KeyboardEventHandler,\n ReactElement,\n ReactNode,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\n\nimport contextPanelCss from \"./ContextPanel.css\";\n\nconst classBase = \"vuuContextPanel\";\n\nexport interface ContextPanelProps {\n [key: string]: unknown;\n className?: string;\n content?: ReactElement | LayoutJSON;\n expanded?: boolean;\n id?: string;\n onClose?: () => void;\n overlay?: boolean;\n title?: ReactNode;\n}\n\nexport const ContextPanel = ({\n className: classNameProp,\n expanded = false,\n content: contentProp,\n id,\n onClose,\n overlay = false,\n title,\n}: ContextPanelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-context-panel\",\n css: contextPanelCss,\n window: targetWindow,\n });\n\n const hideContextPanel = useHideContextPanel();\n const closeButtonRef = useRef<HTMLButtonElement>(null);\n const dispatchLayoutAction = useLayoutProviderDispatch();\n const handleClose = useCallback(() => {\n if (hideContextPanel) {\n hideContextPanel();\n } else {\n dispatchLayoutAction({\n path: `#${VuuShellLocation.ContextPanel}`,\n propName: \"expanded\",\n propValue: false,\n type: \"set-prop\",\n });\n }\n }, [dispatchLayoutAction, hideContextPanel]);\n\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n (e) => {\n if (e.key === \"Escape\") {\n handleClose();\n }\n },\n [handleClose],\n );\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-expanded`]: expanded,\n [`${classBase}-inline`]: overlay !== true,\n [`${classBase}-overlay`]: overlay,\n });\n\n const content = useMemo(\n () =>\n contentProp && expanded\n ? React.isValidElement(contentProp)\n ? contentProp\n : layoutFromJson(contentProp, \"context-0\")\n : null,\n [contentProp, expanded],\n );\n\n useLayoutEffect(() => {\n if (expanded) {\n // Components loaded into the ContextPanel will often assume focus themselves,\n //but if not, default to close button\n closeButtonRef.current?.focus();\n } else {\n onClose?.();\n }\n }, [expanded, onClose]);\n\n return (\n <div\n className={cx(classBase, className, \"vuuScrollable\", {\n [`${classBase}-expanded`]: expanded,\n })}\n id={id}\n >\n <View className={`${classBase}-inner`} header={false} id={id}>\n <div className={`${classBase}-header`}>\n <h2 className={`${classBase}-title`}>{title}</h2>\n <IconButton\n appearance=\"transparent\"\n className={`${classBase}-close`}\n data-embedded\n icon=\"close\"\n onClick={handleClose}\n onKeyDown={handleKeyDown}\n ref={closeButtonRef}\n sentiment=\"neutral\"\n size={16}\n />\n </div>\n <div className={`${classBase}-content`}>{content}</div>\n </View>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","contextPanelCss","useHideContextPanel","useRef","useLayoutProviderDispatch","useCallback","VuuShellLocation","useMemo","layoutFromJson","useLayoutEffect","jsx","jsxs","View","IconButton"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuLayout = require('@vuu-ui/vuu-layout');
5
+ var vuuUtils = require('@vuu-ui/vuu-utils');
6
+ var ContextPanel = require('../context-panel/ContextPanel.js');
7
+ var SidePanel = require('../side-panel/SidePanel.js');
8
+ var React = require('react');
9
+
10
+ const useFullHeightLeftPanel = ({
11
+ appHeader,
12
+ SidePanelProps: LeftSidePanelProps,
13
+ htmlAttributes
14
+ }) => React.useMemo(
15
+ () => /* @__PURE__ */ jsxRuntime.jsxs(
16
+ vuuLayout.Flexbox,
17
+ {
18
+ ...htmlAttributes,
19
+ style: {
20
+ ...htmlAttributes?.style,
21
+ flexDirection: "row"
22
+ },
23
+ children: [
24
+ /* @__PURE__ */ jsxRuntime.jsx(SidePanel.SidePanel, { ...LeftSidePanelProps, id: vuuUtils.VuuShellLocation.SidePanel }),
25
+ /* @__PURE__ */ jsxRuntime.jsxs(
26
+ vuuLayout.Flexbox,
27
+ {
28
+ className: "vuuShell-content",
29
+ style: { flex: 1, flexDirection: "column" },
30
+ children: [
31
+ appHeader,
32
+ /* @__PURE__ */ jsxRuntime.jsx(
33
+ vuuLayout.LayoutContainer,
34
+ {
35
+ id: vuuUtils.VuuShellLocation.WorkspaceContainer,
36
+ style: { flex: 1 }
37
+ },
38
+ "main-content"
39
+ )
40
+ ]
41
+ }
42
+ ),
43
+ /* @__PURE__ */ jsxRuntime.jsx(ContextPanel.ContextPanel, { id: vuuUtils.VuuShellLocation.ContextPanel, overlay: true })
44
+ ]
45
+ }
46
+ ),
47
+ [LeftSidePanelProps, appHeader, htmlAttributes]
48
+ );
49
+
50
+ exports.useFullHeightLeftPanel = useFullHeightLeftPanel;
51
+ //# sourceMappingURL=useFullHeightLeftPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFullHeightLeftPanel.js","sources":["../../../../../packages/vuu-shell/src/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.tsx"],"sourcesContent":["import { LayoutContainer, Flexbox } from \"@vuu-ui/vuu-layout\";\nimport { VuuShellLocation } from \"@vuu-ui/vuu-utils\";\nimport { ContextPanel } from \"../context-panel\";\nimport { SidePanel } from \"../side-panel\";\nimport { ShellLayoutTemplateHook } from \"../useShellLayout\";\nimport { useMemo } from \"react\";\n\nexport const useFullHeightLeftPanel: ShellLayoutTemplateHook = ({\n appHeader,\n SidePanelProps: LeftSidePanelProps,\n htmlAttributes,\n}) =>\n useMemo(\n () => (\n <Flexbox\n {...htmlAttributes}\n style={{\n ...htmlAttributes?.style,\n flexDirection: \"row\",\n }}\n >\n <SidePanel {...LeftSidePanelProps} id={VuuShellLocation.SidePanel} />\n <Flexbox\n className=\"vuuShell-content\"\n style={{ flex: 1, flexDirection: \"column\" }}\n >\n {appHeader}\n <LayoutContainer\n id={VuuShellLocation.WorkspaceContainer}\n key=\"main-content\"\n style={{ flex: 1 }}\n />\n </Flexbox>\n <ContextPanel id={VuuShellLocation.ContextPanel} overlay></ContextPanel>\n </Flexbox>\n ),\n [LeftSidePanelProps, appHeader, htmlAttributes],\n );\n"],"names":["useMemo","jsxs","Flexbox","jsx","SidePanel","VuuShellLocation","LayoutContainer","ContextPanel"],"mappings":";;;;;;;;;AAOO,MAAM,yBAAkD,CAAC;AAAA,EAC9D,SAAA;AAAA,EACA,cAAgB,EAAA,kBAAA;AAAA,EAChB;AACF,CACE,KAAAA,aAAA;AAAA,EACE,sBACEC,eAAA;AAAA,IAACC,iBAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,KAAO,EAAA;AAAA,QACL,GAAG,cAAgB,EAAA,KAAA;AAAA,QACnB,aAAe,EAAA;AAAA,OACjB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,mBAAW,EAAA,EAAA,GAAG,kBAAoB,EAAA,EAAA,EAAIC,0BAAiB,SAAW,EAAA,CAAA;AAAA,wBACnEJ,eAAA;AAAA,UAACC,iBAAA;AAAA,UAAA;AAAA,YACC,SAAU,EAAA,kBAAA;AAAA,YACV,KAAO,EAAA,EAAE,IAAM,EAAA,CAAA,EAAG,eAAe,QAAS,EAAA;AAAA,YAEzC,QAAA,EAAA;AAAA,cAAA,SAAA;AAAA,8BACDC,cAAA;AAAA,gBAACG,yBAAA;AAAA,gBAAA;AAAA,kBACC,IAAID,yBAAiB,CAAA,kBAAA;AAAA,kBAErB,KAAA,EAAO,EAAE,IAAA,EAAM,CAAE;AAAA,iBAAA;AAAA,gBADb;AAAA;AAEN;AAAA;AAAA,SACF;AAAA,uCACCE,yBAAa,EAAA,EAAA,EAAA,EAAIF,yBAAiB,CAAA,YAAA,EAAc,SAAO,IAAC,EAAA;AAAA;AAAA;AAAA,GAC3D;AAAA,EAEF,CAAC,kBAAoB,EAAA,SAAA,EAAW,cAAc;AAChD;;;;"}
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuLayout = require('@vuu-ui/vuu-layout');
5
+ var vuuUtils = require('@vuu-ui/vuu-utils');
6
+ var React = require('react');
7
+
8
+ const useInlayLeftPanel = ({
9
+ SidePanelProps: LeftSidePanelProps,
10
+ appHeader,
11
+ htmlAttributes
12
+ }) => {
13
+ const paletteView = React.useRef(null);
14
+ const [open, setOpen] = React.useState(true);
15
+ const handleDrawerClick = React.useCallback(
16
+ (e) => {
17
+ const target = e.target;
18
+ if (!paletteView.current?.contains(target)) {
19
+ setOpen(!open);
20
+ }
21
+ },
22
+ [open]
23
+ );
24
+ return React.useMemo(() => {
25
+ const getDrawers = (leftSidePanel) => {
26
+ const drawers = [];
27
+ drawers.push(
28
+ /* @__PURE__ */ jsxRuntime.jsx(
29
+ vuuLayout.Drawer,
30
+ {
31
+ onClick: handleDrawerClick,
32
+ open,
33
+ position: "left",
34
+ inline: true,
35
+ peekaboo: true,
36
+ sizeOpen: 200,
37
+ toggleButton: "end",
38
+ children: /* @__PURE__ */ jsxRuntime.jsx(
39
+ vuuLayout.View,
40
+ {
41
+ className: "vuuShell-palette",
42
+ id: "vw-app-palette",
43
+ ref: paletteView,
44
+ style: { height: "100%" },
45
+ children: leftSidePanel
46
+ },
47
+ "app-palette"
48
+ )
49
+ },
50
+ "left-panel"
51
+ )
52
+ );
53
+ return drawers;
54
+ };
55
+ return /* @__PURE__ */ jsxRuntime.jsxs(
56
+ vuuLayout.Flexbox,
57
+ {
58
+ ...htmlAttributes,
59
+ style: {
60
+ ...htmlAttributes?.style,
61
+ flexDirection: "column"
62
+ },
63
+ children: [
64
+ appHeader,
65
+ /* @__PURE__ */ jsxRuntime.jsx(vuuLayout.DockLayout, { style: { flex: 1 }, children: getDrawers(LeftSidePanelProps?.children).concat(
66
+ /* @__PURE__ */ jsxRuntime.jsx(
67
+ vuuLayout.LayoutContainer,
68
+ {
69
+ dropTarget: true,
70
+ id: vuuUtils.VuuShellLocation.WorkspaceContainer,
71
+ style: { width: "100%", height: "100%" }
72
+ },
73
+ "main-content"
74
+ )
75
+ ) })
76
+ ]
77
+ }
78
+ );
79
+ }, [LeftSidePanelProps, appHeader, handleDrawerClick, htmlAttributes, open]);
80
+ };
81
+
82
+ exports.useInlayLeftPanel = useInlayLeftPanel;
83
+ //# sourceMappingURL=useInlayLeftPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInlayLeftPanel.js","sources":["../../../../../packages/vuu-shell/src/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.tsx"],"sourcesContent":["import {\n DockLayout,\n LayoutContainer,\n Drawer,\n Flexbox,\n View,\n} from \"@vuu-ui/vuu-layout\";\n\nimport { VuuShellLocation } from \"@vuu-ui/vuu-utils\";\nimport {\n MouseEvent,\n ReactElement,\n ReactNode,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { ShellLayoutTemplateHook } from \"../useShellLayout\";\n\nexport const useInlayLeftPanel: ShellLayoutTemplateHook = ({\n SidePanelProps: LeftSidePanelProps,\n appHeader,\n htmlAttributes,\n}) => {\n const paletteView = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(true);\n const handleDrawerClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n const target = e.target as HTMLElement;\n if (!paletteView.current?.contains(target)) {\n setOpen(!open);\n }\n },\n [open],\n );\n\n return useMemo(() => {\n const getDrawers = (leftSidePanel: ReactNode) => {\n const drawers: ReactElement[] = [];\n drawers.push(\n <Drawer\n key=\"left-panel\"\n onClick={handleDrawerClick}\n open={open}\n position=\"left\"\n inline\n peekaboo\n sizeOpen={200}\n toggleButton=\"end\"\n >\n <View\n className=\"vuuShell-palette\"\n id=\"vw-app-palette\"\n key=\"app-palette\"\n ref={paletteView}\n style={{ height: \"100%\" }}\n >\n {leftSidePanel}\n </View>\n </Drawer>,\n );\n\n return drawers;\n };\n\n return (\n <Flexbox\n {...htmlAttributes}\n style={{\n ...htmlAttributes?.style,\n flexDirection: \"column\",\n }}\n >\n {appHeader}\n <DockLayout style={{ flex: 1 }}>\n {getDrawers(LeftSidePanelProps?.children).concat(\n <LayoutContainer\n dropTarget\n id={VuuShellLocation.WorkspaceContainer}\n key=\"main-content\"\n style={{ width: \"100%\", height: \"100%\" }}\n />,\n )}\n </DockLayout>\n </Flexbox>\n );\n }, [LeftSidePanelProps, appHeader, handleDrawerClick, htmlAttributes, open]);\n};\n"],"names":["useRef","useState","useCallback","useMemo","jsx","Drawer","View","jsxs","Flexbox","DockLayout","LayoutContainer","VuuShellLocation"],"mappings":";;;;;;;AAoBO,MAAM,oBAA6C,CAAC;AAAA,EACzD,cAAgB,EAAA,kBAAA;AAAA,EAChB,SAAA;AAAA,EACA;AACF,CAAM,KAAA;AACJ,EAAM,MAAA,WAAA,GAAcA,aAAuB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAS,IAAI,CAAA;AACrC,EAAA,MAAM,iBAAoB,GAAAC,iBAAA;AAAA,IACxB,CAAC,CAA+B,KAAA;AAC9B,MAAA,MAAM,SAAS,CAAE,CAAA,MAAA;AACjB,MAAA,IAAI,CAAC,WAAA,CAAY,OAAS,EAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AAC1C,QAAA,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA;AACf,KACF;AAAA,IACA,CAAC,IAAI;AAAA,GACP;AAEA,EAAA,OAAOC,cAAQ,MAAM;AACnB,IAAM,MAAA,UAAA,GAAa,CAAC,aAA6B,KAAA;AAC/C,MAAA,MAAM,UAA0B,EAAC;AACjC,MAAQ,OAAA,CAAA,IAAA;AAAA,wBACNC,cAAA;AAAA,UAACC,gBAAA;AAAA,UAAA;AAAA,YAEC,OAAS,EAAA,iBAAA;AAAA,YACT,IAAA;AAAA,YACA,QAAS,EAAA,MAAA;AAAA,YACT,MAAM,EAAA,IAAA;AAAA,YACN,QAAQ,EAAA,IAAA;AAAA,YACR,QAAU,EAAA,GAAA;AAAA,YACV,YAAa,EAAA,KAAA;AAAA,YAEb,QAAA,kBAAAD,cAAA;AAAA,cAACE,cAAA;AAAA,cAAA;AAAA,gBACC,SAAU,EAAA,kBAAA;AAAA,gBACV,EAAG,EAAA,gBAAA;AAAA,gBAEH,GAAK,EAAA,WAAA;AAAA,gBACL,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAO,EAAA;AAAA,gBAEvB,QAAA,EAAA;AAAA,eAAA;AAAA,cAJG;AAAA;AAKN,WAAA;AAAA,UAjBI;AAAA;AAkBN,OACF;AAEA,MAAO,OAAA,OAAA;AAAA,KACT;AAEA,IACE,uBAAAC,eAAA;AAAA,MAACC,iBAAA;AAAA,MAAA;AAAA,QACE,GAAG,cAAA;AAAA,QACJ,KAAO,EAAA;AAAA,UACL,GAAG,cAAgB,EAAA,KAAA;AAAA,UACnB,aAAe,EAAA;AAAA,SACjB;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,SAAA;AAAA,0BACDJ,cAAA,CAACK,oBAAW,EAAA,EAAA,KAAA,EAAO,EAAE,IAAA,EAAM,GACxB,EAAA,QAAA,EAAA,UAAA,CAAW,kBAAoB,EAAA,QAAQ,CAAE,CAAA,MAAA;AAAA,4BACxCL,cAAA;AAAA,cAACM,yBAAA;AAAA,cAAA;AAAA,gBACC,UAAU,EAAA,IAAA;AAAA,gBACV,IAAIC,yBAAiB,CAAA,kBAAA;AAAA,gBAErB,KAAO,EAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,QAAQ,MAAO;AAAA,eAAA;AAAA,cADnC;AAAA;AAEN,WAEJ,EAAA;AAAA;AAAA;AAAA,KACF;AAAA,KAED,CAAC,kBAAA,EAAoB,WAAW,iBAAmB,EAAA,cAAA,EAAgB,IAAI,CAAC,CAAA;AAC7E;;;;"}
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuLayout = require('@vuu-ui/vuu-layout');
5
+ var vuuUtils = require('@vuu-ui/vuu-utils');
6
+ var React = require('react');
7
+
8
+ const useLeftMainTabs = ({
9
+ appHeader,
10
+ htmlAttributes,
11
+ ToolbarProps
12
+ }) => {
13
+ if (ToolbarProps === void 0) {
14
+ throw Error("LeftMainTabs layout requires ToolbarProps");
15
+ }
16
+ return React.useMemo(() => {
17
+ return /* @__PURE__ */ jsxRuntime.jsxs(
18
+ vuuLayout.Flexbox,
19
+ {
20
+ ...htmlAttributes,
21
+ style: {
22
+ ...htmlAttributes?.style,
23
+ flexDirection: "column"
24
+ },
25
+ children: [
26
+ appHeader,
27
+ /* @__PURE__ */ jsxRuntime.jsx(
28
+ vuuLayout.StackLayout,
29
+ {
30
+ TabstripProps: {
31
+ className: `${vuuUtils.VuuShellLocation.MultiWorkspaceContainer}-tabs`
32
+ },
33
+ active: 0,
34
+ showTabs: "left",
35
+ style: { flex: 1 },
36
+ id: vuuUtils.VuuShellLocation.MultiWorkspaceContainer
37
+ }
38
+ )
39
+ ]
40
+ }
41
+ );
42
+ }, [appHeader, htmlAttributes]);
43
+ };
44
+
45
+ exports.useLeftMainTabs = useLeftMainTabs;
46
+ //# sourceMappingURL=useLeftMainTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLeftMainTabs.js","sources":["../../../../../packages/vuu-shell/src/shell-layout-templates/left-main-tabs/useLeftMainTabs.tsx"],"sourcesContent":["import { Flexbox, StackLayout } from \"@vuu-ui/vuu-layout\";\n\nimport { VuuShellLocation } from \"@vuu-ui/vuu-utils\";\nimport { useMemo } from \"react\";\nimport { ShellLayoutTemplateHook } from \"../useShellLayout\";\n\nexport const useLeftMainTabs: ShellLayoutTemplateHook = ({\n appHeader,\n htmlAttributes,\n ToolbarProps,\n}) => {\n if (ToolbarProps === undefined) {\n throw Error(\"LeftMainTabs layout requires ToolbarProps\");\n }\n\n return useMemo(() => {\n return (\n <Flexbox\n {...htmlAttributes}\n style={{\n ...htmlAttributes?.style,\n flexDirection: \"column\",\n }}\n >\n {appHeader}\n <StackLayout\n TabstripProps={{\n className: `${VuuShellLocation.MultiWorkspaceContainer}-tabs`,\n }}\n active={0}\n showTabs=\"left\"\n style={{ flex: 1 }}\n id={VuuShellLocation.MultiWorkspaceContainer}\n />\n </Flexbox>\n );\n }, [appHeader, htmlAttributes]);\n};\n"],"names":["useMemo","jsxs","Flexbox","jsx","StackLayout","VuuShellLocation"],"mappings":";;;;;;;AAMO,MAAM,kBAA2C,CAAC;AAAA,EACvD,SAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAM,KAAA;AACJ,EAAA,IAAI,iBAAiB,KAAW,CAAA,EAAA;AAC9B,IAAA,MAAM,MAAM,2CAA2C,CAAA;AAAA;AAGzD,EAAA,OAAOA,cAAQ,MAAM;AACnB,IACE,uBAAAC,eAAA;AAAA,MAACC,iBAAA;AAAA,MAAA;AAAA,QACE,GAAG,cAAA;AAAA,QACJ,KAAO,EAAA;AAAA,UACL,GAAG,cAAgB,EAAA,KAAA;AAAA,UACnB,aAAe,EAAA;AAAA,SACjB;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,SAAA;AAAA,0BACDC,cAAA;AAAA,YAACC,qBAAA;AAAA,YAAA;AAAA,cACC,aAAe,EAAA;AAAA,gBACb,SAAA,EAAW,CAAG,EAAAC,yBAAA,CAAiB,uBAAuB,CAAA,KAAA;AAAA,eACxD;AAAA,cACA,MAAQ,EAAA,CAAA;AAAA,cACR,QAAS,EAAA,MAAA;AAAA,cACT,KAAA,EAAO,EAAE,IAAA,EAAM,CAAE,EAAA;AAAA,cACjB,IAAIA,yBAAiB,CAAA;AAAA;AAAA;AACvB;AAAA;AAAA,KACF;AAAA,GAED,EAAA,CAAC,SAAW,EAAA,cAAc,CAAC,CAAA;AAChC;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var sidePanelCss = ".vuuShellSidePanel {\n transition: width .2s ease-out;\n width: var(--shell-left-nav-size);\n}";
4
+
5
+ module.exports = sidePanelCss;
6
+ //# sourceMappingURL=SidePanel.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidePanel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var cx = require('clsx');
6
+ var styles = require('@salt-ds/styles');
7
+ var window = require('@salt-ds/window');
8
+ var SidePanel$1 = require('./SidePanel.css.js');
9
+
10
+ const classBase = "vuuShellSidePanel";
11
+ const SidePanel = ({
12
+ children,
13
+ open = true,
14
+ sizeClosed = 90,
15
+ sizeOpen = 200,
16
+ style: styleProp,
17
+ ...htmlAttributes
18
+ }) => {
19
+ const targetWindow = window.useWindow();
20
+ styles.useComponentCssInjection({
21
+ testId: "vuu-side-panel",
22
+ css: SidePanel$1,
23
+ window: targetWindow
24
+ });
25
+ const style = React.useMemo(
26
+ () => ({
27
+ ...styleProp,
28
+ "--shell-left-nav-size": open ? `${sizeOpen}px` : `${sizeClosed}px`
29
+ }),
30
+ [open, sizeClosed, sizeOpen, styleProp]
31
+ );
32
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlAttributes, className: cx(classBase), style, children });
33
+ };
34
+
35
+ exports.SidePanel = SidePanel;
36
+ //# sourceMappingURL=SidePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidePanel.js","sources":["../../../../../packages/vuu-shell/src/shell-layout-templates/side-panel/SidePanel.tsx"],"sourcesContent":["import { CSSProperties, HTMLAttributes, useMemo } from \"react\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport sidePanelCss from \"./SidePanel.css\";\n// import { useLayoutManager } from \"../../layout-management\";\n\nconst classBase = \"vuuShellSidePanel\";\n\nexport interface SidePanelProps extends HTMLAttributes<HTMLDivElement> {\n open?: boolean;\n path?: string;\n sizeOpen?: number;\n sizeClosed?: number;\n}\n\nexport const SidePanel = ({\n children,\n open = true,\n sizeClosed = 90,\n sizeOpen = 200,\n style: styleProp,\n ...htmlAttributes\n}: SidePanelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-side-panel\",\n css: sidePanelCss,\n window: targetWindow,\n });\n\n // const { applicationJson, saveApplicationSettings } = useLayoutManager();\n // console.log(`settings`, {\n // expanded: applicationJson?.settings?.leftNav?.expanded,\n // active: applicationJson?.settings?.leftNav?.activeTabIndex,\n // });\n\n const style = useMemo(\n () =>\n ({\n ...styleProp,\n \"--shell-left-nav-size\": open ? `${sizeOpen}px` : `${sizeClosed}px`,\n } as CSSProperties),\n [open, sizeClosed, sizeOpen, styleProp]\n );\n return (\n <div {...htmlAttributes} className={cx(classBase)} style={style}>\n {children}\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","sidePanelCss","useMemo","jsx"],"mappings":";;;;;;;;;AAQA,MAAM,SAAY,GAAA,mBAAA;AASX,MAAM,YAAY,CAAC;AAAA,EACxB,QAAA;AAAA,EACA,IAAO,GAAA,IAAA;AAAA,EACP,UAAa,GAAA,EAAA;AAAA,EACb,QAAW,GAAA,GAAA;AAAA,EACX,KAAO,EAAA,SAAA;AAAA,EACP,GAAG;AACL,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAAC,WAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAQD,EAAA,MAAM,KAAQ,GAAAC,aAAA;AAAA,IACZ,OACG;AAAA,MACC,GAAG,SAAA;AAAA,MACH,yBAAyB,IAAO,GAAA,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAA,GAAO,GAAG,UAAU,CAAA,EAAA;AAAA,KACjE,CAAA;AAAA,IACF,CAAC,IAAA,EAAM,UAAY,EAAA,QAAA,EAAU,SAAS;AAAA,GACxC;AACA,EACE,uBAAAC,cAAA,CAAC,SAAK,GAAG,cAAA,EAAgB,WAAW,EAAG,CAAA,SAAS,CAAG,EAAA,KAAA,EAChD,QACH,EAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuLayout = require('@vuu-ui/vuu-layout');
5
+ var vuuUtils = require('@vuu-ui/vuu-utils');
6
+ var ContextPanel = require('../context-panel/ContextPanel.js');
7
+ var React = require('react');
8
+
9
+ const useSimpleContentPane = ({
10
+ appHeader,
11
+ htmlAttributes
12
+ }) => React.useMemo(
13
+ () => /* @__PURE__ */ jsxRuntime.jsxs(
14
+ vuuLayout.Flexbox,
15
+ {
16
+ ...htmlAttributes,
17
+ style: {
18
+ ...htmlAttributes?.style,
19
+ flexDirection: "row"
20
+ },
21
+ children: [
22
+ /* @__PURE__ */ jsxRuntime.jsxs(
23
+ vuuLayout.Flexbox,
24
+ {
25
+ className: "vuuShell-content",
26
+ style: { flex: 1, flexDirection: "column" },
27
+ children: [
28
+ appHeader,
29
+ /* @__PURE__ */ jsxRuntime.jsx(
30
+ vuuLayout.LayoutContainer,
31
+ {
32
+ id: vuuUtils.VuuShellLocation.WorkspaceContainer,
33
+ style: { flex: 1 }
34
+ },
35
+ "main-content"
36
+ )
37
+ ]
38
+ }
39
+ ),
40
+ /* @__PURE__ */ jsxRuntime.jsx(ContextPanel.ContextPanel, { id: vuuUtils.VuuShellLocation.ContextPanel, overlay: true })
41
+ ]
42
+ }
43
+ ),
44
+ [appHeader, htmlAttributes]
45
+ );
46
+
47
+ exports.useSimpleContentPane = useSimpleContentPane;
48
+ //# sourceMappingURL=useSimpleContentPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSimpleContentPane.js","sources":["../../../../../packages/vuu-shell/src/shell-layout-templates/simple-content-pane/useSimpleContentPane.tsx"],"sourcesContent":["import { LayoutContainer, Flexbox } from \"@vuu-ui/vuu-layout\";\nimport { VuuShellLocation } from \"@vuu-ui/vuu-utils\";\nimport { ContextPanel } from \"../context-panel\";\nimport { ShellLayoutTemplateHook } from \"../useShellLayout\";\nimport { useMemo } from \"react\";\n\nexport const useSimpleContentPane: ShellLayoutTemplateHook = ({\n appHeader,\n htmlAttributes,\n}) =>\n useMemo(\n () => (\n <Flexbox\n {...htmlAttributes}\n style={{\n ...htmlAttributes?.style,\n flexDirection: \"row\",\n }}\n >\n <Flexbox\n className=\"vuuShell-content\"\n style={{ flex: 1, flexDirection: \"column\" }}\n >\n {appHeader}\n <LayoutContainer\n id={VuuShellLocation.WorkspaceContainer}\n key=\"main-content\"\n style={{ flex: 1 }}\n />\n </Flexbox>\n <ContextPanel id={VuuShellLocation.ContextPanel} overlay></ContextPanel>\n </Flexbox>\n ),\n [appHeader, htmlAttributes],\n );\n"],"names":["useMemo","jsxs","Flexbox","jsx","LayoutContainer","VuuShellLocation","ContextPanel"],"mappings":";;;;;;;;AAMO,MAAM,uBAAgD,CAAC;AAAA,EAC5D,SAAA;AAAA,EACA;AACF,CACE,KAAAA,aAAA;AAAA,EACE,sBACEC,eAAA;AAAA,IAACC,iBAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,KAAO,EAAA;AAAA,QACL,GAAG,cAAgB,EAAA,KAAA;AAAA,QACnB,aAAe,EAAA;AAAA,OACjB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,eAAA;AAAA,UAACC,iBAAA;AAAA,UAAA;AAAA,YACC,SAAU,EAAA,kBAAA;AAAA,YACV,KAAO,EAAA,EAAE,IAAM,EAAA,CAAA,EAAG,eAAe,QAAS,EAAA;AAAA,YAEzC,QAAA,EAAA;AAAA,cAAA,SAAA;AAAA,8BACDC,cAAA;AAAA,gBAACC,yBAAA;AAAA,gBAAA;AAAA,kBACC,IAAIC,yBAAiB,CAAA,kBAAA;AAAA,kBAErB,KAAA,EAAO,EAAE,IAAA,EAAM,CAAE;AAAA,iBAAA;AAAA,gBADb;AAAA;AAEN;AAAA;AAAA,SACF;AAAA,uCACCC,yBAAa,EAAA,EAAA,EAAA,EAAID,yBAAiB,CAAA,YAAA,EAAc,SAAO,IAAC,EAAA;AAAA;AAAA;AAAA,GAC3D;AAAA,EAEF,CAAC,WAAW,cAAc;AAC5B;;;;"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var useFullHeightLeftPanel = require('./full-height-left-panel/useFullHeightLeftPanel.js');
4
+ var useInlayLeftPanel = require('./inlay-left-panel/useInlayLeftPanel.js');
5
+ var useLeftMainTabs = require('./left-main-tabs/useLeftMainTabs.js');
6
+ var useSimpleContentPane = require('./simple-content-pane/useSimpleContentPane.js');
7
+
8
+ const LayoutHook = {
9
+ "full-height": useFullHeightLeftPanel.useFullHeightLeftPanel,
10
+ inlay: useInlayLeftPanel.useInlayLeftPanel,
11
+ "left-main-tabs": useLeftMainTabs.useLeftMainTabs,
12
+ "simple-content-pane": useSimpleContentPane.useSimpleContentPane
13
+ };
14
+ const useShellLayout = ({
15
+ layoutTemplateId = "simple-content-pane",
16
+ ...props
17
+ }) => {
18
+ const useLayoutHook = LayoutHook[layoutTemplateId];
19
+ return useLayoutHook(props);
20
+ };
21
+
22
+ exports.useShellLayout = useShellLayout;
23
+ //# sourceMappingURL=useShellLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useShellLayout.js","sources":["../../../../packages/vuu-shell/src/shell-layout-templates/useShellLayout.ts"],"sourcesContent":["import { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { useFullHeightLeftPanel } from \"./full-height-left-panel/useFullHeightLeftPanel\";\nimport { useInlayLeftPanel } from \"./inlay-left-panel/useInlayLeftPanel\";\nimport { useLeftMainTabs } from \"./left-main-tabs/useLeftMainTabs\";\nimport { useSimpleContentPane } from \"./simple-content-pane/useSimpleContentPane\";\nimport { SidePanelProps as ShellSidePanelProps } from \"./side-panel\";\n\nconst LayoutHook = {\n \"full-height\": useFullHeightLeftPanel,\n inlay: useInlayLeftPanel,\n \"left-main-tabs\": useLeftMainTabs,\n \"simple-content-pane\": useSimpleContentPane,\n};\n\nexport type LayoutTemplateId = keyof typeof LayoutHook;\n\nexport type ShellLayoutTemplateProps = Omit<\n ShellLayoutProps,\n \"layoutTemplateId\"\n>;\n\nexport type ShellToolbarProps = {\n children: ReactNode;\n position?: \"left\";\n width?: number;\n};\n\nexport type ShellLayoutTemplateHook = (\n props: ShellLayoutTemplateProps,\n) => ReactElement;\n\n/**\n * The Shell Layout is the outermost 'chrome' of the appliciation,\n * enclosing the main content area. It will be rendered by one of\n * two available templates, determined by the layoutTemplateId,\n */\nexport interface ShellLayoutProps {\n /**\n * App Header will be rendered in position determined by layout-template\n */\n appHeader?: ReactNode;\n\n /**\n * HTML attributes that will be applied to root div.\n */\n htmlAttributes?: HTMLAttributes<HTMLDivElement>;\n /**\n * identifier for shell layout template to be used. Default template\n * will be \"inlay\"\n */\n layoutTemplateId?: LayoutTemplateId;\n /**\n * If template renders SidePanel, these props will be provided\n */\n SidePanelProps?: ShellSidePanelProps;\n /**\n * If template renders Toolbar, these props will be provided\n */\n ToolbarProps?: ShellToolbarProps;\n}\n\n/**\n * This hook acts as a stub for the actual shell layout\n * template hooks. It will delegate to the appropriate shell\n * layout hook, based on the value of layoutTemplateId.\n */\nexport const useShellLayout = ({\n layoutTemplateId = \"simple-content-pane\",\n ...props\n}: ShellLayoutProps) => {\n const useLayoutHook = LayoutHook[layoutTemplateId];\n return useLayoutHook(props);\n};\n"],"names":["useFullHeightLeftPanel","useInlayLeftPanel","useLeftMainTabs","useSimpleContentPane"],"mappings":";;;;;;;AAOA,MAAM,UAAa,GAAA;AAAA,EACjB,aAAe,EAAAA,6CAAA;AAAA,EACf,KAAO,EAAAC,mCAAA;AAAA,EACP,gBAAkB,EAAAC,+BAAA;AAAA,EAClB,qBAAuB,EAAAC;AACzB,CAAA;AAsDO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,gBAAmB,GAAA,qBAAA;AAAA,EACnB,GAAG;AACL,CAAwB,KAAA;AACtB,EAAM,MAAA,aAAA,GAAgB,WAAW,gBAAgB,CAAA;AACjD,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var shellCss = ".vuuShell {\n background-color: var(\n --vuuShell-background,\n var(--salt-container-primary-background)\n );\n height: var(--vuuShell-height, 100vh);\n width: var(--vuuShell-width, 100vw);\n\n .left-main-tabs {\n --vuuOverflowContainer-width: 48px;\n }\n}\n\n.vuu-workspace-tabs {\n background: var(\n --vuuWorkspace-background,\n var(--salt-container-primary-background)\n );\n}\n\n.vuuShell-palette {\n --vuuView-border: none;\n --vuuView-margin: 0;\n}\n\n.vuuShell-warningPlaceholder {\n background-color: var(--salt-container-background-high);\n height: 100%;\n}\n\n/* until we reinstat5e the toolbar */\n.vuuToolbarProxy {\n background: var(--salt-container-primary-background);\n}\n\n.vuu-workspace-tabs > .vuuTabstrip > .vuuOverflowContainer-wrapContainer {\n background: var(--vuuShell-background, var(--salt-container-primary-background));\n}\n\n.vuu-workspace-tabs {\n --vuuTab-height: 28px;\n border: solid 1px var(--salt-separable-primary-borderColor);\n border-top: none !important;\n border-radius: 6px;\n height: 100%;\n padding: 36px 8px 8px 8px;\n position: relative;\n width: 100%;\n}\n\n.vuu-workspace-tabs > .vuuTabstrip {\n left: 0px;\n padding-bottom: 7px;\n position: absolute !important;\n right: 0px;\n top: 0;\n}\n\n.vuuShell-content {\n padding: var(--vuuShell-content-padding, 8px);\n}\n";
4
+
5
+ module.exports = shellCss;
6
+ //# sourceMappingURL=shell.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
package/cjs/shell.js ADDED
@@ -0,0 +1,137 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var styles = require('@salt-ds/styles');
5
+ var window = require('@salt-ds/window');
6
+ var vuuContextMenu = require('@vuu-ui/vuu-context-menu');
7
+ var vuuLayout = require('@vuu-ui/vuu-layout');
8
+ var vuuNotifications = require('@vuu-ui/vuu-notifications');
9
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
10
+ var vuuUtils = require('@vuu-ui/vuu-utils');
11
+ var React = require('react');
12
+ var AppHeader = require('./app-header/AppHeader.js');
13
+ var ApplicationProvider = require('./application-provider/ApplicationProvider.js');
14
+ var PersistenceProvider = require('./persistence-manager/PersistenceProvider.js');
15
+ var LocalPersistenceManager = require('./persistence-manager/LocalPersistenceManager.js');
16
+ require('./persistence-manager/StaticPersistenceManager.js');
17
+ require('clsx');
18
+ var useShellLayout = require('./shell-layout-templates/useShellLayout.js');
19
+ var UserSettingsPanel = require('./user-settings/UserSettingsPanel.js');
20
+ require('@salt-ds/core');
21
+ require('html-to-image');
22
+ var WorkspaceProvider = require('./workspace-management/WorkspaceProvider.js');
23
+ require('./feature-and-layout-provider/FeatureAndLayoutProvider.js');
24
+ var defaultWorkspaceJSON = require('./workspace-management/defaultWorkspaceJSON.js');
25
+ var useWorkspaceContextMenuItems = require('./workspace-management/useWorkspaceContextMenuItems.js');
26
+ var vuuDataReact = require('@vuu-ui/vuu-data-react');
27
+ var shell = require('./shell.css.js');
28
+
29
+ vuuUtils.registerComponent("ApplicationSettings", UserSettingsPanel.UserSettingsPanel, "view");
30
+ if (process.env.NODE_ENV === "production") {
31
+ if (typeof vuuLayout.StackLayout !== "function") {
32
+ console.warn(
33
+ "StackLayout module not loaded, will be unable to deserialize from layout JSON"
34
+ );
35
+ }
36
+ }
37
+ const { error } = vuuUtils.logger("Shell");
38
+ const defaultAppHeader = /* @__PURE__ */ jsxRuntime.jsx(AppHeader.AppHeader, {});
39
+ const getAppHeader = (shellLayoutProps) => shellLayoutProps?.appHeader ?? defaultAppHeader;
40
+ const defaultHTMLAttributes = {
41
+ className: "vuuShell"
42
+ };
43
+ const getHTMLAttributes = (props) => {
44
+ if (props?.htmlAttributes) {
45
+ return {
46
+ ...defaultHTMLAttributes,
47
+ ...props.htmlAttributes
48
+ };
49
+ } else {
50
+ return defaultHTMLAttributes;
51
+ }
52
+ };
53
+ const VuuApplication = ({
54
+ shellLayoutProps: ShellLayoutProps2,
55
+ children
56
+ }) => {
57
+ const targetWindow = window.useWindow();
58
+ styles.useComponentCssInjection({
59
+ testId: "vuu-shell",
60
+ css: shell,
61
+ window: targetWindow
62
+ });
63
+ const { workspaceJSON, saveApplicationLayout } = WorkspaceProvider.useWorkspace();
64
+ const { buildMenuOptions, handleMenuAction } = useWorkspaceContextMenuItems.useWorkspaceContextMenuItems();
65
+ const handleLayoutChange = React.useCallback(
66
+ (layout) => {
67
+ try {
68
+ saveApplicationLayout(layout);
69
+ } catch {
70
+ error?.("Failed to save layout");
71
+ }
72
+ },
73
+ [saveApplicationLayout]
74
+ );
75
+ const isLayoutLoading = workspaceJSON === defaultWorkspaceJSON.loadingJSON;
76
+ const initialLayout = useShellLayout.useShellLayout({
77
+ ...ShellLayoutProps2,
78
+ appHeader: getAppHeader(ShellLayoutProps2),
79
+ htmlAttributes: getHTMLAttributes(ShellLayoutProps2)
80
+ });
81
+ vuuDataReact.useLostConnection();
82
+ return isLayoutLoading ? null : /* @__PURE__ */ jsxRuntime.jsxs(
83
+ vuuContextMenu.ContextMenuProvider,
84
+ {
85
+ menuActionHandler: handleMenuAction,
86
+ menuBuilder: buildMenuOptions,
87
+ children: [
88
+ /* @__PURE__ */ jsxRuntime.jsx(
89
+ vuuLayout.LayoutProvider,
90
+ {
91
+ workspaceJSON,
92
+ onLayoutChange: handleLayoutChange,
93
+ children: initialLayout
94
+ }
95
+ ),
96
+ children
97
+ ]
98
+ }
99
+ );
100
+ };
101
+ const Shell = ({
102
+ logout,
103
+ user,
104
+ userSettingsSchema,
105
+ workspaceProps,
106
+ ...props
107
+ }) => {
108
+ const persistenceManager = PersistenceProvider.usePersistenceManager();
109
+ const localPersistenceManager = React.useMemo(() => {
110
+ if (persistenceManager) {
111
+ return void 0;
112
+ }
113
+ console.log(
114
+ `No Persistence Manager, configuration data will be persisted to Local Storage, key: 'vuu/${user.username}'`
115
+ );
116
+ return new LocalPersistenceManager.LocalPersistenceManager(`vuu/${user.username}`);
117
+ }, [persistenceManager, user.username]);
118
+ const shellProviders = /* @__PURE__ */ jsxRuntime.jsx(
119
+ ApplicationProvider.ApplicationProvider,
120
+ {
121
+ density: "high",
122
+ logout,
123
+ theme: "vuu-theme",
124
+ user,
125
+ userSettingsSchema,
126
+ children: /* @__PURE__ */ jsxRuntime.jsx(WorkspaceProvider.WorkspaceProvider, { ...workspaceProps, children: /* @__PURE__ */ jsxRuntime.jsx(vuuUiControls.ModalProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(vuuNotifications.NotificationsProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(VuuApplication, { ...props, user }) }) }) })
127
+ }
128
+ );
129
+ if (persistenceManager) {
130
+ return shellProviders;
131
+ } else {
132
+ return /* @__PURE__ */ jsxRuntime.jsx(PersistenceProvider.PersistenceProvider, { persistenceManager: localPersistenceManager, children: shellProviders });
133
+ }
134
+ };
135
+
136
+ exports.Shell = Shell;
137
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sources":["../../../packages/vuu-shell/src/shell.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ContextMenuProvider } from \"@vuu-ui/vuu-context-menu\";\nimport type { LayoutChangeHandler } from \"@vuu-ui/vuu-layout\";\nimport { LayoutProvider, StackLayout } from \"@vuu-ui/vuu-layout\";\nimport { NotificationsProvider } from \"@vuu-ui/vuu-notifications\";\nimport { ModalProvider } from \"@vuu-ui/vuu-ui-controls\";\nimport { VuuUser, logger, registerComponent } from \"@vuu-ui/vuu-utils\";\nimport {\n type HTMLAttributes,\n type ReactNode,\n useCallback,\n useMemo,\n} from \"react\";\nimport { AppHeader } from \"./app-header\";\nimport { ApplicationProvider } from \"./application-provider\";\nimport {\n IPersistenceManager,\n LocalPersistenceManager,\n PersistenceProvider,\n usePersistenceManager,\n} from \"./persistence-manager\";\nimport { ShellLayoutProps, useShellLayout } from \"./shell-layout-templates\";\nimport { SettingsSchema, UserSettingsPanel } from \"./user-settings\";\nimport {\n WorkspaceProps,\n WorkspaceProvider,\n useWorkspace,\n useWorkspaceContextMenuItems,\n} from \"./workspace-management\";\nimport { loadingJSON } from \"./workspace-management/defaultWorkspaceJSON\";\nimport { useLostConnection } from \"@vuu-ui/vuu-data-react\";\n\nimport shellCss from \"./shell.css\";\n\nregisterComponent(\"ApplicationSettings\", UserSettingsPanel, \"view\");\n\nif (process.env.NODE_ENV === \"production\") {\n // StackLayout is loaded just to force component registration, we know it will be\n // required when default layout is instantiated. This is only required in prod\n // to avoif tree shaking the Stack away. Causes a runtime issue in dev.\n if (typeof StackLayout !== \"function\") {\n console.warn(\n \"StackLayout module not loaded, will be unable to deserialize from layout JSON\",\n );\n }\n}\n\nconst { error } = logger(\"Shell\");\n\nexport type LayoutTemplateName = \"full-height\" | \"inlay\";\n\nexport interface ShellProps extends HTMLAttributes<HTMLDivElement> {\n shellLayoutProps?: ShellLayoutProps;\n userSettingsSchema?: SettingsSchema;\n workspaceProps?: WorkspaceProps;\n children?: ReactNode;\n logout?: () => void;\n saveUrl?: string;\n serverUrl?: string;\n user: VuuUser;\n}\n\nconst defaultAppHeader = <AppHeader />;\n\nconst getAppHeader = (shellLayoutProps?: ShellLayoutProps) =>\n shellLayoutProps?.appHeader ?? defaultAppHeader;\n\nconst defaultHTMLAttributes: HTMLAttributes<HTMLDivElement> = {\n className: \"vuuShell\",\n};\n\nconst getHTMLAttributes = (props?: ShellLayoutProps) => {\n if (props?.htmlAttributes) {\n return {\n ...defaultHTMLAttributes,\n ...props.htmlAttributes,\n };\n } else {\n return defaultHTMLAttributes;\n }\n};\n\nconst VuuApplication = ({\n shellLayoutProps: ShellLayoutProps,\n children,\n}: Omit<\n ShellProps,\n \"ContentLayoutProps\" | \"loginUrl\" | \"userSettingsSchema\" | \"workspaceProps\"\n>) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-shell\",\n css: shellCss,\n window: targetWindow,\n });\n\n const { workspaceJSON, saveApplicationLayout } = useWorkspace();\n\n const { buildMenuOptions, handleMenuAction } = useWorkspaceContextMenuItems();\n\n const handleLayoutChange = useCallback<LayoutChangeHandler>(\n (layout) => {\n try {\n saveApplicationLayout(layout);\n } catch {\n error?.(\"Failed to save layout\");\n }\n },\n [saveApplicationLayout],\n );\n\n const isLayoutLoading = workspaceJSON === loadingJSON;\n\n const initialLayout = useShellLayout({\n ...ShellLayoutProps,\n appHeader: getAppHeader(ShellLayoutProps),\n htmlAttributes: getHTMLAttributes(ShellLayoutProps),\n });\n\n useLostConnection();\n\n return isLayoutLoading ? null : (\n <ContextMenuProvider\n menuActionHandler={handleMenuAction}\n menuBuilder={buildMenuOptions}\n >\n <LayoutProvider\n workspaceJSON={workspaceJSON}\n onLayoutChange={handleLayoutChange}\n >\n {initialLayout}\n </LayoutProvider>\n {children}\n </ContextMenuProvider>\n );\n};\n\nexport const Shell = ({\n logout,\n user,\n userSettingsSchema,\n workspaceProps,\n ...props\n}: ShellProps) => {\n // If user has provided an implementation of IPersistenceManager\n // by wrapping higher level PersistenceProvider, use it, otw\n // default to LocalPersistenceManager\n const persistenceManager = usePersistenceManager();\n const localPersistenceManager = useMemo<\n IPersistenceManager | undefined\n >(() => {\n if (persistenceManager) {\n return undefined;\n }\n console.log(\n `No Persistence Manager, configuration data will be persisted to Local Storage, key: 'vuu/${user.username}'`,\n );\n return new LocalPersistenceManager(`vuu/${user.username}`);\n }, [persistenceManager, user.username]);\n\n // ApplicationProvider must go outside Dialog and Notification providers\n // ApplicationProvider injects the SaltProvider and this must be the root\n // SaltProvider.\n\n const shellProviders = (\n <ApplicationProvider\n density=\"high\"\n logout={logout}\n theme=\"vuu-theme\"\n user={user}\n userSettingsSchema={userSettingsSchema}\n >\n <WorkspaceProvider {...workspaceProps}>\n <ModalProvider>\n <NotificationsProvider>\n <VuuApplication {...props} user={user} />\n </NotificationsProvider>\n </ModalProvider>\n </WorkspaceProvider>\n </ApplicationProvider>\n );\n\n if (persistenceManager) {\n return shellProviders;\n } else {\n return (\n <PersistenceProvider persistenceManager={localPersistenceManager}>\n {shellProviders}\n </PersistenceProvider>\n );\n }\n};\n"],"names":["registerComponent","UserSettingsPanel","StackLayout","logger","AppHeader","ShellLayoutProps","useWindow","useComponentCssInjection","shellCss","useWorkspace","useWorkspaceContextMenuItems","useCallback","loadingJSON","useShellLayout","useLostConnection","jsxs","ContextMenuProvider","jsx","LayoutProvider","usePersistenceManager","useMemo","LocalPersistenceManager","ApplicationProvider","WorkspaceProvider","ModalProvider","NotificationsProvider","PersistenceProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCAA,0BAAkB,CAAA,qBAAA,EAAuBC,qCAAmB,MAAM,CAAA;AAElE,IAAI,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AAIzC,EAAI,IAAA,OAAOC,0BAAgB,UAAY,EAAA;AACrC,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN;AAAA,KACF;AAAA;AAEJ;AAEA,MAAM,EAAE,KAAA,EAAU,GAAAC,eAAA,CAAO,OAAO,CAAA;AAehC,MAAM,gBAAA,kCAAoBC,mBAAU,EAAA,EAAA,CAAA;AAEpC,MAAM,YAAe,GAAA,CAAC,gBACpB,KAAA,gBAAA,EAAkB,SAAa,IAAA,gBAAA;AAEjC,MAAM,qBAAwD,GAAA;AAAA,EAC5D,SAAW,EAAA;AACb,CAAA;AAEA,MAAM,iBAAA,GAAoB,CAAC,KAA6B,KAAA;AACtD,EAAA,IAAI,OAAO,cAAgB,EAAA;AACzB,IAAO,OAAA;AAAA,MACL,GAAG,qBAAA;AAAA,MACH,GAAG,KAAM,CAAA;AAAA,KACX;AAAA,GACK,MAAA;AACL,IAAO,OAAA,qBAAA;AAAA;AAEX,CAAA;AAEA,MAAM,iBAAiB,CAAC;AAAA,EACtB,gBAAkBC,EAAAA,iBAAAA;AAAA,EAClB;AACF,CAGM,KAAA;AACJ,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,WAAA;AAAA,IACR,GAAK,EAAAC,KAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,aAAA,EAAe,qBAAsB,EAAA,GAAIC,8BAAa,EAAA;AAE9D,EAAA,MAAM,EAAE,gBAAA,EAAkB,gBAAiB,EAAA,GAAIC,yDAA6B,EAAA;AAE5E,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,MAAW,KAAA;AACV,MAAI,IAAA;AACF,QAAA,qBAAA,CAAsB,MAAM,CAAA;AAAA,OACtB,CAAA,MAAA;AACN,QAAA,KAAA,GAAQ,uBAAuB,CAAA;AAAA;AACjC,KACF;AAAA,IACA,CAAC,qBAAqB;AAAA,GACxB;AAEA,EAAA,MAAM,kBAAkB,aAAkB,KAAAC,gCAAA;AAE1C,EAAA,MAAM,gBAAgBC,6BAAe,CAAA;AAAA,IACnC,GAAGR,iBAAAA;AAAA,IACH,SAAA,EAAW,aAAaA,iBAAgB,CAAA;AAAA,IACxC,cAAA,EAAgB,kBAAkBA,iBAAgB;AAAA,GACnD,CAAA;AAED,EAAkBS,8BAAA,EAAA;AAElB,EAAA,OAAO,kBAAkB,IACvB,mBAAAC,eAAA;AAAA,IAACC,kCAAA;AAAA,IAAA;AAAA,MACC,iBAAmB,EAAA,gBAAA;AAAA,MACnB,WAAa,EAAA,gBAAA;AAAA,MAEb,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAACC,wBAAA;AAAA,UAAA;AAAA,YACC,aAAA;AAAA,YACA,cAAgB,EAAA,kBAAA;AAAA,YAEf,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ,CAAA;AAEO,MAAM,QAAQ,CAAC;AAAA,EACpB,MAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,GAAG;AACL,CAAkB,KAAA;AAIhB,EAAA,MAAM,qBAAqBC,yCAAsB,EAAA;AACjD,EAAM,MAAA,uBAAA,GAA0BC,cAE9B,MAAM;AACN,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAO,OAAA,KAAA,CAAA;AAAA;AAET,IAAQ,OAAA,CAAA,GAAA;AAAA,MACN,CAAA,yFAAA,EAA4F,KAAK,QAAQ,CAAA,CAAA;AAAA,KAC3G;AACA,IAAA,OAAO,IAAIC,+CAAA,CAAwB,CAAO,IAAA,EAAA,IAAA,CAAK,QAAQ,CAAE,CAAA,CAAA;AAAA,GACxD,EAAA,CAAC,kBAAoB,EAAA,IAAA,CAAK,QAAQ,CAAC,CAAA;AAMtC,EAAA,MAAM,cACJ,mBAAAJ,cAAA;AAAA,IAACK,uCAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,MAAA;AAAA,MACR,MAAA;AAAA,MACA,KAAM,EAAA,WAAA;AAAA,MACN,IAAA;AAAA,MACA,kBAAA;AAAA,MAEA,QAAC,kBAAAL,cAAA,CAAAM,mCAAA,EAAA,EAAmB,GAAG,cAAA,EACrB,yCAACC,2BACC,EAAA,EAAA,QAAA,kBAAAP,cAAA,CAACQ,sCACC,EAAA,EAAA,QAAA,kBAAAR,cAAA,CAAC,kBAAgB,GAAG,KAAA,EAAO,IAAY,EAAA,CAAA,EACzC,GACF,CACF,EAAA;AAAA;AAAA,GACF;AAGF,EAAA,IAAI,kBAAoB,EAAA;AACtB,IAAO,OAAA,cAAA;AAAA,GACF,MAAA;AACL,IAAA,uBACGA,cAAA,CAAAS,uCAAA,EAAA,EAAoB,kBAAoB,EAAA,uBAAA,EACtC,QACH,EAAA,cAAA,EAAA,CAAA;AAAA;AAGN;;;;"}