@actioneer/ads 0.3.0 → 0.4.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.
Files changed (35) hide show
  1. package/components/ai-elements/agent-trace.d.ts +87 -0
  2. package/components/ai-elements/agent-trace.js +180 -0
  3. package/components/ai-elements/chain-of-thought.d.ts +25 -5
  4. package/components/ai-elements/chain-of-thought.js +227 -183
  5. package/components/ai-elements/index.d.ts +1 -0
  6. package/components/ai-elements/research-activity.d.ts +17 -0
  7. package/components/ai-elements/research-activity.js +125 -107
  8. package/components/ai-elements/task.d.ts +7 -3
  9. package/components/ai-elements/task.js +84 -52
  10. package/components/ai-elements/tool.js +19 -19
  11. package/components/ai-elements/voice.d.ts +28 -12
  12. package/components/ai-elements/voice.js +270 -649
  13. package/components/alert.js +28 -16
  14. package/components/assistant-ui/composer-harness.js +5 -4
  15. package/components/code-block.d.ts +11 -5
  16. package/components/code-block.js +161 -62
  17. package/components/index.js +259 -257
  18. package/components/scroll-area.js +10 -10
  19. package/components/sidebar.js +1 -1
  20. package/components/stepper.d.ts +17 -9
  21. package/components/stepper.js +85 -96
  22. package/lib/icons.js +2 -2
  23. package/lib/motion.d.ts +2 -0
  24. package/lib/motion.js +21 -20
  25. package/llms.txt +7 -1
  26. package/manifest.json +69 -6
  27. package/package.json +1 -1
  28. package/styles.css +110 -4
  29. package/theme.css +12 -4
  30. package/components/agents-ui/agent-audio-visualizer-aura.d.ts +0 -11
  31. package/components/agents-ui/agent-audio-visualizer-aura.js +0 -277
  32. package/components/agents-ui/agent-audio-visualizer-wave.d.ts +0 -12
  33. package/components/agents-ui/agent-audio-visualizer-wave.js +0 -203
  34. package/components/agents-ui/react-shader-toy.d.ts +0 -87
  35. package/components/agents-ui/react-shader-toy.js +0 -531
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import { jsxs as u, jsx as e } from "react/jsx-runtime";
2
+ import { jsxs as m, jsx as e } from "react/jsx-runtime";
3
3
  import * as i from "react";
4
- import { cva as m } from "class-variance-authority";
4
+ import { cva as u } from "class-variance-authority";
5
5
  import { Info as l, WarningCircle as g, Warning as p, CheckCircle as x, Close as v } from "../lib/icons.js";
6
6
  import { cn as n } from "../lib/cn.js";
