@datalayer/core 1.1.60 → 1.2.10

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 (496) hide show
  1. package/README.md +41 -18
  2. package/lib/api/DatalayerApi.d.ts +42 -1
  3. package/lib/api/DatalayerApi.js +90 -3
  4. package/lib/api/constants.d.ts +19 -1
  5. package/lib/api/constants.js +19 -1
  6. package/lib/api/contents/attachments.d.ts +9 -0
  7. package/lib/api/contents/attachments.js +39 -0
  8. package/lib/api/contents/bridges.d.ts +22 -0
  9. package/lib/api/contents/bridges.js +79 -0
  10. package/lib/api/contents/capabilities.d.ts +11 -0
  11. package/lib/api/contents/capabilities.js +21 -0
  12. package/lib/api/contents/cloudStorage.d.ts +31 -0
  13. package/lib/api/contents/cloudStorage.js +89 -0
  14. package/lib/api/contents/dataservers.d.ts +37 -0
  15. package/lib/api/contents/dataservers.js +121 -0
  16. package/lib/api/contents/datasets.d.ts +63 -0
  17. package/lib/api/contents/datasets.js +82 -0
  18. package/lib/api/contents/datasources.d.ts +70 -0
  19. package/lib/api/contents/datasources.js +149 -0
  20. package/lib/api/contents/generated.d.ts +1070 -0
  21. package/lib/api/contents/index.d.ts +16 -0
  22. package/lib/api/contents/index.js +20 -0
  23. package/lib/api/contents/mcp.d.ts +46 -0
  24. package/lib/api/contents/mcp.js +157 -0
  25. package/lib/api/contents/objects.d.ts +31 -0
  26. package/lib/api/contents/objects.js +88 -0
  27. package/lib/api/contents/operations.d.ts +3 -0
  28. package/lib/api/contents/operations.js +19 -0
  29. package/lib/api/contents/runtimeMounts.d.ts +40 -0
  30. package/lib/api/contents/runtimeMounts.js +59 -0
  31. package/lib/api/contents/sandboxUid.d.ts +21 -0
  32. package/lib/api/contents/sandboxUid.js +27 -0
  33. package/lib/api/contents/sources.d.ts +19 -0
  34. package/lib/api/contents/sources.js +119 -0
  35. package/lib/api/contents/sync.d.ts +18 -0
  36. package/lib/api/contents/sync.js +69 -0
  37. package/lib/api/contents/transfers.d.ts +38 -0
  38. package/lib/api/contents/transfers.js +123 -0
  39. package/lib/api/evals/client.d.ts +402 -0
  40. package/lib/api/evals/client.js +359 -0
  41. package/lib/api/evals/index.d.ts +10 -0
  42. package/lib/api/evals/index.js +18 -0
  43. package/lib/api/evals/request.d.ts +43 -0
  44. package/lib/api/evals/request.js +67 -0
  45. package/lib/api/evals/status.d.ts +27 -0
  46. package/lib/api/evals/status.js +122 -0
  47. package/lib/api/evals/types.d.ts +1335 -0
  48. package/lib/api/evals/types.js +5 -0
  49. package/lib/api/iam/connectedAgents.d.ts +68 -0
  50. package/lib/api/iam/connectedAgents.js +87 -0
  51. package/lib/api/iam/identityProviders.d.ts +76 -0
  52. package/lib/api/iam/identityProviders.js +187 -0
  53. package/lib/api/iam/index.d.ts +3 -1
  54. package/lib/api/iam/index.js +3 -1
  55. package/lib/api/iam/mcpAlertRules.d.ts +51 -0
  56. package/lib/api/iam/mcpAlertRules.js +198 -0
  57. package/lib/api/iam/mcpAuditSettings.d.ts +46 -0
  58. package/lib/api/iam/mcpAuditSettings.js +120 -0
  59. package/lib/api/iam/mcpPolicy.d.ts +181 -0
  60. package/lib/api/iam/mcpPolicy.js +168 -0
  61. package/lib/api/iam/organizationTeams.d.ts +13 -0
  62. package/lib/api/iam/organizationTeams.js +43 -0
  63. package/lib/api/iam/profile.d.ts +17 -1
  64. package/lib/api/iam/profile.js +27 -0
  65. package/lib/api/iam/scimTokens.d.ts +79 -0
  66. package/lib/api/iam/scimTokens.js +141 -0
  67. package/lib/api/iam/secrets.js +9 -21
  68. package/lib/api/iam/serviceAgents.d.ts +68 -0
  69. package/lib/api/iam/serviceAgents.js +119 -0
  70. package/lib/api/iam/trials.d.ts +38 -0
  71. package/lib/api/iam/trials.js +66 -0
  72. package/lib/api/index.d.ts +8 -1
  73. package/lib/api/index.js +7 -1
  74. package/lib/api/mcp/activity.d.ts +37 -0
  75. package/lib/api/mcp/activity.js +26 -0
  76. package/lib/api/mcp/alerts.d.ts +25 -0
  77. package/lib/api/mcp/alerts.js +51 -0
  78. package/lib/api/mcp/audit.d.ts +29 -0
  79. package/lib/api/mcp/audit.js +55 -0
  80. package/lib/api/mcp/bindings.d.ts +18 -0
  81. package/lib/api/mcp/bindings.js +42 -0
  82. package/lib/api/mcp/forwarding.d.ts +25 -0
  83. package/lib/api/mcp/forwarding.js +46 -0
  84. package/lib/api/mcp/gateway.d.ts +16 -0
  85. package/lib/api/mcp/gateway.js +70 -0
  86. package/lib/api/mcp/generated.d.ts +22 -0
  87. package/lib/api/mcp/generated.js +213 -0
  88. package/lib/api/mcp/index.d.ts +17 -0
  89. package/lib/api/mcp/index.js +25 -0
  90. package/lib/api/mcp/observability.d.ts +141 -0
  91. package/lib/api/mcp/observability.js +267 -0
  92. package/lib/api/mcp/operations.d.ts +83 -0
  93. package/lib/api/mcp/operations.js +50 -0
  94. package/lib/api/mcp/organizations.d.ts +102 -0
  95. package/lib/api/mcp/organizations.js +46 -0
  96. package/lib/api/mcp/policy.d.ts +9 -0
  97. package/lib/api/mcp/policy.js +23 -0
  98. package/lib/api/mcp/tasks.d.ts +49 -0
  99. package/lib/api/mcp/tasks.js +147 -0
  100. package/lib/api/orchestration/client.d.ts +53 -0
  101. package/lib/api/orchestration/client.js +105 -0
  102. package/lib/api/orchestration/events.d.ts +88 -0
  103. package/lib/api/orchestration/events.js +245 -0
  104. package/lib/api/orchestration/generated.d.ts +693 -0
  105. package/lib/api/orchestration/generated.js +687 -0
  106. package/lib/api/orchestration/index.d.ts +30 -0
  107. package/lib/api/orchestration/index.js +34 -0
  108. package/lib/api/orchestration/lifecycle.d.ts +39 -0
  109. package/lib/api/orchestration/lifecycle.js +57 -0
  110. package/lib/api/orchestration/measures.d.ts +55 -0
  111. package/lib/api/orchestration/measures.js +99 -0
  112. package/lib/api/otel/dashboards.d.ts +56 -0
  113. package/lib/api/otel/dashboards.js +50 -0
  114. package/lib/api/otel/index.d.ts +1 -0
  115. package/lib/api/otel/index.js +1 -0
  116. package/lib/api/otel/metrics.d.ts +16 -0
  117. package/lib/api/otel/metrics.js +15 -0
  118. package/lib/api/scheduler/client.d.ts +32 -0
  119. package/lib/api/scheduler/client.js +42 -0
  120. package/lib/api/scheduler/index.d.ts +8 -0
  121. package/lib/api/scheduler/index.js +16 -0
  122. package/lib/api/scheduler/request.d.ts +28 -0
  123. package/lib/api/scheduler/request.js +50 -0
  124. package/lib/api/scheduler/types.d.ts +88 -0
  125. package/lib/api/scheduler/types.js +5 -0
  126. package/lib/api/spacer/comments.d.ts +97 -0
  127. package/lib/api/spacer/comments.js +45 -0
  128. package/lib/api/spacer/index.d.ts +9 -0
  129. package/lib/api/spacer/index.js +17 -0
  130. package/lib/api/spacer/notebooks.d.ts +33 -0
  131. package/lib/api/spacer/notebooks.js +39 -0
  132. package/lib/api/spacer/request.d.ts +25 -0
  133. package/lib/api/spacer/request.js +46 -0
  134. package/lib/api/spacer/spaces.d.ts +68 -0
  135. package/lib/api/spacer/spaces.js +45 -0
  136. package/lib/api/utils/validation.d.ts +4 -4
  137. package/lib/api/utils/validation.js +10 -7
  138. package/lib/client/auth/index.js +0 -5
  139. package/lib/client/auth/storage.js +0 -5
  140. package/lib/client/auth/strategies.js +0 -5
  141. package/lib/client/base.d.ts +6 -0
  142. package/lib/client/base.js +8 -0
  143. package/lib/client/constants.d.ts +1 -0
  144. package/lib/client/constants.js +1 -0
  145. package/lib/client/index.d.ts +0 -10
  146. package/lib/client/index.js +2 -2
  147. package/lib/client/mixins/ContentsMixin.d.ts +71 -0
  148. package/lib/client/mixins/ContentsMixin.js +157 -0
  149. package/lib/client/mixins/IAMMixin.d.ts +0 -31
  150. package/lib/client/mixins/IAMMixin.js +0 -58
  151. package/lib/components/animation/AnimatedText.d.ts +2 -44
  152. package/lib/components/animation/AnimatedText.js +6 -126
  153. package/lib/components/anonymous/AnonymousKeyExpired.d.ts +56 -0
  154. package/lib/components/anonymous/AnonymousKeyExpired.js +96 -0
  155. package/lib/components/anonymous/AnonymousKeyTimer.d.ts +63 -0
  156. package/lib/components/anonymous/AnonymousKeyTimer.js +140 -0
  157. package/lib/components/anonymous/index.d.ts +7 -0
  158. package/lib/components/anonymous/index.js +15 -0
  159. package/lib/components/auth/SigInAPIKey.d.ts +1 -0
  160. package/lib/components/auth/SigInAPIKey.js +0 -6
  161. package/lib/components/auth/SignIn.d.ts +1 -0
  162. package/lib/components/auth/SignIn.js +0 -4
  163. package/lib/components/auth/SignIn.stories.d.ts +2 -2
  164. package/lib/components/avatars/BoringAvatar.d.ts +1 -1
  165. package/lib/components/avatars/BoringAvatar.stories.d.ts +1 -1
  166. package/lib/components/avatars/DLAvatar.d.ts +1 -1
  167. package/lib/components/avatars/DLAvatar.js +0 -4
  168. package/lib/components/avatars/UserAvatar.d.ts +16 -1
  169. package/lib/components/avatars/UserAvatar.js +15 -13
  170. package/lib/components/avatars/UserProfileAvatar.d.ts +1 -1
  171. package/lib/components/banners/NoAutomationBanner.d.ts +1 -1
  172. package/lib/components/billing/BillingEntitySelect.d.ts +16 -0
  173. package/lib/components/billing/BillingEntitySelect.js +49 -27
  174. package/lib/components/billing/eligibility.d.ts +22 -0
  175. package/lib/components/billing/eligibility.js +27 -0
  176. package/lib/components/billing/index.d.ts +1 -0
  177. package/lib/components/billing/index.js +1 -4
  178. package/lib/components/buttons/DownloadCSVButton.d.ts +1 -1
  179. package/lib/components/buttons/DownloadJsonButton.d.ts +1 -1
  180. package/lib/components/buttons/LongActionButton.d.ts +1 -0
  181. package/lib/components/buttons/LongActionButton.js +0 -4
  182. package/lib/components/buttons/UploadButton.d.ts +1 -0
  183. package/lib/components/buttons/UploadButton.js +0 -4
  184. package/lib/components/checkout/StripeCheckout.d.ts +1 -1
  185. package/lib/components/collaboration/LiveEditorCollaborators.d.ts +36 -0
  186. package/lib/components/collaboration/LiveEditorCollaborators.js +88 -53
  187. package/lib/components/collaboration/index.js +0 -4
  188. package/lib/components/confetti/ConfettiSuccess.d.ts +1 -1
  189. package/lib/components/contents/ContentSourceCard.d.ts +8 -0
  190. package/lib/components/contents/ContentSourceCard.js +23 -0
  191. package/lib/components/contents/HomeFolderObjectsBrowser.d.ts +10 -0
  192. package/lib/components/contents/HomeFolderObjectsBrowser.js +148 -0
  193. package/lib/components/contents/index.d.ts +2 -0
  194. package/lib/components/contents/index.js +6 -0
  195. package/lib/components/context/OrganizationSelect.d.ts +1 -1
  196. package/lib/components/display/AvatarSkeleton.d.ts +1 -1
  197. package/lib/components/display/BusyDots.d.ts +1 -1
  198. package/lib/components/display/CenteredSpinner.d.ts +1 -1
  199. package/lib/components/display/CodePreview.d.ts +1 -1
  200. package/lib/components/display/DatalayerBox.d.ts +7 -3
  201. package/lib/components/display/DatalayerBox.js +7 -7
  202. package/lib/components/display/HorizontalCenter.d.ts +1 -1
  203. package/lib/components/display/JupyterDialog.d.ts +1 -0
  204. package/lib/components/display/JupyterDialog.js +1 -7
  205. package/lib/components/display/Markdown.d.ts +1 -0
  206. package/lib/components/display/NavLink.js +3 -2
  207. package/lib/components/display/NotebookSkeleton.d.ts +1 -1
  208. package/lib/components/display/Placeholder.d.ts +1 -1
  209. package/lib/components/display/ToTopBranded.d.ts +1 -1
  210. package/lib/components/echarts/EChartsReact.d.ts +1 -1
  211. package/lib/components/flashes/FlashClosable.d.ts +1 -0
  212. package/lib/components/flashes/FlashClosable.js +0 -4
  213. package/lib/components/flashes/FlashGuest.d.ts +1 -1
  214. package/lib/components/flashes/FlashSurveys.d.ts +1 -1
  215. package/lib/components/flashes/FlashUnauthorized.d.ts +1 -0
  216. package/lib/components/flashes/FlashUnauthorized.js +0 -6
  217. package/lib/components/flashes/surveys/Survey2025_1.d.ts +1 -1
  218. package/lib/components/iam/ExternalTokenSilentLogin.d.ts +1 -1
  219. package/lib/components/index.d.ts +2 -0
  220. package/lib/components/index.js +2 -0
  221. package/lib/components/labels/StatusLabels.d.ts +2 -9
  222. package/lib/components/labels/StatusLabels.js +2 -26
  223. package/lib/components/labels/VisibilityLabel.d.ts +1 -1
  224. package/lib/components/landings/StepBlock.d.ts +1 -1
  225. package/lib/components/mcp/ClientBadge.d.ts +41 -0
  226. package/lib/components/mcp/ClientBadge.js +33 -0
  227. package/lib/components/mcp/McpErrorBlankslate.d.ts +21 -0
  228. package/lib/components/mcp/McpErrorBlankslate.js +17 -0
  229. package/lib/components/mcp/ScopeList.d.ts +28 -0
  230. package/lib/components/mcp/ScopeList.js +14 -0
  231. package/lib/components/mcp/index.d.ts +10 -0
  232. package/lib/components/mcp/index.js +18 -0
  233. package/lib/components/navbar/NavigationVisbilityObserver.d.ts +2 -1
  234. package/lib/components/navbar/SubdomainNavBar.d.ts +10 -5
  235. package/lib/components/navbar/SubdomainNavBar.js +2 -1
  236. package/lib/components/notebooks/JupyterNotebook.d.ts +1 -1
  237. package/lib/components/notebooks/JupyterNotebookToolbar.d.ts +1 -1
  238. package/lib/components/principal/PrincipalAppearance.d.ts +22 -42
  239. package/lib/components/principal/PrincipalAppearance.js +232 -182
  240. package/lib/components/principal/PrincipalAvatar.d.ts +9 -1
  241. package/lib/components/principal/PrincipalAvatar.js +18 -10
  242. package/lib/components/principal/PrincipalBadge.d.ts +1 -1
  243. package/lib/components/principal/PrincipalBanner.d.ts +1 -1
  244. package/lib/components/principal/PrincipalDetailsOverlay.d.ts +38 -1
  245. package/lib/components/principal/PrincipalDetailsOverlay.js +64 -33
  246. package/lib/components/principal/PrincipalHoverCard.d.ts +31 -0
  247. package/lib/components/principal/PrincipalHoverCard.js +52 -0
  248. package/lib/components/principal/PrincipalSwitcherMenu.d.ts +1 -0
  249. package/lib/components/principal/PrincipalSwitcherMenu.js +5 -14
  250. package/lib/components/principal/index.d.ts +2 -1
  251. package/lib/components/principal/index.js +2 -1
  252. package/lib/components/progress/ConsumptionBar.d.ts +1 -0
  253. package/lib/components/progress/ConsumptionBar.js +0 -4
  254. package/lib/components/progress/ProgressRing.d.ts +1 -0
  255. package/lib/components/progress/SpinnerBar.d.ts +1 -1
  256. package/lib/components/progress/Timer.d.ts +1 -0
  257. package/lib/components/progress/Timer.js +0 -4
  258. package/lib/components/screencapture/Screencapture.js +46 -3
  259. package/lib/components/screencapture/ScreencaptureButton.d.ts +1 -1
  260. package/lib/components/sharing/ShareAccessComponent.d.ts +58 -3
  261. package/lib/components/sharing/ShareAccessComponent.js +143 -98
  262. package/lib/components/sharing/SharingEditor.d.ts +21 -0
  263. package/lib/components/sharing/SharingEditor.js +9 -28
  264. package/lib/components/sharing/index.d.ts +1 -0
  265. package/lib/components/sharing/index.js +1 -0
  266. package/lib/components/sharing/sandboxSharing.d.ts +26 -0
  267. package/lib/components/sharing/sandboxSharing.js +41 -0
  268. package/lib/components/spaces/SpaceDetailsOverlay.d.ts +39 -0
  269. package/lib/components/spaces/SpaceDetailsOverlay.js +80 -0
  270. package/lib/components/spaces/SpaceDisplay.d.ts +38 -0
  271. package/lib/components/spaces/SpaceDisplay.js +92 -0
  272. package/lib/components/spaces/index.d.ts +4 -0
  273. package/lib/components/spaces/index.js +7 -0
  274. package/lib/components/spaces/spaceDisplayModel.d.ts +93 -0
  275. package/lib/components/spaces/spaceDisplayModel.js +170 -0
  276. package/lib/components/sparklines/Sparklines.js +3 -4
  277. package/lib/components/sparklines/index.js +0 -4
  278. package/lib/components/storage/ContentsBrowser.d.ts +25 -1
  279. package/lib/components/storage/ContentsBrowser.js +145 -52
  280. package/lib/components/storage/ContentsBrowserMock.d.ts +3 -0
  281. package/lib/components/storage/ContentsBrowserMock.js +75 -0
  282. package/lib/components/storage/ContentsItems.d.ts +2 -1
  283. package/lib/components/storage/ContentsItems.js +0 -4
  284. package/lib/components/storage/ContentsTable.d.ts +50 -0
  285. package/lib/components/storage/ContentsTable.js +134 -0
  286. package/lib/components/storage/HomeFolderDrive.d.ts +71 -0
  287. package/lib/components/storage/HomeFolderDrive.js +248 -0
  288. package/lib/components/storage/index.d.ts +2 -0
  289. package/lib/components/storage/index.js +2 -0
  290. package/lib/components/students/StudentItemStatus.d.ts +1 -1
  291. package/lib/components/students/StudentResultCircle.d.ts +1 -1
  292. package/lib/components/subnav/SubNav.d.ts +5 -5
  293. package/lib/components/subnav/SubNav.js +11 -9
  294. package/lib/components/tables/DataTable.d.ts +1 -1
  295. package/lib/components/text-reveal/TextRevealAnimation.d.ts +2 -2
  296. package/lib/components/text-reveal/useTextRevealAnimationLines.d.ts +1 -1
  297. package/lib/components/time/LiveRelativeTime.d.ts +1 -0
  298. package/lib/components/time/LiveRelativeTime.js +0 -8
  299. package/lib/components/time/index.js +0 -4
  300. package/lib/components/timeline/Timeline.d.ts +1 -1
  301. package/lib/components/timeline/index.js +0 -4
  302. package/lib/components/users/PeerIndicator.d.ts +1 -0
  303. package/lib/components/users/PeerIndicator.js +0 -4
  304. package/lib/config/Configuration.d.ts +15 -17
  305. package/lib/config/Configuration.js +7 -0
  306. package/lib/hooks/cacheConverters.d.ts +0 -7
  307. package/lib/hooks/cacheConverters.js +0 -25
  308. package/lib/hooks/index.d.ts +3 -0
  309. package/lib/hooks/index.js +3 -0
  310. package/lib/hooks/layouts/LayoutBackdrop.d.ts +1 -1
  311. package/lib/hooks/layouts/LayoutScreencapture.d.ts +1 -1
  312. package/lib/hooks/useBackdrop.d.ts +1 -1
  313. package/lib/hooks/useBackdropJupyterLab.d.ts +3 -2
  314. package/lib/hooks/useBackdropJupyterLab.js +0 -4
  315. package/lib/hooks/useBillingEntityStore.js +3 -0
  316. package/lib/hooks/useCache.d.ts +478 -130
  317. package/lib/hooks/useCache.js +1580 -676
  318. package/lib/hooks/useContainsFocus.d.ts +1 -1
  319. package/lib/hooks/useContents.d.ts +334 -0
  320. package/lib/hooks/useContents.js +1033 -0
  321. package/lib/hooks/useFocusTrap.d.ts +4 -4
  322. package/lib/hooks/useFocusTrap.js +1 -1
  323. package/lib/hooks/useMcp.d.ts +315 -0
  324. package/lib/hooks/useMcp.js +891 -0
  325. package/lib/hooks/useMobile.js +0 -5
  326. package/lib/hooks/useNavigate.d.ts +41 -3
  327. package/lib/hooks/useNavigate.js +106 -52
  328. package/lib/hooks/usePrincipalCacheStore.js +3 -0
  329. package/lib/hooks/usePrincipalStore.js +3 -0
  330. package/lib/hooks/useProjectStore.d.ts +3 -3
  331. package/lib/hooks/useProjectStore.js +4 -4
  332. package/lib/hooks/useRef.d.ts +1 -1
  333. package/lib/hooks/useRef.js +3 -0
  334. package/lib/hooks/useScreencapture.d.ts +2 -1
  335. package/lib/hooks/useScreencapture.js +0 -4
  336. package/lib/hooks/useSpaceCacheStore.d.ts +50 -0
  337. package/lib/hooks/useSpaceCacheStore.js +85 -0
  338. package/lib/hooks/useToast.js +0 -4
  339. package/lib/hooks/useVisibilityObserver.d.ts +1 -1
  340. package/lib/index.d.ts +4 -1
  341. package/lib/index.js +3 -1
  342. package/lib/mocks/components/FlashMock.d.ts +1 -1
  343. package/lib/mocks/views/ActionMenuMock.d.ts +1 -1
  344. package/lib/mocks/views/ChartMock.d.ts +1 -1
  345. package/lib/mocks/views/DashboardMock.d.ts +1 -1
  346. package/lib/mocks/views/FormMock.d.ts +1 -1
  347. package/lib/mocks/views/TableMock.d.ts +1 -1
  348. package/lib/mocks/views/WipMock.d.ts +1 -1
  349. package/lib/models/Credits.d.ts +16 -0
  350. package/lib/models/Credits.js +22 -0
  351. package/lib/models/CreditsDTO.d.ts +6 -5
  352. package/lib/models/CreditsDTO.js +7 -5
  353. package/lib/models/McpAuditEvent.d.ts +52 -0
  354. package/lib/models/McpAuditEvent.js +5 -0
  355. package/lib/models/McpBinding.d.ts +57 -0
  356. package/lib/models/McpBinding.js +5 -0
  357. package/lib/models/McpPolicy.d.ts +77 -0
  358. package/lib/models/McpPolicy.js +5 -0
  359. package/lib/models/McpTask.d.ts +94 -0
  360. package/lib/models/McpTask.js +7 -0
  361. package/lib/models/Organization.d.ts +69 -0
  362. package/lib/models/Organization.js +96 -0
  363. package/lib/models/Secret.d.ts +1 -2
  364. package/lib/models/Secret.js +2 -18
  365. package/lib/models/StartedBy.d.ts +91 -0
  366. package/lib/models/StartedBy.js +117 -0
  367. package/lib/models/Team.d.ts +2 -0
  368. package/lib/models/Team.js +2 -0
  369. package/lib/models/User.d.ts +4 -0
  370. package/lib/models/User.js +3 -0
  371. package/lib/models/UserDTO.js +4 -2
  372. package/lib/models/UserSettings.d.ts +13 -0
  373. package/lib/models/UserSettings.js +9 -0
  374. package/lib/models/contents/__fixtures__/solr-codec.json +57 -0
  375. package/lib/models/contents/__fixtures__/v1-contracts.json +194 -0
  376. package/lib/models/contents/fieldCase.d.ts +8 -0
  377. package/lib/models/contents/fieldCase.js +37 -0
  378. package/lib/models/contents/index.d.ts +2 -0
  379. package/lib/models/contents/index.js +6 -0
  380. package/lib/models/contents/permissions.d.ts +16 -0
  381. package/lib/models/contents/permissions.js +34 -0
  382. package/lib/models/index.d.ts +5 -1
  383. package/lib/models/index.js +5 -1
  384. package/lib/navigation/components.js +2 -3
  385. package/lib/routes/publicPaths.js +4 -0
  386. package/lib/state/index.d.ts +1 -0
  387. package/lib/state/index.js +1 -0
  388. package/lib/state/sessionEnd.d.ts +55 -0
  389. package/lib/state/sessionEnd.js +162 -0
  390. package/lib/state/substates/CoreState.d.ts +15 -7
  391. package/lib/state/substates/CoreState.js +21 -17
  392. package/lib/state/substates/IAMState.d.ts +1 -1
  393. package/lib/state/substates/IAMState.js +12 -5
  394. package/lib/state/substates/LayoutState.js +12 -0
  395. package/lib/state/substates/ProfileState.d.ts +1 -0
  396. package/lib/state/substates/ProfileState.js +1 -4
  397. package/lib/state/substates/index.d.ts +0 -1
  398. package/lib/state/substates/index.js +0 -1
  399. package/lib/utils/Jwt.d.ts +26 -0
  400. package/lib/utils/Jwt.js +37 -0
  401. package/lib/utils/Lazy.d.ts +20 -0
  402. package/lib/utils/Lazy.js +32 -6
  403. package/lib/utils/Screencapture.js +3 -0
  404. package/lib/utils/WithSuspense.d.ts +11 -1
  405. package/lib/utils/WithSuspense.js +11 -1
  406. package/lib/views/api-keys/APIKeyEdit.d.ts +1 -1
  407. package/lib/views/api-keys/APIKeyNew.d.ts +1 -1
  408. package/lib/views/api-keys/APIKeys.d.ts +1 -1
  409. package/lib/views/api-keys/APIKeys.js +30 -4
  410. package/lib/views/api-keys/APIKeysStandalone.d.ts +5 -1
  411. package/lib/views/api-keys/APIKeysStandalone.js +2 -2
  412. package/lib/views/datasources/DatasourceDetail.d.ts +12 -5
  413. package/lib/views/datasources/DatasourceDetail.js +80 -110
  414. package/lib/views/datasources/DatasourceNew.d.ts +14 -8
  415. package/lib/views/datasources/DatasourceNew.js +129 -118
  416. package/lib/views/datasources/Datasources.d.ts +39 -7
  417. package/lib/views/datasources/Datasources.js +95 -40
  418. package/lib/views/datasources/DatasourcesMock.d.ts +3 -0
  419. package/lib/views/datasources/DatasourcesMock.js +57 -0
  420. package/lib/views/iam/SignInSimple.d.ts +12 -0
  421. package/lib/views/iam/SignInSimple.js +4 -4
  422. package/lib/views/index.d.ts +1 -0
  423. package/lib/views/index.js +1 -0
  424. package/lib/views/mcp/AdmittedClients.d.ts +44 -0
  425. package/lib/views/mcp/AdmittedClients.js +59 -0
  426. package/lib/views/mcp/AlertDestinations.d.ts +34 -0
  427. package/lib/views/mcp/AlertDestinations.js +75 -0
  428. package/lib/views/mcp/AlertRules.d.ts +32 -0
  429. package/lib/views/mcp/AlertRules.js +245 -0
  430. package/lib/views/mcp/ApprovalQueue.d.ts +66 -0
  431. package/lib/views/mcp/ApprovalQueue.js +95 -0
  432. package/lib/views/mcp/AuditLog.d.ts +42 -0
  433. package/lib/views/mcp/AuditLog.js +144 -0
  434. package/lib/views/mcp/ConnectedAgents.d.ts +34 -0
  435. package/lib/views/mcp/ConnectedAgents.js +135 -0
  436. package/lib/views/mcp/EnterpriseConsole.d.ts +74 -0
  437. package/lib/views/mcp/EnterpriseConsole.js +195 -0
  438. package/lib/views/mcp/IdentityProviders.d.ts +33 -0
  439. package/lib/views/mcp/IdentityProviders.js +299 -0
  440. package/lib/views/mcp/McpDashboard.d.ts +50 -0
  441. package/lib/views/mcp/McpDashboard.js +430 -0
  442. package/lib/views/mcp/McpHome.d.ts +92 -0
  443. package/lib/views/mcp/McpHome.js +153 -0
  444. package/lib/views/mcp/McpObservability.d.ts +79 -0
  445. package/lib/views/mcp/McpObservability.js +236 -0
  446. package/lib/views/mcp/NotebookRuns.d.ts +39 -0
  447. package/lib/views/mcp/NotebookRuns.js +44 -0
  448. package/lib/views/mcp/OrganizationPolicy.d.ts +45 -0
  449. package/lib/views/mcp/OrganizationPolicy.js +108 -0
  450. package/lib/views/mcp/OrganizationUsage.d.ts +69 -0
  451. package/lib/views/mcp/OrganizationUsage.js +113 -0
  452. package/lib/views/mcp/PersonalPolicy.d.ts +54 -0
  453. package/lib/views/mcp/PersonalPolicy.js +126 -0
  454. package/lib/views/mcp/Policies.d.ts +53 -0
  455. package/lib/views/mcp/Policies.js +210 -0
  456. package/lib/views/mcp/PolicyForm.d.ts +83 -0
  457. package/lib/views/mcp/PolicyForm.js +113 -0
  458. package/lib/views/mcp/PolicyHistory.d.ts +58 -0
  459. package/lib/views/mcp/PolicyHistory.js +75 -0
  460. package/lib/views/mcp/RunDetail.d.ts +87 -0
  461. package/lib/views/mcp/RunDetail.js +186 -0
  462. package/lib/views/mcp/ScimProvisioning.d.ts +54 -0
  463. package/lib/views/mcp/ScimProvisioning.js +173 -0
  464. package/lib/views/mcp/ServiceAgents.d.ts +46 -0
  465. package/lib/views/mcp/ServiceAgents.js +194 -0
  466. package/lib/views/mcp/TeamPolicies.d.ts +33 -0
  467. package/lib/views/mcp/TeamPolicies.js +159 -0
  468. package/lib/views/mcp/ToolAccess.d.ts +60 -0
  469. package/lib/views/mcp/ToolAccess.js +101 -0
  470. package/lib/views/mcp/TraceTimeline.d.ts +81 -0
  471. package/lib/views/mcp/TraceTimeline.js +132 -0
  472. package/lib/views/mcp/format.d.ts +25 -0
  473. package/lib/views/mcp/format.js +77 -0
  474. package/lib/views/mcp/index.d.ts +34 -0
  475. package/lib/views/mcp/index.js +42 -0
  476. package/lib/views/mcp/types.d.ts +66 -0
  477. package/lib/views/mcp/types.js +5 -0
  478. package/lib/views/otel/simpleAuthStore.js +3 -0
  479. package/lib/views/secrets/SecretEdit.d.ts +5 -1
  480. package/lib/views/secrets/SecretEdit.js +5 -4
  481. package/lib/views/secrets/SecretNew.d.ts +11 -1
  482. package/lib/views/secrets/SecretNew.js +7 -3
  483. package/lib/views/secrets/Secrets.d.ts +12 -1
  484. package/lib/views/secrets/Secrets.js +2 -2
  485. package/package.json +269 -260
  486. package/scripts/generate-contents-types.py +169 -0
  487. package/scripts/generate-mcp-types.py +233 -0
  488. package/scripts/generate-orchestration-types.py +920 -0
  489. package/lib/api/iam/datasources.d.ts +0 -86
  490. package/lib/api/iam/datasources.js +0 -185
  491. package/lib/components/toolbars/index.d.ts +0 -1
  492. package/lib/models/Datasource.d.ts +0 -181
  493. package/lib/models/Datasource.js +0 -154
  494. package/lib/state/substates/DatasourceState.d.ts +0 -11
  495. package/lib/state/substates/DatasourceState.js +0 -16
  496. /package/lib/{components/toolbars/index.js → api/contents/generated.js} +0 -0
