@horon-ai/react 0.1.4 → 0.1.6

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 (38) hide show
  1. package/package.json +7 -2
  2. package/src/components/agent-activity.tsx +2 -2
  3. package/src/components/agent-lane.tsx +2 -2
  4. package/src/components/agent-lanes-timeline.tsx +3 -3
  5. package/src/components/agent-panel.tsx +2 -2
  6. package/src/components/agent-steering-panel.tsx +2 -2
  7. package/src/components/bot-instructions-panel.tsx +3 -3
  8. package/src/components/bot-memory-panel.tsx +1 -1
  9. package/src/components/bottom-sheet.tsx +2 -2
  10. package/src/components/calendar.tsx +1 -1
  11. package/src/components/chat-controls.tsx +2 -2
  12. package/src/components/code-panel.tsx +1 -1
  13. package/src/components/combobox.tsx +1 -1
  14. package/src/components/command-palette.tsx +1 -1
  15. package/src/components/composer.tsx +1 -0
  16. package/src/components/data-table.tsx +1 -1
  17. package/src/components/directory-card.tsx +1 -1
  18. package/src/components/document-extract-panel.tsx +6 -6
  19. package/src/components/file-drop.tsx +1 -1
  20. package/src/components/integration-row.tsx +1 -1
  21. package/src/components/knowledge-base-panel.tsx +1 -1
  22. package/src/components/list-detail.tsx +3 -3
  23. package/src/components/marketplace-card.tsx +1 -1
  24. package/src/components/mcp-server-row.tsx +1 -1
  25. package/src/components/menu.tsx +3 -3
  26. package/src/components/message-extras.tsx +2 -2
  27. package/src/components/orchestrator-panel.tsx +2 -2
  28. package/src/components/page-header.tsx +1 -1
  29. package/src/components/plan-step.tsx +1 -1
  30. package/src/components/plugin-row.tsx +1 -1
  31. package/src/components/research-run-panel.tsx +3 -3
  32. package/src/components/settings-list.tsx +1 -1
  33. package/src/components/sidebar.tsx +3 -3
  34. package/src/components/source-row.tsx +2 -2
  35. package/src/components/task-row.tsx +1 -1
  36. package/src/components/toast.tsx +1 -0
  37. package/src/components/tool-call.tsx +3 -3
  38. package/src/components/tool-calls-header.tsx +1 -1