7
- const h = m(
7
+ const h = u(
8
8
  "flex w-full items-start gap-4 rounded-2xl bg-muted px-4 py-3",
9
9
  {
10
10
  variants: {
@@ -25,17 +25,17 @@ const h = m(
25
25
  danger: g,
26
26
  info: l
27
27
  }, N = i.forwardRef(
28
- ({ className: r, variant: t = "default", icon: a, onClose: s, children: o, ...c }, d) => {
29
- const f = w[t ?? "default"];
30
- return /* @__PURE__ */ u(
28
+ ({ className: t, variant: r = "default", icon: a, onClose: s, children: o, ...c }, d) => {
29
+ const f = w[r ?? "default"];
30
+ return /* @__PURE__ */ m(
31
31
  "div",
32
32
  {
33
33
  ref: d,
34
34
  role: "alert",
35
- className: n(h({ variant: t }), r),
35
+ className: n(h({ variant: r }), t),
36
36
  ...c,
37
37
  children: [
38
- /* @__PURE__ */ e("span", { className: "flex shrink-0 select-none items-center justify-center p-1 text-(--alert-accent) [&_svg]:size-4", children: a ?? /* @__PURE__ */ e(f, { "aria-hidden": !0 }) }),
38
+ /* @__PURE__ */ e("span", { className: "flex shrink-0 select-none items-center justify-center py-1 text-(--alert-accent) [&_svg]:size-4", children: a ?? /* @__PURE__ */ e(f, { "aria-hidden": !0 }) }),
39
39
  /* @__PURE__ */ e("div", { className: "flex min-w-0 grow flex-col items-start", children: o }),
40
40
  s && /* @__PURE__ */ e(
41
41
  "button",
@@ -58,19 +58,31 @@ const h = m(
58
58
  }
59
59
  );
60
60
  N.displayName = "Alert";
61
- const b = i.forwardRef(({ className: r, ...t }, a) => /* @__PURE__ */ e(
61
+ const y = i.forwardRef(({ className: t, ...r }, a) => /* @__PURE__ */ e(
62
62
  "p",
63
63
  {
64
64
  ref: a,
65
- className: n("text-xs font-medium leading-6 text-(--alert-accent)", r),
66
- ...t
65
+ className: n("text-xs font-medium leading-6 text-(--alert-accent)", t),
66
+ ...r
67
67
  }
68
68
  ));
69
- b.displayName = "AlertTitle";
70
- const y = i.forwardRef(({ className: r, ...t }, a) => /* @__PURE__ */ e("p", { ref: a, className: n("text-xs text-muted-foreground", r), ...t }));
71
- y.displayName = "AlertDescription";
69
+ y.displayName = "AlertTitle";
70
+ const b = i.forwardRef(({ className: t, ...r }, a) => (
71
+ // leading-normal (150%) — the description is the only part of an alert that
72
+ // regularly wraps, and the text-xs default (138%) sets multi-line copy too
73
+ // tight to scan.
74
+ /* @__PURE__ */ e(
75
+ "p",
76
+ {
77
+ ref: a,
78
+ className: n("text-xs leading-normal text-muted-foreground", t),
79
+ ...r
80
+ }
81
+ )
82
+ ));
83
+ b.displayName = "AlertDescription";
72
84
  export {
73
85
  N as Alert,
74
- y as AlertDescription,
75
- b as AlertTitle
86
+ b as AlertDescription,
87
+ y as AlertTitle
76
88
  };
@@ -71,6 +71,7 @@ import "../sidebar.js";
71
71
  import "../panel.js";
72
72
  import "../collapsible.js";
73
73
  import "../selection-action-bar.js";
74
+ import "../ai-elements/agent-trace.js";
74
75
  import "../ai-elements/chain-of-thought.js";
75
76
  import "../ai-elements/chart.js";
76
77
  import "../ai-elements/inline-citation.js";
@@ -121,7 +122,7 @@ const n = "application/x-actioneer-harness", S = [
121
122
  instructions: "Write a concise executive brief: lead with the decision or insight, use only decision-relevant evidence, and end with the recommended next action."
122
123
  }
123
124
  ];
124
- function hi() {
125
+ function gi() {
125
126
  const r = d(), t = u((i) => i.attachments), o = new Set(
126
127
  t.filter((i) => i.contentType === n).map((i) => i.name)
127
128
  ), s = (i) => {
@@ -164,7 +165,7 @@ function hi() {
164
165
  ] })
165
166
  ] });
166
167
  }
167
- class gi {
168
+ class bi {
168
169
  constructor() {
169
170
  p(this, "accept", n);
170
171
  }
@@ -197,7 +198,7 @@ ${o}
197
198
  }
198
199
  }
199
200
  export {
200
- hi as ComposerHarness,
201
+ gi as ComposerHarness,
201
202
  n as HARNESS_MIME,
202
- gi as HarnessAttachmentAdapter
203
+ bi as HarnessAttachmentAdapter
203
204
  };
@@ -10,10 +10,12 @@ import * as React from "react";
10
10
  * cap the height from the outside (`className="max-h-96"`) rather than letting
11
11
  * the page grow.
12
12
  *
13
- * There is no syntax highlighting: it would cost a highlighter dependency and
14
- * a second color language competing with the brand's monochrome. `language` is
15
- * a label, not a lexer. The mono face and tabular figures carry the "this is
16
- * code" signal.
13
+ * Highlighting is deliberately minimal and dependency-free: `language` selects
14
+ * one of a few small built-in grammars (sql, json, yaml, bash, ts/js) and only
15
+ * the parts a reader scans for are coloured — comments recede, strings and
16
+ * numbers take one accent each, keywords take weight. An unrecognised language
17
+ * renders plain rather than guessing. No highlighter library, and no rainbow
18
+ * competing with the brand's monochrome.
17
19
  */
18
20
  declare const codeBlockVariants: (props?: ({
19
21
  variant?: "soft" | "plain" | null | undefined;
@@ -21,7 +23,11 @@ declare const codeBlockVariants: (props?: ({
21
23
  export interface CodeBlockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children">, VariantProps<typeof codeBlockVariants> {
22
24
  /** The source to display, verbatim. */
23
25
  code: string;
24
- /** Language label for the header, e.g. `sql`. A label only — not a lexer. */
26
+ /**
27
+ * Language label for the header, e.g. `sql`. Also selects the highlighting
28
+ * grammar: sql · json · yaml · yml · bash/sh/shell/zsh · ts/tsx/js/jsx.
29
+ * Anything else is shown as a label and rendered plain.
30
+ */
25
31
  language?: string;
26
32
  /** Leading header label, e.g. `schema.yaml`. Takes the header's start slot. */
27
33
  filename?: string;
@@ -1,12 +1,14 @@
1
1
  "use client";
2
- import { jsxs as p, jsx as e } from "react/jsx-runtime";
3
- import * as r from "react";
4
- import { cva as k } from "class-variance-authority";
5
- import { Button as C } from "./button.js";
6
- import { Check as w, Copy as N } from "../lib/icons.js";
7
- import { cn as u } from "../lib/cn.js";
8
- const B = k(
9
- "group/code-block relative w-full overflow-hidden rounded-lg text-xs",
2
+ import { jsxs as m, jsx as r } from "react/jsx-runtime";
3
+ import * as c from "react";
4
+ import { cva as C } from "class-variance-authority";
5
+ import { Button as R } from "./button.js";
6
+ import { Check as E, Copy as S } from "../lib/icons.js";
7
+ import { cn as k } from "../lib/cn.js";
8
+ const j = C(
9
+ // `flex flex-col` so a height cap from the consumer squeezes the <pre>
10
+ // rather than clipping it — the pre is the scroll container, not this.
11
+ "group/code-block relative flex w-full flex-col overflow-hidden rounded-lg text-xs",
10
12
  {
11
13
  variants: {
12
14
  variant: {
@@ -18,110 +20,207 @@ const B = k(
18
20
  },
19
21
  defaultVariants: { variant: "soft" }
20
22
  }
21
- );
22
- function T(n = 2e3) {
23
- const [o, a] = r.useState(!1), t = r.useRef(null);
24
- r.useEffect(
23
+ ), f = '"(?:[^"\\\\\\n]|\\\\.)*"', h = "'(?:[^'\\\\\\n]|\\\\.)*'", T = {
24
+ sql: [
25
+ { kind: "comment", re: /--[^\n]*/y },
26
+ { kind: "string", re: new RegExp(h, "y") },
27
+ {
28
+ kind: "keyword",
29
+ re: /\b(select|from|where|create|table|index|concurrently|on|and|or|not|null|group|by|order|limit|offset|insert|into|values|update|set|delete|join|left|right|inner|outer|full|as|distinct|case|when|then|else|end|with|union|all|desc|asc|true|false|count|sum|avg|min|max|having)\b/iy
30
+ },
31
+ { kind: "number", re: /\b\d+(?:\.\d+)?\b/y },
32
+ { kind: "punct", re: /[(),;]/y }
33
+ ],
34
+ json: [
35
+ { kind: "string", re: new RegExp(f, "y") },
36
+ { kind: "keyword", re: /\b(?:true|false|null)\b/y },
37
+ { kind: "number", re: /-?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/y },
38
+ { kind: "punct", re: /[{}[\],:]/y }
39
+ ],
40
+ yaml: [
41
+ { kind: "comment", re: /#[^\n]*/y },
42
+ { kind: "string", re: new RegExp(`${f}|${h}`, "y") },
43
+ { kind: "keyword", re: /\b(?:true|false|null|yes|no)\b/y },
44
+ { kind: "number", re: /\b\d+(?:\.\d+)?\b/y },
45
+ { kind: "punct", re: /[-:]/y }
46
+ ],
47
+ bash: [
48
+ { kind: "comment", re: /#[^\n]*/y },
49
+ { kind: "string", re: new RegExp(`${f}|${h}`, "y") },
50
+ { kind: "keyword", re: /--?[A-Za-z][\w-]*/y },
51
+ { kind: "number", re: /\b\d+\b/y }
52
+ ],
53
+ ts: [
54
+ { kind: "comment", re: /\/\/[^\n]*|\/\*[\s\S]*?\*\//y },
55
+ { kind: "string", re: new RegExp(`${f}|${h}|\`(?:[^\`\\\\]|\\\\.)*\``, "y") },
56
+ {
57
+ kind: "keyword",
58
+ re: /\b(?:const|let|var|function|return|if|else|for|while|import|from|export|default|new|class|extends|implements|async|await|type|interface|enum|public|private|readonly|true|false|null|undefined|this)\b/y
59
+ },
60
+ { kind: "number", re: /\b\d+(?:\.\d+)?\b/y },
61
+ { kind: "punct", re: /[{}[\]();,:]/y }
62
+ ]
63
+ }, A = {
64
+ sql: "sql",
65
+ json: "json",
66
+ yaml: "yaml",
67
+ yml: "yaml",
68
+ bash: "bash",
69
+ sh: "bash",
70
+ shell: "bash",
71
+ zsh: "bash",
72
+ ts: "ts",
73
+ tsx: "ts",
74
+ js: "ts",
75
+ jsx: "ts",
76
+ javascript: "ts",
77
+ typescript: "ts"
78
+ }, $ = {
79
+ comment: "text-tertiary",
80
+ string: "text-success-700",
81
+ number: "text-info-700",
82
+ keyword: "font-bold text-foreground",
83
+ punct: "text-tertiary"
84
+ };
85
+ function B(s, t) {
86
+ const e = [];
87
+ let n = "", o = 0;
88
+ for (; o < s.length; ) {
89
+ let i = null;
90
+ for (const { kind: y, re: u } of t) {
91
+ u.lastIndex = o;
92
+ const l = u.exec(s);
93
+ if (l && l.index === o && l[0].length > 0) {
94
+ i = { text: l[0], kind: y };
95
+ break;
96
+ }
97
+ }
98
+ i ? (n && (e.push({ text: n }), n = ""), e.push(i), o += i.text.length) : (n += s[o], o += 1);
99
+ }
100
+ return n && e.push({ text: n }), e;
101
+ }
102
+ function z(s) {
103
+ const t = [[]];
104
+ for (const e of s)
105
+ e.text.split(`
106
+ `).forEach((o, i) => {
107
+ i > 0 && t.push([]), o && t[t.length - 1].push({ ...e, text: o });
108
+ });
109
+ return t;
110
+ }
111
+ function g(s) {
112
+ return s.map(
113
+ (t, e) => t.kind ? /* @__PURE__ */ r("span", { className: $[t.kind], children: t.text }, e) : /* @__PURE__ */ r(c.Fragment, { children: t.text }, e)
114
+ );
115
+ }
116
+ function M(s = 2e3) {
117
+ const [t, e] = c.useState(!1), n = c.useRef(null);
118
+ c.useEffect(
25
119
  () => () => {
26
- t.current !== null && window.clearTimeout(t.current);
120
+ n.current !== null && window.clearTimeout(n.current);
27
121
  },
28
122
  []
29
123
  );
30
- const c = r.useCallback(
124
+ const o = c.useCallback(
31
125
  (i) => {
32
126
  !i || typeof navigator > "u" || !navigator.clipboard || navigator.clipboard.writeText(i).then(
33
127
  () => {
34
- a(!0), t.current !== null && window.clearTimeout(t.current), t.current = window.setTimeout(
35
- () => a(!1),
36
- n
128
+ e(!0), n.current !== null && window.clearTimeout(n.current), n.current = window.setTimeout(
129
+ () => e(!1),
130
+ s
37
131
  );
38
132
  },
39
133
  () => {
40
134
  }
41
135
  );
42
136
  },
43
- [n]
137
+ [s]
44
138
  );
45
- return { isCopied: o, copy: c };
139
+ return { isCopied: t, copy: o };
46
140
  }
47
- const R = r.forwardRef(
141
+ const _ = c.forwardRef(
48
142
  ({
49
- className: n,
50
- code: o,
51
- language: a,
52
- filename: t,
53
- variant: c,
143
+ className: s,
144
+ code: t,
145
+ language: e,
146
+ filename: n,
147
+ variant: o,
54
148
  isCopyable: i = !0,
55
- showLineNumbers: l = !1,
56
- copyLabel: h = "Copy code",
57
- ...x
58
- }, y) => {
59
- const { isCopied: m, copy: v } = T(), d = !!(t || a), b = r.useMemo(
60
- () => l ? o.replace(/\n$/, "").split(`
61
- `) : [],
62
- [o, l]
63
- ), s = i ? /* @__PURE__ */ e(
64
- C,
149
+ showLineNumbers: y = !1,
150
+ copyLabel: u = "Copy code",
151
+ ...l
152
+ }, v) => {
153
+ const { isCopied: x, copy: N } = M(), b = !!(n || e), w = c.useMemo(() => {
154
+ const d = e ? T[A[e.toLowerCase()]] : void 0, a = t.replace(/\n$/, "");
155
+ return z(d ? B(a, d) : [{ text: a }]);
156
+ }, [t, e]), p = i ? /* @__PURE__ */ r(
157
+ R,
65
158
  {
66
159
  type: "button",
67
160
  variant: "ghost",
68
161
  size: "icon-xs",
69
- "aria-label": h,
70
- onClick: () => v(o),
71
- children: m ? /* @__PURE__ */ e(w, { "aria-hidden": !0, className: "text-success" }) : /* @__PURE__ */ e(N, { "aria-hidden": !0 })
162
+ "aria-label": u,
163
+ onClick: () => N(t),
164
+ children: x ? /* @__PURE__ */ r(E, { "aria-hidden": !0, className: "text-success" }) : /* @__PURE__ */ r(S, { "aria-hidden": !0 })
72
165
  }
73
166
  ) : null;
74
- return /* @__PURE__ */ p(
167
+ return /* @__PURE__ */ m(
75
168
  "div",
76
169
  {
77
- ref: y,
170
+ ref: v,
78
171
  "data-slot": "code-block",
79
- className: u(B({ variant: c }), n),
80
- ...x,
172
+ className: k(j({ variant: o }), s),
173
+ ...l,
81
174
  children: [
82
- /* @__PURE__ */ e("span", { "aria-live": "polite", className: "sr-only", children: m ? "Copied to clipboard" : "" }),
83
- d && /* @__PURE__ */ p(
175
+ /* @__PURE__ */ r("span", { "aria-live": "polite", className: "sr-only", children: x ? "Copied to clipboard" : "" }),
176
+ b && /* @__PURE__ */ m(
84
177
  "div",
85
178
  {
86
179
  "data-slot": "code-block-header",
87
180
  className: "flex items-center gap-2 px-3 py-1.5 text-tertiary",
88
181
  children: [
89
- t && /* @__PURE__ */ e("span", { className: "min-w-0 truncate font-medium text-secondary", children: t }),
90
- a && /* @__PURE__ */ e("span", { className: "shrink-0 font-mono text-[11px] uppercase", children: a }),
91
- s && /* @__PURE__ */ e("span", { className: "ml-auto shrink-0", children: s })
182
+ n && /* @__PURE__ */ r("span", { className: "min-w-0 truncate font-medium text-secondary", children: n }),
183
+ e && /* @__PURE__ */ r("span", { className: "shrink-0 font-mono text-[11px] uppercase", children: e }),
184
+ p && /* @__PURE__ */ r("span", { className: "ml-auto shrink-0", children: p })
92
185
  ]
93
186
  }
94
187
  ),
95
- !d && s && /* @__PURE__ */ e(
188
+ !b && p && /* @__PURE__ */ r(
96
189
  "span",
97
190
  {
98
- className: u(
191
+ className: k(
99
192
  "absolute top-1.5 right-1.5 z-10 opacity-0 transition-opacity duration-(--duration-fast) ease-out",
100
193
  "group-hover/code-block:opacity-100 focus-within:opacity-100",
101
194
  "motion-reduce:transition-none"
102
195
  ),
103
- children: s
196
+ children: p
104
197
  }
105
198
  ),
106
- /* @__PURE__ */ e(
199
+ /* @__PURE__ */ r(
107
200
  "pre",
108
201
  {
109
202
  "data-slot": "code-block-content",
110
- className: u(
111
- "overflow-x-auto px-3 leading-relaxed text-foreground tabular-nums",
112
- d ? "pb-3" : "py-3"
203
+ className: k(
204
+ // min-h-0 lets this shrink inside the flex column; without it a
205
+ // capped block clips its overflow instead of scrolling to it.
206
+ "min-h-0 overflow-auto px-3 leading-relaxed text-foreground tabular-nums",
207
+ b ? "pb-3" : "py-3"
113
208
  ),
114
- children: /* @__PURE__ */ e("code", { className: "font-mono", children: l ? b.map((g, f) => /* @__PURE__ */ p("span", { className: "grid grid-cols-[2ch_1fr] gap-3", children: [
115
- /* @__PURE__ */ e(
209
+ children: /* @__PURE__ */ r("code", { className: "font-mono", children: y ? w.map((d, a) => /* @__PURE__ */ m("span", { className: "grid grid-cols-[2ch_1fr] gap-3", children: [
210
+ /* @__PURE__ */ r(
116
211
  "span",
117
212
  {
118
213
  "aria-hidden": !0,
119
214
  className: "select-none text-right text-tertiary",
120
- children: f + 1
215
+ children: a + 1
121
216
  }
122
217
  ),
123
- /* @__PURE__ */ e("span", { children: g })
124
- ] }, f)) : o })
218
+ /* @__PURE__ */ r("span", { children: g(d) })
219
+ ] }, a)) : w.map((d, a) => /* @__PURE__ */ m(c.Fragment, { children: [
220
+ a > 0 && `
221
+ `,
222
+ g(d)
223
+ ] }, a)) })
125
224
  }
126
225
  )
127
226
  ]
@@ -129,8 +228,8 @@ const R = r.forwardRef(
129
228
  );
130
229
  }
131
230
  );
132
- R.displayName = "CodeBlock";
231
+ _.displayName = "CodeBlock";
133
232
  export {
134
- R as CodeBlock,
135
- B as codeBlockVariants
233
+ _ as CodeBlock,
234
+ j as codeBlockVariants
136
235
  };