@actioneer/ads 0.5.6 → 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 (149) 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 +135 -121
  5. package/components/ai-elements/chain-of-thought-icon.d.ts +10 -12
  6. package/components/ai-elements/chain-of-thought-icon.js +341 -201
  7. package/components/ai-elements/chain-of-thought.d.ts +2 -2
  8. package/components/ai-elements/chain-of-thought.js +108 -108
  9. package/components/ai-elements/chart.js +16 -14
  10. package/components/ai-elements/inline-citation.js +41 -41
  11. package/components/ai-elements/message.js +4 -4
  12. package/components/ai-elements/queue.js +7 -7
  13. package/components/ai-elements/research-activity.js +114 -114
  14. package/components/ai-elements/shimmer.d.ts +2 -2
  15. package/components/ai-elements/speech-input.js +28 -28
  16. package/components/ai-elements/task-progress.js +26 -16
  17. package/components/ai-elements/task.js +17 -17
  18. package/components/ai-elements/tool.js +6 -6
  19. package/components/ai-elements/transcript.js +6 -5
  20. package/components/ai-elements/voice.js +1 -1
  21. package/components/alert.js +10 -10
  22. package/components/answer-sources.d.ts +42 -0
  23. package/components/answer-sources.js +111 -0
  24. package/components/answer.js +115 -114
  25. package/components/assistant-ui/action-bar.js +94 -48
  26. package/components/assistant-ui/attachment.js +131 -103
  27. package/components/assistant-ui/badge.d.ts +1 -1
  28. package/components/assistant-ui/badge.js +17 -17
  29. package/components/assistant-ui/chain-of-thought.d.ts +1 -1
  30. package/components/assistant-ui/composer-add-context.js +9 -9
  31. package/components/assistant-ui/composer-deep-research.js +5 -5
  32. package/components/assistant-ui/composer-harness.js +12 -9
  33. package/components/assistant-ui/composer-trigger-popover.js +45 -34
  34. package/components/assistant-ui/composer.js +59 -59
  35. package/components/assistant-ui/error.js +14 -14
  36. package/components/assistant-ui/file.d.ts +1 -1
  37. package/components/assistant-ui/image.d.ts +1 -1
  38. package/components/assistant-ui/image.js +113 -103
  39. package/components/assistant-ui/markdown-text.js +18 -18
  40. package/components/assistant-ui/message.js +46 -45
  41. package/components/assistant-ui/quote.js +1 -1
  42. package/components/assistant-ui/reasoning.d.ts +1 -1
  43. package/components/assistant-ui/reasoning.js +66 -77
  44. package/components/assistant-ui/suggestions.js +4 -4
  45. package/components/assistant-ui/thread-context.d.ts +2 -0
  46. package/components/assistant-ui/thread.js +41 -40
  47. package/components/assistant-ui/tool-fallback.js +60 -63
  48. package/components/assistant-ui/tool-group.d.ts +1 -1
  49. package/components/assistant-ui/tool-group.js +36 -42
  50. package/components/audio-waveform.js +25 -24
  51. package/components/autocomplete.d.ts +1 -0
  52. package/components/autocomplete.js +45 -43
  53. package/components/avatar.js +30 -30
  54. package/components/badge.d.ts +1 -1
  55. package/components/breadcrumbs.js +2 -2
  56. package/components/button.d.ts +2 -2
  57. package/components/button.js +22 -20
  58. package/components/card.js +8 -8
  59. package/components/carousel.js +105 -104
  60. package/components/chart.js +9 -7
  61. package/components/checkbox.js +74 -38
  62. package/components/chip.d.ts +1 -1
  63. package/components/code-block.js +3 -3
  64. package/components/collapsible.js +67 -23
  65. package/components/connector-card.js +6 -6
  66. package/components/drawer.d.ts +15 -10
  67. package/components/drawer.js +78 -77
  68. package/components/dropdown.d.ts +3 -1
  69. package/components/dropdown.js +88 -79
  70. package/components/empty-state.d.ts +4 -4
  71. package/components/empty-state.js +7 -7
  72. package/components/field.d.ts +4 -0
  73. package/components/field.js +45 -34
  74. package/components/file-dropzone.js +12 -12
  75. package/components/index.d.ts +4 -0
  76. package/components/index.js +584 -553
  77. package/components/infinite-canvas.js +1 -1
  78. package/components/input-field.js +51 -46
  79. package/components/input.js +20 -20
  80. package/components/link.js +9 -9
  81. package/components/modal.js +105 -73
  82. package/components/navbar.d.ts +1 -1
  83. package/components/navbar.js +1 -1
  84. package/components/number-field.js +38 -29
  85. package/components/page-header.js +12 -12
  86. package/components/pagination.js +19 -19
  87. package/components/panel.js +2 -2
  88. package/components/pixel-blast-svg.js +3 -3
  89. package/components/pixel-icon.d.ts +3 -1
  90. package/components/pixel-icon.js +294 -215
  91. package/components/popover.d.ts +1 -1
  92. package/components/popover.js +66 -64
  93. package/components/progress-circle.js +36 -32
  94. package/components/progress.js +28 -24
  95. package/components/radio.js +59 -49
  96. package/components/resizable-panel.js +1 -1
  97. package/components/reveal.d.ts +2 -2
  98. package/components/ripple.d.ts +3 -3
  99. package/components/scroll-area.js +17 -16
  100. package/components/segmented.d.ts +4 -1
  101. package/components/segmented.js +26 -25
  102. package/components/select.d.ts +2 -0
  103. package/components/select.js +61 -57
  104. package/components/setting-row.js +45 -42
  105. package/components/sidebar.d.ts +2 -2
  106. package/components/sidebar.js +131 -127
  107. package/components/skeleton.js +5 -5
  108. package/components/spinner.d.ts +13 -4
  109. package/components/spinner.js +42 -42
  110. package/components/stepper.js +21 -21
  111. package/components/switch.js +52 -32
  112. package/components/table.d.ts +24 -7
  113. package/components/table.js +457 -220
  114. package/components/tabs.js +149 -137
  115. package/components/textarea.js +1 -2
  116. package/components/toast.js +66 -66
  117. package/components/tooltip.js +2 -2
  118. package/components/tree.js +62 -51
  119. package/components/typography.d.ts +2 -1
  120. package/components/typography.js +33 -32
  121. package/components/ui/button.d.ts +2 -2
  122. package/components/ui/button.js +19 -19
  123. package/components/ui/collapsible.d.ts +1 -5
  124. package/components/ui/dialog.d.ts +3 -3
  125. package/components/ui/dialog.js +95 -58
  126. package/components/ui/tooltip.d.ts +2 -2
  127. package/components/ui/tooltip.js +67 -33
  128. package/components/viz-charts.js +95 -95
  129. package/demo/components/add-to-artifact.js +341 -0
  130. package/demo/lib/artifact-library.js +134 -0
  131. package/fonts/aribau-grotesk-medium.woff2 +0 -0
  132. package/fonts/aribau-grotesk-regular.woff2 +0 -0
  133. package/fonts.css +11 -11
  134. package/hooks/agents-ui/use-agent-audio-visualizer-aura.js +17 -16
  135. package/hooks/agents-ui/use-agent-audio-visualizer-wave.js +21 -20
  136. package/lib/icons.d.ts +12 -0
  137. package/lib/icons.js +107 -104
  138. package/lib/motion.d.ts +42 -39
  139. package/lib/motion.js +112 -52
  140. package/lib/spinner-mark.d.ts +9 -0
  141. package/lib/spinner-mark.js +98 -0
  142. package/llms.txt +69 -26
  143. package/manifest.json +344 -42
  144. package/package.json +1 -1
  145. package/styles.css +175 -161
  146. package/theme.css +104 -128
  147. package/components/ui/collapsible.js +0 -35
  148. package/fonts/aribau-grotesk-500.otf +0 -0
  149. package/fonts/aribau-grotesk-600.woff2 +0 -0
