@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.
Files changed (134) hide show
  1. package/dist/{AgentActivity-D2SHSGFX.d.ts → AgentActivity-D3OvrC02.d.ts} +14 -1
  2. package/dist/{AgentChat-C-ZyXbJz.d.ts → AgentChat-Dvkn8lce.d.ts} +23 -0
  3. package/dist/AgentChatStartScreen-CvXJBr4y.d.ts +57 -0
  4. package/dist/{ModelSelector-pecWyOFI.js → ModelSelector-CEd8M9eK.js} +14 -7
  5. package/dist/{ThinkChatActivity-CdbL0aoA.d.ts → ThinkChatActivity-FY1VWXgh.d.ts} +8 -7
  6. package/dist/{ThinkChatActivitySummary-D1xOrNrq.d.ts → ThinkChatActivitySummary-kr5fE0wg.d.ts} +14 -5
  7. package/dist/{ToggleGroup-DNd6cDJZ.d.ts → ToggleGroup-BW1jrhAF.d.ts} +10 -0
  8. package/dist/components/Activity.d.ts +33 -17
  9. package/dist/components/Activity.js +39 -27
  10. package/dist/components/AgentActivity.d.ts +1 -1
  11. package/dist/components/AgentActivityPreview.d.ts +1 -1
  12. package/dist/components/AgentActivityPreview.js +2 -2
  13. package/dist/components/AgentChat.d.ts +1 -1
  14. package/dist/components/AgentChat.js +142 -129
  15. package/dist/components/AgentChatStartScreen.d.ts +2 -0
  16. package/dist/components/AgentChatStartScreen.js +82 -0
  17. package/dist/components/Approval.js +2 -4
  18. package/dist/components/BrowserLiveView.js +5 -7
  19. package/dist/components/BrowserReplay.js +5 -4
  20. package/dist/components/BrowserRunPanel.js +1 -1
  21. package/dist/components/ChatGptSignInScreen.js +1 -1
  22. package/dist/components/Conversation.d.ts +1 -22
  23. package/dist/components/Conversation.js +2 -29
  24. package/dist/components/EmptyState.d.ts +46 -0
  25. package/dist/components/EmptyState.js +50 -0
  26. package/dist/components/Kbd.d.ts +32 -0
  27. package/dist/components/Kbd.js +34 -0
  28. package/dist/components/MessageScroller.js +1 -0
  29. package/dist/components/ModelSelector.d.ts +10 -4
  30. package/dist/components/ModelSelector.js +2 -2
  31. package/dist/components/PricingBillingToggle.js +1 -0
  32. package/dist/components/PromptInput.js +3 -2
  33. package/dist/components/Reasoning.js +1 -1
  34. package/dist/components/StatusPill.d.ts +43 -0
  35. package/dist/components/StatusPill.js +35 -0
  36. package/dist/components/Stepper.js +1 -5
  37. package/dist/components/TestResults.js +15 -15
  38. package/dist/components/ThinkChat.d.ts +9 -3
  39. package/dist/components/ThinkChatActivity.d.ts +2 -2
  40. package/dist/components/ThinkChatActivity.js +27 -15
  41. package/dist/components/ThinkChatActivitySummary.d.ts +2 -2
  42. package/dist/components/ThinkChatActivitySummary.js +69 -66
  43. package/dist/components/ThinkExecutionDetail.js +4 -4
  44. package/dist/components/ThinkExecutionRun.js +2 -2
  45. package/dist/components/ThinkExecutionWorkbench.js +5 -4
  46. package/dist/components/ThinkFullAppViewSwitch.d.ts +1 -1
  47. package/dist/components/ThinkRoutine.js +2 -10
  48. package/dist/components/ThinkRoutineBrowser.js +1 -0
  49. package/dist/components/ThinkRoutineRuns.js +3 -2
  50. package/dist/components/ThinkThreadPicker.js +4 -2
  51. package/dist/components/ToggleGroup.d.ts +1 -1
  52. package/dist/components/ToggleGroup.js +54 -7
  53. package/dist/components/ToolInvocation.js +1 -1
  54. package/dist/styles/accordion.css +2 -1
  55. package/dist/styles/activity-header.css +45 -25
  56. package/dist/styles/activity.css +26 -4
  57. package/dist/styles/agent-activity-preview-overlay.css +51 -12
  58. package/dist/styles/agent-activity-preview.css +34 -33
  59. package/dist/styles/agent-attention.css +9 -16
  60. package/dist/styles/agent-chat.css +199 -0
  61. package/dist/styles/agent-connection.css +10 -10
  62. package/dist/styles/alert-dialog.css +5 -2
  63. package/dist/styles/app-top-bar.css +4 -4
  64. package/dist/styles/approval.css +1 -7
  65. package/dist/styles/artifact.css +5 -5
  66. package/dist/styles/attachment-preview.css +1 -1
  67. package/dist/styles/badge.css +1 -1
  68. package/dist/styles/base-ui-motion.css +1 -1
  69. package/dist/styles/base.css +110 -3
  70. package/dist/styles/browser-control-overlay.css +16 -6
  71. package/dist/styles/browser-live-view.css +5 -38
  72. package/dist/styles/browser-replay.css +4 -8
  73. package/dist/styles/browser-run-panel.css +5 -19
  74. package/dist/styles/button.css +4 -2
  75. package/dist/styles/card.css +4 -4
  76. package/dist/styles/chain-of-thought.css +1 -2
  77. package/dist/styles/chatgpt-sign-in-screen.css +9 -7
  78. package/dist/styles/checkbox-group.css +4 -4
  79. package/dist/styles/code-block.css +9 -9
  80. package/dist/styles/commit.css +1 -1
  81. package/dist/styles/context-menu.css +1 -1
  82. package/dist/styles/conversation.css +7 -42
  83. package/dist/styles/description-list.css +2 -2
  84. package/dist/styles/dialog.css +17 -2
  85. package/dist/styles/empty-state.css +48 -0
  86. package/dist/styles/environment-variables.css +8 -8
  87. package/dist/styles/field.css +2 -2
  88. package/dist/styles/fieldset.css +1 -1
  89. package/dist/styles/file-tree.css +1 -1
  90. package/dist/styles/github-motion-mark.css +1 -1
  91. package/dist/styles/index.css +3 -0
  92. package/dist/styles/inline-citation.css +1 -1
  93. package/dist/styles/kbd.css +40 -0
  94. package/dist/styles/label.css +1 -1
  95. package/dist/styles/mcp-server-picker.css +1 -1
  96. package/dist/styles/media-preview-card.css +5 -3
  97. package/dist/styles/menu.css +1 -1
  98. package/dist/styles/message-scroller.css +7 -25
  99. package/dist/styles/message.css +5 -7
  100. package/dist/styles/model-selector.css +5 -8
  101. package/dist/styles/plan.css +1 -1
  102. package/dist/styles/popover.css +1 -1
  103. package/dist/styles/preview-card.css +1 -1
  104. package/dist/styles/pricing-page.css +37 -35
  105. package/dist/styles/prompt-input.css +19 -41
  106. package/dist/styles/queue.css +3 -3
  107. package/dist/styles/recipes.css +92 -9
  108. package/dist/styles/resizable-side-panel.css +1 -1
  109. package/dist/styles/responsive-sidebar-shell.css +5 -6
  110. package/dist/styles/scrollbars.css +32 -3
  111. package/dist/styles/sources.css +2 -2
  112. package/dist/styles/status-pill.css +39 -0
  113. package/dist/styles/stepper.css +2 -2
  114. package/dist/styles/streamdown.css +39 -35
  115. package/dist/styles/subagent-run.css +3 -3
  116. package/dist/styles/switch.css +1 -3
  117. package/dist/styles/tabs.css +1 -1
  118. package/dist/styles/task.css +2 -2
  119. package/dist/styles/terminal.css +6 -6
  120. package/dist/styles/test-results.css +2 -3
  121. package/dist/styles/textarea.css +1 -1
  122. package/dist/styles/theme-mode-control.css +3 -4
  123. package/dist/styles/think-execution-status.css +4 -23
  124. package/dist/styles/think-execution-workbench.css +3 -4
  125. package/dist/styles/think-full-app.css +3 -3
  126. package/dist/styles/think-routine-library.css +22 -24
  127. package/dist/styles/think-thread-picker.css +20 -47
  128. package/dist/styles/toast.css +2 -2
  129. package/dist/styles/toggle-group.css +76 -3
  130. package/dist/styles/tooltip.css +1 -2
  131. package/dist/styles/utilities.css +73 -0
  132. package/dist/styles/web-preview.css +4 -4
  133. package/dist/styles/workspace-explorer.css +6 -8
  134. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  .checkbox-group {
2
2
  display: flex;
3
3
  flex-direction: column;
4
- gap: 0.5rem;
4
+ gap: var(--sigvelo-spacing-2);
5
5
  }
