@datalayer/core 1.0.25 → 1.1.43

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 (359) hide show
  1. package/README.md +11 -134
  2. package/lib/api/index.d.ts +0 -9
  3. package/lib/api/index.js +0 -9
  4. package/lib/cli-login.js +167 -0
  5. package/lib/client/auth/AuthenticationManager.d.ts +3 -3
  6. package/lib/client/auth/AuthenticationManager.js +13 -13
  7. package/lib/client/auth/strategies.d.ts +2 -2
  8. package/lib/client/auth/strategies.js +6 -6
  9. package/lib/client/base.d.ts +9 -12
  10. package/lib/client/base.js +17 -19
  11. package/lib/client/index.d.ts +10 -98
  12. package/lib/client/index.js +12 -21
  13. package/lib/client/mixins/IAMMixin.js +26 -26
  14. package/lib/components/auth/Login.js +2 -2
  15. package/lib/components/avatars/UserAvatar.d.ts +16 -0
  16. package/lib/components/avatars/UserAvatar.js +47 -0
  17. package/lib/components/avatars/index.d.ts +1 -0
  18. package/lib/components/avatars/index.js +1 -0
  19. package/lib/components/billing/BillableAccountSelect.js +4 -0
  20. package/lib/components/billing/index.js +4 -0
  21. package/lib/components/context/index.d.ts +0 -1
  22. package/lib/components/context/index.js +0 -1
  23. package/lib/components/display/DisplayHandle.d.ts +12 -0
  24. package/lib/components/display/DisplayHandle.js +11 -0
  25. package/lib/components/display/LiveRelativeTime.js +4 -0
  26. package/lib/components/display/index.d.ts +1 -0
  27. package/lib/components/display/index.js +1 -0
  28. package/lib/components/flashes/index.d.ts +0 -1
  29. package/lib/components/flashes/index.js +0 -1
  30. package/lib/components/index.d.ts +0 -1
  31. package/lib/components/index.js +0 -1
  32. package/lib/components/principal/Principal.d.ts +7 -0
  33. package/lib/components/principal/Principal.js +153 -16
  34. package/lib/components/principal/PrincipalAvatar.d.ts +1 -1
  35. package/lib/components/principal/PrincipalAvatar.js +4 -28
  36. package/lib/components/principal/PrincipalBadge.js +4 -4
  37. package/lib/components/principal/PrincipalDetailsOverlay.d.ts +4 -2
  38. package/lib/components/principal/PrincipalDetailsOverlay.js +27 -7
  39. package/lib/components/principal/PrincipalSwitcherMenu.js +79 -42
  40. package/lib/components/progress/index.d.ts +0 -1
  41. package/lib/components/progress/index.js +0 -1
  42. package/lib/components/sharing/ShareAccessComponent.d.ts +3 -2
  43. package/lib/components/sharing/ShareAccessComponent.js +194 -147
  44. package/lib/components/sharing/SharingEditor.js +4 -0
  45. package/lib/components/snippets/index.d.ts +1 -1
  46. package/lib/components/snippets/index.js +1 -1
  47. package/lib/components/students/StudentResultCircle.d.ts +21 -0
  48. package/lib/components/students/StudentResultCircle.js +59 -0
  49. package/lib/components/students/index.d.ts +1 -1
  50. package/lib/components/students/index.js +1 -1
  51. package/lib/components/time/LiveRelativeTime.js +4 -0
  52. package/lib/components/time/index.js +4 -0
  53. package/lib/components/timeline/index.js +4 -0
  54. package/lib/components/tokens/index.d.ts +1 -1
  55. package/lib/components/tokens/index.js +1 -1
  56. package/lib/components/toolbars/index.d.ts +1 -3
  57. package/lib/components/toolbars/index.js +1 -3
  58. package/lib/config/Configuration.d.ts +13 -13
  59. package/lib/config/Configuration.js +5 -5
  60. package/lib/hooks/cacheConverters.d.ts +21 -0
  61. package/lib/hooks/cacheConverters.js +110 -0
  62. package/lib/hooks/index.d.ts +0 -2
  63. package/lib/hooks/index.js +0 -2
  64. package/lib/hooks/useCache.d.ts +64 -35
  65. package/lib/hooks/useCache.js +661 -306
  66. package/lib/hooks/useDatalayer.js +3 -1
  67. package/lib/hooks/useIAM.js +2 -4
  68. package/lib/hooks/useLocationHandles.d.ts +3 -1
  69. package/lib/hooks/useLocationHandles.js +2 -1
  70. package/lib/hooks/usePrincipalStore.d.ts +2 -2
  71. package/lib/hooks/usePrincipalStore.js +97 -14
  72. package/lib/hooks/useSelectedPrincipal.js +1 -1
  73. package/lib/hooks/useUser.js +19 -2
  74. package/lib/index.d.ts +1 -6
  75. package/lib/index.js +1 -13
  76. package/lib/main.js +3 -3
  77. package/lib/mocks/index.js +1 -1
  78. package/lib/mocks/models/index.d.ts +0 -1
  79. package/lib/mocks/models/index.js +0 -1
  80. package/lib/models/Datasource.d.ts +2 -2
  81. package/lib/models/IAM.d.ts +1 -1
  82. package/lib/models/School.d.ts +12 -3
  83. package/lib/models/Secret.d.ts +2 -2
  84. package/lib/models/Student.d.ts +13 -3
  85. package/lib/models/Usage.d.ts +11 -1
  86. package/lib/models/UserDTO.d.ts +2 -2
  87. package/lib/models/UserSettings.d.ts +1 -1
  88. package/lib/models/UserSettings.js +1 -1
  89. package/lib/models/index.d.ts +0 -30
  90. package/lib/models/index.js +0 -30
  91. package/lib/otel/client/OtelClient.d.ts +2 -2
  92. package/lib/otel/client/OtelClient.js +2 -2
  93. package/lib/otel/hooks/index.js +5 -5
  94. package/lib/otel/types.d.ts +1 -1
  95. package/lib/otel/views/OtelLive.js +1 -1
  96. package/lib/routes/index.d.ts +1 -0
  97. package/lib/routes/index.js +1 -0
  98. package/lib/routes/publicPaths.d.ts +23 -0
  99. package/lib/routes/publicPaths.js +74 -0
  100. package/lib/state/State.d.ts +0 -12
  101. package/lib/state/State.js +0 -12
  102. package/lib/state/substates/CoreState.js +13 -13
  103. package/lib/state/substates/IAMState.d.ts +1 -1
  104. package/lib/state/substates/IAMState.js +14 -14
  105. package/lib/state/substates/LayoutState.d.ts +12 -1
  106. package/lib/state/substates/SurveysState.d.ts +1 -1
  107. package/lib/state/substates/SurveysState.js +10 -10
  108. package/lib/state/substates/index.d.ts +0 -7
  109. package/lib/state/substates/index.js +0 -7
  110. package/lib/utils/Handles.js +3 -1
  111. package/lib/utils/index.d.ts +0 -1
  112. package/lib/utils/index.js +0 -1
  113. package/lib/views/api-keys/APIKeys.js +12 -3
  114. package/lib/views/datasources/DatasourceDetail.d.ts +1 -1
  115. package/lib/views/datasources/DatasourceNew.d.ts +1 -1
  116. package/lib/views/datasources/Datasources.d.ts +1 -1
  117. package/lib/views/datasources/Datasources.js +12 -3
  118. package/lib/views/iam/SignInSimple.d.ts +37 -1
  119. package/lib/views/iam/SignInSimple.js +111 -13
  120. package/package.json +5 -3
  121. package/lib/App.css +0 -47
  122. package/lib/App.d.ts +0 -3
  123. package/lib/App.js +0 -21
  124. package/lib/api/runtimes/checkpoints.d.ts +0 -122
  125. package/lib/api/runtimes/checkpoints.js +0 -118
  126. package/lib/api/runtimes/environments.d.ts +0 -9
  127. package/lib/api/runtimes/environments.js +0 -29
  128. package/lib/api/runtimes/healthz.d.ts +0 -15
  129. package/lib/api/runtimes/healthz.js +0 -44
  130. package/lib/api/runtimes/index.d.ts +0 -12
  131. package/lib/api/runtimes/index.js +0 -16
  132. package/lib/api/runtimes/runtimes.d.ts +0 -138
  133. package/lib/api/runtimes/runtimes.js +0 -230
  134. package/lib/api/runtimes/snapshots.d.ts +0 -38
  135. package/lib/api/runtimes/snapshots.js +0 -82
  136. package/lib/api/scheduler/index.d.ts +0 -6
  137. package/lib/api/scheduler/index.js +0 -10
  138. package/lib/api/scheduler/schedules.d.ts +0 -85
  139. package/lib/api/scheduler/schedules.js +0 -78
  140. package/lib/api/spacer/documents.d.ts +0 -12
  141. package/lib/api/spacer/documents.js +0 -43
  142. package/lib/api/spacer/healthz.d.ts +0 -15
  143. package/lib/api/spacer/healthz.js +0 -44
  144. package/lib/api/spacer/index.d.ts +0 -15
  145. package/lib/api/spacer/index.js +0 -19
  146. package/lib/api/spacer/items.d.ts +0 -25
  147. package/lib/api/spacer/items.js +0 -55
  148. package/lib/api/spacer/lexicals.d.ts +0 -34
  149. package/lib/api/spacer/lexicals.js +0 -89
  150. package/lib/api/spacer/notebooks.d.ts +0 -34
  151. package/lib/api/spacer/notebooks.js +0 -89
  152. package/lib/api/spacer/spaces.d.ts +0 -84
  153. package/lib/api/spacer/spaces.js +0 -170
  154. package/lib/api/spacer/users.d.ts +0 -9
  155. package/lib/api/spacer/users.js +0 -29
  156. package/lib/client/mixins/RuntimesMixin.d.ts +0 -93
  157. package/lib/client/mixins/RuntimesMixin.js +0 -229
  158. package/lib/client/mixins/SpacerMixin.d.ts +0 -210
  159. package/lib/client/mixins/SpacerMixin.js +0 -615
  160. package/lib/client/utils/spacerUtils.d.ts +0 -18
  161. package/lib/client/utils/spacerUtils.js +0 -32
  162. package/lib/collaboration/DatalayerCollaboration.d.ts +0 -13
  163. package/lib/collaboration/DatalayerCollaboration.js +0 -28
  164. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +0 -60
  165. package/lib/collaboration/DatalayerCollaborationProvider.js +0 -163
  166. package/lib/collaboration/index.d.ts +0 -2
  167. package/lib/collaboration/index.js +0 -6
  168. package/lib/components/context/SpaceSelect.d.ts +0 -2
  169. package/lib/components/context/SpaceSelect.js +0 -42
  170. package/lib/components/flashes/FlashDisclaimer.d.ts +0 -2
  171. package/lib/components/flashes/FlashDisclaimer.js +0 -17
  172. package/lib/components/icons/ArtifactIcon.d.ts +0 -10
  173. package/lib/components/icons/ArtifactIcon.js +0 -58
  174. package/lib/components/icons/index.d.ts +0 -1
  175. package/lib/components/icons/index.js +0 -5
  176. package/lib/components/nbgrader/NbGradesDetails.d.ts +0 -5
  177. package/lib/components/nbgrader/NbGradesDetails.js +0 -14
  178. package/lib/components/nbgrader/index.d.ts +0 -1
  179. package/lib/components/nbgrader/index.js +0 -5
  180. package/lib/components/progress/CreditsIndicator.d.ts +0 -33
  181. package/lib/components/progress/CreditsIndicator.js +0 -23
  182. package/lib/components/runtimes/RuntimeCellVariables.d.ts +0 -39
  183. package/lib/components/runtimes/RuntimeCellVariables.js +0 -172
  184. package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +0 -37
  185. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +0 -101
  186. package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +0 -57
  187. package/lib/components/runtimes/RuntimeLauncherDialog.js +0 -275
  188. package/lib/components/runtimes/RuntimePickerBase.d.ts +0 -69
  189. package/lib/components/runtimes/RuntimePickerBase.js +0 -122
  190. package/lib/components/runtimes/RuntimePickerCell.d.ts +0 -34
  191. package/lib/components/runtimes/RuntimePickerCell.js +0 -104
  192. package/lib/components/runtimes/RuntimePickerNotebook.d.ts +0 -42
  193. package/lib/components/runtimes/RuntimePickerNotebook.js +0 -232
  194. package/lib/components/runtimes/RuntimeReservationControl.d.ts +0 -47
  195. package/lib/components/runtimes/RuntimeReservationControl.js +0 -42
  196. package/lib/components/runtimes/RuntimeSimplePicker.d.ts +0 -38
  197. package/lib/components/runtimes/RuntimeSimplePicker.js +0 -155
  198. package/lib/components/runtimes/RuntimeTransfer.d.ts +0 -16
  199. package/lib/components/runtimes/RuntimeTransfer.js +0 -5
  200. package/lib/components/runtimes/RuntimeUtils.d.ts +0 -17
  201. package/lib/components/runtimes/RuntimeUtils.js +0 -178
  202. package/lib/components/runtimes/RuntimeVariables.d.ts +0 -38
  203. package/lib/components/runtimes/RuntimeVariables.js +0 -75
  204. package/lib/components/runtimes/index.d.ts +0 -11
  205. package/lib/components/runtimes/index.js +0 -15
  206. package/lib/components/scheduler/ScheduleMenu.d.ts +0 -54
  207. package/lib/components/scheduler/ScheduleMenu.js +0 -154
  208. package/lib/components/scheduler/index.d.ts +0 -1
  209. package/lib/components/scheduler/index.js +0 -5
  210. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +0 -33
  211. package/lib/components/snapshots/SandboxSnapshotMenu.js +0 -169
  212. package/lib/components/snapshots/index.d.ts +0 -1
  213. package/lib/components/snapshots/index.js +0 -5
  214. package/lib/components/snippets/SnippetDialog.d.ts +0 -42
  215. package/lib/components/snippets/SnippetDialog.js +0 -42
  216. package/lib/components/students/StudentItemStatus.d.ts +0 -7
  217. package/lib/components/students/StudentItemStatus.js +0 -66
  218. package/lib/components/tokens/SpaceVariantToken.d.ts +0 -5
  219. package/lib/components/tokens/SpaceVariantToken.js +0 -23
  220. package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +0 -4
  221. package/lib/components/toolbars/AssignmentEditorToolbar.js +0 -18
  222. package/lib/components/toolbars/DocumentEditorToolbar.d.ts +0 -2
  223. package/lib/components/toolbars/DocumentEditorToolbar.js +0 -12
  224. package/lib/components/toolbars/NotebookEditorToolbar.d.ts +0 -29
  225. package/lib/components/toolbars/NotebookEditorToolbar.js +0 -30
  226. package/lib/examples/CellExample.d.ts +0 -6
  227. package/lib/examples/CellExample.js +0 -20
  228. package/lib/examples/NotebookExample.d.ts +0 -6
  229. package/lib/examples/NotebookExample.js +0 -19
  230. package/lib/examples/lexical-theme.css +0 -436
  231. package/lib/examples/notebooks/IPyWidgetsExample.ipynb.json +0 -101
  232. package/lib/examples/notebooks/IPyWidgetsExampleWithState.ipynb.json +0 -112
  233. package/lib/examples/notebooks/Lite.ipynb.json +0 -128
  234. package/lib/examples/notebooks/Matplotlib.ipynb.json +0 -137
  235. package/lib/examples/notebooks/NotebookExample1.ipynb.json +0 -126
  236. package/lib/examples/notebooks/NotebookExample2.ipynb.json +0 -48
  237. package/lib/examples/notebooks/NotebookOutputs.ipynb.json +0 -49
  238. package/lib/examples/notebooks/NotebookToCExample.ipynb.json +0 -102
  239. package/lib/examples/notebooks/PyGWalker.ipynb.json +0 -55
  240. package/lib/hooks/useCellOutputshot.d.ts +0 -4
  241. package/lib/hooks/useCellOutputshot.js +0 -25
  242. package/lib/hooks/useProjects.d.ts +0 -628
  243. package/lib/hooks/useProjects.js +0 -190
  244. package/lib/hooks/useRuntimes.d.ts +0 -5
  245. package/lib/hooks/useRuntimes.js +0 -34
  246. package/lib/mocks/jupyter/index.js +0 -5
  247. package/lib/mocks/models/CourseMock.d.ts +0 -6
  248. package/lib/mocks/models/CourseMock.js +0 -29
  249. package/lib/mocks/models/SpaceMock.d.ts +0 -6
  250. package/lib/mocks/models/SpaceMock.js +0 -25
  251. package/lib/models/Assignment.d.ts +0 -7
  252. package/lib/models/Assignment.js +0 -5
  253. package/lib/models/Cell.d.ts +0 -8
  254. package/lib/models/Cell.js +0 -5
  255. package/lib/models/CodeBlock.d.ts +0 -10
  256. package/lib/models/CodeBlock.js +0 -5
  257. package/lib/models/CodeSandboxSnapshot.d.ts +0 -92
  258. package/lib/models/CodeSandboxSnapshot.js +0 -13
  259. package/lib/models/CodeSandboxSnapshotDTO.d.ts +0 -173
  260. package/lib/models/CodeSandboxSnapshotDTO.js +0 -139
  261. package/lib/models/CodefeedBlocks.d.ts +0 -7
  262. package/lib/models/CodefeedBlocks.js +0 -5
  263. package/lib/models/Content.d.ts +0 -5
  264. package/lib/models/Content.js +0 -5
  265. package/lib/models/Course.d.ts +0 -17
  266. package/lib/models/Course.js +0 -5
  267. package/lib/models/Dataset.d.ts +0 -16
  268. package/lib/models/Dataset.js +0 -5
  269. package/lib/models/Document.d.ts +0 -8
  270. package/lib/models/Document.js +0 -5
  271. package/lib/models/Environment.d.ts +0 -86
  272. package/lib/models/Environment.js +0 -5
  273. package/lib/models/EnvironmentDTO.d.ts +0 -125
  274. package/lib/models/EnvironmentDTO.js +0 -88
  275. package/lib/models/Exercise.d.ts +0 -16
  276. package/lib/models/Exercise.js +0 -5
  277. package/lib/models/Item.d.ts +0 -20
  278. package/lib/models/Item.js +0 -5
  279. package/lib/models/ItemDTO.d.ts +0 -74
  280. package/lib/models/ItemDTO.js +0 -186
  281. package/lib/models/ItemType.d.ts +0 -2
  282. package/lib/models/ItemType.js +0 -5
  283. package/lib/models/Lesson.d.ts +0 -5
  284. package/lib/models/Lesson.js +0 -5
  285. package/lib/models/LexicalDTO.d.ts +0 -155
  286. package/lib/models/LexicalDTO.js +0 -157
  287. package/lib/models/Library.d.ts +0 -10
  288. package/lib/models/Library.js +0 -5
  289. package/lib/models/Notebook.d.ts +0 -11
  290. package/lib/models/Notebook.js +0 -5
  291. package/lib/models/NotebookDTO.d.ts +0 -96
  292. package/lib/models/NotebookDTO.js +0 -153
  293. package/lib/models/Page.d.ts +0 -41
  294. package/lib/models/Page.js +0 -25
  295. package/lib/models/PageTag.d.ts +0 -19
  296. package/lib/models/PageTag.js +0 -94
  297. package/lib/models/ProjectDTO.d.ts +0 -89
  298. package/lib/models/ProjectDTO.js +0 -131
  299. package/lib/models/Runtime.d.ts +0 -123
  300. package/lib/models/Runtime.js +0 -18
  301. package/lib/models/RuntimeDTO.d.ts +0 -191
  302. package/lib/models/RuntimeDTO.js +0 -204
  303. package/lib/models/Space.d.ts +0 -35
  304. package/lib/models/Space.js +0 -66
  305. package/lib/models/SpaceDTO.d.ts +0 -334
  306. package/lib/models/SpaceDTO.js +0 -244
  307. package/lib/models/SpaceItem.d.ts +0 -10
  308. package/lib/models/SpaceItem.js +0 -5
  309. package/lib/models/SpaceMember.d.ts +0 -6
  310. package/lib/models/SpaceMember.js +0 -5
  311. package/lib/models/StudentItem.d.ts +0 -21
  312. package/lib/models/StudentItem.js +0 -5
  313. package/lib/services/DatalayerServiceManager.d.ts +0 -22
  314. package/lib/services/DatalayerServiceManager.js +0 -69
  315. package/lib/services/index.d.ts +0 -4
  316. package/lib/services/index.js +0 -7
  317. package/lib/services/reconnectToRuntime.d.ts +0 -32
  318. package/lib/services/reconnectToRuntime.js +0 -59
  319. package/lib/state/substates/CellState.d.ts +0 -12
  320. package/lib/state/substates/CellState.js +0 -22
  321. package/lib/state/substates/DocumentState.d.ts +0 -10
  322. package/lib/state/substates/DocumentState.js +0 -14
  323. package/lib/state/substates/GradeState.d.ts +0 -10
  324. package/lib/state/substates/GradeState.js +0 -14
  325. package/lib/state/substates/JupyterLabState.d.ts +0 -16
  326. package/lib/state/substates/JupyterLabState.js +0 -17
  327. package/lib/state/substates/NbformatState.d.ts +0 -13
  328. package/lib/state/substates/NbformatState.js +0 -16
  329. package/lib/state/substates/RuntimesState.d.ts +0 -79
  330. package/lib/state/substates/RuntimesState.js +0 -180
  331. package/lib/state/substates/SpaceState.d.ts +0 -11
  332. package/lib/state/substates/SpaceState.js +0 -16
  333. package/lib/stateful/index.d.ts +0 -2
  334. package/lib/stateful/index.js +0 -6
  335. package/lib/stateful/jupyter/exec/Python.d.ts +0 -5
  336. package/lib/stateful/jupyter/exec/Python.js +0 -100
  337. package/lib/stateful/jupyter/exec/Snippets.d.ts +0 -105
  338. package/lib/stateful/jupyter/exec/Snippets.js +0 -101
  339. package/lib/stateful/jupyter/exec/index.d.ts +0 -2
  340. package/lib/stateful/jupyter/exec/index.js +0 -6
  341. package/lib/stateful/jupyter/index.d.ts +0 -2
  342. package/lib/stateful/jupyter/index.js +0 -6
  343. package/lib/stateful/jupyter/kernelsHandler.d.ts +0 -8
  344. package/lib/stateful/jupyter/kernelsHandler.js +0 -39
  345. package/lib/stateful/runtimes/actions.d.ts +0 -102
  346. package/lib/stateful/runtimes/actions.js +0 -249
  347. package/lib/stateful/runtimes/apis.d.ts +0 -273
  348. package/lib/stateful/runtimes/apis.js +0 -5
  349. package/lib/stateful/runtimes/index.d.ts +0 -5
  350. package/lib/stateful/runtimes/index.js +0 -9
  351. package/lib/stateful/runtimes/settings.d.ts +0 -15
  352. package/lib/stateful/runtimes/settings.js +0 -31
  353. package/lib/stateful/runtimes/snapshots.d.ts +0 -25
  354. package/lib/stateful/runtimes/snapshots.js +0 -150
  355. package/lib/stateful/runtimes/utils.d.ts +0 -7
  356. package/lib/stateful/runtimes/utils.js +0 -14
  357. package/lib/utils/Cells.d.ts +0 -2
  358. package/lib/utils/Cells.js +0 -28
  359. /package/lib/{mocks/jupyter/index.d.ts → cli-login.d.ts} +0 -0
