@actioneer/ads 0.2.3 → 0.3.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 (70) hide show
  1. package/components/ai-elements/chain-of-thought.d.ts +88 -19
  2. package/components/ai-elements/chain-of-thought.js +358 -149
  3. package/components/ai-elements/chart.d.ts +30 -0
  4. package/components/ai-elements/chart.js +303 -0
  5. package/components/ai-elements/index.d.ts +2 -1
  6. package/components/ai-elements/message.d.ts +19 -4
  7. package/components/ai-elements/message.js +177 -130
  8. package/components/ai-elements/research-activity.d.ts +45 -0
  9. package/components/ai-elements/research-activity.js +260 -0
  10. package/components/ai-elements/task-progress.js +69 -66
  11. package/components/ai-elements/tool.js +42 -38
  12. package/components/answer.d.ts +19 -0
  13. package/components/answer.js +363 -300
  14. package/components/assistant-ui/attachment.js +5 -1
  15. package/components/assistant-ui/composer-deep-research.js +44 -29
  16. package/components/assistant-ui/composer-harness.js +55 -38
  17. package/components/assistant-ui/composer.js +16 -16
  18. package/components/assistant-ui/index.d.ts +0 -1
  19. package/components/assistant-ui/message.d.ts +7 -0
  20. package/components/assistant-ui/message.js +64 -51
  21. package/components/assistant-ui/primitives.d.ts +1 -1
  22. package/components/assistant-ui/thread-context.d.ts +2 -0
  23. package/components/assistant-ui/thread.js +34 -32
  24. package/components/brand-texture.d.ts +37 -0
  25. package/components/brand-texture.js +54 -0
  26. package/components/chart.d.ts +64 -2
  27. package/components/chart.js +717 -456
  28. package/components/code-block.d.ts +36 -0
  29. package/components/code-block.js +136 -0
  30. package/components/command-palette.d.ts +43 -0
  31. package/components/command-palette.js +146 -0
  32. package/components/drawer.d.ts +1 -1
  33. package/components/file-dropzone.d.ts +32 -0
  34. package/components/file-dropzone.js +134 -0
  35. package/components/index.d.ts +11 -0
  36. package/components/index.js +480 -430
  37. package/components/infinite-canvas.d.ts +50 -0
  38. package/components/infinite-canvas.js +215 -0
  39. package/components/page-header.d.ts +22 -0
  40. package/components/page-header.js +52 -0
  41. package/components/resizable-panel.d.ts +29 -0
  42. package/components/resizable-panel.js +102 -0
  43. package/components/reveal.d.ts +36 -0
  44. package/components/reveal.js +35 -0
  45. package/components/scroll-area.d.ts +19 -0
  46. package/components/scroll-area.js +57 -0
  47. package/components/setting-row.d.ts +35 -0
  48. package/components/setting-row.js +86 -0
  49. package/components/sidebar.d.ts +4 -1
  50. package/components/sidebar.js +134 -132
  51. package/components/stepper.d.ts +32 -0
  52. package/components/stepper.js +113 -0
  53. package/components/table.js +16 -15
  54. package/components/tabs.js +1 -1
  55. package/hooks/agents-ui/voice-visualizer-types.js +1 -0
  56. package/lib/icons.d.ts +24 -0
  57. package/lib/icons.js +100 -110
  58. package/lib/motion.d.ts +5 -3
  59. package/lib/motion.js +46 -20
  60. package/lib/router.js +19 -0
  61. package/lib/utils.js +5 -0
  62. package/llms.txt +143 -39
  63. package/manifest.json +1232 -100
  64. package/package.json +2 -2
  65. package/styles.css +71 -28
  66. package/theme.css +19 -15
  67. package/components/ai-elements/reasoning.d.ts +0 -26
  68. package/components/ai-elements/reasoning.js +0 -131
  69. package/components/assistant-ui/smart-message-text.d.ts +0 -15
  70. package/components/assistant-ui/smart-message-text.js +0 -29
