@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
@@ -1,15 +1,16 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import React, { useCallback, useMemo, useState, useRef, useEffect, createContext, useImperativeHandle } from 'react';
2
+ import React, { useCallback, useMemo, useState, useRef, useEffect, createContext, useImperativeHandle, forwardRef } from 'react';
3
3
  import { mergeDefaultTailwindClassnames, ACTIVITY_CHANNEL, convertSecondsToMilliseconds, InfoRolloverButton, OverflowTooltippedLabel, PanelErrorBoundary, ProtectedContent, NavPageLayout, ContentSource, getNavPageLayoutPropsFromConfig } from '@gen3/frontend';
4
4
  import { Card, Stack, Badge, Text, List, Group, Tooltip, Button, LoadingOverlay, Alert, Loader, Divider, Select, ActionIcon, TextInput, Textarea, Table, Scroller, Tabs, Center } from '@mantine/core';
5
5
  import { Icon } from '@iconify-icon/react';
6
6
  import { GEN3_API, GEN3_WORKSPACE_API, gen3Api, useCoreSelector, selectJEGActiveWorkspaceStatus, useCoreDispatch, setJEGActiveWorkspaceStatus, WorkspaceStatus, setJEGRequestedWorkspaceStatus, RequestedWorkspaceStatus, setJEGActiveWorkspaceId, isFetchBaseQueryError, selectJEGRequestedWorkspaceStatus, selectJEGRequestedWorkspaceStatusTimestamp, isTimeGreaterThan, formatUptimeInMinutes, selectJEGKernelIds, removeManyJEGActiveKernels, upsertManyJEGActiveKernels, normalizeRtkError, selectAllJEGKernels, addJEGActiveKernel, selectWorkspaceTier, setWorkspaceTier, selectWorkspaceFullscreen, setWorkspaceFullscreen, useGetDictionaryFromUrlQuery, useUserAuth, GEN3_COMMONS_NAME } from '@gen3/core';
7
7
  import { useDeepCompareEffect } from 'use-deep-compare';
8
8
  import { notifications } from '@mantine/notifications';
9
- import { useDisclosure } from '@mantine/hooks';
9
+ import { useElementSize, useDisclosure, useResizeObserver } from '@mantine/hooks';
10
10
  import { IoSettingsSharp } from 'react-icons/io5';
11
11
  import { BsFillInfoCircleFill } from 'react-icons/bs';
12
12
  import { MdKeyboardArrowDown, MdKeyboardArrowRight } from 'react-icons/md';
13
+ import { merge } from 'lodash';
13
14
 
