@mcp-b/react-components 0.11.0 → 0.12.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 (83) hide show
  1. package/dist/{AgentChat-B9LD_WF1.d.ts → AgentChat-CRmsKg9B.d.ts} +10 -6
  2. package/dist/{BrowserLiveView-ZktFZiMD.d.ts → BrowserLiveView-BV5qgFgI.d.ts} +11 -10
  3. package/dist/{BrowserReplay-6G-mnwcn.d.ts → BrowserReplay-xWvRjRAC.d.ts} +2 -1
  4. package/dist/{Menu-B5vDqZe_.d.ts → Menu-BLhnNnRK.d.ts} +3 -0
  5. package/dist/{ModelSelector-DXtpcRmT.js → ModelSelector-BB-xB-Es.js} +16 -13
  6. package/dist/{PromptInput-D6-G24p7.d.ts → PromptInput-IyM6ZETj.d.ts} +13 -45
  7. package/dist/ThinkChat-B3wYahor.js +190 -0
  8. package/dist/{ThinkChatActivity-B2UD95My.d.ts → ThinkChatActivity-F4KFPcJA.d.ts} +4 -4
  9. package/dist/ThinkChatContext-C3Eb1Xpi.d.ts +16 -0
  10. package/dist/{ThinkChatToolParts-DnUiZgCC.d.ts → ThinkChatToolParts-Cv4o7j6F.d.ts} +13 -5
  11. package/dist/components/AgentChat.d.ts +1 -1
  12. package/dist/components/AgentChat.js +57 -23
  13. package/dist/components/AgentConnection.js +4 -20
  14. package/dist/components/Badge.js +1 -15
  15. package/dist/components/BrowserLiveView.d.ts +1 -1
  16. package/dist/components/BrowserLiveView.js +14 -10
  17. package/dist/components/BrowserReplay.d.ts +1 -1
  18. package/dist/components/BrowserRunPanel.js +91 -55
  19. package/dist/components/ChatGptSignInScreen.js +1 -1
  20. package/dist/components/CodexModelSelector.d.ts +63 -0
  21. package/dist/components/CodexModelSelector.js +148 -0
  22. package/dist/components/Commit.d.ts +2 -2
  23. package/dist/components/Commit.js +10 -22
  24. package/dist/components/Conversation.d.ts +2 -6
  25. package/dist/components/Conversation.js +2 -3
  26. package/dist/components/EnvironmentVariables.d.ts +2 -7
  27. package/dist/components/EnvironmentVariables.js +10 -33
  28. package/dist/components/Marker.js +1 -15
  29. package/dist/components/McpServerPicker.d.ts +31 -6
  30. package/dist/components/McpServerPicker.js +129 -67
  31. package/dist/components/Menu.d.ts +1 -1
  32. package/dist/components/Menu.js +2 -2
  33. package/dist/components/Message.d.ts +3 -2
  34. package/dist/components/Message.js +10 -3
  35. package/dist/components/ModelSelector.d.ts +11 -8
  36. package/dist/components/ModelSelector.js +1 -1
  37. package/dist/components/PromptInput.d.ts +2 -2
  38. package/dist/components/PromptInput.js +49 -98
  39. package/dist/components/Queue.d.ts +1 -12
  40. package/dist/components/Reasoning.js +2 -15
  41. package/dist/components/Stepper.js +1 -7
  42. package/dist/components/ThinkChat.d.ts +30 -30
  43. package/dist/components/ThinkChat.js +1 -152
  44. package/dist/components/ThinkChatActivity.d.ts +2 -2
  45. package/dist/components/ThinkChatActivity.js +3 -10
  46. package/dist/components/ThinkChatContext.d.ts +2 -2
  47. package/dist/components/ThinkChatContext.js +9 -2
  48. package/dist/components/ThinkChatToolPanels.d.ts +1 -1
  49. package/dist/components/ThinkChatToolPanels.js +19 -7
  50. package/dist/components/ThinkChatToolParts.d.ts +1 -1
  51. package/dist/components/ThinkExecutionWorkbench.d.ts +10 -7
  52. package/dist/components/ThinkExecutionWorkbench.js +382 -359
  53. package/dist/components/ThinkFullApp.d.ts +16 -13
  54. package/dist/components/ThinkFullApp.js +28 -18
  55. package/dist/components/ThinkThreadPicker.d.ts +1 -31
  56. package/dist/components/ThinkThreadPicker.js +32 -171
  57. package/dist/components/ThinkThreadShell.d.ts +35 -0
  58. package/dist/components/ThinkThreadShell.js +146 -0
  59. package/dist/components/WorkspaceExplorer.js +3 -1
  60. package/dist/merge-refs-DF_7w2x_.js +18 -0
  61. package/dist/styles/agent-chat.css +4 -1
  62. package/dist/styles/browser-run-panel.css +57 -110
  63. package/dist/styles/codex-model-selector.css +197 -0
  64. package/dist/styles/index.css +4 -1
  65. package/dist/styles/mcp-server-picker.css +62 -15
  66. package/dist/styles/message.css +1 -1
  67. package/dist/styles/model-selector.css +20 -8
  68. package/dist/styles/prompt-input.css +5 -0
  69. package/dist/styles/streamdown.css +2 -48
  70. package/dist/styles/think-execution-workbench.css +337 -0
  71. package/dist/styles/think-full-app.css +15 -390
  72. package/dist/styles/think-resize-handle.css +33 -0
  73. package/dist/styles/think-thread-picker.css +0 -238
  74. package/dist/styles/think-thread-shell.css +219 -0
  75. package/dist/styles/workspace-explorer.css +8 -2
  76. package/dist/summarize-tool-input-BUJsENSn.js +12 -0
  77. package/package.json +2 -2
  78. package/dist/ThinkChatContext-BLAAb8J5.d.ts +0 -28
  79. package/dist/components/McpServerConnections.d.ts +0 -41
  80. package/dist/components/McpServerConnections.js +0 -188
  81. package/dist/components/useStickToBottom.d.ts +0 -33
  82. package/dist/components/useStickToBottom.js +0 -107
  83. package/dist/styles/mcp-server-connections.css +0 -145
