@actioneer/ads 0.5.7 → 0.5.8

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 (140) hide show
  1. package/bin/ads-init.mjs +6 -0
  2. package/components/accordion.js +50 -48
  3. package/components/agent-icon.d.ts +12 -0
  4. package/components/agent-icon.js +133 -120
  5. package/components/ai-elements/chain-of-thought.d.ts +1 -1
  6. package/components/ai-elements/chain-of-thought.js +108 -108
  7. package/components/ai-elements/chart.js +16 -14
  8. package/components/ai-elements/inline-citation.js +41 -41
  9. package/components/ai-elements/message.js +4 -4
  10. package/components/ai-elements/queue.js +7 -7
  11. package/components/ai-elements/research-activity.js +114 -114
  12. package/components/ai-elements/shimmer.d.ts +2 -2
  13. package/components/ai-elements/speech-input.js +28 -28
  14. package/components/ai-elements/task-progress.js +26 -16
  15. package/components/ai-elements/task.js +17 -17
  16. package/components/ai-elements/tool.js +6 -6
  17. package/components/ai-elements/transcript.js +6 -5
  18. package/components/ai-elements/voice.js +1 -1
  19. package/components/alert.js +10 -10
  20. package/components/answer-sources.js +1 -1
  21. package/components/answer.js +115 -114
  22. package/components/assistant-ui/action-bar.js +94 -48
  23. package/components/assistant-ui/attachment.js +103 -75
  24. package/components/assistant-ui/badge.d.ts +1 -1
  25. package/components/assistant-ui/badge.js +17 -17
  26. package/components/assistant-ui/chain-of-thought.d.ts +1 -1
  27. package/components/assistant-ui/composer-add-context.js +9 -9
  28. package/components/assistant-ui/composer-deep-research.js +5 -5
  29. package/components/assistant-ui/composer-harness.js +11 -9
  30. package/components/assistant-ui/composer-trigger-popover.js +45 -34
  31. package/components/assistant-ui/composer.js +59 -59
  32. package/components/assistant-ui/error.js +14 -14
  33. package/components/assistant-ui/file.d.ts +1 -1
  34. package/components/assistant-ui/image.d.ts +1 -1
  35. package/components/assistant-ui/image.js +113 -103
  36. package/components/assistant-ui/markdown-text.js +18 -18
  37. package/components/assistant-ui/message.js +46 -45
  38. package/components/assistant-ui/quote.js +1 -1
  39. package/components/assistant-ui/reasoning.d.ts +1 -1
  40. package/components/assistant-ui/reasoning.js +66 -77
  41. package/components/assistant-ui/suggestions.js +4 -4
  42. package/components/assistant-ui/thread.js +22 -22
  43. package/components/assistant-ui/tool-fallback.js +60 -63
  44. package/components/assistant-ui/tool-group.d.ts +1 -1
  45. package/components/assistant-ui/tool-group.js +36 -42
  46. package/components/audio-waveform.js +25 -24
  47. package/components/autocomplete.d.ts +1 -0
  48. package/components/autocomplete.js +45 -43
  49. package/components/avatar.js +24 -24
  50. package/components/badge.d.ts +1 -1
  51. package/components/breadcrumbs.js +2 -2
  52. package/components/button.d.ts +2 -2
  53. package/components/button.js +22 -20
  54. package/components/card.js +8 -8
  55. package/components/carousel.js +105 -104
  56. package/components/chart.js +9 -7
  57. package/components/checkbox.js +74 -38
  58. package/components/chip.d.ts +1 -1
  59. package/components/code-block.js +3 -3
  60. package/components/collapsible.js +67 -23
  61. package/components/connector-card.js +6 -6
  62. package/components/drawer.d.ts +15 -10
  63. package/components/drawer.js +78 -77
  64. package/components/dropdown.d.ts +2 -0
  65. package/components/dropdown.js +88 -79
  66. package/components/empty-state.d.ts +1 -1
  67. package/components/empty-state.js +7 -7
  68. package/components/field.d.ts +4 -0
  69. package/components/field.js +45 -34
  70. package/components/file-dropzone.js +12 -12
  71. package/components/index.d.ts +3 -0
  72. package/components/index.js +584 -558
  73. package/components/input-field.js +51 -46
  74. package/components/input.js +20 -20
  75. package/components/link.js +9 -9
  76. package/components/modal.js +105 -73
  77. package/components/navbar.d.ts +1 -1
  78. package/components/navbar.js +1 -1
  79. package/components/number-field.js +38 -29
  80. package/components/page-header.js +12 -12
  81. package/components/pagination.js +19 -19
  82. package/components/panel.js +2 -2
  83. package/components/pixel-blast-svg.js +3 -3
  84. package/components/pixel-icon.js +0 -1
  85. package/components/popover.d.ts +1 -1
  86. package/components/popover.js +66 -64
  87. package/components/progress-circle.js +36 -32
  88. package/components/progress.js +28 -24
  89. package/components/radio.js +59 -49
  90. package/components/resizable-panel.js +1 -1
  91. package/components/reveal.d.ts +2 -2
  92. package/components/ripple.d.ts +3 -3
  93. package/components/scroll-area.js +17 -16
  94. package/components/segmented.js +26 -26
  95. package/components/select.d.ts +2 -0
  96. package/components/select.js +61 -57
  97. package/components/setting-row.js +45 -42
  98. package/components/sidebar.js +131 -127
  99. package/components/skeleton.js +5 -5
  100. package/components/spinner.d.ts +13 -4
  101. package/components/spinner.js +42 -42
  102. package/components/stepper.js +21 -21
  103. package/components/switch.js +41 -39
  104. package/components/table.d.ts +9 -0
  105. package/components/table.js +370 -247
  106. package/components/tabs.js +149 -137
  107. package/components/toast.js +66 -66
  108. package/components/tooltip.js +2 -2
  109. package/components/tree.js +62 -51
  110. package/components/typography.d.ts +2 -1
  111. package/components/typography.js +33 -32
  112. package/components/ui/button.d.ts +2 -2
  113. package/components/ui/button.js +19 -19
  114. package/components/ui/collapsible.d.ts +1 -5
  115. package/components/ui/dialog.d.ts +3 -3
  116. package/components/ui/dialog.js +95 -58
  117. package/components/ui/tooltip.d.ts +2 -2
  118. package/components/ui/tooltip.js +67 -33
  119. package/components/viz-charts.js +95 -95
  120. package/demo/components/add-to-artifact.js +341 -0
  121. package/demo/lib/artifact-library.js +134 -0
  122. package/fonts/aribau-grotesk-medium.woff2 +0 -0
  123. package/fonts/aribau-grotesk-regular.woff2 +0 -0
  124. package/fonts.css +11 -11
  125. package/hooks/agents-ui/use-agent-audio-visualizer-aura.js +17 -16
  126. package/hooks/agents-ui/use-agent-audio-visualizer-wave.js +21 -20
  127. package/lib/icons.d.ts +4 -0
  128. package/lib/icons.js +103 -102
  129. package/lib/motion.d.ts +42 -39
  130. package/lib/motion.js +112 -52
  131. package/lib/spinner-mark.d.ts +9 -0
  132. package/lib/spinner-mark.js +98 -0
  133. package/llms.txt +52 -18
  134. package/manifest.json +240 -31
  135. package/package.json +1 -1
  136. package/styles.css +143 -124
  137. package/theme.css +90 -93
  138. package/components/ui/collapsible.js +0 -35
  139. package/fonts/aribau-grotesk-500.otf +0 -0
  140. package/fonts/aribau-grotesk-600.woff2 +0 -0
