@mcp-b/react-components 0.5.3 → 0.5.5
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/dist/{CodeBlock-D-a84xBL.js → CodeBlock-BK0sOAbV.js} +1 -1
- package/dist/{FileTree-D8rtTLgK.js → FileTree-BWQZ0FSi.js} +1 -1
- package/dist/components/Activity.js +1 -1
- package/dist/components/AgentChat.d.ts +3 -0
- package/dist/components/AgentChat.js +15 -4
- package/dist/components/AgentConnection.js +2 -2
- package/dist/components/Artifact.js +1 -1
- package/dist/components/BrowserLiveView.js +1 -1
- package/dist/components/BrowserReplay.js +1 -1
- package/dist/components/ChainOfThought.d.ts +1 -1
- package/dist/components/ChainOfThought.js +1 -1
- package/dist/components/CodeBlock.js +1 -1
- package/dist/components/Commit.js +1 -1
- package/dist/components/ContextMenu.js +1 -1
- package/dist/components/Conversation.js +1 -1
- package/dist/components/Dialog.js +1 -1
- package/dist/components/EnvironmentVariables.js +1 -1
- package/dist/components/FileTree.js +1 -1
- package/dist/components/McpServerPicker.d.ts +39 -0
- package/dist/components/McpServerPicker.js +140 -0
- package/dist/components/Menubar.js +1 -1
- package/dist/components/Message.js +1 -1
- package/dist/components/ModelSelector.js +1 -1
- package/dist/components/NavigationMenu.js +1 -1
- package/dist/components/PromptInput.d.ts +2 -2
- package/dist/components/PromptInput.js +6 -6
- package/dist/components/Queue.js +1 -1
- package/dist/components/Reasoning.js +1 -1
- package/dist/components/Select.js +1 -1
- package/dist/components/Sources.js +1 -1
- package/dist/components/Stepper.js +1 -1
- package/dist/components/Task.js +1 -1
- package/dist/components/Terminal.js +2 -2
- package/dist/components/TestResults.js +1 -1
- package/dist/components/ThinkChat.d.ts +2 -0
- package/dist/components/ThinkChat.js +1 -1
- package/dist/components/WebPreview.js +1 -1
- package/dist/components/WorkspaceExplorer.js +3 -3
- package/dist/components/icons.d.ts +2 -2
- package/dist/components/icons.js +2 -2
- package/dist/{copy-button-BmJEAKuP.js → copy-button-CB2MWcau.js} +1 -1
- package/dist/{icons-CZRH4FVH.js → icons-BCNawx-T.js} +5 -1
- package/dist/{icons-CmO7-pNY.d.ts → icons-BYpJY6L2.d.ts} +2 -1
- package/dist/styles/agent-chat.css +13 -0
- package/dist/styles/index.css +1 -0
- package/dist/styles/mcp-server-picker.css +138 -0
- 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-
|
|
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-
|
|
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-
|
|
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
|
|
@@ -30,6 +30,8 @@ interface AgentChatProps<MessageT extends UIMessage = UIMessage> {
|
|
|
30
30
|
emptyState?: React.ReactNode;
|
|
31
31
|
/** Extra controls rendered in the composer toolbar. */
|
|
32
32
|
composerTools?: React.ReactNode;
|
|
33
|
+
/** Extra rows rendered in the built-in plus menu after files. */
|
|
34
|
+
composerAddMenuItems?: React.ReactNode;
|
|
33
35
|
/**
|
|
34
36
|
* Transient status rendered between the transcript and the composer —
|
|
35
37
|
* e.g. a "Reconnecting…" pill. `ThinkChat.Messages` fills this from the
|
|
@@ -86,6 +88,7 @@ declare function AgentChat<MessageT extends UIMessage = UIMessage>({
|
|
|
86
88
|
disabled,
|
|
87
89
|
emptyState,
|
|
88
90
|
composerTools,
|
|
91
|
+
composerAddMenuItems,
|
|
89
92
|
notice,
|
|
90
93
|
onRegenerate,
|
|
91
94
|
onApprovalResponse,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as cx } from "../class-names-9UtZwb0J.js";
|
|
2
|
-
import { D as
|
|
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";
|
|
6
6
|
import { Message, MessageAction, MessageActions, MessageAttachment, MessageContent, MessageResponse } from "./Message.js";
|
|
7
|
-
import { PromptInput, PromptInputApproval, PromptInputAttachments, PromptInputBody, PromptInputButton, PromptInputFooter, PromptInputPermissionSelector, PromptInputSubmit, PromptInputTextarea, PromptInputTools, getApprovalRequestId, getPendingToolApprovals, usePromptInputAttachments } from "./PromptInput.js";
|
|
7
|
+
import { PromptInput, PromptInputActionAddAttachments, PromptInputActionMenu, PromptInputActionMenuContent, PromptInputActionMenuTrigger, PromptInputApproval, PromptInputAttachments, PromptInputBody, PromptInputButton, PromptInputFooter, PromptInputPermissionSelector, PromptInputSubmit, PromptInputTextarea, PromptInputTools, getApprovalRequestId, getPendingToolApprovals, usePromptInputAttachments } from "./PromptInput.js";
|
|
8
8
|
import { Reasoning, ReasoningContent, ReasoningTrigger } from "./Reasoning.js";
|
|
9
9
|
import * as React from "react";
|
|
10
10
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -18,6 +18,17 @@ function AgentChatAttachButton() {
|
|
|
18
18
|
children: /* @__PURE__ */ jsx(PlusIcon, {})
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
+
function AgentChatAddMenu({ children }) {
|
|
22
|
+
if (!children) return /* @__PURE__ */ jsx(AgentChatAttachButton, {});
|
|
23
|
+
return /* @__PURE__ */ jsxs(PromptInputActionMenu, { children: [/* @__PURE__ */ jsx(PromptInputActionMenuTrigger, { "aria-label": "Add context" }), /* @__PURE__ */ jsxs(PromptInputActionMenuContent, {
|
|
24
|
+
side: "top",
|
|
25
|
+
align: "start",
|
|
26
|
+
sideOffset: 12,
|
|
27
|
+
collisionPadding: 8,
|
|
28
|
+
className: "agent-chat__add-menu",
|
|
29
|
+
children: [/* @__PURE__ */ jsx(PromptInputActionAddAttachments, {}), children]
|
|
30
|
+
})] });
|
|
31
|
+
}
|
|
21
32
|
function isCompactedPart(message, part, partIndex) {
|
|
22
33
|
const metadata = message.metadata;
|
|
23
34
|
if (isTextUIPart(part)) return Array.isArray(metadata?.compactedTextParts) && metadata.compactedTextParts.includes(partIndex);
|
|
@@ -88,7 +99,7 @@ function renderDefaultPart(part) {
|
|
|
88
99
|
* transport. Use it directly with plain AI SDK `useChat` or a read-only
|
|
89
100
|
* transcript; if you have a Cloudflare Think agent, use `ThinkChat` instead.
|
|
90
101
|
*/
|
|
91
|
-
function AgentChat({ className, messages, status = "ready", onSubmit, onStop, placeholder = "Ask anything...", disabled, emptyState, composerTools, notice, onRegenerate, onApprovalResponse, executionApprovals, contextWindow, renderPart, renderMessageAfter, ref }) {
|
|
102
|
+
function AgentChat({ className, messages, status = "ready", onSubmit, onStop, placeholder = "Ask anything...", disabled, emptyState, composerTools, composerAddMenuItems, notice, onRegenerate, onApprovalResponse, executionApprovals, contextWindow, renderPart, renderMessageAfter, ref }) {
|
|
92
103
|
const handleSubmit = React.useCallback((message) => {
|
|
93
104
|
onSubmit?.(message);
|
|
94
105
|
}, [onSubmit]);
|
|
@@ -194,7 +205,7 @@ function AgentChat({ className, messages, status = "ready", onSubmit, onStop, pl
|
|
|
194
205
|
disabled
|
|
195
206
|
}) }),
|
|
196
207
|
/* @__PURE__ */ jsxs(PromptInputFooter, { children: [/* @__PURE__ */ jsxs(PromptInputTools, { children: [
|
|
197
|
-
/* @__PURE__ */ jsx(
|
|
208
|
+
/* @__PURE__ */ jsx(AgentChatAddMenu, { children: composerAddMenuItems }),
|
|
198
209
|
approvalsWired ? /* @__PURE__ */ jsx(PromptInputPermissionSelector, {
|
|
199
210
|
value: permissionMode,
|
|
200
211
|
onValueChange: setPermissionMode
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as cx } from "../class-names-9UtZwb0J.js";
|
|
2
|
-
import { y as LinkIcon } from "../icons-
|
|
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-
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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-
|
|
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 {
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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,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-
|
|
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-
|
|
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,39 @@
|
|
|
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
|
+
type McpServerPickerItemsProps = Pick<McpServerPickerProps, "servers" | "onConnect">;
|
|
25
|
+
/**
|
|
26
|
+
* Prompt plus-menu picker for choosing an MCP server and handing connection
|
|
27
|
+
* work back to the host app.
|
|
28
|
+
*/
|
|
29
|
+
declare function McpServerPicker({
|
|
30
|
+
servers,
|
|
31
|
+
onConnect,
|
|
32
|
+
sideOffset
|
|
33
|
+
}: McpServerPickerProps): React.JSX.Element;
|
|
34
|
+
declare function McpServerPickerItems({
|
|
35
|
+
servers,
|
|
36
|
+
onConnect
|
|
37
|
+
}: McpServerPickerItemsProps): React.JSX.Element | React.JSX.Element[];
|
|
38
|
+
//#endregion
|
|
39
|
+
export { McpServerCard, McpServerPicker, McpServerPickerItems, McpServerPickerItemsProps, McpServerPickerProps, McpServerPickerStatus };
|
|
@@ -0,0 +1,140 @@
|
|
|
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
|
+
return /* @__PURE__ */ jsx("div", {
|
|
13
|
+
className: "mcp-server-picker",
|
|
14
|
+
children: /* @__PURE__ */ jsxs(MenuRoot, { children: [/* @__PURE__ */ jsx(MenuTrigger, { render: /* @__PURE__ */ jsx(Button, {
|
|
15
|
+
type: "button",
|
|
16
|
+
variant: "ghost",
|
|
17
|
+
color: "neutral",
|
|
18
|
+
size: "icon-xs",
|
|
19
|
+
className: "mcp-server-picker__trigger",
|
|
20
|
+
"aria-label": "Add MCP server",
|
|
21
|
+
children: /* @__PURE__ */ jsx(PlusIcon, {})
|
|
22
|
+
}) }), /* @__PURE__ */ jsx(MenuContent, {
|
|
23
|
+
side: "top",
|
|
24
|
+
align: "start",
|
|
25
|
+
sideOffset,
|
|
26
|
+
collisionPadding: 8,
|
|
27
|
+
"aria-label": "MCP servers",
|
|
28
|
+
className: "mcp-server-picker__popup",
|
|
29
|
+
children: /* @__PURE__ */ jsx(McpServerPickerItems, {
|
|
30
|
+
servers,
|
|
31
|
+
onConnect
|
|
32
|
+
})
|
|
33
|
+
})] })
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function McpServerPickerItems({ servers, onConnect }) {
|
|
37
|
+
const groups = groupServers(servers);
|
|
38
|
+
const showHeadings = groups.some((group) => group.category);
|
|
39
|
+
if (servers.length === 0) return /* @__PURE__ */ jsx(MenuItem, {
|
|
40
|
+
disabled: true,
|
|
41
|
+
className: "mcp-server-picker__empty",
|
|
42
|
+
children: "No MCP servers available."
|
|
43
|
+
});
|
|
44
|
+
return groups.map((group) => /* @__PURE__ */ jsxs(MenuGroup, {
|
|
45
|
+
className: "mcp-server-picker__group",
|
|
46
|
+
children: [showHeadings ? /* @__PURE__ */ jsx(MenuGroupLabel, { children: group.category || "Servers" }) : null, group.servers.map((server) => /* @__PURE__ */ jsx(McpServerPickerRow, {
|
|
47
|
+
server,
|
|
48
|
+
onConnect
|
|
49
|
+
}, server.id))]
|
|
50
|
+
}, group.category));
|
|
51
|
+
}
|
|
52
|
+
function McpServerPickerRow({ server, onConnect }) {
|
|
53
|
+
const descriptionId = React.useId();
|
|
54
|
+
const statusText = server.statusLabel ?? getStatusLabel(server.status);
|
|
55
|
+
const busy = server.status === "connecting" || server.status === "authenticating";
|
|
56
|
+
return /* @__PURE__ */ jsxs(MenuItem, {
|
|
57
|
+
className: "mcp-server-picker__row",
|
|
58
|
+
"data-status": server.status,
|
|
59
|
+
"aria-busy": busy || void 0,
|
|
60
|
+
"aria-describedby": server.description ? descriptionId : void 0,
|
|
61
|
+
onClick: () => void onConnect(server),
|
|
62
|
+
children: [
|
|
63
|
+
/* @__PURE__ */ jsx("span", {
|
|
64
|
+
className: "mcp-server-picker__icon",
|
|
65
|
+
children: renderIcon(server.icon, server.name)
|
|
66
|
+
}),
|
|
67
|
+
/* @__PURE__ */ jsxs("span", {
|
|
68
|
+
className: "mcp-server-picker__copy",
|
|
69
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
70
|
+
className: "mcp-server-picker__name",
|
|
71
|
+
children: server.name
|
|
72
|
+
}), server.description ? /* @__PURE__ */ jsx("span", {
|
|
73
|
+
id: descriptionId,
|
|
74
|
+
className: "mcp-server-picker__description",
|
|
75
|
+
children: server.description
|
|
76
|
+
}) : null]
|
|
77
|
+
}),
|
|
78
|
+
statusText ? /* @__PURE__ */ jsxs(MenuShortcut, {
|
|
79
|
+
className: "mcp-server-picker__meta",
|
|
80
|
+
children: [/* @__PURE__ */ jsx(StatusIcon, { status: server.status }), /* @__PURE__ */ jsx("span", { children: statusText })]
|
|
81
|
+
}) : null
|
|
82
|
+
]
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function StatusIcon({ status }) {
|
|
86
|
+
if (status === "ready") return /* @__PURE__ */ jsx(CheckIcon, { size: 14 });
|
|
87
|
+
if (status === "failed" || status === "needs-auth") return /* @__PURE__ */ jsx(WarningIcon, { size: 14 });
|
|
88
|
+
if (status === "connecting" || status === "authenticating") return /* @__PURE__ */ jsx(SpinnerIcon, {
|
|
89
|
+
className: "mcp-server-picker__spinner",
|
|
90
|
+
size: 14
|
|
91
|
+
});
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
function getStatusLabel(status) {
|
|
95
|
+
if (status === "ready") return "Connected";
|
|
96
|
+
if (status === "failed") return "Failed";
|
|
97
|
+
if (status === "needs-auth") return "Authorize";
|
|
98
|
+
if (status === "authenticating") return "Authenticating";
|
|
99
|
+
if (status === "connecting") return "Connecting";
|
|
100
|
+
return "";
|
|
101
|
+
}
|
|
102
|
+
function renderIcon(icon, name) {
|
|
103
|
+
if (React.isValidElement(icon)) return icon;
|
|
104
|
+
if (typeof icon === "string") return /* @__PURE__ */ jsx(IconImage, { src: icon });
|
|
105
|
+
if (isMcpIcon(icon)) return /* @__PURE__ */ jsx(IconImage, { src: icon.src });
|
|
106
|
+
return /* @__PURE__ */ jsx("span", {
|
|
107
|
+
className: "mcp-server-picker__fallback-icon",
|
|
108
|
+
children: name.slice(0, 1)
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
function IconImage({ src }) {
|
|
112
|
+
return /* @__PURE__ */ jsx("img", {
|
|
113
|
+
src,
|
|
114
|
+
alt: "",
|
|
115
|
+
loading: "lazy",
|
|
116
|
+
decoding: "async",
|
|
117
|
+
referrerPolicy: "no-referrer"
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function isMcpIcon(icon) {
|
|
121
|
+
return Boolean(icon && typeof icon === "object" && "src" in icon && typeof icon.src === "string");
|
|
122
|
+
}
|
|
123
|
+
function groupServers(servers) {
|
|
124
|
+
const groups = [];
|
|
125
|
+
for (const server of servers) {
|
|
126
|
+
const category = server.category ?? "";
|
|
127
|
+
let group = groups.find((candidate) => candidate.category === category);
|
|
128
|
+
if (!group) {
|
|
129
|
+
group = {
|
|
130
|
+
category,
|
|
131
|
+
servers: []
|
|
132
|
+
};
|
|
133
|
+
groups.push(group);
|
|
134
|
+
}
|
|
135
|
+
group.servers.push(server);
|
|
136
|
+
}
|
|
137
|
+
return groups;
|
|
138
|
+
}
|
|
139
|
+
//#endregion
|
|
140
|
+
export { McpServerPicker, McpServerPickerItems };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as CheckIcon, c as ChevronRightIcon, u as DotIcon } from "../icons-
|
|
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-
|
|
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 {
|
|
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-
|
|
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,6 +1,6 @@
|
|
|
1
1
|
import { A as SelectTriggerProps, M as SelectValueProps, S as SelectProps, f as SelectOption, j as SelectValue, r as SelectContentProps, s as SelectItemProps, t as Select } from "../Select-CRsKCJ9x.js";
|
|
2
2
|
import { c as ComboboxGroup, d as ComboboxLabel, f as ComboboxList, g as ComboboxTrigger, h as ComboboxSeparator, l as ComboboxInput, m as ComboboxPositioner, p as ComboboxPopup, s as ComboboxEmpty, t as Combobox, u as ComboboxItem } from "../Combobox-D9anamNr.js";
|
|
3
|
-
import { h as MenuItemProps,
|
|
3
|
+
import { h as MenuItemProps, l as MenuContentProps, w as MenuProps } from "../Menu-B5vDqZe_.js";
|
|
4
4
|
import { c as TabsList, n as TabPanel, t as Tab } from "../Tabs-D9EAq09D.js";
|
|
5
5
|
import { r as ButtonProps } from "../Button-Ct5I6aTu.js";
|
|
6
6
|
import * as React from "react";
|
|
@@ -261,7 +261,7 @@ declare function PromptInputActionMenuTrigger({
|
|
|
261
261
|
children,
|
|
262
262
|
...props
|
|
263
263
|
}: PromptInputActionMenuTriggerProps): React.JSX.Element;
|
|
264
|
-
type PromptInputActionMenuContentProps =
|
|
264
|
+
type PromptInputActionMenuContentProps = MenuContentProps;
|
|
265
265
|
declare function PromptInputActionMenuContent({
|
|
266
266
|
className,
|
|
267
267
|
children,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as cx } from "../class-names-9UtZwb0J.js";
|
|
2
|
-
import { A as
|
|
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";
|
|
6
6
|
import { Combobox, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxList, ComboboxSeparator } from "./Combobox.js";
|
|
7
|
-
import { MenuItem, MenuPopup, MenuPortal, MenuPositioner, MenuRadioGroup, MenuRadioItem, MenuRadioItemIndicator, MenuRoot, MenuTrigger } from "./Menu.js";
|
|
7
|
+
import { MenuContent, MenuItem, MenuPopup, MenuPortal, MenuPositioner, MenuRadioGroup, MenuRadioItem, MenuRadioItemIndicator, MenuRoot, MenuTrigger } from "./Menu.js";
|
|
8
8
|
import { Select, SelectContent, SelectItem, SelectPortal, SelectPositioner, SelectTrigger, SelectValue } from "./Select.js";
|
|
9
9
|
import { Tab, TabPanel, TabsList } from "./Tabs.js";
|
|
10
10
|
import * as React from "react";
|
|
@@ -538,11 +538,11 @@ function PromptInputActionMenuTrigger({ className, children, ...props }) {
|
|
|
538
538
|
}) });
|
|
539
539
|
}
|
|
540
540
|
function PromptInputActionMenuContent({ className, children, ...props }) {
|
|
541
|
-
return /* @__PURE__ */ jsx(
|
|
541
|
+
return /* @__PURE__ */ jsx(MenuContent, {
|
|
542
542
|
className: cx("prompt-input__action-menu", className),
|
|
543
543
|
...props,
|
|
544
544
|
children
|
|
545
|
-
})
|
|
545
|
+
});
|
|
546
546
|
}
|
|
547
547
|
function PromptInputActionMenuItem({ className, ...props }) {
|
|
548
548
|
return /* @__PURE__ */ jsx(MenuItem, {
|
|
@@ -550,7 +550,7 @@ function PromptInputActionMenuItem({ className, ...props }) {
|
|
|
550
550
|
...props
|
|
551
551
|
});
|
|
552
552
|
}
|
|
553
|
-
function PromptInputActionAddAttachments({ label = "
|
|
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(
|
|
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 }) {
|
package/dist/components/Queue.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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 {
|
|
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
|
package/dist/components/Task.js
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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-
|
|
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 {
|
|
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";
|
|
@@ -31,6 +31,8 @@ interface ThinkChatMessagesProps extends ThinkChatActivityRendererOptions {
|
|
|
31
31
|
emptyState?: React.ReactNode;
|
|
32
32
|
/** Extra controls rendered inside the composer, next to the send button. */
|
|
33
33
|
composerTools?: React.ReactNode;
|
|
34
|
+
/** Extra rows rendered in the built-in plus menu after files. */
|
|
35
|
+
composerAddMenuItems?: AgentChatProps["composerAddMenuItems"];
|
|
34
36
|
/** Composer placeholder text. */
|
|
35
37
|
placeholder?: string;
|
|
36
38
|
/** Rendered after each message (e.g. per-message actions). */
|
|
@@ -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-
|
|
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 {
|
|
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 {
|
|
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-
|
|
5
|
-
import { i as FileTreeFolder, r as FileTreeFile, t as FileTree } from "../FileTree-
|
|
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
|
|
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 };
|
package/dist/components/icons.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as
|
|
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-
|
|
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 {
|
|
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 {
|
|
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,19 @@
|
|
|
38
38
|
);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
.agent-chat__composer > .prompt-input {
|
|
42
|
+
max-inline-size: 64rem;
|
|
43
|
+
margin-inline: auto;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.agent-chat__add-menu {
|
|
47
|
+
inline-size: min(32rem, calc(100dvw - 1rem));
|
|
48
|
+
max-block-size: min(28rem, calc(100dvh - 2rem));
|
|
49
|
+
overflow-y: auto;
|
|
50
|
+
overscroll-behavior: contain;
|
|
51
|
+
scrollbar-gutter: stable;
|
|
52
|
+
}
|
|
53
|
+
|
|
41
54
|
/* Transient status pill between transcript and composer (recovery, errors). */
|
|
42
55
|
.agent-chat__notice {
|
|
43
56
|
display: flex;
|
package/dist/styles/index.css
CHANGED
|
@@ -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
|
+
"version": "0.5.5",
|
|
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.
|
|
52
|
+
"@mcp-b/design-tokens": "0.5.5"
|
|
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
|
},
|