@mcp-b/react-components 0.6.5 → 0.7.1

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 (91) hide show
  1. package/dist/AgentChat-403mckDG.d.ts +101 -0
  2. package/dist/BrowserLiveView-ZktFZiMD.d.ts +47 -0
  3. package/dist/BrowserReplay-6G-mnwcn.d.ts +40 -0
  4. package/dist/{CodeBlock-BK0sOAbV.js → CodeBlock-D9koxDA7.js} +1 -1
  5. package/dist/{FileTree-BWQZ0FSi.js → FileTree-BdK93Uuu.js} +1 -1
  6. package/dist/ModelSelector-MQvK-pNb.js +306 -0
  7. package/dist/PromptInput-D6-G24p7.d.ts +528 -0
  8. package/dist/ThinkChatActivity-CeHzk6-K.d.ts +73 -0
  9. package/dist/ThinkChatContext-CC94HL4u.d.ts +28 -0
  10. package/dist/ThinkChatToolParts-DnUiZgCC.d.ts +83 -0
  11. package/dist/components/Activity.js +1 -1
  12. package/dist/components/AgentChat.d.ts +1 -103
  13. package/dist/components/AgentChat.js +77 -58
  14. package/dist/components/AgentConnection.d.ts +43 -2
  15. package/dist/components/AgentConnection.js +154 -3
  16. package/dist/components/Artifact.js +1 -1
  17. package/dist/components/BrowserLiveView.d.ts +1 -46
  18. package/dist/components/BrowserLiveView.js +1 -1
  19. package/dist/components/BrowserReplay.d.ts +1 -39
  20. package/dist/components/BrowserReplay.js +1 -1
  21. package/dist/components/ChainOfThought.d.ts +1 -1
  22. package/dist/components/ChainOfThought.js +1 -1
  23. package/dist/components/ChatGptSignInScreen.d.ts +38 -0
  24. package/dist/components/ChatGptSignInScreen.js +201 -0
  25. package/dist/components/CodeBlock.js +1 -1
  26. package/dist/components/Commit.js +1 -1
  27. package/dist/components/Context.d.ts +6 -10
  28. package/dist/components/Context.js +4 -2
  29. package/dist/components/ContextMenu.js +1 -1
  30. package/dist/components/Conversation.d.ts +28 -28
  31. package/dist/components/Conversation.js +36 -55
  32. package/dist/components/Dialog.js +1 -1
  33. package/dist/components/EnvironmentVariables.js +1 -1
  34. package/dist/components/FileTree.js +1 -1
  35. package/dist/components/Marker.d.ts +57 -0
  36. package/dist/components/Marker.js +89 -0
  37. package/dist/components/McpServerPicker.js +1 -1
  38. package/dist/components/Menubar.js +1 -1
  39. package/dist/components/Message.js +1 -1
  40. package/dist/components/MessageScroller.d.ts +52 -0
  41. package/dist/components/MessageScroller.js +62 -0
  42. package/dist/components/ModelSelector.js +1 -305
  43. package/dist/components/NavigationMenu.js +1 -1
  44. package/dist/components/PromptInput.d.ts +2 -534
  45. package/dist/components/PromptInput.js +18 -12
  46. package/dist/components/Queue.js +1 -1
  47. package/dist/components/Reasoning.js +1 -1
  48. package/dist/components/Select.js +1 -1
  49. package/dist/components/Sources.js +1 -1
  50. package/dist/components/Stepper.js +1 -1
  51. package/dist/components/Task.js +1 -1
  52. package/dist/components/Terminal.js +2 -2
  53. package/dist/components/TestResults.js +1 -1
  54. package/dist/components/ThinkChat.d.ts +23 -80
  55. package/dist/components/ThinkChat.js +60 -857
  56. package/dist/components/ThinkChatActivity.d.ts +3 -0
  57. package/dist/components/ThinkChatActivity.js +429 -0
  58. package/dist/components/ThinkChatContext.d.ts +2 -0
  59. package/dist/components/ThinkChatContext.js +10 -0
  60. package/dist/components/ThinkChatToolPanels.d.ts +39 -0
  61. package/dist/components/ThinkChatToolPanels.js +355 -0
  62. package/dist/components/ThinkChatToolParts.d.ts +2 -0
  63. package/dist/components/ThinkChatToolParts.js +66 -0
  64. package/dist/components/ThinkFullApp.d.ts +23 -0
  65. package/dist/components/ThinkFullApp.js +175 -0
  66. package/dist/components/WebPreview.js +1 -1
  67. package/dist/components/WorkspaceExplorer.d.ts +1 -1
  68. package/dist/components/WorkspaceExplorer.js +3 -3
  69. package/dist/components/icons.d.ts +2 -2
  70. package/dist/components/icons.js +2 -2
  71. package/dist/components/useStickToBottom.d.ts +5 -2
  72. package/dist/components/useStickToBottom.js +5 -2
  73. package/dist/{copy-button-CB2MWcau.js → copy-button-TVhDAroI.js} +1 -1
  74. package/dist/{icons-BCNawx-T.js → icons-BAlTbWWP.js} +27 -1
  75. package/dist/{icons-BYpJY6L2.d.ts → icons-BRI54ATJ.d.ts} +2 -1
  76. package/dist/styles/agent-chat.css +15 -3
  77. package/dist/styles/agent-connection.css +33 -4
  78. package/dist/styles/chatgpt-sign-in-screen.css +224 -0
  79. package/dist/styles/code-block.css +6 -4
  80. package/dist/styles/conversation.css +10 -0
  81. package/dist/styles/index.css +4 -0
  82. package/dist/styles/marker.css +95 -0
  83. package/dist/styles/message-scroller.css +113 -0
  84. package/dist/styles/message.css +2 -1
  85. package/dist/styles/prompt-input.css +1 -0
  86. package/dist/styles/scrollbars.css +10 -2
  87. package/dist/styles/streamdown.css +2 -0
  88. package/dist/styles/think-full-app.css +318 -0
  89. package/dist/utils/mcp-server-catalog.d.ts +23 -1
  90. package/dist/utils/mcp-server-catalog.js +27 -1
  91. package/package.json +3 -2
