@vuu-ui/vuu-shell 0.13.9 → 0.13.10

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 (225) 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 +85 -0
  6. package/cjs/app-header/AppHeader.js.map +1 -0
  7. package/cjs/app-status-bar/AppStatusBar.css.js +6 -0
  8. package/cjs/app-status-bar/AppStatusBar.css.js.map +1 -0
  9. package/cjs/app-status-bar/AppStatusBar.js +47 -0
  10. package/cjs/app-status-bar/AppStatusBar.js.map +1 -0
  11. package/cjs/application-provider/ApplicationContext.js +18 -0
  12. package/cjs/application-provider/ApplicationContext.js.map +1 -0
  13. package/cjs/application-provider/ApplicationProvider.js +104 -0
  14. package/cjs/application-provider/ApplicationProvider.js.map +1 -0
  15. package/cjs/connection-status/ConnectionRetryCountdown.js +36 -0
  16. package/cjs/connection-status/ConnectionRetryCountdown.js.map +1 -0
  17. package/cjs/connection-status/ConnectionStateDisplay.css.js +6 -0
  18. package/cjs/connection-status/ConnectionStateDisplay.css.js.map +1 -0
  19. package/cjs/connection-status/ConnectionStateDisplay.js +65 -0
  20. package/cjs/connection-status/ConnectionStateDisplay.js.map +1 -0
  21. package/cjs/connection-status/ConnectionStatusIndicator.css.js +6 -0
  22. package/cjs/connection-status/ConnectionStatusIndicator.css.js.map +1 -0
  23. package/cjs/connection-status/ConnectionStatusIndicator.js +81 -0
  24. package/cjs/connection-status/ConnectionStatusIndicator.js.map +1 -0
  25. package/cjs/feature/Feature.js +55 -0
  26. package/cjs/feature/Feature.js.map +1 -0
  27. package/cjs/feature/FeatureErrorBoundary.js +30 -0
  28. package/cjs/feature/FeatureErrorBoundary.js.map +1 -0
  29. package/cjs/feature/Loader.js +8 -0
  30. package/cjs/feature/Loader.js.map +1 -0
  31. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js +60 -0
  32. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +1 -0
  33. package/cjs/feature-list/FeatureList.css.js +6 -0
  34. package/cjs/feature-list/FeatureList.css.js.map +1 -0
  35. package/cjs/feature-list/FeatureList.js +97 -0
  36. package/cjs/feature-list/FeatureList.js.map +1 -0
  37. package/cjs/index.js +77 -2826
  38. package/cjs/index.js.map +1 -1
  39. package/cjs/left-nav/LeftNav.css.js +6 -0
  40. package/cjs/left-nav/LeftNav.css.js.map +1 -0
  41. package/cjs/left-nav/LeftNav.js +199 -0
  42. package/cjs/left-nav/LeftNav.js.map +1 -0
  43. package/cjs/login/LoginPanel.css.js +6 -0
  44. package/cjs/login/LoginPanel.css.js.map +1 -0
  45. package/cjs/login/LoginPanel.js +108 -0
  46. package/cjs/login/LoginPanel.js.map +1 -0
  47. package/cjs/login/VuuLogo.js +134 -0
  48. package/cjs/login/VuuLogo.js.map +1 -0
  49. package/cjs/login/login-utils.js +31 -0
  50. package/cjs/login/login-utils.js.map +1 -0
  51. package/cjs/persistence-manager/LocalPersistenceManager.js +197 -0
  52. package/cjs/persistence-manager/LocalPersistenceManager.js.map +1 -0
  53. package/cjs/persistence-manager/PersistenceProvider.js +21 -0
  54. package/cjs/persistence-manager/PersistenceProvider.js.map +1 -0
  55. package/cjs/persistence-manager/RemotePersistenceManager.js +175 -0
  56. package/cjs/persistence-manager/RemotePersistenceManager.js.map +1 -0
  57. package/cjs/persistence-manager/StaticPersistenceManager.js +71 -0
  58. package/cjs/persistence-manager/StaticPersistenceManager.js.map +1 -0
  59. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js +6 -0
  60. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js.map +1 -0
  61. package/cjs/shell-layout-templates/context-panel/ContextPanel.js +94 -0
  62. package/cjs/shell-layout-templates/context-panel/ContextPanel.js.map +1 -0
  63. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +53 -0
  64. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +1 -0
  65. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +83 -0
  66. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +1 -0
  67. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +46 -0
  68. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +1 -0
  69. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js +6 -0
  70. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js.map +1 -0
  71. package/cjs/shell-layout-templates/side-panel/SidePanel.js +36 -0
  72. package/cjs/shell-layout-templates/side-panel/SidePanel.js.map +1 -0
  73. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +48 -0
  74. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +1 -0
  75. package/cjs/shell-layout-templates/useShellLayout.js +23 -0
  76. package/cjs/shell-layout-templates/useShellLayout.js.map +1 -0
  77. package/cjs/shell.css.js +6 -0
  78. package/cjs/shell.css.js.map +1 -0
  79. package/cjs/shell.js +161 -0
  80. package/cjs/shell.js.map +1 -0
  81. package/cjs/theme-switch/ThemeSwitch.css.js +6 -0
  82. package/cjs/theme-switch/ThemeSwitch.css.js.map +1 -0
  83. package/cjs/theme-switch/ThemeSwitch.js +56 -0
  84. package/cjs/theme-switch/ThemeSwitch.js.map +1 -0
  85. package/cjs/user-settings/SettingsForm.css.js +6 -0
  86. package/cjs/user-settings/SettingsForm.css.js.map +1 -0
  87. package/cjs/user-settings/SettingsForm.js +168 -0
  88. package/cjs/user-settings/SettingsForm.js.map +1 -0
  89. package/cjs/user-settings/UserSettingsPanel.css.js +6 -0
  90. package/cjs/user-settings/UserSettingsPanel.css.js.map +1 -0
  91. package/cjs/user-settings/UserSettingsPanel.js +42 -0
  92. package/cjs/user-settings/UserSettingsPanel.js.map +1 -0
  93. package/cjs/workspace-management/LayoutList.css.js +6 -0
  94. package/cjs/workspace-management/LayoutList.css.js.map +1 -0
  95. package/cjs/workspace-management/LayoutList.js +116 -0
  96. package/cjs/workspace-management/LayoutList.js.map +1 -0
  97. package/cjs/workspace-management/LayoutTile.css.js +6 -0
  98. package/cjs/workspace-management/LayoutTile.css.js.map +1 -0
  99. package/cjs/workspace-management/LayoutTile.js +41 -0
  100. package/cjs/workspace-management/LayoutTile.js.map +1 -0
  101. package/cjs/workspace-management/SaveLayoutPanel.css.js +6 -0
  102. package/cjs/workspace-management/SaveLayoutPanel.css.js.map +1 -0
  103. package/cjs/workspace-management/SaveLayoutPanel.js +129 -0
  104. package/cjs/workspace-management/SaveLayoutPanel.js.map +1 -0
  105. package/cjs/workspace-management/WorkspaceProvider.js +264 -0
  106. package/cjs/workspace-management/WorkspaceProvider.js.map +1 -0
  107. package/cjs/workspace-management/defaultWorkspaceJSON.js +101 -0
  108. package/cjs/workspace-management/defaultWorkspaceJSON.js.map +1 -0
  109. package/cjs/workspace-management/screenshot-utils.js +25 -0
  110. package/cjs/workspace-management/screenshot-utils.js.map +1 -0
  111. package/cjs/workspace-management/useWorkspaceContextMenuItems.js +72 -0
  112. package/cjs/workspace-management/useWorkspaceContextMenuItems.js.map +1 -0
  113. package/esm/ShellContextProvider.js +23 -0
  114. package/esm/ShellContextProvider.js.map +1 -0
  115. package/esm/app-header/AppHeader.css.js +4 -0
  116. package/esm/app-header/AppHeader.css.js.map +1 -0
  117. package/esm/app-header/AppHeader.js +83 -0
  118. package/esm/app-header/AppHeader.js.map +1 -0
  119. package/esm/app-status-bar/AppStatusBar.css.js +4 -0
  120. package/esm/app-status-bar/AppStatusBar.css.js.map +1 -0
  121. package/esm/app-status-bar/AppStatusBar.js +45 -0
  122. package/esm/app-status-bar/AppStatusBar.js.map +1 -0
  123. package/esm/application-provider/ApplicationContext.js +16 -0
  124. package/esm/application-provider/ApplicationContext.js.map +1 -0
  125. package/esm/application-provider/ApplicationProvider.js +98 -0
  126. package/esm/application-provider/ApplicationProvider.js.map +1 -0
  127. package/esm/connection-status/ConnectionRetryCountdown.js +34 -0
  128. package/esm/connection-status/ConnectionRetryCountdown.js.map +1 -0
  129. package/esm/connection-status/ConnectionStateDisplay.css.js +4 -0
  130. package/esm/connection-status/ConnectionStateDisplay.css.js.map +1 -0
  131. package/esm/connection-status/ConnectionStateDisplay.js +63 -0
  132. package/esm/connection-status/ConnectionStateDisplay.js.map +1 -0
  133. package/esm/connection-status/ConnectionStatusIndicator.css.js +4 -0
  134. package/esm/connection-status/ConnectionStatusIndicator.css.js.map +1 -0
  135. package/esm/connection-status/ConnectionStatusIndicator.js +79 -0
  136. package/esm/connection-status/ConnectionStatusIndicator.js.map +1 -0
  137. package/esm/feature/Feature.js +53 -0
  138. package/esm/feature/Feature.js.map +1 -0
  139. package/esm/feature/FeatureErrorBoundary.js +28 -0
  140. package/esm/feature/FeatureErrorBoundary.js.map +1 -0
  141. package/esm/feature/Loader.js +6 -0
  142. package/esm/feature/Loader.js.map +1 -0
  143. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js +56 -0
  144. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +1 -0
  145. package/esm/feature-list/FeatureList.css.js +4 -0
  146. package/esm/feature-list/FeatureList.css.js.map +1 -0
  147. package/esm/feature-list/FeatureList.js +95 -0
  148. package/esm/feature-list/FeatureList.js.map +1 -0
  149. package/esm/index.js +27 -2780
  150. package/esm/index.js.map +1 -1
  151. package/esm/left-nav/LeftNav.css.js +4 -0
  152. package/esm/left-nav/LeftNav.css.js.map +1 -0
  153. package/esm/left-nav/LeftNav.js +197 -0
  154. package/esm/left-nav/LeftNav.js.map +1 -0
  155. package/esm/login/LoginPanel.css.js +4 -0
  156. package/esm/login/LoginPanel.css.js.map +1 -0
  157. package/esm/login/LoginPanel.js +106 -0
  158. package/esm/login/LoginPanel.js.map +1 -0
  159. package/esm/login/VuuLogo.js +132 -0
  160. package/esm/login/VuuLogo.js.map +1 -0
  161. package/esm/login/login-utils.js +26 -0
  162. package/esm/login/login-utils.js.map +1 -0
  163. package/esm/persistence-manager/LocalPersistenceManager.js +195 -0
  164. package/esm/persistence-manager/LocalPersistenceManager.js.map +1 -0
  165. package/esm/persistence-manager/PersistenceProvider.js +17 -0
  166. package/esm/persistence-manager/PersistenceProvider.js.map +1 -0
  167. package/esm/persistence-manager/RemotePersistenceManager.js +173 -0
  168. package/esm/persistence-manager/RemotePersistenceManager.js.map +1 -0
  169. package/esm/persistence-manager/StaticPersistenceManager.js +69 -0
  170. package/esm/persistence-manager/StaticPersistenceManager.js.map +1 -0
  171. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js +4 -0
  172. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js.map +1 -0
  173. package/esm/shell-layout-templates/context-panel/ContextPanel.js +92 -0
  174. package/esm/shell-layout-templates/context-panel/ContextPanel.js.map +1 -0
  175. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +51 -0
  176. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +1 -0
  177. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +81 -0
  178. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +1 -0
  179. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +44 -0
  180. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +1 -0
  181. package/esm/shell-layout-templates/side-panel/SidePanel.css.js +4 -0
  182. package/esm/shell-layout-templates/side-panel/SidePanel.css.js.map +1 -0
  183. package/esm/shell-layout-templates/side-panel/SidePanel.js +34 -0
  184. package/esm/shell-layout-templates/side-panel/SidePanel.js.map +1 -0
  185. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +46 -0
  186. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +1 -0
  187. package/esm/shell-layout-templates/useShellLayout.js +21 -0
  188. package/esm/shell-layout-templates/useShellLayout.js.map +1 -0
  189. package/esm/shell.css.js +4 -0
  190. package/esm/shell.css.js.map +1 -0
  191. package/esm/shell.js +159 -0
  192. package/esm/shell.js.map +1 -0
  193. package/esm/theme-switch/ThemeSwitch.css.js +4 -0
  194. package/esm/theme-switch/ThemeSwitch.css.js.map +1 -0
  195. package/esm/theme-switch/ThemeSwitch.js +54 -0
  196. package/esm/theme-switch/ThemeSwitch.js.map +1 -0
  197. package/esm/user-settings/SettingsForm.css.js +4 -0
  198. package/esm/user-settings/SettingsForm.css.js.map +1 -0
  199. package/esm/user-settings/SettingsForm.js +162 -0
  200. package/esm/user-settings/SettingsForm.js.map +1 -0
  201. package/esm/user-settings/UserSettingsPanel.css.js +4 -0
  202. package/esm/user-settings/UserSettingsPanel.css.js.map +1 -0
  203. package/esm/user-settings/UserSettingsPanel.js +40 -0
  204. package/esm/user-settings/UserSettingsPanel.js.map +1 -0
  205. package/esm/workspace-management/LayoutList.css.js +4 -0
  206. package/esm/workspace-management/LayoutList.css.js.map +1 -0
  207. package/esm/workspace-management/LayoutList.js +114 -0
  208. package/esm/workspace-management/LayoutList.js.map +1 -0
  209. package/esm/workspace-management/LayoutTile.css.js +4 -0
  210. package/esm/workspace-management/LayoutTile.css.js.map +1 -0
  211. package/esm/workspace-management/LayoutTile.js +39 -0
  212. package/esm/workspace-management/LayoutTile.js.map +1 -0
  213. package/esm/workspace-management/SaveLayoutPanel.css.js +4 -0
  214. package/esm/workspace-management/SaveLayoutPanel.css.js.map +1 -0
  215. package/esm/workspace-management/SaveLayoutPanel.js +127 -0
  216. package/esm/workspace-management/SaveLayoutPanel.js.map +1 -0
  217. package/esm/workspace-management/WorkspaceProvider.js +261 -0
  218. package/esm/workspace-management/WorkspaceProvider.js.map +1 -0
  219. package/esm/workspace-management/defaultWorkspaceJSON.js +95 -0
  220. package/esm/workspace-management/defaultWorkspaceJSON.js.map +1 -0
  221. package/esm/workspace-management/screenshot-utils.js +23 -0
  222. package/esm/workspace-management/screenshot-utils.js.map +1 -0
  223. package/esm/workspace-management/useWorkspaceContextMenuItems.js +70 -0
  224. package/esm/workspace-management/useWorkspaceContextMenuItems.js.map +1 -0
  225. package/package.json +13 -13
