@datalayer/agent-runtimes 1.3.88 → 1.3.90

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 (258) hide show
  1. package/lib/Agent.js +2 -18
  2. package/lib/AgentDocument.js +5 -55
  3. package/lib/AgentNode.js +31 -208
  4. package/lib/AgentNotebook.js +5 -59
  5. package/lib/agent-node/AgentNodeGallery.js +23 -111
  6. package/lib/agents/AgentDetails.js +36 -274
  7. package/lib/agents/AgentRuntimeChat.js +1 -8
  8. package/lib/chat/Chat.js +7 -46
  9. package/lib/chat/ChatFloating.js +15 -100
  10. package/lib/chat/ChatInline.js +5 -47
  11. package/lib/chat/ChatPopupStandalone.js +5 -53
  12. package/lib/chat/ChatSidebar.js +4 -51
  13. package/lib/chat/ChatStandalone.js +4 -45
  14. package/lib/chat/EphemeralSurfaceControl.js +5 -25
  15. package/lib/chat/assistant/AssistantContextMenu.d.ts +8 -0
  16. package/lib/chat/assistant/AssistantContextMenu.js +17 -1
  17. package/lib/chat/assistant/AssistantStage.js +6 -25
  18. package/lib/chat/assistant/BalloonParts.js +8 -40
  19. package/lib/chat/assistant/BalloonVisual.js +2 -2
  20. package/lib/chat/assistant/ConversationBalloon.js +2 -11
  21. package/lib/chat/assistant/DecisionAsk.js +3 -3
  22. package/lib/chat/assistant/SandboxDetailsDialog.js +3 -17
  23. package/lib/chat/assistant/SpeechBalloon.js +14 -78
  24. package/lib/chat/base/ChatBase.js +37 -172
  25. package/lib/chat/display/EmptyState.js +7 -35
  26. package/lib/chat/display/FloatingBrandButton.js +4 -34
  27. package/lib/chat/display/PoweredByTag.js +3 -14
  28. package/lib/chat/document/EphemeralDocument.js +3 -18
  29. package/lib/chat/header/ChatHeader.js +1 -17
  30. package/lib/chat/header/ChatHeaderBase.js +2 -24
  31. package/lib/chat/header/ChatViewModeToggle.js +7 -29
  32. package/lib/chat/indicators/McpStatusIndicator.js +3 -12
  33. package/lib/chat/indicators/SandboxStatusIndicator.js +6 -34
  34. package/lib/chat/indicators/SkillsStatusIndicator.js +3 -12
  35. package/lib/chat/indicators/TypingDots.js +1 -11
  36. package/lib/chat/messages/ChatMessageList.js +58 -185
  37. package/lib/chat/messages/ChatMessages.js +15 -79
  38. package/lib/chat/messages/FormSubmissionMessage.js +2 -33
  39. package/lib/chat/messages/NotebookToolSurfaces.js +12 -41
  40. package/lib/chat/messages/TurnFooter.js +4 -10
  41. package/lib/chat/notebook/EphemeralNotebook.js +2 -10
  42. package/lib/chat/parts/ReasoningPart.js +2 -16
  43. package/lib/chat/parts/TextPart.js +2 -12
  44. package/lib/chat/parts/ToolPart.js +16 -90
  45. package/lib/chat/presence/Presence.js +5 -33
  46. package/lib/chat/prompt/FloatingCard.js +1 -13
  47. package/lib/chat/prompt/InputPrompt.js +1 -6
  48. package/lib/chat/prompt/InputPromptBase.js +4 -17
  49. package/lib/chat/prompt/InputPromptLexical.js +44 -45
  50. package/lib/chat/prompt/InputPromptText.js +1 -1
  51. package/lib/chat/prompt/footer/InPromptFooter.js +1 -8
  52. package/lib/chat/prompt/menus/AgentsMenu.js +1 -1
  53. package/lib/chat/prompt/menus/InlineAgentsMenu.js +1 -1
  54. package/lib/chat/prompt/menus/ModelSelector.js +1 -5
  55. package/lib/chat/prompt/menus/SkillsMenu.js +3 -30
  56. package/lib/chat/prompt/menus/SuggestionsMenu.js +1 -1
  57. package/lib/chat/prompt/menus/ToolsMenu.js +4 -48
  58. package/lib/chat/prompt/plugins/AgentMentionPlugin.js +2 -9
  59. package/lib/chat/prompt/plugins/CommandPlugin.js +2 -9
  60. package/lib/chat/prompt/plugins/MentionChip.js +1 -15
  61. package/lib/chat/prompt/stack.js +1 -19
  62. package/lib/chat/tools/A2AAgentDialog.js +9 -42
  63. package/lib/chat/tools/SubagentActivity.js +5 -22
  64. package/lib/chat/tools/ToolApprovalBanner.js +4 -34
  65. package/lib/chat/tools/ToolApprovalDialog.js +4 -19
  66. package/lib/chat/tools/ToolCallDisplay.js +12 -97
  67. package/lib/chat/usage/ContextPie.js +4 -45
  68. package/lib/components/a2ui/datalayer/Chart.js +4 -10
  69. package/lib/components/a2ui/datalayer/Chat.js +2 -10
  70. package/lib/components/a2ui/datalayer/Download.js +1 -1
  71. package/lib/components/a2ui/datalayer/Evidence.js +1 -15
  72. package/lib/components/a2ui/datalayer/FileUpload.js +1 -12
  73. package/lib/components/a2ui/datalayer/Table.js +9 -17
  74. package/lib/components/a2ui/datalayer/formWidgets.js +3 -2
  75. package/lib/components/a2ui/datalayer/parts.js +1 -16
  76. package/lib/components/agents/AgentSummary.js +1 -51
  77. package/lib/components/cards/NotificationEventCard.js +6 -72
  78. package/lib/components/cards/OutputCard.js +4 -48
  79. package/lib/components/cards/ToolApprovalCard.js +2 -35
  80. package/lib/components/code-sandboxes/CodeSandboxCellVariables.js +1 -1
  81. package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +4 -14
  82. package/lib/components/code-sandboxes/CodeSandboxPicker.js +16 -21
  83. package/lib/components/code-sandboxes/CodeSandboxVariables.js +2 -2
  84. package/lib/components/scheduler/ScheduleMenu.js +5 -10
  85. package/lib/components/specs/SpecPayloadPreview.js +1 -26
  86. package/lib/components/teams/A2ATeamGraph.d.ts +4 -3
  87. package/lib/components/teams/A2ATeamGraph.js +25 -71
  88. package/lib/components/teams/AnswerSurfacesView.js +2 -2
  89. package/lib/components/teams/NotebookPreview.js +1 -10
  90. package/lib/components/teams/NotebookPreviewView.js +2 -3
  91. package/lib/components/teams/SceneTranscript.js +3 -17
  92. package/lib/components/teams/SceneView.js +1 -8
  93. package/lib/components/teams/TeamNotebook.js +5 -13
  94. package/lib/components/teams/TeamNotebookView.js +2 -12
  95. package/lib/components/teams/index.d.ts +1 -0
  96. package/lib/components/teams/index.js +1 -0
  97. package/lib/components/teams/useBalloonRoom.d.ts +39 -0
  98. package/lib/components/teams/useBalloonRoom.js +89 -0
  99. package/lib/config/AgentConfiguration.js +22 -225
  100. package/lib/context/ContextDistribution.js +7 -41
  101. package/lib/context/ContextInspector.js +9 -107
  102. package/lib/context/ContextPanel.js +11 -86
  103. package/lib/context/ContextUsage.js +6 -34
  104. package/lib/context/CostTracker.js +7 -42
  105. package/lib/context/MessageHistory.js +3 -37
  106. package/lib/context/TurnGraphChart.js +9 -41
  107. package/lib/examples/A2UiAgentExample.js +6 -108
  108. package/lib/examples/A2UiComponentsGalleryExample.js +1 -1
  109. package/lib/examples/A2UiContactCardExample.js +1 -1
  110. package/lib/examples/A2UiJupyterOutputExample.js +25 -125
  111. package/lib/examples/A2UiRestaurantExample.js +1 -1
  112. package/lib/examples/A2UiViewerExample.js +1 -1
  113. package/lib/examples/AgUiAgenticExample.js +3 -35
  114. package/lib/examples/AgUiBackendToolRenderingExample.js +2 -25
  115. package/lib/examples/AgUiHaikuGenUiExample.js +2 -32
  116. package/lib/examples/AgUiHumanInTheLoopExample.js +5 -59
  117. package/lib/examples/AgUiSharedStateExample.js +6 -56
  118. package/lib/examples/AgUiToolsBasedGenUiExample.js +25 -120
  119. package/lib/examples/AgentA2AExample.js +1 -15
  120. package/lib/examples/AgentA2ATeamExample.js +6 -30
  121. package/lib/examples/AgentCheckpointsExample.js +11 -145
  122. package/lib/examples/AgentCodeSandboxExample.js +5 -108
  123. package/lib/examples/AgentCodeSandboxesExample.js +3 -30
  124. package/lib/examples/AgentCodemodeExample.js +9 -85
  125. package/lib/examples/AgentCompactionExample.js +3 -64
  126. package/lib/examples/AgentDecideExample.js +1 -13
  127. package/lib/examples/AgentEvalsExample.js +5 -60
  128. package/lib/examples/AgentGuardrailsExample.js +4 -28
  129. package/lib/examples/AgentHooksExample.js +1 -1
  130. package/lib/examples/AgentInferenceProviderExample.js +5 -96
  131. package/lib/examples/AgentMCPExample.js +7 -105
  132. package/lib/examples/AgentMemoryExample.js +5 -74
  133. package/lib/examples/AgentMonitoringExample.js +7 -53
  134. package/lib/examples/AgentNotificationsExample.js +3 -61
  135. package/lib/examples/AgentOtelExample.js +3 -72
  136. package/lib/examples/AgentOutputsExample.js +6 -81
  137. package/lib/examples/AgentParametersExample.js +2 -37
  138. package/lib/examples/AgentSkillsExample.js +3 -45
  139. package/lib/examples/AgentSubagentsExample.js +6 -56
  140. package/lib/examples/AgentToolApprovalsExample.js +1 -11
  141. package/lib/examples/AgentTriggersExample.js +29 -239
  142. package/lib/examples/AgentspecsExample.js +6 -60
  143. package/lib/examples/AssistantExample.js +5 -5
  144. package/lib/examples/AssistantGalleryExample.js +8 -65
  145. package/lib/examples/CellExample.js +1 -6
  146. package/lib/examples/ChatCustomExample.js +2 -31
  147. package/lib/examples/ChatExample.js +1 -9
  148. package/lib/examples/ChatStandaloneExample.js +3 -37
  149. package/lib/examples/CopilotKitLexicalExample.js +1 -24
  150. package/lib/examples/DecksAgent.js +1 -1
  151. package/lib/examples/DocumentPageAgent.js +1 -1
  152. package/lib/examples/HomeExample.js +14 -62
  153. package/lib/examples/Lexical2Example.js +3 -32
  154. package/lib/examples/LexicalAgentExample.js +2 -34
  155. package/lib/examples/LexicalAgentSidebarExample.js +3 -34
  156. package/lib/examples/LoopAppComputerExample.js +1 -1
  157. package/lib/examples/LoopShellExample.js +2 -2
  158. package/lib/examples/LoopStrategyExample.js +15 -87
  159. package/lib/examples/LoopWorkspaceEmbed.js +2 -18
  160. package/lib/examples/LoopWorkspaceExample.js +2 -2
  161. package/lib/examples/NotebookAgentExample.js +2 -33
  162. package/lib/examples/NotebookAgentSidebarExample.js +3 -46
  163. package/lib/examples/NotebookCollaborationExample.js +1 -31
  164. package/lib/examples/NotebookExample.js +1 -18
  165. package/lib/examples/NotebookPageAgent.js +1 -1
  166. package/lib/examples/ScenesExample.js +5 -24
  167. package/lib/examples/VoiceChatExample.js +1 -1
  168. package/lib/examples/components/AuthRequiredView.js +1 -7
  169. package/lib/examples/components/ErrorView.js +1 -8
  170. package/lib/examples/components/ExampleErrorBoundary.js +1 -14
  171. package/lib/examples/components/FooterMetrics.js +1 -7
  172. package/lib/examples/components/Header.js +12 -51
  173. package/lib/examples/components/HeaderControls.js +1 -9
  174. package/lib/examples/components/LexicalEditor.js +1 -8
  175. package/lib/examples/components/MainContent.js +1 -13
  176. package/lib/examples/components/MockFileBrowser.js +4 -40
  177. package/lib/examples/components/SessionTabs.js +1 -1
  178. package/lib/examples/components/TimeTravel.js +1 -13
  179. package/lib/examples/main.js +13 -81
  180. package/lib/examples/scenes/A2UiComponentsGalleryScene.js +3 -34
  181. package/lib/examples/scenes/A2UiContactCardScene.js +3 -35
  182. package/lib/examples/scenes/A2UiRestaurantScene.js +3 -53
  183. package/lib/examples/scenes/A2UiViewerScene.js +3 -34
  184. package/lib/examples/utils/AssistantGalleryGrid.js +6 -35
  185. package/lib/examples2/DatalayerNotebookExample.js +3 -33
  186. package/lib/examples2/NativeNavigationExample.js +4 -10
  187. package/lib/examples2/NotebookMutationsKernel.js +2 -1
  188. package/lib/examples2/NotebookMutationsServiceManager.js +2 -1
  189. package/lib/examples2/ReactRouterExample.js +14 -42
  190. package/lib/hooks/useToolApprovals.d.ts +2 -34
  191. package/lib/hooks/useToolApprovals.js +1 -64
  192. package/lib/identity/AgentIdentity.js +17 -62
  193. package/lib/identity/IdentityConnect.js +13 -59
  194. package/lib/identity/OAuthCallback.js +6 -44
  195. package/lib/lexical/ChatInlinePlugin.js +6 -14
  196. package/lib/loop/apps/AppRenderer.d.ts +4 -3
  197. package/lib/loop/apps/AppRenderer.js +11 -12
  198. package/lib/loop/apps/appspec.js +6 -3
  199. package/lib/loop/embed/AppEmbed.d.ts +1 -1
  200. package/lib/loop/embed/AppEmbed.js +2 -1
  201. package/lib/loop/embed/LoopEmbed.js +1 -7
  202. package/lib/loop/embed/embedConfig.d.ts +3 -3
  203. package/lib/loop/embed/embedConfig.js +2 -3
  204. package/lib/loop/embed/embedTheme.d.ts +4 -4
  205. package/lib/loop/embed/embedTheme.js +11 -7
  206. package/lib/loop/plugins/a2a-sidebar/A2ASidebar.js +7 -34
  207. package/lib/loop/plugins/a2ui/A2uiView.js +4 -12
  208. package/lib/loop/plugins/a2ui-surface/InlineSurface.js +1 -16
  209. package/lib/loop/plugins/a2ui-surface/SurfaceToolResult.js +2 -12
  210. package/lib/loop/plugins/agents/AnonymousKeyBadge.js +3 -2
  211. package/lib/loop/plugins/agents/SandboxSelector.js +3 -7
  212. package/lib/loop/plugins/agents/SandboxView.js +4 -27
  213. package/lib/loop/plugins/agents/TeamMemberPicker.js +2 -2
  214. package/lib/loop/plugins/agentspecs/AgentspecPicker.js +3 -2
  215. package/lib/loop/plugins/app-activity/AppActivity.js +1 -1
  216. package/lib/loop/plugins/app-computer/AppComputer.js +5 -21
  217. package/lib/loop/plugins/app-elements/AppElements.js +2 -31
  218. package/lib/loop/plugins/app-page/AppPage.js +1 -1
  219. package/lib/loop/plugins/app-rules/AppRulesCard.js +4 -20
  220. package/lib/loop/plugins/assistant/index.js +1 -13
  221. package/lib/loop/plugins/chat/ChatView.js +40 -106
  222. package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.js +2 -13
  223. package/lib/loop/plugins/decks/DeckSurface.js +2 -2
  224. package/lib/loop/plugins/document/DocumentView.js +4 -12
  225. package/lib/loop/plugins/document-toolbar/SandboxStatusItem.js +3 -8
  226. package/lib/loop/plugins/graph/GraphView.js +2 -2
  227. package/lib/loop/plugins/input-prompt/ComposerView.js +1 -1
  228. package/lib/loop/plugins/notebook/NotebookView.js +3 -11
  229. package/lib/loop/plugins/page-layout/SplitLayout.js +11 -34
  230. package/lib/loop/plugins/page-layout/TurnPanel.js +9 -35
  231. package/lib/loop/plugins/shell/useEditorPreviews.js +3 -2
  232. package/lib/loop/plugins/subagent-activity/SubagentPulse.js +1 -13
  233. package/lib/loop/plugins/window-frame/WindowFrame.js +10 -44
  234. package/lib/loop/plugins/window-frame/index.js +1 -1
  235. package/lib/loop/shell/LoopWorkspace.js +34 -77
  236. package/lib/loop/shell/PluginToggles.js +4 -15
  237. package/lib/loop/shell/SidebarRail.js +8 -40
  238. package/lib/loop/shell/ViewSwitcher.js +4 -24
  239. package/lib/loop-main.js +2 -3
  240. package/lib/mcp/McpServerManager.js +6 -37
  241. package/lib/portable/index.d.ts +11 -0
  242. package/lib/portable/index.js +20 -0
  243. package/lib/protocols/AGUIAdapter.js +2 -2
  244. package/lib/protocols/BaseProtocolAdapter.d.ts +2 -0
  245. package/lib/protocols/BaseProtocolAdapter.js +4 -0
  246. package/lib/specs/apps.js +6 -0
  247. package/lib/specs/appspecSchema.js +11 -4
  248. package/lib/stories/loop/ReferenceScreens.js +17 -91
  249. package/lib/stories/loop/pictures-main.js +1 -1
  250. package/lib/types/agentspecs.d.ts +5 -2
  251. package/lib/types/protocol.d.ts +2 -0
  252. package/lib/utils/approvals.d.ts +59 -0
  253. package/lib/utils/approvals.js +101 -0
  254. package/lib/voice/VoiceInput.js +3 -39
  255. package/package.json +2 -2
  256. package/scripts/codegen/generate_envvars.py +0 -1
  257. package/lib/shims/primerAddonsBox.d.ts +0 -1
  258. package/lib/shims/primerAddonsBox.js +0 -7