14
15
  const WorkspaceTierCard = ({ label, description, tier, features = [], tooltip = 'Launch workspace', buttonLabel = 'Launch', onSelectTier, baseColor })=>{
15
16
  const handleClick = useCallback(()=>onSelectTier(tier), [
@@ -1848,7 +1849,7 @@ const KernelSelector = ({ handleLaunchKernel, isLaunchingLoading, onKernelSelect
1848
1849
  id: "klp-kernel-spec",
1849
1850
  value: selectedKernelName,
1850
1851
  onChange: (value)=>setSelectedKernelName(value),
1851
- disabled: disabled,
1852
+ disabled: disabled || isError,
1852
1853
  data: kernelSpecs?.length === 0 ? [
1853
1854
  {
1854
1855
  value: 'python3',
@@ -1889,7 +1890,7 @@ const KernelSelector = ({ handleLaunchKernel, isLaunchingLoading, onKernelSelect
1889
1890
  onClick: ()=>handleLaunchKernel(selectedKernelName || 'python3'),
1890
1891
  loading: isLaunchingLoading,
1891
1892
  fullWidth: true,
1892
- disabled: disabled,
1893
+ disabled: disabled || isError,
1893
1894
  children: isLaunchingLoading ? 'Working...' : 'Launch Kernel'
1894
1895
  })
1895
1896
  ]
@@ -2200,7 +2201,7 @@ function HorizontalAccordion({ label, expanded, setExpanded, children, expandedW
2200
2201
  });
2201
2202
  }
2202
2203
 
2203
- const SettingsPanel = ({ showKernels, expanded, setExpanded })=>{
2204
+ const SettingsPanel = ({ showKernels, expanded, setExpanded, width = 380 })=>{
2204
2205
  const currentTier = useCoreSelector(selectWorkspaceTier);
2205
2206
  const coreDispatch = useCoreDispatch();
2206
2207
  const onUpgradeToRemote = useCallback(()=>{
@@ -2213,7 +2214,7 @@ const SettingsPanel = ({ showKernels, expanded, setExpanded })=>{
2213
2214
  expanded: expanded,
2214
2215
  setExpanded: setExpanded,
2215
2216
  rightSide: true,
2216
- expandedWidth: 380,
2217
+ expandedWidth: width,
2217
2218
  children: /*#__PURE__*/ jsxs(Stack, {
2218
2219
  gap: "sm",
2219
2220
  className: PanelStyle,
@@ -2228,7 +2229,7 @@ const SettingsPanel = ({ showKernels, expanded, setExpanded })=>{
2228
2229
  });
2229
2230
  };
2230
2231
 
2231
- const WorkspaceToolbar = ({ toolbarConfiguration })=>{
2232
+ const WorkspaceToolbar = /*#__PURE__*/ forwardRef(({ toolbarConfiguration }, ref)=>{
2232
2233
  const workspaceTier = useCoreSelector((state)=>selectWorkspaceTier(state));
2233
2234
  const workspaceStatus = useCoreSelector((state)=>selectJEGActiveWorkspaceStatus(state));
2234
2235
  const isFullscreen = useCoreSelector((state)=>selectWorkspaceFullscreen(state));
@@ -2247,6 +2248,7 @@ const WorkspaceToolbar = ({ toolbarConfiguration })=>{
2247
2248
  const fullscreenLabel = isFullscreen ? 'Exit Fullscreen' : 'Fullscreen View';
2248
2249
  const statusLabel = workspaceStatus === WorkspaceStatus.NotFound ? 'Not Running' : workspaceStatus;
2249
2250
  return /*#__PURE__*/ jsxs("div", {
2251
+ ref: ref,
2250
2252
  role: "toolbar",
2251
2253
  "aria-label": "Workspace toolbar",
2252
2254
  className: "flex items-center justify-between px-4 border-b-2 border-base-lighter pb-4",
@@ -2360,42 +2362,8 @@ const WorkspaceToolbar = ({ toolbarConfiguration })=>{
2360
2362
  })
2361
2363
  ]
2362
2364
  });
2363
- };
2364
-
2365
- const WORKSPACE_TIER_INFORMATION = {
2366
- free: {
2367
- tier: 'free',
2368
- toolbar: {
2369
- label: 'JupyterLite',
2370
- description: 'Running via JupyterLite',
2371
- showStop: false,
2372
- showStatus: false
2373
- },
2374
- settings: {
2375
- showKernels: false
2376
- },
2377
- dataAndTools: {
2378
- enabled: true,
2379
- tabs: []
2380
- }
2381
- },
2382
- remote: {
2383
- tier: 'remote',
2384
- toolbar: {
2385
- label: 'Remote Compute Environment',
2386
- description: 'Running with Remote Kernels',
2387
- showStop: true,
2388
- showStatus: true
2389
- },
2390
- settings: {
2391
- showKernels: true
2392
- },
2393
- dataAndTools: {
2394
- enabled: true,
2395
- tabs: []
2396
- }
2397
- }
2398
- };
2365
+ });
2366
+ WorkspaceToolbar.displayName = 'WorkspaceToolbar';
2399
2367
 
2400
2368
  // Streaming LLM client — OpenAI, Anthropic, Gemini, Ollama
2401
2369
  // All requests go directly from the browser to provider APIs (no backend proxy).
@@ -3551,6 +3519,9 @@ const FieldLinkCountBadge = ({ fieldsCount, linksCount })=>{
3551
3519
  };
3552
3520
 
3553
3521
  const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3522
+ const { ref, width } = useElementSize();
3523
+ const isNarrow = width > 0 && width < 280;
3524
+ const isCompact = width > 0 && width < 360;
3554
3525
  const [nodes, setNodes] = useState([]);
3555
3526
  const [search, setSearch] = useState('');
3556
3527
  const [expandedId, setExpandedId] = useState(null);
@@ -3583,7 +3554,8 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3583
3554
  });
3584
3555
  }
3585
3556
  return /*#__PURE__*/ jsxs("div", {
3586
- className: "relative flex flex-col gap-2 bg-base-lightest p-2 ",
3557
+ ref: ref,
3558
+ className: "relative flex flex-col gap-2 bg-base-lightest p-2 h-full",
3587
3559
  children: [
3588
3560
  /*#__PURE__*/ jsx(LoadingOverlay, {
3589
3561
  visible: isFetching
@@ -3603,7 +3575,7 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3603
3575
  ]
3604
3576
  }),
3605
3577
  /*#__PURE__*/ jsx("div", {
3606
- className: "flex flex-col gap-0.5",
3578
+ className: "flex h-full flex-1 flex-col gap-0.5 overflow-y-auto",
3607
3579
  children: filtered.map((node)=>{
3608
3580
  const isExpanded = expandedId === node.id;
3609
3581
  const propCount = Object.keys(node.properties).length;
@@ -3614,27 +3586,39 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3614
3586
  /*#__PURE__*/ jsxs("button", {
3615
3587
  type: "button",
3616
3588
  onClick: ()=>setExpandedId(isExpanded ? null : node.id),
3617
- className: "flex w-full items-center gap-2 px-2.5 py-2 text-left hover:bg-base-lightest hover:bg-opacity-50",
3589
+ className: "flex w-full flex-col px-2.5 py-2 text-left hover:bg-base-lightest hover:bg-opacity-50",
3618
3590
  "aria-label": `Expand description for ${node.title}`,
3619
3591
  "aria-expanded": isExpanded,
3620
3592
  children: [
3621
- isExpanded ? /*#__PURE__*/ jsx(MdKeyboardArrowDown, {}) : /*#__PURE__*/ jsx(MdKeyboardArrowRight, {}),
3622
3593
  /*#__PURE__*/ jsxs("div", {
3623
- className: "min-w-0 flex-1",
3594
+ className: "flex w-full items-center gap-2",
3624
3595
  children: [
3625
- /*#__PURE__*/ jsx("div", {
3626
- className: "truncate text-xs font-semibold text-base-darkest",
3627
- children: node.title
3596
+ isExpanded ? /*#__PURE__*/ jsx(MdKeyboardArrowDown, {}) : /*#__PURE__*/ jsx(MdKeyboardArrowRight, {}),
3597
+ /*#__PURE__*/ jsxs("div", {
3598
+ className: "min-w-0 flex-1",
3599
+ children: [
3600
+ /*#__PURE__*/ jsx("div", {
3601
+ className: "truncate text-xs font-semibold text-base-darkest",
3602
+ children: node.title
3603
+ }),
3604
+ !isNarrow && node.category && /*#__PURE__*/ jsx("div", {
3605
+ className: "truncate text-sm text-base-darker",
3606
+ children: node.category
3607
+ })
3608
+ ]
3628
3609
  }),
3629
- node.category && /*#__PURE__*/ jsx("div", {
3630
- className: "truncate text-sm text-base-darker",
3631
- children: node.category
3610
+ !isNarrow && /*#__PURE__*/ jsx(FieldLinkCountBadge, {
3611
+ fieldsCount: propCount,
3612
+ linksCount: linkCount
3632
3613
  })
3633
3614
  ]
3634
3615
  }),
3635
- /*#__PURE__*/ jsx(FieldLinkCountBadge, {
3636
- fieldsCount: propCount,
3637
- linksCount: linkCount
3616
+ isNarrow && /*#__PURE__*/ jsx("div", {
3617
+ className: "flex w-full items-center justify-between pl-5 pt-0.5",
3618
+ children: node.category && /*#__PURE__*/ jsx("span", {
3619
+ className: "truncate text-xs text-base-darker",
3620
+ children: node.category
3621
+ })
3638
3622
  })
3639
3623
  ]
3640
3624
  }),
@@ -3656,7 +3640,7 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3656
3640
  /*#__PURE__*/ jsx(Table.Th, {
3657
3641
  children: "Type"
3658
3642
  }),
3659
- /*#__PURE__*/ jsx(Table.Th, {})
3643
+ !isCompact && /*#__PURE__*/ jsx(Table.Th, {})
3660
3644
  ]
3661
3645
  })
3662
3646
  }),
@@ -3677,8 +3661,9 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3677
3661
  children: info.type
3678
3662
  })
3679
3663
  }),
3680
- /*#__PURE__*/ jsx(Table.Td, {
3664
+ !isCompact && /*#__PURE__*/ jsx(Table.Td, {
3681
3665
  children: info.enum && /*#__PURE__*/ jsx(Scroller, {
3666
+ draggable: true,
3682
3667
  children: /*#__PURE__*/ jsx(Group, {
3683
3668
  gap: "xs",
3684
3669
  wrap: "nowrap",
@@ -3690,6 +3675,7 @@ const CompactDictionaryPanel = ({ schemaUrl = '_dictionary/_all' })=>{
3690
3675
  label: value,
3691
3676
  className: "font-bold text-secondary-contrast",
3692
3677
  color: "accent-light",
3678
+ noTruncate: true,
3693
3679
  children: value
3694
3680
  })
3695
3681
  }, value))
@@ -3763,12 +3749,12 @@ const TABS = [
3763
3749
  ];
3764
3750
  const DataToolsPanel = ({ schemaUrl = DEFAULT_DICTIONARY_SCHEMA_URL, kbUrl })=>{
3765
3751
  return /*#__PURE__*/ jsx("div", {
3766
- className: "flex shrink-0",
3752
+ className: "flex flex-col h-full",
3767
3753
  children: /*#__PURE__*/ jsxs(Tabs, {
3768
3754
  defaultValue: "dictionary",
3769
3755
  variant: "outline",
3770
3756
  classNames: {
3771
- root: 'p-2'
3757
+ root: 'flex flex-col p-2'
3772
3758
  },
3773
3759
  keepMounted: true,
3774
3760
  children: [
@@ -3781,7 +3767,7 @@ const DataToolsPanel = ({ schemaUrl = DEFAULT_DICTIONARY_SCHEMA_URL, kbUrl })=>{
3781
3767
  }, tab.id))
3782
3768
  }),
3783
3769
  /*#__PURE__*/ jsx("div", {
3784
- className: "min-h-0 flex-1 overflow-hidden pt-4",
3770
+ className: "flex-1 min-h-0 h-full pt-4",
3785
3771
  children: /*#__PURE__*/ jsxs(PanelErrorBoundary, {
3786
3772
  children: [
3787
3773
  /*#__PURE__*/ jsx(Tabs.Panel, {
@@ -3805,40 +3791,60 @@ const DataToolsPanel = ({ schemaUrl = DEFAULT_DICTIONARY_SCHEMA_URL, kbUrl })=>{
3805
3791
  });
3806
3792
  };
3807
3793
 
3808
- const ToolsPanel = ({ expanded = true, setExpanded = ()=>{} })=>{
3794
+ const ToolsPanel = ({ expanded = true, setExpanded = ()=>{}, width = 310 })=>{
3809
3795
  return /*#__PURE__*/ jsx(HorizontalAccordion, {
3810
3796
  label: "Data & Tools",
3811
3797
  expanded: expanded,
3812
3798
  setExpanded: setExpanded,
3813
- expandedWidth: 310,
3799
+ expandedWidth: width,
3814
3800
  children: /*#__PURE__*/ jsx(DataToolsPanel, {})
3815
3801
  });
3816
3802
  };
3817
3803
 
3818
- const WorkspaceLayout = ({ children })=>{
3804
+ const WorkspaceLayout = ({ children, tierConfiguration })=>{
3819
3805
  const workspaceTier = useCoreSelector((state)=>selectWorkspaceTier(state));
3820
3806
  const [toolsExpanded, { set: setToolsExpanded }] = useDisclosure(true);
3821
3807
  const [settingsExpanded, { set: setSettingsExpanded }] = useDisclosure(true);
3808
+ const [toolbarRef, toolbarRect] = useResizeObserver();
3822
3809
  const isFullScreen = useCoreSelector((state)=>selectWorkspaceFullscreen(state));
3810
+ useEffect(()=>{
3811
+ if (isFullScreen) {
3812
+ setToolsExpanded(false);
3813
+ setSettingsExpanded(false);
3814
+ } else {
3815
+ setToolsExpanded(true);
3816
+ setSettingsExpanded(true);
3817
+ }
3818
+ }, [
3819
+ isFullScreen,
3820
+ setSettingsExpanded,
3821
+ setToolsExpanded
3822
+ ]);
3823
3823
  if (!workspaceTier) return null;
3824
3824
  return /*#__PURE__*/ jsxs("div", {
3825
3825
  className: "flex flex-col w-full grow",
3826
3826
  children: [
3827
3827
  /*#__PURE__*/ jsx(WorkspaceToolbar, {
3828
- toolbarConfiguration: WORKSPACE_TIER_INFORMATION[workspaceTier].toolbar
3828
+ toolbarConfiguration: tierConfiguration.toolbar,
3829
+ ref: toolbarRef
3829
3830
  }),
3830
3831
  /*#__PURE__*/ jsxs("div", {
3831
- className: "flex w-full grow",
3832
+ className: "flex w-full nowrap",
3833
+ style: {
3834
+ height: `calc(100% - ${toolbarRect?.height ?? 0}px`
3835
+ },
3832
3836
  children: [
3833
- WORKSPACE_TIER_INFORMATION[workspaceTier].dataAndTools.enabled && /*#__PURE__*/ jsx(ToolsPanel, {
3834
- expanded: toolsExpanded && !isFullScreen,
3835
- setExpanded: setToolsExpanded
3837
+ tierConfiguration.dataAndTools.enabled && /*#__PURE__*/ jsx(ToolsPanel, {
3838
+ expanded: toolsExpanded,
3839
+ setExpanded: setToolsExpanded,
3840
+ width: tierConfiguration.dataAndTools.width
3836
3841
  }),
3837
3842
  children,
3838
3843
  /*#__PURE__*/ jsx(SettingsPanel, {
3839
- showKernels: WORKSPACE_TIER_INFORMATION[workspaceTier].settings.showKernels,
3840
- expanded: settingsExpanded && !isFullScreen,
3841
- setExpanded: setSettingsExpanded
3844
+ showKernels: tierConfiguration.settings.showKernels,
3845
+ expanded: settingsExpanded,
3846
+ setExpanded: setSettingsExpanded,
3847
+ width: tierConfiguration.settings.width
3842
3848
  })
3843
3849
  ]
3844
3850
  })
@@ -3892,6 +3898,7 @@ const WorkspaceCenter = ({ workspaces, landingPage, tierConfiguration })=>{
3892
3898
  }
3893
3899
  if (workspaceTier === 'free') {
3894
3900
  return /*#__PURE__*/ jsx(WorkspaceLayout, {
3901
+ tierConfiguration: tierConfiguration.free,
3895
3902
  children: /*#__PURE__*/ jsx(FreeWorkspace, {})
3896
3903
  });
3897
3904
  }
@@ -3900,6 +3907,7 @@ const WorkspaceCenter = ({ workspaces, landingPage, tierConfiguration })=>{
3900
3907
  children: /*#__PURE__*/ jsx(MicroContainerReduxProvider, {
3901
3908
  enabled: true,
3902
3909
  children: /*#__PURE__*/ jsx(WorkspaceLayout, {
3910
+ tierConfiguration: tierConfiguration.remote,
3903
3911
  children: /*#__PURE__*/ jsx(RemoteComputeWorkspace, {
3904
3912
  tenantId: authContext?.tenantId || 'default',
3905
3913
  workspaceId: authContext?.workspaceId || 'workspace-default',
@@ -3943,22 +3951,60 @@ const DEFAULT_WORKSPACES_CONFIGURATION = {
3943
3951
  workspaces: {},
3944
3952
  tierConfiguration: {
3945
3953
  free: {
3946
- baseUrl: process.env.FREE_WORKSPACE_ASSETS_BASE_URL ?? '/api/workspace-assets/free'
3954
+ baseUrl: process.env.FREE_WORKSPACE_ASSETS_BASE_URL ?? '/api/workspace-assets/free',
3955
+ toolbar: {
3956
+ label: 'JupyterLite',
3957
+ description: 'Running via JupyterLite',
3958
+ showStop: false,
3959
+ showStatus: false
3960
+ },
3961
+ settings: {
3962
+ showKernels: false
3963
+ },
3964
+ dataAndTools: {
3965
+ enabled: true,
3966
+ tabs: [
3967
+ {
3968
+ label: 'Dictionary',
3969
+ description: 'Data Dictionary',
3970
+ app: 'dictionary'
3971
+ }
3972
+ ],
3973
+ width: 300
3974
+ }
3947
3975
  },
3948
3976
  remote: {
3949
- baseUrl: process.env.REMOTE_COMPUTE_WORKSPACE_ASSETS_BASE_URL ?? '/api/workspace-assets/remote'
3977
+ baseUrl: process.env.REMOTE_COMPUTE_WORKSPACE_ASSETS_BASE_URL ?? '/api/workspace-assets/remote',
3978
+ toolbar: {
3979
+ label: 'Remote Compute Environment',
3980
+ description: 'Running with Remote Kernels',
3981
+ showStop: true,
3982
+ showStatus: true
3983
+ },
3984
+ settings: {
3985
+ showKernels: true
3986
+ },
3987
+ dataAndTools: {
3988
+ enabled: true,
3989
+ tabs: [
3990
+ {
3991
+ label: 'Dictionary',
3992
+ description: 'Data Dictionary',
3993
+ app: 'dictionary'
3994
+ }
3995
+ ]
3996
+ }
3950
3997
  }
3951
3998
  }
3952
3999
  };
3953
4000
  const WorkspacesCenterPageGetServerSideProps = async ()=>{
3954
4001
  try {
3955
4002
  const workspacesCenterConfiguration = await ContentSource.getContentDatabase().get(`${GEN3_COMMONS_NAME}/workspaces.json`);
4003
+ const mergedConfiguration = merge({}, DEFAULT_WORKSPACES_CONFIGURATION, workspacesCenterConfiguration);
3956
4004
  return {
3957
4005
  props: {
3958
4006
  ...await getNavPageLayoutPropsFromConfig(),
3959
- configuration: {
3960
- ...workspacesCenterConfiguration
3961
- }
4007
+ configuration: mergedConfiguration
3962
4008
  }
3963
4009
  };
3964
4010
  } catch (error) {