@gen3/workspaces 0.12.47 → 0.12.49

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.
Files changed (60) hide show
  1. package/dist/dts/components/CompactDictionaryPanel/CompactDictionaryPanel.d.ts.map +1 -1
  2. package/dist/dts/components/CompactDictionaryPanel/CompactDictionaryPanel.js +6 -2
  3. package/dist/dts/components/CompactDictionaryPanel/CompactDictionaryPanel.js.map +1 -1
  4. package/dist/dts/components/CompactDictionaryPanel/data/large_dictionary.d.ts +11168 -0
  5. package/dist/dts/components/CompactDictionaryPanel/data/large_dictionary.d.ts.map +1 -0
  6. package/dist/dts/components/CompactDictionaryPanel/data/large_dictionary.js +13055 -0
  7. package/dist/dts/components/CompactDictionaryPanel/data/large_dictionary.js.map +1 -0
  8. package/dist/dts/components/DataToolsPanel.js +1 -1
  9. package/dist/dts/components/DataToolsPanel.js.map +1 -1
  10. package/dist/dts/components/KernelLifecyclePanel/KernelSelector.js +2 -2
  11. package/dist/dts/components/KernelLifecyclePanel/KernelSelector.js.map +1 -1
  12. package/dist/dts/config.d.ts +0 -2
  13. package/dist/dts/config.d.ts.map +1 -1
  14. package/dist/dts/config.js +0 -34
  15. package/dist/dts/config.js.map +1 -1
  16. package/dist/dts/core/hatcheryApi.d.ts +20 -20
  17. package/dist/dts/core/jegGatewayApi.d.ts +8 -8
  18. package/dist/dts/core/kernelApi.d.ts +12 -12
  19. package/dist/dts/pages/WorkspacesCenter/data.d.ts.map +1 -1
  20. package/dist/dts/pages/WorkspacesCenter/data.js +42 -3
  21. package/dist/dts/pages/WorkspacesCenter/data.js.map +1 -1
  22. package/dist/dts/server/workspaceAssetsHandler.d.ts.map +1 -1
  23. package/dist/dts/server/workspaceAssetsHandler.js +0 -1
  24. package/dist/dts/server/workspaceAssetsHandler.js.map +1 -1
  25. package/dist/dts/workspace/WorkspaceCenter.js +2 -2
  26. package/dist/dts/workspace/WorkspaceCenter.js.map +1 -1
  27. package/dist/dts/workspace/WorkspaceLayout/SettingsPanel.d.ts +1 -1
  28. package/dist/dts/workspace/WorkspaceLayout/SettingsPanel.d.ts.map +1 -1
  29. package/dist/dts/workspace/WorkspaceLayout/SettingsPanel.js +2 -2
  30. package/dist/dts/workspace/WorkspaceLayout/SettingsPanel.js.map +1 -1
  31. package/dist/dts/workspace/WorkspaceLayout/ToolsPanel.d.ts +2 -1
  32. package/dist/dts/workspace/WorkspaceLayout/ToolsPanel.d.ts.map +1 -1
  33. package/dist/dts/workspace/WorkspaceLayout/ToolsPanel.js +2 -2
  34. package/dist/dts/workspace/WorkspaceLayout/ToolsPanel.js.map +1 -1
  35. package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.d.ts +3 -1
  36. package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.d.ts.map +1 -1
  37. package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.js +17 -4
  38. package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.js.map +1 -1
  39. package/dist/dts/workspace/WorkspaceLayout/WorkspaceToolbar.d.ts +2 -1
  40. package/dist/dts/workspace/WorkspaceLayout/WorkspaceToolbar.d.ts.map +1 -1
  41. package/dist/dts/workspace/WorkspaceLayout/WorkspaceToolbar.js +10 -5
  42. package/dist/dts/workspace/WorkspaceLayout/WorkspaceToolbar.js.map +1 -1
  43. package/dist/dts/workspace/tiers/types.d.ts +4 -2
  44. package/dist/dts/workspace/tiers/types.d.ts.map +1 -1
  45. package/dist/dts/workspace/types.d.ts +1 -0
  46. package/dist/dts/workspace/types.d.ts.map +1 -1
  47. package/dist/index/cjs/index.js +122 -76
  48. package/dist/index/cjs/index.js.map +1 -1
  49. package/dist/index/esm/index.js +124 -78
  50. package/dist/index/esm/index.js.map +1 -1
  51. package/dist/index.d.ts +4 -2
  52. package/dist/server/cjs/server.js +0 -1
  53. package/dist/server/cjs/server.js.map +1 -1
  54. package/dist/server/esm/server.js +0 -1
  55. package/dist/server/esm/server.js.map +1 -1
  56. package/package.json +4 -4
  57. package/dist/dts/api/utils.d.ts +0 -2
  58. package/dist/dts/api/utils.d.ts.map +0 -1
  59. package/dist/dts/api/utils.js +0 -13
  60. package/dist/dts/api/utils.js.map +0 -1
