@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,10 +1,10 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /*
3
3
  * Copyright (c) 2023-2025 Datalayer, Inc.
4
4
  * Distributed under the terms of the Modified BSD License.
5
5
  */
6
6
  import { useState, useEffect, useRef } from 'react';
7
- import { PageLayout, Button, IconButton, TextInput, Text, Label, RelativeTime, } from '@primer/react';
7
+ import { PageLayout, Button, IconButton, Spinner, TextInput, Text, Label, RelativeTime, } from '@primer/react';
8
8
  import { Blankslate, Dialog, PageHeader, Table, DataTable, } from '@primer/react/experimental';
9
9
  import { Box } from '@datalayer/primer-addons';
10
10
  import { EditIcon } from '@datalayer/icons-react';
@@ -20,6 +20,10 @@ const APIKeysTable = ({ apiKeysListRoute, showTitle = true, }) => {
20
20
  const [deletingAPIKey, setDeletingAPIKey] = useState(null);
21
21
  const [deleteNameConfirm, setDeleteNameConfirm] = useState('');
22
22
  const returnFocusRef = useRef(null);
23
+ const showInitialSpinner = apiKeys.length === 0
24
+ && (getAPIKeysQuery.isLoading
25
+ || getAPIKeysQuery.isFetching
26
+ || !Array.isArray(getAPIKeysQuery.data));
23
27
  useEffect(() => {
24
28
  if (getAPIKeysQuery.data) {
25
29
  const normalized = getAPIKeysQuery.data.filter((apiKey) => Boolean(apiKey));
@@ -57,7 +61,12 @@ const APIKeysTable = ({ apiKeysListRoute, showTitle = true, }) => {
57
61
  },
58
62
  });
59
63
  };
60
- return apiKeys.length === 0 ? (_jsxs(Blankslate, { border: true, spacious: true, children: [showTitle && _jsx(Blankslate.Heading, { children: "API Keys" }), _jsx(Blankslate.Description, { children: _jsx(Text, { sx: { textAlign: 'center' }, children: "No API Keys found." }) })] })) : (_jsxs(_Fragment, { children: [_jsxs(Table.Container, { children: [showTitle && (_jsxs(_Fragment, { children: [_jsx(Table.Title, { as: "h2", id: "api-keys", children: "API Keys" }), _jsx(Table.Subtitle, { as: "p", id: "api-keys-subtitle", children: "Your API keys." })] })), _jsx(DataTable, { "aria-labelledby": "api-keys", "aria-describedby": "api-keys-subtitle", data: apiKeys, columns: [
64
+ return apiKeys.length === 0 ? (_jsx(Blankslate, { border: true, spacious: true, children: showInitialSpinner ? (_jsx(Box, { sx: {
65
+ display: 'flex',
66
+ alignItems: 'center',
67
+ justifyContent: 'center',
68
+ minHeight: '40px',
69
+ }, children: _jsx(Spinner, {}) })) : (_jsxs(_Fragment, { children: [showTitle && _jsx(Blankslate.Heading, { children: "API Keys" }), _jsx(Blankslate.Description, { children: _jsx(Text, { sx: { textAlign: 'center' }, children: "No API Keys found." }) })] })) })) : (_jsxs(_Fragment, { children: [_jsxs(Table.Container, { children: [showTitle && (_jsxs(_Fragment, { children: [_jsx(Table.Title, { as: "h2", id: "api-keys", children: "API Keys" }), _jsx(Table.Subtitle, { as: "p", id: "api-keys-subtitle", children: "Your API keys." })] })), _jsx(DataTable, { "aria-labelledby": "api-keys", "aria-describedby": "api-keys-subtitle", data: apiKeys, columns: [
61
70
  {
62
71
  header: 'Type',
63
72
  field: 'variant',
@@ -2,7 +2,7 @@ export type DatasourceDetailProps = {
2
2
  /** Optional principal uid used to scope datasource reads/updates. */
3
3
  principalUid?: string;
4
4
  /** Optional principal kind used to scope datasource reads/updates. */
5
- principalKind?: 'user' | 'organization' | 'team';
5
+ principalKind?: 'personal' | 'organization' | 'team';
6
6
  };
7
7
  export declare const DatasourceDetail: ({ principalUid, principalKind, }?: DatasourceDetailProps) => import("react/jsx-runtime").JSX.Element;
8
8
  export default DatasourceDetail;
@@ -7,7 +7,7 @@ export type DatasourceNewProps = {
7
7
  /** Optional principal uid used to scope datasource creation. */
8
8
  principalUid?: string;
9
9
  /** Optional principal kind used to scope datasource creation. */
10
- principalKind?: 'user' | 'organization' | 'team';
10
+ principalKind?: 'personal' | 'organization' | 'team';
11
11
  /** Optional contextual principal summary rendered below the page intro. */
12
12
  accountPrincipal?: ReactNode;
13
13
  };
@@ -6,7 +6,7 @@ export type DatasourcesProps = {
6
6
  /** Optional principal uid used to scope datasource reads. */
7
7
  principalUid?: string;
8
8
  /** Optional principal kind used to scope datasource reads. */
9
- principalKind?: 'user' | 'organization' | 'team';
9
+ principalKind?: 'personal' | 'organization' | 'team';
10
10
  };
11
11
  export declare const Datasources: ({ newDatasourceRoute, datasourcesListRoute, principalUid, principalKind, }?: DatasourcesProps) => import("react/jsx-runtime").JSX.Element;
12
12
  export default Datasources;
@@ -1,10 +1,10 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /*
3
3
  * Copyright (c) 2023-2025 Datalayer, Inc.
4
4
  * Distributed under the terms of the Modified BSD License.
5
5
  */
6
6
  import { useState, useEffect } from 'react';
7
- import { PageLayout, Button, IconButton, Text, Label, Heading, } from '@primer/react';
7
+ import { PageLayout, Button, IconButton, Spinner, Text, Label, Heading, } from '@primer/react';
8
8
  import { Blankslate, Table, DataTable } from '@primer/react/experimental';
9
9
  import { DatabaseIcon } from '@primer/octicons-react';
10
10
  import { Box } from '@datalayer/primer-addons';
@@ -15,12 +15,21 @@ const DatasourcesTable = ({ datasourcesListRoute, principalUid, principalKind, }
15
15
  const datasourcesQuery = useDatasources({ principalUid, principalKind });
16
16
  const navigate = useNavigate();
17
17
  const [datasources, setDatasources] = useState([]);
18
+ const showInitialSpinner = datasources.length === 0
19
+ && (datasourcesQuery.isLoading
20
+ || datasourcesQuery.isFetching
21
+ || !Array.isArray(datasourcesQuery.data));
18
22
  useEffect(() => {
19
23
  if (datasourcesQuery.data) {
20
24
  setDatasources(datasourcesQuery.data || []);
21
25
  }
22
26
  }, [datasourcesQuery.data]);
23
- return datasources.length === 0 ? (_jsxs(Blankslate, { border: true, spacious: true, children: [_jsx(Blankslate.Heading, { children: "Datasources" }), _jsx(Blankslate.Description, { children: _jsx(Text, { sx: { textAlign: 'center' }, children: "No Datasources found." }) })] })) : (_jsx(Table.Container, { children: _jsx(DataTable, { "aria-labelledby": "teams", "aria-describedby": "teams-subtitle", data: datasources, columns: [
27
+ return datasources.length === 0 ? (_jsx(Blankslate, { border: true, spacious: true, children: showInitialSpinner ? (_jsx(Box, { sx: {
28
+ display: 'flex',
29
+ alignItems: 'center',
30
+ justifyContent: 'center',
31
+ minHeight: '40px',
32
+ }, children: _jsx(Spinner, {}) })) : (_jsxs(_Fragment, { children: [_jsx(Blankslate.Heading, { children: "Datasources" }), _jsx(Blankslate.Description, { children: _jsx(Text, { sx: { textAlign: 'center' }, children: "No Datasources found." }) })] })) })) : (_jsx(Table.Container, { children: _jsx(DataTable, { "aria-labelledby": "teams", "aria-describedby": "teams-subtitle", data: datasources, columns: [
24
33
  // @ts-ignore
25
34
  {
26
35
  header: 'Type',
@@ -5,7 +5,7 @@
5
5
  * `{ handle, password }`, then calls `onSignIn(token, handle)` on
6
6
  * success so the caller can persist credentials as needed.
7
7
  *
8
- * @module views/signin
8
+ * @module views/iam
9
9
  */
10
10
  import React from 'react';
11
11
  export interface SignInSimpleProps {
@@ -25,19 +25,55 @@ export interface SignInSimpleProps {
25
25
  * `{ success: boolean; token?: string; message?: string }`.
26
26
  */
27
27
  loginUrl?: string;
28
+ /**
29
+ * Optional product/app name shown as heading.
30
+ */
31
+ name?: string;
28
32
  /**
29
33
  * Optional heading text. Defaults to `"Datalayer OTEL"`.
34
+ * @deprecated Use `name`.
30
35
  */
31
36
  title?: string;
32
37
  /**
33
38
  * Optional subtitle / description.
34
39
  */
35
40
  description?: string;
41
+ /**
42
+ * Optional icon element rendered next to the heading.
43
+ */
44
+ icon?: React.ReactNode;
36
45
  /**
37
46
  * Leading icon element rendered next to the title.
38
47
  * Defaults to `<TelescopeIcon size={24} />`.
48
+ * @deprecated Use `icon`.
39
49
  */
40
50
  leadingIcon?: React.ReactNode;
51
+ /**
52
+ * Show GitHub OAuth sign-in button.
53
+ */
54
+ github?: boolean;
55
+ /**
56
+ * Show Google OAuth sign-in button.
57
+ */
58
+ google?: boolean;
59
+ /**
60
+ * Show LinkedIn OAuth sign-in button.
61
+ */
62
+ linkedin?: boolean;
63
+ /**
64
+ * Show API key sign-in button.
65
+ */
66
+ apiKey?: boolean;
67
+ /**
68
+ * Show sign up button.
69
+ */
70
+ signUp?: boolean;
71
+ /**
72
+ * Optional target route to navigate to after social sign-in callback.
73
+ * - `undefined` keeps current behavior (use current route when not `/`).
74
+ * - `null`/empty disables forwarding any callback navigation target.
75
+ */
76
+ socialSignInNavigationTarget?: string | null;
41
77
  }
42
78
  export declare const SignInSimple: React.FC<SignInSimpleProps>;
43
79
  export default SignInSimple;
@@ -10,29 +10,122 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
10
10
  * `{ handle, password }`, then calls `onSignIn(token, handle)` on
11
11
  * success so the caller can persist credentials as needed.
12
12
  *
13
- * @module views/signin
13
+ * @module views/iam
14
14
  */
15
15
  import { useState, useCallback, useRef, useMemo, useEffect, } from 'react';
16
+ import { PageConfig, URLExt } from '@jupyterlab/coreutils';
16
17
  import { Box, Button, FormControl, Heading, Text, Textarea, TextInput, } from '@primer/react';
17
18
  import { EyeIcon, EyeClosedIcon, KeyIcon, LinkExternalIcon, TelescopeIcon, } from '@primer/octicons-react';
18
- import { coreStore } from '../../state/index.js';
19
+ import { GithubMarkIcon, LinkedInGreyIcon } from '@datalayer/icons-react';
20
+ import { isInsideJupyterLab } from '../../utils/Jupyter.js';
21
+ const GoogleIcon = () => (_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", preserveAspectRatio: "xMidYMid", viewBox: "0 0 256 262", height: "16px", fill: "currentColor", "aria-hidden": "true", children: [_jsx("path", { fill: "currentColor", d: "M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622 38.755 30.023 2.685.268c24.659-22.774 38.875-56.282 38.875-96.027" }), _jsx("path", { fill: "currentColor", d: "M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055-34.523 0-63.824-22.773-74.269-54.25l-1.531.13-40.298 31.187-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1" }), _jsx("path", { fill: "currentColor", d: "M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82 0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602l42.356-32.782" }), _jsx("path", { fill: "currentColor", d: "M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0 79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251" })] }));
22
+ const OAUTH2_PROVIDERS = {
23
+ github: {
24
+ name: 'github',
25
+ oauth2CallbackServerRoute: 'jupyter_iam/oauth2/callback',
26
+ oauth2CallbackUIRoute: '/iam/oauth2/github/callback',
27
+ },
28
+ google: {
29
+ name: 'google',
30
+ oauth2CallbackServerRoute: 'jupyter_iam/oauth2/callback',
31
+ oauth2CallbackUIRoute: '/iam/oauth2/google/callback',
32
+ },
33
+ linkedin: {
34
+ name: 'linkedin',
35
+ oauth2CallbackServerRoute: 'jupyter_iam/oauth2/callback',
36
+ oauth2CallbackUIRoute: '/iam/oauth2/linkedin/callback',
37
+ },
38
+ };
39
+ const getIAMUrlFromDocumentConfig = () => {
40
+ if (typeof document === 'undefined') {
41
+ return '';
42
+ }
43
+ const configScript = document.getElementById('datalayer-config-data');
44
+ if (!configScript?.textContent) {
45
+ return '';
46
+ }
47
+ try {
48
+ const config = JSON.parse(configScript.textContent);
49
+ return String(config?.iamUrl || '').replace(/\/$/, '');
50
+ }
51
+ catch {
52
+ return '';
53
+ }
54
+ };
19
55
  // ── Component ────────────────────────────────────────────────────────
20
- export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp, title = 'Datalayer OTEL', description = 'Sign in to access the observability dashboard.', leadingIcon = _jsx(TelescopeIcon, { size: 24 }), }) => {
56
+ export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp, name, title = 'Datalayer OTEL', description = 'Sign in to access the observability dashboard.', icon, leadingIcon = _jsx(TelescopeIcon, { size: 24 }), github = false, google = false, linkedin = false, apiKey = false, signUp = true, socialSignInNavigationTarget, }) => {
57
+ const headingText = name ?? title;
58
+ const headingIcon = icon ?? leadingIcon;
21
59
  const loginUrl = useMemo(() => {
22
60
  if (loginUrlProp)
23
61
  return loginUrlProp;
24
- const iamRunUrl = coreStore.getState().configuration?.iamRunUrl;
25
- return iamRunUrl ? `${iamRunUrl}/api/iam/v1/login` : '/api/iam/v1/login';
62
+ const iamUrl = getIAMUrlFromDocumentConfig();
63
+ return iamUrl ? `${iamUrl}/api/iam/v1/login` : '/api/iam/v1/login';
26
64
  }, [loginUrlProp]);
27
65
  const [handle, setHandle] = useState('');
28
66
  const [password, setPassword] = useState('');
29
67
  const [showPassword, setShowPassword] = useState(false);
30
68
  const [loading, setLoading] = useState(false);
69
+ const [socialLoading, setSocialLoading] = useState(false);
31
70
  const [error, setError] = useState(null);
32
71
  // API Key dialog state
33
72
  const [showApiKeyDialog, setShowApiKeyDialog] = useState(false);
34
- const [apiKey, setApiKey] = useState('');
73
+ const [apiKeyValue, setApiKeyValue] = useState('');
35
74
  const apiKeyRef = useRef(null);
75
+ const buildCallbackURI = useCallback((providerSpec) => {
76
+ if (isInsideJupyterLab()) {
77
+ return URLExt.join(PageConfig.getBaseUrl(), providerSpec.oauth2CallbackServerRoute);
78
+ }
79
+ return `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}${providerSpec.oauth2CallbackUIRoute}`;
80
+ }, []);
81
+ const currentRelativeRoute = useMemo(() => {
82
+ if (typeof window === 'undefined') {
83
+ return '/';
84
+ }
85
+ const route = `${window.location.pathname}${window.location.search}${window.location.hash}`;
86
+ return route.startsWith('/') ? route : '/';
87
+ }, []);
88
+ const startOAuthSignIn = useCallback(async (providerSpec) => {
89
+ setError(null);
90
+ setSocialLoading(true);
91
+ try {
92
+ const iamUrl = getIAMUrlFromDocumentConfig();
93
+ const params = new URLSearchParams({
94
+ provider: providerSpec.name,
95
+ callback_uri: buildCallbackURI(providerSpec),
96
+ });
97
+ const explicitNavigationTarget = socialSignInNavigationTarget === undefined
98
+ ? undefined
99
+ : String(socialSignInNavigationTarget || '').trim();
100
+ const callbackNavigationTarget = explicitNavigationTarget === undefined
101
+ ? currentRelativeRoute && currentRelativeRoute !== '/'
102
+ ? currentRelativeRoute
103
+ : undefined
104
+ : explicitNavigationTarget &&
105
+ explicitNavigationTarget.startsWith('/') &&
106
+ !explicitNavigationTarget.startsWith('//')
107
+ ? explicitNavigationTarget
108
+ : undefined;
109
+ if (callbackNavigationTarget) {
110
+ params.set('post_auth_redirect', callbackNavigationTarget);
111
+ }
112
+ const endpointBase = iamUrl || '';
113
+ const endpoint = `${endpointBase}/api/iam/v1/oauth2/authz/url?${params.toString()}`;
114
+ const response = await fetch(endpoint);
115
+ const payload = await response.json();
116
+ const authorizationURL = payload?.autorization_url;
117
+ if (!response.ok || !authorizationURL) {
118
+ throw new Error(payload?.message || 'Unable to start social sign-in.');
119
+ }
120
+ window.location.assign(authorizationURL);
121
+ }
122
+ catch (err) {
123
+ setError(err instanceof Error ? err.message : 'Unable to start social sign-in.');
124
+ }
125
+ finally {
126
+ setSocialLoading(false);
127
+ }
128
+ }, [buildCallbackURI, currentRelativeRoute, socialSignInNavigationTarget]);
36
129
  useEffect(() => {
37
130
  if (showApiKeyDialog) {
38
131
  apiKeyRef.current?.focus();
@@ -40,14 +133,14 @@ export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp,
40
133
  }, [showApiKeyDialog]);
41
134
  const closeApiKeyDialog = useCallback(() => {
42
135
  setShowApiKeyDialog(false);
43
- setApiKey('');
136
+ setApiKeyValue('');
44
137
  }, []);
45
138
  const handleApiKeyAuthenticate = useCallback(() => {
46
- if (!apiKey.trim() || !onApiKeySignIn)
139
+ if (!apiKeyValue.trim() || !onApiKeySignIn)
47
140
  return;
48
- onApiKeySignIn(apiKey.trim());
141
+ onApiKeySignIn(apiKeyValue.trim());
49
142
  closeApiKeyDialog();
50
- }, [apiKey, onApiKeySignIn, closeApiKeyDialog]);
143
+ }, [apiKeyValue, onApiKeySignIn, closeApiKeyDialog]);
51
144
  const handleSignUp = useCallback(() => {
52
145
  window.open('https://datalayer.ai/signup', '_blank', 'noopener,noreferrer');
53
146
  }, []);
@@ -104,7 +197,12 @@ export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp,
104
197
  gap: 2,
105
198
  mb: 4,
106
199
  justifyContent: 'center',
107
- }, children: [leadingIcon, _jsx(Heading, { sx: { fontSize: 3 }, children: title })] }), _jsx(Text, { as: "p", sx: { fontSize: 1, color: 'fg.muted', mb: 3, textAlign: 'center' }, children: description }), _jsxs(FormControl, { required: true, sx: { mb: 3 }, children: [_jsx(FormControl.Label, { children: "Username" }), _jsx(TextInput, { autoFocus: true, block: true, placeholder: "Your username", value: handle, onChange: e => setHandle(e.target.value), onKeyDown: handleKeyDown })] }), _jsxs(FormControl, { required: true, sx: { mb: 3 }, children: [_jsx(FormControl.Label, { children: "Password" }), _jsx(TextInput, { block: true, placeholder: "Your password", type: showPassword ? 'text' : 'password', value: password, onChange: e => setPassword(e.target.value), onKeyDown: handleKeyDown, trailingAction: _jsx(TextInput.Action, { onClick: () => setShowPassword(!showPassword), icon: showPassword ? EyeClosedIcon : EyeIcon, "aria-label": showPassword ? 'Hide password' : 'Show password', sx: { color: 'var(--fgColor-muted)' } }) })] }), error && (_jsx(Text, { sx: { color: 'danger.fg', fontSize: 1, mb: 3, display: 'block' }, children: error })), _jsx(Button, { variant: "primary", block: true, disabled: loading || !handle || !password, onClick: submit, children: loading ? 'Signing in…' : 'Sign in' }), _jsx(Box, { sx: { mt: 2, display: 'flex', justifyContent: 'center' }, children: _jsx(Button, { size: "small", variant: "invisible", leadingVisual: LinkExternalIcon, onClick: handleSignUp, children: "Sign Up" }) }), onApiKeySignIn && (_jsxs(_Fragment, { children: [_jsxs(Box, { sx: {
200
+ }, children: [headingIcon, _jsx(Heading, { sx: { fontSize: 3 }, children: headingText })] }), _jsx(Text, { as: "p", sx: { fontSize: 1, color: 'fg.muted', mb: 3, textAlign: 'center' }, children: description }), _jsxs(FormControl, { required: true, sx: { mb: 3 }, children: [_jsx(FormControl.Label, { children: "Username" }), _jsx(TextInput, { autoFocus: true, block: true, placeholder: "Your username", value: handle, onChange: e => setHandle(e.target.value), onKeyDown: handleKeyDown })] }), _jsxs(FormControl, { required: true, sx: { mb: 3 }, children: [_jsx(FormControl.Label, { children: "Password" }), _jsx(TextInput, { block: true, placeholder: "Your password", type: showPassword ? 'text' : 'password', value: password, onChange: e => setPassword(e.target.value), onKeyDown: handleKeyDown, trailingAction: _jsx(TextInput.Action, { onClick: () => setShowPassword(!showPassword), icon: showPassword ? EyeClosedIcon : EyeIcon, "aria-label": showPassword ? 'Hide password' : 'Show password', sx: { color: 'var(--fgColor-muted)' } }) })] }), error && (_jsx(Text, { sx: { color: 'danger.fg', fontSize: 1, mb: 3, display: 'block' }, children: error })), _jsx(Button, { variant: "primary", block: true, disabled: loading || !handle || !password, onClick: submit, children: loading ? 'Signing in…' : 'Sign in' }), (github || google || linkedin) && (_jsxs(_Fragment, { children: [_jsxs(Box, { sx: {
201
+ display: 'flex',
202
+ alignItems: 'center',
203
+ gap: 2,
204
+ my: 3,
205
+ }, children: [_jsx(Box, { sx: { flex: 1, height: '1px', bg: 'border.default' } }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "or" }), _jsx(Box, { sx: { flex: 1, height: '1px', bg: 'border.default' } })] }), github && (_jsx(Button, { block: true, leadingVisual: GithubMarkIcon, disabled: socialLoading, onClick: () => startOAuthSignIn(OAUTH2_PROVIDERS.github), sx: { mb: 2 }, children: "Sign in with GitHub" })), google && (_jsx(Button, { block: true, leadingVisual: GoogleIcon, disabled: socialLoading, onClick: () => startOAuthSignIn(OAUTH2_PROVIDERS.google), sx: { mb: linkedin ? 2 : 0 }, children: "Sign in with Google" })), linkedin && (_jsx(Button, { block: true, leadingVisual: LinkedInGreyIcon, disabled: socialLoading, onClick: () => startOAuthSignIn(OAUTH2_PROVIDERS.linkedin), children: "Sign in with LinkedIn" }))] })), signUp && (_jsx(Box, { sx: { mt: 2, display: 'flex', justifyContent: 'center' }, children: _jsx(Button, { size: "small", variant: "invisible", leadingVisual: LinkExternalIcon, onClick: handleSignUp, children: "Sign Up" }) })), apiKey && onApiKeySignIn && (_jsxs(_Fragment, { children: [_jsxs(Box, { sx: {
108
206
  display: 'flex',
109
207
  alignItems: 'center',
110
208
  gap: 2,
@@ -134,11 +232,11 @@ export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp,
134
232
  bg: 'canvas.overlay',
135
233
  color: 'fg.default',
136
234
  boxShadow: 'shadow.large',
137
- }, children: [_jsx(Heading, { id: "signin-api-key-title", sx: { fontSize: 2, mb: 2 }, children: "Enter your API Key" }), _jsxs(FormControl, { required: true, children: [_jsx(FormControl.Label, { children: "API Key" }), _jsx(Textarea, { block: true, required: true, autoFocus: true, placeholder: "Paste your API key here", value: apiKey, onInput: (e) => setApiKey(e.target.value), ref: apiKeyRef })] }), _jsxs(Box, { sx: {
235
+ }, children: [_jsx(Heading, { id: "signin-api-key-title", sx: { fontSize: 2, mb: 2 }, children: "Enter your API Key" }), _jsxs(FormControl, { required: true, children: [_jsx(FormControl.Label, { children: "API Key" }), _jsx(Textarea, { block: true, required: true, autoFocus: true, placeholder: "Paste your API key here", value: apiKeyValue, onInput: (e) => setApiKeyValue(e.target.value), ref: apiKeyRef })] }), _jsxs(Box, { sx: {
138
236
  mt: 3,
139
237
  display: 'flex',
140
238
  justifyContent: 'flex-end',
141
239
  gap: 2,
142
- }, children: [_jsx(Button, { type: "button", onClick: closeApiKeyDialog, children: "Cancel" }), _jsx(Button, { type: "submit", variant: "primary", disabled: !apiKey.trim(), children: "Authenticate" })] })] }) }))] }))] }) }));
240
+ }, children: [_jsx(Button, { type: "button", onClick: closeApiKeyDialog, children: "Cancel" }), _jsx(Button, { type: "submit", variant: "primary", disabled: !apiKeyValue.trim(), children: "Authenticate" })] })] }) }))] }))] }) }));
143
241
  };
144
242
  export default SignInSimple;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/core",
3
- "version": "1.0.25",
3
+ "version": "1.1.43",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",
@@ -51,8 +51,9 @@
51
51
  "clean:lib": "rimraf lib tsconfig.tsbuildinfo",
52
52
  "clean:dist": "rimraf dist",
53
53
  "clean:cache": "rimraf node_modules/.vite",
54
- "build": "npm run clean && gulp resources-to-lib && tsc -b && vite build",
54
+ "build": "npm run clean && gulp resources-to-lib && tsc -b && vite build && vite build --config vite.cli-login.config.ts",
55
55
  "build:lib": "npm run clean:lib && gulp resources-to-lib && tsc -b && node scripts/fix-esm-imports.cjs",
56
+ "build:cli-login": "vite build --config vite.cli-login.config.ts",
56
57
  "build:types": "npm run clean:lib && tsc -b",
57
58
  "build:nextjs": "npm run build --workspace=nextjj-example",
58
59
  "build:examples": "npm run build:nextjs",
@@ -89,7 +90,7 @@
89
90
  "watch:lib:src": "tsc -b -w",
90
91
  "type-check:watch": "tsc -b -w --noEmit",
91
92
  "examples": "run-p jupyter:start examples:vite",
92
- "examples:vite": "VITE_DATALAYER_RUN_URL=http://localhost:8888 vite --config vite.examples.config.ts",
93
+ "examples:vite": "VITE_DATALAYER_URL=http://localhost:8888 vite --config vite.examples.config.ts",
93
94
  "examples:nextjs": "npm run dev --workspace=nextjj-example",
94
95
  "jupyter:start": "./dev/sh/start-jupyter-server.sh",
95
96
  "prepare": "husky || true",
@@ -102,6 +103,7 @@
102
103
  "rebuild:fresh": "npm run create:patches && npm install && npm run build && npm run clean:cache"
103
104
  },
104
105
  "dependencies": {
106
+ "@datalayer/design": "^1.0.0",
105
107
  "@datalayer/icons-react": "^1.0.7",
106
108
  "@datalayer/jupyter-lexical": "^1.0.16",
107
109
  "@datalayer/jupyter-react": "^2.0.7",
package/lib/App.css DELETED
@@ -1,47 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
-
6
- #root {
7
- max-width: 1280px;
8
- margin: 0 auto;
9
- padding: 2rem;
10
- /* text-align: center; */
11
- }
12
-
13
- .logo {
14
- height: 6em;
15
- padding: 1.5em;
16
- will-change: filter;
17
- transition: filter 300ms;
18
- }
19
- .logo:hover {
20
- filter: drop-shadow(0 0 2em #646cffaa);
21
- }
22
- .logo.react:hover {
23
- filter: drop-shadow(0 0 2em #61dafbaa);
24
- }
25
-
26
- @keyframes logo-spin {
27
- from {
28
- transform: rotate(0deg);
29
- }
30
- to {
31
- transform: rotate(360deg);
32
- }
33
- }
34
-
35
- @media (prefers-reduced-motion: no-preference) {
36
- a:nth-of-type(2) .logo {
37
- animation: logo-spin infinite 20s linear;
38
- }
39
- }
40
-
41
- .card {
42
- padding: 2em;
43
- }
44
-
45
- .read-the-docs {
46
- color: #888;
47
- }
package/lib/App.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import './App.css';
2
- export declare function App(): import("react/jsx-runtime").JSX.Element;
3
- export default App;
package/lib/App.js DELETED
@@ -1,21 +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 { useState } from 'react';
7
- import reactLogo from './assets/react.svg';
8
- import { useJupyter, JupyterReactTheme } from '@datalayer/jupyter-react';
9
- import { CellExample } from './examples/CellExample.js';
10
- import { NotebookExample } from './examples/NotebookExample.js';
11
- import './App.css';
12
- export function App() {
13
- const { serviceManager } = useJupyter({
14
- jupyterServerUrl: 'https://oss.datalayer.run/api/jupyter-server',
15
- jupyterServerToken: '60c1661cc408f978c309d04157af55c9588ff9557c9380e4fb50785750703da6',
16
- startDefaultKernel: true,
17
- });
18
- const [count, setCount] = useState(0);
19
- return (_jsxs("div", { className: "App", children: [_jsx(_Fragment, { children: _jsxs(JupyterReactTheme, { children: [serviceManager && _jsx(CellExample, { serviceManager: serviceManager }), serviceManager && (_jsx(NotebookExample, { serviceManager: serviceManager }))] }) }), _jsxs("div", { children: [_jsx("a", { href: "https://reactjs.org", target: "_blank", rel: "noreferrer", children: _jsx("img", { src: reactLogo, className: "logo react", alt: "React logo" }) }), _jsx("a", { href: "https://vitejs.dev", target: "_blank", rel: "noreferrer", children: _jsx("img", { src: "/vite.svg", className: "logo", alt: "Vite logo" }) })] }), _jsx("h1", { children: "React + Vite" }), _jsx("h2", { children: "On CodeSandbox!" }), _jsxs("div", { className: "card", children: [_jsxs("button", { onClick: () => setCount(count => count + 1), children: ["count is ", count] }), _jsxs("p", { children: ["Edit ", _jsx("code", { children: "src/App.tsx" }), " and save to test HMR."] }), _jsx("p", { children: "Tip: you can use the inspector button next to address bar to click on components in the preview and open the code in the editor!" })] }), _jsx("p", { className: "read-the-docs", children: "Click on the Vite and React logos to learn more" })] }));
20
- }
21
- export default App;
@@ -1,122 +0,0 @@
1
- /**
2
- * A single runtime checkpoint record.
3
- */
4
- export interface RuntimeCheckpointData {
5
- /** Unique identifier (ULID) */
6
- id: string;
7
- /** Human-readable name */
8
- name: string;
9
- /** Checkpoint description */
10
- description: string;
11
- /** Runtime that was checkpointed */
12
- runtime_uid: string;
13
- /** Agentspec identifier (e.g. "mocks/monitor-sales-kpis") */
14
- agent_spec_id: string;
15
- /** Full agentspec payload */
16
- agentspec: Record<string, any>;
17
- /** Additional metadata */
18
- metadata: Record<string, any>;
19
- /** Checkpoint mode: criu (full) or light (history-only) */
20
- checkpoint_mode?: 'criu' | 'light';
21
- /** Lightweight checkpoint message history */
22
- messages?: string[];
23
- /** Status: requested | created | failed | deleted */
24
- status: string;
25
- /** Human-readable details about the current status (e.g. error message) */
26
- status_message?: string;
27
- /** ISO 8601 timestamp */
28
- updated_at: string;
29
- }
30
- /**
31
- * Request payload for creating a checkpoint.
32
- */
33
- export interface CreateRuntimeCheckpointRequest {
34
- /** Runtime UID of the runtime that was checkpointed */
35
- runtime_uid: string;
36
- /** Human-readable name */
37
- name?: string;
38
- /** Checkpoint description */
39
- description?: string;
40
- /** Agentspec identifier */
41
- agentspec_id?: string;
42
- /** Full agentspec payload to persist */
43
- agentspec?: Record<string, any>;
44
- /** Additional metadata */
45
- metadata?: Record<string, any>;
46
- }
47
- /**
48
- * Response for listing checkpoints.
49
- */
50
- export interface ListRuntimeCheckpointsResponse {
51
- success: boolean;
52
- message: string;
53
- checkpoints: RuntimeCheckpointData[];
54
- }
55
- /**
56
- * Response for getting a single checkpoint.
57
- */
58
- export interface GetRuntimeCheckpointResponse {
59
- success: boolean;
60
- message: string;
61
- checkpoint: RuntimeCheckpointData;
62
- }
63
- /**
64
- * Response for creating a checkpoint.
65
- */
66
- export interface CreateRuntimeCheckpointResponse {
67
- success: boolean;
68
- message: string;
69
- checkpoint: RuntimeCheckpointData;
70
- }
71
- /**
72
- * List runtime checkpoints for a specific runtime.
73
- * @param token - Authentication token
74
- * @param baseUrl - Base URL for the runtimes API
75
- * @param runtimeUid - Runtime UID to list checkpoints for
76
- * @returns Promise resolving to list of checkpoints
77
- */
78
- export declare const listCheckpoints: (token: string, baseUrl?: string, runtimeUid?: string) => Promise<ListRuntimeCheckpointsResponse>;
79
- /**
80
- * Get a single runtime checkpoint by ID.
81
- * @param token - Authentication token
82
- * @param runtimeUid - The runtime UID
83
- * @param checkpointId - The checkpoint ID (ULID)
84
- * @param baseUrl - Base URL for the runtimes API
85
- * @returns Promise resolving to checkpoint details
86
- */
87
- export declare const getCheckpoint: (token: string, runtimeUid: string, checkpointId: string, baseUrl?: string) => Promise<GetRuntimeCheckpointResponse>;
88
- /**
89
- * Create a checkpoint record (after a CRIU checkpoint has been taken).
90
- * @param token - Authentication token
91
- * @param data - Checkpoint creation payload (runtime_uid, agentspec, etc.)
92
- * @param baseUrl - Base URL for the runtimes API
93
- * @returns Promise resolving to the created checkpoint
94
- */
95
- export declare const createCheckpoint: (token: string, data: CreateRuntimeCheckpointRequest, baseUrl?: string) => Promise<CreateRuntimeCheckpointResponse>;
96
- /**
97
- * Poll a checkpoint until it reaches one of the target statuses.
98
- *
99
- * Useful for waiting until an async pause (status "paused")
100
- * completes before proceeding. Checkpoint status stays "paused"
101
- * during resume — only the agent runtime status transitions.
102
- *
103
- * @param token - Authentication token
104
- * @param runtimeUid - The runtime UID that owns the checkpoint
105
- * @param checkpointId - The checkpoint ID (ULID) to poll
106
- * @param targetStatuses - Set of statuses that signal completion (e.g. ["paused", "failed"])
107
- * @param baseUrl - Base URL for the runtimes API
108
- * @param intervalMs - Polling interval in milliseconds (default: 2000)
109
- * @param timeoutMs - Maximum wait time in milliseconds (default: 600000 = 10 min)
110
- * @returns Promise resolving to the checkpoint data once a target status is reached
111
- * @throws {Error} If polling times out or the request fails
112
- */
113
- export declare const waitForCheckpointStatus: (token: string, runtimeUid: string, checkpointId: string, targetStatuses: string[], baseUrl?: string, intervalMs?: number, timeoutMs?: number) => Promise<RuntimeCheckpointData>;
114
- /**
115
- * Delete a runtime checkpoint.
116
- * @param token - Authentication token
117
- * @param runtimeUid - The runtime UID that owns the checkpoint
118
- * @param checkpointId - The checkpoint ID (ULID) to delete
119
- * @param baseUrl - Base URL for the runtimes API
120
- * @returns Promise resolving when deletion is complete
121
- */
122
- export declare const deleteCheckpoint: (token: string, runtimeUid: string, checkpointId: string, baseUrl?: string) => Promise<void>;