@@ -1,2 +1,2 @@
1
- import { A as SpinnerIcon, C as PaperclipIcon, D as PlusIcon, E as PlayIcon, F as XIcon, M as TerminalIcon, N as WarningIcon, O as RefreshIcon, P as WrenchIcon, S as MonitorIcon, T as PencilIcon, _ as ImageIcon, a as CheckIcon, b as MaximizeIcon, c as ChevronRightIcon, d as DownloadIcon, f as EyeIcon, g as FolderOpenIcon, h as FolderIcon, i as ArrowUpIcon, j as SquareIcon, k as SearchIcon, l as CopyIcon, m as FileIcon, n as ArrowLeftIcon, o as ChevronDownIcon, p as EyeOffIcon, r as ArrowRightIcon, s as ChevronLeftIcon, t as ArrowDownIcon, u as DotIcon, v as InfoIcon, w as PauseIcon, x as MinusIcon, y as LinkIcon } from "../icons-BCNawx-T.js";
2
- export { ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CopyIcon, DotIcon, DownloadIcon, EyeIcon, EyeOffIcon, FileIcon, FolderIcon, FolderOpenIcon, ImageIcon, InfoIcon, LinkIcon, MaximizeIcon, MinusIcon, MonitorIcon, PaperclipIcon, PauseIcon, PencilIcon, PlayIcon, PlusIcon, RefreshIcon, SearchIcon, SpinnerIcon, SquareIcon, TerminalIcon, WarningIcon, WrenchIcon, XIcon };
1
+ import { A as SearchIcon, C as MonitorIcon, D as PlayIcon, E as PencilIcon, F as WrenchIcon, I as XIcon, M as SquareIcon, N as TerminalIcon, O as PlusIcon, P as WarningIcon, S as MinusIcon, T as PauseIcon, _ as FolderOpenIcon, a as CheckIcon, b as LinkIcon, c as ChevronRightIcon, d as DownloadIcon, f as EllipsisIcon, g as FolderIcon, h as FileIcon, i as ArrowUpIcon, j as SpinnerIcon, k as RefreshIcon, l as CopyIcon, m as EyeOffIcon, n as ArrowLeftIcon, o as ChevronDownIcon, p as EyeIcon, r as ArrowRightIcon, s as ChevronLeftIcon, t as ArrowDownIcon, u as DotIcon, v as ImageIcon, w as PaperclipIcon, x as MaximizeIcon, y as InfoIcon } from "../icons-BAlTbWWP.js";
2
+ export { ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CopyIcon, DotIcon, DownloadIcon, EllipsisIcon, EyeIcon, EyeOffIcon, FileIcon, FolderIcon, FolderOpenIcon, ImageIcon, InfoIcon, LinkIcon, MaximizeIcon, MinusIcon, MonitorIcon, PaperclipIcon, PauseIcon, PencilIcon, PlayIcon, PlusIcon, RefreshIcon, SearchIcon, SpinnerIcon, SquareIcon, TerminalIcon, WarningIcon, WrenchIcon, XIcon };
@@ -22,8 +22,11 @@ interface UseStickToBottomResult {
22
22
  }
23
23
  /**
24
24
  * Pin a scrollable viewport to the bottom as its content grows, unless the
25
- * user has scrolled up. Used by the conversation log and the workspace code
26
- * inspector to keep streaming output in view without fighting user intent.
25
+ * user has scrolled up.
26
+ *
27
+ * @deprecated Use MessageScroller for chat transcripts. Keep this only for
28
+ * standalone streaming panes that do not need transcript row anchoring,
29
+ * history prepending, visibility tracking, or jump-to-message behavior.
27
30
  */
