@mcp-b/react-components 0.20.5 → 0.21.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/{AgentActivity-D2SHSGFX.d.ts → AgentActivity-D3OvrC02.d.ts} +14 -1
- package/dist/{AgentChat-C-ZyXbJz.d.ts → AgentChat-Dvkn8lce.d.ts} +23 -0
- package/dist/AgentChatStartScreen-CvXJBr4y.d.ts +57 -0
- package/dist/{ModelSelector-pecWyOFI.js → ModelSelector-CEd8M9eK.js} +14 -7
- package/dist/{ThinkChatActivity-CdbL0aoA.d.ts → ThinkChatActivity-FY1VWXgh.d.ts} +8 -7
- package/dist/{ThinkChatActivitySummary-D1xOrNrq.d.ts → ThinkChatActivitySummary-kr5fE0wg.d.ts} +14 -5
- package/dist/{ToggleGroup-DNd6cDJZ.d.ts → ToggleGroup-BW1jrhAF.d.ts} +10 -0
- package/dist/components/Activity.d.ts +33 -17
- package/dist/components/Activity.js +39 -27
- package/dist/components/AgentActivity.d.ts +1 -1
- package/dist/components/AgentActivityPreview.d.ts +1 -1
- package/dist/components/AgentActivityPreview.js +2 -2
- package/dist/components/AgentChat.d.ts +1 -1
- package/dist/components/AgentChat.js +142 -129
- package/dist/components/AgentChatStartScreen.d.ts +2 -0
- package/dist/components/AgentChatStartScreen.js +82 -0
- package/dist/components/Approval.js +2 -4
- package/dist/components/BrowserLiveView.js +5 -7
- package/dist/components/BrowserReplay.js +5 -4
- package/dist/components/BrowserRunPanel.js +1 -1
- package/dist/components/ChatGptSignInScreen.js +1 -1
- package/dist/components/Conversation.d.ts +1 -22
- package/dist/components/Conversation.js +2 -29
- package/dist/components/EmptyState.d.ts +46 -0
- package/dist/components/EmptyState.js +50 -0
- package/dist/components/Kbd.d.ts +32 -0
- package/dist/components/Kbd.js +34 -0
- package/dist/components/ModelSelector.d.ts +10 -4
- package/dist/components/ModelSelector.js +2 -2
- package/dist/components/PricingBillingToggle.js +1 -0
- package/dist/components/PromptInput.js +3 -2
- package/dist/components/Reasoning.js +1 -1
- package/dist/components/StatusPill.d.ts +43 -0
- package/dist/components/StatusPill.js +35 -0
- package/dist/components/ThinkChat.d.ts +9 -3
- package/dist/components/ThinkChatActivity.d.ts +2 -2
- package/dist/components/ThinkChatActivity.js +27 -15
- package/dist/components/ThinkChatActivitySummary.d.ts +2 -2
- package/dist/components/ThinkChatActivitySummary.js +67 -64
- package/dist/components/ThinkExecutionDetail.js +4 -4
- package/dist/components/ThinkExecutionWorkbench.js +5 -4
- package/dist/components/ThinkFullAppViewSwitch.d.ts +1 -1
- package/dist/components/ThinkRoutineBrowser.js +1 -0
- package/dist/components/ThinkRoutineRuns.js +3 -2
- package/dist/components/ThinkThreadPicker.js +3 -2
- package/dist/components/ToggleGroup.d.ts +1 -1
- package/dist/components/ToggleGroup.js +54 -7
- package/dist/components/ToolInvocation.js +1 -1
- package/dist/styles/activity-header.css +41 -10
- package/dist/styles/activity.css +26 -4
- package/dist/styles/agent-activity-preview-overlay.css +39 -12
- package/dist/styles/agent-activity-preview.css +31 -30
- package/dist/styles/agent-attention.css +2 -2
- package/dist/styles/agent-chat.css +199 -0
- package/dist/styles/agent-connection.css +8 -8
- package/dist/styles/alert-dialog.css +5 -2
- package/dist/styles/app-top-bar.css +4 -4
- package/dist/styles/approval.css +1 -7
- package/dist/styles/artifact.css +4 -4
- package/dist/styles/base-ui-motion.css +1 -1
- package/dist/styles/base.css +95 -3
- package/dist/styles/browser-control-overlay.css +16 -7
- package/dist/styles/browser-live-view.css +5 -38
- package/dist/styles/browser-replay.css +2 -6
- package/dist/styles/browser-run-panel.css +4 -18
- package/dist/styles/button.css +3 -1
- package/dist/styles/card.css +4 -4
- package/dist/styles/chain-of-thought.css +0 -1
- package/dist/styles/chatgpt-sign-in-screen.css +7 -5
- package/dist/styles/checkbox-group.css +3 -3
- package/dist/styles/code-block.css +4 -4
- package/dist/styles/context-menu.css +1 -1
- package/dist/styles/conversation.css +7 -42
- package/dist/styles/description-list.css +2 -2
- package/dist/styles/dialog.css +17 -2
- package/dist/styles/empty-state.css +48 -0
- package/dist/styles/environment-variables.css +4 -4
- package/dist/styles/field.css +2 -2
- package/dist/styles/index.css +3 -0
- package/dist/styles/inline-citation.css +1 -1
- package/dist/styles/kbd.css +40 -0
- package/dist/styles/media-preview-card.css +5 -3
- package/dist/styles/message-scroller.css +4 -4
- package/dist/styles/message.css +4 -6
- package/dist/styles/model-selector.css +5 -8
- package/dist/styles/popover.css +1 -1
- package/dist/styles/preview-card.css +1 -1
- package/dist/styles/prompt-input.css +18 -40
- package/dist/styles/queue.css +2 -2
- package/dist/styles/recipes.css +68 -9
- package/dist/styles/resizable-side-panel.css +1 -1
- package/dist/styles/responsive-sidebar-shell.css +5 -6
- package/dist/styles/scrollbars.css +32 -3
- package/dist/styles/sources.css +1 -1
- package/dist/styles/status-pill.css +39 -0
- package/dist/styles/stepper.css +2 -2
- package/dist/styles/streamdown.css +13 -12
- package/dist/styles/subagent-run.css +3 -3
- package/dist/styles/switch.css +1 -3
- package/dist/styles/tabs.css +1 -1
- package/dist/styles/task.css +1 -1
- package/dist/styles/terminal.css +2 -2
- package/dist/styles/test-results.css +1 -2
- package/dist/styles/textarea.css +1 -1
- package/dist/styles/theme-mode-control.css +1 -1
- package/dist/styles/think-execution-status.css +4 -23
- package/dist/styles/think-execution-workbench.css +2 -3
- package/dist/styles/think-full-app.css +2 -2
- package/dist/styles/think-routine-library.css +14 -16
- package/dist/styles/think-thread-picker.css +8 -25
- package/dist/styles/toast.css +2 -2
- package/dist/styles/toggle-group.css +76 -3
- package/dist/styles/tooltip.css +1 -2
- package/dist/styles/utilities.css +73 -0
- package/dist/styles/workspace-explorer.css +4 -6
- package/package.json +2 -2
package/dist/styles/stepper.css
CHANGED
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
.stepper__indicator[data-loading] .stepper__indicator-content {
|
|
122
|
-
animation: sigvelo-icon-spin
|
|
122
|
+
animation: sigvelo-icon-spin var(--sigvelo-motion-duration-spin) linear infinite;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
.stepper__separator {
|
|
@@ -170,7 +170,7 @@
|
|
|
170
170
|
margin-block-start: calc(var(--sigvelo-spacing-1) - var(--sigvelo-border-width));
|
|
171
171
|
color: var(--sigvelo-color-text-muted);
|
|
172
172
|
font-size: var(--sigvelo-text-compact);
|
|
173
|
-
line-height:
|
|
173
|
+
line-height: var(--sigvelo-leading-snug);
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
.stepper__panel {
|
|
@@ -39,7 +39,7 @@ button[data-streamdown="link"] {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
[data-streamdown="inline-code"] {
|
|
42
|
-
padding-block:
|
|
42
|
+
padding-block: 1px;
|
|
43
43
|
padding-inline: var(--sigvelo-spacing-1);
|
|
44
44
|
border-radius: var(--sigvelo-radius-xs);
|
|
45
45
|
background-color: var(--sigvelo-color-neutral-bg-subtle);
|
|
@@ -62,14 +62,15 @@ button[data-streamdown="link"] {
|
|
|
62
62
|
[data-streamdown="heading-5"],
|
|
63
63
|
[data-streamdown="heading-6"] {
|
|
64
64
|
margin-block: var(--sigvelo-spacing-3) var(--sigvelo-spacing-1-5);
|
|
65
|
-
font-size:
|
|
65
|
+
font-size: var(--sigvelo-text-base);
|
|
66
66
|
font-weight: var(--sigvelo-font-weight-semibold);
|
|
67
|
-
line-height: var(--sigvelo-leading
|
|
67
|
+
line-height: var(--sigvelo-text-base-leading);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
[data-streamdown="heading-1"],
|
|
71
71
|
[data-streamdown="heading-2"] {
|
|
72
|
-
font-size:
|
|
72
|
+
font-size: var(--sigvelo-text-lg);
|
|
73
|
+
line-height: var(--sigvelo-text-lg-leading);
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
[data-streamdown="blockquote"] {
|
|
@@ -222,7 +223,7 @@ button[data-streamdown="link"] {
|
|
|
222
223
|
background-color: transparent;
|
|
223
224
|
font-family: var(--sigvelo-font-mono);
|
|
224
225
|
font-size: var(--sigvelo-text-compact);
|
|
225
|
-
line-height:
|
|
226
|
+
line-height: var(--sigvelo-leading-normal);
|
|
226
227
|
overflow: visible;
|
|
227
228
|
}
|
|
228
229
|
|
|
@@ -288,7 +289,7 @@ button[data-streamdown="link"] {
|
|
|
288
289
|
[data-streamdown="table-fullscreen"] {
|
|
289
290
|
position: fixed;
|
|
290
291
|
inset: 0;
|
|
291
|
-
z-index:
|
|
292
|
+
z-index: var(--sigvelo-z-overlay);
|
|
292
293
|
background-color: var(--sigvelo-color-surface);
|
|
293
294
|
}
|
|
294
295
|
|
|
@@ -343,17 +344,17 @@ button[data-streamdown="link"] {
|
|
|
343
344
|
position: absolute;
|
|
344
345
|
top: 100%;
|
|
345
346
|
right: 0;
|
|
346
|
-
z-index:
|
|
347
|
+
z-index: var(--sigvelo-z-chrome);
|
|
347
348
|
display: flex;
|
|
348
349
|
flex-direction: column;
|
|
349
350
|
min-width: 7.5rem;
|
|
350
351
|
margin-block-start: var(--sigvelo-spacing-1);
|
|
351
352
|
overflow: hidden;
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
background-color: var(--sigvelo-color-surface);
|
|
356
|
-
box-shadow: var(--sigvelo-
|
|
353
|
+
/* Draws its edge from the overlay ring at the same radius as every other
|
|
354
|
+
popup in the system, rather than from a 1px border of its own. */
|
|
355
|
+
border-radius: var(--sigvelo-radius-lg);
|
|
356
|
+
background-color: var(--sigvelo-color-surface-raised);
|
|
357
|
+
box-shadow: var(--sigvelo-elevation-overlay);
|
|
357
358
|
}
|
|
358
359
|
|
|
359
360
|
:is(
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
.subagent-run__tray-label {
|
|
39
39
|
color: var(--sigvelo-color-text-muted);
|
|
40
40
|
font-size: var(--sigvelo-text-xs);
|
|
41
|
-
line-height:
|
|
41
|
+
line-height: var(--sigvelo-leading-snug);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
.subagent-run__title {
|
|
@@ -57,8 +57,8 @@
|
|
|
57
57
|
flex: 0 0 auto;
|
|
58
58
|
align-items: center;
|
|
59
59
|
justify-content: center;
|
|
60
|
-
inline-size:
|
|
61
|
-
block-size:
|
|
60
|
+
inline-size: var(--sigvelo-control-icon-size-md);
|
|
61
|
+
block-size: var(--sigvelo-control-icon-size-md);
|
|
62
62
|
color: var(--sigvelo-color-text-muted);
|
|
63
63
|
}
|
|
64
64
|
|
package/dist/styles/switch.css
CHANGED
|
@@ -80,9 +80,7 @@
|
|
|
80
80
|
block-size: var(--sigvelo-recipe-switch-thumb-size);
|
|
81
81
|
background-color: var(--sigvelo-color-canvas);
|
|
82
82
|
border-radius: var(--sigvelo-radius-full);
|
|
83
|
-
box-shadow:
|
|
84
|
-
0 1px 3px 0 color-mix(in oklab, var(--sigvelo-color-text), transparent 90%),
|
|
85
|
-
0 1px 2px -1px color-mix(in oklab, var(--sigvelo-color-text), transparent 90%);
|
|
83
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
86
84
|
translate: 0;
|
|
87
85
|
transition: translate var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change);
|
|
88
86
|
}
|
package/dist/styles/tabs.css
CHANGED
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
|
|
187
187
|
.tabs__panel:focus-visible {
|
|
188
188
|
outline: none;
|
|
189
|
-
box-shadow:
|
|
189
|
+
box-shadow: var(--sigvelo-recipe-focus-shadow-inset);
|
|
190
190
|
border-radius: var(--sigvelo-radius-md);
|
|
191
191
|
}
|
|
192
192
|
|
package/dist/styles/task.css
CHANGED
package/dist/styles/terminal.css
CHANGED
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
width: 100%;
|
|
52
52
|
height: 100%;
|
|
53
53
|
padding-block: var(--sigvelo-spacing-2-5);
|
|
54
|
-
padding-inline:
|
|
54
|
+
padding-inline: var(--sigvelo-spacing-3-5);
|
|
55
55
|
overflow: auto;
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
margin: 0;
|
|
60
60
|
font-family: var(--sigvelo-font-mono);
|
|
61
61
|
font-size: var(--sigvelo-text-xs);
|
|
62
|
-
line-height: var(--sigvelo-leading-
|
|
62
|
+
line-height: var(--sigvelo-leading-relaxed);
|
|
63
63
|
color: var(--sigvelo-color-neutral-100);
|
|
64
64
|
white-space: pre-wrap;
|
|
65
65
|
word-break: break-word;
|
|
@@ -188,7 +188,6 @@
|
|
|
188
188
|
|
|
189
189
|
.test-results__test-status--running {
|
|
190
190
|
color: var(--sigvelo-color-primary-text);
|
|
191
|
-
animation: sigvelo-icon-spin 1.4s linear infinite;
|
|
192
191
|
}
|
|
193
192
|
|
|
194
193
|
.test-results__test-name {
|
|
@@ -226,7 +225,7 @@
|
|
|
226
225
|
padding-inline: var(--sigvelo-spacing-3);
|
|
227
226
|
font-family: var(--sigvelo-font-mono);
|
|
228
227
|
font-size: var(--sigvelo-text-2xs);
|
|
229
|
-
line-height:
|
|
228
|
+
line-height: var(--sigvelo-leading-normal);
|
|
230
229
|
color: var(--sigvelo-color-danger-text);
|
|
231
230
|
background-color: var(--sigvelo-color-danger-bg-subtle);
|
|
232
231
|
border: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
package/dist/styles/textarea.css
CHANGED
|
@@ -18,26 +18,7 @@
|
|
|
18
18
|
color: var(--sigvelo-color-primary-text);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
[data-status="waitingForPause"],
|
|
26
|
-
[data-status="rollingBack"]
|
|
27
|
-
)
|
|
28
|
-
svg {
|
|
29
|
-
animation: sigvelo-icon-spin 0.8s linear infinite;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@media (prefers-reduced-motion: reduce) {
|
|
33
|
-
.think-execution-status:is(
|
|
34
|
-
[data-status="running"],
|
|
35
|
-
[data-status="pending"],
|
|
36
|
-
[data-status="queued"],
|
|
37
|
-
[data-status="waitingForPause"],
|
|
38
|
-
[data-status="rollingBack"]
|
|
39
|
-
)
|
|
40
|
-
svg {
|
|
41
|
-
animation: none;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
21
|
+
/* Nothing spins the icon here. Exactly the statuses this file used to list are
|
|
22
|
+
the ones that resolve to the primary tone, and the primary tone renders
|
|
23
|
+
SpinnerIcon, which already spins itself and already stops under reduced
|
|
24
|
+
motion. The list was a copy of that mapping that could drift away from it. */
|
|
@@ -80,10 +80,9 @@
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
.think-execution-workbench__empty {
|
|
83
|
+
--sigvelo-recipe-empty-state-padding-block: var(--sigvelo-spacing-2-5);
|
|
84
|
+
|
|
83
85
|
margin: var(--sigvelo-spacing-3);
|
|
84
|
-
padding: var(--sigvelo-spacing-2-5) 0;
|
|
85
|
-
color: var(--sigvelo-color-text-muted);
|
|
86
|
-
font-size: var(--sigvelo-text-compact);
|
|
87
86
|
}
|
|
88
87
|
|
|
89
88
|
.think-execution-workbench__list {
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
.think-full-app > .think-full-app__app-bar {
|
|
62
62
|
grid-column: 1 / -1;
|
|
63
63
|
grid-row: 1;
|
|
64
|
-
z-index:
|
|
64
|
+
z-index: var(--sigvelo-z-chrome);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
.think-full-app__chat-surface {
|
|
@@ -267,7 +267,7 @@ body.is-resizing-side-panel .think-full-app__view-scope {
|
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
.think-full-app .message__content {
|
|
270
|
-
line-height:
|
|
270
|
+
line-height: var(--sigvelo-leading-normal);
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
.think-full-app .message[data-from="user"] .message__content {
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
|
|
154
154
|
.think-routine-browser__routine {
|
|
155
155
|
inline-size: 100%;
|
|
156
|
-
min-block-size:
|
|
156
|
+
min-block-size: var(--sigvelo-spacing-14);
|
|
157
157
|
display: grid;
|
|
158
158
|
grid-template-columns: auto minmax(0, 1fr);
|
|
159
159
|
align-items: center;
|
|
@@ -243,7 +243,7 @@
|
|
|
243
243
|
.think-routine-library__detail-header h1,
|
|
244
244
|
.think-routine-library__create-header h1 {
|
|
245
245
|
font-size: clamp(var(--sigvelo-text-lg), 2.5vw, var(--sigvelo-text-2xl));
|
|
246
|
-
line-height:
|
|
246
|
+
line-height: var(--sigvelo-leading-tight);
|
|
247
247
|
}
|
|
248
248
|
|
|
249
249
|
.think-routine-library__detail-heading > p:last-child,
|
|
@@ -262,7 +262,7 @@
|
|
|
262
262
|
}
|
|
263
263
|
|
|
264
264
|
.think-routine-library__section-heading {
|
|
265
|
-
min-block-size:
|
|
265
|
+
min-block-size: var(--sigvelo-spacing-8);
|
|
266
266
|
display: flex;
|
|
267
267
|
align-items: flex-start;
|
|
268
268
|
justify-content: space-between;
|
|
@@ -280,7 +280,7 @@
|
|
|
280
280
|
margin: 0;
|
|
281
281
|
color: var(--sigvelo-color-text);
|
|
282
282
|
font-size: var(--sigvelo-text-sm);
|
|
283
|
-
line-height:
|
|
283
|
+
line-height: var(--sigvelo-leading-relaxed);
|
|
284
284
|
white-space: pre-wrap;
|
|
285
285
|
}
|
|
286
286
|
|
|
@@ -348,15 +348,15 @@
|
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
.think-routine-library__run-marker {
|
|
351
|
-
inline-size:
|
|
352
|
-
block-size:
|
|
351
|
+
inline-size: var(--sigvelo-control-icon-size-md);
|
|
352
|
+
block-size: var(--sigvelo-control-icon-size-md);
|
|
353
353
|
flex: 0 0 auto;
|
|
354
354
|
}
|
|
355
355
|
|
|
356
356
|
.think-routine-library__run-marker svg {
|
|
357
357
|
display: block;
|
|
358
|
-
inline-size:
|
|
359
|
-
block-size:
|
|
358
|
+
inline-size: var(--sigvelo-control-icon-size-md);
|
|
359
|
+
block-size: var(--sigvelo-control-icon-size-md);
|
|
360
360
|
}
|
|
361
361
|
|
|
362
362
|
.think-routine-library__run > span {
|
|
@@ -370,18 +370,14 @@
|
|
|
370
370
|
text-overflow: ellipsis;
|
|
371
371
|
}
|
|
372
372
|
|
|
373
|
-
.think-routine-library__empty-runs {
|
|
374
|
-
color: var(--sigvelo-color-text-muted);
|
|
375
|
-
font-size: var(--sigvelo-text-xs);
|
|
376
|
-
}
|
|
377
|
-
|
|
378
373
|
.think-routine-library__run-kind {
|
|
379
374
|
text-transform: capitalize;
|
|
380
375
|
}
|
|
381
376
|
|
|
377
|
+
/* One rule, not two — this selector was declared twice in this file. */
|
|
382
378
|
.think-routine-library__empty-runs {
|
|
383
|
-
|
|
384
|
-
|
|
379
|
+
--sigvelo-recipe-empty-state-padding-block: var(--sigvelo-spacing-4);
|
|
380
|
+
|
|
385
381
|
border-block: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
|
386
382
|
var(--sigvelo-color-neutral-border-subtle);
|
|
387
383
|
}
|
|
@@ -486,8 +482,10 @@
|
|
|
486
482
|
@container responsive-sidebar-shell (inline-size <= 56rem) {
|
|
487
483
|
.think-routine-library__browser {
|
|
488
484
|
inline-size: 100%;
|
|
485
|
+
/* Narrow enough that the browser stops being a column beside the detail
|
|
486
|
+
and starts covering it, so it takes the overlay stack. */
|
|
489
487
|
border-inline-end: 0;
|
|
490
|
-
box-shadow: var(--sigvelo-
|
|
488
|
+
box-shadow: var(--sigvelo-elevation-overlay);
|
|
491
489
|
}
|
|
492
490
|
}
|
|
493
491
|
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
display: inline-flex;
|
|
57
57
|
align-items: center;
|
|
58
58
|
gap: var(--sigvelo-spacing-0-5);
|
|
59
|
-
min-inline-size:
|
|
59
|
+
min-inline-size: var(--sigvelo-spacing-4);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
.think-thread-status-indicators__item svg {
|
|
@@ -68,10 +68,6 @@
|
|
|
68
68
|
color: var(--sigvelo-color-primary-text);
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
.think-thread-status-indicators__item[data-status="running"] svg {
|
|
72
|
-
animation: sigvelo-icon-spin 900ms linear infinite;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
71
|
.think-thread-status-indicators__item[data-status="attention"] {
|
|
76
72
|
color: var(--sigvelo-color-warning-text);
|
|
77
73
|
}
|
|
@@ -112,7 +108,7 @@
|
|
|
112
108
|
|
|
113
109
|
.think-thread-picker__list {
|
|
114
110
|
display: grid;
|
|
115
|
-
gap:
|
|
111
|
+
gap: 1px;
|
|
116
112
|
margin: 0;
|
|
117
113
|
padding: 0;
|
|
118
114
|
list-style: none;
|
|
@@ -252,8 +248,8 @@
|
|
|
252
248
|
display: inline-flex;
|
|
253
249
|
align-items: center;
|
|
254
250
|
justify-content: center;
|
|
255
|
-
inline-size:
|
|
256
|
-
block-size:
|
|
251
|
+
inline-size: var(--sigvelo-control-icon-size-md);
|
|
252
|
+
block-size: var(--sigvelo-control-icon-size-md);
|
|
257
253
|
color: var(--sigvelo-color-text-muted);
|
|
258
254
|
}
|
|
259
255
|
|
|
@@ -271,20 +267,10 @@
|
|
|
271
267
|
color: var(--sigvelo-color-primary-text);
|
|
272
268
|
}
|
|
273
269
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
.
|
|
278
|
-
.think-thread-picker__thread-status
|
|
279
|
-
svg,
|
|
280
|
-
.think-thread-picker__thread[data-thread-status="submitted"]
|
|
281
|
-
.think-thread-picker__thread-status
|
|
282
|
-
svg,
|
|
283
|
-
.think-thread-picker__thread[data-thread-status="recovering"]
|
|
284
|
-
.think-thread-picker__thread-status
|
|
285
|
-
svg {
|
|
286
|
-
animation: sigvelo-icon-spin 900ms linear infinite;
|
|
287
|
-
}
|
|
270
|
+
/* The six statuses this rule used to list were `isThreadBusy` written out a
|
|
271
|
+
second time, and those are exactly the ones that render SpinnerIcon, which
|
|
272
|
+
spins itself. A DotIcon never needed the rule and would have started turning
|
|
273
|
+
the moment the two lists disagreed. */
|
|
288
274
|
|
|
289
275
|
.think-thread-picker__thread[data-thread-status="error"] .think-thread-picker__thread-status {
|
|
290
276
|
color: var(--sigvelo-color-danger-text);
|
|
@@ -298,9 +284,6 @@
|
|
|
298
284
|
|
|
299
285
|
.think-thread-picker__empty {
|
|
300
286
|
margin: var(--sigvelo-spacing-2);
|
|
301
|
-
color: var(--sigvelo-color-text-muted);
|
|
302
|
-
font-size: var(--sigvelo-text-compact);
|
|
303
|
-
line-height: var(--sigvelo-leading-snug);
|
|
304
287
|
}
|
|
305
288
|
|
|
306
289
|
.think-thread-picker__footer {
|
package/dist/styles/toast.css
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
position: fixed;
|
|
3
3
|
inset-block-end: var(--sigvelo-spacing-4);
|
|
4
4
|
inset-inline-end: var(--sigvelo-spacing-4);
|
|
5
|
-
z-index:
|
|
5
|
+
z-index: var(--sigvelo-z-toast);
|
|
6
6
|
inline-size: min(24rem, calc(100dvi - var(--sigvelo-spacing-8)));
|
|
7
7
|
max-inline-size: 100%;
|
|
8
8
|
pointer-events: none;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
position: absolute;
|
|
16
16
|
inset-inline: 0;
|
|
17
17
|
inset-block-end: 0;
|
|
18
|
-
z-index: calc(
|
|
18
|
+
z-index: calc(var(--sigvelo-z-toast) - var(--toast-index));
|
|
19
19
|
display: flex;
|
|
20
20
|
flex-direction: column;
|
|
21
21
|
inline-size: 100%;
|
|
@@ -33,9 +33,7 @@
|
|
|
33
33
|
.toggle-group__item[data-pressed] {
|
|
34
34
|
background-color: var(--sigvelo-color-canvas);
|
|
35
35
|
color: var(--sigvelo-color-text);
|
|
36
|
-
box-shadow:
|
|
37
|
-
0 1px 3px 0 color-mix(in oklab, var(--sigvelo-color-text), transparent 90%),
|
|
38
|
-
0 1px 2px -1px color-mix(in oklab, var(--sigvelo-color-text), transparent 90%);
|
|
36
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
39
37
|
}
|
|
40
38
|
|
|
41
39
|
@media (forced-colors: active) {
|
|
@@ -44,3 +42,78 @@
|
|
|
44
42
|
outline-offset: -2px;
|
|
45
43
|
}
|
|
46
44
|
}
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
* Segmented: one thumb that travels, rather than each item lighting up its own
|
|
48
|
+
* background. Same anatomy, same track — a segmented control is how this group
|
|
49
|
+
* presents itself when the choice is a mode rather than a set of switches, so
|
|
50
|
+
* it is a modifier here instead of a second component with a second track.
|
|
51
|
+
*
|
|
52
|
+
* The position comes from JavaScript because nothing in CSS can produce it: see
|
|
53
|
+
* `useSegmentedThumb`.
|
|
54
|
+
*/
|
|
55
|
+
.toggle-group--segmented {
|
|
56
|
+
position: relative;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.toggle-group__thumb {
|
|
60
|
+
position: absolute;
|
|
61
|
+
/* Physical `left`, deliberately: it is fed `offsetLeft`, which is physical.
|
|
62
|
+
`translate` rather than moving `left` itself keeps the travel on the
|
|
63
|
+
compositor. */
|
|
64
|
+
left: 0;
|
|
65
|
+
inset-block: var(--sigvelo-spacing-1);
|
|
66
|
+
inline-size: var(--toggle-group-thumb-size, 0);
|
|
67
|
+
translate: var(--toggle-group-thumb-start, 0) 0;
|
|
68
|
+
border-radius: calc(var(--sigvelo-radius-md) - 2px);
|
|
69
|
+
background-color: var(--sigvelo-color-canvas);
|
|
70
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
71
|
+
transition:
|
|
72
|
+
translate var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change),
|
|
73
|
+
inline-size var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.toggle-group--sm .toggle-group__thumb {
|
|
77
|
+
inset-block: var(--sigvelo-spacing-0-5);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.toggle-group--lg .toggle-group__thumb {
|
|
81
|
+
inset-block: var(--sigvelo-spacing-1-5);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* Before the first measurement, and whenever the group allows an empty
|
|
85
|
+
selection, there is no segment for the thumb to sit on. */
|
|
86
|
+
.toggle-group--segmented:not(:has(.toggle-group__item[data-pressed])) .toggle-group__thumb {
|
|
87
|
+
opacity: 0;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* The thumb draws the pressed state now; leaving the item's own copy underneath
|
|
91
|
+
would double the elevation and show a second edge as the thumb slides off. */
|
|
92
|
+
.toggle-group--segmented .toggle-group__item[data-pressed] {
|
|
93
|
+
background-color: transparent;
|
|
94
|
+
box-shadow: none;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.toggle-group--segmented .toggle-group__item {
|
|
98
|
+
position: relative;
|
|
99
|
+
z-index: 1;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
@media (prefers-reduced-motion: reduce) {
|
|
103
|
+
.toggle-group__thumb {
|
|
104
|
+
transition: none;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
:root[data-motion="reduce"] .toggle-group__thumb {
|
|
109
|
+
transition: none;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Backgrounds are dropped in forced colors, so the travelling thumb would
|
|
113
|
+
vanish and take the selected state with it. */
|
|
114
|
+
@media (forced-colors: active) {
|
|
115
|
+
.toggle-group__thumb {
|
|
116
|
+
outline: var(--sigvelo-focus-ring-forced);
|
|
117
|
+
outline-offset: -2px;
|
|
118
|
+
}
|
|
119
|
+
}
|
package/dist/styles/tooltip.css
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
.tooltip__popup {
|
|
2
2
|
--sigvelo-recipe-popup-arrow-size: var(--sigvelo-spacing-2);
|
|
3
3
|
--sigvelo-recipe-surface-padding: var(--sigvelo-spacing-1) var(--sigvelo-spacing-2);
|
|
4
|
-
--sigvelo-recipe-surface-shadow: var(--sigvelo-shadow-sm);
|
|
5
4
|
|
|
6
|
-
z-index:
|
|
5
|
+
z-index: var(--sigvelo-z-overlay);
|
|
7
6
|
max-inline-size: min(20rem, var(--available-width));
|
|
8
7
|
overflow-block: auto;
|
|
9
8
|
font-size: var(--sigvelo-text-xs);
|
|
@@ -33,3 +33,76 @@
|
|
|
33
33
|
min-inline-size: 0;
|
|
34
34
|
flex: 1;
|
|
35
35
|
}
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* Truncation by fade rather than by ellipsis. An ellipsis is a character the
|
|
39
|
+
* reader has to parse — in a value slot ("gpt-5.1-codex-m…") it reads as part
|
|
40
|
+
* of the value. A mask just stops. Use it where the text is data; keep
|
|
41
|
+
* .sigvelo-truncate where the text is a sentence and the ellipsis is a
|
|
42
|
+
* legitimate signal that words were dropped.
|
|
43
|
+
*/
|
|
44
|
+
.sigvelo-truncate-fade {
|
|
45
|
+
--sigvelo-truncate-fade-distance: 1rem;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
white-space: nowrap;
|
|
48
|
+
mask-image: linear-gradient(
|
|
49
|
+
to right,
|
|
50
|
+
#000 calc(100% - var(--sigvelo-truncate-fade-distance)),
|
|
51
|
+
transparent 100%
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* Clamp to N lines. -1 keeps the mechanism while removing the limit, so a
|
|
56
|
+
component can drop the cap from script without swapping classes. */
|
|
57
|
+
.sigvelo-line-clamp {
|
|
58
|
+
--sigvelo-line-clamp: 2;
|
|
59
|
+
display: -webkit-box;
|
|
60
|
+
-webkit-box-orient: vertical;
|
|
61
|
+
-webkit-line-clamp: var(--sigvelo-line-clamp);
|
|
62
|
+
overflow: hidden;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* Scrollbars that appear on hover or keyboard focus and stay out of the way
|
|
67
|
+
* otherwise. scrollbar-gutter reserves the track either way, so revealing the
|
|
68
|
+
* bar never reflows the content beside it. Coarse pointers have no hover to
|
|
69
|
+
* key off and overlay their scrollbars anyway, so they are left alone.
|
|
70
|
+
*/
|
|
71
|
+
@media (any-pointer: fine) {
|
|
72
|
+
.sigvelo-scrollbar-on-hover {
|
|
73
|
+
scrollbar-gutter: stable;
|
|
74
|
+
scrollbar-color: transparent transparent;
|
|
75
|
+
transition: scrollbar-color var(--sigvelo-motion-duration-interaction)
|
|
76
|
+
var(--sigvelo-motion-ease-change);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.sigvelo-scrollbar-on-hover:hover,
|
|
80
|
+
.sigvelo-scrollbar-on-hover:focus-within {
|
|
81
|
+
scrollbar-color: var(--sigvelo-color-neutral-border) transparent;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* Comfortable reading measure for long-form agent output. Applied to the prose
|
|
87
|
+
* container, not the panel: the panel still fills the pane, the paragraphs stop
|
|
88
|
+
* at a readable line length inside it.
|
|
89
|
+
*/
|
|
90
|
+
.sigvelo-measure {
|
|
91
|
+
max-inline-size: var(--sigvelo-measure-prose);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* Code, tables, and diagrams read worse wrapped than wide, so they opt out of
|
|
95
|
+
the prose measure without leaving the same container. */
|
|
96
|
+
.sigvelo-measure-wide {
|
|
97
|
+
max-inline-size: var(--sigvelo-measure-wide-block);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/*
|
|
101
|
+
* Reader-controlled text size for prose. Scales the message body only —
|
|
102
|
+
* toolbars, labels, and controls keep resolving through the rem type ramp,
|
|
103
|
+
* because a reader asking for larger message text is not asking for a taller
|
|
104
|
+
* composer. Descendants that should scale with it must size in em.
|
|
105
|
+
*/
|
|
106
|
+
.sigvelo-reader-text {
|
|
107
|
+
font-size: calc(1em * var(--sigvelo-chat-font-scale));
|
|
108
|
+
}
|
|
@@ -10,11 +10,9 @@
|
|
|
10
10
|
overflow: hidden;
|
|
11
11
|
font-family: inherit;
|
|
12
12
|
color: var(--sigvelo-color-text);
|
|
13
|
-
background-color: var(--sigvelo-color-surface);
|
|
14
|
-
border: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
|
15
|
-
var(--sigvelo-color-neutral-border-subtle);
|
|
13
|
+
background-color: var(--sigvelo-color-surface-raised);
|
|
16
14
|
border-radius: var(--sigvelo-radius-xl);
|
|
17
|
-
box-shadow: var(--sigvelo-
|
|
15
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
18
16
|
container-type: inline-size;
|
|
19
17
|
}
|
|
20
18
|
|
|
@@ -132,8 +130,8 @@
|
|
|
132
130
|
z-index: 2;
|
|
133
131
|
inset-block-start: calc(var(--sigvelo-density-compact-control-height) + var(--sigvelo-spacing-2));
|
|
134
132
|
inset-inline-end: var(--sigvelo-spacing-2);
|
|
135
|
-
background-color: var(--sigvelo-color-surface);
|
|
136
|
-
box-shadow: var(--sigvelo-
|
|
133
|
+
background-color: var(--sigvelo-color-surface-raised);
|
|
134
|
+
box-shadow: var(--sigvelo-elevation-floating);
|
|
137
135
|
}
|
|
138
136
|
|
|
139
137
|
.workspace-explorer__filter {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-b/react-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.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": {
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"streamdown": "^2.5.0",
|
|
58
58
|
"unist-util-visit": "^5.1.0",
|
|
59
59
|
"yet-another-react-lightbox": "^3.32.1",
|
|
60
|
-
"@mcp-b/design-tokens": "0.
|
|
60
|
+
"@mcp-b/design-tokens": "0.21.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@ai-sdk/react": "^3.0.222",
|