@@ -1,8 +1,4 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- /*
3
- * Copyright (c) 2023-2025 Datalayer, Inc.
4
- * Distributed under the terms of the Modified BSD License.
5
- */
6
2
  import { useEffect, useMemo, useState } from 'react';
7
3
  /** The Primer foreground tokens, which carry the theme with them. */
8
4
  const THEME_COLORS = {
@@ -14,33 +10,6 @@ const THEME_COLORS = {
14
10
  muted: 'var(--fgColor-muted, var(--color-fg-muted))',
15
11
  default: 'inherit',
16
12
  };
17
- /**
18
- * The colours the cycling words are drawn in when none is named.
19
- *
20
- * Fixed values rather than Primer's theme tokens, because the plate behind
21
- * the words is white in either theme: a token would resolve to its light-mode
22
- * variant in the dark and wash out. Every one of these sits between 4.8 and
23
- * 5.4 contrast on white — comfortably readable, and none of them the pale or
24
- * near-black ends of the palette.
25
- */
26
- const MEDIUM_PALETTE = [
27
- '#0969da', // blue
28
- '#1a7f37', // green
29
- '#8250df', // purple
30
- '#bc4c00', // orange
31
- '#cf222e', // red
32
- '#1b7c83', // teal
33
- '#bf3989', // pink
34
- ];
35
- /**
36
- * What sits behind the cycling words.
37
- *
38
- * A coloured word over a photograph or an illustrated hero is legible only by
39
- * luck: the contrast changes with whatever the artwork happens to be doing
40
- * behind that glyph. A solid plate underneath makes it legible by
41
- * construction, whatever it is laid over.
42
- */
43
- const DEFAULT_BACKGROUND = '#ffffff';
44
13
  /**
45
14
  * Resolve a colour: a known token becomes the themed CSS variable, anything
46
15
  * else is passed through so a caller can still give a literal colour.
@@ -51,21 +20,6 @@ function resolveColor(color) {
51
20
  }
52
21
  return THEME_COLORS[color] ?? color;
53
22
  }
54
- /** Whether this reader has asked for less movement. */
55
- function usePrefersReducedMotion() {
56
- const [reduced, setReduced] = useState(false);
57
- useEffect(() => {
58
- if (typeof window === 'undefined' || !window.matchMedia) {
59
- return;
60
- }
61
- const query = window.matchMedia('(prefers-reduced-motion: reduce)');
62
- const update = () => setReduced(query.matches);
63
- update();
64
- query.addEventListener('change', update);
65
- return () => query.removeEventListener('change', update);
66
- }, []);
67
- return reduced;
68
- }
69
23
  /**
70
24
  * A line of text in which one or more words change, in step.
71
25
  *
@@ -80,20 +34,8 @@ function usePrefersReducedMotion() {
80
34
  * ]}
81
35
  * />
82
36
  * ```
83
- *
84
- * Set large, or set close to the width available, pass `reserveWidth` so the
85
- * cycling pieces hold the width of their longest word and the line neither
86
- * shifts on each tick nor wraps on its longest combination:
87
- *
88
- * ```tsx
89
- * <AnimatedText reserveWidth parts={[...]} background="transparent" />
90
- * ```
91
37
  */
92
- export function AnimatedText({ prefix, words, suffix, parts, color, palette = MEDIUM_PALETTE, background = DEFAULT_BACKGROUND, reserveWidth = false, intervalMs = 1800, transitionMs = 240, style, ...rest }) {
93
- // The words still change for a reader who asked for less movement — that is
94
- // what this component is for — but they do it without travelling, and the
95
- // fade is dropped rather than merely shortened.
96
- const reducedMotion = usePrefersReducedMotion();
38
+ export function AnimatedText({ prefix, words, suffix, parts, color, intervalMs = 1800, transitionMs = 240, style, ...rest }) {
97
39
  // The older three-prop form is the same thing with one cycling piece.
98
40
  const resolvedParts = useMemo(() => {
99
41
  if (parts && parts.length > 0) {
@@ -128,70 +70,12 @@ export function AnimatedText({ prefix, words, suffix, parts, color, palette = ME
128
70
  clearInterval(timer);
129
71
  };
130
72
  }, [cycleLength, intervalMs, transitionMs]);
131
- /**
132
- * The colour of the cycling piece at `ordinal`, for the current step.
133
- *
134
- * Derived rather than random so a re-render does not repaint the line, and
135
- * offset by the ordinal so two words showing at once never take the same
136
- * colour. The palette length being prime keeps the pairing from settling
137
- * into a short repeating pattern.
138
- */
139
- const paletteColor = (ordinal) => {
140
- if (palette.length === 0) {
141
- return undefined;
142
- }
143
- return palette[(step * 2 + ordinal * 3) % palette.length];
144
- };
145
- /** How a word arrives and leaves, and how far it travels doing it. */
146
- const motion = reducedMotion
147
- ? { transition: undefined }
148
- : {
149
- transition: `opacity ${transitionMs}ms ease, transform ${transitionMs}ms ease`,
150
- };
151
- const offset = reducedMotion ? 'translateY(0)' : 'translateY(0.25em)';
152
- /** The plate the words of a piece are drawn on, and the colour they take. */
153
- const pieceStyle = (part, ordinal) => {
154
- const plate = part.background ?? background;
155
- const hasPlate = plate !== 'transparent' && plate !== 'none';
156
- return {
157
- // An explicitly named colour always wins; otherwise the palette.
158
- color: resolveColor(part.color ?? color) ?? paletteColor(ordinal),
159
- backgroundColor: hasPlate ? plate : undefined,
160
- // Enough to keep the plate clear of the glyphs without the words
161
- // drifting apart from the fixed text around them.
162
- padding: hasPlate ? '0 0.25em' : undefined,
163
- borderRadius: hasPlate ? '0.25em' : undefined,
164
- };
165
- };
166
- const wordStyle = (part, ordinal) => ({
167
- ...pieceStyle(part, ordinal),
73
+ const wordStyle = (part) => ({
168
74
  display: 'inline-block',
169
- ...motion,
75
+ color: resolveColor(part.color ?? color),
76
+ transition: `opacity ${transitionMs}ms ease, transform ${transitionMs}ms ease`,
170
77
  opacity: visible ? 1 : 0,
171
- transform: visible ? 'translateY(0)' : offset,
172
- });
173
- /**
174
- * The piece as a slot: a grid of one cell, holding every word it can show.
175
- *
176
- * The cell takes the width of its widest occupant, so the slot is the same
177
- * width whichever word is up — which is the whole point of `reserveWidth`,
178
- * and why the words have to be in the document rather than measured.
179
- */
180
- const slotStyle = (part, ordinal) => ({
181
- ...pieceStyle(part, ordinal),
182
- display: 'inline-grid',
183
- justifyItems: 'center',
184
- });
185
- const wordInSlotStyle = (showing) => ({
186
- gridArea: '1 / 1',
187
- whiteSpace: 'nowrap',
188
- // Hidden rather than merely transparent: the words not showing should be
189
- // out of the accessibility tree and out of the way of the pointer, while
190
- // still holding the cell open.
191
- visibility: showing ? 'visible' : 'hidden',
192
- ...motion,
193
- opacity: showing && visible ? 1 : 0,
194
- transform: showing && visible ? 'translateY(0)' : offset,
78
+ transform: visible ? 'translateY(0)' : 'translateY(0.25em)',
195
79
  });
196
80
  return (_jsx("span", { ...rest, style: style, children: resolvedParts.map((part, index) => {
197
81
  if (typeof part === 'string') {
@@ -201,11 +85,7 @@ export function AnimatedText({ prefix, words, suffix, parts, color, palette = ME
201
85
  if (available.length === 0) {
202
86
  return null;
203
87
  }
204
- const ordinal = cyclingParts.indexOf(part);
205
- const current = step % available.length;
206
- return (_jsx("span", { "aria-live": "polite", style: reserveWidth ? slotStyle(part, ordinal) : wordStyle(part, ordinal), children: reserveWidth
207
- ? available.map((word, wordIndex) => (_jsx("span", { "aria-hidden": wordIndex === current ? undefined : true, style: wordInSlotStyle(wordIndex === current), children: word }, word)))
208
- : available[current] }, `words-${index}`));
88
+ return (_jsx("span", { "aria-live": "polite", style: wordStyle(part), children: available[step % available.length] }, `words-${index}`));
209
89
  }) }));
210
90
  }
211
91
  function greatestCommonDivisor(a, b) {
@@ -0,0 +1,56 @@
1
+ /**
2
+ * What the workspace says when the visitor's trial key runs out.
3
+ *
4
+ * The end of a trial of anonymous inference is a fact worth stating plainly.
5
+ * Left unsaid it arrives as an agent that has stopped answering, and a reader
6
+ * with no account has no way to tell that apart from a broken one — so this
7
+ * takes the workspace's place and says which of the two happened, and what to
8
+ * do about it. The workspace, not the conversation: on a layout whose
9
+ * transcript is a panel the reader has not opened, a message inside the chat
10
+ * is a message nobody sees.
11
+ *
12
+ * The form is `SignInSimple`, the same one the examples and the landing use,
13
+ * rather than a second sign-in written for this panel: a person who signs in
14
+ * here should end up in exactly the state they would have been in had they
15
+ * signed in first.
16
+ *
17
+ * Signing in is enough. The key is read from the IAM store on every render of
18
+ * the chat, so a member's token replaces the dead trial one where it stands —
19
+ * no reload, and the conversation is still underneath.
20
+ *
21
+ * @module components/anonymous/AnonymousKeyExpired
22
+ */
23
+ import type { JSX } from 'react';
24
+ export type AnonymousKeyExpiredProps = {
25
+ /**
26
+ * What the visitor was talking to, named so the panel is about their
27
+ * conversation rather than about authentication in general.
28
+ */
29
+ agentName?: string;
30
+ /**
31
+ * Whether anything else on the page still works without a key.
32
+ *
33
+ * True where the code runs in the browser: the kernel owes nothing to the
34
+ * inference service, so the notebook beside the chat is unaffected and
35
+ * saying so is the difference between "the agent stopped" and "the page
36
+ * broke".
37
+ */
38
+ sandboxStillRuns?: boolean;
39
+ /**
40
+ * Whether the credential that ran out was the anonymous trial key.
41
+ *
42
+ * It decides the wording, and the difference is not cosmetic. "This demo
43
+ * runs on a shared key" is true of a visitor who never signed in and simply
44
+ * wrong for a member whose own session ran out — that reader would go
45
+ * looking for a demo key they never had, and conclude the page had confused
46
+ * them with somebody else.
47
+ *
48
+ * Defaults to the trial, because that is the only credential this panel
49
+ * could describe when it was written and every existing caller means it.
50
+ */
51
+ temporary?: boolean;
52
+ /** Called after a successful sign-in, once the token is stored. */
53
+ onSignedIn?: () => void;
54
+ };
55
+ export declare function AnonymousKeyExpired({ agentName, sandboxStillRuns, temporary, onSignedIn, }: AnonymousKeyExpiredProps): JSX.Element;
56
+ export default AnonymousKeyExpired;
@@ -0,0 +1,96 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback } from 'react';
3
+ import { Text } from '@primer/react';
4
+ import { Box } from '@datalayer/primer-addons';
5
+ import { KeyIcon } from '@primer/octicons-react';
6
+ import { SignInSimple } from '../../views/iam/SignInSimple.js';
7
+ import { useCoreStore, iamStore } from '../../state/substates/index.js';
8
+ export function AnonymousKeyExpired({ agentName, sandboxStillRuns = false, temporary = true, onSignedIn, }) {
9
+ const { configuration } = useCoreStore();
10
+ const handleSignIn = useCallback((token) => {
11
+ /*
12
+ * Through the store's own check, not by writing the token into it.
13
+ *
14
+ * `checkIAMToken` fetches the user the token belongs to and stores both,
15
+ * which is what every other sign-in in the product does — setting the
16
+ * token alone would have left the rest of the page believing nobody was
17
+ * signed in, since what it looks at is the user. The agent works either
18
+ * way; the header above it would not have noticed.
19
+ */
20
+ void iamStore.getState().checkIAMToken(token);
21
+ // And the host lets the trial key go: it is spent, and a session left
22
+ // sitting in `expired` would keep this panel on screen over a working
23
+ // chat. The session is the host's — the in-page runtime that minted
24
+ // the key — so clearing it is `onSignedIn`'s job, not this panel's.
25
+ onSignedIn?.();
26
+ }, [onSignedIn]);
27
+ return (_jsx(Box, { sx: {
28
+ height: '100%',
29
+ minHeight: 0,
30
+ overflowY: 'auto',
31
+ bg: 'canvas.default',
32
+ px: 4,
33
+ py: 4,
34
+ }, children: _jsxs(Box, { sx: { maxWidth: 440, mx: 'auto' }, children: [_jsxs(Box, { sx: {
35
+ display: 'flex',
36
+ alignItems: 'center',
37
+ justifyContent: 'center',
38
+ gap: 2,
39
+ color: 'attention.fg',
40
+ mb: 2,
41
+ }, children: [_jsx(KeyIcon, { size: 20 }), _jsx(Text, { sx: { fontSize: 2, fontWeight: 'semibold', color: 'fg.default' }, children: temporary
42
+ ? 'This demo runs on a shared key'
43
+ : 'Your key has expired' })] }), _jsxs(Text, { as: "p", sx: {
44
+ fontSize: 1,
45
+ color: 'fg.muted',
46
+ textAlign: 'center',
47
+ mb: 3,
48
+ }, children: [temporary
49
+ ? `${agentName ?? 'The agent'} has used the time this key allows. Sign in to point your own agent at it, use your own data, and drop the time limit.`
50
+ : `${agentName ?? 'The agent'} stopped because your session ran out.`, sandboxStillRuns
51
+ ? ' Your notebook is still running in this page.'
52
+ : ''] }), _jsx(SignInSimple
53
+ // The panel above has already said what happened and why; the form's
54
+ // own hero would say it a second time, in a bigger font.
55
+ , {
56
+ // The panel above has already said what happened and why; the form's
57
+ // own hero would say it a second time, in a bigger font.
58
+ hideHero: true, fillHeight: false, calloutTitle: "Sign in to keep going",
59
+ /*
60
+ The social providers, which is how most people will do this.
61
+
62
+ Somebody whose trial just ran out mid-question is not going to
63
+ invent a password: the fastest door is the only one worth putting
64
+ first, and the form puts these above the handle-and-password
65
+ fields. All three, because which one a person has is not something
66
+ this panel can know.
67
+
68
+ The flow leaves the page and comes back to the host's own
69
+ `/iam/oauth2/<provider>/callback`. Both hosts that mount this
70
+ workspace answer that route — the landing has it in its router and
71
+ the examples shell handles it in `main.tsx` — so the buttons are on
72
+ rather than configurable. A host that adds neither would strand
73
+ somebody who clicked, and that is the thing to check before
74
+ embedding this somewhere new.
75
+ */
76
+ github: true, google: true, linkedin: true,
77
+ /*
78
+ And back to the page they were reading.
79
+
80
+ The form only forwards the current route when it is not `/`, which
81
+ is exactly the landing page this workspace sits on — so without
82
+ saying it explicitly, a visitor who signed in from the home page
83
+ would have been returned to the home page by accident rather than
84
+ on purpose, and from anywhere else would have lost their place.
85
+ */
86
+ socialSignInNavigationTarget: typeof window === 'undefined'
87
+ ? undefined
88
+ : `${window.location.pathname}${window.location.search}`,
89
+ // Where this deployment's IAM is. Left to the form when nothing says
90
+ // — it reads the page's own config, which is right for a host that
91
+ // has one and harmless for one that does not.
92
+ loginUrl: configuration?.iamUrl
93
+ ? `${configuration.iamUrl}/api/iam/v1/login`
94
+ : undefined, onSignIn: handleSignIn })] }) }));
95
+ }
96
+ export default AnonymousKeyExpired;
@@ -0,0 +1,63 @@
1
+ /**
2
+ * How long a visitor's trial key has left, burning down as they use it.
3
+ *
4
+ * An anonymous visitor reaches the model on a key the inference service mints
5
+ * for exactly this, and it does not last. Without a clock on screen the end of
6
+ * it arrives as an agent that suddenly stops answering — indistinguishable,
7
+ * from the reader's chair, from an agent that is broken. A ring that empties
8
+ * says the same thing in advance, and turns a failure into a deadline.
9
+ *
10
+ * Every number it draws comes from the key: when it dies and how long it was
11
+ * given are both read out of the JWT by whoever minted it, so this assumes no
12
+ * particular generosity from the service. The points at which it changes
13
+ * colour are shares of that, for the same reason — see `warnAt`.
14
+ *
15
+ * Purely a display: it is handed a moment in the future and counts to it. What
16
+ * to do when it arrives is the caller's business — the ring reports it once,
17
+ * through `onExpire`, and stops.
18
+ *
19
+ * @module components/anonymous/AnonymousKeyTimer
20
+ */
21
+ import type { JSX } from 'react';
22
+ export type AnonymousKeyTimerProps = {
23
+ /** Epoch milliseconds at which the trial ends. */
24
+ expiresAt: number;
25
+ /**
26
+ * How long the key was signed for, in milliseconds.
27
+ *
28
+ * Read off the token by whoever minted it. The ring draws what is left *of
29
+ * this*, and the colours below turn at a share of it — so a service that
30
+ * signs keys for ten minutes gets a timer that behaves like a ten-minute
31
+ * one without anything here changing. Without it the ring has no
32
+ * denominator, so it falls back to the time remaining when it first
33
+ * rendered.
34
+ */
35
+ grantedMs?: number;
36
+ /** What the clock is counting, said beside it. */
37
+ label?: string;
38
+ /**
39
+ * The share of the key still left when the clock starts warning, 0–1.
40
+ *
41
+ * A proportion rather than a number of seconds, because the service decides
42
+ * how long it signs a key for and this component must not have an opinion
43
+ * about that. A sixty-second key and a ten-minute one both turn amber with a
44
+ * quarter of themselves to go, and both are saying the same thing: you have
45
+ * about as long again as you have already used.
46
+ */
47
+ warnAt?: number;
48
+ /** The share left when it turns to danger, 0–1. */
49
+ dangerAt?: number;
50
+ /**
51
+ * The share left when it starts fading in and out, 0–1.
52
+ *
53
+ * The last resort of a control that has already changed colour twice and is
54
+ * still being ignored. Movement is what the eye catches in peripheral
55
+ * vision, which is where a header sits while somebody is typing — so this is
56
+ * the only point at which the clock is allowed to move.
57
+ */
58
+ pulseAt?: number;
59
+ /** Called once, when the clock reaches zero. */
60
+ onExpire?: () => void;
61
+ };
62
+ export declare function AnonymousKeyTimer({ expiresAt, grantedMs, label, warnAt, dangerAt, pulseAt, onExpire, }: AnonymousKeyTimerProps): JSX.Element;
63
+ export default AnonymousKeyTimer;
@@ -0,0 +1,140 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { Text } from '@primer/react';
4
+ import { Box } from '@datalayer/primer-addons';
5
+ import { KeyIcon } from '@primer/octicons-react';
6
+ /** Diameter of the ring, in pixels. Sized to sit level with a line of text. */
7
+ const RING = 14;
8
+ const STROKE = 2.5;
9
+ const RADIUS = (RING - STROKE) / 2;
10
+ const CIRCUMFERENCE = 2 * Math.PI * RADIUS;
11
+ /**
12
+ * The three points at which the clock changes its mind, as shares of the key.
13
+ *
14
+ * Proportions rather than seconds. The service decides how long it signs a key
15
+ * for — a minute today, five after a deployment changes one line — and a
16
+ * component with absolute thresholds either shouts for the whole life of a
17
+ * short key or says nothing until the last moment of a long one. A quarter
18
+ * left means the same thing at every length.
19
+ */
20
+ const DEFAULT_WARN_AT = 0.25;
21
+ const DEFAULT_DANGER_AT = 0.1;
22
+ const DEFAULT_PULSE_AT = 0.05;
23
+ /** How long one breath of the fade takes. Slow enough to read through. */
24
+ const PULSE_MS = 1200;
25
+ /** `m:ss`, or `0:07` — short enough to read at a glance in a header. */
26
+ function format(ms) {
27
+ const total = Math.max(0, Math.ceil(ms / 1000));
28
+ const minutes = Math.floor(total / 60);
29
+ const seconds = total % 60;
30
+ return `${minutes}:${String(seconds).padStart(2, '0')}`;
31
+ }
32
+ export function AnonymousKeyTimer({ expiresAt, grantedMs, label = 'Trial key', warnAt = DEFAULT_WARN_AT, dangerAt = DEFAULT_DANGER_AT, pulseAt = DEFAULT_PULSE_AT, onExpire, }) {
33
+ const [now, setNow] = useState(() => Date.now());
34
+ /* The denominator, fixed at the first render for want of a better one. A
35
+ ring whose full mark moved would read as time being added. */
36
+ const spanRef = useRef(grantedMs ?? Math.max(1, expiresAt - Date.now()));
37
+ const reported = useRef(false);
38
+ useEffect(() => {
39
+ /*
40
+ * Polled four times a second, re-rendered once.
41
+ *
42
+ * A one-second interval lands off the beat and lets the displayed number
43
+ * sit still for nearly two seconds, which reads as a stopped clock — so it
44
+ * looks often. But it only takes the new time when the second a reader
45
+ * would see has actually changed: everything downstream of this state is
46
+ * DOM, and rewriting it on a tick that changes nothing is what made the
47
+ * native tooltip flash while somebody was trying to read it.
48
+ */
49
+ const timer = window.setInterval(() => {
50
+ setNow(current => {
51
+ const next = Date.now();
52
+ const displayed = (at) => Math.ceil((expiresAt - at) / 1000);
53
+ return displayed(next) === displayed(current) ? current : next;
54
+ });
55
+ }, 250);
56
+ return () => window.clearInterval(timer);
57
+ }, [expiresAt]);
58
+ const left = Math.max(0, expiresAt - now);
59
+ useEffect(() => {
60
+ if (left > 0 || reported.current) {
61
+ return;
62
+ }
63
+ // Once. The interval keeps running until unmount, and a caller that
64
+ // re-renders on expiry must not be told again on every tick after it.
65
+ reported.current = true;
66
+ onExpire?.();
67
+ }, [left, onExpire]);
68
+ const fraction = Math.min(1, Math.max(0, left / spanRef.current));
69
+ /*
70
+ * Three steps, each louder than the last, and the loudest one moves.
71
+ *
72
+ * Colour, then a stronger colour, then a fade — because a reader mid-sentence
73
+ * is not looking at the header, and the header has to get louder without
74
+ * getting in the way. Movement is last on purpose: it is the only one of the
75
+ * three that costs the reader anything, so it is spent only when the other
76
+ * two have plainly not worked.
77
+ */
78
+ const pulsing = fraction <= pulseAt;
79
+ const tone = fraction <= dangerAt
80
+ ? 'danger.fg'
81
+ : fraction <= warnAt
82
+ ? 'attention.fg'
83
+ : 'fg.muted';
84
+ return (_jsxs(Box, { sx: {
85
+ display: 'inline-flex',
86
+ alignItems: 'center',
87
+ gap: 1,
88
+ px: 2,
89
+ py: '2px',
90
+ borderRadius: '999px',
91
+ border: '1px solid',
92
+ borderColor: 'border.muted',
93
+ bg: 'canvas.subtle',
94
+ color: tone,
95
+ // The clock is the point; the row it sits in must not resize as the
96
+ // digits change width.
97
+ fontVariantNumeric: 'tabular-nums',
98
+ /*
99
+ The last few percent, breathing.
100
+
101
+ Opacity only: nothing moves, nothing resizes, and the row it sits in
102
+ is unaffected — a pill that grew and shrank would push the controls
103
+ beside it about at exactly the moment somebody is reaching for one.
104
+ It never fades to nothing, because a clock that disappears is a clock
105
+ that has stopped rather than one that is running out.
106
+
107
+ Off for a reader who asked the machine to hold still. They have the
108
+ colour and the number, which is the information; the movement is
109
+ only how hard it knocks.
110
+ */
111
+ ...(pulsing
112
+ ? {
113
+ '@keyframes dla-key-pulse': {
114
+ '0%, 100%': { opacity: 1 },
115
+ '50%': { opacity: 0.45 },
116
+ },
117
+ animation: `dla-key-pulse ${PULSE_MS}ms ease-in-out infinite`,
118
+ '@media (prefers-reduced-motion: reduce)': {
119
+ animation: 'none',
120
+ },
121
+ }
122
+ : null),
123
+ },
124
+ /*
125
+ The whole story, for anyone who wonders what the ring is counting.
126
+
127
+ Deliberately without the number in it. The countdown re-renders twice
128
+ a second, and a native tooltip is torn down and rebuilt every time its
129
+ `title` changes — so a title carrying the remaining time flashed once
130
+ per tick for as long as the pointer rested on it, which is the one
131
+ place a reader is trying to read something. React writes the attribute
132
+ only when the string differs, so a constant one stays put and the
133
+ seconds are read off the pill beside it.
134
+
135
+ A status readout rather than a control, so the hint rides on the native
136
+ attribute: Primer's `Tooltip` requires an interactive child.
137
+ */
138
+ title: `${label}: this workspace is talking to the agent on a temporary key issued to nobody in particular. When it runs out the chat asks you to sign in. Sign in now for an account of your own.`, children: [_jsx(Box, { sx: { display: 'flex', alignItems: 'center', color: tone }, children: _jsx(KeyIcon, { size: 12 }) }), _jsxs(Box, { as: "svg", "aria-hidden": "true", focusable: "false", width: RING, height: RING, viewBox: `0 0 ${RING} ${RING}`, sx: { display: 'block', flexShrink: 0 }, children: [_jsx("circle", { cx: RING / 2, cy: RING / 2, r: RADIUS, fill: "none", stroke: "currentColor", strokeWidth: STROKE, opacity: 0.2 }), _jsx("circle", { cx: RING / 2, cy: RING / 2, r: RADIUS, fill: "none", stroke: "currentColor", strokeWidth: STROKE, strokeLinecap: "round", strokeDasharray: CIRCUMFERENCE, strokeDashoffset: CIRCUMFERENCE * (1 - fraction), transform: `rotate(-90 ${RING / 2} ${RING / 2})`, style: { transition: 'stroke-dashoffset 0.5s linear' } })] }), _jsx(Text, { sx: { fontSize: 0, color: tone, fontWeight: 'semibold' }, children: format(left) })] }));
139
+ }
140
+ export default AnonymousKeyTimer;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * What a visitor with no account sees while they are on a trial key.
3
+ *
4
+ * @module components/anonymous
5
+ */
6
+ export * from './AnonymousKeyTimer';
7
+ export * from './AnonymousKeyExpired';
@@ -0,0 +1,15 @@
1
+ /*
2
+ * Copyright (c) 2023-2025 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /*
6
+ * Copyright (c) 2025-2026 Datalayer, Inc.
7
+ * Distributed under the terms of the Modified BSD License.
8
+ */
9
+ /**
10
+ * What a visitor with no account sees while they are on a trial key.
11
+ *
12
+ * @module components/anonymous
13
+ */
14
+ export * from './AnonymousKeyTimer.js';
15
+ export * from './AnonymousKeyExpired.js';
@@ -1,3 +1,4 @@
1
+ import type { JSX } from 'react';
1
2
  export interface ISigninAPIKeyProps {
2
3
  /**
3
4
  * Home page route to navigate to after successful login
@@ -1,10 +1,4 @@
1
1
  import { 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
- * Datalayer License
7
- */
8
2
  import { useState } from 'react';
9
3
  import { Button, FormControl, TextInput } from '@primer/react';
10
4
  import { Box } from '@datalayer/primer-addons';
@@ -1,3 +1,4 @@
1
+ import type { JSX } from 'react';
1
2
  export interface ISigninProps {
2
3
  /**
3
4
  * Page heading
@@ -1,8 +1,4 @@
1
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
2
  import { useEffect, useState } from 'react';
7
3
  import { PageConfig, URLExt } from '@jupyterlab/coreutils';
8
4
  import { EyeIcon, EyeClosedIcon, MarkGithubIcon } from '@primer/octicons-react';
@@ -9,7 +9,7 @@ import type { StoryObj } from '@storybook/react-vite';
9
9
  */
10
10
  declare const meta: {
11
11
  title: string;
12
- component: (props: import("./SignIn").ISigninProps) => JSX.Element;
12
+ component: (props: import("./SignIn").ISigninProps) => import("react").JSX.Element;
13
13
  parameters: {
14
14
  layout: string;
15
15
  };
@@ -24,7 +24,7 @@ declare const meta: {
24
24
  showGitHubLogin?: boolean | undefined;
25
25
  showGoogleLogin?: boolean | undefined;
26
26
  showTokenLogin?: boolean | undefined;
27
- }>) => import("react/jsx-runtime").JSX.Element)[];
27
+ }>) => import("react").JSX.Element)[];
28
28
  tags: string[];
29
29
  };
30
30
  export default meta;
@@ -8,5 +8,5 @@ type IBoringAvatarProps = {
8
8
  /** Custom color palette passed to boring-avatars. When omitted the default Datalayer palette is used. */
9
9
  colors?: string[];
10
10
  };
11
- export declare const BoringAvatar: ({ displayName, variant, size, square, style, colors, }: IBoringAvatarProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const BoringAvatar: ({ displayName, variant, size, square, style, colors, }: IBoringAvatarProps) => import("react").JSX.Element;
12
12
  export default BoringAvatar;
@@ -8,7 +8,7 @@ declare const meta: {
8
8
  square?: boolean;
9
9
  style?: object;
10
10
  colors?: string[];
11
- }) => import("react/jsx-runtime").JSX.Element;
11
+ }) => import("react").JSX.Element;
12
12
  tags: string[];
13
13
  parameters: {
14
14
  layout: string;
@@ -20,5 +20,5 @@ export type DLAvatarProps = Omit<AvatarProps, 'src'> & {
20
20
  * `lh3.googleusercontent.com` (Google), LinkedIn media, etc. do not
21
21
  * deny the request based on the `Referer` header.
22
22
  */
23
- export declare const DLAvatar: ({ src, ...rest }: DLAvatarProps) => import("react/jsx-runtime").JSX.Element;
23
+ export declare const DLAvatar: ({ src, ...rest }: DLAvatarProps) => import("react").JSX.Element;
24
24
  export default DLAvatar;
@@ -3,10 +3,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  * Copyright (c) 2023-2025 Datalayer, Inc.
4
4
  * Distributed under the terms of the Modified BSD License.
5
5
  */
6
- /*
7
- * Copyright (c) 2023-2026 Datalayer, Inc.
8
- * Distributed under the terms of the Modified BSD License.
9
- */
10
6
  import { Avatar } from '@primer/react';
11
7
  import { getAvatarURL } from '../../utils/index.js';
12
8
  /**