@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.
- package/lib/Agent.js +2 -18
- package/lib/AgentDocument.js +5 -55
- package/lib/AgentNode.js +31 -208
- package/lib/AgentNotebook.js +5 -59
- package/lib/agent-node/AgentNodeGallery.js +23 -111
- package/lib/agents/AgentDetails.js +36 -274
- package/lib/agents/AgentRuntimeChat.js +1 -8
- package/lib/chat/Chat.js +7 -46
- package/lib/chat/ChatFloating.js +15 -100
- package/lib/chat/ChatInline.js +5 -47
- package/lib/chat/ChatPopupStandalone.js +5 -53
- package/lib/chat/ChatSidebar.js +4 -51
- package/lib/chat/ChatStandalone.js +4 -45
- package/lib/chat/EphemeralSurfaceControl.js +5 -25
- package/lib/chat/assistant/AssistantContextMenu.d.ts +8 -0
- package/lib/chat/assistant/AssistantContextMenu.js +17 -1
- package/lib/chat/assistant/AssistantStage.js +6 -25
- package/lib/chat/assistant/BalloonParts.js +8 -40
- package/lib/chat/assistant/BalloonVisual.js +2 -2
- package/lib/chat/assistant/ConversationBalloon.js +2 -11
- package/lib/chat/assistant/DecisionAsk.js +3 -3
- package/lib/chat/assistant/SandboxDetailsDialog.js +3 -17
- package/lib/chat/assistant/SpeechBalloon.js +14 -78
- package/lib/chat/base/ChatBase.js +37 -172
- package/lib/chat/display/EmptyState.js +7 -35
- package/lib/chat/display/FloatingBrandButton.js +4 -34
- package/lib/chat/display/PoweredByTag.js +3 -14
- package/lib/chat/document/EphemeralDocument.js +3 -18
- package/lib/chat/header/ChatHeader.js +1 -17
- package/lib/chat/header/ChatHeaderBase.js +2 -24
- package/lib/chat/header/ChatViewModeToggle.js +7 -29
- package/lib/chat/indicators/McpStatusIndicator.js +3 -12
- package/lib/chat/indicators/SandboxStatusIndicator.js +6 -34
- package/lib/chat/indicators/SkillsStatusIndicator.js +3 -12
- package/lib/chat/indicators/TypingDots.js +1 -11
- package/lib/chat/messages/ChatMessageList.js +58 -185
- package/lib/chat/messages/ChatMessages.js +15 -79
- package/lib/chat/messages/FormSubmissionMessage.js +2 -33
- package/lib/chat/messages/NotebookToolSurfaces.js +12 -41
- package/lib/chat/messages/TurnFooter.js +4 -10
- package/lib/chat/notebook/EphemeralNotebook.js +2 -10
- package/lib/chat/parts/ReasoningPart.js +2 -16
- package/lib/chat/parts/TextPart.js +2 -12
- package/lib/chat/parts/ToolPart.js +16 -90
- package/lib/chat/presence/Presence.js +5 -33
- package/lib/chat/prompt/FloatingCard.js +1 -13
- package/lib/chat/prompt/InputPrompt.js +1 -6
- package/lib/chat/prompt/InputPromptBase.js +4 -17
- package/lib/chat/prompt/InputPromptLexical.js +44 -45
- package/lib/chat/prompt/InputPromptText.js +1 -1
- package/lib/chat/prompt/footer/InPromptFooter.js +1 -8
- package/lib/chat/prompt/menus/AgentsMenu.js +1 -1
- package/lib/chat/prompt/menus/InlineAgentsMenu.js +1 -1
- package/lib/chat/prompt/menus/ModelSelector.js +1 -5
- package/lib/chat/prompt/menus/SkillsMenu.js +3 -30
- package/lib/chat/prompt/menus/SuggestionsMenu.js +1 -1
- package/lib/chat/prompt/menus/ToolsMenu.js +4 -48
- package/lib/chat/prompt/plugins/AgentMentionPlugin.js +2 -9
- package/lib/chat/prompt/plugins/CommandPlugin.js +2 -9
- package/lib/chat/prompt/plugins/MentionChip.js +1 -15
- package/lib/chat/prompt/stack.js +1 -19
- package/lib/chat/tools/A2AAgentDialog.js +9 -42
- package/lib/chat/tools/SubagentActivity.js +5 -22
- package/lib/chat/tools/ToolApprovalBanner.js +4 -34
- package/lib/chat/tools/ToolApprovalDialog.js +4 -19
- package/lib/chat/tools/ToolCallDisplay.js +12 -97
- package/lib/chat/usage/ContextPie.js +4 -45
- package/lib/components/a2ui/datalayer/Chart.js +4 -10
- package/lib/components/a2ui/datalayer/Chat.js +2 -10
- package/lib/components/a2ui/datalayer/Download.js +1 -1
- package/lib/components/a2ui/datalayer/Evidence.js +1 -15
- package/lib/components/a2ui/datalayer/FileUpload.js +1 -12
- package/lib/components/a2ui/datalayer/Table.js +9 -17
- package/lib/components/a2ui/datalayer/formWidgets.js +3 -2
- package/lib/components/a2ui/datalayer/parts.js +1 -16
- package/lib/components/agents/AgentSummary.js +1 -51
- package/lib/components/cards/NotificationEventCard.js +6 -72
- package/lib/components/cards/OutputCard.js +4 -48
- package/lib/components/cards/ToolApprovalCard.js +2 -35
- package/lib/components/code-sandboxes/CodeSandboxCellVariables.js +1 -1
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +4 -14
- package/lib/components/code-sandboxes/CodeSandboxPicker.js +16 -21
- package/lib/components/code-sandboxes/CodeSandboxVariables.js +2 -2
- package/lib/components/scheduler/ScheduleMenu.js +5 -10
- package/lib/components/specs/SpecPayloadPreview.js +1 -26
- package/lib/components/teams/A2ATeamGraph.d.ts +4 -3
- package/lib/components/teams/A2ATeamGraph.js +25 -71
- package/lib/components/teams/AnswerSurfacesView.js +2 -2
- package/lib/components/teams/NotebookPreview.js +1 -10
- package/lib/components/teams/NotebookPreviewView.js +2 -3
- package/lib/components/teams/SceneTranscript.js +3 -17
- package/lib/components/teams/SceneView.js +1 -8
- package/lib/components/teams/TeamNotebook.js +5 -13
- package/lib/components/teams/TeamNotebookView.js +2 -12
- package/lib/components/teams/index.d.ts +1 -0
- package/lib/components/teams/index.js +1 -0
- package/lib/components/teams/useBalloonRoom.d.ts +39 -0
- package/lib/components/teams/useBalloonRoom.js +89 -0
- package/lib/config/AgentConfiguration.js +22 -225
- package/lib/context/ContextDistribution.js +7 -41
- package/lib/context/ContextInspector.js +9 -107
- package/lib/context/ContextPanel.js +11 -86
- package/lib/context/ContextUsage.js +6 -34
- package/lib/context/CostTracker.js +7 -42
- package/lib/context/MessageHistory.js +3 -37
- package/lib/context/TurnGraphChart.js +9 -41
- package/lib/examples/A2UiAgentExample.js +6 -108
- package/lib/examples/A2UiComponentsGalleryExample.js +1 -1
- package/lib/examples/A2UiContactCardExample.js +1 -1
- package/lib/examples/A2UiJupyterOutputExample.js +25 -125
- package/lib/examples/A2UiRestaurantExample.js +1 -1
- package/lib/examples/A2UiViewerExample.js +1 -1
- package/lib/examples/AgUiAgenticExample.js +3 -35
- package/lib/examples/AgUiBackendToolRenderingExample.js +2 -25
- package/lib/examples/AgUiHaikuGenUiExample.js +2 -32
- package/lib/examples/AgUiHumanInTheLoopExample.js +5 -59
- package/lib/examples/AgUiSharedStateExample.js +6 -56
- package/lib/examples/AgUiToolsBasedGenUiExample.js +25 -120
- package/lib/examples/AgentA2AExample.js +1 -15
- package/lib/examples/AgentA2ATeamExample.js +6 -30
- package/lib/examples/AgentCheckpointsExample.js +11 -145
- package/lib/examples/AgentCodeSandboxExample.js +5 -108
- package/lib/examples/AgentCodeSandboxesExample.js +3 -30
- package/lib/examples/AgentCodemodeExample.js +9 -85
- package/lib/examples/AgentCompactionExample.js +3 -64
- package/lib/examples/AgentDecideExample.js +1 -13
- package/lib/examples/AgentEvalsExample.js +5 -60
- package/lib/examples/AgentGuardrailsExample.js +4 -28
- package/lib/examples/AgentHooksExample.js +1 -1
- package/lib/examples/AgentInferenceProviderExample.js +5 -96
- package/lib/examples/AgentMCPExample.js +7 -105
- package/lib/examples/AgentMemoryExample.js +5 -74
- package/lib/examples/AgentMonitoringExample.js +7 -53
- package/lib/examples/AgentNotificationsExample.js +3 -61
- package/lib/examples/AgentOtelExample.js +3 -72
- package/lib/examples/AgentOutputsExample.js +6 -81
- package/lib/examples/AgentParametersExample.js +2 -37
- package/lib/examples/AgentSkillsExample.js +3 -45
- package/lib/examples/AgentSubagentsExample.js +6 -56
- package/lib/examples/AgentToolApprovalsExample.js +1 -11
- package/lib/examples/AgentTriggersExample.js +29 -239
- package/lib/examples/AgentspecsExample.js +6 -60
- package/lib/examples/AssistantExample.js +5 -5
- package/lib/examples/AssistantGalleryExample.js +8 -65
- package/lib/examples/CellExample.js +1 -6
- package/lib/examples/ChatCustomExample.js +2 -31
- package/lib/examples/ChatExample.js +1 -9
- package/lib/examples/ChatStandaloneExample.js +3 -37
- package/lib/examples/CopilotKitLexicalExample.js +1 -24
- package/lib/examples/DecksAgent.js +1 -1
- package/lib/examples/DocumentPageAgent.js +1 -1
- package/lib/examples/HomeExample.js +14 -62
- package/lib/examples/Lexical2Example.js +3 -32
- package/lib/examples/LexicalAgentExample.js +2 -34
- package/lib/examples/LexicalAgentSidebarExample.js +3 -34
- package/lib/examples/LoopAppComputerExample.js +1 -1
- package/lib/examples/LoopShellExample.js +2 -2
- package/lib/examples/LoopStrategyExample.js +15 -87
- package/lib/examples/LoopWorkspaceEmbed.js +2 -18
- package/lib/examples/LoopWorkspaceExample.js +2 -2
- package/lib/examples/NotebookAgentExample.js +2 -33
- package/lib/examples/NotebookAgentSidebarExample.js +3 -46
- package/lib/examples/NotebookCollaborationExample.js +1 -31
- package/lib/examples/NotebookExample.js +1 -18
- package/lib/examples/NotebookPageAgent.js +1 -1
- package/lib/examples/ScenesExample.js +5 -24
- package/lib/examples/VoiceChatExample.js +1 -1
- package/lib/examples/components/AuthRequiredView.js +1 -7
- package/lib/examples/components/ErrorView.js +1 -8
- package/lib/examples/components/ExampleErrorBoundary.js +1 -14
- package/lib/examples/components/FooterMetrics.js +1 -7
- package/lib/examples/components/Header.js +12 -51
- package/lib/examples/components/HeaderControls.js +1 -9
- package/lib/examples/components/LexicalEditor.js +1 -8
- package/lib/examples/components/MainContent.js +1 -13
- package/lib/examples/components/MockFileBrowser.js +4 -40
- package/lib/examples/components/SessionTabs.js +1 -1
- package/lib/examples/components/TimeTravel.js +1 -13
- package/lib/examples/main.js +13 -81
- package/lib/examples/scenes/A2UiComponentsGalleryScene.js +3 -34
- package/lib/examples/scenes/A2UiContactCardScene.js +3 -35
- package/lib/examples/scenes/A2UiRestaurantScene.js +3 -53
- package/lib/examples/scenes/A2UiViewerScene.js +3 -34
- package/lib/examples/utils/AssistantGalleryGrid.js +6 -35
- package/lib/examples2/DatalayerNotebookExample.js +3 -33
- package/lib/examples2/NativeNavigationExample.js +4 -10
- package/lib/examples2/NotebookMutationsKernel.js +2 -1
- package/lib/examples2/NotebookMutationsServiceManager.js +2 -1
- package/lib/examples2/ReactRouterExample.js +14 -42
- package/lib/hooks/useToolApprovals.d.ts +2 -34
- package/lib/hooks/useToolApprovals.js +1 -64
- package/lib/identity/AgentIdentity.js +17 -62
- package/lib/identity/IdentityConnect.js +13 -59
- package/lib/identity/OAuthCallback.js +6 -44
- package/lib/lexical/ChatInlinePlugin.js +6 -14
- package/lib/loop/apps/AppRenderer.d.ts +4 -3
- package/lib/loop/apps/AppRenderer.js +11 -12
- package/lib/loop/apps/appspec.js +6 -3
- package/lib/loop/embed/AppEmbed.d.ts +1 -1
- package/lib/loop/embed/AppEmbed.js +2 -1
- package/lib/loop/embed/LoopEmbed.js +1 -7
- package/lib/loop/embed/embedConfig.d.ts +3 -3
- package/lib/loop/embed/embedConfig.js +2 -3
- package/lib/loop/embed/embedTheme.d.ts +4 -4
- package/lib/loop/embed/embedTheme.js +11 -7
- package/lib/loop/plugins/a2a-sidebar/A2ASidebar.js +7 -34
- package/lib/loop/plugins/a2ui/A2uiView.js +4 -12
- package/lib/loop/plugins/a2ui-surface/InlineSurface.js +1 -16
- package/lib/loop/plugins/a2ui-surface/SurfaceToolResult.js +2 -12
- package/lib/loop/plugins/agents/AnonymousKeyBadge.js +3 -2
- package/lib/loop/plugins/agents/SandboxSelector.js +3 -7
- package/lib/loop/plugins/agents/SandboxView.js +4 -27
- package/lib/loop/plugins/agents/TeamMemberPicker.js +2 -2
- package/lib/loop/plugins/agentspecs/AgentspecPicker.js +3 -2
- package/lib/loop/plugins/app-activity/AppActivity.js +1 -1
- package/lib/loop/plugins/app-computer/AppComputer.js +5 -21
- package/lib/loop/plugins/app-elements/AppElements.js +2 -31
- package/lib/loop/plugins/app-page/AppPage.js +1 -1
- package/lib/loop/plugins/app-rules/AppRulesCard.js +4 -20
- package/lib/loop/plugins/assistant/index.js +1 -13
- package/lib/loop/plugins/chat/ChatView.js +40 -106
- package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.js +2 -13
- package/lib/loop/plugins/decks/DeckSurface.js +2 -2
- package/lib/loop/plugins/document/DocumentView.js +4 -12
- package/lib/loop/plugins/document-toolbar/SandboxStatusItem.js +3 -8
- package/lib/loop/plugins/graph/GraphView.js +2 -2
- package/lib/loop/plugins/input-prompt/ComposerView.js +1 -1
- package/lib/loop/plugins/notebook/NotebookView.js +3 -11
- package/lib/loop/plugins/page-layout/SplitLayout.js +11 -34
- package/lib/loop/plugins/page-layout/TurnPanel.js +9 -35
- package/lib/loop/plugins/shell/useEditorPreviews.js +3 -2
- package/lib/loop/plugins/subagent-activity/SubagentPulse.js +1 -13
- package/lib/loop/plugins/window-frame/WindowFrame.js +10 -44
- package/lib/loop/plugins/window-frame/index.js +1 -1
- package/lib/loop/shell/LoopWorkspace.js +34 -77
- package/lib/loop/shell/PluginToggles.js +4 -15
- package/lib/loop/shell/SidebarRail.js +8 -40
- package/lib/loop/shell/ViewSwitcher.js +4 -24
- package/lib/loop-main.js +2 -3
- package/lib/mcp/McpServerManager.js +6 -37
- package/lib/portable/index.d.ts +11 -0
- package/lib/portable/index.js +20 -0
- package/lib/protocols/AGUIAdapter.js +2 -2
- package/lib/protocols/BaseProtocolAdapter.d.ts +2 -0
- package/lib/protocols/BaseProtocolAdapter.js +4 -0
- package/lib/specs/apps.js +6 -0
- package/lib/specs/appspecSchema.js +11 -4
- package/lib/stories/loop/ReferenceScreens.js +17 -91
- package/lib/stories/loop/pictures-main.js +1 -1
- package/lib/types/agentspecs.d.ts +5 -2
- package/lib/types/protocol.d.ts +2 -0
- package/lib/utils/approvals.d.ts +59 -0
- package/lib/utils/approvals.js +101 -0
- package/lib/voice/VoiceInput.js +3 -39
- package/package.json +2 -2
- package/scripts/codegen/generate_envvars.py +0 -1
- package/lib/shims/primerAddonsBox.d.ts +0 -1
- package/lib/shims/primerAddonsBox.js +0 -7
package/lib/examples/main.js
CHANGED
|
@@ -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, {
|
|
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, {
|
|
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",
|
|
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",
|
|
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",
|
|
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, {
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
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, {
|
|
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, {
|
|
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, {
|
|
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, {
|
|
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, {
|
|
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, {
|
|
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, {
|
|
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",
|
|
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": "",
|
|
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, {
|
|
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, {
|
|
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, {
|
|
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;
|