@vuu-ui/vuu-shell 0.0.26

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 (222) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +0 -0
  3. package/cjs/ShellContextProvider.js +31 -0
  4. package/cjs/ShellContextProvider.js.map +1 -0
  5. package/cjs/app-header/AppHeader.css.js +6 -0
  6. package/cjs/app-header/AppHeader.css.js.map +1 -0
  7. package/cjs/app-header/AppHeader.js +66 -0
  8. package/cjs/app-header/AppHeader.js.map +1 -0
  9. package/cjs/connection-status/ConnectionStatusIndicator.css.js +6 -0
  10. package/cjs/connection-status/ConnectionStatusIndicator.css.js.map +1 -0
  11. package/cjs/connection-status/ConnectionStatusIndicator.js +51 -0
  12. package/cjs/connection-status/ConnectionStatusIndicator.js.map +1 -0
  13. package/cjs/feature/Feature.js +56 -0
  14. package/cjs/feature/Feature.js.map +1 -0
  15. package/cjs/feature/FeatureErrorBoundary.js +30 -0
  16. package/cjs/feature/FeatureErrorBoundary.js.map +1 -0
  17. package/cjs/feature/Loader.js +8 -0
  18. package/cjs/feature/Loader.js.map +1 -0
  19. package/cjs/feature-list/FeatureList.css.js +6 -0
  20. package/cjs/feature-list/FeatureList.css.js.map +1 -0
  21. package/cjs/feature-list/FeatureList.js +52 -0
  22. package/cjs/feature-list/FeatureList.js.map +1 -0
  23. package/cjs/index.js +51 -0
  24. package/cjs/index.js.map +1 -0
  25. package/cjs/layout-management/LayoutList.css.js +6 -0
  26. package/cjs/layout-management/LayoutList.css.js.map +1 -0
  27. package/cjs/layout-management/LayoutList.js +75 -0
  28. package/cjs/layout-management/LayoutList.js.map +1 -0
  29. package/cjs/layout-management/LayoutTile.css.js +6 -0
  30. package/cjs/layout-management/LayoutTile.css.js.map +1 -0
  31. package/cjs/layout-management/LayoutTile.js +36 -0
  32. package/cjs/layout-management/LayoutTile.js.map +1 -0
  33. package/cjs/layout-management/SaveLayoutPanel.css.js +6 -0
  34. package/cjs/layout-management/SaveLayoutPanel.css.js.map +1 -0
  35. package/cjs/layout-management/SaveLayoutPanel.js +149 -0
  36. package/cjs/layout-management/SaveLayoutPanel.js.map +1 -0
  37. package/cjs/layout-management/screenshot-utils.js +25 -0
  38. package/cjs/layout-management/screenshot-utils.js.map +1 -0
  39. package/cjs/layout-management/useLayoutContextMenuItems.js +72 -0
  40. package/cjs/layout-management/useLayoutContextMenuItems.js.map +1 -0
  41. package/cjs/layout-management/useLayoutManager.js +218 -0
  42. package/cjs/layout-management/useLayoutManager.js.map +1 -0
  43. package/cjs/left-nav/LeftNav.css.js +6 -0
  44. package/cjs/left-nav/LeftNav.css.js.map +1 -0
  45. package/cjs/left-nav/LeftNav.js +166 -0
  46. package/cjs/left-nav/LeftNav.js.map +1 -0
  47. package/cjs/login/LoginPanel.css.js +6 -0
  48. package/cjs/login/LoginPanel.css.js.map +1 -0
  49. package/cjs/login/LoginPanel.js +108 -0
  50. package/cjs/login/LoginPanel.js.map +1 -0
  51. package/cjs/login/VuuLogo.js +134 -0
  52. package/cjs/login/VuuLogo.js.map +1 -0
  53. package/cjs/login/login-utils.js +31 -0
  54. package/cjs/login/login-utils.js.map +1 -0
  55. package/cjs/persistence-management/LocalPersistenceManager.js +184 -0
  56. package/cjs/persistence-management/LocalPersistenceManager.js.map +1 -0
  57. package/cjs/persistence-management/RemotePersistenceManager.js +164 -0
  58. package/cjs/persistence-management/RemotePersistenceManager.js.map +1 -0
  59. package/cjs/persistence-management/defaultApplicationJson.js +42 -0
  60. package/cjs/persistence-management/defaultApplicationJson.js.map +1 -0
  61. package/cjs/session-editing-form/SessionEditingForm.css.js +6 -0
  62. package/cjs/session-editing-form/SessionEditingForm.css.js.map +1 -0
  63. package/cjs/session-editing-form/SessionEditingForm.js +280 -0
  64. package/cjs/session-editing-form/SessionEditingForm.js.map +1 -0
  65. package/cjs/shell-layouts/context-panel/ContextPanel.css.js +6 -0
  66. package/cjs/shell-layouts/context-panel/ContextPanel.css.js.map +1 -0
  67. package/cjs/shell-layouts/context-panel/ContextPanel.js +70 -0
  68. package/cjs/shell-layouts/context-panel/ContextPanel.js.map +1 -0
  69. package/cjs/shell-layouts/side-panel/SidePanel.css.js +6 -0
  70. package/cjs/shell-layouts/side-panel/SidePanel.css.js.map +1 -0
  71. package/cjs/shell-layouts/side-panel/SidePanel.js +36 -0
  72. package/cjs/shell-layouts/side-panel/SidePanel.js.map +1 -0
  73. package/cjs/shell-layouts/useFullHeightLeftPanel.js +41 -0
  74. package/cjs/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
  75. package/cjs/shell-layouts/useInlayLeftPanel.js +78 -0
  76. package/cjs/shell-layouts/useInlayLeftPanel.js.map +1 -0
  77. package/cjs/shell-layouts/useShellLayout.js +15 -0
  78. package/cjs/shell-layouts/useShellLayout.js.map +1 -0
  79. package/cjs/shell.css.js +6 -0
  80. package/cjs/shell.css.js.map +1 -0
  81. package/cjs/shell.js +137 -0
  82. package/cjs/shell.js.map +1 -0
  83. package/cjs/shellTypes.js +8 -0
  84. package/cjs/shellTypes.js.map +1 -0
  85. package/cjs/theme-switch/ThemeSwitch.css.js +6 -0
  86. package/cjs/theme-switch/ThemeSwitch.css.js.map +1 -0
  87. package/cjs/theme-switch/ThemeSwitch.js +56 -0
  88. package/cjs/theme-switch/ThemeSwitch.js.map +1 -0
  89. package/esm/ShellContextProvider.js +28 -0
  90. package/esm/ShellContextProvider.js.map +1 -0
  91. package/esm/app-header/AppHeader.css.js +4 -0
  92. package/esm/app-header/AppHeader.css.js.map +1 -0
  93. package/esm/app-header/AppHeader.js +64 -0
  94. package/esm/app-header/AppHeader.js.map +1 -0
  95. package/esm/connection-status/ConnectionStatusIndicator.css.js +4 -0
  96. package/esm/connection-status/ConnectionStatusIndicator.css.js.map +1 -0
  97. package/esm/connection-status/ConnectionStatusIndicator.js +49 -0
  98. package/esm/connection-status/ConnectionStatusIndicator.js.map +1 -0
  99. package/esm/feature/Feature.js +54 -0
  100. package/esm/feature/Feature.js.map +1 -0
  101. package/esm/feature/FeatureErrorBoundary.js +28 -0
  102. package/esm/feature/FeatureErrorBoundary.js.map +1 -0
  103. package/esm/feature/Loader.js +6 -0
  104. package/esm/feature/Loader.js.map +1 -0
  105. package/esm/feature-list/FeatureList.css.js +4 -0
  106. package/esm/feature-list/FeatureList.css.js.map +1 -0
  107. package/esm/feature-list/FeatureList.js +50 -0
  108. package/esm/feature-list/FeatureList.js.map +1 -0
  109. package/esm/index.js +20 -0
  110. package/esm/index.js.map +1 -0
  111. package/esm/layout-management/LayoutList.css.js +4 -0
  112. package/esm/layout-management/LayoutList.css.js.map +1 -0
  113. package/esm/layout-management/LayoutList.js +73 -0
  114. package/esm/layout-management/LayoutList.js.map +1 -0
  115. package/esm/layout-management/LayoutTile.css.js +4 -0
  116. package/esm/layout-management/LayoutTile.css.js.map +1 -0
  117. package/esm/layout-management/LayoutTile.js +34 -0
  118. package/esm/layout-management/LayoutTile.js.map +1 -0
  119. package/esm/layout-management/SaveLayoutPanel.css.js +4 -0
  120. package/esm/layout-management/SaveLayoutPanel.css.js.map +1 -0
  121. package/esm/layout-management/SaveLayoutPanel.js +147 -0
  122. package/esm/layout-management/SaveLayoutPanel.js.map +1 -0
  123. package/esm/layout-management/screenshot-utils.js +23 -0
  124. package/esm/layout-management/screenshot-utils.js.map +1 -0
  125. package/esm/layout-management/useLayoutContextMenuItems.js +70 -0
  126. package/esm/layout-management/useLayoutContextMenuItems.js.map +1 -0
  127. package/esm/layout-management/useLayoutManager.js +214 -0
  128. package/esm/layout-management/useLayoutManager.js.map +1 -0
  129. package/esm/left-nav/LeftNav.css.js +4 -0
  130. package/esm/left-nav/LeftNav.css.js.map +1 -0
  131. package/esm/left-nav/LeftNav.js +164 -0
  132. package/esm/left-nav/LeftNav.js.map +1 -0
  133. package/esm/login/LoginPanel.css.js +4 -0
  134. package/esm/login/LoginPanel.css.js.map +1 -0
  135. package/esm/login/LoginPanel.js +106 -0
  136. package/esm/login/LoginPanel.js.map +1 -0
  137. package/esm/login/VuuLogo.js +132 -0
  138. package/esm/login/VuuLogo.js.map +1 -0
  139. package/esm/login/login-utils.js +26 -0
  140. package/esm/login/login-utils.js.map +1 -0
  141. package/esm/persistence-management/LocalPersistenceManager.js +182 -0
  142. package/esm/persistence-management/LocalPersistenceManager.js.map +1 -0
  143. package/esm/persistence-management/RemotePersistenceManager.js +162 -0
  144. package/esm/persistence-management/RemotePersistenceManager.js.map +1 -0
  145. package/esm/persistence-management/defaultApplicationJson.js +39 -0
  146. package/esm/persistence-management/defaultApplicationJson.js.map +1 -0
  147. package/esm/session-editing-form/SessionEditingForm.css.js +4 -0
  148. package/esm/session-editing-form/SessionEditingForm.css.js.map +1 -0
  149. package/esm/session-editing-form/SessionEditingForm.js +278 -0
  150. package/esm/session-editing-form/SessionEditingForm.js.map +1 -0
  151. package/esm/shell-layouts/context-panel/ContextPanel.css.js +4 -0
  152. package/esm/shell-layouts/context-panel/ContextPanel.css.js.map +1 -0
  153. package/esm/shell-layouts/context-panel/ContextPanel.js +68 -0
  154. package/esm/shell-layouts/context-panel/ContextPanel.js.map +1 -0
  155. package/esm/shell-layouts/side-panel/SidePanel.css.js +4 -0
  156. package/esm/shell-layouts/side-panel/SidePanel.css.js.map +1 -0
  157. package/esm/shell-layouts/side-panel/SidePanel.js +34 -0
  158. package/esm/shell-layouts/side-panel/SidePanel.js.map +1 -0
  159. package/esm/shell-layouts/useFullHeightLeftPanel.js +39 -0
  160. package/esm/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
  161. package/esm/shell-layouts/useInlayLeftPanel.js +76 -0
  162. package/esm/shell-layouts/useInlayLeftPanel.js.map +1 -0
  163. package/esm/shell-layouts/useShellLayout.js +13 -0
  164. package/esm/shell-layouts/useShellLayout.js.map +1 -0
  165. package/esm/shell.css.js +4 -0
  166. package/esm/shell.css.js.map +1 -0
  167. package/esm/shell.js +135 -0
  168. package/esm/shell.js.map +1 -0
  169. package/esm/shellTypes.js +5 -0
  170. package/esm/shellTypes.js.map +1 -0
  171. package/esm/theme-switch/ThemeSwitch.css.js +4 -0
  172. package/esm/theme-switch/ThemeSwitch.css.js.map +1 -0
  173. package/esm/theme-switch/ThemeSwitch.js +54 -0
  174. package/esm/theme-switch/ThemeSwitch.js.map +1 -0
  175. package/package.json +48 -0
  176. package/types/ShellContextProvider.d.ts +16 -0
  177. package/types/app-header/AppHeader.d.ts +12 -0
  178. package/types/app-header/index.d.ts +1 -0
  179. package/types/connection-status/ConnectionStatusIndicator.d.ts +10 -0
  180. package/types/connection-status/index.d.ts +1 -0
  181. package/types/feature/Feature.d.ts +26 -0
  182. package/types/feature/FeatureErrorBoundary.d.ts +13 -0
  183. package/types/feature/Loader.d.ts +2 -0
  184. package/types/feature/index.d.ts +1 -0
  185. package/types/feature-list/FeatureList.d.ts +6 -0
  186. package/types/feature-list/index.d.ts +1 -0
  187. package/types/get-layout-history.d.ts +8 -0
  188. package/types/index.d.ts +13 -0
  189. package/types/layout-management/LayoutList.d.ts +2 -0
  190. package/types/layout-management/LayoutTile.d.ts +8 -0
  191. package/types/layout-management/SaveLayoutPanel.d.ts +10 -0
  192. package/types/layout-management/index.d.ts +5 -0
  193. package/types/layout-management/layoutTypes.d.ts +19 -0
  194. package/types/layout-management/screenshot-utils.d.ts +6 -0
  195. package/types/layout-management/useLayoutContextMenuItems.d.ts +6 -0
  196. package/types/layout-management/useLayoutManager.d.ts +26 -0
  197. package/types/left-nav/LeftNav.d.ts +17 -0
  198. package/types/left-nav/index.d.ts +1 -0
  199. package/types/login/LoginPanel.d.ts +7 -0
  200. package/types/login/VuuLogo.d.ts +2 -0
  201. package/types/login/index.d.ts +2 -0
  202. package/types/login/login-utils.d.ts +4 -0
  203. package/types/persistence-management/LocalPersistenceManager.d.ts +21 -0
  204. package/types/persistence-management/PersistenceManager.d.ts +55 -0
  205. package/types/persistence-management/RemotePersistenceManager.d.ts +22 -0
  206. package/types/persistence-management/defaultApplicationJson.d.ts +4 -0
  207. package/types/persistence-management/index.d.ts +4 -0
  208. package/types/session-editing-form/SessionEditingForm.d.ts +24 -0
  209. package/types/session-editing-form/index.d.ts +1 -0
  210. package/types/shell-layouts/context-panel/ContextPanel.d.ts +10 -0
  211. package/types/shell-layouts/context-panel/index.d.ts +1 -0
  212. package/types/shell-layouts/index.d.ts +3 -0
  213. package/types/shell-layouts/side-panel/SidePanel.d.ts +8 -0
  214. package/types/shell-layouts/side-panel/index.d.ts +1 -0
  215. package/types/shell-layouts/useFullHeightLeftPanel.d.ts +3 -0
  216. package/types/shell-layouts/useInlayLeftPanel.d.ts +3 -0
  217. package/types/shell-layouts/useShellLayout.d.ts +10 -0
  218. package/types/shell.d.ts +21 -0
  219. package/types/shellTypes.d.ts +29 -0
  220. package/types/theme-switch/ThemeSwitch.d.ts +8 -0
  221. package/types/theme-switch/index.d.ts +1 -0
  222. package/types/use-force-render.d.ts +1 -0
