@cerebro-labs/agentnava-sdk 0.75.0 → 0.79.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/react.js CHANGED
@@ -216,7 +216,7 @@ function defaultPart(part, kids, ctx) {
216
216
  return filled.length > 0 && filled.every(figure);
217
217
  };
218
218
  const nums = Array.from({ length: Math.max(cols.length, ...rows.map((r) => r.length)) }, (_, j) => numCol(j));
219
- return (_jsxs("div", { className: "an-w-table", children: [str(part.title) && _jsx("div", { className: "an-w-title", children: str(part.title) }), _jsxs("table", { children: [cols.length > 0 && (_jsx("thead", { children: _jsx("tr", { children: cols.map((c, j) => (_jsx("th", { className: nums[j] ? 'is-num' : undefined, children: c }, j))) }) })), _jsx("tbody", { children: rows.map((r, i) => (_jsx("tr", { children: r.map((c, j) => (_jsx("td", { className: nums[j] ? 'is-num' : undefined, children: typeof c === 'number' ? ctx.number(c) : str(c) }, j))) }, i))) })] })] }));
219
+ return (_jsxs("div", { className: "an-w-table", children: [str(part.title) && (_jsxs("div", { className: "an-w-title", children: [str(part.title), rows.length > 3 && _jsxs("span", { children: [rows.length, " rows"] })] })), _jsxs("table", { children: [cols.length > 0 && (_jsx("thead", { children: _jsx("tr", { children: cols.map((c, j) => (_jsx("th", { className: nums[j] ? 'is-num' : undefined, children: c }, j))) }) })), _jsx("tbody", { children: rows.map((r, i) => (_jsx("tr", { children: r.map((c, j) => (_jsx("td", { className: nums[j] ? 'is-num' : undefined, children: typeof c === 'string' && /^[+\-\u2212]\d/.test(c.trim()) ? (_jsx("em", { className: /^\+/.test(c.trim()) ? 'is-up' : 'is-down', children: c })) : typeof c === 'number' ? (ctx.number(c)) : (str(c)) }, j))) }, i))) })] })] }));
220
220
  }
221
221
  case 'Chart':
222
222
  return _jsx(Chart, { part: part, ctx: ctx });
@@ -275,7 +275,23 @@ function draw(id, ctx) {
275
275
  const own = ctx.props.parts?.[part.component];
276
276
  return own ? own({ part, children: kids, onAsk: ctx.props.onAsk }) : defaultPart(part, kids, ctx);
277
277
  }
