@mcp-b/react-components 0.44.1 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AgentChat-Bibfj7u1.d.ts → AgentChat-BLmQghkt.d.ts} +2 -2
- package/dist/{AgentToolRunsContext-daY67hFM.d.ts → AgentToolRunsContext-jtmveaRE.d.ts} +8 -7
- package/dist/{CodeBlock-Dl7a3Wqo.js → CodeBlock-BpooTofO.js} +1 -1
- package/dist/{FileTree-Uu3ZnW1u.js → FileTree-CAXWXH63.js} +1 -1
- package/dist/{McpConnectorForm-MRm1r59e.d.ts → McpConnectorForm-BETdVBRk.d.ts} +1 -1
- package/dist/{McpPluginCatalog-mbGw8FTu.d.ts → McpPluginCatalog-C6ip9IvL.d.ts} +2 -2
- package/dist/{PromptInput-BRX7FhjH.d.ts → PromptInput-DtJHyp0S.d.ts} +27 -22
- package/dist/{ResponsiveSidebarShell-DOXd5T-d.d.ts → ResponsiveSidebarShell-BTVPxLJK.d.ts} +12 -0
- package/dist/{SetupChecklist-DOp-zqjh.js → SetupChecklist-DyPZWzK2.js} +2 -2
- package/dist/{ThinkChat-BES_3Mb-.js → ThinkChat-qztQ6Clo.js} +7 -22
- package/dist/{ThinkChatActivity-CgvmTXXB.d.ts → ThinkChatActivity-B3lGVS-6.d.ts} +1 -1
- package/dist/{WorkspaceFileView-BublZXky.js → WorkspaceFileView-BvDbKM2c.js} +3 -3
- package/dist/components/agents-sdk/AgentActivity.js +1 -1
- package/dist/components/agents-sdk/AgentChat.d.ts +1 -1
- package/dist/components/agents-sdk/AgentChat.js +44 -40
- package/dist/components/agents-sdk/AgentEvent.d.ts +42 -0
- package/dist/components/agents-sdk/AgentEvent.js +96 -0
- package/dist/components/agents-sdk/AgentToolRunsContext.d.ts +1 -1
- package/dist/components/agents-sdk/AgentToolRunsContext.js +11 -7
- package/dist/components/agents-sdk/BrowserLiveScreen.js +1 -1
- package/dist/components/agents-sdk/BrowserLiveView.js +1 -1
- package/dist/components/agents-sdk/BrowserReplay.js +2 -2
- package/dist/components/agents-sdk/BrowserRunPanel.js +1 -1
- package/dist/components/agents-sdk/ManagerOffice.d.ts +106 -11
- package/dist/components/agents-sdk/ManagerOffice.js +1193 -151
- package/dist/components/agents-sdk/McpConnectionRequest.d.ts +1 -1
- package/dist/components/agents-sdk/McpConnectionRequest.js +11 -5
- package/dist/components/agents-sdk/McpConnectorForm.d.ts +1 -1
- package/dist/components/agents-sdk/McpConnectorForm.js +1 -1
- package/dist/components/agents-sdk/McpPluginCatalog.d.ts +1 -1
- package/dist/components/agents-sdk/McpPluginCatalog.js +11 -7
- package/dist/components/agents-sdk/McpServerPicker.d.ts +2 -2
- package/dist/components/agents-sdk/McpServerPicker.js +4 -4
- package/dist/components/agents-sdk/ModelSelector.js +5 -5
- package/dist/components/agents-sdk/PromptInputApproval.js +1 -1
- package/dist/components/agents-sdk/PromptInputCommands.d.ts +5 -2
- package/dist/components/agents-sdk/PromptInputCommands.js +81 -3
- package/dist/components/agents-sdk/SubagentRunDetails.js +1 -1
- package/dist/components/agents-sdk/SubagentRunIndicator.d.ts +21 -3
- package/dist/components/agents-sdk/SubagentRunIndicator.js +56 -6
- package/dist/components/agents-sdk/SubagentRunSelector.js +5 -12
- package/dist/components/agents-sdk/ThinkChat.d.ts +4 -5
- package/dist/components/agents-sdk/ThinkChat.js +1 -1
- package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -1
- package/dist/components/agents-sdk/ThinkChatActivity.js +3 -3
- package/dist/components/agents-sdk/ThinkChatActivitySummary.js +1 -1
- package/dist/components/agents-sdk/ThinkChatToolPanels.js +2 -2
- package/dist/components/agents-sdk/ThinkExecutionDetail.js +3 -3
- package/dist/components/agents-sdk/ThinkExecutionRun.js +1 -1
- package/dist/components/agents-sdk/ThinkExecutionStatus.js +1 -1
- package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +3 -3
- package/dist/components/agents-sdk/ThinkFullApp.d.ts +14 -4
- package/dist/components/agents-sdk/ThinkFullApp.js +51 -5
- package/dist/components/agents-sdk/ThinkFullAppViewSwitch.js +1 -1
- package/dist/components/agents-sdk/ThinkPendingApproval.js +1 -1
- package/dist/components/agents-sdk/ThinkRecoveryNotice.js +1 -1
- package/dist/components/agents-sdk/ThinkRoutineBrowser.js +3 -3
- package/dist/components/agents-sdk/ThinkRoutineDetail.js +1 -1
- package/dist/components/agents-sdk/ThinkRoutineForm.js +4 -4
- package/dist/components/agents-sdk/ThinkRoutineLibrary.d.ts +1 -1
- package/dist/components/agents-sdk/ThinkRoutineLibrary.js +4 -4
- package/dist/components/agents-sdk/ThinkRoutineRuns.js +1 -1
- package/dist/components/agents-sdk/ThinkSidepanel.d.ts +22 -4
- package/dist/components/agents-sdk/ThinkSidepanel.js +87 -35
- package/dist/components/agents-sdk/ThinkThreadPicker.js +5 -5
- package/dist/components/agents-sdk/Workspace.js +1 -1
- package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
- package/dist/components/agents-sdk/WorkspaceExplorer.js +1 -1
- package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
- package/dist/components/agents-sdk/WorkspaceHeader.js +1 -1
- package/dist/components/agents-sdk/WorkspaceMountManager.js +4 -21
- package/dist/components/ai-sdk/Activity.js +1 -1
- package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
- package/dist/components/ai-sdk/Approval.js +2 -2
- package/dist/components/ai-sdk/Artifact.js +1 -1
- package/dist/components/ai-sdk/ChainOfThought.d.ts +1 -1
- package/dist/components/ai-sdk/ChainOfThought.js +1 -1
- package/dist/components/ai-sdk/Checkpoint.js +1 -1
- package/dist/components/ai-sdk/CodeBlock.js +1 -1
- package/dist/components/ai-sdk/ComposerLink.d.ts +27 -0
- package/dist/components/ai-sdk/ComposerLink.js +111 -0
- package/dist/components/ai-sdk/ConnectedAppCards.js +3 -3
- package/dist/components/ai-sdk/Context.js +1 -1
- package/dist/components/ai-sdk/Conversation.js +1 -1
- package/dist/components/ai-sdk/Goal.js +2 -2
- package/dist/components/ai-sdk/InlineCitation.js +1 -1
- package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
- package/dist/components/ai-sdk/Message.js +19 -3
- package/dist/components/ai-sdk/MessageScroller.js +1 -1
- package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -1
- package/dist/components/ai-sdk/Plan.js +2 -2
- package/dist/components/ai-sdk/PromptInput.d.ts +2 -2
- package/dist/components/ai-sdk/PromptInput.js +67 -61
- package/dist/components/ai-sdk/PromptInputComposerEditor.d.ts +31 -0
- package/dist/components/ai-sdk/PromptInputComposerEditor.js +198 -0
- package/dist/components/ai-sdk/Queue.js +2 -2
- package/dist/components/ai-sdk/Reasoning.js +2 -2
- package/dist/components/ai-sdk/Sources.js +1 -1
- package/dist/components/ai-sdk/Task.js +1 -1
- package/dist/components/ai-sdk/ToolInvocation.js +1 -1
- package/dist/components/extension/ChatGptSignInScreen.js +2 -2
- package/dist/components/extension/CodexModelSelector.js +2 -2
- package/dist/components/extension/ConversationTabPicker.js +2 -2
- package/dist/components/foundations/AppIcon.js +1 -1
- package/dist/components/foundations/Checkbox.js +1 -1
- package/dist/components/foundations/Collapsible.js +1 -1
- package/dist/components/foundations/ContextMenu.js +1 -1
- package/dist/components/foundations/Menubar.js +1 -1
- package/dist/components/foundations/SearchField.js +1 -1
- package/dist/components/foundations/Select.js +1 -1
- package/dist/components/foundations/Stepper.js +1 -1
- package/dist/components/foundations/Toast.js +1 -1
- package/dist/components/foundations/ToggleGroup.d.ts +1 -1
- package/dist/components/foundations/ToggleGroup.js +1 -1
- package/dist/components/foundations/icons.d.ts +1 -1
- package/dist/components/foundations/icons.js +1 -1
- package/dist/components/general-purpose/Commit.js +2 -2
- package/dist/components/general-purpose/EnvironmentVariables.js +2 -2
- package/dist/components/general-purpose/FileTree.js +1 -1
- package/dist/components/general-purpose/PricingBillingToggle.js +1 -1
- package/dist/components/general-purpose/PricingPlanCard.js +2 -2
- package/dist/components/general-purpose/PricingUsageCalculator.js +2 -2
- package/dist/components/general-purpose/ResizableSidePanel.js +1 -1
- package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +1 -1
- package/dist/components/general-purpose/ResponsiveSidebarShell.js +72 -22
- package/dist/components/general-purpose/SettingsFormDialog.js +2 -2
- package/dist/components/general-purpose/SetupChecklist.js +1 -1
- package/dist/components/general-purpose/Terminal.js +2 -2
- package/dist/components/general-purpose/TestResults.js +1 -1
- package/dist/components/general-purpose/ThemeModeControl.js +2 -2
- package/dist/components/general-purpose/WebPreview.js +3 -3
- package/dist/components/nanites/AgentConnection.js +2 -2
- package/dist/components/nanites/AgentToolDetail.js +4 -4
- package/dist/{copy-button-DHhf-J1d.js → copy-button-D7ySsRRo.js} +1 -1
- package/dist/{format-DB2mX9DA.js → format-COCyV98Z.js} +23 -1
- package/dist/{icons-Dw-im7lg.js → icons-BNEY4gO5.js} +44 -4
- package/dist/{icons-6ZnyZJiR.d.ts → icons-D0Pd2P9v.d.ts} +9 -4
- package/dist/{mcp-server-SD_S-IpB.js → mcp-server-7NR24ASj.js} +31 -4
- package/dist/{mcp-server-catalog-CCj2ItkV.d.ts → mcp-server-catalog-Cbu483Zb.d.ts} +9 -9
- package/dist/{progress-ring-BEocM1e3.js → progress-ring-Cgii90dC.js} +1 -1
- package/dist/{provider-logos-zjZycgV6.js → provider-logos-DWYY8wNz.js} +31 -6
- package/dist/styles/action-guide.css +4 -0
- package/dist/styles/agent-attention.css +5 -1
- package/dist/styles/agent-chat.css +21 -18
- package/dist/styles/agent-event.css +14 -0
- package/dist/styles/app-icon.css +21 -0
- package/dist/styles/avatar.css +2 -1
- package/dist/styles/base.css +4 -0
- package/dist/styles/brand-marks.css +22 -0
- package/dist/styles/button.css +10 -0
- package/dist/styles/composer-link.css +99 -0
- package/dist/styles/connected-app-card.css +9 -0
- package/dist/styles/github-motion-mark.css +8 -1
- package/dist/styles/index.css +3 -0
- package/dist/styles/manager-office.css +1313 -73
- package/dist/styles/mcp-plugin-catalog.css +4 -0
- package/dist/styles/mcp-server-picker.css +2 -0
- package/dist/styles/message-scroller.css +5 -0
- package/dist/styles/prompt-input.css +14 -53
- package/dist/styles/responsive-sidebar-shell.css +47 -0
- package/dist/styles/subagent-run.css +29 -19
- package/dist/styles/think-full-app.css +139 -4
- package/dist/styles/think-sidepanel.css +9 -5
- package/dist/styles/think-thread-picker.css +13 -12
- package/dist/styles/workspace-mount-manager.css +0 -22
- package/dist/utils/composer-link.d.ts +59 -0
- package/dist/utils/composer-link.js +203 -0
- package/dist/utils/mcp-server-catalog.d.ts +1 -1
- package/dist/utils/mcp-server-catalog.js +9 -9
- package/package.json +8 -8
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
//#region src/utils/composer-link.ts
|
|
2
|
+
const COMPOSER_LINK_ORIGIN = "https://composer.invalid";
|
|
3
|
+
const COMPOSER_LINK_KINDS = [
|
|
4
|
+
"command",
|
|
5
|
+
"mcp",
|
|
6
|
+
"skill",
|
|
7
|
+
"tab",
|
|
8
|
+
"file"
|
|
9
|
+
];
|
|
10
|
+
const COMPOSER_CHROME_ICONS = ["box"];
|
|
11
|
+
const COMPOSER_LINK_KIND_SET = new Set(COMPOSER_LINK_KINDS);
|
|
12
|
+
const COMPOSER_MARKDOWN_LINK = /\[([^\]]+)\]\((https:\/\/composer\.invalid\/(?:command|mcp|skill|tab|file)\/[^)\s]+)\)/g;
|
|
13
|
+
const TRAILING_TRIGGER = /(?:^|\s)([/@])([^\n]*)$/u;
|
|
14
|
+
function isComposerLinkKind(value) {
|
|
15
|
+
return COMPOSER_LINK_KIND_SET.has(value);
|
|
16
|
+
}
|
|
17
|
+
const COMPOSER_CHROME_ICON_SET = new Set(COMPOSER_CHROME_ICONS);
|
|
18
|
+
function isComposerChromeIcon(value) {
|
|
19
|
+
return COMPOSER_CHROME_ICON_SET.has(value);
|
|
20
|
+
}
|
|
21
|
+
function defaultChromeIcon(kind) {
|
|
22
|
+
return kind === "command" || kind === "skill" ? "box" : void 0;
|
|
23
|
+
}
|
|
24
|
+
function parseIconParam(value) {
|
|
25
|
+
if (!value) return {};
|
|
26
|
+
if (isComposerChromeIcon(value)) return { chromeIcon: value };
|
|
27
|
+
return { iconSrc: value };
|
|
28
|
+
}
|
|
29
|
+
function composerLinkHref(parts) {
|
|
30
|
+
const url = new URL(`${COMPOSER_LINK_ORIGIN}/${parts.kind}/${encodeURIComponent(parts.value)}`);
|
|
31
|
+
if (parts.label) url.searchParams.set("label", parts.label);
|
|
32
|
+
const icon = parts.iconSrc ?? parts.chromeIcon ?? defaultChromeIcon(parts.kind);
|
|
33
|
+
if (icon) url.searchParams.set("icon", icon);
|
|
34
|
+
return url.href;
|
|
35
|
+
}
|
|
36
|
+
function parseComposerHref(href) {
|
|
37
|
+
if (!href) return void 0;
|
|
38
|
+
let url;
|
|
39
|
+
try {
|
|
40
|
+
url = new URL(href);
|
|
41
|
+
} catch {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (url.origin !== "https://composer.invalid") return void 0;
|
|
45
|
+
const segments = url.pathname.split("/").filter(Boolean);
|
|
46
|
+
const kind = segments[0];
|
|
47
|
+
const encodedValue = segments.slice(1).join("/");
|
|
48
|
+
if (!kind || !isComposerLinkKind(kind) || !encodedValue) return void 0;
|
|
49
|
+
const value = decodeURIComponent(encodedValue);
|
|
50
|
+
const label = url.searchParams.get("label")?.trim() || void 0;
|
|
51
|
+
const iconParam = parseIconParam(url.searchParams.get("icon")?.trim() || void 0);
|
|
52
|
+
return {
|
|
53
|
+
kind,
|
|
54
|
+
value,
|
|
55
|
+
href: url.href,
|
|
56
|
+
label: label ?? value,
|
|
57
|
+
...iconParam,
|
|
58
|
+
...!iconParam.iconSrc && !iconParam.chromeIcon && defaultChromeIcon(kind) ? { chromeIcon: defaultChromeIcon(kind) } : {}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function escapeComposerLinkLabel(label) {
|
|
62
|
+
return label.replaceAll("[", "").replaceAll("]", "").trim() || label.trim();
|
|
63
|
+
}
|
|
64
|
+
const SIMPLE_ICONS_HEX = /\/([0-9a-fA-F]{6})(?:[/?#]|$)/;
|
|
65
|
+
function srgbChannel(value) {
|
|
66
|
+
const channel = value / 255;
|
|
67
|
+
return channel <= .03928 ? channel / 12.92 : ((channel + .055) / 1.055) ** 2.4;
|
|
68
|
+
}
|
|
69
|
+
function isUsableTextColor(red, green, blue) {
|
|
70
|
+
const luminance = .2126 * srgbChannel(red) + .7152 * srgbChannel(green) + .0722 * srgbChannel(blue);
|
|
71
|
+
return luminance >= .12 && luminance <= .82;
|
|
72
|
+
}
|
|
73
|
+
/** Brand hex from a Simple Icons URL, skipped when it would vanish as text. */
|
|
74
|
+
function brandHexFromIconSrc(src) {
|
|
75
|
+
if (!src) return void 0;
|
|
76
|
+
const hex = SIMPLE_ICONS_HEX.exec(src)?.[1];
|
|
77
|
+
if (!hex) return void 0;
|
|
78
|
+
return isUsableTextColor(Number.parseInt(hex.slice(0, 2), 16), Number.parseInt(hex.slice(2, 4), 16), Number.parseInt(hex.slice(4, 6), 16)) ? `#${hex}` : void 0;
|
|
79
|
+
}
|
|
80
|
+
/** Most chromatic opaque pixel, skipped when the mark is charcoal, white, or gray. */
|
|
81
|
+
function chromaticHexFromPixels(data) {
|
|
82
|
+
let bestChroma = 0;
|
|
83
|
+
let best;
|
|
84
|
+
for (let index = 0; index + 3 < data.length; index += 4) {
|
|
85
|
+
if ((data[index + 3] ?? 0) < 128) continue;
|
|
86
|
+
const red = data[index] ?? 0;
|
|
87
|
+
const green = data[index + 1] ?? 0;
|
|
88
|
+
const blue = data[index + 2] ?? 0;
|
|
89
|
+
const chroma = Math.max(red, green, blue) / 255 - Math.min(red, green, blue) / 255;
|
|
90
|
+
if (chroma < .18 || !isUsableTextColor(red, green, blue)) continue;
|
|
91
|
+
if (chroma > bestChroma) {
|
|
92
|
+
bestChroma = chroma;
|
|
93
|
+
best = `#${[
|
|
94
|
+
red,
|
|
95
|
+
green,
|
|
96
|
+
blue
|
|
97
|
+
].map((channel) => channel.toString(16).padStart(2, "0")).join("")}`;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return best;
|
|
101
|
+
}
|
|
102
|
+
function sampleImageAccent(image) {
|
|
103
|
+
if (!image.naturalWidth) return void 0;
|
|
104
|
+
const canvas = document.createElement("canvas");
|
|
105
|
+
canvas.width = 32;
|
|
106
|
+
canvas.height = 32;
|
|
107
|
+
const context = canvas.getContext("2d", { willReadFrequently: true });
|
|
108
|
+
if (!context) return void 0;
|
|
109
|
+
try {
|
|
110
|
+
context.drawImage(image, 0, 0, 32, 32);
|
|
111
|
+
return chromaticHexFromPixels(context.getImageData(0, 0, 32, 32).data);
|
|
112
|
+
} catch {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function serializeComposerLink(parts) {
|
|
117
|
+
const label = escapeComposerLinkLabel(parts.label);
|
|
118
|
+
return `[${label}](${composerLinkHref({
|
|
119
|
+
...parts,
|
|
120
|
+
label
|
|
121
|
+
})})`;
|
|
122
|
+
}
|
|
123
|
+
function splitComposerDraft(text) {
|
|
124
|
+
const segments = [];
|
|
125
|
+
let lastIndex = 0;
|
|
126
|
+
for (const match of text.matchAll(COMPOSER_MARKDOWN_LINK)) {
|
|
127
|
+
const index = match.index ?? 0;
|
|
128
|
+
if (index > lastIndex) segments.push({
|
|
129
|
+
type: "text",
|
|
130
|
+
value: text.slice(lastIndex, index)
|
|
131
|
+
});
|
|
132
|
+
const parsed = parseComposerHref(match[2] ?? "");
|
|
133
|
+
const label = match[1] ?? parsed?.label ?? "";
|
|
134
|
+
if (!parsed) segments.push({
|
|
135
|
+
type: "text",
|
|
136
|
+
value: match[0] ?? ""
|
|
137
|
+
});
|
|
138
|
+
else segments.push({
|
|
139
|
+
type: "link",
|
|
140
|
+
href: parsed.href,
|
|
141
|
+
label,
|
|
142
|
+
parts: {
|
|
143
|
+
...parsed,
|
|
144
|
+
label
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
lastIndex = index + (match[0]?.length ?? 0);
|
|
148
|
+
}
|
|
149
|
+
if (lastIndex < text.length) segments.push({
|
|
150
|
+
type: "text",
|
|
151
|
+
value: text.slice(lastIndex)
|
|
152
|
+
});
|
|
153
|
+
return segments;
|
|
154
|
+
}
|
|
155
|
+
function parseComposerLinks(text) {
|
|
156
|
+
return splitComposerDraft(text).flatMap((segment) => segment.type === "link" ? [segment.parts] : []);
|
|
157
|
+
}
|
|
158
|
+
function composerTriggerMatch(text) {
|
|
159
|
+
const match = TRAILING_TRIGGER.exec(text);
|
|
160
|
+
if (!match) return void 0;
|
|
161
|
+
const trigger = match[1];
|
|
162
|
+
if (trigger !== "/" && trigger !== "@") return void 0;
|
|
163
|
+
const matchIndex = match.index ?? 0;
|
|
164
|
+
const triggerIndex = text[matchIndex] === "/" || text[matchIndex] === "@" ? matchIndex : matchIndex + 1;
|
|
165
|
+
return {
|
|
166
|
+
trigger,
|
|
167
|
+
query: match[2] ?? "",
|
|
168
|
+
triggerIndex
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function inferComposerLinkKind(command, trigger) {
|
|
172
|
+
const id = command.id ?? "";
|
|
173
|
+
if (id.startsWith("mcp:")) return "mcp";
|
|
174
|
+
if (id.startsWith("tab:")) return "tab";
|
|
175
|
+
if (id.startsWith("skill:")) return "skill";
|
|
176
|
+
if (id.startsWith("file:")) return "file";
|
|
177
|
+
return trigger === "@" ? "mcp" : "command";
|
|
178
|
+
}
|
|
179
|
+
function replaceComposerTrigger(draft, command, trigger) {
|
|
180
|
+
const href = command.href ?? composerLinkHref({
|
|
181
|
+
kind: inferComposerLinkKind(command, trigger),
|
|
182
|
+
value: command.value,
|
|
183
|
+
label: command.label,
|
|
184
|
+
iconSrc: command.iconSrc
|
|
185
|
+
});
|
|
186
|
+
const markdown = `[${escapeComposerLinkLabel(command.label)}](${href})`;
|
|
187
|
+
const match = composerTriggerMatch(draft);
|
|
188
|
+
if (!match) {
|
|
189
|
+
const trimmed = draft.trimEnd();
|
|
190
|
+
return trimmed ? `${trimmed} ${markdown} ` : `${markdown} `;
|
|
191
|
+
}
|
|
192
|
+
return `${draft.slice(0, match.triggerIndex)}${markdown} `;
|
|
193
|
+
}
|
|
194
|
+
function composerDraftToPrompt(text) {
|
|
195
|
+
return splitComposerDraft(text).map((segment) => {
|
|
196
|
+
if (segment.type === "text") return segment.value;
|
|
197
|
+
if (segment.parts.kind === "mcp" || segment.parts.kind === "tab") return `@${segment.parts.value}`;
|
|
198
|
+
if (segment.parts.kind === "file") return segment.parts.value;
|
|
199
|
+
return `/${segment.parts.value}`;
|
|
200
|
+
}).join("").replace(/[^\S\n]+/g, " ").trim();
|
|
201
|
+
}
|
|
202
|
+
//#endregion
|
|
203
|
+
export { COMPOSER_CHROME_ICONS, COMPOSER_LINK_KINDS, COMPOSER_LINK_ORIGIN, brandHexFromIconSrc, chromaticHexFromPixels, composerDraftToPrompt, composerLinkHref, composerTriggerMatch, escapeComposerLinkLabel, inferComposerLinkKind, isComposerChromeIcon, isComposerLinkKind, parseComposerHref, parseComposerLinks, replaceComposerTrigger, sampleImageAccent, serializeComposerLink, splitComposerDraft };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as MCP_SERVER_SETUP_AUTH, c as McpServerManualSetup, d as McpServerSetupAuthFieldName, f as McpServerSetupLink, h as getMcpServerRuntimeState, i as MANUAL_MCP_SERVER_CARDS, l as McpServerSetupAuth, m as getMcpServerIconSrc, n as DCR_MCP_SERVER_CARDS, o as McpServerCard, p as getMcpServerEntry, r as DEFAULT_MCP_SERVER_CARDS, s as McpServerCardIcon, t as CUSTOM_MCP_SERVER_CARD, u as McpServerSetupAuthField } from "../mcp-server-catalog-
|
|
1
|
+
import { a as MCP_SERVER_SETUP_AUTH, c as McpServerManualSetup, d as McpServerSetupAuthFieldName, f as McpServerSetupLink, h as getMcpServerRuntimeState, i as MANUAL_MCP_SERVER_CARDS, l as McpServerSetupAuth, m as getMcpServerIconSrc, n as DCR_MCP_SERVER_CARDS, o as McpServerCard, p as getMcpServerEntry, r as DEFAULT_MCP_SERVER_CARDS, s as McpServerCardIcon, t as CUSTOM_MCP_SERVER_CARD, u as McpServerSetupAuthField } from "../mcp-server-catalog-Cbu483Zb.js";
|
|
2
2
|
export { CUSTOM_MCP_SERVER_CARD, DCR_MCP_SERVER_CARDS, DEFAULT_MCP_SERVER_CARDS, MANUAL_MCP_SERVER_CARDS, MCP_SERVER_SETUP_AUTH, McpServerCard, McpServerCardIcon, McpServerManualSetup, McpServerSetupAuth, McpServerSetupAuthField, McpServerSetupAuthFieldName, McpServerSetupLink, getMcpServerEntry, getMcpServerIconSrc, getMcpServerRuntimeState };
|
|
@@ -274,7 +274,7 @@ const DCR_MCP_SERVER_CARDS = [
|
|
|
274
274
|
url: "https://mcp.miro.com/mcp",
|
|
275
275
|
description: "Work with boards and diagrams",
|
|
276
276
|
category: DCR_CATEGORY,
|
|
277
|
-
icon: "https://cdn.simpleicons.org/miro/
|
|
277
|
+
icon: "https://cdn.simpleicons.org/miro/050038"
|
|
278
278
|
},
|
|
279
279
|
{
|
|
280
280
|
id: "monday",
|
|
@@ -298,7 +298,7 @@ const DCR_MCP_SERVER_CARDS = [
|
|
|
298
298
|
url: "https://mcp.notion.com/mcp",
|
|
299
299
|
description: "Work across docs, wikis, and project notes",
|
|
300
300
|
category: DCR_CATEGORY,
|
|
301
|
-
icon: "https://cdn.simpleicons.org/notion/
|
|
301
|
+
icon: "https://cdn.simpleicons.org/notion/000000"
|
|
302
302
|
},
|
|
303
303
|
{
|
|
304
304
|
id: "paypal",
|
|
@@ -306,7 +306,7 @@ const DCR_MCP_SERVER_CARDS = [
|
|
|
306
306
|
url: "https://mcp.paypal.com/mcp",
|
|
307
307
|
description: "Use PayPal merchant tools",
|
|
308
308
|
category: DCR_CATEGORY,
|
|
309
|
-
icon: "https://cdn.simpleicons.org/paypal/
|
|
309
|
+
icon: "https://cdn.simpleicons.org/paypal/002991"
|
|
310
310
|
},
|
|
311
311
|
{
|
|
312
312
|
id: "postman",
|
|
@@ -322,7 +322,7 @@ const DCR_MCP_SERVER_CARDS = [
|
|
|
322
322
|
url: "https://mcp.railway.com",
|
|
323
323
|
description: "Manage Railway projects and services",
|
|
324
324
|
category: DCR_CATEGORY,
|
|
325
|
-
icon: "https://cdn.simpleicons.org/railway/
|
|
325
|
+
icon: "https://cdn.simpleicons.org/railway/0B0D0E"
|
|
326
326
|
},
|
|
327
327
|
{
|
|
328
328
|
id: "ramp",
|
|
@@ -338,7 +338,7 @@ const DCR_MCP_SERVER_CARDS = [
|
|
|
338
338
|
url: "https://mcp.sentry.dev/mcp",
|
|
339
339
|
description: "Debug errors and inspect projects",
|
|
340
340
|
category: DCR_CATEGORY,
|
|
341
|
-
icon: "https://cdn.simpleicons.org/sentry/
|
|
341
|
+
icon: "https://cdn.simpleicons.org/sentry/362D59"
|
|
342
342
|
},
|
|
343
343
|
{
|
|
344
344
|
id: "square",
|
|
@@ -362,7 +362,7 @@ const DCR_MCP_SERVER_CARDS = [
|
|
|
362
362
|
url: "https://mcp.supabase.com/mcp",
|
|
363
363
|
description: "Manage Supabase projects",
|
|
364
364
|
category: DCR_CATEGORY,
|
|
365
|
-
icon: "https://cdn.simpleicons.org/supabase/
|
|
365
|
+
icon: "https://cdn.simpleicons.org/supabase/3FCF8E"
|
|
366
366
|
},
|
|
367
367
|
{
|
|
368
368
|
id: "vercel",
|
|
@@ -370,7 +370,7 @@ const DCR_MCP_SERVER_CARDS = [
|
|
|
370
370
|
url: "https://mcp.vercel.com",
|
|
371
371
|
description: "Manage projects and deployments",
|
|
372
372
|
category: DCR_CATEGORY,
|
|
373
|
-
icon: "https://cdn.simpleicons.org/vercel/
|
|
373
|
+
icon: "https://cdn.simpleicons.org/vercel/000000"
|
|
374
374
|
},
|
|
375
375
|
{
|
|
376
376
|
id: "webflow",
|
|
@@ -386,7 +386,7 @@ const DCR_MCP_SERVER_CARDS = [
|
|
|
386
386
|
url: "https://mcp.wix.com/mcp",
|
|
387
387
|
description: "Work with Wix sites and apps",
|
|
388
388
|
category: DCR_CATEGORY,
|
|
389
|
-
icon: "https://cdn.simpleicons.org/wix/
|
|
389
|
+
icon: "https://cdn.simpleicons.org/wix/0C6EFC"
|
|
390
390
|
},
|
|
391
391
|
{
|
|
392
392
|
id: "zapier",
|
|
@@ -491,7 +491,7 @@ const MANUAL_MCP_SERVER_CARDS = [
|
|
|
491
491
|
url: "https://chatmcp.googleapis.com/mcp/v1",
|
|
492
492
|
description: "Read spaces, memberships, and messages",
|
|
493
493
|
category: MANUAL_CATEGORY,
|
|
494
|
-
icon: "https://cdn.simpleicons.org/googlechat/
|
|
494
|
+
icon: "https://cdn.simpleicons.org/googlechat/34A853",
|
|
495
495
|
manualSetup: {
|
|
496
496
|
auth: MCP_SERVER_SETUP_AUTH.manualOAuthClientSecret,
|
|
497
497
|
description: "Enable Chat and Chat MCP APIs, configure a Chat app, and create a web OAuth client.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-b/react-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.0",
|
|
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": {
|
|
@@ -53,14 +53,14 @@
|
|
|
53
53
|
"streamdown": "^2.5.0",
|
|
54
54
|
"unist-util-visit": "^5.1.0",
|
|
55
55
|
"yet-another-react-lightbox": "^3.32.2",
|
|
56
|
-
"@mcp-b/design-tokens": "0.
|
|
56
|
+
"@mcp-b/design-tokens": "0.46.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@ai-sdk/react": "^3.0.249",
|
|
60
60
|
"@cloudflare/codemode": "^0.5.1",
|
|
61
61
|
"@cloudflare/shell": "^0.4.3",
|
|
62
|
-
"@cloudflare/think": "^0.
|
|
63
|
-
"@cloudflare/voice": "^0.3.
|
|
62
|
+
"@cloudflare/think": "^0.16.0",
|
|
63
|
+
"@cloudflare/voice": "^0.3.6",
|
|
64
64
|
"@cloudflare/workers-types": "^5.20260811.1",
|
|
65
65
|
"@storybook/addon-a11y": "^10.5.7",
|
|
66
66
|
"@storybook/addon-docs": "^10.5.7",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"@vitest/browser-playwright": "^4.1.10",
|
|
79
79
|
"@vitest/coverage-v8": "^4.1.10",
|
|
80
80
|
"@vitest/mocker": "^4.1.10",
|
|
81
|
-
"agents": "^0.
|
|
81
|
+
"agents": "^0.21.0",
|
|
82
82
|
"ai": "^6.0.247",
|
|
83
83
|
"cloudflare": "^7.0.0",
|
|
84
84
|
"playwright": "~1.61.1",
|
|
@@ -94,11 +94,11 @@
|
|
|
94
94
|
"@ai-sdk/react": "^3.0.230",
|
|
95
95
|
"@cloudflare/codemode": "^0.5.1",
|
|
96
96
|
"@cloudflare/shell": "^0.4.3",
|
|
97
|
-
"@cloudflare/think": "^0.
|
|
98
|
-
"@cloudflare/voice": "^0.3.
|
|
97
|
+
"@cloudflare/think": "^0.16.0",
|
|
98
|
+
"@cloudflare/voice": "^0.3.6",
|
|
99
99
|
"@cloudflare/workers-types": "^5.20260715.1",
|
|
100
100
|
"@tanstack/react-query": "^5.101.2",
|
|
101
|
-
"agents": "^0.
|
|
101
|
+
"agents": "^0.21.0",
|
|
102
102
|
"ai": "^6.0.228",
|
|
103
103
|
"cloudflare": "^7.0.0",
|
|
104
104
|
"react": "19.3.0-canary-711c445b-20260722",
|