@@ -12,6 +12,7 @@ var hooks = require('@mantine/hooks');
12
12
  var io5 = require('react-icons/io5');
13
13
  var bs = require('react-icons/bs');
14
14
  var md = require('react-icons/md');
15
+ var lodash = require('lodash');
15
16
 
16
17
  const WorkspaceTierCard = ({ label, description, tier, features = [], tooltip = 'Launch workspace', buttonLabel = 'Launch', onSelectTier, baseColor })=>{
17
18
  const handleClick = React.useCallback(()=>onSelectTier(tier), [
@@ -1850,7 +1851,7 @@ const KernelSelector = ({ handleLaunchKernel, isLaunchingLoading, onKernelSelect
1850
1851
  id: "klp-kernel-spec",
1851
1852
  value: selectedKernelName,
1852
1853
  onChange: (value)=>setSelectedKernelName(value),
1853
- disabled: disabled,
1854
+ disabled: disabled || isError,
1854
1855
  data: kernelSpecs?.length === 0 ? [
1855
1856
  {
1856
1857
  value: 'python3',
@@ -1891,7 +1892,7 @@ const KernelSelector = ({ handleLaunchKernel, isLaunchingLoading, onKernelSelect
1891
1892
  onClick: ()=>handleLaunchKernel(selectedKernelName || 'python3'),
1892
1893
  loading: isLaunchingLoading,
1893
1894
  fullWidth: true,
1894
- disabled: disabled,
1895
+ disabled: disabled || isError,
1895
1896
  children: isLaunchingLoading ? 'Working...' : 'Launch Kernel'
1896
1897
  })
1897
1898
  ]
@@ -2202,7 +2203,7 @@ function HorizontalAccordion({ label, expanded, setExpanded, children, expandedW
2202
2203
  });
2203
2204
  }
2204
2205
 
2205
- const SettingsPanel = ({ showKernels, expanded, setExpanded })=>{
2206
+ const SettingsPanel = ({ showKernels, expanded, setExpanded, width = 380 })=>{
2206
2207
  const currentTier = core$1.useCoreSelector(core$1.selectWorkspaceTier);
2207
2208
  const coreDispatch = core$1.useCoreDispatch();
2208
2209
  const onUpgradeToRemote = React.useCallback(()=>{
@@ -2215,7 +2216,7 @@ const SettingsPanel = ({ showKernels, expanded, setExpanded })=>{
2215
2216
  expanded: expanded,
2216
2217
  setExpanded: setExpanded,
2217
2218
  rightSide: true,
2218
- expandedWidth: 380,
2219
+ expandedWidth: width,
2219
2220
  children: /*#__PURE__*/ jsxRuntime.jsxs(core.Stack, {
2220
2221
  gap: "sm",
2221
2222
  className: PanelStyle,
@@ -2230,7 +2231,7 @@ const SettingsPanel = ({ showKernels, expanded, setExpanded })=>{
2230
2231
  });
2231
2232
  };
2232
2233
 
2233
- const WorkspaceToolbar = ({ toolbarConfiguration })=>{
2234
+ const WorkspaceToolbar = /*#__PURE__*/ React.forwardRef(({ toolbarConfiguration }, ref)=>{
2234
2235
  const workspaceTier = core$1.useCoreSelector((state)=>core$1.selectWorkspaceTier(state));
2235
2236
  const workspaceStatus = core$1.useCoreSelector((state)=>core$1.selectJEGActiveWorkspaceStatus(state));
2236
2237
  const isFullscreen = core$1.useCoreSelector((state)=>core$1.selectWorkspaceFullscreen(state));
@@ -2249,6 +2250,7 @@ const WorkspaceToolbar = ({ toolbarConfiguration })=>{
2249
2250
  const fullscreenLabel = isFullscreen ? 'Exit Fullscreen' : 'Fullscreen View';
2250
2251
  const statusLabel = workspaceStatus === core$1.WorkspaceStatus.NotFound ? 'Not Running' : workspaceStatus;
2251
2252
  return /*#__PURE__*/ jsxRuntime.jsxs("div", {
2253
+ ref: ref,
2252
2254
  role: "toolbar",
2253
2255
  "aria-label": "Workspace toolbar",
2254
2256
  className: "flex items-center justify-between px-4 border-b-2 border-base-lighter pb-4",
@@ -2362,42 +2364,8 @@ const WorkspaceToolbar = ({ toolbarConfiguration })=>{
2362
2364
  })
2363
2365
  ]
2364
2366
  });
2365
- };
2366
-
2367
- const WORKSPACE_TIER_INFORMATION = {
2368
- free: {
2369
- tier: 'free',
2370
- toolbar: {
2371
- label: 'JupyterLite',
2372
- description: 'Running via JupyterLite',
2373
- showStop: false,
2374
- showStatus: false
2375
- },
2376
- settings: {
2377
- showKernels: false
2378
- },
2379
- dataAndTools: {
2380
- enabled: true,
2381
- tabs: []
2382
- }
2383
- },
2384
- remote: {
2385
- tier: 'remote',
2386
- toolbar: {
2387
- label: 'Remote Compute Environment',
2388
- description: 'Running with Remote Kernels',
2389
- showStop: true,
2390
- showStatus: true
2391
- },
2392
- settings: {
2393
- showKernels: true
2394
- },
2395
- dataAndTools: {
2396
- enabled: true,
2397
- tabs: []
2398
- }
2399
- }
2400
- };
2367
+ });
2368
+ WorkspaceToolbar.displayName = 'WorkspaceToolbar';
2401
2369
 
2402
2370
  // Streaming LLM client — OpenAI, Anthropic, Gemini, Ollama
2403
2371
  // All requests go directly from the browser to provider APIs (no backend proxy).
@@ -3553,6 +3521,9 @@ const FieldLinkCountBadge = ({ fieldsCount, linksCount })=>{
3553
3521
  };
3554
3522
 
3555
3523
  const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3524
+ const { ref, width } = hooks.useElementSize();
3525
+ const isNarrow = width > 0 && width < 280;
3526
+ const isCompact = width > 0 && width < 360;
3556
3527
  const [nodes, setNodes] = React.useState([]);
3557
3528
  const [search, setSearch] = React.useState('');
3558
3529
  const [expandedId, setExpandedId] = React.useState(null);
@@ -3585,7 +3556,8 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3585
3556
  });
3586
3557
  }
3587
3558
  return /*#__PURE__*/ jsxRuntime.jsxs("div", {
3588
- className: "relative flex flex-col gap-2 bg-base-lightest p-2 ",
3559
+ ref: ref,
3560
+ className: "relative flex flex-col gap-2 bg-base-lightest p-2 h-full",
3589
3561
  children: [
3590
3562
  /*#__PURE__*/ jsxRuntime.jsx(core.LoadingOverlay, {
3591
3563
  visible: isFetching
@@ -3605,7 +3577,7 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3605
3577
  ]
3606
3578
  }),
3607
3579
  /*#__PURE__*/ jsxRuntime.jsx("div", {
3608
- className: "flex flex-col gap-0.5",
3580
+ className: "flex h-full flex-1 flex-col gap-0.5 overflow-y-auto",
3609
3581
  children: filtered.map((node)=>{
3610
3582
  const isExpanded = expandedId === node.id;
3611
3583
  const propCount = Object.keys(node.properties).length;
@@ -3616,27 +3588,39 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3616
3588
  /*#__PURE__*/ jsxRuntime.jsxs("button", {
3617
3589
  type: "button",
3618
3590
  onClick: ()=>setExpandedId(isExpanded ? null : node.id),
3619
- className: "flex w-full items-center gap-2 px-2.5 py-2 text-left hover:bg-base-lightest hover:bg-opacity-50",
3591
+ className: "flex w-full flex-col px-2.5 py-2 text-left hover:bg-base-lightest hover:bg-opacity-50",
3620
3592
  "aria-label": `Expand description for ${node.title}`,
3621
3593
  "aria-expanded": isExpanded,
3622
3594
  children: [
3623
- isExpanded ? /*#__PURE__*/ jsxRuntime.jsx(md.MdKeyboardArrowDown, {}) : /*#__PURE__*/ jsxRuntime.jsx(md.MdKeyboardArrowRight, {}),
3624
3595
  /*#__PURE__*/ jsxRuntime.jsxs("div", {
3625
- className: "min-w-0 flex-1",
3596
+ className: "flex w-full items-center gap-2",
3626
3597
  children: [
3627
- /*#__PURE__*/ jsxRuntime.jsx("div", {
3628
- className: "truncate text-xs font-semibold text-base-darkest",
3629
- children: node.title
3598
+ isExpanded ? /*#__PURE__*/ jsxRuntime.jsx(md.MdKeyboardArrowDown, {}) : /*#__PURE__*/ jsxRuntime.jsx(md.MdKeyboardArrowRight, {}),
3599
+ /*#__PURE__*/ jsxRuntime.jsxs("div", {
3600
+ className: "min-w-0 flex-1",
3601
+ children: [
3602
+ /*#__PURE__*/ jsxRuntime.jsx("div", {
3603
+ className: "truncate text-xs font-semibold text-base-darkest",
3604
+ children: node.title
3605
+ }),
3606
+ !isNarrow && node.category && /*#__PURE__*/ jsxRuntime.jsx("div", {
3607
+ className: "truncate text-sm text-base-darker",
3608
+ children: node.category
3609
+ })
3610
+ ]
3630
3611
  }),
3631
- node.category && /*#__PURE__*/ jsxRuntime.jsx("div", {
3632
- className: "truncate text-sm text-base-darker",
3633
- children: node.category
3612
+ !isNarrow && /*#__PURE__*/ jsxRuntime.jsx(FieldLinkCountBadge, {
3613
+ fieldsCount: propCount,
3614
+ linksCount: linkCount
3634
3615
  })
3635
3616
  ]
3636
3617
  }),
3637
- /*#__PURE__*/ jsxRuntime.jsx(FieldLinkCountBadge, {
3638
- fieldsCount: propCount,
3639
- linksCount: linkCount
3618
+ isNarrow && /*#__PURE__*/ jsxRuntime.jsx("div", {
3619
+ className: "flex w-full items-center justify-between pl-5 pt-0.5",
3620
+ children: node.category && /*#__PURE__*/ jsxRuntime.jsx("span", {
3621
+ className: "truncate text-xs text-base-darker",
3622
+ children: node.category
3623
+ })
3640
3624
  })
3641
3625
  ]
3642
3626
  }),
@@ -3658,7 +3642,7 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3658
3642
  /*#__PURE__*/ jsxRuntime.jsx(core.Table.Th, {
3659
3643
  children: "Type"
3660
3644
  }),
3661
- /*#__PURE__*/ jsxRuntime.jsx(core.Table.Th, {})
3645
+ !isCompact && /*#__PURE__*/ jsxRuntime.jsx(core.Table.Th, {})
3662
3646
  ]
3663
3647
  })
3664
3648
  }),
@@ -3679,8 +3663,9 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3679
3663
  children: info.type
3680
3664
  })
3681
3665
  }),
3682
- /*#__PURE__*/ jsxRuntime.jsx(core.Table.Td, {
3666
+ !isCompact && /*#__PURE__*/ jsxRuntime.jsx(core.Table.Td, {
3683
3667
  children: info.enum && /*#__PURE__*/ jsxRuntime.jsx(core.Scroller, {
3668
+ draggable: true,
3684
3669
  children: /*#__PURE__*/ jsxRuntime.jsx(core.Group, {
3685
3670
  gap: "xs",
3686
3671
  wrap: "nowrap",
@@ -3692,6 +3677,7 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3692
3677
  label: value,
3693
3678
  className: "font-bold text-secondary-contrast",
3694
3679
  color: "accent-light",
3680
+ noTruncate: true,
3695
3681
  children: value
3696
3682
  })
3697
3683
  }, value))
@@ -3765,12 +3751,12 @@ const TABS = [
3765
3751
  ];
3766
3752
  const DataToolsPanel = ({ schemaUrl = DEFAULT_DICTIONARY_SCHEMA_URL, kbUrl })=>{
3767
3753
  return /*#__PURE__*/ jsxRuntime.jsx("div", {
3768
- className: "flex shrink-0",
3754
+ className: "flex flex-col h-full",
3769
3755
  children: /*#__PURE__*/ jsxRuntime.jsxs(core.Tabs, {
3770
3756
  defaultValue: "dictionary",
3771
3757
  variant: "outline",
3772
3758
  classNames: {
3773
- root: 'p-2'
3759
+ root: 'flex flex-col p-2'
3774
3760
  },
3775
3761
  keepMounted: true,
3776
3762
  children: [
@@ -3783,7 +3769,7 @@ const DataToolsPanel = ({ schemaUrl = DEFAULT_DICTIONARY_SCHEMA_URL, kbUrl })=>{
3783
3769
  }, tab.id))
3784
3770
  }),
3785
3771
  /*#__PURE__*/ jsxRuntime.jsx("div", {
3786
- className: "min-h-0 flex-1 overflow-hidden pt-4",
3772
+ className: "flex-1 min-h-0 h-full pt-4",
3787
3773
  children: /*#__PURE__*/ jsxRuntime.jsxs(frontend.PanelErrorBoundary, {
3788
3774
  children: [
3789
3775
  /*#__PURE__*/ jsxRuntime.jsx(core.Tabs.Panel, {
@@ -3807,40 +3793,60 @@ const DataToolsPanel = ({ schemaUrl = DEFAULT_DICTIONARY_SCHEMA_URL, kbUrl })=>{
3807
3793
  });
3808
3794
  };
3809
3795
 
3810
- const ToolsPanel = ({ expanded = true, setExpanded = ()=>{} })=>{
3796
+ const ToolsPanel = ({ expanded = true, setExpanded = ()=>{}, width = 310 })=>{
3811
3797
  return /*#__PURE__*/ jsxRuntime.jsx(HorizontalAccordion, {
3812
3798
  label: "Data & Tools",
3813
3799
  expanded: expanded,
3814
3800
  setExpanded: setExpanded,
3815
- expandedWidth: 310,
3801
+ expandedWidth: width,
3816
3802
  children: /*#__PURE__*/ jsxRuntime.jsx(DataToolsPanel, {})
3817
3803
  });
3818
3804
  };
3819
3805
 
3820
- const WorkspaceLayout = ({ children })=>{
3806
+ const WorkspaceLayout = ({ children, tierConfiguration })=>{
3821
3807
  const workspaceTier = core$1.useCoreSelector((state)=>core$1.selectWorkspaceTier(state));
3822
3808
  const [toolsExpanded, { set: setToolsExpanded }] = hooks.useDisclosure(true);
3823
3809
  const [settingsExpanded, { set: setSettingsExpanded }] = hooks.useDisclosure(true);
3810
+ const [toolbarRef, toolbarRect] = hooks.useResizeObserver();
3824
3811
  const isFullScreen = core$1.useCoreSelector((state)=>core$1.selectWorkspaceFullscreen(state));
3812
+ React.useEffect(()=>{
3813
+ if (isFullScreen) {
3814
+ setToolsExpanded(false);
3815
+ setSettingsExpanded(false);
3816
+ } else {
3817
+ setToolsExpanded(true);
3818
+ setSettingsExpanded(true);
3819
+ }
3820
+ }, [
3821
+ isFullScreen,
3822
+ setSettingsExpanded,
3823
+ setToolsExpanded
3824
+ ]);
3825
3825
  if (!workspaceTier) return null;
3826
3826
  return /*#__PURE__*/ jsxRuntime.jsxs("div", {
3827
3827
  className: "flex flex-col w-full grow",
3828
3828
  children: [
3829
3829
  /*#__PURE__*/ jsxRuntime.jsx(WorkspaceToolbar, {
3830
- toolbarConfiguration: WORKSPACE_TIER_INFORMATION[workspaceTier].toolbar
3830
+ toolbarConfiguration: tierConfiguration.toolbar,
3831
+ ref: toolbarRef
3831
3832
  }),
3832
3833
  /*#__PURE__*/ jsxRuntime.jsxs("div", {
3833
- className: "flex w-full grow",
3834
+ className: "flex w-full nowrap",
3835
+ style: {
3836
+ height: `calc(100% - ${toolbarRect?.height ?? 0}px`
3837
+ },
3834
3838
  children: [
3835
- WORKSPACE_TIER_INFORMATION[workspaceTier].dataAndTools.enabled && /*#__PURE__*/ jsxRuntime.jsx(ToolsPanel, {
3836
- expanded: toolsExpanded && !isFullScreen,
3837
- setExpanded: setToolsExpanded
3839
+ tierConfiguration.dataAndTools.enabled && /*#__PURE__*/ jsxRuntime.jsx(ToolsPanel, {
3840
+ expanded: toolsExpanded,
3841
+ setExpanded: setToolsExpanded,
3842
+ width: tierConfiguration.dataAndTools.width
3838
3843
  }),
3839
3844
  children,
3840
3845
  /*#__PURE__*/ jsxRuntime.jsx(SettingsPanel, {
3841
- showKernels: WORKSPACE_TIER_INFORMATION[workspaceTier].settings.showKernels,
3842
- expanded: settingsExpanded && !isFullScreen,
3843
- setExpanded: setSettingsExpanded
3846
+ showKernels: tierConfiguration.settings.showKernels,
3847
+ expanded: settingsExpanded,
3848
+ setExpanded: setSettingsExpanded,
3849
+ width: tierConfiguration.settings.width
3844
3850
  })
3845
3851
  ]
3846
3852
  })
@@ -3894,6 +3900,7 @@ const WorkspaceCenter = ({ workspaces, landingPage, tierConfiguration })=>{
3894
3900
  }
3895
3901
  if (workspaceTier === 'free') {
3896
3902
  return /*#__PURE__*/ jsxRuntime.jsx(WorkspaceLayout, {
3903
+ tierConfiguration: tierConfiguration.free,
3897
3904
  children: /*#__PURE__*/ jsxRuntime.jsx(FreeWorkspace, {})
3898
3905
  });
3899
3906
  }
@@ -3902,6 +3909,7 @@ const WorkspaceCenter = ({ workspaces, landingPage, tierConfiguration })=>{
3902
3909
  children: /*#__PURE__*/ jsxRuntime.jsx(MicroContainerReduxProvider, {
3903
3910
  enabled: true,
3904
3911
  children: /*#__PURE__*/ jsxRuntime.jsx(WorkspaceLayout, {
3912
+ tierConfiguration: tierConfiguration.remote,
3905
3913
  children: /*#__PURE__*/ jsxRuntime.jsx(RemoteComputeWorkspace, {
3906
3914
  tenantId: authContext?.tenantId || 'default',
3907
3915
  workspaceId: authContext?.workspaceId || 'workspace-default',
@@ -3945,22 +3953,60 @@ const DEFAULT_WORKSPACES_CONFIGURATION = {
3945
3953
  workspaces: {},
3946
3954
  tierConfiguration: {
3947
3955
  free: {
3948
- baseUrl: process.env.FREE_WORKSPACE_ASSETS_BASE_URL ?? '/api/workspace-assets/free'
3956
+ baseUrl: process.env.FREE_WORKSPACE_ASSETS_BASE_URL ?? '/api/workspace-assets/free',
3957
+ toolbar: {
3958
+ label: 'JupyterLite',
3959
+ description: 'Running via JupyterLite',
3960
+ showStop: false,
3961
+ showStatus: false
3962
+ },
3963
+ settings: {
3964
+ showKernels: false
3965
+ },
3966
+ dataAndTools: {
3967
+ enabled: true,
3968
+ tabs: [
3969
+ {
3970
+ label: 'Dictionary',
3971
+ description: 'Data Dictionary',
3972
+ app: 'dictionary'
3973
+ }
3974
+ ],
3975
+ width: 300
3976
+ }
3949
3977
  },
3950
3978
  remote: {
3951
- baseUrl: process.env.REMOTE_COMPUTE_WORKSPACE_ASSETS_BASE_URL ?? '/api/workspace-assets/remote'
3979
+ baseUrl: process.env.REMOTE_COMPUTE_WORKSPACE_ASSETS_BASE_URL ?? '/api/workspace-assets/remote',
3980
+ toolbar: {
3981
+ label: 'Remote Compute Environment',
3982
+ description: 'Running with Remote Kernels',
3983
+ showStop: true,
3984
+ showStatus: true
3985
+ },
3986
+ settings: {
3987
+ showKernels: true
3988
+ },
3989
+ dataAndTools: {
3990
+ enabled: true,
3991
+ tabs: [
3992
+ {
3993
+ label: 'Dictionary',
3994
+ description: 'Data Dictionary',
3995
+ app: 'dictionary'
3996
+ }
3997
+ ]
3998
+ }
3952
3999
  }
3953
4000
  }
3954
4001
  };
3955
4002
  const WorkspacesCenterPageGetServerSideProps = async ()=>{
3956
4003
  try {
3957
4004
  const workspacesCenterConfiguration = await frontend.ContentSource.getContentDatabase().get(`${core$1.GEN3_COMMONS_NAME}/workspaces.json`);
4005
+ const mergedConfiguration = lodash.merge({}, DEFAULT_WORKSPACES_CONFIGURATION, workspacesCenterConfiguration);
3958
4006
  return {
3959
4007
  props: {
3960
4008
  ...await frontend.getNavPageLayoutPropsFromConfig(),
3961
- configuration: {
3962
- ...workspacesCenterConfiguration
3963
- }
4009
+ configuration: mergedConfiguration
3964
4010
  }
3965
4011
  };
3966
4012
  } catch (error) {