@deephaven/embed-widget 0.85.3-beta.3 → 0.85.3
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/build/assets/App-5f6f7b9f.js +2 -0
- package/build/assets/App-5f6f7b9f.js.map +1 -0
- package/build/assets/{Chart-3f4c77e4.js → Chart-412c19f4.js} +2 -2
- package/build/assets/{Chart-3f4c77e4.js.map → Chart-412c19f4.js.map} +1 -1
- package/build/assets/{IrisGrid-3c28a766.js → IrisGrid-733b8202.js} +5 -5
- package/build/assets/IrisGrid-733b8202.js.map +1 -0
- package/build/assets/IrisGridThemeProvider-58cd26bd.js +11 -0
- package/build/assets/IrisGridThemeProvider-58cd26bd.js.map +1 -0
- package/build/assets/LocalWorkspaceStorage-7050f21b.js +2 -0
- package/build/assets/LocalWorkspaceStorage-7050f21b.js.map +1 -0
- package/build/assets/{LogPanel-1bda917b.js → LogPanel-1c3dc9ca.js} +10 -10
- package/build/assets/LogPanel-1c3dc9ca.js.map +1 -0
- package/build/assets/{MarkdownEditor-c29e651c.js → MarkdownEditor-6ccae01c.js} +2 -2
- package/build/assets/{MarkdownEditor-c29e651c.js.map → MarkdownEditor-6ccae01c.js.map} +1 -1
- package/build/assets/{MarkdownNotebook-8450c26a.js → MarkdownNotebook-6aee75ea.js} +2 -2
- package/build/assets/{MarkdownNotebook-8450c26a.js.map → MarkdownNotebook-6aee75ea.js.map} +1 -1
- package/build/assets/{index-eef387d2.js → index-89acbc8f.js} +2 -2
- package/build/assets/{index-eef387d2.js.map → index-89acbc8f.js.map} +1 -1
- package/build/assets/{index-c4102b21.js → index-a8d90ae3.js} +6 -6
- package/build/assets/index-a8d90ae3.js.map +1 -0
- package/build/assets/index-c19d5010.js +4 -0
- package/build/assets/index-c19d5010.js.map +1 -0
- package/build/index.html +2 -2
- package/package.json +17 -17
- package/build/assets/App-1925702e.js +0 -2
- package/build/assets/App-1925702e.js.map +0 -1
- package/build/assets/IrisGrid-3c28a766.js.map +0 -1
- package/build/assets/IrisGridThemeProvider-a33d80ee.js +0 -11
- package/build/assets/IrisGridThemeProvider-a33d80ee.js.map +0 -1
- package/build/assets/LocalWorkspaceStorage-3d9e8ba8.js +0 -2
- package/build/assets/LocalWorkspaceStorage-3d9e8ba8.js.map +0 -1
- package/build/assets/LogPanel-1bda917b.js.map +0 -1
- package/build/assets/index-b63bcf2d.js +0 -4
- package/build/assets/index-b63bcf2d.js.map +0 -1
- package/build/assets/index-c4102b21.js.map +0 -1
package/build/index.html
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<base href="./" />
|
|
5
|
-
<meta name="ui-version" content="v0.85.
|
|
5
|
+
<meta name="ui-version" content="v0.85.3" />
|
|
6
6
|
<meta charset="utf-8" />
|
|
7
7
|
<meta
|
|
8
8
|
name="viewport"
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<link rel="manifest" href="./manifest.json" />
|
|
13
13
|
<link rel="icon" href="./favicon-cc-app.svg" />
|
|
14
14
|
<title>Deephaven Embedded Widget</title>
|
|
15
|
-
<script type="module" crossorigin src="./assets/index-
|
|
15
|
+
<script type="module" crossorigin src="./assets/index-89acbc8f.js"></script>
|
|
16
16
|
<link rel="modulepreload" crossorigin href="./assets/helpers-de833af9.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="./assets/vendor-5b2d9bf5.js">
|
|
18
18
|
<link rel="stylesheet" href="./assets/vendor-bd6e7036.css">
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/embed-widget",
|
|
3
|
-
"version": "0.85.3
|
|
3
|
+
"version": "0.85.3",
|
|
4
4
|
"description": "Deephaven Embedded Widget",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -16,18 +16,18 @@
|
|
|
16
16
|
"build"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@deephaven/app-utils": "^0.85.3
|
|
20
|
-
"@deephaven/components": "^0.85.3
|
|
21
|
-
"@deephaven/dashboard": "^0.85.3
|
|
22
|
-
"@deephaven/dashboard-core-plugins": "^0.85.3
|
|
23
|
-
"@deephaven/jsapi-bootstrap": "^0.85.3
|
|
24
|
-
"@deephaven/jsapi-components": "^0.85.3
|
|
19
|
+
"@deephaven/app-utils": "^0.85.3",
|
|
20
|
+
"@deephaven/components": "^0.85.3",
|
|
21
|
+
"@deephaven/dashboard": "^0.85.3",
|
|
22
|
+
"@deephaven/dashboard-core-plugins": "^0.85.3",
|
|
23
|
+
"@deephaven/jsapi-bootstrap": "^0.85.3",
|
|
24
|
+
"@deephaven/jsapi-components": "^0.85.3",
|
|
25
25
|
"@deephaven/jsapi-types": "^1.0.0-dev0.34.0",
|
|
26
|
-
"@deephaven/jsapi-utils": "^0.85.3
|
|
27
|
-
"@deephaven/log": "^0.85.
|
|
28
|
-
"@deephaven/plugin": "^0.85.3
|
|
29
|
-
"@deephaven/redux": "^0.85.3
|
|
30
|
-
"@deephaven/utils": "^0.85.
|
|
26
|
+
"@deephaven/jsapi-utils": "^0.85.3",
|
|
27
|
+
"@deephaven/log": "^0.85.0",
|
|
28
|
+
"@deephaven/plugin": "^0.85.3",
|
|
29
|
+
"@deephaven/redux": "^0.85.3",
|
|
30
|
+
"@deephaven/utils": "^0.85.2",
|
|
31
31
|
"@fontsource/fira-mono": "5.0.13",
|
|
32
32
|
"@fontsource/fira-sans": "5.0.20",
|
|
33
33
|
"nanoid": "5.0.7",
|
|
@@ -42,13 +42,13 @@
|
|
|
42
42
|
"preview": "vite preview"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@deephaven/eslint-config": "^0.85.
|
|
46
|
-
"@deephaven/mocks": "^0.85.
|
|
47
|
-
"@deephaven/prettier-config": "^0.85.
|
|
48
|
-
"@deephaven/stylelint-config": "^0.85.
|
|
45
|
+
"@deephaven/eslint-config": "^0.85.0",
|
|
46
|
+
"@deephaven/mocks": "^0.85.0",
|
|
47
|
+
"@deephaven/prettier-config": "^0.85.0",
|
|
48
|
+
"@deephaven/stylelint-config": "^0.85.0"
|
|
49
49
|
},
|
|
50
50
|
"publishConfig": {
|
|
51
51
|
"access": "public"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "27c92bdcb64434d765bc2d0f694854d4e5395a2c"
|
|
54
54
|
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as t,N as z,O as F,I as d,Q as B}from"./vendor-5b2d9bf5.js";import{L as K,a as Q}from"./index-eef387d2.js";import{u as q,P as J,g as X,a as Z,E as ee,b as te,S as se,c as ae,s as oe,d as ne,e as re,f as ie,h as le,i as ce}from"./LogPanel-1bda917b.js";import{u as ue,a as de,b as fe,c as ge,s as pe,l as he,d as me,A as be,C as Se,g as De,e as Ce,G as we,L as M,f as Ee}from"./LocalWorkspaceStorage-3d9e8ba8.js";import"./helpers-de833af9.js";const S=K.module("EmbedWidget.App"),ye={hasHeaders:!0,defaultComponentConfig:{isClosable:!1}};function Oe(){var A;const[f,W]=t.useState(),[a,k]=t.useState(),c=t.useMemo(()=>new URLSearchParams(window.location.search),[]).get("name"),g=q(),u=ue(),D=de(),C=fe(),o=z(),p=ge();t.useEffect(function(){async function n(){try{if(c==null)throw new Error('Missing URL parameter "name"');const e=await De(),l=await Ce(g,u,e),s=D.getStorageService(),U=new we(s,{}.VITE_STORAGE_PATH_LAYOUTS??""),L=await new M(U).load({isConsoleAvailable:l!==void 0}),{data:{settings:_}}=L,{shortcutOverrides:v={}}=_,$=se.isMacPlatform?v.mac??{}:v.windows??{};Object.entries($).forEach(([V,Y])=>{var P;(P=ae.get(V))==null||P.setKeyState(Y)}),o(oe(g)),o(ne(p)),o(re(C)),o(ie(L)),o(le(M.makeDefaultWorkspaceSettings(p))),S.debug(`Loading widget definition for ${c}...`);const N=await Ee(u,c);k(N),S.debug(`Widget definition successfully loaded for ${c}`)}catch(e){S.error(`Unable to load widget definition for ${c}`,e),W(`${e}`)}}n()},[g,D,u,o,c,p,C]);const h=a!=null&&f==null,x=a==null&&f==null,w=t.useMemo(()=>a==null?async()=>{throw new Error("Definition is null")}:()=>u.getObject(a),[u,a]),[r,O]=t.useState(null),[m,H]=t.useState("default-embed-widget"),j=t.useCallback(i=>{function n({pluginId:e,data:l}){const s=B();o(ce(s,e,l)),H(s)}O(e=>(e!=null&&pe(e.eventHub,n),he(i.eventHub,n),i))},[o]),[E,R]=t.useState(!1),T=t.useCallback(()=>{r==null||a==null||E||(R(!0),r.eventHub.emit(J.OPEN,{fetch:w,widget:X(a)}))},[r,a,w,E]),G=F(Z),I=me(),b=((A=G[m])==null?void 0:A.layoutConfig)??ee,y=t.useMemo(()=>{function i(n){if(n.length===0)return 0;let e=0;for(let l=0;l<n.length;l+=1){const s=n[l];s.type==="react-component"||s.type==="component"?e+=1:s.content!=null&&(e+=i(s.content))}return e}return i(b)>1},[b]);return t.useEffect(function(){r!=null&&(y?r.enableHeaders():r.disableHeaders())},[y,r]),d.jsxs("div",{className:"App",children:[h&&d.jsx(te,{children:d.jsx(be,{dashboards:[{id:m,layoutConfig:b,layoutSettings:ye}],activeDashboard:m,onLayoutInitialized:T,onGoldenLayoutChange:j,plugins:I})}),!h&&d.jsx(Q,{isLoaded:h,isLoading:x,errorMessage:f??null}),d.jsx(Se,{})]})}export{Oe as default};
|
|
2
|
-
//# sourceMappingURL=App-1925702e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"App-1925702e.js","sources":["../../src/App.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport {\n AppDashboards,\n GrpcLayoutStorage,\n LocalWorkspaceStorage,\n useConnection,\n useServerConfig,\n useUser,\n} from '@deephaven/app-utils';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport type { ItemConfig } from '@deephaven/golden-layout';\nimport {\n ContextMenuRoot,\n ErrorBoundary,\n LoadingOverlay,\n Shortcut,\n ShortcutRegistry,\n} from '@deephaven/components'; // Use the loading spinner from the Deephaven components package\nimport type { dh } from '@deephaven/jsapi-types';\nimport {\n fetchVariableDefinition,\n getSessionDetails,\n loadSessionWrapper,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { useDashboardPlugins } from '@deephaven/plugin';\nimport {\n PanelEvent,\n getAllDashboardsData,\n listenForCreateDashboard,\n CreateDashboardPayload,\n setDashboardPluginData,\n stopListenForCreateDashboard,\n} from '@deephaven/dashboard';\nimport {\n getVariableDescriptor,\n useApi,\n useClient,\n} from '@deephaven/jsapi-bootstrap';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport {\n setDefaultWorkspaceSettings,\n setWorkspace,\n setApi,\n setUser,\n setServerConfigValues,\n} from '@deephaven/redux';\nimport './App.scss'; // Styles for in this app\n\nconst log = Log.module('EmbedWidget.App');\n\nconst LAYOUT_SETTINGS = {\n hasHeaders: true,\n defaultComponentConfig: { isClosable: false },\n};\n\n/**\n * A functional React component that displays a Deephaven Widget using the @deephaven/plugin package.\n * It will attempt to open and display the widget specified with the `name` parameter, expecting it to be present on the server.\n * E.g. http://localhost:4010/?name=myWidget will attempt to open a widget `myWidget` by emitting a `PanelEvent.OPEN` event.\n * If no query param is provided, it will display an error.\n * By default, tries to connect to the server defined in the VITE_CORE_API_URL variable, which is set to http://localhost:10000/jsapi\n * See Vite docs for how to update these env vars: https://vitejs.dev/guide/env-and-mode.html\n */\nfunction App(): JSX.Element {\n const [error, setError] = useState<string>();\n const [definition, setDefinition] = useState<dh.ide.VariableDefinition>();\n const searchParams = useMemo(\n () => new URLSearchParams(window.location.search),\n []\n );\n // Get the widget name from the query param `name`.\n const name = searchParams.get('name');\n const api = useApi();\n const connection = useConnection();\n const client = useClient();\n const user = useUser();\n const dispatch = useDispatch();\n const serverConfig = useServerConfig();\n\n useEffect(\n function initializeApp() {\n async function initApp(): Promise<void> {\n try {\n if (name == null) {\n throw new Error('Missing URL parameter \"name\"');\n }\n\n const sessionDetails = await getSessionDetails();\n const sessionWrapper = await loadSessionWrapper(\n api,\n connection,\n sessionDetails\n );\n const storageService = client.getStorageService();\n const layoutStorage = new GrpcLayoutStorage(\n storageService,\n import.meta.env.VITE_STORAGE_PATH_LAYOUTS ?? ''\n );\n const workspaceStorage = new LocalWorkspaceStorage(layoutStorage);\n const loadedWorkspace = await workspaceStorage.load({\n isConsoleAvailable: sessionWrapper !== undefined,\n });\n const {\n data: { settings },\n } = loadedWorkspace;\n // Set any shortcuts that user has overridden on this platform\n const { shortcutOverrides = {} } = settings;\n const isMac = Shortcut.isMacPlatform;\n const platformOverrides = isMac\n ? shortcutOverrides.mac ?? {}\n : shortcutOverrides.windows ?? {};\n Object.entries(platformOverrides).forEach(([id, keyState]) => {\n ShortcutRegistry.get(id)?.setKeyState(keyState);\n });\n dispatch(setApi(api));\n dispatch(setServerConfigValues(serverConfig));\n dispatch(setUser(user));\n dispatch(setWorkspace(loadedWorkspace));\n dispatch(\n setDefaultWorkspaceSettings(\n LocalWorkspaceStorage.makeDefaultWorkspaceSettings(serverConfig)\n )\n );\n\n log.debug(`Loading widget definition for ${name}...`);\n\n const newDefinition = await fetchVariableDefinition(connection, name);\n\n setDefinition(newDefinition);\n\n log.debug(`Widget definition successfully loaded for ${name}`);\n } catch (e: unknown) {\n log.error(`Unable to load widget definition for ${name}`, e);\n setError(`${e}`);\n }\n }\n initApp();\n },\n [api, client, connection, dispatch, name, serverConfig, user]\n );\n\n const isLoaded = definition != null && error == null;\n const isLoading = definition == null && error == null;\n\n const fetch = useMemo(() => {\n if (definition == null) {\n return async () => {\n throw new Error('Definition is null');\n };\n }\n return () => connection.getObject(definition);\n }, [connection, definition]);\n\n const [goldenLayout, setGoldenLayout] = useState<GoldenLayout | null>(null);\n const [dashboardId, setDashboardId] = useState('default-embed-widget'); // Can't be DEFAULT_DASHBOARD_ID because its dashboard layout is not stored in dashboardData\n\n const handleGoldenLayoutChange = useCallback(\n (newLayout: GoldenLayout) => {\n function handleCreateDashboard({\n pluginId,\n data,\n }: CreateDashboardPayload) {\n const id = nanoid();\n dispatch(setDashboardPluginData(id, pluginId, data));\n setDashboardId(id);\n }\n\n setGoldenLayout(oldLayout => {\n if (oldLayout != null) {\n stopListenForCreateDashboard(\n oldLayout.eventHub,\n handleCreateDashboard\n );\n }\n listenForCreateDashboard(newLayout.eventHub, handleCreateDashboard);\n return newLayout;\n });\n },\n [dispatch]\n );\n\n const [hasEmittedWidget, setHasEmittedWidget] = useState(false);\n\n const handleDashboardInitialized = useCallback(() => {\n if (goldenLayout == null || definition == null || hasEmittedWidget) {\n return;\n }\n\n setHasEmittedWidget(true);\n goldenLayout.eventHub.emit(PanelEvent.OPEN, {\n fetch,\n widget: getVariableDescriptor(definition),\n });\n }, [goldenLayout, definition, fetch, hasEmittedWidget]);\n\n const allDashboardData = useSelector(getAllDashboardsData);\n\n const dashboardPlugins = useDashboardPlugins();\n\n const layoutConfig = (allDashboardData[dashboardId]?.layoutConfig ??\n EMPTY_ARRAY) as ItemConfig[];\n\n const hasMultipleComponents = useMemo(() => {\n function getComponentCount(config: ItemConfig[]) {\n if (config.length === 0) {\n return 0;\n }\n\n let count = 0;\n for (let i = 0; i < config.length; i += 1) {\n const item = config[i];\n if (item.type === 'react-component' || item.type === 'component') {\n count += 1;\n } else if (item.content != null) {\n count += getComponentCount(item.content);\n }\n }\n return count;\n }\n return getComponentCount(layoutConfig) > 1;\n }, [layoutConfig]);\n\n // Do this instead of changing layoutSettings because it will create\n // a new gl instance and can cause some loading failures likely due to\n // some race conditions w/ deephaven UI\n useEffect(\n function togglePanelHeaders() {\n if (goldenLayout != null) {\n if (hasMultipleComponents) {\n goldenLayout.enableHeaders();\n } else {\n goldenLayout.disableHeaders();\n }\n }\n },\n [hasMultipleComponents, goldenLayout]\n );\n\n return (\n <div className=\"App\">\n {isLoaded && (\n <ErrorBoundary>\n <AppDashboards\n dashboards={[\n {\n id: dashboardId,\n layoutConfig,\n layoutSettings: LAYOUT_SETTINGS,\n },\n ]}\n activeDashboard={dashboardId}\n onLayoutInitialized={handleDashboardInitialized}\n onGoldenLayoutChange={handleGoldenLayoutChange}\n plugins={dashboardPlugins}\n />\n </ErrorBoundary>\n )}\n {!isLoaded && (\n <LoadingOverlay\n isLoaded={isLoaded}\n isLoading={isLoading}\n errorMessage={error ?? null}\n />\n )}\n <ContextMenuRoot />\n </div>\n );\n}\n\nexport default App;\n"],"names":["log","Log","LAYOUT_SETTINGS","App","error","setError","useState","definition","setDefinition","name","useMemo","api","useApi","connection","useConnection","client","useClient","user","useUser","dispatch","useDispatch","serverConfig","useServerConfig","useEffect","initApp","sessionDetails","getSessionDetails","sessionWrapper","loadSessionWrapper","storageService","layoutStorage","GrpcLayoutStorage","loadedWorkspace","LocalWorkspaceStorage","settings","shortcutOverrides","platformOverrides","Shortcut","id","keyState","_a","ShortcutRegistry","setApi","setServerConfigValues","setUser","setWorkspace","setDefaultWorkspaceSettings","newDefinition","fetchVariableDefinition","isLoaded","isLoading","fetch","goldenLayout","setGoldenLayout","dashboardId","setDashboardId","handleGoldenLayoutChange","useCallback","newLayout","handleCreateDashboard","pluginId","data","nanoid","setDashboardPluginData","oldLayout","stopListenForCreateDashboard","listenForCreateDashboard","hasEmittedWidget","setHasEmittedWidget","handleDashboardInitialized","PanelEvent","getVariableDescriptor","allDashboardData","useSelector","getAllDashboardsData","dashboardPlugins","useDashboardPlugins","layoutConfig","EMPTY_ARRAY","hasMultipleComponents","getComponentCount","config","count","i","item","jsxs","ErrorBoundary","jsx","AppDashboards","LoadingOverlay","ContextMenuRoot"],"mappings":"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"}
|