@@ -1,69 +0,0 @@
1
- import { ReactElement, ReactNode } from 'react';
2
- import { ISessionContext } from '@jupyterlab/apputils';
3
- import { ITranslator } from '@jupyterlab/translation';
4
- import { IRuntimeDesc } from '../../models';
5
- import { IMultiServiceManager } from '../../stateful/runtimes';
6
- type IDisplayMode = 'menu' | 'radio';
7
- /**
8
- * {@link RuntimePickerBase} properties
9
- */
10
- export interface IRuntimePickerBaseProps {
11
- /**
12
- * The display mode.
13
- */
14
- display: IDisplayMode;
15
- /**
16
- * Additional actions items to be placed at the top of the picker
17
- */
18
- preActions?: ReactNode;
19
- /**
20
- * Additional actions items to be placed at the bottom of the picker
21
- */
22
- postActions?: ReactNode;
23
- /**
24
- * Whether the picker is disabled or not.
25
- */
26
- disabled?: boolean;
27
- /**
28
- * Runtime description passing this filter function will be displayed.
29
- */
30
- filterRuntime?: (desc: IRuntimeDesc) => boolean;
31
- /**
32
- * Session preference.
33
- */
34
- preference?: {
35
- id?: string;
36
- kernelDisplayName?: string;
37
- language?: string;
38
- location?: string;
39
- };
40
- /**
41
- * Runtime description.
42
- */
43
- runtimeDesc?: IRuntimeDesc;
44
- /**
45
- * Set runtime description.
46
- */
47
- setRuntimeDesc: (desc?: IRuntimeDesc) => void;
48
- /**
49
- * Document session context.
50
- */
51
- sessionContext?: ISessionContext;
52
- /**
53
- * Application service manager
54
- */
55
- multiServiceManager: IMultiServiceManager;
56
- /**
57
- * Application translator.
58
- */
59
- translator?: ITranslator;
60
- /**
61
- * Change the look depending on the menu integration.
62
- */
63
- variant?: 'document' | 'cell';
64
- }
65
- /**
66
- * Base Kernel Picker component.
67
- */
68
- export declare function RuntimePickerBase(props: IRuntimePickerBaseProps): ReactElement;
69
- export default RuntimePickerBase;
@@ -1,122 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- /*
3
- * Copyright (c) 2023-2025 Datalayer, Inc.
4
- * Distributed under the terms of the Modified BSD License.
5
- */
6
- import { useEffect, useMemo, useState } from 'react';
7
- import { nullTranslator } from '@jupyterlab/translation';
8
- //import { kernelIcon } from '@jupyterlab/ui-components';
9
- import { ActionList, ActionMenu, IconButton, Text, RadioGroup, Radio, FormControl, LabelGroup, Label, } from '@primer/react';
10
- import CloudUploadIcon from '@datalayer/icons-react/data1/CloudUploadIcon';
11
- import { Box } from '@datalayer/primer-addons';
12
- import { CpuIcon } from '@primer/octicons-react';
13
- import { BrowserIcon, LaptopSimpleIcon } from '@datalayer/icons-react';
14
- import { CreditsIndicator } from '../../components/progress/index.js';
15
- import { isRuntimeRemote } from '../../stateful/runtimes/index.js';
16
- import { getGroupedRuntimeDescs } from './RuntimeUtils.js';
17
- /**
18
- * Maximal runtime display name length after which it is trimmed.
19
- */
20
- const RUNTIME_DISPLAY_NAME_MAX_LENGTH = 25;
21
- /**
22
- * Base Kernel Picker component.
23
- */
24
- export function RuntimePickerBase(props) {
25
- const { disabled, display, filterRuntime, multiServiceManager, postActions, preActions, preference, runtimeDesc, sessionContext, setRuntimeDesc, translator, variant, } = props;
26
- const [groupedRuntimeDescs, _] = useState(getGroupedRuntimeDescs(multiServiceManager, preference?.id, translator, filterRuntime, variant));
27
- const trans = useMemo(() => (translator ?? nullTranslator).load('jupyterlab'), [translator]);
28
- const [defaultSet, setDefaultSet] = useState(false);
29
- // Trick because overflow is an unknown prop of ActionMenu.Overlay.
30
- const overlayProps = {
31
- maxHeight: 'large',
32
- width: (variant === 'cell' ? 'small' : 'auto'),
33
- };
34
- /*
35
- // TODO this effect generates refresh of the react components which discards any change in the selection.
36
- useEffect(() => {
37
- const updateGroupedRuntimeDescs = () => {
38
- setGroupedKernelDescs(getGroupedRuntimeDescs(multiServiceManager, preference?.id, translator, filterKernel, variant));
39
- };
40
- multiServiceManager.browser?.kernels.runningChanged.connect(updateGroupedRuntimeDescs);
41
- multiServiceManager.browser?.kernelspecs.specsChanged.connect(updateGroupedRuntimeDescs);
42
- multiServiceManager.browser?.sessions.runningChanged.connect(updateGroupedRuntimeDescs);
43
- multiServiceManager.local.kernels.runningChanged.connect(updateGroupedRuntimeDescs);
44
- multiServiceManager.local.kernelspecs.specsChanged.connect(updateGroupedRuntimeDescs);
45
- multiServiceManager.local.sessions.runningChanged.connect(updateGroupedRuntimeDescs);
46
- multiServiceManager.remote?.kernels.changed.connect(updateGroupedRuntimeDescs);
47
- multiServiceManager.remote?.environments.changed.connect(updateGroupedRuntimeDescs);
48
- // multiServiceManager.remote?.sessions.runningChanged.connect(updateOptions);
49
- return () => {
50
- multiServiceManager.browser?.kernels.runningChanged.disconnect(updateGroupedRuntimeDescs);
51
- multiServiceManager.browser?.kernelspecs.specsChanged.disconnect(updateGroupedRuntimeDescs);
52
- multiServiceManager.browser?.sessions.runningChanged.disconnect(updateGroupedRuntimeDescs);
53
- multiServiceManager.local.kernels.runningChanged.disconnect(updateGroupedRuntimeDescs);
54
- multiServiceManager.local.kernelspecs.specsChanged.disconnect(updateGroupedRuntimeDescs);
55
- multiServiceManager.local.sessions.runningChanged.disconnect(updateGroupedRuntimeDescs);
56
- multiServiceManager.remote?.kernels.changed.disconnect(updateGroupedRuntimeDescs);
57
- multiServiceManager.remote?.environments.changed.disconnect(updateGroupedRuntimeDescs);
58
- // multiServiceManager.remote?.sessions.runningChanged.disconnect(updateOptions);
59
- };
60
- }, [multiServiceManager, preference, translator, filterKernel, variant]);
61
- */
62
- useEffect(() => {
63
- if (sessionContext && groupedRuntimeDescs) {
64
- const kernelId = sessionContext.session?.kernel?.id;
65
- if (kernelId) {
66
- Object.entries(groupedRuntimeDescs).forEach(([group, runtimeDescs]) => {
67
- runtimeDescs.forEach(runtimeDesc => {
68
- if (runtimeDesc.kernelId === kernelId) {
69
- setRuntimeDesc(runtimeDesc);
70
- }
71
- });
72
- });
73
- }
74
- }
75
- setDefaultSet(true);
76
- }, [groupedRuntimeDescs]);
77
- // For cell using submenu instead of group would be nice unfortunately the feature
78
- // is not yet implemented in the component there has been a not-great demo story.
79
- // https://github.com/primer/react/pull/3585
80
- return (_jsx(_Fragment, { children: display === 'menu' ? (
81
- /*
82
- * Section for Menu display.
83
- */
84
- _jsxs(ActionMenu, { children: [variant === 'cell' ? (_jsx(ActionMenu.Anchor, { children: _jsx(IconButton, { disabled: disabled || groupedRuntimeDescs === null,
85
- // icon={() => <kernelIcon.react className="dla-Cell-runtime-icon" tag={'span'} />}
86
- icon: () => (_jsx("span", { className: "dla-Cell-runtime-icon", children: _jsx(CpuIcon, {}) })), "aria-label": trans.__('Assign a Runtime to the Cell.'), title: trans.__('Assign a Runtime to the Cell.'), size: "small", variant: "invisible" }) })) : (_jsxs(ActionMenu.Button, { variant: "default", disabled: disabled || groupedRuntimeDescs === null, children: [_jsx(Text, { fontWeight: 'bold', children: trans.__('Runtime:') }), ' ' + (runtimeDesc?.displayName ?? trans.__('No Runtime'))] })), _jsx(ActionMenu.Overlay, { ...overlayProps, width: "medium", sx: { overflowY: 'auto' }, side: variant === 'cell' ? 'outside-left' : 'outside-right', children: _jsxs(ActionList, { selectionVariant: "single", children: [variant === 'cell' && (_jsxs(ActionList.Item, { selected: runtimeDesc === undefined, onSelect: () => {
87
- setRuntimeDesc(undefined);
88
- }, children: [preference?.location && (_jsx(ActionList.LeadingVisual, { children: preference.location === 'local' ? (_jsx(LaptopSimpleIcon, {})) : preference.location === 'browser' ? (_jsx(BrowserIcon, {})) : (_jsx(CloudUploadIcon, {})) })), trans.__('Assign the Notebook Runtime')] }, 'null')), !!preActions && preActions, Object.entries(groupedRuntimeDescs ?? {}).map(([group, runtimeDescs]) => (_jsxs(ActionList.Group, { children: [_jsx(ActionList.GroupHeading, { children: group }), runtimeDescs.map(candidateRuntimeDesc => {
89
- const annotation = candidateRuntimeDesc.podName
90
- ? ` - ${candidateRuntimeDesc.podName.split('-', 2).reverse()[0]}`
91
- : candidateRuntimeDesc.kernelId
92
- ? ` - ${candidateRuntimeDesc.kernelId}`
93
- : '';
94
- const fullDisplayName = (candidateRuntimeDesc.displayName ?? '') + annotation;
95
- const displayName = (candidateRuntimeDesc.displayName?.length ?? 0) >
96
- RUNTIME_DISPLAY_NAME_MAX_LENGTH
97
- ? candidateRuntimeDesc.displayName.slice(0, RUNTIME_DISPLAY_NAME_MAX_LENGTH) + '…'
98
- : (candidateRuntimeDesc.displayName ?? '');
99
- return (_jsxs(ActionList.Item, { title: fullDisplayName, selected: (candidateRuntimeDesc.location ===
100
- runtimeDesc?.location ||
101
- (isRuntimeRemote(candidateRuntimeDesc.location) &&
102
- isRuntimeRemote(runtimeDesc?.location ?? 'local'))) &&
103
- (candidateRuntimeDesc.kernelId ??
104
- candidateRuntimeDesc.name) ===
105
- (runtimeDesc?.kernelId ?? runtimeDesc?.name), onSelect: () => {
106
- setRuntimeDesc(candidateRuntimeDesc);
107
- }, children: [_jsx(ActionList.LeadingVisual, { children: candidateRuntimeDesc.location === 'local' ? (_jsx(LaptopSimpleIcon, {})) : candidateRuntimeDesc.location === 'browser' ? (_jsx(BrowserIcon, {})) : (_jsx(CloudUploadIcon, {})) }), displayName + annotation.slice(0, 10)] }, candidateRuntimeDesc.name));
108
- })] }, group))), !!postActions && (_jsxs(_Fragment, { children: [_jsx(ActionList.Divider, {}), postActions] }))] }) })] })) : (
109
- /*
110
- * Section for Radio display.
111
- */
112
- _jsxs(_Fragment, { children: [defaultSet && (_jsx(RadioGroup, { name: "kernel-options", "aria-labelledby": "kernel-options", children: Object.entries(groupedRuntimeDescs ?? {}).map(([group, runtimeDescs]) => (_jsxs(Box, { children: [_jsx(Box, { as: "h4", style: { marginTop: 0 }, children: group }), runtimeDescs.map(k => {
113
- return (_jsxs(Box, { title: k.name, children: [_jsxs(FormControl, { children: [_jsx(Radio, { value: k.kernelId, onChange: () => {
114
- setRuntimeDesc(k);
115
- }, checked: (k.location === runtimeDesc?.location ||
116
- (isRuntimeRemote(k.location) &&
117
- isRuntimeRemote(runtimeDesc?.location ?? 'local'))) &&
118
- (k.kernelId ?? k.name) ===
119
- (runtimeDesc?.kernelId ?? runtimeDesc?.name) }), _jsx(FormControl.Label, { children: _jsxs(Box, { display: "flex", children: [_jsx(Box, { children: k.displayName }), k.kernelId && k.location === 'remote' && (_jsx(Box, { ml: 3, mt: 1, children: _jsx(CreditsIndicator, { kernelId: k.kernelId, serviceManager: multiServiceManager.remote }, "credits-indicator") }))] }) }), _jsx(FormControl.Caption, { children: _jsxs(LabelGroup, { sx: { marginTop: 1 }, children: [_jsx(Label, { variant: "secondary", children: k.name }), _jsx(Label, { variant: "secondary", sx: { marginLeft: 1 }, children: k.location }), k.burningRate && (_jsxs(Label, { variant: "sponsors", sx: { marginLeft: 1 }, children: [k.burningRate, " credits/second"] })), k.gpu && (_jsx(Label, { variant: "success", sx: { marginLeft: 1 }, children: "GPU" }))] }) })] }), _jsx(ActionList.Divider, {})] }, k.kernelId));
120
- })] }, group))) })), !!postActions && _jsx(_Fragment, { children: postActions })] })) }));
121
- }
122
- export default RuntimePickerBase;
@@ -1,34 +0,0 @@
1
- import { ISessionContext } from '@jupyterlab/apputils';
2
- import { CodeCellModel } from '@jupyterlab/cells';
3
- import type { IMarkdownParser, IRenderMime } from '@jupyterlab/rendermime';
4
- import { IRuntimePickerBaseProps } from './RuntimePickerBase';
5
- /**
6
- * {@link RuntimePickerCell} properties
7
- */
8
- export type IRuntimePickerCellProps = Pick<IRuntimePickerBaseProps, 'multiServiceManager' | 'preference' | 'translator'> & {
9
- /**
10
- * Callback to allow the user to login
11
- */
12
- logIn?: () => void;
13
- /**
14
- * Code cell model
15
- */
16
- model: CodeCellModel;
17
- /**
18
- * Document session context
19
- */
20
- sessionContext?: ISessionContext;
21
- /**
22
- * Markdown parser
23
- */
24
- markdownParser?: IMarkdownParser;
25
- /**
26
- * HTML sanitizer; if not provided the produced HTML will not be sanitized.
27
- */
28
- sanitizer?: IRenderMime.ISanitizer;
29
- };
30
- /**
31
- * Runtime picker component for a cell.
32
- */
33
- export declare function RuntimePickerCell(props: IRuntimePickerCellProps): JSX.Element;
34
- export default RuntimePickerCell;
@@ -1,104 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- /*
3
- * Copyright (c) 2023-2025 Datalayer, Inc.
4
- * Distributed under the terms of the Modified BSD License.
5
- */
6
- import { useCallback, useEffect, useMemo, useState } from 'react';
7
- import { nullTranslator } from '@jupyterlab/translation';
8
- import { ActionList } from '@primer/react';
9
- import { CloudUploadIcon } from '@datalayer/icons-react';
10
- import { useCoreStore, useIAMStore } from '../../state/index.js';
11
- import { isRuntimeRemote } from '../../stateful/runtimes/index.js';
12
- import { RuntimeSnippetsFacade } from '../../stateful/jupyter/index.js';
13
- import { ExternalTokenSilentLogin } from '../../components/iam/index.js';
14
- import { SnippetDialog } from './../snippets/SnippetDialog.js';
15
- import { RuntimeLauncherDialog } from './RuntimeLauncherDialog.js';
16
- import { RuntimePickerBase } from './RuntimePickerBase.js';
17
- import { RuntimeCellVariablesDialog } from './RuntimeCellVariablesDialog.js';
18
- /**
19
- * Runtime picker component for a cell.
20
- */
21
- export function RuntimePickerCell(props) {
22
- const { logIn, markdownParser, model, preference, sanitizer, multiServiceManager, sessionContext, translator, } = props;
23
- const { token } = useIAMStore();
24
- const { configuration } = useCoreStore();
25
- const [isForeign, setIsForeign] = useState(false);
26
- const [hasCellRuntime, setHasCellRuntime] = useState(false);
27
- const [isKernelDialogOpen, setIsKernelDialogOpen] = useState(false);
28
- const [isVariableDialogOpen, setIsVariableDialogOpen] = useState(false);
29
- const [language, setLanguage] = useState('');
30
- const [snippets, setSnippets] = useState([]);
31
- const [isSnippetDialogOpen, setIsSnippetDialogOpen] = useState(false);
32
- const trans = useMemo(() => (translator ?? nullTranslator).load('jupyterlab'), [translator]);
33
- useEffect(() => {
34
- const updateState = (model) => {
35
- const datalayerMeta = model.getMetadata('datalayer') ?? {};
36
- const runtime = datalayerMeta.kernel;
37
- setIsForeign(!!runtime);
38
- setHasCellRuntime(runtime?.params?.notebook === false);
39
- const newSnippets = new Array();
40
- if (runtime) {
41
- const spec = multiServiceManager.remote?.environments
42
- .get()
43
- .find(env => env.name === runtime.name);
44
- setLanguage(spec?.language ?? '');
45
- if (spec?.snippets) {
46
- newSnippets.push(...spec.snippets);
47
- }
48
- }
49
- setSnippets(newSnippets);
50
- };
51
- updateState(model);
52
- model.metadataChanged.connect(updateState);
53
- return () => {
54
- model.metadataChanged.disconnect(updateState);
55
- };
56
- }, [model]);
57
- const filterKernel = useCallback((desc) => {
58
- return (!!desc.kernelId &&
59
- isRuntimeRemote(desc.location) &&
60
- (!preference?.language || desc.language === preference?.language));
61
- }, [preference]);
62
- const setSelectedRuntimeDesc = useCallback((kernel) => {
63
- const datalayerMeta = model.getMetadata('datalayer') ?? {
64
- runtime: undefined,
65
- };
66
- if (!kernel) {
67
- delete datalayerMeta.kernel;
68
- model.setMetadata('datalayer', datalayerMeta);
69
- }
70
- else {
71
- model.setMetadata('datalayer', Object.assign(datalayerMeta, { kernel }));
72
- }
73
- }, [model]);
74
- const closeVariableDialog = useCallback(() => {
75
- setIsVariableDialogOpen(false);
76
- }, []);
77
- const openVariableDialog = useCallback(() => {
78
- setIsVariableDialogOpen(true);
79
- }, []);
80
- const closeSnippetDialog = useCallback(() => {
81
- setIsSnippetDialogOpen(false);
82
- }, []);
83
- const openSnippetDialog = useCallback(() => {
84
- setIsSnippetDialogOpen(true);
85
- }, []);
86
- const setCell = useCallback(() => {
87
- setIsKernelDialogOpen(true);
88
- }, []);
89
- const onStartRemote = useCallback((desc) => {
90
- if (desc) {
91
- desc.params = {
92
- ...desc.params,
93
- notebook: false,
94
- };
95
- setSelectedRuntimeDesc(desc);
96
- }
97
- setIsKernelDialogOpen(false);
98
- }, [setSelectedRuntimeDesc]);
99
- const datalayerMeta = model.getMetadata('datalayer') ?? {};
100
- return (_jsxs(_Fragment, { children: [_jsx(RuntimePickerBase, { display: "menu", filterRuntime: filterKernel, preference: preference, multiServiceManager: multiServiceManager, runtimeDesc: datalayerMeta.kernel ? datalayerMeta.kernel : undefined, setRuntimeDesc: setSelectedRuntimeDesc, variant: 'cell', preActions: _jsxs(ActionList.Item, { disabled: !multiServiceManager.remote, onSelect: setCell, selected: hasCellRuntime, title: !multiServiceManager.remote
101
- ? 'You are not connected with Datalayer.'
102
- : 'Assign a new temporary Runtime on each Cell execution.', children: [_jsx(ActionList.LeadingVisual, { children: _jsx(CloudUploadIcon, {}) }), trans.__('Assign a Cell Runtime')] }), postActions: token || !logIn ? (_jsxs(_Fragment, { children: [RuntimeSnippetsFacade.supports(preference?.language ?? '') && (_jsx(ActionList.Item, { onSelect: openVariableDialog, disabled: !isForeign, title: trans.__('Define variables to transfer between the document kernel and the cell kernel.'), children: trans.__('Define Cell Variables Transfer') })), !configuration.whiteLabel && (_jsx(ActionList.Item, { onSelect: openSnippetDialog, disabled: snippets.length === 0, title: trans.__('Inject a code snippet at the end of the cell.'), children: trans.__('Inject Code Snippet') }))] })) : (_jsx(ActionList.Item, { onSelect: props.logIn, title: 'Connect to the Runtime provider.', children: _jsx(ExternalTokenSilentLogin, { message: "Connect to the Runtime provider" }) })), translator: translator }), isVariableDialogOpen && (_jsx(RuntimeCellVariablesDialog, { model: model, onClose: closeVariableDialog, preference: preference, sessionContext: sessionContext, translator: translator })), isSnippetDialogOpen && (_jsx(SnippetDialog, { language: language, model: model, snippets: snippets, onClose: closeSnippetDialog, markdownParser: markdownParser, sanitizer: sanitizer })), isKernelDialogOpen && (_jsx(RuntimeLauncherDialog, { manager: multiServiceManager.remote, onSubmit: onStartRemote, startRuntime: 'defer', submitLabel: "Assign", markdownParser: markdownParser, sanitizer: sanitizer }))] }));
103
- }
104
- export default RuntimePickerCell;
@@ -1,42 +0,0 @@
1
- import { ITranslator } from '@jupyterlab/translation';
2
- import { CommandRegistry } from '@lumino/commands';
3
- import type { IMultiServiceManager, IDatalayerSessionContext } from '../../stateful/runtimes';
4
- import { RuntimeTransfer } from './RuntimeTransfer';
5
- /**
6
- * {@link RuntimePickerNotebook} properties
7
- */
8
- export interface IRuntimePickerNotebookProps {
9
- /**
10
- * Callback to allow the user to login
11
- */
12
- logIn?: () => void;
13
- /**
14
- * Document session context
15
- */
16
- sessionContext: IDatalayerSessionContext;
17
- /**
18
- * Multi service manager
19
- */
20
- multiServiceManager: IMultiServiceManager;
21
- /**
22
- * Set the selected kernel
23
- */
24
- setValue: (v: RuntimeTransfer | Error) => void;
25
- /**
26
- * Close the dialog
27
- */
28
- close: () => void;
29
- /**
30
- * Command registry
31
- */
32
- commands: CommandRegistry;
33
- /**
34
- * Application translator
35
- */
36
- translator?: ITranslator;
37
- }
38
- /**
39
- * Runtime Picker components for a Notebook.
40
- */
41
- export declare function RuntimePickerNotebook(props: IRuntimePickerNotebookProps): JSX.Element;
42
- export default RuntimePickerNotebook;
@@ -1,232 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /*
3
- * Copyright (c) 2023-2025 Datalayer, Inc.
4
- * Distributed under the terms of the Modified BSD License.
5
- */
6
- import { useCallback, useEffect, useState } from 'react';
7
- import { ActionList, FormControl, ToggleSwitch, Tooltip, IconButton, } from '@primer/react';
8
- import { Box } from '@datalayer/primer-addons';
9
- import { AlertIcon } from '@primer/octicons-react';
10
- import { JSONExt } from '@lumino/coreutils';
11
- import { KernelExecutor } from '@datalayer/jupyter-react';
12
- import { RuntimeSnippetsFacade } from '../../stateful/jupyter/index.js';
13
- import { ExternalTokenSilentLogin } from '../../components/iam/index.js';
14
- import { useCoreStore, useIAMStore } from '../../state/index.js';
15
- import { RuntimeReservationControl, MAXIMAL_RUNTIME_TIME_RESERVATION_MINUTES, } from './RuntimeReservationControl.js';
16
- import { RuntimeVariables } from './RuntimeVariables.js';
17
- import { RuntimePickerBase } from './RuntimePickerBase.js';
18
- /**
19
- * Runtime Picker components for a Notebook.
20
- */
21
- export function RuntimePickerNotebook(props) {
22
- const { multiServiceManager, sessionContext, setValue, translator } = props;
23
- const { configuration } = useCoreStore();
24
- const { credits, refreshCredits, token, user } = useIAMStore();
25
- const [selectedRuntimeDesc, setSelectedRuntimeDesc] = useState();
26
- const [timeLimit, setTimeLimit] = useState(10);
27
- const [userStorage, setUserStorage] = useState(false);
28
- const [canTransferFrom, setTransferFrom] = useState(false);
29
- const [canTransferTo, setTransferTo] = useState(false);
30
- const [transferVariables, setTransferVariables] = useState(false);
31
- const [hasLoadedVariables, setHasLoadedVariables] = useState(false);
32
- const [kernelVariables, setRuntimeVariables] = useState();
33
- const [toTransfer, setToTransfer] = useState([]);
34
- useEffect(() => {
35
- refreshCredits();
36
- }, []);
37
- useEffect(() => {
38
- const specs = sessionContext.specsManager.specs?.kernelspecs;
39
- if (sessionContext.session?.kernel?.name && specs) {
40
- const spec = Object.values(specs).find(spec => spec?.name === sessionContext.session.kernel.name);
41
- if (spec) {
42
- setSelectedRuntimeDesc({
43
- name: spec.name,
44
- kernelId: sessionContext.session.kernel.id,
45
- location: sessionContext.location,
46
- language: spec.language,
47
- displayName: sessionContext.kernelDisplayName,
48
- });
49
- setTransferFrom(RuntimeSnippetsFacade.supports(spec.language));
50
- }
51
- }
52
- }, [sessionContext]);
53
- const listRuntimeVariables = useCallback(async () => {
54
- if (hasLoadedVariables) {
55
- return Promise.resolve();
56
- }
57
- setHasLoadedVariables(true);
58
- const connection = sessionContext.session.kernel;
59
- const spec = sessionContext.specsManager.specs.kernelspecs[connection.model.name];
60
- const snippets = new RuntimeSnippetsFacade(spec.language);
61
- const outputs = await new KernelExecutor({ connection }).execute(snippets.listVariables());
62
- const content = outputs.get(0).data['text/plain'];
63
- if (content) {
64
- setRuntimeVariables(JSON.parse(
65
- // We need to remove the quotes prior to parsing.
66
- content.slice(1, content.length - 1)));
67
- if (toTransfer.length) {
68
- const candidates = Object.keys(kernelVariables ?? {});
69
- setToTransfer(toTransfer.filter(n => candidates.includes(n)));
70
- }
71
- else {
72
- // By default select all variables.
73
- setToTransfer(Object.keys(kernelVariables ?? {}));
74
- }
75
- }
76
- else {
77
- setRuntimeVariables({});
78
- }
79
- }, [hasLoadedVariables, kernelVariables, toTransfer]);
80
- const setSelectedVariables = useCallback((l) => {
81
- if (!JSONExt.deepEqual(toTransfer, l)) {
82
- setToTransfer(l);
83
- }
84
- }, [toTransfer]);
85
- const setTransferVariable = useCallback((value) => {
86
- if (transferVariables !== value) {
87
- if (value) {
88
- listRuntimeVariables().catch(error => {
89
- console.error('Failed to list the runtime variable', error);
90
- setHasLoadedVariables(false);
91
- });
92
- }
93
- setTransferVariables(value);
94
- }
95
- }, [transferVariables]);
96
- const setRuntimeDesc = useCallback((runtimeDesc) => {
97
- if (!runtimeDesc) {
98
- if (selectedRuntimeDesc) {
99
- setSelectedRuntimeDesc(undefined);
100
- setTransferTo(false);
101
- }
102
- return;
103
- }
104
- if (selectedRuntimeDesc?.displayName !== runtimeDesc.displayName ||
105
- selectedRuntimeDesc?.kernelId !== runtimeDesc.kernelId) {
106
- setSelectedRuntimeDesc({ ...runtimeDesc });
107
- setTransferTo(RuntimeSnippetsFacade.supports(runtimeDesc.language));
108
- }
109
- }, [selectedRuntimeDesc]);
110
- const handleUserStorageChange = useCallback((e) => {
111
- e.preventDefault();
112
- setUserStorage(!userStorage);
113
- }, [userStorage]);
114
- useEffect(() => {
115
- const resolvedBurningRate = selectedRuntimeDesc?.burningRate ??
116
- multiServiceManager.remote?.environments
117
- .get()
118
- .find(env => env.name === selectedRuntimeDesc?.name)?.burning_rate;
119
- const includedRuns = user?.subscription?.usage?.included_runs ??
120
- user?.subscription?.included_runs;
121
- const currentRuns = user?.subscription?.usage?.current_runs ??
122
- user?.subscription?.current_runs ??
123
- user?.subscription?.used_runs;
124
- const hasKnownRunAllowance = typeof includedRuns === 'number';
125
- const hasRemainingRuns = hasKnownRunAllowance &&
126
- typeof currentRuns === 'number' &&
127
- includedRuns > 0 &&
128
- currentRuns < includedRuns;
129
- const hasKnownCredits = typeof credits?.available === 'number';
130
- const maxMinutes = selectedRuntimeDesc?.location === 'remote' && resolvedBurningRate
131
- ? Math.floor((credits?.available ?? 0) / resolvedBurningRate / 60.0)
132
- : undefined;
133
- const effectiveTimeLimit = selectedRuntimeDesc?.location === 'remote'
134
- ? Math.max(1, Math.min(timeLimit, maxMinutes && maxMinutes > 0 ? maxMinutes : 10))
135
- : timeLimit;
136
- const creditsLimit = selectedRuntimeDesc?.location === 'remote' && resolvedBurningRate
137
- ? Math.min(effectiveTimeLimit, MAXIMAL_RUNTIME_TIME_RESERVATION_MINUTES) *
138
- resolvedBurningRate *
139
- 60
140
- : undefined;
141
- const requiresRuntimeStart = !!selectedRuntimeDesc && !selectedRuntimeDesc.kernelId;
142
- if (requiresRuntimeStart && selectedRuntimeDesc.location === 'remote') {
143
- if (!resolvedBurningRate || !Number.isFinite(resolvedBurningRate)) {
144
- setValue({ runtime: null, selectedVariables: toTransfer });
145
- return;
146
- }
147
- if (hasKnownCredits &&
148
- hasKnownRunAllowance &&
149
- !hasRemainingRuns &&
150
- (!creditsLimit || creditsLimit <= 0)) {
151
- setValue({ runtime: null, selectedVariables: toTransfer });
152
- return;
153
- }
154
- }
155
- setValue({
156
- runtime: selectedRuntimeDesc
157
- ? {
158
- environmentName: ['browser', 'remote'].includes(selectedRuntimeDesc.location)
159
- ? `${selectedRuntimeDesc.location}-${selectedRuntimeDesc.name}`
160
- : selectedRuntimeDesc.name,
161
- id: selectedRuntimeDesc.kernelId,
162
- creditsLimit,
163
- capabilities: userStorage ? ['user_storage'] : undefined,
164
- }
165
- : null,
166
- selectedVariables: toTransfer,
167
- });
168
- }, [
169
- selectedRuntimeDesc,
170
- userStorage,
171
- toTransfer,
172
- timeLimit,
173
- multiServiceManager.remote,
174
- credits?.available,
175
- user,
176
- ]);
177
- const { kernelPreference: { canStart }, } = sessionContext;
178
- const resolvedBurningRate = selectedRuntimeDesc?.burningRate ??
179
- multiServiceManager.remote?.environments
180
- .get()
181
- .find(env => env.name === selectedRuntimeDesc?.name)?.burning_rate;
182
- const maxFromCredits = resolvedBurningRate
183
- ? Math.floor((credits?.available ?? 0) / resolvedBurningRate / 60.0)
184
- : -1;
185
- const includedRuns = user?.subscription?.usage?.included_runs ??
186
- user?.subscription?.included_runs;
187
- const currentRuns = user?.subscription?.usage?.current_runs ??
188
- user?.subscription?.current_runs ??
189
- user?.subscription?.used_runs;
190
- const hasKnownRunAllowance = typeof includedRuns === 'number';
191
- const hasRemainingRuns = hasKnownRunAllowance &&
192
- typeof currentRuns === 'number' &&
193
- includedRuns > 0 &&
194
- currentRuns < includedRuns;
195
- const hasKnownCredits = typeof credits?.available === 'number';
196
- const effectiveMaxMinutes = selectedRuntimeDesc?.location === 'remote'
197
- ? hasKnownCredits && hasKnownRunAllowance && !hasRemainingRuns
198
- ? Math.max(1, maxFromCredits)
199
- : Math.max(10, maxFromCredits > 0 ? maxFromCredits : 0)
200
- : Math.max(1, maxFromCredits);
201
- const outOfCredits = hasKnownCredits &&
202
- hasKnownRunAllowance &&
203
- !hasRemainingRuns &&
204
- maxFromCredits < Number.EPSILON;
205
- return (_jsxs(Box, { as: "form", className: "dla-Runtimes-picker", children: [_jsx(Box, { sx: { padding: 'var(--stack-padding-condensed) 0' }, children: _jsx(RuntimePickerBase, { display: "radio", disabled: canStart === false, preference: {
206
- id: sessionContext.session?.id,
207
- kernelDisplayName: sessionContext.kernelPreference.shouldStart
208
- ? sessionContext.kernelDisplayName
209
- : undefined,
210
- }, sessionContext: sessionContext, multiServiceManager: multiServiceManager, translator: translator, runtimeDesc: selectedRuntimeDesc, setRuntimeDesc: setRuntimeDesc, postActions: token || !props.logIn ? (
211
- /*
212
- <Button
213
- variant="default"
214
- onClick={e => {
215
- e.preventDefault();
216
- commands.execute(CommandIDs.launchRemoteRuntime);
217
- close();
218
- }}
219
- >
220
- Launch a New Runtime
221
- </Button>
222
- */
223
- _jsx(_Fragment, {})) : (_jsx(ActionList.Item, { onSelect: props.logIn, title: 'Connect to Runtime provider.', children: _jsx(ExternalTokenSilentLogin, { message: "Connect to the Runtime provider" }) })) }) }), !selectedRuntimeDesc?.kernelId &&
224
- selectedRuntimeDesc?.location === 'remote' && (_jsxs(_Fragment, { children: [_jsx(RuntimeReservationControl, { disabled: outOfCredits || selectedRuntimeDesc?.location !== 'remote', label: 'Time reservation', max: effectiveMaxMinutes, time: timeLimit, onTimeChange: setTimeLimit, error: outOfCredits && maxFromCredits >= 0
225
- ? 'You must add credits to your account.'
226
- : timeLimit === 0
227
- ? 'You must set a time limit.'
228
- : undefined, burningRate: selectedRuntimeDesc.burningRate }), !configuration.whiteLabel && (_jsxs(FormControl, { disabled: !!selectedRuntimeDesc?.kernelId ||
229
- selectedRuntimeDesc?.location !== 'remote', layout: "horizontal", children: [_jsxs(FormControl.Label, { id: "user-storage-picker-label", children: ["User storage", _jsx(Tooltip, { text: "The runtime will be slower to start.", direction: "e", style: { marginLeft: 3 }, children: _jsx(IconButton, { icon: AlertIcon, "aria-label": "", variant: "invisible" }) })] }), _jsx(ToggleSwitch, { disabled: !!selectedRuntimeDesc?.kernelId ||
230
- selectedRuntimeDesc?.location !== 'remote', checked: userStorage, size: "small", onClick: handleUserStorageChange, "aria-labelledby": "user-storage-picker-label" })] }))] })), canTransferFrom && canTransferTo && (_jsx(RuntimeVariables, { selectedVariables: toTransfer, setSelectVariable: setSelectedVariables, transferVariables: transferVariables, setTransferVariable: setTransferVariable, kernelVariables: kernelVariables, translator: translator }))] }));
231
- }
232
- export default RuntimePickerNotebook;
@@ -1,47 +0,0 @@
1
- /**
2
- * Maximal time reservable for a runtime in minutes.
3
- *
4
- * TODO this should be configurable
5
- */
6
- export declare const MAXIMAL_RUNTIME_TIME_RESERVATION_MINUTES: number;
7
- /**
8
- * Time control properties
9
- */
10
- export interface IKernelReservationControlProps {
11
- /**
12
- * Callback on add credits button
13
- */
14
- addCredits?: () => void;
15
- /**
16
- * Disabled state
17
- */
18
- disabled?: boolean;
19
- /**
20
- * Control error message
21
- */
22
- error?: string;
23
- /**
24
- * Control label
25
- */
26
- label: string;
27
- /**
28
- * Maximal time
29
- */
30
- max: number;
31
- /**
32
- * Callback when time value changes
33
- */
34
- onTimeChange: (value: number) => void;
35
- /**
36
- * Time control value
37
- */
38
- time: number;
39
- /**
40
- * Burning rate
41
- */
42
- burningRate?: number;
43
- }
44
- /**
45
- * Runtime reservation control
46
- */
47
- export declare function RuntimeReservationControl(props: IKernelReservationControlProps): JSX.Element;