@gen3/workspaces 0.12.62 → 0.12.64

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 (131) hide show
  1. package/dist/dts/api/workspaceAssetsApi.js +1 -1
  2. package/dist/dts/api/workspaceAssetsApi.js.map +1 -1
  3. package/dist/dts/components/MicroContainerPanel.stories.d.ts +6 -2
  4. package/dist/dts/components/MicroContainerPanel.stories.d.ts.map +1 -1
  5. package/dist/dts/components/MicroContainerPanel.stories.js +1 -1
  6. package/dist/dts/components/MicroContainerPanel.stories.js.map +1 -1
  7. package/dist/dts/components/MicroContainerReduxPanel.d.ts +3 -5
  8. package/dist/dts/components/MicroContainerReduxPanel.d.ts.map +1 -1
  9. package/dist/dts/components/MicroContainerReduxPanel.js +32 -6
  10. package/dist/dts/components/MicroContainerReduxPanel.js.map +1 -1
  11. package/dist/dts/pages/WorkspacesCenter/data.d.ts.map +1 -1
  12. package/dist/dts/pages/WorkspacesCenter/data.js +4 -1
  13. package/dist/dts/pages/WorkspacesCenter/data.js.map +1 -1
  14. package/dist/dts/providers/types.d.ts +1 -1
  15. package/dist/dts/providers/types.d.ts.map +1 -1
  16. package/dist/dts/providers/useMicroContainerRedux.d.ts.map +1 -1
  17. package/dist/dts/providers/useMicroContainerRedux.js +8 -2
  18. package/dist/dts/providers/useMicroContainerRedux.js.map +1 -1
  19. package/dist/dts/workspace/WorkspaceCenter.d.ts.map +1 -1
  20. package/dist/dts/workspace/WorkspaceCenter.js +1 -1
  21. package/dist/dts/workspace/WorkspaceCenter.js.map +1 -1
  22. package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.d.ts.map +1 -1
  23. package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.js +1 -1
  24. package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.js.map +1 -1
  25. package/dist/dts/workspace/tiers/RemoteComputeWorkspace.d.ts +1 -0
  26. package/dist/dts/workspace/tiers/RemoteComputeWorkspace.d.ts.map +1 -1
  27. package/dist/dts/workspace/tiers/RemoteComputeWorkspace.js +2 -2
  28. package/dist/dts/workspace/tiers/RemoteComputeWorkspace.js.map +1 -1
  29. package/dist/dts/workspace/tiers/types.d.ts +2 -0
  30. package/dist/dts/workspace/tiers/types.d.ts.map +1 -1
  31. package/dist/index/cjs/index.js +97 -25
  32. package/dist/index/cjs/index.js.map +1 -1
  33. package/dist/index/esm/index.js +98 -26
  34. package/dist/index/esm/index.js.map +1 -1
  35. package/dist/index.d.ts +2 -0
  36. package/dist/jupyterlite-builds/free-private/overrides.json +1 -0
  37. package/dist/jupyterlite-builds/remote-private/overrides.json +26 -0
  38. package/dist/jupyterlite-builds/scripts/build-gen3sdk-lite_v2.sh +310 -0
  39. package/dist/jupyterlite-builds/scripts/build-jupyterlite.sh +9 -0
  40. package/dist/jupyterlite-builds/scripts/build-jupyterlite_v2.sh +111 -0
  41. package/dist/server/cjs/server.js +1 -1
  42. package/dist/server/cjs/server.js.map +1 -1
  43. package/dist/server/esm/server.js +1 -1
  44. package/dist/server/esm/server.js.map +1 -1
  45. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/aiofiles-25.1.0-py3-none-any.whl +0 -0
  46. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/backoff-2.2.1-py3-none-any.whl +0 -0
  47. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/cdislogging-1.2.0-py3-none-any.whl +0 -0
  48. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/comm-0.2.3-py3-none-any.whl +0 -0
  49. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/dataclasses_json-0.5.9-py3-none-any.whl +0 -0
  50. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/dictionaryutils-4.0.0-py3-none-any.whl +0 -0
  51. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/drsclient-0.4.0-py3-none-any.whl +0 -0
  52. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/fastavro-1.12.2-py3-none-any.whl +0 -0
  53. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/gen3-4.28.3-py3-none-any.whl +0 -0
  54. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/gen3dictionary-3.0.0-py3-none-any.whl +0 -0
  55. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/gen3users-1.1.1-py3-none-any.whl +0 -0
  56. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/humanfriendly-10.0-py2.py3-none-any.whl +0 -0
  57. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/importlib_metadata-8.9.0-py3-none-any.whl +0 -0
  58. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/indexclient-6.3.0-py3-none-any.whl +0 -0
  59. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/ipykernel-6.9.2-py3-none-any.whl +0 -0
  60. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/ipython_pygments_lexers-1.1.1-py3-none-any.whl +0 -0
  61. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/marshmallow-3.26.2-py3-none-any.whl +0 -0
  62. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/marshmallow_enum-1.5.1-py2.py3-none-any.whl +0 -0
  63. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/mypy_extensions-1.1.0-py3-none-any.whl +0 -0
  64. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/piplite-0.8.5-py3-none-any.whl +0 -0
  65. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/pyodide_http-0.2.2-py3-none-any.whl +0 -0
  66. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/pyodide_kernel-0.8.5-py3-none-any.whl +0 -0
  67. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/pypfb-0.6.2-py3-none-any.whl +0 -0
  68. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/python_dateutil-2.9.0.post0-py2.py3-none-any.whl +0 -0
  69. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/python_json_logger-4.2.0-py3-none-any.whl +0 -0
  70. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/typing_inspect-0.9.0-py3-none-any.whl +0 -0
  71. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/xmltodict-0.13.0-py2.py3-none-any.whl +0 -0
  72. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/zipp-4.1.0-py3-none-any.whl +0 -0
  73. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_work/constraints.txt +354 -0
  74. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_work/excludes.txt +3 -0
  75. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_work/pylock.toml +347 -0
  76. package/jupyterlite-builds/free-private/.cache/pyodide-lock/_work/requirements.in +26 -0
  77. package/jupyterlite-builds/free-private/.cache/pyodide-lock/patched-pyodide-lock.json +1 -0
  78. package/jupyterlite-builds/free-private/.cache/pyodide-lock/pyodide-lock.json +1 -0
  79. package/jupyterlite-builds/free-private/.cache/pyodide-lock/remote-pyodide-lock.json +1 -0
  80. package/jupyterlite-builds/free-private/.cache/wheels/aiofiles-25.1.0-py3-none-any.whl.meta.json +24 -0
  81. package/jupyterlite-builds/free-private/.cache/wheels/backoff-2.2.1-py3-none-any.whl.meta.json +24 -0
  82. package/jupyterlite-builds/free-private/.cache/wheels/cdislogging-1.2.0-py3-none-any.whl.meta.json +24 -0
  83. package/jupyterlite-builds/free-private/.cache/wheels/dataclasses_json-0.5.9-py3-none-any.whl.meta.json +24 -0
  84. package/jupyterlite-builds/free-private/.cache/wheels/dictionaryutils-4.0.0-py3-none-any.whl.meta.json +24 -0
  85. package/jupyterlite-builds/free-private/.cache/wheels/drsclient-0.4.0-py3-none-any.whl.meta.json +24 -0
  86. package/jupyterlite-builds/free-private/.cache/wheels/fastavro-1.12.2-py3-none-any.whl.meta.json +24 -0
  87. package/jupyterlite-builds/free-private/.cache/wheels/gen3-4.28.3-py3-none-any.whl.meta.json +24 -0
  88. package/jupyterlite-builds/free-private/.cache/wheels/gen3dictionary-3.0.0-py3-none-any.whl.meta.json +24 -0
  89. package/jupyterlite-builds/free-private/.cache/wheels/gen3users-1.1.1-py3-none-any.whl.meta.json +24 -0
  90. package/jupyterlite-builds/free-private/.cache/wheels/humanfriendly-10.0-py2.py3-none-any.whl.meta.json +24 -0
  91. package/jupyterlite-builds/free-private/.cache/wheels/importlib_metadata-8.9.0-py3-none-any.whl.meta.json +24 -0
  92. package/jupyterlite-builds/free-private/.cache/wheels/indexclient-6.3.0-py3-none-any.whl.meta.json +24 -0
  93. package/jupyterlite-builds/free-private/.cache/wheels/marshmallow-3.26.2-py3-none-any.whl.meta.json +24 -0
  94. package/jupyterlite-builds/free-private/.cache/wheels/marshmallow_enum-1.5.1-py2.py3-none-any.whl.meta.json +24 -0
  95. package/jupyterlite-builds/free-private/.cache/wheels/mypy_extensions-1.1.0-py3-none-any.whl.meta.json +24 -0
  96. package/jupyterlite-builds/free-private/.cache/wheels/pypfb-0.6.2-py3-none-any.whl.meta.json +24 -0
  97. package/jupyterlite-builds/free-private/.cache/wheels/python_dateutil-2.9.0.post0-py2.py3-none-any.whl.meta.json +24 -0
  98. package/jupyterlite-builds/free-private/.cache/wheels/python_json_logger-4.2.0-py3-none-any.whl.meta.json +24 -0
  99. package/jupyterlite-builds/free-private/.cache/wheels/typing_inspect-0.9.0-py3-none-any.whl.meta.json +24 -0
  100. package/jupyterlite-builds/free-private/.cache/wheels/xmltodict-0.13.0-py2.py3-none-any.whl.meta.json +24 -0
  101. package/jupyterlite-builds/free-private/.cache/wheels/zipp-4.1.0-py3-none-any.whl.meta.json +24 -0
  102. package/jupyterlite-builds/free-private/cockle-config.json +71 -0
  103. package/jupyterlite-builds/free-private/cockle_wasm_env/.mambarc +1 -0
  104. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/coreutils.js +5421 -0
  105. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/coreutils.wasm +0 -0
  106. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/fs.d.ts +375 -0
  107. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/fs.js +3401 -0
  108. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/fs.wasm +0 -0
  109. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/grep.js +3839 -0
  110. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/grep.wasm +0 -0
  111. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/less.data +0 -0
  112. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/less.js +5060 -0
  113. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/less.wasm +0 -0
  114. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/sed.js +3843 -0
  115. package/jupyterlite-builds/free-private/cockle_wasm_env/bin/sed.wasm +0 -0
  116. package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/cockle_fs-0.3.0-h27506cd_2.json +60 -0
  117. package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/coreutils-9.10-h072c4ef_3.json +52 -0
  118. package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/emscripten-abi-4.0.9-h267e887_9.json +31 -0
  119. package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/grep-3.12-h8b79025_0.json +52 -0
  120. package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/history +10 -0
  121. package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/less-693-hf259948_0.json +60 -0
  122. package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/sed-4.9-h072c4ef_0.json +52 -0
  123. package/jupyterlite-builds/free-private/overrides.json +1 -0
  124. package/jupyterlite-builds/remote-private/overrides.json +26 -0
  125. package/package.json +5 -6
  126. package/rollup.config.mjs +1 -1
  127. package/scripts/aiohttp-3.13.5-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
  128. package/scripts/build-gen3sdk-lite_v2.sh +310 -0
  129. package/scripts/build-jupyterlite.sh +9 -0
  130. package/scripts/build-jupyterlite_v2.sh +111 -0
  131. package/LICENSE +0 -201
