@vuu-ui/vuu-shell 0.8.32 → 0.8.34
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/cjs/app-header/AppHeader.css +24 -0
- package/cjs/connection-status/ConnectionStatusIcon.css +68 -0
- package/cjs/feature-list/FeatureList.css +21 -0
- package/cjs/layout-management/LayoutList.css +86 -0
- package/cjs/layout-management/LayoutTile.css +28 -0
- package/cjs/layout-management/SaveLayoutPanel.css +130 -0
- package/cjs/left-nav/LeftNav.css +178 -0
- package/cjs/login/LoginPanel.css +70 -0
- package/cjs/node_modules/html-to-image/es/apply-style.js +24 -0
- package/cjs/node_modules/html-to-image/es/apply-style.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/clone-node.js +185 -0
- package/cjs/node_modules/html-to-image/es/clone-node.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/clone-pseudos.js +48 -0
- package/cjs/node_modules/html-to-image/es/clone-pseudos.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/dataurl.js +83 -0
- package/cjs/node_modules/html-to-image/es/dataurl.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/embed-images.js +68 -0
- package/cjs/node_modules/html-to-image/es/embed-images.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/embed-resources.js +74 -0
- package/cjs/node_modules/html-to-image/es/embed-resources.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/embed-webfonts.js +187 -0
- package/cjs/node_modules/html-to-image/es/embed-webfonts.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/index.js +49 -0
- package/cjs/node_modules/html-to-image/es/index.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/mimes.js +28 -0
- package/cjs/node_modules/html-to-image/es/mimes.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/util.js +166 -0
- package/cjs/node_modules/html-to-image/es/util.js.map +1 -0
- package/cjs/packages/vuu-shell/src/ShellContextProvider.js +31 -0
- package/cjs/packages/vuu-shell/src/ShellContextProvider.js.map +1 -0
- package/cjs/packages/vuu-shell/src/app-header/AppHeader.js +57 -0
- package/cjs/packages/vuu-shell/src/app-header/AppHeader.js.map +1 -0
- package/cjs/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js +42 -0
- package/cjs/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/Feature.js +56 -0
- package/cjs/packages/vuu-shell/src/feature/Feature.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/FeatureErrorBoundary.js +30 -0
- package/cjs/packages/vuu-shell/src/feature/FeatureErrorBoundary.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/Loader.js +8 -0
- package/cjs/packages/vuu-shell/src/feature/Loader.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/css-module-loader.js +9 -0
- package/cjs/packages/vuu-shell/src/feature/css-module-loader.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature-list/FeatureList.js +43 -0
- package/cjs/packages/vuu-shell/src/feature-list/FeatureList.js.map +1 -0
- package/cjs/packages/vuu-shell/src/index.js +51 -0
- package/cjs/packages/vuu-shell/src/index.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutList.js +66 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutList.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutTile.js +27 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutTile.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js +140 -0
- package/cjs/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/screenshot-utils.js +25 -0
- package/cjs/packages/vuu-shell/src/layout-management/screenshot-utils.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js +72 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutManager.js +218 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutManager.js.map +1 -0
- package/cjs/packages/vuu-shell/src/left-nav/LeftNav.js +156 -0
- package/cjs/packages/vuu-shell/src/left-nav/LeftNav.js.map +1 -0
- package/cjs/packages/vuu-shell/src/login/LoginPanel.js +99 -0
- package/cjs/packages/vuu-shell/src/login/LoginPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/login/VuuLogo.js +134 -0
- package/cjs/packages/vuu-shell/src/login/VuuLogo.js.map +1 -0
- package/cjs/packages/vuu-shell/src/login/login-utils.js +31 -0
- package/cjs/packages/vuu-shell/src/login/login-utils.js.map +1 -0
- package/cjs/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js +183 -0
- package/cjs/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js.map +1 -0
- package/cjs/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js +162 -0
- package/cjs/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js.map +1 -0
- package/cjs/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js +42 -0
- package/cjs/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js.map +1 -0
- package/cjs/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js +271 -0
- package/cjs/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js +61 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js +27 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js +41 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js +78 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useShellLayout.js +15 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useShellLayout.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell.js +129 -0
- package/cjs/packages/vuu-shell/src/shell.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shellTypes.js +8 -0
- package/cjs/packages/vuu-shell/src/shellTypes.js.map +1 -0
- package/cjs/packages/vuu-shell/src/theme-switch/ThemeSwitch.js +47 -0
- package/cjs/packages/vuu-shell/src/theme-switch/ThemeSwitch.js.map +1 -0
- package/cjs/session-editing-form/SessionEditingForm.css +53 -0
- package/cjs/shell-layouts/context-panel/ContextPanel.css +58 -0
- package/cjs/shell-layouts/side-panel/SidePanel.css +4 -0
- package/cjs/shell.css +49 -0
- package/cjs/theme-switch/ThemeSwitch.css +30 -0
- package/esm/app-header/AppHeader.css +24 -0
- package/esm/connection-status/ConnectionStatusIcon.css +68 -0
- package/esm/feature-list/FeatureList.css +21 -0
- package/esm/layout-management/LayoutList.css +86 -0
- package/esm/layout-management/LayoutTile.css +28 -0
- package/esm/layout-management/SaveLayoutPanel.css +130 -0
- package/esm/left-nav/LeftNav.css +178 -0
- package/esm/login/LoginPanel.css +70 -0
- package/esm/node_modules/html-to-image/es/apply-style.js +22 -0
- package/esm/node_modules/html-to-image/es/apply-style.js.map +1 -0
- package/esm/node_modules/html-to-image/es/clone-node.js +183 -0
- package/esm/node_modules/html-to-image/es/clone-node.js.map +1 -0
- package/esm/node_modules/html-to-image/es/clone-pseudos.js +46 -0
- package/esm/node_modules/html-to-image/es/clone-pseudos.js.map +1 -0
- package/esm/node_modules/html-to-image/es/dataurl.js +78 -0
- package/esm/node_modules/html-to-image/es/dataurl.js.map +1 -0
- package/esm/node_modules/html-to-image/es/embed-images.js +66 -0
- package/esm/node_modules/html-to-image/es/embed-images.js.map +1 -0
- package/esm/node_modules/html-to-image/es/embed-resources.js +69 -0
- package/esm/node_modules/html-to-image/es/embed-resources.js.map +1 -0
- package/esm/node_modules/html-to-image/es/embed-webfonts.js +184 -0
- package/esm/node_modules/html-to-image/es/embed-webfonts.js.map +1 -0
- package/esm/node_modules/html-to-image/es/index.js +45 -0
- package/esm/node_modules/html-to-image/es/index.js.map +1 -0
- package/esm/node_modules/html-to-image/es/mimes.js +26 -0
- package/esm/node_modules/html-to-image/es/mimes.js.map +1 -0
- package/esm/node_modules/html-to-image/es/util.js +155 -0
- package/esm/node_modules/html-to-image/es/util.js.map +1 -0
- package/esm/packages/vuu-shell/src/ShellContextProvider.js +28 -0
- package/esm/packages/vuu-shell/src/ShellContextProvider.js.map +1 -0
- package/esm/packages/vuu-shell/src/app-header/AppHeader.js +55 -0
- package/esm/packages/vuu-shell/src/app-header/AppHeader.js.map +1 -0
- package/esm/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js +40 -0
- package/esm/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature/Feature.js +54 -0
- package/esm/packages/vuu-shell/src/feature/Feature.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature/FeatureErrorBoundary.js +28 -0
- package/esm/packages/vuu-shell/src/feature/FeatureErrorBoundary.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature/Loader.js +6 -0
- package/esm/packages/vuu-shell/src/feature/Loader.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature/css-module-loader.js +7 -0
- package/esm/packages/vuu-shell/src/feature/css-module-loader.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature-list/FeatureList.js +41 -0
- package/esm/packages/vuu-shell/src/feature-list/FeatureList.js.map +1 -0
- package/esm/packages/vuu-shell/src/index.js +20 -0
- package/esm/packages/vuu-shell/src/index.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutList.js +64 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutList.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutTile.js +25 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutTile.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js +138 -0
- package/esm/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/screenshot-utils.js +23 -0
- package/esm/packages/vuu-shell/src/layout-management/screenshot-utils.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js +70 -0
- package/esm/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/useLayoutManager.js +214 -0
- package/esm/packages/vuu-shell/src/layout-management/useLayoutManager.js.map +1 -0
- package/esm/packages/vuu-shell/src/left-nav/LeftNav.js +154 -0
- package/esm/packages/vuu-shell/src/left-nav/LeftNav.js.map +1 -0
- package/esm/packages/vuu-shell/src/login/LoginPanel.js +97 -0
- package/esm/packages/vuu-shell/src/login/LoginPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/login/VuuLogo.js +132 -0
- package/esm/packages/vuu-shell/src/login/VuuLogo.js.map +1 -0
- package/esm/packages/vuu-shell/src/login/login-utils.js +26 -0
- package/esm/packages/vuu-shell/src/login/login-utils.js.map +1 -0
- package/esm/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js +181 -0
- package/esm/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js.map +1 -0
- package/esm/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js +160 -0
- package/esm/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js.map +1 -0
- package/esm/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js +39 -0
- package/esm/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js.map +1 -0
- package/esm/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js +269 -0
- package/esm/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js +59 -0
- package/esm/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js +25 -0
- package/esm/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js +39 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js +76 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useShellLayout.js +13 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useShellLayout.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell.js +127 -0
- package/esm/packages/vuu-shell/src/shell.js.map +1 -0
- package/esm/packages/vuu-shell/src/shellTypes.js +5 -0
- package/esm/packages/vuu-shell/src/shellTypes.js.map +1 -0
- package/esm/packages/vuu-shell/src/theme-switch/ThemeSwitch.js +45 -0
- package/esm/packages/vuu-shell/src/theme-switch/ThemeSwitch.js.map +1 -0
- package/esm/session-editing-form/SessionEditingForm.css +53 -0
- package/esm/shell-layouts/context-panel/ContextPanel.css +58 -0
- package/esm/shell-layouts/side-panel/SidePanel.css +4 -0
- package/esm/shell.css +49 -0
- package/esm/theme-switch/ThemeSwitch.css +30 -0
- package/package.json +17 -18
- package/types/ShellContextProvider.d.ts +2 -2
- package/types/layout-management/index.d.ts +1 -0
- package/types/persistence-management/RemotePersistenceManager.d.ts +1 -1
- package/types/persistence-management/index.d.ts +0 -1
- package/LICENSE +0 -201
- package/cjs/index.js +0 -3
- package/cjs/index.js.map +0 -7
- package/esm/index.js +0 -3
- package/esm/index.js.map +0 -7
- package/index.css +0 -2
- package/index.css.map +0 -7
- /package/types/{persistence-management → layout-management}/useLayoutContextMenuItems.d.ts +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var cx = require('clsx');
|
|
6
|
+
|
|
7
|
+
const ConnectionStatusIcon = ({
|
|
8
|
+
connectionStatus,
|
|
9
|
+
className,
|
|
10
|
+
element = "span",
|
|
11
|
+
...props
|
|
12
|
+
}) => {
|
|
13
|
+
const [classBase, setClassBase] = React.useState("vuuConnectingStatus");
|
|
14
|
+
React.useEffect(() => {
|
|
15
|
+
switch (connectionStatus) {
|
|
16
|
+
case "connected":
|
|
17
|
+
case "reconnected":
|
|
18
|
+
setClassBase("vuuActiveStatus");
|
|
19
|
+
break;
|
|
20
|
+
case "connecting":
|
|
21
|
+
setClassBase("vuuConnectingStatus");
|
|
22
|
+
break;
|
|
23
|
+
case "disconnected":
|
|
24
|
+
setClassBase("vuuDisconnectedStatus");
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}, [connectionStatus]);
|
|
28
|
+
const statusIcon = React.createElement(element, {
|
|
29
|
+
...props,
|
|
30
|
+
className: cx("vuuStatus vuuIcon", classBase, className)
|
|
31
|
+
});
|
|
32
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "vuuStatus-container salt-theme", children: [
|
|
33
|
+
statusIcon,
|
|
34
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "vuuStatus-text", children: [
|
|
35
|
+
"Status: ",
|
|
36
|
+
connectionStatus.toUpperCase()
|
|
37
|
+
] })
|
|
38
|
+
] }) });
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
exports.ConnectionStatusIcon = ConnectionStatusIcon;
|
|
42
|
+
//# sourceMappingURL=ConnectionStatusIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionStatusIcon.js","sources":["../../../../../src/connection-status/ConnectionStatusIcon.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport cx from \"clsx\";\n\nimport \"./ConnectionStatusIcon.css\";\n\ntype connectionStatus =\n | \"connected\"\n | \"reconnected\"\n | \"connecting\"\n | \"disconnected\";\n\ninterface ConnectionStatusProps {\n connectionStatus: connectionStatus;\n className?: string;\n props?: unknown;\n element?: string;\n}\n\nexport const ConnectionStatusIcon = ({\n connectionStatus,\n className,\n element = \"span\",\n ...props\n}: ConnectionStatusProps) => {\n const [classBase, setClassBase] = useState<string>(\"vuuConnectingStatus\");\n useEffect(() => {\n switch (connectionStatus) {\n case \"connected\":\n case \"reconnected\":\n setClassBase(\"vuuActiveStatus\");\n break;\n case \"connecting\":\n setClassBase(\"vuuConnectingStatus\");\n break;\n case \"disconnected\":\n setClassBase(\"vuuDisconnectedStatus\");\n break;\n default:\n break;\n }\n }, [connectionStatus]);\n\n const statusIcon = React.createElement(element, {\n ...props,\n className: cx(\"vuuStatus vuuIcon\", classBase, className),\n });\n\n return (\n <>\n <div className=\"vuuStatus-container salt-theme\">\n {statusIcon}\n <div className=\"vuuStatus-text\">\n Status: {connectionStatus.toUpperCase()}\n </div>\n </div>\n </>\n );\n};\n"],"names":["useState","useEffect","jsx","Fragment","jsxs"],"mappings":";;;;;;AAkBO,MAAM,uBAAuB,CAAC;AAAA,EACnC,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAU,GAAA,MAAA;AAAA,EACV,GAAG,KAAA;AACL,CAA6B,KAAA;AAC3B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAiB,qBAAqB,CAAA,CAAA;AACxE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,QAAQ,gBAAkB;AAAA,MACxB,KAAK,WAAA,CAAA;AAAA,MACL,KAAK,aAAA;AACH,QAAA,YAAA,CAAa,iBAAiB,CAAA,CAAA;AAC9B,QAAA,MAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,YAAA,CAAa,qBAAqB,CAAA,CAAA;AAClC,QAAA,MAAA;AAAA,MACF,KAAK,cAAA;AACH,QAAA,YAAA,CAAa,uBAAuB,CAAA,CAAA;AACpC,QAAA,MAAA;AAEA,KACJ;AAAA,GACF,EAAG,CAAC,gBAAgB,CAAC,CAAA,CAAA;AAErB,EAAM,MAAA,UAAA,GAAa,KAAM,CAAA,aAAA,CAAc,OAAS,EAAA;AAAA,IAC9C,GAAG,KAAA;AAAA,IACH,SAAW,EAAA,EAAA,CAAG,mBAAqB,EAAA,SAAA,EAAW,SAAS,CAAA;AAAA,GACxD,CAAA,CAAA;AAED,EAAA,uBAEIC,cAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,kBAAAC,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,gCACZ,EAAA,QAAA,EAAA;AAAA,IAAA,UAAA;AAAA,oBACDA,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,gBAAiB,EAAA,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MACrB,iBAAiB,WAAY,EAAA;AAAA,KACxC,EAAA,CAAA;AAAA,GAAA,EACF,CACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var vuuLayout = require('@vuu-ui/vuu-layout');
|
|
6
|
+
var FeatureErrorBoundary = require('./FeatureErrorBoundary.js');
|
|
7
|
+
var Loader = require('./Loader.js');
|
|
8
|
+
var cssModuleLoader = require('./css-module-loader.js');
|
|
9
|
+
|
|
10
|
+
const componentsMap = /* @__PURE__ */ new Map();
|
|
11
|
+
const useCachedFeature = (url) => {
|
|
12
|
+
React.useEffect(
|
|
13
|
+
() => () => {
|
|
14
|
+
componentsMap.delete(url);
|
|
15
|
+
},
|
|
16
|
+
[url]
|
|
17
|
+
);
|
|
18
|
+
if (!componentsMap.has(url)) {
|
|
19
|
+
componentsMap.set(
|
|
20
|
+
url,
|
|
21
|
+
React.lazy(() => import(
|
|
22
|
+
/* @vite-ignore */
|
|
23
|
+
url
|
|
24
|
+
))
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
const lazyFeature = componentsMap.get(url);
|
|
28
|
+
if (!lazyFeature) {
|
|
29
|
+
throw Error(`Unable to load Lazy Feature at url ${url}`);
|
|
30
|
+
} else {
|
|
31
|
+
return lazyFeature;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
function RawFeature({
|
|
35
|
+
url,
|
|
36
|
+
css,
|
|
37
|
+
ComponentProps: params,
|
|
38
|
+
...props
|
|
39
|
+
}) {
|
|
40
|
+
if (css) {
|
|
41
|
+
cssModuleLoader.importCSS(css).then((styleSheet) => {
|
|
42
|
+
document.adoptedStyleSheets = [
|
|
43
|
+
...document.adoptedStyleSheets,
|
|
44
|
+
styleSheet
|
|
45
|
+
];
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const LazyFeature = useCachedFeature(url);
|
|
49
|
+
return /* @__PURE__ */ jsxRuntime.jsx(FeatureErrorBoundary.FeatureErrorBoundary, { url, children: /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(Loader.Loader, {}), children: /* @__PURE__ */ jsxRuntime.jsx(LazyFeature, { ...props, ...params }) }) });
|
|
50
|
+
}
|
|
51
|
+
const Feature = React.memo(RawFeature);
|
|
52
|
+
Feature.displayName = "Feature";
|
|
53
|
+
vuuLayout.registerComponent("Feature", Feature, "view");
|
|
54
|
+
|
|
55
|
+
exports.Feature = Feature;
|
|
56
|
+
//# sourceMappingURL=Feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Feature.js","sources":["../../../../../src/feature/Feature.tsx"],"sourcesContent":["import React, { Suspense, useEffect } from \"react\";\nimport { registerComponent, ViewProps } from \"@vuu-ui/vuu-layout\";\nimport { FeatureErrorBoundary } from \"./FeatureErrorBoundary\";\nimport { Loader } from \"./Loader\";\nimport { importCSS } from \"./css-module-loader\";\n\n/**\n * Ensure we never lazy load the same component more than once\n */\nconst componentsMap = new Map<string, ReturnType<typeof React.lazy>>();\nconst useCachedFeature = (url: string) => {\n useEffect(\n () => () => {\n componentsMap.delete(url);\n },\n [url]\n );\n\n if (!componentsMap.has(url)) {\n componentsMap.set(\n url,\n React.lazy(() => import(/* @vite-ignore */ url))\n );\n }\n\n const lazyFeature = componentsMap.get(url);\n\n if (!lazyFeature) {\n throw Error(`Unable to load Lazy Feature at url ${url}`);\n } else {\n return lazyFeature;\n }\n};\n\nexport interface FeatureProps<P extends object | undefined = any> {\n /**\n props that will be passed to the lazily loaded component.\n */\n ComponentProps?: P;\n ViewProps?: Partial<Pick<ViewProps, \"closeable\" | \"header\">>;\n css?: string;\n height?: number;\n title?: string;\n /** \n The url of javascript bundle to lazily load. Bundle must provide a default export\n and that export must be a React component.\n */\n url: string;\n width?: number;\n}\n\nfunction RawFeature<Params extends object | undefined>({\n url,\n css,\n ComponentProps: params,\n ...props\n}: FeatureProps<Params>) {\n // useEffect(() => {\n // console.log(\"%cFeature mount\", \"color: green;\");\n // return () => {\n // console.log(\"%cFeature unmount\", \"color:red;\");\n // };\n // }, []);\n\n if (css) {\n // import(/* @vite-ignore */ css, { assert: { type: \"css\" } }).then(\n // (cssModule) => {\n // console.log(\"%cInject Styles\", \"color: blue;font-weight: bold\");\n // document.adoptedStyleSheets = [\n // ...document.adoptedStyleSheets,\n // cssModule.default,\n // ];\n // }\n // );\n // Polyfill until cypress build supports import assertions\n // Note: already fully supported in esbuild and vite\n importCSS(css).then((styleSheet) => {\n document.adoptedStyleSheets = [\n ...document.adoptedStyleSheets,\n styleSheet,\n ];\n });\n }\n\n const LazyFeature = useCachedFeature(url);\n return (\n <FeatureErrorBoundary url={url}>\n <Suspense fallback={<Loader />}>\n <LazyFeature {...props} {...params} />\n </Suspense>\n </FeatureErrorBoundary>\n );\n}\n\n/**\n Feature is a wrapper around React Lazy Loading. It will load a component\n from the given url. That url must resolve to a javascript bundle with a\n single default export. That export must be a React component.\n */\nexport const Feature = React.memo(RawFeature);\nFeature.displayName = \"Feature\";\nregisterComponent(\"Feature\", Feature, \"view\");\n"],"names":["useEffect","importCSS","FeatureErrorBoundary","jsx","Suspense","Loader","registerComponent"],"mappings":";;;;;;;;;AASA,MAAM,aAAA,uBAAoB,GAA2C,EAAA,CAAA;AACrE,MAAM,gBAAA,GAAmB,CAAC,GAAgB,KAAA;AACxC,EAAAA,eAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAA,aAAA,CAAc,OAAO,GAAG,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,GAAG,CAAA;AAAA,GACN,CAAA;AAEA,EAAA,IAAI,CAAC,aAAA,CAAc,GAAI,CAAA,GAAG,CAAG,EAAA;AAC3B,IAAc,aAAA,CAAA,GAAA;AAAA,MACZ,GAAA;AAAA,MACA,KAAA,CAAM,KAAK,MAAM;AAAA;AAAA,QAA0B,GAAA;AAAA,OAAI,CAAA;AAAA,KACjD,CAAA;AAAA,GACF;AAEA,EAAM,MAAA,WAAA,GAAc,aAAc,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AAEzC,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAM,MAAA,KAAA,CAAM,CAAsC,mCAAA,EAAA,GAAG,CAAE,CAAA,CAAA,CAAA;AAAA,GAClD,MAAA;AACL,IAAO,OAAA,WAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAmBA,SAAS,UAA8C,CAAA;AAAA,EACrD,GAAA;AAAA,EACA,GAAA;AAAA,EACA,cAAgB,EAAA,MAAA;AAAA,EAChB,GAAG,KAAA;AACL,CAAyB,EAAA;AAQvB,EAAA,IAAI,GAAK,EAAA;AAYP,IAAAC,yBAAA,CAAU,GAAG,CAAA,CAAE,IAAK,CAAA,CAAC,UAAe,KAAA;AAClC,MAAA,QAAA,CAAS,kBAAqB,GAAA;AAAA,QAC5B,GAAG,QAAS,CAAA,kBAAA;AAAA,QACZ,UAAA;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAM,MAAA,WAAA,GAAc,iBAAiB,GAAG,CAAA,CAAA;AACxC,EAAA,sCACGC,yCAAqB,EAAA,EAAA,GAAA,EACpB,QAAC,kBAAAC,cAAA,CAAAC,cAAA,EAAA,EAAS,0BAAWD,cAAA,CAAAE,aAAA,EAAA,EAAO,CAC1B,EAAA,QAAA,kBAAAF,cAAA,CAAC,eAAa,GAAG,KAAA,EAAQ,GAAG,MAAA,EAAQ,GACtC,CACF,EAAA,CAAA,CAAA;AAEJ,CAAA;AAOa,MAAA,OAAA,GAAU,KAAM,CAAA,IAAA,CAAK,UAAU,EAAA;AAC5C,OAAA,CAAQ,WAAc,GAAA,SAAA,CAAA;AACtBG,2BAAkB,CAAA,SAAA,EAAW,SAAS,MAAM,CAAA;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
|
|
6
|
+
class FeatureErrorBoundary extends React.Component {
|
|
7
|
+
constructor(props) {
|
|
8
|
+
super(props);
|
|
9
|
+
this.state = { errorMessage: null };
|
|
10
|
+
}
|
|
11
|
+
static getDerivedStateFromError(error) {
|
|
12
|
+
return { errorMessage: error.message };
|
|
13
|
+
}
|
|
14
|
+
componentDidCatch(error, errorInfo) {
|
|
15
|
+
console.log(`error creating component at ${this.props.url}`);
|
|
16
|
+
console.log(error, errorInfo);
|
|
17
|
+
}
|
|
18
|
+
render() {
|
|
19
|
+
if (this.state.errorMessage) {
|
|
20
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
21
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { children: "An error occured while creating component." }),
|
|
22
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { children: this.state.errorMessage })
|
|
23
|
+
] });
|
|
24
|
+
}
|
|
25
|
+
return this.props.children;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
exports.FeatureErrorBoundary = FeatureErrorBoundary;
|
|
30
|
+
//# sourceMappingURL=FeatureErrorBoundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureErrorBoundary.js","sources":["../../../../../src/feature/FeatureErrorBoundary.tsx"],"sourcesContent":["import React, { ErrorInfo, ReactNode } from \"react\";\nimport { FeatureProps } from \"./Feature\";\n\nexport interface FeatureErrorBoundaryProps extends FeatureProps {\n children: ReactNode;\n}\n\nexport class FeatureErrorBoundary extends React.Component<\n FeatureErrorBoundaryProps,\n any\n> {\n constructor(props: FeatureErrorBoundaryProps) {\n super(props);\n this.state = { errorMessage: null };\n }\n\n static getDerivedStateFromError(error: Error) {\n // Update state so the next render will show the fallback UI.\n return { errorMessage: error.message };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n // You can also log the error to an error reporting service\n console.log(`error creating component at ${this.props.url}`);\n console.log(error, errorInfo);\n }\n\n render() {\n if (this.state.errorMessage) {\n return (\n <>\n <h1>An error occured while creating component.</h1>\n <p>{this.state.errorMessage}</p>\n </>\n );\n }\n\n return this.props.children;\n }\n}\n"],"names":["jsxs","Fragment","jsx"],"mappings":";;;;;AAOa,MAAA,oBAAA,SAA6B,MAAM,SAG9C,CAAA;AAAA,EACA,YAAY,KAAkC,EAAA;AAC5C,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACX,IAAK,IAAA,CAAA,KAAA,GAAQ,EAAE,YAAA,EAAc,IAAK,EAAA,CAAA;AAAA,GACpC;AAAA,EAEA,OAAO,yBAAyB,KAAc,EAAA;AAE5C,IAAO,OAAA,EAAE,YAAc,EAAA,KAAA,CAAM,OAAQ,EAAA,CAAA;AAAA,GACvC;AAAA,EAEA,iBAAA,CAAkB,OAAc,SAAsB,EAAA;AAEpD,IAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,4BAAA,EAA+B,IAAK,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAA,CAAA;AAC3D,IAAQ,OAAA,CAAA,GAAA,CAAI,OAAO,SAAS,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEA,MAAS,GAAA;AACP,IAAI,IAAA,IAAA,CAAK,MAAM,YAAc,EAAA;AAC3B,MAAA,uBAEIA,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,QAAG,QAA0C,EAAA,4CAAA,EAAA,CAAA;AAAA,wBAC7CA,cAAA,CAAA,GAAA,EAAA,EAAG,QAAK,EAAA,IAAA,CAAA,KAAA,CAAM,YAAa,EAAA,CAAA;AAAA,OAC9B,EAAA,CAAA,CAAA;AAAA,KAEJ;AAEA,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,GACpB;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Loader.js","sources":["../../../../../src/feature/Loader.tsx"],"sourcesContent":["// TODO\nexport const Loader = () => <div className=\"hwLoader\"></div>;\n"],"names":["jsx"],"mappings":";;;;AACO,MAAM,MAAS,GAAA,sBAAOA,cAAA,CAAA,KAAA,EAAA,EAAI,WAAU,UAAW,EAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-module-loader.js","sources":["../../../../../src/feature/css-module-loader.ts"],"sourcesContent":["export const importCSS = async (path: string) => {\n const container = new CSSStyleSheet();\n return fetch(path)\n .then((x) => x.text())\n .then((x) => container.replace(x));\n};\n"],"names":[],"mappings":";;AAAa,MAAA,SAAA,GAAY,OAAO,IAAiB,KAAA;AAC/C,EAAM,MAAA,SAAA,GAAY,IAAI,aAAc,EAAA,CAAA;AACpC,EAAA,OAAO,MAAM,IAAI,CAAA,CACd,IAAK,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,EAAM,CAAA,CACpB,KAAK,CAAC,CAAA,KAAM,SAAU,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACrC;;;;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var vuuLayout = require('@vuu-ui/vuu-layout');
|
|
5
|
+
var Feature = require('../feature/Feature.js');
|
|
6
|
+
|
|
7
|
+
const classBase = "vuuFeatureList";
|
|
8
|
+
const FeatureList = ({
|
|
9
|
+
features,
|
|
10
|
+
title = "VUU TABLES",
|
|
11
|
+
...htmlAttributes
|
|
12
|
+
}) => {
|
|
13
|
+
const ViewProps = {};
|
|
14
|
+
const listProps = {
|
|
15
|
+
height: "100%"
|
|
16
|
+
};
|
|
17
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...htmlAttributes, className: classBase, children: [
|
|
18
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-header`, children: title }),
|
|
19
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-content`, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
20
|
+
vuuLayout.Palette,
|
|
21
|
+
{
|
|
22
|
+
orientation: "vertical",
|
|
23
|
+
ListProps: listProps,
|
|
24
|
+
ViewProps,
|
|
25
|
+
children: features.map((featureProps, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
26
|
+
vuuLayout.PaletteItem,
|
|
27
|
+
{
|
|
28
|
+
closeable: true,
|
|
29
|
+
label: featureProps.title,
|
|
30
|
+
resizeable: true,
|
|
31
|
+
resize: "defer",
|
|
32
|
+
header: true,
|
|
33
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Feature.Feature, { ...featureProps })
|
|
34
|
+
},
|
|
35
|
+
i
|
|
36
|
+
))
|
|
37
|
+
}
|
|
38
|
+
) })
|
|
39
|
+
] });
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
exports.FeatureList = FeatureList;
|
|
43
|
+
//# sourceMappingURL=FeatureList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureList.js","sources":["../../../../../src/feature-list/FeatureList.tsx"],"sourcesContent":["import { Palette, PaletteItem } from \"@vuu-ui/vuu-layout\";\nimport { ListProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { HTMLAttributes } from \"react\";\nimport { Feature, FeatureProps } from \"../feature/Feature\";\n\nimport \"./FeatureList.css\";\n\nconst classBase = \"vuuFeatureList\";\n\nexport interface FeatureListProps extends HTMLAttributes<HTMLDivElement> {\n features: FeatureProps[];\n}\n\nexport const FeatureList = ({\n features,\n title = \"VUU TABLES\",\n ...htmlAttributes\n}: FeatureListProps) => {\n const ViewProps = {};\n\n const listProps: Partial<ListProps> = {\n height: \"100%\",\n };\n\n return (\n <div {...htmlAttributes} className={classBase}>\n <div className={`${classBase}-header`}>{title}</div>\n <div className={`${classBase}-content`}>\n <Palette\n orientation=\"vertical\"\n ListProps={listProps}\n ViewProps={ViewProps}\n >\n {features.map((featureProps, i) => (\n <PaletteItem\n closeable\n key={i}\n label={featureProps.title}\n resizeable\n resize=\"defer\"\n header\n >\n <Feature {...featureProps} />\n </PaletteItem>\n ))}\n </Palette>\n </div>\n </div>\n );\n};\n"],"names":["jsxs","jsx","Palette","PaletteItem","Feature"],"mappings":";;;;;;AAOA,MAAM,SAAY,GAAA,gBAAA,CAAA;AAMX,MAAM,cAAc,CAAC;AAAA,EAC1B,QAAA;AAAA,EACA,KAAQ,GAAA,YAAA;AAAA,EACR,GAAG,cAAA;AACL,CAAwB,KAAA;AACtB,EAAA,MAAM,YAAY,EAAC,CAAA;AAEnB,EAAA,MAAM,SAAgC,GAAA;AAAA,IACpC,MAAQ,EAAA,MAAA;AAAA,GACV,CAAA;AAEA,EAAA,uBACGA,eAAA,CAAA,KAAA,EAAA,EAAK,GAAG,cAAA,EAAgB,WAAW,SAClC,EAAA,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,WAAY,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,oBAC7CA,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,QAAA,CAAA,EAAA,QAAA,kBAAAA,cAAA;AAAA,MAACC,iBAAA;AAAA,MAAA;AAAA,QACC,WAAY,EAAA,UAAA;AAAA,QACZ,SAAW,EAAA,SAAA;AAAA,QACX,SAAA;AAAA,QAEC,QAAS,EAAA,QAAA,CAAA,GAAA,CAAI,CAAC,YAAA,EAAc,CAC3B,qBAAAD,cAAA;AAAA,UAACE,qBAAA;AAAA,UAAA;AAAA,YACC,SAAS,EAAA,IAAA;AAAA,YAET,OAAO,YAAa,CAAA,KAAA;AAAA,YACpB,UAAU,EAAA,IAAA;AAAA,YACV,MAAO,EAAA,OAAA;AAAA,YACP,MAAM,EAAA,IAAA;AAAA,YAEN,QAAA,kBAAAF,cAAA,CAACG,eAAS,EAAA,EAAA,GAAG,YAAc,EAAA,CAAA;AAAA,WAAA;AAAA,UANtB,CAAA;AAAA,SAQR,CAAA;AAAA,OAAA;AAAA,KAEL,EAAA,CAAA;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var AppHeader = require('./app-header/AppHeader.js');
|
|
4
|
+
var ConnectionStatusIcon = require('./connection-status/ConnectionStatusIcon.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.ConnectionStatusIcon = ConnectionStatusIcon.ConnectionStatusIcon;
|
|
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,66 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
5
|
+
var useLayoutManager = require('./useLayoutManager.js');
|
|
6
|
+
var LayoutTile = require('./LayoutTile.js');
|
|
7
|
+
|
|
8
|
+
const classBase = "vuuLayoutList";
|
|
9
|
+
const LayoutList = (props) => {
|
|
10
|
+
const { layoutMetadata, loadLayoutById } = useLayoutManager.useLayoutManager();
|
|
11
|
+
const handleLoadLayout = (layoutId) => {
|
|
12
|
+
if (layoutId) {
|
|
13
|
+
loadLayoutById(layoutId);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const layoutsByGroup = layoutMetadata.reduce((acc, cur) => {
|
|
17
|
+
if (acc[cur.group]) {
|
|
18
|
+
return {
|
|
19
|
+
...acc,
|
|
20
|
+
[cur.group]: [...acc[cur.group], cur]
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
...acc,
|
|
25
|
+
[cur.group]: [cur]
|
|
26
|
+
};
|
|
27
|
+
}, {});
|
|
28
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
29
|
+
"div",
|
|
30
|
+
{
|
|
31
|
+
className: classBase,
|
|
32
|
+
...props,
|
|
33
|
+
role: "listbox",
|
|
34
|
+
"aria-label": "my layouts",
|
|
35
|
+
children: [
|
|
36
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-header`, children: "My Layouts" }),
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
38
|
+
vuuUiControls.List,
|
|
39
|
+
{
|
|
40
|
+
height: "auto",
|
|
41
|
+
source: Object.entries(layoutsByGroup),
|
|
42
|
+
ListItem: ({ item }) => {
|
|
43
|
+
if (!item)
|
|
44
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
45
|
+
const [groupName, layoutMetadata2] = item;
|
|
46
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { role: "list", "aria-label": groupName, children: [
|
|
47
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-groupName`, children: groupName }),
|
|
48
|
+
layoutMetadata2.map((metadata) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
49
|
+
LayoutTile.LayoutTile,
|
|
50
|
+
{
|
|
51
|
+
metadata,
|
|
52
|
+
handleLoadLayout
|
|
53
|
+
},
|
|
54
|
+
metadata.id
|
|
55
|
+
))
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
exports.LayoutList = LayoutList;
|
|
66
|
+
//# 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 { List } from \"@vuu-ui/vuu-ui-controls\";\nimport { LayoutMetadata } from \"./layoutTypes\";\nimport { useLayoutManager } from \"./useLayoutManager\";\nimport { LayoutTile } from \"./LayoutTile\";\n\nimport \"./LayoutList.css\";\n\ntype LayoutGroups = {\n [groupName: string]: LayoutMetadata[];\n};\n\nconst classBase = \"vuuLayoutList\";\n\nexport const LayoutList = (props: HTMLAttributes<HTMLDivElement>) => {\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":["useLayoutManager","jsxs","jsx","List","Fragment","layoutMetadata","LayoutTile"],"mappings":";;;;;;;AAYA,MAAM,SAAY,GAAA,eAAA,CAAA;AAEL,MAAA,UAAA,GAAa,CAAC,KAA0C,KAAA;AACnE,EAAA,MAAM,EAAE,cAAA,EAAgB,cAAe,EAAA,GAAIA,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,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
|
|
5
|
+
const classBase = "vuuLayoutTile";
|
|
6
|
+
const LayoutTile = (props) => {
|
|
7
|
+
const { metadata, handleLoadLayout } = props;
|
|
8
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { role: "listitem", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9
|
+
"div",
|
|
10
|
+
{
|
|
11
|
+
className: `${classBase}-layoutTile`,
|
|
12
|
+
role: "button",
|
|
13
|
+
onClick: () => handleLoadLayout(metadata?.id),
|
|
14
|
+
children: [
|
|
15
|
+
/* @__PURE__ */ jsxRuntime.jsx("img", { className: `${classBase}-screenshot`, src: metadata?.screenshot }),
|
|
16
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
17
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-layoutName`, children: metadata?.name }),
|
|
18
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-layoutDetails`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: `${metadata?.user}, ${metadata?.created}` }) })
|
|
19
|
+
] })
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
metadata?.id
|
|
23
|
+
) });
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
exports.LayoutTile = LayoutTile;
|
|
27
|
+
//# sourceMappingURL=LayoutTile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayoutTile.js","sources":["../../../../../src/layout-management/LayoutTile.tsx"],"sourcesContent":["import { LayoutMetadata } from \"./layoutTypes\";\n\nimport \"./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\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":["jsx","jsxs"],"mappings":";;;;AAIA,MAAM,SAAY,GAAA,eAAA,CAAA;AAOL,MAAA,UAAA,GAAa,CAAC,KAA2B,KAAA;AACpD,EAAM,MAAA,EAAE,QAAU,EAAA,gBAAA,EAAqB,GAAA,KAAA,CAAA;AAEvC,EACE,uBAAAA,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,140 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
5
|
+
var screenshotUtils = require('./screenshot-utils.js');
|
|
6
|
+
var core = require('@salt-ds/core');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
require('clsx');
|
|
9
|
+
var loginUtils = require('../login/login-utils.js');
|
|
10
|
+
|
|
11
|
+
const classBase = "saveLayoutPanel";
|
|
12
|
+
const formField = `${classBase}-formField`;
|
|
13
|
+
const groups = ["Group 1", "Group 2", "Group 3", "Group 4", "Group 5"];
|
|
14
|
+
const checkboxValues = ["Value 1", "Value 2", "Value 3"];
|
|
15
|
+
const radioValues = ["Value 1", "Value 2", "Value 3"];
|
|
16
|
+
const SaveLayoutPanel = (props) => {
|
|
17
|
+
const { defaultTitle = "", onCancel, onSave, componentId } = props;
|
|
18
|
+
const [layoutName, setLayoutName] = React.useState(defaultTitle);
|
|
19
|
+
const [group, setGroup] = React.useState("");
|
|
20
|
+
const [checkValues, setCheckValues] = React.useState([]);
|
|
21
|
+
const [radioValue, setRadioValue] = React.useState(radioValues[0]);
|
|
22
|
+
const [screenshot, setScreenshot] = React.useState();
|
|
23
|
+
const [screenshotErrorMessage, setScreenshotErrorMessage] = React.useState();
|
|
24
|
+
const [username] = loginUtils.getAuthDetailsFromCookies();
|
|
25
|
+
React.useEffect(() => {
|
|
26
|
+
if (componentId) {
|
|
27
|
+
screenshotUtils.takeScreenshot(document.getElementById(componentId)).then((screenshot2) => {
|
|
28
|
+
setScreenshot(screenshot2);
|
|
29
|
+
}).catch((error) => {
|
|
30
|
+
setScreenshotErrorMessage(error.message);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}, [componentId]);
|
|
34
|
+
const handleSubmit = () => {
|
|
35
|
+
onSave({
|
|
36
|
+
name: layoutName,
|
|
37
|
+
group,
|
|
38
|
+
screenshot: screenshot ?? "",
|
|
39
|
+
user: username
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
const screenshotContent = React.useMemo(() => {
|
|
43
|
+
if (screenshot) {
|
|
44
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
45
|
+
"img",
|
|
46
|
+
{
|
|
47
|
+
className: `${classBase}-screenshot`,
|
|
48
|
+
src: screenshot,
|
|
49
|
+
alt: "screenshot of current layout"
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
if (screenshotErrorMessage) {
|
|
54
|
+
return /* @__PURE__ */ jsxRuntime.jsx(core.Text, { children: screenshotErrorMessage });
|
|
55
|
+
}
|
|
56
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "spinner" });
|
|
57
|
+
}, [screenshot, screenshotErrorMessage]);
|
|
58
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-panelContainer`, children: [
|
|
59
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-panelContent`, children: [
|
|
60
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-formContainer`, children: [
|
|
61
|
+
/* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { className: formField, children: [
|
|
62
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Group" }),
|
|
63
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
vuuUiControls.ComboBox,
|
|
65
|
+
{
|
|
66
|
+
source: groups,
|
|
67
|
+
allowFreeText: true,
|
|
68
|
+
InputProps: {
|
|
69
|
+
inputProps: {
|
|
70
|
+
className: `${classBase}-inputText`,
|
|
71
|
+
placeholder: "Select Group or Enter New Name",
|
|
72
|
+
onChange: (event) => setGroup(event.target.value)
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
width: "100%",
|
|
76
|
+
onSelectionChange: (_, value) => setGroup(value || "")
|
|
77
|
+
}
|
|
78
|
+
)
|
|
79
|
+
] }),
|
|
80
|
+
/* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { className: formField, children: [
|
|
81
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Layout Name" }),
|
|
82
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
83
|
+
core.Input,
|
|
84
|
+
{
|
|
85
|
+
inputProps: {
|
|
86
|
+
className: `${classBase}-inputText`,
|
|
87
|
+
placeholder: "Enter Layout Name"
|
|
88
|
+
},
|
|
89
|
+
onChange: (event) => setLayoutName(event.target.value),
|
|
90
|
+
value: layoutName
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
] }),
|
|
94
|
+
/* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { className: formField, children: [
|
|
95
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Some Layout Setting" }),
|
|
96
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-settingsGroup`, children: checkboxValues.map((value, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
97
|
+
vuuUiControls.Checkbox,
|
|
98
|
+
{
|
|
99
|
+
onToggle: () => setCheckValues(
|
|
100
|
+
(prev) => prev.includes(value) ? prev.filter((entry) => entry !== value) : [...prev, value]
|
|
101
|
+
),
|
|
102
|
+
checked: checkValues.includes(value),
|
|
103
|
+
label: value
|
|
104
|
+
},
|
|
105
|
+
i
|
|
106
|
+
)) })
|
|
107
|
+
] }),
|
|
108
|
+
/* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { className: formField, children: [
|
|
109
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Some Layout Setting" }),
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-settingsGroup`, children: radioValues.map((value, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
111
|
+
vuuUiControls.RadioButton,
|
|
112
|
+
{
|
|
113
|
+
onClick: () => setRadioValue(value),
|
|
114
|
+
checked: radioValue === value,
|
|
115
|
+
label: value,
|
|
116
|
+
groupName: "radioGroup"
|
|
117
|
+
},
|
|
118
|
+
i
|
|
119
|
+
)) })
|
|
120
|
+
] })
|
|
121
|
+
] }),
|
|
122
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-screenshotContainer`, children: screenshotContent })
|
|
123
|
+
] }),
|
|
124
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-buttonsContainer`, children: [
|
|
125
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Button, { className: `${classBase}-cancelButton`, onClick: onCancel, children: "Cancel" }),
|
|
126
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
127
|
+
core.Button,
|
|
128
|
+
{
|
|
129
|
+
className: `${classBase}-saveButton`,
|
|
130
|
+
onClick: handleSubmit,
|
|
131
|
+
disabled: layoutName === "" || group === "",
|
|
132
|
+
children: "Save"
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
] })
|
|
136
|
+
] });
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
exports.SaveLayoutPanel = SaveLayoutPanel;
|
|
140
|
+
//# 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 { 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 \"./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 [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":["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 index = require('../../../../node_modules/html-to-image/es/index.js');
|
|
4
|
+
|
|
5
|
+
const takeScreenshot = (node) => {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
index.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,WAAA,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;;;;"}
|