28
31
  declare function useStickToBottom(options?: UseStickToBottomOptions): UseStickToBottomResult;
29
32
  //#endregion
@@ -3,8 +3,11 @@ import * as React from "react";
3
3
  const DEFAULT_STICK_SLACK_PX = 160;
4
4
  /**
5
5
  * Pin a scrollable viewport to the bottom as its content grows, unless the
6
- * user has scrolled up. Used by the conversation log and the workspace code
7
- * inspector to keep streaming output in view without fighting user intent.
6
+ * user has scrolled up.
7
+ *
8
+ * @deprecated Use MessageScroller for chat transcripts. Keep this only for
9
+ * standalone streaming panes that do not need transcript row anchoring,
10
+ * history prepending, visibility tracking, or jump-to-message behavior.
8
11
  */
9
12
  function useStickToBottom(options = {}) {
10
13
  const slackPx = options.slackPx ?? DEFAULT_STICK_SLACK_PX;
@@ -1,4 +1,4 @@
1
- import { a as CheckIcon, l as CopyIcon } from "./icons-BCNawx-T.js";
1
+ import { a as CheckIcon, l as CopyIcon } from "./icons-BAlTbWWP.js";
2
2
  import { Button } from "./components/Button.js";
3
3
  import { Tooltip, TooltipPopup, TooltipPortal, TooltipPositioner, TooltipTrigger } from "./components/Tooltip.js";
4
4
  import * as React from "react";
@@ -152,6 +152,32 @@ const DotIcon = (props) => /* @__PURE__ */ jsx(Icon, {
152
152
  stroke: "none"
153
153
  })
154
154
  });
