@vuu-ui/vuu-shell 0.8.75 → 0.8.76
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.js +2 -1
- package/cjs/app-header/AppHeader.js.map +1 -1
- package/cjs/application-provider/ApplicationProvider.js +5 -1
- package/cjs/application-provider/ApplicationProvider.js.map +1 -1
- package/cjs/index.js +13 -12
- package/cjs/index.js.map +1 -1
- package/cjs/layout-management/LayoutList.js +2 -2
- package/cjs/layout-management/LayoutList.js.map +1 -1
- package/cjs/layout-management/{useLayoutManager.js → LayoutManagementProvider.js} +46 -19
- package/cjs/layout-management/LayoutManagementProvider.js.map +1 -0
- package/cjs/layout-management/defaultWorkspaceJSON.js +75 -0
- package/cjs/layout-management/defaultWorkspaceJSON.js.map +1 -0
- package/cjs/layout-management/useLayoutContextMenuItems.js +3 -3
- package/cjs/layout-management/useLayoutContextMenuItems.js.map +1 -1
- package/cjs/left-nav/LeftNav.js +2 -1
- package/cjs/left-nav/LeftNav.js.map +1 -1
- package/cjs/persistence-manager/RemotePersistenceManager.js +1 -1
- package/cjs/persistence-manager/RemotePersistenceManager.js.map +1 -1
- package/cjs/{shell-layouts → shell-layout-templates}/context-panel/ContextPanel.js +4 -2
- package/cjs/shell-layout-templates/context-panel/ContextPanel.js.map +1 -0
- package/cjs/{shell-layouts → shell-layout-templates/full-height-left-panel}/useFullHeightLeftPanel.js +12 -12
- package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +1 -0
- package/cjs/{shell-layouts → shell-layout-templates/inlay-left-panel}/useInlayLeftPanel.js +10 -4
- package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +1 -0
- package/cjs/shell-layout-templates/side-panel/SidePanel.js.map +1 -0
- package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +46 -0
- package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +1 -0
- package/cjs/shell-layout-templates/useShellLayout.js +21 -0
- package/cjs/shell-layout-templates/useShellLayout.js.map +1 -0
- package/cjs/shell.css.js +1 -1
- package/cjs/shell.js +46 -37
- package/cjs/shell.js.map +1 -1
- package/esm/app-header/AppHeader.js +2 -1
- package/esm/app-header/AppHeader.js.map +1 -1
- package/esm/application-provider/ApplicationProvider.js +5 -1
- package/esm/application-provider/ApplicationProvider.js.map +1 -1
- package/esm/index.js +5 -4
- package/esm/index.js.map +1 -1
- package/esm/layout-management/LayoutList.js +1 -1
- package/esm/layout-management/LayoutList.js.map +1 -1
- package/esm/layout-management/{useLayoutManager.js → LayoutManagementProvider.js} +46 -19
- package/esm/layout-management/LayoutManagementProvider.js.map +1 -0
- package/esm/layout-management/defaultWorkspaceJSON.js +70 -0
- package/esm/layout-management/defaultWorkspaceJSON.js.map +1 -0
- package/esm/layout-management/useLayoutContextMenuItems.js +2 -2
- package/esm/layout-management/useLayoutContextMenuItems.js.map +1 -1
- package/esm/left-nav/LeftNav.js +2 -1
- package/esm/left-nav/LeftNav.js.map +1 -1
- package/esm/persistence-manager/RemotePersistenceManager.js +1 -1
- package/esm/persistence-manager/RemotePersistenceManager.js.map +1 -1
- package/esm/{shell-layouts → shell-layout-templates}/context-panel/ContextPanel.js +4 -2
- package/esm/shell-layout-templates/context-panel/ContextPanel.js.map +1 -0
- package/esm/{shell-layouts → shell-layout-templates/full-height-left-panel}/useFullHeightLeftPanel.js +13 -13
- package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +1 -0
- package/esm/{shell-layouts → shell-layout-templates/inlay-left-panel}/useInlayLeftPanel.js +11 -5
- package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +1 -0
- package/esm/shell-layout-templates/side-panel/SidePanel.js.map +1 -0
- package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +44 -0
- package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +1 -0
- package/esm/shell-layout-templates/useShellLayout.js +19 -0
- package/esm/shell-layout-templates/useShellLayout.js.map +1 -0
- package/esm/shell.css.js +1 -1
- package/esm/shell.js +48 -39
- package/esm/shell.js.map +1 -1
- package/package.json +11 -11
- package/types/vuu-layout/src/Component.d.ts +6 -0
- package/types/vuu-layout/src/LayoutContainer.d.ts +6 -0
- package/types/vuu-layout/src/dock-layout/DockLayout.d.ts +7 -0
- package/types/vuu-layout/src/dock-layout/Drawer.d.ts +17 -0
- package/types/vuu-layout/src/dock-layout/index.d.ts +2 -0
- package/types/vuu-layout/src/drag-drop/BoxModel.d.ts +143 -0
- package/types/vuu-layout/src/drag-drop/DragState.d.ts +46 -0
- package/types/vuu-layout/src/drag-drop/Draggable.d.ts +24 -0
- package/types/vuu-layout/src/drag-drop/DropMenu.d.ts +9 -0
- package/types/vuu-layout/src/drag-drop/DropTarget.d.ts +60 -0
- package/types/vuu-layout/src/drag-drop/DropTargetRenderer.d.ts +17 -0
- package/types/vuu-layout/src/drag-drop/dragDropTypes.d.ts +51 -0
- package/types/vuu-layout/src/drag-drop/index.d.ts +4 -0
- package/types/vuu-layout/src/flexbox/Flexbox.d.ts +4 -0
- package/types/vuu-layout/src/flexbox/FlexboxLayout.d.ts +6 -0
- package/types/vuu-layout/src/flexbox/FluidGrid.d.ts +6 -0
- package/types/vuu-layout/src/flexbox/FluidGridLayout.d.ts +6 -0
- package/types/vuu-layout/src/flexbox/Splitter.d.ts +12 -0
- package/types/vuu-layout/src/flexbox/flexbox-utils.d.ts +12 -0
- package/types/vuu-layout/src/flexbox/flexboxTypes.d.ts +51 -0
- package/types/vuu-layout/src/flexbox/index.d.ts +4 -0
- package/types/vuu-layout/src/flexbox/useResponsiveSizing.d.ts +10 -0
- package/types/vuu-layout/src/flexbox/useSplitterResizing.d.ts +2 -0
- package/types/vuu-layout/src/index.d.ts +17 -0
- package/types/vuu-layout/src/layout-action.d.ts +19 -0
- package/types/vuu-layout/src/layout-header/Header.d.ts +13 -0
- package/types/vuu-layout/src/layout-header/index.d.ts +1 -0
- package/types/vuu-layout/src/layout-provider/LayoutProvider.d.ts +15 -0
- package/types/vuu-layout/src/layout-provider/LayoutProviderContext.d.ts +10 -0
- package/types/vuu-layout/src/layout-provider/index.d.ts +2 -0
- package/types/vuu-layout/src/layout-provider/useLayoutDragDrop.d.ts +4 -0
- package/types/vuu-layout/src/layout-reducer/flexUtils.d.ts +22 -0
- package/types/vuu-layout/src/layout-reducer/index.d.ts +4 -0
- package/types/vuu-layout/src/layout-reducer/insert-layout-element.d.ts +8 -0
- package/types/vuu-layout/src/layout-reducer/layout-reducer.d.ts +3 -0
- package/types/vuu-layout/src/layout-reducer/layoutTypes.d.ts +131 -0
- package/types/vuu-layout/src/layout-reducer/layoutUtils.d.ts +44 -0
- package/types/vuu-layout/src/layout-reducer/move-layout-element.d.ts +3 -0
- package/types/vuu-layout/src/layout-reducer/remove-layout-element.d.ts +3 -0
- package/types/vuu-layout/src/layout-reducer/replace-layout-element.d.ts +6 -0
- package/types/vuu-layout/src/layout-reducer/resize-flex-children.d.ts +4 -0
- package/types/vuu-layout/src/layout-reducer/wrap-layout-element.d.ts +9 -0
- package/types/vuu-layout/src/layout-view/View.d.ts +10 -0
- package/types/vuu-layout/src/layout-view/index.d.ts +3 -0
- package/types/vuu-layout/src/layout-view/useView.d.ts +21 -0
- package/types/vuu-layout/src/layout-view/useViewBroadcastChannel.d.ts +7 -0
- package/types/vuu-layout/src/layout-view/useViewResize.d.ts +7 -0
- package/types/vuu-layout/src/layout-view/viewTypes.d.ts +45 -0
- package/types/vuu-layout/src/layout-view-actions/ViewContext.d.ts +33 -0
- package/types/vuu-layout/src/layout-view-actions/index.d.ts +2 -0
- package/types/vuu-layout/src/layout-view-actions/useViewActionDispatcher.d.ts +4 -0
- package/types/vuu-layout/src/palette/Palette.d.ts +25 -0
- package/types/vuu-layout/src/palette/index.d.ts +1 -0
- package/types/vuu-layout/src/placeholder/LayoutStartPanel.d.ts +5 -0
- package/types/vuu-layout/src/placeholder/Placeholder.d.ts +17 -0
- package/types/vuu-layout/src/placeholder/index.d.ts +1 -0
- package/types/vuu-layout/src/responsive/breakpoints.d.ts +4 -0
- package/types/vuu-layout/src/responsive/index.d.ts +3 -0
- package/types/vuu-layout/src/responsive/use-breakpoints.d.ts +7 -0
- package/types/vuu-layout/src/responsive/useResizeObserver.d.ts +13 -0
- package/types/vuu-layout/src/responsive/utils.d.ts +6 -0
- package/types/vuu-layout/src/stack/Stack.d.ts +3 -0
- package/types/vuu-layout/src/stack/StackLayout.d.ts +6 -0
- package/types/vuu-layout/src/stack/index.d.ts +3 -0
- package/types/vuu-layout/src/stack/stackTypes.d.ts +24 -0
- package/types/vuu-layout/src/use-persistent-state.d.ts +11 -0
- package/types/vuu-layout/src/utils/index.d.ts +5 -0
- package/types/vuu-layout/src/utils/pathUtils.d.ts +31 -0
- package/types/vuu-layout/src/utils/propUtils.d.ts +5 -0
- package/types/vuu-layout/src/utils/refUtils.d.ts +2 -0
- package/types/vuu-layout/src/utils/styleUtils.d.ts +3 -0
- package/types/vuu-layout/src/utils/typeOf.d.ts +7 -0
- package/types/{index.d.ts → vuu-shell/src/index.d.ts} +1 -2
- package/types/{layout-management/useLayoutManager.d.ts → vuu-shell/src/layout-management/LayoutManagementProvider.d.ts} +22 -7
- package/types/vuu-shell/src/layout-management/defaultWorkspaceJSON.d.ts +9 -0
- package/types/{layout-management → vuu-shell/src/layout-management}/index.d.ts +2 -2
- package/types/{persistence-manager → vuu-shell/src/persistence-manager}/StaticPersistenceManager.d.ts +3 -1
- package/types/{shell-layouts → vuu-shell/src/shell-layout-templates}/context-panel/ContextPanel.d.ts +2 -1
- package/types/vuu-shell/src/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.d.ts +2 -0
- package/types/vuu-shell/src/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.d.ts +2 -0
- package/types/vuu-shell/src/shell-layout-templates/simple-content-pane/useSimpleContentPane.d.ts +2 -0
- package/types/vuu-shell/src/shell-layout-templates/useShellLayout.d.ts +45 -0
- package/types/vuu-shell/src/shell.d.ts +16 -0
- package/cjs/layout-management/defaultApplicationJson.js +0 -97
- package/cjs/layout-management/defaultApplicationJson.js.map +0 -1
- package/cjs/layout-management/useLayoutManager.js.map +0 -1
- package/cjs/shell-layouts/context-panel/ContextPanel.js.map +0 -1
- package/cjs/shell-layouts/side-panel/SidePanel.js.map +0 -1
- package/cjs/shell-layouts/useFullHeightLeftPanel.js.map +0 -1
- package/cjs/shell-layouts/useInlayLeftPanel.js.map +0 -1
- package/cjs/shell-layouts/useShellLayout.js +0 -15
- package/cjs/shell-layouts/useShellLayout.js.map +0 -1
- package/esm/layout-management/defaultApplicationJson.js +0 -91
- package/esm/layout-management/defaultApplicationJson.js.map +0 -1
- package/esm/layout-management/useLayoutManager.js.map +0 -1
- package/esm/shell-layouts/context-panel/ContextPanel.js.map +0 -1
- package/esm/shell-layouts/side-panel/SidePanel.js.map +0 -1
- package/esm/shell-layouts/useFullHeightLeftPanel.js.map +0 -1
- package/esm/shell-layouts/useInlayLeftPanel.js.map +0 -1
- package/esm/shell-layouts/useShellLayout.js +0 -13
- package/esm/shell-layouts/useShellLayout.js.map +0 -1
- package/types/layout-management/defaultApplicationJson.d.ts +0 -6
- package/types/shell-layouts/useFullHeightLeftPanel.d.ts +0 -3
- package/types/shell-layouts/useInlayLeftPanel.d.ts +0 -3
- package/types/shell-layouts/useShellLayout.d.ts +0 -10
- package/types/shell.d.ts +0 -17
- /package/cjs/{shell-layouts → shell-layout-templates}/context-panel/ContextPanel.css.js +0 -0
- /package/cjs/{shell-layouts → shell-layout-templates}/context-panel/ContextPanel.css.js.map +0 -0
- /package/cjs/{shell-layouts → shell-layout-templates}/side-panel/SidePanel.css.js +0 -0
- /package/cjs/{shell-layouts → shell-layout-templates}/side-panel/SidePanel.css.js.map +0 -0
- /package/cjs/{shell-layouts → shell-layout-templates}/side-panel/SidePanel.js +0 -0
- /package/esm/{shell-layouts → shell-layout-templates}/context-panel/ContextPanel.css.js +0 -0
- /package/esm/{shell-layouts → shell-layout-templates}/context-panel/ContextPanel.css.js.map +0 -0
- /package/esm/{shell-layouts → shell-layout-templates}/side-panel/SidePanel.css.js +0 -0
- /package/esm/{shell-layouts → shell-layout-templates}/side-panel/SidePanel.css.js.map +0 -0
- /package/esm/{shell-layouts → shell-layout-templates}/side-panel/SidePanel.js +0 -0
- /package/types/{ShellContextProvider.d.ts → vuu-shell/src/ShellContextProvider.d.ts} +0 -0
- /package/types/{app-header → vuu-shell/src/app-header}/AppHeader.d.ts +0 -0
- /package/types/{app-header → vuu-shell/src/app-header}/index.d.ts +0 -0
- /package/types/{application-provider → vuu-shell/src/application-provider}/ApplicationContext.d.ts +0 -0
- /package/types/{application-provider → vuu-shell/src/application-provider}/ApplicationProvider.d.ts +0 -0
- /package/types/{application-provider → vuu-shell/src/application-provider}/index.d.ts +0 -0
- /package/types/{connection-status → vuu-shell/src/connection-status}/ConnectionStatusIndicator.d.ts +0 -0
- /package/types/{connection-status → vuu-shell/src/connection-status}/index.d.ts +0 -0
- /package/types/{datasource-provider → vuu-shell/src/datasource-provider}/DataSourceProvider.d.ts +0 -0
- /package/types/{datasource-provider → vuu-shell/src/datasource-provider}/index.d.ts +0 -0
- /package/types/{feature → vuu-shell/src/feature}/Feature.d.ts +0 -0
- /package/types/{feature → vuu-shell/src/feature}/FeatureErrorBoundary.d.ts +0 -0
- /package/types/{feature → vuu-shell/src/feature}/Loader.d.ts +0 -0
- /package/types/{feature → vuu-shell/src/feature}/index.d.ts +0 -0
- /package/types/{feature-list → vuu-shell/src/feature-list}/FeatureList.d.ts +0 -0
- /package/types/{feature-list → vuu-shell/src/feature-list}/index.d.ts +0 -0
- /package/types/{get-layout-history.d.ts → vuu-shell/src/get-layout-history.d.ts} +0 -0
- /package/types/{layout-management → vuu-shell/src/layout-management}/LayoutList.d.ts +0 -0
- /package/types/{layout-management → vuu-shell/src/layout-management}/LayoutTile.d.ts +0 -0
- /package/types/{layout-management → vuu-shell/src/layout-management}/SaveLayoutPanel.d.ts +0 -0
- /package/types/{layout-management → vuu-shell/src/layout-management}/layoutTypes.d.ts +0 -0
- /package/types/{layout-management → vuu-shell/src/layout-management}/screenshot-utils.d.ts +0 -0
- /package/types/{layout-management → vuu-shell/src/layout-management}/useLayoutContextMenuItems.d.ts +0 -0
- /package/types/{left-nav → vuu-shell/src/left-nav}/LeftNav.d.ts +0 -0
- /package/types/{left-nav → vuu-shell/src/left-nav}/index.d.ts +0 -0
- /package/types/{login → vuu-shell/src/login}/LoginPanel.d.ts +0 -0
- /package/types/{login → vuu-shell/src/login}/VuuLogo.d.ts +0 -0
- /package/types/{login → vuu-shell/src/login}/index.d.ts +0 -0
- /package/types/{login → vuu-shell/src/login}/login-utils.d.ts +0 -0
- /package/types/{persistence-manager → vuu-shell/src/persistence-manager}/LocalPersistenceManager.d.ts +0 -0
- /package/types/{persistence-manager → vuu-shell/src/persistence-manager}/PersistenceManager.d.ts +0 -0
- /package/types/{persistence-manager → vuu-shell/src/persistence-manager}/PersistenceProvider.d.ts +0 -0
- /package/types/{persistence-manager → vuu-shell/src/persistence-manager}/RemotePersistenceManager.d.ts +0 -0
- /package/types/{persistence-manager → vuu-shell/src/persistence-manager}/index.d.ts +0 -0
- /package/types/{persistence-provider → vuu-shell/src/persistence-provider}/PersistenceProviderNext.d.ts +0 -0
- /package/types/{persistence-provider → vuu-shell/src/persistence-provider}/index.d.ts +0 -0
- /package/types/{session-editing-form → vuu-shell/src/session-editing-form}/SessionEditingForm.d.ts +0 -0
- /package/types/{session-editing-form → vuu-shell/src/session-editing-form}/index.d.ts +0 -0
- /package/types/{shell-layouts → vuu-shell/src/shell-layout-templates}/context-panel/index.d.ts +0 -0
- /package/types/{shell-layouts → vuu-shell/src/shell-layout-templates}/index.d.ts +0 -0
- /package/types/{shell-layouts → vuu-shell/src/shell-layout-templates}/side-panel/SidePanel.d.ts +0 -0
- /package/types/{shell-layouts → vuu-shell/src/shell-layout-templates}/side-panel/index.d.ts +0 -0
- /package/types/{theme-switch → vuu-shell/src/theme-switch}/ThemeSwitch.d.ts +0 -0
- /package/types/{theme-switch → vuu-shell/src/theme-switch}/index.d.ts +0 -0
- /package/types/{use-force-render.d.ts → vuu-shell/src/use-force-render.d.ts} +0 -0
- /package/types/{user-settings → vuu-shell/src/user-settings}/SettingsForm.d.ts +0 -0
- /package/types/{user-settings → vuu-shell/src/user-settings}/UserSettingsPanel.d.ts +0 -0
- /package/types/{user-settings → vuu-shell/src/user-settings}/index.d.ts +0 -0
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var vuuLayout = require('@vuu-ui/vuu-layout');
|
|
5
5
|
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
6
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
6
7
|
var core = require('@salt-ds/core');
|
|
7
8
|
var styles = require('@salt-ds/styles');
|
|
8
9
|
var window = require('@salt-ds/window');
|
|
@@ -32,7 +33,7 @@ const AppHeader = ({
|
|
|
32
33
|
const handleShowSettings = React.useCallback(() => {
|
|
33
34
|
dispatchLayoutAction({
|
|
34
35
|
type: "set-props",
|
|
35
|
-
path:
|
|
36
|
+
path: `#${vuuUtils.VuuShellLocation.ContextPanel}`,
|
|
36
37
|
props: {
|
|
37
38
|
expanded: true,
|
|
38
39
|
content: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppHeader.js","sources":["../../src/app-header/AppHeader.tsx"],"sourcesContent":["import { useLayoutProviderDispatch } from \"@vuu-ui/vuu-layout\";\nimport { Toolbar } from \"@vuu-ui/vuu-ui-controls\";\nimport { ThemeMode } from \"@vuu-ui/vuu-utils\";\nimport { Button } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useCallback } from \"react\";\nimport { logout } from \"../login\";\n\nimport appHeaderCss from \"./AppHeader.css\";\n\nconst classBase = \"vuuAppHeader\";\nexport interface AppHeaderProps extends HTMLAttributes<HTMLDivElement> {\n loginUrl?: string;\n themeMode?: ThemeMode;\n}\n\nexport const AppHeader = ({\n className: classNameProp,\n loginUrl,\n themeMode: _,\n ...htmlAttributes\n}: AppHeaderProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-app-header\",\n css: appHeaderCss,\n window: targetWindow,\n });\n\n const className = cx(classBase, classNameProp);\n\n const dispatchLayoutAction = useLayoutProviderDispatch();\n\n const handleLogout = useCallback(() => {\n logout(loginUrl);\n }, [loginUrl]);\n\n const handleShowSettings = useCallback(() => {\n dispatchLayoutAction({\n type: \"set-props\",\n path:
|
|
1
|
+
{"version":3,"file":"AppHeader.js","sources":["../../src/app-header/AppHeader.tsx"],"sourcesContent":["import { useLayoutProviderDispatch } from \"@vuu-ui/vuu-layout\";\nimport { Toolbar } from \"@vuu-ui/vuu-ui-controls\";\nimport { ThemeMode, VuuShellLocation } from \"@vuu-ui/vuu-utils\";\nimport { Button } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useCallback } from \"react\";\nimport { logout } from \"../login\";\n\nimport appHeaderCss from \"./AppHeader.css\";\n\nconst classBase = \"vuuAppHeader\";\nexport interface AppHeaderProps extends HTMLAttributes<HTMLDivElement> {\n loginUrl?: string;\n themeMode?: ThemeMode;\n}\n\nexport const AppHeader = ({\n className: classNameProp,\n loginUrl,\n themeMode: _,\n ...htmlAttributes\n}: AppHeaderProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-app-header\",\n css: appHeaderCss,\n window: targetWindow,\n });\n\n const className = cx(classBase, classNameProp);\n\n const dispatchLayoutAction = useLayoutProviderDispatch();\n\n const handleLogout = useCallback(() => {\n logout(loginUrl);\n }, [loginUrl]);\n\n const handleShowSettings = useCallback(() => {\n dispatchLayoutAction({\n type: \"set-props\",\n path: `#${VuuShellLocation.ContextPanel}`,\n props: {\n expanded: true,\n content: {\n type: \"ApplicationSettings\",\n },\n title: \"Settings\",\n },\n });\n }, [dispatchLayoutAction]);\n\n return (\n <Toolbar\n alignItems=\"end\"\n className={className}\n showSeparators\n {...htmlAttributes}\n >\n <Button className={`${classBase}-menuItem`} variant=\"secondary\">\n Help\n </Button>\n <Button className={`${classBase}-menuItem`} variant=\"secondary\">\n History <span data-icon=\"history\" />\n </Button>\n <Button\n className={`${classBase}-menuItem`}\n onClick={handleShowSettings}\n variant=\"secondary\"\n >\n Settings <span data-icon=\"settings\" />\n </Button>\n <Button\n className={`${classBase}-menuItem`}\n onClick={handleLogout}\n variant=\"secondary\"\n >\n Log out\n </Button>\n </Toolbar>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","appHeaderCss","useLayoutProviderDispatch","useCallback","logout","VuuShellLocation","jsxs","Toolbar","jsx","Button"],"mappings":";;;;;;;;;;;;;;AAYA,MAAM,SAAY,GAAA,cAAA,CAAA;AAMX,MAAM,YAAY,CAAC;AAAA,EACxB,SAAW,EAAA,aAAA;AAAA,EACX,QAAA;AAAA,EACA,SAAW,EAAA,CAAA;AAAA,EACX,GAAG,cAAA;AACL,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAAC,WAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAE7C,EAAA,MAAM,uBAAuBC,mCAA0B,EAAA,CAAA;AAEvD,EAAM,MAAA,YAAA,GAAeC,kBAAY,MAAM;AACrC,IAAAC,iBAAA,CAAO,QAAQ,CAAA,CAAA;AAAA,GACjB,EAAG,CAAC,QAAQ,CAAC,CAAA,CAAA;AAEb,EAAM,MAAA,kBAAA,GAAqBD,kBAAY,MAAM;AAC3C,IAAqB,oBAAA,CAAA;AAAA,MACnB,IAAM,EAAA,WAAA;AAAA,MACN,IAAA,EAAM,CAAI,CAAA,EAAAE,yBAAA,CAAiB,YAAY,CAAA,CAAA;AAAA,MACvC,KAAO,EAAA;AAAA,QACL,QAAU,EAAA,IAAA;AAAA,QACV,OAAS,EAAA;AAAA,UACP,IAAM,EAAA,qBAAA;AAAA,SACR;AAAA,QACA,KAAO,EAAA,UAAA;AAAA,OACT;AAAA,KACD,CAAA,CAAA;AAAA,GACH,EAAG,CAAC,oBAAoB,CAAC,CAAA,CAAA;AAEzB,EACE,uBAAAC,eAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACC,UAAW,EAAA,KAAA;AAAA,MACX,SAAA;AAAA,MACA,cAAc,EAAA,IAAA;AAAA,MACb,GAAG,cAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,eAAO,SAAW,EAAA,CAAA,EAAG,SAAS,CAAa,SAAA,CAAA,EAAA,OAAA,EAAQ,aAAY,QAEhE,EAAA,MAAA,EAAA,CAAA;AAAA,wCACCA,WAAO,EAAA,EAAA,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA,EAAa,SAAQ,WAAY,EAAA,QAAA,EAAA;AAAA,UAAA,UAAA;AAAA,0BACtDD,cAAA,CAAC,MAAK,EAAA,EAAA,WAAA,EAAU,SAAU,EAAA,CAAA;AAAA,SACpC,EAAA,CAAA;AAAA,wBACAF,eAAA;AAAA,UAACG,WAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA;AAAA,YACvB,OAAS,EAAA,kBAAA;AAAA,YACT,OAAQ,EAAA,WAAA;AAAA,YACT,QAAA,EAAA;AAAA,cAAA,WAAA;AAAA,8BACUD,cAAA,CAAC,MAAK,EAAA,EAAA,WAAA,EAAU,UAAW,EAAA,CAAA;AAAA,aAAA;AAAA,WAAA;AAAA,SACtC;AAAA,wBACAA,cAAA;AAAA,UAACC,WAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA;AAAA,YACvB,OAAS,EAAA,YAAA;AAAA,YACT,OAAQ,EAAA,WAAA;AAAA,YACT,QAAA,EAAA,SAAA;AAAA,WAAA;AAAA,SAED;AAAA,OAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -6,7 +6,11 @@ var React = require('react');
|
|
|
6
6
|
var ApplicationContext = require('./ApplicationContext.js');
|
|
7
7
|
var PersistenceProvider = require('../persistence-manager/PersistenceProvider.js');
|
|
8
8
|
require('../persistence-manager/LocalPersistenceManager.js');
|
|
9
|
-
require('
|
|
9
|
+
require('@salt-ds/styles');
|
|
10
|
+
require('@salt-ds/window');
|
|
11
|
+
require('@vuu-ui/vuu-ui-controls');
|
|
12
|
+
require('clsx');
|
|
13
|
+
require('@vuu-ui/vuu-utils');
|
|
10
14
|
require('../persistence-manager/StaticPersistenceManager.js');
|
|
11
15
|
|
|
12
16
|
const getThemeMode = (mode, userSettings) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationProvider.js","sources":["../../src/application-provider/ApplicationProvider.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n Density,\n Mode,\n SaltProvider,\n ThemeContextProps,\n useDensity,\n useTheme,\n} from \"@salt-ds/core\";\nimport {\n ReactElement,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport {\n ApplicationContext,\n ApplicationContextProps,\n} from \"./ApplicationContext\";\nimport { usePersistenceManager } from \"../persistence-manager\";\n\nexport interface ApplicationProviderProps\n extends Partial<Pick<ThemeContextProps, \"theme\" | \"mode\">>,\n Partial<Omit<ApplicationContextProps, \"userSettings\">> {\n children: ReactNode;\n density?: Density;\n}\n\nconst getThemeMode = (\n mode: Mode,\n userSettings?: Record<string, string | number | boolean>\n) => {\n const themeMode = userSettings?.themeMode;\n if (themeMode === \"light\" || themeMode === \"dark\") {\n return themeMode;\n }\n return mode;\n};\n\nexport const ApplicationProvider = ({\n children,\n density: densityProp,\n mode = \"light\",\n theme,\n userSettingsSchema: userSettingsSchema,\n user,\n}: ApplicationProviderProps): ReactElement | null => {\n const { mode: inheritedMode, theme: inheritedTheme } = useTheme();\n const density = useDensity(densityProp);\n const persistenceManager = usePersistenceManager();\n const context = useContext(ApplicationContext);\n const [userSettings, setSettings] =\n useState<Record<string, string | number | boolean>>();\n\n useMemo(async () => {\n if (persistenceManager) {\n const userSettings = await persistenceManager.getUserSettings();\n setSettings(userSettings);\n } else {\n setSettings({});\n }\n }, [persistenceManager]);\n\n const onUserSettingChanged = useCallback(\n (propertyName: string, value: VuuRowDataItemType) => {\n setSettings((currentSettings) => {\n const newSettings = { ...currentSettings, [propertyName]: value };\n persistenceManager?.saveUserSettings(newSettings);\n return newSettings;\n });\n },\n [persistenceManager]\n );\n\n return userSettings ? (\n <ApplicationContext.Provider\n value={{\n ...context,\n onUserSettingChanged,\n userSettings,\n userSettingsSchema,\n user: user ?? context.user,\n }}\n >\n <SaltProvider\n theme={theme ?? inheritedTheme ?? \"vuu-theme\"}\n density={density}\n mode={getThemeMode(mode ?? inheritedMode, userSettings)}\n >\n {children}\n </SaltProvider>\n </ApplicationContext.Provider>\n ) : null;\n};\n\nexport const useApplicationUser = () => {\n const { user } = useContext(ApplicationContext);\n return user;\n};\n\n//Setter method (only used within the shell)\nexport const useApplicationSettings = () => {\n const { onUserSettingChanged, userSettings, userSettingsSchema } =\n useContext(ApplicationContext);\n return {\n onUserSettingChanged,\n userSettings,\n userSettingsSchema,\n };\n};\n\n//Getter method (read only access to applicationSetting)\nexport const useUserSetting = () => {\n const { userSettings } = useContext(ApplicationContext);\n return { userSettings };\n};\n"],"names":["useTheme","useDensity","usePersistenceManager","useContext","ApplicationContext","useState","useMemo","userSettings","useCallback","jsx","SaltProvider"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ApplicationProvider.js","sources":["../../src/application-provider/ApplicationProvider.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n Density,\n Mode,\n SaltProvider,\n ThemeContextProps,\n useDensity,\n useTheme,\n} from \"@salt-ds/core\";\nimport {\n ReactElement,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport {\n ApplicationContext,\n ApplicationContextProps,\n} from \"./ApplicationContext\";\nimport { usePersistenceManager } from \"../persistence-manager\";\n\nexport interface ApplicationProviderProps\n extends Partial<Pick<ThemeContextProps, \"theme\" | \"mode\">>,\n Partial<Omit<ApplicationContextProps, \"userSettings\">> {\n children: ReactNode;\n density?: Density;\n}\n\nconst getThemeMode = (\n mode: Mode,\n userSettings?: Record<string, string | number | boolean>\n) => {\n const themeMode = userSettings?.themeMode;\n if (themeMode === \"light\" || themeMode === \"dark\") {\n return themeMode;\n }\n return mode;\n};\n\nexport const ApplicationProvider = ({\n children,\n density: densityProp,\n mode = \"light\",\n theme,\n userSettingsSchema: userSettingsSchema,\n user,\n}: ApplicationProviderProps): ReactElement | null => {\n const { mode: inheritedMode, theme: inheritedTheme } = useTheme();\n const density = useDensity(densityProp);\n const persistenceManager = usePersistenceManager();\n const context = useContext(ApplicationContext);\n const [userSettings, setSettings] =\n useState<Record<string, string | number | boolean>>();\n\n useMemo(async () => {\n if (persistenceManager) {\n const userSettings = await persistenceManager.getUserSettings();\n setSettings(userSettings);\n } else {\n setSettings({});\n }\n }, [persistenceManager]);\n\n const onUserSettingChanged = useCallback(\n (propertyName: string, value: VuuRowDataItemType) => {\n setSettings((currentSettings) => {\n const newSettings = { ...currentSettings, [propertyName]: value };\n persistenceManager?.saveUserSettings(newSettings);\n return newSettings;\n });\n },\n [persistenceManager]\n );\n\n return userSettings ? (\n <ApplicationContext.Provider\n value={{\n ...context,\n onUserSettingChanged,\n userSettings,\n userSettingsSchema,\n user: user ?? context.user,\n }}\n >\n <SaltProvider\n theme={theme ?? inheritedTheme ?? \"vuu-theme\"}\n density={density}\n mode={getThemeMode(mode ?? inheritedMode, userSettings)}\n >\n {children}\n </SaltProvider>\n </ApplicationContext.Provider>\n ) : null;\n};\n\nexport const useApplicationUser = () => {\n const { user } = useContext(ApplicationContext);\n return user;\n};\n\n//Setter method (only used within the shell)\nexport const useApplicationSettings = () => {\n const { onUserSettingChanged, userSettings, userSettingsSchema } =\n useContext(ApplicationContext);\n return {\n onUserSettingChanged,\n userSettings,\n userSettingsSchema,\n };\n};\n\n//Getter method (read only access to applicationSetting)\nexport const useUserSetting = () => {\n const { userSettings } = useContext(ApplicationContext);\n return { userSettings };\n};\n"],"names":["useTheme","useDensity","usePersistenceManager","useContext","ApplicationContext","useState","useMemo","userSettings","useCallback","jsx","SaltProvider"],"mappings":"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"}
|
package/cjs/index.js
CHANGED
|
@@ -4,10 +4,10 @@ var AppHeader = require('./app-header/AppHeader.js');
|
|
|
4
4
|
var ConnectionStatusIndicator = require('./connection-status/ConnectionStatusIndicator.js');
|
|
5
5
|
var DataSourceProvider = require('./datasource-provider/DataSourceProvider.js');
|
|
6
6
|
var Feature = require('./feature/Feature.js');
|
|
7
|
-
var
|
|
7
|
+
var defaultWorkspaceJSON = require('./layout-management/defaultWorkspaceJSON.js');
|
|
8
8
|
var SaveLayoutPanel = require('./layout-management/SaveLayoutPanel.js');
|
|
9
9
|
var LayoutList = require('./layout-management/LayoutList.js');
|
|
10
|
-
var
|
|
10
|
+
var LayoutManagementProvider = require('./layout-management/LayoutManagementProvider.js');
|
|
11
11
|
var useLayoutContextMenuItems = require('./layout-management/useLayoutContextMenuItems.js');
|
|
12
12
|
var LeftNav = require('./left-nav/LeftNav.js');
|
|
13
13
|
var LoginPanel = require('./login/LoginPanel.js');
|
|
@@ -18,8 +18,9 @@ var RemotePersistenceManager = require('./persistence-manager/RemotePersistenceM
|
|
|
18
18
|
var StaticPersistenceManager = require('./persistence-manager/StaticPersistenceManager.js');
|
|
19
19
|
var SessionEditingForm = require('./session-editing-form/SessionEditingForm.js');
|
|
20
20
|
var shell = require('./shell.js');
|
|
21
|
-
var ContextPanel = require('./shell-
|
|
22
|
-
var
|
|
21
|
+
var ContextPanel = require('./shell-layout-templates/context-panel/ContextPanel.js');
|
|
22
|
+
var useShellLayout = require('./shell-layout-templates/useShellLayout.js');
|
|
23
|
+
var SidePanel = require('./shell-layout-templates/side-panel/SidePanel.js');
|
|
23
24
|
var ShellContextProvider = require('./ShellContextProvider.js');
|
|
24
25
|
var FeatureList = require('./feature-list/FeatureList.js');
|
|
25
26
|
var ThemeSwitch = require('./theme-switch/ThemeSwitch.js');
|
|
@@ -34,16 +35,15 @@ exports.ConnectionStatusIndicator = ConnectionStatusIndicator.ConnectionStatusIn
|
|
|
34
35
|
exports.DataSourceProvider = DataSourceProvider.DataSourceProvider;
|
|
35
36
|
exports.useDataSource = DataSourceProvider.useDataSource;
|
|
36
37
|
exports.Feature = Feature.Feature;
|
|
37
|
-
exports.
|
|
38
|
-
exports.
|
|
39
|
-
exports.
|
|
40
|
-
exports.
|
|
41
|
-
exports.warningLayout = defaultApplicationJson.warningLayout;
|
|
38
|
+
exports.getWorkspaceWithLayoutJSON = defaultWorkspaceJSON.getWorkspaceWithLayoutJSON;
|
|
39
|
+
exports.loadingJSON = defaultWorkspaceJSON.loadingJSON;
|
|
40
|
+
exports.stackWorkspaceJSON = defaultWorkspaceJSON.stackWorkspaceJSON;
|
|
41
|
+
exports.warningLayout = defaultWorkspaceJSON.warningLayout;
|
|
42
42
|
exports.SaveLayoutPanel = SaveLayoutPanel.SaveLayoutPanel;
|
|
43
43
|
exports.LayoutList = LayoutList.LayoutList;
|
|
44
|
-
exports.LayoutManagementContext =
|
|
45
|
-
exports.LayoutManagementProvider =
|
|
46
|
-
exports.useLayoutManager =
|
|
44
|
+
exports.LayoutManagementContext = LayoutManagementProvider.LayoutManagementContext;
|
|
45
|
+
exports.LayoutManagementProvider = LayoutManagementProvider.LayoutManagementProvider;
|
|
46
|
+
exports.useLayoutManager = LayoutManagementProvider.useLayoutManager;
|
|
47
47
|
exports.useLayoutContextMenuItems = useLayoutContextMenuItems.useLayoutContextMenuItems;
|
|
48
48
|
exports.LeftNav = LeftNav.LeftNav;
|
|
49
49
|
exports.LoginPanel = LoginPanel.LoginPanel;
|
|
@@ -60,6 +60,7 @@ exports.StaticPersistenceManager = StaticPersistenceManager.StaticPersistenceMan
|
|
|
60
60
|
exports.SessionEditingForm = SessionEditingForm.SessionEditingForm;
|
|
61
61
|
exports.Shell = shell.Shell;
|
|
62
62
|
exports.ContextPanel = ContextPanel.ContextPanel;
|
|
63
|
+
exports.useShellLayout = useShellLayout.useShellLayout;
|
|
63
64
|
exports.SidePanel = SidePanel.SidePanel;
|
|
64
65
|
exports.ShellContextProvider = ShellContextProvider.ShellContextProvider;
|
|
65
66
|
exports.useShellContext = ShellContextProvider.useShellContext;
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -5,7 +5,7 @@ var React = require('react');
|
|
|
5
5
|
var styles = require('@salt-ds/styles');
|
|
6
6
|
var window = require('@salt-ds/window');
|
|
7
7
|
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
8
|
-
var
|
|
8
|
+
var LayoutManagementProvider = require('./LayoutManagementProvider.js');
|
|
9
9
|
var LayoutTile = require('./LayoutTile.js');
|
|
10
10
|
var cx = require('clsx');
|
|
11
11
|
var LayoutList$1 = require('./LayoutList.css.js');
|
|
@@ -22,7 +22,7 @@ const LayoutList = ({
|
|
|
22
22
|
css: LayoutList$1,
|
|
23
23
|
window: targetWindow
|
|
24
24
|
});
|
|
25
|
-
const { layoutMetadata, loadLayoutById } =
|
|
25
|
+
const { layoutMetadata, loadLayoutById } = LayoutManagementProvider.useLayoutManager();
|
|
26
26
|
const handleLoadLayout = React.useCallback(
|
|
27
27
|
(layoutId) => {
|
|
28
28
|
if (layoutId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutList.js","sources":["../../src/layout-management/LayoutList.tsx"],"sourcesContent":["import { HTMLAttributes, useCallback, useMemo } from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { IconButton, List, ListItem } from \"@vuu-ui/vuu-ui-controls\";\nimport { LayoutMetadata } from \"./layoutTypes\";\nimport { useLayoutManager } from \"./
|
|
1
|
+
{"version":3,"file":"LayoutList.js","sources":["../../src/layout-management/LayoutList.tsx"],"sourcesContent":["import { HTMLAttributes, useCallback, useMemo } from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { IconButton, List, ListItem } from \"@vuu-ui/vuu-ui-controls\";\nimport { LayoutMetadata } from \"./layoutTypes\";\nimport { useLayoutManager } from \"./LayoutManagementProvider\";\nimport { LayoutTile } from \"./LayoutTile\";\nimport cx from \"clsx\";\n\nimport layoutListCss from \"./LayoutList.css\";\n\ntype LayoutGroups = {\n [groupName: string]: LayoutMetadata[];\n};\n\nconst classBase = \"vuuLayoutList\";\n\nexport const LayoutList = ({\n className,\n title,\n ...htmlAttributes\n}: 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 = useCallback(\n (layoutId?: string) => {\n if (layoutId) {\n loadLayoutById(layoutId);\n }\n },\n [loadLayoutById]\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 const content = useMemo<JSX.Element[]>(() => {\n return Object.entries(layoutsByGroup).map(\n ([heading, layoutMetadata], index) => (\n <div className={`${classBase}-group`} key={index}>\n <div className={`${classBase}-groupHeader`}>{heading}</div>\n <List<LayoutMetadata, \"none\">\n height={undefined}\n itemHeight={68}\n selectionStrategy=\"none\"\n source={layoutMetadata}\n ListItem={({ item, ...props }) => (\n <ListItem {...props}>\n <LayoutTile\n {...htmlAttributes}\n key={item?.id}\n metadata={item as LayoutMetadata}\n onLoadLayout={handleLoadLayout}\n />\n <IconButton\n className={`${classBase}-menu`}\n data-embedded\n icon=\"more-vert\"\n variant=\"secondary\"\n />\n </ListItem>\n )}\n />\n </div>\n )\n );\n }, [handleLoadLayout, htmlAttributes, layoutsByGroup]);\n\n return (\n <div {...htmlAttributes} className={cx(classBase, \"vuuScrollable\")}>\n <div className={`${classBase}-header`}>{title}</div>\n <div className={`${classBase}-content`}>{content}</div>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","layoutListCss","useLayoutManager","useCallback","useMemo","layoutMetadata","jsxs","jsx","List","ListItem","createElement","LayoutTile","IconButton"],"mappings":"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"}
|
|
@@ -3,19 +3,25 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var vuuLayout = require('@vuu-ui/vuu-layout');
|
|
5
5
|
var vuuPopups = require('@vuu-ui/vuu-popups');
|
|
6
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
6
7
|
var React = require('react');
|
|
7
8
|
var PersistenceProvider = require('../persistence-manager/PersistenceProvider.js');
|
|
8
9
|
require('../persistence-manager/LocalPersistenceManager.js');
|
|
9
|
-
require('
|
|
10
|
+
require('@salt-ds/core');
|
|
11
|
+
require('@salt-ds/styles');
|
|
12
|
+
require('@salt-ds/window');
|
|
13
|
+
require('@vuu-ui/vuu-ui-controls');
|
|
14
|
+
require('clsx');
|
|
10
15
|
require('../persistence-manager/StaticPersistenceManager.js');
|
|
11
|
-
var
|
|
16
|
+
var defaultWorkspaceJSON = require('./defaultWorkspaceJSON.js');
|
|
12
17
|
|
|
18
|
+
const { info } = vuuUtils.logger("useLayoutManager");
|
|
13
19
|
const LayoutManagementContext = React.createContext({
|
|
14
20
|
getApplicationSettings: () => void 0,
|
|
15
21
|
layoutMetadata: [],
|
|
16
22
|
saveLayout: () => void 0,
|
|
17
23
|
// The default Application JSON will be served if no LayoutManagementProvider
|
|
18
|
-
|
|
24
|
+
workspaceJSON: defaultWorkspaceJSON.getWorkspaceWithLayoutJSON(),
|
|
19
25
|
saveApplicationLayout: () => void 0,
|
|
20
26
|
saveApplicationSettings: () => void 0,
|
|
21
27
|
loadLayoutById: () => void 0
|
|
@@ -33,15 +39,20 @@ const ensureLayoutHasTitle = (layout, layoutMetadata) => {
|
|
|
33
39
|
};
|
|
34
40
|
}
|
|
35
41
|
};
|
|
42
|
+
const loadingApplicationJSON = {
|
|
43
|
+
workspaceJSON: defaultWorkspaceJSON.loadingJSON
|
|
44
|
+
};
|
|
36
45
|
const LayoutManagementProvider = ({
|
|
37
|
-
|
|
46
|
+
WorkspaceProps,
|
|
47
|
+
layoutJSON,
|
|
48
|
+
workspaceJSON: customWorkspaceJSON,
|
|
38
49
|
...props
|
|
39
50
|
}) => {
|
|
40
51
|
const [layoutMetadata, setLayoutMetadata] = React.useState([]);
|
|
41
52
|
const [, forceRefresh] = React.useState({});
|
|
42
53
|
const notify = vuuPopups.useNotifications();
|
|
43
54
|
const persistenceManager = PersistenceProvider.usePersistenceManager();
|
|
44
|
-
const applicationJSONRef = React.useRef(
|
|
55
|
+
const applicationJSONRef = React.useRef(loadingApplicationJSON);
|
|
45
56
|
const setApplicationJSON = React.useCallback(
|
|
46
57
|
(applicationJSON, rerender = true) => {
|
|
47
58
|
applicationJSONRef.current = applicationJSON;
|
|
@@ -51,12 +62,12 @@ const LayoutManagementProvider = ({
|
|
|
51
62
|
},
|
|
52
63
|
[]
|
|
53
64
|
);
|
|
54
|
-
const
|
|
55
|
-
(
|
|
65
|
+
const setWorkspaceJSON = React.useCallback(
|
|
66
|
+
(workspaceJSON, rerender = true) => {
|
|
56
67
|
setApplicationJSON(
|
|
57
68
|
{
|
|
58
69
|
...applicationJSONRef.current,
|
|
59
|
-
|
|
70
|
+
workspaceJSON
|
|
60
71
|
},
|
|
61
72
|
rerender
|
|
62
73
|
);
|
|
@@ -91,10 +102,19 @@ const LayoutManagementProvider = ({
|
|
|
91
102
|
});
|
|
92
103
|
persistenceManager?.loadApplicationJSON().then((applicationJSON) => {
|
|
93
104
|
if (applicationJSON) {
|
|
105
|
+
info?.("applicationJSON loaded successfully");
|
|
94
106
|
setApplicationJSON(applicationJSON);
|
|
95
107
|
} else {
|
|
108
|
+
const workspaceJSON = defaultWorkspaceJSON.getWorkspaceWithLayoutJSON(
|
|
109
|
+
customWorkspaceJSON,
|
|
110
|
+
layoutJSON,
|
|
111
|
+
WorkspaceProps
|
|
112
|
+
);
|
|
113
|
+
info?.(`applicationJSON not found, getting defaultWorkspaceJSON,
|
|
114
|
+
${JSON.stringify(workspaceJSON, null, 2)}
|
|
115
|
+
`);
|
|
96
116
|
setApplicationJSON({
|
|
97
|
-
|
|
117
|
+
workspaceJSON
|
|
98
118
|
});
|
|
99
119
|
}
|
|
100
120
|
}).catch((error) => {
|
|
@@ -108,25 +128,32 @@ const LayoutManagementProvider = ({
|
|
|
108
128
|
error
|
|
109
129
|
);
|
|
110
130
|
});
|
|
111
|
-
}, [
|
|
131
|
+
}, [
|
|
132
|
+
WorkspaceProps,
|
|
133
|
+
customWorkspaceJSON,
|
|
134
|
+
layoutJSON,
|
|
135
|
+
notify,
|
|
136
|
+
persistenceManager,
|
|
137
|
+
setApplicationJSON
|
|
138
|
+
]);
|
|
112
139
|
const saveApplicationLayout = React.useCallback(
|
|
113
140
|
(layout) => {
|
|
114
141
|
if (vuuLayout.isLayoutJSON(layout)) {
|
|
115
|
-
|
|
142
|
+
setWorkspaceJSON(layout, false);
|
|
116
143
|
persistenceManager?.saveApplicationJSON(applicationJSONRef.current);
|
|
117
144
|
} else {
|
|
118
145
|
console.error("Tried to save invalid application layout", layout);
|
|
119
146
|
}
|
|
120
147
|
},
|
|
121
|
-
[persistenceManager,
|
|
148
|
+
[persistenceManager, setWorkspaceJSON]
|
|
122
149
|
);
|
|
123
150
|
const saveLayout = React.useCallback(
|
|
124
151
|
(metadata) => {
|
|
125
152
|
let layoutToSave;
|
|
126
153
|
try {
|
|
127
154
|
layoutToSave = vuuLayout.resolveJSONPath(
|
|
128
|
-
applicationJSONRef.current.
|
|
129
|
-
|
|
155
|
+
applicationJSONRef.current.workspaceJSON,
|
|
156
|
+
`#${vuuUtils.VuuShellLocation.Workspace}.ACTIVE_CHILD`
|
|
130
157
|
);
|
|
131
158
|
} catch (e) {
|
|
132
159
|
}
|
|
@@ -182,8 +209,8 @@ const LayoutManagementProvider = ({
|
|
|
182
209
|
const loadLayoutById = React.useCallback(
|
|
183
210
|
(id) => {
|
|
184
211
|
persistenceManager?.loadLayout(id).then((layoutJson) => {
|
|
185
|
-
const {
|
|
186
|
-
|
|
212
|
+
const { workspaceJSON: currentLayout } = applicationJSONRef.current;
|
|
213
|
+
setWorkspaceJSON({
|
|
187
214
|
...currentLayout,
|
|
188
215
|
children: (currentLayout.children || []).concat(layoutJson),
|
|
189
216
|
props: {
|
|
@@ -200,7 +227,7 @@ const LayoutManagementProvider = ({
|
|
|
200
227
|
console.error("Error occurred while loading layout", error);
|
|
201
228
|
});
|
|
202
229
|
},
|
|
203
|
-
[notify, persistenceManager,
|
|
230
|
+
[notify, persistenceManager, setWorkspaceJSON]
|
|
204
231
|
);
|
|
205
232
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
206
233
|
LayoutManagementContext.Provider,
|
|
@@ -209,7 +236,7 @@ const LayoutManagementProvider = ({
|
|
|
209
236
|
getApplicationSettings,
|
|
210
237
|
layoutMetadata,
|
|
211
238
|
saveLayout,
|
|
212
|
-
|
|
239
|
+
workspaceJSON: applicationJSONRef.current.workspaceJSON,
|
|
213
240
|
saveApplicationLayout,
|
|
214
241
|
saveApplicationSettings,
|
|
215
242
|
loadLayoutById
|
|
@@ -223,4 +250,4 @@ const useLayoutManager = () => React.useContext(LayoutManagementContext);
|
|
|
223
250
|
exports.LayoutManagementContext = LayoutManagementContext;
|
|
224
251
|
exports.LayoutManagementProvider = LayoutManagementProvider;
|
|
225
252
|
exports.useLayoutManager = useLayoutManager;
|
|
226
|
-
//# sourceMappingURL=
|
|
253
|
+
//# sourceMappingURL=LayoutManagementProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayoutManagementProvider.js","sources":["../../src/layout-management/LayoutManagementProvider.tsx"],"sourcesContent":["import { StackProps, isLayoutJSON, resolveJSONPath } from \"@vuu-ui/vuu-layout\";\nimport { useNotifications } from \"@vuu-ui/vuu-popups\";\nimport {\n VuuShellLocation,\n logger,\n type ApplicationJSON,\n type ApplicationSetting,\n type ApplicationSettings,\n type LayoutJSON,\n} from \"@vuu-ui/vuu-utils\";\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { usePersistenceManager } from \"../persistence-manager\";\nimport {\n getWorkspaceWithLayoutJSON,\n loadingJSON,\n} from \"./defaultWorkspaceJSON\";\nimport { LayoutMetadata, LayoutMetadataDto } from \"./layoutTypes\";\n\nconst { info } = logger(\"useLayoutManager\");\n\nexport const LayoutManagementContext = React.createContext<{\n layoutMetadata: LayoutMetadata[];\n saveLayout: (n: LayoutMetadataDto) => void;\n workspaceJSON: LayoutJSON;\n saveApplicationLayout: (layout: LayoutJSON) => void;\n getApplicationSettings: (\n key?: keyof ApplicationSettings\n ) => ApplicationSettings | ApplicationSetting | undefined;\n saveApplicationSettings: (\n settings: ApplicationSettings | ApplicationSetting,\n key?: keyof ApplicationSettings\n ) => void;\n loadLayoutById: (id: string) => void;\n}>({\n getApplicationSettings: () => undefined,\n layoutMetadata: [],\n saveLayout: () => undefined,\n // The default Application JSON will be served if no LayoutManagementProvider\n workspaceJSON: getWorkspaceWithLayoutJSON(),\n saveApplicationLayout: () => undefined,\n saveApplicationSettings: () => undefined,\n loadLayoutById: () => undefined,\n});\n\nexport type WorkspaceProps = Pick<StackProps, \"showTabs\" | \"TabstripProps\">;\n\nexport type LayoutManagementProviderProps = {\n /**\n * props applied to the default workspace (Stack),\n * ignored if workspaceJSON is provided.\n */\n WorkspaceProps?: WorkspaceProps;\n\n children: JSX.Element | JSX.Element[];\n /**\n * layoutJSON defines the default layout to render on first load and until such time as\n * layout state has been persisted. After that, the persisted state will be rendered.\n */\n layoutJSON?: LayoutJSON;\n /**\n * The Vuu workspace is the container into which layouts are loaded. By default, it will be\n * a Tabbed Panel (Stack + Tabstrip), showing a tab per Layout.\n */\n workspaceJSON?: LayoutJSON;\n};\n\nconst ensureLayoutHasTitle = (\n layout: LayoutJSON,\n layoutMetadata: LayoutMetadataDto\n) => {\n if (layout.props?.title !== undefined) {\n return layout;\n } else {\n return {\n ...layout,\n props: {\n ...layout.props,\n title: layoutMetadata.name,\n },\n };\n }\n};\n\nconst loadingApplicationJSON: ApplicationJSON = {\n workspaceJSON: loadingJSON,\n};\n\n/**\n * LayoutManagementProvider supplies an API for loading and saving layout documents.\n * Initial layout is automatically loaded on startup. Because this hook is responsible\n * only for loading and saving layouts, it only triggers a render when content is loaded.\n *\n * Initial layout displays a loading state\n * User may supply a default layout. This will not be displayed until call has been made to\n * persistenceManager to retrieve stored layout state. If no stored state is returned, the\n * default layout provided by user will be set as current state (and hence rendered). If no\n * default layout has been provided by user, the sysem default will be used (simple PlaceHolder)\n * If saved layout state has been returned, that will be set as current state (and rendered)\n *\n */\nexport const LayoutManagementProvider = ({\n WorkspaceProps,\n layoutJSON,\n workspaceJSON: customWorkspaceJSON,\n ...props\n}: LayoutManagementProviderProps) => {\n const [layoutMetadata, setLayoutMetadata] = useState<LayoutMetadata[]>([]);\n // TODO this default should probably be a loading state rather than the placeholder\n // It will be replaced as soon as the localStorage/remote layout is resolved\n const [, forceRefresh] = useState({});\n const notify = useNotifications();\n const persistenceManager = usePersistenceManager();\n const applicationJSONRef = useRef<ApplicationJSON>(loadingApplicationJSON);\n\n const setApplicationJSON = useCallback(\n (applicationJSON: ApplicationJSON, rerender = true) => {\n applicationJSONRef.current = applicationJSON;\n if (rerender) {\n forceRefresh({});\n }\n },\n []\n );\n\n const setWorkspaceJSON = useCallback(\n (workspaceJSON: LayoutJSON, rerender = true) => {\n setApplicationJSON(\n {\n ...applicationJSONRef.current,\n workspaceJSON,\n },\n rerender\n );\n },\n [setApplicationJSON]\n );\n\n const setApplicationSettings = useCallback(\n (settings: ApplicationSettings) => {\n setApplicationJSON(\n {\n ...applicationJSONRef.current,\n settings: {\n ...applicationJSONRef.current.settings,\n ...settings,\n },\n },\n false\n );\n },\n [setApplicationJSON]\n );\n\n useEffect(() => {\n //TODO this does not need to be done ahead of time\n persistenceManager\n ?.loadMetadata()\n .then((metadata) => {\n setLayoutMetadata(metadata);\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Load Layouts\",\n body: \"Could not load list of available layouts\",\n });\n console.error(\"Error occurred while retrieving metadata\", error);\n });\n\n persistenceManager\n ?.loadApplicationJSON()\n .then((applicationJSON?: ApplicationJSON) => {\n if (applicationJSON) {\n info?.(\"applicationJSON loaded successfully\");\n setApplicationJSON(applicationJSON);\n } else {\n // No applicationJSON has been saved yet. Construct our\n // initial applicationJSON from user configuration and\n // default values.\n const workspaceJSON = getWorkspaceWithLayoutJSON(\n customWorkspaceJSON,\n layoutJSON,\n WorkspaceProps\n );\n info?.(`applicationJSON not found, getting defaultWorkspaceJSON,\n ${JSON.stringify(workspaceJSON, null, 2)}\n `);\n setApplicationJSON({\n workspaceJSON,\n });\n }\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Load Layout\",\n body: \"Could not load your latest view\",\n });\n console.error(\n \"Error occurred while retrieving application layout\",\n error\n );\n });\n }, [\n WorkspaceProps,\n customWorkspaceJSON,\n layoutJSON,\n notify,\n persistenceManager,\n setApplicationJSON,\n ]);\n\n const saveApplicationLayout = useCallback(\n (layout: LayoutJSON) => {\n if (isLayoutJSON(layout)) {\n setWorkspaceJSON(layout, false);\n persistenceManager?.saveApplicationJSON(applicationJSONRef.current);\n } else {\n console.error(\"Tried to save invalid application layout\", layout);\n }\n },\n [persistenceManager, setWorkspaceJSON]\n );\n\n const saveLayout = useCallback(\n (metadata: LayoutMetadataDto) => {\n let layoutToSave: LayoutJSON | undefined;\n try {\n layoutToSave = resolveJSONPath(\n applicationJSONRef.current.workspaceJSON,\n `#${VuuShellLocation.Workspace}.ACTIVE_CHILD`\n );\n } catch (e) {\n // ignore, code below will handle\n }\n\n if (layoutToSave && isLayoutJSON(layoutToSave)) {\n persistenceManager\n ?.createLayout(metadata, ensureLayoutHasTitle(layoutToSave, metadata))\n .then((metadata) => {\n notify({\n type: \"success\",\n header: \"Layout Saved Successfully\",\n body: `${metadata.name} saved successfully`,\n });\n setLayoutMetadata((prev) => [...prev, metadata]);\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Save Layout\",\n body: `Failed to save layout ${metadata.name}`,\n });\n console.error(\"Error occurred while saving layout\", error);\n });\n } else {\n console.error(\"Tried to save invalid layout\", layoutToSave);\n notify({\n type: \"error\",\n header: \"Failed to Save Layout\",\n body: \"Cannot save invalid layout\",\n });\n }\n },\n [notify, persistenceManager]\n );\n\n const saveApplicationSettings = useCallback(\n (\n settings: ApplicationSettings | ApplicationSetting,\n key?: keyof ApplicationSettings\n ) => {\n const { settings: applicationSettings } = applicationJSONRef.current;\n if (key) {\n setApplicationSettings({\n ...applicationSettings,\n [key]: settings,\n });\n } else {\n setApplicationSettings(settings as ApplicationSettings);\n }\n persistenceManager?.saveApplicationJSON(applicationJSONRef.current);\n },\n [persistenceManager, setApplicationSettings]\n );\n\n const getApplicationSettings = useCallback(\n (key?: keyof ApplicationSettings) => {\n const { settings } = applicationJSONRef.current;\n return key ? settings?.[key] : settings;\n },\n []\n );\n\n const loadLayoutById = useCallback(\n (id: string) => {\n persistenceManager\n ?.loadLayout(id)\n .then((layoutJson) => {\n const { workspaceJSON: currentLayout } = applicationJSONRef.current;\n setWorkspaceJSON({\n ...currentLayout,\n children: (currentLayout.children || []).concat(layoutJson),\n props: {\n ...currentLayout.props,\n active: currentLayout.children?.length ?? 0,\n },\n });\n })\n .catch((error: Error) => {\n notify({\n type: \"error\",\n header: \"Failed to Load Layout\",\n body: \"Failed to load the requested layout\",\n });\n console.error(\"Error occurred while loading layout\", error);\n });\n },\n [notify, persistenceManager, setWorkspaceJSON]\n );\n\n return (\n <LayoutManagementContext.Provider\n value={{\n getApplicationSettings,\n layoutMetadata,\n saveLayout,\n workspaceJSON: applicationJSONRef.current.workspaceJSON,\n saveApplicationLayout,\n saveApplicationSettings,\n loadLayoutById,\n }}\n >\n {props.children}\n </LayoutManagementContext.Provider>\n );\n};\n\nexport const useLayoutManager = () => useContext(LayoutManagementContext);\n"],"names":["logger","getWorkspaceWithLayoutJSON","loadingJSON","useState","useNotifications","usePersistenceManager","useRef","useCallback","useEffect","isLayoutJSON","resolveJSONPath","VuuShellLocation","metadata","jsx","useContext"],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
+
|
|
5
|
+
const warningLayout = {
|
|
6
|
+
type: "View",
|
|
7
|
+
props: {
|
|
8
|
+
style: { height: "calc(100% - 6px)" }
|
|
9
|
+
},
|
|
10
|
+
children: [
|
|
11
|
+
{
|
|
12
|
+
props: {
|
|
13
|
+
className: "vuuShell-warningPlaceholder"
|
|
14
|
+
},
|
|
15
|
+
type: "Placeholder"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
};
|
|
19
|
+
const loadingJSON = {
|
|
20
|
+
type: "Component",
|
|
21
|
+
id: "loading-main",
|
|
22
|
+
props: {}
|
|
23
|
+
};
|
|
24
|
+
const stackWorkspaceJSON = {
|
|
25
|
+
type: "Stack",
|
|
26
|
+
id: vuuUtils.VuuShellLocation.Workspace,
|
|
27
|
+
props: {
|
|
28
|
+
className: `${vuuUtils.VuuShellLocation.Workspace}-tabs`,
|
|
29
|
+
TabstripProps: {
|
|
30
|
+
allowAddTab: true,
|
|
31
|
+
allowCloseTab: true,
|
|
32
|
+
allowRenameTab: true,
|
|
33
|
+
animateSelectionThumb: false,
|
|
34
|
+
location: "workspace-tab",
|
|
35
|
+
variant: "primary"
|
|
36
|
+
},
|
|
37
|
+
preserve: true,
|
|
38
|
+
active: 0
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const placeholderLayout = {
|
|
42
|
+
props: {
|
|
43
|
+
id: "tab1",
|
|
44
|
+
title: "Tab 1",
|
|
45
|
+
className: "vuuShell-Placeholder"
|
|
46
|
+
},
|
|
47
|
+
type: "Placeholder"
|
|
48
|
+
};
|
|
49
|
+
const getWorkspaceWithLayoutJSON = (customWorkspaceJSON, layoutJSON = placeholderLayout, stackProps) => {
|
|
50
|
+
if (customWorkspaceJSON) {
|
|
51
|
+
return {
|
|
52
|
+
...customWorkspaceJSON,
|
|
53
|
+
children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
|
|
54
|
+
};
|
|
55
|
+
} else {
|
|
56
|
+
return {
|
|
57
|
+
...stackWorkspaceJSON,
|
|
58
|
+
props: {
|
|
59
|
+
...stackWorkspaceJSON.props,
|
|
60
|
+
...stackProps,
|
|
61
|
+
TabstripProps: {
|
|
62
|
+
...stackWorkspaceJSON.props?.TabstripProps,
|
|
63
|
+
...stackProps?.TabstripProps
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
exports.getWorkspaceWithLayoutJSON = getWorkspaceWithLayoutJSON;
|
|
72
|
+
exports.loadingJSON = loadingJSON;
|
|
73
|
+
exports.stackWorkspaceJSON = stackWorkspaceJSON;
|
|
74
|
+
exports.warningLayout = warningLayout;
|
|
75
|
+
//# sourceMappingURL=defaultWorkspaceJSON.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultWorkspaceJSON.js","sources":["../../src/layout-management/defaultWorkspaceJSON.ts"],"sourcesContent":["import { LayoutJSON, VuuShellLocation } from \"@vuu-ui/vuu-utils\";\nimport { WorkspaceProps } from \"./LayoutManagementProvider\";\nimport { StackProps } from \"packages/vuu-layout/src\";\n\nexport const warningLayout: LayoutJSON = {\n type: \"View\",\n props: {\n style: { height: \"calc(100% - 6px)\" },\n },\n children: [\n {\n props: {\n className: \"vuuShell-warningPlaceholder\",\n },\n type: \"Placeholder\",\n },\n ],\n};\n\nexport const loadingJSON: Readonly<LayoutJSON> = {\n type: \"Component\",\n id: \"loading-main\",\n props: {},\n};\n\nexport const stackWorkspaceJSON: LayoutJSON<\n StackProps & {\n preserve: boolean;\n }\n> = {\n type: \"Stack\",\n id: VuuShellLocation.Workspace,\n props: {\n className: `${VuuShellLocation.Workspace}-tabs`,\n TabstripProps: {\n allowAddTab: true,\n allowCloseTab: true,\n allowRenameTab: true,\n animateSelectionThumb: false,\n location: \"workspace-tab\",\n variant: \"primary\",\n },\n preserve: true,\n active: 0,\n },\n};\n\nconst placeholderLayout: LayoutJSON = {\n props: {\n id: \"tab1\",\n title: \"Tab 1\",\n className: \"vuuShell-Placeholder\",\n },\n type: \"Placeholder\",\n};\n\nexport const getWorkspaceWithLayoutJSON = (\n customWorkspaceJSON?: LayoutJSON,\n layoutJSON: LayoutJSON | LayoutJSON[] = placeholderLayout,\n stackProps?: WorkspaceProps\n): LayoutJSON => {\n if (customWorkspaceJSON) {\n return {\n ...customWorkspaceJSON,\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n } else {\n return {\n ...stackWorkspaceJSON,\n props: {\n ...stackWorkspaceJSON.props,\n ...stackProps,\n TabstripProps: {\n ...stackWorkspaceJSON.props?.TabstripProps,\n ...stackProps?.TabstripProps,\n },\n },\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n }\n};\n"],"names":["VuuShellLocation"],"mappings":";;;;AAIO,MAAM,aAA4B,GAAA;AAAA,EACvC,IAAM,EAAA,MAAA;AAAA,EACN,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,EAAE,MAAA,EAAQ,kBAAmB,EAAA;AAAA,GACtC;AAAA,EACA,QAAU,EAAA;AAAA,IACR;AAAA,MACE,KAAO,EAAA;AAAA,QACL,SAAW,EAAA,6BAAA;AAAA,OACb;AAAA,MACA,IAAM,EAAA,aAAA;AAAA,KACR;AAAA,GACF;AACF,EAAA;AAEO,MAAM,WAAoC,GAAA;AAAA,EAC/C,IAAM,EAAA,WAAA;AAAA,EACN,EAAI,EAAA,cAAA;AAAA,EACJ,OAAO,EAAC;AACV,EAAA;AAEO,MAAM,kBAIT,GAAA;AAAA,EACF,IAAM,EAAA,OAAA;AAAA,EACN,IAAIA,yBAAiB,CAAA,SAAA;AAAA,EACrB,KAAO,EAAA;AAAA,IACL,SAAA,EAAW,CAAG,EAAAA,yBAAA,CAAiB,SAAS,CAAA,KAAA,CAAA;AAAA,IACxC,aAAe,EAAA;AAAA,MACb,WAAa,EAAA,IAAA;AAAA,MACb,aAAe,EAAA,IAAA;AAAA,MACf,cAAgB,EAAA,IAAA;AAAA,MAChB,qBAAuB,EAAA,KAAA;AAAA,MACvB,QAAU,EAAA,eAAA;AAAA,MACV,OAAS,EAAA,SAAA;AAAA,KACX;AAAA,IACA,QAAU,EAAA,IAAA;AAAA,IACV,MAAQ,EAAA,CAAA;AAAA,GACV;AACF,EAAA;AAEA,MAAM,iBAAgC,GAAA;AAAA,EACpC,KAAO,EAAA;AAAA,IACL,EAAI,EAAA,MAAA;AAAA,IACJ,KAAO,EAAA,OAAA;AAAA,IACP,SAAW,EAAA,sBAAA;AAAA,GACb;AAAA,EACA,IAAM,EAAA,aAAA;AACR,CAAA,CAAA;AAEO,MAAM,0BAA6B,GAAA,CACxC,mBACA,EAAA,UAAA,GAAwC,mBACxC,UACe,KAAA;AACf,EAAA,IAAI,mBAAqB,EAAA;AACvB,IAAO,OAAA;AAAA,MACL,GAAG,mBAAA;AAAA,MACH,UAAU,KAAM,CAAA,OAAA,CAAQ,UAAU,CAAI,GAAA,UAAA,GAAa,CAAC,UAAU,CAAA;AAAA,KAChE,CAAA;AAAA,GACK,MAAA;AACL,IAAO,OAAA;AAAA,MACL,GAAG,kBAAA;AAAA,MACH,KAAO,EAAA;AAAA,QACL,GAAG,kBAAmB,CAAA,KAAA;AAAA,QACtB,GAAG,UAAA;AAAA,QACH,aAAe,EAAA;AAAA,UACb,GAAG,mBAAmB,KAAO,EAAA,aAAA;AAAA,UAC7B,GAAG,UAAY,EAAA,aAAA;AAAA,SACjB;AAAA,OACF;AAAA,MACA,UAAU,KAAM,CAAA,OAAA,CAAQ,UAAU,CAAI,GAAA,UAAA,GAAa,CAAC,UAAU,CAAA;AAAA,KAChE,CAAA;AAAA,GACF;AACF;;;;;;;"}
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var vuuPopups = require('@vuu-ui/vuu-popups');
|
|
6
|
-
var
|
|
6
|
+
var LayoutManagementProvider = require('./LayoutManagementProvider.js');
|
|
7
7
|
var SaveLayoutPanel = require('./SaveLayoutPanel.js');
|
|
8
8
|
|
|
9
9
|
const useLayoutContextMenuItems = () => {
|
|
10
|
-
const { saveLayout } =
|
|
10
|
+
const { saveLayout } = LayoutManagementProvider.useLayoutManager();
|
|
11
11
|
const { showDialog, closeDialog } = vuuPopups.useDialogContext();
|
|
12
12
|
const handleCloseDialog = React.useCallback(() => {
|
|
13
13
|
closeDialog();
|
|
@@ -24,7 +24,7 @@ const useLayoutContextMenuItems = () => {
|
|
|
24
24
|
(location, options) => {
|
|
25
25
|
const locations = location.split(" ");
|
|
26
26
|
const menuDescriptors = [];
|
|
27
|
-
if (locations.includes("
|
|
27
|
+
if (locations.includes("workspace-tab")) {
|
|
28
28
|
menuDescriptors.push(
|
|
29
29
|
{
|
|
30
30
|
label: "Save Layout",
|
|
@@ -1 +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, useDialogContext } from \"@vuu-ui/vuu-popups\";\nimport { useLayoutManager } from \"./
|
|
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, useDialogContext } from \"@vuu-ui/vuu-popups\";\nimport { useLayoutManager } from \"./LayoutManagementProvider\";\nimport { LayoutMetadataDto } from \"./layoutTypes\";\nimport { SaveLayoutPanel } from \"./SaveLayoutPanel\";\n\nexport const useLayoutContextMenuItems = () => {\n const { saveLayout } = useLayoutManager();\n\n const { showDialog, closeDialog } = useDialogContext();\n\n const handleCloseDialog = useCallback(() => {\n closeDialog();\n }, [closeDialog]);\n\n const handleSave = useCallback(\n (layoutMetadata: LayoutMetadataDto) => {\n saveLayout(layoutMetadata);\n closeDialog();\n },\n [saveLayout, closeDialog]\n );\n\n const [buildMenuOptions, handleMenuAction] = useMemo<\n [MenuBuilder, MenuActionHandler]\n >(() => {\n return [\n (location, options) => {\n const locations = location.split(\" \");\n const menuDescriptors: ContextMenuItemDescriptor[] = [];\n if (locations.includes(\"workspace-tab\")) {\n menuDescriptors.push(\n {\n label: \"Save Layout\",\n 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 if (action.menuId === \"save-layout\") {\n showDialog(\n <SaveLayoutPanel\n onCancel={handleCloseDialog}\n onSave={handleSave}\n componentId={action.options?.controlledComponentId}\n defaultTitle={action.options?.controlledComponentTitle as string}\n />,\n \"Save Layout\",\n [],\n true\n );\n return true;\n }\n return false;\n },\n ];\n }, [handleCloseDialog, handleSave, showDialog]);\n\n return {\n buildMenuOptions,\n handleMenuAction,\n };\n};\n"],"names":["useLayoutManager","useDialogContext","useCallback","useMemo","jsx","SaveLayoutPanel"],"mappings":";;;;;;;;AAWO,MAAM,4BAA4B,MAAM;AAC7C,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,yCAAiB,EAAA,CAAA;AAExC,EAAA,MAAM,EAAE,UAAA,EAAY,WAAY,EAAA,GAAIC,0BAAiB,EAAA,CAAA;AAErD,EAAM,MAAA,iBAAA,GAAoBC,kBAAY,MAAM;AAC1C,IAAY,WAAA,EAAA,CAAA;AAAA,GACd,EAAG,CAAC,WAAW,CAAC,CAAA,CAAA;AAEhB,EAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,IACjB,CAAC,cAAsC,KAAA;AACrC,MAAA,UAAA,CAAW,cAAc,CAAA,CAAA;AACzB,MAAY,WAAA,EAAA,CAAA;AAAA,KACd;AAAA,IACA,CAAC,YAAY,WAAW,CAAA;AAAA,GAC1B,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,eAAe,CAAG,EAAA;AACvC,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,QAAI,IAAA,MAAA,CAAO,WAAW,aAAe,EAAA;AACnC,UAAA,UAAA;AAAA,4BACEC,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,EAAc,OAAO,OAAS,EAAA,wBAAA;AAAA,eAAA;AAAA,aAChC;AAAA,YACA,aAAA;AAAA,YACA,EAAC;AAAA,YACD,IAAA;AAAA,WACF,CAAA;AACA,UAAO,OAAA,IAAA,CAAA;AAAA,SACT;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF,CAAA;AAAA,GACC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,UAAU,CAAC,CAAA,CAAA;AAE9C,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA,gBAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
package/cjs/left-nav/LeftNav.js
CHANGED
|
@@ -10,10 +10,11 @@ var window = require('@salt-ds/window');
|
|
|
10
10
|
var cx = require('clsx');
|
|
11
11
|
var React = require('react');
|
|
12
12
|
var FeatureList = require('../feature-list/FeatureList.js');
|
|
13
|
+
require('../layout-management/defaultWorkspaceJSON.js');
|
|
13
14
|
require('html-to-image');
|
|
14
15
|
require('@salt-ds/core');
|
|
15
16
|
var LayoutList = require('../layout-management/LayoutList.js');
|
|
16
|
-
require('../layout-management/
|
|
17
|
+
require('../layout-management/LayoutManagementProvider.js');
|
|
17
18
|
require('@vuu-ui/vuu-popups');
|
|
18
19
|
var LeftNav$1 = require('./LeftNav.css.js');
|
|
19
20
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftNav.js","sources":["../../src/left-nav/LeftNav.tsx"],"sourcesContent":["import { VuuLogo } from \"@vuu-ui/vuu-icons\";\nimport {\n LayoutResizeAction,\n Stack,\n useLayoutProviderDispatch,\n} from \"@vuu-ui/vuu-layout\";\nimport { Tab, Tabstrip } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n FilterTableFeatureProps,\n hasFilterTableFeatureProps,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n CSSProperties,\n HTMLAttributes,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { FeatureProps } from \"../feature\";\nimport { FeatureList, GroupedFeatureProps } from \"../feature-list\";\nimport { LayoutList } from \"../layout-management\";\n\nimport leftNavCss from \"./LeftNav.css\";\n\nconst classBase = \"vuuLeftNav\";\n\nexport type NavDisplayStatus =\n | \"menu-full\"\n | \"menu-icons\"\n | \"menu-full-content\"\n | \"menu-icons-content\";\n\nconst getDisplayStatus = (\n activeTabIndex: number,\n expanded: boolean\n): NavDisplayStatus => {\n if (activeTabIndex === 0) {\n return expanded ? \"menu-full\" : \"menu-icons\";\n } else {\n return expanded ? \"menu-full-content\" : \"menu-icons-content\";\n }\n};\n\nexport type NavDisplayStatusHandler = (\n navDisplayStatus: NavDisplayStatus\n) => void;\nexport interface LeftNavProps extends HTMLAttributes<HTMLDivElement> {\n \"data-path\"?: string;\n defaultActiveTabIndex?: number;\n defaultExpanded?: boolean;\n features: FeatureProps[];\n onActiveChange?: (activeTabIndex: number) => void;\n onTogglePrimaryMenu?: (expanded: boolean) => void;\n sizeCollapsed?: number;\n sizeContent?: number;\n sizeExpanded?: number;\n tableFeatures: FeatureProps<FilterTableFeatureProps>[];\n}\n\ntype NavState = {\n activeTabIndex: number;\n expanded: boolean;\n};\n\nconst byModule = (\n f1: FeatureProps<FilterTableFeatureProps>,\n f2: FeatureProps<FilterTableFeatureProps>\n) => {\n const t1 = f1.ComponentProps?.tableSchema.table;\n const t2 = f2.ComponentProps?.tableSchema.table;\n if (t1 && t2) {\n const m1 = t1.module.toLowerCase();\n const m2 = t2.module.toLowerCase();\n if (m1 < m2) {\n return -1;\n } else if (m1 > m2) {\n return 1;\n } else if (t1.table < t2.table) {\n return -1;\n } else if (t1.table > t2.table) {\n return 1;\n } else {\n return 0;\n }\n } else {\n throw Error(\"Invalid tableFeature\");\n }\n};\n\nexport const LeftNav = (props: LeftNavProps) => {\n const dispatch = useLayoutProviderDispatch();\n const {\n \"data-path\": path,\n defaultExpanded = true,\n defaultActiveTabIndex = 0,\n features,\n onActiveChange,\n onTogglePrimaryMenu,\n sizeCollapsed = 80,\n sizeContent = 300,\n sizeExpanded = 240,\n style: styleProp,\n tableFeatures,\n ...htmlAttributes\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-left-nav\",\n css: leftNavCss,\n window: targetWindow,\n });\n\n const [navState, setNavState] = useState<NavState>({\n activeTabIndex: defaultActiveTabIndex,\n expanded: defaultExpanded,\n });\n\n const tableFeaturesByGroup = useMemo(\n () =>\n tableFeatures\n .sort(byModule)\n .reduce<GroupedFeatureProps<FilterTableFeatureProps>>(\n (acc, filterTableFeature) => {\n if (hasFilterTableFeatureProps(filterTableFeature)) {\n const { table } = filterTableFeature.ComponentProps.tableSchema;\n const key = `${table.module} Tables`;\n if (!acc[key]) {\n acc[key] = [];\n }\n return {\n ...acc,\n [key]: acc[key].concat(filterTableFeature),\n };\n } else {\n return acc;\n // throw Error(\"LeftNaV invalid tableFeature\");\n }\n },\n {}\n ),\n [tableFeatures]\n );\n\n const getFullWidth = useCallback(\n (tabIndex: number, expanded: boolean): number => {\n if (tabIndex === 0) {\n return expanded ? sizeExpanded : sizeCollapsed;\n } else {\n return expanded\n ? sizeExpanded + sizeContent\n : sizeCollapsed + sizeContent;\n }\n },\n [sizeCollapsed, sizeContent, sizeExpanded]\n );\n\n const handleTabSelection = useCallback(\n (activeTabIndex: number) => {\n const { activeTabIndex: currentIndex, expanded } = navState;\n const newState = { activeTabIndex, expanded };\n setNavState(newState);\n if (activeTabIndex === 0 || currentIndex === 0) {\n const width = getFullWidth(activeTabIndex, expanded);\n dispatch({\n type: \"layout-resize\",\n path: \"#vuu-side-panel\",\n size: width,\n } as LayoutResizeAction);\n }\n onActiveChange?.(activeTabIndex);\n },\n [dispatch, getFullWidth, navState, onActiveChange]\n );\n\n const displayStatus = getDisplayStatus(\n navState.activeTabIndex,\n navState.expanded\n );\n\n const toggleExpanded = useCallback(() => {\n const { activeTabIndex, expanded } = navState;\n const primaryMenuExpanded = !expanded;\n const newState = { activeTabIndex, expanded: primaryMenuExpanded };\n setNavState(newState);\n dispatch({\n type: \"layout-resize\",\n path: \"#vuu-side-panel\",\n size: getFullWidth(activeTabIndex, primaryMenuExpanded),\n } as LayoutResizeAction);\n onTogglePrimaryMenu?.(primaryMenuExpanded);\n }, [dispatch, getFullWidth, navState, onTogglePrimaryMenu]);\n\n const style = {\n ...styleProp,\n \"--nav-menu-collapsed-width\": `${sizeCollapsed}px`,\n \"--nav-menu-expanded-width\": `${sizeExpanded}px`,\n \"--nav-menu-content-width\": `${sizeContent}px`,\n } as CSSProperties;\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, `${classBase}-${displayStatus}`)}\n style={style}\n >\n <div className={cx(`${classBase}-menu-primary`)} data-mode=\"dark\">\n <div className=\"vuuLeftNav-logo\">\n <VuuLogo />\n </div>\n <div className={`${classBase}-main`}>\n <Tabstrip\n activeTabIndex={navState.activeTabIndex}\n animateSelectionThumb={false}\n className={`${classBase}-Tabstrip`}\n onActiveChange={handleTabSelection}\n orientation=\"vertical\"\n >\n <Tab data-icon=\"demo\" label=\"DEMO\"></Tab>\n <Tab data-icon=\"features\" label=\"VUU FEATURES\"></Tab>\n <Tab data-icon=\"tables\" label=\"VUU TABLES\"></Tab>\n <Tab data-icon=\"layouts\" label=\"MY LAYOUTS\"></Tab>\n </Tabstrip>\n </div>\n <div className=\"vuuLeftNav-buttonBar\">\n <button\n className={cx(\"vuuLeftNav-toggleButton\", {\n \"vuuLeftNav-toggleButton-open\":\n displayStatus.startsWith(\"menu-full\"),\n \"vuuLeftNav-toggleButton-closed\":\n displayStatus.startsWith(\"menu-icons\"),\n })}\n data-icon={\n displayStatus.startsWith(\"menu-full\")\n ? \"chevron-left\"\n : \"chevron-right\"\n }\n onClick={toggleExpanded}\n />\n </div>\n </div>\n <Stack\n active={navState.activeTabIndex - 1}\n className={`${classBase}-menu-secondary`}\n showTabs={false}\n >\n <FeatureList features={features} title=\"VUU FEATURES\" />\n <FeatureList features={tableFeaturesByGroup} title=\"VUU TABLES\" />\n <LayoutList title=\"MY LAYOUTS\" />\n </Stack>\n </div>\n );\n};\n"],"names":["useLayoutProviderDispatch","useWindow","useComponentCssInjection","leftNavCss","useState","useMemo","hasFilterTableFeatureProps","useCallback","jsxs","jsx","VuuLogo","Tabstrip","Tab","Stack","FeatureList","LayoutList"],"mappings":";;;;;;;;;;;;;;;;;;;AA2BA,MAAM,SAAY,GAAA,YAAA,CAAA;AAQlB,MAAM,gBAAA,GAAmB,CACvB,cAAA,EACA,QACqB,KAAA;AACrB,EAAA,IAAI,mBAAmB,CAAG,EAAA;AACxB,IAAA,OAAO,WAAW,WAAc,GAAA,YAAA,CAAA;AAAA,GAC3B,MAAA;AACL,IAAA,OAAO,WAAW,mBAAsB,GAAA,oBAAA,CAAA;AAAA,GAC1C;AACF,CAAA,CAAA;AAuBA,MAAM,QAAA,GAAW,CACf,EAAA,EACA,EACG,KAAA;AACH,EAAM,MAAA,EAAA,GAAK,EAAG,CAAA,cAAA,EAAgB,WAAY,CAAA,KAAA,CAAA;AAC1C,EAAM,MAAA,EAAA,GAAK,EAAG,CAAA,cAAA,EAAgB,WAAY,CAAA,KAAA,CAAA;AAC1C,EAAA,IAAI,MAAM,EAAI,EAAA;AACZ,IAAM,MAAA,EAAA,GAAK,EAAG,CAAA,MAAA,CAAO,WAAY,EAAA,CAAA;AACjC,IAAM,MAAA,EAAA,GAAK,EAAG,CAAA,MAAA,CAAO,WAAY,EAAA,CAAA;AACjC,IAAA,IAAI,KAAK,EAAI,EAAA;AACX,MAAO,OAAA,CAAA,CAAA,CAAA;AAAA,KACT,MAAA,IAAW,KAAK,EAAI,EAAA;AAClB,MAAO,OAAA,CAAA,CAAA;AAAA,KACE,MAAA,IAAA,EAAA,CAAG,KAAQ,GAAA,EAAA,CAAG,KAAO,EAAA;AAC9B,MAAO,OAAA,CAAA,CAAA,CAAA;AAAA,KACE,MAAA,IAAA,EAAA,CAAG,KAAQ,GAAA,EAAA,CAAG,KAAO,EAAA;AAC9B,MAAO,OAAA,CAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAO,OAAA,CAAA,CAAA;AAAA,KACT;AAAA,GACK,MAAA;AACL,IAAA,MAAM,MAAM,sBAAsB,CAAA,CAAA;AAAA,GACpC;AACF,CAAA,CAAA;AAEa,MAAA,OAAA,GAAU,CAAC,KAAwB,KAAA;AAC9C,EAAA,MAAM,WAAWA,mCAA0B,EAAA,CAAA;AAC3C,EAAM,MAAA;AAAA,IACJ,WAAa,EAAA,IAAA;AAAA,IACb,eAAkB,GAAA,IAAA;AAAA,IAClB,qBAAwB,GAAA,CAAA;AAAA,IACxB,QAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAgB,GAAA,EAAA;AAAA,IAChB,WAAc,GAAA,GAAA;AAAA,IACd,YAAe,GAAA,GAAA;AAAA,IACf,KAAO,EAAA,SAAA;AAAA,IACP,aAAA;AAAA,IACA,GAAG,cAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,cAAA;AAAA,IACR,GAAK,EAAAC,SAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,cAAmB,CAAA;AAAA,IACjD,cAAgB,EAAA,qBAAA;AAAA,IAChB,QAAU,EAAA,eAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAA,MAAM,oBAAuB,GAAAC,aAAA;AAAA,IAC3B,MACE,aAAA,CACG,IAAK,CAAA,QAAQ,CACb,CAAA,MAAA;AAAA,MACC,CAAC,KAAK,kBAAuB,KAAA;AAC3B,QAAI,IAAAC,mCAAA,CAA2B,kBAAkB,CAAG,EAAA;AAClD,UAAA,MAAM,EAAE,KAAA,EAAU,GAAA,kBAAA,CAAmB,cAAe,CAAA,WAAA,CAAA;AACpD,UAAM,MAAA,GAAA,GAAM,CAAG,EAAA,KAAA,CAAM,MAAM,CAAA,OAAA,CAAA,CAAA;AAC3B,UAAI,IAAA,CAAC,GAAI,CAAA,GAAG,CAAG,EAAA;AACb,YAAI,GAAA,CAAA,GAAG,IAAI,EAAC,CAAA;AAAA,WACd;AACA,UAAO,OAAA;AAAA,YACL,GAAG,GAAA;AAAA,YACH,CAAC,GAAG,GAAG,IAAI,GAAG,CAAA,CAAE,OAAO,kBAAkB,CAAA;AAAA,WAC3C,CAAA;AAAA,SACK,MAAA;AACL,UAAO,OAAA,GAAA,CAAA;AAAA,SAET;AAAA,OACF;AAAA,MACA,EAAC;AAAA,KACH;AAAA,IACJ,CAAC,aAAa,CAAA;AAAA,GAChB,CAAA;AAEA,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IACnB,CAAC,UAAkB,QAA8B,KAAA;AAC/C,MAAA,IAAI,aAAa,CAAG,EAAA;AAClB,QAAA,OAAO,WAAW,YAAe,GAAA,aAAA,CAAA;AAAA,OAC5B,MAAA;AACL,QAAO,OAAA,QAAA,GACH,YAAe,GAAA,WAAA,GACf,aAAgB,GAAA,WAAA,CAAA;AAAA,OACtB;AAAA,KACF;AAAA,IACA,CAAC,aAAe,EAAA,WAAA,EAAa,YAAY,CAAA;AAAA,GAC3C,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAAA,iBAAA;AAAA,IACzB,CAAC,cAA2B,KAAA;AAC1B,MAAA,MAAM,EAAE,cAAA,EAAgB,YAAc,EAAA,QAAA,EAAa,GAAA,QAAA,CAAA;AACnD,MAAM,MAAA,QAAA,GAAW,EAAE,cAAA,EAAgB,QAAS,EAAA,CAAA;AAC5C,MAAA,WAAA,CAAY,QAAQ,CAAA,CAAA;AACpB,MAAI,IAAA,cAAA,KAAmB,CAAK,IAAA,YAAA,KAAiB,CAAG,EAAA;AAC9C,QAAM,MAAA,KAAA,GAAQ,YAAa,CAAA,cAAA,EAAgB,QAAQ,CAAA,CAAA;AACnD,QAAS,QAAA,CAAA;AAAA,UACP,IAAM,EAAA,eAAA;AAAA,UACN,IAAM,EAAA,iBAAA;AAAA,UACN,IAAM,EAAA,KAAA;AAAA,SACe,CAAA,CAAA;AAAA,OACzB;AACA,MAAA,cAAA,GAAiB,cAAc,CAAA,CAAA;AAAA,KACjC;AAAA,IACA,CAAC,QAAA,EAAU,YAAc,EAAA,QAAA,EAAU,cAAc,CAAA;AAAA,GACnD,CAAA;AAEA,EAAA,MAAM,aAAgB,GAAA,gBAAA;AAAA,IACpB,QAAS,CAAA,cAAA;AAAA,IACT,QAAS,CAAA,QAAA;AAAA,GACX,CAAA;AAEA,EAAM,MAAA,cAAA,GAAiBA,kBAAY,MAAM;AACvC,IAAM,MAAA,EAAE,cAAgB,EAAA,QAAA,EAAa,GAAA,QAAA,CAAA;AACrC,IAAA,MAAM,sBAAsB,CAAC,QAAA,CAAA;AAC7B,IAAA,MAAM,QAAW,GAAA,EAAE,cAAgB,EAAA,QAAA,EAAU,mBAAoB,EAAA,CAAA;AACjE,IAAA,WAAA,CAAY,QAAQ,CAAA,CAAA;AACpB,IAAS,QAAA,CAAA;AAAA,MACP,IAAM,EAAA,eAAA;AAAA,MACN,IAAM,EAAA,iBAAA;AAAA,MACN,IAAA,EAAM,YAAa,CAAA,cAAA,EAAgB,mBAAmB,CAAA;AAAA,KACjC,CAAA,CAAA;AACvB,IAAA,mBAAA,GAAsB,mBAAmB,CAAA,CAAA;AAAA,KACxC,CAAC,QAAA,EAAU,YAAc,EAAA,QAAA,EAAU,mBAAmB,CAAC,CAAA,CAAA;AAE1D,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,GAAG,SAAA;AAAA,IACH,4BAAA,EAA8B,GAAG,aAAa,CAAA,EAAA,CAAA;AAAA,IAC9C,2BAAA,EAA6B,GAAG,YAAY,CAAA,EAAA,CAAA;AAAA,IAC5C,0BAAA,EAA4B,GAAG,WAAW,CAAA,EAAA,CAAA;AAAA,GAC5C,CAAA;AAEA,EACE,uBAAAC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,WAAW,EAAG,CAAA,SAAA,EAAW,GAAG,SAAS,CAAA,CAAA,EAAI,aAAa,CAAE,CAAA,CAAA;AAAA,MACxD,KAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAACA,eAAA,CAAA,KAAA,EAAA,EAAI,WAAW,EAAG,CAAA,CAAA,EAAG,SAAS,CAAe,aAAA,CAAA,CAAA,EAAG,aAAU,MACzD,EAAA,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,iBACb,EAAA,QAAA,kBAAAA,cAAA,CAACC,oBAAQ,CACX,EAAA,CAAA;AAAA,0BACCD,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,KAAA,CAAA,EAAA,QAAA,kBAAAD,eAAA;AAAA,YAACG,sBAAA;AAAA,YAAA;AAAA,cACC,gBAAgB,QAAS,CAAA,cAAA;AAAA,cACzB,qBAAuB,EAAA,KAAA;AAAA,cACvB,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA;AAAA,cACvB,cAAgB,EAAA,kBAAA;AAAA,cAChB,WAAY,EAAA,UAAA;AAAA,cAEZ,QAAA,EAAA;AAAA,gCAAAF,cAAA,CAACG,iBAAI,EAAA,EAAA,WAAA,EAAU,MAAO,EAAA,KAAA,EAAM,MAAO,EAAA,CAAA;AAAA,gCAClCH,cAAA,CAAAG,iBAAA,EAAA,EAAI,WAAU,EAAA,UAAA,EAAW,OAAM,cAAe,EAAA,CAAA;AAAA,gCAC9CH,cAAA,CAAAG,iBAAA,EAAA,EAAI,WAAU,EAAA,QAAA,EAAS,OAAM,YAAa,EAAA,CAAA;AAAA,gCAC1CH,cAAA,CAAAG,iBAAA,EAAA,EAAI,WAAU,EAAA,SAAA,EAAU,OAAM,YAAa,EAAA,CAAA;AAAA,eAAA;AAAA,aAAA;AAAA,WAEhD,EAAA,CAAA;AAAA,0BACAH,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,sBACb,EAAA,QAAA,kBAAAA,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,GAAG,yBAA2B,EAAA;AAAA,gBACvC,8BAAA,EACE,aAAc,CAAA,UAAA,CAAW,WAAW,CAAA;AAAA,gBACtC,gCAAA,EACE,aAAc,CAAA,UAAA,CAAW,YAAY,CAAA;AAAA,eACxC,CAAA;AAAA,cACD,WACE,EAAA,aAAA,CAAc,UAAW,CAAA,WAAW,IAChC,cACA,GAAA,eAAA;AAAA,cAEN,OAAS,EAAA,cAAA;AAAA,aAAA;AAAA,WAEb,EAAA,CAAA;AAAA,SACF,EAAA,CAAA;AAAA,wBACAD,eAAA;AAAA,UAACK,eAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,SAAS,cAAiB,GAAA,CAAA;AAAA,YAClC,SAAA,EAAW,GAAG,SAAS,CAAA,eAAA,CAAA;AAAA,YACvB,QAAU,EAAA,KAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAACJ,cAAA,CAAAK,uBAAA,EAAA,EAAY,QAAoB,EAAA,KAAA,EAAM,cAAe,EAAA,CAAA;AAAA,8BACrDL,cAAA,CAAAK,uBAAA,EAAA,EAAY,QAAU,EAAA,oBAAA,EAAsB,OAAM,YAAa,EAAA,CAAA;AAAA,8BAChEL,cAAA,CAACM,qBAAW,EAAA,EAAA,KAAA,EAAM,YAAa,EAAA,CAAA;AAAA,aAAA;AAAA,WAAA;AAAA,SACjC;AAAA,OAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"LeftNav.js","sources":["../../src/left-nav/LeftNav.tsx"],"sourcesContent":["import { VuuLogo } from \"@vuu-ui/vuu-icons\";\nimport {\n LayoutResizeAction,\n Stack,\n useLayoutProviderDispatch,\n} from \"@vuu-ui/vuu-layout\";\nimport { Tab, Tabstrip } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n FilterTableFeatureProps,\n hasFilterTableFeatureProps,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n CSSProperties,\n HTMLAttributes,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { FeatureProps } from \"../feature\";\nimport { FeatureList, GroupedFeatureProps } from \"../feature-list\";\nimport { LayoutList } from \"../layout-management\";\n\nimport leftNavCss from \"./LeftNav.css\";\n\nconst classBase = \"vuuLeftNav\";\n\nexport type NavDisplayStatus =\n | \"menu-full\"\n | \"menu-icons\"\n | \"menu-full-content\"\n | \"menu-icons-content\";\n\nconst getDisplayStatus = (\n activeTabIndex: number,\n expanded: boolean\n): NavDisplayStatus => {\n if (activeTabIndex === 0) {\n return expanded ? \"menu-full\" : \"menu-icons\";\n } else {\n return expanded ? \"menu-full-content\" : \"menu-icons-content\";\n }\n};\n\nexport type NavDisplayStatusHandler = (\n navDisplayStatus: NavDisplayStatus\n) => void;\nexport interface LeftNavProps extends HTMLAttributes<HTMLDivElement> {\n \"data-path\"?: string;\n defaultActiveTabIndex?: number;\n defaultExpanded?: boolean;\n features: FeatureProps[];\n onActiveChange?: (activeTabIndex: number) => void;\n onTogglePrimaryMenu?: (expanded: boolean) => void;\n sizeCollapsed?: number;\n sizeContent?: number;\n sizeExpanded?: number;\n tableFeatures: FeatureProps<FilterTableFeatureProps>[];\n}\n\ntype NavState = {\n activeTabIndex: number;\n expanded: boolean;\n};\n\nconst byModule = (\n f1: FeatureProps<FilterTableFeatureProps>,\n f2: FeatureProps<FilterTableFeatureProps>\n) => {\n const t1 = f1.ComponentProps?.tableSchema.table;\n const t2 = f2.ComponentProps?.tableSchema.table;\n if (t1 && t2) {\n const m1 = t1.module.toLowerCase();\n const m2 = t2.module.toLowerCase();\n if (m1 < m2) {\n return -1;\n } else if (m1 > m2) {\n return 1;\n } else if (t1.table < t2.table) {\n return -1;\n } else if (t1.table > t2.table) {\n return 1;\n } else {\n return 0;\n }\n } else {\n throw Error(\"Invalid tableFeature\");\n }\n};\n\nexport const LeftNav = (props: LeftNavProps) => {\n const dispatch = useLayoutProviderDispatch();\n const {\n \"data-path\": path,\n defaultExpanded = true,\n defaultActiveTabIndex = 0,\n features,\n onActiveChange,\n onTogglePrimaryMenu,\n sizeCollapsed = 80,\n sizeContent = 300,\n sizeExpanded = 240,\n style: styleProp,\n tableFeatures,\n ...htmlAttributes\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-left-nav\",\n css: leftNavCss,\n window: targetWindow,\n });\n\n const [navState, setNavState] = useState<NavState>({\n activeTabIndex: defaultActiveTabIndex,\n expanded: defaultExpanded,\n });\n\n const tableFeaturesByGroup = useMemo(\n () =>\n tableFeatures\n .sort(byModule)\n .reduce<GroupedFeatureProps<FilterTableFeatureProps>>(\n (acc, filterTableFeature) => {\n if (hasFilterTableFeatureProps(filterTableFeature)) {\n const { table } = filterTableFeature.ComponentProps.tableSchema;\n const key = `${table.module} Tables`;\n if (!acc[key]) {\n acc[key] = [];\n }\n return {\n ...acc,\n [key]: acc[key].concat(filterTableFeature),\n };\n } else {\n return acc;\n // throw Error(\"LeftNaV invalid tableFeature\");\n }\n },\n {}\n ),\n [tableFeatures]\n );\n\n const getFullWidth = useCallback(\n (tabIndex: number, expanded: boolean): number => {\n if (tabIndex === 0) {\n return expanded ? sizeExpanded : sizeCollapsed;\n } else {\n return expanded\n ? sizeExpanded + sizeContent\n : sizeCollapsed + sizeContent;\n }\n },\n [sizeCollapsed, sizeContent, sizeExpanded]\n );\n\n const handleTabSelection = useCallback(\n (activeTabIndex: number) => {\n const { activeTabIndex: currentIndex, expanded } = navState;\n const newState = { activeTabIndex, expanded };\n setNavState(newState);\n if (activeTabIndex === 0 || currentIndex === 0) {\n const width = getFullWidth(activeTabIndex, expanded);\n dispatch({\n type: \"layout-resize\",\n path: \"#vuu-side-panel\",\n size: width,\n } as LayoutResizeAction);\n }\n onActiveChange?.(activeTabIndex);\n },\n [dispatch, getFullWidth, navState, onActiveChange]\n );\n\n const displayStatus = getDisplayStatus(\n navState.activeTabIndex,\n navState.expanded\n );\n\n const toggleExpanded = useCallback(() => {\n const { activeTabIndex, expanded } = navState;\n const primaryMenuExpanded = !expanded;\n const newState = { activeTabIndex, expanded: primaryMenuExpanded };\n setNavState(newState);\n dispatch({\n type: \"layout-resize\",\n path: \"#vuu-side-panel\",\n size: getFullWidth(activeTabIndex, primaryMenuExpanded),\n } as LayoutResizeAction);\n onTogglePrimaryMenu?.(primaryMenuExpanded);\n }, [dispatch, getFullWidth, navState, onTogglePrimaryMenu]);\n\n const style = {\n ...styleProp,\n \"--nav-menu-collapsed-width\": `${sizeCollapsed}px`,\n \"--nav-menu-expanded-width\": `${sizeExpanded}px`,\n \"--nav-menu-content-width\": `${sizeContent}px`,\n } as CSSProperties;\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, `${classBase}-${displayStatus}`)}\n style={style}\n >\n <div className={cx(`${classBase}-menu-primary`)} data-mode=\"dark\">\n <div className=\"vuuLeftNav-logo\">\n <VuuLogo />\n </div>\n <div className={`${classBase}-main`}>\n <Tabstrip\n activeTabIndex={navState.activeTabIndex}\n animateSelectionThumb={false}\n className={`${classBase}-Tabstrip`}\n onActiveChange={handleTabSelection}\n orientation=\"vertical\"\n >\n <Tab data-icon=\"demo\" label=\"DEMO\"></Tab>\n <Tab data-icon=\"features\" label=\"VUU FEATURES\"></Tab>\n <Tab data-icon=\"tables\" label=\"VUU TABLES\"></Tab>\n <Tab data-icon=\"layouts\" label=\"MY LAYOUTS\"></Tab>\n </Tabstrip>\n </div>\n <div className=\"vuuLeftNav-buttonBar\">\n <button\n className={cx(\"vuuLeftNav-toggleButton\", {\n \"vuuLeftNav-toggleButton-open\":\n displayStatus.startsWith(\"menu-full\"),\n \"vuuLeftNav-toggleButton-closed\":\n displayStatus.startsWith(\"menu-icons\"),\n })}\n data-icon={\n displayStatus.startsWith(\"menu-full\")\n ? \"chevron-left\"\n : \"chevron-right\"\n }\n onClick={toggleExpanded}\n />\n </div>\n </div>\n <Stack\n active={navState.activeTabIndex - 1}\n className={`${classBase}-menu-secondary`}\n showTabs={false}\n >\n <FeatureList features={features} title=\"VUU FEATURES\" />\n <FeatureList features={tableFeaturesByGroup} title=\"VUU TABLES\" />\n <LayoutList title=\"MY LAYOUTS\" />\n </Stack>\n </div>\n );\n};\n"],"names":["useLayoutProviderDispatch","useWindow","useComponentCssInjection","leftNavCss","useState","useMemo","hasFilterTableFeatureProps","useCallback","jsxs","jsx","VuuLogo","Tabstrip","Tab","Stack","FeatureList","LayoutList"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,SAAY,GAAA,YAAA,CAAA;AAQlB,MAAM,gBAAA,GAAmB,CACvB,cAAA,EACA,QACqB,KAAA;AACrB,EAAA,IAAI,mBAAmB,CAAG,EAAA;AACxB,IAAA,OAAO,WAAW,WAAc,GAAA,YAAA,CAAA;AAAA,GAC3B,MAAA;AACL,IAAA,OAAO,WAAW,mBAAsB,GAAA,oBAAA,CAAA;AAAA,GAC1C;AACF,CAAA,CAAA;AAuBA,MAAM,QAAA,GAAW,CACf,EAAA,EACA,EACG,KAAA;AACH,EAAM,MAAA,EAAA,GAAK,EAAG,CAAA,cAAA,EAAgB,WAAY,CAAA,KAAA,CAAA;AAC1C,EAAM,MAAA,EAAA,GAAK,EAAG,CAAA,cAAA,EAAgB,WAAY,CAAA,KAAA,CAAA;AAC1C,EAAA,IAAI,MAAM,EAAI,EAAA;AACZ,IAAM,MAAA,EAAA,GAAK,EAAG,CAAA,MAAA,CAAO,WAAY,EAAA,CAAA;AACjC,IAAM,MAAA,EAAA,GAAK,EAAG,CAAA,MAAA,CAAO,WAAY,EAAA,CAAA;AACjC,IAAA,IAAI,KAAK,EAAI,EAAA;AACX,MAAO,OAAA,CAAA,CAAA,CAAA;AAAA,KACT,MAAA,IAAW,KAAK,EAAI,EAAA;AAClB,MAAO,OAAA,CAAA,CAAA;AAAA,KACE,MAAA,IAAA,EAAA,CAAG,KAAQ,GAAA,EAAA,CAAG,KAAO,EAAA;AAC9B,MAAO,OAAA,CAAA,CAAA,CAAA;AAAA,KACE,MAAA,IAAA,EAAA,CAAG,KAAQ,GAAA,EAAA,CAAG,KAAO,EAAA;AAC9B,MAAO,OAAA,CAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAO,OAAA,CAAA,CAAA;AAAA,KACT;AAAA,GACK,MAAA;AACL,IAAA,MAAM,MAAM,sBAAsB,CAAA,CAAA;AAAA,GACpC;AACF,CAAA,CAAA;AAEa,MAAA,OAAA,GAAU,CAAC,KAAwB,KAAA;AAC9C,EAAA,MAAM,WAAWA,mCAA0B,EAAA,CAAA;AAC3C,EAAM,MAAA;AAAA,IACJ,WAAa,EAAA,IAAA;AAAA,IACb,eAAkB,GAAA,IAAA;AAAA,IAClB,qBAAwB,GAAA,CAAA;AAAA,IACxB,QAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAgB,GAAA,EAAA;AAAA,IAChB,WAAc,GAAA,GAAA;AAAA,IACd,YAAe,GAAA,GAAA;AAAA,IACf,KAAO,EAAA,SAAA;AAAA,IACP,aAAA;AAAA,IACA,GAAG,cAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,cAAA;AAAA,IACR,GAAK,EAAAC,SAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,cAAmB,CAAA;AAAA,IACjD,cAAgB,EAAA,qBAAA;AAAA,IAChB,QAAU,EAAA,eAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAA,MAAM,oBAAuB,GAAAC,aAAA;AAAA,IAC3B,MACE,aAAA,CACG,IAAK,CAAA,QAAQ,CACb,CAAA,MAAA;AAAA,MACC,CAAC,KAAK,kBAAuB,KAAA;AAC3B,QAAI,IAAAC,mCAAA,CAA2B,kBAAkB,CAAG,EAAA;AAClD,UAAA,MAAM,EAAE,KAAA,EAAU,GAAA,kBAAA,CAAmB,cAAe,CAAA,WAAA,CAAA;AACpD,UAAM,MAAA,GAAA,GAAM,CAAG,EAAA,KAAA,CAAM,MAAM,CAAA,OAAA,CAAA,CAAA;AAC3B,UAAI,IAAA,CAAC,GAAI,CAAA,GAAG,CAAG,EAAA;AACb,YAAI,GAAA,CAAA,GAAG,IAAI,EAAC,CAAA;AAAA,WACd;AACA,UAAO,OAAA;AAAA,YACL,GAAG,GAAA;AAAA,YACH,CAAC,GAAG,GAAG,IAAI,GAAG,CAAA,CAAE,OAAO,kBAAkB,CAAA;AAAA,WAC3C,CAAA;AAAA,SACK,MAAA;AACL,UAAO,OAAA,GAAA,CAAA;AAAA,SAET;AAAA,OACF;AAAA,MACA,EAAC;AAAA,KACH;AAAA,IACJ,CAAC,aAAa,CAAA;AAAA,GAChB,CAAA;AAEA,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IACnB,CAAC,UAAkB,QAA8B,KAAA;AAC/C,MAAA,IAAI,aAAa,CAAG,EAAA;AAClB,QAAA,OAAO,WAAW,YAAe,GAAA,aAAA,CAAA;AAAA,OAC5B,MAAA;AACL,QAAO,OAAA,QAAA,GACH,YAAe,GAAA,WAAA,GACf,aAAgB,GAAA,WAAA,CAAA;AAAA,OACtB;AAAA,KACF;AAAA,IACA,CAAC,aAAe,EAAA,WAAA,EAAa,YAAY,CAAA;AAAA,GAC3C,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAAA,iBAAA;AAAA,IACzB,CAAC,cAA2B,KAAA;AAC1B,MAAA,MAAM,EAAE,cAAA,EAAgB,YAAc,EAAA,QAAA,EAAa,GAAA,QAAA,CAAA;AACnD,MAAM,MAAA,QAAA,GAAW,EAAE,cAAA,EAAgB,QAAS,EAAA,CAAA;AAC5C,MAAA,WAAA,CAAY,QAAQ,CAAA,CAAA;AACpB,MAAI,IAAA,cAAA,KAAmB,CAAK,IAAA,YAAA,KAAiB,CAAG,EAAA;AAC9C,QAAM,MAAA,KAAA,GAAQ,YAAa,CAAA,cAAA,EAAgB,QAAQ,CAAA,CAAA;AACnD,QAAS,QAAA,CAAA;AAAA,UACP,IAAM,EAAA,eAAA;AAAA,UACN,IAAM,EAAA,iBAAA;AAAA,UACN,IAAM,EAAA,KAAA;AAAA,SACe,CAAA,CAAA;AAAA,OACzB;AACA,MAAA,cAAA,GAAiB,cAAc,CAAA,CAAA;AAAA,KACjC;AAAA,IACA,CAAC,QAAA,EAAU,YAAc,EAAA,QAAA,EAAU,cAAc,CAAA;AAAA,GACnD,CAAA;AAEA,EAAA,MAAM,aAAgB,GAAA,gBAAA;AAAA,IACpB,QAAS,CAAA,cAAA;AAAA,IACT,QAAS,CAAA,QAAA;AAAA,GACX,CAAA;AAEA,EAAM,MAAA,cAAA,GAAiBA,kBAAY,MAAM;AACvC,IAAM,MAAA,EAAE,cAAgB,EAAA,QAAA,EAAa,GAAA,QAAA,CAAA;AACrC,IAAA,MAAM,sBAAsB,CAAC,QAAA,CAAA;AAC7B,IAAA,MAAM,QAAW,GAAA,EAAE,cAAgB,EAAA,QAAA,EAAU,mBAAoB,EAAA,CAAA;AACjE,IAAA,WAAA,CAAY,QAAQ,CAAA,CAAA;AACpB,IAAS,QAAA,CAAA;AAAA,MACP,IAAM,EAAA,eAAA;AAAA,MACN,IAAM,EAAA,iBAAA;AAAA,MACN,IAAA,EAAM,YAAa,CAAA,cAAA,EAAgB,mBAAmB,CAAA;AAAA,KACjC,CAAA,CAAA;AACvB,IAAA,mBAAA,GAAsB,mBAAmB,CAAA,CAAA;AAAA,KACxC,CAAC,QAAA,EAAU,YAAc,EAAA,QAAA,EAAU,mBAAmB,CAAC,CAAA,CAAA;AAE1D,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,GAAG,SAAA;AAAA,IACH,4BAAA,EAA8B,GAAG,aAAa,CAAA,EAAA,CAAA;AAAA,IAC9C,2BAAA,EAA6B,GAAG,YAAY,CAAA,EAAA,CAAA;AAAA,IAC5C,0BAAA,EAA4B,GAAG,WAAW,CAAA,EAAA,CAAA;AAAA,GAC5C,CAAA;AAEA,EACE,uBAAAC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,WAAW,EAAG,CAAA,SAAA,EAAW,GAAG,SAAS,CAAA,CAAA,EAAI,aAAa,CAAE,CAAA,CAAA;AAAA,MACxD,KAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAACA,eAAA,CAAA,KAAA,EAAA,EAAI,WAAW,EAAG,CAAA,CAAA,EAAG,SAAS,CAAe,aAAA,CAAA,CAAA,EAAG,aAAU,MACzD,EAAA,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,iBACb,EAAA,QAAA,kBAAAA,cAAA,CAACC,oBAAQ,CACX,EAAA,CAAA;AAAA,0BACCD,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,KAAA,CAAA,EAAA,QAAA,kBAAAD,eAAA;AAAA,YAACG,sBAAA;AAAA,YAAA;AAAA,cACC,gBAAgB,QAAS,CAAA,cAAA;AAAA,cACzB,qBAAuB,EAAA,KAAA;AAAA,cACvB,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA;AAAA,cACvB,cAAgB,EAAA,kBAAA;AAAA,cAChB,WAAY,EAAA,UAAA;AAAA,cAEZ,QAAA,EAAA;AAAA,gCAAAF,cAAA,CAACG,iBAAI,EAAA,EAAA,WAAA,EAAU,MAAO,EAAA,KAAA,EAAM,MAAO,EAAA,CAAA;AAAA,gCAClCH,cAAA,CAAAG,iBAAA,EAAA,EAAI,WAAU,EAAA,UAAA,EAAW,OAAM,cAAe,EAAA,CAAA;AAAA,gCAC9CH,cAAA,CAAAG,iBAAA,EAAA,EAAI,WAAU,EAAA,QAAA,EAAS,OAAM,YAAa,EAAA,CAAA;AAAA,gCAC1CH,cAAA,CAAAG,iBAAA,EAAA,EAAI,WAAU,EAAA,SAAA,EAAU,OAAM,YAAa,EAAA,CAAA;AAAA,eAAA;AAAA,aAAA;AAAA,WAEhD,EAAA,CAAA;AAAA,0BACAH,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,sBACb,EAAA,QAAA,kBAAAA,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,GAAG,yBAA2B,EAAA;AAAA,gBACvC,8BAAA,EACE,aAAc,CAAA,UAAA,CAAW,WAAW,CAAA;AAAA,gBACtC,gCAAA,EACE,aAAc,CAAA,UAAA,CAAW,YAAY,CAAA;AAAA,eACxC,CAAA;AAAA,cACD,WACE,EAAA,aAAA,CAAc,UAAW,CAAA,WAAW,IAChC,cACA,GAAA,eAAA;AAAA,cAEN,OAAS,EAAA,cAAA;AAAA,aAAA;AAAA,WAEb,EAAA,CAAA;AAAA,SACF,EAAA,CAAA;AAAA,wBACAD,eAAA;AAAA,UAACK,eAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,SAAS,cAAiB,GAAA,CAAA;AAAA,YAClC,SAAA,EAAW,GAAG,SAAS,CAAA,eAAA,CAAA;AAAA,YACvB,QAAU,EAAA,KAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAACJ,cAAA,CAAAK,uBAAA,EAAA,EAAY,QAAoB,EAAA,KAAA,EAAM,cAAe,EAAA,CAAA;AAAA,8BACrDL,cAAA,CAAAK,uBAAA,EAAA,EAAY,QAAU,EAAA,oBAAA,EAAsB,OAAM,YAAa,EAAA,CAAA;AAAA,8BAChEL,cAAA,CAACM,qBAAW,EAAA,EAAA,KAAA,EAAM,YAAa,EAAA,CAAA;AAAA,aAAA;AAAA,WAAA;AAAA,SACjC;AAAA,OAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
|