@alfadocs/ui-kit-debug 0.17.1 → 0.17.3

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 (202) hide show
  1. package/dist/_chunks/{accordion-DOmxGEWU.js → accordion-CNcodXuO.js} +6 -6
  2. package/dist/_chunks/{accordion-DOmxGEWU.js.map → accordion-CNcodXuO.js.map} +1 -1
  3. package/dist/_chunks/{ai-prompt-input-DEiQwIMn.js → ai-prompt-input-B-w5Rx3V.js} +184 -181
  4. package/dist/_chunks/ai-prompt-input-B-w5Rx3V.js.map +1 -0
  5. package/dist/_chunks/{alert-pgdXrEO5.js → alert-DBnawbmf.js} +64 -59
  6. package/dist/_chunks/alert-DBnawbmf.js.map +1 -0
  7. package/dist/_chunks/{audio-recorder-CRh4uyFL.js → audio-recorder-DNkQLW1G.js} +3 -3
  8. package/dist/_chunks/{audio-recorder-CRh4uyFL.js.map → audio-recorder-DNkQLW1G.js.map} +1 -1
  9. package/dist/_chunks/{autocomplete-mOg7WLOh.js → autocomplete-BxfabhZ8.js} +167 -164
  10. package/dist/_chunks/autocomplete-BxfabhZ8.js.map +1 -0
  11. package/dist/_chunks/{balance-cell-renderer-DWWtX-VM.js → balance-cell-renderer-DJB6WDPe.js} +2 -2
  12. package/dist/_chunks/{balance-cell-renderer-DWWtX-VM.js.map → balance-cell-renderer-DJB6WDPe.js.map} +1 -1
  13. package/dist/_chunks/{chat-input-UK-bXU7u.js → chat-input-B3XmFGDw.js} +123 -122
  14. package/dist/_chunks/chat-input-B3XmFGDw.js.map +1 -0
  15. package/dist/_chunks/checkbox-group-Bwmt1ovQ.js +213 -0
  16. package/dist/_chunks/checkbox-group-Bwmt1ovQ.js.map +1 -0
  17. package/dist/_chunks/{checkbox-D5EHnB14.js → checkbox-mwbrPZDY.js} +75 -70
  18. package/dist/_chunks/checkbox-mwbrPZDY.js.map +1 -0
  19. package/dist/_chunks/{collapsible-CuxUBoHJ.js → collapsible-hHiyZp0b.js} +61 -63
  20. package/dist/_chunks/collapsible-hHiyZp0b.js.map +1 -0
  21. package/dist/_chunks/{color-picker-BPfcByHH.js → color-picker-Bm-gzpsh.js} +2 -2
  22. package/dist/_chunks/{color-picker-BPfcByHH.js.map → color-picker-Bm-gzpsh.js.map} +1 -1
  23. package/dist/_chunks/{combobox-D5tWe0t_.js → combobox-Da9eq00i.js} +214 -211
  24. package/dist/_chunks/combobox-Da9eq00i.js.map +1 -0
  25. package/dist/_chunks/{copy-field-BCHAZ8QV.js → copy-field-BAF4mt9h.js} +95 -132
  26. package/dist/_chunks/copy-field-BAF4mt9h.js.map +1 -0
  27. package/dist/_chunks/{date-picker-BlhtBhPo.js → date-picker-BIoSLRly.js} +222 -219
  28. package/dist/_chunks/{date-picker-BlhtBhPo.js.map → date-picker-BIoSLRly.js.map} +1 -1
  29. package/dist/_chunks/{date-range-picker-C2hRu_Ke.js → date-range-picker-9gANFNG9.js} +81 -78
  30. package/dist/_chunks/date-range-picker-9gANFNG9.js.map +1 -0
  31. package/dist/_chunks/{date-time-picker-B67mPZmP.js → date-time-picker-DG7BiGdb.js} +98 -95
  32. package/dist/_chunks/date-time-picker-DG7BiGdb.js.map +1 -0
  33. package/dist/_chunks/{dialog-DRp6Dejy.js → dialog-DUomPCRS.js} +69 -71
  34. package/dist/_chunks/dialog-DUomPCRS.js.map +1 -0
  35. package/dist/_chunks/{dropdown-menu-dyV7gHh_.js → dropdown-menu-DZxwF23X.js} +108 -110
  36. package/dist/_chunks/dropdown-menu-DZxwF23X.js.map +1 -0
  37. package/dist/_chunks/{freemium-paywall-BTEiVkes.js → freemium-paywall-DXc7XlGE.js} +98 -97
  38. package/dist/_chunks/freemium-paywall-DXc7XlGE.js.map +1 -0
  39. package/dist/_chunks/{leo-sidebar-D3TuyH5_.js → leo-sidebar-DIsiTju3.js} +2 -2
  40. package/dist/_chunks/{leo-sidebar-D3TuyH5_.js.map → leo-sidebar-DIsiTju3.js.map} +1 -1
  41. package/dist/_chunks/{list-DcjV0m5B.js → list-BdvDctBz.js} +184 -180
  42. package/dist/_chunks/list-BdvDctBz.js.map +1 -0
  43. package/dist/_chunks/{message-tray-Fsend-du.js → message-tray-BNAS8al4.js} +111 -111
  44. package/dist/_chunks/message-tray-BNAS8al4.js.map +1 -0
  45. package/dist/_chunks/{multi-select-DooDzQIp.js → multi-select-CyspR5ZF.js} +157 -154
  46. package/dist/_chunks/multi-select-CyspR5ZF.js.map +1 -0
  47. package/dist/_chunks/{navigation-menu-DdufF-_4.js → navigation-menu-CyS1fBJ7.js} +85 -87
  48. package/dist/_chunks/navigation-menu-CyS1fBJ7.js.map +1 -0
  49. package/dist/_chunks/{notification-tray-C3dYdLAF.js → notification-tray-D_69dXFY.js} +114 -114
  50. package/dist/_chunks/notification-tray-D_69dXFY.js.map +1 -0
  51. package/dist/_chunks/{number-input-DH00o0DN.js → number-input-BZXu6bPY.js} +92 -89
  52. package/dist/_chunks/number-input-BZXu6bPY.js.map +1 -0
  53. package/dist/_chunks/{otp-input-BBXYvLx5.js → otp-input-BDF_iNpa.js} +92 -93
  54. package/dist/_chunks/otp-input-BDF_iNpa.js.map +1 -0
  55. package/dist/_chunks/{pagination-F1ei4khE.js → pagination-BWaXF7W0.js} +194 -211
  56. package/dist/_chunks/pagination-BWaXF7W0.js.map +1 -0
  57. package/dist/_chunks/{patient-shell-BE0CdPOJ.js → patient-shell-BOOaWZA9.js} +3 -3
  58. package/dist/_chunks/{patient-shell-BE0CdPOJ.js.map → patient-shell-BOOaWZA9.js.map} +1 -1
  59. package/dist/_chunks/{payment-form-CI77oIx1.js → payment-form-BjkuQeqR.js} +2 -2
  60. package/dist/_chunks/{payment-form-CI77oIx1.js.map → payment-form-BjkuQeqR.js.map} +1 -1
  61. package/dist/_chunks/{pdf-viewer-CnEJvmXC.js → pdf-viewer-BG_nsFT5.js} +2 -2
  62. package/dist/_chunks/{pdf-viewer-CnEJvmXC.js.map → pdf-viewer-BG_nsFT5.js.map} +1 -1
  63. package/dist/_chunks/{radio-group-Cz1a4QCA.js → radio-group-BHZOxrIK.js} +4 -4
  64. package/dist/_chunks/{radio-group-Cz1a4QCA.js.map → radio-group-BHZOxrIK.js.map} +1 -1
  65. package/dist/_chunks/{select-Ca6ibiDL.js → select-C92AT_OZ.js} +7 -7
  66. package/dist/_chunks/{select-Ca6ibiDL.js.map → select-C92AT_OZ.js.map} +1 -1
  67. package/dist/_chunks/{sidebar-D8Lq065m.js → sidebar-BqzlRBvC.js} +271 -291
  68. package/dist/_chunks/sidebar-BqzlRBvC.js.map +1 -0
  69. package/dist/_chunks/{slider-CkR6CLun.js → slider-CfEzeseL.js} +4 -4
  70. package/dist/_chunks/{slider-CkR6CLun.js.map → slider-CfEzeseL.js.map} +1 -1
  71. package/dist/_chunks/{tabs-CRCyPpJo.js → tabs-aEQfQV3x.js} +8 -8
  72. package/dist/_chunks/{tabs-CRCyPpJo.js.map → tabs-aEQfQV3x.js.map} +1 -1
  73. package/dist/_chunks/{theme-toggle-B3meAb3y.js → theme-toggle-BswYl0Yp.js} +2 -2
  74. package/dist/_chunks/{theme-toggle-B3meAb3y.js.map → theme-toggle-BswYl0Yp.js.map} +1 -1
  75. package/dist/_chunks/use-controllable-state-BiY4xTzM.js +23 -0
  76. package/dist/_chunks/use-controllable-state-BiY4xTzM.js.map +1 -0
  77. package/dist/_chunks/use-copy-to-clipboard-Cyfc_dlv.js +43 -0
  78. package/dist/_chunks/use-copy-to-clipboard-Cyfc_dlv.js.map +1 -0
  79. package/dist/_chunks/use-debounced-callback-BisrB-Fq.js.map +1 -1
  80. package/dist/_chunks/use-direction-D6rvvG9G.js.map +1 -1
  81. package/dist/_chunks/use-persistent-state-i23OWy6G.js +24 -0
  82. package/dist/_chunks/use-persistent-state-i23OWy6G.js.map +1 -0
  83. package/dist/_chunks/{warning-stack-CeRihME9.js → warning-stack-CDH9TudY.js} +2 -2
  84. package/dist/_chunks/{warning-stack-CeRihME9.js.map → warning-stack-CDH9TudY.js.map} +1 -1
  85. package/dist/_chunks/{workflow-map-D3MvrsZV.js → workflow-map-BeKe23uw.js} +3 -3
  86. package/dist/_chunks/{workflow-map-D3MvrsZV.js.map → workflow-map-BeKe23uw.js.map} +1 -1
  87. package/dist/agent-catalog.json +1 -1
  88. package/dist/components/_shared/use-debounced-callback.d.ts +1 -5
  89. package/dist/components/_shared/use-debounced-callback.d.ts.map +1 -1
  90. package/dist/components/_shared/use-direction.d.ts +1 -18
  91. package/dist/components/_shared/use-direction.d.ts.map +1 -1
  92. package/dist/components/_shared/use-focus-trap.d.ts +1 -31
  93. package/dist/components/_shared/use-focus-trap.d.ts.map +1 -1
  94. package/dist/components/accordion/index.js +1 -1
  95. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  96. package/dist/components/ai-prompt-input/index.js +1 -1
  97. package/dist/components/alert/alert.d.ts.map +1 -1
  98. package/dist/components/alert/index.js +1 -1
  99. package/dist/components/audio-recorder/index.js +1 -1
  100. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  101. package/dist/components/autocomplete/index.js +1 -1
  102. package/dist/components/chat-input/chat-input.d.ts.map +1 -1
  103. package/dist/components/chat-input/index.js +1 -1
  104. package/dist/components/checkbox/checkbox.d.ts.map +1 -1
  105. package/dist/components/checkbox/index.js +1 -1
  106. package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
  107. package/dist/components/checkbox-group/index.js +1 -1
  108. package/dist/components/collapsible/collapsible.d.ts.map +1 -1
  109. package/dist/components/collapsible/index.js +1 -1
  110. package/dist/components/color-picker/index.js +1 -1
  111. package/dist/components/combobox/combobox.d.ts.map +1 -1
  112. package/dist/components/combobox/index.js +1 -1
  113. package/dist/components/command-palette/command-palette.d.ts +1 -1
  114. package/dist/components/copy-field/index.js +1 -1
  115. package/dist/components/data-table/index.js +1 -1
  116. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  117. package/dist/components/date-picker/index.js +1 -1
  118. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  119. package/dist/components/date-range-picker/index.js +1 -1
  120. package/dist/components/date-time-picker/date-time-picker.d.ts.map +1 -1
  121. package/dist/components/date-time-picker/index.js +1 -1
  122. package/dist/components/dialog/dialog.d.ts.map +1 -1
  123. package/dist/components/dialog/index.js +1 -1
  124. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  125. package/dist/components/dropdown-menu/index.js +1 -1
  126. package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
  127. package/dist/components/freemium-paywall/index.js +1 -1
  128. package/dist/components/icon-button-group/icon-button-group.d.ts +14 -14
  129. package/dist/components/list/index.js +1 -1
  130. package/dist/components/list/list.d.ts.map +1 -1
  131. package/dist/components/message-tray/index.js +1 -1
  132. package/dist/components/message-tray/message-tray.d.ts.map +1 -1
  133. package/dist/components/multi-select/index.js +1 -1
  134. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  135. package/dist/components/navigation-menu/index.js +1 -1
  136. package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
  137. package/dist/components/notification-tray/index.js +1 -1
  138. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  139. package/dist/components/number-input/index.js +1 -1
  140. package/dist/components/number-input/number-input.d.ts.map +1 -1
  141. package/dist/components/otp-input/index.js +1 -1
  142. package/dist/components/otp-input/otp-input.d.ts.map +1 -1
  143. package/dist/components/pagination/index.js +1 -1
  144. package/dist/components/payment-form/index.js +1 -1
  145. package/dist/components/pdf-viewer/index.js +1 -1
  146. package/dist/components/radio-group/index.js +1 -1
  147. package/dist/components/select/index.js +1 -1
  148. package/dist/components/sidebar/index.js +8 -7
  149. package/dist/components/sidebar/index.js.map +1 -1
  150. package/dist/components/sidebar/sidebar.d.ts +1 -1
  151. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  152. package/dist/components/slider/index.js +1 -1
  153. package/dist/components/tabs/index.js +1 -1
  154. package/dist/components/theme-toggle/index.js +1 -1
  155. package/dist/components/warning-stack/index.js +1 -1
  156. package/dist/components/workflow/index.js +1 -1
  157. package/dist/hooks/index.d.ts +8 -0
  158. package/dist/hooks/index.d.ts.map +1 -1
  159. package/dist/hooks/index.js +98 -15
  160. package/dist/hooks/index.js.map +1 -1
  161. package/dist/hooks/use-debounced-callback.d.ts +19 -0
  162. package/dist/hooks/use-debounced-callback.d.ts.map +1 -0
  163. package/dist/hooks/use-debounced-value.d.ts +16 -0
  164. package/dist/hooks/use-debounced-value.d.ts.map +1 -0
  165. package/dist/hooks/use-direction.d.ts +19 -0
  166. package/dist/hooks/use-direction.d.ts.map +1 -0
  167. package/dist/hooks/use-focus-trap.d.ts +32 -0
  168. package/dist/hooks/use-focus-trap.d.ts.map +1 -0
  169. package/dist/hooks/use-isomorphic-layout-effect.d.ts +13 -0
  170. package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
  171. package/dist/hooks/use-persistent-state.d.ts +16 -0
  172. package/dist/hooks/use-persistent-state.d.ts.map +1 -0
  173. package/dist/index.js +493 -492
  174. package/dist/index.js.map +1 -1
  175. package/dist/patterns/leo-assistant/index.js +1 -1
  176. package/dist/patterns/patient-shell/index.js +1 -1
  177. package/dist/tokens.css +1 -1
  178. package/package.json +4 -2
  179. package/dist/_chunks/ai-prompt-input-DEiQwIMn.js.map +0 -1
  180. package/dist/_chunks/alert-pgdXrEO5.js.map +0 -1
  181. package/dist/_chunks/autocomplete-mOg7WLOh.js.map +0 -1
  182. package/dist/_chunks/chat-input-UK-bXU7u.js.map +0 -1
  183. package/dist/_chunks/checkbox-D5EHnB14.js.map +0 -1
  184. package/dist/_chunks/checkbox-group-Qkm3Rg1S.js +0 -208
  185. package/dist/_chunks/checkbox-group-Qkm3Rg1S.js.map +0 -1
  186. package/dist/_chunks/collapsible-CuxUBoHJ.js.map +0 -1
  187. package/dist/_chunks/combobox-D5tWe0t_.js.map +0 -1
  188. package/dist/_chunks/copy-field-BCHAZ8QV.js.map +0 -1
  189. package/dist/_chunks/date-range-picker-C2hRu_Ke.js.map +0 -1
  190. package/dist/_chunks/date-time-picker-B67mPZmP.js.map +0 -1
  191. package/dist/_chunks/dialog-DRp6Dejy.js.map +0 -1
  192. package/dist/_chunks/dropdown-menu-dyV7gHh_.js.map +0 -1
  193. package/dist/_chunks/freemium-paywall-BTEiVkes.js.map +0 -1
  194. package/dist/_chunks/list-DcjV0m5B.js.map +0 -1
  195. package/dist/_chunks/message-tray-Fsend-du.js.map +0 -1
  196. package/dist/_chunks/multi-select-DooDzQIp.js.map +0 -1
  197. package/dist/_chunks/navigation-menu-DdufF-_4.js.map +0 -1
  198. package/dist/_chunks/notification-tray-C3dYdLAF.js.map +0 -1
  199. package/dist/_chunks/number-input-DH00o0DN.js.map +0 -1
  200. package/dist/_chunks/otp-input-BBXYvLx5.js.map +0 -1
  201. package/dist/_chunks/pagination-F1ei4khE.js.map +0 -1
  202. package/dist/_chunks/sidebar-D8Lq065m.js.map +0 -1
