@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.
- package/LICENSE +201 -0
- package/README.md +0 -0
- package/cjs/ShellContextProvider.js +31 -0
- package/cjs/ShellContextProvider.js.map +1 -0
- package/cjs/app-header/AppHeader.css.js +6 -0
- package/cjs/app-header/AppHeader.css.js.map +1 -0
- package/cjs/app-header/AppHeader.js +66 -0
- package/cjs/app-header/AppHeader.js.map +1 -0
- package/cjs/connection-status/ConnectionStatusIndicator.css.js +6 -0
- package/cjs/connection-status/ConnectionStatusIndicator.css.js.map +1 -0
- package/cjs/connection-status/ConnectionStatusIndicator.js +51 -0
- package/cjs/connection-status/ConnectionStatusIndicator.js.map +1 -0
- package/cjs/feature/Feature.js +56 -0
- package/cjs/feature/Feature.js.map +1 -0
- package/cjs/feature/FeatureErrorBoundary.js +30 -0
- package/cjs/feature/FeatureErrorBoundary.js.map +1 -0
- package/cjs/feature/Loader.js +8 -0
- package/cjs/feature/Loader.js.map +1 -0
- package/cjs/feature-list/FeatureList.css.js +6 -0
- package/cjs/feature-list/FeatureList.css.js.map +1 -0
- package/cjs/feature-list/FeatureList.js +52 -0
- package/cjs/feature-list/FeatureList.js.map +1 -0
- package/cjs/index.js +51 -0
- package/cjs/index.js.map +1 -0
- package/cjs/layout-management/LayoutList.css.js +6 -0
- package/cjs/layout-management/LayoutList.css.js.map +1 -0
- package/cjs/layout-management/LayoutList.js +75 -0
- package/cjs/layout-management/LayoutList.js.map +1 -0
- package/cjs/layout-management/LayoutTile.css.js +6 -0
- package/cjs/layout-management/LayoutTile.css.js.map +1 -0
- package/cjs/layout-management/LayoutTile.js +36 -0
- package/cjs/layout-management/LayoutTile.js.map +1 -0
- package/cjs/layout-management/SaveLayoutPanel.css.js +6 -0
- package/cjs/layout-management/SaveLayoutPanel.css.js.map +1 -0
- package/cjs/layout-management/SaveLayoutPanel.js +149 -0
- package/cjs/layout-management/SaveLayoutPanel.js.map +1 -0
- package/cjs/layout-management/screenshot-utils.js +25 -0
- package/cjs/layout-management/screenshot-utils.js.map +1 -0
- package/cjs/layout-management/useLayoutContextMenuItems.js +72 -0
- package/cjs/layout-management/useLayoutContextMenuItems.js.map +1 -0
- package/cjs/layout-management/useLayoutManager.js +218 -0
- package/cjs/layout-management/useLayoutManager.js.map +1 -0
- package/cjs/left-nav/LeftNav.css.js +6 -0
- package/cjs/left-nav/LeftNav.css.js.map +1 -0
- package/cjs/left-nav/LeftNav.js +166 -0
- package/cjs/left-nav/LeftNav.js.map +1 -0
- package/cjs/login/LoginPanel.css.js +6 -0
- package/cjs/login/LoginPanel.css.js.map +1 -0
- package/cjs/login/LoginPanel.js +108 -0
- package/cjs/login/LoginPanel.js.map +1 -0
- package/cjs/login/VuuLogo.js +134 -0
- package/cjs/login/VuuLogo.js.map +1 -0
- package/cjs/login/login-utils.js +31 -0
- package/cjs/login/login-utils.js.map +1 -0
- package/cjs/persistence-management/LocalPersistenceManager.js +184 -0
- package/cjs/persistence-management/LocalPersistenceManager.js.map +1 -0
- package/cjs/persistence-management/RemotePersistenceManager.js +164 -0
- package/cjs/persistence-management/RemotePersistenceManager.js.map +1 -0
- package/cjs/persistence-management/defaultApplicationJson.js +42 -0
- package/cjs/persistence-management/defaultApplicationJson.js.map +1 -0
- package/cjs/session-editing-form/SessionEditingForm.css.js +6 -0
- package/cjs/session-editing-form/SessionEditingForm.css.js.map +1 -0
- package/cjs/session-editing-form/SessionEditingForm.js +280 -0
- package/cjs/session-editing-form/SessionEditingForm.js.map +1 -0
- package/cjs/shell-layouts/context-panel/ContextPanel.css.js +6 -0
- package/cjs/shell-layouts/context-panel/ContextPanel.css.js.map +1 -0
- package/cjs/shell-layouts/context-panel/ContextPanel.js +70 -0
- package/cjs/shell-layouts/context-panel/ContextPanel.js.map +1 -0
- package/cjs/shell-layouts/side-panel/SidePanel.css.js +6 -0
- package/cjs/shell-layouts/side-panel/SidePanel.css.js.map +1 -0
- package/cjs/shell-layouts/side-panel/SidePanel.js +36 -0
- package/cjs/shell-layouts/side-panel/SidePanel.js.map +1 -0
- package/cjs/shell-layouts/useFullHeightLeftPanel.js +41 -0
- package/cjs/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
- package/cjs/shell-layouts/useInlayLeftPanel.js +78 -0
- package/cjs/shell-layouts/useInlayLeftPanel.js.map +1 -0
- package/cjs/shell-layouts/useShellLayout.js +15 -0
- package/cjs/shell-layouts/useShellLayout.js.map +1 -0
- package/cjs/shell.css.js +6 -0
- package/cjs/shell.css.js.map +1 -0
- package/cjs/shell.js +137 -0
- package/cjs/shell.js.map +1 -0
- package/cjs/shellTypes.js +8 -0
- package/cjs/shellTypes.js.map +1 -0
- package/cjs/theme-switch/ThemeSwitch.css.js +6 -0
- package/cjs/theme-switch/ThemeSwitch.css.js.map +1 -0
- package/cjs/theme-switch/ThemeSwitch.js +56 -0
- package/cjs/theme-switch/ThemeSwitch.js.map +1 -0
- package/esm/ShellContextProvider.js +28 -0
- package/esm/ShellContextProvider.js.map +1 -0
- package/esm/app-header/AppHeader.css.js +4 -0
- package/esm/app-header/AppHeader.css.js.map +1 -0
- package/esm/app-header/AppHeader.js +64 -0
- package/esm/app-header/AppHeader.js.map +1 -0
- package/esm/connection-status/ConnectionStatusIndicator.css.js +4 -0
- package/esm/connection-status/ConnectionStatusIndicator.css.js.map +1 -0
- package/esm/connection-status/ConnectionStatusIndicator.js +49 -0
- package/esm/connection-status/ConnectionStatusIndicator.js.map +1 -0
- package/esm/feature/Feature.js +54 -0
- package/esm/feature/Feature.js.map +1 -0
- package/esm/feature/FeatureErrorBoundary.js +28 -0
- package/esm/feature/FeatureErrorBoundary.js.map +1 -0
- package/esm/feature/Loader.js +6 -0
- package/esm/feature/Loader.js.map +1 -0
- package/esm/feature-list/FeatureList.css.js +4 -0
- package/esm/feature-list/FeatureList.css.js.map +1 -0
- package/esm/feature-list/FeatureList.js +50 -0
- package/esm/feature-list/FeatureList.js.map +1 -0
- package/esm/index.js +20 -0
- package/esm/index.js.map +1 -0
- package/esm/layout-management/LayoutList.css.js +4 -0
- package/esm/layout-management/LayoutList.css.js.map +1 -0
- package/esm/layout-management/LayoutList.js +73 -0
- package/esm/layout-management/LayoutList.js.map +1 -0
- package/esm/layout-management/LayoutTile.css.js +4 -0
- package/esm/layout-management/LayoutTile.css.js.map +1 -0
- package/esm/layout-management/LayoutTile.js +34 -0
- package/esm/layout-management/LayoutTile.js.map +1 -0
- package/esm/layout-management/SaveLayoutPanel.css.js +4 -0
- package/esm/layout-management/SaveLayoutPanel.css.js.map +1 -0
- package/esm/layout-management/SaveLayoutPanel.js +147 -0
- package/esm/layout-management/SaveLayoutPanel.js.map +1 -0
- package/esm/layout-management/screenshot-utils.js +23 -0
- package/esm/layout-management/screenshot-utils.js.map +1 -0
- package/esm/layout-management/useLayoutContextMenuItems.js +70 -0
- package/esm/layout-management/useLayoutContextMenuItems.js.map +1 -0
- package/esm/layout-management/useLayoutManager.js +214 -0
- package/esm/layout-management/useLayoutManager.js.map +1 -0
- package/esm/left-nav/LeftNav.css.js +4 -0
- package/esm/left-nav/LeftNav.css.js.map +1 -0
- package/esm/left-nav/LeftNav.js +164 -0
- package/esm/left-nav/LeftNav.js.map +1 -0
- package/esm/login/LoginPanel.css.js +4 -0
- package/esm/login/LoginPanel.css.js.map +1 -0
- package/esm/login/LoginPanel.js +106 -0
- package/esm/login/LoginPanel.js.map +1 -0
- package/esm/login/VuuLogo.js +132 -0
- package/esm/login/VuuLogo.js.map +1 -0
- package/esm/login/login-utils.js +26 -0
- package/esm/login/login-utils.js.map +1 -0
- package/esm/persistence-management/LocalPersistenceManager.js +182 -0
- package/esm/persistence-management/LocalPersistenceManager.js.map +1 -0
- package/esm/persistence-management/RemotePersistenceManager.js +162 -0
- package/esm/persistence-management/RemotePersistenceManager.js.map +1 -0
- package/esm/persistence-management/defaultApplicationJson.js +39 -0
- package/esm/persistence-management/defaultApplicationJson.js.map +1 -0
- package/esm/session-editing-form/SessionEditingForm.css.js +4 -0
- package/esm/session-editing-form/SessionEditingForm.css.js.map +1 -0
- package/esm/session-editing-form/SessionEditingForm.js +278 -0
- package/esm/session-editing-form/SessionEditingForm.js.map +1 -0
- package/esm/shell-layouts/context-panel/ContextPanel.css.js +4 -0
- package/esm/shell-layouts/context-panel/ContextPanel.css.js.map +1 -0
- package/esm/shell-layouts/context-panel/ContextPanel.js +68 -0
- package/esm/shell-layouts/context-panel/ContextPanel.js.map +1 -0
- package/esm/shell-layouts/side-panel/SidePanel.css.js +4 -0
- package/esm/shell-layouts/side-panel/SidePanel.css.js.map +1 -0
- package/esm/shell-layouts/side-panel/SidePanel.js +34 -0
- package/esm/shell-layouts/side-panel/SidePanel.js.map +1 -0
- package/esm/shell-layouts/useFullHeightLeftPanel.js +39 -0
- package/esm/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
- package/esm/shell-layouts/useInlayLeftPanel.js +76 -0
- package/esm/shell-layouts/useInlayLeftPanel.js.map +1 -0
- package/esm/shell-layouts/useShellLayout.js +13 -0
- package/esm/shell-layouts/useShellLayout.js.map +1 -0
- package/esm/shell.css.js +4 -0
- package/esm/shell.css.js.map +1 -0
- package/esm/shell.js +135 -0
- package/esm/shell.js.map +1 -0
- package/esm/shellTypes.js +5 -0
- package/esm/shellTypes.js.map +1 -0
- package/esm/theme-switch/ThemeSwitch.css.js +4 -0
- package/esm/theme-switch/ThemeSwitch.css.js.map +1 -0
- package/esm/theme-switch/ThemeSwitch.js +54 -0
- package/esm/theme-switch/ThemeSwitch.js.map +1 -0
- package/package.json +48 -0
- package/types/ShellContextProvider.d.ts +16 -0
- package/types/app-header/AppHeader.d.ts +12 -0
- package/types/app-header/index.d.ts +1 -0
- package/types/connection-status/ConnectionStatusIndicator.d.ts +10 -0
- package/types/connection-status/index.d.ts +1 -0
- package/types/feature/Feature.d.ts +26 -0
- package/types/feature/FeatureErrorBoundary.d.ts +13 -0
- package/types/feature/Loader.d.ts +2 -0
- package/types/feature/index.d.ts +1 -0
- package/types/feature-list/FeatureList.d.ts +6 -0
- package/types/feature-list/index.d.ts +1 -0
- package/types/get-layout-history.d.ts +8 -0
- package/types/index.d.ts +13 -0
- package/types/layout-management/LayoutList.d.ts +2 -0
- package/types/layout-management/LayoutTile.d.ts +8 -0
- package/types/layout-management/SaveLayoutPanel.d.ts +10 -0
- package/types/layout-management/index.d.ts +5 -0
- package/types/layout-management/layoutTypes.d.ts +19 -0
- package/types/layout-management/screenshot-utils.d.ts +6 -0
- package/types/layout-management/useLayoutContextMenuItems.d.ts +6 -0
- package/types/layout-management/useLayoutManager.d.ts +26 -0
- package/types/left-nav/LeftNav.d.ts +17 -0
- package/types/left-nav/index.d.ts +1 -0
- package/types/login/LoginPanel.d.ts +7 -0
- package/types/login/VuuLogo.d.ts +2 -0
- package/types/login/index.d.ts +2 -0
- package/types/login/login-utils.d.ts +4 -0
- package/types/persistence-management/LocalPersistenceManager.d.ts +21 -0
- package/types/persistence-management/PersistenceManager.d.ts +55 -0
- package/types/persistence-management/RemotePersistenceManager.d.ts +22 -0
- package/types/persistence-management/defaultApplicationJson.d.ts +4 -0
- package/types/persistence-management/index.d.ts +4 -0
- package/types/session-editing-form/SessionEditingForm.d.ts +24 -0
- package/types/session-editing-form/index.d.ts +1 -0
- package/types/shell-layouts/context-panel/ContextPanel.d.ts +10 -0
- package/types/shell-layouts/context-panel/index.d.ts +1 -0
- package/types/shell-layouts/index.d.ts +3 -0
- package/types/shell-layouts/side-panel/SidePanel.d.ts +8 -0
- package/types/shell-layouts/side-panel/index.d.ts +1 -0
- package/types/shell-layouts/useFullHeightLeftPanel.d.ts +3 -0
- package/types/shell-layouts/useInlayLeftPanel.d.ts +3 -0
- package/types/shell-layouts/useShellLayout.d.ts +10 -0
- package/types/shell.d.ts +21 -0
- package/types/shellTypes.d.ts +29 -0
- package/types/theme-switch/ThemeSwitch.d.ts +8 -0
- package/types/theme-switch/index.d.ts +1 -0
- 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
|
package/cjs/index.js.map
ADDED
|
@@ -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;;;;"}
|