@vuu-ui/vuu-shell 2.1.17 → 2.1.19-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/package.json +16 -18
  2. package/types/feature/FeatureErrorBoundary.d.ts +1 -1
  3. package/types/workspace-management/WorkspaceProvider.d.ts +5 -5
  4. package/cjs/ShellContextProvider.js +0 -25
  5. package/cjs/ShellContextProvider.js.map +0 -1
  6. package/cjs/app-header/AppHeader.css.js +0 -6
  7. package/cjs/app-header/AppHeader.css.js.map +0 -1
  8. package/cjs/app-header/AppHeader.js +0 -118
  9. package/cjs/app-header/AppHeader.js.map +0 -1
  10. package/cjs/application-provider/ApplicationContext.js +0 -17
  11. package/cjs/application-provider/ApplicationContext.js.map +0 -1
  12. package/cjs/application-provider/ApplicationProvider.js +0 -102
  13. package/cjs/application-provider/ApplicationProvider.js.map +0 -1
  14. package/cjs/feature/Feature.js +0 -54
  15. package/cjs/feature/Feature.js.map +0 -1
  16. package/cjs/feature/FeatureErrorBoundary.js +0 -30
  17. package/cjs/feature/FeatureErrorBoundary.js.map +0 -1
  18. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js +0 -60
  19. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +0 -1
  20. package/cjs/feature-list/FeatureList.css.js +0 -6
  21. package/cjs/feature-list/FeatureList.css.js.map +0 -1
  22. package/cjs/feature-list/FeatureList.js +0 -109
  23. package/cjs/feature-list/FeatureList.js.map +0 -1
  24. package/cjs/index.js +0 -71
  25. package/cjs/index.js.map +0 -1
  26. package/cjs/left-nav/LeftNav.css.js +0 -6
  27. package/cjs/left-nav/LeftNav.css.js.map +0 -1
  28. package/cjs/left-nav/LeftNav.js +0 -202
  29. package/cjs/left-nav/LeftNav.js.map +0 -1
  30. package/cjs/login/LoginPanel.css.js +0 -6
  31. package/cjs/login/LoginPanel.css.js.map +0 -1
  32. package/cjs/login/LoginPanel.js +0 -110
  33. package/cjs/login/LoginPanel.js.map +0 -1
  34. package/cjs/login/VuuLogo.js +0 -134
  35. package/cjs/login/VuuLogo.js.map +0 -1
  36. package/cjs/persistence-manager/LocalPersistenceManager.js +0 -193
  37. package/cjs/persistence-manager/LocalPersistenceManager.js.map +0 -1
  38. package/cjs/persistence-manager/PersistenceProvider.js +0 -21
  39. package/cjs/persistence-manager/PersistenceProvider.js.map +0 -1
  40. package/cjs/persistence-manager/RemotePersistenceManager.js +0 -165
  41. package/cjs/persistence-manager/RemotePersistenceManager.js.map +0 -1
  42. package/cjs/persistence-manager/StaticPersistenceManager.js +0 -73
  43. package/cjs/persistence-manager/StaticPersistenceManager.js.map +0 -1
  44. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js +0 -6
  45. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js.map +0 -1
  46. package/cjs/shell-layout-templates/context-panel/ContextPanel.js +0 -100
  47. package/cjs/shell-layout-templates/context-panel/ContextPanel.js.map +0 -1
  48. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +0 -51
  49. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +0 -1
  50. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +0 -83
  51. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +0 -1
  52. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +0 -46
  53. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +0 -1
  54. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js +0 -6
  55. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js.map +0 -1
  56. package/cjs/shell-layout-templates/side-panel/SidePanel.js +0 -36
  57. package/cjs/shell-layout-templates/side-panel/SidePanel.js.map +0 -1
  58. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +0 -48
  59. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +0 -1
  60. package/cjs/shell-layout-templates/useShellLayout.js +0 -23
  61. package/cjs/shell-layout-templates/useShellLayout.js.map +0 -1
  62. package/cjs/shell.css.js +0 -6
  63. package/cjs/shell.css.js.map +0 -1
  64. package/cjs/shell.js +0 -137
  65. package/cjs/shell.js.map +0 -1
  66. package/cjs/theme-switch/ThemeSwitch.css.js +0 -6
  67. package/cjs/theme-switch/ThemeSwitch.css.js.map +0 -1
  68. package/cjs/theme-switch/ThemeSwitch.js +0 -56
  69. package/cjs/theme-switch/ThemeSwitch.js.map +0 -1
  70. package/cjs/user-settings/SettingsForm.css.js +0 -6
  71. package/cjs/user-settings/SettingsForm.css.js.map +0 -1
  72. package/cjs/user-settings/SettingsForm.js +0 -168
  73. package/cjs/user-settings/SettingsForm.js.map +0 -1
  74. package/cjs/user-settings/UserSettingsPanel.css.js +0 -6
  75. package/cjs/user-settings/UserSettingsPanel.css.js.map +0 -1
  76. package/cjs/user-settings/UserSettingsPanel.js +0 -42
  77. package/cjs/user-settings/UserSettingsPanel.js.map +0 -1
  78. package/cjs/workspace-management/LayoutList.css.js +0 -6
  79. package/cjs/workspace-management/LayoutList.css.js.map +0 -1
  80. package/cjs/workspace-management/LayoutList.js +0 -116
  81. package/cjs/workspace-management/LayoutList.js.map +0 -1
  82. package/cjs/workspace-management/LayoutTile.css.js +0 -6
  83. package/cjs/workspace-management/LayoutTile.css.js.map +0 -1
  84. package/cjs/workspace-management/LayoutTile.js +0 -41
  85. package/cjs/workspace-management/LayoutTile.js.map +0 -1
  86. package/cjs/workspace-management/SaveLayoutPanel.css.js +0 -6
  87. package/cjs/workspace-management/SaveLayoutPanel.css.js.map +0 -1
  88. package/cjs/workspace-management/SaveLayoutPanel.js +0 -128
  89. package/cjs/workspace-management/SaveLayoutPanel.js.map +0 -1
  90. package/cjs/workspace-management/WorkspaceProvider.js +0 -265
  91. package/cjs/workspace-management/WorkspaceProvider.js.map +0 -1
  92. package/cjs/workspace-management/defaultWorkspaceJSON.js +0 -101
  93. package/cjs/workspace-management/defaultWorkspaceJSON.js.map +0 -1
  94. package/cjs/workspace-management/screenshot-utils.js +0 -25
  95. package/cjs/workspace-management/screenshot-utils.js.map +0 -1
  96. package/cjs/workspace-management/useWorkspaceContextMenuItems.js +0 -72
  97. package/cjs/workspace-management/useWorkspaceContextMenuItems.js.map +0 -1
  98. package/esm/ShellContextProvider.js +0 -23
  99. package/esm/ShellContextProvider.js.map +0 -1
  100. package/esm/app-header/AppHeader.css.js +0 -4
  101. package/esm/app-header/AppHeader.css.js.map +0 -1
  102. package/esm/app-header/AppHeader.js +0 -116
  103. package/esm/app-header/AppHeader.js.map +0 -1
  104. package/esm/application-provider/ApplicationContext.js +0 -15
  105. package/esm/application-provider/ApplicationContext.js.map +0 -1
  106. package/esm/application-provider/ApplicationProvider.js +0 -96
  107. package/esm/application-provider/ApplicationProvider.js.map +0 -1
  108. package/esm/feature/Feature.js +0 -52
  109. package/esm/feature/Feature.js.map +0 -1
  110. package/esm/feature/FeatureErrorBoundary.js +0 -28
  111. package/esm/feature/FeatureErrorBoundary.js.map +0 -1
  112. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js +0 -56
  113. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +0 -1
  114. package/esm/feature-list/FeatureList.css.js +0 -4
  115. package/esm/feature-list/FeatureList.css.js.map +0 -1
  116. package/esm/feature-list/FeatureList.js +0 -107
  117. package/esm/feature-list/FeatureList.js.map +0 -1
  118. package/esm/index.js +0 -25
  119. package/esm/index.js.map +0 -1
  120. package/esm/left-nav/LeftNav.css.js +0 -4
  121. package/esm/left-nav/LeftNav.css.js.map +0 -1
  122. package/esm/left-nav/LeftNav.js +0 -200
  123. package/esm/left-nav/LeftNav.js.map +0 -1
  124. package/esm/login/LoginPanel.css.js +0 -4
  125. package/esm/login/LoginPanel.css.js.map +0 -1
  126. package/esm/login/LoginPanel.js +0 -108
  127. package/esm/login/LoginPanel.js.map +0 -1
  128. package/esm/login/VuuLogo.js +0 -132
  129. package/esm/login/VuuLogo.js.map +0 -1
  130. package/esm/persistence-manager/LocalPersistenceManager.js +0 -191
  131. package/esm/persistence-manager/LocalPersistenceManager.js.map +0 -1
  132. package/esm/persistence-manager/PersistenceProvider.js +0 -17
  133. package/esm/persistence-manager/PersistenceProvider.js.map +0 -1
  134. package/esm/persistence-manager/RemotePersistenceManager.js +0 -163
  135. package/esm/persistence-manager/RemotePersistenceManager.js.map +0 -1
  136. package/esm/persistence-manager/StaticPersistenceManager.js +0 -71
  137. package/esm/persistence-manager/StaticPersistenceManager.js.map +0 -1
  138. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js +0 -4
  139. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js.map +0 -1
  140. package/esm/shell-layout-templates/context-panel/ContextPanel.js +0 -98
  141. package/esm/shell-layout-templates/context-panel/ContextPanel.js.map +0 -1
  142. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +0 -49
  143. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +0 -1
  144. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +0 -81
  145. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +0 -1
  146. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +0 -44
  147. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +0 -1
  148. package/esm/shell-layout-templates/side-panel/SidePanel.css.js +0 -4
  149. package/esm/shell-layout-templates/side-panel/SidePanel.css.js.map +0 -1
  150. package/esm/shell-layout-templates/side-panel/SidePanel.js +0 -34
  151. package/esm/shell-layout-templates/side-panel/SidePanel.js.map +0 -1
  152. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +0 -46
  153. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +0 -1
  154. package/esm/shell-layout-templates/useShellLayout.js +0 -21
  155. package/esm/shell-layout-templates/useShellLayout.js.map +0 -1
  156. package/esm/shell.css.js +0 -4
  157. package/esm/shell.css.js.map +0 -1
  158. package/esm/shell.js +0 -135
  159. package/esm/shell.js.map +0 -1
  160. package/esm/theme-switch/ThemeSwitch.css.js +0 -4
  161. package/esm/theme-switch/ThemeSwitch.css.js.map +0 -1
  162. package/esm/theme-switch/ThemeSwitch.js +0 -54
  163. package/esm/theme-switch/ThemeSwitch.js.map +0 -1
  164. package/esm/user-settings/SettingsForm.css.js +0 -4
  165. package/esm/user-settings/SettingsForm.css.js.map +0 -1
  166. package/esm/user-settings/SettingsForm.js +0 -162
  167. package/esm/user-settings/SettingsForm.js.map +0 -1
  168. package/esm/user-settings/UserSettingsPanel.css.js +0 -4
  169. package/esm/user-settings/UserSettingsPanel.css.js.map +0 -1
  170. package/esm/user-settings/UserSettingsPanel.js +0 -40
  171. package/esm/user-settings/UserSettingsPanel.js.map +0 -1
  172. package/esm/workspace-management/LayoutList.css.js +0 -4
  173. package/esm/workspace-management/LayoutList.css.js.map +0 -1
  174. package/esm/workspace-management/LayoutList.js +0 -114
  175. package/esm/workspace-management/LayoutList.js.map +0 -1
  176. package/esm/workspace-management/LayoutTile.css.js +0 -4
  177. package/esm/workspace-management/LayoutTile.css.js.map +0 -1
  178. package/esm/workspace-management/LayoutTile.js +0 -39
  179. package/esm/workspace-management/LayoutTile.js.map +0 -1
  180. package/esm/workspace-management/SaveLayoutPanel.css.js +0 -4
  181. package/esm/workspace-management/SaveLayoutPanel.css.js.map +0 -1
  182. package/esm/workspace-management/SaveLayoutPanel.js +0 -126
  183. package/esm/workspace-management/SaveLayoutPanel.js.map +0 -1
  184. package/esm/workspace-management/WorkspaceProvider.js +0 -262
  185. package/esm/workspace-management/WorkspaceProvider.js.map +0 -1
  186. package/esm/workspace-management/defaultWorkspaceJSON.js +0 -95
  187. package/esm/workspace-management/defaultWorkspaceJSON.js.map +0 -1
  188. package/esm/workspace-management/screenshot-utils.js +0 -23
  189. package/esm/workspace-management/screenshot-utils.js.map +0 -1
  190. package/esm/workspace-management/useWorkspaceContextMenuItems.js +0 -70
  191. package/esm/workspace-management/useWorkspaceContextMenuItems.js.map +0 -1
