@mcp-b/react-components 0.35.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/{AgentChat-mpacmRU1.d.ts → AgentChat-CVO7xyLC.d.ts} +1 -1
  2. package/dist/{CodeBlock-CM5gfmdq.js → CodeBlock-Bk4nn7l-.js} +4 -3
  3. package/dist/{CodeBlock-DzGhYyNe.d.ts → CodeBlock-C380GD5t.d.ts} +2 -5
  4. package/dist/{Dialog-DeOSJ0Oy.d.ts → Dialog-B_FhRWaz.d.ts} +22 -37
  5. package/dist/{Menu-DVmjBIuM.d.ts → Menu-yb6QXWA3.d.ts} +64 -75
  6. package/dist/{PromptInput-DOyee1kM.d.ts → PromptInput-BRX7FhjH.d.ts} +7 -272
  7. package/dist/ResponsiveSidebarShell-DWjULskY.d.ts +68 -0
  8. package/dist/{Select-D96d09ww.d.ts → Select-RrceeEIe.d.ts} +17 -52
  9. package/dist/{ThinkChat-DbzqSTBt.js → ThinkChat-ByR-QT_D.js} +5 -7
  10. package/dist/{ThinkChatActivity-BZyN5MBg.d.ts → ThinkChatActivity-Dkmm2pIj.d.ts} +1 -1
  11. package/dist/{ToggleGroup-CSBWfPXo.d.ts → ToggleGroup-BrQZOQn_.d.ts} +4 -6
  12. package/dist/{WorkspaceFile-CVAzjTt6.d.ts → WorkspaceFile-BLaFmMrt.d.ts} +1 -1
  13. package/dist/{WorkspaceFileView-BmxSbhRu.js → WorkspaceFileView-DTHJLKW_.js} +9 -15
  14. package/dist/components/agents-sdk/AgentChat.d.ts +1 -1
  15. package/dist/components/agents-sdk/AgentChat.js +27 -21
  16. package/dist/components/agents-sdk/BrowserLiveView.d.ts +47 -1
  17. package/dist/components/agents-sdk/BrowserReplay.d.ts +40 -1
  18. package/dist/components/agents-sdk/McpConnectionRequest.js +13 -14
  19. package/dist/components/agents-sdk/McpPluginCatalog.d.ts +1 -1
  20. package/dist/components/agents-sdk/McpPluginCatalog.js +16 -23
  21. package/dist/components/agents-sdk/McpServerPicker.d.ts +2 -2
  22. package/dist/components/agents-sdk/McpServerPicker.js +18 -16
  23. package/dist/components/agents-sdk/ModelSelector.d.ts +9 -9
  24. package/dist/components/agents-sdk/ModelSelector.js +504 -1
  25. package/dist/components/agents-sdk/PromptInputCommands.d.ts +1 -1
  26. package/dist/components/agents-sdk/ThinkChat.d.ts +17 -107
  27. package/dist/components/agents-sdk/ThinkChat.js +2 -12
  28. package/dist/components/agents-sdk/ThinkChatActivity.d.ts +2 -4
  29. package/dist/components/agents-sdk/ThinkChatActivity.js +1 -1
  30. package/dist/components/agents-sdk/ThinkChatToolPanels.js +1 -1
  31. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +1 -1
  32. package/dist/components/agents-sdk/ThinkFullApp.d.ts +4 -4
  33. package/dist/components/agents-sdk/ThinkFullApp.js +7 -11
  34. package/dist/components/agents-sdk/ThinkFullAppViewSwitch.d.ts +1 -1
  35. package/dist/components/agents-sdk/ThinkRoutineForm.js +1 -1
  36. package/dist/components/agents-sdk/ThinkRoutineLibrary.d.ts +2 -3
  37. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +1 -1
  38. package/dist/components/agents-sdk/ThinkThreadPicker.js +2 -3
  39. package/dist/components/agents-sdk/ThinkThreadShell.d.ts +1 -1
  40. package/dist/components/agents-sdk/Workspace.d.ts +140 -2
  41. package/dist/components/agents-sdk/WorkspaceBrowser.d.ts +1 -1
  42. package/dist/components/agents-sdk/WorkspaceExplorer.d.ts +32 -5
  43. package/dist/components/agents-sdk/WorkspaceExplorer.js +3 -5
  44. package/dist/components/agents-sdk/WorkspaceFile.d.ts +1 -1
  45. package/dist/components/agents-sdk/WorkspaceFileView.d.ts +1 -1
  46. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  47. package/dist/components/ai-sdk/Activity.d.ts +5 -0
  48. package/dist/components/ai-sdk/Activity.js +33 -13
  49. package/dist/components/ai-sdk/CodeBlock.d.ts +1 -1
  50. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  51. package/dist/components/ai-sdk/Message.js +1 -5
  52. package/dist/components/ai-sdk/MessageScroller.d.ts +5 -0
  53. package/dist/components/ai-sdk/MessageScroller.js +18 -12
  54. package/dist/components/ai-sdk/MessageScrollerVirtual.js +18 -10
  55. package/dist/components/ai-sdk/PromptInput.d.ts +2 -2
  56. package/dist/components/ai-sdk/PromptInput.js +123 -126
  57. package/dist/components/ai-sdk/Queue.js +1 -1
  58. package/dist/components/ai-sdk/Reasoning.d.ts +3 -4
  59. package/dist/components/ai-sdk/Reasoning.js +29 -13
  60. package/dist/components/ai-sdk/ToolInvocation.d.ts +3 -5
  61. package/dist/components/extension/ChatGptSignInScreen.js +2 -2
  62. package/dist/components/extension/CodexModelSelector.d.ts +1 -1
  63. package/dist/components/foundations/Accordion.d.ts +1 -3
  64. package/dist/components/foundations/Accordion.js +1 -3
  65. package/dist/components/foundations/AlertDialog.d.ts +16 -36
  66. package/dist/components/foundations/Autocomplete.d.ts +12 -33
  67. package/dist/components/foundations/Autocomplete.js +2 -1
  68. package/dist/components/foundations/Combobox.d.ts +119 -2
  69. package/dist/components/foundations/Combobox.js +6 -23
  70. package/dist/components/foundations/ContextMenu.d.ts +50 -57
  71. package/dist/components/foundations/ContextMenu.js +4 -28
  72. package/dist/components/foundations/DescriptionList.d.ts +34 -2
  73. package/dist/components/foundations/DescriptionList.js +33 -2
  74. package/dist/components/foundations/Dialog.d.ts +1 -1
  75. package/dist/components/foundations/Dialog.js +2 -1
  76. package/dist/components/foundations/Menu.d.ts +1 -1
  77. package/dist/components/foundations/Menu.js +3 -21
  78. package/dist/components/foundations/Menubar.d.ts +35 -64
  79. package/dist/components/foundations/Menubar.js +3 -22
  80. package/dist/components/foundations/Popover.d.ts +8 -21
  81. package/dist/components/foundations/Popover.js +3 -48
  82. package/dist/components/foundations/PreviewCard.d.ts +44 -29
  83. package/dist/components/foundations/PreviewCard.js +3 -6
  84. package/dist/components/foundations/RadioGroup.d.ts +4 -6
  85. package/dist/components/foundations/Select.d.ts +1 -1
  86. package/dist/components/foundations/Select.js +7 -21
  87. package/dist/components/foundations/Slider.d.ts +31 -44
  88. package/dist/components/foundations/Slider.js +26 -25
  89. package/dist/components/foundations/Stepper.d.ts +3 -3
  90. package/dist/components/foundations/Stepper.js +5 -6
  91. package/dist/components/foundations/ToggleGroup.d.ts +1 -1
  92. package/dist/components/foundations/Tooltip.d.ts +6 -8
  93. package/dist/components/foundations/Tooltip.js +4 -3
  94. package/dist/components/general-purpose/Commit.js +1 -1
  95. package/dist/components/general-purpose/EnvironmentVariables.js +1 -1
  96. package/dist/components/general-purpose/PricingBillingToggle.d.ts +2 -3
  97. package/dist/components/general-purpose/PricingBillingToggle.js +4 -22
  98. package/dist/components/general-purpose/PricingPage.d.ts +3 -4
  99. package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +1 -67
  100. package/dist/components/general-purpose/SettingsFormDialog.d.ts +7 -2
  101. package/dist/components/general-purpose/SettingsFormDialog.js +17 -2
  102. package/dist/components/general-purpose/Terminal.js +3 -3
  103. package/dist/components/general-purpose/ThemeModeControl.js +1 -1
  104. package/dist/components/general-purpose/WebPreview.js +4 -4
  105. package/dist/components/nanites/AgentConnection.js +16 -11
  106. package/dist/components/nanites/AgentToolDetail.js +1 -1
  107. package/dist/{mcp-server-U71zhxFF.js → mcp-server-SD_S-IpB.js} +18 -2
  108. package/dist/message-scroller-C8cplcQO.js +32 -0
  109. package/dist/provider-logos-zjZycgV6.js +74 -0
  110. package/dist/styles/agent-chat.css +9 -0
  111. package/dist/styles/agent-connection.css +4 -31
  112. package/dist/styles/alert-dialog.css +0 -2
  113. package/dist/styles/base-ui-motion.css +7 -5
  114. package/dist/styles/chatgpt-sign-in-screen.css +5 -3
  115. package/dist/styles/dialog.css +0 -2
  116. package/dist/styles/model-selector.css +30 -12
  117. package/dist/styles/popover.css +0 -1
  118. package/dist/styles/preview-card.css +0 -4
  119. package/dist/styles/pricing-page.css +1 -13
  120. package/dist/styles/prompt-input.css +12 -10
  121. package/dist/styles/recipes.css +22 -14
  122. package/dist/styles/slider.css +2 -2
  123. package/dist/styles/tooltip.css +0 -1
  124. package/dist/utils/structured-code.d.ts +1 -1
  125. package/package.json +17 -7
  126. package/dist/BrowserLiveView-tJTWkoyu.d.ts +0 -48
  127. package/dist/BrowserReplay-B0BQZr-N.d.ts +0 -41
  128. package/dist/Combobox-WrrDDaEv.d.ts +0 -154
  129. package/dist/ModelSelector-DtBxWqRn.js +0 -504
  130. package/dist/Workspace-GTlqvcIn.d.ts +0 -278
  131. package/dist/WorkspaceExplorer-Cu044amt.d.ts +0 -32
  132. package/dist/components/foundations/DescriptionListParts.d.ts +0 -37
  133. package/dist/components/foundations/DescriptionListParts.js +0 -35