6
6
 
7
7
  .checkbox-group[data-layout="grid"] {
@@ -15,7 +15,7 @@
15
15
  display: flex;
16
16
  align-items: center;
17
17
  gap: var(--sigvelo-spacing-2);
18
- min-block-size: 2.75rem;
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: 1rem;
44
- block-size: 1rem;
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 {
@@ -13,8 +13,8 @@
13
13
  .code-block__header {
14
14
  display: flex;
15
15
  align-items: center;
16
- gap: 0.5rem;
17
- padding-block: 0.5rem;
16
+ gap: var(--sigvelo-spacing-2);
17
+ padding-block: var(--sigvelo-spacing-2);
18
18
  padding-inline: var(--sigvelo-spacing-3);
19
19
  background-color: transparent;
20
20
  }
@@ -22,7 +22,7 @@
22
22
  .code-block__title {
23
23
  display: inline-flex;
24
24
  align-items: center;
25
- gap: 0.5rem;
25
+ gap: var(--sigvelo-spacing-2);
26
26
  font-size: var(--sigvelo-text-xs);
27
27
  font-weight: var(--sigvelo-font-weight-semibold);
28
28
  color: var(--sigvelo-color-text);
@@ -37,7 +37,7 @@
37
37
  .code-block__actions {
38
38
  display: inline-flex;
39
39
  align-items: center;
40
- gap: 0.25rem;
40
+ gap: var(--sigvelo-spacing-1);
41
41
  margin-inline-start: auto;
42
42
  flex-shrink: 0;
43
43
  }
@@ -56,10 +56,10 @@
56
56
  .code-block__content {
57
57
  margin: 0;
58
58
  padding-block: var(--sigvelo-spacing-3);
59
- padding-inline: 0.875rem;
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: 1.55;
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: 0.875rem;
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: 1.55;
78
+ line-height: var(--sigvelo-leading-normal);
79
79
  overflow: visible;
80
80
  }
81
81
 
@@ -111,6 +111,6 @@
111
111
 
112
112
  @media (forced-colors: active) {
113
113
  .code-block {
114
- border: 1px solid CanvasText;
114
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
115
115
  }
116
116
  }
@@ -167,7 +167,7 @@
167
167
  @media (forced-colors: active) {
168
168
  .commit,
169
169
  .commit__file {
170
- border: 1px solid CanvasText;
170
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
171
171
  }
172
172
 
173
173
  .commit__header:focus-visible {
@@ -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: inset 0 0 0 var(--sigvelo-focus-width) var(--sigvelo-color-focus);
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
- box-shadow: var(--sigvelo-shadow-sm);
79
- background-color: var(--sigvelo-color-surface);
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-shadow-xs);
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) {
@@ -44,7 +44,7 @@
44
44
  }
45
45
 
46
46
  .description-list[data-variant="divided"] .description-list__term svg {
47
- inline-size: 1rem;
48
- block-size: 1rem;
47
+ inline-size: var(--sigvelo-control-icon-size-md);
48
+ block-size: var(--sigvelo-control-icon-size-md);
49
49
  flex: 0 0 auto;
50
50
  }
@@ -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
- z-index: 50;
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: 50;
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: 0.875rem;
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
  }
@@ -20,7 +20,7 @@
20
20
  .environment-variables__toggle {
21
21
  display: inline-flex;
22
22
  align-items: center;
23
- gap: 0.5rem;
23
+ gap: var(--sigvelo-spacing-2);
24
24
  cursor: pointer;
25
25
  font-size: var(--sigvelo-text-xs);
26
26
  color: var(--sigvelo-color-text-muted);
@@ -42,7 +42,7 @@
42
42
 
43
43
  .environment-variables__group-label {
44
44
  padding-block: var(--sigvelo-spacing-1-5);
45
- padding-inline: 0.875rem;
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;
@@ -57,8 +57,8 @@
57
57
  display: flex;
58
58
  align-items: center;
59
59
  gap: var(--sigvelo-spacing-2-5);
60
- padding-block: 0.5rem;
61
- padding-inline: 0.875rem;
60
+ padding-block: var(--sigvelo-spacing-2);
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,8 +79,8 @@
79
79
  .environment-variables__value {
80
80
  flex: 1;
81
81
  min-width: 0;
82
- padding-block: 0.3125rem;
83
- padding-inline: 0.5rem;
82
+ padding-block: var(--sigvelo-spacing-1-5);
83
+ padding-inline: var(--sigvelo-spacing-2);
84
84
  font-family: var(--sigvelo-font-mono);
85
85
  font-size: var(--sigvelo-text-xs);
86
86
  color: var(--sigvelo-color-text-muted);
@@ -101,6 +101,6 @@
101
101
  @media (forced-colors: active) {
102
102
  .environment-variables,
103
103
  .environment-variables__row {
104
- border: 1px solid CanvasText;
104
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
105
105
  }
106
106
  }
@@ -94,7 +94,7 @@
94
94
  .field__description {
95
95
  font-family: inherit;
96
96
  font-size: var(--sigvelo-text-xs);
97
- line-height: 1.4;
97
+ line-height: var(--sigvelo-leading-snug);
98
98
  color: var(--sigvelo-color-text-muted);
99
99
  margin: 0;
100
100
  }
@@ -102,7 +102,7 @@
102
102
  .field__error {
103
103
  font-family: inherit;
104
104
  font-size: var(--sigvelo-text-xs);
105
- line-height: 1.4;
105
+ line-height: var(--sigvelo-leading-snug);
106
106
  color: var(--sigvelo-color-danger-bg);
107
107
  margin: 0;
108
108
  opacity: 1;
@@ -15,7 +15,7 @@
15
15
  }
16
16
 
17
17
  .fieldset__legend {
18
- padding: 0 0.5rem;
18
+ padding: 0 var(--sigvelo-spacing-2);
19
19
  margin: 0 -0.5rem;
20
20
  font-family: inherit;
21
21
  font-size: var(--sigvelo-text-compact);
@@ -154,7 +154,7 @@
154
154
 
155
155
  @media (forced-colors: active) {
156
156
  .file-tree {
157
- border: 1px solid CanvasText;
157
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
158
158
  }
159
159
 
160
160
  .file-tree__node:focus-visible,
@@ -24,7 +24,7 @@
24
24
 
25
25
  .github-motion-mark::before {
26
26
  inset: -0.22em;
27
- border: 1px solid currentColor;
27
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) currentColor;
28
28
  border-radius: 999px;
29
29
  opacity: 0.24;
30
30
  transform-origin: 50% 50%;
@@ -34,11 +34,13 @@
34
34
  @import "./combobox.css" layer(components);
35
35
  @import "./context-menu.css" layer(components);
36
36
  @import "./dialog.css" layer(components);
37
+ @import "./empty-state.css" layer(components);
37
38
  @import "./field.css" layer(components);
38
39
  @import "./fieldset.css" layer(components);
39
40
  @import "./form.css" layer(components);
40
41
  @import "./github-motion-mark.css" layer(components);
41
42
  @import "./input.css" layer(components);
43
+ @import "./kbd.css" layer(components);
42
44
  @import "./label.css" layer(components);
43
45
  @import "./marker.css" layer(components);
44
46
  @import "./media-preview-card.css" layer(components);
@@ -61,6 +63,7 @@
61
63
  @import "./select.css" layer(components);
62
64
  @import "./separator.css" layer(components);
63
65
  @import "./slider.css" layer(components);
66
+ @import "./status-pill.css" layer(components);
64
67
  @import "./stepper.css" layer(components);
65
68
  @import "./switch.css" layer(components);
66
69
  @import "./tabs.css" layer(components);
@@ -81,7 +81,7 @@
81
81
  overflow-wrap: anywhere;
82
82
  color: var(--sigvelo-color-text-muted);
83
83
  font-size: var(--sigvelo-text-xs);
84
- line-height: 1.4;
84
+ line-height: var(--sigvelo-leading-snug);
85
85
  }
86
86
 
87
87
  .inline-citation__metadata {
@@ -0,0 +1,40 @@
1
+ /*
2
+ * Everything here resolves from currentColor, which is what lets one chip work
3
+ * on a page surface and on the inverted surface of a tooltip. A fixed
4
+ * neutral background is legible on exactly one of those.
5
+ *
6
+ * Codex renders its keys at tertiary text and strips the shadow its base sheet
7
+ * applies, so the resting state here is quiet by default rather than quieted
8
+ * at each call site.
9
+ */
10
+ .kbd {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ min-inline-size: var(--sigvelo-spacing-5);
15
+ padding-block: var(--sigvelo-spacing-0-5);
16
+ padding-inline: var(--sigvelo-spacing-1);
17
+ font-family: var(--sigvelo-font-mono);
18
+ /* em, not a type step: a key sits inside a label and should track whatever
19
+ size that label is set at. */
20
+ font-size: 0.75em;
21
+ line-height: var(--sigvelo-text-xs-leading);
22
+ /* currentcolor in the color property is the *inherited* color, so this dims
23
+ whatever the surface already set. In every declaration below it, though,
24
+ currentcolor is this new value — which is why nothing here names a
25
+ specific text token. Naming one would pin the chip to a light surface and
26
+ lose the tooltip. */
27
+ color: color-mix(in oklab, currentcolor, transparent 25%);
28
+ background-color: color-mix(in oklab, currentcolor, transparent 90%);
29
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width)
30
+ color-mix(in oklab, currentcolor, transparent 82%);
31
+ border-radius: var(--sigvelo-radius-sm);
32
+ white-space: nowrap;
33
+ }
34
+
35
+ @media (forced-colors: active) {
36
+ .kbd {
37
+ color: ButtonText;
38
+ border-color: ButtonText;
39
+ }
40
+ }
@@ -1,7 +1,7 @@
1
1
  .label {
2
2
  display: flex;
3
3
  align-items: center;
4
- gap: 0.5rem;
4
+ gap: var(--sigvelo-spacing-2);
5
5
  font-family: inherit;
6
6
  font-size: var(--sigvelo-text-sm);
7
7
  font-weight: var(--sigvelo-font-weight-semibold);
@@ -196,7 +196,7 @@
196
196
 
197
197
  @media (forced-colors: active) {
198
198
  .mcp-server-picker__avatar-fallback {
199
- border: 1px solid ButtonText;
199
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) ButtonText;
200
200
  }
201
201
 
202
202
  .mcp-server-picker__row-shell:has(.mcp-server-picker__row[data-highlighted]) {
@@ -15,7 +15,7 @@
15
15
  }
16
16
 
17
17
  .media-preview-card:is(:hover, :focus-within) {
18
- box-shadow: var(--sigvelo-shadow-md);
18
+ box-shadow: var(--sigvelo-elevation-floating);
19
19
  }
20
20
 
21
21
  .media-preview-card:has(> :is(a, button):focus-visible) {
@@ -73,8 +73,10 @@
73
73
  var(--sigvelo-color-neutral-border);
74
74
  border-radius: var(--sigvelo-radius-full);
75
75
  color: var(--sigvelo-color-text);
76
- background: color-mix(in oklab, var(--sigvelo-color-surface), transparent 12%);
77
- box-shadow: var(--sigvelo-shadow-sm);
76
+ /* Sits over arbitrary artwork, so it keeps the hard border and takes the
77
+ translucent surface the glass token already defines. */
78
+ background: var(--sigvelo-color-surface-glass);
79
+ box-shadow: var(--sigvelo-elevation-floating);
78
80
  translate: -50% -50%;
79
81
  scale: 1;
80
82
  transition:
@@ -49,7 +49,7 @@
49
49
  inline-size: var(--sigvelo-spacing-2);
50
50
  block-size: var(--sigvelo-spacing-2);
51
51
  background-color: currentColor;
52
- border-radius: 50%;
52
+ border-radius: var(--sigvelo-radius-circle);
53
53
  }
54
54
 
55
55
  .menu__checkbox-indicator::before {
@@ -12,8 +12,6 @@
12
12
 
13
13
  .message-scroller__viewport {
14
14
  --message-scroller-fade-size: min(12%, 2.5rem);
15
- --message-scroller-fade-t: 0px;
16
- --message-scroller-fade-b: 0px;
17
15
  width: 100%;
18
16
  height: 100%;
19
17
  min-width: 0;
@@ -23,32 +21,16 @@
23
21
  overscroll-behavior: contain;
24
22
  scrollbar-gutter: stable;
25
23
  contain: content;
26
- -webkit-mask-image: linear-gradient(
27
- to bottom,
28
- transparent 0,
29
- #000 var(--message-scroller-fade-t),
30
- #000 calc(100% - var(--message-scroller-fade-b)),
31
- transparent 100%
32
- );
33
- mask-image: linear-gradient(
34
- to bottom,
35
- transparent 0,
36
- #000 var(--message-scroller-fade-t),
37
- #000 calc(100% - var(--message-scroller-fade-b)),
38
- transparent 100%
39
- );
40
- -webkit-mask-repeat: no-repeat;
41
- mask-repeat: no-repeat;
42
24
  }
43
25
 
44
26
  .message-scroller__viewport[data-scrollable~="end"] {
45
- --message-scroller-fade-b: var(--message-scroller-fade-b-size, var(--message-scroller-fade-size));
27
+ --sigvelo-scroll-fade-end: var(--message-scroller-fade-b-size, var(--message-scroller-fade-size));
46
28
  }
47
29
 
48
30
  .message-scroller__content {
49
31
  display: flex;
50
32
  flex-direction: column;
51
- gap: 1rem;
33
+ gap: var(--sigvelo-spacing-4);
52
34
  min-height: 100%;
53
35
  }
54
36
 
@@ -60,11 +42,11 @@
60
42
  .message-scroller__button {
61
43
  position: absolute;
62
44
  inset-inline-start: 50%;
63
- inset-block-end: var(--message-scroller-button-inset-block-end, 1rem);
45
+ inset-block-end: var(--message-scroller-button-inset-block-end, var(--sigvelo-spacing-4));
64
46
  z-index: 1;
65
47
  translate: -50% 0;
66
- border-radius: 999rem;
67
- box-shadow: var(--sigvelo-shadow-sm);
48
+ border-radius: var(--sigvelo-radius-full);
49
+ box-shadow: var(--sigvelo-elevation-floating);
68
50
  transition:
69
51
  opacity var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
70
52
  scale var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
@@ -72,7 +54,7 @@
72
54
  }
73
55
 
74
56
  .message-scroller__button[data-direction="start"] {
75
- inset-block-start: 1rem;
57
+ inset-block-start: var(--sigvelo-spacing-4);
76
58
  inset-block-end: auto;
77
59
  }
78
60
 
@@ -96,6 +78,6 @@
96
78
 
97
79
  @media (forced-colors: active) {
98
80
  .message-scroller__button {
99
- border: 1px solid CanvasText;
81
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
100
82
  }
101
83
  }
@@ -26,7 +26,7 @@
26
26
  padding-inline: var(--sigvelo-spacing-3);
27
27
  border-radius: var(--sigvelo-radius-lg);
28
28
  font-size: var(--sigvelo-text-sm);
29
- line-height: 1.55;
29
+ line-height: var(--sigvelo-leading-normal);
30
30
  background-color: var(--sigvelo-color-neutral-bg-subtle);
31
31
  color: var(--sigvelo-color-text);
32
32
  overflow-wrap: anywhere;
@@ -139,15 +139,13 @@
139
139
  inline-size: min(42rem, 85%);
140
140
  padding: var(--sigvelo-spacing-3);
141
141
  color: var(--sigvelo-color-text);
142
- background-color: var(--sigvelo-color-surface);
143
- border: var(--sigvelo-border-style) var(--sigvelo-border-width)
144
- var(--sigvelo-color-neutral-border-muted);
142
+ background-color: var(--sigvelo-color-surface-raised);
145
143
  border-radius: var(--sigvelo-radius-lg);
146
- box-shadow: var(--sigvelo-shadow-sm);
144
+ box-shadow: var(--sigvelo-elevation-raised);
147
145
  }
148
146
 
149
147
  .message__edit-textarea {
150
- min-block-size: 6rem;
148
+ min-block-size: var(--sigvelo-spacing-24);
151
149
  max-block-size: 18rem;
152
150
  }
153
151
 
@@ -199,6 +197,6 @@
199
197
  .message__content,
200
198
  .message__edit-form,
201
199
  .message__edit-textarea {
202
- border: 1px solid CanvasText;
200
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
203
201
  }
204
202
  }
@@ -112,7 +112,7 @@
112
112
 
113
113
  .model-selector__item:focus-visible {
114
114
  outline: none;
115
- box-shadow: inset 0 0 0 var(--sigvelo-focus-width) var(--sigvelo-color-focus);
115
+ box-shadow: var(--sigvelo-recipe-focus-shadow-inset);
116
116
  }
117
117
 
118
118
  .model-selector__item[data-selected] {
@@ -126,11 +126,7 @@
126
126
  }
127
127
 
128
128
  .model-selector__empty {
129
- padding-block: var(--sigvelo-spacing-4);
130
- padding-inline: var(--sigvelo-spacing-3);
131
- text-align: center;
132
- font-size: var(--sigvelo-text-compact);
133
- color: var(--sigvelo-color-text-muted);
129
+ --sigvelo-recipe-empty-state-padding-block: var(--sigvelo-spacing-4);
134
130
  }
135
131
 
136
132
  @media (any-pointer: coarse) {
@@ -166,10 +162,11 @@
166
162
  gap: var(--sigvelo-spacing-1);
167
163
  }
168
164
 
169
- .model-selector__shortcut {
165
+ /* Prose, not a key. The mono face was a leftover from when this was a <kbd>,
166
+ and "Workers AI" reads worse in it. */
167
+ .model-selector__source {
170
168
  padding-block: var(--sigvelo-spacing-0-5);
171
169
  padding-inline: var(--sigvelo-spacing-1-5);
172
- font-family: var(--sigvelo-font-mono);
173
170
  font-size: var(--sigvelo-text-2xs);
174
171
  color: var(--sigvelo-color-text-muted);
175
172
  background-color: var(--sigvelo-color-neutral-bg-subtle);
@@ -122,7 +122,7 @@
122
122
 
123
123
  @media (forced-colors: active) {
124
124
  .plan__step-indicator {
125
- border: 1px solid CanvasText;
125
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
126
126
  }
127
127
 
128
128
  .plan__step[data-status="active"] .plan__step-indicator {
@@ -1,5 +1,5 @@
1
1
  .popover__backdrop {
2
- z-index: 50;
2
+ z-index: var(--sigvelo-z-overlay);
3
3
  background-color: color-mix(in oklab, var(--sigvelo-color-text), transparent 50%);
4
4
  }
5
5