@mcp-b/react-components 0.5.3 → 0.5.4

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 (44) hide show
  1. package/dist/{CodeBlock-D-a84xBL.js → CodeBlock-BK0sOAbV.js} +1 -1
  2. package/dist/{FileTree-D8rtTLgK.js → FileTree-BWQZ0FSi.js} +1 -1
  3. package/dist/components/Activity.js +1 -1
  4. package/dist/components/AgentChat.js +1 -1
  5. package/dist/components/AgentConnection.js +2 -2
  6. package/dist/components/Artifact.js +1 -1
  7. package/dist/components/BrowserLiveView.js +1 -1
  8. package/dist/components/BrowserReplay.js +1 -1
  9. package/dist/components/ChainOfThought.d.ts +1 -1
  10. package/dist/components/ChainOfThought.js +1 -1
  11. package/dist/components/CodeBlock.js +1 -1
  12. package/dist/components/Commit.js +1 -1
  13. package/dist/components/ContextMenu.js +1 -1
  14. package/dist/components/Conversation.js +1 -1
  15. package/dist/components/Dialog.js +1 -1
  16. package/dist/components/EnvironmentVariables.js +1 -1
  17. package/dist/components/FileTree.js +1 -1
  18. package/dist/components/McpServerPicker.d.ts +34 -0
  19. package/dist/components/McpServerPicker.js +133 -0
  20. package/dist/components/Menubar.js +1 -1
  21. package/dist/components/Message.js +1 -1
  22. package/dist/components/ModelSelector.js +1 -1
  23. package/dist/components/NavigationMenu.js +1 -1
  24. package/dist/components/PromptInput.js +3 -3
  25. package/dist/components/Queue.js +1 -1
  26. package/dist/components/Reasoning.js +1 -1
  27. package/dist/components/Select.js +1 -1
  28. package/dist/components/Sources.js +1 -1
  29. package/dist/components/Stepper.js +1 -1
  30. package/dist/components/Task.js +1 -1
  31. package/dist/components/Terminal.js +2 -2
  32. package/dist/components/TestResults.js +1 -1
  33. package/dist/components/ThinkChat.js +1 -1
  34. package/dist/components/WebPreview.js +1 -1
  35. package/dist/components/WorkspaceExplorer.js +3 -3
  36. package/dist/components/icons.d.ts +2 -2
  37. package/dist/components/icons.js +2 -2
  38. package/dist/{copy-button-BmJEAKuP.js → copy-button-CB2MWcau.js} +1 -1
  39. package/dist/{icons-CZRH4FVH.js → icons-BCNawx-T.js} +5 -1
  40. package/dist/{icons-CmO7-pNY.d.ts → icons-BYpJY6L2.d.ts} +2 -1
  41. package/dist/styles/agent-chat.css +5 -0
  42. package/dist/styles/index.css +1 -0
  43. package/dist/styles/mcp-server-picker.css +138 -0
  44. package/package.json +7 -2
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "./class-names-9UtZwb0J.js";
2
2
  import { Select, SelectContent, SelectItem, SelectList, SelectTrigger, SelectValue } from "./components/Select.js";
3
- import { t as CopyButton } from "./copy-button-BmJEAKuP.js";
3
+ import { t as CopyButton } from "./copy-button-CB2MWcau.js";
4
4
  import * as React from "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  import { createHighlighter } from "shiki";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "./class-names-9UtZwb0J.js";
2
- import { c as ChevronRightIcon, g as FolderOpenIcon, h as FolderIcon, m as FileIcon } from "./icons-CZRH4FVH.js";
2
+ import { c as ChevronRightIcon, g as FolderOpenIcon, h as FolderIcon, m as FileIcon } from "./icons-BCNawx-T.js";
3
3
  import * as React from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/_internal/use-file-tree-nav.ts
@@ -1,6 +1,6 @@
1
1
  import { CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger } from "./Collapsible.js";
2
2
  import { t as cx } from "../class-names-9UtZwb0J.js";
3
- import { c as ChevronRightIcon } from "../icons-CZRH4FVH.js";
3
+ import { c as ChevronRightIcon } from "../icons-BCNawx-T.js";
4
4
  import "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/Activity.tsx
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { D as RefreshIcon, E as PlusIcon } from "../icons-CZRH4FVH.js";
2
+ import { D as PlusIcon, O as RefreshIcon } from "../icons-BCNawx-T.js";
3
3
  import { Activity, ActivityContent, ActivityPanel, ActivityTrigger } from "./Activity.js";
4
4
  import { Context, ContextContent, ContextContentBody, ContextContentHeader, ContextTrigger, getContextUsage, getContextUsedTokens } from "./Context.js";
5
5
  import { Conversation, ConversationContent, ConversationEmptyState, ConversationScrollButton } from "./Conversation.js";
@@ -1,8 +1,8 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { y as LinkIcon } from "../icons-CZRH4FVH.js";
2
+ import { y as LinkIcon } from "../icons-BCNawx-T.js";
3
3
  import { Popover } from "./Popover.js";
4
4
  import { Button } from "./Button.js";
