@vuu-ui/vuu-shell 0.8.41 → 0.8.42
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/node_modules/@salt-ds/styles/dist-es/style-injection-provider/index.js +13 -0
- package/cjs/node_modules/@salt-ds/styles/dist-es/style-injection-provider/index.js.map +1 -0
- package/cjs/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js +16 -0
- package/cjs/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js.map +1 -0
- package/cjs/node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js +75 -0
- package/cjs/node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js.map +1 -0
- package/cjs/node_modules/@salt-ds/window/dist-es/WindowProvider.js +17 -0
- package/cjs/node_modules/@salt-ds/window/dist-es/WindowProvider.js.map +1 -0
- package/cjs/packages/vuu-shell/src/ShellContextProvider.js.map +1 -0
- package/cjs/packages/vuu-shell/src/app-header/AppHeader.css.js +6 -0
- package/cjs/packages/vuu-shell/src/app-header/AppHeader.css.js.map +1 -0
- package/cjs/{app-header → packages/vuu-shell/src/app-header}/AppHeader.js +11 -2
- package/cjs/packages/vuu-shell/src/app-header/AppHeader.js.map +1 -0
- package/cjs/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js.map +1 -0
- package/cjs/{feature → packages/vuu-shell/src/feature}/Feature.js +3 -3
- package/cjs/packages/vuu-shell/src/feature/Feature.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/FeatureErrorBoundary.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/Loader.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature-list/FeatureList.css.js +6 -0
- package/cjs/packages/vuu-shell/src/feature-list/FeatureList.css.js.map +1 -0
- package/cjs/{feature-list → packages/vuu-shell/src/feature-list}/FeatureList.js +9 -0
- package/cjs/packages/vuu-shell/src/feature-list/FeatureList.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutList.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutTile.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/screenshot-utils.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutManager.js.map +1 -0
- package/cjs/packages/vuu-shell/src/left-nav/LeftNav.js.map +1 -0
- package/cjs/packages/vuu-shell/src/login/LoginPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/login/VuuLogo.js.map +1 -0
- package/cjs/packages/vuu-shell/src/login/login-utils.js.map +1 -0
- package/cjs/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js.map +1 -0
- package/cjs/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js.map +1 -0
- package/cjs/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js.map +1 -0
- package/cjs/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useShellLayout.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell.css.js +6 -0
- package/cjs/packages/vuu-shell/src/shell.css.js.map +1 -0
- package/cjs/{shell.js → packages/vuu-shell/src/shell.js} +12 -5
- package/cjs/packages/vuu-shell/src/shell.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shellTypes.js.map +1 -0
- package/cjs/packages/vuu-shell/src/theme-switch/ThemeSwitch.js.map +1 -0
- package/esm/node_modules/@salt-ds/styles/dist-es/style-injection-provider/index.js +11 -0
- package/esm/node_modules/@salt-ds/styles/dist-es/style-injection-provider/index.js.map +1 -0
- package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js +14 -0
- package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js.map +1 -0
- package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js +54 -0
- package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js.map +1 -0
- package/esm/node_modules/@salt-ds/window/dist-es/WindowProvider.js +15 -0
- package/esm/node_modules/@salt-ds/window/dist-es/WindowProvider.js.map +1 -0
- package/esm/packages/vuu-shell/src/ShellContextProvider.js.map +1 -0
- package/esm/packages/vuu-shell/src/app-header/AppHeader.css.js +4 -0
- package/esm/packages/vuu-shell/src/app-header/AppHeader.css.js.map +1 -0
- package/esm/{app-header → packages/vuu-shell/src/app-header}/AppHeader.js +11 -2
- package/esm/packages/vuu-shell/src/app-header/AppHeader.js.map +1 -0
- package/esm/{connection-status → packages/vuu-shell/src/connection-status}/ConnectionStatusIcon.js +2 -2
- package/esm/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js.map +1 -0
- package/esm/{feature → packages/vuu-shell/src/feature}/Feature.js +4 -4
- package/esm/packages/vuu-shell/src/feature/Feature.js.map +1 -0
- package/esm/{feature → packages/vuu-shell/src/feature}/FeatureErrorBoundary.js +2 -2
- package/esm/packages/vuu-shell/src/feature/FeatureErrorBoundary.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature/Loader.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature-list/FeatureList.css.js +4 -0
- package/esm/packages/vuu-shell/src/feature-list/FeatureList.css.js.map +1 -0
- package/esm/{feature-list → packages/vuu-shell/src/feature-list}/FeatureList.js +9 -0
- package/esm/packages/vuu-shell/src/feature-list/FeatureList.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutList.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutTile.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/screenshot-utils.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js.map +1 -0
- package/esm/{layout-management → packages/vuu-shell/src/layout-management}/useLayoutManager.js +2 -2
- package/esm/packages/vuu-shell/src/layout-management/useLayoutManager.js.map +1 -0
- package/esm/packages/vuu-shell/src/left-nav/LeftNav.js.map +1 -0
- package/esm/packages/vuu-shell/src/login/LoginPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/login/VuuLogo.js.map +1 -0
- package/esm/packages/vuu-shell/src/login/login-utils.js.map +1 -0
- package/esm/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js.map +1 -0
- package/esm/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js.map +1 -0
- package/esm/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js.map +1 -0
- package/esm/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useShellLayout.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell.css.js +4 -0
- package/esm/packages/vuu-shell/src/shell.css.js.map +1 -0
- package/esm/{shell.js → packages/vuu-shell/src/shell.js} +13 -6
- package/esm/packages/vuu-shell/src/shell.js.map +1 -0
- package/esm/packages/vuu-shell/src/shellTypes.js.map +1 -0
- package/esm/packages/vuu-shell/src/theme-switch/ThemeSwitch.js.map +1 -0
- package/package.json +11 -11
- package/types/app-header/AppHeader.d.ts +1 -2
- package/types/feature/Feature.d.ts +1 -1
- package/types/feature-list/FeatureList.d.ts +0 -1
- package/types/shell.d.ts +0 -1
- package/cjs/ShellContextProvider.js.map +0 -1
- package/cjs/app-header/AppHeader.css +0 -24
- package/cjs/app-header/AppHeader.js.map +0 -1
- package/cjs/connection-status/ConnectionStatusIcon.js.map +0 -1
- package/cjs/feature/Feature.js.map +0 -1
- package/cjs/feature/FeatureErrorBoundary.js.map +0 -1
- package/cjs/feature/Loader.js.map +0 -1
- package/cjs/feature/css-module-loader.js +0 -9
- package/cjs/feature/css-module-loader.js.map +0 -1
- package/cjs/feature-list/FeatureList.css +0 -21
- package/cjs/feature-list/FeatureList.js.map +0 -1
- package/cjs/layout-management/LayoutList.js.map +0 -1
- package/cjs/layout-management/LayoutTile.js.map +0 -1
- package/cjs/layout-management/SaveLayoutPanel.js.map +0 -1
- package/cjs/layout-management/screenshot-utils.js.map +0 -1
- package/cjs/layout-management/useLayoutContextMenuItems.js.map +0 -1
- package/cjs/layout-management/useLayoutManager.js.map +0 -1
- package/cjs/left-nav/LeftNav.js.map +0 -1
- package/cjs/login/LoginPanel.js.map +0 -1
- package/cjs/login/VuuLogo.js.map +0 -1
- package/cjs/login/login-utils.js.map +0 -1
- package/cjs/persistence-management/LocalPersistenceManager.js.map +0 -1
- package/cjs/persistence-management/RemotePersistenceManager.js.map +0 -1
- package/cjs/persistence-management/defaultApplicationJson.js.map +0 -1
- package/cjs/session-editing-form/SessionEditingForm.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.map +0 -1
- package/cjs/shell.css +0 -49
- package/cjs/shell.js.map +0 -1
- package/cjs/shellTypes.js.map +0 -1
- package/cjs/theme-switch/ThemeSwitch.js.map +0 -1
- package/esm/ShellContextProvider.js.map +0 -1
- package/esm/app-header/AppHeader.css +0 -24
- package/esm/app-header/AppHeader.js.map +0 -1
- package/esm/connection-status/ConnectionStatusIcon.js.map +0 -1
- package/esm/feature/Feature.js.map +0 -1
- package/esm/feature/FeatureErrorBoundary.js.map +0 -1
- package/esm/feature/Loader.js.map +0 -1
- package/esm/feature/css-module-loader.js +0 -7
- package/esm/feature/css-module-loader.js.map +0 -1
- package/esm/feature-list/FeatureList.css +0 -21
- package/esm/feature-list/FeatureList.js.map +0 -1
- package/esm/layout-management/LayoutList.js.map +0 -1
- package/esm/layout-management/LayoutTile.js.map +0 -1
- package/esm/layout-management/SaveLayoutPanel.js.map +0 -1
- package/esm/layout-management/screenshot-utils.js.map +0 -1
- package/esm/layout-management/useLayoutContextMenuItems.js.map +0 -1
- package/esm/layout-management/useLayoutManager.js.map +0 -1
- package/esm/left-nav/LeftNav.js.map +0 -1
- package/esm/login/LoginPanel.js.map +0 -1
- package/esm/login/VuuLogo.js.map +0 -1
- package/esm/login/login-utils.js.map +0 -1
- package/esm/persistence-management/LocalPersistenceManager.js.map +0 -1
- package/esm/persistence-management/RemotePersistenceManager.js.map +0 -1
- package/esm/persistence-management/defaultApplicationJson.js.map +0 -1
- package/esm/session-editing-form/SessionEditingForm.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.map +0 -1
- package/esm/shell.css +0 -49
- package/esm/shell.js.map +0 -1
- package/esm/shellTypes.js.map +0 -1
- package/esm/theme-switch/ThemeSwitch.js.map +0 -1
- /package/cjs/{ShellContextProvider.js → packages/vuu-shell/src/ShellContextProvider.js} +0 -0
- /package/cjs/{connection-status → packages/vuu-shell/src/connection-status}/ConnectionStatusIcon.js +0 -0
- /package/cjs/{feature → packages/vuu-shell/src/feature}/FeatureErrorBoundary.js +0 -0
- /package/cjs/{feature → packages/vuu-shell/src/feature}/Loader.js +0 -0
- /package/cjs/{index.js → packages/vuu-shell/src/index.js} +0 -0
- /package/cjs/{index.js.map → packages/vuu-shell/src/index.js.map} +0 -0
- /package/cjs/{layout-management → packages/vuu-shell/src/layout-management}/LayoutList.js +0 -0
- /package/cjs/{layout-management → packages/vuu-shell/src/layout-management}/LayoutTile.js +0 -0
- /package/cjs/{layout-management → packages/vuu-shell/src/layout-management}/SaveLayoutPanel.js +0 -0
- /package/cjs/{layout-management → packages/vuu-shell/src/layout-management}/screenshot-utils.js +0 -0
- /package/cjs/{layout-management → packages/vuu-shell/src/layout-management}/useLayoutContextMenuItems.js +0 -0
- /package/cjs/{layout-management → packages/vuu-shell/src/layout-management}/useLayoutManager.js +0 -0
- /package/cjs/{left-nav → packages/vuu-shell/src/left-nav}/LeftNav.js +0 -0
- /package/cjs/{login → packages/vuu-shell/src/login}/LoginPanel.js +0 -0
- /package/cjs/{login → packages/vuu-shell/src/login}/VuuLogo.js +0 -0
- /package/cjs/{login → packages/vuu-shell/src/login}/login-utils.js +0 -0
- /package/cjs/{persistence-management → packages/vuu-shell/src/persistence-management}/LocalPersistenceManager.js +0 -0
- /package/cjs/{persistence-management → packages/vuu-shell/src/persistence-management}/RemotePersistenceManager.js +0 -0
- /package/cjs/{persistence-management → packages/vuu-shell/src/persistence-management}/defaultApplicationJson.js +0 -0
- /package/cjs/{session-editing-form → packages/vuu-shell/src/session-editing-form}/SessionEditingForm.js +0 -0
- /package/cjs/{shell-layouts → packages/vuu-shell/src/shell-layouts}/context-panel/ContextPanel.js +0 -0
- /package/cjs/{shell-layouts → packages/vuu-shell/src/shell-layouts}/side-panel/SidePanel.js +0 -0
- /package/cjs/{shell-layouts → packages/vuu-shell/src/shell-layouts}/useFullHeightLeftPanel.js +0 -0
- /package/cjs/{shell-layouts → packages/vuu-shell/src/shell-layouts}/useInlayLeftPanel.js +0 -0
- /package/cjs/{shell-layouts → packages/vuu-shell/src/shell-layouts}/useShellLayout.js +0 -0
- /package/cjs/{shellTypes.js → packages/vuu-shell/src/shellTypes.js} +0 -0
- /package/cjs/{theme-switch → packages/vuu-shell/src/theme-switch}/ThemeSwitch.js +0 -0
- /package/esm/{ShellContextProvider.js → packages/vuu-shell/src/ShellContextProvider.js} +0 -0
- /package/esm/{feature → packages/vuu-shell/src/feature}/Loader.js +0 -0
- /package/esm/{index.js → packages/vuu-shell/src/index.js} +0 -0
- /package/esm/{index.js.map → packages/vuu-shell/src/index.js.map} +0 -0
- /package/esm/{layout-management → packages/vuu-shell/src/layout-management}/LayoutList.js +0 -0
- /package/esm/{layout-management → packages/vuu-shell/src/layout-management}/LayoutTile.js +0 -0
- /package/esm/{layout-management → packages/vuu-shell/src/layout-management}/SaveLayoutPanel.js +0 -0
- /package/esm/{layout-management → packages/vuu-shell/src/layout-management}/screenshot-utils.js +0 -0
- /package/esm/{layout-management → packages/vuu-shell/src/layout-management}/useLayoutContextMenuItems.js +0 -0
- /package/esm/{left-nav → packages/vuu-shell/src/left-nav}/LeftNav.js +0 -0
- /package/esm/{login → packages/vuu-shell/src/login}/LoginPanel.js +0 -0
- /package/esm/{login → packages/vuu-shell/src/login}/VuuLogo.js +0 -0
- /package/esm/{login → packages/vuu-shell/src/login}/login-utils.js +0 -0
- /package/esm/{persistence-management → packages/vuu-shell/src/persistence-management}/LocalPersistenceManager.js +0 -0
- /package/esm/{persistence-management → packages/vuu-shell/src/persistence-management}/RemotePersistenceManager.js +0 -0
- /package/esm/{persistence-management → packages/vuu-shell/src/persistence-management}/defaultApplicationJson.js +0 -0
- /package/esm/{session-editing-form → packages/vuu-shell/src/session-editing-form}/SessionEditingForm.js +0 -0
- /package/esm/{shell-layouts → packages/vuu-shell/src/shell-layouts}/context-panel/ContextPanel.js +0 -0
- /package/esm/{shell-layouts → packages/vuu-shell/src/shell-layouts}/side-panel/SidePanel.js +0 -0
- /package/esm/{shell-layouts → packages/vuu-shell/src/shell-layouts}/useFullHeightLeftPanel.js +0 -0
- /package/esm/{shell-layouts → packages/vuu-shell/src/shell-layouts}/useInlayLeftPanel.js +0 -0
- /package/esm/{shell-layouts → packages/vuu-shell/src/shell-layouts}/useShellLayout.js +0 -0
- /package/esm/{shellTypes.js → packages/vuu-shell/src/shellTypes.js} +0 -0
- /package/esm/{theme-switch → packages/vuu-shell/src/theme-switch}/ThemeSwitch.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionEditingForm.js","sources":["../../../../../src/session-editing-form/SessionEditingForm.tsx"],"sourcesContent":["import { VuuDataSource } from \"@vuu-ui/vuu-data-remote\";\nimport { DataSource, TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuColumnDataType,\n VuuDataRow,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n buildColumnMap,\n hasAction,\n isErrorResponse,\n isValidNumber,\n shallowEquals,\n} from \"@vuu-ui/vuu-utils\";\nimport { Button, useIdMemo } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport {\n ChangeEvent,\n FocusEvent,\n HTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport \"./SessionEditingForm.css\";\n\nexport type FormFieldDescriptor = {\n isKeyField?: boolean;\n label?: string;\n name: string;\n type: VuuColumnDataType;\n description: string;\n readonly?: boolean;\n required?: boolean;\n};\n\nexport type FormConfig = {\n title: string;\n key: string;\n fields: FormFieldDescriptor[];\n};\n\nexport interface SessionEditingFormProps\n extends HTMLAttributes<HTMLDivElement> {\n config: FormConfig;\n onClose: () => void;\n dataSource?: DataSource;\n schema?: TableSchema;\n}\n\nconst classBase = \"vuuSessionEditingForm\";\n\nconst getField = (\n fields: FormFieldDescriptor[],\n name: string\n): FormFieldDescriptor => {\n const field = fields.find((f) => f.name === name);\n if (field) {\n return field;\n } else {\n throw Error(`SessionEditingForm, no field '${name}' found`);\n }\n};\n\nconst getFieldNameAndValue = (\n evt: ChangeEvent | FocusEvent\n): [string, string] => {\n const {\n dataset: { field },\n value,\n } = evt.target as HTMLInputElement;\n if (field === undefined) {\n throw Error(\"SessionEditingForm, form field has no field name\");\n }\n return [field, value];\n};\n\nconst Status = {\n uninitialised: 0,\n unchanged: 1,\n changed: 2,\n invalid: 3,\n};\n\nfunction getTypedValue(\n value: string,\n type: VuuColumnDataType,\n throwIfUndefined?: false\n): VuuRowDataItemType | undefined;\nfunction getTypedValue(\n value: string,\n type: VuuColumnDataType,\n throwIfUndefined: true\n): VuuRowDataItemType;\nfunction getTypedValue(\n value: string,\n type: VuuColumnDataType,\n throwIfUndefined = false\n): VuuRowDataItemType | undefined {\n switch (type) {\n case \"int\":\n case \"long\": {\n const typedValue = parseInt(value, 10);\n if (isValidNumber(typedValue)) {\n return typedValue;\n } else if (throwIfUndefined) {\n throw Error(\"SessionEditingForm getTypedValue\");\n } else {\n return undefined;\n }\n }\n\n case \"double\": {\n const typedValue = parseFloat(value);\n if (isValidNumber(typedValue)) {\n return typedValue;\n }\n return undefined;\n }\n\n case \"boolean\":\n return value === \"true\" ? true : false;\n default:\n return value;\n }\n}\n\nconst getDataSource = (\n dataSource?: DataSource,\n schema?: TableSchema\n): DataSource => {\n if (dataSource) {\n return dataSource;\n } else if (schema) {\n return new VuuDataSource({\n bufferSize: 0,\n table: schema.table,\n columns: schema.columns.map((col) => col.name),\n }) as DataSource;\n } else {\n throw Error(\n \"SessionEditingForm: either a DataSource or a TableSchema must be provided\"\n );\n }\n};\n\ntype FormValues = { [key: string]: VuuRowDataItemType | undefined };\n\nexport const SessionEditingForm = ({\n className,\n config: { fields, key: keyField },\n dataSource: dataSourceProp,\n id: idProp,\n onClose,\n schema,\n ...htmlAttributes\n}: SessionEditingFormProps) => {\n const [values, setValues] = useState<FormValues>();\n const [errorMessage, setErrorMessage] = useState(\"\");\n const formContentRef = useRef<HTMLDivElement>(null);\n const initialDataRef = useRef<FormValues>();\n const dataStatusRef = useRef(Status.uninitialised);\n\n const dataSource = useMemo(() => {\n const applyServerData = (data: VuuDataRow) => {\n if (columnMap) {\n const values: { [key: string]: VuuRowDataItemType } = {};\n for (const column of dataSource.columns) {\n values[column] = data[columnMap[column]];\n }\n if (dataStatusRef.current === Status.uninitialised) {\n dataStatusRef.current = Status.unchanged;\n initialDataRef.current = values;\n }\n setValues(values);\n }\n };\n\n const ds = getDataSource(dataSourceProp, schema);\n const columnMap = buildColumnMap(ds.columns);\n ds.subscribe({ range: { from: 0, to: 5 } }, (message) => {\n if (message.type === \"viewport-update\" && message.rows) {\n if (dataStatusRef.current === Status.uninitialised) {\n applyServerData(message.rows[0]);\n } else {\n console.log(\"what do we do with server updates\");\n }\n }\n });\n return ds;\n }, [dataSourceProp, schema]);\n\n const id = useIdMemo(idProp);\n\n const handleChange = useCallback(\n (evt) => {\n const [field, value] = getFieldNameAndValue(evt);\n const { type } = getField(fields, field);\n const typedValue = getTypedValue(value, type);\n setValues((values = {}) => {\n const newValues = {\n ...values,\n [field]: typedValue,\n };\n const notUpdated = shallowEquals(newValues, initialDataRef.current);\n dataStatusRef.current = notUpdated\n ? Status.unchanged\n : typedValue !== undefined\n ? Status.changed\n : Status.invalid;\n return newValues;\n });\n },\n [fields]\n );\n\n const handleBlur = useCallback(\n (evt: FocusEvent) => {\n const [field, value] = getFieldNameAndValue(evt);\n const { type } = getField(fields, field);\n const rowKey = values?.[keyField];\n const typedValue = getTypedValue(value, type, true);\n if (typeof rowKey === \"string\") {\n dataSource.menuRpcCall({\n rowKey,\n field: field,\n value: typedValue,\n type: \"VP_EDIT_CELL_RPC\",\n });\n }\n },\n [dataSource, fields, keyField, values]\n );\n\n const applyAction = useCallback(\n (action: unknown) => {\n if (typeof action === \"object\" && action !== null) {\n if (\"type\" in action && action.type === \"CLOSE_DIALOG_ACTION\") {\n onClose();\n }\n }\n },\n [onClose]\n );\n\n const handleSubmit = useCallback(async () => {\n const response = await dataSource.menuRpcCall({\n type: \"VP_EDIT_SUBMIT_FORM_RPC\",\n });\n if (isErrorResponse(response)) {\n setErrorMessage(response.error);\n } else if (hasAction(response)) {\n applyAction(response.action);\n }\n }, [applyAction, dataSource]);\n\n const handleKeyDown = useCallback(\n (evt) => {\n if (evt.key === \"Enter\" && dataStatusRef.current === Status.changed) {\n handleSubmit();\n }\n },\n [handleSubmit]\n );\n\n const handleCancel = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const getFormControl = (field: FormFieldDescriptor) => {\n const value = String(values?.[field.name] ?? \"\");\n if (field.readonly || field.name === keyField) {\n return (\n <div className={`${classBase}-fieldValue vuuReadOnly`}>{value}</div>\n );\n } else {\n return (\n <input\n className={`${classBase}-fieldValue`}\n data-field={field.name}\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"text\"\n value={value}\n id={`${id}-input-${field.name}`}\n />\n );\n }\n };\n\n useEffect(() => {\n if (formContentRef.current) {\n const firstInput = formContentRef.current.querySelector(\n \"input\"\n ) as HTMLInputElement;\n if (firstInput) {\n setTimeout(() => {\n firstInput.focus();\n firstInput.select();\n }, 100);\n }\n }\n }, []);\n\n useEffect(() => {\n return () => {\n if (dataSource) {\n dataSource.unsubscribe();\n }\n };\n }, [dataSource]);\n\n const isDirty = dataStatusRef.current === Status.changed;\n return (\n <div {...htmlAttributes} className={cx(classBase, className)}>\n {errorMessage ? (\n <div\n className={`${classBase}-errorBanner`}\n data-icon=\"error\"\n title={errorMessage}\n >\n Error, edit(s) not saved\n </div>\n ) : undefined}\n <div\n className={`${classBase}-content`}\n ref={formContentRef}\n onKeyDown={handleKeyDown}\n >\n {fields.map((field) => (\n <div className={`${classBase}-field`} key={field.name}>\n <label\n className={cx(`${classBase}-fieldLabel`, {\n [`${classBase}-required`]: field.required,\n })}\n htmlFor={`${id}-input-${field.name}`}\n >\n {field?.label ?? field.description}\n </label>\n {getFormControl(field)}\n </div>\n ))}\n </div>\n <div className={`${classBase}-buttonbar salt-theme salt-density-high`}>\n <Button\n type=\"submit\"\n variant=\"cta\"\n disabled={!isDirty}\n onClick={handleSubmit}\n >\n Submit\n </Button>\n <Button variant=\"secondary\" onClick={handleCancel}>\n Cancel\n </Button>\n </div>\n </div>\n );\n};\n"],"names":["isValidNumber","VuuDataSource","useState","useRef","useMemo","values","buildColumnMap","useIdMemo","useCallback","shallowEquals","isErrorResponse","hasAction","jsx","useEffect","jsxs","Button"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextPanel.js","sources":["../../../../../../src/shell-layouts/context-panel/ContextPanel.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { useCallback, useMemo } from \"react\";\nimport {\n layoutFromJson,\n LayoutJSON,\n View,\n useLayoutProviderDispatch,\n} from \"@vuu-ui/vuu-layout\";\n\nimport \"./ContextPanel.css\";\n\nconst classBase = \"vuuContextPanel\";\n\nexport interface ContextPanelProps {\n [key: string]: unknown;\n className?: string;\n content?: LayoutJSON;\n expanded?: boolean;\n overlay?: boolean;\n}\n\nexport const ContextPanel = ({\n className: classNameProp,\n expanded = false,\n content: contentProp,\n overlay = false,\n title,\n}: ContextPanelProps) => {\n const dispatchLayoutAction = useLayoutProviderDispatch();\n // const [contentJson, setContentJson] = useState(contentProp);\n const handleClose = useCallback(() => {\n dispatchLayoutAction({\n path: \"#context-panel\",\n propName: \"expanded\",\n propValue: false,\n type: \"set-prop\",\n });\n }, [dispatchLayoutAction]);\n // TODO look up content using context\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-expanded`]: expanded,\n [`${classBase}-inline`]: overlay !== true,\n [`${classBase}-overlay`]: overlay,\n });\n\n const content = useMemo(\n () =>\n contentProp && expanded ? layoutFromJson(contentProp, \"context-0\") : null,\n [contentProp, expanded]\n );\n\n return (\n <div\n className={cx(classBase, className, {\n [`${classBase}-expanded`]: expanded,\n })}\n >\n <View className={`${classBase}-inner`} header={false} id=\"context-panel\">\n <div className={`${classBase}-header`}>\n <h2 className={`${classBase}-title`}>{title}</h2>\n <Button\n className={`${classBase}-close`}\n data-icon=\"close\"\n onClick={handleClose}\n variant=\"secondary\"\n />\n </div>\n <div className={`${classBase}-content`}>{content}</div>\n </View>\n </div>\n );\n};\n"],"names":["useLayoutProviderDispatch","useCallback","useMemo","layoutFromJson","jsx","jsxs","View","Button"],"mappings":";;;;;;;;AAYA,MAAM,SAAY,GAAA,iBAAA,CAAA;AAUX,MAAM,eAAe,CAAC;AAAA,EAC3B,SAAW,EAAA,aAAA;AAAA,EACX,QAAW,GAAA,KAAA;AAAA,EACX,OAAS,EAAA,WAAA;AAAA,EACT,OAAU,GAAA,KAAA;AAAA,EACV,KAAA;AACF,CAAyB,KAAA;AACvB,EAAA,MAAM,uBAAuBA,mCAA0B,EAAA,CAAA;AAEvD,EAAM,MAAA,WAAA,GAAcC,kBAAY,MAAM;AACpC,IAAqB,oBAAA,CAAA;AAAA,MACnB,IAAM,EAAA,gBAAA;AAAA,MACN,QAAU,EAAA,UAAA;AAAA,MACV,SAAW,EAAA,KAAA;AAAA,MACX,IAAM,EAAA,UAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH,EAAG,CAAC,oBAAoB,CAAC,CAAA,CAAA;AAGzB,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAe,EAAA;AAAA,IAC7C,CAAC,CAAA,EAAG,SAAS,CAAA,SAAA,CAAW,GAAG,QAAA;AAAA,IAC3B,CAAC,CAAA,EAAG,SAAS,CAAA,OAAA,CAAS,GAAG,OAAY,KAAA,IAAA;AAAA,IACrC,CAAC,CAAA,EAAG,SAAS,CAAA,QAAA,CAAU,GAAG,OAAA;AAAA,GAC3B,CAAA,CAAA;AAED,EAAA,MAAM,OAAU,GAAAC,aAAA;AAAA,IACd,MACE,WAAe,IAAA,QAAA,GAAWC,wBAAe,CAAA,WAAA,EAAa,WAAW,CAAI,GAAA,IAAA;AAAA,IACvE,CAAC,aAAa,QAAQ,CAAA;AAAA,GACxB,CAAA;AAEA,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAW,EAAA;AAAA,QAClC,CAAC,CAAA,EAAG,SAAS,CAAA,SAAA,CAAW,GAAG,QAAA;AAAA,OAC5B,CAAA;AAAA,MAED,QAAA,kBAAAC,eAAA,CAACC,kBAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAU,MAAA,CAAA,EAAA,MAAA,EAAQ,KAAO,EAAA,EAAA,EAAG,eACvD,EAAA,QAAA,EAAA;AAAA,wBAAAD,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAC1B,OAAA,CAAA,EAAA,QAAA,EAAA;AAAA,0BAAAD,cAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,0BAC5CA,cAAA;AAAA,YAACG,WAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,GAAG,SAAS,CAAA,MAAA,CAAA;AAAA,cACvB,WAAU,EAAA,OAAA;AAAA,cACV,OAAS,EAAA,WAAA;AAAA,cACT,OAAQ,EAAA,WAAA;AAAA,aAAA;AAAA,WACV;AAAA,SACF,EAAA,CAAA;AAAA,uCACC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,YAAa,QAAQ,EAAA,OAAA,EAAA,CAAA;AAAA,OACnD,EAAA,CAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidePanel.js","sources":["../../../../../../src/shell-layouts/side-panel/SidePanel.tsx"],"sourcesContent":["import { CSSProperties, HTMLAttributes, useMemo } from \"react\";\nimport cx from \"clsx\";\n\nimport \"./SidePanel.css\";\n// import { useLayoutManager } from \"../../layout-management\";\n\nconst classBase = \"vuuShellSidePanel\";\n\nexport interface SidePanelProps extends HTMLAttributes<HTMLDivElement> {\n open?: boolean;\n path?: string;\n sizeOpen?: number;\n sizeClosed?: number;\n}\n\nexport const SidePanel = ({\n children,\n open = true,\n sizeClosed = 90,\n sizeOpen = 200,\n style: styleProp,\n ...htmlAttributes\n}: SidePanelProps) => {\n // const { applicationJson, saveApplicationSettings } = useLayoutManager();\n // console.log(`settings`, {\n // expanded: applicationJson?.settings?.leftNav?.expanded,\n // active: applicationJson?.settings?.leftNav?.activeTabIndex,\n // });\n\n const style = useMemo(\n () =>\n ({\n ...styleProp,\n \"--shell-left-nav-size\": open ? `${sizeOpen}px` : `${sizeClosed}px`,\n } as CSSProperties),\n [open, sizeClosed, sizeOpen, styleProp]\n );\n return (\n <div {...htmlAttributes} className={cx(classBase)} style={style}>\n {children}\n </div>\n );\n};\n"],"names":["useMemo","jsx"],"mappings":";;;;;;AAMA,MAAM,SAAY,GAAA,mBAAA,CAAA;AASX,MAAM,YAAY,CAAC;AAAA,EACxB,QAAA;AAAA,EACA,IAAO,GAAA,IAAA;AAAA,EACP,UAAa,GAAA,EAAA;AAAA,EACb,QAAW,GAAA,GAAA;AAAA,EACX,KAAO,EAAA,SAAA;AAAA,EACP,GAAG,cAAA;AACL,CAAsB,KAAA;AAOpB,EAAA,MAAM,KAAQ,GAAAA,aAAA;AAAA,IACZ,OACG;AAAA,MACC,GAAG,SAAA;AAAA,MACH,yBAAyB,IAAO,GAAA,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAA,GAAO,GAAG,UAAU,CAAA,EAAA,CAAA;AAAA,KACjE,CAAA;AAAA,IACF,CAAC,IAAA,EAAM,UAAY,EAAA,QAAA,EAAU,SAAS,CAAA;AAAA,GACxC,CAAA;AACA,EACE,uBAAAC,cAAA,CAAC,SAAK,GAAG,cAAA,EAAgB,WAAW,EAAG,CAAA,SAAS,CAAG,EAAA,KAAA,EAChD,QACH,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFullHeightLeftPanel.js","sources":["../../../../../src/shell-layouts/useFullHeightLeftPanel.tsx"],"sourcesContent":["import { DraggableLayout, Flexbox } from \"@vuu-ui/vuu-layout\";\nimport { ReactElement } from \"react\";\nimport { ContextPanel } from \"./context-panel\";\nimport { SidePanel } from \"./side-panel\";\nimport { ShellLayoutProps } from \"./useShellLayout\";\n\nexport const useFullHeightLeftPanel = ({\n appHeader,\n LeftSidePanelProps,\n}: ShellLayoutProps): ReactElement => {\n return (\n <Flexbox\n className=\"App\"\n style={{\n flexDirection: \"row\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <SidePanel {...LeftSidePanelProps} id=\"vuu-side-panel\" />\n <Flexbox\n className=\"vuuShell-content\"\n style={{ flex: 1, flexDirection: \"column\" }}\n >\n {appHeader}\n <DraggableLayout dropTarget key=\"main-content\" style={{ flex: 1 }} />\n </Flexbox>\n <ContextPanel id=\"context-panel\" overlay></ContextPanel>\n </Flexbox>\n );\n};\n"],"names":["jsxs","Flexbox","jsx","SidePanel","DraggableLayout","ContextPanel"],"mappings":";;;;;;;AAMO,MAAM,yBAAyB,CAAC;AAAA,EACrC,SAAA;AAAA,EACA,kBAAA;AACF,CAAsC,KAAA;AACpC,EACE,uBAAAA,eAAA;AAAA,IAACC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,KAAA;AAAA,MACV,KAAO,EAAA;AAAA,QACL,aAAe,EAAA,KAAA;AAAA,QACf,MAAQ,EAAA,MAAA;AAAA,QACR,KAAO,EAAA,MAAA;AAAA,OACT;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,mBAAW,EAAA,EAAA,GAAG,kBAAoB,EAAA,EAAA,EAAG,gBAAiB,EAAA,CAAA;AAAA,wBACvDH,eAAA;AAAA,UAACC,iBAAA;AAAA,UAAA;AAAA,YACC,SAAU,EAAA,kBAAA;AAAA,YACV,KAAO,EAAA,EAAE,IAAM,EAAA,CAAA,EAAG,eAAe,QAAS,EAAA;AAAA,YAEzC,QAAA,EAAA;AAAA,cAAA,SAAA;AAAA,8BACDC,cAAA,CAACE,6BAAgB,UAAU,EAAA,IAAA,EAAoB,OAAO,EAAE,IAAA,EAAM,CAAE,EAAA,EAAA,EAAhC,cAAmC,CAAA;AAAA,aAAA;AAAA,WAAA;AAAA,SACrE;AAAA,wBACCF,cAAA,CAAAG,yBAAA,EAAA,EAAa,EAAG,EAAA,eAAA,EAAgB,SAAO,IAAC,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAC3C,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInlayLeftPanel.js","sources":["../../../../../src/shell-layouts/useInlayLeftPanel.tsx"],"sourcesContent":["import {\n DockLayout,\n DraggableLayout,\n Drawer,\n Flexbox,\n View,\n} from \"@vuu-ui/vuu-layout\";\n\nimport { MouseEvent, ReactElement, useCallback, useRef, useState } from \"react\";\nimport { ShellLayoutProps } from \"./useShellLayout\";\n\nexport const useInlayLeftPanel = ({\n appHeader,\n LeftSidePanelProps,\n}: ShellLayoutProps): ReactElement => {\n const paletteView = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(true);\n\n const handleDrawerClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n const target = e.target as HTMLElement;\n if (!paletteView.current?.contains(target)) {\n setOpen(!open);\n }\n },\n [open]\n );\n\n const getDrawers = useCallback(\n (leftSidePanel) => {\n const drawers: ReactElement[] = [];\n drawers.push(\n <Drawer\n key=\"left-panel\"\n onClick={handleDrawerClick}\n open={open}\n position=\"left\"\n inline\n peekaboo\n sizeOpen={200}\n toggleButton=\"end\"\n >\n <View\n className=\"vuuShell-palette\"\n id=\"vw-app-palette\"\n key=\"app-palette\"\n ref={paletteView}\n style={{ height: \"100%\" }}\n >\n {leftSidePanel}\n </View>\n </Drawer>\n );\n\n return drawers;\n },\n [handleDrawerClick, open]\n );\n\n return (\n <Flexbox\n className=\"App\"\n style={{ flexDirection: \"column\", height: \"100%\", width: \"100%\" }}\n >\n {appHeader}\n <DockLayout style={{ flex: 1 }}>\n {getDrawers(LeftSidePanelProps?.children).concat(\n <DraggableLayout\n dropTarget\n key=\"main-content\"\n style={{ width: \"100%\", height: \"100%\" }}\n />\n )}\n </DockLayout>\n </Flexbox>\n );\n};\n"],"names":["useRef","useState","useCallback","jsx","Drawer","View","jsxs","Flexbox","DockLayout","DraggableLayout"],"mappings":";;;;;;AAWO,MAAM,oBAAoB,CAAC;AAAA,EAChC,SAAA;AAAA,EACA,kBAAA;AACF,CAAsC,KAAA;AACpC,EAAM,MAAA,WAAA,GAAcA,aAAuB,IAAI,CAAA,CAAA;AAC/C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAS,IAAI,CAAA,CAAA;AAErC,EAAA,MAAM,iBAAoB,GAAAC,iBAAA;AAAA,IACxB,CAAC,CAA+B,KAAA;AAC9B,MAAA,MAAM,SAAS,CAAE,CAAA,MAAA,CAAA;AACjB,MAAA,IAAI,CAAC,WAAA,CAAY,OAAS,EAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AAC1C,QAAA,OAAA,CAAQ,CAAC,IAAI,CAAA,CAAA;AAAA,OACf;AAAA,KACF;AAAA,IACA,CAAC,IAAI,CAAA;AAAA,GACP,CAAA;AAEA,EAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,IACjB,CAAC,aAAkB,KAAA;AACjB,MAAA,MAAM,UAA0B,EAAC,CAAA;AACjC,MAAQ,OAAA,CAAA,IAAA;AAAA,wBACNC,cAAA;AAAA,UAACC,gBAAA;AAAA,UAAA;AAAA,YAEC,OAAS,EAAA,iBAAA;AAAA,YACT,IAAA;AAAA,YACA,QAAS,EAAA,MAAA;AAAA,YACT,MAAM,EAAA,IAAA;AAAA,YACN,QAAQ,EAAA,IAAA;AAAA,YACR,QAAU,EAAA,GAAA;AAAA,YACV,YAAa,EAAA,KAAA;AAAA,YAEb,QAAA,kBAAAD,cAAA;AAAA,cAACE,cAAA;AAAA,cAAA;AAAA,gBACC,SAAU,EAAA,kBAAA;AAAA,gBACV,EAAG,EAAA,gBAAA;AAAA,gBAEH,GAAK,EAAA,WAAA;AAAA,gBACL,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAO,EAAA;AAAA,gBAEvB,QAAA,EAAA,aAAA;AAAA,eAAA;AAAA,cAJG,aAAA;AAAA,aAKN;AAAA,WAAA;AAAA,UAjBI,YAAA;AAAA,SAkBN;AAAA,OACF,CAAA;AAEA,MAAO,OAAA,OAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,mBAAmB,IAAI,CAAA;AAAA,GAC1B,CAAA;AAEA,EACE,uBAAAC,eAAA;AAAA,IAACC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,KAAA;AAAA,MACV,OAAO,EAAE,aAAA,EAAe,UAAU,MAAQ,EAAA,MAAA,EAAQ,OAAO,MAAO,EAAA;AAAA,MAE/D,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,wBACDJ,cAAA,CAACK,oBAAW,EAAA,EAAA,KAAA,EAAO,EAAE,IAAA,EAAM,GACxB,EAAA,QAAA,EAAA,UAAA,CAAW,kBAAoB,EAAA,QAAQ,CAAE,CAAA,MAAA;AAAA,0BACxCL,cAAA;AAAA,YAACM,yBAAA;AAAA,YAAA;AAAA,cACC,UAAU,EAAA,IAAA;AAAA,cAEV,KAAO,EAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,QAAQ,MAAO,EAAA;AAAA,aAAA;AAAA,YADnC,cAAA;AAAA,WAEN;AAAA,SAEJ,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useShellLayout.js","sources":["../../../../../src/shell-layouts/useShellLayout.ts"],"sourcesContent":["import { ReactElement } from \"react\";\nimport { ShellProps } from \"../shell\";\nimport { useFullHeightLeftPanel } from \"./useFullHeightLeftPanel\";\nimport { useInlayLeftPanel } from \"./useInlayLeftPanel\";\n\nexport type ShellLayoutType = \"full-height\" | \"inlay\";\nexport interface ShellLayoutProps {\n LeftSidePanelProps: ShellProps[\"LeftSidePanelProps\"];\n appHeader: ReactElement;\n}\n\nexport const useShellLayout = ({\n leftSidePanelLayout = \"inlay\",\n ...props\n}:\n | ShellLayoutProps & {\n leftSidePanelLayout?: \"full-height\" | \"inlay\";\n }) => {\n const useLayoutHook =\n leftSidePanelLayout === \"inlay\"\n ? useInlayLeftPanel\n : useFullHeightLeftPanel;\n\n return useLayoutHook(props);\n};\n"],"names":["useInlayLeftPanel","useFullHeightLeftPanel"],"mappings":";;;;;AAWO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,mBAAsB,GAAA,OAAA;AAAA,EACtB,GAAG,KAAA;AACL,CAGU,KAAA;AACR,EAAM,MAAA,aAAA,GACJ,mBAAwB,KAAA,OAAA,GACpBA,mCACA,GAAAC,6CAAA,CAAA;AAEN,EAAA,OAAO,cAAc,KAAK,CAAA,CAAA;AAC5B;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var shellCss = ".vuuShell {\n background-color: var(--vuu-color-gray-25);\n height: var(--vuuShell-height, 100vh);\n width: var(--vuuShell-width, 100vw);\n}\n\n.vuuShell-mainTabs {\n background: var(--salt-container-primary-background);\n}\n\n.vuuShell-palette {\n --vuuView-border: none;\n --vuuView-margin: 0;\n}\n\n.vuuShell-warningPlaceholder {\n background-color: var(--salt-container-background-high);\n height: 100%;\n}\n\n/* until we reinstat5e the toolbar */\n.vuuToolbarProxy {\n background: var(--salt-container-primary-background);\n}\n\n.vuuShell-mainTabs > .vuuTabstrip > .vuuOverflowContainer-wrapContainer {\n background: var(--vuu-color-gray-25);\n}\n\n.vuuShell-mainTabs {\n --vuuTab-height: 28px;\n border: solid 1px #D6D7DA;\n border-top: none !important;\n border-radius: 6px;\n height: 100%;\n padding: 36px 8px 8px 8px;\n position: relative;\n width: 100%;\n}\n\n.vuuShell-mainTabs > .vuuTabstrip {\n left:-1px;\n padding-bottom: 7px;\n position: absolute !important;\n right: 1px;\n top: 0;\n width: calc(100% + 2px) !important;\n} \n\n";
|
|
4
|
+
|
|
5
|
+
module.exports = shellCss;
|
|
6
|
+
//# sourceMappingURL=shell.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -5,18 +5,21 @@ var vuuDataRemote = require('@vuu-ui/vuu-data-remote');
|
|
|
5
5
|
var vuuLayout = require('@vuu-ui/vuu-layout');
|
|
6
6
|
var vuuPopups = require('@vuu-ui/vuu-popups');
|
|
7
7
|
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
8
|
+
var core = require('@salt-ds/core');
|
|
8
9
|
var cx = require('clsx');
|
|
9
10
|
var React = require('react');
|
|
10
11
|
var AppHeader = require('./app-header/AppHeader.js');
|
|
11
12
|
require('@vuu-ui/vuu-ui-controls');
|
|
12
13
|
require('html-to-image');
|
|
13
|
-
require('@salt-ds/core');
|
|
14
14
|
var useLayoutManager = require('./layout-management/useLayoutManager.js');
|
|
15
15
|
var useLayoutContextMenuItems = require('./layout-management/useLayoutContextMenuItems.js');
|
|
16
16
|
var defaultApplicationJson = require('./persistence-management/defaultApplicationJson.js');
|
|
17
17
|
require('./persistence-management/LocalPersistenceManager.js');
|
|
18
18
|
require('./persistence-management/RemotePersistenceManager.js');
|
|
19
19
|
var useShellLayout = require('./shell-layouts/useShellLayout.js');
|
|
20
|
+
var shell = require('./shell.css.js');
|
|
21
|
+
var WindowProvider = require('../../../node_modules/@salt-ds/window/dist-es/WindowProvider.js');
|
|
22
|
+
var useStyleInjection = require('../../../node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js');
|
|
20
23
|
|
|
21
24
|
if (typeof vuuLayout.StackLayout !== "function") {
|
|
22
25
|
console.warn(
|
|
@@ -38,6 +41,12 @@ const Shell = ({
|
|
|
38
41
|
user,
|
|
39
42
|
...htmlAttributes
|
|
40
43
|
}) => {
|
|
44
|
+
const targetWindow = WindowProvider.useWindow();
|
|
45
|
+
useStyleInjection.useComponentCssInjection({
|
|
46
|
+
testId: "vuu-shell",
|
|
47
|
+
css: shell,
|
|
48
|
+
window: targetWindow
|
|
49
|
+
});
|
|
41
50
|
const rootRef = React.useRef(null);
|
|
42
51
|
const { dialog, setDialogState } = vuuPopups.useDialog();
|
|
43
52
|
const layoutId = React.useRef("latest");
|
|
@@ -76,8 +85,7 @@ const Shell = ({
|
|
|
76
85
|
setConnectionStatus(connectionStatus2);
|
|
77
86
|
}
|
|
78
87
|
}, [serverUrl, user.token, user.username]);
|
|
79
|
-
const
|
|
80
|
-
const className = cx("vuuShell", classNameProp, themeClass, densityClass);
|
|
88
|
+
const className = cx("vuuShell");
|
|
81
89
|
const isLoading = applicationJson === defaultApplicationJson.loadingApplicationJson;
|
|
82
90
|
const shellLayout = useShellLayout.useShellLayout({
|
|
83
91
|
LeftSidePanelProps,
|
|
@@ -96,7 +104,7 @@ const Shell = ({
|
|
|
96
104
|
if (connectionStatus === "rejected") {
|
|
97
105
|
console.log("game over, no connection to server");
|
|
98
106
|
}
|
|
99
|
-
return isLoading ? null : /* @__PURE__ */ jsxRuntime.jsx(
|
|
107
|
+
return isLoading ? null : /* @__PURE__ */ jsxRuntime.jsx(core.SaltProvider, { theme: "vuu-theme", density: "high", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
100
108
|
vuuPopups.ContextMenuProvider,
|
|
101
109
|
{
|
|
102
110
|
menuActionHandler: handleMenuAction,
|
|
@@ -112,7 +120,6 @@ const Shell = ({
|
|
|
112
120
|
vuuLayout.DraggableLayout,
|
|
113
121
|
{
|
|
114
122
|
className,
|
|
115
|
-
"data-mode": dataMode,
|
|
116
123
|
ref: rootRef,
|
|
117
124
|
...htmlAttributes,
|
|
118
125
|
children: shellLayout
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sources":["../../../../src/shell.tsx"],"sourcesContent":["import { connectToServer } from \"@vuu-ui/vuu-data-remote\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n DraggableLayout,\n LayoutProvider,\n LayoutProviderProps,\n StackLayout,\n} from \"@vuu-ui/vuu-layout\";\nimport type { LayoutChangeHandler } from \"@vuu-ui/vuu-layout\";\nimport { ContextMenuProvider, useDialog } from \"@vuu-ui/vuu-popups\";\nimport { logger, ThemeMode } from \"@vuu-ui/vuu-utils\";\nimport { SaltProvider } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n ReactNode,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AppHeader } from \"./app-header\";\nimport {\n useLayoutContextMenuItems,\n useLayoutManager,\n} from \"./layout-management\";\nimport { loadingApplicationJson } from \"./persistence-management\";\nimport { SidePanelProps, useShellLayout } from \"./shell-layouts\";\nimport { SaveLocation } from \"./shellTypes\";\n\nimport shellCss from \"./shell.css\";\n\nif (typeof StackLayout !== \"function\") {\n console.warn(\n \"StackLayout module not loaded, will be unsbale to deserialize from layout JSON\"\n );\n}\n\nexport type VuuUser = {\n username: string;\n token: string;\n};\n\nconst { error } = logger(\"Shell\");\n\nconst defaultLeftSidePanel: ShellProps[\"LeftSidePanelProps\"] = {};\n\nexport type LayoutTemplateName = \"full-height\" | \"inlay\";\n\nexport interface ShellProps extends HTMLAttributes<HTMLDivElement> {\n LayoutProps?: Pick<\n LayoutProviderProps,\n \"createNewChild\" | \"pathToDropTarget\"\n >;\n LeftSidePanelProps?: SidePanelProps;\n children?: ReactNode;\n leftSidePanelLayout?: \"full-height\" | \"inlay\";\n loginUrl?: string;\n // paletteConfig: any;\n saveLocation?: SaveLocation;\n saveUrl?: string;\n serverUrl?: string;\n user: VuuUser;\n}\n\nexport const Shell = ({\n LayoutProps,\n LeftSidePanelProps = defaultLeftSidePanel,\n children,\n className: classNameProp,\n leftSidePanelLayout,\n loginUrl,\n saveLocation: _,\n saveUrl,\n serverUrl,\n user,\n ...htmlAttributes\n}: ShellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-shell\",\n css: shellCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const { dialog, setDialogState } = useDialog();\n const layoutId = useRef(\"latest\");\n const { applicationJson, saveApplicationLayout, loadLayoutById } =\n useLayoutManager();\n const { buildMenuOptions, handleMenuAction } =\n useLayoutContextMenuItems(setDialogState);\n const [connectionStatus, setConnectionStatus] = useState<\n \"connected\" | \"rejected\"\n >(\"connected\");\n\n const handleLayoutChange = useCallback<LayoutChangeHandler>(\n (layout) => {\n try {\n saveApplicationLayout(layout);\n } catch {\n error?.(\"Failed to save layout\");\n }\n },\n [saveApplicationLayout]\n );\n\n const handleSwitchTheme = useCallback((mode: ThemeMode) => {\n if (rootRef.current) {\n rootRef.current.dataset.mode = mode;\n }\n }, []);\n\n // TODO this is out of date\n const handleNavigate = useCallback(\n (id) => {\n layoutId.current = id;\n loadLayoutById(id);\n },\n [loadLayoutById]\n );\n\n useMemo(async () => {\n if (serverUrl && user.token) {\n const connectionStatus = await connectToServer({\n authToken: user.token,\n url: serverUrl,\n username: user.username,\n });\n setConnectionStatus(connectionStatus);\n }\n }, [serverUrl, user.token, user.username]);\n\n const className = cx(\"vuuShell\");\n\n const isLoading = applicationJson === loadingApplicationJson;\n\n const shellLayout = useShellLayout({\n LeftSidePanelProps,\n leftSidePanelLayout,\n appHeader: (\n <AppHeader\n layoutId={layoutId.current}\n loginUrl={loginUrl}\n user={user}\n onNavigate={handleNavigate}\n onSwitchTheme={handleSwitchTheme}\n />\n ),\n });\n\n if (connectionStatus === \"rejected\") {\n console.log(\"game over, no connection to server\");\n }\n\n return isLoading ? null : (\n <SaltProvider theme=\"vuu-theme\" density=\"high\">\n <ContextMenuProvider\n menuActionHandler={handleMenuAction}\n menuBuilder={buildMenuOptions}\n >\n <LayoutProvider\n {...LayoutProps}\n layout={applicationJson.layout}\n onLayoutChange={handleLayoutChange}\n >\n <DraggableLayout\n className={className}\n ref={rootRef}\n {...htmlAttributes}\n >\n {shellLayout}\n </DraggableLayout>\n </LayoutProvider>\n {children || dialog}\n </ContextMenuProvider>\n </SaltProvider>\n );\n};\n"],"names":["StackLayout","logger","useWindow","useComponentCssInjection","shellCss","useRef","useDialog","useLayoutManager","useLayoutContextMenuItems","useState","useCallback","useMemo","connectionStatus","connectToServer","loadingApplicationJson","useShellLayout","jsx","AppHeader","SaltProvider","jsxs","ContextMenuProvider","LayoutProvider","DraggableLayout"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiCA,IAAI,OAAOA,0BAAgB,UAAY,EAAA;AACrC,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN,gFAAA;AAAA,GACF,CAAA;AACF,CAAA;AAOA,MAAM,EAAE,KAAA,EAAU,GAAAC,eAAA,CAAO,OAAO,CAAA,CAAA;AAEhC,MAAM,uBAAyD,EAAC,CAAA;AAoBzD,MAAM,QAAQ,CAAC;AAAA,EACpB,WAAA;AAAA,EACA,kBAAqB,GAAA,oBAAA;AAAA,EACrB,QAAA;AAAA,EACA,SAAW,EAAA,aAAA;AAAA,EACX,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAc,EAAA,CAAA;AAAA,EACd,OAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG,cAAA;AACL,CAAkB,KAAA;AAChB,EAAA,MAAM,eAAeC,wBAAU,EAAA,CAAA;AAC/B,EAAyBC,0CAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,WAAA;AAAA,IACR,GAAK,EAAAC,KAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,OAAA,GAAUC,aAAuB,IAAI,CAAA,CAAA;AAC3C,EAAA,MAAM,EAAE,MAAA,EAAQ,cAAe,EAAA,GAAIC,mBAAU,EAAA,CAAA;AAC7C,EAAM,MAAA,QAAA,GAAWD,aAAO,QAAQ,CAAA,CAAA;AAChC,EAAA,MAAM,EAAE,eAAA,EAAiB,qBAAuB,EAAA,cAAA,KAC9CE,iCAAiB,EAAA,CAAA;AACnB,EAAA,MAAM,EAAE,gBAAA,EAAkB,gBAAiB,EAAA,GACzCC,oDAA0B,cAAc,CAAA,CAAA;AAC1C,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIC,eAE9C,WAAW,CAAA,CAAA;AAEb,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,MAAW,KAAA;AACV,MAAI,IAAA;AACF,QAAA,qBAAA,CAAsB,MAAM,CAAA,CAAA;AAAA,OACtB,CAAA,MAAA;AACN,QAAA,KAAA,GAAQ,uBAAuB,CAAA,CAAA;AAAA,OACjC;AAAA,KACF;AAAA,IACA,CAAC,qBAAqB,CAAA;AAAA,GACxB,CAAA;AAEA,EAAM,MAAA,iBAAA,GAAoBA,iBAAY,CAAA,CAAC,IAAoB,KAAA;AACzD,IAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,MAAQ,OAAA,CAAA,OAAA,CAAQ,QAAQ,IAAO,GAAA,IAAA,CAAA;AAAA,KACjC;AAAA,GACF,EAAG,EAAE,CAAA,CAAA;AAGL,EAAA,MAAM,cAAiB,GAAAA,iBAAA;AAAA,IACrB,CAAC,EAAO,KAAA;AACN,MAAA,QAAA,CAAS,OAAU,GAAA,EAAA,CAAA;AACnB,MAAA,cAAA,CAAe,EAAE,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,CAAC,cAAc,CAAA;AAAA,GACjB,CAAA;AAEA,EAAAC,aAAA,CAAQ,YAAY;AAClB,IAAI,IAAA,SAAA,IAAa,KAAK,KAAO,EAAA;AAC3B,MAAMC,MAAAA,iBAAAA,GAAmB,MAAMC,6BAAgB,CAAA;AAAA,QAC7C,WAAW,IAAK,CAAA,KAAA;AAAA,QAChB,GAAK,EAAA,SAAA;AAAA,QACL,UAAU,IAAK,CAAA,QAAA;AAAA,OAChB,CAAA,CAAA;AACD,MAAA,mBAAA,CAAoBD,iBAAgB,CAAA,CAAA;AAAA,KACtC;AAAA,KACC,CAAC,SAAA,EAAW,KAAK,KAAO,EAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA;AAEzC,EAAM,MAAA,SAAA,GAAY,GAAG,UAAU,CAAA,CAAA;AAE/B,EAAA,MAAM,YAAY,eAAoB,KAAAE,6CAAA,CAAA;AAEtC,EAAA,MAAM,cAAcC,6BAAe,CAAA;AAAA,IACjC,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,SACE,kBAAAC,cAAA;AAAA,MAACC,mBAAA;AAAA,MAAA;AAAA,QACC,UAAU,QAAS,CAAA,OAAA;AAAA,QACnB,QAAA;AAAA,QACA,IAAA;AAAA,QACA,UAAY,EAAA,cAAA;AAAA,QACZ,aAAe,EAAA,iBAAA;AAAA,OAAA;AAAA,KACjB;AAAA,GAEH,CAAA,CAAA;AAED,EAAA,IAAI,qBAAqB,UAAY,EAAA;AACnC,IAAA,OAAA,CAAQ,IAAI,oCAAoC,CAAA,CAAA;AAAA,GAClD;AAEA,EAAA,OAAO,YAAY,IACjB,mBAAAD,cAAA,CAACE,qBAAa,KAAM,EAAA,WAAA,EAAY,SAAQ,MACtC,EAAA,QAAA,kBAAAC,eAAA;AAAA,IAACC,6BAAA;AAAA,IAAA;AAAA,MACC,iBAAmB,EAAA,gBAAA;AAAA,MACnB,WAAa,EAAA,gBAAA;AAAA,MAEb,QAAA,EAAA;AAAA,wBAAAJ,cAAA;AAAA,UAACK,wBAAA;AAAA,UAAA;AAAA,YACE,GAAG,WAAA;AAAA,YACJ,QAAQ,eAAgB,CAAA,MAAA;AAAA,YACxB,cAAgB,EAAA,kBAAA;AAAA,YAEhB,QAAA,kBAAAL,cAAA;AAAA,cAACM,yBAAA;AAAA,cAAA;AAAA,gBACC,SAAA;AAAA,gBACA,GAAK,EAAA,OAAA;AAAA,gBACJ,GAAG,cAAA;AAAA,gBAEH,QAAA,EAAA,WAAA;AAAA,eAAA;AAAA,aACH;AAAA,WAAA;AAAA,SACF;AAAA,QACC,QAAY,IAAA,MAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAEjB,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shellTypes.js","sources":["../../../../src/shellTypes.ts"],"sourcesContent":["import type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport type { ViewProps } from \"@vuu-ui/vuu-layout\";\n\ndeclare global {\n const vuuConfig: Promise<VuuConfig>;\n}\n\nexport type SaveLocation = \"local\" | \"remote\";\n\nexport interface FeatureConfig {\n name: string;\n title: string;\n url: string;\n css?: string;\n leftNavLocation: \"vuu-features\" | \"vuu-tables\";\n featureProps?: {\n schema?: \"*\" | VuuTable;\n schemas?: VuuTable[];\n ViewProps?: Partial<ViewProps>;\n };\n}\n\nexport type Features = {\n [key: string]: FeatureConfig;\n};\nexport interface VuuConfig {\n features: Features;\n authUrl?: string;\n websocketUrl: string;\n ssl: boolean;\n}\n\nexport const isWildcardSchema = (schema?: \"*\" | VuuTable): schema is \"*\" =>\n schema === \"*\";\nexport const isTableSchema = (schema?: \"*\" | VuuTable): schema is VuuTable =>\n typeof schema === \"object\" &&\n typeof schema.module === \"string\" &&\n typeof schema.table === \"string\";\n"],"names":[],"mappings":";;AAgCa,MAAA,gBAAA,GAAmB,CAAC,MAAA,KAC/B,MAAW,KAAA,IAAA;AACN,MAAM,aAAgB,GAAA,CAAC,MAC5B,KAAA,OAAO,MAAW,KAAA,QAAA,IAClB,OAAO,MAAA,CAAO,MAAW,KAAA,QAAA,IACzB,OAAO,MAAA,CAAO,KAAU,KAAA;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeSwitch.js","sources":["../../../../../src/theme-switch/ThemeSwitch.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { ToggleButton, ToggleButtonGroup, useControlled } from \"@salt-ds/core\";\nimport { HTMLAttributes, SyntheticEvent, useCallback } from \"react\";\nimport { ThemeMode } from \"@vuu-ui/vuu-utils\";\n\nimport \"./ThemeSwitch.css\";\n\nconst classBase = \"vuuThemeSwitch\";\nexport interface ThemeSwitchProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n defaultMode?: ThemeMode;\n mode?: ThemeMode;\n onChange: (mode: ThemeMode) => void;\n}\n\nexport const ThemeSwitch = ({\n className: classNameProp,\n defaultMode: defaultModeProp,\n mode: modeProp,\n onChange,\n ...htmlAttributes\n}: ThemeSwitchProps) => {\n const [mode, setMode] = useControlled<ThemeMode>({\n controlled: modeProp,\n default: defaultModeProp ?? \"light\",\n name: \"ThemeSwitch\",\n state: \"mode\",\n });\n\n const handleChangeSecondary = useCallback(\n (evt: SyntheticEvent<HTMLButtonElement>) => {\n const { value } = evt.target as HTMLButtonElement;\n setMode(value as ThemeMode);\n onChange(value as ThemeMode);\n },\n [onChange, setMode]\n );\n const className = cx(classBase, classNameProp);\n return (\n <ToggleButtonGroup\n className={className}\n {...htmlAttributes}\n onChange={handleChangeSecondary}\n value={mode}\n >\n <ToggleButton aria-label=\"alert\" data-icon=\"light\" value=\"light\" />\n <ToggleButton aria-label=\"home\" data-icon=\"dark\" value=\"dark\" />\n </ToggleButtonGroup>\n );\n};\n"],"names":["useControlled","useCallback","jsxs","ToggleButtonGroup","jsx","ToggleButton"],"mappings":";;;;;;;AAOA,MAAM,SAAY,GAAA,gBAAA,CAAA;AAQX,MAAM,cAAc,CAAC;AAAA,EAC1B,SAAW,EAAA,aAAA;AAAA,EACX,WAAa,EAAA,eAAA;AAAA,EACb,IAAM,EAAA,QAAA;AAAA,EACN,QAAA;AAAA,EACA,GAAG,cAAA;AACL,CAAwB,KAAA;AACtB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,kBAAyB,CAAA;AAAA,IAC/C,UAAY,EAAA,QAAA;AAAA,IACZ,SAAS,eAAmB,IAAA,OAAA;AAAA,IAC5B,IAAM,EAAA,aAAA;AAAA,IACN,KAAO,EAAA,MAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,MAAM,qBAAwB,GAAAC,iBAAA;AAAA,IAC5B,CAAC,GAA2C,KAAA;AAC1C,MAAM,MAAA,EAAE,KAAM,EAAA,GAAI,GAAI,CAAA,MAAA,CAAA;AACtB,MAAA,OAAA,CAAQ,KAAkB,CAAA,CAAA;AAC1B,MAAA,QAAA,CAAS,KAAkB,CAAA,CAAA;AAAA,KAC7B;AAAA,IACA,CAAC,UAAU,OAAO,CAAA;AAAA,GACpB,CAAA;AACA,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAC7C,EACE,uBAAAC,eAAA;AAAA,IAACC,sBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACC,GAAG,cAAA;AAAA,MACJ,QAAU,EAAA,qBAAA;AAAA,MACV,KAAO,EAAA,IAAA;AAAA,MAEP,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,qBAAa,YAAW,EAAA,OAAA,EAAQ,WAAU,EAAA,OAAA,EAAQ,OAAM,OAAQ,EAAA,CAAA;AAAA,uCAChEA,iBAAa,EAAA,EAAA,YAAA,EAAW,QAAO,WAAU,EAAA,MAAA,EAAO,OAAM,MAAO,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAChE,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import 'react/jsx-runtime';
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
|
|
4
|
+
const StyleInjectionContext = createContext(true);
|
|
5
|
+
function useStyleInjection(enableStyleInjection) {
|
|
6
|
+
const enableStyleInjectionFromContext = useContext(StyleInjectionContext);
|
|
7
|
+
return enableStyleInjection != null ? enableStyleInjection : enableStyleInjectionFromContext;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { useStyleInjection };
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../../../node_modules/@salt-ds/styles/dist-es/style-injection-provider/index.js"],"sourcesContent":["import { jsx } from 'react/jsx-runtime';\nimport { createContext, useContext } from 'react';\n\nconst StyleInjectionContext = createContext(true);\nfunction useStyleInjection(enableStyleInjection) {\n const enableStyleInjectionFromContext = useContext(StyleInjectionContext);\n return enableStyleInjection != null ? enableStyleInjection : enableStyleInjectionFromContext;\n}\nfunction StyleInjectionProvider(props) {\n const { value: enableStyleInjectionProp, children } = props;\n const value = useStyleInjection(enableStyleInjectionProp);\n return /* @__PURE__ */ jsx(StyleInjectionContext.Provider, {\n value,\n children\n });\n}\n\nexport { StyleInjectionProvider, useStyleInjection };\n//# sourceMappingURL=index.js.map\n"],"names":[],"mappings":";;;AAGA,MAAM,qBAAqB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAClD,SAAS,iBAAiB,CAAC,oBAAoB,EAAE;AACjD,EAAE,MAAM,+BAA+B,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC5E,EAAE,OAAO,oBAAoB,IAAI,IAAI,GAAG,oBAAoB,GAAG,+BAA+B,CAAC;AAC/F;;;;","x_google_ignoreList":[0]}
|
package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import 'react/jsx-runtime';
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
|
|
4
|
+
const InsertionPointContext = createContext(null);
|
|
5
|
+
if (process.env.NODE_ENV !== "production") {
|
|
6
|
+
InsertionPointContext.displayName = "InsertionPointContext";
|
|
7
|
+
}
|
|
8
|
+
function useInsertionPoint() {
|
|
9
|
+
const value = useContext(InsertionPointContext);
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { useInsertionPoint };
|
|
14
|
+
//# sourceMappingURL=InsertionPointProvider.js.map
|
package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsertionPointProvider.js","sources":["../../../../../../../../node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js"],"sourcesContent":["import { jsx } from 'react/jsx-runtime';\nimport { createContext, useMemo, useContext } from 'react';\n\nconst InsertionPointContext = createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n InsertionPointContext.displayName = \"InsertionPointContext\";\n}\nfunction InsertionPointProvider(props) {\n const { insertionPoint: insertionPointProp, children } = props;\n const value = useMemo(() => insertionPointProp, [insertionPointProp]);\n return /* @__PURE__ */ jsx(InsertionPointContext.Provider, {\n value,\n children\n });\n}\nfunction useInsertionPoint() {\n const value = useContext(InsertionPointContext);\n return value;\n}\n\nexport { InsertionPointProvider, useInsertionPoint };\n//# sourceMappingURL=InsertionPointProvider.js.map\n"],"names":[],"mappings":";;;AAGA,MAAM,qBAAqB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAClD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;AAC3C,EAAE,qBAAqB,CAAC,WAAW,GAAG,uBAAuB,CAAC;AAC9D,CAAC;AASD,SAAS,iBAAiB,GAAG;AAC7B,EAAE,MAAM,KAAK,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAClD,EAAE,OAAO,KAAK,CAAC;AACf;;;;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useInsertionPoint } from './InsertionPointProvider.js';
|
|
3
|
+
import { useStyleInjection } from '../style-injection-provider/index.js';
|
|
4
|
+
|
|
5
|
+
var _a;
|
|
6
|
+
const maybeUseInsertionEffect = (_a = React["useInsertionEffect".toString()]) != null ? _a : React.useLayoutEffect;
|
|
7
|
+
const windowSheetsMap = /* @__PURE__ */ new WeakMap();
|
|
8
|
+
function useComponentCssInjection({
|
|
9
|
+
testId,
|
|
10
|
+
css,
|
|
11
|
+
window: targetWindow
|
|
12
|
+
}) {
|
|
13
|
+
const styleInjectionEnabled = useStyleInjection();
|
|
14
|
+
const insertionPoint = useInsertionPoint();
|
|
15
|
+
maybeUseInsertionEffect(() => {
|
|
16
|
+
var _a2, _b;
|
|
17
|
+
if (!targetWindow || !styleInjectionEnabled) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const sheetsMap = (_a2 = windowSheetsMap.get(targetWindow)) != null ? _a2 : /* @__PURE__ */ new Map();
|
|
21
|
+
const styleMap = (_b = sheetsMap.get(css)) != null ? _b : { styleElement: null, count: 0 };
|
|
22
|
+
if (styleMap.styleElement == null) {
|
|
23
|
+
styleMap.styleElement = targetWindow.document.createElement("style");
|
|
24
|
+
styleMap.styleElement.setAttribute("type", "text/css");
|
|
25
|
+
styleMap.styleElement.setAttribute("data-salt-style", testId || "");
|
|
26
|
+
styleMap.styleElement.textContent = css;
|
|
27
|
+
styleMap.count = 1;
|
|
28
|
+
targetWindow.document.head.insertBefore(
|
|
29
|
+
styleMap.styleElement,
|
|
30
|
+
insertionPoint || targetWindow.document.head.firstChild
|
|
31
|
+
);
|
|
32
|
+
} else {
|
|
33
|
+
styleMap.styleElement.textContent = css;
|
|
34
|
+
styleMap.count++;
|
|
35
|
+
}
|
|
36
|
+
sheetsMap.set(css, styleMap);
|
|
37
|
+
windowSheetsMap.set(targetWindow, sheetsMap);
|
|
38
|
+
return () => {
|
|
39
|
+
const sheetsMap2 = windowSheetsMap.get(targetWindow);
|
|
40
|
+
const styleMap2 = sheetsMap2 == null ? void 0 : sheetsMap2.get(css);
|
|
41
|
+
if (styleMap2 == null ? void 0 : styleMap2.styleElement) {
|
|
42
|
+
styleMap2.count--;
|
|
43
|
+
if (styleMap2.count < 1) {
|
|
44
|
+
targetWindow.document.head.removeChild(styleMap2.styleElement);
|
|
45
|
+
styleMap2.styleElement = null;
|
|
46
|
+
sheetsMap2 == null ? void 0 : sheetsMap2.delete(css);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}, [testId, css, targetWindow]);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { useComponentCssInjection };
|
|
54
|
+
//# sourceMappingURL=useStyleInjection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStyleInjection.js","sources":["../../../../../../../../node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js"],"sourcesContent":["import * as React from 'react';\nimport { useInsertionPoint } from './InsertionPointProvider.js';\nimport { useStyleInjection } from '../style-injection-provider/index.js';\n\nvar _a;\nconst maybeUseInsertionEffect = (_a = React[\"useInsertionEffect\".toString()]) != null ? _a : React.useLayoutEffect;\nconst windowSheetsMap = /* @__PURE__ */ new WeakMap();\nfunction useComponentCssInjection({\n testId,\n css,\n window: targetWindow\n}) {\n const styleInjectionEnabled = useStyleInjection();\n const insertionPoint = useInsertionPoint();\n maybeUseInsertionEffect(() => {\n var _a2, _b;\n if (!targetWindow || !styleInjectionEnabled) {\n return;\n }\n const sheetsMap = (_a2 = windowSheetsMap.get(targetWindow)) != null ? _a2 : /* @__PURE__ */ new Map();\n const styleMap = (_b = sheetsMap.get(css)) != null ? _b : { styleElement: null, count: 0 };\n if (styleMap.styleElement == null) {\n styleMap.styleElement = targetWindow.document.createElement(\"style\");\n styleMap.styleElement.setAttribute(\"type\", \"text/css\");\n styleMap.styleElement.setAttribute(\"data-salt-style\", testId || \"\");\n styleMap.styleElement.textContent = css;\n styleMap.count = 1;\n targetWindow.document.head.insertBefore(\n styleMap.styleElement,\n insertionPoint || targetWindow.document.head.firstChild\n );\n } else {\n styleMap.styleElement.textContent = css;\n styleMap.count++;\n }\n sheetsMap.set(css, styleMap);\n windowSheetsMap.set(targetWindow, sheetsMap);\n return () => {\n const sheetsMap2 = windowSheetsMap.get(targetWindow);\n const styleMap2 = sheetsMap2 == null ? void 0 : sheetsMap2.get(css);\n if (styleMap2 == null ? void 0 : styleMap2.styleElement) {\n styleMap2.count--;\n if (styleMap2.count < 1) {\n targetWindow.document.head.removeChild(styleMap2.styleElement);\n styleMap2.styleElement = null;\n sheetsMap2 == null ? void 0 : sheetsMap2.delete(css);\n }\n }\n };\n }, [testId, css, targetWindow]);\n}\n\nexport { useComponentCssInjection };\n//# sourceMappingURL=useStyleInjection.js.map\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import 'react/jsx-runtime';
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
|
|
4
|
+
const WindowContext = createContext(
|
|
5
|
+
typeof window !== "undefined" ? window : null
|
|
6
|
+
);
|
|
7
|
+
if (process.env.NODE_ENV !== "production") {
|
|
8
|
+
WindowContext.displayName = "WindowContext";
|
|
9
|
+
}
|
|
10
|
+
function useWindow() {
|
|
11
|
+
return useContext(WindowContext);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { useWindow };
|
|
15
|
+
//# sourceMappingURL=WindowProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindowProvider.js","sources":["../../../../../../../node_modules/@salt-ds/window/dist-es/WindowProvider.js"],"sourcesContent":["import { jsx } from 'react/jsx-runtime';\nimport { createContext, useContext } from 'react';\n\nconst WindowContext = createContext(\n typeof window !== \"undefined\" ? window : null\n);\nif (process.env.NODE_ENV !== \"production\") {\n WindowContext.displayName = \"WindowContext\";\n}\nfunction WindowProvider(props) {\n const { window: targetWindow, children } = props;\n return /* @__PURE__ */ jsx(WindowContext.Provider, {\n value: targetWindow,\n children\n });\n}\nfunction useWindow() {\n return useContext(WindowContext);\n}\n\nexport { WindowProvider, useWindow };\n//# sourceMappingURL=WindowProvider.js.map\n"],"names":[],"mappings":";;;AAGA,MAAM,aAAa,GAAG,aAAa;AACnC,EAAE,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,IAAI;AAC/C,CAAC,CAAC;AACF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;AAC3C,EAAE,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;AAC9C,CAAC;AAQD,SAAS,SAAS,GAAG;AACrB,EAAE,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC;;;;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellContextProvider.js","sources":["../../../../src/ShellContextProvider.tsx"],"sourcesContent":["import {\n DefaultColumnConfiguration,\n ListOption,\n} from \"@vuu-ui/vuu-table-types\";\nimport type { RpcResponseHandler } from \"@vuu-ui/vuu-data-types\";\nimport { createContext, ReactElement, ReactNode, useContext } from \"react\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n\nexport type LookupTableProvider = (table: VuuTable) => ListOption[];\n\nexport interface ShellContextProps {\n getDefaultColumnConfig?: DefaultColumnConfiguration;\n getLookupValues?: LookupTableProvider;\n handleRpcResponse?: RpcResponseHandler;\n}\n\nconst defaultConfig = {};\n\nconst ShellContext = createContext<ShellContextProps>(defaultConfig);\n\nexport interface ShellProviderProps {\n children: ReactNode;\n value?: ShellContextProps;\n}\n\nconst Provider = ({\n children,\n context,\n inheritedContext,\n}: {\n children: ReactNode;\n context?: ShellContextProps;\n inheritedContext?: ShellContextProps;\n}) => {\n // TODO functions provided at multiple levels must be merged\n const mergedContext = {\n ...inheritedContext,\n ...context,\n };\n return (\n <ShellContext.Provider value={mergedContext}>\n {children}\n </ShellContext.Provider>\n );\n};\n\nexport const ShellContextProvider = ({\n children,\n value,\n}: ShellProviderProps): ReactElement => {\n return (\n <ShellContext.Consumer>\n {(context) => (\n <Provider context={value} inheritedContext={context}>\n {children}\n </Provider>\n )}\n </ShellContext.Consumer>\n );\n};\n\nexport const useShellContext = () => {\n return useContext(ShellContext);\n};\n"],"names":[],"mappings":";;;AAgBA,MAAM,gBAAgB,EAAC,CAAA;AAEvB,MAAM,YAAA,GAAe,cAAiC,aAAa,CAAA,CAAA;AAOnE,MAAM,WAAW,CAAC;AAAA,EAChB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AACF,CAIM,KAAA;AAEJ,EAAA,MAAM,aAAgB,GAAA;AAAA,IACpB,GAAG,gBAAA;AAAA,IACH,GAAG,OAAA;AAAA,GACL,CAAA;AACA,EAAA,2BACG,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,eAC3B,QACH,EAAA,CAAA,CAAA;AAEJ,CAAA,CAAA;AAEO,MAAM,uBAAuB,CAAC;AAAA,EACnC,QAAA;AAAA,EACA,KAAA;AACF,CAAwC,KAAA;AACtC,EAAA,uBACG,GAAA,CAAA,YAAA,CAAa,QAAb,EAAA,EACE,QAAC,EAAA,CAAA,OAAA,qBACC,GAAA,CAAA,QAAA,EAAA,EAAS,OAAS,EAAA,KAAA,EAAO,gBAAkB,EAAA,OAAA,EACzC,UACH,CAEJ,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEO,MAAM,kBAAkB,MAAM;AACnC,EAAA,OAAO,WAAW,YAAY,CAAA,CAAA;AAChC;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var appHeaderCss = ".vuuAppHeader {\n --saltButton-borderRadius: 6px;\n --saltButton-text-color: var(--vuu-color-gray-50);\n --saltButton-padding: 12px;\n --vuuToolbarItem-height: 26px;\n --vuuOverflowContainer-gap: 8px;\n --vuu-icon-color: var(--vuu-color-gray-45);\n --vuu-icon-size: 16px;\n --vuuToolbar-background: var(--vuuAppHeader-background, var(--vuu-color-gray-28));\n --vuuToolbar-borderWidth: 1px;\n --vuuToolbar-borderStyle: solid; \n --vuuToolbar-borderColor: var(--vuu-color-gray-30);\n\n align-items: center;\n display: flex;\n justify-content: flex-end;\n}\n\n.vuu-theme .vuuAppHeader {\n border-radius: 8px;\n \n margin-bottom: 8px;\n}\n\n";
|
|
2
|
+
|
|
3
|
+
export { appHeaderCss as default };
|
|
4
|
+
//# sourceMappingURL=AppHeader.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppHeader.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useCallback } from 'react';
|
|
3
2
|
import { Toolbar } from '@vuu-ui/vuu-ui-controls';
|
|
4
|
-
import cx from 'clsx';
|
|
5
3
|
import { Button } from '@salt-ds/core';
|
|
4
|
+
import cx from 'clsx';
|
|
5
|
+
import { useCallback } from 'react';
|
|
6
6
|
import { logout } from '../login/login-utils.js';
|
|
7
|
+
import appHeaderCss from './AppHeader.css.js';
|
|
8
|
+
import { useWindow } from '../../../../node_modules/@salt-ds/window/dist-es/WindowProvider.js';
|
|
9
|
+
import { useComponentCssInjection } from '../../../../node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js';
|
|
7
10
|
|
|
8
11
|
const classBase = "vuuAppHeader";
|
|
9
12
|
const AppHeader = ({
|
|
@@ -16,6 +19,12 @@ const AppHeader = ({
|
|
|
16
19
|
user,
|
|
17
20
|
...htmlAttributes
|
|
18
21
|
}) => {
|
|
22
|
+
const targetWindow = useWindow();
|
|
23
|
+
useComponentCssInjection({
|
|
24
|
+
testId: "vuu-app-header",
|
|
25
|
+
css: appHeaderCss,
|
|
26
|
+
window: targetWindow
|
|
27
|
+
});
|
|
19
28
|
const className = cx(classBase, classNameProp);
|
|
20
29
|
const handleLogout = useCallback(() => {
|
|
21
30
|
logout(loginUrl);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppHeader.js","sources":["../../../../../src/app-header/AppHeader.tsx"],"sourcesContent":["import { 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\";\nimport { VuuUser } from \"../shell\";\n\nimport appHeaderCss from \"./AppHeader.css\";\n\nconst classBase = \"vuuAppHeader\";\nexport interface AppHeaderProps extends HTMLAttributes<HTMLDivElement> {\n layoutId: string;\n loginUrl?: string;\n onNavigate: (id: string) => void;\n onSwitchTheme?: (mode: ThemeMode) => void;\n themeMode?: ThemeMode;\n user: VuuUser;\n}\n\nexport const AppHeader = ({\n className: classNameProp,\n layoutId,\n loginUrl,\n onNavigate,\n onSwitchTheme,\n themeMode: _,\n user,\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 // const handleSwitchTheme = useCallback(\n // (mode: ThemeMode) => onSwitchTheme?.(mode),\n // [onSwitchTheme]\n // );\n\n const handleLogout = useCallback(() => {\n logout(loginUrl);\n }, [loginUrl]);\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 className={`${classBase}-menuItem`} variant=\"secondary\">\n View <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 {/* <ThemeSwitch\n data-align=\"right\"\n defaultMode={themeMode}\n onChange={handleSwitchTheme}\n /> */}\n {/* <UserProfile\n layoutId={layoutId}\n loginUrl={loginUrl}\n onNavigate={onNavigate}\n user={user}\n /> */}\n </Toolbar>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAYA,MAAM,SAAY,GAAA,cAAA,CAAA;AAUX,MAAM,YAAY,CAAC;AAAA,EACxB,SAAW,EAAA,aAAA;AAAA,EACX,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAW,EAAA,CAAA;AAAA,EACX,IAAA;AAAA,EACA,GAAG,cAAA;AACL,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAM7C,EAAM,MAAA,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,MAAA,CAAO,QAAQ,CAAA,CAAA;AAAA,GACjB,EAAG,CAAC,QAAQ,CAAC,CAAA,CAAA;AAEb,EACE,uBAAA,IAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,UAAW,EAAA,KAAA;AAAA,MACX,SAAA;AAAA,MACA,cAAc,EAAA,IAAA;AAAA,MACb,GAAG,cAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAO,SAAW,EAAA,CAAA,EAAG,SAAS,CAAa,SAAA,CAAA,EAAA,OAAA,EAAQ,aAAY,QAEhE,EAAA,MAAA,EAAA,CAAA;AAAA,6BACC,MAAO,EAAA,EAAA,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA,EAAa,SAAQ,WAAY,EAAA,QAAA,EAAA;AAAA,UAAA,UAAA;AAAA,0BACtD,GAAA,CAAC,MAAK,EAAA,EAAA,WAAA,EAAU,SAAU,EAAA,CAAA;AAAA,SACpC,EAAA,CAAA;AAAA,6BACC,MAAO,EAAA,EAAA,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA,EAAa,SAAQ,WAAY,EAAA,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,0BACzD,GAAA,CAAC,MAAK,EAAA,EAAA,WAAA,EAAU,UAAW,EAAA,CAAA;AAAA,SAClC,EAAA,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;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,GAYF,CAAA;AAEJ;;;;"}
|
package/esm/{connection-status → packages/vuu-shell/src/connection-status}/ConnectionStatusIcon.js
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
2
|
+
import React__default, { useState, useEffect } from 'react';
|
|
3
3
|
import cx from 'clsx';
|
|
4
4
|
|
|
5
5
|
const ConnectionStatusIcon = ({
|
|
@@ -23,7 +23,7 @@ const ConnectionStatusIcon = ({
|
|
|
23
23
|
break;
|
|
24
24
|
}
|
|
25
25
|
}, [connectionStatus]);
|
|
26
|
-
const statusIcon =
|
|
26
|
+
const statusIcon = React__default.createElement(element, {
|
|
27
27
|
...props,
|
|
28
28
|
className: cx("vuuStatus vuuIcon", classBase, className)
|
|
29
29
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionStatusIcon.js","sources":["../../../../../src/connection-status/ConnectionStatusIcon.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport cx from \"clsx\";\n\nimport \"./ConnectionStatusIcon.css\";\n\ntype connectionStatus =\n | \"connected\"\n | \"reconnected\"\n | \"connecting\"\n | \"disconnected\";\n\ninterface ConnectionStatusProps {\n connectionStatus: connectionStatus;\n className?: string;\n props?: unknown;\n element?: string;\n}\n\nexport const ConnectionStatusIcon = ({\n connectionStatus,\n className,\n element = \"span\",\n ...props\n}: ConnectionStatusProps) => {\n const [classBase, setClassBase] = useState<string>(\"vuuConnectingStatus\");\n useEffect(() => {\n switch (connectionStatus) {\n case \"connected\":\n case \"reconnected\":\n setClassBase(\"vuuActiveStatus\");\n break;\n case \"connecting\":\n setClassBase(\"vuuConnectingStatus\");\n break;\n case \"disconnected\":\n setClassBase(\"vuuDisconnectedStatus\");\n break;\n default:\n break;\n }\n }, [connectionStatus]);\n\n const statusIcon = React.createElement(element, {\n ...props,\n className: cx(\"vuuStatus vuuIcon\", classBase, className),\n });\n\n return (\n <>\n <div className=\"vuuStatus-container salt-theme\">\n {statusIcon}\n <div className=\"vuuStatus-text\">\n Status: {connectionStatus.toUpperCase()}\n </div>\n </div>\n </>\n );\n};\n"],"names":["React"],"mappings":";;;;AAkBO,MAAM,uBAAuB,CAAC;AAAA,EACnC,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAU,GAAA,MAAA;AAAA,EACV,GAAG,KAAA;AACL,CAA6B,KAAA;AAC3B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAiB,qBAAqB,CAAA,CAAA;AACxE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAQ,gBAAkB;AAAA,MACxB,KAAK,WAAA,CAAA;AAAA,MACL,KAAK,aAAA;AACH,QAAA,YAAA,CAAa,iBAAiB,CAAA,CAAA;AAC9B,QAAA,MAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,YAAA,CAAa,qBAAqB,CAAA,CAAA;AAClC,QAAA,MAAA;AAAA,MACF,KAAK,cAAA;AACH,QAAA,YAAA,CAAa,uBAAuB,CAAA,CAAA;AACpC,QAAA,MAAA;AAEA,KACJ;AAAA,GACF,EAAG,CAAC,gBAAgB,CAAC,CAAA,CAAA;AAErB,EAAM,MAAA,UAAA,GAAaA,cAAM,CAAA,aAAA,CAAc,OAAS,EAAA;AAAA,IAC9C,GAAG,KAAA;AAAA,IACH,SAAW,EAAA,EAAA,CAAG,mBAAqB,EAAA,SAAA,EAAW,SAAS,CAAA;AAAA,GACxD,CAAA,CAAA;AAED,EAAA,uBAEI,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,kBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,gCACZ,EAAA,QAAA,EAAA;AAAA,IAAA,UAAA;AAAA,oBACD,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,gBAAiB,EAAA,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MACrB,iBAAiB,WAAY,EAAA;AAAA,KACxC,EAAA,CAAA;AAAA,GAAA,EACF,CACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import React, { Suspense, useEffect } from 'react';
|
|
3
2
|
import { registerComponent } from '@vuu-ui/vuu-layout';
|
|
3
|
+
import { importCSS } from '@vuu-ui/vuu-utils';
|
|
4
|
+
import React__default, { Suspense, useEffect } from 'react';
|
|
4
5
|
import { FeatureErrorBoundary } from './FeatureErrorBoundary.js';
|
|
5
6
|
import { Loader } from './Loader.js';
|
|
6
|
-
import { importCSS } from './css-module-loader.js';
|
|
7
7
|
|
|
8
8
|
const componentsMap = /* @__PURE__ */ new Map();
|
|
9
9
|
const useCachedFeature = (url) => {
|
|
@@ -16,7 +16,7 @@ const useCachedFeature = (url) => {
|
|
|
16
16
|
if (!componentsMap.has(url)) {
|
|
17
17
|
componentsMap.set(
|
|
18
18
|
url,
|
|
19
|
-
|
|
19
|
+
React__default.lazy(() => import(
|
|
20
20
|
/* @vite-ignore */
|
|
21
21
|
url
|
|
22
22
|
))
|
|
@@ -46,7 +46,7 @@ function RawFeature({
|
|
|
46
46
|
const LazyFeature = useCachedFeature(url);
|
|
47
47
|
return /* @__PURE__ */ jsx(FeatureErrorBoundary, { url, children: /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Loader, {}), children: /* @__PURE__ */ jsx(LazyFeature, { ...props, ...params }) }) });
|
|
48
48
|
}
|
|
49
|
-
const Feature =
|
|
49
|
+
const Feature = React__default.memo(RawFeature);
|
|
50
50
|
Feature.displayName = "Feature";
|
|
51
51
|
registerComponent("Feature", Feature, "view");
|
|
52
52
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Feature.js","sources":["../../../../../src/feature/Feature.tsx"],"sourcesContent":["import { registerComponent, ViewProps } from \"@vuu-ui/vuu-layout\";\nimport { importCSS } from \"@vuu-ui/vuu-utils\";\nimport React, { Suspense, useEffect } from \"react\";\nimport { FeatureErrorBoundary } from \"./FeatureErrorBoundary\";\nimport { Loader } from \"./Loader\";\n\n/**\n * Ensure we never lazy load the same component more than once\n */\nconst componentsMap = new Map<string, ReturnType<typeof React.lazy>>();\nconst useCachedFeature = (url: string) => {\n useEffect(\n () => () => {\n componentsMap.delete(url);\n },\n [url]\n );\n\n if (!componentsMap.has(url)) {\n componentsMap.set(\n url,\n React.lazy(() => import(/* @vite-ignore */ url))\n );\n }\n\n const lazyFeature = componentsMap.get(url);\n\n if (!lazyFeature) {\n throw Error(`Unable to load Lazy Feature at url ${url}`);\n } else {\n return lazyFeature;\n }\n};\n\nexport interface FeatureProps<P extends object | undefined = any> {\n /**\n props that will be passed to the lazily loaded component.\n */\n ComponentProps?: P;\n ViewProps?: Partial<Pick<ViewProps, \"closeable\" | \"header\">>;\n css?: string;\n height?: number;\n title?: string;\n /** \n The url of javascript bundle to lazily load. Bundle must provide a default export\n and that export must be a React component.\n */\n url: string;\n width?: number;\n}\n\nfunction RawFeature<Params extends object | undefined>({\n url,\n css,\n ComponentProps: params,\n ...props\n}: FeatureProps<Params>) {\n // useEffect(() => {\n // console.log(\"%cFeature mount\", \"color: green;\");\n // return () => {\n // console.log(\"%cFeature unmount\", \"color:red;\");\n // };\n // }, []);\n\n if (css) {\n // import(/* @vite-ignore */ css, { assert: { type: \"css\" } }).then(\n // (cssModule) => {\n // console.log(\"%cInject Styles\", \"color: blue;font-weight: bold\");\n // document.adoptedStyleSheets = [\n // ...document.adoptedStyleSheets,\n // cssModule.default,\n // ];\n // }\n // );\n // Polyfill until cypress build supports import assertions\n // Note: already fully supported in esbuild and vite\n importCSS(css).then((styleSheet) => {\n document.adoptedStyleSheets = [\n ...document.adoptedStyleSheets,\n styleSheet,\n ];\n });\n }\n\n const LazyFeature = useCachedFeature(url);\n return (\n <FeatureErrorBoundary url={url}>\n <Suspense fallback={<Loader />}>\n <LazyFeature {...props} {...params} />\n </Suspense>\n </FeatureErrorBoundary>\n );\n}\n\n/**\n Feature is a wrapper around React Lazy Loading. It will load a component\n from the given url. That url must resolve to a javascript bundle with a\n single default export. That export must be a React component.\n */\nexport const Feature = React.memo(RawFeature);\nFeature.displayName = \"Feature\";\nregisterComponent(\"Feature\", Feature, \"view\");\n"],"names":["React"],"mappings":";;;;;;;AASA,MAAM,aAAA,uBAAoB,GAA2C,EAAA,CAAA;AACrE,MAAM,gBAAA,GAAmB,CAAC,GAAgB,KAAA;AACxC,EAAA,SAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAA,aAAA,CAAc,OAAO,GAAG,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,GAAG,CAAA;AAAA,GACN,CAAA;AAEA,EAAA,IAAI,CAAC,aAAA,CAAc,GAAI,CAAA,GAAG,CAAG,EAAA;AAC3B,IAAc,aAAA,CAAA,GAAA;AAAA,MACZ,GAAA;AAAA,MACAA,cAAA,CAAM,KAAK,MAAM;AAAA;AAAA,QAA0B,GAAA;AAAA,OAAI,CAAA;AAAA,KACjD,CAAA;AAAA,GACF;AAEA,EAAM,MAAA,WAAA,GAAc,aAAc,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AAEzC,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAM,MAAA,KAAA,CAAM,CAAsC,mCAAA,EAAA,GAAG,CAAE,CAAA,CAAA,CAAA;AAAA,GAClD,MAAA;AACL,IAAO,OAAA,WAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAmBA,SAAS,UAA8C,CAAA;AAAA,EACrD,GAAA;AAAA,EACA,GAAA;AAAA,EACA,cAAgB,EAAA,MAAA;AAAA,EAChB,GAAG,KAAA;AACL,CAAyB,EAAA;AAQvB,EAAA,IAAI,GAAK,EAAA;AAYP,IAAA,SAAA,CAAU,GAAG,CAAA,CAAE,IAAK,CAAA,CAAC,UAAe,KAAA;AAClC,MAAA,QAAA,CAAS,kBAAqB,GAAA;AAAA,QAC5B,GAAG,QAAS,CAAA,kBAAA;AAAA,QACZ,UAAA;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAM,MAAA,WAAA,GAAc,iBAAiB,GAAG,CAAA,CAAA;AACxC,EAAA,2BACG,oBAAqB,EAAA,EAAA,GAAA,EACpB,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,0BAAW,GAAA,CAAA,MAAA,EAAA,EAAO,CAC1B,EAAA,QAAA,kBAAA,GAAA,CAAC,eAAa,GAAG,KAAA,EAAQ,GAAG,MAAA,EAAQ,GACtC,CACF,EAAA,CAAA,CAAA;AAEJ,CAAA;AAOa,MAAA,OAAA,GAAUA,cAAM,CAAA,IAAA,CAAK,UAAU,EAAA;AAC5C,OAAA,CAAQ,WAAc,GAAA,SAAA,CAAA;AACtB,iBAAkB,CAAA,SAAA,EAAW,SAAS,MAAM,CAAA;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
2
|
+
import React__default from 'react';
|
|
3
3
|
|
|
4
|
-
class FeatureErrorBoundary extends
|
|
4
|
+
class FeatureErrorBoundary extends React__default.Component {
|
|
5
5
|
constructor(props) {
|
|
6
6
|
super(props);
|
|
7
7
|
this.state = { errorMessage: null };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureErrorBoundary.js","sources":["../../../../../src/feature/FeatureErrorBoundary.tsx"],"sourcesContent":["import React, { ErrorInfo, ReactNode } from \"react\";\nimport { FeatureProps } from \"./Feature\";\n\nexport interface FeatureErrorBoundaryProps extends FeatureProps {\n children: ReactNode;\n}\n\nexport class FeatureErrorBoundary extends React.Component<\n FeatureErrorBoundaryProps,\n any\n> {\n constructor(props: FeatureErrorBoundaryProps) {\n super(props);\n this.state = { errorMessage: null };\n }\n\n static getDerivedStateFromError(error: Error) {\n // Update state so the next render will show the fallback UI.\n return { errorMessage: error.message };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n // You can also log the error to an error reporting service\n console.log(`error creating component at ${this.props.url}`);\n console.log(error, errorInfo);\n }\n\n render() {\n if (this.state.errorMessage) {\n return (\n <>\n <h1>An error occured while creating component.</h1>\n <p>{this.state.errorMessage}</p>\n </>\n );\n }\n\n return this.props.children;\n }\n}\n"],"names":["React"],"mappings":";;;AAOa,MAAA,oBAAA,SAA6BA,eAAM,SAG9C,CAAA;AAAA,EACA,YAAY,KAAkC,EAAA;AAC5C,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACX,IAAK,IAAA,CAAA,KAAA,GAAQ,EAAE,YAAA,EAAc,IAAK,EAAA,CAAA;AAAA,GACpC;AAAA,EAEA,OAAO,yBAAyB,KAAc,EAAA;AAE5C,IAAO,OAAA,EAAE,YAAc,EAAA,KAAA,CAAM,OAAQ,EAAA,CAAA;AAAA,GACvC;AAAA,EAEA,iBAAA,CAAkB,OAAc,SAAsB,EAAA;AAEpD,IAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,4BAAA,EAA+B,IAAK,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAA,CAAA;AAC3D,IAAQ,OAAA,CAAA,GAAA,CAAI,OAAO,SAAS,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEA,MAAS,GAAA;AACP,IAAI,IAAA,IAAA,CAAK,MAAM,YAAc,EAAA;AAC3B,MAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAG,QAA0C,EAAA,4CAAA,EAAA,CAAA;AAAA,wBAC7C,GAAA,CAAA,GAAA,EAAA,EAAG,QAAK,EAAA,IAAA,CAAA,KAAA,CAAM,YAAa,EAAA,CAAA;AAAA,OAC9B,EAAA,CAAA,CAAA;AAAA,KAEJ;AAEA,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,GACpB;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Loader.js","sources":["../../../../../src/feature/Loader.tsx"],"sourcesContent":["// TODO\nexport const Loader = () => <div className=\"hwLoader\"></div>;\n"],"names":[],"mappings":";;AACO,MAAM,MAAS,GAAA,sBAAO,GAAA,CAAA,KAAA,EAAA,EAAI,WAAU,UAAW,EAAA;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var featureListCss = ".vuuFeatureList {\n background: var(--vuuFeatureList-background, var(--salt-container-primary-background));\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 195px 32px 16px 24px;\n}\n\n.vuuFeatureList-header {\n flex: 0 0 40px;\n font-size: 12px;\n font-weight: 700;\n line-height: 2;\n}\n\n.vuuFeatureList-content {\n flex: 1 1 auto;\n font-size: 12px;\n font-weight: 700;\n}\n\n";
|
|
2
|
+
|
|
3
|
+
export { featureListCss as default };
|
|
4
|
+
//# sourceMappingURL=FeatureList.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureList.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Palette, PaletteItem } from '@vuu-ui/vuu-layout';
|
|
3
3
|
import { Feature } from '../feature/Feature.js';
|
|
4
|
+
import featureListCss from './FeatureList.css.js';
|
|
5
|
+
import { useWindow } from '../../../../node_modules/@salt-ds/window/dist-es/WindowProvider.js';
|
|
6
|
+
import { useComponentCssInjection } from '../../../../node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js';
|
|
4
7
|
|
|
5
8
|
const classBase = "vuuFeatureList";
|
|
6
9
|
const FeatureList = ({
|
|
@@ -8,6 +11,12 @@ const FeatureList = ({
|
|
|
8
11
|
title = "VUU TABLES",
|
|
9
12
|
...htmlAttributes
|
|
10
13
|
}) => {
|
|
14
|
+
const targetWindow = useWindow();
|
|
15
|
+
useComponentCssInjection({
|
|
16
|
+
testId: "vuu-feature-list",
|
|
17
|
+
css: featureListCss,
|
|
18
|
+
window: targetWindow
|
|
19
|
+
});
|
|
11
20
|
const ViewProps = {};
|
|
12
21
|
const listProps = {
|
|
13
22
|
height: "100%"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureList.js","sources":["../../../../../src/feature-list/FeatureList.tsx"],"sourcesContent":["import { Palette, PaletteItem } from \"@vuu-ui/vuu-layout\";\nimport { ListProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { HTMLAttributes } from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { Feature, FeatureProps } from \"../feature/Feature\";\n\nimport featureListCss from \"./FeatureList.css\";\n\nconst classBase = \"vuuFeatureList\";\n\nexport interface FeatureListProps extends HTMLAttributes<HTMLDivElement> {\n features: FeatureProps[];\n}\n\nexport const FeatureList = ({\n features,\n title = \"VUU TABLES\",\n ...htmlAttributes\n}: FeatureListProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-feature-list\",\n css: featureListCss,\n window: targetWindow,\n });\n\n const ViewProps = {};\n\n const listProps: Partial<ListProps> = {\n height: \"100%\",\n };\n\n return (\n <div {...htmlAttributes} className={classBase}>\n <div className={`${classBase}-header`}>{title}</div>\n <div className={`${classBase}-content`}>\n <Palette\n orientation=\"vertical\"\n ListProps={listProps}\n ViewProps={ViewProps}\n >\n {features.map((featureProps, i) => (\n <PaletteItem\n closeable\n key={i}\n label={featureProps.title}\n resizeable\n resize=\"defer\"\n header\n >\n <Feature {...featureProps} />\n </PaletteItem>\n ))}\n </Palette>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAUA,MAAM,SAAY,GAAA,gBAAA,CAAA;AAMX,MAAM,cAAc,CAAC;AAAA,EAC1B,QAAA;AAAA,EACA,KAAQ,GAAA,YAAA;AAAA,EACR,GAAG,cAAA;AACL,CAAwB,KAAA;AACtB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,kBAAA;AAAA,IACR,GAAK,EAAA,cAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,YAAY,EAAC,CAAA;AAEnB,EAAA,MAAM,SAAgC,GAAA;AAAA,IACpC,MAAQ,EAAA,MAAA;AAAA,GACV,CAAA;AAEA,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAK,GAAG,cAAA,EAAgB,WAAW,SAClC,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,WAAY,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,oBAC7C,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,QAAA,CAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,WAAY,EAAA,UAAA;AAAA,QACZ,SAAW,EAAA,SAAA;AAAA,QACX,SAAA;AAAA,QAEC,QAAS,EAAA,QAAA,CAAA,GAAA,CAAI,CAAC,YAAA,EAAc,CAC3B,qBAAA,GAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,SAAS,EAAA,IAAA;AAAA,YAET,OAAO,YAAa,CAAA,KAAA;AAAA,YACpB,UAAU,EAAA,IAAA;AAAA,YACV,MAAO,EAAA,OAAA;AAAA,YACP,MAAM,EAAA,IAAA;AAAA,YAEN,QAAA,kBAAA,GAAA,CAAC,OAAS,EAAA,EAAA,GAAG,YAAc,EAAA,CAAA;AAAA,WAAA;AAAA,UANtB,CAAA;AAAA,SAQR,CAAA;AAAA,OAAA;AAAA,KAEL,EAAA,CAAA;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayoutList.js","sources":["../../../../../src/layout-management/LayoutList.tsx"],"sourcesContent":["import { HTMLAttributes } from \"react\";\nimport { List } from \"@vuu-ui/vuu-ui-controls\";\nimport { LayoutMetadata } from \"./layoutTypes\";\nimport { useLayoutManager } from \"./useLayoutManager\";\nimport { LayoutTile } from \"./LayoutTile\";\n\nimport \"./LayoutList.css\";\n\ntype LayoutGroups = {\n [groupName: string]: LayoutMetadata[];\n};\n\nconst classBase = \"vuuLayoutList\";\n\nexport const LayoutList = (props: HTMLAttributes<HTMLDivElement>) => {\n const { layoutMetadata, loadLayoutById } = useLayoutManager();\n\n const handleLoadLayout = (layoutId?: string) => {\n if (layoutId) {\n loadLayoutById(layoutId);\n }\n };\n\n const layoutsByGroup = layoutMetadata.reduce((acc: LayoutGroups, cur) => {\n if (acc[cur.group]) {\n return {\n ...acc,\n [cur.group]: [...acc[cur.group], cur],\n };\n }\n return {\n ...acc,\n [cur.group]: [cur],\n };\n }, {});\n\n return (\n <div\n className={classBase}\n {...props}\n role=\"listbox\"\n aria-label=\"my layouts\"\n >\n <div className={`${classBase}-header`}>My Layouts</div>\n <List<[string, LayoutMetadata[]]>\n height=\"auto\"\n source={Object.entries(layoutsByGroup)}\n ListItem={({ item }) => {\n if (!item) return <></>;\n const [groupName, layoutMetadata] = item;\n return (\n <div role=\"list\" aria-label={groupName}>\n <div className={`${classBase}-groupName`}>{groupName}</div>\n {layoutMetadata.map((metadata) => (\n <LayoutTile\n key={metadata.id}\n metadata={metadata}\n handleLoadLayout={handleLoadLayout}\n />\n ))}\n </div>\n );\n }}\n />\n </div>\n );\n};\n"],"names":["layoutMetadata"],"mappings":";;;;;AAYA,MAAM,SAAY,GAAA,eAAA,CAAA;AAEL,MAAA,UAAA,GAAa,CAAC,KAA0C,KAAA;AACnE,EAAA,MAAM,EAAE,cAAA,EAAgB,cAAe,EAAA,GAAI,gBAAiB,EAAA,CAAA;AAE5D,EAAM,MAAA,gBAAA,GAAmB,CAAC,QAAsB,KAAA;AAC9C,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,cAAA,CAAe,QAAQ,CAAA,CAAA;AAAA,KACzB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAA,cAAA,CAAe,MAAO,CAAA,CAAC,KAAmB,GAAQ,KAAA;AACvE,IAAI,IAAA,GAAA,CAAI,GAAI,CAAA,KAAK,CAAG,EAAA;AAClB,MAAO,OAAA;AAAA,QACL,GAAG,GAAA;AAAA,QACH,CAAC,GAAI,CAAA,KAAK,GAAG,CAAC,GAAG,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,EAAG,GAAG,CAAA;AAAA,OACtC,CAAA;AAAA,KACF;AACA,IAAO,OAAA;AAAA,MACL,GAAG,GAAA;AAAA,MACH,CAAC,GAAA,CAAI,KAAK,GAAG,CAAC,GAAG,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,EAAG,EAAE,CAAA,CAAA;AAEL,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,SAAA;AAAA,MACV,GAAG,KAAA;AAAA,MACJ,IAAK,EAAA,SAAA;AAAA,MACL,YAAW,EAAA,YAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,WAAW,QAAU,EAAA,YAAA,EAAA,CAAA;AAAA,wBACjD,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,MAAO,EAAA,MAAA;AAAA,YACP,MAAA,EAAQ,MAAO,CAAA,OAAA,CAAQ,cAAc,CAAA;AAAA,YACrC,QAAU,EAAA,CAAC,EAAE,IAAA,EAAW,KAAA;AACtB,cAAA,IAAI,CAAC,IAAA;AAAM,gBAAA,uBAAS,GAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA;AACpB,cAAM,MAAA,CAAC,SAAWA,EAAAA,eAAc,CAAI,GAAA,IAAA,CAAA;AACpC,cAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,IAAK,EAAA,MAAA,EAAO,cAAY,SAC3B,EAAA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,cAAe,QAAU,EAAA,SAAA,EAAA,CAAA;AAAA,gBACpDA,eAAAA,CAAe,GAAI,CAAA,CAAC,QACnB,qBAAA,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBAEC,QAAA;AAAA,oBACA,gBAAA;AAAA,mBAAA;AAAA,kBAFK,QAAS,CAAA,EAAA;AAAA,iBAIjB,CAAA;AAAA,eACH,EAAA,CAAA,CAAA;AAAA,aAEJ;AAAA,WAAA;AAAA,SACF;AAAA,OAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayoutTile.js","sources":["../../../../../src/layout-management/LayoutTile.tsx"],"sourcesContent":["import { LayoutMetadata } from \"./layoutTypes\";\n\nimport \"./LayoutTile.css\";\n\nconst classBase = \"vuuLayoutTile\";\n\ntype LayoutTileProps = {\n metadata: LayoutMetadata;\n handleLoadLayout: (layoutId?: string) => void;\n};\n\nexport const LayoutTile = (props: LayoutTileProps) => {\n const { metadata, handleLoadLayout } = props;\n\n return (\n <div role=\"listitem\">\n <div\n className={`${classBase}-layoutTile`}\n key={metadata?.id}\n role=\"button\"\n onClick={() => handleLoadLayout(metadata?.id)}\n >\n <img className={`${classBase}-screenshot`} src={metadata?.screenshot} />\n <div>\n <div className={`${classBase}-layoutName`}>{metadata?.name}</div>\n <div className={`${classBase}-layoutDetails`}>\n <div>{`${metadata?.user}, ${metadata?.created}`}</div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;AAIA,MAAM,SAAY,GAAA,eAAA,CAAA;AAOL,MAAA,UAAA,GAAa,CAAC,KAA2B,KAAA;AACpD,EAAM,MAAA,EAAE,QAAU,EAAA,gBAAA,EAAqB,GAAA,KAAA,CAAA;AAEvC,EACE,uBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,IAAA,EAAK,UACR,EAAA,QAAA,kBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,SAAS,CAAA,WAAA,CAAA;AAAA,MAEvB,IAAK,EAAA,QAAA;AAAA,MACL,OAAS,EAAA,MAAM,gBAAiB,CAAA,QAAA,EAAU,EAAE,CAAA;AAAA,MAE5C,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAe,WAAA,CAAA,EAAA,GAAA,EAAK,UAAU,UAAY,EAAA,CAAA;AAAA,6BACrE,KACC,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,WAAA,CAAA,EAAgB,oBAAU,IAAK,EAAA,CAAA;AAAA,0BAC1D,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,cAAA,CAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,KAAK,EAAA,EAAA,QAAA,EAAA,CAAA,EAAG,UAAU,IAAI,CAAA,EAAA,EAAK,QAAU,EAAA,OAAO,IAAG,CAClD,EAAA,CAAA;AAAA,SACF,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,IAVK,QAAU,EAAA,EAAA;AAAA,GAYnB,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaveLayoutPanel.js","sources":["../../../../../src/layout-management/SaveLayoutPanel.tsx"],"sourcesContent":["import { Checkbox, ComboBox, RadioButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { takeScreenshot } from \"./screenshot-utils\";\nimport { Button, FormField, FormFieldLabel, Input, Text } from \"@salt-ds/core\";\nimport { ChangeEvent, useEffect, useMemo, useState } from \"react\";\nimport { LayoutMetadataDto } from \"./layoutTypes\";\nimport { getAuthDetailsFromCookies } from \"../login\";\n\nimport \"./SaveLayoutPanel.css\";\n\nconst classBase = \"saveLayoutPanel\";\nconst formField = `${classBase}-formField`;\n\nconst groups = [\"Group 1\", \"Group 2\", \"Group 3\", \"Group 4\", \"Group 5\"];\n\nconst checkboxValues = [\"Value 1\", \"Value 2\", \"Value 3\"];\n\nconst radioValues = [\"Value 1\", \"Value 2\", \"Value 3\"] as const;\n\ntype RadioValue = (typeof radioValues)[number];\n\ntype SaveLayoutPanelProps = {\n componentId?: string;\n defaultTitle?: string;\n onCancel: () => void;\n onSave: (layoutMetadata: LayoutMetadataDto) => void;\n};\n\nexport const SaveLayoutPanel = (props: SaveLayoutPanelProps) => {\n const { defaultTitle = \"\", onCancel, onSave, componentId } = props;\n\n const [layoutName, setLayoutName] = useState<string>(defaultTitle);\n const [group, setGroup] = useState<string>(\"\");\n const [checkValues, setCheckValues] = useState<string[]>([]);\n const [radioValue, setRadioValue] = useState<RadioValue>(radioValues[0]);\n const [screenshot, setScreenshot] = useState<string | undefined>();\n const [screenshotErrorMessage, setScreenshotErrorMessage] = useState<\n string | undefined\n >();\n const [username] = getAuthDetailsFromCookies();\n\n useEffect(() => {\n if (componentId) {\n takeScreenshot(document.getElementById(componentId) as HTMLElement)\n .then((screenshot) => {\n setScreenshot(screenshot);\n })\n .catch((error: Error) => {\n setScreenshotErrorMessage(error.message);\n });\n }\n }, [componentId]);\n\n const handleSubmit = () => {\n onSave({\n name: layoutName,\n group,\n screenshot: screenshot ?? \"\",\n user: username,\n });\n };\n\n const screenshotContent = useMemo(() => {\n if (screenshot) {\n return (\n <img\n className={`${classBase}-screenshot`}\n src={screenshot}\n alt=\"screenshot of current layout\"\n />\n );\n }\n if (screenshotErrorMessage) {\n return <Text>{screenshotErrorMessage}</Text>;\n }\n return <div className=\"spinner\" />;\n }, [screenshot, screenshotErrorMessage]);\n\n return (\n <div className={`${classBase}-panelContainer`}>\n <div className={`${classBase}-panelContent`}>\n <div className={`${classBase}-formContainer`}>\n <FormField className={formField}>\n <FormFieldLabel>Group</FormFieldLabel>\n <ComboBox\n source={groups}\n allowFreeText\n InputProps={{\n inputProps: {\n className: `${classBase}-inputText`,\n placeholder: \"Select Group or Enter New Name\",\n onChange: (event: ChangeEvent<HTMLInputElement>) =>\n setGroup(event.target.value),\n },\n }}\n width=\"100%\"\n onSelectionChange={(_, value) => setGroup(value || \"\")}\n />\n </FormField>\n <FormField className={formField}>\n <FormFieldLabel>Layout Name</FormFieldLabel>\n <Input\n inputProps={{\n className: `${classBase}-inputText`,\n placeholder: \"Enter Layout Name\",\n }}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n setLayoutName(event.target.value)\n }\n value={layoutName}\n />\n </FormField>\n <FormField className={formField}>\n <FormFieldLabel>Some Layout Setting</FormFieldLabel>\n <div className={`${classBase}-settingsGroup`}>\n {checkboxValues.map((value, i) => (\n <Checkbox\n key={i}\n onToggle={() =>\n setCheckValues((prev) =>\n prev.includes(value)\n ? prev.filter((entry) => entry !== value)\n : [...prev, value]\n )\n }\n checked={checkValues.includes(value)}\n label={value}\n />\n ))}\n </div>\n </FormField>\n <FormField className={formField}>\n <FormFieldLabel>Some Layout Setting</FormFieldLabel>\n <div className={`${classBase}-settingsGroup`}>\n {radioValues.map((value, i) => (\n <RadioButton\n key={i}\n onClick={() => setRadioValue(value)}\n checked={radioValue === value}\n label={value}\n groupName=\"radioGroup\"\n />\n ))}\n </div>\n </FormField>\n </div>\n <div className={`${classBase}-screenshotContainer`}>\n {screenshotContent}\n </div>\n </div>\n <div className={`${classBase}-buttonsContainer`}>\n <Button className={`${classBase}-cancelButton`} onClick={onCancel}>\n Cancel\n </Button>\n <Button\n className={`${classBase}-saveButton`}\n onClick={handleSubmit}\n disabled={layoutName === \"\" || group === \"\"}\n >\n Save\n </Button>\n </div>\n </div>\n );\n};\n"],"names":["screenshot"],"mappings":";;;;;;;;AASA,MAAM,SAAY,GAAA,iBAAA,CAAA;AAClB,MAAM,SAAA,GAAY,GAAG,SAAS,CAAA,UAAA,CAAA,CAAA;AAE9B,MAAM,SAAS,CAAC,SAAA,EAAW,SAAW,EAAA,SAAA,EAAW,WAAW,SAAS,CAAA,CAAA;AAErE,MAAM,cAAiB,GAAA,CAAC,SAAW,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AAEvD,MAAM,WAAc,GAAA,CAAC,SAAW,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AAWvC,MAAA,eAAA,GAAkB,CAAC,KAAgC,KAAA;AAC9D,EAAA,MAAM,EAAE,YAAe,GAAA,EAAA,EAAI,QAAU,EAAA,MAAA,EAAQ,aAAgB,GAAA,KAAA,CAAA;AAE7D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAiB,YAAY,CAAA,CAAA;AACjE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAiB,EAAE,CAAA,CAAA;AAC7C,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAI,GAAA,QAAA,CAAmB,EAAE,CAAA,CAAA;AAC3D,EAAA,MAAM,CAAC,UAAY,EAAA,aAAa,IAAI,QAAqB,CAAA,WAAA,CAAY,CAAC,CAAC,CAAA,CAAA;AACvE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAA6B,EAAA,CAAA;AACjE,EAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GAAI,QAE1D,EAAA,CAAA;AACF,EAAM,MAAA,CAAC,QAAQ,CAAA,GAAI,yBAA0B,EAAA,CAAA;AAE7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAa,EAAA;AACf,MAAA,cAAA,CAAe,SAAS,cAAe,CAAA,WAAW,CAAgB,CAC/D,CAAA,IAAA,CAAK,CAACA,WAAe,KAAA;AACpB,QAAA,aAAA,CAAcA,WAAU,CAAA,CAAA;AAAA,OACzB,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,yBAAA,CAA0B,MAAM,OAAO,CAAA,CAAA;AAAA,OACxC,CAAA,CAAA;AAAA,KACL;AAAA,GACF,EAAG,CAAC,WAAW,CAAC,CAAA,CAAA;AAEhB,EAAA,MAAM,eAAe,MAAM;AACzB,IAAO,MAAA,CAAA;AAAA,MACL,IAAM,EAAA,UAAA;AAAA,MACN,KAAA;AAAA,MACA,YAAY,UAAc,IAAA,EAAA;AAAA,MAC1B,IAAM,EAAA,QAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAM,MAAA,iBAAA,GAAoB,QAAQ,MAAM;AACtC,IAAA,IAAI,UAAY,EAAA;AACd,MACE,uBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,GAAG,SAAS,CAAA,WAAA,CAAA;AAAA,UACvB,GAAK,EAAA,UAAA;AAAA,UACL,GAAI,EAAA,8BAAA;AAAA,SAAA;AAAA,OACN,CAAA;AAAA,KAEJ;AACA,IAAA,IAAI,sBAAwB,EAAA;AAC1B,MAAO,uBAAA,GAAA,CAAC,QAAM,QAAuB,EAAA,sBAAA,EAAA,CAAA,CAAA;AAAA,KACvC;AACA,IAAO,uBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,SAAU,EAAA,CAAA,CAAA;AAAA,GAC/B,EAAA,CAAC,UAAY,EAAA,sBAAsB,CAAC,CAAA,CAAA;AAEvC,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,eAAA,CAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAC1B,aAAA,CAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAC1B,cAAA,CAAA,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,SAAA,EAAA,EAAU,WAAW,SACpB,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,kBAAe,QAAK,EAAA,OAAA,EAAA,CAAA;AAAA,0BACrB,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,MAAQ,EAAA,MAAA;AAAA,cACR,aAAa,EAAA,IAAA;AAAA,cACb,UAAY,EAAA;AAAA,gBACV,UAAY,EAAA;AAAA,kBACV,SAAA,EAAW,GAAG,SAAS,CAAA,UAAA,CAAA;AAAA,kBACvB,WAAa,EAAA,gCAAA;AAAA,kBACb,UAAU,CAAC,KAAA,KACT,QAAS,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,iBAC/B;AAAA,eACF;AAAA,cACA,KAAM,EAAA,MAAA;AAAA,cACN,mBAAmB,CAAC,CAAA,EAAG,KAAU,KAAA,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,aAAA;AAAA,WACvD;AAAA,SACF,EAAA,CAAA;AAAA,wBACA,IAAA,CAAC,SAAU,EAAA,EAAA,SAAA,EAAW,SACpB,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,kBAAe,QAAW,EAAA,aAAA,EAAA,CAAA;AAAA,0BAC3B,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,UAAY,EAAA;AAAA,gBACV,SAAA,EAAW,GAAG,SAAS,CAAA,UAAA,CAAA;AAAA,gBACvB,WAAa,EAAA,mBAAA;AAAA,eACf;AAAA,cACA,UAAU,CAAC,KAAA,KACT,aAAc,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cAElC,KAAO,EAAA,UAAA;AAAA,aAAA;AAAA,WACT;AAAA,SACF,EAAA,CAAA;AAAA,wBACA,IAAA,CAAC,SAAU,EAAA,EAAA,SAAA,EAAW,SACpB,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,kBAAe,QAAmB,EAAA,qBAAA,EAAA,CAAA;AAAA,0BACnC,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,kBACzB,QAAe,EAAA,cAAA,CAAA,GAAA,CAAI,CAAC,KAAA,EAAO,CAC1B,qBAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,UAAU,MACR,cAAA;AAAA,gBAAe,CAAC,IACd,KAAA,IAAA,CAAK,QAAS,CAAA,KAAK,IACf,IAAK,CAAA,MAAA,CAAO,CAAC,KAAA,KAAU,UAAU,KAAK,CAAA,GACtC,CAAC,GAAG,MAAM,KAAK,CAAA;AAAA,eACrB;AAAA,cAEF,OAAA,EAAS,WAAY,CAAA,QAAA,CAAS,KAAK,CAAA;AAAA,cACnC,KAAO,EAAA,KAAA;AAAA,aAAA;AAAA,YATF,CAAA;AAAA,WAWR,CACH,EAAA,CAAA;AAAA,SACF,EAAA,CAAA;AAAA,wBACA,IAAA,CAAC,SAAU,EAAA,EAAA,SAAA,EAAW,SACpB,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,kBAAe,QAAmB,EAAA,qBAAA,EAAA,CAAA;AAAA,0BACnC,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,kBACzB,QAAY,EAAA,WAAA,CAAA,GAAA,CAAI,CAAC,KAAA,EAAO,CACvB,qBAAA,GAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cAEC,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK,CAAA;AAAA,cAClC,SAAS,UAAe,KAAA,KAAA;AAAA,cACxB,KAAO,EAAA,KAAA;AAAA,cACP,SAAU,EAAA,YAAA;AAAA,aAAA;AAAA,YAJL,CAAA;AAAA,WAMR,CACH,EAAA,CAAA;AAAA,SACF,EAAA,CAAA;AAAA,OACF,EAAA,CAAA;AAAA,0BACC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,wBACzB,QACH,EAAA,iBAAA,EAAA,CAAA;AAAA,KACF,EAAA,CAAA;AAAA,oBACC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,iBAAA,CAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAO,SAAW,EAAA,CAAA,EAAG,SAAS,CAAiB,aAAA,CAAA,EAAA,OAAA,EAAS,UAAU,QAEnE,EAAA,QAAA,EAAA,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,GAAG,SAAS,CAAA,WAAA,CAAA;AAAA,UACvB,OAAS,EAAA,YAAA;AAAA,UACT,QAAA,EAAU,UAAe,KAAA,EAAA,IAAM,KAAU,KAAA,EAAA;AAAA,UAC1C,QAAA,EAAA,MAAA;AAAA,SAAA;AAAA,OAED;AAAA,KACF,EAAA,CAAA;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot-utils.js","sources":["../../../../../src/layout-management/screenshot-utils.ts"],"sourcesContent":["import { toPng } from \"html-to-image\";\n\n/**\n * Takes a screenshot of the given node and returns the base64 encoded image url\n * @param node HTMLElement to take screenshot of\n * @returns Base64 encoded image url\n */\nexport const takeScreenshot = (node: HTMLElement): Promise<string> => {\n return new Promise((resolve, reject) => {\n toPng(node, {\n cacheBust: true /*,\n filter: (child) =>\n // remove content of table rows\n child.nodeType === Node.TEXT_NODE ||\n child.getAttribute(\"role\") !== \"row\",*/,\n })\n .then((screenshot) => {\n if (!screenshot) {\n reject(new Error(\"No Screenshot available\"));\n }\n resolve(screenshot);\n })\n .catch((error: Error) => {\n console.error(\n \"the following error occurred while taking a screenshot of a DOMNode\",\n error\n );\n reject(new Error(\"Error taking screenshot\"));\n });\n });\n};\n"],"names":[],"mappings":";;AAOa,MAAA,cAAA,GAAiB,CAAC,IAAuC,KAAA;AACpE,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAA,KAAA,CAAM,IAAM,EAAA;AAAA,MACV,SAAW,EAAA,IAAA;AAAA,KAKZ,CAAA,CACE,IAAK,CAAA,CAAC,UAAe,KAAA;AACpB,MAAA,IAAI,CAAC,UAAY,EAAA;AACf,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA,CAAA;AAAA,OAC7C;AACA,MAAA,OAAA,CAAQ,UAAU,CAAA,CAAA;AAAA,KACnB,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,qEAAA;AAAA,QACA,KAAA;AAAA,OACF,CAAA;AACA,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA,CAAA;AAAA,KAC5C,CAAA,CAAA;AAAA,GACJ,CAAA,CAAA;AACH;;;;"}
|