package/cjs/index.js ADDED
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var AppHeader = require('./app-header/AppHeader.js');
4
+ var ConnectionStatusIndicator = require('./connection-status/ConnectionStatusIndicator.js');
5
+ var Feature = require('./feature/Feature.js');
6
+ var SaveLayoutPanel = require('./layout-management/SaveLayoutPanel.js');
7
+ var LayoutList = require('./layout-management/LayoutList.js');
8
+ var useLayoutManager = require('./layout-management/useLayoutManager.js');
9
+ var useLayoutContextMenuItems = require('./layout-management/useLayoutContextMenuItems.js');
10
+ var LeftNav = require('./left-nav/LeftNav.js');
11
+ var LoginPanel = require('./login/LoginPanel.js');
12
+ var loginUtils = require('./login/login-utils.js');
13
+ var SessionEditingForm = require('./session-editing-form/SessionEditingForm.js');
14
+ var shell = require('./shell.js');
15
+ var ContextPanel = require('./shell-layouts/context-panel/ContextPanel.js');
16
+ var useShellLayout = require('./shell-layouts/useShellLayout.js');
17
+ var SidePanel = require('./shell-layouts/side-panel/SidePanel.js');
18
+ var shellTypes = require('./shellTypes.js');
19
+ var ShellContextProvider = require('./ShellContextProvider.js');
20
+ var FeatureList = require('./feature-list/FeatureList.js');
21
+ var ThemeSwitch = require('./theme-switch/ThemeSwitch.js');
22
+
23
+
24
+
25
+ exports.AppHeader = AppHeader.AppHeader;
26
+ exports.ConnectionStatusIndicator = ConnectionStatusIndicator.ConnectionStatusIndicator;
27
+ exports.Feature = Feature.Feature;
28
+ exports.SaveLayoutPanel = SaveLayoutPanel.SaveLayoutPanel;
29
+ exports.LayoutList = LayoutList.LayoutList;
30
+ exports.LayoutManagementContext = useLayoutManager.LayoutManagementContext;
31
+ exports.LayoutManagementProvider = useLayoutManager.LayoutManagementProvider;
32
+ exports.useLayoutManager = useLayoutManager.useLayoutManager;
33
+ exports.useLayoutContextMenuItems = useLayoutContextMenuItems.useLayoutContextMenuItems;
34
+ exports.LeftNav = LeftNav.LeftNav;
35
+ exports.LoginPanel = LoginPanel.LoginPanel;
36
+ exports.getAuthDetailsFromCookies = loginUtils.getAuthDetailsFromCookies;
37
+ exports.getAuthModeFromCookies = loginUtils.getAuthModeFromCookies;
38
+ exports.logout = loginUtils.logout;
39
+ exports.redirectToLogin = loginUtils.redirectToLogin;
40
+ exports.SessionEditingForm = SessionEditingForm.SessionEditingForm;
41
+ exports.Shell = shell.Shell;
42
+ exports.ContextPanel = ContextPanel.ContextPanel;
43
+ exports.useShellLayout = useShellLayout.useShellLayout;
44
+ exports.SidePanel = SidePanel.SidePanel;
45
+ exports.isTableSchema = shellTypes.isTableSchema;
46
+ exports.isWildcardSchema = shellTypes.isWildcardSchema;
47
+ exports.ShellContextProvider = ShellContextProvider.ShellContextProvider;
48
+ exports.useShellContext = ShellContextProvider.useShellContext;
49
+ exports.FeatureList = FeatureList.FeatureList;
50
+ exports.ThemeSwitch = ThemeSwitch.ThemeSwitch;
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var layoutListCss = ".vuuLayoutList {\n --vuuLayoutList-width: 90%;\n --vuuMeasuredContainer-flex: 1 1 1px;\n align-self: stretch;\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n padding-right: 6px;\n\n /* compatible with Chrome, Edge, and Safari */\n ::-webkit-scrollbar {\n width: 4px;\n height: 4px;\n }\n\n ::-webkit-scrollbar-track {\n background: transparent;\n margin-top: 15px;\n margin-bottom: 15px;\n }\n\n ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background: #D9D9D9;\n }\n}\n\n.vuuLayoutList-header {\n display: flex;\n flex: 0 0 47px;\n width: var(--vuuLayoutList-width);\n padding: 16px 0;\n border-bottom: 1px solid rgba(119, 124, 148, 0.10);\n color: var(--light-text-primary, #15171B);\n font-weight: 700;\n letter-spacing: 0.48px;\n line-height: 200%;\n text-transform: uppercase;\n}\n\n.vuuLayoutList-groupName {\n display: flex;\n padding-top: 24px;\n width: var(--vuuLayoutList-width);\n color: var(--light-text-secondary, #606477);\n font-feature-settings: 'ss02' on, 'ss01' on, 'salt' on, 'liga' off;\n font-family: Nunito Sans;\n font-size: 12px;\n font-style: normal;\n font-weight: 700;\n line-height: 200%;\n letter-spacing: 0.48px;\n text-transform: uppercase;\n}\n\n.vuuLayoutList-layoutContainer {\n display: flex;\n align-items: center;\n width: 90%;\n height: auto;\n gap: 8px;\n padding: 8px 0;\n flex: 1 1 auto;\n cursor: pointer;\n}\n\n.vuuLayoutList-layoutName {\n color: var(--light-text-primary, #15171B);\n font-weight: 600;\n line-height: 133.333%;\n text-transform: capitalize;\n}\n\n.vuuLayoutList-screenshot {\n width: 60px;\n height: 45.6px;\n border: 1px solid #D6D7DA;\n}\n\n.vuuLayoutList-layoutDetails {\n color: var(--light-text-secondary, #606477);\n font-size: 10px;\n font-weight: 600;\n line-height: 150%;\n}\n";
4
+
5
+ module.exports = layoutListCss;
6
+ //# sourceMappingURL=LayoutList.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutList.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,75 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var styles = require('@salt-ds/styles');
5
+ var window = require('@salt-ds/window');
6
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
7
+ var useLayoutManager = require('./useLayoutManager.js');
8
+ var LayoutTile = require('./LayoutTile.js');
9
+ var LayoutList$1 = require('./LayoutList.css.js');
10
+
11
+ const classBase = "vuuLayoutList";
12
+ const LayoutList = (props) => {
13
+ const targetWindow = window.useWindow();
14
+ styles.useComponentCssInjection({
15
+ testId: "vuu-layout-list",
16
+ css: LayoutList$1,
17
+ window: targetWindow
18
+ });
19
+ const { layoutMetadata, loadLayoutById } = useLayoutManager.useLayoutManager();
20
+ const handleLoadLayout = (layoutId) => {
21
+ if (layoutId) {
22
+ loadLayoutById(layoutId);
23
+ }
24
+ };
25
+ const layoutsByGroup = layoutMetadata.reduce((acc, cur) => {
26
+ if (acc[cur.group]) {
27
+ return {
28
+ ...acc,
29
+ [cur.group]: [...acc[cur.group], cur]
30
+ };
31
+ }
32
+ return {
33
+ ...acc,
34
+ [cur.group]: [cur]
35
+ };
36
+ }, {});
37
+ return /* @__PURE__ */ jsxRuntime.jsxs(
38
+ "div",
39
+ {
40
+ className: classBase,
41
+ ...props,
42
+ role: "listbox",
43
+ "aria-label": "my layouts",
44
+ children: [
45
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-header`, children: "My Layouts" }),
46
+ /* @__PURE__ */ jsxRuntime.jsx(
47
+ vuuUiControls.List,
48
+ {
49
+ height: "auto",
50
+ source: Object.entries(layoutsByGroup),
51
+ ListItem: ({ item }) => {
52
+ if (!item)
53
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
54
+ const [groupName, layoutMetadata2] = item;
55
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { role: "list", "aria-label": groupName, children: [
56
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-groupName`, children: groupName }),
57
+ layoutMetadata2.map((metadata) => /* @__PURE__ */ jsxRuntime.jsx(
58
+ LayoutTile.LayoutTile,
59
+ {
60
+ metadata,
61
+ handleLoadLayout
62
+ },
63
+ metadata.id
64
+ ))
65
+ ] });
66
+ }
67
+ }
68
+ )
69
+ ]
70
+ }
71
+ );
72
+ };
73
+
74
+ exports.LayoutList = LayoutList;
75
+ //# sourceMappingURL=LayoutList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutList.js","sources":["../../src/layout-management/LayoutList.tsx"],"sourcesContent":["import { HTMLAttributes } from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { List } from \"@vuu-ui/vuu-ui-controls\";\nimport { LayoutMetadata } from \"./layoutTypes\";\nimport { useLayoutManager } from \"./useLayoutManager\";\nimport { LayoutTile } from \"./LayoutTile\";\n\nimport layoutListCss from \"./LayoutList.css\";\n\ntype LayoutGroups = {\n [groupName: string]: LayoutMetadata[];\n};\n\nconst classBase = \"vuuLayoutList\";\n\nexport const LayoutList = (props: HTMLAttributes<HTMLDivElement>) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-layout-list\",\n css: layoutListCss,\n window: targetWindow,\n });\n\n const { layoutMetadata, loadLayoutById } = useLayoutManager();\n\n const handleLoadLayout = (layoutId?: string) => {\n if (layoutId) {\n loadLayoutById(layoutId);\n }\n };\n\n const layoutsByGroup = layoutMetadata.reduce((acc: LayoutGroups, cur) => {\n if (acc[cur.group]) {\n return {\n ...acc,\n [cur.group]: [...acc[cur.group], cur],\n };\n }\n return {\n ...acc,\n [cur.group]: [cur],\n };\n }, {});\n\n return (\n <div\n className={classBase}\n {...props}\n role=\"listbox\"\n aria-label=\"my layouts\"\n >\n <div className={`${classBase}-header`}>My Layouts</div>\n <List<[string, LayoutMetadata[]]>\n height=\"auto\"\n source={Object.entries(layoutsByGroup)}\n ListItem={({ item }) => {\n if (!item) return <></>;\n const [groupName, layoutMetadata] = item;\n return (\n <div role=\"list\" aria-label={groupName}>\n <div className={`${classBase}-groupName`}>{groupName}</div>\n {layoutMetadata.map((metadata) => (\n <LayoutTile\n key={metadata.id}\n metadata={metadata}\n handleLoadLayout={handleLoadLayout}\n />\n ))}\n </div>\n );\n }}\n />\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","layoutListCss","useLayoutManager","jsxs","jsx","List","Fragment","layoutMetadata","LayoutTile"],"mappings":";;;;;;;;;;AAcA,MAAM,SAAY,GAAA,eAAA,CAAA;AAEL,MAAA,UAAA,GAAa,CAAC,KAA0C,KAAA;AACnE,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,cAAA,EAAgB,cAAe,EAAA,GAAIC,iCAAiB,EAAA,CAAA;AAE5D,EAAM,MAAA,gBAAA,GAAmB,CAAC,QAAsB,KAAA;AAC9C,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,cAAA,CAAe,QAAQ,CAAA,CAAA;AAAA,KACzB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAA,cAAA,CAAe,MAAO,CAAA,CAAC,KAAmB,GAAQ,KAAA;AACvE,IAAI,IAAA,GAAA,CAAI,GAAI,CAAA,KAAK,CAAG,EAAA;AAClB,MAAO,OAAA;AAAA,QACL,GAAG,GAAA;AAAA,QACH,CAAC,GAAI,CAAA,KAAK,GAAG,CAAC,GAAG,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,EAAG,GAAG,CAAA;AAAA,OACtC,CAAA;AAAA,KACF;AACA,IAAO,OAAA;AAAA,MACL,GAAG,GAAA;AAAA,MACH,CAAC,GAAA,CAAI,KAAK,GAAG,CAAC,GAAG,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,EAAG,EAAE,CAAA,CAAA;AAEL,EACE,uBAAAC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,SAAA;AAAA,MACV,GAAG,KAAA;AAAA,MACJ,IAAK,EAAA,SAAA;AAAA,MACL,YAAW,EAAA,YAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,WAAW,QAAU,EAAA,YAAA,EAAA,CAAA;AAAA,wBACjDA,cAAA;AAAA,UAACC,kBAAA;AAAA,UAAA;AAAA,YACC,MAAO,EAAA,MAAA;AAAA,YACP,MAAA,EAAQ,MAAO,CAAA,OAAA,CAAQ,cAAc,CAAA;AAAA,YACrC,QAAU,EAAA,CAAC,EAAE,IAAA,EAAW,KAAA;AACtB,cAAA,IAAI,CAAC,IAAA;AAAM,gBAAA,uBAASD,cAAA,CAAAE,mBAAA,EAAA,EAAA,CAAA,CAAA;AACpB,cAAM,MAAA,CAAC,SAAWC,EAAAA,eAAc,CAAI,GAAA,IAAA,CAAA;AACpC,cAAA,uBACGJ,eAAA,CAAA,KAAA,EAAA,EAAI,IAAK,EAAA,MAAA,EAAO,cAAY,SAC3B,EAAA,QAAA,EAAA;AAAA,gCAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,cAAe,QAAU,EAAA,SAAA,EAAA,CAAA;AAAA,gBACpDG,eAAAA,CAAe,GAAI,CAAA,CAAC,QACnB,qBAAAH,cAAA;AAAA,kBAACI,qBAAA;AAAA,kBAAA;AAAA,oBAEC,QAAA;AAAA,oBACA,gBAAA;AAAA,mBAAA;AAAA,kBAFK,QAAS,CAAA,EAAA;AAAA,iBAIjB,CAAA;AAAA,eACH,EAAA,CAAA,CAAA;AAAA,aAEJ;AAAA,WAAA;AAAA,SACF;AAAA,OAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var layoutTileCss = ".vuuLayoutTile-layoutTile {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 0px;\n flex: 1 1 auto;\n cursor: pointer;\n}\n\n.vuuLayoutTile-layoutName {\n color: var(--light-text-primary, #15171B);\n font-weight: 600;\n line-height: 133.333%;\n text-transform: capitalize;\n}\n\n.vuuLayoutTile-screenshot {\n width: 60px;\n height: 45.6px;\n border: 1px solid #D6D7DA;\n}\n\n.vuuLayoutTile-layoutDetails {\n color: var(--light-text-secondary, #606477);\n font-size: 10px;\n font-weight: 600;\n line-height: 150%;\n}\n";
4
+
5
+ module.exports = layoutTileCss;
6
+ //# sourceMappingURL=LayoutTile.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutTile.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var styles = require('@salt-ds/styles');
5
+ var window = require('@salt-ds/window');
6
+ var LayoutTile$1 = require('./LayoutTile.css.js');
7
+
8
+ const classBase = "vuuLayoutTile";
9
+ const LayoutTile = (props) => {
10
+ const { metadata, handleLoadLayout } = props;
11
+ const targetWindow = window.useWindow();
12
+ styles.useComponentCssInjection({
13
+ testId: "vuu-layout-tile",
14
+ css: LayoutTile$1,
15
+ window: targetWindow
16
+ });
17
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { role: "listitem", children: /* @__PURE__ */ jsxRuntime.jsxs(
18
+ "div",
19
+ {
20
+ className: `${classBase}-layoutTile`,
21
+ role: "button",
22
+ onClick: () => handleLoadLayout(metadata?.id),
23
+ children: [
24
+ /* @__PURE__ */ jsxRuntime.jsx("img", { className: `${classBase}-screenshot`, src: metadata?.screenshot }),
25
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
26
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-layoutName`, children: metadata?.name }),
27
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-layoutDetails`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: `${metadata?.user}, ${metadata?.created}` }) })
28
+ ] })
29
+ ]
30
+ },
31
+ metadata?.id
32
+ ) });
33
+ };
34
+
35
+ exports.LayoutTile = LayoutTile;
36
+ //# sourceMappingURL=LayoutTile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutTile.js","sources":["../../src/layout-management/LayoutTile.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { LayoutMetadata } from \"./layoutTypes\";\n\nimport layoutTileCss from \"./LayoutTile.css\";\n\nconst classBase = \"vuuLayoutTile\";\n\ntype LayoutTileProps = {\n metadata: LayoutMetadata;\n handleLoadLayout: (layoutId?: string) => void;\n};\n\nexport const LayoutTile = (props: LayoutTileProps) => {\n const { metadata, handleLoadLayout } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-layout-tile\",\n css: layoutTileCss,\n window: targetWindow,\n });\n\n return (\n <div role=\"listitem\">\n <div\n className={`${classBase}-layoutTile`}\n key={metadata?.id}\n role=\"button\"\n onClick={() => handleLoadLayout(metadata?.id)}\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?.user}, ${metadata?.created}`}</div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","layoutTileCss","jsx","jsxs"],"mappings":";;;;;;;AAMA,MAAM,SAAY,GAAA,eAAA,CAAA;AAOL,MAAA,UAAA,GAAa,CAAC,KAA2B,KAAA;AACpD,EAAM,MAAA,EAAE,QAAU,EAAA,gBAAA,EAAqB,GAAA,KAAA,CAAA;AACvC,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EACE,uBAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,IAAA,EAAK,UACR,EAAA,QAAA,kBAAAC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,SAAS,CAAA,WAAA,CAAA;AAAA,MAEvB,IAAK,EAAA,QAAA;AAAA,MACL,OAAS,EAAA,MAAM,gBAAiB,CAAA,QAAA,EAAU,EAAE,CAAA;AAAA,MAE5C,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAAC,SAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAe,WAAA,CAAA,EAAA,GAAA,EAAK,UAAU,UAAY,EAAA,CAAA;AAAA,wCACrE,KACC,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAAA,cAAA,CAAC,SAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,WAAA,CAAA,EAAgB,oBAAU,IAAK,EAAA,CAAA;AAAA,0BAC1DA,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,cAAA,CAAA,EAAA,QAAA,kBAAAA,cAAA,CAAC,KAAK,EAAA,EAAA,QAAA,EAAA,CAAA,EAAG,UAAU,IAAI,CAAA,EAAA,EAAK,QAAU,EAAA,OAAO,IAAG,CAClD,EAAA,CAAA;AAAA,SACF,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,IAVK,QAAU,EAAA,EAAA;AAAA,GAYnB,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var saveLayoutPanelCss = ".saveLayoutPanel {\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\n.spinner{\n width: 100px;\n height:100px;\n background-image: var(--svg-spinner);\n}\n\n.saveLayoutPanel-panelContainer {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.saveLayoutPanel-panelContent {\n display: flex;\n align-items: flex-start;\n gap: 32px;\n}\n\n.saveLayoutPanel-formContainer {\n display: flex;\n width: 217px;\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n}\n\n.saveLayoutPanel-formField {\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.saveLayoutPanel-inputText {\n border: none;\n color: var(--light-text-primary, #15171B);\n font-family: Nunito Sans A-Variant, serif;\n font-feature-settings: 'ss02' on, 'ss01' on, 'salt' on, 'liga' off;\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.saveLayoutPanel-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.saveLayoutPanel-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.saveLayoutPanel-screenshot {\n background: lightgray 50% / cover no-repeat;\n width: 273px;\n height: 186px;\n}\n\n.saveLayoutPanel-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.saveLayoutPanel-cancelButton,\n.saveLayoutPanel-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\n.saveLayoutPanel-cancelButton {\n color: var(--actionable-primary-foreground-default, #606477);\n background: var(--actionable-primary-background-default, #FFF);\n}\n\n.saveLayoutPanel-saveButton {\n background: #6D18BD;\n border-color: #6D18BD;\n color: white;\n}\n\n.saveLayoutPanel-saveButton.saltButton:disabled {\n background: #6D18BD;\n border-color: #6D18BD;\n color: white;\n opacity: 0.3;\n}\n\n.saveLayoutPanel-saveButton.saltButton:hover {\n background: #F37880;\n border-color: #F37880;\n color: white;\n}\n";
4
+
5
+ module.exports = saveLayoutPanelCss;
6
+ //# sourceMappingURL=SaveLayoutPanel.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaveLayoutPanel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,149 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var screenshotUtils = require('./screenshot-utils.js');
8
+ var core = require('@salt-ds/core');
9
+ var React = require('react');
10
+ require('clsx');
11
+ var loginUtils = require('../login/login-utils.js');
12
+ var SaveLayoutPanel$1 = require('./SaveLayoutPanel.css.js');
13
+
14
+ const classBase = "saveLayoutPanel";
15
+ const formField = `${classBase}-formField`;
16
+ const groups = ["Group 1", "Group 2", "Group 3", "Group 4", "Group 5"];
17
+ const checkboxValues = ["Value 1", "Value 2", "Value 3"];
18
+ const radioValues = ["Value 1", "Value 2", "Value 3"];
19
+ const SaveLayoutPanel = (props) => {
20
+ const { defaultTitle = "", onCancel, onSave, componentId } = props;
21
+ const targetWindow = window.useWindow();
22
+ styles.useComponentCssInjection({
23
+ testId: "vuu-save-layout-panel",
24
+ css: SaveLayoutPanel$1,
25
+ window: targetWindow
26
+ });
27
+ const [layoutName, setLayoutName] = React.useState(defaultTitle);
28
+ const [group, setGroup] = React.useState("");
29
+ const [checkValues, setCheckValues] = React.useState([]);
30
+ const [radioValue, setRadioValue] = React.useState(radioValues[0]);
31
+ const [screenshot, setScreenshot] = React.useState();
32
+ const [screenshotErrorMessage, setScreenshotErrorMessage] = React.useState();
33
+ const [username] = loginUtils.getAuthDetailsFromCookies();
34
+ React.useEffect(() => {
35
+ if (componentId) {
36
+ screenshotUtils.takeScreenshot(document.getElementById(componentId)).then((screenshot2) => {
37
+ setScreenshot(screenshot2);
38
+ }).catch((error) => {
39
+ setScreenshotErrorMessage(error.message);
40
+ });
41
+ }
42
+ }, [componentId]);
43
+ const handleSubmit = () => {
44
+ onSave({
45
+ name: layoutName,
46
+ group,
47
+ screenshot: screenshot ?? "",
48
+ user: username
49
+ });
50
+ };
51
+ const screenshotContent = React.useMemo(() => {
52
+ if (screenshot) {
53
+ return /* @__PURE__ */ jsxRuntime.jsx(
54
+ "img",
55
+ {
56
+ className: `${classBase}-screenshot`,
57
+ src: screenshot,
58
+ alt: "screenshot of current layout"
59
+ }
60
+ );
61
+ }
62
+ if (screenshotErrorMessage) {
63
+ return /* @__PURE__ */ jsxRuntime.jsx(core.Text, { children: screenshotErrorMessage });
64
+ }
65
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "spinner" });
66
+ }, [screenshot, screenshotErrorMessage]);
67
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-panelContainer`, children: [
68
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-panelContent`, children: [
69
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-formContainer`, children: [
70
+ /* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { className: formField, children: [
71
+ /* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Group" }),
72
+ /* @__PURE__ */ jsxRuntime.jsx(
73
+ vuuUiControls.ComboBox,
74
+ {
75
+ source: groups,
76
+ allowFreeText: true,
77
+ InputProps: {
78
+ inputProps: {
79
+ className: `${classBase}-inputText`,
80
+ placeholder: "Select Group or Enter New Name",
81
+ onChange: (event) => setGroup(event.target.value)
82
+ }
83
+ },
84
+ width: "100%",
85
+ onSelectionChange: (_, value) => setGroup(value || "")
86
+ }
87
+ )
88
+ ] }),
89
+ /* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { className: formField, children: [
90
+ /* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Layout Name" }),
91
+ /* @__PURE__ */ jsxRuntime.jsx(
92
+ core.Input,
93
+ {
94
+ inputProps: {
95
+ className: `${classBase}-inputText`,
96
+ placeholder: "Enter Layout Name"
97
+ },
98
+ onChange: (event) => setLayoutName(event.target.value),
99
+ value: layoutName
100
+ }
101
+ )
102
+ ] }),
103
+ /* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { className: formField, children: [
104
+ /* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Some Layout Setting" }),
105
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-settingsGroup`, children: checkboxValues.map((value, i) => /* @__PURE__ */ jsxRuntime.jsx(
106
+ vuuUiControls.Checkbox,
107
+ {
108
+ onToggle: () => setCheckValues(
109
+ (prev) => prev.includes(value) ? prev.filter((entry) => entry !== value) : [...prev, value]
110
+ ),
111
+ checked: checkValues.includes(value),
112
+ label: value
113
+ },
114
+ i
115
+ )) })
116
+ ] }),
117
+ /* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { className: formField, children: [
118
+ /* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Some Layout Setting" }),
119
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-settingsGroup`, children: radioValues.map((value, i) => /* @__PURE__ */ jsxRuntime.jsx(
120
+ vuuUiControls.RadioButton,
121
+ {
122
+ onClick: () => setRadioValue(value),
123
+ checked: radioValue === value,
124
+ label: value,
125
+ groupName: "radioGroup"
126
+ },
127
+ i
128
+ )) })
129
+ ] })
130
+ ] }),
131
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-screenshotContainer`, children: screenshotContent })
132
+ ] }),
133
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-buttonsContainer`, children: [
134
+ /* @__PURE__ */ jsxRuntime.jsx(core.Button, { className: `${classBase}-cancelButton`, onClick: onCancel, children: "Cancel" }),
135
+ /* @__PURE__ */ jsxRuntime.jsx(
136
+ core.Button,
137
+ {
138
+ className: `${classBase}-saveButton`,
139
+ onClick: handleSubmit,
140
+ disabled: layoutName === "" || group === "",
141
+ children: "Save"
142
+ }
143
+ )
144
+ ] })
145
+ ] });
146
+ };
147
+
148
+ exports.SaveLayoutPanel = SaveLayoutPanel;
149
+ //# sourceMappingURL=SaveLayoutPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaveLayoutPanel.js","sources":["../../src/layout-management/SaveLayoutPanel.tsx"],"sourcesContent":["import { Checkbox, ComboBox, RadioButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { takeScreenshot } from \"./screenshot-utils\";\nimport { Button, FormField, FormFieldLabel, Input, Text } from \"@salt-ds/core\";\nimport { ChangeEvent, useEffect, useMemo, useState } from \"react\";\nimport { LayoutMetadataDto } from \"./layoutTypes\";\nimport { getAuthDetailsFromCookies } from \"../login\";\n\nimport saveLayoutPanelCss from \"./SaveLayoutPanel.css\";\n\nconst classBase = \"saveLayoutPanel\";\nconst formField = `${classBase}-formField`;\n\nconst groups = [\"Group 1\", \"Group 2\", \"Group 3\", \"Group 4\", \"Group 5\"];\n\nconst checkboxValues = [\"Value 1\", \"Value 2\", \"Value 3\"];\n\nconst radioValues = [\"Value 1\", \"Value 2\", \"Value 3\"] as const;\n\ntype RadioValue = (typeof radioValues)[number];\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 [checkValues, setCheckValues] = useState<string[]>([]);\n const [radioValue, setRadioValue] = useState<RadioValue>(radioValues[0]);\n const [screenshot, setScreenshot] = useState<string | undefined>();\n const [screenshotErrorMessage, setScreenshotErrorMessage] = useState<\n string | undefined\n >();\n const [username] = getAuthDetailsFromCookies();\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 return (\n <div className={`${classBase}-panelContainer`}>\n <div className={`${classBase}-panelContent`}>\n <div className={`${classBase}-formContainer`}>\n <FormField className={formField}>\n <FormFieldLabel>Group</FormFieldLabel>\n <ComboBox\n source={groups}\n allowFreeText\n InputProps={{\n inputProps: {\n className: `${classBase}-inputText`,\n placeholder: \"Select Group or Enter New Name\",\n onChange: (event: ChangeEvent<HTMLInputElement>) =>\n setGroup(event.target.value),\n },\n }}\n width=\"100%\"\n onSelectionChange={(_, value) => setGroup(value || \"\")}\n />\n </FormField>\n <FormField className={formField}>\n <FormFieldLabel>Layout Name</FormFieldLabel>\n <Input\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 <FormField className={formField}>\n <FormFieldLabel>Some Layout Setting</FormFieldLabel>\n <div className={`${classBase}-settingsGroup`}>\n {checkboxValues.map((value, i) => (\n <Checkbox\n key={i}\n onToggle={() =>\n setCheckValues((prev) =>\n prev.includes(value)\n ? prev.filter((entry) => entry !== value)\n : [...prev, value]\n )\n }\n checked={checkValues.includes(value)}\n label={value}\n />\n ))}\n </div>\n </FormField>\n <FormField className={formField}>\n <FormFieldLabel>Some Layout Setting</FormFieldLabel>\n <div className={`${classBase}-settingsGroup`}>\n {radioValues.map((value, i) => (\n <RadioButton\n key={i}\n onClick={() => setRadioValue(value)}\n checked={radioValue === value}\n label={value}\n groupName=\"radioGroup\"\n />\n ))}\n </div>\n </FormField>\n </div>\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 className={`${classBase}-saveButton`}\n onClick={handleSubmit}\n disabled={layoutName === \"\" || group === \"\"}\n >\n Save\n </Button>\n </div>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","saveLayoutPanelCss","useState","getAuthDetailsFromCookies","useEffect","takeScreenshot","screenshot","useMemo","jsx","Text","jsxs","FormField","FormFieldLabel","ComboBox","Input","Checkbox","RadioButton","Button"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var htmlToImage = require('html-to-image');
4
+
5
+ const takeScreenshot = (node) => {
6
+ return new Promise((resolve, reject) => {
7
+ htmlToImage.toPng(node, {
8
+ cacheBust: true
9
+ }).then((screenshot) => {
10
+ if (!screenshot) {
11
+ reject(new Error("No Screenshot available"));
12
+ }
13
+ resolve(screenshot);
14
+ }).catch((error) => {
15
+ console.error(
16
+ "the following error occurred while taking a screenshot of a DOMNode",
17
+ error
18
+ );
19
+ reject(new Error("Error taking screenshot"));
20
+ });
21
+ });
22
+ };
23
+
24
+ exports.takeScreenshot = takeScreenshot;
25
+ //# sourceMappingURL=screenshot-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot-utils.js","sources":["../../src/layout-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":["toPng"],"mappings":";;;;AAOa,MAAA,cAAA,GAAiB,CAAC,IAAuC,KAAA;AACpE,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAAA,iBAAA,CAAM,IAAM,EAAA;AAAA,MACV,SAAW,EAAA,IAAA;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,CAAA;AAAA,OAC7C;AACA,MAAA,OAAA,CAAQ,UAAU,CAAA,CAAA;AAAA,KACnB,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,qEAAA;AAAA,QACA,KAAA;AAAA,OACF,CAAA;AACA,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA,CAAA;AAAA,KAC5C,CAAA,CAAA;AAAA,GACJ,CAAA,CAAA;AACH;;;;"}
@@ -0,0 +1,72 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var useLayoutManager = require('./useLayoutManager.js');
6
+ var SaveLayoutPanel = require('./SaveLayoutPanel.js');
7
+
8
+ const useLayoutContextMenuItems = (setDialogState) => {
9
+ const { saveLayout } = useLayoutManager.useLayoutManager();
10
+ const handleCloseDialog = React.useCallback(() => {
11
+ setDialogState(void 0);
12
+ }, [setDialogState]);
13
+ const handleSave = React.useCallback(
14
+ (layoutMetadata) => {
15
+ saveLayout(layoutMetadata);
16
+ setDialogState(void 0);
17
+ },
18
+ [saveLayout, setDialogState]
19
+ );
20
+ const [buildMenuOptions, handleMenuAction] = React.useMemo(() => {
21
+ return [
22
+ (location, options) => {
23
+ const locations = location.split(" ");
24
+ const menuDescriptors = [];
25
+ if (locations.includes("main-tab")) {
26
+ menuDescriptors.push(
27
+ {
28
+ label: "Save Layout",
29
+ action: "save-layout",
30
+ options
31
+ },
32
+ {
33
+ label: "Layout Settings",
34
+ action: "layout-settings",
35
+ options
36
+ }
37
+ );
38
+ }
39
+ return menuDescriptors;
40
+ },
41
+ (action) => {
42
+ console.log("menu action", {
43
+ action
44
+ });
45
+ if (action.menuId === "save-layout") {
46
+ setDialogState({
47
+ content: /* @__PURE__ */ jsxRuntime.jsx(
48
+ SaveLayoutPanel.SaveLayoutPanel,
49
+ {
50
+ onCancel: handleCloseDialog,
51
+ onSave: handleSave,
52
+ componentId: action.options?.controlledComponentId,
53
+ defaultTitle: action.options?.controlledComponentTitle
54
+ }
55
+ ),
56
+ title: "Save Layout",
57
+ hideCloseButton: true
58
+ });
59
+ return true;
60
+ }
61
+ return false;
62
+ }
63
+ ];
64
+ }, [handleCloseDialog, handleSave, setDialogState]);
65
+ return {
66
+ buildMenuOptions,
67
+ handleMenuAction
68
+ };
69
+ };
70
+
71
+ exports.useLayoutContextMenuItems = useLayoutContextMenuItems;
72
+ //# sourceMappingURL=useLayoutContextMenuItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLayoutContextMenuItems.js","sources":["../../src/layout-management/useLayoutContextMenuItems.tsx"],"sourcesContent":["import {\n ContextMenuItemDescriptor,\n MenuActionHandler,\n MenuBuilder,\n} from \"@vuu-ui/vuu-data-types\";\nimport { useCallback, useMemo } from \"react\";\nimport { MenuActionClosePopup, SetDialog } from \"@vuu-ui/vuu-popups\";\nimport { useLayoutManager } from \"./useLayoutManager\";\nimport { LayoutMetadataDto } from \"./layoutTypes\";\nimport { SaveLayoutPanel } from \"./SaveLayoutPanel\";\n\nexport const useLayoutContextMenuItems = (setDialogState: SetDialog) => {\n const { saveLayout } = useLayoutManager();\n\n const handleCloseDialog = useCallback(() => {\n setDialogState(undefined);\n }, [setDialogState]);\n\n const handleSave = useCallback(\n (layoutMetadata: LayoutMetadataDto) => {\n saveLayout(layoutMetadata);\n setDialogState(undefined);\n },\n [saveLayout, setDialogState]\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(\"main-tab\")) {\n menuDescriptors.push(\n {\n label: \"Save Layout\",\n action: \"save-layout\",\n options,\n },\n {\n label: \"Layout Settings\",\n action: \"layout-settings\",\n options,\n }\n );\n }\n return menuDescriptors;\n },\n (action: MenuActionClosePopup) => {\n console.log(\"menu action\", {\n action,\n });\n if (action.menuId === \"save-layout\") {\n setDialogState({\n content: (\n <SaveLayoutPanel\n onCancel={handleCloseDialog}\n onSave={handleSave}\n componentId={action.options?.controlledComponentId}\n defaultTitle={\n action.options?.controlledComponentTitle as string\n }\n />\n ),\n title: \"Save Layout\",\n hideCloseButton: true,\n });\n return true;\n }\n return false;\n },\n ];\n }, [handleCloseDialog, handleSave, setDialogState]);\n\n return {\n buildMenuOptions,\n handleMenuAction,\n };\n};\n"],"names":["useLayoutManager","useCallback","useMemo","jsx","SaveLayoutPanel"],"mappings":";;;;;;;AAWa,MAAA,yBAAA,GAA4B,CAAC,cAA8B,KAAA;AACtE,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,iCAAiB,EAAA,CAAA;AAExC,EAAM,MAAA,iBAAA,GAAoBC,kBAAY,MAAM;AAC1C,IAAA,cAAA,CAAe,KAAS,CAAA,CAAA,CAAA;AAAA,GAC1B,EAAG,CAAC,cAAc,CAAC,CAAA,CAAA;AAEnB,EAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,IACjB,CAAC,cAAsC,KAAA;AACrC,MAAA,UAAA,CAAW,cAAc,CAAA,CAAA;AACzB,MAAA,cAAA,CAAe,KAAS,CAAA,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,YAAY,cAAc,CAAA;AAAA,GAC7B,CAAA;AAEA,EAAA,MAAM,CAAC,gBAAA,EAAkB,gBAAgB,CAAA,GAAIC,cAE3C,MAAM;AACN,IAAO,OAAA;AAAA,MACL,CAAC,UAAU,OAAY,KAAA;AACrB,QAAM,MAAA,SAAA,GAAY,QAAS,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AACpC,QAAA,MAAM,kBAA+C,EAAC,CAAA;AACtD,QAAI,IAAA,SAAA,CAAU,QAAS,CAAA,UAAU,CAAG,EAAA;AAClC,UAAgB,eAAA,CAAA,IAAA;AAAA,YACd;AAAA,cACE,KAAO,EAAA,aAAA;AAAA,cACP,MAAQ,EAAA,aAAA;AAAA,cACR,OAAA;AAAA,aACF;AAAA,YACA;AAAA,cACE,KAAO,EAAA,iBAAA;AAAA,cACP,MAAQ,EAAA,iBAAA;AAAA,cACR,OAAA;AAAA,aACF;AAAA,WACF,CAAA;AAAA,SACF;AACA,QAAO,OAAA,eAAA,CAAA;AAAA,OACT;AAAA,MACA,CAAC,MAAiC,KAAA;AAChC,QAAA,OAAA,CAAQ,IAAI,aAAe,EAAA;AAAA,UACzB,MAAA;AAAA,SACD,CAAA,CAAA;AACD,QAAI,IAAA,MAAA,CAAO,WAAW,aAAe,EAAA;AACnC,UAAe,cAAA,CAAA;AAAA,YACb,OACE,kBAAAC,cAAA;AAAA,cAACC,+BAAA;AAAA,cAAA;AAAA,gBACC,QAAU,EAAA,iBAAA;AAAA,gBACV,MAAQ,EAAA,UAAA;AAAA,gBACR,WAAA,EAAa,OAAO,OAAS,EAAA,qBAAA;AAAA,gBAC7B,YAAA,EACE,OAAO,OAAS,EAAA,wBAAA;AAAA,eAAA;AAAA,aAEpB;AAAA,YAEF,KAAO,EAAA,aAAA;AAAA,YACP,eAAiB,EAAA,IAAA;AAAA,WAClB,CAAA,CAAA;AACD,UAAO,OAAA,IAAA,CAAA;AAAA,SACT;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF,CAAA;AAAA,GACC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,cAAc,CAAC,CAAA,CAAA;AAElD,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA,gBAAA;AAAA,GACF,CAAA;AACF;;;;"}