@@ -474,13 +474,7 @@ const AgentRuntimesIAMCallback = () => {
474
474
  window.localStorage.setItem('selectedExample', 'HomeExample');
475
475
  window.location.replace('/');
476
476
  }, []);
477
- return (_jsx(JupyterReactTheme, { children: _jsx(Box, { sx: {
478
- display: 'flex',
479
- alignItems: 'center',
480
- justifyContent: 'center',
481
- minHeight: '100vh',
482
- p: 3,
483
- }, children: _jsxs(Box, { sx: { textAlign: 'center' }, children: [status === 'processing' ? _jsx(Spinner, { size: "large" }) : null, _jsx(Text, { as: "p", sx: {
477
+ return (_jsx(JupyterReactTheme, { children: _jsx(Box, { display: "flex", alignItems: "center", justifyContent: "center", minHeight: "100vh", p: 3, children: _jsxs(Box, { textAlign: "center", children: [status === 'processing' ? _jsx(Spinner, { size: "large" }) : null, _jsx(Text, { as: "p", sx: {
484
478
  mt: 3,
485
479
  color: status === 'error' ? 'danger.fg' : 'fg.default',
486
480
  }, children: message })] }) }) }));
@@ -1132,54 +1126,17 @@ const ExampleAppThemed = ({ selectedExample, isChangingExample, error, ExampleCo
1132
1126
  syncTokenToIamStore(undefined);
1133
1127
  setShowSignIn(true);
1134
1128
  }, [clearAuth, syncTokenToIamStore]);
1135
- return (_jsx(DatalayerThemeProvider, { colorMode: colorMode, theme: cfg.primerTheme, themeStyles: cfg.themeStyles, children: _jsxs(Box, { sx: {
1136
- width: '100vw',
1137
- height: '100vh',
1138
- overflow: 'hidden',
1139
- bg: 'canvas.default',
1140
- color: 'fg.default',
1141
- }, children: [_jsxs(Box, { sx: {
1142
- position: 'fixed',
1143
- top: 0,
1144
- left: 0,
1145
- right: 0,
1146
- zIndex: 100,
1147
- px: 3,
1148
- display: 'flex',
1149
- alignItems: 'center',
1150
- justifyContent: 'space-between',
1151
- gap: 3,
1152
- height: '60px',
1153
- bg: 'canvas.default',
1154
- borderBottom: '1px solid',
1155
- borderColor: 'border.default',
1156
- }, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Box, { as: "button", onClick: () => {
1129
+ return (_jsx(DatalayerThemeProvider, { colorMode: colorMode, theme: cfg.primerTheme, themeStyles: cfg.themeStyles, children: _jsxs(Box, { width: "100vw", height: "100vh", overflow: "hidden", bg: "canvas.default", color: "fg.default", children: [_jsxs(Box, { position: "fixed", top: 0, left: 0, right: 0, zIndex: 100, px: 3, display: "flex", alignItems: "center", justifyContent: "space-between", gap: 3, height: "60px", bg: "canvas.default", borderBottom: "1px solid", borderColor: "border.default", children: [_jsxs(Box, { display: "flex", alignItems: "center", gap: 2, children: [_jsx(Box, { as: "button", onClick: () => {
1157
1130
  // Also the way back out of the sign-in view, which nothing
1158
1131
  // else dismisses: with the example chooser hidden behind it,
1159
1132
  // a person who changed their mind would otherwise be stuck.
1160
1133
  setShowSignIn(false);
1161
1134
  void onExampleChange('HomeExample');
1162
- }, title: "Home", "aria-label": "Go to examples home", sx: {
1163
- display: 'inline-flex',
1164
- alignItems: 'center',
1165
- justifyContent: 'center',
1166
- width: '32px',
1167
- height: '32px',
1168
- border: '1px solid',
1169
- borderColor: 'border.default',
1170
- borderRadius: 2,
1171
- bg: 'canvas.default',
1172
- color: 'fg.default',
1173
- cursor: isChangingExample ? 'not-allowed' : 'pointer',
1174
- }, disabled: isChangingExample, children: _jsx(HomeIcon, { size: 16 }) }), !shouldShowAuthScreen && (_jsxs(ActionMenu, { children: [_jsx(ActionMenu.Button, { disabled: isChangingExample, "aria-label": "Select example", sx: { minWidth: '250px', justifyContent: 'space-between' }, onClick: () => setExampleSearch(''), children: selectedExampleEntry?.title ?? selectedExample }), _jsxs(ActionMenu.Overlay, { width: "large", sx: {
1135
+ }, title: "Home", "aria-label": "Go to examples home", display: "inline-flex", alignItems: "center", justifyContent: "center", width: "32px", height: "32px", border: "1px solid", borderColor: "border.default", borderRadius: 2, bg: "canvas.default", color: "fg.default", cursor: isChangingExample ? 'not-allowed' : 'pointer', disabled: isChangingExample, children: _jsx(HomeIcon, { size: 16 }) }), !shouldShowAuthScreen && (_jsxs(ActionMenu, { children: [_jsx(ActionMenu.Button, { disabled: isChangingExample, "aria-label": "Select example", sx: { minWidth: '250px', justifyContent: 'space-between' }, onClick: () => setExampleSearch(''), children: selectedExampleEntry?.title ?? selectedExample }), _jsxs(ActionMenu.Overlay, { width: "large", sx: {
1175
1136
  maxHeight: 'calc(100vh - 72px)',
1176
1137
  overflowY: 'auto',
1177
1138
  overscrollBehavior: 'contain',
1178
- }, children: [_jsx(Box, { sx: {
1179
- p: 2,
1180
- borderBottom: '1px solid',
1181
- borderColor: 'border.default',
1182
- }, children: _jsx(TextInput, { autoFocus: true, block: true, "aria-label": "Filter examples", placeholder: "Filter examples...", value: exampleSearch, onChange: event => setExampleSearch(event.target.value) }) }), _jsxs(ActionList, { selectionVariant: "single", children: [availableExamples
1139
+ }, children: [_jsx(Box, { p: 2, borderBottom: "1px solid", borderColor: "border.default", children: _jsx(TextInput, { autoFocus: true, block: true, "aria-label": "Filter examples", placeholder: "Filter examples...", value: exampleSearch, onChange: event => setExampleSearch(event.target.value) }) }), _jsxs(ActionList, { selectionVariant: "single", children: [availableExamples
1183
1140
  .filter(example => example.id === 'HomeExample' &&
1184
1141
  (!exampleSearch.trim() ||
1185
1142
  example.title
@@ -1190,10 +1147,7 @@ const ExampleAppThemed = ({ selectedExample, isChangingExample, error, ExampleCo
1190
1147
  if (!examples?.length)
1191
1148
  return null;
1192
1149
  return (_jsx(ActionList.Group, { title: groupName, children: examples.map(example => (_jsx(ActionList.Item, { selected: example.id === selectedExample, onSelect: () => void onExampleChange(example.id), children: example.title }, example.id))) }, groupName));
1193
- })] })] })] })), !shouldShowAuthScreen && !exampleOwnsSandboxControl && (_jsx(Box, { "aria-label": "Where the example runs", sx: {
1194
- minWidth: '320px',
1195
- opacity: isHome || isChangingExample ? 0.6 : 1,
1196
- }, children: _jsx(SegmentedControl, { "aria-label": "Where the example runs", fullWidth: true, size: "small", children: RUNTIME_TARGETS.map(target => {
1150
+ })] })] })] })), !shouldShowAuthScreen && !exampleOwnsSandboxControl && (_jsx(Box, { "aria-label": "Where the example runs", minWidth: "320px", opacity: isHome || isChangingExample ? 0.6 : 1, children: _jsx(SegmentedControl, { "aria-label": "Where the example runs", fullWidth: true, size: "small", children: RUNTIME_TARGETS.map(target => {
1197
1151
  const capabilities = runtimeTargetCapabilities(target);
1198
1152
  // Signing in is what the Datalayer target needs; saying so on
1199
1153
  // the button beats letting the switch fail and explaining
@@ -1207,14 +1161,10 @@ const ExampleAppThemed = ({ selectedExample, isChangingExample, error, ExampleCo
1207
1161
  void onRuntimeTargetChange(target);
1208
1162
  }
1209
1163
  }, children: capabilities.label }, target));
1210
- }) }) })), !isHome && !shouldShowAuthScreen && !isLoopWorkspace && (_jsx(AgentSummary, { summary: agentSummary })), isChangingExample && (_jsx(Box, { as: "span", sx: { color: 'fg.muted', fontSize: 0 }, children: "Loading\u2026" }))] }), _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 3 }, children: [_jsx(AppearanceControlsWithStore, { useStore: useExampleThemeStore }), _jsx(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: token ? (_jsxs(_Fragment, { children: [_jsx(UserBadge, { token: token, variant: "small", onTokenExpired: () => {
1164
+ }) }) })), !isHome && !shouldShowAuthScreen && !isLoopWorkspace && (_jsx(AgentSummary, { summary: agentSummary })), isChangingExample && (_jsx(Box, { as: "span", color: "fg.muted", fontSize: 0, children: "Loading\u2026" }))] }), _jsxs(Box, { display: "flex", alignItems: "center", gap: 3, children: [_jsx(AppearanceControlsWithStore, { useStore: useExampleThemeStore }), _jsx(Box, { display: "flex", alignItems: "center", gap: 2, children: token ? (_jsxs(_Fragment, { children: [_jsx(UserBadge, { token: token, variant: "small", onTokenExpired: () => {
1211
1165
  handleHeaderLogout();
1212
1166
  setShowSignIn(true);
1213
- } }), _jsx(Button, { size: "small", variant: "invisible", onClick: handleHeaderLogout, leadingVisual: SignOutIcon, sx: { color: 'fg.muted' }, children: "Sign out" })] })) : (_jsx(Button, { size: "small", variant: "invisible", onClick: () => setShowSignIn(true), leadingVisual: SignInIcon, sx: { color: 'fg.muted' }, children: "Sign in" })) }), _jsx(Box, { as: "a", href: "https://datalayer.ai", target: "_blank", rel: "noopener noreferrer", "aria-label": "Open Datalayer website", sx: { display: 'inline-flex', alignItems: 'center' }, children: _jsx(DatalayerLogoText, { size: 24, variant: themeVariant, colorMode: colorMode, primaryColor: logoColors.primary, secondaryColor: logoColors.secondary, textColor: logoColors.textColor, primaryGradient: logoColors.primaryGradient, secondaryGradient: logoColors.secondaryGradient, gradient: true }) })] })] }), _jsx(Box, { sx: {
1214
- marginTop: '60px',
1215
- height: 'calc(100vh - 60px)',
1216
- overflow: 'hidden',
1217
- }, children: shouldShowAuthScreen ? (
1167
+ } }), _jsx(Button, { size: "small", variant: "invisible", onClick: handleHeaderLogout, leadingVisual: SignOutIcon, sx: { color: 'fg.muted' }, children: "Sign out" })] })) : (_jsx(Button, { size: "small", variant: "invisible", onClick: () => setShowSignIn(true), leadingVisual: SignInIcon, sx: { color: 'fg.muted' }, children: "Sign in" })) }), _jsx(Box, { as: "a", href: "https://datalayer.ai", target: "_blank", rel: "noopener noreferrer", "aria-label": "Open Datalayer website", display: "inline-flex", alignItems: "center", children: _jsx(DatalayerLogoText, { size: 24, variant: themeVariant, colorMode: colorMode, primaryColor: logoColors.primary, secondaryColor: logoColors.secondary, textColor: logoColors.textColor, primaryGradient: logoColors.primaryGradient, secondaryGradient: logoColors.secondaryGradient, gradient: true }) })] })] }), _jsx(Box, { marginTop: "60px", height: "calc(100vh - 60px)", overflow: "hidden", children: shouldShowAuthScreen ? (
1218
1168
  /*
1219
1169
  Signing in, beside what can be seen without it.
1220
1170
 
@@ -1224,33 +1174,15 @@ const ExampleAppThemed = ({ selectedExample, isChangingExample, error, ExampleCo
1224
1174
  putting it here turns a closed door into a choice: sign in for
1225
1175
  the rest, or try this one now.
1226
1176
  */
1227
- _jsx(Box, { sx: {
1228
- width: '100%',
1229
- height: '100%',
1230
- bg: 'canvas.backdrop',
1231
- p: 3,
1232
- overflow: 'auto',
1233
- }, children: _jsxs(Box, { sx: {
1234
- display: 'grid',
1235
- // Stacked on a narrow window, sign-in first: it is what the
1236
- // reader came here for, and a column of cards above the form
1237
- // would bury it.
1238
- gridTemplateColumns: ['1fr', '1fr', '440px minmax(0, 1fr)'],
1239
- gap: 4,
1240
- maxWidth: 1400,
1241
- mx: 'auto',
1242
- alignItems: 'start',
1243
- }, children: [_jsx(SignInSimple, { onSignIn: handleHeaderSignIn, onApiKeySignIn: apiKey => handleHeaderSignIn(apiKey, 'api-key-user'), title: "Agent Runtimes Examples", description: "Sign in to run authenticated examples and tools.", leadingIcon: _jsx(HomeIcon, { size: 24 }),
1177
+ _jsx(Box, { width: "100%", height: "100%", bg: "canvas.backdrop", p: 3, overflow: "auto", children: _jsxs(Box, { display: "grid",
1178
+ // Stacked on a narrow window, sign-in first: it is what the
1179
+ // reader came here for, and a column of cards above the form
1180
+ // would bury it.
1181
+ gridTemplateColumns: ['1fr', '1fr', '440px minmax(0, 1fr)'], gap: 4, maxWidth: 1400, mx: "auto", alignItems: "start", children: [_jsx(SignInSimple, { onSignIn: handleHeaderSignIn, onApiKeySignIn: apiKey => handleHeaderSignIn(apiKey, 'api-key-user'), title: "Agent Runtimes Examples", description: "Sign in to run authenticated examples and tools.", leadingIcon: _jsx(HomeIcon, { size: 24 }),
1244
1182
  // Level with the cards beside it. Left to itself the form
1245
1183
  // centres in `100vh`, which put it half a screen below the
1246
1184
  // column it shares a row with.
1247
- fillHeight: false }), _jsx(Box, { sx: {
1248
- border: '1px solid',
1249
- borderColor: 'border.default',
1250
- borderRadius: 2,
1251
- overflow: 'hidden',
1252
- bg: 'canvas.default',
1253
- }, children: _jsx(HomeExample, { examples: anonymousExampleEntries, searchQuery: "", onSelectExample: name => void onExampleChange(name) }) })] }) })) : isChangingExample ? (_jsxs(Box, { sx: { p: 5, textAlign: 'center', color: 'fg.muted' }, children: [_jsxs("h3", { children: ["Loading ", selectedExample, "\u2026"] }), _jsx("p", { children: "Please wait while the example loads." })] })) : ExampleComponent ? (_jsx(ExampleErrorBoundary, { children: _jsx(ExampleWrapper, { children: _jsx(ExampleComponent, { ...exampleProps }, `${selectedExample}:${runtimeTarget}`) }, `${selectedExample}:${runtimeTarget}`) }, `${selectedExample}:${runtimeTarget}`)) : null }), _jsx(SlidingPanel, { isOpen: Boolean(topNotice), onDismiss: onDismissTopNotice, position: "north", variant: topNotice?.tone ?? 'info', durationMs: topNotice?.durationMs ?? 0, fullWidth: true, offset: 60, zIndex: 160, message: topNotice?.message || '', details: topNotice?.details })] }) }));
1185
+ fillHeight: false }), _jsx(Box, { border: "1px solid", borderColor: "border.default", borderRadius: 2, overflow: "hidden", bg: "canvas.default", children: _jsx(HomeExample, { examples: anonymousExampleEntries, searchQuery: "", onSelectExample: name => void onExampleChange(name) }) })] }) })) : isChangingExample ? (_jsxs(Box, { p: 5, textAlign: "center", color: "fg.muted", children: [_jsxs("h3", { children: ["Loading ", selectedExample, "\u2026"] }), _jsx("p", { children: "Please wait while the example loads." })] })) : ExampleComponent ? (_jsx(ExampleErrorBoundary, { children: _jsx(ExampleWrapper, { children: _jsx(ExampleComponent, { ...exampleProps }, `${selectedExample}:${runtimeTarget}`) }, `${selectedExample}:${runtimeTarget}`) }, `${selectedExample}:${runtimeTarget}`)) : null }), _jsx(SlidingPanel, { isOpen: Boolean(topNotice), onDismiss: onDismissTopNotice, position: "north", variant: topNotice?.tone ?? 'info', durationMs: topNotice?.durationMs ?? 0, fullWidth: true, offset: 60, zIndex: 160, message: topNotice?.message || '', details: topNotice?.details })] }) }));
1254
1186
  };
