@alfadocs/ui-kit-debug 1.80.0 → 1.82.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.
- package/dist/_chunks/{address-fields-GnoSkvh6.js → address-fields-CfnXK8RT.js} +4 -4
- package/dist/_chunks/{address-fields-GnoSkvh6.js.map → address-fields-CfnXK8RT.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-M6u29f87.js → ai-prompt-input-DH_rnV-F.js} +33 -26
- package/dist/_chunks/{ai-prompt-input-M6u29f87.js.map → ai-prompt-input-DH_rnV-F.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-lONg-zja.js → anamnesis-summary-rows-6gMuu0ZK.js} +2 -2
- package/dist/_chunks/{anamnesis-summary-rows-lONg-zja.js.map → anamnesis-summary-rows-6gMuu0ZK.js.map} +1 -1
- package/dist/_chunks/{autocomplete-DosDnGie.js → autocomplete-CnB1mHGc.js} +65 -64
- package/dist/_chunks/{autocomplete-DosDnGie.js.map → autocomplete-CnB1mHGc.js.map} +1 -1
- package/dist/_chunks/{balance-badge-cell-Dzd-Z_5W.js → balance-badge-cell-BHXJS8Ga.js} +2 -2
- package/dist/_chunks/{balance-badge-cell-Dzd-Z_5W.js.map → balance-badge-cell-BHXJS8Ga.js.map} +1 -1
- package/dist/_chunks/{benefit-card-BWBClvdF.js → benefit-card-BcPtRHgM.js} +37 -36
- package/dist/_chunks/{benefit-card-BWBClvdF.js.map → benefit-card-BcPtRHgM.js.map} +1 -1
- package/dist/_chunks/booking-dsgiuhKg.js +4304 -0
- package/dist/_chunks/booking-dsgiuhKg.js.map +1 -0
- package/dist/_chunks/{calendar-appointment-editor-dialog-DhTTWgXw.js → calendar-appointment-editor-dialog-BuumJbcv.js} +4 -4
- package/dist/_chunks/{calendar-appointment-editor-dialog-DhTTWgXw.js.map → calendar-appointment-editor-dialog-BuumJbcv.js.map} +1 -1
- package/dist/_chunks/{city-input-3J3bz9EO.js → city-input-CJVGswxp.js} +2 -2
- package/dist/_chunks/{city-input-3J3bz9EO.js.map → city-input-CJVGswxp.js.map} +1 -1
- package/dist/_chunks/{combobox-vF9O-QoG.js → combobox-CDPm_n0p.js} +93 -92
- package/dist/_chunks/{combobox-vF9O-QoG.js.map → combobox-CDPm_n0p.js.map} +1 -1
- package/dist/_chunks/{command-palette-D9TBzmOG.js → command-palette-B3dVqm9D.js} +68 -68
- package/dist/_chunks/{command-palette-D9TBzmOG.js.map → command-palette-B3dVqm9D.js.map} +1 -1
- package/dist/_chunks/{contact-profile-card-DKk94l-d.js → contact-profile-card-Da1vmJQI.js} +115 -102
- package/dist/_chunks/contact-profile-card-Da1vmJQI.js.map +1 -0
- package/dist/_chunks/{country-select-CSE2Zm_s.js → country-select-DQ8q7ypA.js} +2 -2
- package/dist/_chunks/{country-select-CSE2Zm_s.js.map → country-select-DQ8q7ypA.js.map} +1 -1
- package/dist/_chunks/{face-scheme-BIPJqw9f.js → face-scheme-BgJGFDTa.js} +2 -2
- package/dist/_chunks/{face-scheme-BIPJqw9f.js.map → face-scheme-BgJGFDTa.js.map} +1 -1
- package/dist/_chunks/{header-settings-BYpVmLip.js → header-settings-CifwJEKB.js} +2 -2
- package/dist/_chunks/{header-settings-BYpVmLip.js.map → header-settings-CifwJEKB.js.map} +1 -1
- package/dist/_chunks/{link-cell-renderer-B0riA_h_.js → link-cell-renderer-C0ynDik7.js} +3 -3
- package/dist/_chunks/{link-cell-renderer-B0riA_h_.js.map → link-cell-renderer-C0ynDik7.js.map} +1 -1
- package/dist/_chunks/{locale-picker-DzdGDSBI.js → locale-picker-QbT1p60X.js} +39 -38
- package/dist/_chunks/{locale-picker-DzdGDSBI.js.map → locale-picker-QbT1p60X.js.map} +1 -1
- package/dist/_chunks/{map-view-C6MIVaqn.js → map-view-Bvi06RVh.js} +2 -2
- package/dist/_chunks/{map-view-C6MIVaqn.js.map → map-view-Bvi06RVh.js.map} +1 -1
- package/dist/_chunks/{marketplace-app-shell-mS7Q2-81.js → marketplace-app-shell-vON3WhD0.js} +2 -2
- package/dist/_chunks/{marketplace-app-shell-mS7Q2-81.js.map → marketplace-app-shell-vON3WhD0.js.map} +1 -1
- package/dist/_chunks/{multi-select-BOad3za9.js → multi-select-i5MFRpXg.js} +194 -187
- package/dist/_chunks/multi-select-i5MFRpXg.js.map +1 -0
- package/dist/_chunks/{otp-input-BgEZi0py.js → otp-input-gV1446Dw.js} +70 -70
- package/dist/_chunks/otp-input-gV1446Dw.js.map +1 -0
- package/dist/_chunks/{patient-details-B-I9Xkh9.js → patient-details-D0P5eog5.js} +2 -2
- package/dist/_chunks/{patient-details-B-I9Xkh9.js.map → patient-details-D0P5eog5.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-Bn0z6lAZ.js → patient-field-row-R73dZJY6.js} +5 -5
- package/dist/_chunks/{patient-field-row-Bn0z6lAZ.js.map → patient-field-row-R73dZJY6.js.map} +1 -1
- package/dist/_chunks/{patient-search-CxqNcth4.js → patient-search-Dy0sxcwv.js} +2 -2
- package/dist/_chunks/{patient-search-CxqNcth4.js.map → patient-search-Dy0sxcwv.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-bhDo0gVX.js → patient-summary-card-6U74-ivO.js} +2 -2
- package/dist/_chunks/{patient-summary-card-bhDo0gVX.js.map → patient-summary-card-6U74-ivO.js.map} +1 -1
- package/dist/_chunks/{payment-automation-upsell-AQpHOS1X.js → payment-automation-upsell-D1YdO1xY.js} +2 -2
- package/dist/_chunks/{payment-automation-upsell-AQpHOS1X.js.map → payment-automation-upsell-D1YdO1xY.js.map} +1 -1
- package/dist/_chunks/{phone-input-C3NrD-nl.js → phone-input-DJ4BN8tG.js} +70 -63
- package/dist/_chunks/{phone-input-C3NrD-nl.js.map → phone-input-DJ4BN8tG.js.map} +1 -1
- package/dist/_chunks/{practice-results-CtOanuzZ.js → practice-results-B61krlwu.js} +2 -2
- package/dist/_chunks/{practice-results-CtOanuzZ.js.map → practice-results-B61krlwu.js.map} +1 -1
- package/dist/_chunks/{province-select-CDjs5obD.js → province-select-CPdTwEob.js} +2 -2
- package/dist/_chunks/{province-select-CDjs5obD.js.map → province-select-CPdTwEob.js.map} +1 -1
- package/dist/_chunks/{registration-form-CNBfUduG.js → registration-form-DmP3YUfp.js} +3 -3
- package/dist/_chunks/{registration-form-CNBfUduG.js.map → registration-form-DmP3YUfp.js.map} +1 -1
- package/dist/_chunks/{send-registration-link-form-vTn1HxjA.js → send-registration-link-form-CZYOO7NO.js} +2 -2
- package/dist/_chunks/{send-registration-link-form-vTn1HxjA.js.map → send-registration-link-form-CZYOO7NO.js.map} +1 -1
- package/dist/_chunks/{task-editor-Cpw-NmND.js → task-editor-BOETWbjU.js} +2 -2
- package/dist/_chunks/{task-editor-Cpw-NmND.js.map → task-editor-BOETWbjU.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-lFUL4kkd.js → use-appointment-details-read-CWN-nJCZ.js} +2 -2
- package/dist/_chunks/{use-appointment-details-read-lFUL4kkd.js.map → use-appointment-details-read-CWN-nJCZ.js.map} +1 -1
- package/dist/agent-catalog.json +4 -4
- package/dist/agent-i18n/en.json +1 -1
- package/dist/components/address-fields/index.js +1 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/benefit-card/benefit-card.d.ts +7 -1
- package/dist/components/benefit-card/benefit-card.d.ts.map +1 -1
- package/dist/components/benefit-card/index.js +1 -1
- package/dist/components/booking/booking-types.d.ts +35 -2
- package/dist/components/booking/booking-types.d.ts.map +1 -1
- package/dist/components/booking/booking.d.ts.map +1 -1
- package/dist/components/booking/code-step.d.ts +4 -2
- package/dist/components/booking/code-step.d.ts.map +1 -1
- package/dist/components/booking/details-form.d.ts +2 -0
- package/dist/components/booking/details-form.d.ts.map +1 -1
- package/dist/components/booking/handover.d.ts +12 -0
- package/dist/components/booking/handover.d.ts.map +1 -0
- package/dist/components/booking/index.js +1 -1
- package/dist/components/booking/reserved.d.ts +24 -0
- package/dist/components/booking/reserved.d.ts.map +1 -0
- package/dist/components/booking/use-booking-payment.d.ts +3 -1
- package/dist/components/booking/use-booking-payment.d.ts.map +1 -1
- package/dist/components/city-input/index.js +1 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/contact-profile-card/contact-profile-card.d.ts +4 -1
- package/dist/components/contact-profile-card/contact-profile-card.d.ts.map +1 -1
- package/dist/components/contact-profile-card/index.js +1 -1
- package/dist/components/country-select/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/face-scheme/index.js +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/locale-picker/index.js +1 -1
- package/dist/components/locale-picker/locale-picker.d.ts.map +1 -1
- package/dist/components/map-view/index.js +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/multi-select/multi-select.d.ts.map +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/otp-input/otp-input.d.ts +1 -1
- package/dist/components/otp-input/otp-input.d.ts.map +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.d.ts.map +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/province-select/index.js +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/i18n/locales/ar.d.ts +8 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +8 -0
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +8 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +8 -0
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +8 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +8 -0
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +8 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +8 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +8 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +8 -0
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +8 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +8 -0
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +8 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +8 -0
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +8 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +8 -0
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +8 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +8 -0
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +8 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +8 -0
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +8 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +8 -0
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +8 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +8 -0
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +8 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +8 -0
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +8 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +8 -0
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +8 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +8 -0
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +8 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +8 -0
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +8 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +8 -0
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +8 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +8 -0
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +30 -30
- package/dist/locales/ar.json +8 -0
- package/dist/locales/de.json +8 -0
- package/dist/locales/el.json +8 -0
- package/dist/locales/en.json +8 -0
- package/dist/locales/es.json +8 -0
- package/dist/locales/fr.json +8 -0
- package/dist/locales/hi.json +8 -0
- package/dist/locales/it.json +8 -0
- package/dist/locales/ja.json +8 -0
- package/dist/locales/nl.json +8 -0
- package/dist/locales/pl.json +8 -0
- package/dist/locales/pt.json +8 -0
- package/dist/locales/ro.json +8 -0
- package/dist/locales/ru.json +8 -0
- package/dist/locales/sq.json +8 -0
- package/dist/locales/sv.json +8 -0
- package/dist/locales/tr.json +8 -0
- package/dist/locales/zh.json +8 -0
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/payment-automation-upsell/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/send-registration-link-form/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +1 -1
- package/dist/_chunks/booking-By4I_1A-.js +0 -4068
- package/dist/_chunks/booking-By4I_1A-.js.map +0 -1
- package/dist/_chunks/contact-profile-card-DKk94l-d.js.map +0 -1
- package/dist/_chunks/multi-select-BOad3za9.js.map +0 -1
- package/dist/_chunks/otp-input-BgEZi0py.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as s, jsxs as N } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as tt, useId as st, useState as $, useRef as
|
|
2
|
+
import { forwardRef as tt, useId as st, useState as $, useRef as p, useCallback as D, useEffect as I, useMemo as X } from "react";
|
|
3
3
|
import { _ as g } from "./index-4xgbg-sn.js";
|
|
4
4
|
import * as F from "@radix-ui/react-popover";
|
|
5
5
|
import { c as T } from "./index-D2ZczOXr.js";
|
|
@@ -10,7 +10,7 @@ import { u as rt } from "./use-controllable-state-BiY4xTzM.js";
|
|
|
10
10
|
import { u as it } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
|
|
11
11
|
import { g as lt } from "./group-options-BvKhQ3xb.js";
|
|
12
12
|
import { b as dt } from "./menu-row-BAr8bx1I.js";
|
|
13
|
-
import { I as ut, a as
|
|
13
|
+
import { I as ut, a as J, b as Y, c as ct } from "./input-surface-iBmxVBfr.js";
|
|
14
14
|
import { u as pt } from "./registry-DvAUVLHh.js";
|
|
15
15
|
import { u as mt } from "./use-debounced-callback-BisrB-Fq.js";
|
|
16
16
|
const ft = {
|
|
@@ -112,9 +112,9 @@ const ft = {
|
|
|
112
112
|
{
|
|
113
113
|
variants: {
|
|
114
114
|
size: {
|
|
115
|
-
sm: `${
|
|
116
|
-
md: `${
|
|
117
|
-
lg: `${
|
|
115
|
+
sm: `${J.sm} ${Y.sm}`,
|
|
116
|
+
md: `${J.md} ${Y.md}`,
|
|
117
|
+
lg: `${J.lg} ${Y.lg}`
|
|
118
118
|
},
|
|
119
119
|
tone: ut
|
|
120
120
|
},
|
|
@@ -161,8 +161,8 @@ const ft = {
|
|
|
161
161
|
"ds:[&_[cmdk-group-heading]]:py-1.5",
|
|
162
162
|
"ds:[&_[cmdk-group-heading]]:type-eyebrow",
|
|
163
163
|
"ds:[&_[cmdk-group-heading]]:text-muted-foreground"
|
|
164
|
-
].join(" "),
|
|
165
|
-
function
|
|
164
|
+
].join(" "), Z = "ds:inline-flex ds:items-center ds:shrink-0 ds:text-muted-foreground ds:[&_svg]:size-4";
|
|
165
|
+
function ee(n, d, B) {
|
|
166
166
|
return `${n}-${d}-${B}`;
|
|
167
167
|
}
|
|
168
168
|
function ve(n, d) {
|
|
@@ -176,35 +176,35 @@ const bt = tt(
|
|
|
176
176
|
defaultValue: ye,
|
|
177
177
|
onChange: we,
|
|
178
178
|
onSelect: u,
|
|
179
|
-
recents:
|
|
179
|
+
recents: y,
|
|
180
180
|
onRecentSelect: M,
|
|
181
181
|
snapOnBlur: Ce = !1,
|
|
182
182
|
size: xe = "md",
|
|
183
183
|
tone: ke = "default",
|
|
184
184
|
startAdornment: q,
|
|
185
185
|
endAdornment: K,
|
|
186
|
-
placeholder:
|
|
186
|
+
placeholder: P,
|
|
187
187
|
disabled: Ne,
|
|
188
|
-
readOnly:
|
|
188
|
+
readOnly: w,
|
|
189
189
|
required: Re,
|
|
190
190
|
name: Ve,
|
|
191
|
-
id:
|
|
191
|
+
id: j,
|
|
192
192
|
className: Ie,
|
|
193
|
-
"aria-label":
|
|
193
|
+
"aria-label": z,
|
|
194
194
|
"aria-invalid": Ee,
|
|
195
195
|
"aria-describedby": _e,
|
|
196
|
-
autoComplete:
|
|
196
|
+
autoComplete: U
|
|
197
197
|
}, R) {
|
|
198
|
-
const { t:
|
|
198
|
+
const { t: h, i18n: Ae } = nt("ui"), c = at(), $e = st(), v = j ?? c.id ?? $e, te = `${v}-listbox`, De = `${v}-live`, b = !!(c.disabled || Ne), Fe = !!(c.required || Re), se = c.invalid || !!Ee, Te = se ? "error" : ke ?? "default", Be = c.describedBy || _e || void 0, [Me, ne] = rt({
|
|
199
199
|
value: be,
|
|
200
200
|
defaultValue: ye ?? "",
|
|
201
201
|
onChange: we
|
|
202
|
-
}), r = Me ?? "", [i, l] = $(!1), [C, ae] = $([]), [V,
|
|
203
|
-
ot(
|
|
204
|
-
const
|
|
202
|
+
}), r = Me ?? "", [i, l] = $(!1), [C, ae] = $([]), [V, H] = $(!1), [m, qe] = $(""), E = p(!1), L = p(null), O = p(r), oe = p(/* @__PURE__ */ new Map()), re = p(/* @__PURE__ */ new Map()), x = p(null), G = p(null);
|
|
203
|
+
ot(c, x);
|
|
204
|
+
const S = U && U !== "off" ? U : void 0;
|
|
205
205
|
it(() => {
|
|
206
206
|
var e;
|
|
207
|
-
|
|
207
|
+
S && ((e = x.current) == null || e.setAttribute("autocomplete", S));
|
|
208
208
|
});
|
|
209
209
|
const Ke = D(
|
|
210
210
|
(e) => {
|
|
@@ -218,26 +218,26 @@ const bt = tt(
|
|
|
218
218
|
oe.current = e;
|
|
219
219
|
}, [C]), I(() => {
|
|
220
220
|
const e = /* @__PURE__ */ new Map();
|
|
221
|
-
if (
|
|
221
|
+
if (y) for (const t of y) e.set(t.value, t);
|
|
222
222
|
re.current = e;
|
|
223
|
-
}, [
|
|
223
|
+
}, [y]);
|
|
224
224
|
const Pe = D(
|
|
225
225
|
(e) => {
|
|
226
226
|
var o;
|
|
227
|
-
if (
|
|
228
|
-
(o =
|
|
227
|
+
if (b || w || E.current) return;
|
|
228
|
+
(o = L.current) == null || o.abort();
|
|
229
229
|
const t = new AbortController();
|
|
230
|
-
|
|
231
|
-
t.signal.aborted ||
|
|
230
|
+
L.current = t, O.current = e, H(!0), d(e, { signal: t.signal, locale: ie }).then((a) => {
|
|
231
|
+
t.signal.aborted || O.current === e && (ae(a), H(!1));
|
|
232
232
|
}).catch((a) => {
|
|
233
|
-
t.signal.aborted || a && typeof a == "object" && "name" in a && a.name === "AbortError" ||
|
|
233
|
+
t.signal.aborted || a && typeof a == "object" && "name" in a && a.name === "AbortError" || O.current === e && (ae([]), H(!1));
|
|
234
234
|
});
|
|
235
235
|
},
|
|
236
|
-
[
|
|
236
|
+
[b, w, d, ie]
|
|
237
237
|
), k = mt(Pe, B);
|
|
238
238
|
I(() => () => {
|
|
239
239
|
var e;
|
|
240
|
-
k.cancel(), (e =
|
|
240
|
+
k.cancel(), (e = L.current) == null || e.abort();
|
|
241
241
|
}, [k]);
|
|
242
242
|
const f = D(
|
|
243
243
|
(e) => {
|
|
@@ -253,7 +253,7 @@ const bt = tt(
|
|
|
253
253
|
},
|
|
254
254
|
[]
|
|
255
255
|
), je = (e) => {
|
|
256
|
-
f(e), !(
|
|
256
|
+
f(e), !(b || w) && (S && document.activeElement !== x.current || (i || l(!0), !E.current && k(e)));
|
|
257
257
|
}, ze = (e) => {
|
|
258
258
|
E.current = !0;
|
|
259
259
|
}, Ue = (e) => {
|
|
@@ -261,10 +261,10 @@ const bt = tt(
|
|
|
261
261
|
const t = e.currentTarget.value;
|
|
262
262
|
k(t);
|
|
263
263
|
}, He = (e) => {
|
|
264
|
-
|
|
264
|
+
b || w || (l(!0), r && k(r));
|
|
265
265
|
}, Le = (e) => {
|
|
266
266
|
const t = e.relatedTarget;
|
|
267
|
-
if (!(t &&
|
|
267
|
+
if (!(t && G.current && G.current.contains(t))) {
|
|
268
268
|
if (Ce && m) {
|
|
269
269
|
const o = le(m);
|
|
270
270
|
o && (f(o.option.label), u == null || u(o.option));
|
|
@@ -289,32 +289,32 @@ const bt = tt(
|
|
|
289
289
|
}, de = (e, t) => {
|
|
290
290
|
var o;
|
|
291
291
|
f(t.label), e === "recent" ? M == null || M(t) : u == null || u(t), l(!1), (o = x.current) == null || o.focus();
|
|
292
|
-
},
|
|
292
|
+
}, Q = (e) => {
|
|
293
293
|
e.preventDefault();
|
|
294
|
-
}, _ = !!(
|
|
294
|
+
}, _ = !!(y && y.length > 0) && r.length === 0, Ge = X(
|
|
295
295
|
() => lt(C),
|
|
296
296
|
[C]
|
|
297
297
|
), Se = !!q, Qe = !!K || V, We = gt({
|
|
298
298
|
size: xe,
|
|
299
299
|
tone: Te,
|
|
300
300
|
className: Ie
|
|
301
|
-
}), Xe =
|
|
301
|
+
}), Xe = X(() => {
|
|
302
302
|
if (!m) return;
|
|
303
303
|
const [e, t] = m.split(":");
|
|
304
304
|
if (!(!t || e !== "recent" && e !== "option"))
|
|
305
|
-
return
|
|
306
|
-
}, [m,
|
|
305
|
+
return ee(v, e, t);
|
|
306
|
+
}, [m, v]), A = C.length > 0, ue = !_ && !A && !V && r.length > 0, ce = V && !A, Je = _ || A || ue || ce, W = p(r);
|
|
307
307
|
I(() => {
|
|
308
|
-
|
|
308
|
+
W.current = r;
|
|
309
309
|
}, [r]);
|
|
310
|
-
const pe =
|
|
310
|
+
const pe = p(i);
|
|
311
311
|
I(() => {
|
|
312
312
|
pe.current = i;
|
|
313
313
|
}, [i]);
|
|
314
|
-
const Ye =
|
|
314
|
+
const Ye = X(
|
|
315
315
|
() => ({
|
|
316
|
-
getValue: () =>
|
|
317
|
-
getQuery: () =>
|
|
316
|
+
getValue: () => W.current || null,
|
|
317
|
+
getQuery: () => W.current,
|
|
318
318
|
getIsOpen: () => pe.current,
|
|
319
319
|
setValue: (e) => {
|
|
320
320
|
f(e ?? "");
|
|
@@ -334,8 +334,8 @@ const bt = tt(
|
|
|
334
334
|
}),
|
|
335
335
|
[f]
|
|
336
336
|
);
|
|
337
|
-
pt(ft, Ye,
|
|
338
|
-
const Ze = C.length, et = V ?
|
|
337
|
+
pt(ft, Ye, j);
|
|
338
|
+
const Ze = C.length, et = V ? h("common.loading", "Loading…") : i && r.length > 0 ? h("inputs.autocomplete.results", {
|
|
339
339
|
count: Ze,
|
|
340
340
|
defaultValue: "{{count}} results"
|
|
341
341
|
}) : "";
|
|
@@ -345,29 +345,29 @@ const bt = tt(
|
|
|
345
345
|
shouldFilter: !1,
|
|
346
346
|
value: m,
|
|
347
347
|
onValueChange: qe,
|
|
348
|
-
label:
|
|
348
|
+
label: z ?? (c.label || P),
|
|
349
349
|
className: "ds:w-full",
|
|
350
350
|
children: /* @__PURE__ */ N(
|
|
351
351
|
F.Root,
|
|
352
352
|
{
|
|
353
|
-
open: i && !
|
|
353
|
+
open: i && !b && !w && Je,
|
|
354
354
|
children: [
|
|
355
355
|
/* @__PURE__ */ s(F.Anchor, { asChild: !0, children: /* @__PURE__ */ N(
|
|
356
356
|
"div",
|
|
357
357
|
{
|
|
358
358
|
className: We,
|
|
359
359
|
"data-component": "autocomplete",
|
|
360
|
-
"data-component-id":
|
|
361
|
-
"data-disabled":
|
|
360
|
+
"data-component-id": j,
|
|
361
|
+
"data-disabled": b || void 0,
|
|
362
362
|
children: [
|
|
363
|
-
q ? /* @__PURE__ */ s("span", { "aria-hidden": "true", className: `${
|
|
363
|
+
q ? /* @__PURE__ */ s("span", { "aria-hidden": "true", className: `${Z} ds:ps-3`, children: q }) : null,
|
|
364
364
|
/* @__PURE__ */ s(
|
|
365
365
|
g.Input,
|
|
366
366
|
{
|
|
367
367
|
ref: Ke,
|
|
368
|
-
id:
|
|
368
|
+
id: v,
|
|
369
369
|
name: Ve,
|
|
370
|
-
placeholder:
|
|
370
|
+
placeholder: P,
|
|
371
371
|
value: r,
|
|
372
372
|
onValueChange: je,
|
|
373
373
|
onFocus: He,
|
|
@@ -375,8 +375,8 @@ const bt = tt(
|
|
|
375
375
|
onKeyDown: Oe,
|
|
376
376
|
onCompositionStart: ze,
|
|
377
377
|
onCompositionEnd: Ue,
|
|
378
|
-
disabled:
|
|
379
|
-
readOnly:
|
|
378
|
+
disabled: b,
|
|
379
|
+
readOnly: w,
|
|
380
380
|
required: Fe,
|
|
381
381
|
role: "combobox",
|
|
382
382
|
"aria-autocomplete": "both",
|
|
@@ -385,12 +385,12 @@ const bt = tt(
|
|
|
385
385
|
"aria-activedescendant": Xe,
|
|
386
386
|
"aria-describedby": Be,
|
|
387
387
|
"aria-invalid": se || void 0,
|
|
388
|
-
"aria-label":
|
|
388
|
+
"aria-label": z ?? (c.label || h("inputs.autocomplete.ariaLabel")),
|
|
389
389
|
autoComplete: "off",
|
|
390
390
|
className: ht({ hasStart: Se, hasEnd: Qe })
|
|
391
391
|
}
|
|
392
392
|
),
|
|
393
|
-
V ? /* @__PURE__ */ s("span", { className: `${
|
|
393
|
+
V ? /* @__PURE__ */ s("span", { className: `${Z} ds:pe-3`, "aria-hidden": "true", children: /* @__PURE__ */ s(fe, { variant: "pulse", size: "sm" }) }) : K ? /* @__PURE__ */ s("span", { "aria-hidden": "true", className: `${Z} ds:pe-3`, children: K }) : null,
|
|
394
394
|
/* @__PURE__ */ s(
|
|
395
395
|
"span",
|
|
396
396
|
{
|
|
@@ -408,7 +408,7 @@ const bt = tt(
|
|
|
408
408
|
/* @__PURE__ */ s(F.Portal, { forceMount: !0, children: /* @__PURE__ */ s(
|
|
409
409
|
F.Content,
|
|
410
410
|
{
|
|
411
|
-
ref:
|
|
411
|
+
ref: G,
|
|
412
412
|
forceMount: !0,
|
|
413
413
|
hidden: !i,
|
|
414
414
|
side: "bottom",
|
|
@@ -426,28 +426,29 @@ const bt = tt(
|
|
|
426
426
|
l(!1);
|
|
427
427
|
},
|
|
428
428
|
onEscapeKeyDown: () => l(!1),
|
|
429
|
-
onMouseDown:
|
|
429
|
+
onMouseDown: Q,
|
|
430
430
|
className: vt(),
|
|
431
431
|
children: /* @__PURE__ */ N(
|
|
432
432
|
g.List,
|
|
433
433
|
{
|
|
434
434
|
id: te,
|
|
435
|
+
label: z ?? (c.label || P || h("inputs.autocomplete.ariaLabel")),
|
|
435
436
|
className: "ds:max-h-[min(24rem,var(--radix-popover-content-available-height))] ds:overflow-auto ds:p-1",
|
|
436
437
|
children: [
|
|
437
438
|
_ ? /* @__PURE__ */ s(
|
|
438
439
|
g.Group,
|
|
439
440
|
{
|
|
440
|
-
heading:
|
|
441
|
+
heading: h("inputs.autocomplete.recent", "Recent"),
|
|
441
442
|
className: he,
|
|
442
|
-
children: (
|
|
443
|
+
children: (y ?? []).map((e) => /* @__PURE__ */ N(
|
|
443
444
|
g.Item,
|
|
444
445
|
{
|
|
445
|
-
id:
|
|
446
|
+
id: ee(v, "recent", e.value),
|
|
446
447
|
"data-option-id": e.value,
|
|
447
448
|
value: ve("recent", e.value),
|
|
448
449
|
disabled: e.disabled,
|
|
449
450
|
onSelect: () => de("recent", e),
|
|
450
|
-
onMouseDown:
|
|
451
|
+
onMouseDown: Q,
|
|
451
452
|
className: ge(),
|
|
452
453
|
children: [
|
|
453
454
|
e.startAdornment ? /* @__PURE__ */ s(
|
|
@@ -471,21 +472,21 @@ const bt = tt(
|
|
|
471
472
|
))
|
|
472
473
|
}
|
|
473
474
|
) : null,
|
|
474
|
-
ue ? /* @__PURE__ */ s("div", { className: "ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground", children:
|
|
475
|
+
ue ? /* @__PURE__ */ s("div", { className: "ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground", children: h("inputs.autocomplete.noResults", "No results") }) : null,
|
|
475
476
|
ce ? /* @__PURE__ */ 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", children: [
|
|
476
477
|
/* @__PURE__ */ s(fe, { variant: "pulse", size: "sm" }),
|
|
477
|
-
/* @__PURE__ */ s("span", { children:
|
|
478
|
+
/* @__PURE__ */ s("span", { children: h("common.loading", "Loading…") })
|
|
478
479
|
] }) : null,
|
|
479
480
|
!_ && A ? Ge.map((e, t) => {
|
|
480
481
|
const o = e.items.map((a) => /* @__PURE__ */ N(
|
|
481
482
|
g.Item,
|
|
482
483
|
{
|
|
483
|
-
id:
|
|
484
|
+
id: ee(v, "option", a.value),
|
|
484
485
|
"data-option-id": a.value,
|
|
485
486
|
value: ve("option", a.value),
|
|
486
487
|
disabled: a.disabled,
|
|
487
488
|
onSelect: () => de("option", a),
|
|
488
|
-
onMouseDown:
|
|
489
|
+
onMouseDown: Q,
|
|
489
490
|
className: ge(),
|
|
490
491
|
children: [
|
|
491
492
|
a.startAdornment ? /* @__PURE__ */ s(
|
|
@@ -535,4 +536,4 @@ export {
|
|
|
535
536
|
ft as a,
|
|
536
537
|
gt as b
|
|
537
538
|
};
|
|
538
|
-
//# sourceMappingURL=autocomplete-
|
|
539
|
+
//# sourceMappingURL=autocomplete-CnB1mHGc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete-DosDnGie.js","sources":["../../src/components/autocomplete/autocomplete.agent.ts","../../src/components/autocomplete/autocomplete.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — Autocomplete. */\n/* */\n/* Single-choice combobox with a free-text filter. The committed value */\n/* persists (value state slot + set_value) so the choice is `select_single`*/\n/* rather than a non-persisting `pick`. Filtering, open, and close are */\n/* pure view state. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AutocompleteHandle } from './autocomplete';\n\nexport const autocompleteAgent: AgentAdapter<AutocompleteHandle> = {\n id: 'autocomplete',\n capabilities: ['select_single', 'filter', 'open', 'close'],\n state: {\n value: {\n type: 'string | null',\n descriptionKey: 'ui.agent.autocomplete.state.value',\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 descriptionKey: 'ui.agent.autocomplete.state.query',\n description: 'Current free-text query in the input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.autocomplete.state.isOpen',\n description: 'True when the suggestion list is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string | null }',\n argsSchema: {\n type: 'object',\n properties: { value: { type: ['string', 'null'] } },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.setValue',\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 argsSchema: {\n type: 'object',\n properties: { query: { type: 'string' } },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.applyFilter',\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: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.clear',\n description:\n 'Clear the committed value and the query. Discards the typed input.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.open',\n description: 'Open the suggestion list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.close',\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 {\n useFormField,\n useFormFieldControlRef,\n} from '../form-field/form-field-context';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useDebouncedCallback } from '../_shared/use-debounced-callback';\nimport type { OptionShape } from '../_shared/option';\nimport { groupOptions } from '../_shared/group-options';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\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 // cmdk moves the selection on pointer move, so hover needs no tint.\n MENU_ROW_HIGHLIGHT.selected,\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 * Invalid-state fallback for use OUTSIDE a `<FormField>` (e.g. an inline\n * editor). Inside a FormField the context wins.\n */\n 'aria-invalid'?: boolean;\n /**\n * Error-message id fallback for use OUTSIDE a `<FormField>`. Inside a\n * FormField the context's `describedBy` wins.\n */\n 'aria-describedby'?: string;\n /**\n * The input's HTML `autocomplete` token (e.g. `address-level2`), so the\n * browser can fill the field from a saved address. Text filled in while\n * the user is in another field is taken as the value without opening\n * the list or asking for suggestions. Default: `off`.\n */\n autoComplete?: 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 'aria-invalid': ariaInvalid,\n 'aria-describedby': ariaDescribedBy,\n autoComplete,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation('ui');\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 || Boolean(ariaInvalid);\n const effectiveTone: 'default' | 'error' = effectiveInvalid\n ? 'error'\n : (tone ?? 'default');\n const describedBy = ctx.describedBy || ariaDescribedBy || 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 /* cmdk writes its own id on the input, so the field's label follows\n that id. */\n useFormFieldControlRef(ctx, inputRef);\n const autofillToken =\n autoComplete && autoComplete !== 'off' ? autoComplete : undefined;\n /* cmdk writes autocomplete=\"off\" over the prop on every render. */\n useIsomorphicLayoutEffect(() => {\n if (autofillToken)\n inputRef.current?.setAttribute('autocomplete', autofillToken);\n });\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 /* Filled in by the browser from another field: the text is the\n value, and no list opens over a field the user is not in. */\n if (autofillToken && document.activeElement !== inputRef.current) 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 // cmdk's hidden label names the input: the caller's `aria-label`,\n // else the FormField's label, else the placeholder.\n label={ariaLabel ?? (ctx.label || 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 // The fallback when cmdk's hidden label is empty: no\n // `aria-label`, no FormField label and no placeholder.\n aria-label={\n ariaLabel ?? (ctx.label || t('inputs.autocomplete.ariaLabel'))\n }\n autoComplete=\"off\"\n className={inputVariants({ hasStart, hasEnd })}\n />\n {loading ? (\n <span className={`${adornmentBase} ds:pe-3`} aria-hidden=\"true\">\n <Spinner variant=\"pulse\" 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 data-option-id={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.startAdornment ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:shrink-0\"\n >\n {option.startAdornment}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:truncate\">\n {option.label}\n </span>\n {option.endContent ? (\n // Deliberately NOT aria-hidden — unlike\n // `startAdornment`, this slot carries meaning\n // and must reach the option's accessible name.\n <span className=\"ds:inline-flex ds:items-center ds:ms-auto ds:shrink-0\">\n {option.endContent}\n </span>\n ) : null}\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 variant=\"pulse\" 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 data-option-id={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.startAdornment ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:shrink-0\"\n >\n {option.startAdornment}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:truncate\">\n {option.label}\n </span>\n {option.endContent ? (\n // Deliberately NOT aria-hidden — unlike\n // `startAdornment`, this slot carries meaning\n // and must reach the option's accessible name.\n <span className=\"ds:inline-flex ds:items-center ds:ms-auto ds:shrink-0\">\n {option.endContent}\n </span>\n ) : null}\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","MENU_ROW_HIGHLIGHT","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","ariaInvalid","ariaDescribedBy","autoComplete","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","useFormFieldControlRef","autofillToken","useIsomorphicLayoutEffect","_a","setRefs","useCallback","node","locale","useEffect","map","option","runFetch","query","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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"}
|
|
1
|
+
{"version":3,"file":"autocomplete-CnB1mHGc.js","sources":["../../src/components/autocomplete/autocomplete.agent.ts","../../src/components/autocomplete/autocomplete.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — Autocomplete. */\n/* */\n/* Single-choice combobox with a free-text filter. The committed value */\n/* persists (value state slot + set_value) so the choice is `select_single`*/\n/* rather than a non-persisting `pick`. Filtering, open, and close are */\n/* pure view state. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AutocompleteHandle } from './autocomplete';\n\nexport const autocompleteAgent: AgentAdapter<AutocompleteHandle> = {\n id: 'autocomplete',\n capabilities: ['select_single', 'filter', 'open', 'close'],\n state: {\n value: {\n type: 'string | null',\n descriptionKey: 'ui.agent.autocomplete.state.value',\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 descriptionKey: 'ui.agent.autocomplete.state.query',\n description: 'Current free-text query in the input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.autocomplete.state.isOpen',\n description: 'True when the suggestion list is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string | null }',\n argsSchema: {\n type: 'object',\n properties: { value: { type: ['string', 'null'] } },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.setValue',\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 argsSchema: {\n type: 'object',\n properties: { query: { type: 'string' } },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.applyFilter',\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: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.clear',\n description:\n 'Clear the committed value and the query. Discards the typed input.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.open',\n description: 'Open the suggestion list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.autocomplete.actions.close',\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 {\n useFormField,\n useFormFieldControlRef,\n} from '../form-field/form-field-context';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useDebouncedCallback } from '../_shared/use-debounced-callback';\nimport type { OptionShape } from '../_shared/option';\nimport { groupOptions } from '../_shared/group-options';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\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 // cmdk moves the selection on pointer move, so hover needs no tint.\n MENU_ROW_HIGHLIGHT.selected,\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 * Invalid-state fallback for use OUTSIDE a `<FormField>` (e.g. an inline\n * editor). Inside a FormField the context wins.\n */\n 'aria-invalid'?: boolean;\n /**\n * Error-message id fallback for use OUTSIDE a `<FormField>`. Inside a\n * FormField the context's `describedBy` wins.\n */\n 'aria-describedby'?: string;\n /**\n * The input's HTML `autocomplete` token (e.g. `address-level2`), so the\n * browser can fill the field from a saved address. Text filled in while\n * the user is in another field is taken as the value without opening\n * the list or asking for suggestions. Default: `off`.\n */\n autoComplete?: 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 'aria-invalid': ariaInvalid,\n 'aria-describedby': ariaDescribedBy,\n autoComplete,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation('ui');\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 || Boolean(ariaInvalid);\n const effectiveTone: 'default' | 'error' = effectiveInvalid\n ? 'error'\n : (tone ?? 'default');\n const describedBy = ctx.describedBy || ariaDescribedBy || 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 /* cmdk writes its own id on the input, so the field's label follows\n that id. */\n useFormFieldControlRef(ctx, inputRef);\n const autofillToken =\n autoComplete && autoComplete !== 'off' ? autoComplete : undefined;\n /* cmdk writes autocomplete=\"off\" over the prop on every render. */\n useIsomorphicLayoutEffect(() => {\n if (autofillToken)\n inputRef.current?.setAttribute('autocomplete', autofillToken);\n });\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 /* Filled in by the browser from another field: the text is the\n value, and no list opens over a field the user is not in. */\n if (autofillToken && document.activeElement !== inputRef.current) 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 // cmdk's hidden label names the input: the caller's `aria-label`,\n // else the FormField's label, else the placeholder.\n label={ariaLabel ?? (ctx.label || 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 // The fallback when cmdk's hidden label is empty: no\n // `aria-label`, no FormField label and no placeholder.\n aria-label={\n ariaLabel ?? (ctx.label || t('inputs.autocomplete.ariaLabel'))\n }\n autoComplete=\"off\"\n className={inputVariants({ hasStart, hasEnd })}\n />\n {loading ? (\n <span className={`${adornmentBase} ds:pe-3`} aria-hidden=\"true\">\n <Spinner variant=\"pulse\" 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 // cmdk names the listbox \"Suggestions\" in English otherwise.\n label={\n ariaLabel ??\n (ctx.label ||\n placeholder ||\n t('inputs.autocomplete.ariaLabel'))\n }\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 data-option-id={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.startAdornment ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:shrink-0\"\n >\n {option.startAdornment}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:truncate\">\n {option.label}\n </span>\n {option.endContent ? (\n // Deliberately NOT aria-hidden — unlike\n // `startAdornment`, this slot carries meaning\n // and must reach the option's accessible name.\n <span className=\"ds:inline-flex ds:items-center ds:ms-auto ds:shrink-0\">\n {option.endContent}\n </span>\n ) : null}\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 variant=\"pulse\" 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 data-option-id={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.startAdornment ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:shrink-0\"\n >\n {option.startAdornment}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:truncate\">\n {option.label}\n </span>\n {option.endContent ? (\n // Deliberately NOT aria-hidden — unlike\n // `startAdornment`, this slot carries meaning\n // and must reach the option's accessible name.\n <span className=\"ds:inline-flex ds:items-center ds:ms-auto ds:shrink-0\">\n {option.endContent}\n </span>\n ) : null}\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","MENU_ROW_HIGHLIGHT","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","ariaInvalid","ariaDescribedBy","autoComplete","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","useFormFieldControlRef","autofillToken","useIsomorphicLayoutEffect","_a","setRefs","useCallback","node","locale","useEffect","map","option","runFetch","query","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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"}
|
|
@@ -5,7 +5,7 @@ import { a as b, T as g, D as S, d as Ce } from "./data-table-BlONA1rP.js";
|
|
|
5
5
|
import { A as ve, a as re } from "./actions-cell-renderer-B1yaOfQM.js";
|
|
6
6
|
import { S as Te } from "./select-4S-eYZUf.js";
|
|
7
7
|
import { u as we } from "./registry-DvAUVLHh.js";
|
|
8
|
-
import { I as Ne, L as Fe, b as z, a as H, c as $, N as j, d as w, S as N, T as le, D as Q, g as Re, f as Ie, U as ye, e as Pe, h as Se } from "./link-cell-renderer-
|
|
8
|
+
import { I as Ne, L as Fe, b as z, a as H, c as $, N as j, d as w, S as N, T as le, D as Q, g as Re, f as Ie, U as ye, e as Pe, h as Se } from "./link-cell-renderer-C0ynDik7.js";
|
|
9
9
|
import { T as We } from "./transaction-chip-CohY6sTA.js";
|
|
10
10
|
import { B as oe } from "./badge-BUk4RjTS.js";
|
|
11
11
|
import { c as Ae } from "./index-D2ZczOXr.js";
|
|
@@ -1179,4 +1179,4 @@ export {
|
|
|
1179
1179
|
se as g,
|
|
1180
1180
|
nt as u
|
|
1181
1181
|
};
|
|
1182
|
-
//# sourceMappingURL=balance-badge-cell-
|
|
1182
|
+
//# sourceMappingURL=balance-badge-cell-BHXJS8Ga.js.map
|