@@ -0,0 +1,86 @@
1
+ "use client";
2
+ import { jsxs as c, jsx as s } from "react/jsx-runtime";
3
+ import * as f from "react";
4
+ import { cva as g } from "class-variance-authority";
5
+ import { cn as o } from "../lib/cn.js";
6
+ const x = g(
7
+ "flex w-full items-center gap-3 rounded-lg bg-card px-4 py-3 text-left",
8
+ {
9
+ variants: {
10
+ isPressable: {
11
+ true: o(
12
+ "cursor-pointer outline-none",
13
+ "transition-[background-color,transform] duration-(--duration-fast) ease-out",
14
+ "hover:bg-muted focus-visible:ring-3 focus-visible:ring-ring",
15
+ "active:scale-(--scale-press) motion-reduce:transition-none"
16
+ ),
17
+ false: ""
18
+ }
19
+ },
20
+ defaultVariants: { isPressable: !1 }
21
+ }
22
+ ), p = f.forwardRef(
23
+ ({ className: r, icon: i, label: n, description: l, action: d, onSelect: e, ...m }, u) => {
24
+ const a = !!e;
25
+ return /* @__PURE__ */ c(
26
+ "div",
27
+ {
28
+ ref: u,
29
+ "data-slot": "setting-row",
30
+ role: a ? "button" : void 0,
31
+ tabIndex: a ? 0 : void 0,
32
+ onClick: e,
33
+ onKeyDown: a ? (t) => {
34
+ (t.key === "Enter" || t.key === " ") && (t.preventDefault(), e == null || e());
35
+ } : void 0,
36
+ className: o(x({ isPressable: a }), r),
37
+ ...m,
38
+ children: [
39
+ i && /* @__PURE__ */ s(
40
+ "span",
41
+ {
42
+ "aria-hidden": !0,
43
+ className: "flex size-5 shrink-0 items-center justify-center text-tertiary [&>svg]:size-4.5",
44
+ children: i
45
+ }
46
+ ),
47
+ /* @__PURE__ */ c("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
48
+ /* @__PURE__ */ s("div", { className: "min-w-0 truncate text-base text-foreground", children: n }),
49
+ l && /* @__PURE__ */ s("div", { className: "min-w-0 text-xs text-tertiary", children: l })
50
+ ] }),
51
+ d && // The trailing control owns its own click — a pressable row must not
52
+ // also fire when the reader aims at the button inside it.
53
+ /* @__PURE__ */ s(
54
+ "span",
55
+ {
56
+ className: "shrink-0",
57
+ onClick: (t) => t.stopPropagation(),
58
+ children: d
59
+ }
60
+ )
61
+ ]
62
+ }
63
+ );
64
+ }
65
+ );
66
+ p.displayName = "SettingRow";
67
+ const v = f.forwardRef(
68
+ ({ className: r, ...i }, n) => /* @__PURE__ */ s(
69
+ "div",
70
+ {
71
+ ref: n,
72
+ "data-slot": "setting-list",
73
+ className: o(
74
+ "flex w-full flex-col gap-0.5 rounded-xl bg-surface p-1",
75
+ r
76
+ ),
77
+ ...i
78
+ }
79
+ )
80
+ );
81
+ v.displayName = "SettingList";
82
+ export {
83
+ v as SettingList,
84
+ p as SettingRow,
85
+ x as settingRowVariants
86
+ };
@@ -46,6 +46,9 @@ export interface SidebarBrandProps extends React.HTMLAttributes<HTMLDivElement>
46
46
  label?: string;
47
47
  /** Reveal the collapse trigger in place of the logo on hover. Default true. */
48
48
  showTrigger?: boolean;
49
+ /** Persistent header actions (e.g. a global-search button), right-aligned
50
+ * next to the hover-revealed collapse trigger. Hidden while collapsed. */
51
+ children?: React.ReactNode;
49
52
  }
50
53
  /**
51
54
  * Brand header — the logo sits in the top slot and, when `showTrigger`, swaps to
@@ -53,7 +56,7 @@ export interface SidebarBrandProps extends React.HTMLAttributes<HTMLDivElement>
53
56
  * place). Self-contained: use it as the first child of `Sidebar` instead of a
54
57
  * `SidebarHeader`.
55
58
  */
56
- export declare function SidebarBrand({ logo, href, label, showTrigger, className, ...props }: SidebarBrandProps): React.JSX.Element;
59
+ export declare function SidebarBrand({ logo, href, label, showTrigger, children, className, ...props }: SidebarBrandProps): React.JSX.Element;
57
60
  export declare const SidebarHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
58
61
  export declare const SidebarNav: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
59
62
  export interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- import { jsx as r, jsxs as c } from "react/jsx-runtime";
3
- import * as i from "react";
4
- import { PanelLeft as R } from "../lib/icons.js";
5
- import { cn as n } from "../lib/cn.js";
6
- import { Tooltip as z } from "./tooltip.js";
2
+ import { jsx as t, jsxs as c } from "react/jsx-runtime";
3
+ import * as n from "react";
4
+ import { PanelLeft as k } from "../lib/icons.js";
5
+ import { cn as o } from "../lib/cn.js";
6
+ import { Tooltip as R } from "./tooltip.js";
7
7
  import { Avatar as _ } from "./avatar.js";