278
- /** One widget, drawn from its root part. Draws nothing when there is no root yet. */
278
+ /** Whether a part draws anything: a part that is not a container does; a
279
+ * container only through a child that does (a Card through its picture too).
280
+ * A part listed twice, or a loop, counts once. */
281
+ function drawsSomething(id, byId, seen = new Set()) {
282
+ const part = byId.get(id);
283
+ if (!part || seen.has(id))
284
+ return false;
285
+ seen.add(id);
286
+ if (!CONTAINERS.has(part.component))
287
+ return true;
288
+ if (part.component === 'Card' && part.image)
289
+ return true;
290
+ return list(part.children).some((k) => typeof k === 'string' && drawsSomething(k, byId, seen));
291
+ }
292
+ /** One widget, drawn from its root part. Draws nothing when there is no root
293
+ * yet, or nothing in it to draw: a container that lists none of its parts
294
+ * drew an empty frame (Complexity, 2026-11-02, a root Column with no children). */
279
295
  export function WidgetView(props) {
280
296
  const { widget, currency = 'USD', locale, allowUrl } = props;
281
297
  const byId = new Map();
@@ -283,7 +299,7 @@ export function WidgetView(props) {
283
299
  if (p && typeof p === 'object' && typeof p.id === 'string' && typeof p.component === 'string' && !byId.has(p.id))
284
300
  byId.set(p.id, p);
285
301
  }
286
- if (!byId.has('root'))
302
+ if (!drawsSomething('root', byId))
287
303
  return null;
288
304
  let moneyFormat;
289
305
  try {
package/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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","sourcesContent":["// Ready-made React views for the widgets an agent draws in its replies.\n//\n// import { ReplyView } from '@cerebro-labs/agentnava-sdk/react'\n// import '@cerebro-labs/agentnava-sdk/react/styles.css'\n//\n// <ReplyView text={reply} widgets={widgets} onAsk={send} />\n//\n// React is optional for the SDK: only this entry needs it, and the rest of the\n// package never imports it. Every kind of part has a default look (styles.css,\n// themed through CSS variables), and any kind can be swapped for your own\n// component with `parts`.\n//\n// A widget is written by the model, so it is drawn defensively: a kind this\n// does not know, or a part missing a field, is skipped; each part is drawn\n// once, even if two containers name it; links and pictures open only over\n// https:// (narrow it further with `allowUrl`); and a widget that throws while\n// drawing is left out rather than breaking the screen around it.\n\nimport { Component, Fragment, type ReactNode, useEffect, useId, useRef, useState } from 'react';\nimport type { Widget, WidgetPart } from './types.ts';\nimport { placeWidgets } from './widgets.ts';\n\nexport { placeWidgets, type ReplyPiece } from './widgets.ts';\n\n/** Every kind of part an agent may draw. */\nexport type WidgetKind =\n\t| 'Column'\n\t| 'Row'\n\t| 'Card'\n\t| 'Text'\n\t| 'Stat'\n\t| 'KeyValue'\n\t| 'Table'\n\t| 'Chart'\n\t| 'Image'\n\t| 'List'\n\t| 'Note'\n\t| 'Badge'\n\t| 'Link'\n\t| 'Button'\n\t| 'Suggestions'\n\t| 'Divider';\n\n/** What a replacement for one kind of part receives. */\nexport interface PartProps {\n\tpart: WidgetPart;\n\t/** The part's children, already drawn (containers only). */\n\tchildren?: ReactNode;\n\t/** Send words as the reader's next message (Button, Suggestions). */\n\tonAsk?: ((text: string) => void) | undefined;\n}\n\nexport interface WidgetViewProps {\n\twidget: Widget;\n\t/** Called with a Button's label or a tapped suggestion: send it as the next message. */\n\tonAsk?: (text: string) => void;\n\t/** Your own component for any kind of part, in place of the default. */\n\tparts?: Partial<Record<WidgetKind, (props: PartProps) => ReactNode>>;\n\t/** ISO currency code for charts and numbers marked as money. Default \"USD\". */\n\tcurrency?: string;\n\t/** Locale for numbers. Default: the reader's. */\n\tlocale?: string;\n\t/** Whether a link or picture address may be opened. Default: https:// only. */\n\tallowUrl?: (url: string, use: 'link' | 'image') => boolean;\n\tclassName?: string;\n}\n\nexport interface ReplyViewProps extends Omit<WidgetViewProps, 'widget' | 'className'> {\n\t/** The reply's words, as `text` events or `done.reply` give them. */\n\ttext: string;\n\t/** The reply's widgets, as `widget` events or `done.widgets` give them. */\n\twidgets?: readonly Widget[] | undefined;\n\t/** How to draw the words. Default: paragraphs. Pass your markdown renderer here. */\n\trenderText?: (text: string) => ReactNode;\n\tclassName?: string;\n}\n\nconst str = (v: unknown): string => (typeof v === 'string' || typeof v === 'number' ? String(v) : '');\nconst list = <T = unknown,>(v: unknown): T[] => (Array.isArray(v) ? (v as T[]) : []);\nconst TONES = new Set(['high', 'medium', 'low', 'good', 'info']);\nconst toneOf = (v: unknown): string => (typeof v === 'string' && TONES.has(v) ? v : 'info');\nconst httpsOnly = (url: string) => /^https:\\/\\//i.test(url);\n\n/** A widget that throws while drawing is left out, never a crash of the screen. */\nclass Boundary extends Component<{ children: ReactNode }, { failed: boolean }> {\n\toverride state = { failed: false };\n\tstatic getDerivedStateFromError() {\n\t\treturn { failed: true };\n\t}\n\toverride render() {\n\t\treturn this.state.failed ? null : this.props.children;\n\t}\n}\n\ninterface Ctx {\n\tbyId: Map<string, WidgetPart>;\n\tseen: Set<string>;\n\tprops: WidgetViewProps;\n\tmoney: (n: number) => string;\n\tnumber: (n: number) => string;\n\turl: (v: unknown, use: 'link' | 'image') => string | undefined;\n}\n\n/** A caption's leading figure is bold; a signed one (\"-1.55%\", \"+12\") is red or green too. */\nfunction caption(text: string): ReactNode {\n\tconst m = /^([+\\-\\u2212]?[$\\u20ac\\u00a3\\u20b9]?\\d[\\d,.]*[%KMBTx]?)(.*)$/s.exec(text);\n\tif (!m) return text;\n\t// Only a signed figure says which way it moved; \"12 errors\" is not good news.\n\tconst dir = /^[-\\u2212]/.test(m[1]!) ? 'is-down' : m[1]!.startsWith('+') ? 'is-up' : '';\n\treturn (\n\t\t<>\n\t\t\t<b className={dir || undefined}>{m[1]}</b>\n\t\t\t{m[2]}\n\t\t</>\n\t);\n}\n\n/** Round numbers for the y axis: about `count` steps of 1, 2, 2.5 or 5 x 10^n. */\nfunction niceTicks(lo: number, hi: number, count = 4): number[] {\n\tif (lo === hi) {\n\t\tconst pad = Math.abs(lo) * 0.1 || 1;\n\t\tlo -= pad;\n\t\thi += pad;\n\t}\n\tconst raw = (hi - lo) / count;\n\tconst mag = 10 ** Math.floor(Math.log10(raw));\n\tconst step = ([1, 2, 2.5, 5, 10].find((m) => m * mag >= raw) ?? 10) * mag;\n\tconst ticks: number[] = [];\n\tfor (let t = Math.floor(lo / step) * step; t <= hi + step * 1e-9; t += step) ticks.push(Number(t.toPrecision(12)));\n\tif (ticks[ticks.length - 1]! < hi) ticks.push(Number((ticks[ticks.length - 1]! + step).toPrecision(12)));\n\treturn ticks;\n}\n\n/** Short axis numbers: 1.2K, 3.4M, 5B. */\nfunction compact(n: number, locale?: string): string {\n\ttry {\n\t\treturn new Intl.NumberFormat(locale, {\n\t\t\tnotation: 'compact',\n\t\t\tmaximumFractionDigits: 1,\n\t\t}).format(n);\n\t} catch {\n\t\treturn String(n);\n\t}\n}\n\nfunction Chart({ part, ctx }: { part: WidgetPart; ctx: Ctx }) {\n\tconst box = useRef<HTMLDivElement>(null);\n\tconst gid = `an-w-g${useId().replace(/:/g, '')}`;\n\t// Drawn in real pixels at the box's own width, so text stays at body size\n\t// however wide the card is (a scaled viewBox blew 10px labels up to 40px).\n\tconst [W, setW] = useState(560);\n\tconst [hover, setHover] = useState<number | null>(null);\n\tuseEffect(() => {\n\t\tconst el = box.current;\n\t\tif (!el || typeof ResizeObserver === 'undefined') return;\n\t\tconst ro = new ResizeObserver(([e]) => {\n\t\t\tconst w = Math.round(e!.contentRect.width);\n\t\t\tif (w > 0) setW(w);\n\t\t});\n\t\tro.observe(el);\n\t\treturn () => ro.disconnect();\n\t}, []);\n\tconst series = list<{ name?: unknown; points?: unknown }>(part.series)\n\t\t.map((s) => ({\n\t\t\tname: str(s?.name),\n\t\t\tpoints: list<{ x?: unknown; y?: unknown }>(s?.points).filter((p) => typeof p?.y === 'number' && Number.isFinite(p.y)),\n\t\t}))\n\t\t.filter((s) => s.points.length > 0);\n\tif (series.length === 0) return null;\n\tconst xs = series[0]!.points.map((p) => str(p.x));\n\tconst n = Math.max(...series.map((s) => s.points.length));\n\tconst ref = part.reference as { y?: unknown; label?: unknown } | undefined;\n\tconst refY = typeof ref?.y === 'number' && Number.isFinite(ref.y) ? ref.y : undefined;\n\tconst isBar = part.type === 'bar';\n\tconst ys = [...series.flatMap((s) => s.points.map((p) => p.y as number)), ...(refY === undefined ? [] : [refY])];\n\t// Bars measure from zero, so zero is always in range. A line shows change,\n\t// so it fits its own range: a price moving 520 to 540 must not draw flat.\n\tconst dataLo = Math.min(...ys);\n\tconst dataHi = Math.max(...ys);\n\tconst ticks = isBar ? niceTicks(Math.min(dataLo, 0), Math.max(dataHi, 0)) : niceTicks(dataLo, dataHi);\n\tconst lo = ticks[0]!;\n\tconst hi = ticks[ticks.length - 1]!;\n\tconst span = hi - lo || 1;\n\tconst fmt = (v: number) => (part.unit === 'currency' ? ctx.money(v) : part.unit === 'percent' ? `${ctx.number(v)}%` : ctx.number(v));\n\tconst axis = (v: number) => {\n\t\tconst short = Math.abs(hi) >= 10000 || Math.abs(lo) >= 10000 ? compact(v, ctx.props.locale) : ctx.number(v);\n\t\treturn part.unit === 'currency' ? (fmt(0).replace(/[\\d.,\\s]+/g, '') || '') + short : part.unit === 'percent' ? `${short}%` : short;\n\t};\n\tconst H = 220;\n\tconst top = 12;\n\tconst bottom = 26;\n\tconst left = Math.max(...ticks.map((t) => axis(t).length)) * 6.5 + 10;\n\tconst right = Math.max(12, Math.max(...xs.map((x) => x.length), 1) * 3.3);\n\tconst plotW = Math.max(W - left - right, 40);\n\tconst plotH = H - top - bottom;\n\tconst yOf = (y: number) => top + plotH - ((y - lo) / span) * plotH;\n\tconst step = plotW / Math.max(n, 1);\n\tconst xOf = (i: number) => (isBar ? left + i * step + step / 2 : left + (n === 1 ? plotW / 2 : (i / (n - 1)) * plotW));\n\tconst zero = yOf(Math.max(lo, Math.min(0, hi)));\n\t// Thin the x labels until each fits in the room it has.\n\tconst longest = Math.max(...xs.map((x) => x.length), 1);\n\tconst every = Math.max(1, Math.ceil((longest * 6.5 + 12) / (plotW / Math.max(n, 1))));\n\tconst showDots = false;\n\tconst pick = (e: { clientX: number; currentTarget: SVGSVGElement }) => {\n\t\tconst r = e.currentTarget.getBoundingClientRect();\n\t\tconst px = ((e.clientX - r.left) / r.width) * W;\n\t\tlet best = 0;\n\t\tfor (let i = 1; i < n; i++) if (Math.abs(xOf(i) - px) < Math.abs(xOf(best) - px)) best = i;\n\t\tsetHover(best);\n\t};\n\tconst tipX = hover === null ? 0 : xOf(hover);\n\t// One trend line leads with where it ended and how far it moved, like a stat.\n\tconst only = series.length === 1 && !isBar && series[0]!.points.length >= 2 ? series[0]!.points : undefined;\n\tconst headline = only\n\t\t? (() => {\n\t\t\t\tconst first = only[0]!.y as number;\n\t\t\t\tconst last = only[only.length - 1]!.y as number;\n\t\t\t\tconst delta = last - first;\n\t\t\t\tconst abs = part.unit === 'percent' ? `${ctx.number(Math.abs(delta))} pts` : fmt(Math.abs(delta)).replace('-', '');\n\t\t\t\tconst pct = part.unit !== 'percent' && first > 0 && last >= 0 ? ` (${ctx.number(Math.round((Math.abs(delta) / first) * 1000) / 10)}%)` : '';\n\t\t\t\treturn { last, delta, change: abs + pct, from: str(only[0]!.x) };\n\t\t\t})()\n\t\t: undefined;\n\treturn (\n\t\t<figure className=\"an-w-chart\">\n\t\t\t{str(part.title) && <figcaption>{str(part.title)}</figcaption>}\n\t\t\t{headline && (\n\t\t\t\t<div className=\"an-w-chart-head\">\n\t\t\t\t\t<strong>{fmt(headline.last)}</strong>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{headline.delta === 0 ? 'No change' : `${headline.delta > 0 ? '\\u25B2' : '\\u25BC'} ${headline.change}`} since {headline.from}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div ref={box} className=\"an-w-chart-box\">\n\t\t\t\t<svg\n\t\t\t\t\twidth={W}\n\t\t\t\t\theight={H}\n\t\t\t\t\tviewBox={`0 0 ${W} ${H}`}\n\t\t\t\t\trole=\"img\"\n\t\t\t\t\taria-label={str(part.title) || 'Chart'}\n\t\t\t\t\tonMouseMove={pick}\n\t\t\t\t\tonMouseLeave={() => setHover(null)}\n\t\t\t\t>\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t{[0, 1, 2, 3].map((k) => (\n\t\t\t\t\t\t\t<linearGradient key={k} id={`${gid}-${k}`} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t\t<stop offset=\"0%\" className={`an-w-stop an-w-s${k}`} stopOpacity={part.type === 'area' ? 0.28 : 0.18} />\n\t\t\t\t\t\t\t\t<stop offset=\"100%\" className={`an-w-stop an-w-s${k}`} stopOpacity={0} />\n\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</defs>\n\t\t\t\t\t{ticks.map((t) => (\n\t\t\t\t\t\t<g key={t} className=\"an-w-grid\">\n\t\t\t\t\t\t\t<line x1={left} x2={W - right} y1={yOf(t)} y2={yOf(t)} />\n\t\t\t\t\t\t\t<text x={left - 8} y={yOf(t)} dy=\"0.32em\" textAnchor=\"end\">\n\t\t\t\t\t\t\t\t{axis(t)}\n\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t))}\n\t\t\t\t\t{series.map((s, si) =>\n\t\t\t\t\t\tisBar ? (\n\t\t\t\t\t\t\ts.points.map((p, i) => {\n\t\t\t\t\t\t\t\tconst bw = Math.min((step * 0.7) / series.length, 48);\n\t\t\t\t\t\t\t\tconst x = xOf(i) - (bw * series.length) / 2 + si * bw;\n\t\t\t\t\t\t\t\tconst y = yOf(p.y as number);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<g key={`${si}-${i}`}>\n\t\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\t\tclassName={`an-w-s${si % 4}${hover !== null && hover !== i ? ' is-dim' : ''}`}\n\t\t\t\t\t\t\t\t\t\t\tx={x + 1}\n\t\t\t\t\t\t\t\t\t\t\ty={Math.min(y, zero)}\n\t\t\t\t\t\t\t\t\t\t\twidth={Math.max(bw - 2, 1)}\n\t\t\t\t\t\t\t\t\t\t\theight={Math.max(Math.abs(zero - y), 1)}\n\t\t\t\t\t\t\t\t\t\t\trx={3}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{series.length === 1 && n <= 8 && (\n\t\t\t\t\t\t\t\t\t\t\t<text className=\"an-w-val\" x={x + bw / 2} y={Math.min(y, zero) - 6} textAnchor=\"middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{fmt(p.y as number)}\n\t\t\t\t\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<g key={si}>\n\t\t\t\t\t\t\t\t{(part.type === 'area' || series.length === 1) && (\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\tclassName={`an-w-area an-w-s${si % 4}`}\n\t\t\t\t\t\t\t\t\t\tfill={`url(#${gid}-${si % 4})`}\n\t\t\t\t\t\t\t\t\t\td={`M${xOf(0)},${zero} ${s.points.map((p, i) => `L${xOf(i)},${yOf(p.y as number)}`).join(' ')} L${xOf(s.points.length - 1)},${zero}Z`}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<polyline className={`an-w-line an-w-s${si % 4}`} points={s.points.map((p, i) => `${xOf(i)},${yOf(p.y as number)}`).join(' ')} />\n\t\t\t\t\t\t\t\t{s.points.map((p, i) =>\n\t\t\t\t\t\t\t\t\tshowDots || hover === i || (series.length === 1 && i === s.points.length - 1) ? (\n\t\t\t\t\t\t\t\t\t\t<circle key={i} className={`an-w-s${si % 4}`} cx={xOf(i)} cy={yOf(p.y as number)} r={hover === i ? 4.5 : 4} />\n\t\t\t\t\t\t\t\t\t) : null,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t),\n\t\t\t\t\t)}\n\t\t\t\t\t{lo < 0 && hi > 0 && <line className=\"an-w-zero\" x1={left} x2={W - right} y1={zero} y2={zero} />}\n\t\t\t\t\t{refY !== undefined && (\n\t\t\t\t\t\t<g className=\"an-w-ref\">\n\t\t\t\t\t\t\t<line x1={left} x2={W - right} y1={yOf(refY)} y2={yOf(refY)} />\n\t\t\t\t\t\t\t{str(ref?.label) && (\n\t\t\t\t\t\t\t\t<text x={W - right} y={yOf(refY) - 5} textAnchor=\"end\">\n\t\t\t\t\t\t\t\t\t{str(ref?.label)}\n\t\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</g>\n\t\t\t\t\t)}\n\t\t\t\t\t{xs.map((x, i) =>\n\t\t\t\t\t\ti % every === 0 ? (\n\t\t\t\t\t\t\t<text key={i} x={xOf(i)} y={H - 8} textAnchor=\"middle\">\n\t\t\t\t\t\t\t\t{x}\n\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t) : null,\n\t\t\t\t\t)}\n\t\t\t\t\t{hover !== null && !isBar && <line className=\"an-w-cross\" x1={tipX} x2={tipX} y1={top} y2={top + plotH} />}\n\t\t\t\t</svg>\n\t\t\t\t{hover !== null && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"an-w-tip\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: tipX,\n\t\t\t\t\t\t\ttransform: `translateX(${tipX > W / 2 ? 'calc(-100% - 10px)' : '10px'})`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<b>{xs[hover]}</b>\n\t\t\t\t\t\t{series.map((s, si) =>\n\t\t\t\t\t\t\ts.points[hover] ? (\n\t\t\t\t\t\t\t\t<span key={si}>\n\t\t\t\t\t\t\t\t\t<i className={`an-w-s${si % 4}`} />\n\t\t\t\t\t\t\t\t\t{series.length > 1 && `${s.name} `}\n\t\t\t\t\t\t\t\t\t<strong>{fmt(s.points[hover]!.y as number)}</strong>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : null,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{series.length > 1 && (\n\t\t\t\t<div className=\"an-w-legend\">\n\t\t\t\t\t{series.map((s, si) => (\n\t\t\t\t\t\t<span key={si}>\n\t\t\t\t\t\t\t<i className={`an-w-s${si % 4}`} />\n\t\t\t\t\t\t\t{s.name}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</figure>\n\t);\n}\n\n/** The default look of one part. `kids` is its children, already drawn. */\nfunction defaultPart(part: WidgetPart, kids: ReactNode, ctx: Ctx): ReactNode {\n\tconst onAsk = ctx.props.onAsk;\n\tswitch (part.component) {\n\t\tcase 'Column':\n\t\t\treturn <div className={`an-w-col an-w-gap-${['small', 'large'].includes(str(part.gap)) ? str(part.gap) : 'medium'}`}>{kids}</div>;\n\t\tcase 'Row':\n\t\t\treturn <div className={`an-w-row${part.scroll === true ? ' is-scroll' : ''}`}>{kids}</div>;\n\t\tcase 'Card': {\n\t\t\tconst image = ctx.url(part.image, 'image');\n\t\t\tconst href = ctx.url(part.href, 'link');\n\t\t\tconst actionHref = ctx.url(part.actionHref, 'link');\n\t\t\tconst actionLabel = str(part.actionLabel);\n\t\t\tif (actionHref && actionLabel) {\n\t\t\t\t// The card's one button (\"Add to cart\") is a link beside the card's\n\t\t\t\t// own link, never inside it.\n\t\t\t\tconst inner = (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{image && <img src={image} alt={str(part.imageAlt)} referrerPolicy=\"no-referrer\" loading=\"lazy\" />}\n\t\t\t\t\t\t<div className=\"an-w-card-body\">{kids}</div>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"an-w-card has-action\">\n\t\t\t\t\t\t{href ? (\n\t\t\t\t\t\t\t<a className=\"an-w-card-main\" href={href} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t\t{inner}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"an-w-card-main\">{inner}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<a className=\"an-w-card-action\" href={actionHref} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t{actionLabel}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst body = (\n\t\t\t\t<div className=\"an-w-card\">\n\t\t\t\t\t{image && <img src={image} alt={str(part.imageAlt)} referrerPolicy=\"no-referrer\" loading=\"lazy\" />}\n\t\t\t\t\t<div className=\"an-w-card-body\">{kids}</div>\n\t\t\t\t</div>\n\t\t\t);\n\t\t\treturn href ? (\n\t\t\t\t<a className=\"an-w-card-link\" href={href} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t{body}\n\t\t\t\t</a>\n\t\t\t) : (\n\t\t\t\tbody\n\t\t\t);\n\t\t}\n\t\tcase 'Text': {\n\t\t\tif (!str(part.text)) return null;\n\t\t\tconst v = ['title', 'heading', 'caption'].includes(str(part.variant)) ? str(part.variant) : 'body';\n\t\t\treturn <p className={`an-w-text is-${v}`}>{str(part.text)}</p>;\n\t\t}\n\t\tcase 'Stat':\n\t\t\tif (!str(part.value)) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-stat\">\n\t\t\t\t\t{str(part.label) && <span>{str(part.label)}</span>}\n\t\t\t\t\t<strong>{str(part.value)}</strong>\n\t\t\t\t\t{str(part.caption) && <small>{caption(str(part.caption))}</small>}\n\t\t\t\t</div>\n\t\t\t);\n\t\tcase 'KeyValue': {\n\t\t\tconst rows = list<{\n\t\t\t\tlabel?: unknown;\n\t\t\t\tvalue?: unknown;\n\t\t\t\temphasis?: unknown;\n\t\t\t}>(part.rows).filter((r) => str(r?.label) || str(r?.value));\n\t\t\tif (rows.length === 0) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-kv\">\n\t\t\t\t\t{str(part.title) && <div className=\"an-w-title\">{str(part.title)}</div>}\n\t\t\t\t\t<dl>\n\t\t\t\t\t\t{rows.map((r, i) => (\n\t\t\t\t\t\t\t<div key={i} className={r?.emphasis ? 'is-total' : undefined}>\n\t\t\t\t\t\t\t\t<dt>{str(r?.label)}</dt>\n\t\t\t\t\t\t\t\t<dd>{str(r?.value)}</dd>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</dl>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\tcase 'Table': {\n\t\t\tconst cols = list(part.columns).map(str);\n\t\t\tconst rows = list(part.rows).filter(Array.isArray) as unknown[][];\n\t\t\tif (cols.length === 0 && rows.length === 0) return null;\n\t\t\t// A column is numeric when every filled cell is a figure (\"521.91\", \"-1.55%\", \"$3.2B\"),\n\t\t\t// and then its header lines up with its numbers on the right.\n\t\t\tconst figure = (c: unknown) => typeof c === 'number' || (typeof c === 'string' && /^[+\\-\\u2212]?[$\\u20ac\\u00a3\\u20b9]?\\d[\\d,.]*\\s?[%KMBTx]?$/.test(c.trim()));\n\t\t\tconst numCol = (j: number) => {\n\t\t\t\tconst filled = rows.map((r) => r[j]).filter((c) => c !== null && c !== undefined && c !== '');\n\t\t\t\treturn filled.length > 0 && filled.every(figure);\n\t\t\t};\n\t\t\tconst nums = Array.from({ length: Math.max(cols.length, ...rows.map((r) => r.length)) }, (_, j) => numCol(j));\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-table\">\n\t\t\t\t\t{str(part.title) && <div className=\"an-w-title\">{str(part.title)}</div>}\n\t\t\t\t\t<table>\n\t\t\t\t\t\t{cols.length > 0 && (\n\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t{cols.map((c, j) => (\n\t\t\t\t\t\t\t\t\t\t<th key={j} className={nums[j] ? 'is-num' : undefined}>\n\t\t\t\t\t\t\t\t\t\t\t{c}\n\t\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t{rows.map((r, i) => (\n\t\t\t\t\t\t\t\t<tr key={i}>\n\t\t\t\t\t\t\t\t\t{r.map((c, j) => (\n\t\t\t\t\t\t\t\t\t\t<td key={j} className={nums[j] ? 'is-num' : undefined}>\n\t\t\t\t\t\t\t\t\t\t\t{typeof c === 'number' ? ctx.number(c) : str(c)}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\tcase 'Chart':\n\t\t\treturn <Chart part={part} ctx={ctx} />;\n\t\tcase 'Image': {\n\t\t\tconst url = ctx.url(part.url, 'image');\n\t\t\treturn url ? (\n\t\t\t\t<figure className=\"an-w-image\">\n\t\t\t\t\t<img src={url} alt={str(part.alt)} referrerPolicy=\"no-referrer\" loading=\"lazy\" />\n\t\t\t\t\t{str(part.caption) && <figcaption>{str(part.caption)}</figcaption>}\n\t\t\t\t</figure>\n\t\t\t) : null;\n\t\t}\n\t\tcase 'List': {\n\t\t\tconst items = list<{\n\t\t\t\ttitle?: unknown;\n\t\t\t\tdetail?: unknown;\n\t\t\t\tmeta?: unknown;\n\t\t\t\ttone?: unknown;\n\t\t\t}>(part.items).filter((it) => str(it?.title));\n\t\t\tif (items.length === 0) return null;\n\t\t\tconst Tag = part.ordered === true ? 'ol' : 'ul';\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-list\">\n\t\t\t\t\t{str(part.title) && <div className=\"an-w-title\">{str(part.title)}</div>}\n\t\t\t\t\t<Tag>\n\t\t\t\t\t\t{items.map((it, i) => (\n\t\t\t\t\t\t\t<li key={i}>\n\t\t\t\t\t\t\t\t<i className={`an-w-dot is-${toneOf(it?.tone)}`} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<strong>{str(it?.title)}</strong>\n\t\t\t\t\t\t\t\t\t{str(it?.detail) && <span>{str(it?.detail)}</span>}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{str(it?.meta) && <small>{str(it?.meta)}</small>}\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Tag>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\tcase 'Note':\n\t\t\tif (!str(part.text)) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-note\">\n\t\t\t\t\t{str(part.title) && <strong>{str(part.title)}</strong>}\n\t\t\t\t\t<span>{str(part.text)}</span>\n\t\t\t\t</div>\n\t\t\t);\n\t\tcase 'Badge':\n\t\t\treturn str(part.text) ? <span className={`an-w-badge is-${toneOf(part.tone)}`}>{str(part.text)}</span> : null;\n\t\tcase 'Link': {\n\t\t\tconst url = ctx.url(part.url, 'link');\n\t\t\treturn url && str(part.label) ? (\n\t\t\t\t<a className=\"an-w-link\" href={url} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t{str(part.label)}\n\t\t\t\t</a>\n\t\t\t) : null;\n\t\t}\n\t\tcase 'Button':\n\t\t\tif (!str(part.label)) return null;\n\t\t\treturn (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={`an-w-button is-${part.variant === 'secondary' ? 'secondary' : 'primary'}`}\n\t\t\t\t\tdisabled={!onAsk}\n\t\t\t\t\tonClick={() => onAsk?.(str(part.label))}\n\t\t\t\t>\n\t\t\t\t\t{str(part.label)}\n\t\t\t\t</button>\n\t\t\t);\n\t\tcase 'Suggestions': {\n\t\t\tconst options = list(part.options).map(str).filter(Boolean);\n\t\t\tif (options.length === 0) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-suggest\">\n\t\t\t\t\t{options.map((o, i) => (\n\t\t\t\t\t\t<button key={i} type=\"button\" disabled={!onAsk} onClick={() => onAsk?.(o)}>\n\t\t\t\t\t\t\t{o}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\tcase 'Divider':\n\t\t\treturn <hr className=\"an-w-divider\" />;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nconst CONTAINERS = new Set(['Column', 'Row', 'Card']);\n\n// A plain function, not a component: the set of parts already drawn lives for\n// one render of the widget. As a component, React's development mode would draw\n// each part twice and find every one \"already drawn\" on its second pass.\nfunction draw(id: string, ctx: Ctx): ReactNode {\n\tconst part = ctx.byId.get(id);\n\t// A part listed twice, or a loop of containers, is drawn once.\n\tif (!part || ctx.seen.has(id)) return null;\n\tctx.seen.add(id);\n\tconst kids = CONTAINERS.has(part.component)\n\t\t? list(part.children)\n\t\t\t\t.filter((k): k is string => typeof k === 'string')\n\t\t\t\t.map((k) => <Fragment key={k}>{draw(k, ctx)}</Fragment>)\n\t\t: undefined;\n\tconst own = ctx.props.parts?.[part.component as WidgetKind];\n\treturn own ? own({ part, children: kids, onAsk: ctx.props.onAsk }) : defaultPart(part, kids, ctx);\n}\n\n/** One widget, drawn from its root part. Draws nothing when there is no root yet. */\nexport function WidgetView(props: WidgetViewProps) {\n\tconst { widget, currency = 'USD', locale, allowUrl } = props;\n\tconst byId = new Map<string, WidgetPart>();\n\tfor (const p of Array.isArray(widget?.components) ? widget.components : []) {\n\t\tif (p && typeof p === 'object' && typeof p.id === 'string' && typeof p.component === 'string' && !byId.has(p.id)) byId.set(p.id, p);\n\t}\n\tif (!byId.has('root')) return null;\n\tlet moneyFormat: Intl.NumberFormat;\n\ttry {\n\t\tmoneyFormat = new Intl.NumberFormat(locale, {\n\t\t\tstyle: 'currency',\n\t\t\tcurrency,\n\t\t\tmaximumFractionDigits: 0,\n\t\t});\n\t} catch {\n\t\tmoneyFormat = new Intl.NumberFormat(locale, { maximumFractionDigits: 0 });\n\t}\n\tconst numberFormat = new Intl.NumberFormat(locale);\n\tconst ctx: Ctx = {\n\t\tbyId,\n\t\tseen: new Set(),\n\t\tprops,\n\t\tmoney: (n) => moneyFormat.format(n),\n\t\tnumber: (n) => numberFormat.format(n),\n\t\turl: (v, use) => (typeof v === 'string' && httpsOnly(v) && (allowUrl ? allowUrl(v, use) : true) ? v : undefined),\n\t};\n\treturn (\n\t\t<Boundary>\n\t\t\t<div className={`an-w${props.className ? ` ${props.className}` : ''}`} data-surface={widget.surfaceId}>\n\t\t\t\t{draw('root', ctx)}\n\t\t\t</div>\n\t\t</Boundary>\n\t);\n}\n\nfunction Paragraphs({ text }: { text: string }) {\n\treturn (\n\t\t<>\n\t\t\t{text\n\t\t\t\t.trim()\n\t\t\t\t.split(/\\n{2,}/)\n\t\t\t\t.map((p, i) => (\n\t\t\t\t\t<p key={i} className=\"an-reply-text\">\n\t\t\t\t\t\t{p.split('\\n').map((line, j) => (\n\t\t\t\t\t\t\t<Fragment key={j}>\n\t\t\t\t\t\t\t\t{j > 0 && <br />}\n\t\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</p>\n\t\t\t\t))}\n\t\t</>\n\t);\n}\n\n/** A whole reply: its words, with each widget drawn where it sits. */\nexport function ReplyView({ text, widgets, renderText, className, ...widgetProps }: ReplyViewProps) {\n\treturn (\n\t\t<div className={`an-reply${className ? ` ${className}` : ''}`}>\n\t\t\t{placeWidgets(text, widgets ?? []).map((piece, i) =>\n\t\t\t\tpiece.kind === 'text' ? (\n\t\t\t\t\t<Fragment key={`t${i}`}>{renderText ? renderText(piece.text) : <Paragraphs text={piece.text} />}</Fragment>\n\t\t\t\t) : (\n\t\t\t\t\t<WidgetView key={piece.widget.surfaceId} widget={piece.widget} {...widgetProps} />\n\t\t\t\t),\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"]}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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","sourcesContent":["// Ready-made React views for the widgets an agent draws in its replies.\n//\n// import { ReplyView } from '@cerebro-labs/agentnava-sdk/react'\n// import '@cerebro-labs/agentnava-sdk/react/styles.css'\n//\n// <ReplyView text={reply} widgets={widgets} onAsk={send} />\n//\n// React is optional for the SDK: only this entry needs it, and the rest of the\n// package never imports it. Every kind of part has a default look (styles.css,\n// themed through CSS variables), and any kind can be swapped for your own\n// component with `parts`.\n//\n// A widget is written by the model, so it is drawn defensively: a kind this\n// does not know, or a part missing a field, is skipped; each part is drawn\n// once, even if two containers name it; links and pictures open only over\n// https:// (narrow it further with `allowUrl`); and a widget that throws while\n// drawing is left out rather than breaking the screen around it.\n\nimport { Component, Fragment, type ReactNode, useEffect, useId, useRef, useState } from 'react';\nimport type { Widget, WidgetPart } from './types.ts';\nimport { placeWidgets } from './widgets.ts';\n\nexport { placeWidgets, type ReplyPiece } from './widgets.ts';\n\n/** Every kind of part an agent may draw. */\nexport type WidgetKind =\n\t| 'Column'\n\t| 'Row'\n\t| 'Card'\n\t| 'Text'\n\t| 'Stat'\n\t| 'KeyValue'\n\t| 'Table'\n\t| 'Chart'\n\t| 'Image'\n\t| 'List'\n\t| 'Note'\n\t| 'Badge'\n\t| 'Link'\n\t| 'Button'\n\t| 'Suggestions'\n\t| 'Divider';\n\n/** What a replacement for one kind of part receives. */\nexport interface PartProps {\n\tpart: WidgetPart;\n\t/** The part's children, already drawn (containers only). */\n\tchildren?: ReactNode;\n\t/** Send words as the reader's next message (Button, Suggestions). */\n\tonAsk?: ((text: string) => void) | undefined;\n}\n\nexport interface WidgetViewProps {\n\twidget: Widget;\n\t/** Called with a Button's label or a tapped suggestion: send it as the next message. */\n\tonAsk?: (text: string) => void;\n\t/** Your own component for any kind of part, in place of the default. */\n\tparts?: Partial<Record<WidgetKind, (props: PartProps) => ReactNode>>;\n\t/** ISO currency code for charts and numbers marked as money. Default \"USD\". */\n\tcurrency?: string;\n\t/** Locale for numbers. Default: the reader's. */\n\tlocale?: string;\n\t/** Whether a link or picture address may be opened. Default: https:// only. */\n\tallowUrl?: (url: string, use: 'link' | 'image') => boolean;\n\tclassName?: string;\n}\n\nexport interface ReplyViewProps extends Omit<WidgetViewProps, 'widget' | 'className'> {\n\t/** The reply's words, as `text` events or `done.reply` give them. */\n\ttext: string;\n\t/** The reply's widgets, as `widget` events or `done.widgets` give them. */\n\twidgets?: readonly Widget[] | undefined;\n\t/** How to draw the words. Default: paragraphs. Pass your markdown renderer here. */\n\trenderText?: (text: string) => ReactNode;\n\tclassName?: string;\n}\n\nconst str = (v: unknown): string => (typeof v === 'string' || typeof v === 'number' ? String(v) : '');\nconst list = <T = unknown,>(v: unknown): T[] => (Array.isArray(v) ? (v as T[]) : []);\nconst TONES = new Set(['high', 'medium', 'low', 'good', 'info']);\nconst toneOf = (v: unknown): string => (typeof v === 'string' && TONES.has(v) ? v : 'info');\nconst httpsOnly = (url: string) => /^https:\\/\\//i.test(url);\n\n/** A widget that throws while drawing is left out, never a crash of the screen. */\nclass Boundary extends Component<{ children: ReactNode }, { failed: boolean }> {\n\toverride state = { failed: false };\n\tstatic getDerivedStateFromError() {\n\t\treturn { failed: true };\n\t}\n\toverride render() {\n\t\treturn this.state.failed ? null : this.props.children;\n\t}\n}\n\ninterface Ctx {\n\tbyId: Map<string, WidgetPart>;\n\tseen: Set<string>;\n\tprops: WidgetViewProps;\n\tmoney: (n: number) => string;\n\tnumber: (n: number) => string;\n\turl: (v: unknown, use: 'link' | 'image') => string | undefined;\n}\n\n/** A caption's leading figure is bold; a signed one (\"-1.55%\", \"+12\") is red or green too. */\nfunction caption(text: string): ReactNode {\n\tconst m = /^([+\\-\\u2212]?[$\\u20ac\\u00a3\\u20b9]?\\d[\\d,.]*[%KMBTx]?)(.*)$/s.exec(text);\n\tif (!m) return text;\n\t// Only a signed figure says which way it moved; \"12 errors\" is not good news.\n\tconst dir = /^[-\\u2212]/.test(m[1]!) ? 'is-down' : m[1]!.startsWith('+') ? 'is-up' : '';\n\treturn (\n\t\t<>\n\t\t\t<b className={dir || undefined}>{m[1]}</b>\n\t\t\t{m[2]}\n\t\t</>\n\t);\n}\n\n/** Round numbers for the y axis: about `count` steps of 1, 2, 2.5 or 5 x 10^n. */\nfunction niceTicks(lo: number, hi: number, count = 4): number[] {\n\tif (lo === hi) {\n\t\tconst pad = Math.abs(lo) * 0.1 || 1;\n\t\tlo -= pad;\n\t\thi += pad;\n\t}\n\tconst raw = (hi - lo) / count;\n\tconst mag = 10 ** Math.floor(Math.log10(raw));\n\tconst step = ([1, 2, 2.5, 5, 10].find((m) => m * mag >= raw) ?? 10) * mag;\n\tconst ticks: number[] = [];\n\tfor (let t = Math.floor(lo / step) * step; t <= hi + step * 1e-9; t += step) ticks.push(Number(t.toPrecision(12)));\n\tif (ticks[ticks.length - 1]! < hi) ticks.push(Number((ticks[ticks.length - 1]! + step).toPrecision(12)));\n\treturn ticks;\n}\n\n/** Short axis numbers: 1.2K, 3.4M, 5B. */\nfunction compact(n: number, locale?: string): string {\n\ttry {\n\t\treturn new Intl.NumberFormat(locale, {\n\t\t\tnotation: 'compact',\n\t\t\tmaximumFractionDigits: 1,\n\t\t}).format(n);\n\t} catch {\n\t\treturn String(n);\n\t}\n}\n\nfunction Chart({ part, ctx }: { part: WidgetPart; ctx: Ctx }) {\n\tconst box = useRef<HTMLDivElement>(null);\n\tconst gid = `an-w-g${useId().replace(/:/g, '')}`;\n\t// Drawn in real pixels at the box's own width, so text stays at body size\n\t// however wide the card is (a scaled viewBox blew 10px labels up to 40px).\n\tconst [W, setW] = useState(560);\n\tconst [hover, setHover] = useState<number | null>(null);\n\tuseEffect(() => {\n\t\tconst el = box.current;\n\t\tif (!el || typeof ResizeObserver === 'undefined') return;\n\t\tconst ro = new ResizeObserver(([e]) => {\n\t\t\tconst w = Math.round(e!.contentRect.width);\n\t\t\tif (w > 0) setW(w);\n\t\t});\n\t\tro.observe(el);\n\t\treturn () => ro.disconnect();\n\t}, []);\n\tconst series = list<{ name?: unknown; points?: unknown }>(part.series)\n\t\t.map((s) => ({\n\t\t\tname: str(s?.name),\n\t\t\tpoints: list<{ x?: unknown; y?: unknown }>(s?.points).filter((p) => typeof p?.y === 'number' && Number.isFinite(p.y)),\n\t\t}))\n\t\t.filter((s) => s.points.length > 0);\n\tif (series.length === 0) return null;\n\tconst xs = series[0]!.points.map((p) => str(p.x));\n\tconst n = Math.max(...series.map((s) => s.points.length));\n\tconst ref = part.reference as { y?: unknown; label?: unknown } | undefined;\n\tconst refY = typeof ref?.y === 'number' && Number.isFinite(ref.y) ? ref.y : undefined;\n\tconst isBar = part.type === 'bar';\n\tconst ys = [...series.flatMap((s) => s.points.map((p) => p.y as number)), ...(refY === undefined ? [] : [refY])];\n\t// Bars measure from zero, so zero is always in range. A line shows change,\n\t// so it fits its own range: a price moving 520 to 540 must not draw flat.\n\tconst dataLo = Math.min(...ys);\n\tconst dataHi = Math.max(...ys);\n\tconst ticks = isBar ? niceTicks(Math.min(dataLo, 0), Math.max(dataHi, 0)) : niceTicks(dataLo, dataHi);\n\tconst lo = ticks[0]!;\n\tconst hi = ticks[ticks.length - 1]!;\n\tconst span = hi - lo || 1;\n\tconst fmt = (v: number) => (part.unit === 'currency' ? ctx.money(v) : part.unit === 'percent' ? `${ctx.number(v)}%` : ctx.number(v));\n\tconst axis = (v: number) => {\n\t\tconst short = Math.abs(hi) >= 10000 || Math.abs(lo) >= 10000 ? compact(v, ctx.props.locale) : ctx.number(v);\n\t\treturn part.unit === 'currency' ? (fmt(0).replace(/[\\d.,\\s]+/g, '') || '') + short : part.unit === 'percent' ? `${short}%` : short;\n\t};\n\tconst H = 220;\n\tconst top = 12;\n\tconst bottom = 26;\n\tconst left = Math.max(...ticks.map((t) => axis(t).length)) * 6.5 + 10;\n\tconst right = Math.max(12, Math.max(...xs.map((x) => x.length), 1) * 3.3);\n\tconst plotW = Math.max(W - left - right, 40);\n\tconst plotH = H - top - bottom;\n\tconst yOf = (y: number) => top + plotH - ((y - lo) / span) * plotH;\n\tconst step = plotW / Math.max(n, 1);\n\tconst xOf = (i: number) => (isBar ? left + i * step + step / 2 : left + (n === 1 ? plotW / 2 : (i / (n - 1)) * plotW));\n\tconst zero = yOf(Math.max(lo, Math.min(0, hi)));\n\t// Thin the x labels until each fits in the room it has.\n\tconst longest = Math.max(...xs.map((x) => x.length), 1);\n\tconst every = Math.max(1, Math.ceil((longest * 6.5 + 12) / (plotW / Math.max(n, 1))));\n\tconst showDots = false;\n\tconst pick = (e: { clientX: number; currentTarget: SVGSVGElement }) => {\n\t\tconst r = e.currentTarget.getBoundingClientRect();\n\t\tconst px = ((e.clientX - r.left) / r.width) * W;\n\t\tlet best = 0;\n\t\tfor (let i = 1; i < n; i++) if (Math.abs(xOf(i) - px) < Math.abs(xOf(best) - px)) best = i;\n\t\tsetHover(best);\n\t};\n\tconst tipX = hover === null ? 0 : xOf(hover);\n\t// One trend line leads with where it ended and how far it moved, like a stat.\n\tconst only = series.length === 1 && !isBar && series[0]!.points.length >= 2 ? series[0]!.points : undefined;\n\tconst headline = only\n\t\t? (() => {\n\t\t\t\tconst first = only[0]!.y as number;\n\t\t\t\tconst last = only[only.length - 1]!.y as number;\n\t\t\t\tconst delta = last - first;\n\t\t\t\tconst abs = part.unit === 'percent' ? `${ctx.number(Math.abs(delta))} pts` : fmt(Math.abs(delta)).replace('-', '');\n\t\t\t\tconst pct = part.unit !== 'percent' && first > 0 && last >= 0 ? ` (${ctx.number(Math.round((Math.abs(delta) / first) * 1000) / 10)}%)` : '';\n\t\t\t\treturn { last, delta, change: abs + pct, from: str(only[0]!.x) };\n\t\t\t})()\n\t\t: undefined;\n\treturn (\n\t\t<figure className=\"an-w-chart\">\n\t\t\t{str(part.title) && <figcaption>{str(part.title)}</figcaption>}\n\t\t\t{headline && (\n\t\t\t\t<div className=\"an-w-chart-head\">\n\t\t\t\t\t<strong>{fmt(headline.last)}</strong>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{headline.delta === 0 ? 'No change' : `${headline.delta > 0 ? '\\u25B2' : '\\u25BC'} ${headline.change}`} since {headline.from}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div ref={box} className=\"an-w-chart-box\">\n\t\t\t\t<svg\n\t\t\t\t\twidth={W}\n\t\t\t\t\theight={H}\n\t\t\t\t\tviewBox={`0 0 ${W} ${H}`}\n\t\t\t\t\trole=\"img\"\n\t\t\t\t\taria-label={str(part.title) || 'Chart'}\n\t\t\t\t\tonMouseMove={pick}\n\t\t\t\t\tonMouseLeave={() => setHover(null)}\n\t\t\t\t>\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t{[0, 1, 2, 3].map((k) => (\n\t\t\t\t\t\t\t<linearGradient key={k} id={`${gid}-${k}`} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t\t<stop offset=\"0%\" className={`an-w-stop an-w-s${k}`} stopOpacity={part.type === 'area' ? 0.28 : 0.18} />\n\t\t\t\t\t\t\t\t<stop offset=\"100%\" className={`an-w-stop an-w-s${k}`} stopOpacity={0} />\n\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</defs>\n\t\t\t\t\t{ticks.map((t) => (\n\t\t\t\t\t\t<g key={t} className=\"an-w-grid\">\n\t\t\t\t\t\t\t<line x1={left} x2={W - right} y1={yOf(t)} y2={yOf(t)} />\n\t\t\t\t\t\t\t<text x={left - 8} y={yOf(t)} dy=\"0.32em\" textAnchor=\"end\">\n\t\t\t\t\t\t\t\t{axis(t)}\n\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t))}\n\t\t\t\t\t{series.map((s, si) =>\n\t\t\t\t\t\tisBar ? (\n\t\t\t\t\t\t\ts.points.map((p, i) => {\n\t\t\t\t\t\t\t\tconst bw = Math.min((step * 0.7) / series.length, 48);\n\t\t\t\t\t\t\t\tconst x = xOf(i) - (bw * series.length) / 2 + si * bw;\n\t\t\t\t\t\t\t\tconst y = yOf(p.y as number);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<g key={`${si}-${i}`}>\n\t\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\t\tclassName={`an-w-s${si % 4}${hover !== null && hover !== i ? ' is-dim' : ''}`}\n\t\t\t\t\t\t\t\t\t\t\tx={x + 1}\n\t\t\t\t\t\t\t\t\t\t\ty={Math.min(y, zero)}\n\t\t\t\t\t\t\t\t\t\t\twidth={Math.max(bw - 2, 1)}\n\t\t\t\t\t\t\t\t\t\t\theight={Math.max(Math.abs(zero - y), 1)}\n\t\t\t\t\t\t\t\t\t\t\trx={3}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{series.length === 1 && n <= 8 && (\n\t\t\t\t\t\t\t\t\t\t\t<text className=\"an-w-val\" x={x + bw / 2} y={Math.min(y, zero) - 6} textAnchor=\"middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{fmt(p.y as number)}\n\t\t\t\t\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<g key={si}>\n\t\t\t\t\t\t\t\t{(part.type === 'area' || series.length === 1) && (\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\tclassName={`an-w-area an-w-s${si % 4}`}\n\t\t\t\t\t\t\t\t\t\tfill={`url(#${gid}-${si % 4})`}\n\t\t\t\t\t\t\t\t\t\td={`M${xOf(0)},${zero} ${s.points.map((p, i) => `L${xOf(i)},${yOf(p.y as number)}`).join(' ')} L${xOf(s.points.length - 1)},${zero}Z`}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<polyline className={`an-w-line an-w-s${si % 4}`} points={s.points.map((p, i) => `${xOf(i)},${yOf(p.y as number)}`).join(' ')} />\n\t\t\t\t\t\t\t\t{s.points.map((p, i) =>\n\t\t\t\t\t\t\t\t\tshowDots || hover === i || (series.length === 1 && i === s.points.length - 1) ? (\n\t\t\t\t\t\t\t\t\t\t<circle key={i} className={`an-w-s${si % 4}`} cx={xOf(i)} cy={yOf(p.y as number)} r={hover === i ? 4.5 : 4} />\n\t\t\t\t\t\t\t\t\t) : null,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t),\n\t\t\t\t\t)}\n\t\t\t\t\t{lo < 0 && hi > 0 && <line className=\"an-w-zero\" x1={left} x2={W - right} y1={zero} y2={zero} />}\n\t\t\t\t\t{refY !== undefined && (\n\t\t\t\t\t\t<g className=\"an-w-ref\">\n\t\t\t\t\t\t\t<line x1={left} x2={W - right} y1={yOf(refY)} y2={yOf(refY)} />\n\t\t\t\t\t\t\t{str(ref?.label) && (\n\t\t\t\t\t\t\t\t<text x={W - right} y={yOf(refY) - 5} textAnchor=\"end\">\n\t\t\t\t\t\t\t\t\t{str(ref?.label)}\n\t\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</g>\n\t\t\t\t\t)}\n\t\t\t\t\t{xs.map((x, i) =>\n\t\t\t\t\t\ti % every === 0 ? (\n\t\t\t\t\t\t\t<text key={i} x={xOf(i)} y={H - 8} textAnchor=\"middle\">\n\t\t\t\t\t\t\t\t{x}\n\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t) : null,\n\t\t\t\t\t)}\n\t\t\t\t\t{hover !== null && !isBar && <line className=\"an-w-cross\" x1={tipX} x2={tipX} y1={top} y2={top + plotH} />}\n\t\t\t\t</svg>\n\t\t\t\t{hover !== null && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"an-w-tip\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: tipX,\n\t\t\t\t\t\t\ttransform: `translateX(${tipX > W / 2 ? 'calc(-100% - 10px)' : '10px'})`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<b>{xs[hover]}</b>\n\t\t\t\t\t\t{series.map((s, si) =>\n\t\t\t\t\t\t\ts.points[hover] ? (\n\t\t\t\t\t\t\t\t<span key={si}>\n\t\t\t\t\t\t\t\t\t<i className={`an-w-s${si % 4}`} />\n\t\t\t\t\t\t\t\t\t{series.length > 1 && `${s.name} `}\n\t\t\t\t\t\t\t\t\t<strong>{fmt(s.points[hover]!.y as number)}</strong>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : null,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{series.length > 1 && (\n\t\t\t\t<div className=\"an-w-legend\">\n\t\t\t\t\t{series.map((s, si) => (\n\t\t\t\t\t\t<span key={si}>\n\t\t\t\t\t\t\t<i className={`an-w-s${si % 4}`} />\n\t\t\t\t\t\t\t{s.name}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</figure>\n\t);\n}\n\n/** The default look of one part. `kids` is its children, already drawn. */\nfunction defaultPart(part: WidgetPart, kids: ReactNode, ctx: Ctx): ReactNode {\n\tconst onAsk = ctx.props.onAsk;\n\tswitch (part.component) {\n\t\tcase 'Column':\n\t\t\treturn <div className={`an-w-col an-w-gap-${['small', 'large'].includes(str(part.gap)) ? str(part.gap) : 'medium'}`}>{kids}</div>;\n\t\tcase 'Row':\n\t\t\treturn <div className={`an-w-row${part.scroll === true ? ' is-scroll' : ''}`}>{kids}</div>;\n\t\tcase 'Card': {\n\t\t\tconst image = ctx.url(part.image, 'image');\n\t\t\tconst href = ctx.url(part.href, 'link');\n\t\t\tconst actionHref = ctx.url(part.actionHref, 'link');\n\t\t\tconst actionLabel = str(part.actionLabel);\n\t\t\tif (actionHref && actionLabel) {\n\t\t\t\t// The card's one button (\"Add to cart\") is a link beside the card's\n\t\t\t\t// own link, never inside it.\n\t\t\t\tconst inner = (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{image && <img src={image} alt={str(part.imageAlt)} referrerPolicy=\"no-referrer\" loading=\"lazy\" />}\n\t\t\t\t\t\t<div className=\"an-w-card-body\">{kids}</div>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"an-w-card has-action\">\n\t\t\t\t\t\t{href ? (\n\t\t\t\t\t\t\t<a className=\"an-w-card-main\" href={href} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t\t{inner}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"an-w-card-main\">{inner}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<a className=\"an-w-card-action\" href={actionHref} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t{actionLabel}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst body = (\n\t\t\t\t<div className=\"an-w-card\">\n\t\t\t\t\t{image && <img src={image} alt={str(part.imageAlt)} referrerPolicy=\"no-referrer\" loading=\"lazy\" />}\n\t\t\t\t\t<div className=\"an-w-card-body\">{kids}</div>\n\t\t\t\t</div>\n\t\t\t);\n\t\t\treturn href ? (\n\t\t\t\t<a className=\"an-w-card-link\" href={href} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t{body}\n\t\t\t\t</a>\n\t\t\t) : (\n\t\t\t\tbody\n\t\t\t);\n\t\t}\n\t\tcase 'Text': {\n\t\t\tif (!str(part.text)) return null;\n\t\t\tconst v = ['title', 'heading', 'caption'].includes(str(part.variant)) ? str(part.variant) : 'body';\n\t\t\treturn <p className={`an-w-text is-${v}`}>{str(part.text)}</p>;\n\t\t}\n\t\tcase 'Stat':\n\t\t\tif (!str(part.value)) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-stat\">\n\t\t\t\t\t{str(part.label) && <span>{str(part.label)}</span>}\n\t\t\t\t\t<strong>{str(part.value)}</strong>\n\t\t\t\t\t{str(part.caption) && <small>{caption(str(part.caption))}</small>}\n\t\t\t\t</div>\n\t\t\t);\n\t\tcase 'KeyValue': {\n\t\t\tconst rows = list<{\n\t\t\t\tlabel?: unknown;\n\t\t\t\tvalue?: unknown;\n\t\t\t\temphasis?: unknown;\n\t\t\t}>(part.rows).filter((r) => str(r?.label) || str(r?.value));\n\t\t\tif (rows.length === 0) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-kv\">\n\t\t\t\t\t{str(part.title) && <div className=\"an-w-title\">{str(part.title)}</div>}\n\t\t\t\t\t<dl>\n\t\t\t\t\t\t{rows.map((r, i) => (\n\t\t\t\t\t\t\t<div key={i} className={r?.emphasis ? 'is-total' : undefined}>\n\t\t\t\t\t\t\t\t<dt>{str(r?.label)}</dt>\n\t\t\t\t\t\t\t\t<dd>{str(r?.value)}</dd>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</dl>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\tcase 'Table': {\n\t\t\tconst cols = list(part.columns).map(str);\n\t\t\tconst rows = list(part.rows).filter(Array.isArray) as unknown[][];\n\t\t\tif (cols.length === 0 && rows.length === 0) return null;\n\t\t\t// A column is numeric when every filled cell is a figure (\"521.91\", \"-1.55%\", \"$3.2B\"),\n\t\t\t// and then its header lines up with its numbers on the right.\n\t\t\tconst figure = (c: unknown) => typeof c === 'number' || (typeof c === 'string' && /^[+\\-\\u2212]?[$\\u20ac\\u00a3\\u20b9]?\\d[\\d,.]*\\s?[%KMBTx]?$/.test(c.trim()));\n\t\t\tconst numCol = (j: number) => {\n\t\t\t\tconst filled = rows.map((r) => r[j]).filter((c) => c !== null && c !== undefined && c !== '');\n\t\t\t\treturn filled.length > 0 && filled.every(figure);\n\t\t\t};\n\t\t\tconst nums = Array.from({ length: Math.max(cols.length, ...rows.map((r) => r.length)) }, (_, j) => numCol(j));\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-table\">\n\t\t\t\t\t{str(part.title) && (\n\t\t\t\t\t\t<div className=\"an-w-title\">\n\t\t\t\t\t\t\t{str(part.title)}\n\t\t\t\t\t\t\t{rows.length > 3 && <span>{rows.length} rows</span>}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<table>\n\t\t\t\t\t\t{cols.length > 0 && (\n\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t{cols.map((c, j) => (\n\t\t\t\t\t\t\t\t\t\t<th key={j} className={nums[j] ? 'is-num' : undefined}>\n\t\t\t\t\t\t\t\t\t\t\t{c}\n\t\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t{rows.map((r, i) => (\n\t\t\t\t\t\t\t\t<tr key={i}>\n\t\t\t\t\t\t\t\t\t{r.map((c, j) => (\n\t\t\t\t\t\t\t\t\t\t<td key={j} className={nums[j] ? 'is-num' : undefined}>\n\t\t\t\t\t\t\t\t\t\t\t{typeof c === 'string' && /^[+\\-\\u2212]\\d/.test(c.trim()) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<em className={/^\\+/.test(c.trim()) ? 'is-up' : 'is-down'}>{c}</em>\n\t\t\t\t\t\t\t\t\t\t\t) : typeof c === 'number' ? (\n\t\t\t\t\t\t\t\t\t\t\t\tctx.number(c)\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\tstr(c)\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\tcase 'Chart':\n\t\t\treturn <Chart part={part} ctx={ctx} />;\n\t\tcase 'Image': {\n\t\t\tconst url = ctx.url(part.url, 'image');\n\t\t\treturn url ? (\n\t\t\t\t<figure className=\"an-w-image\">\n\t\t\t\t\t<img src={url} alt={str(part.alt)} referrerPolicy=\"no-referrer\" loading=\"lazy\" />\n\t\t\t\t\t{str(part.caption) && <figcaption>{str(part.caption)}</figcaption>}\n\t\t\t\t</figure>\n\t\t\t) : null;\n\t\t}\n\t\tcase 'List': {\n\t\t\tconst items = list<{\n\t\t\t\ttitle?: unknown;\n\t\t\t\tdetail?: unknown;\n\t\t\t\tmeta?: unknown;\n\t\t\t\ttone?: unknown;\n\t\t\t}>(part.items).filter((it) => str(it?.title));\n\t\t\tif (items.length === 0) return null;\n\t\t\tconst Tag = part.ordered === true ? 'ol' : 'ul';\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-list\">\n\t\t\t\t\t{str(part.title) && <div className=\"an-w-title\">{str(part.title)}</div>}\n\t\t\t\t\t<Tag>\n\t\t\t\t\t\t{items.map((it, i) => (\n\t\t\t\t\t\t\t<li key={i}>\n\t\t\t\t\t\t\t\t<i className={`an-w-dot is-${toneOf(it?.tone)}`} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<strong>{str(it?.title)}</strong>\n\t\t\t\t\t\t\t\t\t{str(it?.detail) && <span>{str(it?.detail)}</span>}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{str(it?.meta) && <small>{str(it?.meta)}</small>}\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Tag>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\tcase 'Note':\n\t\t\tif (!str(part.text)) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-note\">\n\t\t\t\t\t{str(part.title) && <strong>{str(part.title)}</strong>}\n\t\t\t\t\t<span>{str(part.text)}</span>\n\t\t\t\t</div>\n\t\t\t);\n\t\tcase 'Badge':\n\t\t\treturn str(part.text) ? <span className={`an-w-badge is-${toneOf(part.tone)}`}>{str(part.text)}</span> : null;\n\t\tcase 'Link': {\n\t\t\tconst url = ctx.url(part.url, 'link');\n\t\t\treturn url && str(part.label) ? (\n\t\t\t\t<a className=\"an-w-link\" href={url} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t{str(part.label)}\n\t\t\t\t</a>\n\t\t\t) : null;\n\t\t}\n\t\tcase 'Button':\n\t\t\tif (!str(part.label)) return null;\n\t\t\treturn (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={`an-w-button is-${part.variant === 'secondary' ? 'secondary' : 'primary'}`}\n\t\t\t\t\tdisabled={!onAsk}\n\t\t\t\t\tonClick={() => onAsk?.(str(part.label))}\n\t\t\t\t>\n\t\t\t\t\t{str(part.label)}\n\t\t\t\t</button>\n\t\t\t);\n\t\tcase 'Suggestions': {\n\t\t\tconst options = list(part.options).map(str).filter(Boolean);\n\t\t\tif (options.length === 0) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"an-w-suggest\">\n\t\t\t\t\t{options.map((o, i) => (\n\t\t\t\t\t\t<button key={i} type=\"button\" disabled={!onAsk} onClick={() => onAsk?.(o)}>\n\t\t\t\t\t\t\t{o}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\tcase 'Divider':\n\t\t\treturn <hr className=\"an-w-divider\" />;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nconst CONTAINERS = new Set(['Column', 'Row', 'Card']);\n\n// A plain function, not a component: the set of parts already drawn lives for\n// one render of the widget. As a component, React's development mode would draw\n// each part twice and find every one \"already drawn\" on its second pass.\nfunction draw(id: string, ctx: Ctx): ReactNode {\n\tconst part = ctx.byId.get(id);\n\t// A part listed twice, or a loop of containers, is drawn once.\n\tif (!part || ctx.seen.has(id)) return null;\n\tctx.seen.add(id);\n\tconst kids = CONTAINERS.has(part.component)\n\t\t? list(part.children)\n\t\t\t\t.filter((k): k is string => typeof k === 'string')\n\t\t\t\t.map((k) => <Fragment key={k}>{draw(k, ctx)}</Fragment>)\n\t\t: undefined;\n\tconst own = ctx.props.parts?.[part.component as WidgetKind];\n\treturn own ? own({ part, children: kids, onAsk: ctx.props.onAsk }) : defaultPart(part, kids, ctx);\n}\n\n/** Whether a part draws anything: a part that is not a container does; a\n * container only through a child that does (a Card through its picture too).\n * A part listed twice, or a loop, counts once. */\nfunction drawsSomething(id: string, byId: Map<string, WidgetPart>, seen = new Set<string>()): boolean {\n\tconst part = byId.get(id);\n\tif (!part || seen.has(id)) return false;\n\tseen.add(id);\n\tif (!CONTAINERS.has(part.component)) return true;\n\tif (part.component === 'Card' && part.image) return true;\n\treturn list(part.children).some((k) => typeof k === 'string' && drawsSomething(k, byId, seen));\n}\n\n/** One widget, drawn from its root part. Draws nothing when there is no root\n * yet, or nothing in it to draw: a container that lists none of its parts\n * drew an empty frame (Complexity, 2026-11-02, a root Column with no children). */\nexport function WidgetView(props: WidgetViewProps) {\n\tconst { widget, currency = 'USD', locale, allowUrl } = props;\n\tconst byId = new Map<string, WidgetPart>();\n\tfor (const p of Array.isArray(widget?.components) ? widget.components : []) {\n\t\tif (p && typeof p === 'object' && typeof p.id === 'string' && typeof p.component === 'string' && !byId.has(p.id)) byId.set(p.id, p);\n\t}\n\tif (!drawsSomething('root', byId)) return null;\n\tlet moneyFormat: Intl.NumberFormat;\n\ttry {\n\t\tmoneyFormat = new Intl.NumberFormat(locale, {\n\t\t\tstyle: 'currency',\n\t\t\tcurrency,\n\t\t\tmaximumFractionDigits: 0,\n\t\t});\n\t} catch {\n\t\tmoneyFormat = new Intl.NumberFormat(locale, { maximumFractionDigits: 0 });\n\t}\n\tconst numberFormat = new Intl.NumberFormat(locale);\n\tconst ctx: Ctx = {\n\t\tbyId,\n\t\tseen: new Set(),\n\t\tprops,\n\t\tmoney: (n) => moneyFormat.format(n),\n\t\tnumber: (n) => numberFormat.format(n),\n\t\turl: (v, use) => (typeof v === 'string' && httpsOnly(v) && (allowUrl ? allowUrl(v, use) : true) ? v : undefined),\n\t};\n\treturn (\n\t\t<Boundary>\n\t\t\t<div className={`an-w${props.className ? ` ${props.className}` : ''}`} data-surface={widget.surfaceId}>\n\t\t\t\t{draw('root', ctx)}\n\t\t\t</div>\n\t\t</Boundary>\n\t);\n}\n\nfunction Paragraphs({ text }: { text: string }) {\n\treturn (\n\t\t<>\n\t\t\t{text\n\t\t\t\t.trim()\n\t\t\t\t.split(/\\n{2,}/)\n\t\t\t\t.map((p, i) => (\n\t\t\t\t\t<p key={i} className=\"an-reply-text\">\n\t\t\t\t\t\t{p.split('\\n').map((line, j) => (\n\t\t\t\t\t\t\t<Fragment key={j}>\n\t\t\t\t\t\t\t\t{j > 0 && <br />}\n\t\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</p>\n\t\t\t\t))}\n\t\t</>\n\t);\n}\n\n/** A whole reply: its words, with each widget drawn where it sits. */\nexport function ReplyView({ text, widgets, renderText, className, ...widgetProps }: ReplyViewProps) {\n\treturn (\n\t\t<div className={`an-reply${className ? ` ${className}` : ''}`}>\n\t\t\t{placeWidgets(text, widgets ?? []).map((piece, i) =>\n\t\t\t\tpiece.kind === 'text' ? (\n\t\t\t\t\t<Fragment key={`t${i}`}>{renderText ? renderText(piece.text) : <Paragraphs text={piece.text} />}</Fragment>\n\t\t\t\t) : (\n\t\t\t\t\t<WidgetView key={piece.widget.surfaceId} widget={piece.widget} {...widgetProps} />\n\t\t\t\t),\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"]}
package/secret.d.ts CHANGED
@@ -8,7 +8,7 @@ import type { SecretMeta } from './types.ts';
8
8
  * you carried around as a string.
9
9
  *
10
10
  * ```ts
11
- * const key = await ws.secrets.create({ name: 'APOLLO_API_KEY', value, endUserId });
11
+ * const key = await agent.endUser(id).secrets.create({ name: 'APOLLO_API_KEY', value });
12
12
  * await key.update('rotated-value');
13
13
  * await key.delete();
14
14
  * ```
package/secret.js CHANGED
@@ -7,7 +7,7 @@
7
7
  * you carried around as a string.
8
8
  *
9
9
  * ```ts
10
- * const key = await ws.secrets.create({ name: 'APOLLO_API_KEY', value, endUserId });
10
+ * const key = await agent.endUser(id).secrets.create({ name: 'APOLLO_API_KEY', value });
11
11
  * await key.update('rotated-value');
12
12
  * await key.delete();
13
13
  * ```
package/secret.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"secret.js","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAKnD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,MAAM;IACT,EAAE,CAAS;IACX,KAAK,CAAO;IACb,QAAQ,CAAc;IAE9B,YAAY,IAAU,EAAE,EAAU,EAAE,QAAqB;QACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACxC,CAAC;IAED,iEAAiE;IACjE,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;IAC5B,CAAC;IAED,8EAA8E;IAC9E,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC/B,CAAC;IAED,0DAA0D;IAC1D,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,wEAAwE;IACxE,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;IACjC,CAAC;IAED;;;;;oBAKgB;IAChB,KAAK,CAAC,GAAG;QACR,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAC/B,eAAe,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAC5C,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IAED;kDAC8C;IAC9C,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,WAAoB;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CACjC,eAAe,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAC5C,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAC5D,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;iFAE6E;IAC7E,KAAK,CAAC,eAAe,CAAC,KAAe;QACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,eAAe,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE;YACrH,YAAY,EAAE,KAAK;SACnB,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM;QACX,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;CACD","sourcesContent":["// A secret: a value your agents use and never see.\n\nimport type { Http } from './http.ts';\nimport type { SecretMeta } from './types.ts';\n\n/**\n * A stored value you hold and act on.\n *\n * A CLASS, for the same reason `Account` is: everything else in this SDK is\n * a thing you hold, and a secret was the odd one out, a bare record with an id\n * you carried around as a string.\n *\n * ```ts\n * const key = await ws.secrets.create({ name: 'APOLLO_API_KEY', value, endUserId });\n * await key.update('rotated-value');\n * await key.delete();\n * ```\n *\n * NOTHING READS THE VALUE BACK, including you. There is no `value` here and no\n * method that returns one. That is deliberate rather than an omission: a value\n * you can read is a value that ends up in a log. The agent substitutes it on\n * the server at the moment a call goes out.\n */\nexport class Secret {\n\treadonly id: string;\n\treadonly #http: Http;\n\tprivate snapshot?: SecretMeta;\n\n\tconstructor(http: Http, id: string, snapshot?: SecretMeta) {\n\t\tthis.#http = http;\n\t\tthis.id = id;\n\t\tif (snapshot) this.snapshot = snapshot;\n\t}\n\n\t/** The name an agent references it by, as `{{secrets.NAME}}`. */\n\tget name(): string | undefined {\n\t\treturn this.snapshot?.name;\n\t}\n\n\t/** The agent this is scoped to, or null when the whole workspace reads it. */\n\tget agentId(): string | null | undefined {\n\t\treturn this.snapshot?.agentId;\n\t}\n\n\t/** The last-known record. Values are never part of it. */\n\tget data(): SecretMeta | undefined {\n\t\treturn this.snapshot;\n\t}\n\n\t/** The end user this belongs to, or null when it is the workspace's. */\n\tget endUserId(): string | null | undefined {\n\t\treturn this.snapshot?.endUserId;\n\t}\n\n\t/** Read it back: name, scope, owner, timestamps. Never the value.\n\t *\n\t * `ws.secret(id)` builds a handle that knows only its id, and until this\n\t * existed there was no way for it to learn anything else. Attaching a secret\n\t * needs its NAME, so a handle that could not answer that could not be\n\t * attached. */\n\tasync get(): Promise<SecretMeta> {\n\t\tconst res = await this.#http.get<{ secret?: SecretMeta } & SecretMeta>(\n\t\t\t`/v1/secrets/${encodeURIComponent(this.id)}`,\n\t\t);\n\t\tconst meta = res.secret ?? res;\n\t\tthis.snapshot = meta;\n\t\treturn meta;\n\t}\n\n\t/** Replace the value. The name and scope do not move: rotating a key must\n\t * not silently become a different secret. */\n\tasync update(value: string, description?: string): Promise<Secret> {\n\t\tconst res = await this.#http.patch<{ secret?: SecretMeta } & SecretMeta>(\n\t\t\t`/v1/secrets/${encodeURIComponent(this.id)}`,\n\t\t\t{ value, ...(description !== undefined && { description }) },\n\t\t);\n\t\tthis.snapshot = res.secret ?? res;\n\t\treturn this;\n\t}\n\n\t/** The only hosts a tool may send this key to, replacing the list. The one\n\t * deliberate way to send a key to a second host: saving a tool never adds\n\t * one. `[]` unpins it, so the next tool saved with it pins its own host. */\n\tasync setAllowedHosts(hosts: string[]): Promise<Secret> {\n\t\tconst res = await this.#http.put<{ secret?: SecretMeta }>(`/v1/secrets/${encodeURIComponent(this.id)}/allowed-hosts`, {\n\t\t\tallowedHosts: hosts,\n\t\t});\n\t\tif (res.secret) this.snapshot = res.secret;\n\t\treturn this;\n\t}\n\n\t/** The hosts a tool may send it to, as last read. */\n\tget allowedHosts(): string[] | undefined {\n\t\treturn this.snapshot?.allowedHosts;\n\t}\n\n\tasync delete(): Promise<void> {\n\t\tawait this.#http.delete(`/v1/secrets/${encodeURIComponent(this.id)}`);\n\t}\n}\n"]}
1
+ {"version":3,"file":"secret.js","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAKnD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,MAAM;IACT,EAAE,CAAS;IACX,KAAK,CAAO;IACb,QAAQ,CAAc;IAE9B,YAAY,IAAU,EAAE,EAAU,EAAE,QAAqB;QACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACxC,CAAC;IAED,iEAAiE;IACjE,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;IAC5B,CAAC;IAED,8EAA8E;IAC9E,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC/B,CAAC;IAED,0DAA0D;IAC1D,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,wEAAwE;IACxE,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;IACjC,CAAC;IAED;;;;;oBAKgB;IAChB,KAAK,CAAC,GAAG;QACR,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAC/B,eAAe,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAC5C,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IAED;kDAC8C;IAC9C,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,WAAoB;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CACjC,eAAe,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAC5C,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAC5D,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;iFAE6E;IAC7E,KAAK,CAAC,eAAe,CAAC,KAAe;QACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,eAAe,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE;YACrH,YAAY,EAAE,KAAK;SACnB,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM;QACX,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;CACD","sourcesContent":["// A secret: a value your agents use and never see.\n\nimport type { Http } from './http.ts';\nimport type { SecretMeta } from './types.ts';\n\n/**\n * A stored value you hold and act on.\n *\n * A CLASS, for the same reason `Account` is: everything else in this SDK is\n * a thing you hold, and a secret was the odd one out, a bare record with an id\n * you carried around as a string.\n *\n * ```ts\n * const key = await agent.endUser(id).secrets.create({ name: 'APOLLO_API_KEY', value });\n * await key.update('rotated-value');\n * await key.delete();\n * ```\n *\n * NOTHING READS THE VALUE BACK, including you. There is no `value` here and no\n * method that returns one. That is deliberate rather than an omission: a value\n * you can read is a value that ends up in a log. The agent substitutes it on\n * the server at the moment a call goes out.\n */\nexport class Secret {\n\treadonly id: string;\n\treadonly #http: Http;\n\tprivate snapshot?: SecretMeta;\n\n\tconstructor(http: Http, id: string, snapshot?: SecretMeta) {\n\t\tthis.#http = http;\n\t\tthis.id = id;\n\t\tif (snapshot) this.snapshot = snapshot;\n\t}\n\n\t/** The name an agent references it by, as `{{secrets.NAME}}`. */\n\tget name(): string | undefined {\n\t\treturn this.snapshot?.name;\n\t}\n\n\t/** The agent this is scoped to, or null when the whole workspace reads it. */\n\tget agentId(): string | null | undefined {\n\t\treturn this.snapshot?.agentId;\n\t}\n\n\t/** The last-known record. Values are never part of it. */\n\tget data(): SecretMeta | undefined {\n\t\treturn this.snapshot;\n\t}\n\n\t/** The end user this belongs to, or null when it is the workspace's. */\n\tget endUserId(): string | null | undefined {\n\t\treturn this.snapshot?.endUserId;\n\t}\n\n\t/** Read it back: name, scope, owner, timestamps. Never the value.\n\t *\n\t * `ws.secret(id)` builds a handle that knows only its id, and until this\n\t * existed there was no way for it to learn anything else. Attaching a secret\n\t * needs its NAME, so a handle that could not answer that could not be\n\t * attached. */\n\tasync get(): Promise<SecretMeta> {\n\t\tconst res = await this.#http.get<{ secret?: SecretMeta } & SecretMeta>(\n\t\t\t`/v1/secrets/${encodeURIComponent(this.id)}`,\n\t\t);\n\t\tconst meta = res.secret ?? res;\n\t\tthis.snapshot = meta;\n\t\treturn meta;\n\t}\n\n\t/** Replace the value. The name and scope do not move: rotating a key must\n\t * not silently become a different secret. */\n\tasync update(value: string, description?: string): Promise<Secret> {\n\t\tconst res = await this.#http.patch<{ secret?: SecretMeta } & SecretMeta>(\n\t\t\t`/v1/secrets/${encodeURIComponent(this.id)}`,\n\t\t\t{ value, ...(description !== undefined && { description }) },\n\t\t);\n\t\tthis.snapshot = res.secret ?? res;\n\t\treturn this;\n\t}\n\n\t/** The only hosts a tool may send this key to, replacing the list. The one\n\t * deliberate way to send a key to a second host: saving a tool never adds\n\t * one. `[]` unpins it, so the next tool saved with it pins its own host. */\n\tasync setAllowedHosts(hosts: string[]): Promise<Secret> {\n\t\tconst res = await this.#http.put<{ secret?: SecretMeta }>(`/v1/secrets/${encodeURIComponent(this.id)}/allowed-hosts`, {\n\t\t\tallowedHosts: hosts,\n\t\t});\n\t\tif (res.secret) this.snapshot = res.secret;\n\t\treturn this;\n\t}\n\n\t/** The hosts a tool may send it to, as last read. */\n\tget allowedHosts(): string[] | undefined {\n\t\treturn this.snapshot?.allowedHosts;\n\t}\n\n\tasync delete(): Promise<void> {\n\t\tawait this.#http.delete(`/v1/secrets/${encodeURIComponent(this.id)}`);\n\t}\n}\n"]}
package/types.d.ts CHANGED
@@ -545,6 +545,9 @@ export interface AccountData {
545
545
  /** The end user it belongs to, when `owner` is `'end-user'`. An id from YOUR
546
546
  * database, never a workspace member's. */
547
547
  endUserId?: string;
548
+ /** The agent that end user belongs to, when `owner` is `'end-user'`: the same id
549
+ * on another agent is another person. */
550
+ agentId?: string;
548
551
  connectedAt: string | null;
549
552
  lastCheckedAt: string | null;
550
553
  /** The agents whose setup names this account. Empty for an end user's
@@ -748,6 +751,17 @@ export interface Message {
748
751
  at: string;
749
752
  /** The widgets in an assistant reply, when it has any. */
750
753
  widgets?: Widget[];
754
+ /** The files sent with a question, when it had any: name, kind and type,
755
+ * never the bytes. `content` stays the words that were typed. */
756
+ attachments?: SentAttachment[];
757
+ }
758
+ /** A file that was sent with a question, as a read of the conversation returns it. */
759
+ export interface SentAttachment {
760
+ kind: 'image' | 'file';
761
+ name?: string;
762
+ mimeType: string;
763
+ /** Decoded size, in bytes. */
764
+ sizeBytes: number;
751
765
  }
752
766
  /** An image goes to the model as an image. Anything else is written into the
753
767
  * conversation's drive before the turn starts, so the agent can parse it,
@@ -962,7 +976,7 @@ export interface SpecInput extends Omit<AgentFields, 'workflows'> {
962
976
  * key should be able to do on their behalf. */
963
977
  export interface WorkspaceMember {
964
978
  /** A PLATFORM user id (`usr_...`), issued by us. Never pass this to
965
- * `agent.start({ endUserId })` or `ws.endUser()`. */
979
+ * `agent.start({ endUserId })` or `agent.endUser()`. */
966
980
  userId: string;
967
981
  email: string;
968
982
  name: string | null;