@datalayer/core 1.0.24 → 1.1.41

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 (364) hide show
  1. package/README.md +35 -24
  2. package/lib/api/constants.d.ts +3 -0
  3. package/lib/api/constants.js +3 -0
  4. package/lib/api/index.d.ts +0 -8
  5. package/lib/api/index.js +0 -8
  6. package/lib/cli-login.js +167 -0
  7. package/lib/client/base.d.ts +0 -3
  8. package/lib/client/base.js +0 -2
  9. package/lib/client/index.d.ts +10 -98
  10. package/lib/client/index.js +12 -21
  11. package/lib/components/avatars/UserAvatar.d.ts +16 -0
  12. package/lib/components/avatars/UserAvatar.js +47 -0
  13. package/lib/components/avatars/index.d.ts +1 -0
  14. package/lib/components/avatars/index.js +1 -0
  15. package/lib/components/billing/BillableAccountSelect.js +4 -0
  16. package/lib/components/billing/index.js +4 -0
  17. package/lib/components/checkout/StripeCheckout.js +48 -2
  18. package/lib/components/context/index.d.ts +0 -1
  19. package/lib/components/context/index.js +0 -1
  20. package/lib/components/display/DisplayHandle.d.ts +12 -0
  21. package/lib/components/display/DisplayHandle.js +11 -0
  22. package/lib/components/display/LiveRelativeTime.d.ts +1 -10
  23. package/lib/components/display/LiveRelativeTime.js +5 -16
  24. package/lib/components/display/index.d.ts +1 -0
  25. package/lib/components/display/index.js +1 -0
  26. package/lib/components/flashes/index.d.ts +0 -1
  27. package/lib/components/flashes/index.js +0 -1
  28. package/lib/components/index.d.ts +2 -0
  29. package/lib/components/index.js +2 -0
  30. package/lib/components/principal/Principal.d.ts +7 -0
  31. package/lib/components/principal/Principal.js +153 -16
  32. package/lib/components/principal/PrincipalAvatar.d.ts +1 -1
  33. package/lib/components/principal/PrincipalAvatar.js +4 -28
  34. package/lib/components/principal/PrincipalBadge.js +4 -4
  35. package/lib/components/principal/PrincipalDetailsOverlay.d.ts +4 -2
  36. package/lib/components/principal/PrincipalDetailsOverlay.js +27 -7
  37. package/lib/components/principal/PrincipalSwitcherMenu.js +76 -39
  38. package/lib/components/progress/index.d.ts +0 -1
  39. package/lib/components/progress/index.js +0 -1
  40. package/lib/components/sharing/ShareAccessComponent.d.ts +3 -2
  41. package/lib/components/sharing/ShareAccessComponent.js +180 -133
  42. package/lib/components/sharing/SharingEditor.js +4 -0
  43. package/lib/components/snippets/index.d.ts +1 -1
  44. package/lib/components/snippets/index.js +1 -1
  45. package/lib/components/students/StudentResultCircle.d.ts +21 -0
  46. package/lib/components/students/StudentResultCircle.js +59 -0
  47. package/lib/components/students/index.d.ts +1 -1
  48. package/lib/components/students/index.js +1 -1
  49. package/lib/components/time/LiveRelativeTime.d.ts +14 -0
  50. package/lib/components/time/LiveRelativeTime.js +43 -0
  51. package/lib/components/time/index.d.ts +1 -0
  52. package/lib/components/time/index.js +9 -0
  53. package/lib/components/timeline/Timeline.d.ts +20 -0
  54. package/lib/components/timeline/Timeline.js +90 -0
  55. package/lib/components/timeline/index.d.ts +1 -0
  56. package/lib/components/timeline/index.js +9 -0
  57. package/lib/components/tokens/index.d.ts +1 -1
  58. package/lib/components/tokens/index.js +1 -1
  59. package/lib/components/toolbars/index.d.ts +1 -3
  60. package/lib/components/toolbars/index.js +1 -3
  61. package/lib/hooks/cacheConverters.d.ts +21 -0
  62. package/lib/hooks/cacheConverters.js +110 -0
  63. package/lib/hooks/index.d.ts +0 -2
  64. package/lib/hooks/index.js +0 -2
  65. package/lib/hooks/useCache.d.ts +65 -36
  66. package/lib/hooks/useCache.js +424 -65
  67. package/lib/hooks/useDatalayer.js +3 -1
  68. package/lib/hooks/useIAM.js +1 -3
  69. package/lib/hooks/useLocationHandles.d.ts +3 -1
  70. package/lib/hooks/useLocationHandles.js +2 -1
  71. package/lib/hooks/usePrincipalStore.d.ts +2 -2
  72. package/lib/hooks/usePrincipalStore.js +97 -14
  73. package/lib/hooks/useProjectStore.d.ts +1 -1
  74. package/lib/hooks/useSelectedPrincipal.js +1 -1
  75. package/lib/hooks/useUser.js +19 -2
  76. package/lib/index.d.ts +1 -6
  77. package/lib/index.js +1 -13
  78. package/lib/main.js +3 -3
  79. package/lib/mocks/index.js +1 -1
  80. package/lib/mocks/models/index.d.ts +0 -1
  81. package/lib/mocks/models/index.js +0 -1
  82. package/lib/models/Datasource.d.ts +2 -2
  83. package/lib/models/IAM.d.ts +1 -1
  84. package/lib/models/IAMToken.d.ts +1 -1
  85. package/lib/models/School.d.ts +12 -3
  86. package/lib/models/Secret.d.ts +2 -2
  87. package/lib/models/Student.d.ts +13 -3
  88. package/lib/models/Usage.d.ts +11 -1
  89. package/lib/models/UserDTO.d.ts +2 -2
  90. package/lib/models/index.d.ts +0 -30
  91. package/lib/models/index.js +0 -30
  92. package/lib/routes/index.d.ts +1 -0
  93. package/lib/routes/index.js +1 -0
  94. package/lib/routes/publicPaths.d.ts +23 -0
  95. package/lib/routes/publicPaths.js +74 -0
  96. package/lib/state/State.d.ts +0 -12
  97. package/lib/state/State.js +0 -12
  98. package/lib/state/substates/CoreState.js +1 -1
  99. package/lib/state/substates/LayoutState.d.ts +12 -1
  100. package/lib/state/substates/index.d.ts +0 -7
  101. package/lib/state/substates/index.js +0 -7
  102. package/lib/utils/Date.d.ts +7 -0
  103. package/lib/utils/Date.js +43 -10
  104. package/lib/utils/Handles.js +3 -1
  105. package/lib/utils/index.d.ts +1 -1
  106. package/lib/utils/index.js +1 -1
  107. package/lib/views/api-keys/APIKeyEdit.d.ts +8 -0
  108. package/lib/views/{iam-tokens/IAMTokenEdit.js → api-keys/APIKeyEdit.js} +31 -31
  109. package/lib/views/api-keys/APIKeyNew.d.ts +8 -0
  110. package/lib/views/api-keys/APIKeyNew.js +143 -0
  111. package/lib/views/api-keys/APIKeys.d.ts +12 -0
  112. package/lib/views/api-keys/APIKeys.js +128 -0
  113. package/lib/views/api-keys/APIKeysStandalone.d.ts +2 -0
  114. package/lib/views/api-keys/APIKeysStandalone.js +117 -0
  115. package/lib/views/api-keys/index.d.ts +3 -0
  116. package/lib/{mocks/jupyter → views/api-keys}/index.js +3 -1
  117. package/lib/views/datasources/DatasourceDetail.d.ts +1 -1
  118. package/lib/views/datasources/DatasourceNew.d.ts +1 -1
  119. package/lib/views/datasources/Datasources.d.ts +1 -1
  120. package/lib/views/datasources/Datasources.js +12 -3
  121. package/lib/views/iam/SignInSimple.d.ts +37 -1
  122. package/lib/views/iam/SignInSimple.js +110 -12
  123. package/package.json +5 -3
  124. package/lib/App.css +0 -47
  125. package/lib/App.d.ts +0 -3
  126. package/lib/App.js +0 -21
  127. package/lib/api/runtimes/checkpoints.d.ts +0 -122
  128. package/lib/api/runtimes/checkpoints.js +0 -118
  129. package/lib/api/runtimes/environments.d.ts +0 -9
  130. package/lib/api/runtimes/environments.js +0 -29
  131. package/lib/api/runtimes/healthz.d.ts +0 -15
  132. package/lib/api/runtimes/healthz.js +0 -44
  133. package/lib/api/runtimes/index.d.ts +0 -12
  134. package/lib/api/runtimes/index.js +0 -16
  135. package/lib/api/runtimes/runtimes.d.ts +0 -138
  136. package/lib/api/runtimes/runtimes.js +0 -230
  137. package/lib/api/runtimes/snapshots.d.ts +0 -38
  138. package/lib/api/runtimes/snapshots.js +0 -82
  139. package/lib/api/spacer/documents.d.ts +0 -12
  140. package/lib/api/spacer/documents.js +0 -43
  141. package/lib/api/spacer/healthz.d.ts +0 -15
  142. package/lib/api/spacer/healthz.js +0 -44
  143. package/lib/api/spacer/index.d.ts +0 -15
  144. package/lib/api/spacer/index.js +0 -19
  145. package/lib/api/spacer/items.d.ts +0 -25
  146. package/lib/api/spacer/items.js +0 -55
  147. package/lib/api/spacer/lexicals.d.ts +0 -34
  148. package/lib/api/spacer/lexicals.js +0 -89
  149. package/lib/api/spacer/notebooks.d.ts +0 -34
  150. package/lib/api/spacer/notebooks.js +0 -89
  151. package/lib/api/spacer/spaces.d.ts +0 -84
  152. package/lib/api/spacer/spaces.js +0 -170
  153. package/lib/api/spacer/users.d.ts +0 -9
  154. package/lib/api/spacer/users.js +0 -29
  155. package/lib/client/mixins/RuntimesMixin.d.ts +0 -93
  156. package/lib/client/mixins/RuntimesMixin.js +0 -229
  157. package/lib/client/mixins/SpacerMixin.d.ts +0 -210
  158. package/lib/client/mixins/SpacerMixin.js +0 -615
  159. package/lib/client/utils/spacerUtils.d.ts +0 -18
  160. package/lib/client/utils/spacerUtils.js +0 -32
  161. package/lib/collaboration/DatalayerCollaboration.d.ts +0 -13
  162. package/lib/collaboration/DatalayerCollaboration.js +0 -28
  163. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +0 -60
  164. package/lib/collaboration/DatalayerCollaborationProvider.js +0 -163
  165. package/lib/collaboration/index.d.ts +0 -2
  166. package/lib/collaboration/index.js +0 -6
  167. package/lib/components/context/SpaceSelect.d.ts +0 -2
  168. package/lib/components/context/SpaceSelect.js +0 -42
  169. package/lib/components/flashes/FlashDisclaimer.d.ts +0 -2
  170. package/lib/components/flashes/FlashDisclaimer.js +0 -17
  171. package/lib/components/icons/ArtifactIcon.d.ts +0 -10
  172. package/lib/components/icons/ArtifactIcon.js +0 -58
  173. package/lib/components/icons/index.d.ts +0 -1
  174. package/lib/components/icons/index.js +0 -5
  175. package/lib/components/nbgrader/NbGradesDetails.d.ts +0 -5
  176. package/lib/components/nbgrader/NbGradesDetails.js +0 -14
  177. package/lib/components/nbgrader/index.d.ts +0 -1
  178. package/lib/components/nbgrader/index.js +0 -5
  179. package/lib/components/progress/CreditsIndicator.d.ts +0 -33
  180. package/lib/components/progress/CreditsIndicator.js +0 -23
  181. package/lib/components/runtimes/RuntimeCellVariables.d.ts +0 -39
  182. package/lib/components/runtimes/RuntimeCellVariables.js +0 -172
  183. package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +0 -37
  184. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +0 -101
  185. package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +0 -57
  186. package/lib/components/runtimes/RuntimeLauncherDialog.js +0 -275
  187. package/lib/components/runtimes/RuntimePickerBase.d.ts +0 -69
  188. package/lib/components/runtimes/RuntimePickerBase.js +0 -122
  189. package/lib/components/runtimes/RuntimePickerCell.d.ts +0 -34
  190. package/lib/components/runtimes/RuntimePickerCell.js +0 -104
  191. package/lib/components/runtimes/RuntimePickerNotebook.d.ts +0 -42
  192. package/lib/components/runtimes/RuntimePickerNotebook.js +0 -232
  193. package/lib/components/runtimes/RuntimeReservationControl.d.ts +0 -47
  194. package/lib/components/runtimes/RuntimeReservationControl.js +0 -42
  195. package/lib/components/runtimes/RuntimeSimplePicker.d.ts +0 -38
  196. package/lib/components/runtimes/RuntimeSimplePicker.js +0 -155
  197. package/lib/components/runtimes/RuntimeTransfer.d.ts +0 -16
  198. package/lib/components/runtimes/RuntimeTransfer.js +0 -5
  199. package/lib/components/runtimes/RuntimeUtils.d.ts +0 -17
  200. package/lib/components/runtimes/RuntimeUtils.js +0 -178
  201. package/lib/components/runtimes/RuntimeVariables.d.ts +0 -38
  202. package/lib/components/runtimes/RuntimeVariables.js +0 -75
  203. package/lib/components/runtimes/index.d.ts +0 -11
  204. package/lib/components/runtimes/index.js +0 -15
  205. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +0 -33
  206. package/lib/components/snapshots/SandboxSnapshotMenu.js +0 -169
  207. package/lib/components/snapshots/index.d.ts +0 -1
  208. package/lib/components/snapshots/index.js +0 -5
  209. package/lib/components/snippets/SnippetDialog.d.ts +0 -42
  210. package/lib/components/snippets/SnippetDialog.js +0 -42
  211. package/lib/components/students/StudentItemStatus.d.ts +0 -7
  212. package/lib/components/students/StudentItemStatus.js +0 -66
  213. package/lib/components/tokens/SpaceVariantToken.d.ts +0 -5
  214. package/lib/components/tokens/SpaceVariantToken.js +0 -23
  215. package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +0 -4
  216. package/lib/components/toolbars/AssignmentEditorToolbar.js +0 -18
  217. package/lib/components/toolbars/DocumentEditorToolbar.d.ts +0 -2
  218. package/lib/components/toolbars/DocumentEditorToolbar.js +0 -12
  219. package/lib/components/toolbars/NotebookEditorToolbar.d.ts +0 -29
  220. package/lib/components/toolbars/NotebookEditorToolbar.js +0 -30
  221. package/lib/examples/CellExample.d.ts +0 -6
  222. package/lib/examples/CellExample.js +0 -20
  223. package/lib/examples/NotebookExample.d.ts +0 -6
  224. package/lib/examples/NotebookExample.js +0 -19
  225. package/lib/examples/lexical-theme.css +0 -436
  226. package/lib/examples/notebooks/IPyWidgetsExample.ipynb.json +0 -101
  227. package/lib/examples/notebooks/IPyWidgetsExampleWithState.ipynb.json +0 -112
  228. package/lib/examples/notebooks/Lite.ipynb.json +0 -128
  229. package/lib/examples/notebooks/Matplotlib.ipynb.json +0 -137
  230. package/lib/examples/notebooks/NotebookExample1.ipynb.json +0 -126
  231. package/lib/examples/notebooks/NotebookExample2.ipynb.json +0 -48
  232. package/lib/examples/notebooks/NotebookOutputs.ipynb.json +0 -49
  233. package/lib/examples/notebooks/NotebookToCExample.ipynb.json +0 -102
  234. package/lib/examples/notebooks/PyGWalker.ipynb.json +0 -55
  235. package/lib/hooks/useCellOutputshot.d.ts +0 -4
  236. package/lib/hooks/useCellOutputshot.js +0 -25
  237. package/lib/hooks/useProjects.d.ts +0 -628
  238. package/lib/hooks/useProjects.js +0 -190
  239. package/lib/hooks/useRuntimes.d.ts +0 -5
  240. package/lib/hooks/useRuntimes.js +0 -34
  241. package/lib/mocks/models/CourseMock.d.ts +0 -6
  242. package/lib/mocks/models/CourseMock.js +0 -29
  243. package/lib/mocks/models/SpaceMock.d.ts +0 -6
  244. package/lib/mocks/models/SpaceMock.js +0 -25
  245. package/lib/models/Assignment.d.ts +0 -7
  246. package/lib/models/Assignment.js +0 -5
  247. package/lib/models/Cell.d.ts +0 -8
  248. package/lib/models/Cell.js +0 -5
  249. package/lib/models/CodeBlock.d.ts +0 -10
  250. package/lib/models/CodeBlock.js +0 -5
  251. package/lib/models/CodeSandboxSnapshot.d.ts +0 -92
  252. package/lib/models/CodeSandboxSnapshot.js +0 -13
  253. package/lib/models/CodeSandboxSnapshotDTO.d.ts +0 -173
  254. package/lib/models/CodeSandboxSnapshotDTO.js +0 -139
  255. package/lib/models/CodefeedBlocks.d.ts +0 -7
  256. package/lib/models/CodefeedBlocks.js +0 -5
  257. package/lib/models/Content.d.ts +0 -5
  258. package/lib/models/Content.js +0 -5
  259. package/lib/models/Course.d.ts +0 -17
  260. package/lib/models/Course.js +0 -5
  261. package/lib/models/Dataset.d.ts +0 -16
  262. package/lib/models/Dataset.js +0 -5
  263. package/lib/models/Document.d.ts +0 -8
  264. package/lib/models/Document.js +0 -5
  265. package/lib/models/Environment.d.ts +0 -86
  266. package/lib/models/Environment.js +0 -5
  267. package/lib/models/EnvironmentDTO.d.ts +0 -125
  268. package/lib/models/EnvironmentDTO.js +0 -88
  269. package/lib/models/Exercise.d.ts +0 -16
  270. package/lib/models/Exercise.js +0 -5
  271. package/lib/models/Item.d.ts +0 -20
  272. package/lib/models/Item.js +0 -5
  273. package/lib/models/ItemDTO.d.ts +0 -74
  274. package/lib/models/ItemDTO.js +0 -186
  275. package/lib/models/ItemType.d.ts +0 -2
  276. package/lib/models/ItemType.js +0 -5
  277. package/lib/models/Lesson.d.ts +0 -5
  278. package/lib/models/Lesson.js +0 -5
  279. package/lib/models/LexicalDTO.d.ts +0 -155
  280. package/lib/models/LexicalDTO.js +0 -157
  281. package/lib/models/Library.d.ts +0 -10
  282. package/lib/models/Library.js +0 -5
  283. package/lib/models/Notebook.d.ts +0 -11
  284. package/lib/models/Notebook.js +0 -5
  285. package/lib/models/NotebookDTO.d.ts +0 -96
  286. package/lib/models/NotebookDTO.js +0 -153
  287. package/lib/models/Page.d.ts +0 -41
  288. package/lib/models/Page.js +0 -25
  289. package/lib/models/PageTag.d.ts +0 -19
  290. package/lib/models/PageTag.js +0 -94
  291. package/lib/models/ProjectDTO.d.ts +0 -89
  292. package/lib/models/ProjectDTO.js +0 -131
  293. package/lib/models/Runtime.d.ts +0 -123
  294. package/lib/models/Runtime.js +0 -18
  295. package/lib/models/RuntimeDTO.d.ts +0 -191
  296. package/lib/models/RuntimeDTO.js +0 -204
  297. package/lib/models/Space.d.ts +0 -35
  298. package/lib/models/Space.js +0 -66
  299. package/lib/models/SpaceDTO.d.ts +0 -334
  300. package/lib/models/SpaceDTO.js +0 -244
  301. package/lib/models/SpaceItem.d.ts +0 -10
  302. package/lib/models/SpaceItem.js +0 -5
  303. package/lib/models/SpaceMember.d.ts +0 -6
  304. package/lib/models/SpaceMember.js +0 -5
  305. package/lib/models/StudentItem.d.ts +0 -21
  306. package/lib/models/StudentItem.js +0 -5
  307. package/lib/services/DatalayerServiceManager.d.ts +0 -22
  308. package/lib/services/DatalayerServiceManager.js +0 -69
  309. package/lib/services/index.d.ts +0 -4
  310. package/lib/services/index.js +0 -7
  311. package/lib/services/reconnectToRuntime.d.ts +0 -32
  312. package/lib/services/reconnectToRuntime.js +0 -59
  313. package/lib/state/substates/CellState.d.ts +0 -12
  314. package/lib/state/substates/CellState.js +0 -22
  315. package/lib/state/substates/DocumentState.d.ts +0 -10
  316. package/lib/state/substates/DocumentState.js +0 -14
  317. package/lib/state/substates/GradeState.d.ts +0 -10
  318. package/lib/state/substates/GradeState.js +0 -14
  319. package/lib/state/substates/JupyterLabState.d.ts +0 -16
  320. package/lib/state/substates/JupyterLabState.js +0 -17
  321. package/lib/state/substates/NbformatState.d.ts +0 -13
  322. package/lib/state/substates/NbformatState.js +0 -16
  323. package/lib/state/substates/RuntimesState.d.ts +0 -79
  324. package/lib/state/substates/RuntimesState.js +0 -180
  325. package/lib/state/substates/SpaceState.d.ts +0 -11
  326. package/lib/state/substates/SpaceState.js +0 -16
  327. package/lib/stateful/index.d.ts +0 -2
  328. package/lib/stateful/index.js +0 -6
  329. package/lib/stateful/jupyter/exec/Python.d.ts +0 -5
  330. package/lib/stateful/jupyter/exec/Python.js +0 -100
  331. package/lib/stateful/jupyter/exec/Snippets.d.ts +0 -105
  332. package/lib/stateful/jupyter/exec/Snippets.js +0 -101
  333. package/lib/stateful/jupyter/exec/index.d.ts +0 -2
  334. package/lib/stateful/jupyter/exec/index.js +0 -6
  335. package/lib/stateful/jupyter/index.d.ts +0 -2
  336. package/lib/stateful/jupyter/index.js +0 -6
  337. package/lib/stateful/jupyter/kernelsHandler.d.ts +0 -8
  338. package/lib/stateful/jupyter/kernelsHandler.js +0 -39
  339. package/lib/stateful/runtimes/actions.d.ts +0 -102
  340. package/lib/stateful/runtimes/actions.js +0 -249
  341. package/lib/stateful/runtimes/apis.d.ts +0 -273
  342. package/lib/stateful/runtimes/apis.js +0 -5
  343. package/lib/stateful/runtimes/index.d.ts +0 -5
  344. package/lib/stateful/runtimes/index.js +0 -9
  345. package/lib/stateful/runtimes/settings.d.ts +0 -15
  346. package/lib/stateful/runtimes/settings.js +0 -31
  347. package/lib/stateful/runtimes/snapshots.d.ts +0 -25
  348. package/lib/stateful/runtimes/snapshots.js +0 -150
  349. package/lib/stateful/runtimes/utils.d.ts +0 -7
  350. package/lib/stateful/runtimes/utils.js +0 -14
  351. package/lib/utils/Cells.d.ts +0 -2
  352. package/lib/utils/Cells.js +0 -28
  353. package/lib/views/iam-tokens/IAMTokenEdit.d.ts +0 -6
  354. package/lib/views/iam-tokens/IAMTokenNew.d.ts +0 -8
  355. package/lib/views/iam-tokens/IAMTokenNew.js +0 -118
  356. package/lib/views/iam-tokens/IAMTokens.d.ts +0 -12
  357. package/lib/views/iam-tokens/IAMTokens.js +0 -87
  358. package/lib/views/iam-tokens/Tokens.d.ts +0 -2
  359. package/lib/views/iam-tokens/Tokens.js +0 -85
  360. package/lib/views/iam-tokens/index.d.ts +0 -3
  361. package/lib/views/iam-tokens/index.js +0 -7
  362. /package/lib/{mocks/jupyter/index.d.ts → cli-login.d.ts} +0 -0
  363. /package/lib/utils/{logger.d.ts → Logger.d.ts} +0 -0
  364. /package/lib/utils/{logger.js → Logger.js} +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;