@alfadocs/ui-kit-debug 0.62.0 → 0.64.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 (161) hide show
  1. package/dist/_chunks/{ai-prompt-input-C6sCr1Vi.js → ai-prompt-input-Dx8eXoPm.js} +2 -2
  2. package/dist/_chunks/{ai-prompt-input-C6sCr1Vi.js.map → ai-prompt-input-Dx8eXoPm.js.map} +1 -1
  3. package/dist/_chunks/{audio-recorder-D6OVfNiZ.js → audio-recorder-CdXuT9ln.js} +2 -2
  4. package/dist/_chunks/{audio-recorder-D6OVfNiZ.js.map → audio-recorder-CdXuT9ln.js.map} +1 -1
  5. package/dist/_chunks/{bishop-score-B9tvgoIq.js → bishop-score-CzjSx-dm.js} +2 -2
  6. package/dist/_chunks/{bishop-score-B9tvgoIq.js.map → bishop-score-CzjSx-dm.js.map} +1 -1
  7. package/dist/_chunks/{booking-BUV9fspj.js → booking-ChfvWy3P.js} +2 -2
  8. package/dist/_chunks/{booking-BUV9fspj.js.map → booking-ChfvWy3P.js.map} +1 -1
  9. package/dist/_chunks/{care-plan-card-QmNpGggC.js → care-plan-card-DhZNoXs4.js} +2 -2
  10. package/dist/_chunks/{care-plan-card-QmNpGggC.js.map → care-plan-card-DhZNoXs4.js.map} +1 -1
  11. package/dist/_chunks/{care-plan-entry-card-Cnra7vUc.js → care-plan-entry-card-DW70yBOD.js} +2 -2
  12. package/dist/_chunks/{care-plan-entry-card-Cnra7vUc.js.map → care-plan-entry-card-DW70yBOD.js.map} +1 -1
  13. package/dist/_chunks/{editable-currency-cell-renderer-D5C5tCfu.js → editable-currency-cell-renderer-BQgaKFCz.js} +2 -2
  14. package/dist/_chunks/{editable-currency-cell-renderer-D5C5tCfu.js.map → editable-currency-cell-renderer-BQgaKFCz.js.map} +1 -1
  15. package/dist/_chunks/finished-terminal-VjZ_-eDD.js +122 -0
  16. package/dist/_chunks/finished-terminal-VjZ_-eDD.js.map +1 -0
  17. package/dist/_chunks/{gestational-age-calculator-AkNFfZYs.js → gestational-age-calculator-D85E8lGN.js} +2 -2
  18. package/dist/_chunks/{gestational-age-calculator-AkNFfZYs.js.map → gestational-age-calculator-D85E8lGN.js.map} +1 -1
  19. package/dist/_chunks/{pregnancy-dating-Dg6dTe1p.js → pregnancy-dating-7NUaAfob.js} +2 -2
  20. package/dist/_chunks/{pregnancy-dating-Dg6dTe1p.js.map → pregnancy-dating-7NUaAfob.js.map} +1 -1
  21. package/dist/_chunks/{select-hsCaJSX3.js → select-CEtRcon5.js} +46 -45
  22. package/dist/_chunks/select-CEtRcon5.js.map +1 -0
  23. package/dist/_chunks/{tabs-BpPYVme_.js → tabs-BIQ0ew1T.js} +2 -2
  24. package/dist/_chunks/{tabs-BpPYVme_.js.map → tabs-BIQ0ew1T.js.map} +1 -1
  25. package/dist/_chunks/tooth-scheme-CiphQaON.js +1257 -0
  26. package/dist/_chunks/tooth-scheme-CiphQaON.js.map +1 -0
  27. package/dist/_chunks/{unit-converter-3sINXO3m.js → unit-converter-BIbXHIQA.js} +2 -2
  28. package/dist/_chunks/{unit-converter-3sINXO3m.js.map → unit-converter-BIbXHIQA.js.map} +1 -1
  29. package/dist/_chunks/use-countdown-Yd6ts0_a.js +26 -0
  30. package/dist/_chunks/use-countdown-Yd6ts0_a.js.map +1 -0
  31. package/dist/agent-catalog.json +55 -4
  32. package/dist/components/ai-prompt-input/index.js +1 -1
  33. package/dist/components/audio-recorder/index.js +1 -1
  34. package/dist/components/bishop-score/index.js +1 -1
  35. package/dist/components/booking/index.js +1 -1
  36. package/dist/components/care-plan-card/index.js +1 -1
  37. package/dist/components/care-plan-entry-card/index.js +1 -1
  38. package/dist/components/data-table/index.js +1 -1
  39. package/dist/components/finished-terminal/finished-terminal.d.ts +55 -0
  40. package/dist/components/finished-terminal/finished-terminal.d.ts.map +1 -0
  41. package/dist/components/finished-terminal/index.d.ts +3 -0
  42. package/dist/components/finished-terminal/index.d.ts.map +1 -0
  43. package/dist/components/finished-terminal/index.js +5 -0
  44. package/dist/components/finished-terminal/index.js.map +1 -0
  45. package/dist/components/gestational-age-calculator/index.js +1 -1
  46. package/dist/components/index.d.ts +1 -0
  47. package/dist/components/index.d.ts.map +1 -1
  48. package/dist/components/pregnancy-dating/index.js +1 -1
  49. package/dist/components/select/index.js +1 -1
  50. package/dist/components/select/select.d.ts +8 -0
  51. package/dist/components/select/select.d.ts.map +1 -1
  52. package/dist/components/tabs/index.js +1 -1
  53. package/dist/components/tooth-scheme/index.d.ts +2 -2
  54. package/dist/components/tooth-scheme/index.d.ts.map +1 -1
  55. package/dist/components/tooth-scheme/index.js +22 -15
  56. package/dist/components/tooth-scheme/tooth-data.d.ts +79 -18
  57. package/dist/components/tooth-scheme/tooth-data.d.ts.map +1 -1
  58. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts +2 -0
  59. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
  60. package/dist/components/tooth-scheme/tooth-scheme.d.ts +48 -1
  61. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -1
  62. package/dist/components/unit-converter/index.js +1 -1
  63. package/dist/hooks/index.js +79 -99
  64. package/dist/hooks/index.js.map +1 -1
  65. package/dist/i18n/locales/ar.d.ts +22 -0
  66. package/dist/i18n/locales/ar.d.ts.map +1 -1
  67. package/dist/i18n/locales/ar.js +23 -1
  68. package/dist/i18n/locales/ar.js.map +1 -1
  69. package/dist/i18n/locales/de.d.ts +22 -0
  70. package/dist/i18n/locales/de.d.ts.map +1 -1
  71. package/dist/i18n/locales/de.js +23 -1
  72. package/dist/i18n/locales/de.js.map +1 -1
  73. package/dist/i18n/locales/el.d.ts +22 -0
  74. package/dist/i18n/locales/el.d.ts.map +1 -1
  75. package/dist/i18n/locales/el.js +23 -1
  76. package/dist/i18n/locales/el.js.map +1 -1
  77. package/dist/i18n/locales/en.d.ts +22 -0
  78. package/dist/i18n/locales/en.d.ts.map +1 -1
  79. package/dist/i18n/locales/en.js +23 -1
  80. package/dist/i18n/locales/en.js.map +1 -1
  81. package/dist/i18n/locales/es.d.ts +22 -0
  82. package/dist/i18n/locales/es.d.ts.map +1 -1
  83. package/dist/i18n/locales/es.js +23 -1
  84. package/dist/i18n/locales/es.js.map +1 -1
  85. package/dist/i18n/locales/fr.d.ts +22 -0
  86. package/dist/i18n/locales/fr.d.ts.map +1 -1
  87. package/dist/i18n/locales/fr.js +23 -1
  88. package/dist/i18n/locales/fr.js.map +1 -1
  89. package/dist/i18n/locales/hi.d.ts +22 -0
  90. package/dist/i18n/locales/hi.d.ts.map +1 -1
  91. package/dist/i18n/locales/hi.js +23 -1
  92. package/dist/i18n/locales/hi.js.map +1 -1
  93. package/dist/i18n/locales/it.d.ts +22 -0
  94. package/dist/i18n/locales/it.d.ts.map +1 -1
  95. package/dist/i18n/locales/it.js +23 -1
  96. package/dist/i18n/locales/it.js.map +1 -1
  97. package/dist/i18n/locales/ja.d.ts +22 -0
  98. package/dist/i18n/locales/ja.d.ts.map +1 -1
  99. package/dist/i18n/locales/ja.js +23 -1
  100. package/dist/i18n/locales/ja.js.map +1 -1
  101. package/dist/i18n/locales/nl.d.ts +22 -0
  102. package/dist/i18n/locales/nl.d.ts.map +1 -1
  103. package/dist/i18n/locales/nl.js +23 -1
  104. package/dist/i18n/locales/nl.js.map +1 -1
  105. package/dist/i18n/locales/pl.d.ts +22 -0
  106. package/dist/i18n/locales/pl.d.ts.map +1 -1
  107. package/dist/i18n/locales/pl.js +23 -1
  108. package/dist/i18n/locales/pl.js.map +1 -1
  109. package/dist/i18n/locales/pt.d.ts +22 -0
  110. package/dist/i18n/locales/pt.d.ts.map +1 -1
  111. package/dist/i18n/locales/pt.js +23 -1
  112. package/dist/i18n/locales/pt.js.map +1 -1
  113. package/dist/i18n/locales/ro.d.ts +22 -0
  114. package/dist/i18n/locales/ro.d.ts.map +1 -1
  115. package/dist/i18n/locales/ro.js +23 -1
  116. package/dist/i18n/locales/ro.js.map +1 -1
  117. package/dist/i18n/locales/ru.d.ts +22 -0
  118. package/dist/i18n/locales/ru.d.ts.map +1 -1
  119. package/dist/i18n/locales/ru.js +23 -1
  120. package/dist/i18n/locales/ru.js.map +1 -1
  121. package/dist/i18n/locales/sq.d.ts +22 -0
  122. package/dist/i18n/locales/sq.d.ts.map +1 -1
  123. package/dist/i18n/locales/sq.js +23 -1
  124. package/dist/i18n/locales/sq.js.map +1 -1
  125. package/dist/i18n/locales/sv.d.ts +22 -0
  126. package/dist/i18n/locales/sv.d.ts.map +1 -1
  127. package/dist/i18n/locales/sv.js +23 -1
  128. package/dist/i18n/locales/sv.js.map +1 -1
  129. package/dist/i18n/locales/tr.d.ts +22 -0
  130. package/dist/i18n/locales/tr.d.ts.map +1 -1
  131. package/dist/i18n/locales/tr.js +23 -1
  132. package/dist/i18n/locales/tr.js.map +1 -1
  133. package/dist/i18n/locales/zh.d.ts +22 -0
  134. package/dist/i18n/locales/zh.d.ts.map +1 -1
  135. package/dist/i18n/locales/zh.js +23 -1
  136. package/dist/i18n/locales/zh.js.map +1 -1
  137. package/dist/index.js +354 -345
  138. package/dist/index.js.map +1 -1
  139. package/dist/locales/ar.json +23 -1
  140. package/dist/locales/de.json +23 -1
  141. package/dist/locales/el.json +23 -1
  142. package/dist/locales/en.json +23 -1
  143. package/dist/locales/es.json +23 -1
  144. package/dist/locales/fr.json +23 -1
  145. package/dist/locales/hi.json +23 -1
  146. package/dist/locales/it.json +23 -1
  147. package/dist/locales/ja.json +23 -1
  148. package/dist/locales/nl.json +23 -1
  149. package/dist/locales/pl.json +23 -1
  150. package/dist/locales/pt.json +23 -1
  151. package/dist/locales/ro.json +23 -1
  152. package/dist/locales/ru.json +23 -1
  153. package/dist/locales/sq.json +23 -1
  154. package/dist/locales/sv.json +23 -1
  155. package/dist/locales/tr.json +23 -1
  156. package/dist/locales/zh.json +23 -1
  157. package/dist/tokens.css +1 -1
  158. package/package.json +5 -1
  159. package/dist/_chunks/select-hsCaJSX3.js.map +0 -1
  160. package/dist/_chunks/tooth-scheme-CxlsLjfN.js +0 -753
  161. package/dist/_chunks/tooth-scheme-CxlsLjfN.js.map +0 -1