@@ -0,0 +1,261 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { isLayoutJSON, resolveJSONPath } from '@vuu-ui/vuu-layout';
3
+ import { useNotifications } from '@vuu-ui/vuu-popups';
4
+ import { logger, VuuShellLocation, WorkspaceContext } from '@vuu-ui/vuu-utils';
5
+ import { useState, useRef, useCallback, useEffect, useContext } from 'react';
6
+ import { usePersistenceManager } from '../persistence-manager/PersistenceProvider.js';
7
+ import '../persistence-manager/LocalPersistenceManager.js';
8
+ import '@vuu-ui/vuu-ui-controls';
9
+ import '@salt-ds/core';
10
+ import '@salt-ds/styles';
11
+ import '@salt-ds/window';
12
+ import 'clsx';
13
+ import '../persistence-manager/StaticPersistenceManager.js';
14
+ import { getWorkspaceWithLayoutJSON, loadingJSON } from './defaultWorkspaceJSON.js';
15
+
16
+ const { info } = logger("useLayoutManager");
17
+ const ensureLayoutHasTitle = (layout, layoutMetadata) => {
18
+ if (layout.props?.title !== void 0) {
19
+ return layout;
20
+ } else {
21
+ return {
22
+ ...layout,
23
+ props: {
24
+ ...layout.props,
25
+ title: layoutMetadata.name
26
+ }
27
+ };
28
+ }
29
+ };
30
+ const loadingApplicationJSON = {
31
+ workspaceJSON: loadingJSON
32
+ };
33
+ const WorkspaceProvider = ({
34
+ TabstripProps,
35
+ children,
36
+ layoutJSON,
37
+ activeLayoutIndex,
38
+ layoutPlaceholderJSON,
39
+ showTabs,
40
+ workspaceJSON: customWorkspaceJSON
41
+ }) => {
42
+ const [layoutMetadata, setLayoutMetadata] = useState([]);
43
+ const [, forceRefresh] = useState({});
44
+ const notify = useNotifications();
45
+ const persistenceManager = usePersistenceManager();
46
+ const applicationJSONRef = useRef(loadingApplicationJSON);
47
+ const setApplicationJSON = useCallback(
48
+ (applicationJSON, rerender = true) => {
49
+ applicationJSONRef.current = applicationJSON;
50
+ if (rerender) {
51
+ forceRefresh({});
52
+ }
53
+ },
54
+ []
55
+ );
56
+ const setWorkspaceJSON = useCallback(
57
+ (workspaceJSON, rerender = true) => {
58
+ setApplicationJSON(
59
+ {
60
+ ...applicationJSONRef.current,
61
+ workspaceJSON
62
+ },
63
+ rerender
64
+ );
65
+ },
66
+ [setApplicationJSON]
67
+ );
68
+ const setApplicationSettings = useCallback(
69
+ (settings) => {
70
+ setApplicationJSON(
71
+ {
72
+ ...applicationJSONRef.current,
73
+ settings: {
74
+ ...applicationJSONRef.current.settings,
75
+ ...settings
76
+ }
77
+ },
78
+ false
79
+ );
80
+ },
81
+ [setApplicationJSON]
82
+ );
83
+ useEffect(() => {
84
+ persistenceManager?.loadMetadata().then((metadata) => {
85
+ setLayoutMetadata(metadata);
86
+ }).catch((error) => {
87
+ notify({
88
+ type: "error",
89
+ header: "Failed to Load Layouts",
90
+ body: "Could not load list of available layouts"
91
+ });
92
+ console.error("Error occurred while retrieving metadata", error);
93
+ });
94
+ persistenceManager?.loadApplicationJSON().then((applicationJSON) => {
95
+ if (applicationJSON) {
96
+ info?.("applicationJSON loaded successfully");
97
+ setApplicationJSON(applicationJSON);
98
+ } else {
99
+ const workspaceJSON = getWorkspaceWithLayoutJSON(
100
+ customWorkspaceJSON,
101
+ layoutJSON,
102
+ activeLayoutIndex,
103
+ { TabstripProps, showTabs }
104
+ );
105
+ info?.(`applicationJSON not found, getting defaultWorkspaceJSON,
106
+ ${JSON.stringify(workspaceJSON, null, 2)}
107
+ `);
108
+ setApplicationJSON({
109
+ workspaceJSON
110
+ });
111
+ }
112
+ }).catch((error) => {
113
+ notify({
114
+ type: "error",
115
+ header: "Failed to Load Layout",
116
+ body: "Could not load your latest view"
117
+ });
118
+ console.error(
119
+ "Error occurred while retrieving application layout",
120
+ error
121
+ );
122
+ });
123
+ }, [
124
+ TabstripProps,
125
+ activeLayoutIndex,
126
+ customWorkspaceJSON,
127
+ layoutJSON,
128
+ notify,
129
+ persistenceManager,
130
+ setApplicationJSON,
131
+ showTabs
132
+ ]);
133
+ const saveApplicationLayout = useCallback(
134
+ (layout) => {
135
+ if (isLayoutJSON(layout)) {
136
+ setWorkspaceJSON(layout, false);
137
+ persistenceManager?.saveApplicationJSON(applicationJSONRef.current);
138
+ } else {
139
+ console.error("Tried to save invalid application layout", layout);
140
+ }
141
+ },
142
+ [persistenceManager, setWorkspaceJSON]
143
+ );
144
+ const saveLayout = useCallback(
145
+ (metadata) => {
146
+ let layoutToSave;
147
+ try {
148
+ const { workspaceJSON } = applicationJSONRef.current;
149
+ if (Array.isArray(workspaceJSON)) {
150
+ console.log("how do we identify the right thing to save");
151
+ } else {
152
+ layoutToSave = resolveJSONPath(
153
+ workspaceJSON,
154
+ `#${VuuShellLocation.Workspace}.ACTIVE_CHILD`
155
+ );
156
+ }
157
+ } catch (e) {
158
+ }
159
+ if (layoutToSave && isLayoutJSON(layoutToSave)) {
160
+ persistenceManager?.createLayout(metadata, ensureLayoutHasTitle(layoutToSave, metadata)).then((metadata2) => {
161
+ notify({
162
+ type: "success",
163
+ header: "Layout Saved Successfully",
164
+ body: `${metadata2.name} saved successfully`
165
+ });
166
+ setLayoutMetadata((prev) => [...prev, metadata2]);
167
+ }).catch((error) => {
168
+ notify({
169
+ type: "error",
170
+ header: "Failed to Save Layout",
171
+ body: `Failed to save layout ${metadata.name}`
172
+ });
173
+ console.error("Error occurred while saving layout", error);
174
+ });
175
+ } else {
176
+ console.error("Tried to save invalid layout", layoutToSave);
177
+ notify({
178
+ type: "error",
179
+ header: "Failed to Save Layout",
180
+ body: "Cannot save invalid layout"
181
+ });
182
+ }
183
+ },
184
+ [notify, persistenceManager]
185
+ );
186
+ const saveApplicationSettings = useCallback(
187
+ (settings, key) => {
188
+ const { settings: applicationSettings } = applicationJSONRef.current;
189
+ if (key) {
190
+ setApplicationSettings({
191
+ ...applicationSettings,
192
+ [key]: settings
193
+ });
194
+ } else {
195
+ setApplicationSettings(settings);
196
+ }
197
+ persistenceManager?.saveApplicationJSON(applicationJSONRef.current);
198
+ },
199
+ [persistenceManager, setApplicationSettings]
200
+ );
201
+ const getApplicationSettings = useCallback(
202
+ (key) => {
203
+ const { settings } = applicationJSONRef.current;
204
+ return key ? settings?.[key] : settings;
205
+ },
206
+ []
207
+ );
208
+ const loadLayoutById = useCallback(
209
+ (id) => {
210
+ persistenceManager?.loadLayout(id).then((layoutJson) => {
211
+ const { workspaceJSON: currentLayout } = applicationJSONRef.current;
212
+ if (Array.isArray(currentLayout)) {
213
+ console.log("how do we deal witha amulti layoput");
214
+ } else {
215
+ setWorkspaceJSON({
216
+ ...currentLayout,
217
+ children: (currentLayout.children || []).concat(layoutJson),
218
+ props: {
219
+ ...currentLayout.props,
220
+ active: currentLayout.children?.length ?? 0
221
+ }
222
+ });
223
+ }
224
+ }).catch((error) => {
225
+ notify({
226
+ type: "error",
227
+ header: "Failed to Load Layout",
228
+ body: "Failed to load the requested layout"
229
+ });
230
+ console.error("Error occurred while loading layout", error);
231
+ });
232
+ },
233
+ [notify, persistenceManager, setWorkspaceJSON]
234
+ );
235
+ return /* @__PURE__ */ jsx(
236
+ WorkspaceContext.Provider,
237
+ {
238
+ value: {
239
+ getApplicationSettings,
240
+ layoutMetadata,
241
+ layoutPlaceholderJSON,
242
+ saveLayout,
243
+ workspaceJSON: applicationJSONRef.current.workspaceJSON,
244
+ saveApplicationLayout,
245
+ saveApplicationSettings,
246
+ loadLayoutById
247
+ },
248
+ children
249
+ }
250
+ );
251
+ };
252
+ const useWorkspace = () => {
253
+ const { workspaceJSON = getWorkspaceWithLayoutJSON(), ...contextProps } = useContext(WorkspaceContext);
254
+ return {
255
+ ...contextProps,
256
+ workspaceJSON
257
+ };
258
+ };
259
+
260
+ export { WorkspaceProvider, useWorkspace };
261
+ //# sourceMappingURL=WorkspaceProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceProvider.js","sources":["../../src/workspace-management/WorkspaceProvider.tsx"],"sourcesContent":["import { isLayoutJSON, resolveJSONPath } from \"@vuu-ui/vuu-layout\";\nimport { useNotifications } from \"@vuu-ui/vuu-popups\";\nimport {\n LayoutMetadata,\n LayoutMetadataDto,\n VuuShellLocation,\n WorkspaceContext,\n logger,\n type ApplicationJSON,\n type ApplicationSetting,\n type ApplicationSettings,\n type LayoutJSON,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { usePersistenceManager } from \"../persistence-manager\";\nimport {\n getWorkspaceWithLayoutJSON,\n loadingJSON,\n type WorkspaceStackProps,\n} from \"./defaultWorkspaceJSON\";\n\nconst { info } = logger(\"useLayoutManager\");\n\nexport type WorkspaceProps = WorkspaceStackProps & {\n layoutPlaceholderJSON?: LayoutJSON;\n /**\n * layoutJSON defines the default layout to render on first load and until such time as\n * layout state has been persisted. After that, the persisted state will be rendered.\n */\n layoutJSON?: LayoutJSON | LayoutJSON[];\n activeLayoutIndex?: number;\n /**\n * The Vuu workspace is the container into which layouts are loaded. By default, it will be\n * a Tabbed Panel (Stack + Tabstrip), showing a tab per Layout.\n */\n workspaceJSON?: LayoutJSON | LayoutJSON[];\n};\n\nexport interface WorkspaceProviderProps extends WorkspaceProps {\n children: ReactElement | ReactElement[];\n\n /**\n * layoutPlaceholderJSON defines the layout to render when a new workspace layout is created.\n */\n layoutPlaceholderJSON?: LayoutJSON;\n}\n\nconst ensureLayoutHasTitle = (\n layout: LayoutJSON,\n layoutMetadata: LayoutMetadataDto,\n) => {\n if (layout.props?.title !== undefined) {\n return layout;\n } else {\n return {\n ...layout,\n props: {\n ...layout.props,\n title: layoutMetadata.name,\n },\n };\n }\n};\n\nconst loadingApplicationJSON: ApplicationJSON = {\n workspaceJSON: loadingJSON,\n};\n\n/**\n * LayoutManagementProvider supplies an API for loading and saving layout documents.\n * Initial layout is automatically loaded on startup. Because this hook is responsible\n * only for loading and saving layouts, it only triggers a render when content is loaded.\n *\n * Initial layout displays a loading state\n * User may supply a default layout. This will not be displayed until call has been made to\n * persistenceManager to retrieve stored layout state. If no stored state is returned, the\n * default layout provided by user will be set as current state (and hence rendered). If no\n * default layout has been provided by user, the sysem default will be used (simple PlaceHolder)\n * If saved layout state has been returned, that will be set as current state (and rendered)\n *\n */\nexport const WorkspaceProvider = ({\n TabstripProps,\n children,\n layoutJSON,\n activeLayoutIndex,\n layoutPlaceholderJSON,\n showTabs,\n workspaceJSON: customWorkspaceJSON,\n}: WorkspaceProviderProps) => {\n const [layoutMetadata, setLayoutMetadata] = useState<LayoutMetadata[]>([]);\n // TODO this default should probably be a loading state rather than the placeholder\n // It will be replaced as soon as the localStorage/remote layout is resolved\n const [, forceRefresh] = useState({});\n const notify = useNotifications();\n const persistenceManager = usePersistenceManager();\n const applicationJSONRef = useRef<ApplicationJSON>(loadingApplicationJSON);\n\n const setApplicationJSON = useCallback(\n (applicationJSON: ApplicationJSON, rerender = true) => {\n applicationJSONRef.current = applicationJSON;\n if (rerender) {\n forceRefresh({});\n }\n },\n [],\n );\n\n const setWorkspaceJSON = useCallback(\n (workspaceJSON: LayoutJSON, rerender = true) => {\n setApplicationJSON(\n {\n ...applicationJSONRef.current,\n workspaceJSON,\n },\n rerender,\n );\n },\n [setApplicationJSON],\n );\n\n const setApplicationSettings = useCallback(\n (settings: ApplicationSettings) => {\n setApplicationJSON(\n {\n ...applicationJSONRef.current,\n settings: {\n ...applicationJSONRef.current.settings,\n ...settings,\n },\n },\n false,\n );\n },\n [setApplicationJSON],\n );\n\n useEffect(() => {\n //TODO this does not need to be done ahead of time\n persistenceManager\n ?.loadMetadata()\n .then((metadata) => {\n setLayoutMetadata(metadata);\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Load Layouts\",\n body: \"Could not load list of available layouts\",\n });\n console.error(\"Error occurred while retrieving metadata\", error);\n });\n\n persistenceManager\n ?.loadApplicationJSON()\n .then((applicationJSON?: ApplicationJSON) => {\n if (applicationJSON) {\n info?.(\"applicationJSON loaded successfully\");\n setApplicationJSON(applicationJSON);\n } else {\n // No applicationJSON has been saved yet. Construct our\n // initial applicationJSON from user configuration and\n // default values.\n const workspaceJSON = getWorkspaceWithLayoutJSON(\n customWorkspaceJSON,\n layoutJSON,\n activeLayoutIndex,\n { TabstripProps, showTabs },\n );\n info?.(`applicationJSON not found, getting defaultWorkspaceJSON,\n ${JSON.stringify(workspaceJSON, null, 2)}\n `);\n setApplicationJSON({\n workspaceJSON,\n });\n }\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Load Layout\",\n body: \"Could not load your latest view\",\n });\n console.error(\n \"Error occurred while retrieving application layout\",\n error,\n );\n });\n }, [\n TabstripProps,\n activeLayoutIndex,\n customWorkspaceJSON,\n layoutJSON,\n notify,\n persistenceManager,\n setApplicationJSON,\n showTabs,\n ]);\n\n const saveApplicationLayout = useCallback(\n (layout: LayoutJSON) => {\n if (isLayoutJSON(layout)) {\n setWorkspaceJSON(layout, false);\n persistenceManager?.saveApplicationJSON(applicationJSONRef.current);\n } else {\n console.error(\"Tried to save invalid application layout\", layout);\n }\n },\n [persistenceManager, setWorkspaceJSON],\n );\n\n const saveLayout = useCallback(\n (metadata: LayoutMetadataDto) => {\n let layoutToSave: LayoutJSON | undefined;\n try {\n const { workspaceJSON } = applicationJSONRef.current;\n if (Array.isArray(workspaceJSON)) {\n console.log(\"how do we identify the right thing to save\");\n } else {\n layoutToSave = resolveJSONPath(\n workspaceJSON,\n `#${VuuShellLocation.Workspace}.ACTIVE_CHILD`,\n );\n }\n } catch (e) {\n // ignore, code below will handle\n }\n\n if (layoutToSave && isLayoutJSON(layoutToSave)) {\n persistenceManager\n ?.createLayout(metadata, ensureLayoutHasTitle(layoutToSave, metadata))\n .then((metadata) => {\n notify({\n type: \"success\",\n header: \"Layout Saved Successfully\",\n body: `${metadata.name} saved successfully`,\n });\n setLayoutMetadata((prev) => [...prev, metadata]);\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Save Layout\",\n body: `Failed to save layout ${metadata.name}`,\n });\n console.error(\"Error occurred while saving layout\", error);\n });\n } else {\n console.error(\"Tried to save invalid layout\", layoutToSave);\n notify({\n type: \"error\",\n header: \"Failed to Save Layout\",\n body: \"Cannot save invalid layout\",\n });\n }\n },\n [notify, persistenceManager],\n );\n\n const saveApplicationSettings = useCallback(\n (\n settings: ApplicationSettings | ApplicationSetting,\n key?: keyof ApplicationSettings,\n ) => {\n const { settings: applicationSettings } = applicationJSONRef.current;\n if (key) {\n setApplicationSettings({\n ...applicationSettings,\n [key]: settings,\n });\n } else {\n setApplicationSettings(settings as ApplicationSettings);\n }\n persistenceManager?.saveApplicationJSON(applicationJSONRef.current);\n },\n [persistenceManager, setApplicationSettings],\n );\n\n const getApplicationSettings = useCallback(\n (key?: keyof ApplicationSettings) => {\n const { settings } = applicationJSONRef.current;\n return key ? settings?.[key] : settings;\n },\n [],\n );\n\n const loadLayoutById = useCallback(\n (id: string) => {\n persistenceManager\n ?.loadLayout(id)\n .then((layoutJson) => {\n const { workspaceJSON: currentLayout } = applicationJSONRef.current;\n if (Array.isArray(currentLayout)) {\n console.log(\"how do we deal witha amulti layoput\");\n } else {\n setWorkspaceJSON({\n ...currentLayout,\n children: (currentLayout.children || []).concat(layoutJson),\n props: {\n ...currentLayout.props,\n active: currentLayout.children?.length ?? 0,\n },\n });\n }\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Load Layout\",\n body: \"Failed to load the requested layout\",\n });\n console.error(\"Error occurred while loading layout\", error);\n });\n },\n [notify, persistenceManager, setWorkspaceJSON],\n );\n\n return (\n <WorkspaceContext.Provider\n value={{\n getApplicationSettings,\n layoutMetadata,\n layoutPlaceholderJSON,\n saveLayout,\n workspaceJSON: applicationJSONRef.current.workspaceJSON,\n saveApplicationLayout,\n saveApplicationSettings,\n loadLayoutById,\n }}\n >\n {children}\n </WorkspaceContext.Provider>\n );\n};\n\nexport const useWorkspace = () => {\n // The default Application JSON will be served if no LayoutManagementProvider\n const { workspaceJSON = getWorkspaceWithLayoutJSON(), ...contextProps } =\n useContext(WorkspaceContext);\n\n return {\n ...contextProps,\n workspaceJSON,\n };\n};\n"],"names":["metadata"],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { VuuShellLocation } from '@vuu-ui/vuu-utils';
2
+
3
+ const warningLayout = {
4
+ type: "View",
5
+ props: {
6
+ style: { height: "calc(100% - 6px)" }
7
+ },
8
+ children: [
9
+ {
10
+ props: {
11
+ className: "vuuShell-warningPlaceholder"
12
+ },
13
+ type: "Placeholder"
14
+ }
15
+ ]
16
+ };
17
+ const loadingJSON = {
18
+ type: "Component",
19
+ id: "loading-main",
20
+ props: {}
21
+ };
22
+ const defaultWorkspaceJSON = {
23
+ type: "Stack",
24
+ id: VuuShellLocation.Workspace,
25
+ props: {
26
+ className: `${VuuShellLocation.Workspace}-tabs`,
27
+ TabstripProps: {
28
+ allowAddTab: true,
29
+ allowCloseTab: true,
30
+ allowRenameTab: true,
31
+ animateSelectionThumb: false,
32
+ "aria-label": "Workspace Tabs",
33
+ location: "workspace-tab",
34
+ variant: "primary"
35
+ },
36
+ preserve: true
37
+ }
38
+ };
39
+ const getStackWorkspaceJSON = (activeLayoutIndex) => ({
40
+ ...defaultWorkspaceJSON,
41
+ active: activeLayoutIndex ?? 0
42
+ });
43
+ const placeholderLayout = {
44
+ props: {
45
+ id: "tab1",
46
+ title: "Tab 1",
47
+ className: "vuuShell-Placeholder"
48
+ },
49
+ type: "Placeholder"
50
+ };
51
+ const getWorkspaceWithLayoutJSON = (customWorkspaceJSON, layoutJSON = placeholderLayout, activeLayoutIndex, stackProps) => {
52
+ const stackWorkspace = getStackWorkspaceJSON(activeLayoutIndex);
53
+ if (Array.isArray(customWorkspaceJSON)) {
54
+ const workspace = customWorkspaceJSON.find(
55
+ (layout) => layout.id === VuuShellLocation.Workspace
56
+ );
57
+ if (workspace) {
58
+ return customWorkspaceJSON.map((ws) => {
59
+ if (ws.id === VuuShellLocation.Workspace) {
60
+ return {
61
+ ...ws,
62
+ children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
63
+ };
64
+ } else {
65
+ return ws;
66
+ }
67
+ });
68
+ } else {
69
+ throw Error(
70
+ "Multiple workspaces have been provided but none has the workspace id"
71
+ );
72
+ }
73
+ } else if (customWorkspaceJSON) {
74
+ return {
75
+ ...customWorkspaceJSON,
76
+ children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
77
+ };
78
+ } else {
79
+ return {
80
+ ...stackWorkspace,
81
+ props: {
82
+ ...stackWorkspace.props,
83
+ ...stackProps,
84
+ TabstripProps: {
85
+ ...stackWorkspace.props?.TabstripProps,
86
+ ...stackProps?.TabstripProps
87
+ }
88
+ },
89
+ children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
90
+ };
91
+ }
92
+ };
93
+
94
+ export { defaultWorkspaceJSON, getStackWorkspaceJSON, getWorkspaceWithLayoutJSON, loadingJSON, warningLayout };
95
+ //# sourceMappingURL=defaultWorkspaceJSON.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultWorkspaceJSON.js","sources":["../../src/workspace-management/defaultWorkspaceJSON.ts"],"sourcesContent":["import { StackProps } from \"@vuu-ui/vuu-layout\";\nimport { LayoutJSON, VuuShellLocation } from \"@vuu-ui/vuu-utils\";\n\nexport type WorkspaceStackProps = Pick<\n StackProps,\n \"showTabs\" | \"TabstripProps\"\n>;\n\nexport const warningLayout: LayoutJSON = {\n type: \"View\",\n props: {\n style: { height: \"calc(100% - 6px)\" },\n },\n children: [\n {\n props: {\n className: \"vuuShell-warningPlaceholder\",\n },\n type: \"Placeholder\",\n },\n ],\n};\n\nexport const loadingJSON: Readonly<LayoutJSON> = {\n type: \"Component\",\n id: \"loading-main\",\n props: {},\n};\n\nexport const defaultWorkspaceJSON: LayoutJSON<\n StackProps & { preserve: boolean }\n> = {\n type: \"Stack\",\n id: VuuShellLocation.Workspace,\n props: {\n className: `${VuuShellLocation.Workspace}-tabs`,\n TabstripProps: {\n allowAddTab: true,\n allowCloseTab: true,\n allowRenameTab: true,\n animateSelectionThumb: false,\n \"aria-label\": \"Workspace Tabs\",\n location: \"workspace-tab\",\n variant: \"primary\",\n },\n preserve: true,\n },\n};\n\nexport const getStackWorkspaceJSON = (\n activeLayoutIndex?: number,\n): LayoutJSON => ({\n ...defaultWorkspaceJSON,\n active: activeLayoutIndex ?? 0,\n});\n\nconst placeholderLayout: LayoutJSON = {\n props: {\n id: \"tab1\",\n title: \"Tab 1\",\n className: \"vuuShell-Placeholder\",\n },\n type: \"Placeholder\",\n};\n\nexport const getWorkspaceWithLayoutJSON = (\n customWorkspaceJSON?: LayoutJSON | LayoutJSON[],\n layoutJSON: LayoutJSON | LayoutJSON[] = placeholderLayout,\n activeLayoutIndex?: number,\n stackProps?: WorkspaceStackProps,\n): LayoutJSON | LayoutJSON[] => {\n const stackWorkspace = getStackWorkspaceJSON(activeLayoutIndex);\n if (Array.isArray(customWorkspaceJSON)) {\n const workspace = customWorkspaceJSON.find(\n (layout) => layout.id === VuuShellLocation.Workspace,\n );\n if (workspace) {\n return customWorkspaceJSON.map((ws) => {\n if (ws.id === VuuShellLocation.Workspace) {\n return {\n ...ws,\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n } else {\n return ws;\n }\n });\n } else {\n throw Error(\n \"Multiple workspaces have been provided but none has the workspace id\",\n );\n }\n } else if (customWorkspaceJSON) {\n return {\n ...customWorkspaceJSON,\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n } else {\n return {\n ...stackWorkspace,\n props: {\n ...stackWorkspace.props,\n ...stackProps,\n TabstripProps: {\n ...stackWorkspace.props?.TabstripProps,\n ...stackProps?.TabstripProps,\n },\n },\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n }\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { toPng } from 'html-to-image';
2
+
3
+ const takeScreenshot = (node) => {
4
+ return new Promise((resolve, reject) => {
5
+ toPng(node, {
6
+ cacheBust: true
7
+ }).then((screenshot) => {
8
+ if (!screenshot) {
9
+ reject(new Error("No Screenshot available"));
10
+ }
11
+ resolve(screenshot);
12
+ }).catch((error) => {
13
+ console.error(
14
+ "the following error occurred while taking a screenshot of a DOMNode",
15
+ error
16
+ );
17
+ reject(new Error("Error taking screenshot"));
18
+ });
19
+ });
20
+ };
21
+
22
+ export { takeScreenshot };
23
+ //# sourceMappingURL=screenshot-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot-utils.js","sources":["../../src/workspace-management/screenshot-utils.ts"],"sourcesContent":["import { toPng } from \"html-to-image\";\n\n/**\n * Takes a screenshot of the given node and returns the base64 encoded image url\n * @param node HTMLElement to take screenshot of\n * @returns Base64 encoded image url\n */\nexport const takeScreenshot = (node: HTMLElement): Promise<string> => {\n return new Promise((resolve, reject) => {\n toPng(node, {\n cacheBust: true /*,\n filter: (child) =>\n // remove content of table rows\n child.nodeType === Node.TEXT_NODE ||\n child.getAttribute(\"role\") !== \"row\",*/,\n })\n .then((screenshot) => {\n if (!screenshot) {\n reject(new Error(\"No Screenshot available\"));\n }\n resolve(screenshot);\n })\n .catch((error: Error) => {\n console.error(\n \"the following error occurred while taking a screenshot of a DOMNode\",\n error\n );\n reject(new Error(\"Error taking screenshot\"));\n });\n });\n};\n"],"names":[],"mappings":";;AAOa,MAAA,cAAA,GAAiB,CAAC,IAAuC,KAAA;AACpE,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAA,KAAA,CAAM,IAAM,EAAA;AAAA,MACV,SAAW,EAAA;AAAA,KAKZ,CAAA,CACE,IAAK,CAAA,CAAC,UAAe,KAAA;AACpB,MAAA,IAAI,CAAC,UAAY,EAAA;AACf,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA;AAAA;AAE7C,MAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,KACnB,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,qEAAA;AAAA,QACA;AAAA,OACF;AACA,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA;AAAA,KAC5C,CAAA;AAAA,GACJ,CAAA;AACH;;;;"}
@@ -0,0 +1,70 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useDialogContext } from '@vuu-ui/vuu-popups';
3
+ import { useCallback, useMemo } from 'react';
4
+ import { SaveLayoutPanel } from './SaveLayoutPanel.js';
5
+ import { useWorkspace } from './WorkspaceProvider.js';
6
+
7
+ const useWorkspaceContextMenuItems = () => {
8
+ const { saveLayout } = useWorkspace();
9
+ const { showDialog, closeDialog } = useDialogContext();
10
+ const handleCloseDialog = useCallback(() => {
11
+ closeDialog();
12
+ }, [closeDialog]);
13
+ const handleSave = useCallback(
14
+ (layoutMetadata) => {
15
+ saveLayout(layoutMetadata);
16
+ closeDialog();
17
+ },
18
+ [saveLayout, closeDialog]
19
+ );
20
+ const [buildMenuOptions, handleMenuAction] = useMemo(() => {
21
+ return [
22
+ (location, options) => {
23
+ const locations = location.split(" ");
24
+ const menuDescriptors = [];
25
+ if (locations.includes("workspace-tab")) {
26
+ menuDescriptors.push(
27
+ {
28
+ label: "Save Layout",
29
+ id: "save-layout",
30
+ options
31
+ },
32
+ {
33
+ label: "Layout Settings",
34
+ id: "layout-settings",
35
+ options
36
+ }
37
+ );
38
+ }
39
+ return menuDescriptors;
40
+ },
41
+ (menuItemId, options) => {
42
+ if (menuItemId === "save-layout") {
43
+ showDialog(
44
+ /* @__PURE__ */ jsx(
45
+ SaveLayoutPanel,
46
+ {
47
+ onCancel: handleCloseDialog,
48
+ onSave: handleSave,
49
+ componentId: options?.controlledComponentId,
50
+ defaultTitle: options?.controlledComponentTitle
51
+ }
52
+ ),
53
+ "Save Layout",
54
+ [],
55
+ true
56
+ );
57
+ return true;
58
+ }
59
+ return false;
60
+ }
61
+ ];
62
+ }, [handleCloseDialog, handleSave, showDialog]);
63
+ return {
64
+ buildMenuOptions,
65
+ handleMenuAction
66
+ };
67
+ };
68
+
69
+ export { useWorkspaceContextMenuItems };
70
+ //# sourceMappingURL=useWorkspaceContextMenuItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWorkspaceContextMenuItems.js","sources":["../../src/workspace-management/useWorkspaceContextMenuItems.tsx"],"sourcesContent":["import { useDialogContext } from \"@vuu-ui/vuu-popups\";\nimport { LayoutMetadataDto } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo } from \"react\";\nimport { SaveLayoutPanel } from \"./SaveLayoutPanel\";\nimport { useWorkspace } from \"./WorkspaceProvider\";\nimport {\n ContextMenuItemDescriptor,\n MenuActionHandler,\n MenuBuilder,\n} from \"@vuu-ui/vuu-context-menu\";\nimport { TabContextMenuOptions } from \"@vuu-ui/vuu-ui-controls\";\n\nexport const useWorkspaceContextMenuItems = () => {\n const { saveLayout } = useWorkspace();\n\n const { showDialog, closeDialog } = useDialogContext();\n\n const handleCloseDialog = useCallback(() => {\n closeDialog();\n }, [closeDialog]);\n\n const handleSave = useCallback(\n (layoutMetadata: LayoutMetadataDto) => {\n saveLayout(layoutMetadata);\n closeDialog();\n },\n [saveLayout, closeDialog],\n );\n\n const [buildMenuOptions, handleMenuAction] = useMemo<\n [MenuBuilder, MenuActionHandler]\n >(() => {\n return [\n (location, options) => {\n const locations = location.split(\" \");\n const menuDescriptors: ContextMenuItemDescriptor[] = [];\n if (locations.includes(\"workspace-tab\")) {\n menuDescriptors.push(\n {\n label: \"Save Layout\",\n id: \"save-layout\",\n options,\n },\n {\n label: \"Layout Settings\",\n id: \"layout-settings\",\n options,\n },\n );\n }\n return menuDescriptors;\n },\n (menuItemId, options) => {\n if (menuItemId === \"save-layout\") {\n showDialog(\n <SaveLayoutPanel\n onCancel={handleCloseDialog}\n onSave={handleSave}\n componentId={\n (options as TabContextMenuOptions)?.controlledComponentId\n }\n defaultTitle={\n (options as TabContextMenuOptions)?.controlledComponentTitle\n }\n />,\n \"Save Layout\",\n [],\n true,\n );\n return true;\n }\n return false;\n },\n ];\n }, [handleCloseDialog, handleSave, showDialog]);\n\n return {\n buildMenuOptions,\n handleMenuAction,\n };\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,+BAA+B,MAAM;AAChD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,YAAa,EAAA;AAEpC,EAAA,MAAM,EAAE,UAAA,EAAY,WAAY,EAAA,GAAI,gBAAiB,EAAA;AAErD,EAAM,MAAA,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAY,WAAA,EAAA;AAAA,GACd,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,CAAC,cAAsC,KAAA;AACrC,MAAA,UAAA,CAAW,cAAc,CAAA;AACzB,MAAY,WAAA,EAAA;AAAA,KACd;AAAA,IACA,CAAC,YAAY,WAAW;AAAA,GAC1B;AAEA,EAAA,MAAM,CAAC,gBAAA,EAAkB,gBAAgB,CAAA,GAAI,QAE3C,MAAM;AACN,IAAO,OAAA;AAAA,MACL,CAAC,UAAU,OAAY,KAAA;AACrB,QAAM,MAAA,SAAA,GAAY,QAAS,CAAA,KAAA,CAAM,GAAG,CAAA;AACpC,QAAA,MAAM,kBAA+C,EAAC;AACtD,QAAI,IAAA,SAAA,CAAU,QAAS,CAAA,eAAe,CAAG,EAAA;AACvC,UAAgB,eAAA,CAAA,IAAA;AAAA,YACd;AAAA,cACE,KAAO,EAAA,aAAA;AAAA,cACP,EAAI,EAAA,aAAA;AAAA,cACJ;AAAA,aACF;AAAA,YACA;AAAA,cACE,KAAO,EAAA,iBAAA;AAAA,cACP,EAAI,EAAA,iBAAA;AAAA,cACJ;AAAA;AACF,WACF;AAAA;AAEF,QAAO,OAAA,eAAA;AAAA,OACT;AAAA,MACA,CAAC,YAAY,OAAY,KAAA;AACvB,QAAA,IAAI,eAAe,aAAe,EAAA;AAChC,UAAA,UAAA;AAAA,4BACE,GAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,QAAU,EAAA,iBAAA;AAAA,gBACV,MAAQ,EAAA,UAAA;AAAA,gBACR,aACG,OAAmC,EAAA,qBAAA;AAAA,gBAEtC,cACG,OAAmC,EAAA;AAAA;AAAA,aAExC;AAAA,YACA,aAAA;AAAA,YACA,EAAC;AAAA,YACD;AAAA,WACF;AACA,UAAO,OAAA,IAAA;AAAA;AAET,QAAO,OAAA,KAAA;AAAA;AACT,KACF;AAAA,GACC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,UAAU,CAAC,CAAA;AAE9C,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
package/package.json CHANGED
@@ -1,26 +1,26 @@
1
1
  {
2
- "version": "0.13.9",
2
+ "version": "0.13.10",
3
3
  "description": "VUU UI Shell",
4
4
  "author": "heswell",
5
5
  "license": "Apache-2.0",
6
6
  "devDependencies": {
7
- "@vuu-ui/vuu-data-types": "0.13.9",
8
- "@vuu-ui/vuu-protocol-types": "0.13.9",
9
- "@vuu-ui/vuu-table-types": "0.13.9"
7
+ "@vuu-ui/vuu-data-types": "0.13.10",
8
+ "@vuu-ui/vuu-protocol-types": "0.13.10",
9
+ "@vuu-ui/vuu-table-types": "0.13.10"
10
10
  },
11
11
  "dependencies": {
12
12
  "@salt-ds/core": "1.43.0",
13
13
  "@salt-ds/styles": "0.2.1",
14
14
  "@salt-ds/window": "0.1.1",
15
- "@vuu-ui/vuu-context-menu": "0.13.9",
16
- "@vuu-ui/vuu-data-react": "0.13.9",
17
- "@vuu-ui/vuu-data-remote": "0.13.9",
18
- "@vuu-ui/vuu-icons": "0.13.9",
19
- "@vuu-ui/vuu-layout": "0.13.9",
20
- "@vuu-ui/vuu-popups": "0.13.9",
21
- "@vuu-ui/vuu-table": "0.13.9",
22
- "@vuu-ui/vuu-ui-controls": "0.13.9",
23
- "@vuu-ui/vuu-utils": "0.13.9",
15
+ "@vuu-ui/vuu-context-menu": "0.13.10",
16
+ "@vuu-ui/vuu-data-react": "0.13.10",
17
+ "@vuu-ui/vuu-data-remote": "0.13.10",
18
+ "@vuu-ui/vuu-icons": "0.13.10",
19
+ "@vuu-ui/vuu-layout": "0.13.10",
20
+ "@vuu-ui/vuu-popups": "0.13.10",
21
+ "@vuu-ui/vuu-table": "0.13.10",
22
+ "@vuu-ui/vuu-ui-controls": "0.13.10",
23
+ "@vuu-ui/vuu-utils": "0.13.10",
24
24
  "html-to-image": "^1.11.11"
25
25
  },
26
26
  "peerDependencies": {