@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/base.css
CHANGED
|
@@ -13,11 +13,96 @@
|
|
|
13
13
|
margin: 0;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
/*
|
|
17
|
+
* Corner shape, system-wide.
|
|
18
|
+
*
|
|
19
|
+
* corner-shape has no effect on a square corner, so applying it everywhere
|
|
20
|
+
* costs nothing and means a component gets the shape by having a radius rather
|
|
21
|
+
* than by remembering to opt in. In browsers without corner-shape the token
|
|
22
|
+
* resolves to `round` and nothing changes.
|
|
23
|
+
*
|
|
24
|
+
* The exception is a pill or a circle: a superellipse turns a stadium into a
|
|
25
|
+
* lozenge and a circle into a squircle. Anything using --sigvelo-radius-full or
|
|
26
|
+
* --sigvelo-radius-circle therefore overrides the custom property back to
|
|
27
|
+
* `round` in the block below. audit:css-recipes fails if that list falls out of
|
|
28
|
+
* sync with the stylesheets.
|
|
29
|
+
*/
|
|
30
|
+
:where(*) {
|
|
31
|
+
corner-shape: var(--sigvelo-corner-shape);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* sigvelo-pill-shapes:start */
|
|
35
|
+
:where(
|
|
36
|
+
.agent-activity-preview__badge,
|
|
37
|
+
.agent-activity-preview__dismiss,
|
|
38
|
+
.agent-activity-preview__favicons img,
|
|
39
|
+
.agent-activity-preview__unviewed-dot,
|
|
40
|
+
.approval__key,
|
|
41
|
+
.avatar,
|
|
42
|
+
.avatar-group__count,
|
|
43
|
+
.avatar__badge,
|
|
44
|
+
.avatar__fallback,
|
|
45
|
+
.badge,
|
|
46
|
+
.browser-run-panel__tab-glyph,
|
|
47
|
+
.chain-of-thought__search-result,
|
|
48
|
+
.chain-of-thought__step-indicator,
|
|
49
|
+
.codex-model-selector__trigger,
|
|
50
|
+
.codex-model-selector__trigger::before,
|
|
51
|
+
.empty-state__icon,
|
|
52
|
+
.inline-citation__trigger,
|
|
53
|
+
.media-preview-card__play,
|
|
54
|
+
.menu__radio-indicator::before,
|
|
55
|
+
.message-scroller__button,
|
|
56
|
+
.plan__step-indicator,
|
|
57
|
+
.prompt-input__button[data-responsive-label],
|
|
58
|
+
.prompt-input__context-trigger,
|
|
59
|
+
.prompt-input__dictation[data-listening] .prompt-input__dictation-icon::before,
|
|
60
|
+
.prompt-input__permissions-trigger,
|
|
61
|
+
.prompt-input__recording-button,
|
|
62
|
+
.prompt-input__stop,
|
|
63
|
+
.prompt-input__submit,
|
|
64
|
+
.queue__item-indicator,
|
|
65
|
+
.radio,
|
|
66
|
+
.radio__indicator,
|
|
67
|
+
.scroll-area__thumb,
|
|
68
|
+
.slider__indicator,
|
|
69
|
+
.slider__thumb,
|
|
70
|
+
.slider__track,
|
|
71
|
+
.status-pill__dot,
|
|
72
|
+
.stepper__indicator,
|
|
73
|
+
.stepper__separator,
|
|
74
|
+
.stepper__trigger,
|
|
75
|
+
.subagent-run__milestone::before,
|
|
76
|
+
.subagent-run__selector,
|
|
77
|
+
.switch,
|
|
78
|
+
.switch__thumb,
|
|
79
|
+
.task__item::before,
|
|
80
|
+
.test-results__test-status,
|
|
81
|
+
.think-routine-library__routine-status,
|
|
82
|
+
[data-slot="meter-indicator"],
|
|
83
|
+
[data-slot="meter-track"],
|
|
84
|
+
[data-slot="progress-indicator"],
|
|
85
|
+
[data-slot="progress-track"]
|
|
86
|
+
) {
|
|
87
|
+
--sigvelo-corner-shape: round;
|
|
88
|
+
}
|
|
89
|
+
/* sigvelo-pill-shapes:end */
|
|
90
|
+
|
|
91
|
+
/*
|
|
92
|
+
* Interface text reads at 14px, not at the 16px root.
|
|
93
|
+
*
|
|
94
|
+
* The root stays 16px so 1rem is still 16px and the 4px spacing grid is
|
|
95
|
+
* untouched — the same split the reference bundles use, where the type scale
|
|
96
|
+
* is re-pointed but the spacing base stays at 0.25rem. Components that name a
|
|
97
|
+
* step explicitly are unaffected; this only moves what inherited text lands on,
|
|
98
|
+
* which is where a 16px default reads oversized against 32px rows and 13px
|
|
99
|
+
* control labels.
|
|
100
|
+
*/
|
|
16
101
|
body {
|
|
17
102
|
position: relative;
|
|
18
103
|
font-family: var(--sigvelo-font-sans);
|
|
19
|
-
font-size: var(--sigvelo-text-
|
|
20
|
-
line-height: var(--sigvelo-leading
|
|
104
|
+
font-size: var(--sigvelo-text-sm);
|
|
105
|
+
line-height: var(--sigvelo-text-sm-leading);
|
|
21
106
|
color: var(--sigvelo-color-text);
|
|
22
107
|
background-color: var(--sigvelo-color-canvas);
|
|
23
108
|
-webkit-font-smoothing: antialiased;
|
|
@@ -25,7 +110,7 @@ body {
|
|
|
25
110
|
}
|
|
26
111
|
|
|
27
112
|
.sigvelo-icon--spinner {
|
|
28
|
-
animation: sigvelo-icon-spin var(--sigvelo-duration-
|
|
113
|
+
animation: sigvelo-icon-spin var(--sigvelo-motion-duration-spin) linear infinite;
|
|
29
114
|
transform-origin: center;
|
|
30
115
|
}
|
|
31
116
|
|
|
@@ -56,6 +141,13 @@ body {
|
|
|
56
141
|
}
|
|
57
142
|
}
|
|
58
143
|
|
|
144
|
+
/* Headings are short enough for the browser to balance the rag for free;
|
|
145
|
+
balance gives up past a handful of lines, so this costs nothing on the
|
|
146
|
+
occasional long one. */
|
|
147
|
+
:where(h1, h2, h3, h4, h5, h6) {
|
|
148
|
+
text-wrap: balance;
|
|
149
|
+
}
|
|
150
|
+
|
|
59
151
|
code,
|
|
60
152
|
kbd,
|
|
61
153
|
samp,
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
* Standalone stylesheet for browser-control chrome mounted in a closed shadow
|
|
3
3
|
* root. It intentionally uses system colors so it remains legible on arbitrary
|
|
4
4
|
* pages without leaking the full document-level token sheet into the host.
|
|
5
|
+
*
|
|
6
|
+
* Every length here is a literal on purpose. The token layer does not exist
|
|
7
|
+
* inside this shadow root, so a --sigvelo-* reference resolves to nothing and
|
|
8
|
+
* takes its whole declaration with it — silently, and only on a real host page,
|
|
9
|
+
* which is the one place this is hard to notice. Keep the values on the 4px
|
|
10
|
+
* grid by hand; audit:css-recipes checks both halves of that.
|
|
5
11
|
*/
|
|
6
12
|
|
|
7
13
|
:host {
|
|
@@ -18,6 +24,10 @@
|
|
|
18
24
|
padding: 0;
|
|
19
25
|
pointer-events: none;
|
|
20
26
|
position: fixed;
|
|
27
|
+
/* Mirrors --sigvelo-z-host-overlay, deliberately as a literal. This sheet is
|
|
28
|
+
mounted in a closed shadow root on someone else's page, where the token
|
|
29
|
+
layer does not exist; var() would resolve to nothing, z-index would fall
|
|
30
|
+
back to auto, and the overlay would quietly stop being on top. */
|
|
21
31
|
z-index: 2147483647;
|
|
22
32
|
}
|
|
23
33
|
|
|
@@ -69,7 +79,7 @@
|
|
|
69
79
|
font:
|
|
70
80
|
600 12px/1.2 system-ui,
|
|
71
81
|
sans-serif;
|
|
72
|
-
padding:
|
|
82
|
+
padding: 8px 12px;
|
|
73
83
|
}
|
|
74
84
|
|
|
75
85
|
:host button:focus-visible {
|
|
@@ -85,7 +95,7 @@
|
|
|
85
95
|
:host .takeover,
|
|
86
96
|
:host .owner {
|
|
87
97
|
background: var(--browser-control-accent);
|
|
88
|
-
border:
|
|
98
|
+
border: solid 1px var(--browser-control-accent-text);
|
|
89
99
|
box-shadow: 0 2px 10px var(--browser-control-shadow);
|
|
90
100
|
color: var(--browser-control-accent-text);
|
|
91
101
|
}
|
|
@@ -109,7 +119,7 @@
|
|
|
109
119
|
left: 10px;
|
|
110
120
|
max-width: min(360px, 60vw);
|
|
111
121
|
overflow: hidden;
|
|
112
|
-
padding:
|
|
122
|
+
padding: 8px 12px;
|
|
113
123
|
pointer-events: none;
|
|
114
124
|
position: fixed;
|
|
115
125
|
text-overflow: ellipsis;
|
|
@@ -120,8 +130,7 @@
|
|
|
120
130
|
:host .banner {
|
|
121
131
|
align-items: center;
|
|
122
132
|
background: var(--browser-control-warning);
|
|
123
|
-
border: var(--
|
|
124
|
-
var(--browser-control-warning-text);
|
|
133
|
+
border: solid 1px var(--browser-control-warning-text);
|
|
125
134
|
border-radius: 14px;
|
|
126
135
|
box-shadow: 0 4px 18px var(--browser-control-shadow);
|
|
127
136
|
color: var(--browser-control-warning-text);
|
|
@@ -132,7 +141,7 @@
|
|
|
132
141
|
gap: 10px;
|
|
133
142
|
left: 50%;
|
|
134
143
|
max-width: min(720px, calc(100vw - 32px));
|
|
135
|
-
padding:
|
|
144
|
+
padding: 8px 10px 8px 16px;
|
|
136
145
|
pointer-events: auto;
|
|
137
146
|
position: fixed;
|
|
138
147
|
top: 12px;
|
|
@@ -148,7 +157,7 @@
|
|
|
148
157
|
|
|
149
158
|
:host .banner .done,
|
|
150
159
|
:host .banner .cannot {
|
|
151
|
-
border:
|
|
160
|
+
border: solid 1px currentcolor;
|
|
152
161
|
color: inherit;
|
|
153
162
|
flex-shrink: 0;
|
|
154
163
|
}
|
|
@@ -27,25 +27,17 @@
|
|
|
27
27
|
opacity: 1;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
/* The chip itself is the library
|
|
31
|
-
placement lives here. */
|
|
30
|
+
/* The chip itself is the library StatusPill (sm/destructive/busy) — only the
|
|
31
|
+
overlay placement lives here. */
|
|
32
32
|
.browser-live-view__badge {
|
|
33
33
|
position: absolute;
|
|
34
34
|
inset-block-start: var(--sigvelo-spacing-2);
|
|
35
35
|
inset-inline-end: var(--sigvelo-spacing-2);
|
|
36
36
|
z-index: 1;
|
|
37
|
-
box-shadow: var(--sigvelo-
|
|
37
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
38
38
|
pointer-events: none;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
.browser-live-view__badge-dot {
|
|
42
|
-
inline-size: var(--sigvelo-spacing-1-5);
|
|
43
|
-
block-size: var(--sigvelo-spacing-1-5);
|
|
44
|
-
border-radius: var(--sigvelo-radius-circle);
|
|
45
|
-
background-color: currentColor;
|
|
46
|
-
animation: browser-live-view-pulse 1.4s ease-in-out infinite;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
41
|
/* Ended state: quiet fill, same footprint so the layout never jumps */
|
|
50
42
|
.browser-live-view__ended {
|
|
51
43
|
display: flex;
|
|
@@ -91,10 +83,6 @@
|
|
|
91
83
|
z-index: 1;
|
|
92
84
|
}
|
|
93
85
|
|
|
94
|
-
.browser-live-view__state-spinner {
|
|
95
|
-
animation: sigvelo-icon-spin 900ms linear infinite;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
86
|
/* Expand affordance, video-player style: quiet until the box is hovered or
|
|
99
87
|
the button is focused */
|
|
100
88
|
.browser-live-view__expand {
|
|
@@ -102,8 +90,8 @@
|
|
|
102
90
|
inset-block-end: var(--sigvelo-spacing-2);
|
|
103
91
|
inset-inline-end: var(--sigvelo-spacing-2);
|
|
104
92
|
z-index: 1;
|
|
105
|
-
background-color: var(--sigvelo-color-surface);
|
|
106
|
-
box-shadow: var(--sigvelo-
|
|
93
|
+
background-color: var(--sigvelo-color-surface-raised);
|
|
94
|
+
box-shadow: var(--sigvelo-elevation-floating);
|
|
107
95
|
opacity: 0;
|
|
108
96
|
transition:
|
|
109
97
|
opacity var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change),
|
|
@@ -144,27 +132,6 @@
|
|
|
144
132
|
object-fit: contain;
|
|
145
133
|
}
|
|
146
134
|
|
|
147
|
-
@keyframes browser-live-view-pulse {
|
|
148
|
-
0%,
|
|
149
|
-
100% {
|
|
150
|
-
opacity: 1;
|
|
151
|
-
}
|
|
152
|
-
50% {
|
|
153
|
-
opacity: 0.4;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
@media (prefers-reduced-motion: reduce) {
|
|
158
|
-
.browser-live-view__badge-dot,
|
|
159
|
-
.browser-live-view__state-spinner {
|
|
160
|
-
animation: none;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
:root[data-motion="reduce"] :is(.browser-live-view__badge-dot, .browser-live-view__state-spinner) {
|
|
165
|
-
animation: none;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
135
|
@media (hover: none) {
|
|
169
136
|
.browser-live-view__expand {
|
|
170
137
|
opacity: 1;
|
|
@@ -34,15 +34,11 @@
|
|
|
34
34
|
pointer-events: none;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
/* Positioning only: this overlays the replay stage. The typography is
|
|
38
|
+
.empty-state. */
|
|
37
39
|
.browser-replay__empty {
|
|
38
40
|
position: absolute;
|
|
39
41
|
inset: 0;
|
|
40
|
-
display: grid;
|
|
41
|
-
place-content: center;
|
|
42
|
-
padding: var(--sigvelo-spacing-4);
|
|
43
|
-
color: var(--sigvelo-color-text-muted);
|
|
44
|
-
font-size: var(--sigvelo-text-compact);
|
|
45
|
-
text-align: center;
|
|
46
42
|
}
|
|
47
43
|
|
|
48
44
|
.browser-replay__controls {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
.browser-run-panel .web-preview__nav:has(.browser-run-panel__tabs) {
|
|
8
|
-
min-block-size:
|
|
8
|
+
min-block-size: var(--sigvelo-spacing-12);
|
|
9
9
|
gap: 0;
|
|
10
10
|
padding-block: 0;
|
|
11
11
|
padding-inline: var(--sigvelo-spacing-1-5);
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
.browser-run-panel__tab-glyph {
|
|
50
50
|
display: grid;
|
|
51
51
|
flex: none;
|
|
52
|
-
inline-size:
|
|
53
|
-
block-size:
|
|
52
|
+
inline-size: var(--sigvelo-control-icon-size-lg);
|
|
53
|
+
block-size: var(--sigvelo-control-icon-size-lg);
|
|
54
54
|
place-items: center;
|
|
55
55
|
border-radius: var(--sigvelo-radius-circle);
|
|
56
56
|
background: var(--sigvelo-color-primary-bg-subtle);
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
.browser-run-panel__address-bar {
|
|
70
|
-
min-block-size:
|
|
70
|
+
min-block-size: var(--sigvelo-spacing-12);
|
|
71
71
|
background: var(--sigvelo-color-surface);
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -101,20 +101,6 @@
|
|
|
101
101
|
color: var(--sigvelo-color-danger-text);
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
.browser-run-panel__spinner {
|
|
105
|
-
animation: sigvelo-icon-spin 900ms linear infinite;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
@media (prefers-reduced-motion: reduce) {
|
|
109
|
-
.browser-run-panel__spinner {
|
|
110
|
-
animation: none;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
:root[data-motion="reduce"] .browser-run-panel__spinner {
|
|
115
|
-
animation: none;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
104
|
@media (forced-colors: active) {
|
|
119
105
|
.browser-run-panel__tab[data-active] {
|
|
120
106
|
outline: var(--sigvelo-focus-ring-forced);
|
package/dist/styles/button.css
CHANGED
|
@@ -27,7 +27,9 @@
|
|
|
27
27
|
color var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change),
|
|
28
28
|
border-color var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change),
|
|
29
29
|
box-shadow var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change),
|
|
30
|
-
|
|
30
|
+
/* Release settles with a damped spring; the color transitions above stay on
|
|
31
|
+
the standard curve, where a bounce would just read as a slow fade. */
|
|
32
|
+
translate var(--sigvelo-motion-duration-presence) var(--sigvelo-ease-press);
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
.button svg {
|
package/dist/styles/card.css
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
.card {
|
|
2
|
-
background-color: var(--sigvelo-color-surface);
|
|
2
|
+
background-color: var(--sigvelo-color-surface-raised);
|
|
3
3
|
color: var(--sigvelo-color-text);
|
|
4
|
-
/* Shadow-led elevation:
|
|
4
|
+
/* Shadow-led elevation: the hairline ring in the stack is the perimeter. */
|
|
5
5
|
border-radius: var(--sigvelo-radius-lg);
|
|
6
6
|
padding: var(--sigvelo-spacing-4);
|
|
7
|
-
box-shadow: var(--sigvelo-
|
|
7
|
+
box-shadow: var(--sigvelo-elevation-raised);
|
|
8
8
|
transition: box-shadow var(--sigvelo-motion-duration-interaction)
|
|
9
9
|
var(--sigvelo-motion-ease-change);
|
|
10
10
|
}
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
.card--hover:hover {
|
|
86
|
-
box-shadow: var(--sigvelo-
|
|
86
|
+
box-shadow: var(--sigvelo-elevation-floating);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
.card--hover:focus-visible {
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
font-size: var(--sigvelo-text-2xl);
|
|
74
74
|
font-weight: var(--sigvelo-font-weight-bold);
|
|
75
75
|
letter-spacing: 0;
|
|
76
|
-
line-height:
|
|
76
|
+
line-height: var(--sigvelo-leading-tight);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
.chatgpt-sign-in__brand p {
|
|
@@ -93,8 +93,8 @@
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
.chatgpt-sign-in__brand-mark :where(img, svg) {
|
|
96
|
-
inline-size:
|
|
97
|
-
block-size:
|
|
96
|
+
inline-size: var(--sigvelo-control-icon-size-xl);
|
|
97
|
+
block-size: var(--sigvelo-control-icon-size-xl);
|
|
98
98
|
filter: drop-shadow(
|
|
99
99
|
0 0.25rem 0.5rem color-mix(in oklab, var(--sigvelo-color-primary-bg), transparent 72%)
|
|
100
100
|
);
|
|
@@ -109,7 +109,8 @@
|
|
|
109
109
|
overflow: hidden;
|
|
110
110
|
min-inline-size: min(100%, 16.75rem);
|
|
111
111
|
box-shadow:
|
|
112
|
-
inset 0 0 0
|
|
112
|
+
inset 0 0 0 var(--sigvelo-border-width)
|
|
113
|
+
color-mix(in oklab, var(--sigvelo-color-primary-text-on-bg), transparent 84%),
|
|
113
114
|
0 0.75rem 1.5rem color-mix(in oklab, var(--sigvelo-color-primary-bg), transparent 78%);
|
|
114
115
|
translate: 0;
|
|
115
116
|
scale: 1;
|
|
@@ -153,7 +154,8 @@
|
|
|
153
154
|
|
|
154
155
|
.chatgpt-sign-in__button:hover:not([data-disabled]) {
|
|
155
156
|
box-shadow:
|
|
156
|
-
inset 0 0 0
|
|
157
|
+
inset 0 0 0 var(--sigvelo-border-width)
|
|
158
|
+
color-mix(in oklab, var(--sigvelo-color-primary-text-on-bg), transparent 76%),
|
|
157
159
|
0 0.9rem 1.9rem color-mix(in oklab, var(--sigvelo-color-primary-bg), transparent 72%);
|
|
158
160
|
translate: 0 -0.0625rem;
|
|
159
161
|
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
display: flex;
|
|
16
16
|
align-items: center;
|
|
17
17
|
gap: var(--sigvelo-spacing-2);
|
|
18
|
-
min-block-size:
|
|
18
|
+
min-block-size: var(--sigvelo-spacing-11);
|
|
19
19
|
padding-inline: var(--sigvelo-spacing-3);
|
|
20
20
|
border-radius: var(--sigvelo-radius-md);
|
|
21
21
|
color: var(--sigvelo-color-text);
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
.checkbox-group__icon svg {
|
|
43
|
-
inline-size:
|
|
44
|
-
block-size:
|
|
43
|
+
inline-size: var(--sigvelo-control-icon-size-md);
|
|
44
|
+
block-size: var(--sigvelo-control-icon-size-md);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.checkbox-group__content {
|
|
@@ -56,10 +56,10 @@
|
|
|
56
56
|
.code-block__content {
|
|
57
57
|
margin: 0;
|
|
58
58
|
padding-block: var(--sigvelo-spacing-3);
|
|
59
|
-
padding-inline:
|
|
59
|
+
padding-inline: var(--sigvelo-spacing-3-5);
|
|
60
60
|
font-family: var(--sigvelo-font-mono);
|
|
61
61
|
font-size: var(--sigvelo-text-compact);
|
|
62
|
-
line-height:
|
|
62
|
+
line-height: var(--sigvelo-leading-normal);
|
|
63
63
|
color: var(--sigvelo-color-text);
|
|
64
64
|
overflow: visible;
|
|
65
65
|
}
|
|
@@ -71,11 +71,11 @@
|
|
|
71
71
|
.code-block__content--highlighted pre.shiki {
|
|
72
72
|
margin: 0;
|
|
73
73
|
padding-block: var(--sigvelo-spacing-3);
|
|
74
|
-
padding-inline:
|
|
74
|
+
padding-inline: var(--sigvelo-spacing-3-5);
|
|
75
75
|
background-color: transparent !important;
|
|
76
76
|
font-family: var(--sigvelo-font-mono);
|
|
77
77
|
font-size: var(--sigvelo-text-compact);
|
|
78
|
-
line-height:
|
|
78
|
+
line-height: var(--sigvelo-leading-normal);
|
|
79
79
|
overflow: visible;
|
|
80
80
|
}
|
|
81
81
|
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
.context-menu__radio-item:focus-visible,
|
|
31
31
|
.context-menu__submenu-trigger:focus-visible {
|
|
32
32
|
outline: none;
|
|
33
|
-
box-shadow:
|
|
33
|
+
box-shadow: var(--sigvelo-recipe-focus-shadow-inset);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
.context-menu__label {
|
|
@@ -32,51 +32,16 @@
|
|
|
32
32
|
min-block-size: 0;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
.conversation__empty {
|
|
36
|
-
display: flex;
|
|
37
|
-
flex: 1;
|
|
38
|
-
flex-direction: column;
|
|
39
|
-
align-items: center;
|
|
40
|
-
justify-content: center;
|
|
41
|
-
gap: var(--sigvelo-spacing-2);
|
|
42
|
-
padding-block: var(--sigvelo-spacing-12);
|
|
43
|
-
padding-inline: var(--sigvelo-spacing-6);
|
|
44
|
-
text-align: center;
|
|
45
|
-
color: var(--sigvelo-color-text-muted);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
.conversation__empty-icon {
|
|
49
|
-
display: inline-flex;
|
|
50
|
-
align-items: center;
|
|
51
|
-
justify-content: center;
|
|
52
|
-
inline-size: var(--sigvelo-spacing-12);
|
|
53
|
-
block-size: var(--sigvelo-spacing-12);
|
|
54
|
-
border-radius: var(--sigvelo-radius-full);
|
|
55
|
-
background-color: var(--sigvelo-color-neutral-bg-subtle);
|
|
56
|
-
color: var(--sigvelo-color-text-muted);
|
|
57
|
-
margin-block-end: var(--sigvelo-spacing-1);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.conversation__empty-title {
|
|
61
|
-
font-size: var(--sigvelo-text-base);
|
|
62
|
-
font-weight: var(--sigvelo-font-weight-semibold);
|
|
63
|
-
color: var(--sigvelo-color-text);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.conversation__empty-description {
|
|
67
|
-
max-inline-size: 32ch;
|
|
68
|
-
font-size: var(--sigvelo-text-sm);
|
|
69
|
-
line-height: var(--sigvelo-leading-normal);
|
|
70
|
-
color: var(--sigvelo-color-text-muted);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
35
|
.conversation__scroll-button {
|
|
74
36
|
position: absolute;
|
|
75
37
|
inset-inline-end: var(--sigvelo-spacing-3);
|
|
76
38
|
inset-block-end: var(--sigvelo-spacing-3);
|
|
77
39
|
z-index: 1;
|
|
78
|
-
|
|
79
|
-
|
|
40
|
+
/* Hovers over the transcript rather than sitting in it, so it takes the
|
|
41
|
+
floating stack: the wide ambient layer is what separates it from whatever
|
|
42
|
+
message happens to scroll underneath. */
|
|
43
|
+
box-shadow: var(--sigvelo-elevation-floating);
|
|
44
|
+
background-color: var(--sigvelo-color-surface-raised);
|
|
80
45
|
}
|
|
81
46
|
|
|
82
47
|
.conversation__download-button {
|
|
@@ -84,8 +49,8 @@
|
|
|
84
49
|
inset-inline-end: var(--sigvelo-spacing-3);
|
|
85
50
|
inset-block-start: var(--sigvelo-spacing-3);
|
|
86
51
|
z-index: 1;
|
|
87
|
-
box-shadow: var(--sigvelo-
|
|
88
|
-
background-color: var(--sigvelo-color-surface);
|
|
52
|
+
box-shadow: var(--sigvelo-elevation-floating);
|
|
53
|
+
background-color: var(--sigvelo-color-surface-raised);
|
|
89
54
|
}
|
|
90
55
|
|
|
91
56
|
@media (forced-colors: active) {
|
package/dist/styles/dialog.css
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
|
+
/* Blurring the page behind the scrim reads as depth rather than as a dark
|
|
2
|
+
sheet, and keeps the dismissed content recognizable underneath. Browsers
|
|
3
|
+
without backdrop-filter still get the scrim on its own.
|
|
4
|
+
|
|
5
|
+
The blur does run on every frame of the open fade — the scrim covers the
|
|
6
|
+
viewport, so each frame re-filters all of it. What makes that affordable is
|
|
7
|
+
the filter itself: one 8px radius, no second pass. An earlier
|
|
8
|
+
blur(24px) saturate(180%) cost about a third of the Storybook suite in
|
|
9
|
+
timing failures, in stories that had nothing to do with dialogs.
|
|
10
|
+
|
|
11
|
+
Gating this behind :not([data-starting-style]) looks like it skips the fade
|
|
12
|
+
and does not. Base UI drops that attribute on the frame after mount, so the
|
|
13
|
+
blur is live from frame 1 while the opacity climbs for ~13 more. It bought
|
|
14
|
+
one frame and read as though it bought fourteen. */
|
|
1
15
|
.dialog__backdrop {
|
|
2
16
|
background-color: var(--sigvelo-color-backdrop);
|
|
3
|
-
|
|
17
|
+
backdrop-filter: var(--sigvelo-glass-filter);
|
|
18
|
+
z-index: var(--sigvelo-z-overlay);
|
|
4
19
|
}
|
|
5
20
|
|
|
6
21
|
.dialog__popup {
|
|
@@ -10,7 +25,7 @@
|
|
|
10
25
|
inset-block-start: 50%;
|
|
11
26
|
inset-inline-start: 50%;
|
|
12
27
|
translate: -50% -50%;
|
|
13
|
-
z-index:
|
|
28
|
+
z-index: var(--sigvelo-z-overlay);
|
|
14
29
|
inline-size: calc(100% - var(--sigvelo-control-height-sm));
|
|
15
30
|
max-inline-size: 32rem;
|
|
16
31
|
max-block-size: calc(100dvb - var(--sigvelo-spacing-8));
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* One anatomy for every "there is nothing here yet". Codex splits these into
|
|
3
|
+
* an inline variant and a page variant, but the difference between them is how
|
|
4
|
+
* much the container gives the block, not what the block is — so the size
|
|
5
|
+
* lives in one variable and the centring lives in the parent.
|
|
6
|
+
*/
|
|
7
|
+
.empty-state {
|
|
8
|
+
--sigvelo-recipe-empty-state-padding-block: var(--sigvelo-spacing-4);
|
|
9
|
+
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
align-items: center;
|
|
13
|
+
justify-content: center;
|
|
14
|
+
gap: var(--sigvelo-spacing-2);
|
|
15
|
+
padding-block: var(--sigvelo-recipe-empty-state-padding-block);
|
|
16
|
+
padding-inline: var(--sigvelo-spacing-3);
|
|
17
|
+
color: var(--sigvelo-color-text-muted);
|
|
18
|
+
font-size: var(--sigvelo-text-compact);
|
|
19
|
+
line-height: var(--sigvelo-text-compact-leading);
|
|
20
|
+
text-align: center;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.empty-state__icon {
|
|
24
|
+
display: inline-flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
inline-size: var(--sigvelo-spacing-12);
|
|
28
|
+
block-size: var(--sigvelo-spacing-12);
|
|
29
|
+
margin-block-end: var(--sigvelo-spacing-1);
|
|
30
|
+
border-radius: var(--sigvelo-radius-full);
|
|
31
|
+
background-color: var(--sigvelo-color-neutral-bg-subtle);
|
|
32
|
+
color: var(--sigvelo-color-text-muted);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.empty-state__title {
|
|
36
|
+
color: var(--sigvelo-color-text);
|
|
37
|
+
font-size: var(--sigvelo-text-base);
|
|
38
|
+
font-weight: var(--sigvelo-font-weight-semibold);
|
|
39
|
+
line-height: var(--sigvelo-text-base-leading);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Prose, so it takes a measure. Without one a wide panel sets a single
|
|
43
|
+
sentence across its whole width and the reader loses the line. */
|
|
44
|
+
.empty-state__description {
|
|
45
|
+
max-inline-size: 32ch;
|
|
46
|
+
font-size: var(--sigvelo-text-sm);
|
|
47
|
+
line-height: var(--sigvelo-text-sm-leading);
|
|
48
|
+
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
justify-content: space-between;
|
|
5
5
|
gap: var(--sigvelo-spacing-3);
|
|
6
6
|
padding-block: var(--sigvelo-spacing-2-5);
|
|
7
|
-
padding-inline:
|
|
7
|
+
padding-inline: var(--sigvelo-spacing-3-5);
|
|
8
8
|
border-block-end: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
|
9
9
|
var(--sigvelo-color-neutral-border-subtle);
|
|
10
10
|
}
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
.environment-variables__group-label {
|
|
44
44
|
padding-block: var(--sigvelo-spacing-1-5);
|
|
45
|
-
padding-inline:
|
|
45
|
+
padding-inline: var(--sigvelo-spacing-3-5);
|
|
46
46
|
font-size: var(--sigvelo-text-2xs);
|
|
47
47
|
font-weight: var(--sigvelo-font-weight-bold);
|
|
48
48
|
text-transform: uppercase;
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
align-items: center;
|
|
59
59
|
gap: var(--sigvelo-spacing-2-5);
|
|
60
60
|
padding-block: var(--sigvelo-spacing-2);
|
|
61
|
-
padding-inline:
|
|
61
|
+
padding-inline: var(--sigvelo-spacing-3-5);
|
|
62
62
|
border-block-end: var(--sigvelo-border-style) var(--sigvelo-border-width)
|
|
63
63
|
var(--sigvelo-color-neutral-border-subtle);
|
|
64
64
|
}
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
.environment-variables__value {
|
|
80
80
|
flex: 1;
|
|
81
81
|
min-width: 0;
|
|
82
|
-
padding-block:
|
|
82
|
+
padding-block: var(--sigvelo-spacing-1-5);
|
|
83
83
|
padding-inline: var(--sigvelo-spacing-2);
|
|
84
84
|
font-family: var(--sigvelo-font-mono);
|
|
85
85
|
font-size: var(--sigvelo-text-xs);
|