155
+ const EllipsisIcon = (props) => /* @__PURE__ */ jsxs(Icon, {
156
+ ...props,
157
+ children: [
158
+ /* @__PURE__ */ jsx("circle", {
159
+ cx: "3.5",
160
+ cy: "8",
161
+ r: "0.75",
162
+ fill: "currentColor",
163
+ stroke: "none"
164
+ }),
165
+ /* @__PURE__ */ jsx("circle", {
166
+ cx: "8",
167
+ cy: "8",
168
+ r: "0.75",
169
+ fill: "currentColor",
170
+ stroke: "none"
171
+ }),
172
+ /* @__PURE__ */ jsx("circle", {
173
+ cx: "12.5",
174
+ cy: "8",
175
+ r: "0.75",
176
+ fill: "currentColor",
177
+ stroke: "none"
178
+ })
179
+ ]
180
+ });
155
181
  const SpinnerIcon = (props) => /* @__PURE__ */ jsx(Icon, {
156
182
  ...props,
157
183
  children: /* @__PURE__ */ jsx("path", { d: "M8 1.5A6.5 6.5 0 1 1 1.5 8" })
@@ -252,4 +278,4 @@ const MaximizeIcon = (props) => /* @__PURE__ */ jsxs(Icon, {
252
278
  ]
253
279
  });
254
280
  //#endregion
255
- export { SpinnerIcon as A, PaperclipIcon as C, PlusIcon as D, PlayIcon as E, XIcon as F, TerminalIcon as M, WarningIcon as N, RefreshIcon as O, WrenchIcon as P, MonitorIcon as S, PencilIcon as T, ImageIcon as _, CheckIcon as a, MaximizeIcon as b, ChevronRightIcon as c, DownloadIcon as d, EyeIcon as f, FolderOpenIcon as g, FolderIcon as h, ArrowUpIcon as i, SquareIcon as j, SearchIcon as k, CopyIcon as l, FileIcon as m, ArrowLeftIcon as n, ChevronDownIcon as o, EyeOffIcon as p, ArrowRightIcon as r, ChevronLeftIcon as s, ArrowDownIcon as t, DotIcon as u, InfoIcon as v, PauseIcon as w, MinusIcon as x, LinkIcon as y };
281
+ export { SearchIcon as A, MonitorIcon as C, PlayIcon as D, PencilIcon as E, WrenchIcon as F, XIcon as I, SquareIcon as M, TerminalIcon as N, PlusIcon as O, WarningIcon as P, MinusIcon as S, PauseIcon as T, FolderOpenIcon as _, CheckIcon as a, LinkIcon as b, ChevronRightIcon as c, DownloadIcon as d, EllipsisIcon as f, FolderIcon as g, FileIcon as h, ArrowUpIcon as i, SpinnerIcon as j, RefreshIcon as k, CopyIcon as l, EyeOffIcon as m, ArrowLeftIcon as n, ChevronDownIcon as o, EyeIcon as p, ArrowRightIcon as r, ChevronLeftIcon as s, ArrowDownIcon as t, DotIcon as u, ImageIcon as v, PaperclipIcon as w, MaximizeIcon as x, InfoIcon as y };
@@ -35,6 +35,7 @@ declare const ArrowUpIcon: (props: IconProps) => React.JSX.Element;
35
35
  declare const DownloadIcon: (props: IconProps) => React.JSX.Element;
36
36
  declare const RefreshIcon: (props: IconProps) => React.JSX.Element;
37
37
  declare const DotIcon: (props: IconProps) => React.JSX.Element;
38
+ declare const EllipsisIcon: (props: IconProps) => React.JSX.Element;
38
39
  declare const SpinnerIcon: (props: IconProps) => React.JSX.Element;
39
40
  declare const SearchIcon: (props: IconProps) => React.JSX.Element;
40
41
  declare const TerminalIcon: (props: IconProps) => React.JSX.Element;
@@ -46,4 +47,4 @@ declare const ImageIcon: (props: IconProps) => React.JSX.Element;
46
47
  declare const MonitorIcon: (props: IconProps) => React.JSX.Element;
47
48
  declare const MaximizeIcon: (props: IconProps) => React.JSX.Element;
48
49
  //#endregion
49
- export { SearchIcon as A, MonitorIcon as C, PlayIcon as D, PencilIcon as E, WrenchIcon as F, XIcon as I, SquareIcon as M, TerminalIcon as N, PlusIcon as O, WarningIcon as P, MinusIcon as S, PauseIcon as T, IconProps as _, CheckIcon as a, LinkIcon as b, ChevronRightIcon as c, DownloadIcon as d, EyeIcon as f, FolderOpenIcon as g, FolderIcon as h, ArrowUpIcon as i, SpinnerIcon as j, RefreshIcon as k, CopyIcon as l, FileIcon as m, ArrowLeftIcon as n, ChevronDownIcon as o, EyeOffIcon as p, ArrowRightIcon as r, ChevronLeftIcon as s, ArrowDownIcon as t, DotIcon as u, ImageIcon as v, PaperclipIcon as w, MaximizeIcon as x, InfoIcon as y };
50
+ export { RefreshIcon as A, MinusIcon as C, PencilIcon as D, PauseIcon as E, WarningIcon as F, WrenchIcon as I, XIcon as L, SpinnerIcon as M, SquareIcon as N, PlayIcon as O, TerminalIcon as P, MaximizeIcon as S, PaperclipIcon as T, FolderOpenIcon as _, CheckIcon as a, InfoIcon as b, ChevronRightIcon as c, DownloadIcon as d, EllipsisIcon as f, FolderIcon as g, FileIcon as h, ArrowUpIcon as i, SearchIcon as j, PlusIcon as k, CopyIcon as l, EyeOffIcon as m, ArrowLeftIcon as n, ChevronDownIcon as o, EyeIcon as p, ArrowRightIcon as r, ChevronLeftIcon as s, ArrowDownIcon as t, DotIcon as u, IconProps as v, MonitorIcon as w, LinkIcon as x, ImageIcon as y };
@@ -15,11 +15,23 @@
15
15
 
16
16
  /* Room for the last message to scroll clear of the floating composer.
17
17
  --agent-chat-composer-size is set from a ResizeObserver in AgentChat. */
18
- .agent-chat .conversation__content {
19
- padding-block-end: calc(var(--agent-chat-composer-size, 5rem) + 0.5rem);
18
+ .agent-chat__transcript-content {
19
+ gap: 0.875rem;
20
+ padding-block: 1rem calc(var(--agent-chat-composer-size, 5rem) + 0.5rem);
21
+ padding-inline: 1rem;
20
22
  }
21
23
 
22
- .agent-chat .conversation__scroll-button {
24
+ .agent-chat__empty-row {
25
+ display: flex;
26
+ flex: 1;
27
+ min-block-size: 0;
28
+ }
29
+
30
+ .agent-chat__empty-row > .conversation__empty {
31
+ flex: 1;
32
+ }
33
+
34
+ .agent-chat__scroll-button {
23
35
  inset-block-end: calc(var(--agent-chat-composer-size, 5rem) + 0.5rem);
24
36
  }
25
37
 
@@ -131,10 +131,6 @@
131
131
  inset 0 0 0 1px var(--sigvelo-color-primary-border-subtle);
132
132
  }
133
133
 
134
- .agent-connect .code-block {
135
- min-inline-size: 0;
136
- }
137
-
138
134
  .agent-connect .code-block__container {
139
135
  max-block-size: 13.5rem;
140
136
  }
@@ -296,6 +292,39 @@
296
292
  outline-offset: 2px;
297
293
  }
298
294
 
295
+ .agent-connect__mcp-form {
296
+ display: grid;
297
+ gap: 0.75rem;
298
+ min-inline-size: 0;
299
+ }
300
+
301
+ .agent-connect__mcp-form--row {
302
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 10rem), 1fr));
303
+ align-items: end;
304
+ padding: 0.75rem;
305
+ background: var(--sigvelo-color-surface);
306
+ }
307
+
308
+ .agent-connect__mcp-form-actions {
309
+ display: flex;
310
+ flex-wrap: wrap;
311
+ gap: 0.5rem;
312
+ }
313
+
314
+ .agent-connect__mcp-form--row .agent-connect__mcp-form-actions {
315
+ align-self: end;
316
+ }
317
+
318
+ .agent-connect__mcp-form-status {
319
+ align-self: end;
320
+ min-inline-size: 0;
321
+ color: var(--sigvelo-color-text-muted);
322
+ font-size: var(--sigvelo-text-xs);
323
+ font-weight: var(--sigvelo-font-weight-semibold);
324
+ line-height: 1.25;
325
+ overflow-wrap: anywhere;
326
+ }
327
+
299
328
  .agent-connect-trigger {
300
329
  inline-size: 100%;
301
330
  }