@@ -1,39 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { createElement } from 'react';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
- import { useWindow } from '@salt-ds/window';
5
- import layoutTileCss from './LayoutTile.css.js';
6
-
7
- const classBase = "vuuLayoutTile";
8
- const LayoutTile = ({
9
- metadata,
10
- onLoadLayout,
11
- ...htmlAttributes
12
- }) => {
13
- const targetWindow = useWindow();
14
- useComponentCssInjection({
15
- testId: "vuu-layout-tile",
16
- css: layoutTileCss,
17
- window: targetWindow
18
- });
19
- return /* @__PURE__ */ createElement(
20
- "div",
21
- {
22
- ...htmlAttributes,
23
- className: `${classBase}-layoutTile`,
24
- key: metadata?.id,
25
- onClick: () => onLoadLayout(
26
- metadata?.id,
27
- metadata.layoutJSON
28
- )
29
- },
30
- /* @__PURE__ */ jsx("img", { className: `${classBase}-screenshot`, src: metadata?.screenshot }),
31
- /* @__PURE__ */ jsxs("div", { children: [
32
- /* @__PURE__ */ jsx("div", { className: `${classBase}-layoutName`, children: metadata?.name }),
33
- /* @__PURE__ */ jsx("div", { className: `${classBase}-layoutDetails`, children: /* @__PURE__ */ jsx("div", { children: `${metadata?.created}` }) })
34
- ] })
35
- );
36
- };
37
-
38
- export { LayoutTile };
39
- //# sourceMappingURL=LayoutTile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LayoutTile.js","sources":["../../../../packages/vuu-shell/src/workspace-management/LayoutTile.tsx"],"sourcesContent":["import {\n LayoutJSON,\n LayoutMetadata,\n SystemLayoutMetadata,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\n\nimport layoutTileCss from \"./LayoutTile.css\";\n\nconst classBase = \"vuuLayoutTile\";\n\nexport interface LayoutTileProps extends HTMLAttributes<HTMLDivElement> {\n metadata: LayoutMetadata | SystemLayoutMetadata;\n onLoadLayout: (layoutId?: string, layoutJSON?: LayoutJSON) => void;\n}\n\nexport const LayoutTile = ({\n metadata,\n onLoadLayout,\n ...htmlAttributes\n}: LayoutTileProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-layout-tile\",\n css: layoutTileCss,\n window: targetWindow,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={`${classBase}-layoutTile`}\n key={metadata?.id}\n onClick={() =>\n onLoadLayout(\n metadata?.id,\n (metadata as SystemLayoutMetadata).layoutJSON,\n )\n }\n >\n <img className={`${classBase}-screenshot`} src={metadata?.screenshot} />\n <div>\n <div className={`${classBase}-layoutName`}>{metadata?.name}</div>\n <div className={`${classBase}-layoutDetails`}>\n <div>{`${metadata?.created}`}</div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;AAWA,MAAM,SAAY,GAAA,eAAA;AAOX,MAAM,aAAa,CAAC;AAAA,EACzB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAAuB,KAAA;AACrB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EACE,uBAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,GAAG,SAAS,CAAA,WAAA,CAAA;AAAA,MACvB,KAAK,QAAU,EAAA,EAAA;AAAA,MACf,SAAS,MACP,YAAA;AAAA,QACE,QAAU,EAAA,EAAA;AAAA,QACT,QAAkC,CAAA;AAAA;AACrC,KAAA;AAAA,oBAGF,GAAA,CAAC,SAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAe,WAAA,CAAA,EAAA,GAAA,EAAK,UAAU,UAAY,EAAA,CAAA;AAAA,yBACrE,KACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,WAAA,CAAA,EAAgB,oBAAU,IAAK,EAAA,CAAA;AAAA,sBAC1D,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,cAAA,CAAA,EAC1B,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA,EAAK,QAAG,EAAA,CAAA,EAAA,QAAA,EAAU,OAAO,CAAA,CAAA,EAAG,CAC/B,EAAA;AAAA,KACF,EAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1,4 +0,0 @@
1
- var saveLayoutPanelCss = ".vuuSaveLayoutPanel {\n --salt-selectable-foreground-hover: #6d18bdc3;\n --salt-selectable-foreground-selected: #6d18bd;\n --salt-selectable-borderColor-selected: #6d18bd;\n --saltInputLegacy-fontSize: 12px;\n --salt-text-label-fontSize: 10px;\n --saltFormFieldLegacy-label-paddingLeft: 0;\n --saltFormField-label-fontWeight: 400;\n --saltText-color: var(--text-secondary-foreground, #606477);\n\n align-items: flex-start;\n display: flex;\n flex-direction: column;\n\n .saltFormField {\n border: solid 1px var(--salt-editable-borderColor);\n padding: var(--salt-spacing-50) var(--salt-spacing-200);\n }\n\n .saltComboBox {\n .saltPillInput-endAdornmentContainer {\n .saltButton {\n border: none;\n width: 18px;\n transform: rotate(90deg);\n }\n .saltButton:after {\n content: \"\";\n background-color: var(--salt-content-secondary-foreground);\n left: auto;\n height: 20px;\n mask: var(--vuu-svg-triangle-right) center center/20px 20px;\n mask-repeat: no-repeat;\n position: absolute;\n top: var(--vuu-icon-top, auto);\n transform: var(--vuu-icon-transform, none);\n width: 20px;\n }\n }\n .saltPillInput-activationIndicator {\n display: none;\n }\n }\n}\n\n.spinner {\n width: 100px;\n height: 100px;\n background-image: var(--svg-spinner);\n}\n\n.vuuSaveLayoutPanel-panelContent {\n display: grid;\n gap: 32px;\n margin-top: var(--salt-spacing-200);\n}\n\n.vuuSaveLayoutPanel-inputText {\n border: none;\n color: var(--light-text-primary, #15171b);\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n padding-left: 4px;\n width: 100%;\n outline: none;\n}\n\n.vuuSaveLayoutPanel-settingsGroup {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-end;\n gap: 10px;\n width: 100%;\n line-height: 16px;\n}\n\n.vuuSaveLayoutPanel-screenshotContainer {\n display: flex;\n width: 304px;\n height: 208px;\n padding: 11px 15.5px;\n justify-content: center;\n align-items: center;\n border: 1px solid #e8e8e8;\n background: var(--dark-text-primary, #fff);\n}\n\n.vuuSaveLayoutPanel-screenshot {\n background: lightgray 50% / cover no-repeat;\n width: 273px;\n height: 186px;\n}\n\n.vuuSaveLayoutPanel-buttonsContainer {\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n align-self: stretch;\n padding-top: 24px;\n gap: 8px;\n}\n\n.vuuSaveLayoutPanel-cancelButton,\n.vuuSaveLayoutPanel-saveButton {\n display: flex;\n height: fit-content;\n padding: 4px 8px;\n align-items: flex-start;\n gap: 8px;\n border-radius: 6px;\n font-size: 12px;\n font-style: normal;\n font-weight: 700;\n line-height: 133.333%;\n letter-spacing: 0.48px;\n text-transform: uppercase;\n}\n";
2
-
3
- export { saveLayoutPanelCss as default };
4
- //# sourceMappingURL=SaveLayoutPanel.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SaveLayoutPanel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,126 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Text, FormField, FormFieldLabel, ComboBox, Option, Input, Button } from '@salt-ds/core';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
- import { useWindow } from '@salt-ds/window';
5
- import { useState, useEffect, useMemo, useCallback } from 'react';
6
- import { takeScreenshot } from './screenshot-utils.js';
7
- import saveLayoutPanelCss from './SaveLayoutPanel.css.js';
8
- import { useApplicationUser } from '../application-provider/ApplicationProvider.js';
9
-
10
- const classBase = "vuuSaveLayoutPanel";
11
- const groups = ["Group 1", "Group 2", "Group 3", "Group 4", "Group 5"];
12
- const SaveLayoutPanel = (props) => {
13
- const { defaultTitle = "", onCancel, onSave, componentId } = props;
14
- const targetWindow = useWindow();
15
- useComponentCssInjection({
16
- testId: "vuu-save-layout-panel",
17
- css: saveLayoutPanelCss,
18
- window: targetWindow
19
- });
20
- const [layoutName, setLayoutName] = useState(defaultTitle);
21
- const [group, setGroup] = useState("");
22
- const [screenshot, setScreenshot] = useState();
23
- const [screenshotErrorMessage, setScreenshotErrorMessage] = useState();
24
- const { username } = useApplicationUser();
25
- useEffect(() => {
26
- if (componentId) {
27
- takeScreenshot(document.getElementById(componentId)).then((screenshot2) => {
28
- setScreenshot(screenshot2);
29
- }).catch((error) => {
30
- setScreenshotErrorMessage(error.message);
31
- });
32
- }
33
- }, [componentId]);
34
- const handleSubmit = () => {
35
- onSave({
36
- name: layoutName,
37
- group,
38
- screenshot: screenshot ?? "",
39
- user: username
40
- });
41
- };
42
- const screenshotContent = useMemo(() => {
43
- if (screenshot) {
44
- return /* @__PURE__ */ jsx(
45
- "img",
46
- {
47
- className: `${classBase}-screenshot`,
48
- src: screenshot,
49
- alt: "screenshot of current layout"
50
- }
51
- );
52
- }
53
- if (screenshotErrorMessage) {
54
- return /* @__PURE__ */ jsx(Text, { children: screenshotErrorMessage });
55
- }
56
- return /* @__PURE__ */ jsx("div", { className: "spinner" });
57
- }, [screenshot, screenshotErrorMessage]);
58
- const handleSelectionChange = useCallback(
59
- (e, [selectedValue]) => {
60
- if (e.key === "Tab" && !selectedValue.toLowerCase().startsWith(group.toLowerCase())) ; else {
61
- setGroup(selectedValue || "");
62
- }
63
- },
64
- [group]
65
- );
66
- const handleChange = useCallback((e) => {
67
- setGroup(e.target.value);
68
- }, []);
69
- return /* @__PURE__ */ jsxs("div", { className: `${classBase}`, children: [
70
- /* @__PURE__ */ jsxs("div", { className: `${classBase}-panelContent`, children: [
71
- /* @__PURE__ */ jsxs(FormField, { children: [
72
- /* @__PURE__ */ jsx(FormFieldLabel, { children: "Group" }),
73
- /* @__PURE__ */ jsx(
74
- ComboBox,
75
- {
76
- "data-embedded": true,
77
- inputProps: {
78
- autoComplete: "off",
79
- className: `${classBase}-inputText`,
80
- placeholder: "Select Group or Enter New Name"
81
- // onChange: (event: ChangeEvent<HTMLInputElement>) =>
82
- // setGroup(event.target.value),
83
- },
84
- onChange: handleChange,
85
- onSelectionChange: handleSelectionChange,
86
- value: group,
87
- children: groups.map((group2, i) => /* @__PURE__ */ jsx(Option, { value: group2 }, i))
88
- }
89
- )
90
- ] }),
91
- /* @__PURE__ */ jsxs(FormField, { children: [
92
- /* @__PURE__ */ jsx(FormFieldLabel, { children: "Layout Name" }),
93
- /* @__PURE__ */ jsx(
94
- Input,
95
- {
96
- "data-embedded": true,
97
- inputProps: {
98
- className: `${classBase}-inputText`,
99
- placeholder: "Enter Layout Name"
100
- },
101
- onChange: (event) => setLayoutName(event.target.value),
102
- value: layoutName
103
- }
104
- )
105
- ] }),
106
- /* @__PURE__ */ jsx("div", { className: `${classBase}-screenshotContainer`, children: screenshotContent })
107
- ] }),
108
- /* @__PURE__ */ jsxs("div", { className: `${classBase}-buttonsContainer`, children: [
109
- /* @__PURE__ */ jsx(Button, { className: `${classBase}-cancelButton`, onClick: onCancel, children: "Cancel" }),
110
- /* @__PURE__ */ jsx(
111
- Button,
112
- {
113
- appearance: "solid",
114
- className: `${classBase}-saveButton`,
115
- onClick: handleSubmit,
116
- disabled: layoutName === "" || group === "",
117
- sentiment: "accented",
118
- children: "Save"
119
- }
120
- )
121
- ] })
122
- ] });
123
- };
124
-
125
- export { SaveLayoutPanel };
126
- //# sourceMappingURL=SaveLayoutPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SaveLayoutPanel.js","sources":["../../../../packages/vuu-shell/src/workspace-management/SaveLayoutPanel.tsx"],"sourcesContent":["import { LayoutMetadataDto } from \"@vuu-ui/vuu-utils\";\nimport {\n Button,\n ComboBox,\n FormField,\n FormFieldLabel,\n Input,\n Option,\n Text,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n ChangeEvent,\n SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { takeScreenshot } from \"./screenshot-utils\";\n\nimport saveLayoutPanelCss from \"./SaveLayoutPanel.css\";\nimport { useApplicationUser } from \"../application-provider\";\n\nconst classBase = \"vuuSaveLayoutPanel\";\n\nconst groups = [\"Group 1\", \"Group 2\", \"Group 3\", \"Group 4\", \"Group 5\"];\n\ntype SaveLayoutPanelProps = {\n componentId?: string;\n defaultTitle?: string;\n onCancel: () => void;\n onSave: (layoutMetadata: LayoutMetadataDto) => void;\n};\n\nexport const SaveLayoutPanel = (props: SaveLayoutPanelProps) => {\n const { defaultTitle = \"\", onCancel, onSave, componentId } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-save-layout-panel\",\n css: saveLayoutPanelCss,\n window: targetWindow,\n });\n\n const [layoutName, setLayoutName] = useState<string>(defaultTitle);\n const [group, setGroup] = useState<string>(\"\");\n const [screenshot, setScreenshot] = useState<string | undefined>();\n const [screenshotErrorMessage, setScreenshotErrorMessage] = useState<\n string | undefined\n >();\n const { username } = useApplicationUser();\n\n useEffect(() => {\n if (componentId) {\n takeScreenshot(document.getElementById(componentId) as HTMLElement)\n .then((screenshot) => {\n setScreenshot(screenshot);\n })\n .catch((error: Error) => {\n setScreenshotErrorMessage(error.message);\n });\n }\n }, [componentId]);\n\n const handleSubmit = () => {\n onSave({\n name: layoutName,\n group,\n screenshot: screenshot ?? \"\",\n user: username,\n });\n };\n\n const screenshotContent = useMemo(() => {\n if (screenshot) {\n return (\n <img\n className={`${classBase}-screenshot`}\n src={screenshot}\n alt=\"screenshot of current layout\"\n />\n );\n }\n if (screenshotErrorMessage) {\n return <Text>{screenshotErrorMessage}</Text>;\n }\n return <div className=\"spinner\" />;\n }, [screenshot, screenshotErrorMessage]);\n\n const handleSelectionChange = useCallback(\n (e: SyntheticEvent | KeyboardEvent, [selectedValue]: string[]) => {\n if (\n (e as KeyboardEvent).key === \"Tab\" &&\n !selectedValue.toLowerCase().startsWith(group.toLowerCase())\n ) {\n // ignore. The ComboBox forces selection of a value from the list on Tab\n } else {\n setGroup(selectedValue || \"\");\n }\n },\n [group],\n );\n\n const handleChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n setGroup(e.target.value);\n }, []);\n\n return (\n <div className={`${classBase}`}>\n <div className={`${classBase}-panelContent`}>\n <FormField>\n <FormFieldLabel>Group</FormFieldLabel>\n <ComboBox\n data-embedded\n inputProps={{\n autoComplete: \"off\",\n className: `${classBase}-inputText`,\n placeholder: \"Select Group or Enter New Name\",\n // onChange: (event: ChangeEvent<HTMLInputElement>) =>\n // setGroup(event.target.value),\n }}\n onChange={handleChange}\n onSelectionChange={handleSelectionChange}\n value={group}\n >\n {groups.map((group, i) => (\n <Option key={i} value={group} />\n ))}\n </ComboBox>\n </FormField>\n <FormField>\n <FormFieldLabel>Layout Name</FormFieldLabel>\n <Input\n data-embedded\n inputProps={{\n className: `${classBase}-inputText`,\n placeholder: \"Enter Layout Name\",\n }}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n setLayoutName(event.target.value)\n }\n value={layoutName}\n />\n </FormField>\n <div className={`${classBase}-screenshotContainer`}>\n {screenshotContent}\n </div>\n </div>\n <div className={`${classBase}-buttonsContainer`}>\n <Button className={`${classBase}-cancelButton`} onClick={onCancel}>\n Cancel\n </Button>\n <Button\n appearance=\"solid\"\n className={`${classBase}-saveButton`}\n onClick={handleSubmit}\n disabled={layoutName === \"\" || group === \"\"}\n sentiment=\"accented\"\n >\n Save\n </Button>\n </div>\n </div>\n );\n};\n"],"names":["screenshot","group"],"mappings":"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"}
@@ -1,262 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { isLayoutJSON, resolveJSONPath } from '@vuu-ui/vuu-layout';
3
- import { useNotifications } from '@vuu-ui/vuu-notifications';
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 '../persistence-manager/StaticPersistenceManager.js';
9
- import { getWorkspaceWithLayoutJSON, loadingJSON } from './defaultWorkspaceJSON.js';
10
-
11
- const { info } = logger("useLayoutManager");
12
- const ensureLayoutHasTitle = (layout, layoutMetadata) => {
13
- if (layout.props?.title !== void 0) {
14
- return layout;
15
- } else {
16
- return {
17
- ...layout,
18
- props: {
19
- ...layout.props,
20
- title: layoutMetadata.name
21
- }
22
- };
23
- }
24
- };
25
- const loadingApplicationJSON = {
26
- workspaceJSON: loadingJSON
27
- };
28
- const WorkspaceProvider = ({
29
- TabstripProps,
30
- children,
31
- layoutJSON,
32
- activeLayoutIndex,
33
- layoutPlaceholderJSON,
34
- showTabs,
35
- workspaceJSON: customWorkspaceJSON
36
- }) => {
37
- const [layoutMetadata, setLayoutMetadata] = useState([]);
38
- const [, forceRefresh] = useState({});
39
- const { showNotification } = useNotifications();
40
- const persistenceManager = usePersistenceManager();
41
- const applicationJSONRef = useRef(loadingApplicationJSON);
42
- const setApplicationJSON = useCallback(
43
- (applicationJSON, rerender = true) => {
44
- applicationJSONRef.current = applicationJSON;
45
- if (rerender) {
46
- forceRefresh({});
47
- }
48
- },
49
- []
50
- );
51
- const setWorkspaceJSON = useCallback(
52
- (workspaceJSON, rerender = true) => {
53
- setApplicationJSON(
54
- {
55
- ...applicationJSONRef.current,
56
- workspaceJSON
57
- },
58
- rerender
59
- );
60
- },
61
- [setApplicationJSON]
62
- );
63
- const setApplicationSettings = useCallback(
64
- (settings) => {
65
- setApplicationJSON(
66
- {
67
- ...applicationJSONRef.current,
68
- settings: {
69
- ...applicationJSONRef.current.settings,
70
- ...settings
71
- }
72
- },
73
- false
74
- );
75
- },
76
- [setApplicationJSON]
77
- );
78
- useEffect(() => {
79
- persistenceManager?.loadMetadata().then((metadata) => {
80
- setLayoutMetadata(metadata);
81
- }).catch((error) => {
82
- showNotification({
83
- content: "Could not load list of available layouts",
84
- header: "Failed to Load Layouts",
85
- status: "error",
86
- type: "toast"
87
- });
88
- console.error("Error occurred while retrieving metadata", error);
89
- });
90
- persistenceManager?.loadApplicationJSON().then((applicationJSON) => {
91
- if (applicationJSON) {
92
- info?.("applicationJSON loaded successfully");
93
- setApplicationJSON(applicationJSON);
94
- } else {
95
- const workspaceJSON = getWorkspaceWithLayoutJSON(
96
- customWorkspaceJSON,
97
- layoutJSON,
98
- activeLayoutIndex,
99
- { TabstripProps, showTabs }
100
- );
101
- info?.(`applicationJSON not found, getting defaultWorkspaceJSON,
102
- ${JSON.stringify(workspaceJSON, null, 2)}
103
- `);
104
- setApplicationJSON({
105
- workspaceJSON
106
- });
107
- }
108
- }).catch((error) => {
109
- showNotification({
110
- content: "Could not load your latest view",
111
- header: "Failed to Load Layout",
112
- status: "error",
113
- type: "toast"
114
- });
115
- console.error(
116
- "Error occurred while retrieving application layout",
117
- error
118
- );
119
- });
120
- }, [
121
- TabstripProps,
122
- activeLayoutIndex,
123
- customWorkspaceJSON,
124
- layoutJSON,
125
- showNotification,
126
- persistenceManager,
127
- setApplicationJSON,
128
- showTabs
129
- ]);
130
- const saveApplicationLayout = useCallback(
131
- (layout) => {
132
- if (isLayoutJSON(layout)) {
133
- setWorkspaceJSON(layout, false);
134
- persistenceManager?.saveApplicationJSON(applicationJSONRef.current);
135
- } else {
136
- console.error("Tried to save invalid application layout", layout);
137
- }
138
- },
139
- [persistenceManager, setWorkspaceJSON]
140
- );
141
- const saveLayout = useCallback(
142
- (metadata) => {
143
- let layoutToSave;
144
- try {
145
- const { workspaceJSON } = applicationJSONRef.current;
146
- if (Array.isArray(workspaceJSON)) {
147
- console.log("how do we identify the right thing to save");
148
- } else {
149
- layoutToSave = resolveJSONPath(
150
- workspaceJSON,
151
- `#${VuuShellLocation.Workspace}.ACTIVE_CHILD`
152
- );
153
- }
154
- } catch (e) {
155
- }
156
- if (layoutToSave && isLayoutJSON(layoutToSave)) {
157
- persistenceManager?.createLayout(metadata, ensureLayoutHasTitle(layoutToSave, metadata)).then((metadata2) => {
158
- showNotification({
159
- content: `${metadata2.name} saved successfully`,
160
- header: "Layout Saved Successfully",
161
- status: "success",
162
- type: "toast"
163
- });
164
- setLayoutMetadata((prev) => [...prev, metadata2]);
165
- }).catch((error) => {
166
- showNotification({
167
- content: `Failed to save layout ${metadata.name}`,
168
- header: "Failed to Save Layout",
169
- status: "error",
170
- type: "toast"
171
- });
172
- console.error("Error occurred while saving layout", error);
173
- });
174
- } else {
175
- console.error("Tried to save invalid layout", layoutToSave);
176
- showNotification({
177
- content: "Cannot save invalid layout",
178
- header: "Failed to Save Layout",
179
- status: "error",
180
- type: "toast"
181
- });
182
- }
183
- },
184
- [showNotification, 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
- showNotification({
226
- content: "Failed to load the requested layout",
227
- header: "Failed to Load Layout",
228
- status: "error",
229
- type: "toast"
230
- });
231
- console.error("Error occurred while loading layout", error);
232
- });
233
- },
234
- [showNotification, persistenceManager, setWorkspaceJSON]
235
- );
236
- return /* @__PURE__ */ jsx(
237
- WorkspaceContext.Provider,
238
- {
239
- value: {
240
- getApplicationSettings,
241
- layoutMetadata,
242
- layoutPlaceholderJSON,
243
- saveLayout,
244
- workspaceJSON: applicationJSONRef.current.workspaceJSON,
245
- saveApplicationLayout,
246
- saveApplicationSettings,
247
- loadLayoutById
248
- },
249
- children
250
- }
251
- );
252
- };
253
- const useWorkspace = () => {
254
- const { workspaceJSON = getWorkspaceWithLayoutJSON(), ...contextProps } = useContext(WorkspaceContext);
255
- return {
256
- ...contextProps,
257
- workspaceJSON
258
- };
259
- };
260
-
261
- export { WorkspaceProvider, useWorkspace };
262
- //# sourceMappingURL=WorkspaceProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkspaceProvider.js","sources":["../../../../packages/vuu-shell/src/workspace-management/WorkspaceProvider.tsx"],"sourcesContent":["import { isLayoutJSON, resolveJSONPath } from \"@vuu-ui/vuu-layout\";\nimport { useNotifications } from \"@vuu-ui/vuu-notifications\";\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 { showNotification } = 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 showNotification({\n content: \"Could not load list of available layouts\",\n header: \"Failed to Load Layouts\",\n status: \"error\",\n type: \"toast\",\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 showNotification({\n content: \"Could not load your latest view\",\n header: \"Failed to Load Layout\",\n status: \"error\",\n type: \"toast\",\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 showNotification,\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 showNotification({\n content: `${metadata.name} saved successfully`,\n header: \"Layout Saved Successfully\",\n status: \"success\",\n type: \"toast\",\n });\n setLayoutMetadata((prev) => [...prev, metadata]);\n })\n .catch((error: Error) => {\n showNotification({\n content: `Failed to save layout ${metadata.name}`,\n header: \"Failed to Save Layout\",\n status: \"error\",\n type: \"toast\",\n });\n console.error(\"Error occurred while saving layout\", error);\n });\n } else {\n console.error(\"Tried to save invalid layout\", layoutToSave);\n showNotification({\n content: \"Cannot save invalid layout\",\n header: \"Failed to Save Layout\",\n status: \"error\",\n type: \"toast\",\n });\n }\n },\n [showNotification, 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 showNotification({\n content: \"Failed to load the requested layout\",\n header: \"Failed to Load Layout\",\n status: \"error\",\n type: \"toast\",\n });\n console.error(\"Error occurred while loading layout\", error);\n });\n },\n [showNotification, 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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"}
@@ -1,95 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaultWorkspaceJSON.js","sources":["../../../../packages/vuu-shell/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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"}
@@ -1,23 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"screenshot-utils.js","sources":["../../../../packages/vuu-shell/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;;;;"}