8
- const k = i.createContext({
8
+ const z = n.createContext({
9
9
  collapsed: !1,
10
10
  toggle: () => {
11
11
  },
@@ -13,43 +13,43 @@ const k = i.createContext({
13
13
  }
14
14
  });
15
15
  function j() {
16
- return i.useContext(k);
16
+ return n.useContext(z);
17
17
  }
18
- const H = i.forwardRef(
18
+ const H = n.forwardRef(
19
19
  ({
20
20
  className: a,
21
21
  collapsed: e,
22
- defaultCollapsed: s = !1,
23
- onCollapsedChange: t,
24
- keyboardToggle: o = !0,
22
+ defaultCollapsed: i = !1,
23
+ onCollapsedChange: r,
24
+ keyboardToggle: s = !0,
25
25
  ...d
26
- }, p) => {
27
- const [x, h] = i.useState(s), b = e !== void 0, l = b ? e : x, g = i.useCallback(
26
+ }, f) => {
27
+ const [p, v] = n.useState(i), b = e !== void 0, l = b ? e : p, h = n.useCallback(
28
28
  (u) => {
29
- b || h(u), t == null || t(u);
29
+ b || v(u), r == null || r(u);
30
30
  },
31
- [b, t]
32
- ), m = i.useCallback(
33
- () => g(!l),
34
- [l, g]
31
+ [b, r]
32
+ ), g = n.useCallback(
33
+ () => h(!l),
34
+ [l, h]
35
35
  );
36
- i.useEffect(() => {
37
- if (!o) return;
38
- const u = (f) => {
39
- (f.metaKey || f.ctrlKey) && f.key.toLowerCase() === "b" && (f.preventDefault(), m());
36
+ n.useEffect(() => {
37
+ if (!s) return;
38
+ const u = (m) => {
39
+ (m.metaKey || m.ctrlKey) && m.key.toLowerCase() === "b" && (m.preventDefault(), g());
40
40
  };
41
41
  return document.addEventListener("keydown", u), () => document.removeEventListener("keydown", u);
42
- }, [o, m]);
43
- const v = i.useMemo(
44
- () => ({ collapsed: l, toggle: m, setCollapsed: g }),
45
- [l, m, g]
42
+ }, [s, g]);
43
+ const x = n.useMemo(
44
+ () => ({ collapsed: l, toggle: g, setCollapsed: h }),
45
+ [l, g, h]
46
46
  );
47
- return /* @__PURE__ */ r(k.Provider, { value: v, children: /* @__PURE__ */ r(
47
+ return /* @__PURE__ */ t(z.Provider, { value: x, children: /* @__PURE__ */ t(
48
48
  "aside",
49
49
  {
50
- ref: p,
50
+ ref: f,
51
51
  "data-collapsed": l ? "true" : "false",
52
- className: n(
52
+ className: o(
53
53
  "group/sidebar flex h-full shrink-0 flex-col bg-transparent",
54
54
  l ? "w-(--sidebar-width-sm)" : "w-(--sidebar-width)",
55
55
  a
@@ -61,43 +61,43 @@ const H = i.forwardRef(
61
61
  );
62
62
  H.displayName = "Sidebar";
63
63
  function S({ children: a }) {
64
- return /* @__PURE__ */ r("kbd", { className: "inline-flex h-4 min-w-4 items-center justify-center rounded bg-background/20 px-1 text-xs leading-none", children: a });
64
+ return /* @__PURE__ */ t("kbd", { className: "inline-flex h-4 min-w-4 items-center justify-center rounded bg-background/20 px-1 text-xs leading-none", children: a });
65
65
  }
66
66
  function E({
67
67
  className: a,
68
68
  onClick: e,
69
- ...s
69
+ ...i
70
70
  }) {
71
- const { collapsed: t, toggle: o } = j();
72
- return /* @__PURE__ */ r(
73
- z,
71
+ const { collapsed: r, toggle: s } = j();
72
+ return /* @__PURE__ */ t(
73
+ R,
74
74
  {
75
75
  side: "right",
76
76
  content: /* @__PURE__ */ c("span", { className: "flex items-center gap-1.5", children: [
77
- t ? "Expand" : "Collapse",
77
+ r ? "Expand" : "Collapse",
78
78
  /* @__PURE__ */ c("span", { className: "flex items-center gap-0.5", children: [
79
- /* @__PURE__ */ r(S, { children: "⌘" }),
80
- /* @__PURE__ */ r(S, { children: "B" })
79
+ /* @__PURE__ */ t(S, { children: "⌘" }),
80
+ /* @__PURE__ */ t(S, { children: "B" })
81
81
  ] })
82
82
  ] }),
83
- children: /* @__PURE__ */ r(
83
+ children: /* @__PURE__ */ t(
84
84
  "button",
85
85
  {
86
86
  type: "button",
87
- "aria-label": t ? "Expand sidebar" : "Collapse sidebar",
88
- "aria-pressed": t,
87
+ "aria-label": r ? "Expand sidebar" : "Collapse sidebar",
88
+ "aria-pressed": r,
89
89
  onClick: (d) => {
90
- e == null || e(d), o();
90
+ e == null || e(d), s();
91
91
  },
92
- className: n(
92
+ className: o(
93
93
  "inline-flex size-(--sidebar-item) shrink-0 items-center justify-center rounded-md border border-transparent text-muted-foreground",
94
94
  "transition-colors hover:border-border hover:bg-elevated hover:text-foreground",
95
95
  "outline-none focus-visible:ring-3 focus-visible:ring-ring",
96
96
  "[&_svg]:size-4.5",
97
97
  a
98
98
  ),
99
- ...s,
100
- children: /* @__PURE__ */ r(R, {})
99
+ ...i,
100
+ children: /* @__PURE__ */ t(k, {})
101
101
  }
102
102
  )
103
103
  }
@@ -106,40 +106,42 @@ function E({
106
106
  function X({
107
107
  logo: a,
108
108
  href: e,
109
- label: s = "Home",
110
- showTrigger: t = !0,
111
- className: o,
112
- ...d
109
+ label: i = "Home",
110
+ showTrigger: r = !0,
111
+ children: s,
112
+ className: d,
113
+ ...f
113
114
  }) {
114
- const p = n(
115
+ const p = o(
115
116
  // 20px mark centered in a 32px square — the same box as every other rail icon.
116
117
  // group/brand lets a BrandMark logo play its blip loop on hover.
117
118
  "group/brand flex size-(--sidebar-item) items-center justify-center",
118
119
  "[&_img]:size-(--sidebar-logo) [&_svg]:size-(--sidebar-logo)",
119
- t && "group-hover/sidebar:hidden"
120
+ r && "group-hover/sidebar:hidden"
120
121
  );
121
122
  return /* @__PURE__ */ c(
122
123
  "div",
123
124
  {
124
- className: n(
125
+ className: o(
125
126
  "flex h-(--sidebar-header) shrink-0 items-center justify-between gap-2 px-3",
126
127
  "group-data-[collapsed=true]/sidebar:justify-center group-data-[collapsed=true]/sidebar:px-2",
127
- o
128
+ d
128
129
  ),
129
- ...d,
130
+ ...f,
130
131
  children: [
131
- e ? /* @__PURE__ */ r("a", { href: e, "aria-label": s, className: p, children: a }) : /* @__PURE__ */ r("span", { className: p, children: a }),
132
- t && /* @__PURE__ */ r("div", { className: "hidden group-hover/sidebar:flex", children: /* @__PURE__ */ r(E, {}) })
132
+ e ? /* @__PURE__ */ t("a", { href: e, "aria-label": i, className: p, children: a }) : /* @__PURE__ */ t("span", { className: p, children: a }),
133
+ r && /* @__PURE__ */ t("div", { className: "hidden group-hover/sidebar:flex", children: /* @__PURE__ */ t(E, {}) }),
134
+ s && /* @__PURE__ */ t("div", { className: "flex items-center gap-1 group-data-[collapsed=true]/sidebar:hidden", children: s })
133
135
  ]
134
136
  }
135
137
  );
136
138
  }
137
- const I = i.forwardRef(
138
- ({ className: a, ...e }, s) => /* @__PURE__ */ r(
139
+ const I = n.forwardRef(
140
+ ({ className: a, ...e }, i) => /* @__PURE__ */ t(
139
141
  "div",
140
142
  {
141
- ref: s,
142
- className: n(
143
+ ref: i,
144
+ className: o(
143
145
  "flex h-(--sidebar-header) shrink-0 items-center justify-between gap-2 px-3",
144
146
  "group-data-[collapsed=true]/sidebar:justify-center group-data-[collapsed=true]/sidebar:px-2",
145
147
  a
@@ -149,63 +151,63 @@ const I = i.forwardRef(
149
151
  )
150
152
  );
151
153
  I.displayName = "SidebarHeader";
152
- const L = i.forwardRef(
153
- ({ className: a, ...e }, s) => /* @__PURE__ */ r("nav", { ref: s, className: n("min-h-0 flex-1 space-y-5 overflow-y-auto p-3", a), ...e })
154
+ const L = n.forwardRef(
155
+ ({ className: a, ...e }, i) => /* @__PURE__ */ t("nav", { ref: i, className: o("min-h-0 flex-1 space-y-5 overflow-y-auto p-3", a), ...e })
154
156
  );
155
157
  L.displayName = "SidebarNav";
156
- const A = i.forwardRef(
157
- ({ className: a, label: e, children: s, ...t }, o) => /* @__PURE__ */ c("div", { ref: o, className: a, ...t, children: [
158
- e && /* @__PURE__ */ r("div", { className: "mb-1.5 px-3 text-xs font-semibold uppercase tracking-wider text-muted-foreground group-data-[collapsed=true]/sidebar:hidden", children: e }),
159
- /* @__PURE__ */ r("div", { className: "flex flex-col gap-0.5", children: s })
158
+ const A = n.forwardRef(
159
+ ({ className: a, label: e, children: i, ...r }, s) => /* @__PURE__ */ c("div", { ref: s, className: a, ...r, children: [
160
+ e && /* @__PURE__ */ t("div", { className: "mb-1.5 px-3 text-[length:var(--sidebar-section-label-size)] leading-[var(--text-xs--line-height)] font-normal uppercase tracking-wider text-muted-foreground group-data-[collapsed=true]/sidebar:hidden", children: e }),
161
+ /* @__PURE__ */ t("div", { className: "flex flex-col gap-0.5", children: i })
160
162
  ] })
161
163
  );
162
164
  A.displayName = "SidebarSection";
163
- const K = i.forwardRef(
164
- ({ className: a, icon: e, isActive: s, endContent: t, children: o, title: d, ...p }, x) => /* @__PURE__ */ c(
165
+ const K = n.forwardRef(
166
+ ({ className: a, icon: e, isActive: i, endContent: r, children: s, title: d, ...f }, p) => /* @__PURE__ */ c(
165
167
  "a",
166
168
  {
167
- ref: x,
168
- "aria-current": s ? "page" : void 0,
169
- title: d ?? (typeof o == "string" ? o : void 0),
170
- className: n(
171
- "flex items-center gap-2.5 rounded-md px-3 py-1.5 text-xs transition-colors",
169
+ ref: p,
170
+ "aria-current": i ? "page" : void 0,
171
+ title: d ?? (typeof s == "string" ? s : void 0),
172
+ className: o(
173
+ "flex items-center gap-2.5 rounded-md px-3 py-1.5 text-[length:var(--sidebar-navigation-text-size)] leading-[var(--text-xs--line-height)] transition-colors",
172
174
  "outline-none focus-visible:ring-3 focus-visible:ring-ring",
173
175
  "[&_svg]:size-4 [&_svg]:shrink-0",
174
176
  // Collapsed: a centered square (--sidebar-item) so every rail item lines up.
175
177
  "group-data-[collapsed=true]/sidebar:mx-auto group-data-[collapsed=true]/sidebar:size-(--sidebar-item) group-data-[collapsed=true]/sidebar:justify-center group-data-[collapsed=true]/sidebar:p-0",
176
- s ? "bg-fill font-medium text-foreground" : "text-muted-foreground hover:bg-fill/60 hover:text-foreground",
178
+ i ? "bg-fill font-medium text-foreground" : "text-muted-foreground hover:bg-fill/60 hover:text-foreground",
177
179
  a
178
180
  ),
179
- ...p,
181
+ ...f,
180
182
  children: [
181
183
  e,
182
- /* @__PURE__ */ r("span", { className: "min-w-0 flex-1 truncate group-data-[collapsed=true]/sidebar:hidden", children: o }),
183
- t && /* @__PURE__ */ r("span", { className: "shrink-0 group-data-[collapsed=true]/sidebar:hidden", children: t })
184
+ /* @__PURE__ */ t("span", { className: "min-w-0 flex-1 truncate group-data-[collapsed=true]/sidebar:hidden", children: s }),
185
+ r && /* @__PURE__ */ t("span", { className: "shrink-0 group-data-[collapsed=true]/sidebar:hidden", children: r })
184
186
  ]
185
187
  }
186
188
  )
187
189
  );
188
190
  K.displayName = "SidebarItem";
189
- const M = i.forwardRef(
190
- ({ className: a, ...e }, s) => /* @__PURE__ */ r(
191
+ const M = n.forwardRef(
192
+ ({ className: a, ...e }, i) => /* @__PURE__ */ t(
191
193
  "div",
192
194
  {
193
- ref: s,
194
- className: n("shrink-0 p-3 group-data-[collapsed=true]/sidebar:px-2", a),
195
+ ref: i,
196
+ className: o("shrink-0 p-3 group-data-[collapsed=true]/sidebar:px-2", a),
195
197
  ...e
196
198
  }
197
199
  )
198
200
  );
199
201
  M.displayName = "SidebarFooter";
200
- const q = i.forwardRef(
201
- ({ className: a, icon: e, children: s, ...t }, o) => /* @__PURE__ */ r("div", { className: "px-3 pb-1 group-data-[collapsed=true]/sidebar:px-2", children: /* @__PURE__ */ c(
202
+ const q = n.forwardRef(
203
+ ({ className: a, icon: e, children: i, ...r }, s) => /* @__PURE__ */ t("div", { className: "px-3 pb-1 group-data-[collapsed=true]/sidebar:px-2", children: /* @__PURE__ */ c(
202
204
  "button",
203
205
  {
204
- ref: o,
206
+ ref: s,
205
207
  type: "button",
206
- className: n(
208
+ className: o(
207
209
  "flex h-10 w-full items-center justify-start gap-2 rounded-md bg-elevated px-3",
208
- "text-xs font-medium text-foreground",
210
+ "text-[length:var(--sidebar-navigation-text-size)] leading-[var(--text-xs--line-height)] font-medium text-foreground",
209
211
  // Same hover feedback as ConnectorCard: raised at rest, lifts on
210
212
  // hover, settles back on press.
211
213
  "shadow-elevation",
@@ -216,53 +218,53 @@ const q = i.forwardRef(
216
218
  "group-data-[collapsed=true]/sidebar:mx-auto group-data-[collapsed=true]/sidebar:size-(--sidebar-item) group-data-[collapsed=true]/sidebar:justify-center group-data-[collapsed=true]/sidebar:px-0",
217
219
  a
218
220
  ),
219
- ...t,
221
+ ...r,
220
222
  children: [
221
223
  e,
222
- /* @__PURE__ */ r("span", { className: "truncate group-data-[collapsed=true]/sidebar:hidden", children: s })
224
+ /* @__PURE__ */ t("span", { className: "truncate group-data-[collapsed=true]/sidebar:hidden", children: i })
223
225
  ]
224
226
  }
225
227
  ) })
226
228
  );
227
229
  q.displayName = "SidebarAction";
228
- const B = i.forwardRef(
229
- ({ className: a, label: e, children: s, ...t }, o) => /* @__PURE__ */ c(
230
+ const B = n.forwardRef(
231
+ ({ className: a, label: e, children: i, ...r }, s) => /* @__PURE__ */ c(
230
232
  "div",
231
233
  {
232
- ref: o,
233
- className: n("group-data-[collapsed=true]/sidebar:hidden", a),
234
- ...t,
234
+ ref: s,
235
+ className: o("group-data-[collapsed=true]/sidebar:hidden", a),
236
+ ...r,
235
237
  children: [
236
- e && /* @__PURE__ */ r("div", { className: "mb-1.5 px-3 text-xs font-semibold uppercase tracking-wider text-muted-foreground", children: e }),
237
- /* @__PURE__ */ r("div", { className: "flex flex-col gap-0.5", children: s })
238
+ e && /* @__PURE__ */ t("div", { className: "mb-1.5 px-3 text-[length:var(--sidebar-section-label-size)] leading-[var(--text-xs--line-height)] font-semibold uppercase tracking-wider text-muted-foreground", children: e }),
239
+ /* @__PURE__ */ t("div", { className: "flex flex-col gap-0.5", children: i })
238
240
  ]
239
241
  }
240
242
  )
241
243
  );
242
244
  B.displayName = "SidebarHistory";
243
- const D = i.forwardRef(({ className: a, children: e, title: s, action: t, isActive: o, icon: d, ...p }, x) => {
244
- const h = i.useRef(null), b = i.useRef(null), [l, g] = i.useState(0);
245
- i.useLayoutEffect(() => {
246
- const u = h.current, f = b.current;
247
- if (!u || !f) return;
245
+ const D = n.forwardRef(({ className: a, children: e, title: i, action: r, isActive: s, icon: d, ...f }, p) => {
246
+ const v = n.useRef(null), b = n.useRef(null), [l, h] = n.useState(0);
247
+ n.useLayoutEffect(() => {
248
+ const u = v.current, m = b.current;
249
+ if (!u || !m) return;
248
250
  const N = () => {
249
- const w = f.scrollWidth - u.clientWidth;
250
- g(w > 0 ? w + (t ? 32 : 0) : 0);
251
+ const w = m.scrollWidth - u.clientWidth;
252
+ h(w > 0 ? w + (r ? 32 : 0) : 0);
251
253
  };
252
254
  N();
253
255
  const y = new ResizeObserver(N);
254
- return y.observe(u), y.observe(f), () => y.disconnect();
255
- }, [e, t]);
256
- const m = l > 0, v = Math.max(500, Math.round(l * 18));
256
+ return y.observe(u), y.observe(m), () => y.disconnect();
257
+ }, [e, r]);
258
+ const g = l > 0, x = Math.max(500, Math.round(l * 18));
257
259
  return /* @__PURE__ */ c(
258
260
  "div",
259
261
  {
260
- className: n(
262
+ className: o(
261
263
  "group/hist relative flex items-center rounded-md transition-colors",
262
- o ? "bg-fill/60 text-foreground" : "text-muted-foreground hover:bg-fill/60 hover:text-foreground"
264
+ s ? "bg-fill/60 text-foreground" : "text-muted-foreground hover:bg-fill/60 hover:text-foreground"
263
265
  ),
264
266
  children: [
265
- d && /* @__PURE__ */ r(
267
+ d && /* @__PURE__ */ t(
266
268
  "span",
267
269
  {
268
270
  "aria-hidden": !0,
@@ -270,43 +272,43 @@ const D = i.forwardRef(({ className: a, children: e, title: s, action: t, isActi
270
272
  children: d
271
273
  }
272
274
  ),
273
- /* @__PURE__ */ r(
275
+ /* @__PURE__ */ t(
274
276
  "a",
275
277
  {
276
- ref: x,
277
- title: s ?? (typeof e == "string" ? e : void 0),
278
- className: n(
278
+ ref: p,
279
+ title: i ?? (typeof e == "string" ? e : void 0),
280
+ className: o(
279
281
  // Left pad matches a SidebarItem's text column (px-3 + icon size-4 +
280
282
  // gap-2.5 = 2.375rem) so history titles line up under the nav labels.
281
- "block min-w-0 flex-1 rounded-md py-1.5 pr-3 ps-(--sidebar-text-indent) text-xs",
283
+ "block min-w-0 flex-1 rounded-md py-1.5 pr-3 ps-(--sidebar-text-indent) text-[length:var(--sidebar-navigation-text-size)] leading-[var(--text-xs--line-height)]",
282
284
  "outline-none focus-visible:ring-3 focus-visible:ring-ring",
283
285
  a
284
286
  ),
285
- ...p,
286
- children: /* @__PURE__ */ r(
287
+ ...f,
288
+ children: /* @__PURE__ */ t(
287
289
  "span",
288
290
  {
289
- ref: h,
290
- className: n(
291
+ ref: v,
292
+ className: o(
291
293
  "block overflow-hidden",
292
294
  // Rest: fade the right edge (no ellipsis). Hover: the title scrolls,
293
295
  // so fade the LEFT edge where it exits; the action backdrop (or the
294
296
  // string's own end) handles the right.
295
- m && "[mask-image:linear-gradient(to_right,#000_calc(100%-1.5rem),transparent)]",
296
- m && "group-hover/hist:[mask-image:linear-gradient(to_right,transparent,#000_1.25rem,#000_100%)]"
297
+ g && "[mask-image:linear-gradient(to_right,#000_calc(100%-1.5rem),transparent)]",
298
+ g && "group-hover/hist:[mask-image:linear-gradient(to_right,transparent,#000_1.25rem,#000_100%)]"
297
299
  ),
298
- children: /* @__PURE__ */ r(
300
+ children: /* @__PURE__ */ t(
299
301
  "span",
300
302
  {
301
303
  ref: b,
302
- className: n(
304
+ className: o(
303
305
  "block w-max whitespace-nowrap transition-transform ease-linear",
304
- m && "group-hover/hist:[transform:translateX(var(--mq-x))]",
306
+ g && "group-hover/hist:[transform:translateX(var(--mq-x))]",
305
307
  "motion-reduce:transition-none motion-reduce:group-hover/hist:[transform:none]"
306
308
  ),
307
309
  style: {
308
310
  "--mq-x": `-${l}px`,
309
- transitionDuration: `${v}ms`
311
+ transitionDuration: `${x}ms`
310
312
  },
311
313
  children: e
312
314
  }
@@ -315,10 +317,10 @@ const D = i.forwardRef(({ className: a, children: e, title: s, action: t, isActi
315
317
  )
316
318
  }
317
319
  ),
318
- t && /* @__PURE__ */ r(
320
+ r && /* @__PURE__ */ t(
319
321
  "span",
320
322
  {
321
- className: n(
323
+ className: o(
322
324
  // Rounded end matches the row's radius so the backdrop doesn't
323
325
  // square off the highlight's right corners.
324
326
  "absolute inset-y-0 right-0 flex items-center rounded-e-md pl-8 pr-1",
@@ -327,7 +329,7 @@ const D = i.forwardRef(({ className: a, children: e, title: s, action: t, isActi
327
329
  "pointer-events-none group-hover/hist:pointer-events-auto",
328
330
  "focus-within:pointer-events-auto focus-within:opacity-100"
329
331
  ),
330
- children: t
332
+ children: r
331
333
  }
332
334
  )
333
335
  ]
@@ -335,23 +337,23 @@ const D = i.forwardRef(({ className: a, children: e, title: s, action: t, isActi
335
337
  );
336
338
  });
337
339
  D.displayName = "SidebarHistoryItem";
338
- const F = i.forwardRef(
339
- ({ className: a, name: e, role: s, src: t, ...o }, d) => /* @__PURE__ */ c(
340
+ const F = n.forwardRef(
341
+ ({ className: a, name: e, role: i, src: r, ...s }, d) => /* @__PURE__ */ c(
340
342
  "a",
341
343
  {
342
344
  ref: d,
343
- className: n(
345
+ className: o(
344
346
  "flex items-center gap-2.5 rounded-md p-2 transition-colors hover:bg-fill/60",
345
347
  "outline-none focus-visible:ring-3 focus-visible:ring-ring",
346
348
  "group-data-[collapsed=true]/sidebar:mx-auto group-data-[collapsed=true]/sidebar:size-(--sidebar-item) group-data-[collapsed=true]/sidebar:justify-center group-data-[collapsed=true]/sidebar:p-0",
347
349
  a
348
350
  ),
349
- ...o,
351
+ ...s,
350
352
  children: [
351
- /* @__PURE__ */ r(_, { size: "sm", name: e, src: t }),
353
+ /* @__PURE__ */ t(_, { size: "sm", name: e, src: r }),
352
354
  /* @__PURE__ */ c("div", { className: "min-w-0 leading-tight group-data-[collapsed=true]/sidebar:hidden", children: [
353
- /* @__PURE__ */ r("div", { className: "truncate text-xs font-medium text-foreground", children: e }),
354
- s && /* @__PURE__ */ r("div", { className: "truncate text-xs text-tertiary", children: s })
355
+ /* @__PURE__ */ t("div", { className: "truncate text-[length:var(--sidebar-navigation-text-size)] leading-[var(--text-xs--line-height)] font-medium text-foreground", children: e }),
356
+ i && /* @__PURE__ */ t("div", { className: "truncate text-[length:var(--sidebar-navigation-text-size)] leading-[var(--text-xs--line-height)] text-tertiary", children: i })
355
357
  ] })
356
358
  ]
357
359
  }
@@ -0,0 +1,32 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from "react";
3
+ /**
4
+ * Stepper — discrete, indexed progress through a known set of steps.
5
+ *
6
+ * `Progress` is a continuous bar and `Timeline` is a chronological list of
7
+ * content; neither says "step 2 of 5, and here is what 3 through 5 will be".
8
+ * Completed steps collapse to a check so the eye counts what is left, not what
9
+ * is done. The connector is a functional rail, like `Tree`'s — an allowed
10
+ * stroke.
11
+ */
12
+ export type StepperStatus = "complete" | "current" | "upcoming";
13
+ export interface StepperStep {
14
+ /** Stable key, also used for the accessible label. */
15
+ id: string;
16
+ label: React.ReactNode;
17
+ /** Optional qualifier under the label. */
18
+ description?: React.ReactNode;
19
+ }
20
+ declare const markerVariants: (props?: ({
21
+ status?: "current" | "complete" | "upcoming" | null | undefined;
22
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
23
+ export interface StepperProps extends Omit<React.HTMLAttributes<HTMLOListElement>, "onSelect">, VariantProps<typeof markerVariants> {
24
+ steps: StepperStep[];
25
+ /** Zero-based index of the current step. */
26
+ activeIndex: number;
27
+ orientation?: "horizontal" | "vertical";
28
+ /** Makes completed steps navigable. */
29
+ onSelect?: (index: number) => void;
30
+ }
31
+ export declare const Stepper: React.ForwardRefExoticComponent<StepperProps & React.RefAttributes<HTMLOListElement>>;
32
+ export { markerVariants as stepperMarkerVariants };