@cellarnode/ui 0.201.1 → 0.202.0
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/dist/agent/composer.d.ts +6 -1
- package/dist/agent/composer.d.ts.map +1 -1
- package/dist/agent/composer.js +43 -9
- package/dist/agent/composer.js.map +1 -1
- package/dist/agent/conversation.d.ts +20 -2
- package/dist/agent/conversation.d.ts.map +1 -1
- package/dist/agent/conversation.js +37 -5
- package/dist/agent/conversation.js.map +1 -1
- package/dist/agent/copy.d.ts +7 -0
- package/dist/agent/copy.d.ts.map +1 -1
- package/dist/agent/copy.js +9 -0
- package/dist/agent/copy.js.map +1 -1
- package/dist/agent/fixtures.d.ts +34 -0
- package/dist/agent/fixtures.d.ts.map +1 -1
- package/dist/agent/fixtures.js +77 -0
- package/dist/agent/fixtures.js.map +1 -1
- package/dist/agent/index.d.ts +18 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +18 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/markdown.d.ts +64 -0
- package/dist/agent/markdown.d.ts.map +1 -0
- package/dist/agent/markdown.js +220 -0
- package/dist/agent/markdown.js.map +1 -0
- package/dist/agent/masked-value.d.ts +1 -0
- package/dist/agent/masked-value.d.ts.map +1 -1
- package/dist/agent/masked-value.js +4 -1
- package/dist/agent/masked-value.js.map +1 -1
- package/dist/agent/message.d.ts +26 -6
- package/dist/agent/message.d.ts.map +1 -1
- package/dist/agent/message.js +47 -11
- package/dist/agent/message.js.map +1 -1
- package/dist/agent/panel-frame.js +1 -1
- package/dist/agent/panel-frame.js.map +1 -1
- package/dist/agent/role-cards/card-kit.d.ts +111 -0
- package/dist/agent/role-cards/card-kit.d.ts.map +1 -0
- package/dist/agent/role-cards/card-kit.js +68 -0
- package/dist/agent/role-cards/card-kit.js.map +1 -0
- package/dist/agent/role-cards/data-table-card.d.ts +80 -0
- package/dist/agent/role-cards/data-table-card.d.ts.map +1 -0
- package/dist/agent/role-cards/data-table-card.js +214 -0
- package/dist/agent/role-cards/data-table-card.js.map +1 -0
- package/dist/agent/role-cards/fixtures.d.ts +124 -0
- package/dist/agent/role-cards/fixtures.d.ts.map +1 -0
- package/dist/agent/role-cards/fixtures.js +401 -0
- package/dist/agent/role-cards/fixtures.js.map +1 -0
- package/dist/agent/role-cards/host-contract.d.ts +214 -0
- package/dist/agent/role-cards/host-contract.d.ts.map +1 -0
- package/dist/agent/role-cards/host-contract.js +348 -0
- package/dist/agent/role-cards/host-contract.js.map +1 -0
- package/dist/agent/role-cards/inspector-drawer.d.ts +42 -0
- package/dist/agent/role-cards/inspector-drawer.d.ts.map +1 -0
- package/dist/agent/role-cards/inspector-drawer.js +68 -0
- package/dist/agent/role-cards/inspector-drawer.js.map +1 -0
- package/dist/agent/role-cards/inspector-fixtures.d.ts +84 -0
- package/dist/agent/role-cards/inspector-fixtures.d.ts.map +1 -0
- package/dist/agent/role-cards/inspector-fixtures.js +162 -0
- package/dist/agent/role-cards/inspector-fixtures.js.map +1 -0
- package/dist/agent/role-cards/inspector-record.d.ts +109 -0
- package/dist/agent/role-cards/inspector-record.d.ts.map +1 -0
- package/dist/agent/role-cards/inspector-record.js +346 -0
- package/dist/agent/role-cards/inspector-record.js.map +1 -0
- package/dist/agent/role-cards/inspector-view.d.ts +137 -0
- package/dist/agent/role-cards/inspector-view.d.ts.map +1 -0
- package/dist/agent/role-cards/inspector-view.js +261 -0
- package/dist/agent/role-cards/inspector-view.js.map +1 -0
- package/dist/agent/role-cards/match-card.d.ts +21 -0
- package/dist/agent/role-cards/match-card.d.ts.map +1 -0
- package/dist/agent/role-cards/match-card.js +30 -0
- package/dist/agent/role-cards/match-card.js.map +1 -0
- package/dist/agent/role-cards/offer-card.d.ts +27 -0
- package/dist/agent/role-cards/offer-card.d.ts.map +1 -0
- package/dist/agent/role-cards/offer-card.js +68 -0
- package/dist/agent/role-cards/offer-card.js.map +1 -0
- package/dist/agent/role-cards/opportunity-card.d.ts +26 -0
- package/dist/agent/role-cards/opportunity-card.d.ts.map +1 -0
- package/dist/agent/role-cards/opportunity-card.js +50 -0
- package/dist/agent/role-cards/opportunity-card.js.map +1 -0
- package/dist/agent/role-cards/product-card.d.ts +32 -0
- package/dist/agent/role-cards/product-card.d.ts.map +1 -0
- package/dist/agent/role-cards/product-card.js +50 -0
- package/dist/agent/role-cards/product-card.js.map +1 -0
- package/dist/agent/role-cards/proposal-diff.d.ts +38 -0
- package/dist/agent/role-cards/proposal-diff.d.ts.map +1 -0
- package/dist/agent/role-cards/proposal-diff.js +74 -0
- package/dist/agent/role-cards/proposal-diff.js.map +1 -0
- package/dist/agent/role-cards/registry.d.ts +43 -0
- package/dist/agent/role-cards/registry.d.ts.map +1 -0
- package/dist/agent/role-cards/registry.js +46 -0
- package/dist/agent/role-cards/registry.js.map +1 -0
- package/dist/agent/role-cards/score-meter.d.ts +12 -0
- package/dist/agent/role-cards/score-meter.d.ts.map +1 -0
- package/dist/agent/role-cards/score-meter.js +17 -0
- package/dist/agent/role-cards/score-meter.js.map +1 -0
- package/dist/agent/role-cards/surface-links.d.ts +54 -0
- package/dist/agent/role-cards/surface-links.d.ts.map +1 -0
- package/dist/agent/role-cards/surface-links.js +149 -0
- package/dist/agent/role-cards/surface-links.js.map +1 -0
- package/dist/agent/role-cards/text-safety.d.ts +24 -0
- package/dist/agent/role-cards/text-safety.d.ts.map +1 -0
- package/dist/agent/role-cards/text-safety.js +61 -0
- package/dist/agent/role-cards/text-safety.js.map +1 -0
- package/dist/agent/schema.d.ts +7 -0
- package/dist/agent/schema.d.ts.map +1 -1
- package/dist/agent/schema.js +25 -2
- package/dist/agent/schema.js.map +1 -1
- package/dist/agent/states.d.ts +1 -0
- package/dist/agent/states.d.ts.map +1 -1
- package/dist/agent/states.js +1 -1
- package/dist/agent/states.js.map +1 -1
- package/dist/agent/thinking.d.ts +13 -4
- package/dist/agent/thinking.d.ts.map +1 -1
- package/dist/agent/thinking.js +15 -6
- package/dist/agent/thinking.js.map +1 -1
- package/dist/agent/thread-list.d.ts +33 -2
- package/dist/agent/thread-list.d.ts.map +1 -1
- package/dist/agent/thread-list.js +158 -8
- package/dist/agent/thread-list.js.map +1 -1
- package/dist/agent/tool-activity-model.d.ts +136 -0
- package/dist/agent/tool-activity-model.d.ts.map +1 -0
- package/dist/agent/tool-activity-model.js +288 -0
- package/dist/agent/tool-activity-model.js.map +1 -0
- package/dist/agent/tool-activity.d.ts +55 -0
- package/dist/agent/tool-activity.d.ts.map +1 -0
- package/dist/agent/tool-activity.js +159 -0
- package/dist/agent/tool-activity.js.map +1 -0
- package/dist/agent/tool-call-card.d.ts +9 -1
- package/dist/agent/tool-call-card.d.ts.map +1 -1
- package/dist/agent/tool-call-card.js +7 -1
- package/dist/agent/tool-call-card.js.map +1 -1
- package/dist/agent/ui.js +1 -1
- package/dist/agent/ui.js.map +1 -1
- package/dist/agent/use-motion.d.ts +15 -0
- package/dist/agent/use-motion.d.ts.map +1 -0
- package/dist/agent/use-motion.js +52 -0
- package/dist/agent/use-motion.js.map +1 -0
- package/dist/chat/use-stick-to-bottom.d.ts +5 -0
- package/dist/chat/use-stick-to-bottom.d.ts.map +1 -1
- package/dist/chat/use-stick-to-bottom.js +11 -1
- package/dist/chat/use-stick-to-bottom.js.map +1 -1
- package/dist/components/sheet.d.ts +3 -1
- package/dist/components/sheet.d.ts.map +1 -1
- package/dist/components/sheet.js +2 -2
- package/dist/components/sheet.js.map +1 -1
- package/dist/portfolio-import/import-job-panels.d.ts +6 -0
- package/dist/portfolio-import/import-job-panels.d.ts.map +1 -1
- package/dist/portfolio-import/import-job-panels.js +11 -4
- package/dist/portfolio-import/import-job-panels.js.map +1 -1
- package/dist/portfolio-import/job-error-copy.d.ts +62 -0
- package/dist/portfolio-import/job-error-copy.d.ts.map +1 -0
- package/dist/portfolio-import/job-error-copy.js +78 -0
- package/dist/portfolio-import/job-error-copy.js.map +1 -0
- package/dist/realtime/organisation-events/schemas.d.ts +2 -2
- package/package.json +4 -1
- package/src/theme/tokens.css +66 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useMemo, useState } from "react";
|
|
3
|
+
import { ArrowDown, Check, ChevronRight, CircleDashed, Lightbulb, LoaderCircle, RotateCw, TriangleAlert, } from "lucide-react";
|
|
4
|
+
import { cn } from "../lib/utils.js";
|
|
5
|
+
import { fmt, useCopy } from "./copy.js";
|
|
6
|
+
import { MaskedValue } from "./masked-value.js";
|
|
7
|
+
import { createToolNamer, formatToolResult, hasResult, resultOf, stepId, stepInFlight, } from "./tool-activity-model.js";
|
|
8
|
+
import { agentButton, focusRing, toneChip } from "./ui.js";
|
|
9
|
+
import { useChanged } from "./use-motion.js";
|
|
10
|
+
const DEFAULT_COPY = {
|
|
11
|
+
pending: "Queued",
|
|
12
|
+
running: "Running",
|
|
13
|
+
succeeded: "Done",
|
|
14
|
+
failed: "Failed",
|
|
15
|
+
retrying: "Retrying",
|
|
16
|
+
list: "Steps",
|
|
17
|
+
thought: "Thought",
|
|
18
|
+
thinking: "Thinking",
|
|
19
|
+
inProgress: "…",
|
|
20
|
+
shownBelow: "Shown below",
|
|
21
|
+
srStatusSeparator: ", ",
|
|
22
|
+
srCardSeparator: ": ",
|
|
23
|
+
arguments: "Arguments",
|
|
24
|
+
showResult: "Show result",
|
|
25
|
+
hideResult: "Hide result",
|
|
26
|
+
showAll: "Show all {count} lines",
|
|
27
|
+
showLess: "Show less",
|
|
28
|
+
retry: "Retry",
|
|
29
|
+
took: "Took {seconds}s",
|
|
30
|
+
steps: "{count} steps",
|
|
31
|
+
};
|
|
32
|
+
const STATUS = {
|
|
33
|
+
pending: { icon: CircleDashed, tone: "text-muted-foreground" },
|
|
34
|
+
running: { icon: LoaderCircle, spin: true, tone: "text-muted-foreground" },
|
|
35
|
+
succeeded: { icon: Check, tone: "text-muted-foreground" },
|
|
36
|
+
failed: { icon: TriangleAlert, tone: "text-[var(--tone-danger-fg)]" },
|
|
37
|
+
retrying: { icon: RotateCw, spin: true, tone: "text-muted-foreground" },
|
|
38
|
+
};
|
|
39
|
+
/** Past this many steps, a trail that was already finished when it appeared folds into one line. */
|
|
40
|
+
const FOLD_AFTER = 4;
|
|
41
|
+
const PREVIEW_LINES = 20;
|
|
42
|
+
/** Even "show all" stops here: a result of thousands of lines is not something to put in a chat bubble. */
|
|
43
|
+
const MAX_LINES = 400;
|
|
44
|
+
/**
|
|
45
|
+
* Small, quiet status mark. The mark that appears when a step finishes pops in on a WRAPPER, never on the icon itself: a
|
|
46
|
+
* spinning icon must keep its own animation, and two animations on one element would replace each other.
|
|
47
|
+
*/
|
|
48
|
+
function StatusIcon({ status, kind, changed, }) {
|
|
49
|
+
const s = STATUS[status];
|
|
50
|
+
const Icon = kind === "thought" && status === "succeeded" ? Lightbulb : s.icon;
|
|
51
|
+
return (_jsx("span", { className: cn("inline-flex shrink-0", changed && "agent-pop"), children: _jsx(Icon, { "aria-hidden": true, className: cn("size-3.5", s.tone, s.spin && "animate-spin motion-reduce:animate-none") }) }, status));
|
|
52
|
+
}
|
|
53
|
+
function ResultPreview({ call, collapsed, c, }) {
|
|
54
|
+
const raw = resultOf(call);
|
|
55
|
+
const view = useMemo(() => formatToolResult(raw), [raw]);
|
|
56
|
+
const [shown, setShown] = useState(!collapsed);
|
|
57
|
+
const [all, setAll] = useState(false);
|
|
58
|
+
const id = useId();
|
|
59
|
+
if (!view)
|
|
60
|
+
return null;
|
|
61
|
+
const lines = view.text.split("\n");
|
|
62
|
+
const revealed = Math.min(lines.length, MAX_LINES);
|
|
63
|
+
const clipped = !all && lines.length > PREVIEW_LINES;
|
|
64
|
+
const text = all
|
|
65
|
+
? lines.length > MAX_LINES
|
|
66
|
+
? `${lines.slice(0, MAX_LINES).join("\n")}\n…`
|
|
67
|
+
: view.text
|
|
68
|
+
: clipped
|
|
69
|
+
? `${lines.slice(0, PREVIEW_LINES).join("\n")}\n…`
|
|
70
|
+
: view.text;
|
|
71
|
+
return (_jsxs("div", { className: "flex flex-col items-start gap-1.5", children: [collapsed && (_jsxs("button", { type: "button", "aria-expanded": shown, "aria-controls": id, onClick: () => setShown((v) => !v), className: cn("inline-flex min-h-6 items-center gap-1 rounded-md text-xs/4 text-muted-foreground hover:text-foreground pointer-coarse:min-h-11", focusRing), children: [_jsx(ChevronRight, { "aria-hidden": true, className: cn("size-3.5 transition-transform duration-[var(--duration-micro)] motion-reduce:transition-none", shown && "rotate-90") }), shown ? c.hideResult : c.showResult] })), shown && (_jsxs("div", { id: id, className: "flex w-full min-w-0 flex-col items-start gap-1.5", children: [_jsx("pre", { tabIndex: 0, "data-kind": view.kind, className: cn("max-h-80 w-full overflow-auto rounded-lg bg-muted p-2.5 font-mono text-xs/5 break-words whitespace-pre-wrap text-foreground", focusRing), children: text }), lines.length > PREVIEW_LINES && (_jsx("button", { type: "button", onClick: () => setAll((v) => !v), className: cn("inline-flex min-h-6 items-center rounded-md text-xs/4 text-muted-foreground underline underline-offset-4 hover:text-foreground pointer-coarse:min-h-11", focusRing), children: all ? c.showLess : fmt(c.showAll, { count: revealed }) }))] }))] }));
|
|
72
|
+
}
|
|
73
|
+
function ToolDetails({ step, c, locale, }) {
|
|
74
|
+
const { call } = step;
|
|
75
|
+
const args = Object.entries(call.args ?? {});
|
|
76
|
+
return (_jsxs("div", { className: "agent-fade-in flex flex-col gap-1.5 pt-1 pb-1", children: [call.durationMs !== undefined && (_jsx("p", { className: "text-muted-foreground tabular-nums", children: fmt(c.took, { seconds: seconds(call.durationMs, locale) }) })), args.length > 0 && (_jsx("dl", { "aria-label": c.arguments, className: "grid grid-cols-[minmax(0,7rem)_1fr] gap-x-3 gap-y-1 rounded-lg bg-muted p-2.5", children: args.map(([k, v]) => (_jsxs("div", { className: "contents", children: [_jsx("dt", { className: "truncate font-mono text-muted-foreground", children: k }), _jsx("dd", { className: "min-w-0 font-mono break-words text-foreground", children: _jsx(MaskedValue, { value: v }) })] }, k))) })), call.status === "succeeded" && (_jsx(ResultPreview, { call: call, collapsed: step.shownBelow, c: c }))] }));
|
|
77
|
+
}
|
|
78
|
+
const plainSeconds = (s) => s.toFixed(1);
|
|
79
|
+
/** One formatter per locale tag for the life of the page (building an `Intl.NumberFormat` is not cheap); a bad tag is remembered too. */
|
|
80
|
+
const SECONDS_FORMATTERS = new Map();
|
|
81
|
+
function secondsFormatter(locale) {
|
|
82
|
+
const known = SECONDS_FORMATTERS.get(locale);
|
|
83
|
+
if (known)
|
|
84
|
+
return known;
|
|
85
|
+
let made;
|
|
86
|
+
try {
|
|
87
|
+
const format = new Intl.NumberFormat(locale, {
|
|
88
|
+
minimumFractionDigits: 1,
|
|
89
|
+
maximumFractionDigits: 1,
|
|
90
|
+
useGrouping: false,
|
|
91
|
+
});
|
|
92
|
+
made = (n) => format.format(n);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
made = plainSeconds; // a malformed tag ("en_US") is the host's bug, not a reason to fail a render
|
|
96
|
+
}
|
|
97
|
+
SECONDS_FORMATTERS.set(locale, made);
|
|
98
|
+
return made;
|
|
99
|
+
}
|
|
100
|
+
/** Seconds with one decimal: "0.6" as JavaScript spells it, or in the host's locale ("0,6") when it gives one. */
|
|
101
|
+
const seconds = (ms, locale) => (locale === undefined ? plainSeconds : secondsFormatter(locale))(ms / 1000);
|
|
102
|
+
/** Cheap: looks at the keys and whether a result exists, never parses or prints it (this runs on every render). */
|
|
103
|
+
const hasToolDetails = (s) => Object.keys(s.call.args ?? {}).length > 0 ||
|
|
104
|
+
s.call.durationMs !== undefined ||
|
|
105
|
+
(s.call.status === "succeeded" && hasResult(s.call));
|
|
106
|
+
function StepRow({ step, namer, defaultOpen, onRetry, locale, c, }) {
|
|
107
|
+
const [open, setOpen] = useState(defaultOpen);
|
|
108
|
+
const panelId = useId();
|
|
109
|
+
const inFlight = stepInFlight(step);
|
|
110
|
+
const status = step.kind === "thought" ? (step.running ? "running" : "succeeded") : step.call.status;
|
|
111
|
+
const failedCall = step.kind === "tool" && step.call.status === "failed" ? step.call : undefined;
|
|
112
|
+
const tense = failedCall ? "failed" : inFlight ? "active" : "done";
|
|
113
|
+
const label = step.kind === "thought"
|
|
114
|
+
? step.running
|
|
115
|
+
? c.thinking
|
|
116
|
+
: c.thought
|
|
117
|
+
: namer.tool(step.call.name, tense);
|
|
118
|
+
const expandable = step.kind === "thought" ? step.summary.trim() !== "" : hasToolDetails(step);
|
|
119
|
+
const title = step.kind === "tool" ? step.call.name : undefined;
|
|
120
|
+
const swapped = useChanged(tense);
|
|
121
|
+
const statusChanged = useChanged(status);
|
|
122
|
+
const text = (_jsxs("span", { title: title, className: cn("min-w-0 truncate", swapped && "agent-swap-in", failedCall && "text-[var(--tone-danger-fg)]"), children: [label, inFlight ? c.inProgress : ""] }, tense));
|
|
123
|
+
const chip = step.kind === "tool" && step.shownBelow ? (_jsxs("span", { className: cn("inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 text-xs/4", toneChip.neutral), children: [_jsx(ArrowDown, { "aria-hidden": true, className: "size-3" }), _jsxs("span", { className: "sr-only", children: [c.shownBelow, c.srCardSeparator] }), step.cardTitle || c.shownBelow] })) : null;
|
|
124
|
+
const statusSr = (_jsxs("span", { className: "sr-only", children: [c.srStatusSeparator, c[status]] }));
|
|
125
|
+
const rowClass = "inline-flex min-h-6 max-w-full items-center gap-2 text-left text-xs/5 text-muted-foreground";
|
|
126
|
+
return (_jsxs("li", { "data-status": status, "data-kind": step.kind, className: "flex flex-col", children: [expandable ? (_jsxs("button", { type: "button", "aria-expanded": open, "aria-controls": panelId, onClick: () => setOpen((v) => !v), className: cn(rowClass, "-ml-1 self-start rounded-md px-1 transition-colors duration-[var(--duration-micro)] hover:text-foreground motion-reduce:transition-none pointer-coarse:min-h-11", focusRing), children: [_jsx(StatusIcon, { status: status, kind: step.kind, changed: statusChanged }), text, chip, statusSr, _jsx(ChevronRight, { "aria-hidden": true, className: cn("size-3.5 shrink-0 transition-transform duration-[var(--duration-micro)] motion-reduce:transition-none", open && "rotate-90") })] })) : (_jsxs("div", { className: cn(rowClass, "self-start"), children: [_jsx(StatusIcon, { status: status, kind: step.kind, changed: statusChanged }), text, chip, statusSr] })), failedCall && (_jsxs("div", { className: "mt-0.5 flex items-start justify-between gap-2 pl-5.5", children: [_jsx("p", { className: "min-w-0 text-xs/5 break-words text-[var(--tone-danger-fg)]", children: failedCall.error }), onRetry && (_jsx("button", { type: "button", className: agentButton.quiet, onClick: () => onRetry(failedCall.id), children: c.retry }))] })), expandable && open && (_jsx("div", { id: panelId, className: "pl-5.5 text-xs/5", children: step.kind === "thought" ? (_jsx("p", { className: "agent-fade-in py-1 whitespace-pre-wrap text-muted-foreground", children: step.summary })) : (_jsx(ToolDetails, { step: step, c: c, locale: locale })) }))] }));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* @internal The agent's work in a turn as a quiet vertical trail: one muted line per step ("Thought ›", "Checked MCP overview",
|
|
130
|
+
* "Searched organizations"), a small status icon each, in place of a card per tool call. The step in progress has a spinner
|
|
131
|
+
* (static under `prefers-reduced-motion`) and the in-progress suffix; the icon of a step that finishes pops in. A step opens to
|
|
132
|
+
* its arguments and a formatted, shortened result preview (the model-facing `untrusted`/`source` envelope is never shown). A step
|
|
133
|
+
* a domain card shows carries that card's name as a chip and keeps its preview behind a toggle. A failed step's error and Retry
|
|
134
|
+
* are always visible. A trail of more than four steps folds into one line ONLY if it was already finished when it appeared (a
|
|
135
|
+
* history trail): a trail that was live is never folded under the reader, and neither is one they have opened. A folded history
|
|
136
|
+
* trail that a live or failed step joins opens, and its fold line (it says the trail is done) is hidden until the trail settles.
|
|
137
|
+
* Approvals are never part of the trail.
|
|
138
|
+
*/
|
|
139
|
+
export function AgentToolActivity({ steps, toolLabels, formatToolLabel, cardLabels, toolWording, onRetry, defaultOpen = false, locale, copy, className, }) {
|
|
140
|
+
const c = useCopy(DEFAULT_COPY, copy);
|
|
141
|
+
const namer = useMemo(() => createToolNamer({ toolLabels, formatToolLabel, cardLabels, toolWording }), [toolLabels, formatToolLabel, cardLabels, toolWording]);
|
|
142
|
+
const working = steps.some(stepInFlight);
|
|
143
|
+
const failed = steps.some((s) => s.kind === "tool" && s.call.status === "failed");
|
|
144
|
+
// Decided once, when the trail appears: a trail that is already finished and long is history and folds; one that was
|
|
145
|
+
// live (or has a failure, whose error and Retry stay visible) never does.
|
|
146
|
+
const [foldable] = useState(() => !working && !failed && steps.length > FOLD_AFTER);
|
|
147
|
+
const [folded, setFolded] = useState(() => foldable && !defaultOpen);
|
|
148
|
+
// A history trail that was folded when it mounted opens for good when a live step joins it (a reload mid-stream), or one
|
|
149
|
+
// that has failed (it can join already failed, without ever having been in flight): its error and Retry must be visible.
|
|
150
|
+
if ((working || failed) && folded)
|
|
151
|
+
setFolded(false);
|
|
152
|
+
// The fold line says the trail is done ("N steps"). While a step runs or has failed the list is held open, so a line that
|
|
153
|
+
// claimed otherwise (and a toggle that cannot toggle) would be wrong: it is hidden until the trail settles.
|
|
154
|
+
const showFold = foldable && !working && !failed;
|
|
155
|
+
const listId = useId();
|
|
156
|
+
const list = (_jsx("ul", { id: listId, "aria-label": c.list, className: "flex flex-col gap-0.5", children: steps.map((s) => (_jsx(StepRow, { step: s, namer: namer, defaultOpen: defaultOpen, onRetry: onRetry, locale: locale, c: c }, stepId(s)))) }));
|
|
157
|
+
return (_jsxs("div", { "data-status": working ? "running" : failed ? "failed" : "succeeded", className: cn("flex flex-col gap-0.5", className), children: [showFold && (_jsxs("button", { type: "button", "aria-expanded": !folded, "aria-controls": listId, onClick: () => setFolded((v) => !v), className: cn("-ml-1 inline-flex min-h-6 items-center gap-2 self-start rounded-md px-1 text-xs/5 text-muted-foreground transition-colors duration-[var(--duration-micro)] hover:text-foreground motion-reduce:transition-none pointer-coarse:min-h-11", focusRing), children: [_jsx(Check, { "aria-hidden": true, className: "size-3.5" }), _jsx("span", { className: "tabular-nums", children: fmt(c.steps, { count: steps.length }) }), _jsx(ChevronRight, { "aria-hidden": true, className: cn("size-3.5 transition-transform duration-[var(--duration-micro)] motion-reduce:transition-none", !folded && "rotate-90") })] })), (!foldable || !folded) && (_jsx("div", { className: foldable ? "agent-fade-in pl-1" : undefined, children: list }))] }));
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=tool-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-activity.js","sourceRoot":"","sources":["../../src/agent/tool-activity.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AgentToolCall } from "./schema.js";
|
|
2
|
+
/** @deprecated Part of `AgentToolCallCard`, which `AgentToolActivity` replaces. */
|
|
2
3
|
export interface AgentToolCallCopy {
|
|
3
4
|
pending: string;
|
|
4
5
|
running: string;
|
|
@@ -11,6 +12,7 @@ export interface AgentToolCallCopy {
|
|
|
11
12
|
duration: string;
|
|
12
13
|
noArguments: string;
|
|
13
14
|
}
|
|
15
|
+
/** @deprecated Part of `AgentToolCallCard`, which `AgentToolActivity` replaces. */
|
|
14
16
|
export interface AgentToolCallCardProps {
|
|
15
17
|
call: AgentToolCall;
|
|
16
18
|
onRetry?: (id: string) => void;
|
|
@@ -19,6 +21,12 @@ export interface AgentToolCallCardProps {
|
|
|
19
21
|
copy?: Partial<AgentToolCallCopy>;
|
|
20
22
|
className?: string;
|
|
21
23
|
}
|
|
22
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* @internal Tool-call card: header, arguments disclosure (masked values marked), result slot, retry on failure.
|
|
26
|
+
*
|
|
27
|
+
* @deprecated `AgentMessage` no longer renders a card per tool call: a turn's calls are one `AgentToolActivity` row
|
|
28
|
+
* (humanised names, an unwrapped and shortened result, "shown below" when a card has the data). This stays exported for
|
|
29
|
+
* consumers that render a call on its own; it will go in a later release.
|
|
30
|
+
*/
|
|
23
31
|
export declare function AgentToolCallCard({ call, onRetry, children, copy, className, }: AgentToolCallCardProps): import("react/jsx-runtime").JSX.Element;
|
|
24
32
|
//# sourceMappingURL=tool-call-card.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-card.d.ts","sourceRoot":"","sources":["../../src/agent/tool-call-card.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAyBD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED
|
|
1
|
+
{"version":3,"file":"tool-call-card.d.ts","sourceRoot":"","sources":["../../src/agent/tool-call-card.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAyBD,mFAAmF;AACnF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,SAAS,GACV,EAAE,sBAAsB,2CA2FxB"}
|
|
@@ -24,7 +24,13 @@ const STATUS = {
|
|
|
24
24
|
failed: { tone: "danger", icon: AlertCircle, key: "failed" },
|
|
25
25
|
retrying: { tone: "warning", icon: RotateCw, key: "retrying", spin: true },
|
|
26
26
|
};
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* @internal Tool-call card: header, arguments disclosure (masked values marked), result slot, retry on failure.
|
|
29
|
+
*
|
|
30
|
+
* @deprecated `AgentMessage` no longer renders a card per tool call: a turn's calls are one `AgentToolActivity` row
|
|
31
|
+
* (humanised names, an unwrapped and shortened result, "shown below" when a card has the data). This stays exported for
|
|
32
|
+
* consumers that render a call on its own; it will go in a later release.
|
|
33
|
+
*/
|
|
28
34
|
export function AgentToolCallCard({ call, onRetry, children, copy, className, }) {
|
|
29
35
|
const c = useCopy(DEFAULT_COPY, copy);
|
|
30
36
|
const [open, setOpen] = useState(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-card.js","sourceRoot":"","sources":["../../src/agent/tool-call-card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,QAAQ,GAET,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAa,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-call-card.js","sourceRoot":"","sources":["../../src/agent/tool-call-card.tsx"],"names":[],"mappings":"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"}
|
package/dist/agent/ui.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cn } from "../lib/utils.js";
|
|
2
2
|
/** @internal Shared class recipes. Every colour routes through `--tone-*` or semantic tokens. */
|
|
3
3
|
export const focusRing = "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring";
|
|
4
|
-
const buttonBase = "inline-flex min-h-8 min-w-8 items-center justify-center gap-1.5 rounded-lg px-3 text-sm/5 font-medium transition-[background-color,color,box-shadow] duration-[var(--duration-micro)] ease-[var(--ease-emphasized)] disabled:cursor-not-allowed disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:opacity-50 " +
|
|
4
|
+
const buttonBase = "inline-flex min-h-8 min-w-8 pointer-coarse:min-h-11 pointer-coarse:min-w-11 items-center justify-center gap-1.5 rounded-lg px-3 text-sm/5 font-medium transition-[background-color,color,box-shadow] duration-[var(--duration-micro)] ease-[var(--ease-emphasized)] disabled:cursor-not-allowed disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:opacity-50 " +
|
|
5
5
|
focusRing;
|
|
6
6
|
export const agentButton = {
|
|
7
7
|
primary: cn(buttonBase, "bg-primary py-1.5 text-primary-foreground hover:bg-primary/90"),
|
package/dist/agent/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/agent/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,iGAAiG;AACjG,MAAM,CAAC,MAAM,SAAS,GACpB,mFAAmF,CAAC;AAEtF,MAAM,UAAU,GACd,
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/agent/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,iGAAiG;AACjG,MAAM,CAAC,MAAM,SAAS,GACpB,mFAAmF,CAAC;AAEtF,MAAM,UAAU,GACd,gXAAgX;IAChX,SAAS,CAAC;AAEZ,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE,EAAE,CAAC,UAAU,EAAE,+DAA+D,CAAC;IACxF,MAAM,EAAE,EAAE,CACR,UAAU,EACV,0FAA0F,CAC3F;IACD,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,mDAAmD,CAAC;IAC1E,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,mEAAmE,CAAC;CAClF,CAAC;AAIX,MAAM,CAAC,MAAM,QAAQ,GAAyB;IAC5C,KAAK,EAAE,yDAAyD;IAChE,OAAO,EAAE,6DAA6D;IACtE,OAAO,EAAE,6DAA6D;IACtE,MAAM,EAAE,2DAA2D;IACnE,IAAI,EAAE,uDAAuD;IAC7D,OAAO,EAAE,6DAA6D;CACvE,CAAC;AAEF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,KAAK,GAAG,uEAAuE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal Motion state for the agent chat. None of it decides whether motion is allowed: that is the CSS in
|
|
3
|
+
* `theme/tokens.css` (`prefers-reduced-motion: no-preference`). These only decide WHICH element animates, so that
|
|
4
|
+
* an element enters once and nothing animates twice.
|
|
5
|
+
*/
|
|
6
|
+
/** True once `value` has changed from what the component first rendered with (never for the first value). */
|
|
7
|
+
export declare function useChanged<T>(value: T): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The ids that arrived after the list was first shown, one or two at a time. A thread loading its history, or switching
|
|
10
|
+
* to another thread, adds many at once and animates none of them.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useFreshIds(ids: readonly string[]): ReadonlySet<string>;
|
|
13
|
+
/** Whole seconds since mount while `enabled`. Ticks once a second; the caller keeps it out of live regions. */
|
|
14
|
+
export declare function useElapsedSeconds(enabled: boolean): number;
|
|
15
|
+
//# sourceMappingURL=use-motion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-motion.d.ts","sourceRoot":"","sources":["../../src/agent/use-motion.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,6GAA6G;AAC7G,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAI/C;AAKD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAkBvE;AAED,+GAA+G;AAC/G,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAY1D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* @internal Motion state for the agent chat. None of it decides whether motion is allowed: that is the CSS in
|
|
4
|
+
* `theme/tokens.css` (`prefers-reduced-motion: no-preference`). These only decide WHICH element animates, so that
|
|
5
|
+
* an element enters once and nothing animates twice.
|
|
6
|
+
*/
|
|
7
|
+
/** True once `value` has changed from what the component first rendered with (never for the first value). */
|
|
8
|
+
export function useChanged(value) {
|
|
9
|
+
const [seen, setSeen] = useState({ value, changed: false });
|
|
10
|
+
if (!Object.is(seen.value, value))
|
|
11
|
+
setSeen({ value, changed: true });
|
|
12
|
+
return seen.changed;
|
|
13
|
+
}
|
|
14
|
+
/** More messages than this arriving in one render are history being loaded, not a conversation moving. */
|
|
15
|
+
const BULK_ARRIVAL = 2;
|
|
16
|
+
/**
|
|
17
|
+
* The ids that arrived after the list was first shown, one or two at a time. A thread loading its history, or switching
|
|
18
|
+
* to another thread, adds many at once and animates none of them.
|
|
19
|
+
*/
|
|
20
|
+
export function useFreshIds(ids) {
|
|
21
|
+
const key = ids.join("\u0000");
|
|
22
|
+
const [state, setState] = useState(() => ({
|
|
23
|
+
key,
|
|
24
|
+
seen: new Set(ids),
|
|
25
|
+
fresh: new Set(),
|
|
26
|
+
}));
|
|
27
|
+
if (state.key !== key) {
|
|
28
|
+
const added = ids.filter((id) => !state.seen.has(id));
|
|
29
|
+
const seen = new Set(state.seen);
|
|
30
|
+
for (const id of ids)
|
|
31
|
+
seen.add(id);
|
|
32
|
+
setState({
|
|
33
|
+
key,
|
|
34
|
+
seen,
|
|
35
|
+
fresh: added.length > BULK_ARRIVAL ? state.fresh : new Set([...state.fresh, ...added]),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return state.fresh;
|
|
39
|
+
}
|
|
40
|
+
/** Whole seconds since mount while `enabled`. Ticks once a second; the caller keeps it out of live regions. */
|
|
41
|
+
export function useElapsedSeconds(enabled) {
|
|
42
|
+
const [seconds, setSeconds] = useState(0);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (!enabled)
|
|
45
|
+
return;
|
|
46
|
+
const startedAt = Date.now();
|
|
47
|
+
const id = window.setInterval(() => setSeconds(Math.floor((Date.now() - startedAt) / 1000)), 1000);
|
|
48
|
+
return () => window.clearInterval(id);
|
|
49
|
+
}, [enabled]);
|
|
50
|
+
return seconds;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=use-motion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-motion.js","sourceRoot":"","sources":["../../src/agent/use-motion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C;;;;GAIG;AAEH,6GAA6G;AAC7G,MAAM,UAAU,UAAU,CAAI,KAAQ;IACpC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,0GAA0G;AAC1G,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAsB;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,GAAG;QACH,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC;QAClB,KAAK,EAAE,IAAI,GAAG,EAAU;KACzB,CAAC,CAAC,CAAC;IACJ,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,MAAM,EAAE,IAAI,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,QAAQ,CAAC;YACP,GAAG;YACH,IAAI;YACJ,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;SACvF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAC3B,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,EAC7D,IAAI,CACL,CAAC;QACF,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACd,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -34,11 +34,16 @@ export interface UseStickToBottomOptions {
|
|
|
34
34
|
* caused it (a fling that lands at the bottom follows again).
|
|
35
35
|
* - `release()` drops the intent for code that scrolls the list itself (for
|
|
36
36
|
* example jumping to a quoted message); user input does this automatically.
|
|
37
|
+
* - `away` is that intent, readable while rendering: true once the viewer scrolled
|
|
38
|
+
* away from the bottom (or `release()` ran), false again when they come back, jump
|
|
39
|
+
* down, or the list is reused for another thread. It also covers a streaming message
|
|
40
|
+
* that keeps growing, which `hasNewBelow` (new messages only) does not.
|
|
37
41
|
* - Prepended older messages keep the visible position. The scroller must set
|
|
38
42
|
* `overflow-anchor: none` so browser anchoring does not also compensate.
|
|
39
43
|
*/
|
|
40
44
|
export declare function useStickToBottom({ scrollerRef, contentRef, ids, lastIsOwn, active, hasMessages, }: UseStickToBottomOptions): {
|
|
41
45
|
hasNewBelow: boolean;
|
|
46
|
+
away: boolean;
|
|
42
47
|
scrollToBottom: () => void;
|
|
43
48
|
release: () => void;
|
|
44
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-stick-to-bottom.d.ts","sourceRoot":"","sources":["../../src/chat/use-stick-to-bottom.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAY/C,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjD,kHAAkH;IAClH,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,+GAA+G;IAC/G,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,oFAAoF;IACpF,SAAS,EAAE,OAAO,CAAC;IACnB,iGAAiG;IACjG,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED
|
|
1
|
+
{"version":3,"file":"use-stick-to-bottom.d.ts","sourceRoot":"","sources":["../../src/chat/use-stick-to-bottom.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAY/C,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjD,kHAAkH;IAClH,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,+GAA+G;IAC/G,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,oFAAoF;IACpF,SAAS,EAAE,OAAO,CAAC;IACnB,iGAAiG;IACjG,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,UAAU,EACV,GAAG,EACH,SAAS,EACT,MAAa,EACb,WAAW,GACZ,EAAE,uBAAuB;;;;;EAyJzB"}
|
|
@@ -31,6 +31,10 @@ const TOUCH_MOMENTUM_WINDOW_MS = 1000;
|
|
|
31
31
|
* caused it (a fling that lands at the bottom follows again).
|
|
32
32
|
* - `release()` drops the intent for code that scrolls the list itself (for
|
|
33
33
|
* example jumping to a quoted message); user input does this automatically.
|
|
34
|
+
* - `away` is that intent, readable while rendering: true once the viewer scrolled
|
|
35
|
+
* away from the bottom (or `release()` ran), false again when they come back, jump
|
|
36
|
+
* down, or the list is reused for another thread. It also covers a streaming message
|
|
37
|
+
* that keeps growing, which `hasNewBelow` (new messages only) does not.
|
|
34
38
|
* - Prepended older messages keep the visible position. The scroller must set
|
|
35
39
|
* `overflow-anchor: none` so browser anchoring does not also compensate.
|
|
36
40
|
*/
|
|
@@ -43,6 +47,8 @@ export function useStickToBottom({ scrollerRef, contentRef, ids, lastIsOwn, acti
|
|
|
43
47
|
const pointerActiveRef = useRef(false);
|
|
44
48
|
const pendingBottomRef = useRef(false);
|
|
45
49
|
const [hasNewBelow, setHasNewBelow] = useState(false);
|
|
50
|
+
// The reader has let go of the bottom (the same intent as `wantBottomRef`, readable while rendering).
|
|
51
|
+
const [away, setAway] = useState(false);
|
|
46
52
|
const firstId = ids[0];
|
|
47
53
|
const lastId = ids[ids.length - 1];
|
|
48
54
|
const writeBottom = useCallback(() => {
|
|
@@ -59,6 +65,7 @@ export function useStickToBottom({ scrollerRef, contentRef, ids, lastIsOwn, acti
|
|
|
59
65
|
wantBottomRef.current = true;
|
|
60
66
|
writeBottom();
|
|
61
67
|
setHasNewBelow(false);
|
|
68
|
+
setAway(false);
|
|
62
69
|
}, [scrollerRef, writeBottom]);
|
|
63
70
|
// Messages changed.
|
|
64
71
|
useLayoutEffect(() => {
|
|
@@ -136,9 +143,11 @@ export function useStickToBottom({ scrollerRef, contentRef, ids, lastIsOwn, acti
|
|
|
136
143
|
if (distance <= STICK_TO_BOTTOM_THRESHOLD_PX) {
|
|
137
144
|
wantBottomRef.current = true;
|
|
138
145
|
setHasNewBelow(false);
|
|
146
|
+
setAway(false);
|
|
139
147
|
}
|
|
140
148
|
else if (user && !programmatic) {
|
|
141
149
|
wantBottomRef.current = false;
|
|
150
|
+
setAway(true);
|
|
142
151
|
}
|
|
143
152
|
lastWrittenRef.current = null;
|
|
144
153
|
heightRef.current = el.scrollHeight;
|
|
@@ -185,7 +194,8 @@ export function useStickToBottom({ scrollerRef, contentRef, ids, lastIsOwn, acti
|
|
|
185
194
|
}, [scrollerRef, contentRef, scrollToBottom, writeBottom, hasMessages]);
|
|
186
195
|
const release = useCallback(() => {
|
|
187
196
|
wantBottomRef.current = false;
|
|
197
|
+
setAway(true);
|
|
188
198
|
}, []);
|
|
189
|
-
return { hasNewBelow, scrollToBottom, release };
|
|
199
|
+
return { hasNewBelow, away, scrollToBottom, release };
|
|
190
200
|
}
|
|
191
201
|
//# sourceMappingURL=use-stick-to-bottom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-stick-to-bottom.js","sourceRoot":"","sources":["../../src/chat/use-stick-to-bottom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAElF,yEAAyE;AACzE,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,yFAAyF;AACzF,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAgBtC
|
|
1
|
+
{"version":3,"file":"use-stick-to-bottom.js","sourceRoot":"","sources":["../../src/chat/use-stick-to-bottom.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,8 +12,10 @@ declare const sheetVariants: (props?: ({
|
|
|
12
12
|
side?: "left" | "right" | "top" | "bottom" | null | undefined;
|
|
13
13
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
14
14
|
interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
|
|
15
|
+
/** Accessible name of the built-in close button. Defaults to "Close"; pass the translated string. */
|
|
16
|
+
closeLabel?: string;
|
|
15
17
|
}
|
|
16
|
-
declare function SheetContent({ side, className, children, ref, ...props }: SheetContentProps & {
|
|
18
|
+
declare function SheetContent({ side, className, children, closeLabel, ref, ...props }: SheetContentProps & {
|
|
17
19
|
ref?: React.Ref<React.ElementRef<typeof SheetPrimitive.Content>>;
|
|
18
20
|
}): import("react/jsx-runtime").JSX.Element;
|
|
19
21
|
declare const SheetHeader: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../src/components/sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,KAAK,sCAAsB,CAAC;AAElC,QAAA,MAAM,YAAY,6GAAyB,CAAC;AAE5C,QAAA,MAAM,UAAU,2GAAuB,CAAC;AAExC,QAAA,MAAM,WAAW,4CAAwB,CAAC;AAE1C,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG;IACjE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CAClE,2CAYA;AAED,QAAA,MAAM,aAAa;;8EAelB,CAAC;AAEF,UAAU,iBACR,SACE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,EAC7D,YAAY,CAAC,OAAO,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../src/components/sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,KAAK,sCAAsB,CAAC;AAElC,QAAA,MAAM,YAAY,6GAAyB,CAAC;AAE5C,QAAA,MAAM,UAAU,2GAAuB,CAAC;AAExC,QAAA,MAAM,WAAW,4CAAwB,CAAC;AAE1C,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG;IACjE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CAClE,2CAYA;AAED,QAAA,MAAM,aAAa;;8EAelB,CAAC;AAEF,UAAU,iBACR,SACE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,EAC7D,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,qGAAqG;IACrG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,iBAAS,YAAY,CAAC,EACpB,IAAc,EACd,SAAS,EACT,QAAQ,EACR,UAAoB,EACpB,GAAG,EACH,GAAG,KAAK,EACT,EAAE,iBAAiB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;CAAE,2CAiB1F;AAED,QAAA,MAAM,WAAW;8BAA6B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAEjF,CAAC;AAGF,QAAA,MAAM,WAAW;8BAA6B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAKjF,CAAC;AAGF,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;CAChE,2CAQA;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,WAAW,CAAC,GAAG;IACrE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;CACtE,2CAQA;AAED,OAAO,EACL,KAAK,EACL,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,GACb,CAAC"}
|
package/dist/components/sheet.js
CHANGED
|
@@ -24,8 +24,8 @@ const sheetVariants = cva("fixed z-50 gap-4 bg-background p-6 shadow-lg data-[st
|
|
|
24
24
|
side: "right",
|
|
25
25
|
},
|
|
26
26
|
});
|
|
27
|
-
function SheetContent({ side = "right", className, children, ref, ...props }) {
|
|
28
|
-
return (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Content, { ref: ref, className: cn(sheetVariants({ side }), className), ...props, children: [children, _jsxs(SheetPrimitive.Close, { className: "absolute right-4 top-4 inline-flex size-11 items-center justify-center rounded-xs opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-secondary hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none", children: [_jsx(Icon, { icon: X, size: "sm" }), _jsx("span", { className: "sr-only", children:
|
|
27
|
+
function SheetContent({ side = "right", className, children, closeLabel = "Close", ref, ...props }) {
|
|
28
|
+
return (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Content, { ref: ref, className: cn(sheetVariants({ side }), className), ...props, children: [children, _jsxs(SheetPrimitive.Close, { className: "absolute right-4 top-4 inline-flex size-11 items-center justify-center rounded-xs opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-secondary hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none", children: [_jsx(Icon, { icon: X, size: "sm" }), _jsx("span", { className: "sr-only", children: closeLabel })] })] })] }));
|
|
29
29
|
}
|
|
30
30
|
const SheetHeader = ({ className, ...props }) => (_jsx("div", { className: cn("flex flex-col gap-2 text-center sm:text-left", className), ...props }));
|
|
31
31
|
SheetHeader.displayName = "SheetHeader";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../src/components/sheet.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC;AAElC,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC;AAE5C,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC;AAExC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC;AAE1C,SAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EAGT;IACC,OAAO,CACL,KAAC,cAAc,CAAC,OAAO,iBACX,eAAe,EACzB,SAAS,EAAE,EAAE,CACX,2HAA2H,EAC3H,SAAS,CACV,KACG,KAAK,EACT,GAAG,EAAE,GAAG,GACR,CACH,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,GAAG,CACvB,uHAAuH,EACvH;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,GAAG,EAAE,kDAAkD;YACvD,MAAM,EAAE,oDAAoD;YAC5D,IAAI,EAAE,4EAA4E;YAClF,KAAK,EAAE,4EAA4E;SACpF;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,OAAO;KACd;CACF,CACF,CAAC;
|
|
1
|
+
{"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../src/components/sheet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,12 @@ export declare function StatusBadge(props: StatusBadgeProps): import("react/jsx-
|
|
|
39
39
|
export interface JobFailedPanelProps {
|
|
40
40
|
jobId: string;
|
|
41
41
|
status: string;
|
|
42
|
+
/**
|
|
43
|
+
* The backend's stored error text, never altered. Known constants
|
|
44
|
+
* (`UNSTARTED_JOB_ERROR`, `ALREADY_RAN_JOB_ERROR`; see `job-error-copy.ts`) render a
|
|
45
|
+
* kind-specific headline, body and "Upload again" action as translated copy, with
|
|
46
|
+
* this raw text in a "Technical details" disclosure; any other error renders as-is.
|
|
47
|
+
*/
|
|
42
48
|
error: string | null;
|
|
43
49
|
t?: TranslateFn;
|
|
44
50
|
/** Destination of the "Try another upload" action (producer: `/imports`). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-job-panels.d.ts","sourceRoot":"","sources":["../../src/portfolio-import/import-job-panels.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"import-job-panels.d.ts","sourceRoot":"","sources":["../../src/portfolio-import/import-job-panels.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AA+BzF;;;;;;;;;;GAUG;AACH;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,KAAK,KAAK,CAAC,YAAY,CAAC;AAqBzB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACvE,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;CAC3C;AA4CD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAkDlD;AAID,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mHAAmH;IACnH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAuGxD;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,sGAAsG;IACtG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAoC5D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* import-job-panels.tsx — status pill + terminal panels for the import-job
|
|
4
4
|
* detail surface (CEL-1356, epic CEL-1348). Lifted from the producer
|
|
@@ -18,6 +18,7 @@ import { motion } from "motion/react";
|
|
|
18
18
|
import { useCallback, useState } from "react";
|
|
19
19
|
import { interpolate } from "../portfolio/interpolate.js";
|
|
20
20
|
import { hasPresentResultObject } from "./extraction-result.js";
|
|
21
|
+
import { classifyJobError, KNOWN_JOB_ERROR_ACTION, KNOWN_JOB_ERROR_COPY, KNOWN_JOB_ERROR_DETAILS, } from "./job-error-copy.js";
|
|
21
22
|
import { useCountUp } from "./use-count-up.js";
|
|
22
23
|
const defaultT = (key, fallback) => fallback ?? key;
|
|
23
24
|
// Enter transitions animate transform (y) only — never opacity — because the
|
|
@@ -131,13 +132,19 @@ export function JobFailedPanel(props) {
|
|
|
131
132
|
// Clipboard write denied — leave the label as-is.
|
|
132
133
|
});
|
|
133
134
|
}, [jobId]);
|
|
134
|
-
const
|
|
135
|
+
const errorKind = classifyJobError(error);
|
|
136
|
+
const knownCopy = errorKind ? KNOWN_JOB_ERROR_COPY[errorKind] : null;
|
|
137
|
+
const retryLabel = knownCopy
|
|
138
|
+
? t(KNOWN_JOB_ERROR_ACTION.key, KNOWN_JOB_ERROR_ACTION.fallback)
|
|
139
|
+
: t("detail.failed_retry", "Try another upload");
|
|
135
140
|
const retryClassName = "inline-flex items-center gap-1.5 rounded-full bg-primary px-3.5 py-1.5 text-xs font-semibold text-primary-foreground shadow-sm transition hover:bg-primary/90 active:scale-[0.98]";
|
|
136
141
|
return (_jsx(motion.section, { role: "alert", "aria-live": "assertive", initial: { y: 8 }, animate: { y: 0, opacity: 1 }, transition: { ...ENTER_TRANSITION, duration: 0.35 }, className: "mb-6 overflow-hidden rounded-2xl border border-[var(--tone-danger-border)]/40 bg-card p-5 shadow-sm", children: _jsxs("div", { className: "flex items-start gap-4", children: [_jsx("span", { className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-[var(--tone-danger-soft)] text-[var(--tone-danger-fg)]", children: _jsx(ExclamationTriangleIcon, { className: "size-5", "aria-hidden": "true" }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "text-xs font-semibold uppercase tracking-[0.18em] text-[var(--tone-danger-fg)]", children: status === "abandoned"
|
|
137
142
|
? t("detail.abandoned_eyebrow", "Stopped")
|
|
138
|
-
: t("detail.failed_eyebrow", "Stopped") }), _jsx("h2", { className: "mt-1 text-lg font-semibold tracking-tight text-foreground", children:
|
|
143
|
+
: t("detail.failed_eyebrow", "Stopped") }), _jsx("h2", { className: "mt-1 text-lg font-semibold tracking-tight text-foreground", children: knownCopy
|
|
144
|
+
? t(knownCopy.title.key, knownCopy.title.fallback)
|
|
145
|
+
: t("detail.failed_title", "We couldn't finish reading this document.") }), knownCopy ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "mt-2 text-sm/6 text-muted-foreground", children: t(knownCopy.body.key, knownCopy.body.fallback) }), _jsxs("details", { className: "mt-2 text-xs text-muted-foreground", children: [_jsx("summary", { className: "min-h-6 w-fit cursor-pointer rounded-xs focus-visible:outline-hidden focus-visible:ring-3 focus-visible:ring-ring/70 pointer-coarse:min-h-11 pointer-coarse:py-3", children: t(KNOWN_JOB_ERROR_DETAILS.key, KNOWN_JOB_ERROR_DETAILS.fallback) }), _jsx("code", { className: "mt-1 block font-mono text-xs/5 break-words whitespace-pre-wrap", children: error })] })] })) : (_jsx("p", { className: "mt-2 text-sm/6 text-muted-foreground", children: error?.trim()
|
|
139
146
|
? error
|
|
140
|
-
: t("detail.failed_fallback", "Something went wrong on our side. The error has been logged.") }), _jsxs("div", { className: "mt-4 flex flex-wrap items-center gap-2", children: [retryHref ? (_jsxs("a", { href: retryHref, className: retryClassName, children: [_jsx(ArrowPathIcon, { className: "size-3.5", "aria-hidden": "true" }), retryLabel] })) : onRetry ? (_jsxs("button", { type: "button", onClick: onRetry, className: retryClassName, children: [_jsx(ArrowPathIcon, { className: "size-3.5", "aria-hidden": "true" }), retryLabel] })) : null, _jsxs("button", { type: "button", onClick: onCopy, className: "inline-flex items-center gap-1.5 rounded-full border border-border bg-card px-3 py-1.5 text-xs font-medium text-foreground/80 transition hover:bg-muted active:scale-[0.98]", children: [_jsx(ClipboardIcon, { className: "size-3.5", "aria-hidden": "true" }), copied
|
|
147
|
+
: t("detail.failed_fallback", "Something went wrong on our side. The error has been logged.") })), _jsxs("div", { className: "mt-4 flex flex-wrap items-center gap-2", children: [retryHref ? (_jsxs("a", { href: retryHref, className: retryClassName, children: [_jsx(ArrowPathIcon, { className: "size-3.5", "aria-hidden": "true" }), retryLabel] })) : onRetry ? (_jsxs("button", { type: "button", onClick: onRetry, className: retryClassName, children: [_jsx(ArrowPathIcon, { className: "size-3.5", "aria-hidden": "true" }), retryLabel] })) : null, _jsxs("button", { type: "button", onClick: onCopy, className: "inline-flex items-center gap-1.5 rounded-full border border-border bg-card px-3 py-1.5 text-xs font-medium text-foreground/80 transition hover:bg-muted active:scale-[0.98]", children: [_jsx(ClipboardIcon, { className: "size-3.5", "aria-hidden": "true" }), copied
|
|
141
148
|
? t("detail.failed_copied", "Copied")
|
|
142
149
|
: t("detail.failed_copy_id", "Copy job ID")] })] })] }), _jsx("span", { className: "shrink-0 rounded-full bg-[var(--tone-danger-soft)]/70 px-2 py-1 text-xs font-semibold uppercase tracking-wider tabular-nums text-[var(--tone-danger-fg)] ring-1 ring-inset ring-[var(--tone-danger-border)]/30", children: jobId.slice(0, 8) })] }) }));
|
|
143
150
|
}
|