@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.
- package/components/accordion.js +15 -15
- package/components/agent-icon.d.ts +64 -0
- package/components/agent-icon.js +251 -0
- package/components/ai-elements/agent-trace.d.ts +8 -1
- package/components/ai-elements/agent-trace.js +164 -129
- package/components/ai-elements/chain-of-thought-icon.d.ts +42 -0
- package/components/ai-elements/chain-of-thought-icon.js +283 -0
- package/components/ai-elements/chain-of-thought.js +7 -7
- package/components/ai-elements/chart.js +38 -35
- package/components/ai-elements/index.d.ts +1 -0
- package/components/ai-elements/inline-citation.js +40 -40
- package/components/ai-elements/message.js +5 -5
- package/components/ai-elements/queue.js +1 -1
- package/components/ai-elements/research-activity.d.ts +2 -0
- package/components/ai-elements/research-activity.js +79 -81
- package/components/ai-elements/task-progress.js +2 -2
- package/components/ai-elements/tool.d.ts +4 -2
- package/components/ai-elements/tool.js +74 -54
- package/components/ai-elements/transcript.js +1 -1
- package/components/alert.js +1 -1
- package/components/answer.d.ts +2643 -311
- package/components/answer.js +1836 -425
- package/components/assistant-ui/answer-tool-ui.js +23 -28
- package/components/assistant-ui/chain-of-thought.d.ts +7 -2
- package/components/assistant-ui/composer-harness.js +20 -16
- package/components/assistant-ui/reasoning.js +35 -31
- package/components/assistant-ui/tool-fallback.js +125 -122
- package/components/assistant-ui/tool-group.d.ts +3 -1
- package/components/assistant-ui/tool-group.js +48 -43
- package/components/audio-waveform.js +14 -14
- package/components/autocomplete.js +52 -48
- package/components/avatar.js +58 -44
- package/components/badge.js +3 -3
- package/components/brand-texture.js +1 -1
- package/components/breadcrumbs.d.ts +27 -1
- package/components/breadcrumbs.js +94 -42
- package/components/button.js +15 -15
- package/components/carousel.js +10 -10
- package/components/chart.d.ts +14 -0
- package/components/chart.js +747 -614
- package/components/chip.js +3 -3
- package/components/code-block.d.ts +39 -17
- package/components/code-block.js +153 -104
- package/components/command-palette.js +27 -25
- package/components/connector-card.js +2 -2
- package/components/dropdown.js +65 -61
- package/components/empty-state.js +15 -15
- package/components/field.js +23 -23
- package/components/index.d.ts +5 -0
- package/components/index.js +523 -470
- package/components/infinite-canvas.js +60 -60
- package/components/kbd.js +6 -6
- package/components/link.js +6 -6
- package/components/modal.js +22 -20
- package/components/page-header.js +1 -1
- package/components/pagination.js +22 -22
- package/components/pixel-blast-svg.js +1 -1
- package/components/pixel-icon.d.ts +31 -0
- package/components/pixel-icon.js +733 -0
- package/components/popover.js +46 -42
- package/components/ripple.d.ts +29 -0
- package/components/ripple.js +17 -0
- package/components/segmented.js +24 -23
- package/components/select.js +71 -67
- package/components/selection-action-bar.js +22 -22
- package/components/sidebar.d.ts +11 -3
- package/components/sidebar.js +161 -148
- package/components/stepper.d.ts +2 -0
- package/components/stepper.js +80 -43
- package/components/table.d.ts +7 -0
- package/components/table.js +223 -155
- package/components/tabs.d.ts +3 -1
- package/components/tabs.js +165 -144
- package/components/textarea.js +10 -8
- package/components/toast.js +48 -46
- package/components/tooltip.js +61 -59
- package/components/tree.js +44 -41
- package/components/typography.d.ts +1 -1
- package/components/typography.js +25 -25
- package/components/viz-charts.d.ts +62 -0
- package/components/viz-charts.js +408 -0
- package/fonts/aribau-grotesk-500.otf +0 -0
- package/fonts/aribau-grotesk-600.woff2 +0 -0
- package/fonts.css +6 -4
- package/lib/icons.d.ts +411 -402
- package/lib/icons.js +109 -107
- package/lib/viz-format.d.ts +25 -0
- package/lib/viz-format.js +40 -0
- package/llms.txt +111 -8
- package/manifest.json +1096 -58
- package/package.json +5 -5
- package/styles.css +226 -96
- package/theme.css +220 -92
- package/fonts/aribau-grotesk-400.otf +0 -0
- 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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
|
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
|
|
11
|
+
import { cn as l } from "../../lib/cn.js";
|
|
12
12
|
const H = M(
|
|
13
|
-
|
|
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,
|
|
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
|
|
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(
|
|
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:
|
|
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:
|
|
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(
|
|
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 =
|
|
146
|
+
const ee = g.forwardRef(
|
|
144
147
|
({
|
|
145
148
|
className: t,
|
|
146
149
|
status: r,
|
|
147
|
-
title:
|
|
150
|
+
title: i,
|
|
148
151
|
tag: o,
|
|
149
152
|
source: s,
|
|
150
|
-
progress:
|
|
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":
|
|
163
|
-
"aria-describedby":
|
|
164
|
-
"aria-busy":
|
|
165
|
+
"aria-label": z,
|
|
166
|
+
"aria-describedby": R,
|
|
167
|
+
"aria-busy": j,
|
|
165
168
|
...I
|
|
166
169
|
}, $) => {
|
|
167
|
-
const
|
|
168
|
-
|
|
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":
|
|
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":
|
|
183
|
-
className:
|
|
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:
|
|
202
|
-
"group/ai-chart-trigger flex
|
|
203
|
-
"outline-none transition-[background,color,transform] duration-(--duration-fast) ease-out hover:bg-
|
|
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
|
-
|
|
211
|
+
"span",
|
|
209
212
|
{
|
|
210
|
-
"
|
|
211
|
-
className: "size-
|
|
212
|
-
"
|
|
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-
|
|
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:
|
|
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":
|
|
258
|
+
"aria-busy": j ?? (B || void 0),
|
|
256
259
|
children: /* @__PURE__ */ e(
|
|
257
260
|
Z,
|
|
258
261
|
{
|
|
259
|
-
status:
|
|
260
|
-
progress:
|
|
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-
|
|
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-
|
|
290
|
+
/* @__PURE__ */ e("span", { className: "font-normal tabular-nums", children: s })
|
|
288
291
|
] })
|
|
289
292
|
}
|
|
290
293
|
)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as
|
|
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__ */
|
|
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__ */
|
|
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:
|
|
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),
|
|
50
|
-
}, [
|
|
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__ */
|
|
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:
|
|
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__ */
|
|
84
|
+
return /* @__PURE__ */ r(
|
|
85
85
|
S,
|
|
86
86
|
{
|
|
87
|
-
ref:
|
|
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:
|
|
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 =
|
|
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,
|
|
121
|
-
/* @__PURE__ */
|
|
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,
|
|
164
|
-
() =>
|
|
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
|
-
() =>
|
|
167
|
+
() => i((u) => Math.min(Math.max(0, a - 1), u + 1)),
|
|
168
168
|
[a]
|
|
169
169
|
), h = o.useCallback((u) => {
|
|
170
|
-
d(u),
|
|
170
|
+
d(u), i((f) => Math.min(f, Math.max(0, u - 1)));
|
|
171
171
|
}, []);
|
|
172
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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:
|
|
184
|
+
const { index: n, setCount: i } = v(), a = o.Children.count(t);
|
|
185
185
|
return o.useEffect(() => {
|
|
186
|
-
|
|
187
|
-
}, [a,
|
|
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__ */
|
|
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__ */
|
|
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:
|
|
222
|
-
return /* @__PURE__ */
|
|
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 ?? `${
|
|
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__ */
|
|
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__ */
|
|
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:
|
|
260
|
-
return /* @__PURE__ */
|
|
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 >=
|
|
265
|
+
disabled: n >= i - 1,
|
|
266
266
|
onClick: s,
|
|
267
267
|
className: c(y, e),
|
|
268
268
|
...t,
|
|
269
|
-
children: /* @__PURE__ */
|
|
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:
|
|
277
|
+
children: i,
|
|
278
278
|
...a
|
|
279
279
|
}) => /* @__PURE__ */ k("div", { className: c("space-y-1", n), ...a, children: [
|
|
280
|
-
e && /* @__PURE__ */
|
|
281
|
-
t && /* @__PURE__ */
|
|
282
|
-
s && /* @__PURE__ */
|
|
283
|
-
|
|
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__ */
|
|
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-
|
|
104
|
-
"[&_h2]:mt-4 [&_h2]:mb-2 [&_h2]:text-lg [&_h2]:font-
|
|
105
|
-
"[&_h3]:mt-3 [&_h3]:mb-1 [&_h3]:text-base [&_h3]:font-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
/**
|