@@ -1,14 +1,15 @@
1
- import { jsx as o, jsxs as D } from "react/jsx-runtime";
2
- import { forwardRef as Ye, useId as Ze, useState as I, useRef as c, useCallback as T, useEffect as N, useMemo as S } from "react";
3
- import { _ as m } from "./index-4xgbg-sn.js";
4
- import * as A from "@radix-ui/react-popover";
5
- import { c as F } from "./index-D2ZczOXr.js";
6
- import { useTranslation as et } from "react-i18next";
7
- import { S as me } from "./spinner-DirtWZNG.js";
8
- import { u as tt } from "./form-field-context-B3APVHKx.js";
9
- import { u as st } from "./use-debounced-callback-BisrB-Fq.js";
10
- import { g as nt } from "./group-options-BvKhQ3xb.js";
11
- import { I as ot, a as X, b as J, c as at } from "./input-surface-xyERuLU_.js";
1
+ import { jsx as o, jsxs as _ } from "react/jsx-runtime";
2
+ import { forwardRef as We, useId as Ye, useState as $, useRef as c, useCallback as D, useEffect as R, useMemo as L } from "react";
3
+ import { _ as f } from "./index-4xgbg-sn.js";
4
+ import * as T from "@radix-ui/react-popover";
5
+ import { c as A } from "./index-D2ZczOXr.js";
6
+ import { useTranslation as Ze } from "react-i18next";
7
+ import { S as pe } from "./spinner-DirtWZNG.js";
8
+ import { u as et } from "./form-field-context-B3APVHKx.js";
9
+ import { u as tt } from "./use-controllable-state-BiY4xTzM.js";
10
+ import { g as st } from "./group-options-BvKhQ3xb.js";
11
+ import { I as nt, a as S, b as K, c as ot } from "./input-surface-xyERuLU_.js";
12
+ import { u as at } from "./use-debounced-callback-BisrB-Fq.js";
12
13
  import { u as rt } from "./registry-C9nwlNyL.js";