5
- import { a as CodeBlockCopyButton, i as CodeBlockContent, n as CodeBlockActions, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock } from "../CodeBlock-D-a84xBL.js";
5
+ import { a as CodeBlockCopyButton, i as CodeBlockContent, n as CodeBlockActions, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock } from "../CodeBlock-BK0sOAbV.js";
6
6
  import * as React from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  //#region src/components/AgentConnection.tsx
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { P as XIcon } from "../icons-CZRH4FVH.js";
2
+ import { F as XIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { Tooltip, TooltipPopup, TooltipPortal, TooltipPositioner, TooltipTrigger } from "./Tooltip.js";
5
5
  import "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { b as MaximizeIcon, k as SpinnerIcon } from "../icons-CZRH4FVH.js";
2
+ import { A as SpinnerIcon, b as MaximizeIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { Dialog, DialogContent, DialogTitle } from "./Dialog.js";
5
5
  import { Badge } from "./Badge.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { C as PauseIcon, T as PlayIcon } from "../icons-CZRH4FVH.js";
2
+ import { E as PlayIcon, w as PauseIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { Slider, SliderControl, SliderIndicator, SliderThumb, SliderTrack } from "./Slider.js";
5
5
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  import { CollapsiblePanelProps, CollapsibleRootProps, CollapsibleTriggerProps } from "./Collapsible.js";
2
- import { _ as IconProps } from "../icons-CmO7-pNY.js";
2
+ import { _ as IconProps } from "../icons-BYpJY6L2.js";
3
3
  import * as React from "react";
4
4
 
5
5
  //#region src/components/ChainOfThought.d.ts
@@ -1,6 +1,6 @@
1
1
  import { CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger } from "./Collapsible.js";
2
2
  import { t as cx } from "../class-names-9UtZwb0J.js";
3
- import { a as CheckIcon, c as ChevronRightIcon, k as SpinnerIcon, u as DotIcon } from "../icons-CZRH4FVH.js";
3
+ import { A as SpinnerIcon, a as CheckIcon, c as ChevronRightIcon, u as DotIcon } from "../icons-BCNawx-T.js";
4
4
  import "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/ChainOfThought.tsx
@@ -1,2 +1,2 @@
1
- import { a as CodeBlockCopyButton, c as CodeBlockLanguageSelector, d as CodeBlockLanguageSelectorTrigger, f as CodeBlockLanguageSelectorValue, h as CODE_BLOCK_LANGUAGES, i as CodeBlockContent, l as CodeBlockLanguageSelectorContent, m as highlightCode, n as CodeBlockActions, o as CodeBlockFilename, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock, u as CodeBlockLanguageSelectorItem } from "../CodeBlock-D-a84xBL.js";
1
+ import { a as CodeBlockCopyButton, c as CodeBlockLanguageSelector, d as CodeBlockLanguageSelectorTrigger, f as CodeBlockLanguageSelectorValue, h as CODE_BLOCK_LANGUAGES, i as CodeBlockContent, l as CodeBlockLanguageSelectorContent, m as highlightCode, n as CodeBlockActions, o as CodeBlockFilename, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock, u as CodeBlockLanguageSelectorItem } from "../CodeBlock-BK0sOAbV.js";
2
2
  export { CODE_BLOCK_LANGUAGES, CodeBlock, CodeBlockActions, CodeBlockContainer, CodeBlockContent, CodeBlockCopyButton, CodeBlockFilename, CodeBlockHeader, CodeBlockLanguageSelector, CodeBlockLanguageSelectorContent, CodeBlockLanguageSelectorItem, CodeBlockLanguageSelectorTrigger, CodeBlockLanguageSelectorValue, CodeBlockTitle, highlightCode };
@@ -1,6 +1,6 @@
1
1
  import { CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger } from "./Collapsible.js";
2
2
  import { t as cx } from "../class-names-9UtZwb0J.js";
3
- import { a as CheckIcon, c as ChevronRightIcon, l as CopyIcon, m as FileIcon } from "../icons-CZRH4FVH.js";
3
+ import { a as CheckIcon, c as ChevronRightIcon, l as CopyIcon, m as FileIcon } from "../icons-BCNawx-T.js";
4
4
  import { Button } from "./Button.js";
5
5
  import { Tooltip, TooltipPopup, TooltipPortal, TooltipPositioner, TooltipTrigger } from "./Tooltip.js";
6
6
  import { Avatar } from "./Avatar.js";
@@ -1,4 +1,4 @@
1
- import { a as CheckIcon, c as ChevronRightIcon, u as DotIcon } from "../icons-CZRH4FVH.js";
1
+ import { a as CheckIcon, c as ChevronRightIcon, u as DotIcon } from "../icons-BCNawx-T.js";
2
2
  import "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { d as DownloadIcon, t as ArrowDownIcon } from "../icons-CZRH4FVH.js";
2
+ import { d as DownloadIcon, t as ArrowDownIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { useStickToBottom } from "./useStickToBottom.js";
5
5
  import * as React from "react";
@@ -1,4 +1,4 @@
1
- import { P as XIcon } from "../icons-CZRH4FVH.js";
1
+ import { F as XIcon } from "../icons-BCNawx-T.js";
2
2
  import "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { a as CheckIcon, f as EyeIcon, l as CopyIcon, p as EyeOffIcon } from "../icons-CZRH4FVH.js";
2
+ import { a as CheckIcon, f as EyeIcon, l as CopyIcon, p as EyeOffIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { Tooltip, TooltipPopup, TooltipPortal, TooltipPositioner, TooltipTrigger } from "./Tooltip.js";
5
5
  import { Badge } from "./Badge.js";
@@ -1,2 +1,2 @@
1
- import { a as FileTreeIcon, i as FileTreeFolder, n as FileTreeActions, o as FileTreeName, r as FileTreeFile, t as FileTree } from "../FileTree-D8rtTLgK.js";
1
+ import { a as FileTreeIcon, i as FileTreeFolder, n as FileTreeActions, o as FileTreeName, r as FileTreeFile, t as FileTree } from "../FileTree-BWQZ0FSi.js";
2
2
  export { FileTree, FileTreeActions, FileTreeFile, FileTreeFolder, FileTreeIcon, FileTreeName };
@@ -0,0 +1,34 @@
1
+ import * as React from "react";
2
+ import { Icon } from "@modelcontextprotocol/sdk/types.js";
3
+
4
+ //#region src/components/McpServerPicker.d.ts
5
+ type McpServerPickerStatus = "connecting" | "needs-auth" | "authenticating" | "ready" | "failed";
6
+ interface McpServerCard {
7
+ id: string;
8
+ name: string;
9
+ url: string;
10
+ description?: string;
11
+ category?: string;
12
+ icon?: React.ReactNode | string | Icon;
13
+ status?: McpServerPickerStatus;
14
+ statusLabel?: string;
15
+ }
16
+ interface McpServerPickerProps {
17
+ /** MCP servers to show in the plus-menu picker. */
18
+ servers: readonly McpServerCard[];
19
+ /** Called when the user chooses a server; hosts own OAuth and connection state. */
20
+ onConnect: (server: McpServerCard) => void | Promise<void>;
21
+ /** Offset from the plus trigger to the menu, useful for prompt composers. */
22
+ sideOffset?: number;
23
+ }
24
+ /**
25
+ * Prompt plus-menu picker for choosing an MCP server and handing connection
26
+ * work back to the host app.
27
+ */
28
+ declare function McpServerPicker({
29
+ servers,
30
+ onConnect,
31
+ sideOffset
32
+ }: McpServerPickerProps): React.JSX.Element;
33
+ //#endregion
34
+ export { McpServerCard, McpServerPicker, McpServerPickerProps, McpServerPickerStatus };
@@ -0,0 +1,133 @@
1
+ import { A as SpinnerIcon, D as PlusIcon, N as WarningIcon, a as CheckIcon } from "../icons-BCNawx-T.js";
2
+ import { Button } from "./Button.js";
3
+ import { MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuRoot, MenuShortcut, MenuTrigger } from "./Menu.js";
4
+ import * as React from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/components/McpServerPicker.tsx
7
+ /**
8
+ * Prompt plus-menu picker for choosing an MCP server and handing connection
9
+ * work back to the host app.
10
+ */
11
+ function McpServerPicker({ servers, onConnect, sideOffset = 80 }) {
12
+ const groups = groupServers(servers);
13
+ const showHeadings = groups.some((group) => group.category);
14
+ return /* @__PURE__ */ jsx("div", {
15
+ className: "mcp-server-picker",
16
+ children: /* @__PURE__ */ jsxs(MenuRoot, { children: [/* @__PURE__ */ jsx(MenuTrigger, { render: /* @__PURE__ */ jsx(Button, {
17
+ type: "button",
18
+ variant: "ghost",
19
+ color: "neutral",
20
+ size: "icon-xs",
21
+ className: "mcp-server-picker__trigger",
22
+ "aria-label": "Add MCP server",
23
+ children: /* @__PURE__ */ jsx(PlusIcon, {})
24
+ }) }), /* @__PURE__ */ jsx(MenuContent, {
25
+ side: "top",
26
+ align: "start",
27
+ sideOffset,
28
+ collisionPadding: 8,
29
+ "aria-label": "MCP servers",
30
+ className: "mcp-server-picker__popup",
31
+ children: servers.length === 0 ? /* @__PURE__ */ jsx(MenuItem, {
32
+ disabled: true,
33
+ className: "mcp-server-picker__empty",
34
+ children: "No MCP servers available."
35
+ }) : groups.map((group) => /* @__PURE__ */ jsxs(MenuGroup, {
36
+ className: "mcp-server-picker__group",
37
+ children: [showHeadings ? /* @__PURE__ */ jsx(MenuGroupLabel, { children: group.category || "Servers" }) : null, group.servers.map((server) => /* @__PURE__ */ jsx(McpServerPickerRow, {
38
+ server,
39
+ onConnect
40
+ }, server.id))]
41
+ }, group.category))
42
+ })] })
43
+ });
44
+ }
45
+ function McpServerPickerRow({ server, onConnect }) {
46
+ const descriptionId = React.useId();
47
+ const statusText = server.statusLabel ?? getStatusLabel(server.status);
48
+ const busy = server.status === "connecting" || server.status === "authenticating";
49
+ return /* @__PURE__ */ jsxs(MenuItem, {
50
+ className: "mcp-server-picker__row",
51
+ "data-status": server.status,
52
+ "aria-busy": busy || void 0,
53
+ "aria-describedby": server.description ? descriptionId : void 0,
54
+ onClick: () => void onConnect(server),
55
+ children: [
56
+ /* @__PURE__ */ jsx("span", {
57
+ className: "mcp-server-picker__icon",
58
+ children: renderIcon(server.icon, server.name)
59
+ }),
60
+ /* @__PURE__ */ jsxs("span", {
61
+ className: "mcp-server-picker__copy",
62
+ children: [/* @__PURE__ */ jsx("span", {
63
+ className: "mcp-server-picker__name",
64
+ children: server.name
65
+ }), server.description ? /* @__PURE__ */ jsx("span", {
66
+ id: descriptionId,
67
+ className: "mcp-server-picker__description",
68
+ children: server.description
69
+ }) : null]
70
+ }),
71
+ statusText ? /* @__PURE__ */ jsxs(MenuShortcut, {
72
+ className: "mcp-server-picker__meta",
73
+ children: [/* @__PURE__ */ jsx(StatusIcon, { status: server.status }), /* @__PURE__ */ jsx("span", { children: statusText })]
74
+ }) : null
75
+ ]
76
+ });
77
+ }
78
+ function StatusIcon({ status }) {
79
+ if (status === "ready") return /* @__PURE__ */ jsx(CheckIcon, { size: 14 });
80
+ if (status === "failed" || status === "needs-auth") return /* @__PURE__ */ jsx(WarningIcon, { size: 14 });
81
+ if (status === "connecting" || status === "authenticating") return /* @__PURE__ */ jsx(SpinnerIcon, {
82
+ className: "mcp-server-picker__spinner",
83
+ size: 14
84
+ });
85
+ return null;
86
+ }
87
+ function getStatusLabel(status) {
88
+ if (status === "ready") return "Connected";
89
+ if (status === "failed") return "Failed";
90
+ if (status === "needs-auth") return "Authorize";
91
+ if (status === "authenticating") return "Authenticating";
92
+ if (status === "connecting") return "Connecting";
93
+ return "";
94
+ }
95
+ function renderIcon(icon, name) {
96
+ if (React.isValidElement(icon)) return icon;
97
+ if (typeof icon === "string") return /* @__PURE__ */ jsx(IconImage, { src: icon });
98
+ if (isMcpIcon(icon)) return /* @__PURE__ */ jsx(IconImage, { src: icon.src });
99
+ return /* @__PURE__ */ jsx("span", {
100
+ className: "mcp-server-picker__fallback-icon",
101
+ children: name.slice(0, 1)
102
+ });
103
+ }
104
+ function IconImage({ src }) {
105
+ return /* @__PURE__ */ jsx("img", {
106
+ src,
107
+ alt: "",
108
+ loading: "lazy",
109
+ decoding: "async",
110
+ referrerPolicy: "no-referrer"
111
+ });
112
+ }
113
+ function isMcpIcon(icon) {
114
+ return Boolean(icon && typeof icon === "object" && "src" in icon && typeof icon.src === "string");
115
+ }
116
+ function groupServers(servers) {
117
+ const groups = [];
118
+ for (const server of servers) {
119
+ const category = server.category ?? "";
120
+ let group = groups.find((candidate) => candidate.category === category);
121
+ if (!group) {
122
+ group = {
123
+ category,
124
+ servers: []
125
+ };
126
+ groups.push(group);
127
+ }
128
+ group.servers.push(server);
129
+ }
130
+ return groups;
131
+ }
132
+ //#endregion
133
+ export { McpServerPicker };
@@ -1,4 +1,4 @@
1
- import { a as CheckIcon, c as ChevronRightIcon, u as DotIcon } from "../icons-CZRH4FVH.js";
1
+ import { a as CheckIcon, c as ChevronRightIcon, u as DotIcon } from "../icons-BCNawx-T.js";
2
2
  import "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Menu } from "@base-ui/react/menu";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { m as FileIcon, n as ArrowLeftIcon, r as ArrowRightIcon } from "../icons-CZRH4FVH.js";
2
+ import { m as FileIcon, n as ArrowLeftIcon, r as ArrowRightIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { Tooltip, TooltipPopup, TooltipPortal, TooltipPositioner, TooltipTrigger } from "./Tooltip.js";
5
5
  import { t as AttachmentPreview } from "../attachment-preview-ChtC3HiU.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { O as SearchIcon, o as ChevronDownIcon } from "../icons-CZRH4FVH.js";
2
+ import { k as SearchIcon, o as ChevronDownIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { Dialog, DialogBackdrop, DialogPopup, DialogPortal, DialogTitle, DialogTrigger } from "./Dialog.js";
5
5
  import * as React from "react";
@@ -1,4 +1,4 @@
1
- import { o as ChevronDownIcon } from "../icons-CZRH4FVH.js";
1
+ import { o as ChevronDownIcon } from "../icons-BCNawx-T.js";
2
2
  import * as React from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { NavigationMenu as NavigationMenu$1 } from "@base-ui/react/navigation-menu";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { A as SquareIcon, E as PlusIcon, M as WarningIcon, P as XIcon, S as MonitorIcon, _ as ImageIcon, i as ArrowUpIcon, k as SpinnerIcon, m as FileIcon, o as ChevronDownIcon, w as PencilIcon } from "../icons-CZRH4FVH.js";
2
+ import { A as SpinnerIcon, C as PaperclipIcon, D as PlusIcon, F as XIcon, N as WarningIcon, S as MonitorIcon, T as PencilIcon, i as ArrowUpIcon, j as SquareIcon, m as FileIcon, o as ChevronDownIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { Tooltip, TooltipPopup, TooltipPortal, TooltipPositioner, TooltipTrigger } from "./Tooltip.js";
5
5
  import { t as AttachmentPreview } from "../attachment-preview-ChtC3HiU.js";
@@ -550,7 +550,7 @@ function PromptInputActionMenuItem({ className, ...props }) {
550
550
  ...props
551
551
  });
552
552
  }
553
- function PromptInputActionAddAttachments({ label = "Add photos or files", onClick, children, ...props }) {
553
+ function PromptInputActionAddAttachments({ label = "Files and folders", onClick, children, ...props }) {
554
554
  const attachments = usePromptInputAttachments();
555
555
  return /* @__PURE__ */ jsx(PromptInputActionMenuItem, {
556
556
  ...props,
@@ -558,7 +558,7 @@ function PromptInputActionAddAttachments({ label = "Add photos or files", onClic
558
558
  onClick?.(event);
559
559
  if (!event.defaultPrevented) attachments.openFileDialog();
560
560
  },
561
- children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ImageIcon, { className: "prompt-input__action-menu-icon" }), label] })
561
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(PaperclipIcon, { className: "prompt-input__action-menu-icon" }), label] })
562
562
  });
563
563
  }
564
564
  function PromptInputActionAddScreenshot({ label = "Take screenshot", onClick, children, ...props }) {
@@ -1,6 +1,6 @@
1
1
  import { CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger } from "./Collapsible.js";
2
2
  import { t as cx } from "../class-names-9UtZwb0J.js";
3
- import { a as CheckIcon, c as ChevronRightIcon, m as FileIcon, u as DotIcon } from "../icons-CZRH4FVH.js";
3
+ import { a as CheckIcon, c as ChevronRightIcon, m as FileIcon, u as DotIcon } from "../icons-BCNawx-T.js";
4
4
  import { Button } from "./Button.js";
5
5
  import { Badge } from "./Badge.js";
6
6
  import { ScrollArea } from "./ScrollArea.js";
@@ -1,6 +1,6 @@
1
1
  import { CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger } from "./Collapsible.js";
2
2
  import { t as cx } from "../class-names-9UtZwb0J.js";
3
- import { c as ChevronRightIcon } from "../icons-CZRH4FVH.js";
3
+ import { c as ChevronRightIcon } from "../icons-BCNawx-T.js";
4
4
  import * as React from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { cjk } from "@streamdown/cjk";
@@ -1,4 +1,4 @@
1
- import { a as CheckIcon, i as ArrowUpIcon, t as ArrowDownIcon } from "../icons-CZRH4FVH.js";
1
+ import { a as CheckIcon, i as ArrowUpIcon, t as ArrowDownIcon } from "../icons-BCNawx-T.js";
2
2
  import * as React from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Select as Select$1 } from "@base-ui/react/select";
@@ -1,6 +1,6 @@
1
1
  import { CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger } from "./Collapsible.js";
2
2
  import { t as cx } from "../class-names-9UtZwb0J.js";
3
- import { c as ChevronRightIcon, y as LinkIcon } from "../icons-CZRH4FVH.js";
3
+ import { c as ChevronRightIcon, y as LinkIcon } from "../icons-BCNawx-T.js";
4
4
  import "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/Sources.tsx
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { a as CheckIcon, k as SpinnerIcon } from "../icons-CZRH4FVH.js";
2
+ import { A as SpinnerIcon, a as CheckIcon } from "../icons-BCNawx-T.js";
3
3
  import * as React from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/components/Stepper.tsx
@@ -1,6 +1,6 @@
1
1
  import { CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger } from "./Collapsible.js";
2
2
  import { t as cx } from "../class-names-9UtZwb0J.js";
3
- import { O as SearchIcon, c as ChevronRightIcon, m as FileIcon } from "../icons-CZRH4FVH.js";
3
+ import { c as ChevronRightIcon, k as SearchIcon, m as FileIcon } from "../icons-BCNawx-T.js";
4
4
  import "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/Task.tsx
@@ -1,8 +1,8 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { P as XIcon, j as TerminalIcon } from "../icons-CZRH4FVH.js";
2
+ import { F as XIcon, M as TerminalIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { Tooltip, TooltipPopup, TooltipPortal, TooltipPositioner, TooltipTrigger } from "./Tooltip.js";
5
- import { t as CopyButton } from "../copy-button-BmJEAKuP.js";
5
+ import { t as CopyButton } from "../copy-button-CB2MWcau.js";
6
6
  import { Badge } from "./Badge.js";
7
7
  import { ScrollArea } from "./ScrollArea.js";
8
8
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import { CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger } from "./Collapsible.js";
2
2
  import { t as cx } from "../class-names-9UtZwb0J.js";
3
- import { P as XIcon, a as CheckIcon, c as ChevronRightIcon, k as SpinnerIcon } from "../icons-CZRH4FVH.js";
3
+ import { A as SpinnerIcon, F as XIcon, a as CheckIcon, c as ChevronRightIcon } from "../icons-BCNawx-T.js";
4
4
  import { Badge } from "./Badge.js";
5
5
  import * as React from "react";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1,7 +1,7 @@
1
1
  import { Activity, ActivityContent, ActivityItem, ActivityItemGroup, ActivityOutput, ActivityPanel, ActivityText, ActivityTrigger } from "./Activity.js";
2
2
  import { Tab, TabPanel, Tabs, TabsList } from "./Tabs.js";
3
3
  import { AgentChat } from "./AgentChat.js";
4
- import { t as CodeBlock } from "../CodeBlock-D-a84xBL.js";
4
+ import { t as CodeBlock } from "../CodeBlock-BK0sOAbV.js";
5
5
  import { BrowserLiveView } from "./BrowserLiveView.js";
6
6
  import { BrowserReplay } from "./BrowserReplay.js";
7
7
  import { WorkspaceExplorer, inferWorkspaceLanguage, useWorkspace } from "./WorkspaceExplorer.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { D as RefreshIcon, n as ArrowLeftIcon, o as ChevronDownIcon, r as ArrowRightIcon } from "../icons-CZRH4FVH.js";
2
+ import { O as RefreshIcon, n as ArrowLeftIcon, o as ChevronDownIcon, r as ArrowRightIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
4
  import { Tooltip, TooltipPopup, TooltipPortal, TooltipPositioner, TooltipTrigger } from "./Tooltip.js";
5
5
  import { Badge } from "./Badge.js";
@@ -1,8 +1,8 @@
1
1
  import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { D as RefreshIcon, O as SearchIcon, m as FileIcon, n as ArrowLeftIcon } from "../icons-CZRH4FVH.js";
2
+ import { O as RefreshIcon, k as SearchIcon, m as FileIcon, n as ArrowLeftIcon } from "../icons-BCNawx-T.js";
3
3
  import { Button } from "./Button.js";
4
- import { a as CodeBlockCopyButton, i as CodeBlockContent, n as CodeBlockActions, o as CodeBlockFilename, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock } from "../CodeBlock-D-a84xBL.js";
5
- import { i as FileTreeFolder, r as FileTreeFile, t as FileTree } from "../FileTree-D8rtTLgK.js";
4
+ import { a as CodeBlockCopyButton, i as CodeBlockContent, n as CodeBlockActions, o as CodeBlockFilename, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock } from "../CodeBlock-BK0sOAbV.js";
5
+ import { i as FileTreeFolder, r as FileTreeFile, t as FileTree } from "../FileTree-BWQZ0FSi.js";
6
6
  import * as React from "react";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
8
  //#region src/components/WorkspaceExplorer.tsx
@@ -1,2 +1,2 @@
1
- import { A as SpinnerIcon, C as MonitorIcon, D as PlusIcon, E as PlayIcon, F as XIcon, M as TerminalIcon, N as WarningIcon, O as RefreshIcon, P as WrenchIcon, S as MinusIcon, T as PencilIcon, _ as IconProps, a as CheckIcon, b as LinkIcon, c as ChevronRightIcon, d as DownloadIcon, f as EyeIcon, g as FolderOpenIcon, h as FolderIcon, i as ArrowUpIcon, j as SquareIcon, k as SearchIcon, l as CopyIcon, m as FileIcon, n as ArrowLeftIcon, o as ChevronDownIcon, p as EyeOffIcon, r as ArrowRightIcon, s as ChevronLeftIcon, t as ArrowDownIcon, u as DotIcon, v as ImageIcon, w as PauseIcon, x as MaximizeIcon, y as InfoIcon } from "../icons-CmO7-pNY.js";
2
- export { ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CopyIcon, DotIcon, DownloadIcon, EyeIcon, EyeOffIcon, FileIcon, FolderIcon, FolderOpenIcon, IconProps, ImageIcon, InfoIcon, LinkIcon, MaximizeIcon, MinusIcon, MonitorIcon, PauseIcon, PencilIcon, PlayIcon, PlusIcon, RefreshIcon, SearchIcon, SpinnerIcon, SquareIcon, TerminalIcon, WarningIcon, WrenchIcon, XIcon };
1
+ import { A as SearchIcon, C as MonitorIcon, D as PlayIcon, E as PencilIcon, F as WrenchIcon, I as XIcon, M as SquareIcon, N as TerminalIcon, O as PlusIcon, P as WarningIcon, S as MinusIcon, T as PauseIcon, _ as IconProps, a as CheckIcon, b as LinkIcon, c as ChevronRightIcon, d as DownloadIcon, f as EyeIcon, g as FolderOpenIcon, h as FolderIcon, i as ArrowUpIcon, j as SpinnerIcon, k as RefreshIcon, l as CopyIcon, m as FileIcon, n as ArrowLeftIcon, o as ChevronDownIcon, p as EyeOffIcon, r as ArrowRightIcon, s as ChevronLeftIcon, t as ArrowDownIcon, u as DotIcon, v as ImageIcon, w as PaperclipIcon, x as MaximizeIcon, y as InfoIcon } from "../icons-BYpJY6L2.js";
2
+ export { ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CopyIcon, DotIcon, DownloadIcon, EyeIcon, EyeOffIcon, FileIcon, FolderIcon, FolderOpenIcon, IconProps, ImageIcon, InfoIcon, LinkIcon, MaximizeIcon, MinusIcon, MonitorIcon, PaperclipIcon, PauseIcon, PencilIcon, PlayIcon, PlusIcon, RefreshIcon, SearchIcon, SpinnerIcon, SquareIcon, TerminalIcon, WarningIcon, WrenchIcon, XIcon };
@@ -1,2 +1,2 @@
1
- import { A as SquareIcon, C as PauseIcon, D as RefreshIcon, E as PlusIcon, M as WarningIcon, N as WrenchIcon, O as SearchIcon, P as XIcon, S as MonitorIcon, T as PlayIcon, _ as ImageIcon, a as CheckIcon, b as MaximizeIcon, c as ChevronRightIcon, d as DownloadIcon, f as EyeIcon, g as FolderOpenIcon, h as FolderIcon, i as ArrowUpIcon, j as TerminalIcon, k as SpinnerIcon, l as CopyIcon, m as FileIcon, n as ArrowLeftIcon, o as ChevronDownIcon, p as EyeOffIcon, r as ArrowRightIcon, s as ChevronLeftIcon, t as ArrowDownIcon, u as DotIcon, v as InfoIcon, w as PencilIcon, x as MinusIcon, y as LinkIcon } from "../icons-CZRH4FVH.js";
2
- export { ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CopyIcon, DotIcon, DownloadIcon, EyeIcon, EyeOffIcon, FileIcon, FolderIcon, FolderOpenIcon, ImageIcon, InfoIcon, LinkIcon, MaximizeIcon, MinusIcon, MonitorIcon, PauseIcon, PencilIcon, PlayIcon, PlusIcon, RefreshIcon, SearchIcon, SpinnerIcon, SquareIcon, TerminalIcon, WarningIcon, WrenchIcon, XIcon };
1
+ import { A as SpinnerIcon, C as PaperclipIcon, D as PlusIcon, E as PlayIcon, F as XIcon, M as TerminalIcon, N as WarningIcon, O as RefreshIcon, P as WrenchIcon, S as MonitorIcon, T as PencilIcon, _ as ImageIcon, a as CheckIcon, b as MaximizeIcon, c as ChevronRightIcon, d as DownloadIcon, f as EyeIcon, g as FolderOpenIcon, h as FolderIcon, i as ArrowUpIcon, j as SquareIcon, k as SearchIcon, l as CopyIcon, m as FileIcon, n as ArrowLeftIcon, o as ChevronDownIcon, p as EyeOffIcon, r as ArrowRightIcon, s as ChevronLeftIcon, t as ArrowDownIcon, u as DotIcon, v as InfoIcon, w as PauseIcon, x as MinusIcon, y as LinkIcon } from "../icons-BCNawx-T.js";
2
+ export { ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CopyIcon, DotIcon, DownloadIcon, EyeIcon, EyeOffIcon, FileIcon, FolderIcon, FolderOpenIcon, ImageIcon, InfoIcon, LinkIcon, MaximizeIcon, MinusIcon, MonitorIcon, PaperclipIcon, PauseIcon, PencilIcon, PlayIcon, PlusIcon, RefreshIcon, SearchIcon, SpinnerIcon, SquareIcon, TerminalIcon, WarningIcon, WrenchIcon, XIcon };
@@ -1,4 +1,4 @@
1
- import { a as CheckIcon, l as CopyIcon } from "./icons-CZRH4FVH.js";
1
+ import { a as CheckIcon, l as CopyIcon } from "./icons-BCNawx-T.js";
2
2
  import { Button } from "./components/Button.js";
3
3
  import { Tooltip, TooltipPopup, TooltipPortal, TooltipPositioner, TooltipTrigger } from "./components/Tooltip.js";
4
4
  import * as React from "react";
@@ -80,6 +80,10 @@ const FileIcon = (props) => /* @__PURE__ */ jsxs(Icon, {
80
80
  ...props,
81
81
  children: [/* @__PURE__ */ jsx("path", { d: "M9 1.5H4A1.5 1.5 0 0 0 2.5 3v10A1.5 1.5 0 0 0 4 14.5h8A1.5 1.5 0 0 0 13.5 13V6L9 1.5Z" }), /* @__PURE__ */ jsx("path", { d: "M9 1.5V6h4.5" })]
82
82
  });
83
+ const PaperclipIcon = (props) => /* @__PURE__ */ jsxs(Icon, {
84
+ ...props,
85
+ children: [/* @__PURE__ */ jsx("path", { d: "M5.25 8.25 9.9 3.6a2.45 2.45 0 0 1 3.5 3.45l-5.6 5.6a3.25 3.25 0 0 1-4.6-4.6l5.4-5.4" }), /* @__PURE__ */ jsx("path", { d: "M6.6 9.6 11 5.2" })]
86
+ });
83
87
  const PlusIcon = (props) => /* @__PURE__ */ jsx(Icon, {
84
88
  ...props,
85
89
  children: /* @__PURE__ */ jsx("path", { d: "M8 3v10M3 8h10" })
@@ -248,4 +252,4 @@ const MaximizeIcon = (props) => /* @__PURE__ */ jsxs(Icon, {
248
252
  ]
249
253
  });
250
254
  //#endregion
251
- export { SquareIcon as A, PauseIcon as C, RefreshIcon as D, PlusIcon as E, WarningIcon as M, WrenchIcon as N, SearchIcon as O, XIcon as P, MonitorIcon as S, PlayIcon as T, ImageIcon as _, CheckIcon as a, MaximizeIcon as b, ChevronRightIcon as c, DownloadIcon as d, EyeIcon as f, FolderOpenIcon as g, FolderIcon as h, ArrowUpIcon as i, TerminalIcon as j, SpinnerIcon as k, CopyIcon as l, FileIcon as m, ArrowLeftIcon as n, ChevronDownIcon as o, EyeOffIcon as p, ArrowRightIcon as r, ChevronLeftIcon as s, ArrowDownIcon as t, DotIcon as u, InfoIcon as v, PencilIcon as w, MinusIcon as x, LinkIcon as y };
255
+ export { SpinnerIcon as A, PaperclipIcon as C, PlusIcon as D, PlayIcon as E, XIcon as F, TerminalIcon as M, WarningIcon as N, RefreshIcon as O, WrenchIcon as P, MonitorIcon as S, PencilIcon as T, ImageIcon as _, CheckIcon as a, MaximizeIcon as b, ChevronRightIcon as c, DownloadIcon as d, EyeIcon as f, FolderOpenIcon as g, FolderIcon as h, ArrowUpIcon as i, SquareIcon as j, SearchIcon as k, CopyIcon as l, FileIcon as m, ArrowLeftIcon as n, ChevronDownIcon as o, EyeOffIcon as p, ArrowRightIcon as r, ChevronLeftIcon as s, ArrowDownIcon as t, DotIcon as u, InfoIcon as v, PauseIcon as w, MinusIcon as x, LinkIcon as y };
@@ -22,6 +22,7 @@ declare const EyeOffIcon: (props: IconProps) => React.JSX.Element;
22
22
  declare const FolderIcon: (props: IconProps) => React.JSX.Element;
23
23
  declare const FolderOpenIcon: (props: IconProps) => React.JSX.Element;
24
24
  declare const FileIcon: (props: IconProps) => React.JSX.Element;
25
+ declare const PaperclipIcon: (props: IconProps) => React.JSX.Element;
25
26
  declare const PlusIcon: (props: IconProps) => React.JSX.Element;
26
27
  declare const MinusIcon: (props: IconProps) => React.JSX.Element;
27
28
  declare const PlayIcon: (props: IconProps) => React.JSX.Element;
@@ -45,4 +46,4 @@ declare const ImageIcon: (props: IconProps) => React.JSX.Element;
45
46
  declare const MonitorIcon: (props: IconProps) => React.JSX.Element;
46
47
  declare const MaximizeIcon: (props: IconProps) => React.JSX.Element;
47
48
  //#endregion
48
- export { SpinnerIcon as A, MonitorIcon as C, PlusIcon as D, PlayIcon as E, XIcon as F, TerminalIcon as M, WarningIcon as N, RefreshIcon as O, WrenchIcon as P, MinusIcon as S, PencilIcon as T, IconProps as _, CheckIcon as a, LinkIcon as b, ChevronRightIcon as c, DownloadIcon as d, EyeIcon as f, FolderOpenIcon as g, FolderIcon as h, ArrowUpIcon as i, SquareIcon as j, SearchIcon as k, CopyIcon as l, FileIcon as m, ArrowLeftIcon as n, ChevronDownIcon as o, EyeOffIcon as p, ArrowRightIcon as r, ChevronLeftIcon as s, ArrowDownIcon as t, DotIcon as u, ImageIcon as v, PauseIcon as w, MaximizeIcon as x, InfoIcon as y };
49
+ export { SearchIcon as A, MonitorIcon as C, PlayIcon as D, PencilIcon as E, WrenchIcon as F, XIcon as I, SquareIcon as M, TerminalIcon as N, PlusIcon as O, WarningIcon as P, MinusIcon as S, PauseIcon as T, IconProps as _, CheckIcon as a, LinkIcon as b, ChevronRightIcon as c, DownloadIcon as d, EyeIcon as f, FolderOpenIcon as g, FolderIcon as h, ArrowUpIcon as i, SpinnerIcon as j, RefreshIcon as k, CopyIcon as l, FileIcon as m, ArrowLeftIcon as n, ChevronDownIcon as o, EyeOffIcon as p, ArrowRightIcon as r, ChevronLeftIcon as s, ArrowDownIcon as t, DotIcon as u, ImageIcon as v, PaperclipIcon as w, MaximizeIcon as x, InfoIcon as y };
@@ -38,6 +38,11 @@
38
38
  );
39
39
  }
40
40
 
41
+ .agent-chat__composer > .prompt-input {
42
+ max-inline-size: 64rem;
43
+ margin-inline: auto;
44
+ }
45
+
41
46
  /* Transient status pill between transcript and composer (recovery, errors). */
42
47
  .agent-chat__notice {
43
48
  display: flex;
@@ -37,6 +37,7 @@
37
37
  @import "./nanite-scene.css" layer(components);
38
38
  @import "./number-field.css" layer(components);
39
39
  @import "./popover.css" layer(components);
40
+ @import "./mcp-server-picker.css" layer(components);
40
41
  @import "./preview-card.css" layer(components);
41
42
  @import "./progress.css" layer(components);
42
43
  @import "./radio.css" layer(components);
@@ -0,0 +1,138 @@
1
+ .mcp-server-picker {
2
+ display: inline-flex;
3
+ }
4
+
5
+ .mcp-server-picker__trigger {
6
+ flex-shrink: 0;
7
+ color: var(--sigvelo-color-text);
8
+ background: none;
9
+ }
10
+
11
+ .mcp-server-picker__trigger:hover:not([data-disabled]),
12
+ .mcp-server-picker__trigger[data-popup-open] {
13
+ color: var(--sigvelo-color-text);
14
+ background: none;
15
+ }
16
+
17
+ .mcp-server-picker__popup {
18
+ inline-size: min(32rem, calc(100dvw - 1rem));
19
+ max-block-size: min(28rem, calc(100dvh - 2rem));
20
+ overflow-y: auto;
21
+ scrollbar-gutter: stable;
22
+ overscroll-behavior: contain;
23
+ }
24
+
25
+ .mcp-server-picker__group + .mcp-server-picker__group {
26
+ margin-block-start: 0.25rem;
27
+ }
28
+
29
+ .mcp-server-picker__row {
30
+ min-block-size: 2.5rem;
31
+ gap: 0.75rem;
32
+ overflow: hidden;
33
+ }
34
+
35
+ .mcp-server-picker__icon {
36
+ display: inline-flex;
37
+ flex: 0 0 auto;
38
+ align-items: center;
39
+ justify-content: center;
40
+ inline-size: 1.5rem;
41
+ block-size: 1.5rem;
42
+ color: var(--sigvelo-color-text-muted);
43
+ }
44
+
45
+ .mcp-server-picker__icon > img,
46
+ .mcp-server-picker__icon > svg {
47
+ display: block;
48
+ inline-size: 1.25rem;
49
+ block-size: 1.25rem;
50
+ object-fit: contain;
51
+ }
52
+
53
+ .mcp-server-picker__fallback-icon {
54
+ display: inline-flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ inline-size: 1.375rem;
58
+ block-size: 1.375rem;
59
+ border-radius: var(--sigvelo-radius-sm);
60
+ background-color: var(--sigvelo-color-neutral-bg-subtle);
61
+ color: var(--sigvelo-color-neutral-text-on-subtle);
62
+ font-size: 0.75rem;
63
+ font-weight: var(--sigvelo-font-weight-bold);
64
+ line-height: 1;
65
+ text-transform: uppercase;
66
+ }
67
+
68
+ .mcp-server-picker__copy {
69
+ display: flex;
70
+ align-items: baseline;
71
+ gap: 0.625rem;
72
+ min-inline-size: 0;
73
+ }
74
+
75
+ .mcp-server-picker__name {
76
+ flex: 0 0 auto;
77
+ color: var(--sigvelo-color-text);
78
+ }
79
+
80
+ .mcp-server-picker__description {
81
+ min-inline-size: 0;
82
+ overflow: hidden;
83
+ color: var(--sigvelo-color-text-muted);
84
+ text-overflow: ellipsis;
85
+ white-space: nowrap;
86
+ }
87
+
88
+ .mcp-server-picker__meta {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ gap: 0.375rem;
92
+ min-inline-size: max-content;
93
+ }
94
+
95
+ .mcp-server-picker__row[data-status="ready"] .mcp-server-picker__meta {
96
+ color: var(--sigvelo-color-success-text-on-subtle);
97
+ }
98
+
99
+ .mcp-server-picker__row[data-status="needs-auth"] .mcp-server-picker__meta {
100
+ color: var(--sigvelo-color-warning-text-on-subtle);
101
+ }
102
+
103
+ .mcp-server-picker__row[data-status="failed"] .mcp-server-picker__meta {
104
+ color: var(--sigvelo-color-danger-text-on-subtle);
105
+ }
106
+
107
+ .mcp-server-picker__spinner {
108
+ animation: mcp-server-picker-spin 900ms linear infinite;
109
+ }
110
+
111
+ .mcp-server-picker__empty {
112
+ padding-block: 0.5rem;
113
+ padding-inline: 0.75rem;
114
+ color: var(--sigvelo-color-text-muted);
115
+ font-size: 0.875rem;
116
+ }
117
+
118
+ @media (width < 30rem) {
119
+ .mcp-server-picker__copy {
120
+ flex-direction: column;
121
+ gap: 0;
122
+ }
123
+ }
124
+
125
+ @media (forced-colors: active) {
126
+ .mcp-server-picker__fallback-icon {
127
+ border: 1px solid ButtonText;
128
+ }
129
+ }
130
+
131
+ @keyframes mcp-server-picker-spin {
132
+ from {
133
+ transform: rotate(0deg);
134
+ }
135
+ to {
136
+ transform: rotate(360deg);
137
+ }
138
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-b/react-components",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "MCP-B React components built on Base UI and shared design tokens, including Cloudflare Think chat primitives.",
5
5
  "homepage": "https://design-system.sigvelo.com",
6
6
  "bugs": {
@@ -49,13 +49,14 @@
49
49
  "anser": "^2.3.5",
50
50
  "shiki": "^3.23.0",
51
51
  "streamdown": "^2.5.0",
52
- "@mcp-b/design-tokens": "0.5.3"
52
+ "@mcp-b/design-tokens": "0.5.4"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@ai-sdk/react": "^3.0.194",
56
56
  "@cloudflare/shell": "^0.4.1",
57
57
  "@cloudflare/think": "^0.12.1",
58
58
  "@cloudflare/workers-types": "^4.20260630.1",
59
+ "@modelcontextprotocol/sdk": "^1.29.0",
59
60
  "@storybook/addon-a11y": "^10.4.6",
60
61
  "@storybook/addon-docs": "^10.4.6",
61
62
  "@storybook/addon-mcp": "^0.6.0",
@@ -83,6 +84,7 @@
83
84
  "@ai-sdk/react": "^3.0.194",
84
85
  "@cloudflare/shell": "^0.4.1",
85
86
  "@cloudflare/think": "^0.12.1",
87
+ "@modelcontextprotocol/sdk": "^1.29.0",
86
88
  "agents": "^0.17.3",
87
89
  "ai": "^6.0.182",
88
90
  "react": "^19.0.0",
@@ -98,6 +100,9 @@
98
100
  "@cloudflare/think": {
99
101
  "optional": true
100
102
  },
103
+ "@modelcontextprotocol/sdk": {
104
+ "optional": true
105
+ },
101
106
  "agents": {
102
107
  "optional": true
103
108
  },