@@ -3,12 +3,19 @@ import { Dialog } from "../foundations/Dialog.js";
3
3
  import { i as formatErrorMessage } from "../../format-DB2mX9DA.js";
4
4
  import { Field } from "../foundations/Field.js";
5
5
  import { Form } from "../foundations/Form.js";
6
+ import { Checkbox } from "../foundations/Checkbox.js";
6
7
  import * as React from "react";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
9
  //#region src/components/general-purpose/SettingsFormDialog.tsx
10
+ /**
11
+ * A checked box submits this, an unchecked one submits the empty string, so
12
+ * `SettingsFormValues` stays all-strings for every field type.
13
+ */
14
+ const SETTINGS_FORM_CHECKED = "true";
9
15
  function readSettingsValues(data, fields) {
10
16
  return Object.fromEntries(fields.map((field) => {
11
17
  const value = data[field.name];
18
+ if (field.type === "checkbox") return [field.name, value === true ? SETTINGS_FORM_CHECKED : ""];
12
19
  return [field.name, typeof value === "string" ? value.trim() : ""];
13
20
  }));
14
21
  }
@@ -51,7 +58,15 @@ function SettingsFormDialogContent({ fields, initialValues, submitLabel, submitt
51
58
  return /* @__PURE__ */ jsxs(Form, {
52
59
  onFormSubmit: submit,
53
60
  children: [
54
- fields.map((field) => /* @__PURE__ */ jsxs(Field.Root, {
61
+ fields.map((field) => field.type === "checkbox" ? /* @__PURE__ */ jsxs(Field.Root, {
62
+ name: field.name,
63
+ orientation: "horizontal",
64
+ children: [/* @__PURE__ */ jsx(Checkbox.Root, {
65
+ defaultChecked: initialValues?.[field.name] === SETTINGS_FORM_CHECKED,
66
+ disabled: field.readOnly,
67
+ children: /* @__PURE__ */ jsx(Checkbox.Indicator, {})
68
+ }), /* @__PURE__ */ jsxs(Field.Content, { children: [/* @__PURE__ */ jsx(Field.Label, { children: field.label }), field.description ? /* @__PURE__ */ jsx(Field.Description, { children: field.description }) : null] })]
69
+ }, field.name) : /* @__PURE__ */ jsxs(Field.Root, {
55
70
  name: field.name,
56
71
  children: [
57
72
  /* @__PURE__ */ jsx(Field.Label, { children: field.label }),
@@ -108,4 +123,4 @@ function SettingsFormDialog({ open, onOpenChange, title, description, ...content
108
123
  });
109
124
  }
110
125
  //#endregion
111
- export { SettingsFormDialog };
126
+ export { SETTINGS_FORM_CHECKED, SettingsFormDialog };
@@ -1,9 +1,9 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { $ as TerminalIcon, rt as XIcon } from "../../icons-B1Qw05te.js";
3
3
  import { IconButton } from "../foundations/IconButton.js";
4
- import { t as CopyButton } from "../../copy-button-CsNSSKYG.js";
5
4
  import { Badge } from "../foundations/Badge.js";
6
5
  import { ScrollArea } from "../foundations/ScrollArea.js";
6
+ import { t as CopyButton } from "../../copy-button-CsNSSKYG.js";
7
7
  import * as React from "react";
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
9
  import Anser from "anser";
@@ -175,7 +175,7 @@ function TerminalContent({ className, ref, ...props }) {
175
175
  ref: viewportRef,
176
176
  className: "terminal__content-viewport",
177
177
  onScroll: handleScroll,
178
- children: /* @__PURE__ */ jsxs("pre", {
178
+ children: /* @__PURE__ */ jsx(ScrollArea.Content, { children: /* @__PURE__ */ jsxs("pre", {
179
179
  className: "terminal__output",
180
180
  children: [segments.map((seg, i) => /* @__PURE__ */ jsx("span", {
181
181
  style: {
@@ -191,7 +191,7 @@ function TerminalContent({ className, ref, ...props }) {
191
191
  className: "terminal__cursor",
192
192
  "aria-hidden": "true"
193
193
  }) : null]
194
- })
194
+ }) })
195
195
  }), /* @__PURE__ */ jsx(ScrollArea.Scrollbar, {
196
196
  orientation: "vertical",
197
197
  children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {})
@@ -33,7 +33,7 @@ function ThemeModeControl({ showLabels = true, "aria-label": ariaLabel = "Theme"
33
33
  ].filter(Boolean).join(" ");
34
34
  return /* @__PURE__ */ jsx(RadioGroup.Root, {
35
35
  value: preference,
36
- onValueChange: (nextValue) => setPreference(nextValue),
36
+ onValueChange: setPreference,
37
37
  name,
38
38
  disabled,
39
39
  orientation: "horizontal",
@@ -3,8 +3,8 @@ import { W as RefreshIcon, f as ChevronDownIcon, i as ArrowRightIcon, r as Arrow
3
3
  import { Collapsible } from "../foundations/Collapsible.js";
4
4
  import { IconButton } from "../foundations/IconButton.js";
5
5
  import { Badge } from "../foundations/Badge.js";
6
- import { Input } from "../foundations/Input.js";
7
6
  import { ScrollArea } from "../foundations/ScrollArea.js";
7
+ import { Input } from "../foundations/Input.js";
8
8
  import * as React from "react";
9
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
10
  //#region src/components/general-purpose/WebPreview.tsx
@@ -262,9 +262,9 @@ function WebPreviewConsole({ className, logs = [], children, ref, ...props }) {
262
262
  unstyled: true,
263
263
  children: /* @__PURE__ */ jsxs(ScrollArea.Root, {
264
264
  className: "web-preview__console-scroll",
265
- children: [/* @__PURE__ */ jsxs(ScrollArea.Viewport, {
265
+ children: [/* @__PURE__ */ jsx(ScrollArea.Viewport, {
266
266
  className: "web-preview__console-viewport",
267
- children: [/* @__PURE__ */ jsx("ul", {
267
+ children: /* @__PURE__ */ jsxs(ScrollArea.Content, { children: [/* @__PURE__ */ jsx("ul", {
268
268
  className: "web-preview__console-list sigvelo-stack-list",
269
269
  children: logs.length === 0 ? /* @__PURE__ */ jsx("li", {
270
270
  className: "web-preview__console-empty",
@@ -287,7 +287,7 @@ function WebPreviewConsole({ className, logs = [], children, ref, ...props }) {
287
287
  })
288
288
  ]
289
289
  }, index))
290
- }), children]
290
+ }), children] })
291
291
  }), /* @__PURE__ */ jsx(ScrollArea.Scrollbar, {
292
292
  orientation: "vertical",
293
293
  children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {})
@@ -2,7 +2,8 @@ import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { k as LinkIcon } from "../../icons-B1Qw05te.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { Popover } from "../foundations/Popover.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-CM5gfmdq.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-Bk4nn7l-.js";
6
+ import { ToggleGroup } from "../foundations/ToggleGroup.js";
6
7
  import * as React from "react";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
9
  //#region src/components/nanites/AgentConnection.tsx
@@ -103,6 +104,7 @@ function AgentConnectionPanel({ className, commands: commandsProp, defaultTarget
103
104
  const Heading = headingLevel === 3 ? "h3" : "h2";
104
105
  const Wrapper = section ? "section" : "div";
105
106
  if (!selected) return null;
107
+ const selectedIndex = commands.indexOf(selected);
106
108
  return /* @__PURE__ */ jsxs(Wrapper, {
107
109
  className: cx("agent-connect", className),
108
110
  children: [
@@ -120,21 +122,24 @@ function AgentConnectionPanel({ className, commands: commandsProp, defaultTarget
120
122
  children: [/* @__PURE__ */ jsx(Heading, { children: "Connect Agent" }), /* @__PURE__ */ jsx("p", { children: selected.description })]
121
123
  })]
122
124
  }),
123
- /* @__PURE__ */ jsxs("fieldset", {
125
+ /* @__PURE__ */ jsxs(ToggleGroup.Root, {
126
+ render: /* @__PURE__ */ jsx("fieldset", {}),
124
127
  className: "agent-connect__targets",
128
+ size: "sm",
129
+ spacing: 1,
130
+ value: [String(selectedIndex)],
131
+ onValueChange: (nextValue) => {
132
+ const nextIndex = nextValue[0];
133
+ const nextCommand = nextIndex === void 0 ? void 0 : commands[Number(nextIndex)];
134
+ if (nextCommand) setTarget(nextCommand.target);
135
+ },
125
136
  children: [/* @__PURE__ */ jsx("legend", {
126
137
  className: "agent-connect__legend sigvelo-visually-hidden",
127
138
  children: "Agent connection target"
128
- }), commands.map((command) => /* @__PURE__ */ jsx(Button, {
129
- variant: "ghost",
130
- color: "neutral",
131
- size: "sm",
132
- "aria-pressed": command.target === selected.target,
133
- "data-selected": command.target === selected.target,
139
+ }), commands.map((command, index) => /* @__PURE__ */ jsx(ToggleGroup.Item, {
140
+ type: "button",
141
+ value: String(index),
134
142
  className: "agent-connect__target",
135
- onClick: () => {
136
- setTarget(command.target);
137
- },
138
143
  children: command.label
139
144
  }, command.target))]
140
145
  }),
@@ -3,7 +3,7 @@ import { r as ArrowLeftIcon } from "../../icons-B1Qw05te.js";
3
3
  import { TransitionSurface } from "../foundations/TransitionSurface.js";
4
4
  import { SubagentRunActions, SubagentRunMilestone, SubagentRunMilestones, SubagentRunProgress } from "../agents-sdk/SubagentRunDetails.js";
5
5
  import { SubagentRunIndicator, getSubagentRunName } from "../agents-sdk/SubagentRunIndicator.js";
6
- import { t as ThinkChat } from "../../ThinkChat-DbzqSTBt.js";
6
+ import { t as ThinkChat } from "../../ThinkChat-ByR-QT_D.js";
7
7
  import { AppTopBar } from "../general-purpose/AppTopBar.js";
8
8
  import { NaniteMark } from "./NaniteScene.js";
9
9
  import * as React from "react";
@@ -1,4 +1,4 @@
1
- import { getMcpServerIconSrc, getMcpServerRuntimeState } from "./utils/mcp-server-catalog.js";
1
+ import { 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
@@ -9,6 +9,22 @@ function getMcpServerConnectionKind(server) {
9
9
  if (state === "connecting" || state === "discovering" || state === "connected" && !server.error) return "connecting";
10
10
  return "reconnect";
11
11
  }
12
+ /**
13
+ * Resolve one catalog card to the exact Agents SDK entry that owns its live
14
+ * connection state. An explicit server ID is authoritative for authorization
15
+ * flows and deliberately never falls back to a matching catalog entry.
16
+ */
17
+ function getMcpServerProjection(card, mcp, serverId) {
18
+ const assignedServer = serverId === void 0 ? void 0 : mcp?.servers[serverId];
19
+ const entry = serverId === void 0 ? getMcpServerEntry(card, mcp) : assignedServer ? [serverId, assignedServer] : void 0;
20
+ const server = entry?.[1];
21
+ return {
22
+ connectionKind: getMcpServerConnectionKind(server),
23
+ runtimeState: server ? getMcpServerRuntimeState(server) : void 0,
24
+ server,
25
+ serverId: entry?.[0]
26
+ };
27
+ }
12
28
  function McpServerIcon({ server, size = "lg", variant }) {
13
29
  const src = getMcpServerIconSrc(server);
14
30
  return /* @__PURE__ */ jsxs(AppIcon.Root, {
@@ -23,4 +39,4 @@ function McpServerIcon({ server, size = "lg", variant }) {
23
39
  });
24
40
  }
25
41
  //#endregion
26
- export { getMcpServerConnectionKind as n, McpServerIcon as t };
42
+ export { getMcpServerProjection as n, McpServerIcon as t };
@@ -0,0 +1,32 @@
1
+ //#region src/components/_internal/message-scroller.ts
2
+ const messageScrollerContract = {
3
+ root: {
4
+ className: "message-scroller",
5
+ slot: "message-scroller"
6
+ },
7
+ viewport: {
8
+ ariaLabel: "Messages",
9
+ className: "message-scroller__viewport",
10
+ role: "region",
11
+ slot: "message-scroller-viewport",
12
+ tabIndex: 0
13
+ },
14
+ content: {
15
+ ariaRelevant: "additions",
16
+ className: "message-scroller__content",
17
+ role: "log",
18
+ slot: "message-scroller-content",
19
+ virtualClassName: "message-scroller__virtual-content"
20
+ },
21
+ item: {
22
+ className: "message-scroller__item",
23
+ slot: "message-scroller-item",
24
+ virtualClassName: "message-scroller__virtual-item"
25
+ },
26
+ button: {
27
+ className: "message-scroller__button",
28
+ slot: "message-scroller-button"
29
+ }
30
+ };
31
+ //#endregion
32
+ export { messageScrollerContract as t };
@@ -0,0 +1,74 @@
1
+ import "react";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/components/_internal/provider-logos.tsx
4
+ function Svg({ children, size = 16, ...props }) {
5
+ return /* @__PURE__ */ jsx("svg", {
6
+ width: size,
7
+ height: size,
8
+ viewBox: "0 0 24 24",
9
+ fill: "currentColor",
10
+ xmlns: "http://www.w3.org/2000/svg",
11
+ "aria-hidden": "true",
12
+ focusable: "false",
13
+ ...props,
14
+ children
15
+ });
16
+ }
17
+ const OpenAILogo = (props) => /* @__PURE__ */ jsx(Svg, {
18
+ ...props,
19
+ 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
+ });
21
+ const AnthropicLogo = (props) => /* @__PURE__ */ jsxs(Svg, {
22
+ ...props,
23
+ 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
+ });
25
+ const GoogleLogo = (props) => /* @__PURE__ */ jsx(Svg, {
26
+ ...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" })
28
+ });
29
+ const MetaLogo = (props) => /* @__PURE__ */ jsx(Svg, {
30
+ ...props,
31
+ 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
+ });
33
+ const KimiLogo = (props) => /* @__PURE__ */ jsxs(Svg, {
34
+ ...props,
35
+ children: [/* @__PURE__ */ jsx("circle", {
36
+ cx: "12",
37
+ cy: "12",
38
+ r: "9.5",
39
+ fill: "none",
40
+ stroke: "currentColor",
41
+ strokeWidth: "1.5"
42
+ }), /* @__PURE__ */ jsx("path", {
43
+ d: "M8 7.5v9M8 12l4.5-4.5M8 12l5 4.5M14 7.5h2.5v9H14z",
44
+ fill: "none",
45
+ stroke: "currentColor",
46
+ strokeWidth: "1.5",
47
+ strokeLinecap: "round",
48
+ strokeLinejoin: "round"
49
+ })]
50
+ });
51
+ const FallbackLogo = (props) => /* @__PURE__ */ jsx(Svg, {
52
+ ...props,
53
+ children: /* @__PURE__ */ jsx("circle", {
54
+ cx: "12",
55
+ cy: "12",
56
+ r: "3"
57
+ })
58
+ });
59
+ /**
60
+ * Resolves a provider string to its logo component.
61
+ * Unknown providers get a neutral dot fallback.
62
+ */
63
+ function ProviderLogo({ provider, ...props }) {
64
+ switch (provider.toLowerCase()) {
65
+ case "openai": return /* @__PURE__ */ jsx(OpenAILogo, { ...props });
66
+ case "anthropic": return /* @__PURE__ */ jsx(AnthropicLogo, { ...props });
67
+ case "google": return /* @__PURE__ */ jsx(GoogleLogo, { ...props });
68
+ case "meta": return /* @__PURE__ */ jsx(MetaLogo, { ...props });
69
+ case "kimi": return /* @__PURE__ */ jsx(KimiLogo, { ...props });
70
+ default: return /* @__PURE__ */ jsx(FallbackLogo, { ...props });
71
+ }
72
+ }
73
+ //#endregion
74
+ export { ProviderLogo as t };
@@ -436,6 +436,15 @@
436
436
  block-size: var(--sigvelo-text-sm);
437
437
  }
438
438
 
439
+ .agent-chat__queued-content {
440
+ font-size: inherit;
441
+ line-height: inherit;
442
+ }
443
+
444
+ .agent-chat__queued-actions {
445
+ opacity: 1;
446
+ }
447
+
439
448
  .agent-chat__queued-action {
440
449
  flex: none;
441
450
  font-weight: var(--sigvelo-font-weight-normal);
@@ -49,35 +49,18 @@
49
49
  text-wrap: pretty;
50
50
  }
51
51
 
52
- .agent-connect__targets {
52
+ .agent-connect .agent-connect__targets {
53
53
  display: grid;
54
54
  grid-template-columns: repeat(4, minmax(0, 1fr));
55
- gap: var(--sigvelo-spacing-1);
56
55
  min-inline-size: 0;
57
56
  margin: 0;
58
57
  padding: var(--sigvelo-spacing-1);
59
58
  border: var(--sigvelo-border-style) var(--sigvelo-border-width)
60
59
  var(--sigvelo-color-neutral-border-subtle);
61
- border-radius: var(--sigvelo-radius-md);
62
- background: var(--sigvelo-color-neutral-bg-subtle);
63
60
  }
64
61
 
65
62
  .agent-connect__target {
66
- display: inline-flex;
67
- align-items: center;
68
- justify-content: center;
69
- min-block-size: var(--sigvelo-spacing-7);
70
63
  min-inline-size: 0;
71
- padding: 0 var(--sigvelo-spacing-2);
72
- border: 0;
73
- border-radius: var(--sigvelo-radius-sm);
74
- background: transparent;
75
- color: var(--sigvelo-color-text-muted);
76
- cursor: pointer;
77
- font: inherit;
78
- font-size: var(--sigvelo-text-xs);
79
- font-weight: var(--sigvelo-font-weight-semibold);
80
- line-height: var(--sigvelo-leading-tight);
81
64
  overflow-wrap: anywhere;
82
65
  text-align: center;
83
66
  }
@@ -92,23 +75,13 @@
92
75
  }
93
76
 
94
77
  @media (pointer: coarse) {
95
- .agent-connect__target {
78
+ .agent-connect .agent-connect__target {
96
79
  min-block-size: var(--sigvelo-spacing-10);
97
80
  padding-inline: var(--sigvelo-spacing-3);
98
81
  }
99
82
  }
100
83
 
101
- .agent-connect__target:hover {
102
- color: var(--sigvelo-color-text);
103
- background: color-mix(in oklab, var(--sigvelo-color-neutral-bg-muted), transparent 38%);
104
- }
105
-
106
- .agent-connect__target:focus-visible {
107
- outline: none;
108
- box-shadow: var(--sigvelo-recipe-focus-shadow);
109
- }
110
-
111
- .agent-connect__target[data-selected="true"] {
84
+ .agent-connect .agent-connect__target[data-pressed] {
112
85
  border-color: var(--sigvelo-color-primary-border-muted);
113
86
  background: var(--sigvelo-color-surface);
114
87
  color: var(--sigvelo-color-text);
@@ -174,7 +147,7 @@
174
147
  border-color: ButtonText;
175
148
  }
176
149
 
177
- .agent-connect__target[data-selected="true"] {
150
+ .agent-connect .agent-connect__target[data-pressed] {
178
151
  outline: var(--sigvelo-focus-ring-forced);
179
152
  outline-offset: -2px;
180
153
  }
@@ -3,7 +3,6 @@
3
3
  .alert-dialog__backdrop {
4
4
  background-color: var(--sigvelo-color-backdrop);
5
5
  backdrop-filter: var(--sigvelo-glass-filter);
6
- z-index: var(--sigvelo-z-overlay);
7
6
  }
8
7
 
9
8
  .alert-dialog__popup {
@@ -13,7 +12,6 @@
13
12
  inset-block-start: 50%;
14
13
  inset-inline-start: 50%;
15
14
  translate: -50% -50%;
16
- z-index: var(--sigvelo-z-overlay);
17
15
  inline-size: calc(100% - var(--sigvelo-control-height-sm));
18
16
  max-inline-size: 28rem;
19
17
  max-block-size: calc(100dvb - var(--sigvelo-control-height-sm));
@@ -2,7 +2,9 @@
2
2
  * Base UI exposes presence state on popup parts. Keep its state contract in
3
3
  * CSS so all anchored surfaces enter, exit, and respect reduced motion alike.
4
4
  */
5
- .base-ui-positioner {
5
+ .base-ui-positioner,
6
+ .base-ui-backdrop,
7
+ .base-ui-modal-popup {
6
8
  z-index: var(--sigvelo-z-overlay);
7
9
  }
8
10
 
@@ -170,26 +172,26 @@
170
172
  .base-ui-adaptive-viewport[data-activation-direction~="left"] > [data-current][data-starting-style],
171
173
  .base-ui-adaptive-viewport[data-activation-direction~="right"]
172
174
  > [data-previous][data-ending-style] {
173
- translate: 25% 0;
175
+ translate: -25% 0;
174
176
  opacity: 0;
175
177
  }
176
178
 
177
179
  .base-ui-adaptive-viewport[data-activation-direction~="right"]
178
180
  > [data-current][data-starting-style],
179
181
  .base-ui-adaptive-viewport[data-activation-direction~="left"] > [data-previous][data-ending-style] {
180
- translate: -25% 0;
182
+ translate: 25% 0;
181
183
  opacity: 0;
182
184
  }
183
185
 
184
186
  .base-ui-adaptive-viewport[data-activation-direction~="up"] > [data-current][data-starting-style],
185
187
  .base-ui-adaptive-viewport[data-activation-direction~="down"] > [data-previous][data-ending-style] {
186
- translate: 0 25%;
188
+ translate: 0 -25%;
187
189
  opacity: 0;
188
190
  }
189
191
 
190
192
  .base-ui-adaptive-viewport[data-activation-direction~="down"] > [data-current][data-starting-style],
191
193
  .base-ui-adaptive-viewport[data-activation-direction~="up"] > [data-previous][data-ending-style] {
192
- translate: 0 -25%;
194
+ translate: 0 25%;
193
195
  opacity: 0;
194
196
  }
195
197
 
@@ -96,8 +96,7 @@
96
96
  line-height: var(--sigvelo-leading-compact);
97
97
  }
98
98
 
99
- .chatgpt-sign-in__brand-mark,
100
- .chatgpt-sign-in__logo {
99
+ .chatgpt-sign-in__brand-mark {
101
100
  display: inline-flex;
102
101
  }
103
102
 
@@ -198,7 +197,10 @@
198
197
  scale: 1.06;
199
198
  }
200
199
 
201
- .chatgpt-sign-in__logo {
200
+ .chatgpt-sign-in__button .chatgpt-sign-in__logo {
201
+ display: block;
202
+ inline-size: var(--sigvelo-control-icon-size-sm);
203
+ block-size: var(--sigvelo-control-icon-size-sm);
202
204
  color: inherit;
203
205
  }
204
206
 
@@ -15,7 +15,6 @@
15
15
  .dialog__backdrop {
16
16
  background-color: var(--sigvelo-color-backdrop);
17
17
  backdrop-filter: var(--sigvelo-glass-filter);
18
- z-index: var(--sigvelo-z-overlay);
19
18
  }
20
19
 
21
20
  .dialog__popup {
@@ -25,7 +24,6 @@
25
24
  inset-block-start: 50%;
26
25
  inset-inline-start: 50%;
27
26
  translate: -50% -50%;
28
- z-index: var(--sigvelo-z-overlay);
29
27
  inline-size: calc(100% - var(--sigvelo-control-height-sm));
30
28
  max-inline-size: 32rem;
31
29
  max-block-size: calc(100dvb - var(--sigvelo-spacing-8));
@@ -40,12 +40,16 @@
40
40
  color: var(--sigvelo-color-text-muted);
41
41
  }
42
42
 
43
- .model-selector__input.input {
43
+ .model-selector__input {
44
+ box-sizing: border-box;
44
45
  flex: 1;
45
46
  min-inline-size: 0;
47
+ inline-size: 100%;
46
48
  block-size: auto;
49
+ margin: 0;
47
50
  padding: 0;
48
51
  border: none;
52
+ border-radius: 0;
49
53
  outline: none;
50
54
  background-color: transparent;
51
55
  color: var(--sigvelo-color-text);
@@ -53,7 +57,7 @@
53
57
  font-size: var(--sigvelo-text-sm);
54
58
  }
55
59
 
56
- .model-selector__input.input:focus-visible {
60
+ .model-selector__input:focus-visible {
57
61
  box-shadow: none;
58
62
  }
59
63
 
@@ -66,9 +70,28 @@
66
70
  }
67
71
 
68
72
  .model-selector__list {
69
- flex: 1;
70
- overflow: auto;
73
+ position: relative;
74
+ display: flex;
75
+ flex: 0 1 auto;
76
+ min-block-size: 0;
77
+ max-block-size: min(26rem, calc(100dvb - var(--sigvelo-spacing-24)));
78
+ overflow: hidden;
79
+ }
80
+
81
+ .model-selector__list-viewport {
82
+ flex: 1 1 auto;
83
+ min-block-size: 0;
84
+ overscroll-behavior: contain;
85
+ scroll-padding-block: var(--sigvelo-spacing-1);
86
+ }
87
+
88
+ .model-selector__list-content {
89
+ min-inline-size: 100%;
90
+ }
91
+
92
+ .model-selector__options {
71
93
  padding-block: var(--sigvelo-spacing-1);
94
+ outline: none;
72
95
  }
73
96
 
74
97
  .model-selector__group {
@@ -106,11 +129,11 @@
106
129
  }
107
130
 
108
131
  .model-selector__item:hover:not(:disabled):not([data-disabled]),
109
- .model-selector__item:focus-visible {
132
+ .model-selector__item[data-highlighted] {
110
133
  background-color: var(--sigvelo-color-neutral-bg-subtle);
111
134
  }
112
135
 
113
- .model-selector__item:focus-visible {
136
+ .model-selector__item[data-highlighted] {
114
137
  outline: none;
115
138
  box-shadow: var(--sigvelo-recipe-focus-shadow-inset);
116
139
  }
@@ -135,11 +158,6 @@
135
158
  }
136
159
  }
137
160
 
138
- /* Hide empty state when any group sibling has visible items. */
139
- .model-selector__list:has(.model-selector__group) .model-selector__empty {
140
- display: none;
141
- }
142
-
143
161
  .model-selector__separator {
144
162
  margin-block: var(--sigvelo-spacing-1);
145
163
  margin-inline: 0;
@@ -176,7 +194,7 @@
176
194
  }
177
195
 
178
196
  @media (forced-colors: active) {
179
- .model-selector__item:focus-visible,
197
+ .model-selector__item[data-highlighted],
180
198
  .model-selector__item:hover {
181
199
  outline: var(--sigvelo-focus-ring-forced);
182
200
  outline-offset: -2px;
@@ -1,5 +1,4 @@
1
1
  .popover__backdrop {
2
- z-index: var(--sigvelo-z-overlay);
3
2
  background-color: color-mix(in oklab, var(--sigvelo-color-text), transparent 50%);
4
3
  }
5
4
 
@@ -16,10 +16,6 @@
16
16
  border-radius: var(--sigvelo-radius-sm);
17
17
  }
18
18
 
19
- .preview-card__backdrop {
20
- z-index: var(--sigvelo-z-overlay);
21
- }
22
-
23
19
  .preview-card__popup {
24
20
  --sigvelo-recipe-surface-padding: var(--sigvelo-spacing-3);
25
21
 
@@ -33,19 +33,7 @@
33
33
 
34
34
  .pricing-page__billing-toggle {
35
35
  display: flex;
36
- flex-direction: column;
37
- align-items: center;
38
- gap: var(--sigvelo-spacing-4);
39
- }
40
-
41
- .pricing-page__toggle-options {
42
- display: flex;
43
- align-items: center;
44
- gap: var(--sigvelo-spacing-2);
45
- }
46
-
47
- .pricing-page__toggle-label {
48
- font-size: var(--sigvelo-text-xs);
36
+ justify-content: center;
49
37
  }
50
38
 
51
39
  .pricing-page__switch-container {