13
14
  const it = {
14
15
  id: "autocomplete",
@@ -81,20 +82,20 @@ const it = {
81
82
  description: "Each suggestion emits its value as data-option-id."
82
83
  }
83
84
  }
84
- }, dt = F(
85
- ["ds:flex ds:w-full ds:items-center", at].join(" "),
85
+ }, dt = A(
86
+ ["ds:flex ds:w-full ds:items-center", ot].join(" "),
86
87
  {
87
88
  variants: {
88
89
  size: {
89
- sm: `${X.sm} ${J.sm}`,
90
- md: `${X.md} ${J.md}`,
91
- lg: `${X.lg} ${J.lg}`
90
+ sm: `${S.sm} ${K.sm}`,
91
+ md: `${S.md} ${K.md}`,
92
+ lg: `${S.lg} ${K.lg}`
92
93
  },
93
- tone: ot
94
+ tone: nt
94
95
  },
95
96
  defaultVariants: { size: "md", tone: "default" }
96
97
  }
97
- ), lt = F(
98
+ ), lt = A(
98
99
  [
99
100
  "ds:flex-1 ds:min-w-0 ds:bg-transparent ds:text-foreground",
100
101
  "ds:placeholder:text-muted-foreground",
@@ -109,7 +110,7 @@ const it = {
109
110
  },
110
111
  defaultVariants: { hasStart: !1, hasEnd: !1 }
111
112
  }
112
- ), ut = F(
113
+ ), ut = A(
113
114
  [
114
115
  "ds:z-[var(--z-dropdown)] ds:overflow-hidden",
115
116
  "ds:rounded-[var(--radius-sm)] ds:border ds:border-border ds:bg-background",
@@ -120,7 +121,7 @@ const it = {
120
121
  "ds:data-[state=closed]:zoom-out-95",
121
122
  "ds:motion-reduce:animate-none"
122
123
  ].join(" ")
123
- ), ge = F(
124
+ ), me = A(
124
125
  [
125
126
  "ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]",
126
127
  "ds:ps-3 ds:pe-3 ds:py-2 ds:text-[length:var(--font-size-sm)] ds:text-foreground",
@@ -129,111 +130,113 @@ const it = {
129
130
  "ds:data-[selected=true]:bg-primary ds:data-[selected=true]:text-primary-foreground",
130
131
  "ds:hover:bg-muted ds:data-[selected=true]:hover:bg-primary"
131
132
  ].join(" ")
132
- ), he = [
133
+ ), fe = [
133
134
  "ds:[&_[cmdk-group-heading]]:ps-3",
134
135
  "ds:[&_[cmdk-group-heading]]:pe-3",
135
136
  "ds:[&_[cmdk-group-heading]]:py-1.5",
136
137
  "ds:[&_[cmdk-group-heading]]:type-eyebrow",
137
138
  "ds:[&_[cmdk-group-heading]]:text-muted-foreground"
138
- ].join(" "), W = "ds:inline-flex ds:items-center ds:shrink-0 ds:text-muted-foreground ds:[&_svg]:size-4";
139
- function Y(s, l, B) {
140
- return `${s}-${l}-${B}`;
139
+ ].join(" "), X = "ds:inline-flex ds:items-center ds:shrink-0 ds:text-muted-foreground ds:[&_svg]:size-4";
140
+ function J(s, l, F) {
141
+ return `${s}-${l}-${F}`;
141
142
  }
142
- function ve(s, l) {
143
+ function ge(s, l) {
143
144
  return `${s}:${l}`;
144
145
  }
145
- const ct = Ye(
146
+ const ct = We(
146
147
  function({
147
148
  loadOptions: l,
148
- debounceMs: B = 250,
149
- value: Z,
150
- defaultValue: be,
151
- onChange: R,
149
+ debounceMs: F = 250,
150
+ value: he,
151
+ defaultValue: ve,
152
+ onChange: be,
152
153
  onSelect: u,
153
154
  recents: v,
154
- onRecentSelect: M,
155
+ onRecentSelect: B,
155
156
  snapOnBlur: ye = !1,
156
157
  size: we = "md",
157
- tone: ke = "default",
158
- startAdornment: P,
159
- endAdornment: z,
160
- placeholder: ee,
161
- disabled: xe,
158
+ tone: Ce = "default",
159
+ startAdornment: M,
160
+ endAdornment: P,
161
+ placeholder: W,
162
+ disabled: ke,
162
163
  readOnly: b,
163
- required: Ce,
164
+ required: xe,
164
165
  name: Ve,
165
- id: j,
166
- className: Ie,
167
- "aria-label": te
168
- }, k) {
169
- const { t: x, i18n: Ne } = et(), C = tt(), Re = Ze(), g = j ?? C.id ?? Re, se = `${g}-listbox`, Ee = `${g}-live`, h = !!(C.disabled || xe), _e = !!(C.required || Ce), ne = C.invalid, $e = ne ? "error" : ke ?? "default", De = C.describedBy || void 0, U = Z !== void 0, [Te, Ae] = I(
170
- be ?? ""
171
- ), r = U ? Z : Te, [i, d] = I(!1), [y, oe] = I([]), [V, q] = I(!1), [p, Fe] = I(""), E = c(!1), H = c(null), O = c(r), ae = c(/* @__PURE__ */ new Map()), re = c(/* @__PURE__ */ new Map()), Q = c(null), G = c(null), Be = T(
166
+ id: z,
167
+ className: Re,
168
+ "aria-label": Y
169
+ }, C) {
170
+ const { t: k, i18n: Ne } = Ze(), x = et(), Ie = Ye(), g = z ?? x.id ?? Ie, Z = `${g}-listbox`, Ee = `${g}-live`, h = !!(x.disabled || ke), _e = !!(x.required || xe), ee = x.invalid, $e = ee ? "error" : Ce ?? "default", De = x.describedBy || void 0, [Te, te] = tt({
171
+ value: he,
172
+ defaultValue: ve ?? "",
173
+ onChange: be
174
+ }), r = Te ?? "", [i, d] = $(!1), [y, se] = $([]), [V, j] = $(!1), [p, Ae] = $(""), N = c(!1), U = c(null), q = c(r), ne = c(/* @__PURE__ */ new Map()), oe = c(/* @__PURE__ */ new Map()), H = c(null), O = c(null), Fe = D(
172
175
  (e) => {
173
- Q.current = e, typeof k == "function" ? k(e) : k && (k.current = e);
176
+ H.current = e, typeof C == "function" ? C(e) : C && (C.current = e);
174
177
  },
175
- [k]
176
- ), ie = Ne.language;
177
- N(() => {
178
+ [C]
179
+ ), ae = Ne.language;
180
+ R(() => {
178
181
  const e = /* @__PURE__ */ new Map();
179
182
  for (const t of y) e.set(t.value, t);
180
- ae.current = e;
181
- }, [y]), N(() => {
183
+ ne.current = e;
184
+ }, [y]), R(() => {
182
185
  const e = /* @__PURE__ */ new Map();
183
186
  if (v) for (const t of v) e.set(t.value, t);
184
- re.current = e;
187
+ oe.current = e;
185
188
  }, [v]);
186
- const Me = T(
189
+ const Be = D(
187
190
  (e) => {
188
191
  var n;
189
- if (h || b || E.current) return;
190
- (n = H.current) == null || n.abort();
192
+ if (h || b || N.current) return;
193
+ (n = U.current) == null || n.abort();
191
194
  const t = new AbortController();
192
- H.current = t, O.current = e, q(!0), l(e, { signal: t.signal, locale: ie }).then((a) => {
193
- t.signal.aborted || O.current === e && (oe(a), q(!1));
195
+ U.current = t, q.current = e, j(!0), l(e, { signal: t.signal, locale: ae }).then((a) => {
196
+ t.signal.aborted || q.current === e && (se(a), j(!1));
194
197
  }).catch((a) => {
195
- t.signal.aborted || a && typeof a == "object" && "name" in a && a.name === "AbortError" || O.current === e && (oe([]), q(!1));
198
+ t.signal.aborted || a && typeof a == "object" && "name" in a && a.name === "AbortError" || q.current === e && (se([]), j(!1));
196
199
  });
197
200
  },
198
- [h, b, l, ie]
199
- ), w = st(Me, B);
200
- N(() => () => {
201
+ [h, b, l, ae]
202
+ ), w = at(Be, F);
203
+ R(() => () => {
201
204
  var e;
202
- w.cancel(), (e = H.current) == null || e.abort();
205
+ w.cancel(), (e = U.current) == null || e.abort();
203
206
  }, [w]);
204
- const f = T(
207
+ const m = D(
205
208
  (e) => {
206
- U || Ae(e), R == null || R(e);
209
+ te(e);
207
210
  },
208
- [U, R]
209
- ), de = T(
211
+ [te]
212
+ ), re = D(
210
213
  (e) => {
211
214
  const [t, n] = e.split(":");
212
215
  if (!n || t !== "recent" && t !== "option") return null;
213
- const fe = (t === "recent" ? re.current : ae.current).get(n);
214
- return fe ? { kind: t, option: fe } : null;
216
+ const ce = (t === "recent" ? oe.current : ne.current).get(n);
217
+ return ce ? { kind: t, option: ce } : null;
215
218
  },
216
219
  []
217
- ), Pe = (e) => {
218
- f(e), !(h || b) && (i || d(!0), !E.current && w(e));
220
+ ), Me = (e) => {
221
+ m(e), !(h || b) && (i || d(!0), !N.current && w(e));
222
+ }, Pe = (e) => {
223
+ N.current = !0;
219
224
  }, ze = (e) => {
220
- E.current = !0;
221
- }, je = (e) => {
222
- E.current = !1;
225
+ N.current = !1;
223
226
  const t = e.currentTarget.value;
224
227
  w(t);
225
- }, Ue = (e) => {
228
+ }, je = (e) => {
226
229
  h || b || (d(!0), r && w(r));
227
- }, qe = (e) => {
230
+ }, Ue = (e) => {
228
231
  const t = e.relatedTarget;
229
- if (!(t && G.current && G.current.contains(t))) {
232
+ if (!(t && O.current && O.current.contains(t))) {
230
233
  if (ye && p) {
231
- const n = de(p);
232
- n && (f(n.option.label), u == null || u(n.option));
234
+ const n = re(p);
235
+ n && (m(n.option.label), u == null || u(n.option));
233
236
  }
234
237
  d(!1);
235
238
  }
236
- }, He = (e) => {
239
+ }, qe = (e) => {
237
240
  if (!e.nativeEvent.isComposing) {
238
241
  if (e.key === "Escape") {
239
242
  i && (e.preventDefault(), e.stopPropagation(), d(!1));
@@ -244,48 +247,48 @@ const ct = Ye(
244
247
  return;
245
248
  }
246
249
  if (e.key === "Tab" && i && p) {
247
- const t = de(p);
248
- t && (f(t.option.label), u == null || u(t.option), d(!1));
250
+ const t = re(p);
251
+ t && (m(t.option.label), u == null || u(t.option), d(!1));
249
252
  }
250
253
  }
251
- }, le = (e, t) => {
254
+ }, ie = (e, t) => {
252
255
  var n;
253
- f(t.label), e === "recent" ? M == null || M(t) : u == null || u(t), d(!1), (n = Q.current) == null || n.focus();
254
- }, L = (e) => {
256
+ m(t.label), e === "recent" ? B == null || B(t) : u == null || u(t), d(!1), (n = H.current) == null || n.focus();
257
+ }, Q = (e) => {
255
258
  e.preventDefault();
256
- }, _ = !!(v && v.length > 0) && r.length === 0, Oe = S(
257
- () => nt(y),
259
+ }, I = !!(v && v.length > 0) && r.length === 0, He = L(
260
+ () => st(y),
258
261
  [y]
259
- ), Qe = !!P, Ge = !!z || V, Le = dt({
262
+ ), Oe = !!M, Qe = !!P || V, Ge = dt({
260
263
  size: we,
261
264
  tone: $e,
262
- className: Ie
263
- }), Ke = S(() => {
265
+ className: Re
266
+ }), Le = L(() => {
264
267
  if (!p) return;
265
268
  const [e, t] = p.split(":");
266
269
  if (!(!t || e !== "recent" && e !== "option"))
267
- return Y(g, e, t);
268
- }, [p, g]), $ = y.length > 0, ue = !_ && !$ && !V && r.length > 0, ce = V && !$, Se = _ || $ || ue || ce, K = c(r);
269
- N(() => {
270
- K.current = r;
270
+ return J(g, e, t);
271
+ }, [p, g]), E = y.length > 0, de = !I && !E && !V && r.length > 0, le = V && !E, Se = I || E || de || le, G = c(r);
272
+ R(() => {
273
+ G.current = r;
271
274
  }, [r]);
272
- const pe = c(i);
273
- N(() => {
274
- pe.current = i;
275
+ const ue = c(i);
276
+ R(() => {
277
+ ue.current = i;
275
278
  }, [i]);
276
- const Xe = S(
279
+ const Ke = L(
277
280
  () => ({
278
- getValue: () => K.current || null,
279
- getQuery: () => K.current,
280
- getIsOpen: () => pe.current,
281
+ getValue: () => G.current || null,
282
+ getQuery: () => G.current,
283
+ getIsOpen: () => ue.current,
281
284
  setValue: (e) => {
282
- f(e ?? "");
285
+ m(e ?? "");
283
286
  },
284
287
  setQuery: (e) => {
285
- f(e);
288
+ m(e);
286
289
  },
287
290
  clear: () => {
288
- f("");
291
+ m("");
289
292
  },
290
293
  open: () => {
291
294
  d(!0);
@@ -294,65 +297,65 @@ const ct = Ye(
294
297
  d(!1);
295
298
  }
296
299
  }),
297
- [f]
300
+ [m]
298
301
  );
299
- rt(it, Xe, j);
300
- const Je = y.length, We = V ? x("common.loading", "Loading…") : i && r.length > 0 ? x("inputs.autocomplete.results", {
301
- count: Je,
302
+ rt(it, Ke, z);
303
+ const Xe = y.length, Je = V ? k("common.loading", "Loading…") : i && r.length > 0 ? k("inputs.autocomplete.results", {
304
+ count: Xe,
302
305
  defaultValue: "{{count}} results"
303
306
  }) : "";
304
307
  return /* @__PURE__ */ o(
305
- m,
308
+ f,
306
309
  {
307
310
  shouldFilter: !1,
308
311
  value: p,
309
- onValueChange: Fe,
310
- label: te ?? ee,
312
+ onValueChange: Ae,
313
+ label: Y ?? W,
311
314
  className: "ds:w-full",
312
- children: /* @__PURE__ */ D(
313
- A.Root,
315
+ children: /* @__PURE__ */ _(
316
+ T.Root,
314
317
  {
315
318
  open: i && !h && !b && Se,
316
319
  children: [
317
- /* @__PURE__ */ o(A.Anchor, { asChild: !0, children: /* @__PURE__ */ D(
320
+ /* @__PURE__ */ o(T.Anchor, { asChild: !0, children: /* @__PURE__ */ _(
318
321
  "div",
319
322
  {
320
- className: Le,
323
+ className: Ge,
321
324
  "data-component": "autocomplete",
322
- "data-component-id": j,
325
+ "data-component-id": z,
323
326
  "data-disabled": h || void 0,
324
327
  children: [
325
- P ? /* @__PURE__ */ o("span", { "aria-hidden": "true", className: `${W} ds:ps-3`, children: P }) : null,
328
+ M ? /* @__PURE__ */ o("span", { "aria-hidden": "true", className: `${X} ds:ps-3`, children: M }) : null,
326
329
  /* @__PURE__ */ o(
327
- m.Input,
330
+ f.Input,
328
331
  {
329
- ref: Be,
332
+ ref: Fe,
330
333
  id: g,
331
334
  name: Ve,
332
- placeholder: ee,
335
+ placeholder: W,
333
336
  value: r,
334
- onValueChange: Pe,
335
- onFocus: Ue,
336
- onBlur: qe,
337
- onKeyDown: He,
338
- onCompositionStart: ze,
339
- onCompositionEnd: je,
337
+ onValueChange: Me,
338
+ onFocus: je,
339
+ onBlur: Ue,
340
+ onKeyDown: qe,
341
+ onCompositionStart: Pe,
342
+ onCompositionEnd: ze,
340
343
  disabled: h,
341
344
  readOnly: b,
342
345
  required: _e,
343
346
  role: "combobox",
344
347
  "aria-autocomplete": "both",
345
348
  "aria-expanded": i,
346
- "aria-controls": i ? se : void 0,
347
- "aria-activedescendant": Ke,
349
+ "aria-controls": i ? Z : void 0,
350
+ "aria-activedescendant": Le,
348
351
  "aria-describedby": De,
349
- "aria-invalid": ne || void 0,
350
- "aria-label": te,
352
+ "aria-invalid": ee || void 0,
353
+ "aria-label": Y,
351
354
  autoComplete: "off",
352
- className: lt({ hasStart: Qe, hasEnd: Ge })
355
+ className: lt({ hasStart: Oe, hasEnd: Qe })
353
356
  }
354
357
  ),
355
- V ? /* @__PURE__ */ o("span", { className: `${W} ds:pe-3`, "aria-hidden": "true", children: /* @__PURE__ */ o(me, { size: "sm" }) }) : z ? /* @__PURE__ */ o("span", { "aria-hidden": "true", className: `${W} ds:pe-3`, children: z }) : null,
358
+ V ? /* @__PURE__ */ o("span", { className: `${X} ds:pe-3`, "aria-hidden": "true", children: /* @__PURE__ */ o(pe, { size: "sm" }) }) : P ? /* @__PURE__ */ o("span", { "aria-hidden": "true", className: `${X} ds:pe-3`, children: P }) : null,
356
359
  /* @__PURE__ */ o(
357
360
  "span",
358
361
  {
@@ -361,16 +364,16 @@ const ct = Ye(
361
364
  "aria-live": "polite",
362
365
  "aria-atomic": "true",
363
366
  className: "ds:sr-only",
364
- children: We
367
+ children: Je
365
368
  }
366
369
  )
367
370
  ]
368
371
  }
369
372
  ) }),
370
- /* @__PURE__ */ o(A.Portal, { forceMount: !0, children: /* @__PURE__ */ o(
371
- A.Content,
373
+ /* @__PURE__ */ o(T.Portal, { forceMount: !0, children: /* @__PURE__ */ o(
374
+ T.Content,
372
375
  {
373
- ref: G,
376
+ ref: O,
374
377
  forceMount: !0,
375
378
  hidden: !i,
376
379
  side: "bottom",
@@ -381,69 +384,69 @@ const ct = Ye(
381
384
  onPointerDownOutside: (e) => {
382
385
  var n;
383
386
  const t = e.target;
384
- if (t && ((n = Q.current) != null && n.contains(t))) {
387
+ if (t && ((n = H.current) != null && n.contains(t))) {
385
388
  e.preventDefault();
386
389
  return;
387
390
  }
388
391
  d(!1);
389
392
  },
390
393
  onEscapeKeyDown: () => d(!1),
391
- onMouseDown: L,
394
+ onMouseDown: Q,
392
395
  className: ut(),
393
- children: /* @__PURE__ */ D(
394
- m.List,
396
+ children: /* @__PURE__ */ _(
397
+ f.List,
395
398
  {
396
- id: se,
399
+ id: Z,
397
400
  className: "ds:max-h-[min(24rem,var(--radix-popover-content-available-height))] ds:overflow-auto ds:p-1",
398
401
  children: [
399
- _ ? /* @__PURE__ */ o(
400
- m.Group,
402
+ I ? /* @__PURE__ */ o(
403
+ f.Group,
401
404
  {
402
- heading: x("inputs.autocomplete.recent", "Recent"),
403
- className: he,
405
+ heading: k("inputs.autocomplete.recent", "Recent"),
406
+ className: fe,
404
407
  children: (v ?? []).map((e) => /* @__PURE__ */ o(
405
- m.Item,
408
+ f.Item,
406
409
  {
407
- id: Y(g, "recent", e.value),
408
- value: ve("recent", e.value),
410
+ id: J(g, "recent", e.value),
411
+ value: ge("recent", e.value),
409
412
  disabled: e.disabled,
410
- onSelect: () => le("recent", e),
411
- onMouseDown: L,
412
- className: ge(),
413
+ onSelect: () => ie("recent", e),
414
+ onMouseDown: Q,
415
+ className: me(),
413
416
  children: e.label
414
417
  },
415
418
  `recent-${e.value}`
416
419
  ))
417
420
  }
418
421
  ) : null,
419
- ue ? /* @__PURE__ */ o("div", { className: "ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground", children: x("inputs.autocomplete.noResults", "No results") }) : null,
420
- ce ? /* @__PURE__ */ D("div", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground", children: [
421
- /* @__PURE__ */ o(me, { size: "sm" }),
422
- /* @__PURE__ */ o("span", { children: x("common.loading", "Loading…") })
422
+ de ? /* @__PURE__ */ o("div", { className: "ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground", children: k("inputs.autocomplete.noResults", "No results") }) : null,
423
+ le ? /* @__PURE__ */ _("div", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground", children: [
424
+ /* @__PURE__ */ o(pe, { size: "sm" }),
425
+ /* @__PURE__ */ o("span", { children: k("common.loading", "Loading…") })
423
426
  ] }) : null,
424
- !_ && $ ? Oe.map((e, t) => {
427
+ !I && E ? He.map((e, t) => {
425
428
  const n = e.items.map((a) => /* @__PURE__ */ o(
426
- m.Item,
429
+ f.Item,
427
430
  {
428
- id: Y(g, "option", a.value),
429
- value: ve("option", a.value),
431
+ id: J(g, "option", a.value),
432
+ value: ge("option", a.value),
430
433
  disabled: a.disabled,
431
- onSelect: () => le("option", a),
432
- onMouseDown: L,
433
- className: ge(),
434
+ onSelect: () => ie("option", a),
435
+ onMouseDown: Q,
436
+ className: me(),
434
437
  children: a.label
435
438
  },
436
439
  `option-${a.value}`
437
440
  ));
438
441
  return e.group ? /* @__PURE__ */ o(
439
- m.Group,
442
+ f.Group,
440
443
  {
441
444
  heading: e.group,
442
- className: he,
445
+ className: fe,
443
446
  children: n
444
447
  },
445
448
  `group-${e.group}`
446
- ) : /* @__PURE__ */ o(m.Group, { children: n }, `group-${t}`);
449
+ ) : /* @__PURE__ */ o(f.Group, { children: n }, `group-${t}`);
447
450
  }) : null
448
451
  ]
449
452
  }
@@ -463,4 +466,4 @@ export {
463
466
  it as a,
464
467
  dt as b
465
468
  };
466
- //# sourceMappingURL=autocomplete-mOg7WLOh.js.map
469
+ //# sourceMappingURL=autocomplete-BxfabhZ8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete-BxfabhZ8.js","sources":["../../src/components/autocomplete/autocomplete.agent.ts","../../src/components/autocomplete/autocomplete.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { AutocompleteHandle } from './autocomplete';\n\nexport const autocompleteAgent: AgentAdapter<AutocompleteHandle> = {\n id: 'autocomplete',\n capabilities: ['filter', 'pick', 'open', 'close'],\n state: {\n value: {\n type: 'string | null',\n description:\n 'Currently-selected option value, or null when nothing is committed.',\n read: (handle) => handle.getValue(),\n },\n query: {\n type: 'string',\n description: 'Current free-text query in the input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n description: 'True when the suggestion list is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n set_value: {\n safety: 'read',\n argsType: '{ value: string | null }',\n description: 'Set the committed value programmatically.',\n invoke: (handle, args: { value: string | null }) => {\n handle.setValue(args.value);\n },\n },\n apply_filter: {\n safety: 'read',\n argsType: '{ query: string }',\n description: 'Set the input query, which filters the suggestion list.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n clear: {\n safety: 'read',\n description: 'Clear the value and the query.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n description: 'Open the suggestion list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n description: 'Close the suggestion list.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'autocomplete' },\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: 'Each suggestion emits its value as data-option-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type CompositionEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type Ref,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { Command } from 'cmdk';\nimport * as Popover from '@radix-ui/react-popover';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Spinner } from '../spinner/spinner';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useDebouncedCallback } from '../_shared/use-debounced-callback';\nimport type { OptionShape } from '../_shared/option';\nimport { groupOptions } from '../_shared/group-options';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_HEIGHT,\n INPUT_SURFACE_TEXT,\n INPUT_SURFACE_TONE,\n} from '../_shared/input-surface';\nimport { useAgentRegistration } from '../../agent';\nimport { autocompleteAgent } from './autocomplete.agent';\n\n// ---------------------------------------------------------------------------\n// CVA — sizing / chrome tokens come from _shared/input-surface so the four\n// input surfaces (TextInput, Autocomplete, Combobox, MultiSelect) cannot drift.\n// ---------------------------------------------------------------------------\n\nconst autocompleteVariants = cva(\n ['ds:flex ds:w-full ds:items-center', INPUT_SURFACE_CHROME].join(' '),\n {\n variants: {\n size: {\n sm: `${INPUT_SURFACE_HEIGHT.sm} ${INPUT_SURFACE_TEXT.sm}`,\n md: `${INPUT_SURFACE_HEIGHT.md} ${INPUT_SURFACE_TEXT.md}`,\n lg: `${INPUT_SURFACE_HEIGHT.lg} ${INPUT_SURFACE_TEXT.lg}`,\n },\n tone: INPUT_SURFACE_TONE,\n },\n defaultVariants: { size: 'md', tone: 'default' },\n },\n);\n\nconst inputVariants = cva(\n [\n 'ds:flex-1 ds:min-w-0 ds:bg-transparent ds:text-foreground',\n 'ds:placeholder:text-muted-foreground',\n 'ds:outline-none ds:focus:outline-none ds:focus-visible:outline-none',\n 'ds:disabled:cursor-not-allowed',\n 'ds:read-only:cursor-default',\n ].join(' '),\n {\n variants: {\n hasStart: { true: 'ds:ps-2', false: 'ds:ps-3' },\n hasEnd: { true: 'ds:pe-2', false: 'ds:pe-3' },\n },\n defaultVariants: { hasStart: false, hasEnd: false },\n },\n);\n\nconst contentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)] ds:overflow-hidden',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-border ds:bg-background',\n 'ds:shadow-[var(--shadow-md)]',\n 'ds:w-[var(--radix-popover-trigger-width)]',\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:motion-reduce:animate-none',\n ].join(' '),\n);\n\nconst itemVariants = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-3 ds:pe-3 ds:py-2 ds:text-[length:var(--font-size-sm)] ds:text-foreground',\n 'ds:rounded-[var(--radius-sm)] ds:select-none ds:cursor-pointer',\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n 'ds:data-[selected=true]:bg-primary ds:data-[selected=true]:text-primary-foreground',\n 'ds:hover:bg-muted ds:data-[selected=true]:hover:bg-primary',\n ].join(' '),\n);\n\nconst groupClasses = [\n 'ds:[&_[cmdk-group-heading]]:ps-3',\n 'ds:[&_[cmdk-group-heading]]:pe-3',\n 'ds:[&_[cmdk-group-heading]]:py-1.5',\n 'ds:[&_[cmdk-group-heading]]:type-eyebrow',\n 'ds:[&_[cmdk-group-heading]]:text-muted-foreground',\n].join(' ');\n\nconst adornmentBase =\n 'ds:inline-flex ds:items-center ds:shrink-0 ds:text-muted-foreground ds:[&_svg]:size-4';\n\n// ---------------------------------------------------------------------------\n// Agent handle — curated surface for agent-readiness adapter.\n//\n// The autocomplete `forwardRef` exposes the underlying `HTMLInputElement` for\n// form integration; the agent handle is a separate, structural contract\n// referenced by `autocomplete.agent.ts`. Consumers wire it via the platform\n// registry — it is not the component's React ref.\n// ---------------------------------------------------------------------------\n\nexport interface AutocompleteHandle {\n getValue: () => string | null;\n getQuery: () => string;\n getIsOpen: () => boolean;\n setValue: (value: string | null) => void;\n setQuery: (query: string) => void;\n clear: () => void;\n open: () => void;\n close: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\ntype CVAProps = VariantProps<typeof autocompleteVariants>;\n\nexport interface AutocompleteProps<T extends string = string> extends Pick<\n CVAProps,\n 'size' | 'tone'\n> {\n loadOptions: (\n query: string,\n opts: { signal: AbortSignal; locale: string },\n ) => Promise<OptionShape<T>[]>;\n debounceMs?: number;\n\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onSelect?: (option: OptionShape<T>) => void;\n\n recents?: OptionShape<T>[];\n onRecentSelect?: (option: OptionShape<T>) => void;\n\n snapOnBlur?: boolean;\n\n startAdornment?: ReactNode;\n endAdornment?: ReactNode;\n placeholder?: string;\n\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n className?: string;\n 'aria-label'?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nfunction itemIdFor(idPrefix: string, kind: 'recent' | 'option', value: string) {\n return `${idPrefix}-${kind}-${value}`;\n}\n\nfunction cmdkValueFor(kind: 'recent' | 'option', value: string) {\n return `${kind}:${value}`;\n}\n\nconst AutocompleteImpl = forwardRef<HTMLInputElement, AutocompleteProps>(\n function Autocomplete(\n {\n loadOptions,\n debounceMs = 250,\n value,\n defaultValue,\n onChange,\n onSelect,\n recents,\n onRecentSelect,\n snapOnBlur = false,\n size = 'md',\n tone = 'default',\n startAdornment,\n endAdornment,\n placeholder,\n disabled,\n readOnly,\n required,\n name,\n id,\n className,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n\n const reactId = useId();\n const idPrefix = id ?? ctx.id ?? reactId;\n const listId = `${idPrefix}-listbox`;\n const liveRegionId = `${idPrefix}-live`;\n\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n const effectiveRequired = Boolean(ctx.required || required);\n const effectiveInvalid = ctx.invalid;\n const effectiveTone: 'default' | 'error' = effectiveInvalid\n ? 'error'\n : (tone ?? 'default');\n const describedBy = ctx.describedBy || undefined;\n\n const [currentValueRaw, commitValueRaw] = useControllableState<string>({\n value,\n defaultValue: defaultValue ?? '',\n onChange,\n });\n const currentValue = currentValueRaw ?? '';\n\n const [open, setOpen] = useState(false);\n const [suggestions, setSuggestions] = useState<OptionShape[]>([]);\n const [loading, setLoading] = useState(false);\n const [cmdkValue, setCmdkValue] = useState<string>('');\n\n const composingRef = useRef(false);\n const abortRef = useRef<AbortController | null>(null);\n const latestQueryRef = useRef<string>(currentValue);\n const suggestionsByValueRef = useRef<Map<string, OptionShape>>(new Map());\n const recentsByValueRef = useRef<Map<string, OptionShape>>(new Map());\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const locale = i18n.language;\n\n useEffect(() => {\n const map = new Map<string, OptionShape>();\n for (const option of suggestions) map.set(option.value, option);\n suggestionsByValueRef.current = map;\n }, [suggestions]);\n\n useEffect(() => {\n const map = new Map<string, OptionShape>();\n if (recents) for (const option of recents) map.set(option.value, option);\n recentsByValueRef.current = map;\n }, [recents]);\n\n const runFetch = useCallback(\n (query: string) => {\n if (effectiveDisabled || readOnly) return;\n if (composingRef.current) return;\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n latestQueryRef.current = query;\n setLoading(true);\n loadOptions(query, { signal: controller.signal, locale })\n .then((results) => {\n if (controller.signal.aborted) return;\n if (latestQueryRef.current !== query) return;\n setSuggestions(results);\n setLoading(false);\n })\n .catch((error: unknown) => {\n if (controller.signal.aborted) return;\n if (\n error &&\n typeof error === 'object' &&\n 'name' in error &&\n (error as { name?: string }).name === 'AbortError'\n ) {\n return;\n }\n if (latestQueryRef.current !== query) return;\n setSuggestions([]);\n setLoading(false);\n });\n },\n [effectiveDisabled, readOnly, loadOptions, locale],\n );\n\n const debouncedFetch = useDebouncedCallback(runFetch, debounceMs);\n\n useEffect(() => {\n return () => {\n debouncedFetch.cancel();\n abortRef.current?.abort();\n };\n }, [debouncedFetch]);\n\n const commitValue = useCallback(\n (next: string) => {\n commitValueRaw(next);\n },\n [commitValueRaw],\n );\n\n const resolveCmdkValue = useCallback(\n (\n raw: string,\n ): { kind: 'recent' | 'option'; option: OptionShape } | null => {\n const [kind, val] = raw.split(':');\n if (!val || (kind !== 'recent' && kind !== 'option')) return null;\n const lookup =\n kind === 'recent'\n ? recentsByValueRef.current\n : suggestionsByValueRef.current;\n const option = lookup.get(val);\n return option ? { kind, option } : null;\n },\n [],\n );\n\n const handleInputValueChange = (next: string) => {\n commitValue(next);\n if (effectiveDisabled || readOnly) return;\n if (!open) setOpen(true);\n if (composingRef.current) return;\n debouncedFetch(next);\n };\n\n const handleCompositionStart = (\n _event: CompositionEvent<HTMLInputElement>,\n ) => {\n composingRef.current = true;\n };\n\n const handleCompositionEnd = (\n event: CompositionEvent<HTMLInputElement>,\n ) => {\n composingRef.current = false;\n const next = event.currentTarget.value;\n debouncedFetch(next);\n };\n\n const handleFocus = (_event: FocusEvent<HTMLInputElement>) => {\n if (effectiveDisabled || readOnly) return;\n setOpen(true);\n if (currentValue) debouncedFetch(currentValue);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n const next = event.relatedTarget as Node | null;\n // Focus moved into the popover — keep listbox open (pointer-down on item\n // moves focus into the portal but we treat that as \"still interacting\").\n if (next && contentRef.current && contentRef.current.contains(next)) {\n return;\n }\n if (snapOnBlur && cmdkValue) {\n const resolved = resolveCmdkValue(cmdkValue);\n if (resolved) {\n commitValue(resolved.option.label);\n onSelect?.(resolved.option);\n }\n }\n setOpen(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Escape') {\n if (open) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n }\n return;\n }\n if (event.key === 'ArrowDown' && !open) {\n event.preventDefault();\n setOpen(true);\n if (currentValue) debouncedFetch(currentValue);\n return;\n }\n if (event.key === 'Tab' && open && cmdkValue) {\n const resolved = resolveCmdkValue(cmdkValue);\n if (resolved) {\n commitValue(resolved.option.label);\n onSelect?.(resolved.option);\n setOpen(false);\n }\n }\n };\n\n const handleItemSelect = (\n kind: 'recent' | 'option',\n option: OptionShape,\n ) => {\n commitValue(option.label);\n if (kind === 'recent') onRecentSelect?.(option);\n else onSelect?.(option);\n setOpen(false);\n inputRef.current?.focus();\n };\n\n // Prevent input blur when clicking an item — keeps focus management predictable.\n const preventBlur = (event: MouseEvent<HTMLElement>) => {\n event.preventDefault();\n };\n\n const showRecents =\n Boolean(recents && recents.length > 0) && currentValue.length === 0;\n const groupedSuggestions = useMemo(\n () => groupOptions(suggestions),\n [suggestions],\n );\n\n const hasStart = Boolean(startAdornment);\n const hasEnd = Boolean(endAdornment) || loading;\n\n const wrapperClass = autocompleteVariants({\n size,\n tone: effectiveTone,\n className,\n });\n\n const activeDescendant = useMemo(() => {\n if (!cmdkValue) return undefined;\n const [kind, val] = cmdkValue.split(':');\n if (!val || (kind !== 'recent' && kind !== 'option')) return undefined;\n return itemIdFor(idPrefix, kind, val);\n }, [cmdkValue, idPrefix]);\n\n const hasSuggestions = suggestions.length > 0;\n const showEmpty =\n !showRecents && !hasSuggestions && !loading && currentValue.length > 0;\n const showLoadingRow = loading && !hasSuggestions;\n // Suppress the popover when there is nothing to render — prevents an empty\n // 1-line strip appearing under the input on focus with no query + no recents.\n const hasPopoverContent =\n showRecents || hasSuggestions || showEmpty || showLoadingRow;\n\n // Agent handle — refs mirror state for fresh reads from the memoized handle.\n const valueRefAgent = useRef<string>(currentValue);\n useEffect(() => {\n valueRefAgent.current = currentValue;\n }, [currentValue]);\n const openRefAgent = useRef<boolean>(open);\n useEffect(() => {\n openRefAgent.current = open;\n }, [open]);\n\n const agentHandle = useMemo<AutocompleteHandle>(\n () => ({\n getValue: () => valueRefAgent.current || null,\n getQuery: () => valueRefAgent.current,\n getIsOpen: () => openRefAgent.current,\n setValue: (next) => {\n commitValue(next ?? '');\n },\n setQuery: (query) => {\n commitValue(query);\n },\n clear: () => {\n commitValue('');\n },\n open: () => {\n setOpen(true);\n },\n close: () => {\n setOpen(false);\n },\n }),\n [commitValue],\n );\n useAgentRegistration(autocompleteAgent, agentHandle, id);\n\n const resultCount = suggestions.length;\n const liveMessage = loading\n ? t('common.loading', 'Loading…')\n : open && currentValue.length > 0\n ? t('inputs.autocomplete.results', {\n count: resultCount,\n defaultValue: '{{count}} results',\n })\n : '';\n\n return (\n <Command\n shouldFilter={false}\n value={cmdkValue}\n onValueChange={setCmdkValue}\n label={ariaLabel ?? placeholder}\n className=\"ds:w-full\"\n >\n <Popover.Root\n open={open && !effectiveDisabled && !readOnly && hasPopoverContent}\n >\n <Popover.Anchor asChild>\n <div\n className={wrapperClass}\n data-component=\"autocomplete\"\n data-component-id={id}\n data-disabled={effectiveDisabled || undefined}\n >\n {startAdornment ? (\n <span aria-hidden=\"true\" className={`${adornmentBase} ds:ps-3`}>\n {startAdornment}\n </span>\n ) : null}\n <Command.Input\n ref={setRefs}\n id={idPrefix}\n name={name}\n placeholder={placeholder}\n value={currentValue}\n onValueChange={handleInputValueChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n disabled={effectiveDisabled}\n readOnly={readOnly}\n required={effectiveRequired}\n role=\"combobox\"\n aria-autocomplete=\"both\"\n aria-expanded={open}\n // Only advertise aria-controls while the listbox is mounted\n // — Command.List lives inside the Popover.Content and only\n // renders when `open` is true. Pointing aria-controls at a\n // non-existent id fails axe's aria-valid-attr-value rule.\n aria-controls={open ? listId : undefined}\n aria-activedescendant={activeDescendant}\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n aria-label={ariaLabel}\n autoComplete=\"off\"\n className={inputVariants({ hasStart, hasEnd })}\n />\n {loading ? (\n <span className={`${adornmentBase} ds:pe-3`} aria-hidden=\"true\">\n <Spinner size=\"sm\" />\n </span>\n ) : endAdornment ? (\n <span aria-hidden=\"true\" className={`${adornmentBase} ds:pe-3`}>\n {endAdornment}\n </span>\n ) : null}\n <span\n id={liveRegionId}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {liveMessage}\n </span>\n </div>\n </Popover.Anchor>\n <Popover.Portal forceMount>\n <Popover.Content\n ref={contentRef}\n // `forceMount` keeps Command.List in the DOM even when the\n // popover is closed, so the input's cmdk-set\n // `aria-controls` always points at a real id (axe's\n // aria-valid-attr-value rule). Visibility is gated by\n // data-state via CSS / the `hidden` attribute below.\n forceMount\n hidden={!open}\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n onPointerDownOutside={(event) => {\n const target = event.target as Node | null;\n if (target && inputRef.current?.contains(target)) {\n event.preventDefault();\n return;\n }\n setOpen(false);\n }}\n onEscapeKeyDown={() => setOpen(false)}\n onMouseDown={preventBlur}\n className={contentVariants()}\n >\n <Command.List\n id={listId}\n className=\"ds:max-h-[min(24rem,var(--radix-popover-content-available-height))] ds:overflow-auto ds:p-1\"\n >\n {showRecents ? (\n <Command.Group\n heading={t('inputs.autocomplete.recent', 'Recent')}\n className={groupClasses}\n >\n {(recents ?? []).map((option) => (\n <Command.Item\n key={`recent-${option.value}`}\n id={itemIdFor(idPrefix, 'recent', option.value)}\n value={cmdkValueFor('recent', option.value)}\n disabled={option.disabled}\n onSelect={() => handleItemSelect('recent', option)}\n onMouseDown={preventBlur}\n className={itemVariants()}\n >\n {option.label}\n </Command.Item>\n ))}\n </Command.Group>\n ) : null}\n {showEmpty ? (\n <div className=\"ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground\">\n {t('inputs.autocomplete.noResults', 'No results')}\n </div>\n ) : null}\n {showLoadingRow ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground\">\n <Spinner size=\"sm\" />\n <span>{t('common.loading', 'Loading…')}</span>\n </div>\n ) : null}\n {!showRecents && hasSuggestions\n ? groupedSuggestions.map((group, index) => {\n const body = group.items.map((option) => (\n <Command.Item\n key={`option-${option.value}`}\n id={itemIdFor(idPrefix, 'option', option.value)}\n value={cmdkValueFor('option', option.value)}\n disabled={option.disabled}\n onSelect={() => handleItemSelect('option', option)}\n onMouseDown={preventBlur}\n className={itemVariants()}\n >\n {option.label}\n </Command.Item>\n ));\n if (!group.group) {\n return (\n <Command.Group key={`group-${index}`}>\n {body}\n </Command.Group>\n );\n }\n return (\n <Command.Group\n key={`group-${group.group}`}\n heading={group.group}\n className={groupClasses}\n >\n {body}\n </Command.Group>\n );\n })\n : null}\n </Command.List>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </Command>\n );\n },\n);\n\ninterface AutocompleteComponent {\n <T extends string = string>(\n props: AutocompleteProps<T> & { ref?: Ref<HTMLInputElement> },\n ): ReactElement | null;\n displayName?: string;\n}\n\nexport const Autocomplete =\n AutocompleteImpl as unknown as AutocompleteComponent;\n(Autocomplete as { displayName?: string }).displayName = 'Autocomplete';\n\nexport { autocompleteVariants };\n"],"names":["autocompleteAgent","handle","args","autocompleteVariants","cva","INPUT_SURFACE_CHROME","INPUT_SURFACE_HEIGHT","INPUT_SURFACE_TEXT","INPUT_SURFACE_TONE","inputVariants","contentVariants","itemVariants","groupClasses","adornmentBase","itemIdFor","idPrefix","kind","value","cmdkValueFor","AutocompleteImpl","forwardRef","loadOptions","debounceMs","defaultValue","onChange","onSelect","recents","onRecentSelect","snapOnBlur","size","tone","startAdornment","endAdornment","placeholder","disabled","readOnly","required","name","id","className","ariaLabel","ref","t","i18n","useTranslation","ctx","useFormField","reactId","useId","listId","liveRegionId","effectiveDisabled","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","currentValueRaw","commitValueRaw","useControllableState","currentValue","open","setOpen","useState","suggestions","setSuggestions","loading","setLoading","cmdkValue","setCmdkValue","composingRef","useRef","abortRef","latestQueryRef","suggestionsByValueRef","recentsByValueRef","inputRef","contentRef","setRefs","useCallback","node","locale","useEffect","map","option","runFetch","query","_a","controller","results","error","debouncedFetch","useDebouncedCallback","commitValue","next","resolveCmdkValue","raw","val","handleInputValueChange","handleCompositionStart","_event","handleCompositionEnd","event","handleFocus","handleBlur","resolved","handleKeyDown","handleItemSelect","preventBlur","showRecents","groupedSuggestions","useMemo","groupOptions","hasStart","hasEnd","wrapperClass","activeDescendant","hasSuggestions","showEmpty","showLoadingRow","hasPopoverContent","valueRefAgent","openRefAgent","agentHandle","useAgentRegistration","resultCount","liveMessage","jsx","Command","jsxs","Popover","Spinner","target","group","index","body","Autocomplete"],"mappings":"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"}