@horon-ai/react 0.1.5 → 0.1.7
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/LICENSE +104 -0
- package/README.md +4 -0
- package/THIRD_PARTY_NOTICES.md +62 -0
- package/package.json +11 -3
- package/src/components/agent-activity.tsx +2 -2
- package/src/components/agent-lane.tsx +2 -2
- package/src/components/agent-lanes-timeline.tsx +3 -3
- package/src/components/agent-panel.tsx +2 -2
- package/src/components/agent-steering-panel.tsx +2 -2
- package/src/components/bot-instructions-panel.tsx +3 -3
- package/src/components/bot-memory-panel.tsx +1 -1
- package/src/components/bottom-sheet.tsx +2 -2
- package/src/components/calendar.tsx +1 -1
- package/src/components/chat-controls.tsx +2 -2
- package/src/components/code-panel.tsx +1 -1
- package/src/components/combobox.tsx +1 -1
- package/src/components/command-palette.tsx +1 -1
- package/src/components/composer.tsx +1 -0
- package/src/components/data-table.tsx +1 -1
- package/src/components/directory-card.tsx +1 -1
- package/src/components/document-extract-panel.tsx +6 -6
- package/src/components/file-drop.tsx +1 -1
- package/src/components/integration-row.tsx +1 -1
- package/src/components/knowledge-base-panel.tsx +1 -1
- package/src/components/list-detail.tsx +3 -3
- package/src/components/marketplace-card.tsx +1 -1
- package/src/components/mcp-server-row.tsx +1 -1
- package/src/components/menu.tsx +3 -3
- package/src/components/message-extras.tsx +2 -2
- package/src/components/orchestrator-panel.tsx +2 -2
- package/src/components/page-header.tsx +1 -1
- package/src/components/plan-step.tsx +1 -1
- package/src/components/plugin-row.tsx +1 -1
- package/src/components/research-run-panel.tsx +3 -3
- package/src/components/settings-list.tsx +1 -1
- package/src/components/sidebar.tsx +3 -3
- package/src/components/source-row.tsx +2 -2
- package/src/components/task-row.tsx +1 -1
- package/src/components/toast.tsx +1 -0
- package/src/components/tool-call.tsx +3 -3
- package/src/components/tool-calls-header.tsx +1 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# PolyForm Strict License 1.0.0
|
|
2
|
+
|
|
3
|
+
<https://polyformproject.org/licenses/strict/1.0.0>
|
|
4
|
+
|
|
5
|
+
## Acceptance
|
|
6
|
+
|
|
7
|
+
In order to get any license under these terms, you must agree
|
|
8
|
+
to them as both strict obligations and conditions to all
|
|
9
|
+
your licenses.
|
|
10
|
+
|
|
11
|
+
## Copyright License
|
|
12
|
+
|
|
13
|
+
The licensor grants you a copyright license for the software
|
|
14
|
+
to do everything you might do with the software that would
|
|
15
|
+
otherwise infringe the licensor's copyright in it for any
|
|
16
|
+
permitted purpose, other than distributing the software or
|
|
17
|
+
making changes or new works based on the software.
|
|
18
|
+
|
|
19
|
+
## Patent License
|
|
20
|
+
|
|
21
|
+
The licensor grants you a patent license for the software that
|
|
22
|
+
covers patent claims the licensor can license, or becomes able
|
|
23
|
+
to license, that you would infringe by using the software.
|
|
24
|
+
|
|
25
|
+
## Noncommercial Purposes
|
|
26
|
+
|
|
27
|
+
Any noncommercial purpose is a permitted purpose.
|
|
28
|
+
|
|
29
|
+
## Personal Uses
|
|
30
|
+
|
|
31
|
+
Personal use for research, experiment, and testing for
|
|
32
|
+
the benefit of public knowledge, personal study, private
|
|
33
|
+
entertainment, hobby projects, amateur pursuits, or religious
|
|
34
|
+
observance, without any anticipated commercial application,
|
|
35
|
+
is use for a permitted purpose.
|
|
36
|
+
|
|
37
|
+
## Noncommercial Organizations
|
|
38
|
+
|
|
39
|
+
Use by any charitable organization, educational institution,
|
|
40
|
+
public research organization, public safety or health
|
|
41
|
+
organization, environmental protection organization,
|
|
42
|
+
or government institution is use for a permitted purpose
|
|
43
|
+
regardless of the source of funding or obligations resulting
|
|
44
|
+
from the funding.
|
|
45
|
+
|
|
46
|
+
## Fair Use
|
|
47
|
+
|
|
48
|
+
You may have "fair use" rights for the software under the
|
|
49
|
+
law. These terms do not limit them.
|
|
50
|
+
|
|
51
|
+
## No Other Rights
|
|
52
|
+
|
|
53
|
+
These terms do not allow you to sublicense or transfer any of
|
|
54
|
+
your licenses to anyone else, or prevent the licensor from
|
|
55
|
+
granting licenses to anyone else. These terms do not imply
|
|
56
|
+
any other licenses.
|
|
57
|
+
|
|
58
|
+
## Patent Defense
|
|
59
|
+
|
|
60
|
+
If you make any written claim that the software infringes or
|
|
61
|
+
contributes to infringement of any patent, your patent license
|
|
62
|
+
for the software granted under these terms ends immediately. If
|
|
63
|
+
your company makes such a claim, your patent license ends
|
|
64
|
+
immediately for work on behalf of your company.
|
|
65
|
+
|
|
66
|
+
## Violations
|
|
67
|
+
|
|
68
|
+
The first time you are notified in writing that you have
|
|
69
|
+
violated any of these terms, or done anything with the software
|
|
70
|
+
not covered by your licenses, your licenses can nonetheless
|
|
71
|
+
continue if you come into full compliance with these terms,
|
|
72
|
+
and take practical steps to correct past violations, within
|
|
73
|
+
32 days of receiving notice. Otherwise, all your licenses
|
|
74
|
+
end immediately.
|
|
75
|
+
|
|
76
|
+
## No Liability
|
|
77
|
+
|
|
78
|
+
***As far as the law allows, the software comes as is, without
|
|
79
|
+
any warranty or condition, and the licensor will not be liable
|
|
80
|
+
to you for any damages arising out of these terms or the use
|
|
81
|
+
or nature of the software, under any kind of legal claim.***
|
|
82
|
+
|
|
83
|
+
## Definitions
|
|
84
|
+
|
|
85
|
+
The **licensor** is the individual or entity offering these
|
|
86
|
+
terms, and the **software** is the software the licensor makes
|
|
87
|
+
available under these terms.
|
|
88
|
+
|
|
89
|
+
**You** refers to the individual or entity agreeing to these
|
|
90
|
+
terms.
|
|
91
|
+
|
|
92
|
+
**Your company** is any legal entity, sole proprietorship,
|
|
93
|
+
or other kind of organization that you work for, plus all
|
|
94
|
+
organizations that have control over, are under the control of,
|
|
95
|
+
or are under common control with that organization. **Control**
|
|
96
|
+
means ownership of substantially all the assets of an entity,
|
|
97
|
+
or the power to direct its management and policies by vote,
|
|
98
|
+
contract, or otherwise. Control can be direct or indirect.
|
|
99
|
+
|
|
100
|
+
**Your licenses** are all the licenses granted to you for the
|
|
101
|
+
software under these terms.
|
|
102
|
+
|
|
103
|
+
**Use** means anything you do with the software requiring one
|
|
104
|
+
of your licenses.
|
package/README.md
CHANGED
|
@@ -167,3 +167,7 @@ web, desktop(Electron의 Chromium), iOS, Android가 같은 모습입니다.
|
|
|
167
167
|
bun run lint && bun run typecheck # 이 패키지에서
|
|
168
168
|
bun test # 저장소 루트에서, 진입점 재수출 커버리지
|
|
169
169
|
```
|
|
170
|
+
|
|
171
|
+
## 라이선스
|
|
172
|
+
|
|
173
|
+
[PolyForm Strict License 1.0.0](https://polyformproject.org/licenses/strict/1.0.0)입니다. 비상업적 목적의 사용만 허용하고 수정·재배포·상업적 이용은 금지합니다. 전문은 패키지에 동봉된 `LICENSE`에 있습니다. 서드파티 고지는 `THIRD_PARTY_NOTICES.md`에 있습니다.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
The Horon design packages include the works below. Each keeps its own license;
|
|
4
|
+
the PolyForm Strict license in `LICENSE` covers only the Horon code.
|
|
5
|
+
|
|
6
|
+
## Phosphor Icons
|
|
7
|
+
|
|
8
|
+
`packages/lynx/src/icons/phosphor.g.ts` is generated from `@phosphor-icons/core`,
|
|
9
|
+
and the React components draw `@phosphor-icons/react`. Both are MIT.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
MIT License
|
|
13
|
+
|
|
14
|
+
Copyright (c) 2023 Phosphor Icons
|
|
15
|
+
|
|
16
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
17
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
18
|
+
in the Software without restriction, including without limitation the rights
|
|
19
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
20
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
21
|
+
furnished to do so, subject to the following conditions:
|
|
22
|
+
|
|
23
|
+
The above copyright notice and this permission notice shall be included in all
|
|
24
|
+
copies or substantial portions of the Software.
|
|
25
|
+
|
|
26
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
27
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
28
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
29
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
30
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
31
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
32
|
+
SOFTWARE.
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Pretendard
|
|
36
|
+
|
|
37
|
+
`packages/react/src/styles/globals.css` imports the Pretendard variable font
|
|
38
|
+
CSS, and the Flutter example bundles the font file. SIL Open Font License 1.1,
|
|
39
|
+
Copyright (c) 2021, Kil Hyung-jin, with Reserved Font Name Pretendard. The full
|
|
40
|
+
license text is in `packages/flutter/example/assets/fonts/Pretendard-LICENSE.txt`
|
|
41
|
+
and at <https://openfontlicense.org>.
|
|
42
|
+
|
|
43
|
+
## Geist Mono
|
|
44
|
+
|
|
45
|
+
Code typeface, loaded from `@fontsource-variable/geist-mono`, and bundled in the
|
|
46
|
+
Flutter example. SIL Open Font License 1.1, Copyright 2024 The Geist Project
|
|
47
|
+
Authors. The full license text is in
|
|
48
|
+
`packages/flutter/example/assets/fonts/Geist-LICENSE.txt`.
|
|
49
|
+
|
|
50
|
+
## Tabler Icons
|
|
51
|
+
|
|
52
|
+
Flutter example icons, `packages/flutter/example/assets/fonts/TablerIcons.ttf`.
|
|
53
|
+
MIT, Copyright (c) 2020-2026 Paweł Kuna. The full license text is in
|
|
54
|
+
`packages/flutter/example/assets/fonts/TablerIcons-LICENSE.txt`.
|
|
55
|
+
|
|
56
|
+
## Runtime dependencies
|
|
57
|
+
|
|
58
|
+
Everything else the packages import arrives as npm dependencies rather than
|
|
59
|
+
vendored source, and each carries its own license in its published package:
|
|
60
|
+
`@base-ui/react` (MIT), `@tanstack/react-table` (MIT), `tailwind-merge` (MIT),
|
|
61
|
+
`shiki` (MIT), `@lynx-js/react` (Apache-2.0), and the React, Astro and Lynx
|
|
62
|
+
toolchain. No copyleft-licensed code is vendored into this repository.
|
package/package.json
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@horon-ai/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/horon-ai/design.git",
|
|
7
7
|
"directory": "packages/react"
|
|
8
8
|
},
|
|
9
9
|
"type": "module",
|
|
10
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
11
|
+
"sideEffects": [
|
|
12
|
+
"./src/index.ts",
|
|
13
|
+
"./src/styles/globals.css",
|
|
14
|
+
"./src/lib/cursor-ghost.ts"
|
|
15
|
+
],
|
|
10
16
|
"files": [
|
|
11
17
|
"src",
|
|
12
|
-
"README.md"
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"THIRD_PARTY_NOTICES.md"
|
|
13
21
|
],
|
|
14
22
|
"publishConfig": {
|
|
15
23
|
"access": "public"
|
|
@@ -30,7 +38,7 @@
|
|
|
30
38
|
"dependencies": {
|
|
31
39
|
"@base-ui/react": "^1.9.0",
|
|
32
40
|
"@fontsource-variable/geist-mono": "^5.3.0",
|
|
33
|
-
"@horon-ai/tokens": "0.1.
|
|
41
|
+
"@horon-ai/tokens": "0.1.7",
|
|
34
42
|
"@phosphor-icons/react": "^2.1.10",
|
|
35
43
|
"@tanstack/react-table": "^9.3.1",
|
|
36
44
|
"pretendard": "^1.3.9",
|
|
@@ -138,7 +138,7 @@ export function StreamingText({ text, streaming = true, smooth = true, className
|
|
|
138
138
|
<span
|
|
139
139
|
aria-hidden
|
|
140
140
|
className={cn(
|
|
141
|
-
"ml-px inline-block h-[1.15em] w-0.5 rounded-
|
|
141
|
+
"ml-px inline-block h-[1.15em] w-0.5 rounded-full bg-interactive-primary align-[-0.2em]",
|
|
142
142
|
!typing && "animate-caret",
|
|
143
143
|
)}
|
|
144
144
|
/>
|
|
@@ -242,7 +242,7 @@ export function WorkLog({
|
|
|
242
242
|
<details
|
|
243
243
|
open
|
|
244
244
|
className={cn(
|
|
245
|
-
"group flex w-full max-w-85 min-w-0 flex-col motion-details rounded-
|
|
245
|
+
"group flex w-full max-w-85 min-w-0 flex-col motion-details rounded-2xl border border-border-default bg-bg-surface p-1.5",
|
|
246
246
|
className,
|
|
247
247
|
)}
|
|
248
248
|
>
|
|
@@ -68,10 +68,10 @@ export function AgentLane({ status, bot, elapsed, task, tool, output, usage, cla
|
|
|
68
68
|
>
|
|
69
69
|
<div className="flex items-center gap-2 text-caption text-text-secondary">
|
|
70
70
|
{/* live-pulse draws its ring in currentColor, so the running wrapper carries the tile's sky tone. */}
|
|
71
|
-
<span className={cn("shrink-0 rounded-
|
|
71
|
+
<span className={cn("shrink-0 rounded-xs", status === "running" && "animate-live-pulse text-sky-400")}>
|
|
72
72
|
<span
|
|
73
73
|
className={cn(
|
|
74
|
-
"flex size-4.5 items-center justify-center rounded-
|
|
74
|
+
"flex size-4.5 items-center justify-center rounded-xs text-label-sm text-text-inverse motion-colors",
|
|
75
75
|
botTile[status],
|
|
76
76
|
)}
|
|
77
77
|
>
|
|
@@ -193,7 +193,7 @@ export function AgentLanesTimeline({
|
|
|
193
193
|
return (
|
|
194
194
|
<section
|
|
195
195
|
className={cn(
|
|
196
|
-
"flex w-full max-w-252.5 min-w-0 flex-col overflow-clip rounded-
|
|
196
|
+
"flex w-full max-w-252.5 min-w-0 flex-col overflow-clip rounded-xl border border-border-default bg-bg-surface",
|
|
197
197
|
className,
|
|
198
198
|
)}
|
|
199
199
|
{...props}
|
|
@@ -261,7 +261,7 @@ export function AgentLanesTimeline({
|
|
|
261
261
|
>
|
|
262
262
|
<span
|
|
263
263
|
className={cn(
|
|
264
|
-
"flex size-8.5 shrink-0 items-center justify-center rounded-
|
|
264
|
+
"flex size-8.5 shrink-0 items-center justify-center rounded-md text-label-md text-text-on-ink",
|
|
265
265
|
avatarTone[bot.tone],
|
|
266
266
|
)}
|
|
267
267
|
>
|
|
@@ -327,7 +327,7 @@ export function AgentLanesTimeline({
|
|
|
327
327
|
<div
|
|
328
328
|
key={task.id}
|
|
329
329
|
className={cn(
|
|
330
|
-
"absolute flex h-9 motion-rise items-center gap-1.5 overflow-clip rounded-
|
|
330
|
+
"absolute flex h-9 motion-rise items-center gap-1.5 overflow-clip rounded-md px-2.5 text-label-sm transition-[left,width,background-color,color,border-color] duration-280 ease-emphasized [&>svg]:size-3.5",
|
|
331
331
|
barTone[task.tone],
|
|
332
332
|
)}
|
|
333
333
|
style={{
|
|
@@ -34,7 +34,7 @@ export function AgentPanel({
|
|
|
34
34
|
return (
|
|
35
35
|
<section
|
|
36
36
|
className={cn(
|
|
37
|
-
"flex min-w-0 flex-col items-stretch gap-3 rounded-
|
|
37
|
+
"flex min-w-0 flex-col items-stretch gap-3 rounded-xl border border-border-default bg-bg-surface px-5 pt-4 pb-2",
|
|
38
38
|
className,
|
|
39
39
|
)}
|
|
40
40
|
{...props}
|
|
@@ -70,7 +70,7 @@ export function ComposerChip({ leading, tileClassName, className, children, ...p
|
|
|
70
70
|
{typeof leading === "string" ? (
|
|
71
71
|
<span
|
|
72
72
|
className={cn(
|
|
73
|
-
"flex size-4 items-center justify-center rounded-
|
|
73
|
+
"flex size-4 items-center justify-center rounded-xs text-label-sm text-text-inverse",
|
|
74
74
|
tileClassName ?? "bg-interactive-primary",
|
|
75
75
|
)}
|
|
76
76
|
>
|
|
@@ -102,7 +102,7 @@ function SteeringNoteRow({
|
|
|
102
102
|
return (
|
|
103
103
|
<li
|
|
104
104
|
className={cn(
|
|
105
|
-
"flex items-center gap-2.5 rounded-
|
|
105
|
+
"flex items-center gap-2.5 rounded-md bg-overlay-ink-4 py-2 pr-2.5 pl-3.5",
|
|
106
106
|
leaving ? "animate-pop-out" : "motion-rise",
|
|
107
107
|
)}
|
|
108
108
|
onAnimationEnd={(event) => {
|
|
@@ -201,7 +201,7 @@ export function AgentSteeringPanel({
|
|
|
201
201
|
return (
|
|
202
202
|
<section
|
|
203
203
|
className={cn(
|
|
204
|
-
"flex w-full max-w-130 min-w-0 flex-col overflow-clip rounded-
|
|
204
|
+
"flex w-full max-w-130 min-w-0 flex-col overflow-clip rounded-xl border border-border-default bg-bg-surface",
|
|
205
205
|
className,
|
|
206
206
|
)}
|
|
207
207
|
{...props}
|
|
@@ -259,7 +259,7 @@ export function BotInstructionsPanel({
|
|
|
259
259
|
return (
|
|
260
260
|
<section
|
|
261
261
|
className={cn(
|
|
262
|
-
"flex w-full max-w-155 min-w-0 flex-col overflow-clip rounded-
|
|
262
|
+
"flex w-full max-w-155 min-w-0 flex-col overflow-clip rounded-xl border border-border-default bg-bg-surface",
|
|
263
263
|
className,
|
|
264
264
|
)}
|
|
265
265
|
{...props}
|
|
@@ -307,7 +307,7 @@ export function BotInstructionsPanel({
|
|
|
307
307
|
onClick={onBotClick}
|
|
308
308
|
className="flex h-7.5 shrink-0 motion-press cursor-pointer items-center gap-1.5 rounded-full bg-overlay-ink-6 pr-2.5 pl-1.5 text-label-sm text-text-primary hover:bg-overlay-ink-10 focus-visible:outline-2 focus-visible:outline-text-brand"
|
|
309
309
|
>
|
|
310
|
-
<span className="flex size-4.5 items-center justify-center rounded-
|
|
310
|
+
<span className="flex size-4.5 items-center justify-center rounded-xs bg-interactive-primary text-label-sm text-text-inverse">
|
|
311
311
|
{bot.initial}
|
|
312
312
|
</span>
|
|
313
313
|
{bot.name}
|
|
@@ -315,7 +315,7 @@ export function BotInstructionsPanel({
|
|
|
315
315
|
</button>
|
|
316
316
|
) : (
|
|
317
317
|
<span className="flex h-7.5 shrink-0 items-center gap-1.5 rounded-full bg-overlay-ink-6 pr-2.5 pl-1.5 text-label-sm text-text-primary">
|
|
318
|
-
<span className="flex size-4.5 items-center justify-center rounded-
|
|
318
|
+
<span className="flex size-4.5 items-center justify-center rounded-xs bg-interactive-primary text-label-sm text-text-inverse">
|
|
319
319
|
{bot.initial}
|
|
320
320
|
</span>
|
|
321
321
|
{bot.name}
|
|
@@ -139,7 +139,7 @@ export function BotMemoryPanel({
|
|
|
139
139
|
return (
|
|
140
140
|
<section
|
|
141
141
|
className={cn(
|
|
142
|
-
"flex w-full max-w-140 min-w-0 flex-col overflow-clip rounded-
|
|
142
|
+
"flex w-full max-w-140 min-w-0 flex-col overflow-clip rounded-xl border border-border-default bg-bg-surface",
|
|
143
143
|
className,
|
|
144
144
|
)}
|
|
145
145
|
{...props}
|
|
@@ -94,7 +94,7 @@ export function BottomSheetContent({
|
|
|
94
94
|
<Drawer.Popup
|
|
95
95
|
className={cn(
|
|
96
96
|
"relative flex max-h-[calc(100dvh-2rem)] w-full flex-col items-stretch overflow-clip px-4 pt-2 outline-none",
|
|
97
|
-
solid ? "rounded-t-xl bg-bg-surface pb-6" : "veil-overlay rounded-t-
|
|
97
|
+
solid ? "rounded-t-xl bg-bg-surface pb-6" : "veil-overlay rounded-t-xl pb-5",
|
|
98
98
|
"transition-[translate] duration-320 ease-out-quint data-ending-style:translate-y-full data-ending-style:duration-220 data-ending-style:ease-in data-starting-style:translate-y-full",
|
|
99
99
|
detail ? "gap-4.5" : floating ? "gap-3" : "max-w-93.5 gap-1",
|
|
100
100
|
className,
|
|
@@ -103,7 +103,7 @@ export function BottomSheetContent({
|
|
|
103
103
|
>
|
|
104
104
|
<span
|
|
105
105
|
aria-hidden
|
|
106
|
-
className="relative mx-auto h-[5px] w-9 cursor-grab touch-none rounded-
|
|
106
|
+
className="relative mx-auto h-[5px] w-9 cursor-grab touch-none rounded-full bg-overlay-ink-20 active:cursor-grabbing"
|
|
107
107
|
/>
|
|
108
108
|
<Drawer.Content
|
|
109
109
|
className={cn(
|
|
@@ -324,7 +324,7 @@ export function Calendar(props: CalendarProps) {
|
|
|
324
324
|
? "veil-overlay"
|
|
325
325
|
: "bg-glass-thick",
|
|
326
326
|
variant === "popover"
|
|
327
|
-
? cn("rounded-
|
|
327
|
+
? cn("rounded-xl", containerSizeClass[size].popover)
|
|
328
328
|
: cn("rounded-xl", containerSizeClass[size].default),
|
|
329
329
|
// Paper renders every popover day on the label scale; the default calendar mixes body and label.
|
|
330
330
|
variant === "popover" && popoverDayTextClass[size],
|
|
@@ -152,13 +152,13 @@ export function VoiceInput({
|
|
|
152
152
|
onClick={onStop}
|
|
153
153
|
className="relative flex size-9 shrink-0 motion-press cursor-pointer items-center justify-center rounded-full bg-interactive-danger focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand"
|
|
154
154
|
>
|
|
155
|
-
<span className="size-3
|
|
155
|
+
<span className="size-3 bg-interactive-on-danger" />
|
|
156
156
|
</button>
|
|
157
157
|
<div aria-hidden className="relative flex min-w-0 flex-1 items-center gap-[3px] overflow-hidden">
|
|
158
158
|
{bars.map((bar, position) => (
|
|
159
159
|
<span
|
|
160
160
|
key={bar.id}
|
|
161
|
-
className={cn("w-[3px] shrink-0 rounded-
|
|
161
|
+
className={cn("w-[3px] shrink-0 rounded-full bg-interactive-primary-75", recording && "animate-wave")}
|
|
162
162
|
style={{ height: bar.height, animationDelay: recording ? `${position * 120}ms` : undefined }}
|
|
163
163
|
/>
|
|
164
164
|
))}
|
|
@@ -27,7 +27,7 @@ export function CodePanel({ className, ...props }: CodePanelProps) {
|
|
|
27
27
|
return (
|
|
28
28
|
<pre
|
|
29
29
|
className={cn(
|
|
30
|
-
"font-normal m-0 max-w-full overflow-x-auto rounded-
|
|
30
|
+
"font-normal m-0 max-w-full overflow-x-auto rounded-md border border-border-default bg-neutral-50 px-4 py-3.5 font-mono text-[12px]/[21px] whitespace-pre text-syntax-string dark:border-border-strong dark:bg-neutral-800",
|
|
31
31
|
className,
|
|
32
32
|
)}
|
|
33
33
|
{...props}
|
|
@@ -290,7 +290,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
290
290
|
{shortLabel(item)}
|
|
291
291
|
<BaseCombobox.ChipRemove
|
|
292
292
|
aria-label={`Remove ${item.label}`}
|
|
293
|
-
className="flex cursor-pointer rounded-full p-0.5 text-text-secondary hover:bg-overlay-ink-10 hover:text-text-primary"
|
|
293
|
+
className="flex cursor-pointer rounded-full p-0.5 text-text-secondary hover:bg-overlay-ink-10 hover:text-text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand"
|
|
294
294
|
>
|
|
295
295
|
<X />
|
|
296
296
|
</BaseCombobox.ChipRemove>
|
|
@@ -120,7 +120,7 @@ export function CommandPalette({
|
|
|
120
120
|
aria-label={placeholder}
|
|
121
121
|
className={cn(
|
|
122
122
|
// 560px where it fits; the viewport's 8px gutters cap `w-full` below that.
|
|
123
|
-
"relative flex w-full max-w-140 motion-popup flex-col overflow-clip rounded-
|
|
123
|
+
"relative flex w-full max-w-140 motion-popup flex-col overflow-clip rounded-xl p-1.5",
|
|
124
124
|
surface === "glass" ? "veil-overlay" : "border border-border-default bg-bg-surface shadow-palette",
|
|
125
125
|
"duration-240 data-starting-style:translate-y-2",
|
|
126
126
|
className,
|
|
@@ -98,6 +98,7 @@ export function Composer({
|
|
|
98
98
|
onSubmit={submit}
|
|
99
99
|
className={cn(
|
|
100
100
|
"relative flex max-w-full min-w-0 items-center overflow-clip rounded-full motion-colors has-[input:focus-visible]:border-border-strong",
|
|
101
|
+
"has-[input:focus-visible]:outline-2 has-[input:focus-visible]:outline-offset-2 has-[input:focus-visible]:outline-text-brand",
|
|
101
102
|
surface === "glass" ? "veil-field" : "border border-border-default bg-bg-surface",
|
|
102
103
|
sizeClass[size],
|
|
103
104
|
className,
|
|
@@ -105,7 +105,7 @@ export function DataTableHeader({ icon, title, actions, className }: DataTableHe
|
|
|
105
105
|
return (
|
|
106
106
|
<div className={cn("flex items-center gap-3 px-6 py-4.5 group-data-[device=mobile]/dt:px-4.5", className)}>
|
|
107
107
|
{icon && (
|
|
108
|
-
<span className="flex size-6.5 shrink-0 items-center justify-center rounded-
|
|
108
|
+
<span className="flex size-6.5 shrink-0 items-center justify-center rounded-xs bg-bg-brand text-text-brand [&>svg]:size-4">
|
|
109
109
|
{icon}
|
|
110
110
|
</span>
|
|
111
111
|
)}
|
|
@@ -59,7 +59,7 @@ export function DirectoryCard({
|
|
|
59
59
|
{...props}
|
|
60
60
|
>
|
|
61
61
|
{surface === "glass" && <LiquidGlass />}
|
|
62
|
-
<span className="relative flex size-10 shrink-0 items-center justify-center rounded-
|
|
62
|
+
<span className="relative flex size-10 shrink-0 items-center justify-center rounded-md bg-sky-500 text-neutral-50 [&>svg]:size-5">
|
|
63
63
|
{icon}
|
|
64
64
|
</span>
|
|
65
65
|
<span className="relative flex min-w-0 flex-1 flex-col gap-0.5">
|
|
@@ -217,7 +217,7 @@ export function DocumentExtractPanel({
|
|
|
217
217
|
return (
|
|
218
218
|
<section
|
|
219
219
|
className={cn(
|
|
220
|
-
"@container flex w-full max-w-280 min-w-0 flex-col overflow-clip rounded-
|
|
220
|
+
"@container flex w-full max-w-280 min-w-0 flex-col overflow-clip rounded-xl border border-border-default bg-bg-surface",
|
|
221
221
|
className,
|
|
222
222
|
)}
|
|
223
223
|
{...props}
|
|
@@ -225,7 +225,7 @@ export function DocumentExtractPanel({
|
|
|
225
225
|
<div className="flex flex-col @4xl:flex-row">
|
|
226
226
|
<div className="flex min-w-0 flex-col @4xl:w-135 @4xl:shrink-0">
|
|
227
227
|
<div className="flex flex-wrap items-center gap-2 px-5 py-3">
|
|
228
|
-
<span className="flex size-7 shrink-0 items-center justify-center rounded-
|
|
228
|
+
<span className="flex size-7 shrink-0 items-center justify-center rounded-md bg-overlay-ink-5 text-text-danger">
|
|
229
229
|
<FilePdf aria-hidden className="size-4" />
|
|
230
230
|
</span>
|
|
231
231
|
{onOpenFile ? (
|
|
@@ -331,7 +331,7 @@ export function DocumentExtractPanel({
|
|
|
331
331
|
</span>
|
|
332
332
|
) : null}
|
|
333
333
|
</div>
|
|
334
|
-
<div className="flex flex-col overflow-x-auto rounded-
|
|
334
|
+
<div className="flex flex-col overflow-x-auto rounded-md border border-overlay-ink-10 px-3 py-0.5">
|
|
335
335
|
<div className="flex min-w-52 flex-col">
|
|
336
336
|
<div className="flex items-center gap-2 py-2 text-caption text-text-secondary">
|
|
337
337
|
{field.columns.map((column) => (
|
|
@@ -384,7 +384,7 @@ export function DocumentExtractPanel({
|
|
|
384
384
|
onClick={() => resolve(field.id)}
|
|
385
385
|
aria-label={needsCheck ? `Confirm ${field.label}` : undefined}
|
|
386
386
|
className={cn(
|
|
387
|
-
"flex h-9 min-w-0 flex-1 items-center gap-2 rounded-
|
|
387
|
+
"flex h-9 min-w-0 flex-1 items-center gap-2 rounded-md border px-3 text-start motion-colors",
|
|
388
388
|
needsCheck
|
|
389
389
|
? "cursor-pointer border-border-danger bg-overlay-ink-12 hover:bg-overlay-ink-14 focus-visible:outline-2 focus-visible:outline-text-brand"
|
|
390
390
|
: "cursor-default border-transparent bg-overlay-ink-4",
|
|
@@ -416,7 +416,7 @@ export function DocumentExtractPanel({
|
|
|
416
416
|
</>
|
|
417
417
|
) : null}
|
|
418
418
|
{view === "json" ? (
|
|
419
|
-
<pre className="animate-slide-shift-next overflow-x-auto rounded-
|
|
419
|
+
<pre className="animate-slide-shift-next overflow-x-auto rounded-md bg-overlay-ink-4 p-3 font-mono text-caption whitespace-pre text-text-primary">
|
|
420
420
|
{json}
|
|
421
421
|
</pre>
|
|
422
422
|
) : null}
|
|
@@ -454,7 +454,7 @@ export function DocumentExtractPanel({
|
|
|
454
454
|
<span className="min-w-0 flex-1" />
|
|
455
455
|
{bot ? (
|
|
456
456
|
<>
|
|
457
|
-
<span className="flex size-5 items-center justify-center rounded-
|
|
457
|
+
<span className="flex size-5 items-center justify-center rounded-xs bg-interactive-primary text-label-sm text-text-inverse">
|
|
458
458
|
{bot.initial}
|
|
459
459
|
</span>
|
|
460
460
|
<span className="text-caption text-text-secondary">
|
|
@@ -94,7 +94,7 @@ export function FileDrop({
|
|
|
94
94
|
onDragLeave={() => setDragging(false)}
|
|
95
95
|
onDrop={onDrop}
|
|
96
96
|
className={cn(
|
|
97
|
-
"relative flex w-full max-w-[550px] cursor-pointer items-center justify-center gap-2 overflow-clip rounded-
|
|
97
|
+
"relative flex w-full max-w-[550px] cursor-pointer items-center justify-center gap-2 overflow-clip rounded-md border-[1.5px] border-dashed border-border-dashed px-4 py-3 text-label-md text-text-secondary motion-colors",
|
|
98
98
|
"has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-text-brand",
|
|
99
99
|
// The dashed edge stays put (border-style cannot transition) and the active state adds an inner rim.
|
|
100
100
|
"data-dragging:border-border-brand data-dragging:shadow-[inset_0_0_0_1px_var(--color-text-brand)]",
|
|
@@ -95,7 +95,7 @@ export function IntegrationRow({
|
|
|
95
95
|
{surface === "glass" && <LiquidGlass />}
|
|
96
96
|
<span
|
|
97
97
|
className={cn(
|
|
98
|
-
"relative flex size-10 shrink-0 items-center justify-center rounded-
|
|
98
|
+
"relative flex size-10 shrink-0 items-center justify-center rounded-md motion-colors [&>svg]:size-5",
|
|
99
99
|
surface === "glass" && status === "not-connected"
|
|
100
100
|
? "bg-overlay-ink-6 text-text-secondary"
|
|
101
101
|
: tileClass[status],
|
|
@@ -120,7 +120,7 @@ export function KnowledgeBasePanel({
|
|
|
120
120
|
return (
|
|
121
121
|
<section
|
|
122
122
|
className={cn(
|
|
123
|
-
"flex w-full max-w-200 min-w-0 flex-col items-stretch gap-3 rounded-
|
|
123
|
+
"flex w-full max-w-200 min-w-0 flex-col items-stretch gap-3 rounded-xl border border-border-default bg-bg-surface px-5 py-4.5",
|
|
124
124
|
className,
|
|
125
125
|
)}
|
|
126
126
|
{...props}
|
|
@@ -121,7 +121,7 @@ export function ListDetail({
|
|
|
121
121
|
role="option"
|
|
122
122
|
aria-selected={item.id === selected?.id}
|
|
123
123
|
data-selected={item.id === selected?.id ? "" : undefined}
|
|
124
|
-
className="flex cursor-pointer flex-col gap-1 rounded-
|
|
124
|
+
className="flex cursor-pointer flex-col gap-1 rounded-md px-3 py-2.5 text-left motion-colors hover:bg-overlay-ink-4 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand data-selected:bg-overlay-ink-6 data-selected:hover:bg-overlay-ink-8"
|
|
125
125
|
onClick={() => {
|
|
126
126
|
setInner(item.id);
|
|
127
127
|
onValueChange?.(item.id);
|
|
@@ -165,7 +165,7 @@ export function ListDetailHeader({ icon, title, description, actions, className,
|
|
|
165
165
|
return (
|
|
166
166
|
<div className={cn("flex flex-wrap items-center gap-3", className)} {...props}>
|
|
167
167
|
{icon && (
|
|
168
|
-
<span className="flex size-10 shrink-0 items-center justify-center rounded-
|
|
168
|
+
<span className="flex size-10 shrink-0 items-center justify-center rounded-md bg-sky-100 text-sky-700 dark:bg-sky-900 dark:text-sky-300 [&_svg]:size-5">
|
|
169
169
|
{icon}
|
|
170
170
|
</span>
|
|
171
171
|
)}
|
|
@@ -301,7 +301,7 @@ export function ListDetailInstructions({
|
|
|
301
301
|
aria-label="Edit instructions"
|
|
302
302
|
value={text}
|
|
303
303
|
rows={6}
|
|
304
|
-
className="block w-full resize-y rounded-
|
|
304
|
+
className="block w-full resize-y rounded-md border border-border-default bg-bg-inset px-4 py-3.5 font-mono text-[12px]/[21px] text-text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand"
|
|
305
305
|
onChange={(event) => {
|
|
306
306
|
setInner(event.target.value);
|
|
307
307
|
onValueChange?.(event.target.value);
|
|
@@ -85,7 +85,7 @@ export function MarketplaceCard({
|
|
|
85
85
|
<div className="relative flex items-center gap-3">
|
|
86
86
|
<span
|
|
87
87
|
aria-hidden
|
|
88
|
-
className="flex size-10 shrink-0 items-center justify-center rounded-
|
|
88
|
+
className="flex size-10 shrink-0 items-center justify-center rounded-md bg-neutral-900 text-label-md text-neutral-50"
|
|
89
89
|
>
|
|
90
90
|
{initials}
|
|
91
91
|
</span>
|
|
@@ -119,7 +119,7 @@ export function McpServerRow({
|
|
|
119
119
|
)}
|
|
120
120
|
{...props}
|
|
121
121
|
>
|
|
122
|
-
<span className="flex size-10 shrink-0 items-center justify-center rounded-
|
|
122
|
+
<span className="flex size-10 shrink-0 items-center justify-center rounded-md bg-sky-500 text-label-md text-neutral-50">
|
|
123
123
|
{initials ?? name.slice(0, 2).toUpperCase()}
|
|
124
124
|
</span>
|
|
125
125
|
<div className="flex min-w-0 grow basis-40 flex-col gap-1">
|
package/src/components/menu.tsx
CHANGED
|
@@ -64,8 +64,8 @@ export type MenuContentProps = WithClass<ComponentProps<typeof BaseMenu.Popup>>
|
|
|
64
64
|
*/
|
|
65
65
|
export const menuPopupClass = {
|
|
66
66
|
glass: "rounded-xl veil-overlay",
|
|
67
|
-
solid: "rounded-
|
|
68
|
-
paper: "rounded-
|
|
67
|
+
solid: "rounded-xl bg-glass-fill-solid shadow-popover",
|
|
68
|
+
paper: "rounded-lg border border-border-default bg-bg-default shadow-[0_12px_32px_#0A142424]",
|
|
69
69
|
} as const;
|
|
70
70
|
|
|
71
71
|
/**
|
|
@@ -168,7 +168,7 @@ export function MenuItem({
|
|
|
168
168
|
<BaseMenu.Item
|
|
169
169
|
className={cn(
|
|
170
170
|
"relative flex w-full cursor-pointer items-center gap-2.5 motion-colors outline-none select-none data-disabled:cursor-not-allowed data-disabled:opacity-40 data-highlighted:bg-overlay-ink-6",
|
|
171
|
-
surface === "glass" ? "rounded-md px-3" : "rounded-
|
|
171
|
+
surface === "glass" ? "rounded-md px-3" : "rounded-md px-2.5",
|
|
172
172
|
description ? "h-12" : surface === "glass" ? "h-10" : "h-9",
|
|
173
173
|
selected && "bg-bg-brand data-highlighted:bg-bg-brand",
|
|
174
174
|
className,
|
|
@@ -116,11 +116,11 @@ export function Attachment({ name, detail, thumbnail, onRemove, removeLabel = "R
|
|
|
116
116
|
{thumbnail ? (
|
|
117
117
|
<span
|
|
118
118
|
aria-hidden
|
|
119
|
-
className="size-10 shrink-0 rounded-
|
|
119
|
+
className="size-10 shrink-0 rounded-md bg-cover bg-center"
|
|
120
120
|
style={{ backgroundImage: `url(${JSON.stringify(thumbnail)})` }}
|
|
121
121
|
/>
|
|
122
122
|
) : (
|
|
123
|
-
<span className="flex size-10 shrink-0 items-center justify-center rounded-
|
|
123
|
+
<span className="flex size-10 shrink-0 items-center justify-center rounded-md bg-accent-sky-500-16 text-text-brand">
|
|
124
124
|
<FileText aria-hidden className="size-5" />
|
|
125
125
|
</span>
|
|
126
126
|
)}
|
|
@@ -117,7 +117,7 @@ export function OrchestratorPanel({
|
|
|
117
117
|
return (
|
|
118
118
|
<section
|
|
119
119
|
className={cn(
|
|
120
|
-
"flex w-full min-w-0 flex-col overflow-clip rounded-
|
|
120
|
+
"flex w-full min-w-0 flex-col overflow-clip rounded-xl border border-border-default bg-bg-surface",
|
|
121
121
|
className,
|
|
122
122
|
)}
|
|
123
123
|
>
|
|
@@ -151,7 +151,7 @@ export function OrchestratorPanel({
|
|
|
151
151
|
<div role="separator" className="h-px bg-overlay-ink-8" />
|
|
152
152
|
<div className="flex flex-col gap-2.5 px-5 pt-4 pb-5">
|
|
153
153
|
<div className="flex flex-wrap items-center gap-2">
|
|
154
|
-
<span className="flex size-5.5 shrink-0 items-center justify-center rounded-
|
|
154
|
+
<span className="flex size-5.5 shrink-0 items-center justify-center rounded-xs bg-interactive-primary text-label-sm text-text-inverse">
|
|
155
155
|
{lead.initial}
|
|
156
156
|
</span>
|
|
157
157
|
<span className="min-w-0 truncate text-label-lg text-text-primary">{lead.name}</span>
|
|
@@ -54,7 +54,7 @@ export function PageHeader({
|
|
|
54
54
|
return (
|
|
55
55
|
<header
|
|
56
56
|
className={cn(
|
|
57
|
-
"relative flex max-w-full min-w-0 flex-col gap-1.5 overflow-clip rounded-
|
|
57
|
+
"relative flex max-w-full min-w-0 flex-col gap-1.5 overflow-clip rounded-xl p-2",
|
|
58
58
|
surface === "glass" ? "bg-glass-regular" : "border border-border-default bg-bg-surface",
|
|
59
59
|
className,
|
|
60
60
|
)}
|
|
@@ -116,7 +116,7 @@ export function PluginRow({
|
|
|
116
116
|
>
|
|
117
117
|
<span
|
|
118
118
|
aria-hidden
|
|
119
|
-
className="flex size-10 shrink-0 items-center justify-center rounded-
|
|
119
|
+
className="flex size-10 shrink-0 items-center justify-center rounded-md bg-sky-500 text-label-md text-neutral-50"
|
|
120
120
|
>
|
|
121
121
|
{initials}
|
|
122
122
|
</span>
|
|
@@ -155,7 +155,7 @@ export function ResearchRunPanel({
|
|
|
155
155
|
return (
|
|
156
156
|
<section
|
|
157
157
|
className={cn(
|
|
158
|
-
"flex w-full max-w-150 min-w-0 flex-col overflow-clip rounded-
|
|
158
|
+
"flex w-full max-w-150 min-w-0 flex-col overflow-clip rounded-xl border border-border-default bg-bg-surface",
|
|
159
159
|
className,
|
|
160
160
|
)}
|
|
161
161
|
{...props}
|
|
@@ -188,7 +188,7 @@ export function ResearchRunPanel({
|
|
|
188
188
|
>
|
|
189
189
|
<Spinner size={14} />
|
|
190
190
|
<span className="min-w-0 text-label-md text-text-primary">{statusLabel}</span>
|
|
191
|
-
<span aria-hidden className="h-3 w-0.5 shrink-0 animate-caret rounded-
|
|
191
|
+
<span aria-hidden className="h-3 w-0.5 shrink-0 animate-caret rounded-full bg-interactive-primary" />
|
|
192
192
|
{meta.length > 0 && (
|
|
193
193
|
<span className="text-caption text-text-secondary tabular-nums">
|
|
194
194
|
{meta.map((entry, index) => (
|
|
@@ -205,7 +205,7 @@ export function ResearchRunPanel({
|
|
|
205
205
|
<div aria-live="polite" className="flex flex-wrap items-center gap-x-1.5 gap-y-1">
|
|
206
206
|
<Spinner size={14} />
|
|
207
207
|
<span className="min-w-0 text-label-md text-text-primary">{statusLabel}</span>
|
|
208
|
-
<span aria-hidden className="h-3 w-0.5 shrink-0 animate-caret rounded-
|
|
208
|
+
<span aria-hidden className="h-3 w-0.5 shrink-0 animate-caret rounded-full bg-interactive-primary" />
|
|
209
209
|
{meta.length > 0 && (
|
|
210
210
|
<span className="text-caption text-text-secondary tabular-nums">
|
|
211
211
|
{meta.map((entry, index) => (
|
|
@@ -110,7 +110,7 @@ export function SettingsRowIcon({ className, ...props }: WithClass<ComponentProp
|
|
|
110
110
|
<span
|
|
111
111
|
aria-hidden
|
|
112
112
|
className={cn(
|
|
113
|
-
"flex size-8 shrink-0 items-center justify-center rounded-
|
|
113
|
+
"flex size-8 shrink-0 items-center justify-center rounded-sm bg-bg-subtle text-text-primary [&_svg]:size-4",
|
|
114
114
|
className,
|
|
115
115
|
)}
|
|
116
116
|
{...props}
|
|
@@ -265,7 +265,7 @@ export function SidebarWorkspaceSwitch({ initial, name, className, ...props }: S
|
|
|
265
265
|
<button
|
|
266
266
|
type="button"
|
|
267
267
|
className={cn(
|
|
268
|
-
"flex h-9 min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-
|
|
268
|
+
"flex h-9 min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-md pr-1 pl-2 text-left motion-colors hover:bg-overlay-ink-6 data-popup-open:bg-overlay-ink-6",
|
|
269
269
|
"focus-visible:outline-2 focus-visible:outline-text-brand",
|
|
270
270
|
className,
|
|
271
271
|
)}
|
|
@@ -532,7 +532,7 @@ export function SidebarAccount({ initials, name, email, className, ...props }: S
|
|
|
532
532
|
)}
|
|
533
533
|
{...props}
|
|
534
534
|
>
|
|
535
|
-
<span className="flex size-9 shrink-0 items-center justify-center rounded-
|
|
535
|
+
<span className="flex size-9 shrink-0 items-center justify-center rounded-md bg-sky-200 text-label-md text-surface-ink">
|
|
536
536
|
{initials}
|
|
537
537
|
</span>
|
|
538
538
|
<span className="flex min-w-0 flex-1 flex-col">
|
|
@@ -701,7 +701,7 @@ export function SidebarAddButton({ icon = addIcon, className, children, ...props
|
|
|
701
701
|
<button
|
|
702
702
|
type="button"
|
|
703
703
|
className={cn(
|
|
704
|
-
"relative mt-2 flex h-9 w-full cursor-pointer items-center justify-center gap-1.5 rounded-
|
|
704
|
+
"relative mt-2 flex h-9 w-full cursor-pointer items-center justify-center gap-1.5 rounded-md text-label-md text-text-secondary motion-colors hover:bg-overlay-ink-4",
|
|
705
705
|
"focus-visible:outline-2 focus-visible:outline-text-brand",
|
|
706
706
|
className,
|
|
707
707
|
)}
|
|
@@ -93,11 +93,11 @@ export function SourceRow({
|
|
|
93
93
|
"flex flex-wrap items-center gap-x-3 gap-y-2 px-2 py-3",
|
|
94
94
|
variant === "list"
|
|
95
95
|
? "relative after:absolute after:inset-x-2 after:bottom-0 after:h-px after:bg-overlay-ink-8 last:after:hidden"
|
|
96
|
-
: "rounded-
|
|
96
|
+
: "rounded-lg border border-border-default bg-bg-surface px-3",
|
|
97
97
|
className,
|
|
98
98
|
)}
|
|
99
99
|
>
|
|
100
|
-
<span className="flex size-8 shrink-0 items-center justify-center rounded-
|
|
100
|
+
<span className="flex size-8 shrink-0 items-center justify-center rounded-md bg-overlay-ink-5 text-text-primary [&>svg]:size-4">
|
|
101
101
|
{icon}
|
|
102
102
|
</span>
|
|
103
103
|
<span className="flex min-w-0 flex-1 flex-col gap-0.5">
|
|
@@ -116,7 +116,7 @@ export function TaskRow({
|
|
|
116
116
|
<div className="flex items-center gap-1.5 text-caption text-text-secondary">
|
|
117
117
|
<span
|
|
118
118
|
className={cn(
|
|
119
|
-
"flex size-4.5 shrink-0 items-center justify-center rounded-
|
|
119
|
+
"flex size-4.5 shrink-0 items-center justify-center rounded-xs text-label-sm",
|
|
120
120
|
bot.tileClassName ? cn("text-text-inverse", bot.tileClassName) : botTile[status],
|
|
121
121
|
)}
|
|
122
122
|
>
|
package/src/components/toast.tsx
CHANGED
|
@@ -92,6 +92,7 @@ function ToastList({ size, surface }: {
|
|
|
92
92
|
aria-label="Close"
|
|
93
93
|
className={cn(
|
|
94
94
|
"relative flex shrink-0 motion-press cursor-pointer text-text-secondary motion-colors hover:text-text-primary",
|
|
95
|
+
"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand",
|
|
95
96
|
"after:absolute after:-inset-2 after:content-['']",
|
|
96
97
|
closeSizeClass[size],
|
|
97
98
|
)}
|
|
@@ -168,7 +168,7 @@ function Section({
|
|
|
168
168
|
</button>
|
|
169
169
|
)}
|
|
170
170
|
</div>
|
|
171
|
-
<div className="min-w-0 rounded-
|
|
171
|
+
<div className="min-w-0 rounded-md bg-bg-subtle px-3.5 py-3">{children}</div>
|
|
172
172
|
{footer}
|
|
173
173
|
</div>
|
|
174
174
|
);
|
|
@@ -250,14 +250,14 @@ export function ToolCall({
|
|
|
250
250
|
<Collapsible.Panel className="motion-collapse">
|
|
251
251
|
<div className="flex min-w-0 flex-col gap-3.5 px-4 pb-4">
|
|
252
252
|
{status === "failed" && error && (
|
|
253
|
-
<div className="flex items-center gap-2.5 rounded-
|
|
253
|
+
<div className="flex items-center gap-2.5 rounded-md bg-bg-danger px-3.5 py-3">
|
|
254
254
|
<WarningCircle aria-hidden className="size-4 shrink-0 text-text-danger" />
|
|
255
255
|
<p className="min-w-0 flex-1 text-body-sm text-text-danger">{error}</p>
|
|
256
256
|
{onRetry && (
|
|
257
257
|
<button
|
|
258
258
|
type="button"
|
|
259
259
|
onClick={onRetry}
|
|
260
|
-
className="flex h-7.5 shrink-0 motion-press cursor-pointer items-center gap-1.5 rounded-full border border-border-default bg-bg-surface px-2.5 text-label-sm text-text-primary"
|
|
260
|
+
className="flex h-7.5 shrink-0 motion-press cursor-pointer items-center gap-1.5 rounded-full border border-border-default bg-bg-surface px-2.5 text-label-sm text-text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand"
|
|
261
261
|
>
|
|
262
262
|
<ArrowClockwise aria-hidden className="size-3.5" />
|
|
263
263
|
Retry
|
|
@@ -75,7 +75,7 @@ export function ToolCallsHeader({
|
|
|
75
75
|
{chips.length > 0 && (
|
|
76
76
|
<span className="flex shrink-0 items-center">
|
|
77
77
|
{Children.map(chips, (icon) => (
|
|
78
|
-
<span className="-ml-2 flex size-7 shrink-0 items-center justify-center rounded-
|
|
78
|
+
<span className="-ml-2 flex size-7 shrink-0 items-center justify-center rounded-md bg-bg-subtle text-text-secondary ring-2 ring-bg-surface first:ml-0 [&>svg]:size-3.5">
|
|
79
79
|
{icon}
|
|
80
80
|
</span>
|
|
81
81
|
))}
|