@mcp-b/react-components 0.20.4 → 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/MessageScroller.js +1 -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/Stepper.js +1 -5
- package/dist/components/TestResults.js +15 -15
- 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 +69 -66
- package/dist/components/ThinkExecutionDetail.js +4 -4
- package/dist/components/ThinkExecutionRun.js +2 -2
- package/dist/components/ThinkExecutionWorkbench.js +5 -4
- package/dist/components/ThinkFullAppViewSwitch.d.ts +1 -1
- package/dist/components/ThinkRoutine.js +2 -10
- package/dist/components/ThinkRoutineBrowser.js +1 -0
- package/dist/components/ThinkRoutineRuns.js +3 -2
- package/dist/components/ThinkThreadPicker.js +4 -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/accordion.css +2 -1
- package/dist/styles/activity-header.css +45 -25
- package/dist/styles/activity.css +26 -4
- package/dist/styles/agent-activity-preview-overlay.css +51 -12
- package/dist/styles/agent-activity-preview.css +34 -33
- package/dist/styles/agent-attention.css +9 -16
- package/dist/styles/agent-chat.css +199 -0
- package/dist/styles/agent-connection.css +10 -10
- 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 +5 -5
- package/dist/styles/attachment-preview.css +1 -1
- package/dist/styles/badge.css +1 -1
- package/dist/styles/base-ui-motion.css +1 -1
- package/dist/styles/base.css +110 -3
- package/dist/styles/browser-control-overlay.css +16 -6
- package/dist/styles/browser-live-view.css +5 -38
- package/dist/styles/browser-replay.css +4 -8
- package/dist/styles/browser-run-panel.css +5 -19
- package/dist/styles/button.css +4 -2
- package/dist/styles/card.css +4 -4
- package/dist/styles/chain-of-thought.css +1 -2
- package/dist/styles/chatgpt-sign-in-screen.css +9 -7
- package/dist/styles/checkbox-group.css +4 -4
- package/dist/styles/code-block.css +9 -9
- package/dist/styles/commit.css +1 -1
- 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 +8 -8
- package/dist/styles/field.css +2 -2
- package/dist/styles/fieldset.css +1 -1
- package/dist/styles/file-tree.css +1 -1
- package/dist/styles/github-motion-mark.css +1 -1
- 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/label.css +1 -1
- package/dist/styles/mcp-server-picker.css +1 -1
- package/dist/styles/media-preview-card.css +5 -3
- package/dist/styles/menu.css +1 -1
- package/dist/styles/message-scroller.css +7 -25
- package/dist/styles/message.css +5 -7
- package/dist/styles/model-selector.css +5 -8
- package/dist/styles/plan.css +1 -1
- package/dist/styles/popover.css +1 -1
- package/dist/styles/preview-card.css +1 -1
- package/dist/styles/pricing-page.css +37 -35
- package/dist/styles/prompt-input.css +19 -41
- package/dist/styles/queue.css +3 -3
- package/dist/styles/recipes.css +92 -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 +2 -2
- package/dist/styles/status-pill.css +39 -0
- package/dist/styles/stepper.css +2 -2
- package/dist/styles/streamdown.css +39 -35
- 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 +2 -2
- package/dist/styles/terminal.css +6 -6
- package/dist/styles/test-results.css +2 -3
- package/dist/styles/textarea.css +1 -1
- package/dist/styles/theme-mode-control.css +3 -4
- package/dist/styles/think-execution-status.css +4 -23
- package/dist/styles/think-execution-workbench.css +3 -4
- package/dist/styles/think-full-app.css +3 -3
- package/dist/styles/think-routine-library.css +22 -24
- package/dist/styles/think-thread-picker.css +20 -47
- 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/web-preview.css +4 -4
- package/dist/styles/workspace-explorer.css +6 -8
- package/package.json +2 -2
|
@@ -11,13 +11,44 @@
|
|
|
11
11
|
text-align: start;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
/*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
/*
|
|
15
|
+
* The action holds its content width and the detail absorbs whatever is left,
|
|
16
|
+
* so the two shrink in the right order: a long path loses its tail while
|
|
17
|
+
* "Reading" stays legible. Basis 0 on the detail is what makes it the flexible
|
|
18
|
+
* one; the trailing affordance stays adjacent until the width is exhausted.
|
|
19
|
+
*
|
|
20
|
+
* With no detail present the action is the only flexible item, so a settled
|
|
21
|
+
* summary sentence still truncates rather than inflating its owner.
|
|
22
|
+
*/
|
|
23
|
+
.activity__header-action {
|
|
24
|
+
flex: 0 1 auto;
|
|
18
25
|
min-width: 0;
|
|
19
26
|
max-width: max-content;
|
|
27
|
+
overflow: hidden;
|
|
20
28
|
color: var(--sigvelo-color-text);
|
|
29
|
+
text-overflow: ellipsis;
|
|
30
|
+
white-space: nowrap;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* The target of the action — a path, a command, a query. Muted, because in a
|
|
35
|
+
* column of activity lines the verb is what the reader scans for.
|
|
36
|
+
*
|
|
37
|
+
* Faded rather than ellipsed: this is data, and a trailing "…" reads as part of
|
|
38
|
+
* the value it is truncating.
|
|
39
|
+
*
|
|
40
|
+
* The fade is unconditional because it does not need a condition. Growing to
|
|
41
|
+
* fill the free space means the box is wider than short text, so the gradient
|
|
42
|
+
* lands on empty space and only bites once the text actually reaches the edge.
|
|
43
|
+
*/
|
|
44
|
+
.activity__header-detail {
|
|
45
|
+
flex: 1 1 0;
|
|
46
|
+
min-width: 0;
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
color: var(--sigvelo-color-text-muted);
|
|
49
|
+
font-weight: var(--sigvelo-font-weight-normal);
|
|
50
|
+
white-space: nowrap;
|
|
51
|
+
mask-image: linear-gradient(to right, #000 calc(100% - 1rem), transparent 100%);
|
|
21
52
|
}
|
|
22
53
|
|
|
23
54
|
.activity__item-icon {
|
|
@@ -26,36 +57,25 @@
|
|
|
26
57
|
color: var(--sigvelo-color-text-muted);
|
|
27
58
|
}
|
|
28
59
|
|
|
29
|
-
.activity[data-streaming] .activity__header-
|
|
30
|
-
.activity__header[data-streaming] .activity__header-
|
|
31
|
-
--
|
|
60
|
+
.activity[data-streaming] .activity__header-action,
|
|
61
|
+
.activity__header[data-streaming] .activity__header-action {
|
|
62
|
+
--sigvelo-shimmer-base: color-mix(in oklab, var(--sigvelo-color-text-muted), transparent 20%);
|
|
32
63
|
background: linear-gradient(
|
|
33
64
|
90deg,
|
|
34
|
-
var(--
|
|
35
|
-
var(--activity-shimmer-base) 40%,
|
|
65
|
+
var(--sigvelo-shimmer-base) 0% 40%,
|
|
36
66
|
var(--sigvelo-color-text) 50%,
|
|
37
|
-
var(--
|
|
38
|
-
var(--activity-shimmer-base) 100%
|
|
67
|
+
var(--sigvelo-shimmer-base) 60% 100%
|
|
39
68
|
);
|
|
40
69
|
background-size: 200% 100%;
|
|
41
70
|
-webkit-background-clip: text;
|
|
42
71
|
background-clip: text;
|
|
43
72
|
color: transparent;
|
|
44
|
-
animation:
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
@keyframes activity-shimmer {
|
|
48
|
-
from {
|
|
49
|
-
background-position: 100% 0;
|
|
50
|
-
}
|
|
51
|
-
to {
|
|
52
|
-
background-position: -100% 0;
|
|
53
|
-
}
|
|
73
|
+
animation: sigvelo-text-shimmer var(--sigvelo-motion-duration-shimmer) linear infinite;
|
|
54
74
|
}
|
|
55
75
|
|
|
56
76
|
@media (prefers-reduced-motion: reduce) {
|
|
57
|
-
.activity[data-streaming] .activity__header-
|
|
58
|
-
.activity__header[data-streaming] .activity__header-
|
|
77
|
+
.activity[data-streaming] .activity__header-action,
|
|
78
|
+
.activity__header[data-streaming] .activity__header-action {
|
|
59
79
|
animation: none;
|
|
60
80
|
background: none;
|
|
61
81
|
color: inherit;
|
|
@@ -63,8 +83,8 @@
|
|
|
63
83
|
}
|
|
64
84
|
|
|
65
85
|
@media (forced-colors: active) {
|
|
66
|
-
.activity[data-streaming] .activity__header-
|
|
67
|
-
.activity__header[data-streaming] .activity__header-
|
|
86
|
+
.activity[data-streaming] .activity__header-action,
|
|
87
|
+
.activity__header[data-streaming] .activity__header-action {
|
|
68
88
|
animation: none;
|
|
69
89
|
background: none;
|
|
70
90
|
color: inherit;
|
package/dist/styles/activity.css
CHANGED
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
gap: var(--sigvelo-spacing-1-5);
|
|
92
92
|
font-size: var(--sigvelo-text-compact);
|
|
93
93
|
color: var(--sigvelo-color-text);
|
|
94
|
-
line-height: var(--sigvelo-leading-
|
|
94
|
+
line-height: var(--sigvelo-leading-relaxed);
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/* Second collapse level: the trigger reads as a plain item row; the panel is
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
font-size: var(--sigvelo-text-compact);
|
|
119
119
|
font-weight: inherit;
|
|
120
120
|
color: var(--sigvelo-color-text);
|
|
121
|
-
line-height: var(--sigvelo-leading-
|
|
121
|
+
line-height: var(--sigvelo-leading-relaxed);
|
|
122
122
|
text-align: start;
|
|
123
123
|
cursor: pointer;
|
|
124
124
|
transition: background-color var(--sigvelo-motion-duration-interaction)
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
.activity__group-text {
|
|
165
165
|
margin: 0;
|
|
166
166
|
font-size: var(--sigvelo-text-compact);
|
|
167
|
-
line-height: var(--sigvelo-leading-
|
|
167
|
+
line-height: var(--sigvelo-leading-relaxed);
|
|
168
168
|
color: var(--sigvelo-color-text-muted);
|
|
169
169
|
white-space: pre-wrap;
|
|
170
170
|
overflow-wrap: anywhere;
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
margin: 0;
|
|
201
201
|
font-family: var(--sigvelo-font-mono);
|
|
202
202
|
font-size: var(--sigvelo-text-xs);
|
|
203
|
-
line-height: var(--sigvelo-leading-
|
|
203
|
+
line-height: var(--sigvelo-leading-relaxed);
|
|
204
204
|
color: var(--sigvelo-color-text);
|
|
205
205
|
white-space: pre-wrap;
|
|
206
206
|
overflow-wrap: anywhere;
|
|
@@ -323,6 +323,28 @@
|
|
|
323
323
|
overflow-wrap: anywhere;
|
|
324
324
|
}
|
|
325
325
|
|
|
326
|
+
/*
|
|
327
|
+
* The target of a row's action. Muted and shrink-first, so a column of rows
|
|
328
|
+
* reads down its verbs — "Read / Edited / Ran" — with the paths and commands
|
|
329
|
+
* present but out of the way.
|
|
330
|
+
*/
|
|
331
|
+
.activity__item-detail {
|
|
332
|
+
flex: 1 1 0;
|
|
333
|
+
min-inline-size: 0;
|
|
334
|
+
overflow: hidden;
|
|
335
|
+
color: var(--sigvelo-color-text-muted);
|
|
336
|
+
white-space: nowrap;
|
|
337
|
+
mask-image: linear-gradient(to right, #000 calc(100% - 1rem), transparent 100%);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/* The action keeps its content width once a detail is beside it to shrink. */
|
|
341
|
+
.activity__item:has(.activity__item-detail) .activity__item-text,
|
|
342
|
+
.activity__group-trigger:has(.activity__item-detail) .activity__item-text {
|
|
343
|
+
flex: 0 1 auto;
|
|
344
|
+
overflow-wrap: normal;
|
|
345
|
+
white-space: nowrap;
|
|
346
|
+
}
|
|
347
|
+
|
|
326
348
|
@media (hover: none) {
|
|
327
349
|
.activity__group-icon {
|
|
328
350
|
opacity: 1;
|
|
@@ -12,26 +12,53 @@
|
|
|
12
12
|
color: CanvasText;
|
|
13
13
|
font-family: system-ui, sans-serif;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
/*
|
|
16
|
+
* `all: initial` plus a closed shadow root means nothing inherits, so every
|
|
17
|
+
* token the imported stylesheets read has to be restated here. A token that
|
|
18
|
+
* is missing does not fall back to the page value — it resolves to nothing
|
|
19
|
+
* and the declaration is dropped, which is silent. Keep this list in step
|
|
20
|
+
* with what agent-activity-preview.css and activity-header.css actually use.
|
|
21
|
+
*
|
|
22
|
+
* These are px, not rem, and that is the point. This bundle renders in an
|
|
23
|
+
* active-tab content script, and `rem` resolves against the host page's root
|
|
24
|
+
* element — a page setting `html { font-size: 10px }` would shrink the whole
|
|
25
|
+
* preview by a third. `all: initial` does not isolate that; nothing does.
|
|
26
|
+
* A surface drawn on a page we do not control has to carry its own units.
|
|
27
|
+
*/
|
|
28
|
+
--sigvelo-spacing-0-5: 2px;
|
|
29
|
+
--sigvelo-spacing-1: 4px;
|
|
30
|
+
--sigvelo-spacing-1-5: 6px;
|
|
31
|
+
--sigvelo-spacing-2: 8px;
|
|
32
|
+
--sigvelo-spacing-3: 12px;
|
|
33
|
+
--sigvelo-spacing-8: 32px;
|
|
34
|
+
--sigvelo-radius-md: 8px;
|
|
35
|
+
--sigvelo-radius-lg: 12px;
|
|
36
|
+
--sigvelo-radius-xs: 3px;
|
|
37
|
+
--sigvelo-radius-full: 9999px;
|
|
38
|
+
--sigvelo-border-style: solid;
|
|
39
|
+
--sigvelo-border-width: 1px;
|
|
40
|
+
--sigvelo-text-compact: 13px;
|
|
41
|
+
--sigvelo-font-weight-normal: 400;
|
|
24
42
|
--sigvelo-font-weight-semibold: 500;
|
|
43
|
+
--sigvelo-control-height-sm: 32px;
|
|
44
|
+
--sigvelo-control-height-xl: 44px;
|
|
45
|
+
--sigvelo-control-icon-size-sm: 14px;
|
|
46
|
+
--sigvelo-control-icon-size-md: 16px;
|
|
47
|
+
--sigvelo-control-icon-size-lg: 18px;
|
|
25
48
|
--sigvelo-duration-fast: 150ms;
|
|
26
|
-
--sigvelo-duration-
|
|
49
|
+
--sigvelo-motion-duration-shimmer: 2400ms;
|
|
50
|
+
--sigvelo-motion-duration-spin: 900ms;
|
|
27
51
|
--sigvelo-ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
|
28
52
|
--sigvelo-color-surface: Canvas;
|
|
53
|
+
--sigvelo-color-surface-raised: Canvas;
|
|
29
54
|
--sigvelo-color-text: CanvasText;
|
|
30
55
|
--sigvelo-color-text-muted: GrayText;
|
|
31
56
|
--sigvelo-color-primary-text: LinkText;
|
|
32
57
|
--sigvelo-color-warning-text: #8a4b00;
|
|
33
58
|
--sigvelo-color-neutral-bg-subtle: color-mix(in oklab, CanvasText 7%, Canvas);
|
|
34
|
-
--sigvelo-
|
|
59
|
+
--sigvelo-elevation-raised:
|
|
60
|
+
0 0 0 0.5px color-mix(in oklab, CanvasText 8%, transparent),
|
|
61
|
+
0 1px 2px -1px color-mix(in oklab, CanvasText 8%, transparent);
|
|
35
62
|
--sigvelo-recipe-focus-shadow: 0 0 0 2px Canvas, 0 0 0 4px Highlight;
|
|
36
63
|
}
|
|
37
64
|
|
|
@@ -51,7 +78,7 @@
|
|
|
51
78
|
}
|
|
52
79
|
|
|
53
80
|
.sigvelo-icon--spinner {
|
|
54
|
-
animation: agent-activity-preview-spin var(--sigvelo-duration-
|
|
81
|
+
animation: agent-activity-preview-spin var(--sigvelo-motion-duration-spin) linear infinite;
|
|
55
82
|
transform-origin: center;
|
|
56
83
|
}
|
|
57
84
|
|
|
@@ -61,6 +88,18 @@
|
|
|
61
88
|
}
|
|
62
89
|
}
|
|
63
90
|
|
|
91
|
+
/* Shadow-local copy of base.css's sigvelo-text-shimmer — keyframes do not cross
|
|
92
|
+
shadow roots, so the imported activity header shimmer needs it defined here.
|
|
93
|
+
--sigvelo-motion-duration-shimmer inherits across the boundary. */
|
|
94
|
+
@keyframes sigvelo-text-shimmer {
|
|
95
|
+
from {
|
|
96
|
+
background-position: 100% 0;
|
|
97
|
+
}
|
|
98
|
+
to {
|
|
99
|
+
background-position: -100% 0;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
64
103
|
@media (prefers-color-scheme: dark) {
|
|
65
104
|
:host {
|
|
66
105
|
--sigvelo-color-warning-text: #f0aa45;
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
padding: var(--sigvelo-spacing-2);
|
|
6
6
|
border-radius: var(--sigvelo-radius-lg);
|
|
7
7
|
color: var(--sigvelo-color-text);
|
|
8
|
-
background:
|
|
9
|
-
box-shadow: var(--sigvelo-
|
|
8
|
+
background: var(--sigvelo-color-surface-raised);
|
|
9
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
.agent-activity-preview__badge {
|
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
inset-inline-end: var(--sigvelo-spacing-1);
|
|
16
16
|
display: grid;
|
|
17
17
|
place-items: center;
|
|
18
|
-
width:
|
|
19
|
-
height:
|
|
20
|
-
border-radius:
|
|
18
|
+
width: var(--sigvelo-control-height-sm);
|
|
19
|
+
height: var(--sigvelo-control-height-sm);
|
|
20
|
+
border-radius: var(--sigvelo-radius-full);
|
|
21
21
|
color: var(--sigvelo-color-primary-text);
|
|
22
|
-
background: var(--sigvelo-color-surface);
|
|
23
|
-
box-shadow: var(--sigvelo-
|
|
22
|
+
background: var(--sigvelo-color-surface-raised);
|
|
23
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
.agent-activity-preview__badge > svg {
|
|
27
|
-
width:
|
|
28
|
-
height:
|
|
27
|
+
width: var(--sigvelo-control-icon-size-md);
|
|
28
|
+
height: var(--sigvelo-control-icon-size-md);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
.agent-activity-preview__dismiss {
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
inset-inline-end: var(--sigvelo-spacing-1);
|
|
36
36
|
display: grid;
|
|
37
37
|
place-items: center;
|
|
38
|
-
width:
|
|
39
|
-
height:
|
|
38
|
+
width: var(--sigvelo-control-height-sm);
|
|
39
|
+
height: var(--sigvelo-control-height-sm);
|
|
40
40
|
padding: 0;
|
|
41
41
|
border: 0;
|
|
42
|
-
border-radius:
|
|
42
|
+
border-radius: var(--sigvelo-radius-full);
|
|
43
43
|
color: var(--sigvelo-color-text-muted);
|
|
44
|
-
background: var(--sigvelo-color-surface);
|
|
45
|
-
box-shadow: var(--sigvelo-
|
|
44
|
+
background: var(--sigvelo-color-surface-raised);
|
|
45
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
46
46
|
cursor: pointer;
|
|
47
47
|
opacity: 0;
|
|
48
48
|
scale: 0.92;
|
|
@@ -71,8 +71,8 @@
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
.agent-activity-preview__dismiss > svg {
|
|
74
|
-
width:
|
|
75
|
-
height:
|
|
74
|
+
width: var(--sigvelo-control-icon-size-sm);
|
|
75
|
+
height: var(--sigvelo-control-icon-size-sm);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
.agent-activity-preview__list {
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
.agent-activity-preview__item:first-child {
|
|
97
|
-
padding-inline-end: calc(
|
|
97
|
+
padding-inline-end: calc(var(--sigvelo-spacing-8) + var(--sigvelo-spacing-0-5));
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
.agent-activity-preview__row {
|
|
@@ -143,15 +143,15 @@
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
.agent-activity-preview__file-action > svg {
|
|
146
|
-
width:
|
|
147
|
-
height:
|
|
146
|
+
width: var(--sigvelo-control-icon-size-md);
|
|
147
|
+
height: var(--sigvelo-control-icon-size-md);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
.agent-activity-preview__row .activity__header {
|
|
151
151
|
gap: var(--sigvelo-spacing-2);
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
.agent-activity-preview__row .activity__header-
|
|
154
|
+
.agent-activity-preview__row .activity__header-action {
|
|
155
155
|
max-width: none;
|
|
156
156
|
}
|
|
157
157
|
|
|
@@ -166,23 +166,24 @@
|
|
|
166
166
|
.agent-activity-preview__favicons {
|
|
167
167
|
display: flex;
|
|
168
168
|
align-items: center;
|
|
169
|
-
padding-inline-start:
|
|
169
|
+
padding-inline-start: var(--sigvelo-spacing-1);
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
.agent-activity-preview__favicons img {
|
|
173
173
|
display: block;
|
|
174
|
-
width:
|
|
175
|
-
height:
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
border
|
|
179
|
-
|
|
174
|
+
width: var(--sigvelo-control-icon-size-lg);
|
|
175
|
+
height: var(--sigvelo-control-icon-size-lg);
|
|
176
|
+
/* Overlap the run of favicons by a quarter of a step. */
|
|
177
|
+
margin-inline-start: calc(-1 * var(--sigvelo-spacing-1));
|
|
178
|
+
border: 2px solid var(--sigvelo-color-surface-raised);
|
|
179
|
+
border-radius: var(--sigvelo-radius-full);
|
|
180
|
+
background: var(--sigvelo-color-surface-raised);
|
|
180
181
|
object-fit: contain;
|
|
181
182
|
}
|
|
182
183
|
|
|
183
184
|
.agent-activity-preview__trailing > svg {
|
|
184
|
-
width:
|
|
185
|
-
height:
|
|
185
|
+
width: var(--sigvelo-control-icon-size-md);
|
|
186
|
+
height: var(--sigvelo-control-icon-size-md);
|
|
186
187
|
}
|
|
187
188
|
|
|
188
189
|
.agent-activity-preview__row[data-status="running"] .agent-activity-preview__trailing > svg,
|
|
@@ -195,9 +196,9 @@
|
|
|
195
196
|
}
|
|
196
197
|
|
|
197
198
|
.agent-activity-preview__unviewed-dot {
|
|
198
|
-
width:
|
|
199
|
-
height:
|
|
200
|
-
border-radius:
|
|
199
|
+
width: var(--sigvelo-spacing-2);
|
|
200
|
+
height: var(--sigvelo-spacing-2);
|
|
201
|
+
border-radius: var(--sigvelo-radius-full);
|
|
201
202
|
background: currentColor;
|
|
202
203
|
}
|
|
203
204
|
|
|
@@ -234,6 +235,6 @@
|
|
|
234
235
|
.agent-activity-preview__dismiss,
|
|
235
236
|
.agent-activity-preview__file-action,
|
|
236
237
|
.agent-activity-preview__favicons img {
|
|
237
|
-
border:
|
|
238
|
+
border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
|
|
238
239
|
}
|
|
239
240
|
}
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
min-width: 0;
|
|
5
5
|
gap: var(--sigvelo-spacing-1-5);
|
|
6
6
|
padding: var(--sigvelo-spacing-1-5);
|
|
7
|
-
border:
|
|
7
|
+
border: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
|
8
|
+
var(--sigvelo-color-neutral-border-muted);
|
|
8
9
|
border-radius: var(--sigvelo-radius-md);
|
|
9
10
|
color: var(--sigvelo-color-text);
|
|
10
11
|
background: var(--sigvelo-color-surface);
|
|
11
|
-
box-shadow: var(--sigvelo-
|
|
12
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
.agent-attention[data-tone="warning"] {
|
|
@@ -57,7 +58,7 @@
|
|
|
57
58
|
.agent-attention__text {
|
|
58
59
|
display: grid;
|
|
59
60
|
min-width: 0;
|
|
60
|
-
line-height:
|
|
61
|
+
line-height: var(--sigvelo-leading-snug);
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
.agent-attention__title {
|
|
@@ -90,26 +91,18 @@
|
|
|
90
91
|
}
|
|
91
92
|
|
|
92
93
|
.agent-attention[data-busy] .agent-attention__title {
|
|
93
|
-
--
|
|
94
|
+
--sigvelo-shimmer-base: color-mix(in oklab, var(--sigvelo-color-text-muted), transparent 20%);
|
|
94
95
|
background: linear-gradient(
|
|
95
96
|
90deg,
|
|
96
|
-
var(--
|
|
97
|
+
var(--sigvelo-shimmer-base) 0% 40%,
|
|
97
98
|
var(--sigvelo-color-text) 50%,
|
|
98
|
-
var(--
|
|
99
|
+
var(--sigvelo-shimmer-base) 60% 100%
|
|
99
100
|
);
|
|
100
101
|
background-size: 200% 100%;
|
|
102
|
+
-webkit-background-clip: text;
|
|
101
103
|
background-clip: text;
|
|
102
104
|
color: transparent;
|
|
103
|
-
animation:
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
@keyframes agent-attention-shimmer {
|
|
107
|
-
from {
|
|
108
|
-
background-position: 100% 0;
|
|
109
|
-
}
|
|
110
|
-
to {
|
|
111
|
-
background-position: -100% 0;
|
|
112
|
-
}
|
|
105
|
+
animation: sigvelo-text-shimmer var(--sigvelo-motion-duration-shimmer) linear infinite;
|
|
113
106
|
}
|
|
114
107
|
|
|
115
108
|
@media (prefers-reduced-motion: reduce), (forced-colors: active) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
.agent-chat {
|
|
2
2
|
--agent-chat-content-max-inline-size: 64rem;
|
|
3
3
|
|
|
4
|
+
container: agent-chat / inline-size;
|
|
4
5
|
position: relative;
|
|
5
6
|
inline-size: 100%;
|
|
6
7
|
block-size: 100%;
|
|
@@ -44,6 +45,165 @@
|
|
|
44
45
|
--message-scroller-button-inset-block-end: var(--sigvelo-spacing-2);
|
|
45
46
|
}
|
|
46
47
|
|
|
48
|
+
.agent-chat-start-screen {
|
|
49
|
+
block-size: 100%;
|
|
50
|
+
min-block-size: 0;
|
|
51
|
+
overflow: auto;
|
|
52
|
+
scrollbar-gutter: stable;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.agent-chat-start-screen__content {
|
|
56
|
+
display: grid;
|
|
57
|
+
align-content: center;
|
|
58
|
+
gap: var(--sigvelo-spacing-6);
|
|
59
|
+
inline-size: min(100%, var(--agent-chat-content-max-inline-size));
|
|
60
|
+
min-block-size: 100%;
|
|
61
|
+
margin-inline: auto;
|
|
62
|
+
padding: clamp(var(--sigvelo-spacing-5), 8vb, var(--sigvelo-spacing-12)) var(--sigvelo-spacing-4);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.agent-chat-start-screen__heading {
|
|
66
|
+
margin: 0;
|
|
67
|
+
color: var(--sigvelo-color-text);
|
|
68
|
+
font-size: clamp(var(--sigvelo-text-2xl), 4vw, var(--sigvelo-text-3xl));
|
|
69
|
+
font-weight: var(--sigvelo-font-weight-semibold);
|
|
70
|
+
letter-spacing: var(--sigvelo-tracking-tight);
|
|
71
|
+
line-height: var(--sigvelo-leading-tight);
|
|
72
|
+
text-align: center;
|
|
73
|
+
text-wrap: balance;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.agent-chat-start-screen__content > .agent-chat__composer {
|
|
77
|
+
position: static;
|
|
78
|
+
padding: 0;
|
|
79
|
+
background: none;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* The one moment the composer is the subject of the screen rather than
|
|
83
|
+
chrome pinned under a transcript: rounder, and lifted further off the page. */
|
|
84
|
+
.agent-chat-start-screen__content > .agent-chat__composer > .prompt-input {
|
|
85
|
+
inline-size: 100%;
|
|
86
|
+
border-radius: var(--sigvelo-radius-3xl);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.agent-chat-start-screen__starters {
|
|
90
|
+
min-inline-size: 0;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.agent-chat-starter-list {
|
|
94
|
+
display: grid;
|
|
95
|
+
gap: var(--sigvelo-spacing-0-5);
|
|
96
|
+
margin: 0;
|
|
97
|
+
padding: 0;
|
|
98
|
+
list-style: none;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.agent-chat-starter {
|
|
102
|
+
display: grid;
|
|
103
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
104
|
+
align-items: center;
|
|
105
|
+
border-radius: var(--sigvelo-radius-xl);
|
|
106
|
+
transition: background-color var(--sigvelo-motion-duration-interaction)
|
|
107
|
+
var(--sigvelo-motion-ease-change);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* A suggestion is not a card. It fills on approach and stays flat — the only
|
|
111
|
+
raised surface on this screen is the composer. */
|
|
112
|
+
.agent-chat-starter:hover,
|
|
113
|
+
.agent-chat-starter:focus-within {
|
|
114
|
+
background-color: var(--sigvelo-color-surface-sunken);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.agent-chat-starter .agent-chat-starter__action {
|
|
118
|
+
justify-content: flex-start;
|
|
119
|
+
inline-size: 100%;
|
|
120
|
+
min-block-size: var(--sigvelo-control-height-xl);
|
|
121
|
+
min-inline-size: 0;
|
|
122
|
+
gap: var(--sigvelo-spacing-3);
|
|
123
|
+
padding-block: var(--sigvelo-spacing-2);
|
|
124
|
+
padding-inline: var(--sigvelo-spacing-3);
|
|
125
|
+
background: transparent;
|
|
126
|
+
color: var(--sigvelo-color-text-muted);
|
|
127
|
+
font-size: var(--sigvelo-text-base);
|
|
128
|
+
font-weight: var(--sigvelo-font-weight-normal);
|
|
129
|
+
text-align: start;
|
|
130
|
+
white-space: normal;
|
|
131
|
+
transition: color var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.agent-chat-starter .agent-chat-starter__action:hover:not([data-disabled]) {
|
|
135
|
+
background: transparent;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/* Resting text is quiet so the heading and composer lead; the row a pointer
|
|
139
|
+
or keyboard is actually on resolves to full-strength text. */
|
|
140
|
+
.agent-chat-starter:hover .agent-chat-starter__action,
|
|
141
|
+
.agent-chat-starter:focus-within .agent-chat-starter__action {
|
|
142
|
+
color: var(--sigvelo-color-text);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.agent-chat-starter__action[data-muted] {
|
|
146
|
+
color: var(--sigvelo-color-text-subtle);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.agent-chat-starter__icon {
|
|
150
|
+
display: inline-flex;
|
|
151
|
+
flex: none;
|
|
152
|
+
color: var(--sigvelo-color-primary-text);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.agent-chat-starter__label {
|
|
156
|
+
flex: 1;
|
|
157
|
+
min-inline-size: 0;
|
|
158
|
+
overflow-wrap: anywhere;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.agent-chat-starter__dismiss {
|
|
162
|
+
margin-inline-end: var(--sigvelo-spacing-1);
|
|
163
|
+
color: var(--sigvelo-color-text-faint);
|
|
164
|
+
opacity: 0;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.agent-chat-starter:hover .agent-chat-starter__dismiss,
|
|
168
|
+
.agent-chat-starter:focus-within .agent-chat-starter__dismiss {
|
|
169
|
+
opacity: 1;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* First paint only. The start screen is replaced by the transcript after the
|
|
173
|
+
first message, so this never re-runs mid-conversation. */
|
|
174
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
175
|
+
.agent-chat-start-screen__content > *,
|
|
176
|
+
.agent-chat-starter {
|
|
177
|
+
animation: agent-chat-start-screen-enter var(--sigvelo-motion-duration-disclosure)
|
|
178
|
+
var(--sigvelo-ease-snappy) backwards;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.agent-chat-start-screen__content > *:nth-child(2),
|
|
182
|
+
.agent-chat-starter:nth-child(2) {
|
|
183
|
+
animation-delay: calc(var(--sigvelo-motion-stagger-step) * 1);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.agent-chat-start-screen__content > *:nth-child(3),
|
|
187
|
+
.agent-chat-starter:nth-child(3) {
|
|
188
|
+
animation-delay: calc(var(--sigvelo-motion-stagger-step) * 2);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.agent-chat-starter:nth-child(4) {
|
|
192
|
+
animation-delay: calc(var(--sigvelo-motion-stagger-step) * 3);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.agent-chat-starter:nth-child(n + 5) {
|
|
196
|
+
animation-delay: calc(var(--sigvelo-motion-stagger-step) * 4);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
@keyframes agent-chat-start-screen-enter {
|
|
201
|
+
from {
|
|
202
|
+
opacity: 0;
|
|
203
|
+
translate: 0 var(--sigvelo-motion-distance-md);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
47
207
|
/* Floating over the transcript: solid behind the controls, fading out
|
|
48
208
|
through the top padding so content slides under instead of hitting a bar. */
|
|
49
209
|
.agent-chat__composer {
|
|
@@ -164,6 +324,10 @@
|
|
|
164
324
|
}
|
|
165
325
|
|
|
166
326
|
@media (any-pointer: coarse) {
|
|
327
|
+
.agent-chat-starter__dismiss {
|
|
328
|
+
opacity: 1;
|
|
329
|
+
}
|
|
330
|
+
|
|
167
331
|
.agent-chat__queued-message,
|
|
168
332
|
.agent-chat__queued-action {
|
|
169
333
|
min-block-size: var(--sigvelo-control-height-xl);
|
|
@@ -211,7 +375,42 @@
|
|
|
211
375
|
}
|
|
212
376
|
|
|
213
377
|
@media (forced-colors: active) {
|
|
378
|
+
.agent-chat-starter:hover,
|
|
379
|
+
.agent-chat-starter:focus-within {
|
|
380
|
+
outline: var(--sigvelo-border-width) solid CanvasText;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.agent-chat-starter__dismiss {
|
|
384
|
+
opacity: 1;
|
|
385
|
+
}
|
|
386
|
+
|
|
214
387
|
.agent-chat__turn-error {
|
|
215
388
|
border: var(--sigvelo-focus-width) solid CanvasText;
|
|
216
389
|
}
|
|
217
390
|
}
|
|
391
|
+
|
|
392
|
+
/* Sized against the chat's own box, not the viewport: this component is as
|
|
393
|
+
likely to be a 320px browser side panel as a full window, and the viewport
|
|
394
|
+
says nothing about which. Height still comes from the viewport — a container
|
|
395
|
+
cannot query its own block size without inline-size collapsing with it. */
|
|
396
|
+
@container agent-chat (width <= 36rem) {
|
|
397
|
+
.agent-chat-start-screen__content {
|
|
398
|
+
align-content: start;
|
|
399
|
+
padding-block: var(--sigvelo-spacing-5);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.agent-chat-start-screen__heading {
|
|
403
|
+
font-size: var(--sigvelo-text-2xl);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.agent-chat-starter__action {
|
|
407
|
+
font-size: var(--sigvelo-text-sm);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
@media (max-height: 40rem) {
|
|
412
|
+
.agent-chat-start-screen__content {
|
|
413
|
+
align-content: start;
|
|
414
|
+
padding-block: var(--sigvelo-spacing-5);
|
|
415
|
+
}
|
|
416
|
+
}
|