package/package.json CHANGED
@@ -1,12 +1,17 @@
1
1
  {
2
2
  "name": "@horon-ai/react",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
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
+ "sideEffects": [
11
+ "./src/index.ts",
12
+ "./src/styles/globals.css",
13
+ "./src/lib/cursor-ghost.ts"
14
+ ],
10
15
  "files": [
11
16
  "src",
12
17
  "README.md"
@@ -30,7 +35,7 @@
30
35
  "dependencies": {
31
36
  "@base-ui/react": "^1.9.0",
32
37
  "@fontsource-variable/geist-mono": "^5.3.0",
33
- "@horon-ai/tokens": "0.1.4",
38
+ "@horon-ai/tokens": "0.1.6",
34
39
  "@phosphor-icons/react": "^2.1.10",
35
40
  "@tanstack/react-table": "^9.3.1",
36
41
  "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-[1px] bg-interactive-primary align-[-0.2em]",
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-[16px] border border-border-default bg-bg-surface p-1.5",
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-[5px]", status === "running" && "animate-live-pulse text-sky-400")}>
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-[5px] text-label-sm text-text-inverse motion-colors",
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-[24px] border border-border-default bg-bg-surface",
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-[10px] text-label-md text-text-on-ink",
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-[10px] px-2.5 text-label-sm transition-[left,width,background-color,color,border-color] duration-280 ease-emphasized [&>svg]:size-3.5",
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-[24px] border border-border-default bg-bg-surface px-5 pt-4 pb-2",
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-[5px] text-label-sm text-text-inverse",
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-[10px] bg-overlay-ink-4 py-2 pr-2.5 pl-3.5",
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-[24px] border border-border-default bg-bg-surface",
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-[24px] border border-border-default bg-bg-surface",
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-[5px] bg-interactive-primary text-label-sm text-text-inverse">
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-[5px] bg-interactive-primary text-label-sm text-text-inverse">
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-[24px] border border-border-default bg-bg-surface",
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-[32px] pb-5",
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-[3px] bg-overlay-ink-20 active:cursor-grabbing"
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-[24px]", containerSizeClass[size].popover)
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 rounded-[3px] bg-interactive-on-danger" />
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-[2px] bg-interactive-primary-75", recording && "animate-wave")}
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-[10px] 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",
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-[24px] p-1.5",
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-[7px] bg-bg-brand text-text-brand [&>svg]:size-4">
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-[10px] bg-sky-500 text-neutral-50 [&>svg]:size-5">
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-[24px] border border-border-default bg-bg-surface",
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-[10px] bg-overlay-ink-5 text-text-danger">
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-[10px] border border-overlay-ink-10 px-3 py-0.5">
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-[10px] border px-3 text-start motion-colors",
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-[10px] bg-overlay-ink-4 p-3 font-mono text-caption whitespace-pre text-text-primary">
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-[5px] bg-interactive-primary text-label-sm text-text-inverse">
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-[10px] border-[1.5px] border-dashed border-border-dashed px-4 py-3 text-label-md text-text-secondary motion-colors",
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-[10px] motion-colors [&>svg]:size-5",
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-[24px] border border-border-default bg-bg-surface px-5 py-4.5",
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-[10px] 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"
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-[10px] bg-sky-100 text-sky-700 dark:bg-sky-900 dark:text-sky-300 [&_svg]:size-5">
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-[10px] 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"
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-[10px] bg-neutral-900 text-label-md text-neutral-50"
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-[10px] bg-sky-500 text-label-md text-neutral-50">
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">
@@ -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-[18px] bg-glass-fill-solid shadow-popover",
68
- paper: "rounded-[14px] border border-border-default bg-bg-default shadow-[0_12px_32px_#0A142424]",
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-[10px] px-2.5",
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-[10px] bg-cover bg-center"
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-[10px] bg-accent-sky-500-16 text-text-brand">
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-[24px] border border-border-default bg-bg-surface",
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-[5px] bg-interactive-primary text-label-sm text-text-inverse">
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-[28px] p-2",
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
  )}
@@ -97,7 +97,7 @@ export function PlanStep({
97
97
  {!last && (
98
98
  <span
99
99
  className={cn(
100
- "w-0.5 flex-1 rounded-[1px] motion-colors",
100
+ "w-0.5 flex-1 rounded-full motion-colors",
101
101
  status === "done" ? "bg-status-live" : "bg-border-default",
102
102
  )}
103
103
  />
@@ -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-[10px] bg-sky-500 text-label-md text-neutral-50"
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-[24px] border border-border-default bg-bg-surface",
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-[1px] bg-interactive-primary" />
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-[1px] bg-interactive-primary" />
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-[9px] bg-bg-subtle text-text-primary [&_svg]:size-4",
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-[10px] pr-1 pl-2 text-left motion-colors hover:bg-overlay-ink-6 data-popup-open:bg-overlay-ink-6",
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-[10px] bg-sky-200 text-label-md text-surface-ink">
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-[10px] text-label-md text-text-secondary motion-colors hover:bg-overlay-ink-4",
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-[14px] border border-border-default bg-bg-surface px-3",
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-[10px] bg-overlay-ink-5 text-text-primary [&>svg]:size-4">
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-[5px] text-label-sm",
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
  >
@@ -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-[10px] bg-bg-subtle px-3.5 py-3">{children}</div>
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-[10px] bg-bg-danger px-3.5 py-3">
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-[10px] bg-bg-subtle text-text-secondary ring-2 ring-bg-surface first:ml-0 [&>svg]:size-3.5">
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
  ))}