@actioneer/ads 0.5.3 → 0.5.5

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 (95) hide show
  1. package/components/accordion.js +15 -15
  2. package/components/agent-icon.d.ts +64 -0
  3. package/components/agent-icon.js +251 -0
  4. package/components/ai-elements/agent-trace.d.ts +8 -1
  5. package/components/ai-elements/agent-trace.js +164 -129
  6. package/components/ai-elements/chain-of-thought-icon.d.ts +42 -0
  7. package/components/ai-elements/chain-of-thought-icon.js +283 -0
  8. package/components/ai-elements/chain-of-thought.js +7 -7
  9. package/components/ai-elements/chart.js +38 -35
  10. package/components/ai-elements/index.d.ts +1 -0
  11. package/components/ai-elements/inline-citation.js +40 -40
  12. package/components/ai-elements/message.js +5 -5
  13. package/components/ai-elements/queue.js +1 -1
  14. package/components/ai-elements/research-activity.d.ts +2 -0
  15. package/components/ai-elements/research-activity.js +79 -81
  16. package/components/ai-elements/task-progress.js +2 -2
  17. package/components/ai-elements/tool.d.ts +4 -2
  18. package/components/ai-elements/tool.js +74 -54
  19. package/components/ai-elements/transcript.js +1 -1
  20. package/components/alert.js +1 -1
  21. package/components/answer.d.ts +2643 -311
  22. package/components/answer.js +1836 -425
  23. package/components/assistant-ui/answer-tool-ui.js +23 -28
  24. package/components/assistant-ui/chain-of-thought.d.ts +7 -2
  25. package/components/assistant-ui/composer-harness.js +20 -16
  26. package/components/assistant-ui/reasoning.js +35 -31
  27. package/components/assistant-ui/tool-fallback.js +125 -122
  28. package/components/assistant-ui/tool-group.d.ts +3 -1
  29. package/components/assistant-ui/tool-group.js +48 -43
  30. package/components/audio-waveform.js +14 -14
  31. package/components/autocomplete.js +52 -48
  32. package/components/avatar.js +58 -44
  33. package/components/badge.js +3 -3
  34. package/components/brand-texture.js +1 -1
  35. package/components/breadcrumbs.d.ts +27 -1
  36. package/components/breadcrumbs.js +94 -42
  37. package/components/button.js +15 -15
  38. package/components/carousel.js +10 -10
  39. package/components/chart.d.ts +14 -0
  40. package/components/chart.js +747 -614
  41. package/components/chip.js +3 -3
  42. package/components/code-block.d.ts +39 -17
  43. package/components/code-block.js +153 -104
  44. package/components/command-palette.js +27 -25
  45. package/components/connector-card.js +2 -2
  46. package/components/dropdown.js +65 -61
  47. package/components/empty-state.js +15 -15
  48. package/components/field.js +23 -23
  49. package/components/index.d.ts +5 -0
  50. package/components/index.js +523 -470
  51. package/components/infinite-canvas.js +60 -60
  52. package/components/kbd.js +6 -6
  53. package/components/link.js +6 -6
  54. package/components/modal.js +22 -20
  55. package/components/page-header.js +1 -1
  56. package/components/pagination.js +22 -22
  57. package/components/pixel-blast-svg.js +1 -1
  58. package/components/pixel-icon.d.ts +31 -0
  59. package/components/pixel-icon.js +733 -0
  60. package/components/popover.js +46 -42
  61. package/components/ripple.d.ts +29 -0
  62. package/components/ripple.js +17 -0
  63. package/components/segmented.js +24 -23
  64. package/components/select.js +71 -67
  65. package/components/selection-action-bar.js +22 -22
  66. package/components/sidebar.d.ts +11 -3
  67. package/components/sidebar.js +161 -148
  68. package/components/stepper.d.ts +2 -0
  69. package/components/stepper.js +80 -43
  70. package/components/table.d.ts +7 -0
  71. package/components/table.js +223 -155
  72. package/components/tabs.d.ts +3 -1
  73. package/components/tabs.js +165 -144
  74. package/components/textarea.js +10 -8
  75. package/components/toast.js +48 -46
  76. package/components/tooltip.js +61 -59
  77. package/components/tree.js +44 -41
  78. package/components/typography.d.ts +1 -1
  79. package/components/typography.js +25 -25
  80. package/components/viz-charts.d.ts +62 -0
  81. package/components/viz-charts.js +408 -0
  82. package/fonts/aribau-grotesk-500.otf +0 -0
  83. package/fonts/aribau-grotesk-600.woff2 +0 -0
  84. package/fonts.css +6 -4
  85. package/lib/icons.d.ts +411 -402
  86. package/lib/icons.js +109 -107
  87. package/lib/viz-format.d.ts +25 -0
  88. package/lib/viz-format.js +40 -0
  89. package/llms.txt +111 -8
  90. package/manifest.json +1096 -58
  91. package/package.json +5 -5
  92. package/styles.css +226 -96
  93. package/theme.css +220 -92
  94. package/fonts/aribau-grotesk-400.otf +0 -0
  95. package/fonts/aribau-grotesk-700.otf +0 -0