@@ -0,0 +1,224 @@
1
+ .chatgpt-sign-in {
2
+ --chatgpt-sign-in-pointer-x: 50%;
3
+ --chatgpt-sign-in-pointer-y: 58%;
4
+
5
+ position: relative;
6
+ isolation: isolate;
7
+ overflow: hidden;
8
+ block-size: 100%;
9
+ min-inline-size: 17.5rem;
10
+ display: grid;
11
+ place-items: center;
12
+ padding: clamp(1.25rem, 5vw, 3rem);
13
+ background-color: var(--sigvelo-color-canvas);
14
+ background-image:
15
+ linear-gradient(
16
+ color-mix(in oklab, var(--sigvelo-color-neutral-border-subtle), transparent 42%) 1px,
17
+ transparent 1px
18
+ ),
19
+ linear-gradient(
20
+ 90deg,
21
+ color-mix(in oklab, var(--sigvelo-color-neutral-border-subtle), transparent 42%) 1px,
22
+ transparent 1px
23
+ );
24
+ background-size: 2rem 2rem;
25
+ color: var(--sigvelo-color-text);
26
+ font-family: var(--sigvelo-font-sans);
27
+ }
28
+
29
+ .chatgpt-sign-in::before {
30
+ content: "";
31
+ position: absolute;
32
+ z-index: 0;
33
+ inset: 0;
34
+ background:
35
+ radial-gradient(
36
+ circle at var(--chatgpt-sign-in-pointer-x) var(--chatgpt-sign-in-pointer-y),
37
+ color-mix(in oklab, var(--sigvelo-color-primary-bg), transparent 72%),
38
+ transparent 12rem
39
+ ),
40
+ radial-gradient(
41
+ circle at var(--chatgpt-sign-in-pointer-x) var(--chatgpt-sign-in-pointer-y),
42
+ color-mix(in oklab, var(--sigvelo-color-primary-bg-muted), transparent 86%),
43
+ transparent 18rem
44
+ );
45
+ opacity: 0;
46
+ pointer-events: none;
47
+ transition: opacity var(--sigvelo-duration-medium) var(--sigvelo-ease-standard);
48
+ }
49
+
50
+ .chatgpt-sign-in[data-pointer-active="true"]::before {
51
+ opacity: 1;
52
+ }
53
+
54
+ .chatgpt-sign-in__panel {
55
+ position: relative;
56
+ z-index: 1;
57
+ isolation: isolate;
58
+ display: grid;
59
+ gap: 1.25rem;
60
+ justify-items: center;
61
+ text-align: center;
62
+ }
63
+
64
+ .chatgpt-sign-in__brand {
65
+ display: grid;
66
+ gap: 0.375rem;
67
+ justify-items: center;
68
+ }
69
+
70
+ .chatgpt-sign-in__brand h1 {
71
+ margin: 0;
72
+ color: var(--sigvelo-color-text);
73
+ font-size: var(--sigvelo-text-2xl);
74
+ font-weight: var(--sigvelo-font-weight-bold);
75
+ letter-spacing: 0;
76
+ line-height: 1.1;
77
+ }
78
+
79
+ .chatgpt-sign-in__brand p {
80
+ display: inline-flex;
81
+ align-items: center;
82
+ gap: 0.375rem;
83
+ margin: 0;
84
+ color: var(--sigvelo-color-text-muted);
85
+ font-size: var(--sigvelo-text-sm);
86
+ font-weight: var(--sigvelo-font-weight-semibold);
87
+ line-height: 1.25;
88
+ }
89
+
90
+ .chatgpt-sign-in__brand-mark,
91
+ .chatgpt-sign-in__logo {
92
+ display: inline-flex;
93
+ }
94
+
95
+ .chatgpt-sign-in__brand-mark :where(img, svg) {
96
+ inline-size: 1.35rem;
97
+ block-size: 1.35rem;
98
+ filter: drop-shadow(
99
+ 0 0.25rem 0.5rem color-mix(in oklab, var(--sigvelo-color-primary-bg), transparent 72%)
100
+ );
101
+ }
102
+
103
+ .chatgpt-sign-in__button {
104
+ --chatgpt-sign-in-button-x: 50%;
105
+ --chatgpt-sign-in-button-y: 50%;
106
+
107
+ position: relative;
108
+ isolation: isolate;
109
+ overflow: hidden;
110
+ min-inline-size: min(100%, 16.75rem);
111
+ box-shadow:
112
+ inset 0 0 0 1px color-mix(in oklab, var(--sigvelo-color-primary-text-on-bg), transparent 84%),
113
+ 0 0.75rem 1.5rem color-mix(in oklab, var(--sigvelo-color-primary-bg), transparent 78%);
114
+ translate: 0;
115
+ scale: 1;
116
+ transition:
117
+ background-color var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
118
+ box-shadow var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
119
+ filter var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
120
+ scale var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
121
+ translate var(--sigvelo-duration-fast) var(--sigvelo-ease-standard);
122
+ }
123
+
124
+ .chatgpt-sign-in__button::before {
125
+ content: "";
126
+ position: absolute;
127
+ z-index: 0;
128
+ inset: 0;
129
+ background: radial-gradient(
130
+ circle at var(--chatgpt-sign-in-button-x) var(--chatgpt-sign-in-button-y),
131
+ color-mix(in oklab, var(--sigvelo-color-primary-text-on-bg), transparent 70%),
132
+ transparent 42%
133
+ );
134
+ opacity: 0;
135
+ pointer-events: none;
136
+ transition: opacity var(--sigvelo-duration-fast) var(--sigvelo-ease-standard);
137
+ }
138
+
139
+ .chatgpt-sign-in__button::after {
140
+ content: "";
141
+ position: absolute;
142
+ z-index: 0;
143
+ inset: 1px;
144
+ border-radius: inherit;
145
+ background: radial-gradient(
146
+ circle at var(--chatgpt-sign-in-button-x) var(--chatgpt-sign-in-button-y),
147
+ color-mix(in oklab, var(--sigvelo-color-primary-text-on-bg), transparent 88%),
148
+ transparent 55%
149
+ );
150
+ opacity: 0.45;
151
+ pointer-events: none;
152
+ }
153
+
154
+ .chatgpt-sign-in__button:hover:not([data-disabled]) {
155
+ box-shadow:
156
+ inset 0 0 0 1px color-mix(in oklab, var(--sigvelo-color-primary-text-on-bg), transparent 76%),
157
+ 0 0.9rem 1.9rem color-mix(in oklab, var(--sigvelo-color-primary-bg), transparent 72%);
158
+ translate: 0 -0.0625rem;
159
+ }
160
+
161
+ .chatgpt-sign-in__button:hover:not([data-disabled])::before {
162
+ opacity: 1;
163
+ }
164
+
165
+ .chatgpt-sign-in__button:active:not([data-disabled]) {
166
+ translate: 0 0.0625rem;
167
+ scale: 0.99;
168
+ }
169
+
170
+ .chatgpt-sign-in__button-icon,
171
+ .chatgpt-sign-in__button-label {
172
+ position: relative;
173
+ z-index: 1;
174
+ }
175
+
176
+ .chatgpt-sign-in__button-icon {
177
+ display: inline-flex;
178
+ rotate: 0deg;
179
+ scale: 1;
180
+ transition:
181
+ rotate var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
182
+ scale var(--sigvelo-duration-fast) var(--sigvelo-ease-standard);
183
+ }
184
+
185
+ .chatgpt-sign-in__button:hover:not([data-disabled]) .chatgpt-sign-in__button-icon {
186
+ rotate: -4deg;
187
+ scale: 1.06;
188
+ }
189
+
190
+ .chatgpt-sign-in__logo {
191
+ color: inherit;
192
+ }
193
+
194
+ @media (prefers-reduced-motion: reduce) {
195
+ .chatgpt-sign-in::before,
196
+ .chatgpt-sign-in__button,
197
+ .chatgpt-sign-in__button::before,
198
+ .chatgpt-sign-in__button-icon {
199
+ transition: none;
200
+ }
201
+ }
202
+
203
+ @media (hover: none), (pointer: coarse) {
204
+ .chatgpt-sign-in::before,
205
+ .chatgpt-sign-in__button::before,
206
+ .chatgpt-sign-in__button::after {
207
+ display: none;
208
+ }
209
+ }
210
+
211
+ @media (forced-colors: active) {
212
+ .chatgpt-sign-in::before,
213
+ .chatgpt-sign-in__button::before,
214
+ .chatgpt-sign-in__button::after {
215
+ display: none;
216
+ }
217
+
218
+ .chatgpt-sign-in__button {
219
+ background-image: none;
220
+ box-shadow: none;
221
+ outline: 1px solid ButtonText;
222
+ outline-offset: 2px;
223
+ }
224
+ }
@@ -2,6 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  width: 100%;
5
+ min-inline-size: 0;
5
6
  font-family: var(--sigvelo-font-sans);
