@mcp-b/react-components 0.45.0 → 0.46.1

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 (130) hide show
  1. package/dist/{AgentChat-Bibfj7u1.d.ts → AgentChat-BLmQghkt.d.ts} +2 -2
  2. package/dist/{CodeBlock-8K1p1BDU.js → CodeBlock-BpooTofO.js} +1 -1
  3. package/dist/{FileTree-QTP57Qz4.js → FileTree-CAXWXH63.js} +1 -1
  4. package/dist/{McpConnectorForm-MRm1r59e.d.ts → McpConnectorForm-BETdVBRk.d.ts} +1 -1
  5. package/dist/{McpPluginCatalog-mbGw8FTu.d.ts → McpPluginCatalog-C6ip9IvL.d.ts} +2 -2
  6. package/dist/{PromptInput-BRX7FhjH.d.ts → PromptInput-DtJHyp0S.d.ts} +27 -22
  7. package/dist/{SetupChecklist-CZeToAbu.js → SetupChecklist-DyPZWzK2.js} +2 -2
  8. package/dist/{ThinkChat-CWMcl79Q.js → ThinkChat-CV0xWmL4.js} +5 -2
  9. package/dist/{ThinkChatActivity-CgvmTXXB.d.ts → ThinkChatActivity-B3lGVS-6.d.ts} +1 -1
  10. package/dist/{WorkspaceFileView-DJ8Oxz57.js → WorkspaceFileView-BvDbKM2c.js} +2 -2
  11. package/dist/components/agents-sdk/AgentActivity.js +1 -1
  12. package/dist/components/agents-sdk/AgentChat.d.ts +1 -1
  13. package/dist/components/agents-sdk/AgentChat.js +30 -31
  14. package/dist/components/agents-sdk/BrowserLiveScreen.js +1 -1
  15. package/dist/components/agents-sdk/BrowserLiveView.js +1 -1
  16. package/dist/components/agents-sdk/BrowserReplay.js +2 -2
  17. package/dist/components/agents-sdk/BrowserRunPanel.js +1 -1
  18. package/dist/components/agents-sdk/ManagerOffice.d.ts +2 -1
  19. package/dist/components/agents-sdk/ManagerOffice.js +30 -12
  20. package/dist/components/agents-sdk/McpConnectionRequest.d.ts +1 -1
  21. package/dist/components/agents-sdk/McpConnectionRequest.js +10 -4
  22. package/dist/components/agents-sdk/McpConnectorForm.d.ts +1 -1
  23. package/dist/components/agents-sdk/McpPluginCatalog.d.ts +1 -1
  24. package/dist/components/agents-sdk/McpPluginCatalog.js +9 -5
  25. package/dist/components/agents-sdk/McpServerPicker.d.ts +2 -2
  26. package/dist/components/agents-sdk/McpServerPicker.js +2 -2
  27. package/dist/components/agents-sdk/ModelSelector.js +2 -2
  28. package/dist/components/agents-sdk/PromptInputCommands.d.ts +5 -2
  29. package/dist/components/agents-sdk/PromptInputCommands.js +81 -3
  30. package/dist/components/agents-sdk/SubagentRunIndicator.js +1 -1
  31. package/dist/components/agents-sdk/ThinkChat.d.ts +3 -3
  32. package/dist/components/agents-sdk/ThinkChat.js +1 -1
  33. package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -1
  34. package/dist/components/agents-sdk/ThinkChatToolPanels.js +1 -1
  35. package/dist/components/agents-sdk/ThinkExecutionDetail.js +1 -1
  36. package/dist/components/agents-sdk/ThinkExecutionStatus.js +1 -1
  37. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +2 -2
  38. package/dist/components/agents-sdk/ThinkFullApp.d.ts +1 -1
  39. package/dist/components/agents-sdk/ThinkFullApp.js +2 -2
  40. package/dist/components/agents-sdk/ThinkFullAppViewSwitch.js +1 -1
  41. package/dist/components/agents-sdk/ThinkRoutineBrowser.js +2 -2
  42. package/dist/components/agents-sdk/ThinkRoutineForm.js +3 -3
  43. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +3 -3
  44. package/dist/components/agents-sdk/ThinkSidepanel.js +26 -13
  45. package/dist/components/agents-sdk/ThinkThreadPicker.js +1 -1
  46. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  47. package/dist/components/agents-sdk/WorkspaceExplorer.js +1 -1
  48. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  49. package/dist/components/agents-sdk/WorkspaceHeader.js +1 -1
  50. package/dist/components/agents-sdk/WorkspaceMountManager.js +2 -2
  51. package/dist/components/ai-sdk/Activity.js +1 -1
  52. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  53. package/dist/components/ai-sdk/Approval.js +1 -1
  54. package/dist/components/ai-sdk/Artifact.js +1 -1
  55. package/dist/components/ai-sdk/ChainOfThought.d.ts +1 -1
  56. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  57. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  58. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  59. package/dist/components/ai-sdk/ComposerLink.d.ts +27 -0
  60. package/dist/components/ai-sdk/ComposerLink.js +111 -0
  61. package/dist/components/ai-sdk/ConnectedAppCards.js +1 -1
  62. package/dist/components/ai-sdk/Conversation.js +1 -1
  63. package/dist/components/ai-sdk/Goal.js +1 -1
  64. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  65. package/dist/components/ai-sdk/Message.js +18 -2
  66. package/dist/components/ai-sdk/MessageScroller.js +1 -1
  67. package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -1
  68. package/dist/components/ai-sdk/Plan.js +1 -1
  69. package/dist/components/ai-sdk/PromptInput.d.ts +2 -2
  70. package/dist/components/ai-sdk/PromptInput.js +78 -59
  71. package/dist/components/ai-sdk/PromptInputComposerEditor.d.ts +31 -0
  72. package/dist/components/ai-sdk/PromptInputComposerEditor.js +198 -0
  73. package/dist/components/ai-sdk/Queue.js +1 -1
  74. package/dist/components/ai-sdk/Reasoning.js +1 -1
  75. package/dist/components/ai-sdk/Sources.js +1 -1
  76. package/dist/components/ai-sdk/Task.js +1 -1
  77. package/dist/components/extension/ChatGptSignInScreen.js +2 -2
  78. package/dist/components/extension/CodexModelSelector.js +1 -1
  79. package/dist/components/extension/ConversationTabPicker.js +1 -1
  80. package/dist/components/foundations/AppIcon.js +1 -1
  81. package/dist/components/foundations/Checkbox.js +1 -1
  82. package/dist/components/foundations/ContextMenu.js +1 -1
  83. package/dist/components/foundations/Menubar.js +1 -1
  84. package/dist/components/foundations/SearchField.js +1 -1
  85. package/dist/components/foundations/Select.js +1 -1
  86. package/dist/components/foundations/Stepper.js +1 -1
  87. package/dist/components/foundations/Toast.js +1 -1
  88. package/dist/components/foundations/ToggleGroup.d.ts +1 -1
  89. package/dist/components/foundations/ToggleGroup.js +1 -1
  90. package/dist/components/foundations/icons.d.ts +1 -1
  91. package/dist/components/foundations/icons.js +1 -1
  92. package/dist/components/general-purpose/Commit.js +2 -2
  93. package/dist/components/general-purpose/EnvironmentVariables.js +2 -2
  94. package/dist/components/general-purpose/FileTree.js +1 -1
  95. package/dist/components/general-purpose/PricingConfirmationDialog.js +1 -1
  96. package/dist/components/general-purpose/PricingPlanCard.js +1 -1
  97. package/dist/components/general-purpose/PricingUsageCalculator.js +1 -1
  98. package/dist/components/general-purpose/ResponsiveSidebarShell.js +1 -1
  99. package/dist/components/general-purpose/SetupChecklist.js +1 -1
  100. package/dist/components/general-purpose/Terminal.js +2 -2
  101. package/dist/components/general-purpose/TestResults.js +1 -1
  102. package/dist/components/general-purpose/ThemeModeControl.js +1 -1
  103. package/dist/components/general-purpose/WebPreview.js +1 -1
  104. package/dist/components/nanites/AgentConnection.js +2 -2
  105. package/dist/components/nanites/AgentToolDetail.js +3 -3
  106. package/dist/{copy-button-BpA7wQva.js → copy-button-D7ySsRRo.js} +1 -1
  107. package/dist/{icons-DbrksZyY.js → icons-BNEY4gO5.js} +44 -4
  108. package/dist/{icons-6ZnyZJiR.d.ts → icons-D0Pd2P9v.d.ts} +9 -4
  109. package/dist/{mcp-server-SD_S-IpB.js → mcp-server-7NR24ASj.js} +31 -4
  110. package/dist/{mcp-server-catalog-CCj2ItkV.d.ts → mcp-server-catalog-Cbu483Zb.d.ts} +9 -9
  111. package/dist/{provider-logos-zjZycgV6.js → provider-logos-DWYY8wNz.js} +31 -6
  112. package/dist/styles/action-guide.css +4 -0
  113. package/dist/styles/agent-attention.css +5 -1
  114. package/dist/styles/agent-chat.css +21 -18
  115. package/dist/styles/app-icon.css +21 -0
  116. package/dist/styles/brand-marks.css +22 -0
  117. package/dist/styles/composer-link.css +99 -0
  118. package/dist/styles/connected-app-card.css +9 -0
  119. package/dist/styles/github-motion-mark.css +8 -1
  120. package/dist/styles/index.css +2 -0
  121. package/dist/styles/manager-office.css +10 -3
  122. package/dist/styles/mcp-plugin-catalog.css +4 -0
  123. package/dist/styles/mcp-server-picker.css +2 -0
  124. package/dist/styles/prompt-input.css +14 -53
  125. package/dist/styles/think-sidepanel.css +9 -0
  126. package/dist/utils/composer-link.d.ts +59 -0
  127. package/dist/utils/composer-link.js +203 -0
  128. package/dist/utils/mcp-server-catalog.d.ts +1 -1
  129. package/dist/utils/mcp-server-catalog.js +9 -9
  130. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { getMcpServerEntry, getMcpServerIconSrc, getMcpServerRuntimeState } from "./utils/mcp-server-catalog.js";