1255
1187
  // Mount the app - check route to determine which app to render
1256
1188
  const root = document.getElementById('root');
@@ -815,17 +815,7 @@ function GalleryContent({ onAction, }) {
815
815
  useEffect(() => {
816
816
  showScene(currentScene);
817
817
  }, [currentScene, showScene]);
818
- return (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 3, p: 3 }, children: [_jsxs(Box, { sx: {
819
- width: '100%',
820
- border: '1px solid',
821
- borderColor: 'border.default',
822
- borderRadius: 2,
823
- p: 3,
824
- backgroundColor: 'canvas.default',
825
- display: 'flex',
826
- flexDirection: 'column',
827
- gap: 3,
828
- }, children: [_jsx(Text, { sx: { fontSize: 2, fontWeight: 'bold' }, children: "Scenes" }), _jsx(SegmentedControl, { "aria-label": "A2UI gallery scene picker", fullWidth: true, children: SCENES.map(scene => (_jsx(SegmentedControl.Button, { selected: scene.id === selectedScene, onClick: () => setSelectedScene(scene.id), children: scene.label }, scene.id))) }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: currentScene.description }), _jsxs(Box, { sx: { display: 'flex', gap: 2, flexWrap: 'wrap' }, children: [_jsx(Button, { size: "small", variant: "primary", onClick: () => showScene(currentScene), children: "Reload" }), _jsx(Button, { size: "small", variant: "default", onClick: showAllScenes, children: "Show All" }), _jsx(Button, { size: "small", variant: "invisible", onClick: resetSurfaces, children: "Clear" }), _jsx(Button, { size: "small", variant: "default", onClick: () => void sendSupportPayload({
818
+ return (_jsxs(Box, { display: "flex", flexDirection: "column", gap: 3, p: 3, children: [_jsxs(Box, { width: "100%", border: "1px solid", borderColor: "border.default", borderRadius: 2, p: 3, backgroundColor: "canvas.default", display: "flex", flexDirection: "column", gap: 3, children: [_jsx(Text, { sx: { fontSize: 2, fontWeight: 'bold' }, children: "Scenes" }), _jsx(SegmentedControl, { "aria-label": "A2UI gallery scene picker", fullWidth: true, children: SCENES.map(scene => (_jsx(SegmentedControl.Button, { selected: scene.id === selectedScene, onClick: () => setSelectedScene(scene.id), children: scene.label }, scene.id))) }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: currentScene.description }), _jsxs(Box, { display: "flex", gap: 2, flexWrap: "wrap", children: [_jsx(Button, { size: "small", variant: "primary", onClick: () => showScene(currentScene), children: "Reload" }), _jsx(Button, { size: "small", variant: "default", onClick: showAllScenes, children: "Show All" }), _jsx(Button, { size: "small", variant: "invisible", onClick: resetSurfaces, children: "Clear" }), _jsx(Button, { size: "small", variant: "default", onClick: () => void sendSupportPayload({
829
819
  query: 'Production deploy is failing with auth errors. Help me triage.',
830
820
  }), disabled: backendLoading, children: backendLoading
831
821
  ? 'Loading Python Backend…'
@@ -836,7 +826,7 @@ function GalleryContent({ onAction, }) {
836
826
  display: 'flex',
837
827
  flexDirection: 'column',
838
828
  gap: 4,
839
- }, children: surfaces.map(surface => (_jsx(Box, { sx: { width: '100%' }, children: _jsx(A2uiSurfaceComposed, { surface: surface }) }, surface.id))) })] }));
829
+ }, children: surfaces.map(surface => (_jsx(Box, { width: "100%", children: _jsx(A2uiSurfaceComposed, { surface: surface }) }, surface.id))) })] }));
840
830
  }
841
831
  const A2UiComponentsGalleryScene = () => {
842
832
  const [lastAction, setLastAction] = useState(null);
@@ -844,28 +834,7 @@ const A2UiComponentsGalleryScene = () => {
844
834
  console.warn('A2UI Gallery Action:', action);
845
835
  setLastAction(action);
846
836
  }, []);
847
- return (_jsx(_Fragment, { children: _jsx(A2uiMarkdownProvider, { children: _jsxs(Box, { sx: {
848
- height: '100%',
849
- overflow: 'auto',
850
- display: 'flex',
851
- flexDirection: 'column',
852
- }, children: [_jsxs(Box, { sx: {
853
- px: 3,
854
- py: 3,
855
- borderBottom: '1px solid',
856
- borderColor: 'border.default',
857
- backgroundColor: 'canvas.default',
858
- }, children: [_jsx(Text, { as: "h1", sx: { fontSize: 3, fontWeight: 'bold' }, children: "\uD83C\uDFA8 A2UI Components Gallery" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Showcases the A2UI basic catalog rendered live via MessageProcessor and A2uiSurface." })] }), _jsx(GalleryContent, { onAction: handleAction }), _jsx(Box, { sx: {
859
- borderTop: '1px solid',
860
- borderColor: 'border.default',
861
- p: 3,
862
- fontFamily: 'mono',
863
- fontSize: 0,
864
- backgroundColor: 'canvas.default',
865
- whiteSpace: 'pre-wrap',
866
- maxHeight: 220,
867
- overflow: 'auto',
868
- }, children: lastAction
837
+ return (_jsx(_Fragment, { children: _jsx(A2uiMarkdownProvider, { children: _jsxs(Box, { height: "100%", overflow: "auto", display: "flex", flexDirection: "column", children: [_jsxs(Box, { px: 3, py: 3, borderBottom: "1px solid", borderColor: "border.default", backgroundColor: "canvas.default", children: [_jsx(Text, { as: "h1", sx: { fontSize: 3, fontWeight: 'bold' }, children: "\uD83C\uDFA8 A2UI Components Gallery" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Showcases the A2UI basic catalog rendered live via MessageProcessor and A2uiSurface." })] }), _jsx(GalleryContent, { onAction: handleAction }), _jsx(Box, { borderTop: "1px solid", borderColor: "border.default", p: 3, fontFamily: "mono", fontSize: 0, backgroundColor: "canvas.default", whiteSpace: "pre-wrap", maxHeight: 220, overflow: "auto", children: lastAction
869
838
  ? JSON.stringify(lastAction, null, 2)
870
839
  : 'No action triggered yet.' })] }) }) }));
871
840
  };
@@ -133,17 +133,11 @@ function ContactCardContent({ onAction, }) {
133
133
  useEffect(() => {
134
134
  loadCard();
135
135
  }, [loadCard]);
136
- return (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 3, px: 3, pb: 3 }, children: [_jsxs(Box, { sx: { display: 'flex', gap: 2 }, children: [_jsx(Button, { size: "small", variant: "primary", onClick: loadCard, children: "Reload Card" }), _jsx(Button, { size: "small", variant: "invisible", onClick: resetSurfaces, children: "Clear" })] }), _jsx(Box, { style: themeStyle, sx: {
136
+ return (_jsxs(Box, { display: "flex", flexDirection: "column", gap: 3, px: 3, pb: 3, children: [_jsxs(Box, { display: "flex", gap: 2, children: [_jsx(Button, { size: "small", variant: "primary", onClick: loadCard, children: "Reload Card" }), _jsx(Button, { size: "small", variant: "invisible", onClick: resetSurfaces, children: "Clear" })] }), _jsx(Box, { style: themeStyle, sx: {
137
137
  ...A2UI_RENDER_SCOPE_SX,
138
138
  display: 'grid',
139
139
  gap: 3,
140
- }, children: surfaces.map(surface => (_jsx(Box, { sx: {
141
- border: '1px solid',
142
- borderColor: 'border.default',
143
- borderRadius: 2,
144
- p: 3,
145
- backgroundColor: 'canvas.default',
146
- }, children: _jsx(A2uiSurfaceComposed, { surface: surface }) }, surface.id))) })] }));
140
+ }, children: surfaces.map(surface => (_jsx(Box, { border: "1px solid", borderColor: "border.default", borderRadius: 2, p: 3, backgroundColor: "canvas.default", children: _jsx(A2uiSurfaceComposed, { surface: surface }) }, surface.id))) })] }));
147
141
  }
148
142
  const A2UiContactCardScene = () => {
149
143
  const [lastAction, setLastAction] = useState(null);
@@ -157,32 +151,6 @@ const A2UiContactCardScene = () => {
157
151
  }
158
152
  return JSON.stringify(lastAction, null, 2);
159
153
  }, [lastAction]);
160
- return (_jsx(_Fragment, { children: _jsx(A2uiMarkdownProvider, { children: _jsxs(Box, { sx: {
161
- height: '100%',
162
- overflow: 'auto',
163
- display: 'flex',
164
- flexDirection: 'column',
165
- }, children: [_jsxs(Box, { sx: {
166
- px: 3,
167
- py: 3,
168
- borderBottom: '1px solid',
169
- borderColor: 'border.default',
170
- backgroundColor: 'canvas.default',
171
- }, children: [_jsx(Text, { as: "h1", sx: { fontSize: 3, fontWeight: 'bold' }, children: "\uD83D\uDC64 A2UI Contact Card" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Uses MessageProcessor + A2uiSurface with native A2UI protocol messages." })] }), _jsxs(Box, { sx: {
172
- display: 'grid',
173
- gridTemplateColumns: ['1fr', '2fr 1fr'],
174
- gap: 3,
175
- p: 3,
176
- }, children: [_jsx(ContactCardContent, { onAction: handleAction }), _jsx(Box, { sx: {
177
- border: '1px solid',
178
- borderColor: 'border.default',
179
- borderRadius: 2,
180
- p: 3,
181
- backgroundColor: 'canvas.default',
182
- fontFamily: 'mono',
183
- fontSize: 0,
184
- whiteSpace: 'pre-wrap',
185
- overflow: 'auto',
186
- }, children: actionPreview })] })] }) }) }));
154
+ return (_jsx(_Fragment, { children: _jsx(A2uiMarkdownProvider, { children: _jsxs(Box, { height: "100%", overflow: "auto", display: "flex", flexDirection: "column", children: [_jsxs(Box, { px: 3, py: 3, borderBottom: "1px solid", borderColor: "border.default", backgroundColor: "canvas.default", children: [_jsx(Text, { as: "h1", sx: { fontSize: 3, fontWeight: 'bold' }, children: "\uD83D\uDC64 A2UI Contact Card" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Uses MessageProcessor + A2uiSurface with native A2UI protocol messages." })] }), _jsxs(Box, { display: "grid", gridTemplateColumns: ['1fr', '2fr 1fr'], gap: 3, p: 3, children: [_jsx(ContactCardContent, { onAction: handleAction }), _jsx(Box, { border: "1px solid", borderColor: "border.default", borderRadius: 2, p: 3, backgroundColor: "canvas.default", fontFamily: "mono", fontSize: 0, whiteSpace: "pre-wrap", overflow: "auto", children: actionPreview })] })] }) }) }));
187
155
  };
188
156
  export default A2UiContactCardScene;
@@ -55,23 +55,7 @@ function RestaurantSearch({ onSearch, isLoading, }) {
55
55
  }
56
56
  onSearch(inputValue.trim());
57
57
  }, [inputValue, isLoading, onSearch]);
58
- return (_jsxs(Box, { sx: {
59
- display: 'flex',
60
- flexDirection: 'column',
61
- alignItems: 'center',
62
- gap: 4,
63
- p: 4,
64
- maxWidth: 640,
65
- mx: 'auto',
66
- }, children: [_jsx(Box, { sx: {
67
- width: '100%',
68
- height: 200,
69
- borderRadius: 2,
70
- background: `linear-gradient(135deg, ${gradient.from} 0%, ${gradient.to} 100%)`,
71
- display: 'flex',
72
- alignItems: 'center',
73
- justifyContent: 'center',
74
- }, children: _jsx(Text, { sx: { fontSize: '4rem' }, children: "\uD83C\uDF7D\uFE0F" }) }), _jsx(Text, { as: "h1", sx: { fontSize: '2rem', fontWeight: 'bold', textAlign: 'center' }, children: "Restaurant Finder" }), _jsx(Text, { sx: { color: 'fg.muted', textAlign: 'center' }, children: "A2UI renderer connected to a live agent backend." }), _jsx("form", { onSubmit: handleSubmit, style: { width: '100%' }, children: _jsxs(Box, { sx: { display: 'flex', gap: 2 }, children: [_jsx(TextInput, { value: inputValue, onChange: e => setInputValue(e.target.value), placeholder: "Search for restaurants...", disabled: isLoading, sx: { flex: 1 }, block: true }), _jsx(Button, { type: "submit", disabled: isLoading || !inputValue.trim(), children: isLoading ? _jsx(Spinner, { size: "small" }) : 'Search' })] }) })] }));
58
+ return (_jsxs(Box, { display: "flex", flexDirection: "column", alignItems: "center", gap: 4, p: 4, maxWidth: 640, mx: "auto", children: [_jsx(Box, { width: "100%", height: 200, borderRadius: 2, background: `linear-gradient(135deg, ${gradient.from} 0%, ${gradient.to} 100%)`, display: "flex", alignItems: "center", justifyContent: "center", children: _jsx(Text, { sx: { fontSize: '4rem' }, children: "\uD83C\uDF7D\uFE0F" }) }), _jsx(Text, { as: "h1", sx: { fontSize: '2rem', fontWeight: 'bold', textAlign: 'center' }, children: "Restaurant Finder" }), _jsx(Text, { sx: { color: 'fg.muted', textAlign: 'center' }, children: "A2UI renderer connected to a live agent backend." }), _jsx("form", { onSubmit: handleSubmit, style: { width: '100%' }, children: _jsxs(Box, { display: "flex", gap: 2, children: [_jsx(TextInput, { value: inputValue, onChange: e => setInputValue(e.target.value), placeholder: "Search for restaurants...", disabled: isLoading, sx: { flex: 1 }, block: true }), _jsx(Button, { type: "submit", disabled: isLoading || !inputValue.trim(), children: isLoading ? _jsx(Spinner, { size: "small" }) : 'Search' })] }) })] }));
75
59
  }
76
60
  const A2UiRestaurantScene = () => {
77
61
  const baseUrl = useExampleAgentRuntimesUrl();
@@ -152,45 +136,11 @@ const A2UiRestaurantScene = () => {
152
136
  }
153
137
  await sendPayload({ query: lastQuery });
154
138
  }, [lastQuery, sendPayload]);
155
- return (_jsx(_Fragment, { children: _jsx(A2uiMarkdownProvider, { children: _jsxs(Box, { sx: {
156
- height: '100%',
157
- overflow: 'auto',
158
- display: 'flex',
159
- flexDirection: 'column',
160
- }, children: [_jsxs(Box, { sx: {
161
- p: 3,
162
- borderBottom: '1px solid',
163
- borderColor: 'border.default',
164
- backgroundColor: 'canvas.default',
165
- }, children: [_jsx(Text, { as: "h1", sx: { fontSize: '1.25rem', fontWeight: 'bold' }, children: "\uD83E\uDD16 A2UI Restaurant Example" }), _jsx(Text, { sx: { fontSize: '0.875rem', color: 'fg.muted' }, children: "Uses MessageProcessor and A2uiSurface with native A2UI backend messages." })] }), _jsxs(Box, { sx: { flex: 1, p: 3 }, children: [!hasData && !isLoading && !error && (_jsx(RestaurantSearch, { onSearch: handleSearch, isLoading: isLoading })), isLoading && (_jsxs(Box, { sx: {
166
- display: 'flex',
167
- flexDirection: 'column',
168
- alignItems: 'center',
169
- justifyContent: 'center',
170
- height: 280,
171
- gap: 3,
172
- }, children: [_jsx(Spinner, { size: "large" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: LOADING_TEXT_LINES[loadingTextIndex] })] })), error && !isLoading && (_jsxs(Box, { sx: {
173
- display: 'flex',
174
- flexDirection: 'column',
175
- alignItems: 'center',
176
- gap: 3,
177
- p: 4,
178
- }, children: [_jsxs(Text, { sx: { color: 'danger.fg' }, children: ["\u26A0\uFE0F ", error] }), _jsx(Button, { onClick: handleRetry, disabled: !lastQuery, children: "Retry" })] })), !isLoading && hasData && !error && (_jsxs(Box, { style: themeStyle, sx: {
139
+ return (_jsx(_Fragment, { children: _jsx(A2uiMarkdownProvider, { children: _jsxs(Box, { height: "100%", overflow: "auto", display: "flex", flexDirection: "column", children: [_jsxs(Box, { p: 3, borderBottom: "1px solid", borderColor: "border.default", backgroundColor: "canvas.default", children: [_jsx(Text, { as: "h1", sx: { fontSize: '1.25rem', fontWeight: 'bold' }, children: "\uD83E\uDD16 A2UI Restaurant Example" }), _jsx(Text, { sx: { fontSize: '0.875rem', color: 'fg.muted' }, children: "Uses MessageProcessor and A2uiSurface with native A2UI backend messages." })] }), _jsxs(Box, { flex: 1, p: 3, children: [!hasData && !isLoading && !error && (_jsx(RestaurantSearch, { onSearch: handleSearch, isLoading: isLoading })), isLoading && (_jsxs(Box, { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", height: 280, gap: 3, children: [_jsx(Spinner, { size: "large" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: LOADING_TEXT_LINES[loadingTextIndex] })] })), error && !isLoading && (_jsxs(Box, { display: "flex", flexDirection: "column", alignItems: "center", gap: 3, p: 4, children: [_jsxs(Text, { sx: { color: 'danger.fg' }, children: ["\u26A0\uFE0F ", error] }), _jsx(Button, { onClick: handleRetry, disabled: !lastQuery, children: "Retry" })] })), !isLoading && hasData && !error && (_jsxs(Box, { style: themeStyle, sx: {
179
140
  ...A2UI_RENDER_SCOPE_SX,
180
141
  display: 'flex',
181
142
  flexDirection: 'column',
182
143
  gap: 3,
183
- }, children: [_jsx(Button, { variant: "invisible", sx: { alignSelf: 'flex-start' }, onClick: () => setHasData(false), children: "\u2190 New Search" }), surfaces.map(surface => (_jsx(Box, { sx: {
184
- border: '1px solid',
185
- borderColor: 'border.default',
186
- borderRadius: 1,
187
- p: 3,
188
- }, children: _jsx(A2uiSurfaceComposed, { surface: surface }) }, surface.id)))] }))] }), _jsx(Box, { sx: {
189
- p: 2,
190
- borderTop: '1px solid',
191
- borderColor: 'border.default',
192
- backgroundColor: 'canvas.default',
193
- textAlign: 'center',
194
- }, children: _jsxs(Text, { sx: { fontSize: '0.75rem', color: 'fg.muted' }, children: ["Backend: ", a2uiRestaurantEndpoint] }) })] }) }) }));
144
+ }, children: [_jsx(Button, { variant: "invisible", sx: { alignSelf: 'flex-start' }, onClick: () => setHasData(false), children: "\u2190 New Search" }), surfaces.map(surface => (_jsx(Box, { border: "1px solid", borderColor: "border.default", borderRadius: 1, p: 3, children: _jsx(A2uiSurfaceComposed, { surface: surface }) }, surface.id)))] }))] }), _jsx(Box, { p: 2, borderTop: "1px solid", borderColor: "border.default", backgroundColor: "canvas.default", textAlign: "center", children: _jsxs(Text, { sx: { fontSize: '0.75rem', color: 'fg.muted' }, children: ["Backend: ", a2uiRestaurantEndpoint] }) })] }) }) }));
195
145
  };
196
146
  export default A2UiRestaurantScene;
@@ -343,23 +343,13 @@ function ViewerContent({ onAction, }) {
343
343
  resetSurfaces();
344
344
  processMessages(selectedScene.messages);
345
345
  }, [selectedScene, processMessages, resetSurfaces]);
346
- return (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 3, p: 3 }, children: [_jsxs(Box, { sx: {
347
- width: '100%',
348
- border: '1px solid',
349
- borderColor: 'border.default',
350
- borderRadius: 2,
351
- p: 3,
352
- backgroundColor: 'canvas.default',
353
- display: 'flex',
354
- flexDirection: 'column',
355
- gap: 3,
356
- }, children: [_jsx(Text, { sx: { fontSize: 2, fontWeight: 'bold' }, children: "Select Scene" }), _jsx(SegmentedControl, { "aria-label": "A2UI viewer scene picker", fullWidth: true, children: SCENES.map(scene => (_jsx(SegmentedControl.Button, { selected: scene.id === selectedSceneId, onClick: () => setSelectedSceneId(scene.id), children: `${scene.emoji} ${scene.label}` }, scene.id))) }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: selectedScene.description })] }), _jsx(Box, { style: themeStyle, sx: {
346
+ return (_jsxs(Box, { display: "flex", flexDirection: "column", gap: 3, p: 3, children: [_jsxs(Box, { width: "100%", border: "1px solid", borderColor: "border.default", borderRadius: 2, p: 3, backgroundColor: "canvas.default", display: "flex", flexDirection: "column", gap: 3, children: [_jsx(Text, { sx: { fontSize: 2, fontWeight: 'bold' }, children: "Select Scene" }), _jsx(SegmentedControl, { "aria-label": "A2UI viewer scene picker", fullWidth: true, children: SCENES.map(scene => (_jsx(SegmentedControl.Button, { selected: scene.id === selectedSceneId, onClick: () => setSelectedSceneId(scene.id), children: `${scene.emoji} ${scene.label}` }, scene.id))) }), _jsx(Text, { sx: { color: 'fg.muted', fontSize: 1 }, children: selectedScene.description })] }), _jsx(Box, { style: themeStyle, sx: {
357
347
  ...A2UI_RENDER_SCOPE_SX,
358
348
  width: '100%',
359
349
  display: 'flex',
360
350
  flexDirection: 'column',
361
351
  gap: 3,
362
- }, children: surfaces.map(surface => (_jsx(Box, { sx: { width: '100%' }, children: _jsx(A2uiSurfaceComposed, { surface: surface }) }, surface.id))) })] }));
352
+ }, children: surfaces.map(surface => (_jsx(Box, { width: "100%", children: _jsx(A2uiSurfaceComposed, { surface: surface }) }, surface.id))) })] }));
363
353
  }
364
354
  const A2UiViewerScene = () => {
365
355
  const [lastAction, setLastAction] = useState(null);
@@ -367,28 +357,7 @@ const A2UiViewerScene = () => {
367
357
  console.log('A2UI Viewer Action:', action);
368
358
  setLastAction(action);
369
359
  }, []);
370
- return (_jsx(_Fragment, { children: _jsx(A2uiMarkdownProvider, { children: _jsxs(Box, { sx: {
371
- height: '100%',
372
- overflow: 'auto',
373
- display: 'flex',
374
- flexDirection: 'column',
375
- }, children: [_jsxs(Box, { sx: {
376
- px: 3,
377
- py: 3,
378
- borderBottom: '1px solid',
379
- borderColor: 'border.default',
380
- backgroundColor: 'canvas.default',
381
- }, children: [_jsx(Text, { as: "h1", sx: { fontSize: 3, fontWeight: 'bold' }, children: "\uD83D\uDD0D A2UI Viewer" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Standalone viewer scenes powered by MessageProcessor and A2uiSurface." })] }), _jsx(ViewerContent, { onAction: handleAction }), _jsx(Box, { sx: {
382
- borderTop: '1px solid',
383
- borderColor: 'border.default',
384
- p: 3,
385
- fontFamily: 'mono',
386
- fontSize: 0,
387
- backgroundColor: 'canvas.default',
388
- whiteSpace: 'pre-wrap',
389
- maxHeight: 180,
390
- overflow: 'auto',
391
- }, children: lastAction
360
+ return (_jsx(_Fragment, { children: _jsx(A2uiMarkdownProvider, { children: _jsxs(Box, { height: "100%", overflow: "auto", display: "flex", flexDirection: "column", children: [_jsxs(Box, { px: 3, py: 3, borderBottom: "1px solid", borderColor: "border.default", backgroundColor: "canvas.default", children: [_jsx(Text, { as: "h1", sx: { fontSize: 3, fontWeight: 'bold' }, children: "\uD83D\uDD0D A2UI Viewer" }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Standalone viewer scenes powered by MessageProcessor and A2uiSurface." })] }), _jsx(ViewerContent, { onAction: handleAction }), _jsx(Box, { borderTop: "1px solid", borderColor: "border.default", p: 3, fontFamily: "mono", fontSize: 0, backgroundColor: "canvas.default", whiteSpace: "pre-wrap", maxHeight: 180, overflow: "auto", children: lastAction
392
361
  ? JSON.stringify(lastAction, null, 2)
393
362
  : 'No action triggered yet.' })] }) }) }));
394
363
  };
@@ -78,37 +78,15 @@ export function Still({ still, children, }) {
78
78
  * stage's own `useKeepClear` finds it and steps aside.
79
79
  */
80
80
  export function GalleryObstacle({ sx, }) {
81
- return (_jsx(Box, { "data-chat-composer": "", "aria-label": "A composer over the assistant", sx: {
82
- position: 'absolute',
83
- display: 'flex',
84
- alignItems: 'center',
85
- justifyContent: 'center',
86
- border: '1px dashed',
87
- borderColor: 'border.default',
88
- borderRadius: 2,
89
- bg: 'canvas.subtle',
90
- color: 'fg.muted',
91
- fontSize: 0,
92
- textAlign: 'center',
93
- p: 1,
94
- ...sx,
95
- }, children: "composer" }));
81
+ return (_jsx(Box, { "data-chat-composer": "", "aria-label": "A composer over the assistant", position: "absolute", display: "flex", alignItems: "center", justifyContent: "center", border: "1px dashed", borderColor: "border.default", borderRadius: 2, bg: "canvas.subtle", color: "fg.muted", fontSize: 0, textAlign: "center", p: 1, sx: sx, children: "composer" }));
96
82
  }
97
83
  function GalleryCell({ character, pose, size, }) {
98
84
  const stageRef = useRef(null);
99
- return (_jsxs(Box, { "data-gallery-cell": `${character.id}-${pose}`, sx: {
100
- position: 'relative',
101
- width: size + 16,
102
- height: size + 16,
103
- display: 'flex',
104
- alignItems: 'center',
105
- justifyContent: 'center',
106
- }, children: [_jsx(AssistantStage, { character: character.character, state: stateOfPose(pose), size: size, place: { position: 'relative', zIndex: 0 }, stageRef: stageRef, onDragStart: () => undefined, open: false, onToggle: () => undefined, onDismiss: () => undefined }), pose === 'aside' && _jsx(GalleryObstacle, { sx: { inset: 0 } })] }));
85
+ return (_jsxs(Box, { "data-gallery-cell": `${character.id}-${pose}`, position: "relative", width: size + 16, height: size + 16, display: "flex", alignItems: "center", justifyContent: "center", children: [_jsx(AssistantStage, { character: character.character, state: stateOfPose(pose), size: size, place: { position: 'relative', zIndex: 0 }, stageRef: stageRef, onDragStart: () => undefined, open: false, onToggle: () => undefined, onDismiss: () => undefined }), pose === 'aside' && _jsx(GalleryObstacle, { sx: { inset: 0 } })] }));
107
86
  }
108
87
  /** Every character in every pose: a row per character, a column per pose. */
109
88
  export function AssistantGalleryGrid({ characters, size = 48, }) {
110
- return (_jsxs(Box, { as: "table", "data-assistant-gallery-grid": "", sx: {
111
- borderCollapse: 'collapse',
89
+ return (_jsxs(Box, { as: "table", "data-assistant-gallery-grid": "", borderCollapse: "collapse", sx: {
112
90
  color: 'fg.default',
113
91
  '& th': {
114
92
  fontSize: 0,
@@ -120,7 +98,7 @@ export function AssistantGalleryGrid({ characters, size = 48, }) {
120
98
  whiteSpace: 'nowrap',
121
99
  },
122
100
  '& td': { p: 0, textAlign: 'center' },
123
- }, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", {}), GALLERY_POSES.map(pose => (_jsx("th", { scope: "col", children: GALLERY_POSE_LABELS[pose] }, pose)))] }) }), _jsx("tbody", { children: characters.map(character => (_jsxs("tr", { children: [_jsxs(Box, { as: "th", scope: "row", sx: { textAlign: 'left !important', pr: '12px !important' }, children: [_jsx(Text, { sx: { display: 'block', color: 'fg.default' }, children: character.name }), _jsx(Text, { sx: { fontWeight: 400 }, children: character.from })] }), GALLERY_POSES.map(pose => (_jsx("td", { children: _jsx(GalleryCell, { character: character, pose: pose, size: size }) }, pose)))] }, character.id))) })] }));
101
+ }, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", {}), GALLERY_POSES.map(pose => (_jsx("th", { scope: "col", children: GALLERY_POSE_LABELS[pose] }, pose)))] }) }), _jsx("tbody", { children: characters.map(character => (_jsxs("tr", { children: [_jsxs(Box, { as: "th", scope: "row", textAlign: "left !important", pr: "12px !important", children: [_jsx(Text, { sx: { display: 'block', color: 'fg.default' }, children: character.name }), _jsx(Text, { sx: { fontWeight: 400 }, children: character.from })] }), GALLERY_POSES.map(pose => (_jsx("td", { children: _jsx(GalleryCell, { character: character, pose: pose, size: size }) }, pose)))] }, character.id))) })] }));
124
102
  }
125
103
  /** How tall the notebook in a balloon is, in the stage and in the grid. */
126
104
  export const GALLERY_NOTEBOOK_HEIGHT = 160;
@@ -138,14 +116,7 @@ export function galleryNotebookVisual() {
138
116
  /** One balloon display, pictured: a character with what its balloon says. */
139
117
  function BalloonCell({ character, label, display, balloon, height, }) {
140
118
  const stageRef = useRef(null);
141
- return (_jsxs(Box, { "data-gallery-cell": `balloon-${label.toLowerCase().replace(/\W+/g, '-')}`, sx: {
142
- position: 'relative',
143
- width: 330,
144
- height,
145
- border: '1px solid',
146
- borderColor: 'border.muted',
147
- borderRadius: 2,
148
- }, children: [_jsx(Text, { sx: {
119
+ return (_jsxs(Box, { "data-gallery-cell": `balloon-${label.toLowerCase().replace(/\W+/g, '-')}`, position: "relative", width: 330, height: height, border: "1px solid", borderColor: "border.muted", borderRadius: 2, children: [_jsx(Text, { sx: {
149
120
  position: 'absolute',
150
121
  top: 1,
151
122
  right: 2,
@@ -160,7 +131,7 @@ function BalloonCell({ character, label, display, balloon, height, }) {
160
131
  * read-only jupyter-react notebook as in the stage, loaded when drawn.
161
132
  */
162
133
  export function GalleryBalloons({ character, }) {
163
- return (_jsxs(Box, { "data-gallery-balloons": "", sx: { display: 'flex', gap: 3, flexWrap: 'wrap', mt: 3 }, children: [_jsx(BalloonCell, { character: character, label: "History", display: "history", height: 340, balloon: {
134
+ return (_jsxs(Box, { "data-gallery-balloons": "", display: "flex", gap: 3, flexWrap: "wrap", mt: 3, children: [_jsx(BalloonCell, { character: character, label: "History", display: "history", height: 340, balloon: {
164
135
  ...sampleSaying(1),
165
136
  history: sampleHistory(2),
166
137
  onDismiss: () => undefined,
@@ -66,44 +66,14 @@ const DatalayerNotebookExample = (props) => {
66
66
  token,
67
67
  });
68
68
  }, [enableCollaboration, configuration]);
69
- return (_jsx(JupyterReactTheme, { children: _jsxs(Box, { p: 3, children: [_jsx(Heading, { as: "h2", sx: { mb: 3 }, children: "Datalayer Notebook Collaboration Example" }), _jsx(Box, { sx: { mb: 3 }, children: _jsxs(FormControl, { children: [_jsx(Checkbox, { checked: enableCollaboration, onChange: e => setEnableCollaboration(e.target.checked) }), _jsx(FormControl.Label, { children: "Enable Datalayer Collaboration" })] }) }), (!configuration?.spacerUrl || !configuration?.token) && (_jsx(Box, { sx: { mb: 2, p: 2, bg: 'danger.subtle' }, children: "Warning: Datalayer configuration is missing. Please configure spacerUrl and token to use DatalayerServiceManager and collaboration features." })), !serviceManager && (_jsx(Box, { sx: { mb: 2, p: 2, bg: 'attention.subtle' }, children: "Note: DatalayerServiceManager is not available. Notebook functionality will be limited." })), enableCollaboration ? (_jsxs(Box, { sx: {
70
- display: 'flex',
71
- gap: 2,
72
- flexDirection: 'row',
73
- }, children: [_jsxs(Box, { sx: {
74
- flex: 1,
75
- border: '1px solid',
76
- borderColor: 'border.default',
77
- borderRadius: 2,
78
- }, children: [_jsx(Box, { sx: {
79
- p: 2,
80
- bg: 'canvas.subtle',
81
- borderBottom: '1px solid',
82
- borderColor: 'border.default',
83
- fontWeight: 'bold',
84
- }, children: "Collaborator 1" }), _jsx("iframe", { src: `${window.location.origin}/datalayer/notebook`, style: {
69
+ return (_jsx(JupyterReactTheme, { children: _jsxs(Box, { p: 3, children: [_jsx(Heading, { as: "h2", sx: { mb: 3 }, children: "Datalayer Notebook Collaboration Example" }), _jsx(Box, { mb: 3, children: _jsxs(FormControl, { children: [_jsx(Checkbox, { checked: enableCollaboration, onChange: e => setEnableCollaboration(e.target.checked) }), _jsx(FormControl.Label, { children: "Enable Datalayer Collaboration" })] }) }), (!configuration?.spacerUrl || !configuration?.token) && (_jsx(Box, { mb: 2, p: 2, bg: "danger.subtle", children: "Warning: Datalayer configuration is missing. Please configure spacerUrl and token to use DatalayerServiceManager and collaboration features." })), !serviceManager && (_jsx(Box, { mb: 2, p: 2, bg: "attention.subtle", children: "Note: DatalayerServiceManager is not available. Notebook functionality will be limited." })), enableCollaboration ? (_jsxs(Box, { display: "flex", gap: 2, flexDirection: "row", children: [_jsxs(Box, { flex: 1, border: "1px solid", borderColor: "border.default", borderRadius: 2, children: [_jsx(Box, { p: 2, bg: "canvas.subtle", borderBottom: "1px solid", borderColor: "border.default", fontWeight: "bold", children: "Collaborator 1" }), _jsx("iframe", { src: `${window.location.origin}/datalayer/notebook`, style: {
85
70
  width: '100%',
86
71
  height: 'calc(100vh - 280px)',
87
72
  border: 'none',
88
- }, title: "Collaborator 1" })] }), _jsxs(Box, { sx: {
89
- flex: 1,
90
- border: '1px solid',
91
- borderColor: 'border.default',
92
- borderRadius: 2,
93
- }, children: [_jsx(Box, { sx: {
94
- p: 2,
95
- bg: 'canvas.subtle',
96
- borderBottom: '1px solid',
97
- borderColor: 'border.default',
98
- fontWeight: 'bold',
99
- }, children: "Collaborator 2" }), _jsx("iframe", { src: `${window.location.origin}/datalayer/notebook`, style: {
73
+ }, title: "Collaborator 1" })] }), _jsxs(Box, { flex: 1, border: "1px solid", borderColor: "border.default", borderRadius: 2, children: [_jsx(Box, { p: 2, bg: "canvas.subtle", borderBottom: "1px solid", borderColor: "border.default", fontWeight: "bold", children: "Collaborator 2" }), _jsx("iframe", { src: `${window.location.origin}/datalayer/notebook`, style: {
100
74
  width: '100%',
101
75
  height: 'calc(100vh - 280px)',
102
76
  border: 'none',
103
- }, title: "Collaborator 2" })] })] })) : (_jsx(Box, { sx: {
104
- border: '1px solid',
105
- borderColor: 'border.default',
106
- borderRadius: 2,
107
- }, children: serviceManager ? (_jsx(Notebook, { id: NOTEBOOK_ID, height: "calc(100vh - 200px)", nbformat: nbformat, readonly: readonly, serviceManager: serviceManager, startDefaultKernel: true, collaborationProvider: collaborationProvider })) : (_jsx(Box, { sx: { p: 4, textAlign: 'center' }, children: "Loading ServiceManager..." })) })), _jsxs(Box, { sx: { mt: 2, fontSize: 1, color: 'fg.subtle' }, children: [_jsx("p", { children: "This example demonstrates how to use Datalayer services with Notebook:" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "DatalayerServiceManager:" }), " Connects to Datalayer infrastructure for kernel management"] }), _jsxs("li", { children: [_jsx("strong", { children: "DatalayerCollaborationProvider:" }), " Enables real-time collaboration"] }), _jsx("li", { children: "Both require Datalayer credentials (spacerUrl and token)" }), _jsx("li", { children: "Pass them directly to the base Notebook component" }), _jsx("li", { children: "No wrapper components needed - just create the services and pass them as props" }), _jsx("li", { children: "This shows the explicit, composable pattern for Datalayer integration" })] })] })] }) }));
77
+ }, title: "Collaborator 2" })] })] })) : (_jsx(Box, { border: "1px solid", borderColor: "border.default", borderRadius: 2, children: serviceManager ? (_jsx(Notebook, { id: NOTEBOOK_ID, height: "calc(100vh - 200px)", nbformat: nbformat, readonly: readonly, serviceManager: serviceManager, startDefaultKernel: true, collaborationProvider: collaborationProvider })) : (_jsx(Box, { p: 4, textAlign: "center", children: "Loading ServiceManager..." })) })), _jsxs(Box, { mt: 2, fontSize: 1, color: "fg.subtle", children: [_jsx("p", { children: "This example demonstrates how to use Datalayer services with Notebook:" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "DatalayerServiceManager:" }), " Connects to Datalayer infrastructure for kernel management"] }), _jsxs("li", { children: [_jsx("strong", { children: "DatalayerCollaborationProvider:" }), " Enables real-time collaboration"] }), _jsx("li", { children: "Both require Datalayer credentials (spacerUrl and token)" }), _jsx("li", { children: "Pass them directly to the base Notebook component" }), _jsx("li", { children: "No wrapper components needed - just create the services and pass them as props" }), _jsx("li", { children: "This shows the explicit, composable pattern for Datalayer integration" })] })] })] }) }));
108
78
  };
109
79
  export default DatalayerNotebookExample;