@mcp-b/react-components 0.21.0 → 0.23.0

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 (168) hide show
  1. package/dist/{AgentChat-Dvkn8lce.d.ts → AgentChat-Bm1qYbOo.d.ts} +2 -2
  2. package/dist/{AgentChatStartScreen-CvXJBr4y.d.ts → AgentChatStartScreen-DDZ25aax.d.ts} +4 -1
  3. package/dist/{Button-yRInko9u.d.ts → Button-SBIz6Lqi.d.ts} +2 -1
  4. package/dist/{CodeBlock-ygtuzqJd.js → CodeBlock-Cp67Njo3.js} +1 -1
  5. package/dist/{CodeBlock-Bbls1CnA.d.ts → CodeBlock-yMpGqScn.d.ts} +1 -1
  6. package/dist/Dialog-BD8NBKaE.d.ts +122 -0
  7. package/dist/{FileTree-CdgfccsM.js → FileTree-DW60q1w7.js} +1 -1
  8. package/dist/IconButton-CFKhu6OR.d.ts +35 -0
  9. package/dist/{Message-DzuteocT.js → Message-_-bEYLAO.js} +9 -16
  10. package/dist/{ModelSelector-CEd8M9eK.js → ModelSelector-Brvj9Cab.js} +1 -1
  11. package/dist/{PromptInput-Cq-8RoXD.d.ts → PromptInput-BjoPWaaG.d.ts} +15 -2
  12. package/dist/{ThinkChatActivity-FY1VWXgh.d.ts → ThinkChatActivity-2BobmuvR.d.ts} +1 -1
  13. package/dist/{Workspace-CWtust-2.d.ts → Workspace-CIycQ4xE.d.ts} +1 -1
  14. package/dist/{WorkspaceExplorer-DGigwsgH.d.ts → WorkspaceExplorer-BCipn7Vd.d.ts} +1 -1
  15. package/dist/{WorkspaceFile-D8Un_xge.d.ts → WorkspaceFile-DMtRMwVv.d.ts} +1 -1
  16. package/dist/{WorkspaceFileView-Bxx4wEzJ.js → WorkspaceFileView-rUEN2iox.js} +4 -4
  17. package/dist/assets/think-browser-host.png +0 -0
  18. package/dist/components/ActionGuide.d.ts +85 -0
  19. package/dist/components/ActionGuide.js +94 -0
  20. package/dist/components/Activity.js +1 -1
  21. package/dist/components/AgentActivity.js +3 -11
  22. package/dist/components/AgentActivityPreview.js +15 -14
  23. package/dist/components/AgentAttention.d.ts +1 -1
  24. package/dist/components/AgentChat.d.ts +1 -1
  25. package/dist/components/AgentChat.js +33 -13
  26. package/dist/components/AgentChatStartScreen.d.ts +1 -1
  27. package/dist/components/AgentChatStartScreen.js +21 -15
  28. package/dist/components/AgentConnection.d.ts +1 -1
  29. package/dist/components/AgentConnection.js +2 -2
  30. package/dist/components/AgentMessageParts.js +1 -1
  31. package/dist/components/AgentToolDetail.js +1 -1
  32. package/dist/components/AlertDialog.d.ts +2 -1
  33. package/dist/components/AlertDialog.js +8 -2
  34. package/dist/components/AppIcon.d.ts +58 -0
  35. package/dist/components/AppIcon.js +51 -0
  36. package/dist/components/AppTopBar.js +9 -10
  37. package/dist/components/Approval.js +1 -1
  38. package/dist/components/Artifact.d.ts +3 -7
  39. package/dist/components/Artifact.js +12 -18
  40. package/dist/components/Avatar.d.ts +7 -2
  41. package/dist/components/Avatar.js +4 -2
  42. package/dist/components/BrowserLiveView.js +1 -1
  43. package/dist/components/BrowserReplay.js +4 -5
  44. package/dist/components/BrowserRunPanel.js +1 -1
  45. package/dist/components/Button.d.ts +1 -1
  46. package/dist/components/ChainOfThought.d.ts +1 -1
  47. package/dist/components/ChainOfThought.js +1 -1
  48. package/dist/components/ChatGptSignInScreen.js +2 -2
  49. package/dist/components/Checkbox.js +1 -1
  50. package/dist/components/Checkpoint.js +1 -1
  51. package/dist/components/CodeBlock.d.ts +1 -1
  52. package/dist/components/CodeBlock.js +1 -1
  53. package/dist/components/CodexModelSelector.js +1 -1
  54. package/dist/components/Commit.d.ts +1 -1
  55. package/dist/components/Commit.js +3 -3
  56. package/dist/components/ContextMenu.js +1 -1
  57. package/dist/components/Conversation.d.ts +2 -2
  58. package/dist/components/Conversation.js +4 -5
  59. package/dist/components/Dialog.d.ts +1 -117
  60. package/dist/components/Dialog.js +9 -1
  61. package/dist/components/EnvironmentVariables.d.ts +1 -1
  62. package/dist/components/EnvironmentVariables.js +2 -2
  63. package/dist/components/FileTree.js +1 -1
  64. package/dist/components/IconButton.d.ts +1 -31
  65. package/dist/components/IconButton.js +2 -1
  66. package/dist/components/McpConnectionRequest.d.ts +1 -1
  67. package/dist/components/McpConnectionRequest.js +1 -1
  68. package/dist/components/McpPluginCatalog.d.ts +86 -0
  69. package/dist/components/McpPluginCatalog.js +364 -0
  70. package/dist/components/McpServerPicker.d.ts +2 -2
  71. package/dist/components/McpServerPicker.js +7 -13
  72. package/dist/components/MediaPreviewCard.js +1 -1
  73. package/dist/components/Menubar.js +1 -1
  74. package/dist/components/Message.d.ts +4 -8
  75. package/dist/components/Message.js +1 -1
  76. package/dist/components/MessageScroller.d.ts +1 -1
  77. package/dist/components/MessageScroller.js +1 -1
  78. package/dist/components/ModelSelector.d.ts +2 -2
  79. package/dist/components/ModelSelector.js +1 -1
  80. package/dist/components/Plan.js +1 -1
  81. package/dist/components/PricingPlanCard.d.ts +1 -1
  82. package/dist/components/PricingPlanCard.js +10 -12
  83. package/dist/components/PromptInput.d.ts +2 -2
  84. package/dist/components/PromptInput.js +27 -10
  85. package/dist/components/Queue.d.ts +1 -1
  86. package/dist/components/Queue.js +2 -2
  87. package/dist/components/Reasoning.js +4 -9
  88. package/dist/components/ResponsiveSidebarShell.js +2 -1
  89. package/dist/components/ScrollArea.js +1 -0
  90. package/dist/components/SearchField.js +1 -1
  91. package/dist/components/Select.js +1 -1
  92. package/dist/components/Sources.js +1 -1
  93. package/dist/components/Stepper.js +1 -1
  94. package/dist/components/SubagentRunIndicator.js +1 -1
  95. package/dist/components/SubagentRunSelector.js +1 -1
  96. package/dist/components/Task.js +1 -1
  97. package/dist/components/Terminal.d.ts +3 -3
  98. package/dist/components/Terminal.js +7 -8
  99. package/dist/components/TestResults.js +1 -1
  100. package/dist/components/ThemeModeControl.js +1 -1
  101. package/dist/components/ThinkChat.d.ts +5 -5
  102. package/dist/components/ThinkChatActivity.d.ts +1 -1
  103. package/dist/components/ThinkChatActivity.js +1 -1
  104. package/dist/components/ThinkChatToolPanels.js +1 -1
  105. package/dist/components/ThinkExecutionDetail.js +1 -1
  106. package/dist/components/ThinkExecutionStatus.js +1 -1
  107. package/dist/components/ThinkExecutionWorkbench.js +14 -21
  108. package/dist/components/ThinkFullApp.d.ts +8 -4
  109. package/dist/components/ThinkFullApp.js +17 -2
  110. package/dist/components/ThinkRoutineBrowser.js +2 -2
  111. package/dist/components/ThinkRoutineForm.js +3 -3
  112. package/dist/components/ThinkRoutineLibrary.js +2 -2
  113. package/dist/components/ThinkRoutineRuns.js +1 -1
  114. package/dist/components/ThinkThreadPicker.js +2 -3
  115. package/dist/components/Toast.d.ts +12 -2
  116. package/dist/components/Toast.js +14 -4
  117. package/dist/components/Tooltip.d.ts +6 -4
  118. package/dist/components/Tooltip.js +11 -4
  119. package/dist/components/WebPreview.d.ts +13 -6
  120. package/dist/components/WebPreview.js +55 -50
  121. package/dist/components/Workspace.d.ts +1 -1
  122. package/dist/components/WorkspaceBrowser.d.ts +1 -1
  123. package/dist/components/WorkspaceBrowser.js +1 -1
  124. package/dist/components/WorkspaceExplorer.d.ts +3 -3
  125. package/dist/components/WorkspaceExplorer.js +1 -1
  126. package/dist/components/WorkspaceFile.d.ts +1 -1
  127. package/dist/components/WorkspaceFileView.d.ts +1 -1
  128. package/dist/components/WorkspaceFileView.js +1 -1
  129. package/dist/components/WorkspaceHeader.js +1 -1
  130. package/dist/components/icons.d.ts +2 -2
  131. package/dist/components/icons.js +2 -2
  132. package/dist/{copy-button-BrvQ7z4W.d.ts → copy-button-EBv_B9F6.d.ts} +2 -2
  133. package/dist/{copy-button-vo1paUSi.js → copy-button-TWq8nZhc.js} +8 -8
  134. package/dist/{icons-DyOM0EJs.js → icons-ua6f_GH3.js} +3 -2
  135. package/dist/{icons-DkRtZmvT.d.ts → icons-wP1yFUXF.d.ts} +6 -1
  136. package/dist/mcp-server-catalog-DycejaJ5.d.ts +1077 -0
  137. package/dist/styles/action-guide.css +128 -0
  138. package/dist/styles/agent-activity-preview-overlay.css +13 -1
  139. package/dist/styles/agent-activity-preview.css +3 -34
  140. package/dist/styles/agent-chat.css +110 -75
  141. package/dist/styles/alert-dialog.css +0 -18
  142. package/dist/styles/app-icon.css +122 -0
  143. package/dist/styles/app-top-bar.css +0 -1
  144. package/dist/styles/avatar.css +13 -0
  145. package/dist/styles/base.css +0 -1
  146. package/dist/styles/button.css +14 -0
  147. package/dist/styles/description-list.css +2 -2
  148. package/dist/styles/dialog.css +6 -6
  149. package/dist/styles/index.css +3 -0
  150. package/dist/styles/mcp-plugin-catalog.css +296 -0
  151. package/dist/styles/mcp-server-picker.css +0 -26
  152. package/dist/styles/message-scroller.css +5 -1
  153. package/dist/styles/message.css +7 -0
  154. package/dist/styles/prompt-input.css +26 -14
  155. package/dist/styles/recipes.css +27 -5
  156. package/dist/styles/responsive-sidebar-shell.css +14 -8
  157. package/dist/styles/search-field.css +9 -0
  158. package/dist/styles/think-full-app.css +22 -2
  159. package/dist/styles/think-thread-picker.css +1 -11
  160. package/dist/styles/toast.css +0 -21
  161. package/dist/styles/tokens.css +6 -0
  162. package/dist/styles/web-preview.css +5 -0
  163. package/dist/utils/favicon.d.ts +10 -0
  164. package/dist/utils/favicon.js +18 -0
  165. package/dist/utils/mcp-server-catalog.d.ts +2 -1078
  166. package/dist/utils/mcp-server-catalog.js +3 -11
  167. package/dist/utils/structured-code.d.ts +1 -1
  168. package/package.json +2 -2