1
+ import { DEFAULT_MCP_SERVER_CARDS, getMcpServerEntry, getMcpServerIconSrc, getMcpServerRuntimeState } from "./utils/mcp-server-catalog.js";
2
2
  import { AppIcon } from "./components/foundations/AppIcon.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/components/_internal/mcp-server.tsx
@@ -25,8 +25,35 @@ function getMcpServerProjection(card, mcp, serverId) {
25
25
  serverId: entry?.[0]
26
26
  };
27
27
  }
28
+ /** Match a live MCP entry or channel name to a catalog card that already has a brand mark. */
29
+ function findCatalogMcpServerCard(query) {
30
+ const id = query.id?.trim().toLowerCase();
31
+ const name = query.name?.trim().toLowerCase();
32
+ let hostname;
33
+ if (query.url) try {
34
+ hostname = new URL(query.url).hostname;
35
+ } catch {
36
+ hostname = void 0;
37
+ }
38
+ return DEFAULT_MCP_SERVER_CARDS.find((candidate) => {
39
+ if (!candidate.url) return false;
40
+ if (id && candidate.id === id) return true;
41
+ if (name && (candidate.name.toLowerCase() === name || candidate.id === name)) return true;
42
+ if (!hostname) return false;
43
+ try {
44
+ return new URL(candidate.url).hostname === hostname;
45
+ } catch {
46
+ return false;
47
+ }
48
+ });
49
+ }
28
50
  function McpServerIcon({ server, size = "lg", variant }) {
29
- const src = getMcpServerIconSrc(server);
51
+ const resolved = server.icon == null ? findCatalogMcpServerCard({
52
+ id: server.id,
53
+ name: server.name,
54
+ url: server.url
55
+ }) ?? server : server;
56
+ const src = getMcpServerIconSrc(resolved);
30
57
  return /* @__PURE__ */ jsxs(AppIcon.Root, {
31
58
  size,
32
59
  variant,
@@ -35,8 +62,8 @@ function McpServerIcon({ server, size = "lg", variant }) {
35
62
  alt: "",
36
63
  fit: "contain",
37
64
  src
38
- }, src) : null, /* @__PURE__ */ jsx(AppIcon.Fallback, { children: server.name.slice(0, 1) })]
65
+ }, src) : null, /* @__PURE__ */ jsx(AppIcon.Fallback, { children: resolved.name.slice(0, 1) })]
39
66
  });