@@ -1,48 +1,48 @@
1
1
  "use client";
2
- import { jsx as f, jsxs as E } from "react/jsx-runtime";
3
- import * as t from "react";
4
- import { MotionConfig as O, motion as S } from "motion/react";
5
- import { cva as L } from "class-variance-authority";
2
+ import { jsx as f, jsxs as L } from "react/jsx-runtime";
3
+ import * as r from "react";
4
+ import { MotionConfig as B, motion as P } from "motion/react";
5
+ import { cva as $ } from "class-variance-authority";
6
6
  import { cn as b } from "../lib/cn.js";
7
- import { EASE_OUT as V } from "../lib/motion.js";
8
- const P = t.createContext(null);
9
- function I(o) {
10
- const e = t.useContext(P);
7
+ import { springControl as S } from "../lib/motion.js";
8
+ const I = (s, e, a) => `${s}-${e}-${encodeURIComponent(a).replaceAll("%", "_")}`, M = r.createContext(null);
9
+ function j(s) {
10
+ const e = r.useContext(M);
11
11
  if (!e)
12
- throw new Error(`<${o}> must be used within <Tabs>`);
12
+ throw new Error(`<${s}> must be used within <Tabs>`);
13
13
  return e;
14
14
  }
15
- const B = t.forwardRef(
15
+ const H = r.forwardRef(
16
16
  ({
17
- className: o,
17
+ className: s,
18
18
  value: e,
19
19
  defaultValue: a,
20
- onValueChange: n,
21
- variant: s = "primary",
20
+ onValueChange: i,
21
+ variant: o = "primary",
22
22
  orientation: l = "horizontal",
23
- size: m = "md",
24
- children: $,
25
- ...j
26
- }, R) => {
27
- const h = e !== void 0, [v, z] = t.useState(a), w = t.useId(), d = t.useId(), y = t.useRef([]), g = t.useRef(/* @__PURE__ */ new Set()), x = h ? e : v, T = t.useCallback(
28
- (r) => {
29
- h || z(r), n == null || n(r);
23
+ size: u = "md",
24
+ children: R,
25
+ ...A
26
+ }, k) => {
27
+ const h = e !== void 0, [N, z] = r.useState(a), w = r.useId().replaceAll(":", ""), d = r.useId(), y = r.useRef([]), v = r.useRef(/* @__PURE__ */ new Set()), x = h ? e : N, T = r.useCallback(
28
+ (t) => {
29
+ h || z(t), i == null || i(t);
30
30
  },
31
- [h, n]
32
- ), c = t.useCallback((r) => {
33
- y.current.includes(r) || y.current.push(r);
34
- }, []), A = t.useMemo(
31
+ [h, i]
32
+ ), c = r.useCallback((t) => {
33
+ y.current.includes(t) || y.current.push(t);
34
+ }, []), V = r.useMemo(
35
35
  () => ({
36
36
  value: x,
37
37
  setValue: T,
38
38
  baseId: w,
39
39
  registerTab: c,
40
40
  tabs: y,
41
- disabled: g,
41
+ disabled: v,
42
42
  thumbId: d,
43
- variant: s,
43
+ variant: o,
44
44
  orientation: l,
45
- size: m
45
+ size: u
46
46
  }),
47
47
  [
48
48
  x,
@@ -50,36 +50,36 @@ const B = t.forwardRef(
50
50
  w,
51
51
  c,
52
52
  d,
53
- s,
53
+ o,
54
54
  l,
55
- m
55
+ u
56
56
  ]
57
57
  );
58
- return /* @__PURE__ */ f(P.Provider, { value: A, children: /* @__PURE__ */ f(
58
+ return /* @__PURE__ */ f(M.Provider, { value: V, children: /* @__PURE__ */ f(
59
59
  "div",
60
60
  {
61
- ref: R,
61
+ ref: k,
62
62
  "data-orientation": l,
63
- "data-variant": s,
63
+ "data-variant": o,
64
64
  className: b(
65
65
  "flex gap-4",
66
66
  l === "horizontal" ? "flex-col" : "flex-row",
67
- o
67
+ s
68
68
  ),
69
- ...j,
70
- children: /* @__PURE__ */ f(O, { reducedMotion: "user", children: $ })
69
+ ...A,
70
+ children: /* @__PURE__ */ f(B, { reducedMotion: "user", children: R })
71
71
  }
72
72
  ) });
73
73
  }
74
74
  );
75
- B.displayName = "Tabs";
76
- const H = L("inline-flex", {
75
+ H.displayName = "Tabs";
76
+ const O = $("inline-flex", {
77
77
  variants: {
78
78
  variant: {
79
- primary: "bg-surface p-1 rounded-lg gap-1",
79
+ primary: "bg-surface p-1 gap-1",
80
80
  secondary: "gap-0",
81
- // Pill: separate rounded pills with a gap, no track — a single-select
82
- // filter row (each pill can carry a `· N` count via Tab's `count`).
81
+ // Legacy `pill` API: separate compact filter tabs with a gap and no
82
+ // track (each tab can carry a `· N` count via Tab's `count`).
83
83
  pill: "gap-1.5 flex-wrap"
84
84
  },
85
85
  orientation: {
@@ -93,6 +93,10 @@ const H = L("inline-flex", {
93
93
  }
94
94
  },
95
95
  compoundVariants: [
96
+ // Track radius follows control size: compact = 4px, standard = 8px.
97
+ { variant: "primary", size: "sm", className: "rounded-sm" },
98
+ { variant: "primary", size: "md", className: "rounded-md" },
99
+ { variant: "primary", size: "lg", className: "rounded-md" },
96
100
  // Secondary variant uses a subtle rail (border) on the opposite edge of
97
101
  // the active indicator. Kept intentionally hairline — surfaces avoid
98
102
  // strokes, but a tab rail is a control edge, not a surface.
@@ -112,28 +116,28 @@ const H = L("inline-flex", {
112
116
  orientation: "horizontal",
113
117
  size: "md"
114
118
  }
115
- }), _ = t.forwardRef(
116
- ({ className: o, ...e }, a) => {
117
- const { variant: n, orientation: s, size: l } = I("TabList");
119
+ }), _ = r.forwardRef(
120
+ ({ className: s, ...e }, a) => {
121
+ const { variant: i, orientation: o, size: l } = j("TabList");
118
122
  return /* @__PURE__ */ f(
119
123
  "div",
120
124
  {
121
125
  ref: a,
122
126
  role: "tablist",
123
- "aria-orientation": s,
124
- "data-orientation": s,
125
- "data-variant": n,
126
- className: b(H({ variant: n, orientation: s, size: l }), o),
127
+ "aria-orientation": o,
128
+ "data-orientation": o,
129
+ "data-variant": i,
130
+ className: b(O({ variant: i, orientation: o, size: l }), s),
127
131
  ...e
128
132
  }
129
133
  );
130
134
  }
131
135
  );
132
136
  _.displayName = "TabList";
133
- const q = L(
137
+ const q = $(
134
138
  b(
135
139
  "relative inline-flex items-center whitespace-nowrap font-normal select-none",
136
- "transition-colors duration-(--duration-fast) cursor-pointer",
140
+ "transition-colors duration-150 cursor-pointer",
137
141
  "outline-none focus-visible:ring-3 focus-visible:ring-ring",
138
142
  "disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed"
139
143
  ),
@@ -142,7 +146,7 @@ const q = L(
142
146
  variant: {
143
147
  primary: "justify-center rounded-md",
144
148
  secondary: "",
145
- pill: "justify-center rounded-full"
149
+ pill: "justify-center"
146
150
  },
147
151
  orientation: {
148
152
  horizontal: "",
@@ -161,19 +165,19 @@ const q = L(
161
165
  compoundVariants: [
162
166
  // Sizing — differs per variant (primary is filled, secondary is
163
167
  // flush-underline).
164
- { variant: "primary", size: "sm", className: "h-6 px-2.5" },
165
- { variant: "primary", size: "md", className: "h-8 px-3" },
166
- { variant: "primary", size: "lg", className: "h-9 px-4" },
167
- // Pill — separate rounded pills; the active pill fills with foreground,
168
- // inactive pills read as a quiet fill (no track, no sliding thumb).
169
- { variant: "pill", size: "sm", className: "h-6 px-2.5 gap-1" },
170
- { variant: "pill", size: "md", className: "h-7 px-3 gap-1" },
171
- { variant: "pill", size: "lg", className: "h-8 px-3.5 gap-1.5" },
168
+ { variant: "primary", size: "sm", className: "h-6 rounded-sm px-2.5" },
169
+ { variant: "primary", size: "md", className: "h-8 rounded-md px-3" },
170
+ { variant: "primary", size: "lg", className: "h-9 rounded-md px-4" },
171
+ // Legacy `pill` API — visually these are separate compact filter tabs,
172
+ // with the same size-based 4px / 8px radii as every other control.
173
+ { variant: "pill", size: "sm", className: "h-6 rounded-sm px-2.5 gap-1" },
174
+ { variant: "pill", size: "md", className: "h-7 rounded-md px-3 gap-1" },
175
+ { variant: "pill", size: "lg", className: "h-8 rounded-md px-3.5 gap-1.5" },
172
176
  { variant: "pill", selected: !0, className: "bg-foreground text-background" },
173
177
  {
174
178
  variant: "pill",
175
179
  selected: !1,
176
- className: "bg-muted text-muted-foreground hover:bg-fill hover:text-foreground"
180
+ className: "bg-muted text-muted-foreground hover:bg-accent hover:text-foreground"
177
181
  },
178
182
  // Secondary horizontal: -1px sits over the rail so the sliding
179
183
  // indicator overlaps it cleanly.
@@ -222,126 +226,134 @@ const q = L(
222
226
  selected: !1
223
227
  }
224
228
  }
225
- ), C = t.forwardRef(
226
- ({ className: o, value: e, isDisabled: a, count: n, children: s, onClick: l, onKeyDown: m, ...$ }, j) => {
229
+ ), F = r.forwardRef(
230
+ ({ className: s, value: e, isDisabled: a, count: i, children: o, onClick: l, onKeyDown: u, ...R }, A) => {
227
231
  const {
228
- value: R,
232
+ value: k,
229
233
  setValue: h,
230
- baseId: v,
234
+ baseId: N,
231
235
  registerTab: z,
232
236
  tabs: w,
233
237
  disabled: d,
234
238
  thumbId: y,
235
- variant: g,
239
+ variant: v,
236
240
  orientation: x,
237
241
  size: T
238
- } = I("Tab"), c = R === e;
239
- t.useEffect(() => {
242
+ } = j("Tab"), c = k === e;
243
+ r.useEffect(() => {
240
244
  z(e);
241
- }, [z, e]), t.useEffect(() => {
245
+ }, [z, e]), r.useEffect(() => {
242
246
  a ? d.current.add(e) : d.current.delete(e);
243
247
  }, [d, a, e]);
244
- const A = (r) => {
245
- if (m == null || m(r), r.defaultPrevented) return;
246
- const u = w.current, N = u.indexOf(e);
247
- if (N === -1) return;
248
- const M = x === "vertical" ? ["ArrowDown"] : ["ArrowRight", "ArrowDown"], U = x === "vertical" ? ["ArrowUp"] : ["ArrowLeft", "ArrowUp"];
249
- let i = null;
250
- if (M.includes(r.key)) {
251
- i = N;
248
+ const V = (t) => {
249
+ if (u == null || u(t), t.defaultPrevented) return;
250
+ const m = w.current, g = m.indexOf(e);
251
+ if (g === -1) return;
252
+ const U = x === "vertical" ? ["ArrowDown"] : ["ArrowRight", "ArrowDown"], C = x === "vertical" ? ["ArrowUp"] : ["ArrowLeft", "ArrowUp"];
253
+ let n = null;
254
+ if (U.includes(t.key)) {
255
+ n = g;
252
256
  do
253
- i = (i + 1) % u.length;
254
- while (d.current.has(u[i]) && i !== N);
255
- } else if (U.includes(r.key)) {
256
- i = N;
257
+ n = (n + 1) % m.length;
258
+ while (d.current.has(m[n]) && n !== g);
259
+ } else if (C.includes(t.key)) {
260
+ n = g;
257
261
  do
258
- i = (i - 1 + u.length) % u.length;
259
- while (d.current.has(u[i]) && i !== N);
260
- } else if (r.key === "Home")
261
- i = u.findIndex((p) => !d.current.has(p));
262
- else if (r.key === "End") {
263
- for (let p = u.length - 1; p >= 0; p--)
264
- if (!d.current.has(u[p])) {
265
- i = p;
262
+ n = (n - 1 + m.length) % m.length;
263
+ while (d.current.has(m[n]) && n !== g);
264
+ } else if (t.key === "Home")
265
+ n = m.findIndex((p) => !d.current.has(p));
266
+ else if (t.key === "End") {
267
+ for (let p = m.length - 1; p >= 0; p--)
268
+ if (!d.current.has(m[p])) {
269
+ n = p;
266
270
  break;
267
271
  }
268
272
  }
269
- if (i !== null && i !== -1) {
270
- r.preventDefault();
271
- const p = u[i];
273
+ if (n !== null && n !== -1) {
274
+ t.preventDefault();
275
+ const p = m[n];
272
276
  h(p);
273
- const k = document.getElementById(`${v}-tab-${p}`);
274
- k == null || k.focus();
277
+ const E = document.getElementById(I(N, "tab", p));
278
+ E == null || E.focus();
275
279
  }
276
280
  };
277
- return /* @__PURE__ */ E(
281
+ return /* @__PURE__ */ L(
278
282
  "button",
279
283
  {
280
- ref: j,
284
+ ref: A,
281
285
  type: "button",
282
286
  role: "tab",
283
- id: `${v}-tab-${e}`,
287
+ id: I(N, "tab", e),
284
288
  "aria-selected": c,
285
- "aria-controls": `${v}-panel-${e}`,
286
289
  "aria-disabled": a || void 0,
287
290
  disabled: a,
288
291
  "data-selected": c || void 0,
289
292
  "data-disabled": a || void 0,
290
293
  tabIndex: c && !a ? 0 : -1,
291
294
  className: b(
292
- q({ variant: g, orientation: x, size: T, selected: c }),
293
- o
295
+ q({ variant: v, orientation: x, size: T, selected: c }),
296
+ s
294
297
  ),
295
- onClick: (r) => {
296
- l == null || l(r), a || h(e);
298
+ onClick: (t) => {
299
+ l == null || l(t), a || h(e);
297
300
  },
298
- onKeyDown: A,
299
- ...$,
301
+ onKeyDown: V,
302
+ ...R,
300
303
  children: [
301
- c && g === "primary" && /* @__PURE__ */ f(
302
- S.span,
304
+ c && v === "primary" && /* @__PURE__ */ f(
305
+ P.span,
303
306
  {
304
307
  layoutId: y,
305
308
  "aria-hidden": !0,
306
- transition: { duration: 0.2, ease: V },
307
- className: "absolute inset-0 rounded-md bg-elevated shadow-elevation"
309
+ transition: S,
310
+ className: "absolute inset-0 rounded-[inherit] bg-elevated shadow-elevation"
308
311
  }
309
312
  ),
310
- c && g === "secondary" && /* @__PURE__ */ f(
311
- S.span,
313
+ c && v === "secondary" && /* @__PURE__ */ f(
314
+ P.span,
312
315
  {
313
316
  layoutId: y,
314
317
  "aria-hidden": !0,
315
- transition: { duration: 0.2, ease: V },
318
+ transition: S,
316
319
  className: b(
317
320
  "absolute bg-brand",
318
321
  x === "horizontal" ? "left-0 right-0 bottom-0 h-0.5" : "top-0 bottom-0 right-0 w-0.5"
319
322
  )
320
323
  }
321
324
  ),
322
- /* @__PURE__ */ E("span", { className: "relative inline-flex items-center gap-1", children: [
323
- s,
324
- n != null && /* @__PURE__ */ E("span", { className: b("tabular-nums", c ? "opacity-60" : "text-muted-foreground/70"), children: [
325
- "· ",
326
- n
327
- ] })
325
+ /* @__PURE__ */ L("span", { className: "relative inline-flex items-center gap-1", children: [
326
+ o,
327
+ i != null && /* @__PURE__ */ L(
328
+ "span",
329
+ {
330
+ className: b(
331
+ "tabular-nums",
332
+ c && v === "pill" ? "text-background/70" : "text-secondary"
333
+ ),
334
+ children: [
335
+ "· ",
336
+ i
337
+ ]
338
+ }
339
+ )
328
340
  ] })
329
341
  ]
330
342
  }
331
343
  );
332
344
  }
333
345
  );
334
- C.displayName = "Tab";
335
- const F = t.forwardRef(
336
- ({ className: o, ...e }, a) => {
337
- const { orientation: n, variant: s } = I("TabSeparator");
338
- return s === "primary" ? /* @__PURE__ */ f(
346
+ F.displayName = "Tab";
347
+ const G = r.forwardRef(
348
+ ({ className: s, ...e }, a) => {
349
+ const { orientation: i, variant: o } = j("TabSeparator");
350
+ return o === "primary" ? /* @__PURE__ */ f(
339
351
  "span",
340
352
  {
341
353
  ref: a,
342
354
  "aria-hidden": !0,
343
355
  role: "separator",
344
- className: b("shrink-0", o),
356
+ className: b("shrink-0", s),
345
357
  ...e
346
358
  }
347
359
  ) : /* @__PURE__ */ f(
@@ -352,41 +364,41 @@ const F = t.forwardRef(
352
364
  role: "separator",
353
365
  className: b(
354
366
  "shrink-0 bg-border",
355
- n === "horizontal" ? "mx-1 h-4 w-px" : "my-1 h-px w-full",
356
- o
367
+ i === "horizontal" ? "mx-1 h-4 w-px" : "my-1 h-px w-full",
368
+ s
357
369
  ),
358
370
  ...e
359
371
  }
360
372
  );
361
373
  }
362
374
  );
363
- F.displayName = "TabSeparator";
364
- const G = t.forwardRef(
365
- ({ className: o, value: e, children: a, ...n }, s) => {
366
- const { value: l, baseId: m } = I("TabPanel");
375
+ G.displayName = "TabSeparator";
376
+ const J = r.forwardRef(
377
+ ({ className: s, value: e, children: a, ...i }, o) => {
378
+ const { value: l, baseId: u } = j("TabPanel");
367
379
  return l !== e ? null : /* @__PURE__ */ f(
368
380
  "div",
369
381
  {
370
- ref: s,
382
+ ref: o,
371
383
  role: "tabpanel",
372
- id: `${m}-panel-${e}`,
373
- "aria-labelledby": `${m}-tab-${e}`,
384
+ id: I(u, "panel", e),
385
+ "aria-labelledby": I(u, "tab", e),
374
386
  tabIndex: 0,
375
387
  className: b(
376
388
  "flex-1 outline-none focus-visible:ring-3 focus-visible:ring-ring rounded-sm",
377
- o
389
+ s
378
390
  ),
379
- ...n,
391
+ ...i,
380
392
  children: a
381
393
  }
382
394
  );
383
395
  }
384
396
  );
385
- G.displayName = "TabPanel";
397
+ J.displayName = "TabPanel";
386
398
  export {
387
- C as Tab,
399
+ F as Tab,
388
400
  _ as TabList,
389
- G as TabPanel,
390
- F as TabSeparator,
391
- B as Tabs
401
+ J as TabPanel,
402
+ G as TabSeparator,
403
+ H as Tabs
392
404
  };
@@ -11,8 +11,7 @@ const n = o.forwardRef(
11
11
  "aria-invalid": r || void 0,
12
12
  className: s(
13
13
  m,
14
- // Multi-line: the pill radius single-line controls use would clip
15
- // the first/last lines oddly, so textareas stay softly rounded.
14
+ // Multi-line controls use the 4px surface radius.
16
15
  "min-h-20 resize-y rounded-lg py-2 text-xs",
17
16
  e
18
17
  ),