@@ -1,15 +1,15 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import React, { useCallback, useMemo, useState, useRef, useEffect, createContext, useImperativeHandle, forwardRef } from 'react';
3
3
  import { mergeDefaultTailwindClassnames, ACTIVITY_CHANNEL, convertSecondsToMilliseconds, InfoRolloverButton, OverflowTooltippedLabel, PanelErrorBoundary, ProtectedContent, FixedNavPageLayout, ContentSource, getNavPageLayoutPropsFromConfig } from '@gen3/frontend';
4
- import { Card, Stack, Badge, Text, List, Group, Tooltip, Button, Container, SimpleGrid, LoadingOverlay, Alert, Loader, Divider, Select, ActionIcon, TextInput, Textarea, Table, Scroller, Tabs, Center } from '@mantine/core';
4
+ import { Card, Stack, Badge, Text, List, Group, Tooltip, Button, Container, SimpleGrid, LoadingOverlay, Loader, Alert, Select, Divider, ActionIcon, TextInput, Textarea, Table, Scroller, Tabs, Center } from '@mantine/core';
5
5
  import { Icon } from '@iconify-icon/react';
6
6
  import { useInterval, useElementSize, useDisclosure, useResizeObserver } from '@mantine/hooks';
7
7
  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';
8
8
  import { useDeepCompareEffect } from 'use-deep-compare';