40
67
  }
41
68
  //#endregion
42
- export { getMcpServerProjection as n, McpServerIcon as t };
69
+ export { findCatalogMcpServerCard as n, getMcpServerProjection as r, McpServerIcon as t };
@@ -271,7 +271,7 @@ declare const DCR_MCP_SERVER_CARDS: readonly [{
271
271
  readonly url: "https://mcp.miro.com/mcp";
272
272
  readonly description: "Work with boards and diagrams";
273
273
  readonly category: "Auto";
274
- readonly icon: "https://cdn.simpleicons.org/miro/FFD02F";
274
+ readonly icon: "https://cdn.simpleicons.org/miro/050038";
275
275
  }, {
276
276
  readonly id: "monday";
277
277
  readonly name: "monday.com";
@@ -292,14 +292,14 @@ declare const DCR_MCP_SERVER_CARDS: readonly [{
292
292
  readonly url: "https://mcp.notion.com/mcp";
293
293
  readonly description: "Work across docs, wikis, and project notes";
294
294
  readonly category: "Auto";
295
- readonly icon: "https://cdn.simpleicons.org/notion/A1A1AA";
295
+ readonly icon: "https://cdn.simpleicons.org/notion/000000";
296
296
  }, {
297
297
  readonly id: "paypal";
298
298
  readonly name: "PayPal";
299
299
  readonly url: "https://mcp.paypal.com/mcp";
300
300
  readonly description: "Use PayPal merchant tools";
301
301
  readonly category: "Auto";
302
- readonly icon: "https://cdn.simpleicons.org/paypal/003087";
302
+ readonly icon: "https://cdn.simpleicons.org/paypal/002991";
303
303
  }, {
304
304
  readonly id: "postman";
305
305
  readonly name: "Postman";
@@ -313,7 +313,7 @@ declare const DCR_MCP_SERVER_CARDS: readonly [{
313
313
  readonly url: "https://mcp.railway.com";
314
314
  readonly description: "Manage Railway projects and services";
315
315
  readonly category: "Auto";
316
- readonly icon: "https://cdn.simpleicons.org/railway/8957E5";
316
+ readonly icon: "https://cdn.simpleicons.org/railway/0B0D0E";
317
317
  }, {
318
318
  readonly id: "ramp";
319
319
  readonly name: "Ramp";
@@ -327,7 +327,7 @@ declare const DCR_MCP_SERVER_CARDS: readonly [{
327
327
  readonly url: "https://mcp.sentry.dev/mcp";
328
328
  readonly description: "Debug errors and inspect projects";
329
329
  readonly category: "Auto";
330
- readonly icon: "https://cdn.simpleicons.org/sentry/8957E5";
330
+ readonly icon: "https://cdn.simpleicons.org/sentry/362D59";
331
331
  }, {
332
332
  readonly id: "square";
333
333
  readonly name: "Square";
@@ -348,14 +348,14 @@ declare const DCR_MCP_SERVER_CARDS: readonly [{
348
348
  readonly url: "https://mcp.supabase.com/mcp";
349
349
  readonly description: "Manage Supabase projects";
350
350
  readonly category: "Auto";
351
- readonly icon: "https://cdn.simpleicons.org/supabase/3ECF8E";
351
+ readonly icon: "https://cdn.simpleicons.org/supabase/3FCF8E";
352
352
  }, {
353
353
  readonly id: "vercel";
354
354
  readonly name: "Vercel";
355
355
  readonly url: "https://mcp.vercel.com";
356
356
  readonly description: "Manage projects and deployments";
357
357
  readonly category: "Auto";
358
- readonly icon: "https://cdn.simpleicons.org/vercel/A1A1AA";
358
+ readonly icon: "https://cdn.simpleicons.org/vercel/000000";
359
359
  }, {
360
360
  readonly id: "webflow";
361
361
  readonly name: "Webflow";
@@ -369,7 +369,7 @@ declare const DCR_MCP_SERVER_CARDS: readonly [{
369
369
  readonly url: "https://mcp.wix.com/mcp";
370
370
  readonly description: "Work with Wix sites and apps";
371
371
  readonly category: "Auto";
372
- readonly icon: "https://cdn.simpleicons.org/wix/A1A1AA";
372
+ readonly icon: "https://cdn.simpleicons.org/wix/0C6EFC";
373
373
  }, {
374
374
  readonly id: "zapier";
375
375
  readonly name: "Zapier";
@@ -514,7 +514,7 @@ declare const MANUAL_MCP_SERVER_CARDS: readonly [{
514
514
  readonly url: "https://chatmcp.googleapis.com/mcp/v1";
515
515
  readonly description: "Read spaces, memberships, and messages";
516
516
  readonly category: "Manual";
517
- readonly icon: "https://cdn.simpleicons.org/googlechat/00AC47";
517
+ readonly icon: "https://cdn.simpleicons.org/googlechat/34A853";
518
518
  readonly manualSetup: {
519
519
  readonly auth: {
520
520
  readonly type: "manual_oauth_client";
@@ -1,15 +1,17 @@
1
+ import { t as cx } from "./class-names-BiMDVpUo.js";
1
2
  import "react";
2
3
  import { jsx, jsxs } from "react/jsx-runtime";
3
4
  //#region src/components/_internal/provider-logos.tsx
4
- function Svg({ children, size = 16, ...props }) {
5
+ function Svg({ children, size = 16, fill = "currentColor", className, ...props }) {
5
6
  return /* @__PURE__ */ jsx("svg", {
6
7
  width: size,
7
8
  height: size,
8
9
  viewBox: "0 0 24 24",
9
- fill: "currentColor",
10
+ fill,
10
11
  xmlns: "http://www.w3.org/2000/svg",
11
12
  "aria-hidden": "true",
12
13
  focusable: "false",
14
+ className: cx("sigvelo-brand-mark", className),
13
15
  ...props,
14
16
  children
15
17
  });
@@ -18,15 +20,38 @@ const OpenAILogo = (props) => /* @__PURE__ */ jsx(Svg, {
18
20
  ...props,
19
21
  children: /* @__PURE__ */ jsx("path", { d: "M22.28 9.81a5.99 5.99 0 0 0-.52-4.91 6.05 6.05 0 0 0-6.52-2.9A6.05 6.05 0 0 0 10.58 0a6.05 6.05 0 0 0-5.77 4.18 5.99 5.99 0 0 0-4 2.9 6.05 6.05 0 0 0 .74 7.09 5.99 5.99 0 0 0 .52 4.91 6.05 6.05 0 0 0 6.52 2.9A5.99 5.99 0 0 0 13.25 24a6.05 6.05 0 0 0 5.77-4.19 5.99 5.99 0 0 0 4-2.9 6.05 6.05 0 0 0-.74-7.1ZM13.25 22.44a4.48 4.48 0 0 1-2.88-1.04l.14-.08 4.79-2.76a.78.78 0 0 0 .39-.68v-6.75l2.02 1.17c.02 0 .04.03.04.05v5.58a4.5 4.5 0 0 1-4.5 4.5ZM3.57 18.3a4.5 4.5 0 0 1-.54-3.03l.14.09 4.79 2.76a.78.78 0 0 0 .78 0l5.85-3.37v2.33c0 .02 0 .04-.03.06L9.72 19.94a4.5 4.5 0 0 1-6.15-1.64ZM2.31 7.88a4.48 4.48 0 0 1 2.35-1.97v5.69a.78.78 0 0 0 .39.67l5.83 3.36-2.02 1.17a.07.07 0 0 1-.07 0l-4.83-2.8A4.5 4.5 0 0 1 2.3 7.9Zm16.64 3.87L13.1 8.37l2.02-1.17c.02 0 .05-.01.07 0l4.83 2.8a4.5 4.5 0 0 1-.67 8.11V12.4a.77.77 0 0 0-.4-.66Zm2-3.03-.14-.09-4.78-2.78a.78.78 0 0 0-.79 0L9.4 9.25V6.92c0-.02 0-.04.02-.05l4.83-2.79a4.5 4.5 0 0 1 6.68 4.66Zm-12.68 4.17-2.02-1.17a.07.07 0 0 1-.04-.06V6.1a4.5 4.5 0 0 1 7.38-3.45l-.14.08L8.66 5.5a.78.78 0 0 0-.4.68v6.74Zm1.1-2.36 2.6-1.5 2.61 1.5v3l-2.6 1.5-2.6-1.5Z" })
20
22
  });
21
- const AnthropicLogo = (props) => /* @__PURE__ */ jsxs(Svg, {
23
+ const AnthropicLogo = ({ className, ...props }) => /* @__PURE__ */ jsxs(Svg, {
24
+ className: cx("sigvelo-brand-mark--colorful", className),
25
+ fill: "#D97757",
22
26
  ...props,
23
27
  children: [/* @__PURE__ */ jsx("path", { d: "M13.83 4H17.3L24 20h-3.47l-1.37-3.52h-7L10.82 20H7.36ZM13.25 13.58h4.8l-2.4-6.15Z" }), /* @__PURE__ */ jsx("path", { d: "M0 4h3.47l6.7 16H6.7Z" })]
24
28
  });
25
- const GoogleLogo = (props) => /* @__PURE__ */ jsx(Svg, {
29
+ const GoogleLogo = ({ className, ...props }) => /* @__PURE__ */ jsxs(Svg, {
30
+ className: cx("sigvelo-brand-mark--colorful", className),
31
+ fill: "none",
26
32
  ...props,
27
- children: /* @__PURE__ */ jsx("path", { d: "M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 2a8 8 0 0 1 5.34 2.05l-2.2 2.2A5 5 0 1 0 17 12.6h-5v-2.6h7.9A8 8 0 0 1 12 20 8 8 0 0 1 12 4Z" })
33
+ children: [
34
+ /* @__PURE__ */ jsx("path", {
35
+ fill: "#4285F4",
36
+ d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
37
+ }),
38
+ /* @__PURE__ */ jsx("path", {
39
+ fill: "#34A853",
40
+ d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
41
+ }),
42
+ /* @__PURE__ */ jsx("path", {
43
+ fill: "#FBBC05",
44
+ d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
45
+ }),
46
+ /* @__PURE__ */ jsx("path", {
47
+ fill: "#EA4335",
48
+ d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
49
+ })
50
+ ]
28
51
  });
29
- const MetaLogo = (props) => /* @__PURE__ */ jsx(Svg, {
52
+ const MetaLogo = ({ className, ...props }) => /* @__PURE__ */ jsx(Svg, {
53
+ className: cx("sigvelo-brand-mark--colorful", className),
54
+ fill: "#0668E1",
30
55
  ...props,
31
56
  children: /* @__PURE__ */ jsx("path", { d: "M2 12.5c0-3.5 1.8-6.5 4.4-6.5 1.8 0 3.2 1.3 4.9 3.8 2.2 3.2 3.3 5 4.6 5 1 0 1.5-.8 1.5-2.3 0-2.1-1-4.3-2.7-4.3-1 0-2 .6-3.2 2l-1.3-1.7C11.5 6.8 12.9 6 14.5 6c3 0 5.5 3.3 5.5 7 0 3.3-1.6 5-3.8 5-2.3 0-3.6-1.6-6-5.3C8.9 10.4 8 9.2 6.8 9.2 5.4 9.2 4.3 10.6 4.3 13c0 1.8.5 3 1.3 3 .6 0 1.1-.3 1.8-1.1l1.3 1.7C7.6 17.6 6.3 18 5.3 18 3.3 18 2 16 2 12.5Z" })
32
57
  });
@@ -81,6 +81,10 @@
81
81
  block-size: var(--sigvelo-control-icon-size-md);
82
82
  }
83
83
 
84
+ .action-guide__action-icon :is(img, .app-icon__image) {
85
+ color: unset;
86
+ }
87
+
84
88
  .action-guide__action-label {
85
89
  min-inline-size: 0;
86
90
  overflow-wrap: anywhere;
@@ -50,11 +50,15 @@
50
50
  background: var(--sigvelo-color-danger-bg-subtle);
51
51
  }
52
52
 
53
- .agent-attention__icon > :is(svg, img) {
53
+ .agent-attention__icon > :is(svg, img, .app-icon) {
54
54
  inline-size: 1rem;
55
55
  block-size: 1rem;
56
56
  }
57
57
 
58
+ .agent-attention__icon :is(img, .app-icon__image) {
59
+ color: unset;
60
+ }
61
+
58
62
  .agent-attention__text {
59
63
  display: grid;
60
64
  min-inline-size: 0;
@@ -158,10 +158,12 @@
158
158
  /* The first-turn utility tray owns its buttons' treatment so every host gets
159
159
  the same quiet look without per-app classes. Hug the actions — a short
160
160
  viewport (Storybook addons, a short side panel) used to stretch this into
161
- a vacant slab. Space-between only when there are three slots to fill. */
161
+ a vacant slab. Space-between only when there are three slots to fill.
162
+ Compact control tokens keep this strip on the same ramp as the composer. */
162
163
  .agent-chat-start-screen__composer-tray {
163
164
  align-self: start;
164
165
  justify-content: start;
166
+ min-block-size: 0;
165
167
  }
166
168
 
167
169
  .agent-chat-start-screen__composer-tray:has(> :nth-child(3):last-child) {
@@ -169,32 +171,29 @@
169
171
  }
170
172
 
171
173
  .agent-chat-start-screen__composer-tray > .button {
174
+ --sigvelo-recipe-button-height: var(--sigvelo-density-compact-control-height);
175
+ --sigvelo-recipe-button-font-size: var(--sigvelo-density-compact-control-font-size);
176
+ --sigvelo-recipe-button-icon-size: var(--sigvelo-density-compact-control-icon-size);
177
+
172
178
  min-inline-size: 0;
173
- gap: var(--sigvelo-spacing-1-5);
174
- padding-inline: var(--sigvelo-spacing-2);
179
+ gap: var(--sigvelo-density-compact-control-gap);
180
+ padding-inline: var(--sigvelo-density-compact-control-padding-inline);
175
181
  color: inherit;
176
- font-size: var(--sigvelo-text-sm);
182
+ font-size: var(--sigvelo-density-compact-control-font-size);
177
183
  font-weight: var(--sigvelo-font-weight-normal);
178
184
  }
179
185
 
180
- .agent-chat-start-screen__composer-tray > .button:has(.app-icon-stack) {
181
- gap: var(--sigvelo-spacing-3);
182
- padding-inline-start: calc(var(--sigvelo-spacing-2) + var(--sigvelo-border-width));
183
- }
184
-
185
- .agent-chat-start-screen__composer-tray > .button:first-child {
186
- padding-inline: var(--sigvelo-spacing-2-5);
186
+ .agent-chat-start-screen__composer-tray > .button > svg {
187
+ flex: none;
187
188
  }
188
189
 
189
- .agent-chat-start-screen__composer-tray > .button svg {
190
- flex: none;
191
- inline-size: var(--sigvelo-control-icon-size-md);
192
- block-size: var(--sigvelo-control-icon-size-md);
190
+ .agent-chat-start-screen__composer-tray .app-icon {
191
+ --sigvelo-recipe-app-icon-size: var(--sigvelo-spacing-5);
193
192
  }
194
193
 
195
- .agent-chat-start-screen__composer-tray > .button:first-child svg {
196
- inline-size: var(--sigvelo-control-icon-size-lg);
197
- block-size: var(--sigvelo-control-icon-size-lg);
194
+ .agent-chat-start-screen__composer-tray .app-icon :is(svg, img) {
195
+ inline-size: 100%;
196
+ block-size: 100%;
198
197
  }
199
198
 
200
199
  .agent-chat-start-screen__composer-tray > .button > span:not(.app-icon-stack) {
@@ -276,6 +275,10 @@
276
275
  color: var(--sigvelo-color-primary-text);
277
276
  }
278
277
 
278
+ .agent-chat-starter__icon :is(img, .app-icon__image) {
279
+ color: unset;
280
+ }
281
+
279
282
  .agent-chat-starter__label {
280
283
  flex: 1;
281
284
  min-inline-size: 0;
@@ -39,8 +39,24 @@
39
39
  --sigvelo-recipe-app-icon-size: var(--sigvelo-spacing-12);
40
40
  }
41
41
 
42
+ /* Inset scales with the tile so xs/sm marks stay in the 14–16px band instead of
43
+ collapsing into a 4px dot under a fixed 8px pad. */
42
44
  .app-icon[data-app-icon-variant="surface"],
43
45
  .app-icon[data-app-icon-variant="contrast"] {
46
+ padding: var(--sigvelo-spacing-1);
47
+ }
48
+
49
+ .app-icon[data-app-icon-size="xs"][data-app-icon-variant="surface"],
50
+ .app-icon[data-app-icon-size="xs"][data-app-icon-variant="contrast"] {
51
+ padding: var(--sigvelo-spacing-0-5);
52
+ }
53
+
54
+ .app-icon[data-app-icon-size="md"][data-app-icon-variant="surface"],
55
+ .app-icon[data-app-icon-size="md"][data-app-icon-variant="contrast"],
56
+ .app-icon[data-app-icon-size="lg"][data-app-icon-variant="surface"],
57
+ .app-icon[data-app-icon-size="lg"][data-app-icon-variant="contrast"],
58
+ .app-icon[data-app-icon-size="xl"][data-app-icon-variant="surface"],
59
+ .app-icon[data-app-icon-size="xl"][data-app-icon-variant="contrast"] {
44
60
  padding: var(--sigvelo-spacing-2);
45
61
  }
46
62
 
@@ -51,6 +67,11 @@
51
67
  color: var(--sigvelo-color-primary-text-on-bg);
52
68
  }
53
69
 
70
+ /* Plugin artwork already has its own fills; do not tint it with the tile. */
71
+ .app-icon[data-app-icon-variant="contrast"] :is(img, .app-icon__image) {
72
+ color: unset;
73
+ }
74
+
54
75
  /* Full-bleed artwork brings its own edges; a hairline ring around a flat
55
76
  transparent mark would outline an invisible box, so no variant draws one. */
56
77
 
@@ -0,0 +1,22 @@
1
+ /*
2
+ * Third-party / provider marks. Official brand colors live on the artwork
3
+ * (or this file for single-fill Discord), not in the Sigvelo token palette.
4
+ * Lucide chrome stays currentColor via inherited text color.
5
+ */
6
+ .sigvelo-brand-mark--colorful {
7
+ color: unset;
8
+ }
9
+
10
+ .sigvelo-brand-mark--discord {
11
+ color: #5865f2;
12
+ }
13
+
14
+ @media (forced-colors: active) {
15
+ .sigvelo-brand-mark--colorful {
16
+ forced-color-adjust: none;
17
+ }
18
+
19
+ .sigvelo-brand-mark--discord {
20
+ color: CanvasText;
21
+ }
22
+ }
@@ -0,0 +1,99 @@
1
+ .composer-link {
2
+ --composer-link-fill: var(
3
+ --composer-link-color,
4
+ light-dark(var(--sigvelo-color-primary-600), var(--sigvelo-color-primary-400))
5
+ );
6
+
7
+ display: inline;
8
+ max-inline-size: 100%;
9
+ /* Official mark hexes (Linear 5E6AD2, Gmail EA4335) miss 4.5:1 on the user
10
+ bubble. Mix toward --sigvelo-color-text so light darkens and dark lightens
11
+ while the hue stays the brand. */
12
+ color: color-mix(in oklab, var(--composer-link-fill) 80%, var(--sigvelo-color-text));
13
+ text-decoration: none;
14
+ font: inherit;
15
+ font-weight: var(--sigvelo-font-weight-semibold);
16
+ line-height: inherit;
17
+ white-space: nowrap;
18
+ cursor: default;
19
+ }
20
+
21
+ .composer-link:hover {
22
+ color: color-mix(in oklab, var(--composer-link-fill) 70%, var(--sigvelo-color-text));
23
+ text-decoration: none;
24
+ }
25
+
26
+ .composer-link:focus-visible {
27
+ outline: var(--sigvelo-focus-ring);
28
+ outline-offset: 2px;
29
+ border-radius: var(--sigvelo-radius-sm);
30
+ }
31
+
32
+ .composer-link__icon {
33
+ display: inline-block;
34
+ /* Larger than cap-height, under the 1.5 line-height so Linear tiles and
35
+ Lucide glyphs share one box. */
36
+ inline-size: 1.2em;
37
+ block-size: 1.2em;
38
+ margin-inline-end: var(--sigvelo-spacing-1);
39
+ vertical-align: -0.25em;
40
+ overflow: visible;
41
+ color: inherit;
42
+ }
43
+
44
+ .composer-link__icon :is(svg, img, .app-icon),
45
+ .composer-link__icon.app-icon {
46
+ display: block;
47
+ inline-size: 100%;
48
+ block-size: 100%;
49
+ }
50
+
51
+ .composer-link__icon :is(img, .app-icon__image) {
52
+ object-fit: cover;
53
+ }
54
+
55
+ /* Nested AppIcon tiles add radius, shadow, and inset — flatten so the mark
56
+ fills the icon box. */
57
+ .composer-link:not(.prompt-input__tab-item) .app-icon {
58
+ --sigvelo-recipe-app-icon-size: 100%;
59
+ padding: 0;
60
+ border-radius: 0;
61
+ overflow: visible;
62
+ filter: none;
63
+ }
64
+
65
+ .composer-link__label {
66
+ min-inline-size: 0;
67
+ font-weight: inherit;
68
+ }
69
+
70
+ .prompt-input__textarea .composer-link {
71
+ pointer-events: none;
72
+ }
73
+
74
+ .prompt-input__tab-item.composer-link,
75
+ .prompt-input__tab-item.composer-link:hover {
76
+ display: flex;
77
+ color: inherit;
78
+ text-decoration: none;
79
+ font-weight: inherit;
80
+ margin-inline: 0;
81
+ }
82
+
83
+ .prompt-input__tab-item .composer-link__icon {
84
+ display: inline-flex;
85
+ margin-inline-end: 0;
86
+ vertical-align: unset;
87
+ }
88
+
89
+ @media (forced-colors: active) {
90
+ .composer-link {
91
+ color: LinkText;
92
+ forced-color-adjust: none;
93
+ }
94
+
95
+ .composer-link:hover,
96
+ .composer-link:focus-visible {
97
+ color: LinkText;
98
+ }
99
+ }
@@ -15,6 +15,15 @@
15
15
  align-items: center;
16
16
  }
17
17
 
18
+ .connected-app-card__icon > :is(svg, img) {
19
+ inline-size: var(--sigvelo-control-icon-size-md);
20
+ block-size: var(--sigvelo-control-icon-size-md);
21
+ }
22
+
23
+ .connected-app-card__icon :is(img, .app-icon__image) {
24
+ color: unset;
25
+ }
26
+
18
27
  .connected-app-card__status {
19
28
  display: inline-flex;
20
29
  align-items: center;
@@ -5,12 +5,13 @@
5
5
  place-items: center;
6
6
  inline-size: 1.625em;
7
7
  block-size: 1.625em;
8
- color: currentColor;
8
+ color: inherit;
9
9
  line-height: 0;
10
10
  }
11
11
 
12
12
  .github-motion-mark svg {
13
13
  grid-area: 1 / 1;
14
+ fill: currentColor;
14
15
  transform-origin: 50% 50%;
15
16
  animation: github-motion-mark-breathe 2.6s ease-in-out infinite;
16
17
  }
@@ -89,3 +90,9 @@
89
90
  animation: none;
90
91
  }
91
92
  }
93
+
94
+ @media (forced-colors: active) {
95
+ .github-motion-mark {
96
+ color: CanvasText;
97
+ }
98
+ }
@@ -40,6 +40,7 @@
40
40
  @import "./fieldset.css" layer(components);
41
41
  @import "./form.css" layer(components);
42
42
  @import "./github-motion-mark.css" layer(components);
43
+ @import "./brand-marks.css" layer(components);
43
44
  @import "./input.css" layer(components);
44
45
  @import "./kbd.css" layer(components);
45
46
  @import "./label.css" layer(components);
@@ -107,6 +108,7 @@
107
108
  @import "./chatgpt-sign-in-screen.css" layer(components);
108
109
  @import "./plan.css" layer(components);
109
110
  @import "./prompt-input.css" layer(components);
111
+ @import "./composer-link.css" layer(components);
110
112
  @import "./queue.css" layer(components);
111
113
  @import "./reasoning.css" layer(components);
112
114
  @import "./resizable-side-panel.css" layer(components);
@@ -910,6 +910,9 @@
910
910
  .manager-office__connection-icons .app-icon {
911
911
  filter: none;
912
912
  }
913
+ .manager-office__connection-icons .app-icon :is(img, .app-icon__image) {
914
+ color: unset;
915
+ }
913
916
  .manager-office__dashboard-card-actions {
914
917
  display: flex;
915
918
  align-items: center;
@@ -1548,9 +1551,13 @@
1548
1551
  block-size: 100%;
1549
1552
  }
1550
1553
 
1551
- .manager-office__channel-mark > svg {
1552
- inline-size: 65%;
1553
- block-size: 65%;
1554
+ .manager-office__channel-mark > :is(svg, img, .app-icon__image) {
1555
+ inline-size: var(--sigvelo-control-icon-size-md);
1556
+ block-size: var(--sigvelo-control-icon-size-md);
1557
+ }
1558
+
1559
+ .manager-office__channel-mark :is(img, .app-icon__image) {
1560
+ color: unset;
1554
1561
  }
1555
1562
 
1556
1563
  .manager-office__channel-direction {
@@ -225,6 +225,10 @@
225
225
  gap: var(--sigvelo-spacing-3-5);
226
226
  }
227
227
 
228
+ .mcp-plugin-details__identity :is(img, .app-icon__image) {
229
+ color: unset;
230
+ }
231
+
228
232
  .mcp-plugin-details__identity > .separator {
229
233
  block-size: var(--sigvelo-spacing-8);
230
234
  background-color: color-mix(in oklab, currentcolor, transparent 30%);
@@ -55,6 +55,8 @@
55
55
  justify-content: center;
56
56
  inline-size: var(--sigvelo-control-icon-size-lg);
57
57
  block-size: var(--sigvelo-control-icon-size-lg);
58
+ /* Lucide and monochrome protocol marks tint from this. Hardcoded brand
59
+ fills ignore it; Discord sets its own color on the mark. */
58
60
  color: var(--sigvelo-color-text-muted);
59
61
  }
60
62
 
@@ -212,14 +212,22 @@
212
212
  font-family: inherit;
213
213
  font-size: var(--sigvelo-density-compact-control-font-size);
214
214
  line-height: var(--sigvelo-leading-normal);
215
+ white-space: pre-wrap;
216
+ overflow-wrap: anywhere;
215
217
  resize: none;
216
218
  overflow-block: hidden;
217
219
  }
218
220
 
219
- .prompt-input__textarea::placeholder {
221
+ .prompt-input__textarea::placeholder,
222
+ .prompt-input__textarea[data-empty]::before {
220
223
  color: var(--sigvelo-control-placeholder-color);
221
224
  }
222
225
 
226
+ .prompt-input__textarea[data-empty]::before {
227
+ content: attr(data-placeholder);
228
+ pointer-events: none;
229
+ }
230
+
223
231
  .prompt-input__textarea:focus,
224
232
  .prompt-input__textarea:focus-visible {
225
233
  border: none;
@@ -553,11 +561,15 @@
553
561
  flex: 0 0 auto;
554
562
  }
555
563
 
556
- .prompt-input__command-icon > svg {
564
+ .prompt-input__command-icon > :is(svg, img, .app-icon) {
557
565
  inline-size: var(--sigvelo-density-compact-control-icon-size);
558
566
  block-size: var(--sigvelo-density-compact-control-icon-size);
559
567
  }
560
568
 
569
+ .prompt-input__command-icon :is(img, .app-icon__image) {
570
+ color: unset;
571
+ }
572
+
561
573
  .prompt-input__command-copy {
562
574
  display: grid;
563
575
  grid-template-columns: auto var(--sigvelo-layout-track-fill) auto;
@@ -584,51 +596,6 @@
584
596
  overflow-wrap: anywhere;
585
597
  }
586
598
 
587
- .prompt-input__references {
588
- display: flex;
589
- flex-wrap: wrap;
590
- gap: var(--sigvelo-spacing-1);
591
- }
592
-
593
- .prompt-input__reference {
594
- position: relative;
595
- gap: var(--sigvelo-spacing-1);
596
- padding-inline: var(--sigvelo-spacing-1);
597
- color: var(--sigvelo-color-primary-text);
598
- font-weight: inherit;
599
- font-size: var(--sigvelo-density-compact-control-font-size);
600
- }
601
-
602
- .prompt-input__reference-icon,
603
- .prompt-input__reference-remove {
604
- display: inline-flex;
605
- flex: 0 0 auto;
606
- }
607
-
608
- .prompt-input__reference-label {
609
- max-inline-size: 18rem;
610
- }
611
-
612
- .prompt-input__reference-remove {
613
- position: absolute;
614
- inset-inline-end: calc(-1 * var(--sigvelo-spacing-3));
615
- color: var(--sigvelo-color-text-muted);
616
- opacity: 0;
617
- pointer-events: none;
618
- }
619
-
620
- .prompt-input__reference:hover .prompt-input__reference-remove,
621
- .prompt-input__reference:focus-visible .prompt-input__reference-remove {
622
- opacity: 1;
623
- }
624
-
625
- /* Local wrap. Not --sigvelo-layout-break-compact. */
626
- @container prompt-input (inline-size < 28rem) {
627
- .prompt-input__reference-label {
628
- max-inline-size: 12rem;
629
- }
630
- }
631
-
632
599
  .prompt-input__command-description,
633
600
  .prompt-input__context-description {
634
601
  color: var(--sigvelo-color-text-muted);
@@ -674,7 +641,6 @@
674
641
  .prompt-input__button,
675
642
  .prompt-input__attachment-remove,
676
643
  .prompt-input__recording-button,
677
- .prompt-input__reference,
678
644
  .prompt-input__submit {
679
645
  --sigvelo-recipe-button-height: var(--sigvelo-control-height-xl);
680
646
  }
@@ -690,11 +656,6 @@
690
656
  min-block-size: var(--sigvelo-control-height-xl);
691
657
  }
692
658
 
693
- .prompt-input__reference-remove {
694
- position: static;
695
- opacity: 1;
696
- }
697
-
698
659
  .prompt-input__attachment[data-image] .prompt-input__attachment-remove {
699
660
  position: static;
700
661
  }