6
7
  /* Fill-based containment: no perimeter border */
7
8
  background-color: var(--sigvelo-color-neutral-bg-subtle);
@@ -47,8 +48,9 @@
47
48
 
48
49
  .code-block__container {
49
50
  position: relative;
50
- overflow: auto;
51
- max-height: 30rem;
51
+ min-inline-size: 0;
52
+ overflow-x: auto;
53
+ overflow-y: auto;
52
54
  }
53
55
 
54
56
  .code-block__content {
@@ -59,7 +61,7 @@
59
61
  font-size: 0.8125rem;
60
62
  line-height: 1.55;
61
63
  color: var(--sigvelo-color-text);
62
- overflow-x: auto;
64
+ overflow: visible;
63
65
  }
64
66
 
65
67
  .code-block__content--highlighted {
@@ -74,7 +76,7 @@
74
76
  font-family: var(--sigvelo-font-mono);
75
77
  font-size: 0.8125rem;
76
78
  line-height: 1.55;
77
- overflow-x: auto;
79
+ overflow: visible;
78
80
  }
79
81
 
80
82
  .code-block__content--numbered:is(pre) > code,
@@ -27,6 +27,16 @@
27
27
  min-height: 100%;
28
28
  }
29
29
 
30
+ .conversation__empty-row {
31
+ display: flex;
32
+ flex: 1;
33
+ min-block-size: 0;
34
+ }
35
+
36
+ .conversation__empty-row > .conversation__empty {
37
+ flex: 1;
38
+ }
39
+
30
40
  .conversation__empty {
31
41
  display: flex;
32
42
  flex: 1;
@@ -30,8 +30,10 @@
30
30
  @import "./github-motion-mark.css" layer(components);
31
31
  @import "./input.css" layer(components);
32
32
  @import "./label.css" layer(components);
33
+ @import "./marker.css" layer(components);
33
34
  @import "./menu.css" layer(components);
34
35
  @import "./menubar.css" layer(components);
36
+ @import "./message-scroller.css" layer(components);
35
37
  @import "./meter.css" layer(components);
36
38
  @import "./navigation-menu.css" layer(components);
37
39
  @import "./nanite-scene.css" layer(components);
@@ -70,6 +72,7 @@
70
72
  @import "./file-tree.css" layer(components);
71
73
  @import "./message.css" layer(components);
72
74
  @import "./model-selector.css" layer(components);
75
+ @import "./chatgpt-sign-in-screen.css" layer(components);
73
76
  @import "./prompt-input.css" layer(components);
74
77
  @import "./queue.css" layer(components);
75
78
  @import "./reasoning.css" layer(components);
@@ -77,6 +80,7 @@
77
80
  @import "./task.css" layer(components);
78
81
  @import "./terminal.css" layer(components);
79
82
  @import "./test-results.css" layer(components);
83
+ @import "./think-full-app.css" layer(components);
80
84
  @import "./web-preview.css" layer(components);
81
85
  @import "./workspace-explorer.css" layer(components);
82
86
 
@@ -0,0 +1,95 @@
1
+ .marker {
2
+ position: relative;
3
+ display: flex;
4
+ align-items: center;
5
+ gap: 0.5rem;
6
+ width: 100%;
7
+ min-height: 1rem;
8
+ font-family: var(--sigvelo-font-sans);
9
+ font-size: var(--sigvelo-text-sm);
10
+ line-height: 1.5;
11
+ color: var(--sigvelo-color-text-muted);
12
+ text-align: start;
13
+ }
14
+
15
+ .marker:where(a, button) {
16
+ padding: 0;
17
+ font: inherit;
18
+ color: var(--sigvelo-color-text-muted);
19
+ text-decoration: none;
20
+ background: transparent;
21
+ border: 0;
22
+ }
23
+
24
+ .marker:where(button) {
25
+ cursor: pointer;
26
+ }
27
+
28
+ .marker:where(a, button):hover {
29
+ color: var(--sigvelo-color-text);
30
+ }
31
+
32
+ .marker:where(a, button):focus-visible {
33
+ outline: none;
34
+ border-radius: var(--sigvelo-radius-sm);
35
+ box-shadow:
36
+ 0 0 0 2px var(--sigvelo-color-canvas),
37
+ 0 0 0 4px var(--sigvelo-color-focus);
38
+ }
39
+
40
+ .marker--separator::before,
41
+ .marker--separator::after {
42
+ content: "";
43
+ flex: 1 1 0;
44
+ min-width: 0;
45
+ height: var(--sigvelo-border-width);
46
+ background-color: var(--sigvelo-color-neutral-border-subtle);
47
+ }
48
+
49
+ .marker--separator::before {
50
+ margin-inline-end: 0.25rem;
51
+ }
52
+
53
+ .marker--separator::after {
54
+ margin-inline-start: 0.25rem;
55
+ }
56
+
57
+ .marker--border {
58
+ padding-block-end: 0.5rem;
59
+ border-block-end: var(--sigvelo-border-width) var(--sigvelo-border-style)
60
+ var(--sigvelo-color-neutral-border-subtle);
61
+ }
62
+
63
+ .marker__icon {
64
+ display: inline-flex;
65
+ flex-shrink: 0;
66
+ width: 1rem;
67
+ height: 1rem;
68
+ align-items: center;
69
+ justify-content: center;
70
+ }
71
+
72
+ .marker__icon svg {
73
+ width: 1rem;
74
+ height: 1rem;
75
+ }
76
+
77
+ .marker__content {
78
+ min-width: 0;
79
+ overflow-wrap: anywhere;
80
+ }
81
+
82
+ .marker--separator .marker__content {
83
+ flex: 0 1 auto;
84
+ text-align: center;
85
+ }
86
+
87
+ .marker a {
88
+ color: inherit;
89
+ text-decoration: underline;
90
+ text-underline-offset: 0.1875rem;
91
+ }
92
+
93
+ .marker a:hover {
94
+ color: var(--sigvelo-color-text);
95
+ }
@@ -0,0 +1,113 @@
1
+ .message-scroller {
2
+ position: relative;
3
+ display: flex;
4
+ flex-direction: column;
5
+ width: 100%;
6
+ height: 100%;
7
+ min-height: 0;
8
+ overflow: hidden;
9
+ font-family: var(--sigvelo-font-sans);
10
+ color: var(--sigvelo-color-text);
11
+ }
12
+
13
+ .message-scroller__viewport {
14
+ --message-scroller-fade-size: min(12%, 2.5rem);
15
+ --message-scroller-fade-t: 0px;
16
+ --message-scroller-fade-b: 0px;
17
+ width: 100%;
18
+ height: 100%;
19
+ min-width: 0;
20
+ min-height: 0;
21
+ overflow-y: auto;
22
+ overflow-x: hidden;
23
+ overscroll-behavior: contain;
24
+ scrollbar-gutter: stable;
25
+ 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
+ }
43
+
44
+ .message-scroller__viewport[data-scrollable~="end"] {
45
+ --message-scroller-fade-b: var(--message-scroller-fade-b-size, var(--message-scroller-fade-size));
46
+ }
47
+
48
+ .message-scroller__content {
49
+ display: flex;
50
+ flex-direction: column;
51
+ gap: 1rem;
52
+ min-height: 100%;
53
+ }
54
+
55
+ .message-scroller__item {
56
+ min-width: 0;
57
+ flex-shrink: 0;
58
+ }
59
+
60
+ .message-scroller__button {
61
+ position: absolute;
62
+ inset-inline-start: 50%;
63
+ inset-block-end: 1rem;
64
+ z-index: 1;
65
+ translate: -50% 0;
66
+ border-radius: 999rem;
67
+ box-shadow: var(--sigvelo-shadow-sm);
68
+ transition:
69
+ opacity var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
70
+ scale var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
71
+ translate var(--sigvelo-duration-fast) var(--sigvelo-ease-standard);
72
+ }
73
+
74
+ .message-scroller__button[data-direction="start"] {
75
+ inset-block-start: 1rem;
76
+ inset-block-end: auto;
77
+ }
78
+
79
+ .message-scroller__button[data-active="false"] {
80
+ pointer-events: none;
81
+ opacity: 0;
82
+ scale: 0.95;
83
+ }
84
+
85
+ .message-scroller__button[data-direction="end"][data-active="false"] {
86
+ translate: -50% 0.5rem;
87
+ }
88
+
89
+ .message-scroller__button[data-direction="start"][data-active="false"] {
90
+ translate: -50% -0.5rem;
91
+ }
92
+
93
+ .message-scroller__button[data-direction="start"] svg {
94
+ rotate: 180deg;
95
+ }
96
+
97
+ .message-scroller__button-label {
98
+ position: absolute;
99
+ width: 1px;
100
+ height: 1px;
101
+ padding: 0;
102
+ margin: -1px;
103
+ overflow: hidden;
104
+ clip-path: inset(50%);
105
+ white-space: nowrap;
106
+ border: 0;
107
+ }
108
+
109
+ @media (forced-colors: active) {
110
+ .message-scroller__button {
111
+ border: 1px solid CanvasText;
112
+ }
113
+ }