@@ -1,17 +1,17 @@
1
1
  import { jsx as t, jsxs as f } from "react/jsx-runtime";
2
- import { forwardRef as a, useContext as me, useState as P, useRef as G, useMemo as fe } from "react";
2
+ import { forwardRef as a, useContext as fe, useState as P, useRef as G, useMemo as ge } from "react";
3
3
  import * as o from "@radix-ui/react-select";
4
4
  import { c as z } from "./index-D2ZczOXr.js";
5
- import { useTranslation as ge } from "react-i18next";
6
- import { u as he, F as ve } from "./form-field-context-B3APVHKx.js";
7
- import { g as be } from "./group-options-BvKhQ3xb.js";
8
- import { C as ye } from "./chevron-up-zOEDrmBB.js";
5
+ import { useTranslation as he } from "react-i18next";
6
+ import { u as ve, F as be } from "./form-field-context-B3APVHKx.js";
7
+ import { g as ye } from "./group-options-BvKhQ3xb.js";
8
+ import { C as Se } from "./chevron-up-zOEDrmBB.js";
9
9
  import { C as q } from "./chevron-down-BX_NP2Yh.js";
10
- import { C as Se } from "./check-DPdL_Sm7.js";
11
- import { u as xe } from "./use-direction-Dp8h70PP.js";
12
- import { u as Ne } from "./registry-nPAVE19X.js";
13
- import { X as Ce } from "./x-CCcI3eJp.js";
14
- const we = {
10
+ import { C as xe } from "./check-DPdL_Sm7.js";
11
+ import { u as Ne } from "./use-direction-Dp8h70PP.js";
12
+ import { u as Ce } from "./registry-nPAVE19X.js";
13
+ import { X as we } from "./x-CCcI3eJp.js";
14
+ const ze = {
15
15
  id: "select",
16
16
  capabilities: ["select_single", "open", "close"],
17
17
  state: {
@@ -109,7 +109,7 @@ const we = {
109
109
  tone: "default"
110
110
  }
111
111
  }
112
- ), ze = z(
112
+ ), Ie = z(
113
113
  [
114
114
  "ds:z-[var(--z-dropdown)] ds:overflow-hidden",
115
115
  "ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:text-foreground",
@@ -121,7 +121,7 @@ const we = {
121
121
  "ds:data-[side=top]:slide-in-from-bottom-2",
122
122
  "ds:motion-reduce:animate-none"
123
123
  ].join(" ")
124
- ), Ie = z(
124
+ ), je = z(
125
125
  [
126
126
  "ds:relative ds:flex ds:cursor-pointer ds:items-center",
127
127
  "ds:rounded-[var(--radius-sm)]",
@@ -141,20 +141,20 @@ const we = {
141
141
  size: "md"
142
142
  }
143
143
  }
144
- ), je = [
144
+ ), Ve = [
145
145
  "ds:ps-8 ds:pe-3 ds:py-1.5",
146
146
  "type-eyebrow ds:text-muted-foreground",
147
147
  "ds:sticky ds:top-0 ds:bg-background"
148
- ].join(" "), Ve = {
148
+ ].join(" "), ke = {
149
149
  sm: "ds:size-3.5",
150
150
  md: "ds:size-4",
151
151
  lg: "ds:size-5"
152
- }, ke = {
152
+ }, Te = {
153
153
  sm: "ds:start-2",
154
154
  md: "ds:start-2",
155
155
  lg: "ds:start-3"
156
156
  };
157
- function Te(...e) {
157
+ function Re(...e) {
158
158
  return (s) => {
159
159
  for (const n of e)
160
160
  n && (typeof n == "function" ? n(s) : n.current = s);
@@ -191,10 +191,10 @@ const I = a(
191
191
  position: n,
192
192
  sideOffset: r,
193
193
  "data-component": "select-content",
194
- className: ze({ className: e }),
194
+ className: Ie({ className: e }),
195
195
  ...c,
196
196
  children: [
197
- /* @__PURE__ */ t(o.ScrollUpButton, { className: "ds:flex ds:items-center ds:justify-center ds:h-6 ds:bg-background ds:cursor-default", children: /* @__PURE__ */ t(ye, { "aria-hidden": "true", className: "ds:size-4" }) }),
197
+ /* @__PURE__ */ t(o.ScrollUpButton, { className: "ds:flex ds:items-center ds:justify-center ds:h-6 ds:bg-background ds:cursor-default", children: /* @__PURE__ */ t(Se, { "aria-hidden": "true", className: "ds:size-4" }) }),
198
198
  s,
199
199
  /* @__PURE__ */ t(o.ScrollDownButton, { className: "ds:flex ds:items-center ds:justify-center ds:h-6 ds:bg-background ds:cursor-default", children: /* @__PURE__ */ t(q, { "aria-hidden": "true", className: "ds:size-4" }) })
200
200
  ]
@@ -212,12 +212,12 @@ const j = a(({ className: e, ...s }, n) => /* @__PURE__ */ t(
212
212
  ));
213
213
  j.displayName = "Select.Viewport";
214
214
  const V = a(({ size: e = "md", className: s, children: n, ...r }, l) => {
215
- const c = ke[e ?? "md"], g = Ve[e ?? "md"];
215
+ const c = Te[e ?? "md"], g = ke[e ?? "md"];
216
216
  return /* @__PURE__ */ f(
217
217
  o.Item,
218
218
  {
219
219
  ref: l,
220
- className: Ie({ size: e, className: s }),
220
+ className: je({ size: e, className: s }),
221
221
  ...r,
222
222
  children: [
223
223
  /* @__PURE__ */ t(
@@ -225,7 +225,7 @@ const V = a(({ size: e = "md", className: s, children: n, ...r }, l) => {
225
225
  {
226
226
  className: `ds:absolute ${c} ds:inline-flex ds:items-center ds:justify-center`,
227
227
  "aria-hidden": "true",
228
- children: /* @__PURE__ */ t(o.ItemIndicator, { children: /* @__PURE__ */ t(Se, { className: g }) })
228
+ children: /* @__PURE__ */ t(o.ItemIndicator, { children: /* @__PURE__ */ t(xe, { className: g }) })
229
229
  }
230
230
  ),
231
231
  /* @__PURE__ */ t(o.ItemText, { children: n })
@@ -242,7 +242,7 @@ const k = a(({ className: e, ...s }, n) => /* @__PURE__ */ t(
242
242
  o.Label,
243
243
  {
244
244
  ref: n,
245
- className: [je, e].filter(Boolean).join(" "),
245
+ className: [Ve, e].filter(Boolean).join(" "),
246
246
  ...s
247
247
  }
248
248
  ));
@@ -270,18 +270,19 @@ const _ = a(function({
270
270
  size: T = "md",
271
271
  tone: Q = "default",
272
272
  className: Y,
273
+ container: Z,
273
274
  "aria-label": R
274
- }, Z) {
275
- const { t: x } = ge(), u = he(), p = me(ve) !== null, [ee, b] = P(
275
+ }, ee) {
276
+ const { t: x } = he(), u = ve(), p = fe(be) !== null, [te, b] = P(
276
277
  n ?? r ?? ""
277
- ), m = n !== void 0, h = m ? n : ee, [N, C] = P(!1), B = G(h);
278
+ ), m = n !== void 0, h = m ? n : te, [N, C] = P(!1), B = G(h);
278
279
  B.current = h;
279
- const te = S ?? (p ? u.id : void 0), O = (p ? u.disabled : !1) || !!E, se = (p ? u.required : !1) || !!X, D = p ? u.invalid : !1, oe = D ? "error" : Q, ne = p && u.describedBy ? u.describedBy : void 0, w = G(null), de = Te(Z, w), ie = xe(w), i = l, ae = (d) => {
280
+ const se = S ?? (p ? u.id : void 0), O = (p ? u.disabled : !1) || !!E, oe = (p ? u.required : !1) || !!X, D = p ? u.invalid : !1, ne = D ? "error" : Q, de = p && u.describedBy ? u.describedBy : void 0, w = G(null), ie = Re(ee, w), ae = Ne(w), i = l, re = (d) => {
280
281
  m || b(d), i == null || i(d);
281
- }, re = (d) => {
282
+ }, le = (d) => {
282
283
  var y;
283
284
  d.preventDefault(), d.stopPropagation(), m || b(""), i == null || i(""), (y = w.current) == null || y.focus();
284
- }, F = c ?? x("inputs.select.placeholder", "Select…"), le = g && !!h && !O, ce = be(s), ue = fe(
285
+ }, F = c ?? x("inputs.select.placeholder", "Select…"), ce = g && !!h && !O, ue = ye(s), pe = ge(
285
286
  () => ({
286
287
  getValue: () => B.current,
287
288
  setValue: (d) => {
@@ -296,43 +297,43 @@ const _ = a(function({
296
297
  }),
297
298
  [i, m, N]
298
299
  );
299
- return Ne(we, ue, S), /* @__PURE__ */ f(
300
+ return Ce(ze, pe, S), /* @__PURE__ */ f(
300
301
  o.Root,
301
302
  {
302
303
  value: h === "" ? void 0 : h,
303
- onValueChange: ae,
304
+ onValueChange: re,
304
305
  open: N,
305
306
  onOpenChange: C,
306
307
  disabled: O,
307
- required: se,
308
+ required: oe,
308
309
  name: J,
309
- dir: ie,
310
+ dir: ae,
310
311
  children: [
311
312
  /* @__PURE__ */ f(
312
313
  o.Trigger,
313
314
  {
314
- ref: de,
315
- id: te,
315
+ ref: ie,
316
+ id: se,
316
317
  "aria-label": R ?? (p ? void 0 : F),
317
318
  "aria-labelledby": !R && p ? `${u.id}-label` : void 0,
318
- "aria-describedby": ne,
319
+ "aria-describedby": de,
319
320
  "aria-invalid": D || void 0,
320
321
  "data-component": "select",
321
322
  "data-component-id": S,
322
323
  className: L({
323
324
  size: T,
324
- tone: oe,
325
+ tone: ne,
325
326
  className: Y
326
327
  }),
327
328
  children: [
328
329
  /* @__PURE__ */ t(o.Value, { placeholder: F }),
329
330
  /* @__PURE__ */ f("span", { className: "ds:ms-auto ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]", children: [
330
- le ? /* @__PURE__ */ t(
331
+ ce ? /* @__PURE__ */ t(
331
332
  "button",
332
333
  {
333
334
  type: "button",
334
335
  "aria-label": x("inputs.select.clear", "Clear selection"),
335
- onClick: re,
336
+ onClick: le,
336
337
  onPointerDown: (d) => d.stopPropagation(),
337
338
  onKeyDown: (d) => {
338
339
  (d.key === "Enter" || d.key === " ") && d.stopPropagation();
@@ -345,7 +346,7 @@ const _ = a(function({
345
346
  "ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
346
347
  "ds:size-4"
347
348
  ].join(" "),
348
- children: /* @__PURE__ */ t(Ce, { "aria-hidden": "true", className: "ds:size-3.5" })
349
+ children: /* @__PURE__ */ t(we, { "aria-hidden": "true", className: "ds:size-3.5" })
349
350
  }
350
351
  ) : null,
351
352
  /* @__PURE__ */ t(o.Icon, { asChild: !0, children: /* @__PURE__ */ t(
@@ -363,7 +364,7 @@ const _ = a(function({
363
364
  ]
364
365
  }
365
366
  ),
366
- /* @__PURE__ */ t(I, { children: /* @__PURE__ */ t(j, { children: s.length === 0 ? /* @__PURE__ */ t("div", { className: "ds:ps-8 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground", children: x("inputs.select.noOptions", "No options") }) : ce.map(({ group: d, items: y }, pe) => {
367
+ /* @__PURE__ */ t(I, { container: Z, children: /* @__PURE__ */ t(j, { children: s.length === 0 ? /* @__PURE__ */ t("div", { className: "ds:ps-8 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground", children: x("inputs.select.noOptions", "No options") }) : ue.map(({ group: d, items: y }, me) => {
367
368
  const K = y.map((v) => /* @__PURE__ */ t(
368
369
  V,
369
370
  {
@@ -378,14 +379,14 @@ const _ = a(function({
378
379
  return d ? /* @__PURE__ */ f(o.Group, { children: [
379
380
  /* @__PURE__ */ t(k, { children: d }),
380
381
  K
381
- ] }, `group-${d}`) : /* @__PURE__ */ t(o.Group, { children: K }, `group-${pe}`);
382
+ ] }, `group-${d}`) : /* @__PURE__ */ t(o.Group, { children: K }, `group-${me}`);
382
383
  }) }) })
383
384
  ]
384
385
  }
385
386
  );
386
387
  });
387
388
  _.displayName = "Select";
388
- const Re = Object.assign(_, {
389
+ const Be = Object.assign(_, {
389
390
  Root: $,
390
391
  Trigger: A,
391
392
  Value: H,
@@ -396,9 +397,9 @@ const Re = Object.assign(_, {
396
397
  Group: U,
397
398
  Label: k,
398
399
  Separator: W
399
- }), Me = Re;
400
+ }), Ue = Be;
400
401
  export {
401
- Me as S,
402
+ Ue as S,
402
403
  I as a,
403
404
  U as b,
404
405
  V as c,
@@ -410,4 +411,4 @@ export {
410
411
  H as i,
411
412
  j
412
413
  };
413
- //# sourceMappingURL=select-hsCaJSX3.js.map
414
+ //# sourceMappingURL=select-CEtRcon5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-CEtRcon5.js","sources":["../../src/components/select/select.agent.ts","../../src/components/select/select.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — Select. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SelectHandle } from './select';\n\nexport const selectAgent: AgentAdapter<SelectHandle> = {\n id: 'select',\n capabilities: ['select_single', 'open', 'close'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.select.state.value',\n description:\n 'Currently selected option value, or empty string when none.',\n read: (handle) => handle.getValue(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.select.state.isOpen',\n description: 'Whether the option list is open.',\n read: (handle) => handle.isOpen(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n descriptionKey: 'ui.agent.select.actions.setValue',\n description: 'Select the option with the given value.',\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n clear: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.select.actions.clear',\n description: 'Clear the current selection.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n descriptionKey: 'ui.agent.select.actions.open',\n description: 'Open the option list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n descriptionKey: 'ui.agent.select.actions.close',\n description: 'Close the option list.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'select',\n description: 'Marks the Select trigger.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description:\n 'Stable opaque option value emitted on each rendered option.',\n },\n },\n};\n","import {\n forwardRef,\n useContext,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type MutableRefObject,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { useAgentRegistration } from '../../agent';\nimport { selectAgent } from './select.agent';\n\n/** Agent-readiness curated handle for Select. */\nexport interface SelectHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n clear: () => void;\n open: () => void;\n close: () => void;\n isOpen: () => boolean;\n}\nimport * as RadixSelect from '@radix-ui/react-select';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Check, ChevronDown, ChevronUp, X } from 'lucide-react';\nimport {\n FormFieldContext,\n useFormField,\n} from '../form-field/form-field-context';\nimport type { OptionShape } from '../_shared/option';\nimport { groupOptions } from '../_shared/group-options';\nimport { useDirection } from '../_shared/use-direction';\n\nconst selectTriggerVariants = cva(\n [\n 'ds:group ds:inline-flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:w-full',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-border ds:bg-input',\n 'ds:shadow-[var(--shadow-input)]',\n 'ds:text-foreground ds:placeholder:text-muted-foreground',\n 'ds:data-[placeholder]:text-muted-foreground',\n 'ds:transition-[colors,box-shadow] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-8 ds:ps-3 ds:pe-3 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:h-[var(--min-target-size)] ds:ps-3 ds:pe-3 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:ps-4 ds:pe-4 ds:text-[length:var(--font-size-lg)]',\n },\n tone: {\n default: '',\n error: 'ds:border-destructive ds:focus-visible:outline-destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n },\n },\n);\n\nconst selectContentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)] ds:overflow-hidden',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:text-foreground',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2',\n 'ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\nconst selectItemVariants = cva(\n [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-foreground ds:outline-none ds:select-none',\n 'ds:data-[highlighted]:bg-muted ds:data-[highlighted]:text-foreground',\n 'ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:min-h-8 ds:ps-8 ds:pe-3 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:min-h-[var(--min-target-size)] ds:ps-8 ds:pe-3 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:min-h-12 ds:ps-10 ds:pe-4 ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst selectLabelClasses = [\n 'ds:ps-8 ds:pe-3 ds:py-1.5',\n 'type-eyebrow ds:text-muted-foreground',\n 'ds:sticky ds:top-0 ds:bg-background',\n].join(' ');\n\nconst iconSizeByItemSize = {\n sm: 'ds:size-3.5',\n md: 'ds:size-4',\n lg: 'ds:size-5',\n} as const;\n\nconst itemIndicatorStartByItemSize = {\n sm: 'ds:start-2',\n md: 'ds:start-2',\n lg: 'ds:start-3',\n} as const;\n\nfunction composeRefs<T>(\n ...refs: Array<Ref<T> | undefined | null>\n): (node: T | null) => void {\n return (node: T | null) => {\n for (const r of refs) {\n if (!r) continue;\n if (typeof r === 'function') {\n r(node);\n } else {\n (r as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n\n// ---------------------------------------------------------------------------\n// Compound sub-components — thin `forwardRef` wrappers over Radix parts.\n// ---------------------------------------------------------------------------\n\ntype SelectRootProps = ComponentPropsWithoutRef<typeof RadixSelect.Root>;\n\nconst SelectRoot = (props: SelectRootProps) => <RadixSelect.Root {...props} />;\nSelectRoot.displayName = 'Select.Root';\n\ntype SelectTriggerElement = ElementRef<typeof RadixSelect.Trigger>;\ntype SelectTriggerProps = ComponentPropsWithoutRef<typeof RadixSelect.Trigger> &\n VariantProps<typeof selectTriggerVariants>;\n\nconst SelectTrigger = forwardRef<SelectTriggerElement, SelectTriggerProps>(\n ({ size, tone, className, children, ...props }, ref) => (\n <RadixSelect.Trigger\n ref={ref}\n className={selectTriggerVariants({ size, tone, className })}\n {...props}\n >\n {children}\n </RadixSelect.Trigger>\n ),\n);\nSelectTrigger.displayName = 'Select.Trigger';\n\ntype SelectValueProps = ComponentPropsWithoutRef<typeof RadixSelect.Value>;\n\nconst SelectValue = forwardRef<\n ElementRef<typeof RadixSelect.Value>,\n SelectValueProps\n>((props, ref) => <RadixSelect.Value ref={ref} {...props} />);\nSelectValue.displayName = 'Select.Value';\n\ntype SelectContentProps = ComponentPropsWithoutRef<\n typeof RadixSelect.Content\n> & {\n container?: HTMLElement | null;\n};\n\nconst SelectContent = forwardRef<\n ElementRef<typeof RadixSelect.Content>,\n SelectContentProps\n>(\n (\n {\n className,\n children,\n position = 'popper',\n sideOffset = 4,\n container,\n ...props\n },\n ref,\n ) => (\n <RadixSelect.Portal container={container ?? undefined}>\n <RadixSelect.Content\n ref={ref}\n position={position}\n sideOffset={sideOffset}\n data-component=\"select-content\"\n className={selectContentVariants({ className })}\n {...props}\n >\n <RadixSelect.ScrollUpButton className=\"ds:flex ds:items-center ds:justify-center ds:h-6 ds:bg-background ds:cursor-default\">\n <ChevronUp aria-hidden=\"true\" className=\"ds:size-4\" />\n </RadixSelect.ScrollUpButton>\n {children}\n <RadixSelect.ScrollDownButton className=\"ds:flex ds:items-center ds:justify-center ds:h-6 ds:bg-background ds:cursor-default\">\n <ChevronDown aria-hidden=\"true\" className=\"ds:size-4\" />\n </RadixSelect.ScrollDownButton>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n ),\n);\nSelectContent.displayName = 'Select.Content';\n\ntype SelectViewportProps = ComponentPropsWithoutRef<\n typeof RadixSelect.Viewport\n>;\n\nconst SelectViewport = forwardRef<\n ElementRef<typeof RadixSelect.Viewport>,\n SelectViewportProps\n>(({ className, ...props }, ref) => (\n <RadixSelect.Viewport\n ref={ref}\n className={['ds:p-1', className].filter(Boolean).join(' ')}\n {...props}\n />\n));\nSelectViewport.displayName = 'Select.Viewport';\n\ntype SelectItemProps = ComponentPropsWithoutRef<typeof RadixSelect.Item> &\n VariantProps<typeof selectItemVariants>;\n\nconst SelectItem = forwardRef<\n ElementRef<typeof RadixSelect.Item>,\n SelectItemProps\n>(({ size = 'md', className, children, ...props }, ref) => {\n const indicatorStart = itemIndicatorStartByItemSize[size ?? 'md'];\n const iconSize = iconSizeByItemSize[size ?? 'md'];\n return (\n <RadixSelect.Item\n ref={ref}\n className={selectItemVariants({ size, className })}\n {...props}\n >\n <span\n className={`ds:absolute ${indicatorStart} ds:inline-flex ds:items-center ds:justify-center`}\n aria-hidden=\"true\"\n >\n <RadixSelect.ItemIndicator>\n <Check className={iconSize} />\n </RadixSelect.ItemIndicator>\n </span>\n <RadixSelect.ItemText>{children}</RadixSelect.ItemText>\n </RadixSelect.Item>\n );\n});\nSelectItem.displayName = 'Select.Item';\n\ntype SelectItemTextProps = ComponentPropsWithoutRef<\n typeof RadixSelect.ItemText\n>;\n\nconst SelectItemText = forwardRef<\n ElementRef<typeof RadixSelect.ItemText>,\n SelectItemTextProps\n>((props, ref) => <RadixSelect.ItemText ref={ref} {...props} />);\nSelectItemText.displayName = 'Select.ItemText';\n\ntype SelectGroupProps = ComponentPropsWithoutRef<typeof RadixSelect.Group>;\n\nconst SelectGroup = forwardRef<\n ElementRef<typeof RadixSelect.Group>,\n SelectGroupProps\n>((props, ref) => <RadixSelect.Group ref={ref} {...props} />);\nSelectGroup.displayName = 'Select.Group';\n\ntype SelectLabelProps = ComponentPropsWithoutRef<typeof RadixSelect.Label>;\n\nconst SelectLabel = forwardRef<\n ElementRef<typeof RadixSelect.Label>,\n SelectLabelProps\n>(({ className, ...props }, ref) => (\n <RadixSelect.Label\n ref={ref}\n className={[selectLabelClasses, className].filter(Boolean).join(' ')}\n {...props}\n />\n));\nSelectLabel.displayName = 'Select.Label';\n\ntype SelectSeparatorProps = ComponentPropsWithoutRef<\n typeof RadixSelect.Separator\n>;\n\nconst SelectSeparator = forwardRef<\n ElementRef<typeof RadixSelect.Separator>,\n SelectSeparatorProps\n>(({ className, ...props }, ref) => (\n <RadixSelect.Separator\n ref={ref}\n className={['ds:my-1 ds:h-px ds:bg-border', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nSelectSeparator.displayName = 'Select.Separator';\n\n// ---------------------------------------------------------------------------\n// Convenience form — `<Select options={[{value, label, group?}]} />`.\n// ---------------------------------------------------------------------------\n\nexport type SelectOption<T extends string = string> = OptionShape<T>;\n\nexport interface SelectProps<T extends string = string> {\n options: SelectOption<T>[];\n value?: T | '';\n defaultValue?: T;\n onValueChange?: (value: T | '') => void;\n placeholder?: string;\n clearable?: boolean;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n 'aria-label'?: string;\n className?: string;\n /**\n * Portal target for the listbox. Defaults to `document.body`. Set this to a\n * parent overlay's content element (e.g. a Popover) when the Select is nested\n * inside one, so the listbox shares that stacking context and renders above\n * it instead of behind it (the global z-scale puts `--z-dropdown` below\n * `--z-popover`).\n */\n container?: HTMLElement | null;\n}\n\nconst SelectImpl = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n {\n options,\n value,\n defaultValue,\n onValueChange,\n placeholder,\n clearable = false,\n disabled,\n required,\n name,\n id,\n size = 'md',\n tone = 'default',\n className,\n container,\n 'aria-label': ariaLabel,\n },\n ref,\n) {\n const { t } = useTranslation();\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const [internalValue, setInternalValue] = useState<string>(\n value ?? defaultValue ?? '',\n );\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const [openState, setOpenState] = useState<boolean>(false);\n const currentValueRef = useRef<string>(currentValue);\n currentValueRef.current = currentValue;\n\n const triggerId = id ?? (inFormField ? ctx.id : undefined);\n const effectiveDisabled =\n (inFormField ? ctx.disabled : false) || Boolean(disabled);\n const effectiveRequired =\n (inFormField ? ctx.required : false) || Boolean(required);\n const effectiveInvalid = inFormField ? ctx.invalid : false;\n const effectiveTone = effectiveInvalid ? 'error' : tone;\n const describedBy =\n inFormField && ctx.describedBy ? ctx.describedBy : undefined;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const composedTriggerRef = composeRefs(ref, triggerRef);\n const dir = useDirection(triggerRef);\n\n const emitValue = onValueChange as ((value: string) => void) | undefined;\n\n const handleValueChange = (next: string) => {\n if (!isControlled) setInternalValue(next);\n emitValue?.(next);\n };\n\n const handleClear: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n event.preventDefault();\n event.stopPropagation();\n if (!isControlled) setInternalValue('');\n emitValue?.('');\n triggerRef.current?.focus();\n };\n\n const resolvedPlaceholder =\n placeholder ?? t('inputs.select.placeholder', 'Select…');\n\n const showClear = clearable && !!currentValue && !effectiveDisabled;\n\n const groups = groupOptions(options);\n\n const agentHandle = useMemo<SelectHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n setValue: (next) => {\n if (!isControlled) setInternalValue(next);\n emitValue?.(next);\n },\n clear: () => {\n if (!isControlled) setInternalValue('');\n emitValue?.('');\n },\n open: () => setOpenState(true),\n close: () => setOpenState(false),\n isOpen: () => openState,\n }),\n [emitValue, isControlled, openState],\n );\n useAgentRegistration(selectAgent, agentHandle, id);\n\n return (\n <RadixSelect.Root\n value={currentValue === '' ? undefined : currentValue}\n onValueChange={handleValueChange}\n open={openState}\n onOpenChange={setOpenState}\n disabled={effectiveDisabled}\n required={effectiveRequired}\n name={name}\n dir={dir}\n >\n <RadixSelect.Trigger\n ref={composedTriggerRef}\n id={triggerId}\n aria-label={\n ariaLabel ?? (!inFormField ? resolvedPlaceholder : undefined)\n }\n aria-labelledby={\n !ariaLabel && inFormField ? `${ctx.id}-label` : undefined\n }\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n data-component=\"select\"\n data-component-id={id}\n className={selectTriggerVariants({\n size,\n tone: effectiveTone,\n className,\n })}\n >\n <RadixSelect.Value placeholder={resolvedPlaceholder} />\n <span className=\"ds:ms-auto ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {showClear ? (\n <button\n type=\"button\"\n aria-label={t('inputs.select.clear', 'Clear selection')}\n onClick={handleClear}\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.stopPropagation();\n }\n }}\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center ds:rounded-[var(--radius-sm)]',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:size-4',\n ].join(' ')}\n >\n <X aria-hidden=\"true\" className=\"ds:size-3.5\" />\n </button>\n ) : null}\n <RadixSelect.Icon asChild>\n <ChevronDown\n aria-hidden=\"true\"\n className={[\n 'ds:size-4 ds:shrink-0 ds:text-muted-foreground',\n 'ds:transition-transform ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:group-data-[state=open]:rotate-180',\n ].join(' ')}\n />\n </RadixSelect.Icon>\n </span>\n </RadixSelect.Trigger>\n <SelectContent container={container}>\n <SelectViewport>\n {options.length === 0 ? (\n <div className=\"ds:ps-8 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground\">\n {t('inputs.select.noOptions', 'No options')}\n </div>\n ) : (\n groups.map(({ group, items }, groupIndex) => {\n const body = items.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n size={size}\n data-option-id={option.value}\n >\n {option.label}\n </SelectItem>\n ));\n if (!group) {\n return (\n <RadixSelect.Group key={`group-${groupIndex}`}>\n {body}\n </RadixSelect.Group>\n );\n }\n return (\n <RadixSelect.Group key={`group-${group}`}>\n <SelectLabel>{group}</SelectLabel>\n {body}\n </RadixSelect.Group>\n );\n })\n )}\n </SelectViewport>\n </SelectContent>\n </RadixSelect.Root>\n );\n});\nSelectImpl.displayName = 'Select';\n\ninterface SelectComponent {\n <T extends string = string>(\n props: SelectProps<T> & { ref?: Ref<HTMLButtonElement> },\n ): ReactElement | null;\n displayName?: string;\n Root: typeof SelectRoot;\n Trigger: typeof SelectTrigger;\n Value: typeof SelectValue;\n Content: typeof SelectContent;\n Viewport: typeof SelectViewport;\n Item: typeof SelectItem;\n ItemText: typeof SelectItemText;\n Group: typeof SelectGroup;\n Label: typeof SelectLabel;\n Separator: typeof SelectSeparator;\n}\n\nconst SelectWithStatics = Object.assign(SelectImpl, {\n Root: SelectRoot,\n Trigger: SelectTrigger,\n Value: SelectValue,\n Content: SelectContent,\n Viewport: SelectViewport,\n Item: SelectItem,\n ItemText: SelectItemText,\n Group: SelectGroup,\n Label: SelectLabel,\n Separator: SelectSeparator,\n}) as unknown as SelectComponent;\n\nexport const Select = SelectWithStatics;\n\nexport {\n SelectRoot,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectViewport,\n SelectItem,\n SelectItemText,\n SelectGroup,\n SelectLabel,\n SelectSeparator,\n};\n\nexport { selectTriggerVariants, selectContentVariants, selectItemVariants };\n\nexport type {\n SelectTriggerProps,\n SelectContentProps,\n SelectItemProps,\n SelectLabelProps,\n SelectRootProps,\n};\n\nexport type { ReactNode };\n"],"names":["selectAgent","handle","args","selectTriggerVariants","cva","selectContentVariants","selectItemVariants","selectLabelClasses","iconSizeByItemSize","itemIndicatorStartByItemSize","composeRefs","refs","node","r","SelectRoot","props","jsx","RadixSelect","SelectTrigger","forwardRef","size","tone","className","children","ref","SelectValue","SelectContent","position","sideOffset","container","jsxs","ChevronUp","ChevronDown","SelectViewport","SelectItem","indicatorStart","iconSize","Check","SelectItemText","SelectGroup","SelectLabel","SelectSeparator","SelectImpl","options","value","defaultValue","onValueChange","placeholder","clearable","disabled","required","name","id","ariaLabel","t","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","internalValue","setInternalValue","useState","isControlled","currentValue","openState","setOpenState","currentValueRef","useRef","triggerId","effectiveDisabled","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","triggerRef","composedTriggerRef","dir","useDirection","emitValue","handleValueChange","next","handleClear","event","_a","resolvedPlaceholder","showClear","groups","groupOptions","agentHandle","useMemo","useAgentRegistration","X","group","items","groupIndex","body","option","SelectWithStatics","Select"],"mappings":"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"}
@@ -5,7 +5,7 @@ import * as k from "@radix-ui/react-dropdown-menu";
5
5
  import { a as N, c as q } from "./index-D2ZczOXr.js";
6
6
  import { useTranslation as Z } from "react-i18next";
7
7
  import { c as K } from "./compose-refs-C0k0tdqF.js";
8
- import { S as D } from "./select-hsCaJSX3.js";
8
+ import { S as D } from "./select-CEtRcon5.js";
9
9
  import { X as ee } from "./x-CCcI3eJp.js";
10
10
  import { u as te } from "./use-direction-Dp8h70PP.js";
11
11
  import { u as se } from "./registry-nPAVE19X.js";
@@ -396,4 +396,4 @@ export {
396
396
  F as c,
397
397
  re as t
398
398
  };
399
- //# sourceMappingURL=tabs-BpPYVme_.js.map
399
+ //# sourceMappingURL=tabs-BIQ0ew1T.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs-BpPYVme_.js","sources":["../../src/components/tabs/tabs.agent.ts","../../src/components/tabs/tabs.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { TabsHandle } from './tabs';\n\nexport const tabsAgent: AgentAdapter<TabsHandle> = {\n id: 'tabs',\n capabilities: ['select_single', 'navigate'],\n state: {\n activeTab: {\n type: 'string | null',\n description: 'Value of the currently-active tab.',\n read: (handle) => handle.getActiveTab(),\n },\n },\n actions: {\n select_tab: {\n safety: 'read',\n argsType: '{ value: string }',\n description: 'Activate the tab with the given value.',\n invoke: (handle, args: { value: string }) => {\n handle.selectTab(args.value);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'tabs' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on Tabs.Root.',\n },\n item: {\n attr: 'data-tab-id',\n description: 'Each Tab.Trigger emits its value as data-tab-id.',\n },\n },\n};\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type MutableRefObject,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { cva, cx, type VariantProps } from 'class-variance-authority';\nimport { X, ChevronDown } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { Select, type SelectOption } from '../select/select';\nimport { useAgentRegistration } from '../../agent';\nimport { tabsAgent } from './tabs.agent';\n\n// ---------------------------------------------------------------------------\n// CVA recipes\n// ---------------------------------------------------------------------------\n\nexport const tabsListVariants = cva('ds:relative ds:flex', {\n variants: {\n variant: {\n // Shadcn-style segmented control: light container, white active card\n default:\n 'ds:flex-1 ds:min-w-0 ds:items-center ds:bg-muted/10 ds:rounded-[var(--radius-md)] ds:p-1',\n // Classic underline tabs: bottom border with colored active indicator\n underlined:\n 'ds:flex-1 ds:min-w-0 ds:items-end ds:[border-block-end:1px_solid_var(--border)]',\n // Segmented control: warm secondary container, content-width\n pills:\n 'ds:items-center ds:bg-secondary ds:rounded-[var(--radius-md)] ds:p-1',\n },\n orientation: {\n horizontal: 'ds:flex-row ds:overflow-hidden',\n vertical: 'ds:flex-col',\n },\n },\n defaultVariants: {\n variant: 'default',\n orientation: 'horizontal',\n },\n});\n\nexport const tabsTriggerVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:items-center ds:justify-center ds:whitespace-nowrap ds:border-0',\n 'ds:gap-2 ds:font-medium ds:transition-colors',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:cursor-pointer ds:select-none',\n 'ds:disabled:pointer-events-none ds:disabled:opacity-50',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' '),\n {\n variants: {\n variant: {\n default: [\n 'ds:rounded-[var(--radius-sm)] ds:bg-transparent ds:text-muted-foreground',\n 'ds:hover:bg-muted/10 ds:hover:text-foreground',\n 'ds:data-[state=active]:bg-background ds:data-[state=active]:text-foreground',\n 'ds:data-[state=active]:shadow-sm',\n ].join(' '),\n underlined: [\n 'ds:bg-transparent ds:text-muted-foreground',\n 'ds:[border-block-end:2px_solid_transparent]',\n 'ds:hover:bg-muted/10 ds:hover:text-foreground',\n 'ds:data-[state=active]:[border-block-end-color:var(--primary)]',\n 'ds:data-[state=active]:text-foreground ds:data-[state=active]:[margin-block-end:-1px]',\n ].join(' '),\n pills: [\n 'ds:rounded-[var(--radius-full)] ds:bg-transparent ds:text-muted-foreground',\n 'ds:hover:bg-muted/20 ds:hover:text-foreground',\n 'ds:data-[state=active]:bg-primary ds:data-[state=active]:text-primary-foreground',\n ].join(' '),\n },\n size: {\n sm: 'ds:h-8 ds:px-[var(--spacing-sm)] ds:text-[length:var(--font-size-sm)]',\n md: 'ds:h-10 ds:px-[var(--spacing-md)] ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:px-[var(--spacing-lg)] ds:text-[length:var(--font-size-lg)]',\n },\n orientation: {\n horizontal: '',\n vertical: 'ds:w-full ds:justify-start',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n orientation: 'horizontal',\n },\n },\n);\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ntype TabsOverflow = 'dropdown' | 'select';\n\ninterface TabsContextValue {\n variant: 'default' | 'underlined' | 'pills';\n size: 'sm' | 'md' | 'lg';\n orientation: 'horizontal' | 'vertical';\n overflow: TabsOverflow;\n value: string;\n setValue: (value: string) => void;\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n variant: 'default',\n size: 'md',\n orientation: 'horizontal',\n overflow: 'dropdown',\n value: '',\n setValue: () => {},\n});\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n// Curated agent-readiness handle — see tabs.agent.ts.\nexport interface TabsHandle {\n getActiveTab: () => string | null;\n selectTab: (value: string) => void;\n}\n\nexport interface TabsRootProps extends Omit<\n ComponentPropsWithoutRef<typeof TabsPrimitive.Root>,\n 'orientation'\n> {\n variant?: 'default' | 'underlined' | 'pills';\n size?: 'sm' | 'md' | 'lg';\n orientation?: 'horizontal' | 'vertical';\n /**\n * Strategy for tabs that don't fit horizontally.\n *\n * - `'dropdown'` (default) — overflowing tabs collapse into a \"More\"\n * `DropdownMenu` rendered next to the visible tab list. Most tabs\n * stay visible inline; the few that don't fit hide behind the menu.\n * Best when there are 5–7 tabs at moderately narrow viewports.\n * - `'select'` — at narrow container widths (under the `@md` breakpoint)\n * the entire tab strip collapses into a single `Select` whose value\n * is the active tab. Best when there are many tabs and the panel is\n * genuinely cramped (mobile, side-panel host). Above `@md`, the\n * inline tab list reappears unchanged.\n *\n * Limitation: the Select mirror builds option labels from each\n * `Tabs.Trigger`'s `children`. Plain string / number children are\n * used verbatim; richer children (icon + text, fragments) fall back\n * to the trigger's `value` so the option remains selectable. Prefer\n * plain-text trigger children when using `overflow=\"select\"`, or use\n * the trigger's `icon` prop for the icon and keep `children` a\n * plain string.\n *\n * @default 'dropdown'\n */\n overflow?: TabsOverflow;\n}\n\nexport interface TabsListProps extends ComponentPropsWithoutRef<\n typeof TabsPrimitive.List\n> {\n 'aria-label'?: string;\n}\n\nexport interface TabsTriggerProps\n extends\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>,\n VariantProps<typeof tabsTriggerVariants> {\n icon?: ReactNode;\n badge?: ReactNode;\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nexport type TabsContentProps = ComponentPropsWithoutRef<\n typeof TabsPrimitive.Content\n>;\n\n// ---------------------------------------------------------------------------\n// TabsRoot\n// ---------------------------------------------------------------------------\n\nconst TabsRoot = forwardRef<HTMLDivElement, TabsRootProps>(\n (\n {\n variant = 'default',\n size = 'md',\n orientation = 'horizontal',\n overflow = 'dropdown',\n className,\n children,\n value: valueProp,\n defaultValue,\n onValueChange,\n id,\n ...props\n },\n ref,\n ) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n const dir = useDirection(rootRef);\n\n // Track the active tab so the `overflow=\"select\"` mirror can read it\n // without forcing consumers into controlled mode. If `value` is passed\n // we honour it; otherwise we manage internal state seeded from\n // `defaultValue` and notify consumers via `onValueChange`. Net effect\n // is identical to Radix's own controlled / uncontrolled split — we\n // just shadow the value into context so the Select can mirror it.\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp ?? '') : internalValue;\n const setValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n const ctxValue = useMemo(\n () => ({ variant, size, orientation, overflow, value, setValue }),\n [variant, size, orientation, overflow, value, setValue],\n );\n\n // Agent handle — ref mirrors value for fresh reads.\n const valueRef = useRef<string>(value);\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const agentHandle = useMemo<TabsHandle>(\n () => ({\n getActiveTab: () => valueRef.current || null,\n selectTab: (next) => setValue(next),\n }),\n [setValue],\n );\n useAgentRegistration(tabsAgent, agentHandle, id);\n\n return (\n <TabsContext.Provider value={ctxValue}>\n <TabsPrimitive.Root\n ref={composedRef}\n orientation={orientation}\n dir={dir}\n // We always run Radix in controlled mode against our shadow state\n // (seeded from `defaultValue`) so the `overflow=\"select\"` mirror\n // can read the active value via context without DOM observation.\n value={value}\n onValueChange={setValue}\n id={id}\n data-component=\"tabs\"\n data-component-id={id}\n className={cx(\n 'ds:flex',\n orientation === 'vertical'\n ? 'ds:flex-row ds:gap-[var(--spacing-md)]'\n : 'ds:flex-col',\n className,\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.Root>\n </TabsContext.Provider>\n );\n },\n);\nTabsRoot.displayName = 'Tabs';\n\n// ---------------------------------------------------------------------------\n// TabsList — with overflow detection\n// ---------------------------------------------------------------------------\n\nconst TabsList = forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, children, 'aria-label': ariaLabel, ...props }, ref) => {\n const { variant, size, orientation, overflow, value, setValue } =\n useContext(TabsContext);\n const { t } = useTranslation();\n\n const listRef = useRef<HTMLDivElement>(null);\n const [overflowTabs, setOverflowTabs] = useState<\n { value: string; label: string }[]\n >([]);\n const isHorizontal = orientation === 'horizontal';\n // The `select` overflow strategy renders a Select mirror at narrow\n // container widths and skips the DropdownMenu overflow detector\n // (it's the wrong UX for that case — a select-and-a-dropdown would\n // double up). The dropdown detector only runs when `overflow` is\n // `dropdown` and the strip is horizontal.\n const isDropdownOverflow = overflow === 'dropdown' && isHorizontal;\n\n useEffect(() => {\n if (!isDropdownOverflow) {\n setOverflowTabs([]);\n return;\n }\n const el = listRef.current;\n if (!el) return;\n\n const detectOverflow = () => {\n const containerRight = el.getBoundingClientRect().right;\n const hidden: { value: string; label: string }[] = [];\n el.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]').forEach(\n (tab) => {\n const rect = tab.getBoundingClientRect();\n if (rect.right > containerRight + 2) {\n const value =\n tab.getAttribute('data-value') ?? tab.dataset['value'] ?? '';\n const label = tab.textContent?.trim() ?? value;\n hidden.push({ value, label });\n }\n },\n );\n setOverflowTabs(hidden);\n };\n\n const ro = new ResizeObserver(detectOverflow);\n ro.observe(el);\n detectOverflow();\n return () => ro.disconnect();\n }, [isDropdownOverflow, children]);\n\n const combinedRef = (node: HTMLDivElement | null) => {\n (listRef as MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref)\n (ref as MutableRefObject<HTMLDivElement | null>).current = node;\n };\n\n // For `overflow=\"select\"` we mirror the Trigger children as Select\n // options. Triggers may carry icon + text; for the Select label we\n // prefer the trigger's plain-text children — anything else falls\n // back to the trigger's `value` so the option is at least selectable.\n const selectOptions = useMemo<SelectOption<string>[]>(() => {\n if (overflow !== 'select') return [];\n return Children.toArray(children)\n .filter((child): child is ReactElement<TabsTriggerProps> =>\n isValidElement(child),\n )\n .filter(\n (child) =>\n typeof child.props.value === 'string' &&\n child.props.value.length > 0,\n )\n .map((child) => {\n const triggerValue = child.props.value as string;\n const labelChild = child.props.children;\n const label =\n typeof labelChild === 'string'\n ? labelChild\n : typeof labelChild === 'number'\n ? String(labelChild)\n : triggerValue;\n return { value: triggerValue, label };\n });\n }, [children, overflow]);\n\n if (overflow === 'select' && isHorizontal) {\n // Container queries gate the swap: above `@md` (Tailwind v4 default\n // 28rem container width) the inline tab strip renders; below it,\n // the Select takes over. The Tabs.List markup stays mounted in\n // both modes so Radix's roving-tabindex / ARIA wiring is preserved\n // even when the strip is visually hidden — keyboard users who land\n // on the panel via skip-link still get to the active tab.\n return (\n <div className=\"ds:@container/tabs ds:relative ds:w-full\">\n {/* Select mirror — visible at narrow container widths only. */}\n <div className=\"ds:block ds:@md/tabs:hidden\">\n <Select\n options={selectOptions}\n value={value}\n onValueChange={(next) => {\n if (typeof next === 'string' && next.length > 0) setValue(next);\n }}\n size={size}\n aria-label={ariaLabel ?? t('tabs.selectLabel')}\n />\n </div>\n {/* Inline tab strip — visible at wider container widths. */}\n <div className=\"ds:hidden ds:@md/tabs:flex ds:relative ds:items-center\">\n <TabsPrimitive.List\n ref={combinedRef}\n aria-label={ariaLabel}\n className={tabsListVariants({ variant, orientation, className })}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ds:relative ds:flex ds:items-center\">\n <TabsPrimitive.List\n ref={combinedRef}\n aria-label={ariaLabel}\n className={tabsListVariants({ variant, orientation, className })}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n\n {isDropdownOverflow && overflowTabs.length > 0 && (\n <OverflowMenu\n tabs={overflowTabs}\n label={t('tabs.moreTabs')}\n size={size}\n />\n )}\n </div>\n );\n },\n);\nTabsList.displayName = 'TabsList';\n\n// ---------------------------------------------------------------------------\n// OverflowMenu (internal)\n// ---------------------------------------------------------------------------\n\ninterface OverflowMenuProps {\n tabs: { value: string; label: string }[];\n label: string;\n size: 'sm' | 'md' | 'lg';\n}\n\nfunction OverflowMenu({ tabs, label, size }: OverflowMenuProps) {\n const { variant } = useContext(TabsContext);\n\n return (\n <DropdownMenuPrimitive.Root>\n <DropdownMenuPrimitive.Trigger\n className={cx(\n tabsTriggerVariants({ variant, size, orientation: 'horizontal' }),\n 'ds:shrink-0 ds:ms-1',\n )}\n aria-label={label}\n >\n {label}\n <ChevronDown aria-hidden=\"true\" className=\"ds:size-4\" />\n </DropdownMenuPrimitive.Trigger>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n sideOffset={4}\n className={cx(\n 'ds:z-50 ds:min-w-40 ds:overflow-hidden ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-border ds:bg-popover ds:p-1 ds:shadow-md',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95',\n )}\n >\n {tabs.map(({ value, label: tabLabel }) => (\n <DropdownMenuPrimitive.Item\n key={value}\n className={cx(\n 'ds:relative ds:flex ds:cursor-pointer ds:select-none ds:items-center',\n 'ds:rounded-[var(--radius-sm)] ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n 'ds:text-[var(--font-size-sm)] ds:text-foreground ds:outline-none',\n 'ds:hover:bg-muted ds:focus:bg-muted',\n 'ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50',\n )}\n onSelect={() => {\n const tab = document.querySelector<HTMLButtonElement>(\n `[role=\"tab\"][data-value=\"${CSS.escape(value)}\"]`,\n );\n tab?.click();\n tab?.scrollIntoView({ inline: 'nearest' });\n }}\n >\n {tabLabel}\n </DropdownMenuPrimitive.Item>\n ))}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </DropdownMenuPrimitive.Root>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TabsTrigger\n// ---------------------------------------------------------------------------\n\nconst TabsTrigger = forwardRef<HTMLButtonElement, TabsTriggerProps>(\n (\n {\n variant: variantProp,\n size: sizeProp,\n orientation: orientationProp,\n icon,\n badge,\n dismissible = false,\n onDismiss,\n className,\n children,\n value,\n onKeyDown,\n ...props\n },\n ref,\n ) => {\n const ctx = useContext(TabsContext);\n const variant = variantProp ?? ctx.variant;\n const size = sizeProp ?? ctx.size;\n const orientation = orientationProp ?? ctx.orientation;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n // APG dismissible-tab pattern: Delete/Backspace while trigger is focused closes the tab.\n // The visual X is pointer-only (aria-hidden) to avoid nested-interactive HTML violation.\n if (dismissible && (e.key === 'Delete' || e.key === 'Backspace')) {\n e.preventDefault();\n onDismiss?.();\n }\n onKeyDown?.(e);\n };\n\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n value={value}\n data-value={value}\n className={tabsTriggerVariants({\n variant,\n size,\n orientation,\n className,\n })}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {icon && (\n <span aria-hidden=\"true\" className=\"ds:shrink-0 ds:size-4\">\n {icon}\n </span>\n )}\n {children}\n {badge && <span className=\"ds:shrink-0\">{badge}</span>}\n {dismissible && (\n // Visual-only dismiss indicator — pointer dismiss fires here; keyboard dismiss fires via Delete/Backspace on the trigger above.\n // No role/tabIndex to avoid nested-interactive (interactive content inside <button> is invalid HTML).\n <span\n aria-hidden=\"true\"\n className={cx(\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:size-6 ds:rounded-[var(--radius-sm)]',\n 'ds:hover:bg-muted-foreground/20',\n )}\n onPointerDown={(e) => {\n e.stopPropagation();\n e.preventDefault();\n onDismiss?.();\n }}\n >\n <X className=\"ds:size-3.5\" />\n </span>\n )}\n </TabsPrimitive.Trigger>\n );\n },\n);\nTabsTrigger.displayName = 'TabsTrigger';\n\n// ---------------------------------------------------------------------------\n// TabsContent\n// ---------------------------------------------------------------------------\n\nconst TabsContent = forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, children, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cx(\n 'ds:mt-[var(--spacing-sm)] ds:outline-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n className,\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.Content>\n ),\n);\nTabsContent.displayName = 'TabsContent';\n\n// ---------------------------------------------------------------------------\n// Compound export\n// ---------------------------------------------------------------------------\n\nexport const Tabs = Object.assign(TabsRoot, {\n Root: TabsRoot,\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n});\n\nexport { TabsList, TabsTrigger, TabsContent };\n"],"names":["tabsAgent","handle","args","tabsListVariants","cva","tabsTriggerVariants","TabsContext","createContext","TabsRoot","forwardRef","variant","size","orientation","overflow","className","children","valueProp","defaultValue","onValueChange","id","props","ref","rootRef","useRef","composedRef","composeRefs","dir","useDirection","isControlled","internalValue","setInternalValue","useState","value","setValue","useCallback","next","ctxValue","useMemo","valueRef","useEffect","agentHandle","useAgentRegistration","jsx","TabsPrimitive","cx","TabsList","ariaLabel","useContext","t","useTranslation","listRef","overflowTabs","setOverflowTabs","isHorizontal","isDropdownOverflow","el","detectOverflow","containerRight","hidden","tab","label","_a","ro","combinedRef","node","selectOptions","Children","child","isValidElement","triggerValue","labelChild","jsxs","Select","OverflowMenu","tabs","DropdownMenuPrimitive","ChevronDown","tabLabel","TabsTrigger","variantProp","sizeProp","orientationProp","icon","badge","dismissible","onDismiss","onKeyDown","ctx","handleKeyDown","e","X","TabsContent","Tabs"],"mappings":"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"}
1
+ {"version":3,"file":"tabs-BIQ0ew1T.js","sources":["../../src/components/tabs/tabs.agent.ts","../../src/components/tabs/tabs.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { TabsHandle } from './tabs';\n\nexport const tabsAgent: AgentAdapter<TabsHandle> = {\n id: 'tabs',\n capabilities: ['select_single', 'navigate'],\n state: {\n activeTab: {\n type: 'string | null',\n description: 'Value of the currently-active tab.',\n read: (handle) => handle.getActiveTab(),\n },\n },\n actions: {\n select_tab: {\n safety: 'read',\n argsType: '{ value: string }',\n description: 'Activate the tab with the given value.',\n invoke: (handle, args: { value: string }) => {\n handle.selectTab(args.value);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'tabs' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on Tabs.Root.',\n },\n item: {\n attr: 'data-tab-id',\n description: 'Each Tab.Trigger emits its value as data-tab-id.',\n },\n },\n};\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type MutableRefObject,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { cva, cx, type VariantProps } from 'class-variance-authority';\nimport { X, ChevronDown } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { Select, type SelectOption } from '../select/select';\nimport { useAgentRegistration } from '../../agent';\nimport { tabsAgent } from './tabs.agent';\n\n// ---------------------------------------------------------------------------\n// CVA recipes\n// ---------------------------------------------------------------------------\n\nexport const tabsListVariants = cva('ds:relative ds:flex', {\n variants: {\n variant: {\n // Shadcn-style segmented control: light container, white active card\n default:\n 'ds:flex-1 ds:min-w-0 ds:items-center ds:bg-muted/10 ds:rounded-[var(--radius-md)] ds:p-1',\n // Classic underline tabs: bottom border with colored active indicator\n underlined:\n 'ds:flex-1 ds:min-w-0 ds:items-end ds:[border-block-end:1px_solid_var(--border)]',\n // Segmented control: warm secondary container, content-width\n pills:\n 'ds:items-center ds:bg-secondary ds:rounded-[var(--radius-md)] ds:p-1',\n },\n orientation: {\n horizontal: 'ds:flex-row ds:overflow-hidden',\n vertical: 'ds:flex-col',\n },\n },\n defaultVariants: {\n variant: 'default',\n orientation: 'horizontal',\n },\n});\n\nexport const tabsTriggerVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:items-center ds:justify-center ds:whitespace-nowrap ds:border-0',\n 'ds:gap-2 ds:font-medium ds:transition-colors',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:cursor-pointer ds:select-none',\n 'ds:disabled:pointer-events-none ds:disabled:opacity-50',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' '),\n {\n variants: {\n variant: {\n default: [\n 'ds:rounded-[var(--radius-sm)] ds:bg-transparent ds:text-muted-foreground',\n 'ds:hover:bg-muted/10 ds:hover:text-foreground',\n 'ds:data-[state=active]:bg-background ds:data-[state=active]:text-foreground',\n 'ds:data-[state=active]:shadow-sm',\n ].join(' '),\n underlined: [\n 'ds:bg-transparent ds:text-muted-foreground',\n 'ds:[border-block-end:2px_solid_transparent]',\n 'ds:hover:bg-muted/10 ds:hover:text-foreground',\n 'ds:data-[state=active]:[border-block-end-color:var(--primary)]',\n 'ds:data-[state=active]:text-foreground ds:data-[state=active]:[margin-block-end:-1px]',\n ].join(' '),\n pills: [\n 'ds:rounded-[var(--radius-full)] ds:bg-transparent ds:text-muted-foreground',\n 'ds:hover:bg-muted/20 ds:hover:text-foreground',\n 'ds:data-[state=active]:bg-primary ds:data-[state=active]:text-primary-foreground',\n ].join(' '),\n },\n size: {\n sm: 'ds:h-8 ds:px-[var(--spacing-sm)] ds:text-[length:var(--font-size-sm)]',\n md: 'ds:h-10 ds:px-[var(--spacing-md)] ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:px-[var(--spacing-lg)] ds:text-[length:var(--font-size-lg)]',\n },\n orientation: {\n horizontal: '',\n vertical: 'ds:w-full ds:justify-start',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n orientation: 'horizontal',\n },\n },\n);\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ntype TabsOverflow = 'dropdown' | 'select';\n\ninterface TabsContextValue {\n variant: 'default' | 'underlined' | 'pills';\n size: 'sm' | 'md' | 'lg';\n orientation: 'horizontal' | 'vertical';\n overflow: TabsOverflow;\n value: string;\n setValue: (value: string) => void;\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n variant: 'default',\n size: 'md',\n orientation: 'horizontal',\n overflow: 'dropdown',\n value: '',\n setValue: () => {},\n});\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n// Curated agent-readiness handle — see tabs.agent.ts.\nexport interface TabsHandle {\n getActiveTab: () => string | null;\n selectTab: (value: string) => void;\n}\n\nexport interface TabsRootProps extends Omit<\n ComponentPropsWithoutRef<typeof TabsPrimitive.Root>,\n 'orientation'\n> {\n variant?: 'default' | 'underlined' | 'pills';\n size?: 'sm' | 'md' | 'lg';\n orientation?: 'horizontal' | 'vertical';\n /**\n * Strategy for tabs that don't fit horizontally.\n *\n * - `'dropdown'` (default) — overflowing tabs collapse into a \"More\"\n * `DropdownMenu` rendered next to the visible tab list. Most tabs\n * stay visible inline; the few that don't fit hide behind the menu.\n * Best when there are 5–7 tabs at moderately narrow viewports.\n * - `'select'` — at narrow container widths (under the `@md` breakpoint)\n * the entire tab strip collapses into a single `Select` whose value\n * is the active tab. Best when there are many tabs and the panel is\n * genuinely cramped (mobile, side-panel host). Above `@md`, the\n * inline tab list reappears unchanged.\n *\n * Limitation: the Select mirror builds option labels from each\n * `Tabs.Trigger`'s `children`. Plain string / number children are\n * used verbatim; richer children (icon + text, fragments) fall back\n * to the trigger's `value` so the option remains selectable. Prefer\n * plain-text trigger children when using `overflow=\"select\"`, or use\n * the trigger's `icon` prop for the icon and keep `children` a\n * plain string.\n *\n * @default 'dropdown'\n */\n overflow?: TabsOverflow;\n}\n\nexport interface TabsListProps extends ComponentPropsWithoutRef<\n typeof TabsPrimitive.List\n> {\n 'aria-label'?: string;\n}\n\nexport interface TabsTriggerProps\n extends\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>,\n VariantProps<typeof tabsTriggerVariants> {\n icon?: ReactNode;\n badge?: ReactNode;\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nexport type TabsContentProps = ComponentPropsWithoutRef<\n typeof TabsPrimitive.Content\n>;\n\n// ---------------------------------------------------------------------------\n// TabsRoot\n// ---------------------------------------------------------------------------\n\nconst TabsRoot = forwardRef<HTMLDivElement, TabsRootProps>(\n (\n {\n variant = 'default',\n size = 'md',\n orientation = 'horizontal',\n overflow = 'dropdown',\n className,\n children,\n value: valueProp,\n defaultValue,\n onValueChange,\n id,\n ...props\n },\n ref,\n ) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n const dir = useDirection(rootRef);\n\n // Track the active tab so the `overflow=\"select\"` mirror can read it\n // without forcing consumers into controlled mode. If `value` is passed\n // we honour it; otherwise we manage internal state seeded from\n // `defaultValue` and notify consumers via `onValueChange`. Net effect\n // is identical to Radix's own controlled / uncontrolled split — we\n // just shadow the value into context so the Select can mirror it.\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp ?? '') : internalValue;\n const setValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n const ctxValue = useMemo(\n () => ({ variant, size, orientation, overflow, value, setValue }),\n [variant, size, orientation, overflow, value, setValue],\n );\n\n // Agent handle — ref mirrors value for fresh reads.\n const valueRef = useRef<string>(value);\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const agentHandle = useMemo<TabsHandle>(\n () => ({\n getActiveTab: () => valueRef.current || null,\n selectTab: (next) => setValue(next),\n }),\n [setValue],\n );\n useAgentRegistration(tabsAgent, agentHandle, id);\n\n return (\n <TabsContext.Provider value={ctxValue}>\n <TabsPrimitive.Root\n ref={composedRef}\n orientation={orientation}\n dir={dir}\n // We always run Radix in controlled mode against our shadow state\n // (seeded from `defaultValue`) so the `overflow=\"select\"` mirror\n // can read the active value via context without DOM observation.\n value={value}\n onValueChange={setValue}\n id={id}\n data-component=\"tabs\"\n data-component-id={id}\n className={cx(\n 'ds:flex',\n orientation === 'vertical'\n ? 'ds:flex-row ds:gap-[var(--spacing-md)]'\n : 'ds:flex-col',\n className,\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.Root>\n </TabsContext.Provider>\n );\n },\n);\nTabsRoot.displayName = 'Tabs';\n\n// ---------------------------------------------------------------------------\n// TabsList — with overflow detection\n// ---------------------------------------------------------------------------\n\nconst TabsList = forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, children, 'aria-label': ariaLabel, ...props }, ref) => {\n const { variant, size, orientation, overflow, value, setValue } =\n useContext(TabsContext);\n const { t } = useTranslation();\n\n const listRef = useRef<HTMLDivElement>(null);\n const [overflowTabs, setOverflowTabs] = useState<\n { value: string; label: string }[]\n >([]);\n const isHorizontal = orientation === 'horizontal';\n // The `select` overflow strategy renders a Select mirror at narrow\n // container widths and skips the DropdownMenu overflow detector\n // (it's the wrong UX for that case — a select-and-a-dropdown would\n // double up). The dropdown detector only runs when `overflow` is\n // `dropdown` and the strip is horizontal.\n const isDropdownOverflow = overflow === 'dropdown' && isHorizontal;\n\n useEffect(() => {\n if (!isDropdownOverflow) {\n setOverflowTabs([]);\n return;\n }\n const el = listRef.current;\n if (!el) return;\n\n const detectOverflow = () => {\n const containerRight = el.getBoundingClientRect().right;\n const hidden: { value: string; label: string }[] = [];\n el.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]').forEach(\n (tab) => {\n const rect = tab.getBoundingClientRect();\n if (rect.right > containerRight + 2) {\n const value =\n tab.getAttribute('data-value') ?? tab.dataset['value'] ?? '';\n const label = tab.textContent?.trim() ?? value;\n hidden.push({ value, label });\n }\n },\n );\n setOverflowTabs(hidden);\n };\n\n const ro = new ResizeObserver(detectOverflow);\n ro.observe(el);\n detectOverflow();\n return () => ro.disconnect();\n }, [isDropdownOverflow, children]);\n\n const combinedRef = (node: HTMLDivElement | null) => {\n (listRef as MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref)\n (ref as MutableRefObject<HTMLDivElement | null>).current = node;\n };\n\n // For `overflow=\"select\"` we mirror the Trigger children as Select\n // options. Triggers may carry icon + text; for the Select label we\n // prefer the trigger's plain-text children — anything else falls\n // back to the trigger's `value` so the option is at least selectable.\n const selectOptions = useMemo<SelectOption<string>[]>(() => {\n if (overflow !== 'select') return [];\n return Children.toArray(children)\n .filter((child): child is ReactElement<TabsTriggerProps> =>\n isValidElement(child),\n )\n .filter(\n (child) =>\n typeof child.props.value === 'string' &&\n child.props.value.length > 0,\n )\n .map((child) => {\n const triggerValue = child.props.value as string;\n const labelChild = child.props.children;\n const label =\n typeof labelChild === 'string'\n ? labelChild\n : typeof labelChild === 'number'\n ? String(labelChild)\n : triggerValue;\n return { value: triggerValue, label };\n });\n }, [children, overflow]);\n\n if (overflow === 'select' && isHorizontal) {\n // Container queries gate the swap: above `@md` (Tailwind v4 default\n // 28rem container width) the inline tab strip renders; below it,\n // the Select takes over. The Tabs.List markup stays mounted in\n // both modes so Radix's roving-tabindex / ARIA wiring is preserved\n // even when the strip is visually hidden — keyboard users who land\n // on the panel via skip-link still get to the active tab.\n return (\n <div className=\"ds:@container/tabs ds:relative ds:w-full\">\n {/* Select mirror — visible at narrow container widths only. */}\n <div className=\"ds:block ds:@md/tabs:hidden\">\n <Select\n options={selectOptions}\n value={value}\n onValueChange={(next) => {\n if (typeof next === 'string' && next.length > 0) setValue(next);\n }}\n size={size}\n aria-label={ariaLabel ?? t('tabs.selectLabel')}\n />\n </div>\n {/* Inline tab strip — visible at wider container widths. */}\n <div className=\"ds:hidden ds:@md/tabs:flex ds:relative ds:items-center\">\n <TabsPrimitive.List\n ref={combinedRef}\n aria-label={ariaLabel}\n className={tabsListVariants({ variant, orientation, className })}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ds:relative ds:flex ds:items-center\">\n <TabsPrimitive.List\n ref={combinedRef}\n aria-label={ariaLabel}\n className={tabsListVariants({ variant, orientation, className })}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n\n {isDropdownOverflow && overflowTabs.length > 0 && (\n <OverflowMenu\n tabs={overflowTabs}\n label={t('tabs.moreTabs')}\n size={size}\n />\n )}\n </div>\n );\n },\n);\nTabsList.displayName = 'TabsList';\n\n// ---------------------------------------------------------------------------\n// OverflowMenu (internal)\n// ---------------------------------------------------------------------------\n\ninterface OverflowMenuProps {\n tabs: { value: string; label: string }[];\n label: string;\n size: 'sm' | 'md' | 'lg';\n}\n\nfunction OverflowMenu({ tabs, label, size }: OverflowMenuProps) {\n const { variant } = useContext(TabsContext);\n\n return (\n <DropdownMenuPrimitive.Root>\n <DropdownMenuPrimitive.Trigger\n className={cx(\n tabsTriggerVariants({ variant, size, orientation: 'horizontal' }),\n 'ds:shrink-0 ds:ms-1',\n )}\n aria-label={label}\n >\n {label}\n <ChevronDown aria-hidden=\"true\" className=\"ds:size-4\" />\n </DropdownMenuPrimitive.Trigger>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n sideOffset={4}\n className={cx(\n 'ds:z-50 ds:min-w-40 ds:overflow-hidden ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-border ds:bg-popover ds:p-1 ds:shadow-md',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95',\n )}\n >\n {tabs.map(({ value, label: tabLabel }) => (\n <DropdownMenuPrimitive.Item\n key={value}\n className={cx(\n 'ds:relative ds:flex ds:cursor-pointer ds:select-none ds:items-center',\n 'ds:rounded-[var(--radius-sm)] ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n 'ds:text-[var(--font-size-sm)] ds:text-foreground ds:outline-none',\n 'ds:hover:bg-muted ds:focus:bg-muted',\n 'ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50',\n )}\n onSelect={() => {\n const tab = document.querySelector<HTMLButtonElement>(\n `[role=\"tab\"][data-value=\"${CSS.escape(value)}\"]`,\n );\n tab?.click();\n tab?.scrollIntoView({ inline: 'nearest' });\n }}\n >\n {tabLabel}\n </DropdownMenuPrimitive.Item>\n ))}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </DropdownMenuPrimitive.Root>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TabsTrigger\n// ---------------------------------------------------------------------------\n\nconst TabsTrigger = forwardRef<HTMLButtonElement, TabsTriggerProps>(\n (\n {\n variant: variantProp,\n size: sizeProp,\n orientation: orientationProp,\n icon,\n badge,\n dismissible = false,\n onDismiss,\n className,\n children,\n value,\n onKeyDown,\n ...props\n },\n ref,\n ) => {\n const ctx = useContext(TabsContext);\n const variant = variantProp ?? ctx.variant;\n const size = sizeProp ?? ctx.size;\n const orientation = orientationProp ?? ctx.orientation;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n // APG dismissible-tab pattern: Delete/Backspace while trigger is focused closes the tab.\n // The visual X is pointer-only (aria-hidden) to avoid nested-interactive HTML violation.\n if (dismissible && (e.key === 'Delete' || e.key === 'Backspace')) {\n e.preventDefault();\n onDismiss?.();\n }\n onKeyDown?.(e);\n };\n\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n value={value}\n data-value={value}\n className={tabsTriggerVariants({\n variant,\n size,\n orientation,\n className,\n })}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {icon && (\n <span aria-hidden=\"true\" className=\"ds:shrink-0 ds:size-4\">\n {icon}\n </span>\n )}\n {children}\n {badge && <span className=\"ds:shrink-0\">{badge}</span>}\n {dismissible && (\n // Visual-only dismiss indicator — pointer dismiss fires here; keyboard dismiss fires via Delete/Backspace on the trigger above.\n // No role/tabIndex to avoid nested-interactive (interactive content inside <button> is invalid HTML).\n <span\n aria-hidden=\"true\"\n className={cx(\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:size-6 ds:rounded-[var(--radius-sm)]',\n 'ds:hover:bg-muted-foreground/20',\n )}\n onPointerDown={(e) => {\n e.stopPropagation();\n e.preventDefault();\n onDismiss?.();\n }}\n >\n <X className=\"ds:size-3.5\" />\n </span>\n )}\n </TabsPrimitive.Trigger>\n );\n },\n);\nTabsTrigger.displayName = 'TabsTrigger';\n\n// ---------------------------------------------------------------------------\n// TabsContent\n// ---------------------------------------------------------------------------\n\nconst TabsContent = forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, children, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cx(\n 'ds:mt-[var(--spacing-sm)] ds:outline-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n className,\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.Content>\n ),\n);\nTabsContent.displayName = 'TabsContent';\n\n// ---------------------------------------------------------------------------\n// Compound export\n// ---------------------------------------------------------------------------\n\nexport const Tabs = Object.assign(TabsRoot, {\n Root: TabsRoot,\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n});\n\nexport { TabsList, TabsTrigger, TabsContent };\n"],"names":["tabsAgent","handle","args","tabsListVariants","cva","tabsTriggerVariants","TabsContext","createContext","TabsRoot","forwardRef","variant","size","orientation","overflow","className","children","valueProp","defaultValue","onValueChange","id","props","ref","rootRef","useRef","composedRef","composeRefs","dir","useDirection","isControlled","internalValue","setInternalValue","useState","value","setValue","useCallback","next","ctxValue","useMemo","valueRef","useEffect","agentHandle","useAgentRegistration","jsx","TabsPrimitive","cx","TabsList","ariaLabel","useContext","t","useTranslation","listRef","overflowTabs","setOverflowTabs","isHorizontal","isDropdownOverflow","el","detectOverflow","containerRight","hidden","tab","label","_a","ro","combinedRef","node","selectOptions","Children","child","isValidElement","triggerValue","labelChild","jsxs","Select","OverflowMenu","tabs","DropdownMenuPrimitive","ChevronDown","tabLabel","TabsTrigger","variantProp","sizeProp","orientationProp","icon","badge","dismissible","onDismiss","onKeyDown","ctx","handleKeyDown","e","X","TabsContent","Tabs"],"mappings":"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"}