@@ -66,7 +66,7 @@ const S = O(!1), k = O("tree"), B = d(
66
66
  // Connector rail: a 16px segment centred in the 28px gap between a
67
67
  // collapsed step's icon and the next one (top-8 = 32px from the step
68
68
  // top, ending 4px past its box). It stretches with an open step.
69
- p === "rail" && "before:absolute before:top-8 before:-bottom-1 before:left-2 before:w-px before:bg-border-strong before:content-['']",
69
+ p === "rail" && "before:absolute before:top-8 before:-bottom-1 before:left-2 before:w-px before:bg-border-tertiary before:content-['']",
70
70
  // Tree connector: a continuous rail down the group with an elbow
71
71
  // reaching EVERY step — the same branch language as Tree/TreeItem.
72
72
  // The last step drops the rail; its elbow draws the final segment.
@@ -77,7 +77,7 @@ const S = O(!1), k = O("tree"), B = d(
77
77
  // from that icon instead of floating below it.
78
78
  p === "tree" && [
79
79
  "ps-5",
80
- "before:absolute before:top-0 before:bottom-0 before:left-0 before:border-l before:border-border-strong before:content-['']",
80
+ "before:absolute before:top-0 before:bottom-0 before:left-0 before:border-l before:border-border-tertiary before:content-['']",
81
81
  "first:before:top-[calc(-1*var(--tree-rail-lead,0px))]",
82
82
  // The LAST row's rail stops exactly where its elbow begins (2px
83
83
  // in) instead of disappearing — hiding it left a 2px notch above
@@ -86,7 +86,7 @@ const S = O(!1), k = O("tree"), B = d(
86
86
  // it composes with the first-row climb.
87
87
  "last:before:bottom-[calc(100%-0.125rem)]",
88
88
  // top-0.5 + h-4 lands the elbow at 18px — the step icon's centre.
89
- "after:absolute after:left-0 after:top-0.5 after:h-4 after:w-4 after:rounded-bl-[9px] after:border-b after:border-l after:border-border-strong after:content-['']"
89
+ "after:absolute after:left-0 after:top-0.5 after:h-4 after:w-4 after:rounded-bl-[9px] after:border-b after:border-l after:border-border-tertiary after:content-['']"
90
90
  ],
91
91
  t === "complete" && "text-secondary",
92
92
  t === "active" && "text-secondary",
@@ -191,7 +191,7 @@ const S = O(!1), k = O("tree"), B = d(
191
191
  className: n(
192
192
  "relative pt-2 pb-1 pl-7",
193
193
  a && [
194
- "has-[[data-slot=chain-of-thought-evidence]]:before:absolute has-[[data-slot=chain-of-thought-evidence]]:before:left-2 has-[[data-slot=chain-of-thought-evidence]]:before:top-0 has-[[data-slot=chain-of-thought-evidence]]:before:bottom-1 has-[[data-slot=chain-of-thought-evidence]]:before:border-l has-[[data-slot=chain-of-thought-evidence]]:before:border-border-strong has-[[data-slot=chain-of-thought-evidence]]:before:content-['']",
194
+ "has-[[data-slot=chain-of-thought-evidence]]:before:absolute has-[[data-slot=chain-of-thought-evidence]]:before:left-2 has-[[data-slot=chain-of-thought-evidence]]:before:top-0 has-[[data-slot=chain-of-thought-evidence]]:before:bottom-1 has-[[data-slot=chain-of-thought-evidence]]:before:border-l has-[[data-slot=chain-of-thought-evidence]]:before:border-border-tertiary has-[[data-slot=chain-of-thought-evidence]]:before:content-['']",
195
195
  // The rail ends ON the last branch: when the trailing element
196
196
  // is a collapsed evidence row (min-h-8 = 32px + the pb-1),
197
197
  // stop at its top and let its elbow draw the final curve —
@@ -263,7 +263,7 @@ const S = O(!1), k = O("tree"), B = d(
263
263
  // icon → 16px = h-4). The elbow spans from the rail (20px left of
264
264
  // the row) to 4px short of the icon, same as every other branch.
265
265
  "[[data-rail]_&]:relative",
266
- "[[data-rail]_&]:before:absolute [[data-rail]_&]:before:content-[''] [[data-rail]_&]:before:-left-5 [[data-rail]_&]:before:top-0 [[data-rail]_&]:before:h-4 [[data-rail]_&]:before:w-4 [[data-rail]_&]:before:rounded-bl-[9px] [[data-rail]_&]:before:border-b [[data-rail]_&]:before:border-l [[data-rail]_&]:before:border-border-strong",
266
+ "[[data-rail]_&]:before:absolute [[data-rail]_&]:before:content-[''] [[data-rail]_&]:before:-left-5 [[data-rail]_&]:before:top-0 [[data-rail]_&]:before:h-4 [[data-rail]_&]:before:w-4 [[data-rail]_&]:before:rounded-bl-[9px] [[data-rail]_&]:before:border-b [[data-rail]_&]:before:border-l [[data-rail]_&]:before:border-border-tertiary",
267
267
  i
268
268
  ),
269
269
  ...p,
@@ -290,7 +290,7 @@ const S = O(!1), k = O("tree"), B = d(
290
290
  children: h ?? (s != null ? /* @__PURE__ */ e(j, {}) : /* @__PURE__ */ e(M, {}))
291
291
  }
292
292
  ),
293
- /* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate text-base font-medium text-secondary", children: r }),
293
+ /* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate text-base font-normal text-secondary", children: r }),
294
294
  a != null && /* @__PURE__ */ e(
295
295
  y,
296
296
  {
@@ -354,7 +354,7 @@ const S = O(!1), k = O("tree"), B = d(
354
354
  "th",
355
355
  {
356
356
  className: n(
357
- "sticky top-0 bg-surface px-2.5 py-1.5 font-medium whitespace-nowrap",
357
+ "sticky top-0 bg-surface px-2.5 py-1.5 font-normal whitespace-nowrap",
358
358
  c.align === "end" ? "text-right" : "text-left"
359
359
  ),
360
360
  children: c.label
@@ -1,16 +1,19 @@
1
1
  "use client";
2
2
  import { jsxs as a, jsx as e } from "react/jsx-runtime";
3
- import * as x from "react";
3
+ import * as g from "react";
4
4
  import { cva as M } from "class-variance-authority";
5
5
  import { Badge as Q } from "../badge.js";
6
6
  import { Button as T } from "../button.js";
7
7
  import { Collapsible as V, CollapsibleTrigger as W, CollapsibleContent as E } from "../collapsible.js";
8
- import { Skeleton as g } from "../skeleton.js";
8
+ import { Skeleton as x } from "../skeleton.js";
9
9
  import { Spinner as v } from "../spinner.js";
10
10
  import { Database as O, ChevronDown as P, WarningCircle as S, Refresh as F, CloseCircle as G } from "../../lib/icons.js";
11
- import { cn as d } from "../../lib/cn.js";
11
+ import { cn as l } from "../../lib/cn.js";
12
12
  const H = M(
13
- "w-full overflow-hidden rounded-lg text-foreground",
13
+ // An ARTIFACT card, not a work-trace row: the chart is a produced object,
14
+ // so it reads like an attachment (contained hairline card + filled icon
15
+ // tile) instead of the ChainOfThought/ResearchActivity trace language.
16
+ "w-full overflow-hidden rounded-lg border border-border bg-card text-foreground",
14
17
  {
15
18
  variants: {
16
19
  status: {
@@ -50,11 +53,11 @@ function U(t) {
50
53
  if (t)
51
54
  return t.total == null ? `${t.received} received` : `${t.received} of ${t.total} received`;
52
55
  }
53
- function X(t, r, n) {
56
+ function X(t, r, i) {
54
57
  const o = [
55
58
  r ? r.total == null ? `${r.received} received` : `${r.received} / ${r.total}` : J[t]
56
59
  ];
57
- return n && o.push(n), o.join(" · ");
60
+ return i && o.push(i), o.join(" · ");
58
61
  }
59
62
  function Y({
60
63
  status: t
@@ -65,7 +68,7 @@ function Y({
65
68
  className: "relative h-40 overflow-hidden rounded-md",
66
69
  "data-slot": "ai-chart-skeleton",
67
70
  children: [
68
- /* @__PURE__ */ e(g, { className: "absolute inset-0 h-full w-full" }),
71
+ /* @__PURE__ */ e(x, { className: "absolute inset-0 h-full w-full" }),
69
72
  /* @__PURE__ */ a("div", { className: "absolute inset-0 flex items-center justify-center gap-2 text-xs text-tertiary", children: [
70
73
  t !== "pending" && /* @__PURE__ */ e(
71
74
  v,
@@ -85,7 +88,7 @@ function Y({
85
88
  function Z({
86
89
  status: t,
87
90
  progress: r,
88
- errorContent: n,
91
+ errorContent: i,
89
92
  onRetry: o,
90
93
  children: s
91
94
  }) {
@@ -96,7 +99,7 @@ function Z({
96
99
  "data-slot": "ai-chart-error",
97
100
  children: [
98
101
  /* @__PURE__ */ e(S, { className: "size-5 text-danger-700", "aria-hidden": !0 }),
99
- /* @__PURE__ */ e("div", { className: "text-xs text-secondary", children: n ?? "The chart could not be generated." }),
102
+ /* @__PURE__ */ e("div", { className: "text-xs text-secondary", children: i ?? "The chart could not be generated." }),
100
103
  o && /* @__PURE__ */ e(
101
104
  T,
102
105
  {
@@ -133,21 +136,21 @@ function Z({
133
136
  ),
134
137
  /* @__PURE__ */ e("span", { children: U(r) ?? "Receiving chart data" })
135
138
  ] }),
136
- /* @__PURE__ */ e("div", { className: "min-h-40", children: s ?? /* @__PURE__ */ e(g, { className: "h-40 w-full" }) })
139
+ /* @__PURE__ */ e("div", { className: "min-h-40", children: s ?? /* @__PURE__ */ e(x, { className: "h-40 w-full" }) })
137
140
  ] }) : t !== "ready" ? /* @__PURE__ */ e(Y, { status: t }) : (
138
141
  // The ready chart draws itself in left→right (the reveal wipe) instead of
139
142
  // popping after the loading state — data entrance, not chrome.
140
143
  /* @__PURE__ */ e("div", { className: "ads-reveal ads-reveal-wipe min-h-40", "data-slot": "ai-chart-visual", children: s })
141
144
  );
142
145
  }
143
- const ee = x.forwardRef(
146
+ const ee = g.forwardRef(
144
147
  ({
145
148
  className: t,
146
149
  status: r,
147
- title: n,
150
+ title: i,
148
151
  tag: o,
149
152
  source: s,
150
- progress: l,
153
+ progress: d,
151
154
  elapsed: y,
152
155
  meta: c,
153
156
  accessibleSummary: u,
@@ -159,13 +162,13 @@ const ee = x.forwardRef(
159
162
  onRetry: w,
160
163
  children: k,
161
164
  role: A = "region",
162
- "aria-label": R,
163
- "aria-describedby": j,
164
- "aria-busy": z,
165
+ "aria-label": z,
166
+ "aria-describedby": R,
167
+ "aria-busy": j,
165
168
  ...I
166
169
  }, $) => {
167
- const i = r ?? "ready", B = i === "querying" || i === "partial" || i === "rendering", h = c !== void 0 ? c : X(i, l, y), q = K[i], f = x.useId(), p = i === "ready" && u != null, D = [
168
- j,
170
+ const n = r ?? "ready", B = n === "querying" || n === "partial" || n === "rendering", h = c !== void 0 ? c : X(n, d, y), q = K[n], f = g.useId(), p = n === "ready" && u != null, D = [
171
+ R,
169
172
  p ? f : void 0
170
173
  ].filter(Boolean).join(" ") || void 0;
171
174
  return /* @__PURE__ */ a(
@@ -176,11 +179,11 @@ const ee = x.forwardRef(
176
179
  defaultOpen: N,
177
180
  onOpenChange: C,
178
181
  role: A,
179
- "aria-label": R ?? (typeof n == "string" ? n : "AI chart evidence"),
182
+ "aria-label": z ?? (typeof i == "string" ? i : "AI chart evidence"),
180
183
  "aria-describedby": D,
181
184
  "data-slot": "ai-chart",
182
- "data-status": i,
183
- className: d(H({ status: i }), t),
185
+ "data-status": n,
186
+ className: l(H({ status: n }), t),
184
187
  ...I,
185
188
  children: [
186
189
  /* @__PURE__ */ e(
@@ -198,21 +201,21 @@ const ee = x.forwardRef(
198
201
  "button",
199
202
  {
200
203
  type: "button",
201
- className: d(
202
- "group/ai-chart-trigger flex min-h-9 w-full items-center gap-2 rounded-md px-1 py-1 text-left",
203
- "outline-none transition-[background,color,transform] duration-(--duration-fast) ease-out hover:bg-muted active:scale-(--scale-press)",
204
+ className: l(
205
+ "group/ai-chart-trigger flex w-full items-center gap-2.5 px-2.5 py-2 text-left",
206
+ "outline-none transition-[background,color,transform] duration-(--duration-fast) ease-out hover:bg-fill active:scale-(--scale-press)",
204
207
  "focus-visible:ring-3 focus-visible:ring-inset focus-visible:ring-ring motion-reduce:transition-none"
205
208
  ),
206
209
  children: [
207
210
  /* @__PURE__ */ e(
208
- O,
211
+ "span",
209
212
  {
210
- "data-slot": "ai-chart-icon",
211
- className: "size-4 shrink-0",
212
- "aria-hidden": !0
213
+ "aria-hidden": !0,
214
+ className: "grid size-8 shrink-0 place-items-center rounded-md bg-surface",
215
+ children: /* @__PURE__ */ e(O, { "data-slot": "ai-chart-icon", className: "size-4" })
213
216
  }
214
217
  ),
215
- /* @__PURE__ */ e("span", { className: "min-w-0 truncate text-xs font-medium text-secondary", children: n }),
218
+ /* @__PURE__ */ e("span", { className: "min-w-0 truncate text-xs font-normal text-foreground", children: i }),
216
219
  o != null && /* @__PURE__ */ e(
217
220
  Q,
218
221
  {
@@ -243,7 +246,7 @@ const ee = x.forwardRef(
243
246
  /* @__PURE__ */ a(
244
247
  E,
245
248
  {
246
- className: d(
249
+ className: l(
247
250
  "overflow-hidden px-2.5 pb-2.5 outline-none",
248
251
  "data-[state=closed]:pointer-events-none data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 data-[state=closed]:animate-out data-[state=open]:animate-in motion-reduce:animate-none"
249
252
  ),
@@ -252,12 +255,12 @@ const ee = x.forwardRef(
252
255
  "div",
253
256
  {
254
257
  "data-slot": "ai-chart-body",
255
- "aria-busy": z ?? (B || void 0),
258
+ "aria-busy": j ?? (B || void 0),
256
259
  children: /* @__PURE__ */ e(
257
260
  Z,
258
261
  {
259
- status: i,
260
- progress: l,
262
+ status: n,
263
+ progress: d,
261
264
  errorContent: _,
262
265
  onRetry: w,
263
266
  children: k
@@ -279,12 +282,12 @@ const ee = x.forwardRef(
279
282
  onClick: () => m(s),
280
283
  children: [
281
284
  "from ",
282
- /* @__PURE__ */ e("span", { className: "font-medium tabular-nums", children: s })
285
+ /* @__PURE__ */ e("span", { className: "font-normal tabular-nums", children: s })
283
286
  ]
284
287
  }
285
288
  ) : /* @__PURE__ */ a("p", { children: [
286
289
  "from ",
287
- /* @__PURE__ */ e("span", { className: "font-medium tabular-nums", children: s })
290
+ /* @__PURE__ */ e("span", { className: "font-normal tabular-nums", children: s })
288
291
  ] })
289
292
  }
290
293
  )
@@ -1,5 +1,6 @@
1
1
  export * from './agent-trace';
2
2
  export * from './chain-of-thought';
3
+ export * from './chain-of-thought-icon';
3
4
  export * from './chart';
4
5
  export * from './inline-citation';
5
6
  export * from './message';
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { jsx as i, jsxs as k } from "react/jsx-runtime";
2
+ import { jsx as r, jsxs as k } from "react/jsx-runtime";
3
3
  import * as o from "react";
4
4
  import { createPortal as M } from "react-dom";
5
5
  import { MotionConfig as R, AnimatePresence as E, motion as L } from "motion/react";
@@ -7,7 +7,7 @@ import { cn as c } from "../../lib/cn.js";
7
7
  import { floatVariants as T } from "../../lib/motion.js";
8
8
  import { ArrowRight as P, ArrowLeft as z } from "../../lib/icons.js";
9
9
  import { Badge as S } from "../badge.js";
10
- const F = ({ className: e, ...t }) => /* @__PURE__ */ i(
10
+ const F = ({ className: e, ...t }) => /* @__PURE__ */ r(
11
11
  "span",
12
12
  {
13
13
  className: c("group/citation inline items-center gap-1", e),
@@ -16,7 +16,7 @@ const F = ({ className: e, ...t }) => /* @__PURE__ */ i(
16
16
  ), H = ({
17
17
  className: e,
18
18
  ...t
19
- }) => /* @__PURE__ */ i(
19
+ }) => /* @__PURE__ */ r(
20
20
  "span",
21
21
  {
22
22
  className: c(
@@ -37,7 +37,7 @@ const Q = ({
37
37
  open: t,
38
38
  defaultOpen: s = !1,
39
39
  onOpenChange: n,
40
- openDelay: r = 0,
40
+ openDelay: i = 0,
41
41
  closeDelay: a = 0
42
42
  }) => {
43
43
  const d = t !== void 0, [C, l] = o.useState(s), h = d ? t : C, u = o.useRef(null), f = o.useRef(null), m = o.useRef({}), x = o.useCallback(
@@ -46,8 +46,8 @@ const Q = ({
46
46
  },
47
47
  [d, n]
48
48
  ), p = o.useCallback(() => {
49
- window.clearTimeout(m.current.close), m.current.open = window.setTimeout(() => x(!0), r);
50
- }, [r, x]), w = o.useCallback(() => {
49
+ window.clearTimeout(m.current.close), m.current.open = window.setTimeout(() => x(!0), i);
50
+ }, [i, x]), w = o.useCallback(() => {
51
51
  window.clearTimeout(m.current.open), m.current.close = window.setTimeout(
52
52
  () => x(!1),
53
53
  a + 120
@@ -58,7 +58,7 @@ const Q = ({
58
58
  window.clearTimeout(m.current.open), window.clearTimeout(m.current.close);
59
59
  },
60
60
  []
61
- ), /* @__PURE__ */ i(
61
+ ), /* @__PURE__ */ r(
62
62
  g.Provider,
63
63
  {
64
64
  value: { open: h, triggerRef: u, contentRef: f, handleOpen: p, handleClose: w },
@@ -70,7 +70,7 @@ const Q = ({
70
70
  className: t,
71
71
  ...s
72
72
  }) => {
73
- const { open: n, triggerRef: r, handleOpen: a, handleClose: d } = N(
73
+ const { open: n, triggerRef: i, handleOpen: a, handleClose: d } = N(
74
74
  "InlineCitationCardTrigger"
75
75
  ), C = o.useMemo(() => {
76
76
  if (!e[0]) return "unknown";
@@ -81,10 +81,10 @@ const Q = ({
81
81
  }
82
82
  return e.length > 1 ? `${l} +${e.length - 1}` : l;
83
83
  }, [e]);
84
- return /* @__PURE__ */ i(
84
+ return /* @__PURE__ */ r(
85
85
  S,
86
86
  {
87
- ref: r,
87
+ ref: i,
88
88
  variant: "soft",
89
89
  className: c("ml-1 cursor-default align-middle", t),
90
90
  role: "button",
@@ -104,10 +104,10 @@ const Q = ({
104
104
  children: t,
105
105
  ...s
106
106
  }) => {
107
- const { open: n, triggerRef: r, contentRef: a, handleOpen: d, handleClose: C } = N("InlineCitationCardBody"), [l, h] = o.useState(null);
107
+ const { open: n, triggerRef: i, contentRef: a, handleOpen: d, handleClose: C } = N("InlineCitationCardBody"), [l, h] = o.useState(null);
108
108
  return o.useLayoutEffect(() => {
109
109
  if (!n) return;
110
- const u = r.current;
110
+ const u = i.current;
111
111
  if (!u) return;
112
112
  const f = () => {
113
113
  var b;
@@ -117,8 +117,8 @@ const Q = ({
117
117
  return f(), window.addEventListener("resize", f), window.addEventListener("scroll", f, !0), () => {
118
118
  window.removeEventListener("resize", f), window.removeEventListener("scroll", f, !0);
119
119
  };
120
- }, [n, r]), M(
121
- /* @__PURE__ */ i(R, { reducedMotion: "user", children: /* @__PURE__ */ i(E, { children: n && /* @__PURE__ */ i(
120
+ }, [n, i]), M(
121
+ /* @__PURE__ */ r(R, { reducedMotion: "user", children: /* @__PURE__ */ r(E, { children: n && /* @__PURE__ */ r(
122
122
  L.div,
123
123
  {
124
124
  ref: a,
@@ -160,20 +160,20 @@ const G = ({
160
160
  children: t,
161
161
  ...s
162
162
  }) => {
163
- const [n, r] = o.useState(0), [a, d] = o.useState(0), C = o.useCallback(
164
- () => r((u) => Math.max(0, u - 1)),
163
+ const [n, i] = o.useState(0), [a, d] = o.useState(0), C = o.useCallback(
164
+ () => i((u) => Math.max(0, u - 1)),
165
165
  []
166
166
  ), l = o.useCallback(
167
- () => r((u) => Math.min(Math.max(0, a - 1), u + 1)),
167
+ () => i((u) => Math.min(Math.max(0, a - 1), u + 1)),
168
168
  [a]
169
169
  ), h = o.useCallback((u) => {
170
- d(u), r((f) => Math.min(f, Math.max(0, u - 1)));
170
+ d(u), i((f) => Math.min(f, Math.max(0, u - 1)));
171
171
  }, []);
172
- return /* @__PURE__ */ i(
172
+ return /* @__PURE__ */ r(
173
173
  I.Provider,
174
174
  {
175
175
  value: { index: n, count: a, setCount: h, scrollPrev: C, scrollNext: l },
176
- children: /* @__PURE__ */ i("div", { className: c("w-full", e), ...s, children: t })
176
+ children: /* @__PURE__ */ r("div", { className: c("w-full", e), ...s, children: t })
177
177
  }
178
178
  );
179
179
  }, J = ({
@@ -181,10 +181,10 @@ const G = ({
181
181
  children: t,
182
182
  ...s
183
183
  }) => {
184
- const { index: n, setCount: r } = v(), a = o.Children.count(t);
184
+ const { index: n, setCount: i } = v(), a = o.Children.count(t);
185
185
  return o.useEffect(() => {
186
- r(a);
187
- }, [a, r]), /* @__PURE__ */ i("div", { className: c("overflow-hidden", e), ...s, children: /* @__PURE__ */ i(
186
+ i(a);
187
+ }, [a, i]), /* @__PURE__ */ r("div", { className: c("overflow-hidden", e), ...s, children: /* @__PURE__ */ r(
188
188
  "div",
189
189
  {
190
190
  className: "flex transition-transform duration-(--duration-normal) ease-out motion-reduce:transition-none",
@@ -195,7 +195,7 @@ const G = ({
195
195
  }, K = ({
196
196
  className: e,
197
197
  ...t
198
- }) => /* @__PURE__ */ i(
198
+ }) => /* @__PURE__ */ r(
199
199
  "div",
200
200
  {
201
201
  className: c("w-full shrink-0 space-y-2 p-4", e),
@@ -204,7 +204,7 @@ const G = ({
204
204
  ), O = ({
205
205
  className: e,
206
206
  ...t
207
- }) => /* @__PURE__ */ i(
207
+ }) => /* @__PURE__ */ r(
208
208
  "div",
209
209
  {
210
210
  className: c(
@@ -218,8 +218,8 @@ const G = ({
218
218
  className: t,
219
219
  ...s
220
220
  }) => {
221
- const { index: n, count: r } = v();
222
- return /* @__PURE__ */ i(
221
+ const { index: n, count: i } = v();
222
+ return /* @__PURE__ */ r(
223
223
  "div",
224
224
  {
225
225
  className: c(
@@ -227,7 +227,7 @@ const G = ({
227
227
  t
228
228
  ),
229
229
  ...s,
230
- children: e ?? `${r === 0 ? 0 : n + 1}/${r}`
230
+ children: e ?? `${i === 0 ? 0 : n + 1}/${i}`
231
231
  }
232
232
  );
233
233
  }, y = c(
@@ -240,7 +240,7 @@ const G = ({
240
240
  ...t
241
241
  }) => {
242
242
  const { scrollPrev: s, index: n } = v();
243
- return /* @__PURE__ */ i(
243
+ return /* @__PURE__ */ r(
244
244
  "button",
245
245
  {
246
246
  type: "button",
@@ -249,24 +249,24 @@ const G = ({
249
249
  onClick: s,
250
250
  className: c(y, e),
251
251
  ...t,
252
- children: /* @__PURE__ */ i(z, { className: "size-4" })
252
+ children: /* @__PURE__ */ r(z, { className: "size-4" })
253
253
  }
254
254
  );
255
255
  }, _ = ({
256
256
  className: e,
257
257
  ...t
258
258
  }) => {
259
- const { scrollNext: s, index: n, count: r } = v();
260
- return /* @__PURE__ */ i(
259
+ const { scrollNext: s, index: n, count: i } = v();
260
+ return /* @__PURE__ */ r(
261
261
  "button",
262
262
  {
263
263
  type: "button",
264
264
  "aria-label": "Next source",
265
- disabled: n >= r - 1,
265
+ disabled: n >= i - 1,
266
266
  onClick: s,
267
267
  className: c(y, e),
268
268
  ...t,
269
- children: /* @__PURE__ */ i(P, { className: "size-4" })
269
+ children: /* @__PURE__ */ r(P, { className: "size-4" })
270
270
  }
271
271
  );
272
272
  }, D = ({
@@ -274,18 +274,18 @@ const G = ({
274
274
  url: t,
275
275
  description: s,
276
276
  className: n,
277
- children: r,
277
+ children: i,
278
278
  ...a
279
279
  }) => /* @__PURE__ */ k("div", { className: c("space-y-1", n), ...a, children: [
280
- e && /* @__PURE__ */ i("p", { className: "truncate font-medium text-base leading-tight text-primary", children: e }),
281
- t && /* @__PURE__ */ i("p", { className: "truncate break-all text-xs text-tertiary", children: t }),
282
- s && /* @__PURE__ */ i("p", { className: "line-clamp-3 text-base leading-relaxed text-secondary", children: s }),
283
- r
280
+ e && /* @__PURE__ */ r("p", { className: "truncate font-normal text-base leading-tight text-primary", children: e }),
281
+ t && /* @__PURE__ */ r("p", { className: "truncate break-all text-xs text-tertiary", children: t }),
282
+ s && /* @__PURE__ */ r("p", { className: "line-clamp-3 text-base leading-relaxed text-secondary", children: s }),
283
+ i
284
284
  ] }), ee = ({
285
285
  children: e,
286
286
  className: t,
287
287
  ...s
288
- }) => /* @__PURE__ */ i(
288
+ }) => /* @__PURE__ */ r(
289
289
  "blockquote",
290
290
  {
291
291
  className: c(
@@ -100,18 +100,18 @@ const S = i(
100
100
  "size-full text-base leading-relaxed text-foreground",
101
101
  "[&>*:first-child]:mt-0 [&>*:last-child]:mb-0",
102
102
  "[&_p]:my-2",
103
- "[&_h1]:mt-4 [&_h1]:mb-2 [&_h1]:text-xl [&_h1]:font-bold [&_h1]:tracking-tight",
104
- "[&_h2]:mt-4 [&_h2]:mb-2 [&_h2]:text-lg [&_h2]:font-bold [&_h2]:tracking-tight",
105
- "[&_h3]:mt-3 [&_h3]:mb-1 [&_h3]:text-base [&_h3]:font-bold",
103
+ "[&_h1]:mt-4 [&_h1]:mb-2 [&_h1]:text-xl [&_h1]:font-semibold [&_h1]:tracking-tight",
104
+ "[&_h2]:mt-4 [&_h2]:mb-2 [&_h2]:text-lg [&_h2]:font-semibold [&_h2]:tracking-tight",
105
+ "[&_h3]:mt-3 [&_h3]:mb-1 [&_h3]:text-base [&_h3]:font-semibold",
106
106
  "[&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-5 [&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-5 [&_li]:my-1",
107
- "[&_a]:font-medium [&_a]:underline [&_a]:underline-offset-2",
107
+ "[&_a]:font-normal [&_a]:underline [&_a]:underline-offset-2",
108
108
  "[&_code]:rounded-xs [&_code]:bg-muted [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-xs [&_code]:tabular-nums",
109
109
  "[&_pre]:my-3 [&_pre]:overflow-x-auto [&_pre]:rounded-lg [&_pre]:bg-surface [&_pre]:p-3 [&_pre]:text-xs [&_pre_code]:bg-transparent [&_pre_code]:p-0",
110
110
  // Markdown tables only. Scoped off `[data-slot=table]` so a composed ADS
111
111
  // <Table> nested in a response keeps its own padding and per-column
112
112
  // alignment — unscoped, these descendant rules silently beat it.
113
113
  "[&_table:not([data-slot=table])]:my-3 [&_table:not([data-slot=table])]:w-full [&_table:not([data-slot=table])]:text-xs",
114
- "[&_table:not([data-slot=table])_th]:px-2 [&_table:not([data-slot=table])_th]:py-1.5 [&_table:not([data-slot=table])_th]:text-left [&_table:not([data-slot=table])_th]:font-bold",
114
+ "[&_table:not([data-slot=table])_th]:px-2 [&_table:not([data-slot=table])_th]:py-1.5 [&_table:not([data-slot=table])_th]:text-left [&_table:not([data-slot=table])_th]:font-semibold",
115
115
  "[&_table:not([data-slot=table])_td]:px-2 [&_table:not([data-slot=table])_td]:py-1.5",
116
116
  "[&_table:not([data-slot=table])_thead]:text-secondary"
117
117
  ), W = o.memo(
@@ -135,7 +135,7 @@ const y = ({ className: e, ...t }) => /* @__PURE__ */ s(
135
135
  {
136
136
  type: "button",
137
137
  className: a(
138
- "group flex w-full items-center justify-between rounded-md bg-muted px-3 py-2 text-left font-medium text-base text-secondary transition-colors hover:bg-fill",
138
+ "group flex w-full items-center justify-between rounded-md bg-muted px-3 py-2 text-left font-normal text-base text-secondary transition-colors hover:bg-fill",
139
139
  t
140
140
  ),
141
141
  ...o,
@@ -20,6 +20,8 @@ export interface ResearchActivityProps extends Omit<React.HTMLAttributes<HTMLDiv
20
20
  stepIndex?: number;
21
21
  /** Total planned steps; the counter renders only when both are provided. */
22
22
  stepCount?: number;
23
+ /** Leading status/stage icon. Defaults to the compact thinking/completed squircle state. */
24
+ icon?: React.ReactNode;
23
25
  /** Replaces the generated completed summary. */
24
26
  summary?: React.ReactNode;
25
27
  /**