9
9
  import { notifications } from '@mantine/notifications';
10
+ import { MdExpandMore, MdKeyboardArrowDown, MdKeyboardArrowRight } from 'react-icons/md';
10
11
  import { IoSettingsSharp } from 'react-icons/io5';
11
12
  import { BsFillInfoCircleFill } from 'react-icons/bs';
12
- import { MdKeyboardArrowDown, MdKeyboardArrowRight } from 'react-icons/md';
13
13
  import { merge } from 'lodash';
14
14
 
15
15
  const WorkspaceTierCard = ({ label, description, tier, tierLabel = undefined, features = [], tooltip = 'Launch workspace', buttonLabel = 'Launch', onSelectTier, baseColor })=>{
@@ -619,12 +619,18 @@ const { useDoesHatcheryOptionExistsQuery, useHatcheryOptionsQuery, useLazyHatche
619
619
  isWorkspaceLaunchError,
620
620
  isTerminateError
621
621
  ]);
622
- const launch = useCallback(async ()=>{
622
+ const launch = useCallback(async (tag)=>{
623
623
  if (!enabled || workspaceContainerStatus === WorkspaceStatus.Launching || workspaceContainerStatus === WorkspaceStatus.Running) return; // already running or launching so ignore
624
+ const isTagString = tag && typeof tag === 'string';
625
+ if (isTagString) {
626
+ // set hash to passed in tag
627
+ setContainerHash(tag);
628
+ }
624
629
  try {
625
630
  coreDispatch(setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Launch));
626
631
  coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Launching));
627
- const query = containerHash ? encodeURIComponent(containerHash) : '';
632
+ // use tag if provided to prevent race condition with setContainerHash
633
+ const query = isTagString ? encodeURIComponent(tag) : containerHash ? encodeURIComponent(containerHash) : '';
628
634
  const launchResults = await launchTrigger(query).unwrap();
629
635
  if (!launchResults) {
630
636
  // launch error, will show error message and then reset
@@ -945,8 +951,10 @@ const icon = /*#__PURE__*/ jsx(Icon, {
945
951
  * The iframe and KernelLifecyclePanel are rendered by the PARENT only when
946
952
  * status === 'running' && useJupyterReady.ready === true.
947
953
  */ const PanelStyle$2 = 'h-full w-full flex flex-col items-center justify-start gap-6 px-6 mt-20';
948
- const MicroContainerReduxPanel = ()=>{
949
- const { launch, terminate } = useMicroContainerReduxContext();
954
+ const MicroContainerReduxPanel = ({ enableOptions = false })=>{
955
+ const { launch, terminate, containerHash } = useMicroContainerReduxContext();
956
+ const { data: hatcheryOptions, isLoading: isHatcheryOptionsLoading, isError: isHatcheryOptionsError } = useHatcheryOptionsQuery();
957
+ const [workspaceOptionSelected, setWorkspaceOptionSelected] = useState(null);
950
958
  const status = useCoreSelector(selectJEGActiveWorkspaceStatus);
951
959
  const requestedStatusTimestamp = useCoreSelector(selectJEGRequestedWorkspaceStatusTimestamp);
952
960
  const coreDispatch = useCoreDispatch();
@@ -980,6 +988,72 @@ const MicroContainerReduxPanel = ()=>{
980
988
  status,
981
989
  resetStatus
982
990
  ]);
991
+ const simpleLaunchWorkspaceBtn = /*#__PURE__*/ jsx(Button, {
992
+ variant: "outline",
993
+ color: "accent.3",
994
+ onClick: ()=>launch(),
995
+ children: "Launch Workspace"
996
+ });
997
+ const launchWorkspaceBtn = useMemo(()=>{
998
+ if (isHatcheryOptionsLoading) {
999
+ return /*#__PURE__*/ jsx(Loader, {
1000
+ size: 24
1001
+ });
1002
+ }
1003
+ if (isHatcheryOptionsError) {
1004
+ return /*#__PURE__*/ jsx(Alert, {
1005
+ variant: "light",
1006
+ color: "accentWarm.4",
1007
+ title: "Options API Error",
1008
+ icon: icon,
1009
+ children: "Failed to Fetch Options"
1010
+ });
1011
+ }
1012
+ if (hatcheryOptions && hatcheryOptions.length > 1) {
1013
+ const workspaceOptionLaunch = ()=>{
1014
+ if (workspaceOptionSelected?.value) {
1015
+ launch(workspaceOptionSelected.value);
1016
+ }
1017
+ };
1018
+ const hatcheryOptionForSelect = hatcheryOptions.map((obj)=>({
1019
+ label: obj.name,
1020
+ value: obj.id
1021
+ }));
1022
+ return /*#__PURE__*/ jsxs("div", {
1023
+ className: "flex",
1024
+ children: [
1025
+ /*#__PURE__*/ jsx(Select, {
1026
+ rightSection: /*#__PURE__*/ jsx(MdExpandMore, {
1027
+ className: "text-accent",
1028
+ size: "1.5em",
1029
+ "aria-hidden": true
1030
+ }),
1031
+ withCheckIcon: false,
1032
+ data: hatcheryOptionForSelect,
1033
+ value: workspaceOptionSelected ? workspaceOptionSelected.value : null,
1034
+ placeholder: "-- Select workspace type --",
1035
+ onChange: (_value, option)=>setWorkspaceOptionSelected(option),
1036
+ classNames: {
1037
+ input: 'rounded-r-none'
1038
+ },
1039
+ color: "accent.3"
1040
+ }),
1041
+ /*#__PURE__*/ jsx(Button, {
1042
+ onClick: workspaceOptionLaunch,
1043
+ className: "rounded-l-none w-64 disabled:bg-accent-lighter disabled:text-accent-contrast",
1044
+ disabled: !workspaceOptionSelected?.value,
1045
+ color: "accent.3",
1046
+ children: "Launch Workspace"
1047
+ })
1048
+ ]
1049
+ });
1050
+ }
1051
+ return simpleLaunchWorkspaceBtn;
1052
+ }, [
1053
+ isHatcheryOptionsLoading,
1054
+ workspaceOptionSelected,
1055
+ containerHash
1056
+ ]);
983
1057
  if (status === WorkspaceStatus.StatusError) {
984
1058
  return /*#__PURE__*/ jsx("div", {
985
1059
  className: PanelStyle$2,
@@ -1001,25 +1075,17 @@ const MicroContainerReduxPanel = ()=>{
1001
1075
  children: [
1002
1076
  /*#__PURE__*/ jsx(Icon, {
1003
1077
  icon: "gen3:run",
1004
- width: 100,
1005
- height: 100,
1006
- className: "text-primary"
1007
- }),
1008
- /*#__PURE__*/ jsx("p", {
1009
- className: "mt-2 max-w-sm text-sm text-base-darker",
1010
- children: "Start your personal micro compute environment. Use it for light analysis — upgrade to a GPU kernel when you need to run large workflows."
1078
+ width: 60,
1079
+ height: 60,
1080
+ className: "text-accent"
1011
1081
  }),
1012
1082
  /*#__PURE__*/ jsx("p", {
1013
- className: "mt-1 text-xs text-base-darker",
1014
- children: "Included with your subscription · typically ready in under 60s"
1083
+ className: "mt-2 max-w-lg text-sm text-base-darker",
1084
+ children: "Start your personal micro compute environment. Use it for light analysis, upgrade to a GPU kernel when you need to run large workflows."
1015
1085
  })
1016
1086
  ]
1017
1087
  }),
1018
- /*#__PURE__*/ jsx(Button, {
1019
- variant: "outline",
1020
- onClick: launch,
1021
- children: "Launch Workspace"
1022
- })
1088
+ enableOptions ? launchWorkspaceBtn : simpleLaunchWorkspaceBtn
1023
1089
  ]
1024
1090
  });
1025
1091
  }
@@ -1109,7 +1175,7 @@ const MicroContainerReduxPanel = ()=>{
1109
1175
  children: "Terminate"
1110
1176
  }),
1111
1177
  /*#__PURE__*/ jsx(Button, {
1112
- onClick: launch,
1178
+ onClick: ()=>launch(),
1113
1179
  variant: "default",
1114
1180
  children: "Retry"
1115
1181
  })
@@ -1152,7 +1218,7 @@ const MicroContainerReduxPanel = ()=>{
1152
1218
 
1153
1219
  /**
1154
1220
  * Handle a Jupyter Enterprise Gateway session.
1155
- */ const RemoteComputeWorkspace = /*#__PURE__*/ React.memo(/*#__PURE__*/ React.forwardRef(({ assetBaseUrl = '/api/workspace-assets/remote', tenantId, workspaceId, userId, notebookName = 'remote-workspace', onReady = ()=>{}, onError = ()=>{} }, ref)=>{
1221
+ */ const RemoteComputeWorkspace = /*#__PURE__*/ React.memo(/*#__PURE__*/ React.forwardRef(({ assetBaseUrl = '/api/workspace-assets/remote', enableOptions = false, tenantId, workspaceId, userId, notebookName = 'remote-workspace', onReady = ()=>{}, onError = ()=>{} }, ref)=>{
1156
1222
  const [loading, setLoading] = useState(true);
1157
1223
  const [loadError, setLoadError] = useState(false);
1158
1224
  const [retryCount, setRetryCount] = useState(0);
@@ -1371,7 +1437,9 @@ const MicroContainerReduxPanel = ()=>{
1371
1437
  if (status !== WorkspaceStatus.Running) {
1372
1438
  return /*#__PURE__*/ jsx("div", {
1373
1439
  className: "w-full flex flex-col grow",
1374
- children: /*#__PURE__*/ jsx(MicroContainerReduxPanel, {})
1440
+ children: /*#__PURE__*/ jsx(MicroContainerReduxPanel, {
1441
+ enableOptions: enableOptions
1442
+ })
1375
1443
  });
1376
1444
  }
1377
1445
  return /*#__PURE__*/ jsxs("div", {
@@ -3951,7 +4019,7 @@ const WorkspaceLayout = ({ children, tierConfiguration })=>{
3951
4019
  width: tierConfiguration.dataAndTools.width
3952
4020
  }),
3953
4021
  children,
3954
- /*#__PURE__*/ jsx(SettingsPanel, {
4022
+ tierConfiguration.settings.enabled && /*#__PURE__*/ jsx(SettingsPanel, {
3955
4023
  showKernels: tierConfiguration.settings.showKernels,
3956
4024
  expanded: settingsExpanded,
3957
4025
  setExpanded: setSettingsExpanded,
@@ -4024,7 +4092,8 @@ const WorkspaceCenter = ({ workspaces, landingPage, tierConfiguration })=>{
4024
4092
  children: /*#__PURE__*/ jsx(RemoteComputeWorkspace, {
4025
4093
  tenantId: authContext?.tenantId || 'default',
4026
4094
  workspaceId: authContext?.workspaceId || 'workspace-default',
4027
- userId: authContext?.username || 'anonymous'
4095
+ userId: authContext?.username || 'anonymous',
4096
+ enableOptions: config?.enableOptions
4028
4097
  })
4029
4098
  })
4030
4099
  })
@@ -4072,6 +4141,7 @@ const DEFAULT_WORKSPACES_CONFIGURATION = {
4072
4141
  showStatus: false
4073
4142
  },
4074
4143
  settings: {
4144
+ enabled: true,
4075
4145
  showKernels: false
4076
4146
  },
4077
4147
  dataAndTools: {
@@ -4088,13 +4158,15 @@ const DEFAULT_WORKSPACES_CONFIGURATION = {
4088
4158
  },
4089
4159
  remote: {
4090
4160
  baseUrl: process.env.REMOTE_COMPUTE_WORKSPACE_ASSETS_BASE_URL ?? '/api/workspace-assets/remote',
4161
+ enableOptions: false,
4091
4162
  toolbar: {
4092
- label: 'Remote Compute Environment',
4163
+ label: 'Trusted Research Environment',
4093
4164
  description: 'Running with Remote Kernels',
4094
4165
  showStop: true,
4095
4166
  showStatus: true
4096
4167
  },
4097
4168
  settings: {
4169
+ enabled: true,
4098
4170
  showKernels: true
4099
4171
  },
4100
4172
  dataAndTools: {