@@ -1,188 +0,0 @@
1
- import { t as cx } from "../class-names-9UtZwb0J.js";
2
- import { F as WarningIcon, L as XIcon, M as SpinnerIcon, a as CheckIcon, k as RefreshIcon } from "../icons-D2Q5n5C1.js";
3
- import { Button } from "./Button.js";
4
- import { Badge } from "./Badge.js";
5
- import * as React from "react";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- //#region src/components/McpServerConnections.tsx
8
- /**
9
- * Runtime MCP server list. Add servers with `McpServerPicker`; render connected
10
- * state here from the upstream Agents SDK `MCPServersState`.
11
- */
12
- function McpServerConnections({ className, heading = "Connected MCP servers", mcp, onAuthorize, onDisconnect, onRefresh, onRemove, onRetry, ref, ...props }) {
13
- const [pendingAction, setPendingAction] = React.useState(null);
14
- const entries = Object.entries(mcp.servers);
15
- async function runAction(action, serverId, server, handler) {
16
- if (!handler) return;
17
- setPendingAction(`${action}:${serverId}`);
18
- try {
19
- await handler(serverId, server);
20
- } finally {
21
- setPendingAction(null);
22
- }
23
- }
24
- return /* @__PURE__ */ jsxs("section", {
25
- ref,
26
- className: cx("mcp-server-connections", className),
27
- ...props,
28
- children: [/* @__PURE__ */ jsxs("div", {
29
- className: "mcp-server-connections__header",
30
- children: [/* @__PURE__ */ jsx("h2", { children: heading }), /* @__PURE__ */ jsxs("span", {
31
- className: "mcp-server-connections__summary",
32
- children: [
33
- entries.length,
34
- " ",
35
- entries.length === 1 ? "server" : "servers"
36
- ]
37
- })]
38
- }), entries.length === 0 ? /* @__PURE__ */ jsx("p", {
39
- className: "mcp-server-connections__empty",
40
- children: "No MCP servers connected."
41
- }) : /* @__PURE__ */ jsx("ul", {
42
- className: "mcp-server-connections__list",
43
- role: "list",
44
- children: entries.map(([serverId, server]) => {
45
- const counts = getServerCapabilityCounts(mcp, serverId);
46
- const status = getServerStatus(server);
47
- const state = server.state;
48
- const pending = (action) => pendingAction === `${action}:${serverId}`;
49
- return /* @__PURE__ */ jsxs("li", {
50
- className: "mcp-server-connections__item",
51
- children: [/* @__PURE__ */ jsxs("div", {
52
- className: "mcp-server-connections__main",
53
- children: [
54
- /* @__PURE__ */ jsxs("div", {
55
- className: "mcp-server-connections__title-row",
56
- children: [/* @__PURE__ */ jsx("span", {
57
- className: "mcp-server-connections__name",
58
- children: server.name
59
- }), /* @__PURE__ */ jsxs(Badge, {
60
- color: status.color,
61
- size: "sm",
62
- className: "mcp-server-connections__status",
63
- children: [status.icon, status.label]
64
- })]
65
- }),
66
- /* @__PURE__ */ jsx("span", {
67
- className: "mcp-server-connections__url",
68
- children: server.server_url
69
- }),
70
- server.error ? /* @__PURE__ */ jsx("p", {
71
- className: "mcp-server-connections__error",
72
- children: server.error
73
- }) : null,
74
- server.instructions ? /* @__PURE__ */ jsx("p", {
75
- className: "mcp-server-connections__instructions",
76
- children: server.instructions
77
- }) : null,
78
- /* @__PURE__ */ jsxs("p", {
79
- className: "mcp-server-connections__capabilities",
80
- children: [
81
- counts.tools,
82
- " tools, ",
83
- counts.prompts,
84
- " prompts, ",
85
- counts.resources,
86
- " resources"
87
- ]
88
- })
89
- ]
90
- }), /* @__PURE__ */ jsxs("div", {
91
- className: "mcp-server-connections__actions",
92
- children: [
93
- state === "authenticating" && onAuthorize ? /* @__PURE__ */ jsx(Button, {
94
- type: "button",
95
- size: "xs",
96
- variant: "outline",
97
- color: "primary",
98
- disabled: pending("authorize"),
99
- onClick: () => void runAction("authorize", serverId, server, onAuthorize),
100
- children: pending("authorize") ? "Opening" : "Authorize"
101
- }) : null,
102
- state === "failed" && onRetry ? /* @__PURE__ */ jsxs(Button, {
103
- type: "button",
104
- size: "xs",
105
- variant: "outline",
106
- color: "neutral",
107
- disabled: pending("retry"),
108
- onClick: () => void runAction("retry", serverId, server, onRetry),
109
- children: [/* @__PURE__ */ jsx(RefreshIcon, {}), pending("retry") ? "Retrying" : "Retry"]
110
- }) : null,
111
- (state === "ready" || state === "connected") && onRefresh ? /* @__PURE__ */ jsx(Button, {
112
- type: "button",
113
- size: "icon-xs",
114
- variant: "ghost",
115
- color: "neutral",
116
- "aria-label": `Refresh ${server.name} capabilities`,
117
- disabled: pending("refresh"),
118
- onClick: () => void runAction("refresh", serverId, server, onRefresh),
119
- children: /* @__PURE__ */ jsx(RefreshIcon, {})
120
- }) : null,
121
- state !== "failed" && onDisconnect ? /* @__PURE__ */ jsx(Button, {
122
- type: "button",
123
- size: "xs",
124
- variant: "outline",
125
- color: "neutral",
126
- disabled: pending("disconnect"),
127
- onClick: () => void runAction("disconnect", serverId, server, onDisconnect),
128
- children: pending("disconnect") ? "Disconnecting" : "Disconnect"
129
- }) : null,
130
- onRemove ? /* @__PURE__ */ jsx(Button, {
131
- type: "button",
132
- size: "icon-xs",
133
- variant: "ghost",
134
- color: "destructive",
135
- "aria-label": `Remove ${server.name}`,
136
- disabled: pending("remove"),
137
- onClick: () => void runAction("remove", serverId, server, onRemove),
138
- children: /* @__PURE__ */ jsx(XIcon, {})
139
- }) : null
140
- ]
141
- })]
142
- }, serverId);
143
- })
144
- })]
145
- });
146
- }
147
- function getServerCapabilityCounts(mcp, serverId) {
148
- return {
149
- tools: mcp.tools.filter((tool) => tool.serverId === serverId).length,
150
- prompts: mcp.prompts.filter((prompt) => prompt.serverId === serverId).length,
151
- resources: mcp.resources.filter((resource) => resource.serverId === serverId).length
152
- };
153
- }
154
- function getServerStatus(server) {
155
- const state = server.state;
156
- if (state === "ready") return {
157
- color: "success",
158
- icon: /* @__PURE__ */ jsx(CheckIcon, {}),
159
- label: "Ready"
160
- };
161
- if (state === "failed") return {
162
- color: "destructive",
163
- icon: /* @__PURE__ */ jsx(WarningIcon, {}),
164
- label: "Failed"
165
- };
166
- if (state === "authenticating") return {
167
- color: "warning",
168
- icon: /* @__PURE__ */ jsx(WarningIcon, {}),
169
- label: "Authorize"
170
- };
171
- if (state === "connecting") return {
172
- color: "neutral",
173
- icon: /* @__PURE__ */ jsx(SpinnerIcon, { className: "mcp-server-connections__spinner" }),
174
- label: "Connecting"
175
- };
176
- if (state === "discovering") return {
177
- color: "neutral",
178
- icon: /* @__PURE__ */ jsx(SpinnerIcon, { className: "mcp-server-connections__spinner" }),
179
- label: "Discovering"
180
- };
181
- return {
182
- color: "neutral",
183
- icon: /* @__PURE__ */ jsx(CheckIcon, {}),
184
- label: "Connected"
185
- };
186
- }
187
- //#endregion
188
- export { McpServerConnections };
@@ -1,33 +0,0 @@
1
- //#region src/components/useStickToBottom.d.ts
2
- interface UseStickToBottomOptions {
3
- /**
4
- * How close to the bottom (in pixels) still counts as "at bottom" for the
5
- * sticky behavior. Larger values keep the viewport pinned through small
6
- * scroll jitter.
7
- */
8
- slackPx?: number;
9
- }
10
- interface UseStickToBottomResult {
11
- /** Attach to the scrolling element. */
12
- viewportRef: (element: HTMLElement | null) => void;
13
- /**
14
- * Attach to the element whose size determines whether the viewport
15
- * overflows. Typically the immediate child of the viewport.
16
- */
17
- contentRef: (element: HTMLElement | null) => void;
18
- /** True while the viewport is pinned within `slackPx` of the bottom. */
19
- isAtBottom: boolean;
20
- /** Imperatively scroll the viewport to its bottom. */
21
- scrollToBottom: (behavior?: ScrollBehavior) => void;
22
- }
23
- /**
24
- * Pin a scrollable viewport to the bottom as its content grows, unless the
25
- * user has scrolled up.
26
- *
27
- * @deprecated Use MessageScroller for chat transcripts. Keep this only for
28
- * standalone streaming panes that do not need transcript row anchoring,
29
- * history prepending, visibility tracking, or jump-to-message behavior.
30
- */
31
- declare function useStickToBottom(options?: UseStickToBottomOptions): UseStickToBottomResult;
32
- //#endregion
33
- export { UseStickToBottomOptions, UseStickToBottomResult, useStickToBottom };
@@ -1,107 +0,0 @@
1
- import * as React from "react";
2
- //#region src/components/useStickToBottom.ts
3
- const DEFAULT_STICK_SLACK_PX = 160;
4
- /**
5
- * Pin a scrollable viewport to the bottom as its content grows, unless the
6
- * user has scrolled up.
7
- *
8
- * @deprecated Use MessageScroller for chat transcripts. Keep this only for
9
- * standalone streaming panes that do not need transcript row anchoring,
10
- * history prepending, visibility tracking, or jump-to-message behavior.
11
- */
12
- function useStickToBottom(options = {}) {
13
- const slackPx = options.slackPx ?? DEFAULT_STICK_SLACK_PX;
14
- const viewportElementRef = React.useRef(null);
15
- const contentElementRef = React.useRef(null);
16
- const [viewportElement, setViewportElement] = React.useState(null);
17
- const [contentElement, setContentElement] = React.useState(null);
18
- const [isAtBottom, setIsAtBottom] = React.useState(true);
19
- const isAtBottomRef = React.useRef(true);
20
- const didInitialScrollRef = React.useRef(false);
21
- const viewportRef = React.useCallback((element) => {
22
- viewportElementRef.current = element;
23
- setViewportElement((prev) => prev === element ? prev : element);
24
- }, []);
25
- const contentRef = React.useCallback((element) => {
26
- contentElementRef.current = element;
27
- setContentElement((prev) => prev === element ? prev : element);
28
- }, []);
29
- React.useLayoutEffect(() => {
30
- const el = viewportElement;
31
- const observed = contentElement ?? el?.firstElementChild;
32
- if (!el || !observed) return;
33
- if (!didInitialScrollRef.current) {
34
- el.scrollTo({
35
- top: el.scrollHeight,
36
- behavior: "auto"
37
- });
38
- didInitialScrollRef.current = true;
39
- }
40
- const readIsAtBottom = () => el.scrollHeight - el.scrollTop - el.clientHeight < slackPx;
41
- let lastInteractionAt = 0;
42
- const markInteraction = () => {
43
- lastInteractionAt = Date.now();
44
- };
45
- const isUserResize = () => Date.now() - lastInteractionAt < 600;
46
- const updateIsAtBottom = () => {
47
- const next = readIsAtBottom();
48
- if (isAtBottomRef.current === next) return;
49
- isAtBottomRef.current = next;
50
- setIsAtBottom(next);
51
- };
52
- let resizeFrameId = null;
53
- const flushResize = () => {
54
- resizeFrameId = null;
55
- if (!isAtBottomRef.current || isUserResize()) {
56
- updateIsAtBottom();
57
- return;
58
- }
59
- el.scrollTo({
60
- top: el.scrollHeight,
61
- behavior: "auto"
62
- });
63
- updateIsAtBottom();
64
- };
65
- const scheduleResize = () => {
66
- if (resizeFrameId !== null) return;
67
- resizeFrameId = window.requestAnimationFrame(flushResize);
68
- };
69
- const handleScroll = () => {
70
- updateIsAtBottom();
71
- };
72
- handleScroll();
73
- el.addEventListener("scroll", handleScroll, { passive: true });
74
- el.addEventListener("pointerdown", markInteraction, { passive: true });
75
- el.addEventListener("keydown", markInteraction, { passive: true });
76
- const observer = new ResizeObserver(() => {
77
- scheduleResize();
78
- });
79
- observer.observe(observed);
80
- return () => {
81
- if (resizeFrameId !== null) window.cancelAnimationFrame(resizeFrameId);
82
- el.removeEventListener("scroll", handleScroll);
83
- el.removeEventListener("pointerdown", markInteraction);
84
- el.removeEventListener("keydown", markInteraction);
85
- observer.disconnect();
86
- };
87
- }, [
88
- contentElement,
89
- viewportElement,
90
- slackPx
91
- ]);
92
- return {
93
- viewportRef,
94
- contentRef,
95
- isAtBottom,
96
- scrollToBottom: React.useCallback((behavior = "smooth") => {
97
- const el = viewportElementRef.current;
98
- if (!el) return;
99
- el.scrollTo({
100
- top: el.scrollHeight,
101
- behavior
102
- });
103
- }, [])
104
- };
105
- }
106
- //#endregion
107
- export { useStickToBottom };
@@ -1,145 +0,0 @@
1
- .mcp-server-connections {
2
- display: grid;
3
- gap: 0.625rem;
4
- min-inline-size: 0;
5
- color: var(--sigvelo-color-text);
6
- }
7
-
8
- .mcp-server-connections__header {
9
- display: flex;
10
- align-items: center;
11
- justify-content: space-between;
12
- gap: 0.75rem;
13
- min-inline-size: 0;
14
- }
15
-
16
- .mcp-server-connections__header h2 {
17
- margin: 0;
18
- font-size: 0.95rem;
19
- font-weight: var(--sigvelo-font-weight-bold);
20
- line-height: 1.2;
21
- letter-spacing: 0;
22
- }
23
-
24
- .mcp-server-connections__summary,
25
- .mcp-server-connections__empty,
26
- .mcp-server-connections__url,
27
- .mcp-server-connections__capabilities,
28
- .mcp-server-connections__instructions {
29
- color: var(--sigvelo-color-text-muted);
30
- font-size: 0.75rem;
31
- line-height: 1.35;
32
- }
33
-
34
- .mcp-server-connections__summary {
35
- flex: 0 0 auto;
36
- white-space: nowrap;
37
- }
38
-
39
- .mcp-server-connections__empty {
40
- margin: 0;
41
- padding: 0.75rem;
42
- border: var(--sigvelo-border-style) var(--sigvelo-border-width)
43
- var(--sigvelo-color-neutral-border-subtle);
44
- border-radius: var(--sigvelo-radius-md);
45
- background: var(--sigvelo-color-surface);
46
- }
47
-
48
- .mcp-server-connections__list {
49
- display: grid;
50
- gap: 0.375rem;
51
- margin: 0;
52
- padding: 0;
53
- list-style: none;
54
- }
55
-
56
- .mcp-server-connections__item {
57
- display: grid;
58
- grid-template-columns: minmax(0, 1fr) auto;
59
- gap: 0.75rem;
60
- align-items: start;
61
- min-inline-size: 0;
62
- padding: 0.625rem;
63
- border: var(--sigvelo-border-style) var(--sigvelo-border-width)
64
- var(--sigvelo-color-neutral-border-subtle);
65
- border-radius: var(--sigvelo-radius-md);
66
- background: var(--sigvelo-color-surface);
67
- }
68
-
69
- .mcp-server-connections__main {
70
- display: grid;
71
- gap: 0.25rem;
72
- min-inline-size: 0;
73
- }
74
-
75
- .mcp-server-connections__title-row {
76
- display: flex;
77
- flex-wrap: wrap;
78
- align-items: center;
79
- gap: 0.375rem;
80
- min-inline-size: 0;
81
- }
82
-
83
- .mcp-server-connections__name {
84
- min-inline-size: 0;
85
- color: var(--sigvelo-color-text);
86
- font-size: 0.85rem;
87
- font-weight: var(--sigvelo-font-weight-semibold);
88
- line-height: 1.25;
89
- overflow-wrap: anywhere;
90
- }
91
-
92
- .mcp-server-connections__status .mcp-server-connections__spinner {
93
- animation: mcp-server-connections-spin 900ms linear infinite;
94
- }
95
-
96
- .mcp-server-connections__url,
97
- .mcp-server-connections__error,
98
- .mcp-server-connections__instructions,
99
- .mcp-server-connections__capabilities {
100
- margin: 0;
101
- overflow-wrap: anywhere;
102
- }
103
-
104
- .mcp-server-connections__error {
105
- color: var(--sigvelo-color-danger-text);
106
- font-size: 0.75rem;
107
- line-height: 1.35;
108
- }
109
-
110
- .mcp-server-connections__actions {
111
- display: flex;
112
- flex-wrap: wrap;
113
- justify-content: flex-end;
114
- gap: 0.25rem;
115
- }
116
-
117
- .mcp-server-connections__actions .button > svg {
118
- inline-size: 0.875rem;
119
- block-size: 0.875rem;
120
- }
121
-
122
- @media (width < 34rem) {
123
- .mcp-server-connections__item {
124
- grid-template-columns: 1fr;
125
- }
126
-
127
- .mcp-server-connections__actions {
128
- justify-content: flex-start;
129
- }
130
- }
131
-
132
- @media (prefers-reduced-motion: reduce) {
133
- .mcp-server-connections__status .mcp-server-connections__spinner {
134
- animation: none;
135
- }
136
- }
137
-
138
- @keyframes mcp-server-connections-spin {
139
- from {
140
- transform: rotate(0deg);
141
- }
142
- to {
143
- transform: rotate(360deg);
144
- }
145
- }