@@ -1,8 +1,10 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { A as McpIcon, K as SpinnerIcon, Q as WarningIcon, S as FileIcon, et as XIcon } from "../icons-DyOM0EJs.js";
2
+ import { $ as WarningIcon, C as FileIcon, j as McpIcon, q as SpinnerIcon, tt as XIcon } from "../icons-ua6f_GH3.js";
3
3
  import { ActivityHeader } from "./Activity.js";
4
4
  import { AgentActivityFavicon, AgentActivityIcon } from "./AgentActivity.js";
5
5
  import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
6
+ import { AppIcon } from "./AppIcon.js";
7
+ import { IconButton } from "./IconButton.js";
6
8
  import "react";
7
9
  import { jsx, jsxs } from "react/jsx-runtime";
8
10
  //#region src/components/AgentActivityPreview.tsx
@@ -21,10 +23,12 @@ function AgentActivityPreview({ "aria-label": ariaLabel = "Agent activity", bran
21
23
  "aria-hidden": "true",
22
24
  children: brandIcon
23
25
  }),
24
- onDismiss ? /* @__PURE__ */ jsx("button", {
25
- type: "button",
26
+ onDismiss ? /* @__PURE__ */ jsx(IconButton, {
26
27
  className: "agent-activity-preview__dismiss",
27
- "aria-label": "Hide agent activity",
28
+ color: "neutral",
29
+ label: "Hide agent activity",
30
+ size: "sm",
31
+ variant: "ghost",
28
32
  onClick: onDismiss,
29
33
  children: /* @__PURE__ */ jsx(XIcon, {})
30
34
  }) : null,
@@ -48,17 +52,14 @@ function AgentActivityPreview({ "aria-label": ariaLabel = "Agent activity", bran
48
52
  trailing: /* @__PURE__ */ jsxs("span", {
49
53
  className: "agent-activity-preview__trailing",
50
54
  "aria-hidden": "true",
51
- children: [item.favicons?.length ? /* @__PURE__ */ jsx("span", {
52
- className: "agent-activity-preview__favicons",
53
- children: item.favicons.map((favicon) => /* @__PURE__ */ jsx("img", {
55
+ children: [item.favicons?.length ? /* @__PURE__ */ jsx(AppIcon.Stack, { children: item.favicons.map((favicon) => /* @__PURE__ */ jsxs(AppIcon.Root, {
56
+ size: "sm",
57
+ title: favicon.label,
58
+ children: [/* @__PURE__ */ jsx(AppIcon.Image, {
54
59
  src: favicon.src,
55
- alt: "",
56
- title: favicon.label,
57
- loading: "lazy",
58
- decoding: "async",
59
- referrerPolicy: "no-referrer"
60
- }, `${favicon.src}:${favicon.label}`))
61
- }) : null, /* @__PURE__ */ jsx(StatusIcon, { status: item.status })]
60
+ alt: ""
61
+ }), /* @__PURE__ */ jsx(AppIcon.Fallback, { children: favicon.label.slice(0, 1) })]
62
+ }, `${favicon.src}:${favicon.label}`)) }) : null, /* @__PURE__ */ jsx(StatusIcon, { status: item.status })]
62
63
  })
63
64
  })
64
65
  }), item.workspaceDestination && renderWorkspaceFileLink ? /* @__PURE__ */ jsx(NavigationLink, {
@@ -1,4 +1,4 @@
1
- import { r as ButtonProps } from "../Button-yRInko9u.js";
1
+ import { r as ButtonProps } from "../Button-SBIz6Lqi.js";
2
2
  import * as React from "react";
3
3
 
4
4
  //#region src/components/AgentAttention.d.ts
@@ -1,2 +1,2 @@
1
- import { a as PermissionModeControl, i as AgentChatRenderMessageContext, n as AgentChatComposerDraft, r as AgentChatProps, t as AgentChat } from "../AgentChat-Dvkn8lce.js";
1
+ import { a as PermissionModeControl, i as AgentChatRenderMessageContext, n as AgentChatComposerDraft, r as AgentChatProps, t as AgentChat } from "../AgentChat-Bm1qYbOo.js";
2
2
  export { AgentChat, AgentChatComposerDraft, AgentChatProps, AgentChatRenderMessageContext, PermissionModeControl };
@@ -1,17 +1,19 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { H as QueueIcon, I as MoveToFrontIcon, U as RefreshIcon, V as PlusIcon, Z as TrashIcon, z as PencilIcon } from "../icons-DyOM0EJs.js";
3
- import { n as MessageAction, r as MessageActions, t as Message } from "../Message-DzuteocT.js";
2
+ import { Button } from "./Button.js";
3
+ import { B as PencilIcon, H as PlusIcon, L as MoveToFrontIcon, Q as TrashIcon, U as QueueIcon, W as RefreshIcon } from "../icons-ua6f_GH3.js";
4
+ import { IconButton } from "./IconButton.js";
5
+ import { n as MessageAction, r as MessageActions, t as Message } from "../Message-_-bEYLAO.js";
4
6
  import { AgentMessageParts } from "./AgentMessageParts.js";
5
7
  import { Context, ContextContent, ContextContentBody, ContextContentHeader, ContextTrigger, getContextUsage, getContextUsedTokens } from "./Context.js";
6
8
  import { EmptyState } from "./EmptyState.js";
7
9
  import { MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport } from "./MessageScroller.js";
10
+ import { Menu } from "./Menu.js";
11
+ import { PromptInput, PromptInputActionAddAttachments, PromptInputActionMenu, PromptInputActionMenuContent, PromptInputActionMenuTrigger, PromptInputApproval, PromptInputAttachments, PromptInputBody, PromptInputButton, PromptInputCommandComposer, PromptInputContextSelector, PromptInputDictation, PromptInputFooter, PromptInputHeader, PromptInputPermissionSelector, PromptInputReferences, PromptInputSubmit, PromptInputTextarea, PromptInputTools, PromptInputTray, getApprovalRequestId, getApprovalStateKey, getPendingToolApprovals, usePromptInputAttachments } from "./PromptInput.js";
8
12
  import { AgentChatStartScreen } from "./AgentChatStartScreen.js";
9
13
  import { AgentChatMessageEditor } from "./AgentChatMessageEditor.js";
10
14
  import { Marker, MarkerContent } from "./Marker.js";
11
- import { Menu } from "./Menu.js";
12
15
  import { TransitionSurface } from "./TransitionSurface.js";
13
- import { PromptInput, PromptInputActionAddAttachments, PromptInputActionMenu, PromptInputActionMenuContent, PromptInputActionMenuTrigger, PromptInputApproval, PromptInputAttachments, PromptInputBody, PromptInputButton, PromptInputCommandComposer, PromptInputContextSelector, PromptInputDictation, PromptInputFooter, PromptInputHeader, PromptInputPermissionSelector, PromptInputReferences, PromptInputSubmit, PromptInputTextarea, PromptInputTools, getApprovalRequestId, getApprovalStateKey, getPendingToolApprovals, usePromptInputAttachments } from "./PromptInput.js";
14
- import { t as CopyButton } from "../copy-button-vo1paUSi.js";
16
+ import { t as CopyButton } from "../copy-button-TWq8nZhc.js";
15
17
  import * as React from "react";
16
18
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
17
19
  import { isCompactionMessage } from "agents/experimental/memory/utils";
@@ -28,11 +30,23 @@ import { isReasoningUIPart, isTextUIPart } from "ai";
28
30
  function observeAgentChatComposer(element) {
29
31
  if (!element || typeof ResizeObserver === "undefined") return;
30
32
  const root = element.parentElement;
33
+ let written;
34
+ let frame = 0;
31
35
  const observer = new ResizeObserver(() => {
32
- root?.style.setProperty("--agent-chat-composer-size", `${element.offsetHeight}px`);
36
+ if (frame) return;
37
+ frame = requestAnimationFrame(() => {
38
+ frame = 0;
39
+ const size = `${element.offsetHeight}px`;
40
+ if (size === written) return;
41
+ written = size;
42
+ root?.style.setProperty("--agent-chat-composer-size", size);
43
+ });
33
44
  });
34
45
  observer.observe(element);
35
- return () => observer.disconnect();
46
+ return () => {
47
+ cancelAnimationFrame(frame);
48
+ observer.disconnect();
49
+ };
36
50
  }
37
51
  const EMPTY_PENDING_APPROVALS = [];
38
52
  const EMPTY_SKIPPED_APPROVAL_IDS = [];
@@ -297,8 +311,10 @@ function AgentChat({ className, messages, status = "ready", onSubmit, showCompos
297
311
  "aria-atomic": "true",
298
312
  children: notice
299
313
  }),
300
- pendingPrompts.length ? /* @__PURE__ */ jsx("section", {
314
+ pendingPrompts.length ? /* @__PURE__ */ jsx(PromptInputTray, {
315
+ side: "top",
301
316
  className: "agent-chat__queued",
317
+ role: "region",
302
318
  "aria-label": "Queued messages",
303
319
  children: /* @__PURE__ */ jsx("ul", {
304
320
  className: "agent-chat__queued-list",
@@ -316,17 +332,21 @@ function AgentChat({ className, messages, status = "ready", onSubmit, showCompos
316
332
  className: "agent-chat__queued-text sigvelo-truncate sigvelo-truncate-grow",
317
333
  children: messageText
318
334
  }),
319
- /* @__PURE__ */ jsxs("button", {
320
- type: "button",
335
+ /* @__PURE__ */ jsxs(Button, {
321
336
  className: "agent-chat__queued-action",
322
337
  "aria-label": `Move queued message to front: ${messageText}`,
338
+ color: "neutral",
339
+ size: "xs",
340
+ variant: "ghost",
323
341
  onClick: () => setPendingPrompts((current) => [pending, ...current.filter((item) => item !== pending)]),
324
342
  children: [/* @__PURE__ */ jsx(MoveToFrontIcon, {}), "Move to front"]
325
343
  }),
326
- /* @__PURE__ */ jsx("button", {
327
- type: "button",
344
+ /* @__PURE__ */ jsx(IconButton, {
328
345
  className: "agent-chat__queued-action agent-chat__queued-remove",
329
- "aria-label": `Remove queued message: ${messageText}`,
346
+ color: "neutral",
347
+ label: `Remove queued message: ${messageText}`,
348
+ size: "xs",
349
+ variant: "ghost",
330
350
  onClick: () => setPendingPrompts((current) => current.filter((item) => item !== pending)),
331
351
  children: /* @__PURE__ */ jsx(TrashIcon, {})
332
352
  })
@@ -1,2 +1,2 @@
1
- import { a as AgentChatStarterListProps, i as AgentChatStarterList, n as AgentChatStartScreenProps, o as AgentChatStarterProps, r as AgentChatStarter, t as AgentChatStartScreen } from "../AgentChatStartScreen-CvXJBr4y.js";
1
+ import { a as AgentChatStarterListProps, i as AgentChatStarterList, n as AgentChatStartScreenProps, o as AgentChatStarterProps, r as AgentChatStarter, t as AgentChatStartScreen } from "../AgentChatStartScreen-DDZ25aax.js";
2
2
  export { AgentChatStartScreen, AgentChatStartScreenProps, AgentChatStarter, AgentChatStarterList, AgentChatStarterListProps, AgentChatStarterProps };
@@ -1,6 +1,8 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { et as XIcon } from "../icons-DyOM0EJs.js";
3
2
  import { Button } from "./Button.js";
3
+ import { tt as XIcon } from "../icons-ua6f_GH3.js";
4
+ import { IconButton } from "./IconButton.js";
5
+ import { PromptInputTray } from "./PromptInput.js";
4
6
  import * as React from "react";
5
7
  import { jsx, jsxs } from "react/jsx-runtime";
6
8
  //#region src/components/AgentChatStartScreen.tsx
@@ -11,7 +13,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
11
13
  * the same live composer moves from the center of the empty view to the pinned
12
14
  * transcript position after the first message.
13
15
  */
14
- function AgentChatStartScreen({ heading = "What should we work on?", composer, children, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }) {
16
+ function AgentChatStartScreen({ heading = "What should we work on?", composer, composerTray, children, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }) {
15
17
  const headingId = React.useId();
16
18
  return /* @__PURE__ */ jsx("section", {
17
19
  "data-slot": "agent-chat-start-screen",
@@ -21,18 +23,24 @@ function AgentChatStartScreen({ heading = "What should we work on?", composer, c
21
23
  ...props,
22
24
  children: /* @__PURE__ */ jsxs("div", {
23
25
  className: "agent-chat-start-screen__content",
24
- children: [
25
- heading ? /* @__PURE__ */ jsx("h2", {
26
+ children: [/* @__PURE__ */ jsxs("div", {
27
+ className: "agent-chat-start-screen__primary",
28
+ children: [heading ? /* @__PURE__ */ jsx("h2", {
26
29
  id: headingId,
27
30
  className: "agent-chat-start-screen__heading",
28
31
  children: heading
29
- }) : null,
30
- composer,
31
- children ? /* @__PURE__ */ jsx("div", {
32
- className: "agent-chat-start-screen__starters",
33
- children
34
- }) : null
35
- ]
32
+ }) : null, /* @__PURE__ */ jsxs("div", {
33
+ className: "agent-chat-start-screen__composer",
34
+ children: [composer, composerTray ? /* @__PURE__ */ jsx(PromptInputTray, {
35
+ side: "bottom",
36
+ className: "agent-chat-start-screen__composer-tray",
37
+ children: composerTray
38
+ }) : null]
39
+ })]
40
+ }), children ? /* @__PURE__ */ jsx("div", {
41
+ className: "agent-chat-start-screen__starters",
42
+ children
43
+ }) : null]
36
44
  })
37
45
  });
38
46
  }
@@ -65,14 +73,12 @@ function AgentChatStarter({ icon, muted = false, onDismiss, dismissLabel, childr
65
73
  className: "agent-chat-starter__label",
66
74
  children
67
75
  })]
68
- }), onDismiss ? /* @__PURE__ */ jsx(Button, {
69
- type: "button",
76
+ }), onDismiss ? /* @__PURE__ */ jsx(IconButton, {
77
+ label: dismissLabel ?? "Dismiss suggestion",
70
78
  variant: "ghost",
71
79
  color: "neutral",
72
80
  size: "lg",
73
- iconOnly: true,
74
81
  className: "agent-chat-starter__dismiss",
75
- "aria-label": dismissLabel ?? "Dismiss suggestion",
76
82
  onClick: onDismiss,
77
83
  children: /* @__PURE__ */ jsx(XIcon, {})
78
84
  }) : null]
@@ -1,4 +1,4 @@
1
- import { McpServerSetupAuth, McpServerSetupAuthFieldName } from "../utils/mcp-server-catalog.js";
1
+ import { d as McpServerSetupAuthFieldName, l as McpServerSetupAuth } from "../mcp-server-catalog-DycejaJ5.js";
2
2
  import * as React from "react";
3
3
 
4
4
  //#region src/components/AgentConnection.d.ts
@@ -1,10 +1,10 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { O as LinkIcon } from "../icons-DyOM0EJs.js";
3
2
  import { Button } from "./Button.js";
3
+ import { k as LinkIcon } from "../icons-ua6f_GH3.js";
4
4
  import { Popover } from "./Popover.js";
5
5
  import { Field } from "./Field.js";
6
6
  import { Form } from "./Form.js";
7
- import { a as CodeBlockCopyButton, i as CodeBlockContent, n as CodeBlockActions, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock } from "../CodeBlock-ygtuzqJd.js";
7
+ import { a as CodeBlockCopyButton, i as CodeBlockContent, n as CodeBlockActions, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock } from "../CodeBlock-Cp67Njo3.js";
8
8
  import { CUSTOM_MCP_SERVER_CARD } from "../utils/mcp-server-catalog.js";
9
9
  import * as React from "react";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { d as MessageContent, f as MessageResponse, i as MessageAttachment } from "../Message-DzuteocT.js";
1
+ import { d as MessageContent, f as MessageResponse, i as MessageAttachment } from "../Message-_-bEYLAO.js";
2
2
  import { Reasoning, ReasoningContent, ReasoningTrigger } from "./Reasoning.js";
3
3
  import { Source, Sources, SourcesContent, SourcesTrigger } from "./Sources.js";
4
4
  import { ToolInvocation } from "./ToolInvocation.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { r as ArrowLeftIcon } from "../icons-DyOM0EJs.js";
2
+ import { r as ArrowLeftIcon } from "../icons-ua6f_GH3.js";
3
3
  import { TransitionSurface } from "./TransitionSurface.js";
4
4
  import { AppTopBar } from "./AppTopBar.js";
5
5
  import { NaniteMark } from "./NaniteScene.js";
@@ -1,4 +1,4 @@
1
- import { a as ButtonVariant, i as ButtonSize, n as ButtonColor } from "../Button-yRInko9u.js";
1
+ import { a as ButtonVariant, i as ButtonSize, n as ButtonColor } from "../Button-SBIz6Lqi.js";
2
2
  import * as React from "react";
3
3
  import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
4
4
 
@@ -70,6 +70,7 @@ interface AlertDialogMediaProps extends React.HTMLAttributes<HTMLDivElement> {}
70
70
  * @see {@link https://base-ui.com/react/components/alert-dialog | Base UI Alert Dialog}
71
71
  */
72
72
  declare function AlertDialogTrigger({
73
+ render,
73
74
  className,
74
75
  ref,
75
76
  ...props
@@ -32,11 +32,17 @@ import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
32
32
  *
33
33
  * @see {@link https://base-ui.com/react/components/alert-dialog | Base UI Alert Dialog}
34
34
  */
35
- function AlertDialogTrigger({ className, ref, ...props }) {
36
- const classes = mergeBaseClassName("alert-dialog__trigger", className);
35
+ function AlertDialogTrigger({ render, className, ref, ...props }) {
36
+ const classes = mergeBaseClassName(render == null ? buttonVariants({
37
+ variant: "normal",
38
+ color: "primary",
39
+ size: "sm",
40
+ className: "alert-dialog__trigger"
41
+ }) : "alert-dialog__trigger", className);
37
42
  return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, {
38
43
  ref,
39
44
  "data-slot": "alert-dialog-trigger",
45
+ render,
40
46
  className: classes,
41
47
  ...props
42
48
  });
@@ -0,0 +1,58 @@
1
+ import { AvatarFallbackProps, AvatarImageProps, AvatarRootProps } from "./Avatar.js";
2
+ import * as React from "react";
3
+
4
+ //#region src/components/AppIcon.d.ts
5
+ type AppIconSize = "xs" | "sm" | "md" | "lg" | "xl";
6
+ type AppIconVariant = "artwork" | "surface" | "contrast";
7
+ interface AppIconRootProps extends Omit<AvatarRootProps, "shape" | "size"> {
8
+ size?: AppIconSize;
9
+ /** Artwork fills the tile; surface and contrast variants inset a standalone mark. */
10
+ variant?: AppIconVariant;
11
+ }
12
+ interface AppIconImageProps extends AvatarImageProps {}
13
+ interface AppIconFallbackProps extends AvatarFallbackProps {}
14
+ interface AppIconStackProps extends React.HTMLAttributes<HTMLSpanElement> {}
15
+ /** Rounded app artwork with Base UI's image-loading fallback behavior. */
16
+ declare function AppIconRoot({
17
+ className,
18
+ size,
19
+ variant,
20
+ ref,
21
+ ...props
22
+ }: AppIconRootProps & {
23
+ ref?: React.Ref<HTMLSpanElement>;
24
+ }): React.JSX.Element;
25
+ /** App artwork or a resolved favicon, with lazy, async, no-referrer loading defaults. */
26
+ declare function AppIconImage({
27
+ className,
28
+ decoding,
29
+ loading,
30
+ ref,
31
+ referrerPolicy,
32
+ ...props
33
+ }: AppIconImageProps & {
34
+ ref?: React.Ref<HTMLImageElement>;
35
+ }): React.JSX.Element;
36
+ declare function AppIconFallback({
37
+ className,
38
+ ref,
39
+ ...props
40
+ }: AppIconFallbackProps & {
41
+ ref?: React.Ref<HTMLSpanElement>;
42
+ }): React.JSX.Element;
43
+ /** Overlapping app marks; the first mark remains visually on top. */
44
+ declare function AppIconStack({
45
+ className,
46
+ ref,
47
+ ...props
48
+ }: AppIconStackProps & {
49
+ ref?: React.Ref<HTMLSpanElement>;
50
+ }): React.JSX.Element;
51
+ declare const AppIcon: {
52
+ Root: typeof AppIconRoot;
53
+ Image: typeof AppIconImage;
54
+ Fallback: typeof AppIconFallback;
55
+ Stack: typeof AppIconStack;
56
+ };
57
+ //#endregion
58
+ export { AppIcon, AppIconFallbackProps, AppIconImageProps, AppIconRootProps, AppIconSize, AppIconStackProps, AppIconVariant };
@@ -0,0 +1,51 @@
1
+ import { n as mergeBaseClassName } from "../class-names-BiMDVpUo.js";
2
+ import { Avatar } from "./Avatar.js";
3
+ import "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/components/AppIcon.tsx
6
+ /** Rounded app artwork with Base UI's image-loading fallback behavior. */
7
+ function AppIconRoot({ className, size = "md", variant = "artwork", ref, ...props }) {
8
+ return /* @__PURE__ */ jsx(Avatar.Root, {
9
+ ref,
10
+ className: mergeBaseClassName("app-icon", className),
11
+ "data-app-icon-size": size,
12
+ "data-app-icon-variant": variant,
13
+ shape: "rounded",
14
+ ...props
15
+ });
16
+ }
17
+ /** App artwork or a resolved favicon, with lazy, async, no-referrer loading defaults. */
18
+ function AppIconImage({ className, decoding = "async", loading = "lazy", ref, referrerPolicy = "no-referrer", ...props }) {
19
+ return /* @__PURE__ */ jsx(Avatar.Image, {
20
+ ref,
21
+ className: mergeBaseClassName("app-icon__image", className),
22
+ decoding,
23
+ loading,
24
+ referrerPolicy,
25
+ ...props
26
+ });
27
+ }
28
+ function AppIconFallback({ className, ref, ...props }) {
29
+ return /* @__PURE__ */ jsx(Avatar.Fallback, {
30
+ ref,
31
+ className: mergeBaseClassName("app-icon__fallback", className),
32
+ ...props
33
+ });
34
+ }
35
+ /** Overlapping app marks; the first mark remains visually on top. */
36
+ function AppIconStack({ className, ref, ...props }) {
37
+ return /* @__PURE__ */ jsx("span", {
38
+ ref,
39
+ "data-slot": "app-icon-stack",
40
+ className: mergeBaseClassName("app-icon-stack", className),
41
+ ...props
42
+ });
43
+ }
44
+ const AppIcon = {
45
+ Root: AppIconRoot,
46
+ Image: AppIconImage,
47
+ Fallback: AppIconFallback,
48
+ Stack: AppIconStack
49
+ };
50
+ //#endregion
51
+ export { AppIcon };
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName, t as cx } from "../class-names-BiMDVpUo.js";
2
- import { Button } from "./Button.js";
2
+ import { buttonVariants } from "./Button.js";
3
3
  import { Tooltip } from "./Tooltip.js";
4
4
  import { Toolbar } from "./Toolbar.js";
5
5
  import "react";
@@ -49,18 +49,17 @@ function AppTopBarControl({ className, ...props }) {
49
49
  });
50
50
  }
51
51
  function AppTopBarButton({ children, className, disabled, label, render, tooltip = label, ...props }) {
52
+ const classes = mergeBaseClassName(buttonVariants({
53
+ variant: "ghost",
54
+ color: "neutral",
55
+ size: "sm"
56
+ }), className);
52
57
  return /* @__PURE__ */ jsxs(Tooltip.Root, { children: [/* @__PURE__ */ jsx(Tooltip.Trigger, {
53
58
  render: /* @__PURE__ */ jsx(AppTopBarControl, {
54
- className,
59
+ className: classes,
55
60
  "aria-label": label,
56
- render: render ?? /* @__PURE__ */ jsx(Button, {
57
- type: "button",
58
- variant: "ghost",
59
- color: "neutral",
60
- size: "sm",
61
- iconOnly: true,
62
- disabled
63
- }),
61
+ "data-icon-only": "",
62
+ render,
64
63
  disabled,
65
64
  ...props
66
65
  }),
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { z as PencilIcon } from "../icons-DyOM0EJs.js";
3
2
  import { Button } from "./Button.js";
3
+ import { B as PencilIcon } from "../icons-ua6f_GH3.js";
4
4
  import { Kbd } from "./Kbd.js";
5
5
  import * as React from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { r as ButtonProps } from "../Button-yRInko9u.js";
1
+ import { n as IconButtonProps } from "../IconButton-CFKhu6OR.js";
2
2
  import * as React from "react";
3
3
 
4
4
  //#region src/components/Artifact.d.ts
@@ -83,11 +83,7 @@ declare function ArtifactActions({
83
83
  }: ArtifactActionsProps & {
84
84
  ref?: React.Ref<HTMLDivElement>;
85
85
  }): React.JSX.Element;
86
- interface ArtifactActionProps extends Omit<ButtonProps, "children" | "variant" | "size" | "color"> {
87
- /** Accessible label for the button. */
88
- label?: string;
89
- /** Tooltip text shown on hover. Defaults to label. */
90
- tooltip?: string;
86
+ interface ArtifactActionProps extends Omit<IconButtonProps, "children" | "variant" | "size" | "color"> {
91
87
  /** The icon to render inside the button. */
92
88
  icon?: React.ReactNode | React.ComponentType<{
93
89
  className?: string;
@@ -102,7 +98,7 @@ declare function ArtifactAction({
102
98
  children,
103
99
  ...props
104
100
  }: ArtifactActionProps): React.JSX.Element;
105
- interface ArtifactCloseProps extends Omit<ButtonProps, "children" | "variant" | "size" | "color"> {
101
+ interface ArtifactCloseProps extends Omit<IconButtonProps, "children" | "label" | "variant" | "size" | "color"> {
106
102
  /** Accessible label for the close button. */
107
103
  label?: string;
108
104
  children?: React.ReactNode;
@@ -1,9 +1,8 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { et as XIcon } from "../icons-DyOM0EJs.js";
3
- import { Button } from "./Button.js";
4
- import { Tooltip } from "./Tooltip.js";
2
+ import { tt as XIcon } from "../icons-ua6f_GH3.js";
3
+ import { IconButton } from "./IconButton.js";
5
4
  import "react";
6
- import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { jsx } from "react/jsx-runtime";
7
6
  //#region src/components/Artifact.tsx
8
7
  /**
9
8
  * A container for generated content (code, documents, outputs) with a header
@@ -78,32 +77,27 @@ function ArtifactActions({ className, children, ref, ...props }) {
78
77
  }
79
78
  function ArtifactAction({ className, label, tooltip, icon, children, ...props }) {
80
79
  const Icon = typeof icon === "function" ? icon : null;
81
- const accessibleLabel = label ?? tooltip;
82
- const button = /* @__PURE__ */ jsxs(Button, {
80
+ return /* @__PURE__ */ jsx(IconButton, {
81
+ label,
82
+ tooltip,
83
83
  variant: "ghost",
84
+ color: "neutral",
84
85
  size: "sm",
85
- iconOnly: true,
86
- "aria-label": accessibleLabel,
87
86
  className: cx("artifact__action", className),
88
87
  ...props,
89
- children: [Icon ? /* @__PURE__ */ jsx(Icon, {}) : icon ?? children, accessibleLabel ? /* @__PURE__ */ jsx("span", {
90
- className: "sigvelo-visually-hidden",
91
- children: accessibleLabel
92
- }) : null]
88
+ children: Icon ? /* @__PURE__ */ jsx(Icon, {}) : icon ?? children
93
89
  });
94
- if (!tooltip) return button;
95
- return /* @__PURE__ */ jsxs(Tooltip.Root, { children: [/* @__PURE__ */ jsx(Tooltip.Trigger, { render: button }), /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, { children: /* @__PURE__ */ jsx(Tooltip.Popup, { children: tooltip }) }) })] });
96
90
  }
97
91
  function ArtifactClose({ className, label = "Close", children, ...props }) {
98
- return /* @__PURE__ */ jsxs(Tooltip.Root, { children: [/* @__PURE__ */ jsx(Tooltip.Trigger, { render: /* @__PURE__ */ jsx(Button, {
92
+ return /* @__PURE__ */ jsx(IconButton, {
93
+ label,
99
94
  variant: "ghost",
95
+ color: "neutral",
100
96
  size: "sm",
101
- iconOnly: true,
102
- "aria-label": label,
103
97
  className: cx("artifact__close", className),
104
98
  ...props,
105
99
  children: children ?? /* @__PURE__ */ jsx(XIcon, {})
106
- }) }), /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, { children: /* @__PURE__ */ jsx(Tooltip.Popup, { children: label }) }) })] });
100
+ });
107
101
  }
108
102
  function ArtifactContent({ className, children, ref, ...props }) {
109
103
  return /* @__PURE__ */ jsx("div", {
@@ -6,12 +6,15 @@ import { Avatar as Avatar$1 } from "@base-ui/react/avatar";
6
6
  * Props for the Avatar.Root component.
7
7
  */
8
8
  interface AvatarRootProps extends React.ComponentPropsWithoutRef<typeof Avatar$1.Root> {
9
- size?: "sm" | "md" | "lg";
9
+ size?: "sm" | "md" | "lg" | "xl";
10
+ shape?: "circle" | "rounded";
10
11
  }
11
12
  /**
12
13
  * Props for the Avatar.Image component.
13
14
  */
14
- interface AvatarImageProps extends React.ComponentPropsWithoutRef<typeof Avatar$1.Image> {}
15
+ interface AvatarImageProps extends React.ComponentPropsWithoutRef<typeof Avatar$1.Image> {
16
+ fit?: "cover" | "contain";
17
+ }
15
18
  /**
16
19
  * Props for the Avatar.Fallback component.
17
20
  */
@@ -35,6 +38,7 @@ interface AvatarBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {}
35
38
  declare function AvatarRoot({
36
39
  className,
37
40
  size,
41
+ shape,
38
42
  ref,
39
43
  ...props
40
44
  }: AvatarRootProps & {
@@ -45,6 +49,7 @@ declare function AvatarRoot({
45
49
  */
46
50
  declare function AvatarImage({
47
51
  className,
52
+ fit,
48
53
  ref,
49
54
  ...props
50
55
  }: AvatarImageProps & {
@@ -16,12 +16,13 @@ import { Avatar as Avatar$1 } from "@base-ui/react/avatar";
16
16
  *
17
17
  * @see {@link https://base-ui.com/react/components/avatar | Base UI Avatar}
18
18
  */
19
- function AvatarRoot({ className, size = "md", ref, ...props }) {
19
+ function AvatarRoot({ className, size = "md", shape = "circle", ref, ...props }) {
20
20
  const classes = mergeBaseClassName("avatar", className);
21
21
  return /* @__PURE__ */ jsx(Avatar$1.Root, {
22
22
  ref,
23
23
  "data-slot": "avatar",
24
24
  "data-size": size,
25
+ "data-shape": shape,
25
26
  className: classes,
26
27
  ...props
27
28
  });
@@ -29,11 +30,12 @@ function AvatarRoot({ className, size = "md", ref, ...props }) {
29
30
  /**
30
31
  * Displays the avatar image. Renders an `<img>` element.
31
32
  */
32
- function AvatarImage({ className, ref, ...props }) {
33
+ function AvatarImage({ className, fit = "cover", ref, ...props }) {
33
34
  const classes = mergeBaseClassName("avatar__image", className);
34
35
  return /* @__PURE__ */ jsx(Avatar$1.Image, {
35
36
  ref,
36
37
  "data-slot": "avatar-image",
38
+ "data-fit": fit,
37
39
  className: classes,
38
40
  ...props
39
41
  });
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { K as SpinnerIcon, k as MaximizeIcon } from "../icons-DyOM0EJs.js";
3
2
  import { Button } from "./Button.js";
3
+ import { A as MaximizeIcon, q as SpinnerIcon } from "../icons-ua6f_GH3.js";
4
4
  import { Dialog } from "./Dialog.js";
5
5
  import { TransitionSurface } from "./TransitionSurface.js";
6
6
  import { StatusPill } from "./StatusPill.js";
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { B as PlayIcon, R as PauseIcon } from "../icons-DyOM0EJs.js";
3
- import { Button } from "./Button.js";
2
+ import { V as PlayIcon, z as PauseIcon } from "../icons-ua6f_GH3.js";
3
+ import { IconButton } from "./IconButton.js";
4
4
  import { r as formatClock } from "../format-S6uWyoSb.js";
5
5
  import { EmptyState } from "./EmptyState.js";
6
6
  import { Slider } from "./Slider.js";
@@ -149,13 +149,12 @@ function BrowserReplay({ className, events, autoPlay, ref, ...props }) {
149
149
  }), /* @__PURE__ */ jsxs("div", {
150
150
  className: "browser-replay__controls",
151
151
  children: [
152
- /* @__PURE__ */ jsx(Button, {
152
+ /* @__PURE__ */ jsx(IconButton, {
153
+ label: isPlaying ? "Pause replay" : "Play replay",
153
154
  variant: "ghost",
154
155
  color: "neutral",
155
156
  size: "sm",
156
- iconOnly: true,
157
157
  className: "browser-replay__toggle",
158
- "aria-label": isPlaying ? "Pause replay" : "Play replay",
159
158
  disabled,
160
159
  onClick: handlePlayPause,
161
160
  children: isPlaying ? /* @__PURE__ */ jsx(PauseIcon, {}) : /* @__PURE__ */ jsx(PlayIcon, {})