@@ -2,8 +2,9 @@
2
2
  import { jsxs as l, jsx as r } from "react/jsx-runtime";
3
3
  import * as u from "react";
4
4
  import { Button as ee, buttonVariants as re } from "./button.js";
5
- import { Loader as te, Warning as ae, Pause as ne, Play as oe, Download as se } from "../lib/icons.js";
6
- import { cn as ie } from "../lib/cn.js";
5
+ import { Spinner as te } from "./spinner.js";
6
+ import { Warning as ae, Pause as ne, Play as oe, Download as ie } from "../lib/icons.js";
7
+ import { cn as se } from "../lib/cn.js";
7
8
  function A(t) {
8
9
  if (!t || !Number.isFinite(t) || t < 0) return "0:00";
9
10
  const e = Math.floor(t), a = Math.floor(e / 3600), c = Math.floor(e % 3600 / 60), d = e % 60;
@@ -18,7 +19,7 @@ function le(t, e, a) {
18
19
  const c = e != null && e.includes("wav") ? "wav" : e != null && e.includes("mpeg") ? "mp3" : "audio", d = ((m = t.split("/").filter(Boolean).at(-1)) == null ? void 0 : m.split("?")[0]) || "recording";
19
20
  return `${decodeURIComponent(d)}.${c}`;
20
21
  }
21
- function fe({
22
+ function ge({
22
23
  src: t,
23
24
  durationSeconds: e,
24
25
  contentType: a,
@@ -28,20 +29,20 @@ function fe({
28
29
  downloadName: U,
29
30
  className: V
30
31
  }) {
31
- const F = u.useRef(null), p = u.useRef(null), [G, b] = u.useState(0), [L, D] = u.useState(e ?? 0), [k, C] = u.useState(!1), [E, x] = u.useState(!1), [f, R] = u.useState(null), v = (c ?? 0) > 1, q = le(t, a, U);
32
+ const F = u.useRef(null), p = u.useRef(null), [G, b] = u.useState(0), [q, D] = u.useState(e ?? 0), [k, C] = u.useState(!1), [E, x] = u.useState(!1), [f, R] = u.useState(null), v = (c ?? 0) > 1, J = le(t, a, U);
32
33
  u.useEffect(() => {
33
34
  const o = F.current;
34
35
  if (!o) return;
35
36
  let M = !1;
36
37
  return b(0), D(e ?? 0), C(!1), x(!1), R(null), o.replaceChildren(), (async () => {
37
38
  try {
38
- const [{ default: w }, { default: K }] = await Promise.all([
39
+ const [{ default: w }, { default: L }] = await Promise.all([
39
40
  import("wavesurfer.js"),
40
41
  import("wavesurfer.js/dist/plugins/hover.esm.js")
41
42
  ]);
42
43
  if (M) return;
43
- const N = B(o, "--foreground", "currentColor"), O = B(o, "--muted-foreground", "currentColor"), Q = B(o, "--background", "Canvas"), X = (i, P) => {
44
- const Y = i[0] ?? [], Z = i[1] ?? i[0] ?? [], { width: _, height: T } = P.canvas, y = T / 2, S = 4, I = 2, $ = Math.max(1, Math.floor(_ / (S + I))), H = (n, g) => {
44
+ const N = B(o, "--foreground", "currentColor"), O = B(o, "--muted-foreground", "currentColor"), Q = B(o, "--background", "Canvas"), X = (s, P) => {
45
+ const Y = s[0] ?? [], Z = s[1] ?? s[0] ?? [], { width: _, height: T } = P.canvas, S = T / 2, y = 4, I = 2, $ = Math.max(1, Math.floor(_ / (y + I))), H = (n, g) => {
45
46
  if (!n.length) return 0;
46
47
  const h = Math.floor(g / $ * n.length), j = Math.max(h + 1, Math.floor((g + 1) / $ * n.length));
47
48
  let W = 0;
@@ -49,10 +50,10 @@ function fe({
49
50
  return W;
50
51
  };
51
52
  for (let n = 0; n < $; n++) {
52
- const g = n * (S + I), h = Math.max(1, H(Y, n) * (y - 2)), j = Math.max(1, H(Z, n) * (y - 2));
53
- P.fillRect(g, y - h, S, h), P.fillRect(g, y + 1, S, j);
53
+ const g = n * (y + I), h = Math.max(1, H(Y, n) * (S - 2)), j = Math.max(1, H(Z, n) * (S - 2));
54
+ P.fillRect(g, S - h, y, h), P.fillRect(g, S + 1, y, j);
54
55
  }
55
- }, s = w.create({
56
+ }, i = w.create({
56
57
  container: o,
57
58
  url: t,
58
59
  duration: e,
@@ -70,7 +71,7 @@ function fe({
70
71
  hideScrollbar: !0,
71
72
  renderFunction: v ? X : void 0,
72
73
  plugins: [
73
- K.create({
74
+ L.create({
74
75
  lineColor: N,
75
76
  labelColor: Q,
76
77
  labelBackground: N,
@@ -79,11 +80,11 @@ function fe({
79
80
  })
80
81
  ]
81
82
  });
82
- p.current = s, s.on("ready", (i) => {
83
- D(i), C(!0);
84
- }), s.on("timeupdate", (i) => b(i)), s.on("seeking", (i) => b(i)), s.on("play", () => x(!0)), s.on("pause", () => x(!1)), s.on("finish", () => {
85
- x(!1), b(s.getDuration());
86
- }), s.on("error", () => {
83
+ p.current = i, i.on("ready", (s) => {
84
+ D(s), C(!0);
85
+ }), i.on("timeupdate", (s) => b(s)), i.on("seeking", (s) => b(s)), i.on("play", () => x(!0)), i.on("pause", () => x(!1)), i.on("finish", () => {
86
+ x(!1), b(i.getDuration());
87
+ }), i.on("error", () => {
87
88
  R("Recording could not be loaded."), C(!1);
88
89
  });
89
90
  } catch {
@@ -94,17 +95,17 @@ function fe({
94
95
  M = !0, (w = p.current) == null || w.destroy(), p.current = null;
95
96
  };
96
97
  }, [t, e, v]);
97
- const J = () => {
98
+ const K = () => {
98
99
  var o;
99
100
  !k || f || (o = p.current) == null || o.playPause();
100
101
  };
101
- return /* @__PURE__ */ l("div", { className: ie("space-y-3", V), "data-slot": "audio-waveform", children: [
102
+ return /* @__PURE__ */ l("div", { className: se("space-y-3", V), "data-slot": "audio-waveform", children: [
102
103
  /* @__PURE__ */ l("div", { className: "flex items-center justify-between gap-3", children: [
103
104
  /* @__PURE__ */ l("div", { className: "min-w-0", children: [
104
105
  /* @__PURE__ */ r("p", { className: "text-base font-normal", children: "Recording" }),
105
106
  /* @__PURE__ */ r("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: v ? `${d} above · ${m.toLowerCase()} below` : a ?? "Audio" })
106
107
  ] }),
107
- /* @__PURE__ */ r("p", { className: "font-mono text-xs tabular-nums text-muted-foreground", children: A(L) })
108
+ /* @__PURE__ */ r("p", { className: "font-mono text-xs tabular-nums text-muted-foreground", children: A(q) })
108
109
  ] }),
109
110
  /* @__PURE__ */ l("div", { className: "relative overflow-hidden py-2", children: [
110
111
  v && /* @__PURE__ */ l("div", { className: "pointer-events-none absolute inset-x-0 top-2 z-10 flex h-[92px] flex-col items-center justify-between text-xs font-normal uppercase tracking-wide text-muted-foreground", children: [
@@ -113,7 +114,7 @@ function fe({
113
114
  ] }),
114
115
  /* @__PURE__ */ r("div", { ref: F, className: "min-h-[92px]" }),
115
116
  !k && !f && /* @__PURE__ */ r("div", { className: "absolute inset-0 flex items-center justify-center bg-background/70", children: /* @__PURE__ */ l("div", { className: "inline-flex items-center gap-2 rounded-md bg-background px-3 py-1.5 text-xs text-muted-foreground", children: [
116
- /* @__PURE__ */ r(te, { className: "size-3.5 animate-spin motion-reduce:animate-none", "aria-hidden": "true" }),
117
+ /* @__PURE__ */ r(te, { variant: "content", size: "xs", "aria-hidden": !0 }),
117
118
  "Loading waveform"
118
119
  ] }) }),
119
120
  f && /* @__PURE__ */ r("div", { className: "absolute inset-0 flex items-center justify-center bg-background/80", children: /* @__PURE__ */ l("div", { className: "inline-flex items-center gap-2 rounded-md bg-background px-3 py-1.5 text-xs text-muted-foreground", children: [
@@ -127,7 +128,7 @@ function fe({
127
128
  {
128
129
  type: "button",
129
130
  variant: "secondary",
130
- onClick: J,
131
+ onClick: K,
131
132
  disabled: !k || !!f,
132
133
  "aria-label": E ? "Pause recording" : "Play recording",
133
134
  startContent: E ? /* @__PURE__ */ r(ne, { "aria-hidden": "true" }) : /* @__PURE__ */ r(oe, { "aria-hidden": "true" }),
@@ -135,13 +136,13 @@ function fe({
135
136
  children: A(G)
136
137
  }
137
138
  ),
138
- /* @__PURE__ */ l("a", { href: t, download: q, className: re({ variant: "ghost" }), children: [
139
- /* @__PURE__ */ r(se, { "aria-hidden": "true", className: "size-4" }),
139
+ /* @__PURE__ */ l("a", { href: t, download: J, className: re({ variant: "ghost" }), children: [
140
+ /* @__PURE__ */ r(ie, { "aria-hidden": "true", className: "size-4" }),
140
141
  "Audio"
141
142
  ] })
142
143
  ] })
143
144
  ] });
144
145
  }
145
146
  export {
146
- fe as AudioWaveform
147
+ ge as AudioWaveform
147
148
  };
@@ -14,5 +14,6 @@ export interface AutocompleteProps {
14
14
  allowsCustomValue?: boolean;
15
15
  className?: string;
16
16
  id?: string;
17
+ "aria-describedby"?: string;
17
18
  }
18
19
  export declare const Autocomplete: React.ForwardRefExoticComponent<AutocompleteProps & React.RefAttributes<HTMLInputElement>>;
@@ -1,56 +1,57 @@
1
1
  "use client";
2
2
  import { jsxs as x, jsx as c } from "react/jsx-runtime";
3
3
  import * as o from "react";
4
- import { MotionConfig as j, AnimatePresence as z, motion as q } from "motion/react";
5
- import { Search as O, Check as P } from "../lib/icons.js";
4
+ import { MotionConfig as z, AnimatePresence as q, motion as O } from "motion/react";
5
+ import { Search as P, Check as B } from "../lib/icons.js";
6
6
  import { cn as y } from "../lib/cn.js";
7
- import { inputBaseClass as B } from "./field.js";
8
- import { floatVariants as F } from "../lib/motion.js";
9
- import { Ripple as K } from "./ripple.js";
10
- const Q = o.forwardRef(
7
+ import { inputBaseClass as F } from "./field.js";
8
+ import { floatVariants as K } from "../lib/motion.js";
9
+ import { Ripple as Q } from "./ripple.js";
10
+ const T = o.forwardRef(
11
11
  ({
12
12
  items: u,
13
13
  value: f,
14
- onChange: i,
14
+ onChange: s,
15
15
  placeholder: A = "Search…",
16
16
  disabled: E,
17
17
  isInvalid: R,
18
18
  allowsCustomValue: p = !1,
19
19
  className: S,
20
- id: I
21
- }, M) => {
22
- const d = u.find((e) => e.value === f), [m, h] = o.useState((d == null ? void 0 : d.label) ?? ""), [r, a] = o.useState(!1), [n, w] = o.useState(-1), N = o.useRef(null), k = o.useRef(null), b = o.useId();
20
+ id: I,
21
+ "aria-describedby": M
22
+ }, L) => {
23
+ const d = u.find((e) => e.value === f), [m, h] = o.useState((d == null ? void 0 : d.label) ?? ""), [r, a] = o.useState(!1), [l, w] = o.useState(-1), N = o.useRef(null), k = o.useRef(null), b = o.useId();
23
24
  o.useEffect(() => {
24
25
  h((d == null ? void 0 : d.label) ?? (p ? f ?? "" : ""));
25
26
  }, [d, f, p]);
26
- const l = o.useMemo(() => {
27
+ const n = o.useMemo(() => {
27
28
  const e = m.trim().toLowerCase();
28
29
  return e ? u.filter((t) => t.label.toLowerCase().includes(e)) : u;
29
30
  }, [u, m]);
30
31
  o.useEffect(() => {
31
32
  if (!r) return;
32
33
  const e = (t) => {
33
- var s;
34
- (s = N.current) != null && s.contains(t.target) || a(!1);
34
+ var i;
35
+ (i = N.current) != null && i.contains(t.target) || a(!1);
35
36
  };
36
37
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
37
38
  }, [r]), o.useEffect(() => {
38
39
  var t;
39
- if (!r || n < 0) return;
40
- const e = (t = k.current) == null ? void 0 : t.children[n];
40
+ if (!r || l < 0) return;
41
+ const e = (t = k.current) == null ? void 0 : t.children[l];
41
42
  e == null || e.scrollIntoView({ block: "nearest" });
42
- }, [r, n]);
43
+ }, [r, l]);
43
44
  const g = (e) => {
44
- l.length !== 0 && w((t) => {
45
- let s = t;
46
- for (let v = 0; v < l.length; v++)
47
- if (s = (s + e + l.length) % l.length, !l[s].disabled) return s;
45
+ n.length !== 0 && w((t) => {
46
+ let i = t;
47
+ for (let v = 0; v < n.length; v++)
48
+ if (i = (i + e + n.length) % n.length, !n[i].disabled) return i;
48
49
  return t;
49
50
  });
50
51
  }, D = (e) => {
51
- const t = l[e];
52
- !t || t.disabled || (i == null || i(t.value), h(t.label), a(!1));
53
- }, L = (e) => {
52
+ const t = n[e];
53
+ !t || t.disabled || (s == null || s(t.value), h(t.label), a(!1));
54
+ }, $ = (e) => {
54
55
  switch (e.key) {
55
56
  case "ArrowDown":
56
57
  e.preventDefault(), r ? g(1) : a(!0);
@@ -59,7 +60,7 @@ const Q = o.forwardRef(
59
60
  e.preventDefault(), r ? g(-1) : a(!0);
60
61
  break;
61
62
  case "Enter":
62
- r && n >= 0 ? (e.preventDefault(), D(n)) : p && (i == null || i(m), a(!1));
63
+ r && l >= 0 ? (e.preventDefault(), D(l)) : p && (s == null || s(m), a(!1));
63
64
  break;
64
65
  case "Escape":
65
66
  r && (e.preventDefault(), a(!1));
@@ -72,16 +73,16 @@ const Q = o.forwardRef(
72
73
  return /* @__PURE__ */ x("div", { ref: N, className: "relative", children: [
73
74
  /* @__PURE__ */ x("div", { className: "group/field relative", children: [
74
75
  /* @__PURE__ */ c(
75
- O,
76
+ P,
76
77
  {
77
- className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground transition-colors duration-(--duration-fast) group-focus-within/field:text-foreground group-hover/field:text-foreground",
78
+ className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground transition-colors duration-150 group-focus-within/field:text-foreground group-hover/field:text-foreground",
78
79
  "aria-hidden": !0
79
80
  }
80
81
  ),
81
82
  /* @__PURE__ */ c(
82
83
  "input",
83
84
  {
84
- ref: M,
85
+ ref: L,
85
86
  id: I,
86
87
  type: "text",
87
88
  role: "combobox",
@@ -90,27 +91,28 @@ const Q = o.forwardRef(
90
91
  "aria-haspopup": "listbox",
91
92
  "aria-expanded": r,
92
93
  "aria-controls": b,
93
- "aria-activedescendant": r && n >= 0 ? `${b}-opt-${n}` : void 0,
94
+ "aria-activedescendant": r && l >= 0 ? `${b}-opt-${l}` : void 0,
94
95
  "aria-invalid": R || void 0,
96
+ "aria-describedby": M,
95
97
  disabled: E,
96
98
  placeholder: A,
97
99
  value: m,
98
100
  onChange: (e) => {
99
- h(e.target.value), a(!0), w(-1), p && (i == null || i(e.target.value));
101
+ h(e.target.value), a(!0), w(-1), p && (s == null || s(e.target.value));
100
102
  },
101
103
  onFocus: () => a(!0),
102
- onKeyDown: L,
103
- className: y(B, "h-10 pl-9", S)
104
+ onKeyDown: $,
105
+ className: y(F, "h-10 pl-9", S)
104
106
  }
105
107
  )
106
108
  ] }),
107
- /* @__PURE__ */ c(j, { reducedMotion: "user", children: /* @__PURE__ */ c(z, { children: r && /* @__PURE__ */ x(
108
- q.ul,
109
+ /* @__PURE__ */ c(z, { reducedMotion: "user", children: /* @__PURE__ */ c(q, { children: r && /* @__PURE__ */ x(
110
+ O.ul,
109
111
  {
110
112
  ref: k,
111
113
  id: b,
112
114
  role: "listbox",
113
- variants: F,
115
+ variants: K,
114
116
  initial: "hidden",
115
117
  animate: "visible",
116
118
  exit: "hidden",
@@ -120,25 +122,25 @@ const Q = o.forwardRef(
120
122
  "rounded-md border border-border bg-elevated shadow-elevation"
121
123
  ),
122
124
  children: [
123
- /* @__PURE__ */ c(K, { origin: "top" }),
124
- l.length === 0 ? /* @__PURE__ */ c(
125
+ /* @__PURE__ */ c(Q, { origin: "top" }),
126
+ n.length === 0 ? /* @__PURE__ */ c(
125
127
  "li",
126
128
  {
127
129
  role: "presentation",
128
130
  className: "px-2 py-6 text-center text-xs text-muted-foreground",
129
131
  children: "No results"
130
132
  }
131
- ) : l.map((e, t) => {
132
- const s = e.value === f, v = t === n;
133
+ ) : n.map((e, t) => {
134
+ const i = e.value === f, v = t === l;
133
135
  return /* @__PURE__ */ x(
134
136
  "li",
135
137
  {
136
138
  id: `${b}-opt-${t}`,
137
139
  role: "option",
138
- "aria-selected": s,
140
+ "aria-selected": i,
139
141
  "aria-disabled": e.disabled || void 0,
140
142
  onMouseEnter: () => !e.disabled && w(t),
141
- onMouseDown: ($) => $.preventDefault(),
143
+ onMouseDown: (j) => j.preventDefault(),
142
144
  onClick: () => D(t),
143
145
  className: y(
144
146
  "flex cursor-pointer items-center justify-between gap-2",
@@ -148,7 +150,7 @@ const Q = o.forwardRef(
148
150
  ),
149
151
  children: [
150
152
  /* @__PURE__ */ c("span", { className: "truncate", children: e.label }),
151
- s && /* @__PURE__ */ c(P, { className: "size-4 shrink-0", "aria-hidden": !0 })
153
+ i && /* @__PURE__ */ c(B, { className: "size-4 shrink-0", "aria-hidden": !0 })
152
154
  ]
153
155
  },
154
156
  e.value
@@ -160,7 +162,7 @@ const Q = o.forwardRef(
160
162
  ] });
161
163
  }
162
164
  );
163
- Q.displayName = "Autocomplete";
165
+ T.displayName = "Autocomplete";
164
166
  export {
165
- Q as Autocomplete
167
+ T as Autocomplete
166
168
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { jsx as l, jsxs as x } from "react/jsx-runtime";
2
+ import { jsx as n, jsxs as x } from "react/jsx-runtime";
3
3
  import * as f from "react";
4
4
  import { cn as i } from "../lib/cn.js";
5
5
  const g = {
@@ -7,7 +7,7 @@ const g = {
7
7
  md: "size-10 text-xs",
8
8
  lg: "size-12 text-base",
9
9
  xl: "size-16 text-lg"
10
- }, p = {
10
+ }, h = {
11
11
  full: "rounded-full",
12
12
  lg: "rounded-lg"
13
13
  };
@@ -16,21 +16,21 @@ function v(r) {
16
16
  return e.length === 0 ? "" : e.length === 1 ? e[0].slice(0, 2).toUpperCase() : (e[0][0] + e[e.length - 1][0]).toUpperCase();
17
17
  }
18
18
  const m = [
19
- "bg-(--color-cyan-soft) text-(--color-cyan-deep)",
20
- "bg-(--color-lime-soft) text-(--color-lime-deep)",
21
- "bg-(--color-amber-soft) text-(--color-amber-deep)",
22
- "bg-info-100 text-info-700",
19
+ "bg-(--color-cyan-soft) text-ink-950",
20
+ "bg-(--color-lime-soft) text-ink-950",
21
+ "bg-(--color-amber-soft) text-ink-950",
22
+ "bg-info-100 text-ink-950",
23
23
  "bg-ink-300 text-ink-950"
24
24
  ];
25
- function y(r) {
25
+ function k(r) {
26
26
  let e = 0;
27
27
  for (const t of r) e = e * 31 + t.charCodeAt(0) >>> 0;
28
28
  return m[e % m.length];
29
29
  }
30
30
  const N = f.forwardRef(
31
- ({ className: r, src: e, name: t, size: o = "md", radius: s = "full", ...a }, c) => {
32
- const n = t ? v(t) : "";
33
- return /* @__PURE__ */ l(
31
+ ({ className: r, src: e, name: t, size: s = "md", radius: o = "full", ...a }, c) => {
32
+ const l = t ? v(t) : "";
33
+ return /* @__PURE__ */ n(
34
34
  "span",
35
35
  {
36
36
  ref: c,
@@ -40,28 +40,28 @@ const N = f.forwardRef(
40
40
  "relative inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-normal",
41
41
  // Images sit on the neutral fill; initials take a deterministic
42
42
  // per-name identity tint so a roster reads multi-color.
43
- e || !t ? "bg-fill text-fill-foreground" : y(t),
44
- g[o],
45
- p[s],
43
+ e || !t ? "bg-fill text-fill-foreground" : k(t),
44
+ g[s],
45
+ h[o],
46
46
  r
47
47
  ),
48
48
  ...a,
49
- children: e ? /* @__PURE__ */ l(
49
+ children: e ? /* @__PURE__ */ n(
50
50
  "img",
51
51
  {
52
52
  src: e,
53
53
  alt: t ?? "",
54
54
  className: "size-full object-cover"
55
55
  }
56
- ) : /* @__PURE__ */ l("span", { "aria-hidden": !0, children: n })
56
+ ) : /* @__PURE__ */ n("span", { "aria-hidden": !0, children: l })
57
57
  }
58
58
  );
59
59
  }
60
60
  );
61
61
  N.displayName = "Avatar";
62
- const k = f.forwardRef(
63
- ({ className: r, max: e, size: t = "md", radius: o = "full", children: s, ...a }, c) => {
64
- const n = f.Children.toArray(s), d = typeof e == "number" ? n.length - e : 0, h = typeof e == "number" ? n.slice(0, e) : n;
62
+ const y = f.forwardRef(
63
+ ({ className: r, max: e, size: t = "md", radius: s = "full", children: o, ...a }, c) => {
64
+ const l = f.Children.toArray(o), d = typeof e == "number" ? l.length - e : 0, p = typeof e == "number" ? l.slice(0, e) : l;
65
65
  return /* @__PURE__ */ x(
66
66
  "div",
67
67
  {
@@ -69,7 +69,7 @@ const k = f.forwardRef(
69
69
  className: i("flex items-center", r),
70
70
  ...a,
71
71
  children: [
72
- h.map((b, u) => /* @__PURE__ */ l(
72
+ p.map((b, u) => /* @__PURE__ */ n(
73
73
  "div",
74
74
  {
75
75
  className: i(
@@ -80,7 +80,7 @@ const k = f.forwardRef(
80
80
  },
81
81
  u
82
82
  )),
83
- d > 0 && /* @__PURE__ */ l("div", { className: i("ring-2 ring-background rounded-full -ml-2"), children: /* @__PURE__ */ l(
83
+ d > 0 && /* @__PURE__ */ n("div", { className: i("ring-2 ring-background rounded-full -ml-2"), children: /* @__PURE__ */ n(
84
84
  "span",
85
85
  {
86
86
  role: "img",
@@ -89,9 +89,9 @@ const k = f.forwardRef(
89
89
  "relative inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-normal",
90
90
  "bg-muted text-muted-foreground",
91
91
  g[t],
92
- p[o]
92
+ h[s]
93
93
  ),
94
- children: /* @__PURE__ */ l("span", { "aria-hidden": !0, children: `+${d}` })
94
+ children: /* @__PURE__ */ n("span", { "aria-hidden": !0, children: `+${d}` })
95
95
  }
96
96
  ) })
97
97
  ]
@@ -99,8 +99,8 @@ const k = f.forwardRef(
99
99
  );
100
100
  }
101
101
  );
102
- k.displayName = "AvatarGroup";
102
+ y.displayName = "AvatarGroup";
103
103
  export {
104
104
  N as Avatar,
105
- k as AvatarGroup
105
+ y as AvatarGroup
106
106
  };
@@ -1,7 +1,7 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  import * as React from "react";
3
3
  declare const badgeVariants: (props?: ({
4
- variant?: "soft" | "solid" | "outline" | "dot" | null | undefined;
4
+ variant?: "soft" | "outline" | "solid" | "dot" | null | undefined;
5
5
  color?: "success" | "warning" | "danger" | "info" | "default" | "primary" | null | undefined;
6
6
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
7
  export interface BadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "color">, VariantProps<typeof badgeVariants> {
@@ -44,7 +44,7 @@ const y = t.forwardRef(
44
44
  "data-stuck": r ? x ? "true" : "false" : void 0,
45
45
  className: a(
46
46
  "flex w-full items-center",
47
- r && "sticky top-0 z-40 bg-background transition-[border-color] duration-(--duration-fast) ease-out motion-reduce:transition-none",
47
+ r && "sticky top-0 z-40 bg-background transition-[border-color] duration-150 ease-out motion-reduce:transition-none",
48
48
  // Sticky offsets resolve against the scrollport's PADDING box, so in
49
49
  // a padded panel the pinned trail sits below a strip the content
50
50
  // would otherwise scroll through. This cover extends the trail's own
@@ -63,7 +63,7 @@ const y = t.forwardRef(
63
63
  onClick: c,
64
64
  "aria-label": g,
65
65
  className: a(
66
- "mr-1 inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground",
66
+ "mr-1 inline-flex size-6 shrink-0 items-center justify-center rounded-sm text-muted-foreground",
67
67
  "transition-colors hover:bg-fill hover:text-foreground",
68
68
  "outline-none focus-visible:ring-3 focus-visible:ring-ring [&_svg]:size-4"
69
69
  ),
@@ -1,8 +1,8 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  import * as React from "react";
3
3
  export declare const buttonVariants: (props?: ({
4
- variant?: "danger" | "soft" | "link" | "solid" | "secondary" | "outline" | "ghost" | null | undefined;
5
- size?: "sm" | "md" | "lg" | "xs" | "icon" | "icon-sm" | "icon-xs" | null | undefined;
4
+ variant?: "danger" | "soft" | "outline" | "link" | "solid" | "secondary" | "ghost" | null | undefined;
5
+ size?: "xs" | "sm" | "md" | "lg" | "icon" | "icon-sm" | "icon-xs" | null | undefined;
6
6
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
7
  export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
8
8
  isLoading?: boolean;
@@ -1,19 +1,20 @@
1
1
  "use client";
2
- import { jsxs as r, jsx as b } from "react/jsx-runtime";
3
- import * as c from "react";
2
+ import { jsxs as r, jsx as m } from "react/jsx-runtime";
3
+ import * as b from "react";
4
4
  import { cva as v } from "class-variance-authority";
5
5
  import { cn as n } from "../lib/cn.js";
6
- import { Spinner as m } from "./spinner.js";
6
+ import { Spinner as f } from "./spinner.js";
7
7
  const p = v(
8
8
  [
9
9
  "relative inline-flex items-center justify-center gap-2 whitespace-nowrap",
10
10
  "font-normal select-none",
11
11
  "rounded-md border border-transparent",
12
- "transition-[background,border,color,box-shadow,transform] duration-(--duration-fast) ease-out",
12
+ "transition-[background,border,color,box-shadow,transform] duration-150 ease-out motion-reduce:transition-none",
13
13
  "outline-none focus-visible:ring-3 focus-visible:ring-ring",
14
14
  // Press feedback: the button visibly answers the press (guide: any
15
- // pressable element scales down on :active).
16
- "active:scale-(--scale-press)",
15
+ // pressable element scales down on :active). Movement is dropped under
16
+ // reduced-motion; color/opacity feedback stays.
17
+ "active:scale-[0.97] motion-reduce:active:scale-100",
17
18
  "disabled:pointer-events-none",
18
19
  "[&_svg]:pointer-events-none [&_svg]:shrink-0"
19
20
  ],
@@ -21,26 +22,26 @@ const p = v(
21
22
  variants: {
22
23
  variant: {
23
24
  solid: "bg-brand text-brand-foreground shadow-[var(--inner-glow-cta)] hover:bg-brand-hover",
24
- secondary: "bg-fill text-fill-foreground shadow-[var(--inner-glow-fill)] hover:bg-fill/70",
25
+ secondary: "bg-fill text-fill-foreground shadow-[var(--inner-glow-fill)] hover:bg-muted",
25
26
  outline: "border-border bg-transparent text-foreground hover:border-border-strong hover:bg-muted",
26
27
  ghost: "bg-transparent text-foreground hover:bg-muted",
27
- soft: "bg-muted text-foreground shadow-[var(--inner-glow-fill)] hover:bg-fill",
28
+ soft: "bg-muted text-foreground shadow-[var(--inner-glow-fill)] hover:bg-accent",
28
29
  link: "bg-transparent text-foreground underline-offset-4 hover:underline active:scale-none",
29
30
  danger: "bg-danger text-danger-foreground hover:bg-danger/90 focus-visible:ring-danger/40"
30
31
  },
31
32
  size: {
32
- xs: "h-7 px-2.5 text-xs [&_svg]:size-3.5",
33
- sm: "h-8 px-3 text-xs [&_svg]:size-4",
34
- md: "h-10 px-4 text-xs [&_svg]:size-4",
35
- lg: "h-11 px-5 text-base [&_svg]:size-5",
36
- icon: "size-10 rounded-full [&_svg]:size-4",
37
- "icon-sm": "size-8 rounded-full [&_svg]:size-4",
38
- "icon-xs": "size-7 rounded-full [&_svg]:size-4"
33
+ xs: "h-7 rounded-sm px-2.5 text-xs [&_svg]:size-3.5",
34
+ sm: "h-8 rounded-sm px-3 text-xs [&_svg]:size-4",
35
+ md: "h-10 rounded-md px-4 text-xs [&_svg]:size-4",
36
+ lg: "h-11 rounded-md px-5 text-base [&_svg]:size-5",
37
+ icon: "size-10 rounded-md [&_svg]:size-4",
38
+ "icon-sm": "size-8 rounded-sm [&_svg]:size-4",
39
+ "icon-xs": "size-7 rounded-sm [&_svg]:size-4"
39
40
  }
40
41
  },
41
42
  defaultVariants: { variant: "solid", size: "md" }
42
43
  }
43
- ), x = c.forwardRef(
44
+ ), x = b.forwardRef(
44
45
  ({
45
46
  className: o,
46
47
  variant: t,
@@ -52,10 +53,10 @@ const p = v(
52
53
  disabled: l,
53
54
  children: g,
54
55
  ...u
55
- }, f) => /* @__PURE__ */ r(
56
+ }, c) => /* @__PURE__ */ r(
56
57
  "button",
57
58
  {
58
- ref: f,
59
+ ref: c,
59
60
  disabled: l || e,
60
61
  "aria-busy": e || void 0,
61
62
  className: n(
@@ -67,9 +68,10 @@ const p = v(
67
68
  ),
68
69
  ...u,
69
70
  children: [
70
- e && /* @__PURE__ */ b(
71
- m,
71
+ e && /* @__PURE__ */ m(
72
+ f,
72
73
  {
74
+ variant: "action",
73
75
  size: "sm",
74
76
  className: "absolute",
75
77
  "aria-hidden": !0
@@ -2,11 +2,11 @@
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  import * as d from "react";
4
4
  import { cn as o } from "../lib/cn.js";
5
- const c = d.forwardRef(
5
+ const l = d.forwardRef(
6
6
  ({ className: r, isHoverable: e, isPressable: a, children: s, ...n }, i) => {
7
- const l = o(
7
+ const c = o(
8
8
  "bg-card text-card-foreground rounded-xl",
9
- (a || e) && "shadow-elevation transition-[box-shadow,transform] duration-(--duration-fast) ease-out motion-reduce:transition-none",
9
+ (a || e) && "shadow-elevation transition-[box-shadow,transform] duration-150 ease-out motion-reduce:transition-none",
10
10
  e && "hover:-translate-y-0.5",
11
11
  r
12
12
  );
@@ -16,7 +16,7 @@ const c = d.forwardRef(
16
16
  ref: i,
17
17
  type: "button",
18
18
  className: o(
19
- l,
19
+ c,
20
20
  "w-full text-left cursor-pointer",
21
21
  "outline-none focus-visible:ring-3 focus-visible:ring-ring",
22
22
  "active:translate-y-px"
@@ -24,10 +24,10 @@ const c = d.forwardRef(
24
24
  ...n,
25
25
  children: s
26
26
  }
27
- ) : /* @__PURE__ */ t("div", { ref: i, className: l, ...n, children: s });
27
+ ) : /* @__PURE__ */ t("div", { ref: i, className: c, ...n, children: s });
28
28
  }
29
29
  );
30
- c.displayName = "Card";
30
+ l.displayName = "Card";
31
31
  const f = d.forwardRef(({ className: r, ...e }, a) => /* @__PURE__ */ t(
32
32
  "div",
33
33
  {
@@ -41,7 +41,7 @@ const m = d.forwardRef(({ className: r, ...e }, a) => /* @__PURE__ */ t(
41
41
  "h3",
42
42
  {
43
43
  ref: a,
44
- className: o("text-base font-semibold leading-none", r),
44
+ className: o("text-base font-medium leading-none", r),
45
45
  ...e
46
46
  }
47
47
  ));
@@ -73,7 +73,7 @@ const x = d.forwardRef(
73
73
  );
74
74
  x.displayName = "CardFooter";
75
75
  export {
76
- c as Card,
76
+ l as Card,
77
77
  u as CardBody,
78
78
  p as CardDescription,
79
79
  x as CardFooter,