PluginProbe
Gutenberg / 23.4.0
Gutenberg v23.4.0
23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 7.4.0 All 402 releases
gutenberg / build / widgets / events / widget.js

widget.js in Gutenberg 23.4.0, at build/widgets/events/widget.js

18,300 lines 691.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 var __create = Object.create;
2 var __defProp = Object.defineProperty;
3 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4 var __getOwnPropNames = Object.getOwnPropertyNames;
5 var __getProtoOf = Object.getPrototypeOf;
6 var __hasOwnProp = Object.prototype.hasOwnProperty;
7 var __commonJS = (cb, mod) => function __require() {
8 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9 };
10 var __export = (target, all) => {
11 for (var name in all)
12 __defProp(target, name, { get: all[name], enumerable: true });
13 };
14 var __copyProps = (to, from, except, desc) => {
15 if (from && typeof from === "object" || typeof from === "function") {
16 for (let key of __getOwnPropNames(from))
17 if (!__hasOwnProp.call(to, key) && key !== except)
18 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19 }
20 return to;
21 };
22 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23 // If the importer is in node compatibility mode or this is not an ESM
24 // file that has been converted to a CommonJS file using a Babel-
25 // compatible transform (i.e. "__esModule" has not been set), then set
26 // "default" to the CommonJS "module.exports" for node compatibility.
27 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28 mod
29 ));
30
31 // package-external:@wordpress/i18n
32 var require_i18n = __commonJS({
33 "package-external:@wordpress/i18n"(exports, module) {
34 module.exports = window.wp.i18n;
35 }
36 });
37
38 // package-external:@wordpress/element
39 var require_element = __commonJS({
40 "package-external:@wordpress/element"(exports, module) {
41 module.exports = window.wp.element;
42 }
43 });
44
45 // package-external:@wordpress/primitives
46 var require_primitives = __commonJS({
47 "package-external:@wordpress/primitives"(exports, module) {
48 module.exports = window.wp.primitives;
49 }
50 });
51
52 // vendor-external:react/jsx-runtime
53 var require_jsx_runtime = __commonJS({
54 "vendor-external:react/jsx-runtime"(exports, module) {
55 module.exports = window.ReactJSXRuntime;
56 }
57 });
58
59 // vendor-external:react
60 var require_react = __commonJS({
61 "vendor-external:react"(exports, module) {
62 module.exports = window.React;
63 }
64 });
65
66 // vendor-external:react-dom
67 var require_react_dom = __commonJS({
68 "vendor-external:react-dom"(exports, module) {
69 module.exports = window.ReactDOM;
70 }
71 });
72
73 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js
74 var require_use_sync_external_store_shim_development = __commonJS({
75 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) {
76 "use strict";
77 (function() {
78 function is(x, y) {
79 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
80 }
81 function useSyncExternalStore$2(subscribe, getSnapshot) {
82 didWarnOld18Alpha || void 0 === React117.startTransition || (didWarnOld18Alpha = true, console.error(
83 "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."
84 ));
85 var value = getSnapshot();
86 if (!didWarnUncachedGetSnapshot) {
87 var cachedValue = getSnapshot();
88 objectIs(value, cachedValue) || (console.error(
89 "The result of getSnapshot should be cached to avoid an infinite loop"
90 ), didWarnUncachedGetSnapshot = true);
91 }
92 cachedValue = useState25({
93 inst: { value, getSnapshot }
94 });
95 var inst = cachedValue[0].inst, forceUpdate = cachedValue[1];
96 useLayoutEffect3(
97 function() {
98 inst.value = value;
99 inst.getSnapshot = getSnapshot;
100 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
101 },
102 [subscribe, value, getSnapshot]
103 );
104 useEffect22(
105 function() {
106 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
107 return subscribe(function() {
108 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
109 });
110 },
111 [subscribe]
112 );
113 useDebugValue2(value);
114 return value;
115 }
116 function checkIfSnapshotChanged(inst) {
117 var latestGetSnapshot = inst.getSnapshot;
118 inst = inst.value;
119 try {
120 var nextValue = latestGetSnapshot();
121 return !objectIs(inst, nextValue);
122 } catch (error2) {
123 return true;
124 }
125 }
126 function useSyncExternalStore$1(subscribe, getSnapshot) {
127 return getSnapshot();
128 }
129 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
130 var React117 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState25 = React117.useState, useEffect22 = React117.useEffect, useLayoutEffect3 = React117.useLayoutEffect, useDebugValue2 = React117.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2;
131 exports.useSyncExternalStore = void 0 !== React117.useSyncExternalStore ? React117.useSyncExternalStore : shim;
132 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
133 })();
134 }
135 });
136
137 // node_modules/use-sync-external-store/shim/index.js
138 var require_shim = __commonJS({
139 "node_modules/use-sync-external-store/shim/index.js"(exports, module) {
140 "use strict";
141 if (false) {
142 module.exports = null;
143 } else {
144 module.exports = require_use_sync_external_store_shim_development();
145 }
146 }
147 });
148
149 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js
150 var require_with_selector_development = __commonJS({
151 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) {
152 "use strict";
153 (function() {
154 function is(x, y) {
155 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
156 }
157 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
158 var React117 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore2 = shim.useSyncExternalStore, useRef43 = React117.useRef, useEffect22 = React117.useEffect, useMemo34 = React117.useMemo, useDebugValue2 = React117.useDebugValue;
159 exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
160 var instRef = useRef43(null);
161 if (null === instRef.current) {
162 var inst = { hasValue: false, value: null };
163 instRef.current = inst;
164 } else inst = instRef.current;
165 instRef = useMemo34(
166 function() {
167 function memoizedSelector(nextSnapshot) {
168 if (!hasMemo) {
169 hasMemo = true;
170 memoizedSnapshot = nextSnapshot;
171 nextSnapshot = selector(nextSnapshot);
172 if (void 0 !== isEqual && inst.hasValue) {
173 var currentSelection = inst.value;
174 if (isEqual(currentSelection, nextSnapshot))
175 return memoizedSelection = currentSelection;
176 }
177 return memoizedSelection = nextSnapshot;
178 }
179 currentSelection = memoizedSelection;
180 if (objectIs(memoizedSnapshot, nextSnapshot))
181 return currentSelection;
182 var nextSelection = selector(nextSnapshot);
183 if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
184 return memoizedSnapshot = nextSnapshot, currentSelection;
185 memoizedSnapshot = nextSnapshot;
186 return memoizedSelection = nextSelection;
187 }
188 var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot;
189 return [
190 function() {
191 return memoizedSelector(getSnapshot());
192 },
193 null === maybeGetServerSnapshot ? void 0 : function() {
194 return memoizedSelector(maybeGetServerSnapshot());
195 }
196 ];
197 },
198 [getSnapshot, getServerSnapshot, selector, isEqual]
199 );
200 var value = useSyncExternalStore2(subscribe, instRef[0], instRef[1]);
201 useEffect22(
202 function() {
203 inst.hasValue = true;
204 inst.value = value;
205 },
206 [value]
207 );
208 useDebugValue2(value);
209 return value;
210 };
211 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
212 })();
213 }
214 });
215
216 // node_modules/use-sync-external-store/shim/with-selector.js
217 var require_with_selector = __commonJS({
218 "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) {
219 "use strict";
220 if (false) {
221 module.exports = null;
222 } else {
223 module.exports = require_with_selector_development();
224 }
225 }
226 });
227
228 // package-external:@wordpress/theme
229 var require_theme = __commonJS({
230 "package-external:@wordpress/theme"(exports, module) {
231 module.exports = window.wp.theme;
232 }
233 });
234
235 // package-external:@wordpress/private-apis
236 var require_private_apis = __commonJS({
237 "package-external:@wordpress/private-apis"(exports, module) {
238 module.exports = window.wp.privateApis;
239 }
240 });
241
242 // widgets/events/widget.ts
243 var import_i18n5 = __toESM(require_i18n());
244
245 // packages/icons/build-module/library/calendar.mjs
246 var import_primitives = __toESM(require_primitives(), 1);
247 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
248 var calendar_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z" }) });
249
250 // packages/icons/build-module/library/close-small.mjs
251 var import_primitives2 = __toESM(require_primitives(), 1);
252 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
253 var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) });
254
255 // packages/icons/build-module/library/map-marker.mjs
256 var import_primitives3 = __toESM(require_primitives(), 1);
257 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
258 var map_marker_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "M12 9c-.8 0-1.5.7-1.5 1.5S11.2 12 12 12s1.5-.7 1.5-1.5S12.8 9 12 9zm0-5c-3.6 0-6.5 2.8-6.5 6.2 0 .8.3 1.8.9 3.1.5 1.1 1.2 2.3 2 3.6.7 1 3 3.8 3.2 3.9l.4.5.4-.5c.2-.2 2.6-2.9 3.2-3.9.8-1.2 1.5-2.5 2-3.6.6-1.3.9-2.3.9-3.1C18.5 6.8 15.6 4 12 4zm4.3 8.7c-.5 1-1.1 2.2-1.9 3.4-.5.7-1.7 2.2-2.4 3-.7-.8-1.9-2.3-2.4-3-.8-1.2-1.4-2.3-1.9-3.3-.6-1.4-.7-2.2-.7-2.5 0-2.6 2.2-4.7 5-4.7s5 2.1 5 4.7c0 .2-.1 1-.7 2.4z" }) });
259
260 // widgets/events/components/location-setting-control/location-setting-control.tsx
261 var import_element48 = __toESM(require_element());
262
263 // widgets/events/components/location-picker/location-picker.tsx
264 var import_element47 = __toESM(require_element());
265 var import_i18n4 = __toESM(require_i18n());
266
267 // node_modules/clsx/dist/clsx.mjs
268 function r(e) {
269 var t, f, n = "";
270 if ("string" == typeof e || "number" == typeof e) n += e;
271 else if ("object" == typeof e) if (Array.isArray(e)) {
272 var o = e.length;
273 for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
274 } else for (f in e) e[f] && (n && (n += " "), n += f);
275 return n;
276 }
277 function clsx() {
278 for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
279 return n;
280 }
281 var clsx_default = clsx;
282
283 // node_modules/@base-ui/utils/esm/useControlled.js
284 var React = __toESM(require_react(), 1);
285
286 // node_modules/@base-ui/utils/esm/error.js
287 var set;
288 if (true) {
289 set = /* @__PURE__ */ new Set();
290 }
291 function error(...messages) {
292 if (true) {
293 const messageKey = messages.join(" ");
294 if (!set.has(messageKey)) {
295 set.add(messageKey);
296 console.error(`Base UI: ${messageKey}`);
297 }
298 }
299 }
300
301 // node_modules/@base-ui/utils/esm/useControlled.js
302 function useControlled({
303 controlled,
304 default: defaultProp,
305 name,
306 state = "value"
307 }) {
308 const {
309 current: isControlled
310 } = React.useRef(controlled !== void 0);
311 const [valueState, setValue] = React.useState(defaultProp);
312 const value = isControlled ? controlled : valueState;
313 if (true) {
314 React.useEffect(() => {
315 if (isControlled !== (controlled !== void 0)) {
316 error([`A component is changing the ${isControlled ? "" : "un"}controlled ${state} state of ${name} to be ${isControlled ? "un" : ""}controlled.`, "Elements should not switch from uncontrolled to controlled (or vice versa).", `Decide between using a controlled or uncontrolled ${name} element for the lifetime of the component.`, "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", "More info: https://fb.me/react-controlled-components"].join("\n"));
317 }
318 }, [state, name, controlled]);
319 const {
320 current: defaultValue
321 } = React.useRef(defaultProp);
322 React.useEffect(() => {
323 if (!isControlled && serializeToDevModeString(defaultValue) !== serializeToDevModeString(defaultProp)) {
324 error([`A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. To suppress this warning opt to use a controlled ${name}.`].join("\n"));
325 }
326 }, [defaultProp]);
327 }
328 const setValueIfUncontrolled = React.useCallback((newValue) => {
329 if (!isControlled) {
330 setValue(newValue);
331 }
332 }, []);
333 return [value, setValueIfUncontrolled];
334 }
335 function serializeToDevModeString(input) {
336 let nextId = 0;
337 const seen = /* @__PURE__ */ new WeakMap();
338 try {
339 const result = JSON.stringify(input, function replacer(key, value) {
340 if (key === "_owner" && this != null && typeof this === "object" && "$$typeof" in this) {
341 return void 0;
342 }
343 if (typeof value === "bigint") {
344 return `__bigint__:${value}`;
345 }
346 if (value !== null && typeof value === "object") {
347 const id = seen.get(value);
348 if (id !== void 0) {
349 return `__object__:${id}`;
350 }
351 seen.set(value, nextId);
352 nextId += 1;
353 }
354 return value;
355 });
356 return result ?? `__top__:${typeof input}`;
357 } catch {
358 return "__unserializable__";
359 }
360 }
361
362 // node_modules/@base-ui/utils/esm/safeReact.js
363 var React2 = __toESM(require_react(), 1);
364 var SafeReact = {
365 ...React2
366 };
367
368 // node_modules/@base-ui/utils/esm/useRefWithInit.js
369 var React3 = __toESM(require_react(), 1);
370 var UNINITIALIZED = {};
371 function useRefWithInit(init, initArg) {
372 const ref = React3.useRef(UNINITIALIZED);
373 if (ref.current === UNINITIALIZED) {
374 ref.current = init(initArg);
375 }
376 return ref;
377 }
378
379 // node_modules/@base-ui/utils/esm/useStableCallback.js
380 var useInsertionEffect = SafeReact.useInsertionEffect;
381 var useSafeInsertionEffect = (
382 // React 17 doesn't have useInsertionEffect.
383 useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late.
384 useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn()
385 );
386 function useStableCallback(callback) {
387 const stable = useRefWithInit(createStableCallback).current;
388 stable.next = callback;
389 useSafeInsertionEffect(stable.effect);
390 return stable.trampoline;
391 }
392 function createStableCallback() {
393 const stable = {
394 next: void 0,
395 callback: assertNotCalled,
396 trampoline: (...args) => stable.callback?.(...args),
397 effect: () => {
398 stable.callback = stable.next;
399 }
400 };
401 return stable;
402 }
403 function assertNotCalled() {
404 if (true) {
405 throw (
406 /* minify-error-disabled */
407 new Error("Base UI: Cannot call an event handler while rendering.")
408 );
409 }
410 }
411
412 // node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js
413 var React4 = __toESM(require_react(), 1);
414 var noop = () => {
415 };
416 var useIsoLayoutEffect = typeof document !== "undefined" ? React4.useLayoutEffect : noop;
417
418 // node_modules/@base-ui/utils/esm/warn.js
419 var set2;
420 if (true) {
421 set2 = /* @__PURE__ */ new Set();
422 }
423 function warn(...messages) {
424 if (true) {
425 const messageKey = messages.join(" ");
426 if (!set2.has(messageKey)) {
427 set2.add(messageKey);
428 console.warn(`Base UI: ${messageKey}`);
429 }
430 }
431 }
432
433 // node_modules/@base-ui/react/esm/internals/composite/list/CompositeList.js
434 var React6 = __toESM(require_react(), 1);
435
436 // node_modules/@base-ui/react/esm/internals/composite/list/CompositeListContext.js
437 var React5 = __toESM(require_react(), 1);
438 var CompositeListContext = /* @__PURE__ */ React5.createContext({
439 register: () => {
440 },
441 unregister: () => {
442 },
443 subscribeMapChange: () => {
444 return () => {
445 };
446 },
447 elementsRef: {
448 current: []
449 },
450 nextIndexRef: {
451 current: 0
452 }
453 });
454 if (true) CompositeListContext.displayName = "CompositeListContext";
455 function useCompositeListContext() {
456 return React5.useContext(CompositeListContext);
457 }
458
459 // node_modules/@base-ui/react/esm/internals/composite/list/CompositeList.js
460 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
461 function CompositeList(props) {
462 const {
463 children,
464 elementsRef,
465 labelsRef,
466 onMapChange: onMapChangeProp
467 } = props;
468 const onMapChange = useStableCallback(onMapChangeProp);
469 const nextIndexRef = React6.useRef(0);
470 const listeners = useRefWithInit(createListeners).current;
471 const map = useRefWithInit(createMap).current;
472 const [mapTick, setMapTick] = React6.useState(0);
473 const lastTickRef = React6.useRef(mapTick);
474 const register2 = useStableCallback((node, metadata) => {
475 map.set(node, metadata ?? null);
476 lastTickRef.current += 1;
477 setMapTick(lastTickRef.current);
478 });
479 const unregister = useStableCallback((node) => {
480 map.delete(node);
481 lastTickRef.current += 1;
482 setMapTick(lastTickRef.current);
483 });
484 const sortedMap = React6.useMemo(() => {
485 disableEslintWarning(mapTick);
486 const newMap = /* @__PURE__ */ new Map();
487 const sortedNodes = Array.from(map.keys()).filter((node) => node.isConnected).sort(sortByDocumentPosition);
488 sortedNodes.forEach((node, index2) => {
489 const metadata = map.get(node) ?? {};
490 newMap.set(node, {
491 ...metadata,
492 index: index2
493 });
494 });
495 return newMap;
496 }, [map, mapTick]);
497 useIsoLayoutEffect(() => {
498 if (typeof MutationObserver !== "function" || sortedMap.size === 0) {
499 return void 0;
500 }
501 const mutationObserver = new MutationObserver((entries) => {
502 const diff = /* @__PURE__ */ new Set();
503 const updateDiff = (node) => diff.has(node) ? diff.delete(node) : diff.add(node);
504 entries.forEach((entry) => {
505 entry.removedNodes.forEach(updateDiff);
506 entry.addedNodes.forEach(updateDiff);
507 });
508 if (diff.size === 0) {
509 lastTickRef.current += 1;
510 setMapTick(lastTickRef.current);
511 }
512 });
513 sortedMap.forEach((_, node) => {
514 if (node.parentElement) {
515 mutationObserver.observe(node.parentElement, {
516 childList: true
517 });
518 }
519 });
520 return () => {
521 mutationObserver.disconnect();
522 };
523 }, [sortedMap]);
524 useIsoLayoutEffect(() => {
525 const shouldUpdateLengths = lastTickRef.current === mapTick;
526 if (shouldUpdateLengths) {
527 if (elementsRef.current.length !== sortedMap.size) {
528 elementsRef.current.length = sortedMap.size;
529 }
530 if (labelsRef && labelsRef.current.length !== sortedMap.size) {
531 labelsRef.current.length = sortedMap.size;
532 }
533 nextIndexRef.current = sortedMap.size;
534 }
535 onMapChange(sortedMap);
536 }, [onMapChange, sortedMap, elementsRef, labelsRef, mapTick]);
537 useIsoLayoutEffect(() => {
538 return () => {
539 elementsRef.current = [];
540 };
541 }, [elementsRef]);
542 useIsoLayoutEffect(() => {
543 return () => {
544 if (labelsRef) {
545 labelsRef.current = [];
546 }
547 };
548 }, [labelsRef]);
549 const subscribeMapChange = useStableCallback((fn) => {
550 listeners.add(fn);
551 return () => {
552 listeners.delete(fn);
553 };
554 });
555 useIsoLayoutEffect(() => {
556 listeners.forEach((l) => l(sortedMap));
557 }, [listeners, sortedMap]);
558 const contextValue = React6.useMemo(() => ({
559 register: register2,
560 unregister,
561 subscribeMapChange,
562 elementsRef,
563 labelsRef,
564 nextIndexRef
565 }), [register2, unregister, subscribeMapChange, elementsRef, labelsRef, nextIndexRef]);
566 return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CompositeListContext.Provider, {
567 value: contextValue,
568 children
569 });
570 }
571 function createMap() {
572 return /* @__PURE__ */ new Map();
573 }
574 function createListeners() {
575 return /* @__PURE__ */ new Set();
576 }
577 function sortByDocumentPosition(a, b) {
578 const position = a.compareDocumentPosition(b);
579 if (position & Node.DOCUMENT_POSITION_FOLLOWING || position & Node.DOCUMENT_POSITION_CONTAINED_BY) {
580 return -1;
581 }
582 if (position & Node.DOCUMENT_POSITION_PRECEDING || position & Node.DOCUMENT_POSITION_CONTAINS) {
583 return 1;
584 }
585 return 0;
586 }
587 function disableEslintWarning(_) {
588 }
589
590 // node_modules/@base-ui/react/esm/internals/direction-context/DirectionContext.js
591 var React7 = __toESM(require_react(), 1);
592 var DirectionContext = /* @__PURE__ */ React7.createContext(void 0);
593 if (true) DirectionContext.displayName = "DirectionContext";
594 function useDirection() {
595 const context = React7.useContext(DirectionContext);
596 return context?.direction ?? "ltr";
597 }
598
599 // node_modules/@base-ui/react/esm/internals/useRenderElement.js
600 var React10 = __toESM(require_react(), 1);
601
602 // node_modules/@base-ui/utils/esm/useMergedRefs.js
603 function useMergedRefs(a, b, c, d) {
604 const forkRef = useRefWithInit(createForkRef).current;
605 if (didChange(forkRef, a, b, c, d)) {
606 update(forkRef, [a, b, c, d]);
607 }
608 return forkRef.callback;
609 }
610 function useMergedRefsN(refs) {
611 const forkRef = useRefWithInit(createForkRef).current;
612 if (didChangeN(forkRef, refs)) {
613 update(forkRef, refs);
614 }
615 return forkRef.callback;
616 }
617 function createForkRef() {
618 return {
619 callback: null,
620 cleanup: null,
621 refs: []
622 };
623 }
624 function didChange(forkRef, a, b, c, d) {
625 return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d;
626 }
627 function didChangeN(forkRef, newRefs) {
628 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]);
629 }
630 function update(forkRef, refs) {
631 forkRef.refs = refs;
632 if (refs.every((ref) => ref == null)) {
633 forkRef.callback = null;
634 return;
635 }
636 forkRef.callback = (instance) => {
637 if (forkRef.cleanup) {
638 forkRef.cleanup();
639 forkRef.cleanup = null;
640 }
641 if (instance != null) {
642 const cleanupCallbacks = Array(refs.length).fill(null);
643 for (let i = 0; i < refs.length; i += 1) {
644 const ref = refs[i];
645 if (ref == null) {
646 continue;
647 }
648 switch (typeof ref) {
649 case "function": {
650 const refCleanup = ref(instance);
651 if (typeof refCleanup === "function") {
652 cleanupCallbacks[i] = refCleanup;
653 }
654 break;
655 }
656 case "object": {
657 ref.current = instance;
658 break;
659 }
660 default:
661 }
662 }
663 forkRef.cleanup = () => {
664 for (let i = 0; i < refs.length; i += 1) {
665 const ref = refs[i];
666 if (ref == null) {
667 continue;
668 }
669 switch (typeof ref) {
670 case "function": {
671 const cleanupCallback = cleanupCallbacks[i];
672 if (typeof cleanupCallback === "function") {
673 cleanupCallback();
674 } else {
675 ref(null);
676 }
677 break;
678 }
679 case "object": {
680 ref.current = null;
681 break;
682 }
683 default:
684 }
685 }
686 };
687 }
688 };
689 }
690
691 // node_modules/@base-ui/utils/esm/getReactElementRef.js
692 var React9 = __toESM(require_react(), 1);
693
694 // node_modules/@base-ui/utils/esm/reactVersion.js
695 var React8 = __toESM(require_react(), 1);
696 var majorVersion = parseInt(React8.version, 10);
697 function isReactVersionAtLeast(reactVersionToCheck) {
698 return majorVersion >= reactVersionToCheck;
699 }
700
701 // node_modules/@base-ui/utils/esm/getReactElementRef.js
702 function getReactElementRef(element) {
703 if (!/* @__PURE__ */ React9.isValidElement(element)) {
704 return null;
705 }
706 const reactElement = element;
707 const propsWithRef = reactElement.props;
708 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null;
709 }
710
711 // node_modules/@base-ui/utils/esm/mergeObjects.js
712 function mergeObjects(a, b) {
713 if (a && !b) {
714 return a;
715 }
716 if (!a && b) {
717 return b;
718 }
719 if (a || b) {
720 return {
721 ...a,
722 ...b
723 };
724 }
725 return void 0;
726 }
727
728 // node_modules/@base-ui/utils/esm/empty.js
729 function NOOP() {
730 }
731 var EMPTY_ARRAY = Object.freeze([]);
732 var EMPTY_OBJECT = Object.freeze({});
733
734 // node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js
735 function getStateAttributesProps(state, customMapping) {
736 const props = {};
737 for (const key in state) {
738 const value = state[key];
739 if (customMapping?.hasOwnProperty(key)) {
740 const customProps = customMapping[key](value);
741 if (customProps != null) {
742 Object.assign(props, customProps);
743 }
744 continue;
745 }
746 if (value === true) {
747 props[`data-${key.toLowerCase()}`] = "";
748 } else if (value) {
749 props[`data-${key.toLowerCase()}`] = value.toString();
750 }
751 }
752 return props;
753 }
754
755 // node_modules/@base-ui/react/esm/utils/resolveClassName.js
756 function resolveClassName(className, state) {
757 return typeof className === "function" ? className(state) : className;
758 }
759
760 // node_modules/@base-ui/react/esm/utils/resolveStyle.js
761 function resolveStyle(style, state) {
762 return typeof style === "function" ? style(state) : style;
763 }
764
765 // node_modules/@base-ui/react/esm/merge-props/mergeProps.js
766 var EMPTY_PROPS = {};
767 function mergeProps(a, b, c, d, e) {
768 if (!c && !d && !e && !a) {
769 return createInitialMergedProps(b);
770 }
771 let merged = createInitialMergedProps(a);
772 if (b) {
773 merged = mergeInto(merged, b);
774 }
775 if (c) {
776 merged = mergeInto(merged, c);
777 }
778 if (d) {
779 merged = mergeInto(merged, d);
780 }
781 if (e) {
782 merged = mergeInto(merged, e);
783 }
784 return merged;
785 }
786 function mergePropsN(props) {
787 if (props.length === 0) {
788 return EMPTY_PROPS;
789 }
790 if (props.length === 1) {
791 return createInitialMergedProps(props[0]);
792 }
793 let merged = createInitialMergedProps(props[0]);
794 for (let i = 1; i < props.length; i += 1) {
795 merged = mergeInto(merged, props[i]);
796 }
797 return merged;
798 }
799 function createInitialMergedProps(inputProps) {
800 if (isPropsGetter(inputProps)) {
801 return {
802 ...resolvePropsGetter(inputProps, EMPTY_PROPS)
803 };
804 }
805 return copyInitialProps(inputProps);
806 }
807 function mergeInto(merged, inputProps) {
808 if (isPropsGetter(inputProps)) {
809 return resolvePropsGetter(inputProps, merged);
810 }
811 return mutablyMergeInto(merged, inputProps);
812 }
813 function copyInitialProps(inputProps) {
814 const copiedProps = {
815 ...inputProps
816 };
817 for (const propName in copiedProps) {
818 const propValue = copiedProps[propName];
819 if (isEventHandler(propName, propValue)) {
820 copiedProps[propName] = wrapEventHandler(propValue);
821 }
822 }
823 return copiedProps;
824 }
825 function mutablyMergeInto(mergedProps, externalProps) {
826 if (!externalProps) {
827 return mergedProps;
828 }
829 for (const propName in externalProps) {
830 const externalPropValue = externalProps[propName];
831 switch (propName) {
832 case "style": {
833 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue);
834 break;
835 }
836 case "className": {
837 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue);
838 break;
839 }
840 default: {
841 if (isEventHandler(propName, externalPropValue)) {
842 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue);
843 } else {
844 mergedProps[propName] = externalPropValue;
845 }
846 }
847 }
848 }
849 return mergedProps;
850 }
851 function isEventHandler(key, value) {
852 const code0 = key.charCodeAt(0);
853 const code1 = key.charCodeAt(1);
854 const code2 = key.charCodeAt(2);
855 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined");
856 }
857 function isPropsGetter(inputProps) {
858 return typeof inputProps === "function";
859 }
860 function resolvePropsGetter(inputProps, previousProps) {
861 if (isPropsGetter(inputProps)) {
862 return inputProps(previousProps);
863 }
864 return inputProps ?? EMPTY_PROPS;
865 }
866 function mergeEventHandlers(ourHandler, theirHandler) {
867 if (!theirHandler) {
868 return ourHandler;
869 }
870 if (!ourHandler) {
871 return wrapEventHandler(theirHandler);
872 }
873 return (...args) => {
874 const event = args[0];
875 if (isSyntheticEvent(event)) {
876 const baseUIEvent = event;
877 makeEventPreventable(baseUIEvent);
878 const result2 = theirHandler(...args);
879 if (!baseUIEvent.baseUIHandlerPrevented) {
880 ourHandler?.(...args);
881 }
882 return result2;
883 }
884 const result = theirHandler(...args);
885 ourHandler?.(...args);
886 return result;
887 };
888 }
889 function wrapEventHandler(handler) {
890 if (!handler) {
891 return handler;
892 }
893 return (...args) => {
894 const event = args[0];
895 if (isSyntheticEvent(event)) {
896 makeEventPreventable(event);
897 }
898 return handler(...args);
899 };
900 }
901 function makeEventPreventable(event) {
902 event.preventBaseUIHandler = () => {
903 event.baseUIHandlerPrevented = true;
904 };
905 return event;
906 }
907 function mergeClassNames(ourClassName, theirClassName) {
908 if (theirClassName) {
909 if (ourClassName) {
910 return theirClassName + " " + ourClassName;
911 }
912 return theirClassName;
913 }
914 return ourClassName;
915 }
916 function isSyntheticEvent(event) {
917 return event != null && typeof event === "object" && "nativeEvent" in event;
918 }
919
920 // node_modules/@base-ui/react/esm/internals/useRenderElement.js
921 var import_react = __toESM(require_react(), 1);
922 function useRenderElement(element, componentProps, params = {}) {
923 const renderProp = componentProps.render;
924 const outProps = useRenderElementProps(componentProps, params);
925 if (params.enabled === false) {
926 return null;
927 }
928 const state = params.state ?? EMPTY_OBJECT;
929 return evaluateRenderProp(element, renderProp, outProps, state);
930 }
931 function useRenderElementProps(componentProps, params = {}) {
932 const {
933 className: classNameProp,
934 style: styleProp,
935 render: renderProp
936 } = componentProps;
937 const {
938 state = EMPTY_OBJECT,
939 ref,
940 props,
941 stateAttributesMapping: stateAttributesMapping7,
942 enabled = true
943 } = params;
944 const className = enabled ? resolveClassName(classNameProp, state) : void 0;
945 const style = enabled ? resolveStyle(styleProp, state) : void 0;
946 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping7) : EMPTY_OBJECT;
947 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0;
948 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT;
949 if (typeof document !== "undefined") {
950 if (!enabled) {
951 useMergedRefs(null, null);
952 } else if (Array.isArray(ref)) {
953 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]);
954 } else {
955 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref);
956 }
957 }
958 if (!enabled) {
959 return EMPTY_OBJECT;
960 }
961 if (className !== void 0) {
962 outProps.className = mergeClassNames(outProps.className, className);
963 }
964 if (style !== void 0) {
965 outProps.style = mergeObjects(outProps.style, style);
966 }
967 return outProps;
968 }
969 function resolveRenderFunctionProps(props) {
970 if (Array.isArray(props)) {
971 return mergePropsN(props);
972 }
973 return mergeProps(void 0, props);
974 }
975 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy");
976 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/;
977 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/;
978 function evaluateRenderProp(element, render, props, state) {
979 if (render) {
980 if (typeof render === "function") {
981 if (true) {
982 warnIfRenderPropLooksLikeComponent(render);
983 }
984 return render(props, state);
985 }
986 const mergedProps = mergeProps(props, render.props);
987 mergedProps.ref = props.ref;
988 let newElement = render;
989 if (newElement?.$$typeof === REACT_LAZY_TYPE) {
990 const children = React10.Children.toArray(render);
991 newElement = children[0];
992 }
993 if (true) {
994 if (!/* @__PURE__ */ React10.isValidElement(newElement)) {
995 throw new Error(["Base UI: The `render` prop was provided an invalid React element as `React.isValidElement(render)` is `false`.", "A valid React element must be provided to the `render` prop because it is cloned with props to replace the default element.", "https://base-ui.com/r/invalid-render-prop"].join("\n"));
996 }
997 }
998 return /* @__PURE__ */ React10.cloneElement(newElement, mergedProps);
999 }
1000 if (element) {
1001 if (typeof element === "string") {
1002 return renderTag(element, props);
1003 }
1004 }
1005 throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage_default(8));
1006 }
1007 function warnIfRenderPropLooksLikeComponent(renderFn) {
1008 const functionName = renderFn.name;
1009 if (functionName.length === 0) {
1010 return;
1011 }
1012 if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) {
1013 return;
1014 }
1015 if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) {
1016 return;
1017 }
1018 warn(`The \`render\` prop received a function named \`${functionName}\` that starts with an uppercase letter.`, "This usually means a React component was passed directly as `render={Component}`.", "Base UI calls `render` as a plain function, which can break the Rules of Hooks during reconciliation.", "If this is an intentional render callback, rename it to start with a lowercase letter.", "Use `render={<Component />}` or `render={(props) => <Component {...props} />}` instead.", "https://base-ui.com/r/invalid-render-prop");
1019 }
1020 function renderTag(Tag, props) {
1021 if (Tag === "button") {
1022 return /* @__PURE__ */ (0, import_react.createElement)("button", {
1023 type: "button",
1024 ...props,
1025 key: props.key
1026 });
1027 }
1028 if (Tag === "img") {
1029 return /* @__PURE__ */ (0, import_react.createElement)("img", {
1030 alt: "",
1031 ...props,
1032 key: props.key
1033 });
1034 }
1035 return /* @__PURE__ */ React10.createElement(Tag, props);
1036 }
1037
1038 // node_modules/@base-ui/react/esm/internals/reason-parts.js
1039 var reason_parts_exports = {};
1040 __export(reason_parts_exports, {
1041 cancelOpen: () => cancelOpen,
1042 chipRemovePress: () => chipRemovePress,
1043 clearPress: () => clearPress,
1044 closePress: () => closePress,
1045 closeWatcher: () => closeWatcher,
1046 decrementPress: () => decrementPress,
1047 disabled: () => disabled,
1048 drag: () => drag,
1049 escapeKey: () => escapeKey,
1050 focusOut: () => focusOut,
1051 imperativeAction: () => imperativeAction,
1052 incrementPress: () => incrementPress,
1053 initial: () => initial,
1054 inputBlur: () => inputBlur,
1055 inputChange: () => inputChange,
1056 inputClear: () => inputClear,
1057 inputPaste: () => inputPaste,
1058 inputPress: () => inputPress,
1059 itemPress: () => itemPress,
1060 keyboard: () => keyboard,
1061 linkPress: () => linkPress,
1062 listNavigation: () => listNavigation,
1063 missing: () => missing,
1064 none: () => none,
1065 outsidePress: () => outsidePress,
1066 pointer: () => pointer,
1067 scrub: () => scrub,
1068 siblingOpen: () => siblingOpen,
1069 swipe: () => swipe,
1070 trackPress: () => trackPress,
1071 triggerFocus: () => triggerFocus,
1072 triggerHover: () => triggerHover,
1073 triggerPress: () => triggerPress,
1074 wheel: () => wheel,
1075 windowResize: () => windowResize
1076 });
1077 var none = "none";
1078 var triggerPress = "trigger-press";
1079 var triggerHover = "trigger-hover";
1080 var triggerFocus = "trigger-focus";
1081 var outsidePress = "outside-press";
1082 var itemPress = "item-press";
1083 var closePress = "close-press";
1084 var linkPress = "link-press";
1085 var clearPress = "clear-press";
1086 var chipRemovePress = "chip-remove-press";
1087 var trackPress = "track-press";
1088 var incrementPress = "increment-press";
1089 var decrementPress = "decrement-press";
1090 var inputChange = "input-change";
1091 var inputClear = "input-clear";
1092 var inputBlur = "input-blur";
1093 var inputPaste = "input-paste";
1094 var inputPress = "input-press";
1095 var focusOut = "focus-out";
1096 var escapeKey = "escape-key";
1097 var closeWatcher = "close-watcher";
1098 var listNavigation = "list-navigation";
1099 var keyboard = "keyboard";
1100 var pointer = "pointer";
1101 var drag = "drag";
1102 var wheel = "wheel";
1103 var scrub = "scrub";
1104 var cancelOpen = "cancel-open";
1105 var siblingOpen = "sibling-open";
1106 var disabled = "disabled";
1107 var missing = "missing";
1108 var initial = "initial";
1109 var imperativeAction = "imperative-action";
1110 var swipe = "swipe";
1111 var windowResize = "window-resize";
1112
1113 // node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js
1114 function createChangeEventDetails(reason, event, trigger, customProperties) {
1115 let canceled = false;
1116 let allowPropagation = false;
1117 const custom = customProperties ?? EMPTY_OBJECT;
1118 const details = {
1119 reason,
1120 event: event ?? new Event("base-ui"),
1121 cancel() {
1122 canceled = true;
1123 },
1124 allowPropagation() {
1125 allowPropagation = true;
1126 },
1127 get isCanceled() {
1128 return canceled;
1129 },
1130 get isPropagationAllowed() {
1131 return allowPropagation;
1132 },
1133 trigger,
1134 ...custom
1135 };
1136 return details;
1137 }
1138 function createGenericEventDetails(reason, event, customProperties) {
1139 const custom = customProperties ?? EMPTY_OBJECT;
1140 const details = {
1141 reason,
1142 event: event ?? new Event("base-ui"),
1143 ...custom
1144 };
1145 return details;
1146 }
1147
1148 // node_modules/@base-ui/utils/esm/useId.js
1149 var React11 = __toESM(require_react(), 1);
1150 var globalId = 0;
1151 function useGlobalId(idOverride, prefix = "mui") {
1152 const [defaultId, setDefaultId] = React11.useState(idOverride);
1153 const id = idOverride || defaultId;
1154 React11.useEffect(() => {
1155 if (defaultId == null) {
1156 globalId += 1;
1157 setDefaultId(`${prefix}-${globalId}`);
1158 }
1159 }, [defaultId, prefix]);
1160 return id;
1161 }
1162 var maybeReactUseId = SafeReact.useId;
1163 function useId(idOverride, prefix) {
1164 if (maybeReactUseId !== void 0) {
1165 const reactId = maybeReactUseId();
1166 return idOverride ?? (prefix ? `${prefix}-${reactId}` : reactId);
1167 }
1168 return useGlobalId(idOverride, prefix);
1169 }
1170
1171 // node_modules/@base-ui/react/esm/internals/useBaseUiId.js
1172 function useBaseUiId(idOverride) {
1173 return useId(idOverride, "base-ui");
1174 }
1175
1176 // node_modules/@base-ui/react/esm/internals/useTransitionStatus.js
1177 var React13 = __toESM(require_react(), 1);
1178
1179 // node_modules/@base-ui/utils/esm/useOnMount.js
1180 var React12 = __toESM(require_react(), 1);
1181 var EMPTY = [];
1182 function useOnMount(fn) {
1183 React12.useEffect(fn, EMPTY);
1184 }
1185
1186 // node_modules/@base-ui/utils/esm/useAnimationFrame.js
1187 var EMPTY2 = null;
1188 var LAST_RAF = globalThis.requestAnimationFrame;
1189 var Scheduler = class {
1190 /* This implementation uses an array as a backing data-structure for frame callbacks.
1191 * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it
1192 * never calls the native `cancelAnimationFrame` if there are no frames left. This can
1193 * be much more efficient if there is a call pattern that alterns as
1194 * "request-cancel-request-cancel-…".
1195 * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation
1196 * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */
1197 callbacks = [];
1198 callbacksCount = 0;
1199 nextId = 1;
1200 startId = 1;
1201 isScheduled = false;
1202 tick = (timestamp) => {
1203 this.isScheduled = false;
1204 const currentCallbacks = this.callbacks;
1205 const currentCallbacksCount = this.callbacksCount;
1206 this.callbacks = [];
1207 this.callbacksCount = 0;
1208 this.startId = this.nextId;
1209 if (currentCallbacksCount > 0) {
1210 for (let i = 0; i < currentCallbacks.length; i += 1) {
1211 currentCallbacks[i]?.(timestamp);
1212 }
1213 }
1214 };
1215 request(fn) {
1216 const id = this.nextId;
1217 this.nextId += 1;
1218 this.callbacks.push(fn);
1219 this.callbacksCount += 1;
1220 const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true);
1221 if (!this.isScheduled || didRAFChange) {
1222 requestAnimationFrame(this.tick);
1223 this.isScheduled = true;
1224 }
1225 return id;
1226 }
1227 cancel(id) {
1228 const index2 = id - this.startId;
1229 if (index2 < 0 || index2 >= this.callbacks.length) {
1230 return;
1231 }
1232 this.callbacks[index2] = null;
1233 this.callbacksCount -= 1;
1234 }
1235 };
1236 var scheduler = new Scheduler();
1237 var AnimationFrame = class _AnimationFrame {
1238 static create() {
1239 return new _AnimationFrame();
1240 }
1241 static request(fn) {
1242 return scheduler.request(fn);
1243 }
1244 static cancel(id) {
1245 return scheduler.cancel(id);
1246 }
1247 currentId = EMPTY2;
1248 /**
1249 * Executes `fn` after `delay`, clearing any previously scheduled call.
1250 */
1251 request(fn) {
1252 this.cancel();
1253 this.currentId = scheduler.request(() => {
1254 this.currentId = EMPTY2;
1255 fn();
1256 });
1257 }
1258 cancel = () => {
1259 if (this.currentId !== EMPTY2) {
1260 scheduler.cancel(this.currentId);
1261 this.currentId = EMPTY2;
1262 }
1263 };
1264 disposeEffect = () => {
1265 return this.cancel;
1266 };
1267 };
1268 function useAnimationFrame() {
1269 const timeout = useRefWithInit(AnimationFrame.create).current;
1270 useOnMount(timeout.disposeEffect);
1271 return timeout;
1272 }
1273
1274 // node_modules/@base-ui/react/esm/internals/useTransitionStatus.js
1275 function useTransitionStatus(open, enableIdleState = false, deferEndingState = false) {
1276 const [transitionStatus, setTransitionStatus] = React13.useState(open && enableIdleState ? "idle" : void 0);
1277 const [mounted, setMounted] = React13.useState(open);
1278 if (open && !mounted) {
1279 setMounted(true);
1280 setTransitionStatus("starting");
1281 }
1282 if (!open && mounted && transitionStatus !== "ending" && !deferEndingState) {
1283 setTransitionStatus("ending");
1284 }
1285 if (!open && !mounted && transitionStatus === "ending") {
1286 setTransitionStatus(void 0);
1287 }
1288 useIsoLayoutEffect(() => {
1289 if (!open && mounted && transitionStatus !== "ending" && deferEndingState) {
1290 const frame = AnimationFrame.request(() => {
1291 setTransitionStatus("ending");
1292 });
1293 return () => {
1294 AnimationFrame.cancel(frame);
1295 };
1296 }
1297 return void 0;
1298 }, [open, mounted, transitionStatus, deferEndingState]);
1299 useIsoLayoutEffect(() => {
1300 if (!open || enableIdleState) {
1301 return void 0;
1302 }
1303 const frame = AnimationFrame.request(() => {
1304 setTransitionStatus(void 0);
1305 });
1306 return () => {
1307 AnimationFrame.cancel(frame);
1308 };
1309 }, [enableIdleState, open]);
1310 useIsoLayoutEffect(() => {
1311 if (!open || !enableIdleState) {
1312 return void 0;
1313 }
1314 if (open && mounted && transitionStatus !== "idle") {
1315 setTransitionStatus("starting");
1316 }
1317 const frame = AnimationFrame.request(() => {
1318 setTransitionStatus("idle");
1319 });
1320 return () => {
1321 AnimationFrame.cancel(frame);
1322 };
1323 }, [enableIdleState, open, mounted, transitionStatus]);
1324 return {
1325 mounted,
1326 setMounted,
1327 transitionStatus
1328 };
1329 }
1330
1331 // node_modules/@base-ui/react/esm/internals/composite/list/useCompositeListItem.js
1332 var React14 = __toESM(require_react(), 1);
1333 var IndexGuessBehavior = /* @__PURE__ */ (function(IndexGuessBehavior2) {
1334 IndexGuessBehavior2[IndexGuessBehavior2["None"] = 0] = "None";
1335 IndexGuessBehavior2[IndexGuessBehavior2["GuessFromOrder"] = 1] = "GuessFromOrder";
1336 return IndexGuessBehavior2;
1337 })({});
1338 function useCompositeListItem(params = {}) {
1339 const {
1340 label,
1341 metadata,
1342 textRef,
1343 indexGuessBehavior,
1344 index: externalIndex
1345 } = params;
1346 const {
1347 register: register2,
1348 unregister,
1349 subscribeMapChange,
1350 elementsRef,
1351 labelsRef,
1352 nextIndexRef
1353 } = useCompositeListContext();
1354 const indexRef = React14.useRef(-1);
1355 const [index2, setIndex] = React14.useState(externalIndex ?? (indexGuessBehavior === IndexGuessBehavior.GuessFromOrder ? () => {
1356 if (indexRef.current === -1) {
1357 const newIndex = nextIndexRef.current;
1358 nextIndexRef.current += 1;
1359 indexRef.current = newIndex;
1360 }
1361 return indexRef.current;
1362 } : -1));
1363 const componentRef = React14.useRef(null);
1364 const ref = React14.useCallback((node) => {
1365 componentRef.current = node;
1366 if (index2 !== -1 && node !== null) {
1367 elementsRef.current[index2] = node;
1368 if (labelsRef) {
1369 const isLabelDefined = label !== void 0;
1370 labelsRef.current[index2] = isLabelDefined ? label : textRef?.current?.textContent ?? node.textContent;
1371 }
1372 }
1373 }, [index2, elementsRef, labelsRef, label, textRef]);
1374 useIsoLayoutEffect(() => {
1375 if (externalIndex != null) {
1376 return void 0;
1377 }
1378 const node = componentRef.current;
1379 if (node) {
1380 register2(node, metadata);
1381 return () => {
1382 unregister(node);
1383 };
1384 }
1385 return void 0;
1386 }, [externalIndex, register2, unregister, metadata]);
1387 useIsoLayoutEffect(() => {
1388 if (externalIndex != null) {
1389 return void 0;
1390 }
1391 return subscribeMapChange((map) => {
1392 const i = componentRef.current ? map.get(componentRef.current)?.index : null;
1393 if (i != null) {
1394 setIndex(i);
1395 }
1396 });
1397 }, [externalIndex, subscribeMapChange, setIndex]);
1398 return React14.useMemo(() => ({
1399 ref,
1400 index: index2
1401 }), [index2, ref]);
1402 }
1403
1404 // node_modules/@base-ui/react/esm/internals/stateAttributesMapping.js
1405 var TransitionStatusDataAttributes = /* @__PURE__ */ (function(TransitionStatusDataAttributes2) {
1406 TransitionStatusDataAttributes2["startingStyle"] = "data-starting-style";
1407 TransitionStatusDataAttributes2["endingStyle"] = "data-ending-style";
1408 return TransitionStatusDataAttributes2;
1409 })({});
1410 var STARTING_HOOK = {
1411 [TransitionStatusDataAttributes.startingStyle]: ""
1412 };
1413 var ENDING_HOOK = {
1414 [TransitionStatusDataAttributes.endingStyle]: ""
1415 };
1416 var transitionStatusMapping = {
1417 transitionStatus(value) {
1418 if (value === "starting") {
1419 return STARTING_HOOK;
1420 }
1421 if (value === "ending") {
1422 return ENDING_HOOK;
1423 }
1424 return null;
1425 }
1426 };
1427
1428 // node_modules/@base-ui/react/esm/internals/use-button/useButton.js
1429 var React17 = __toESM(require_react(), 1);
1430
1431 // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
1432 function hasWindow() {
1433 return typeof window !== "undefined";
1434 }
1435 function getNodeName(node) {
1436 if (isNode(node)) {
1437 return (node.nodeName || "").toLowerCase();
1438 }
1439 return "#document";
1440 }
1441 function getWindow(node) {
1442 var _node$ownerDocument;
1443 return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
1444 }
1445 function getDocumentElement(node) {
1446 var _ref;
1447 return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
1448 }
1449 function isNode(value) {
1450 if (!hasWindow()) {
1451 return false;
1452 }
1453 return value instanceof Node || value instanceof getWindow(value).Node;
1454 }
1455 function isElement(value) {
1456 if (!hasWindow()) {
1457 return false;
1458 }
1459 return value instanceof Element || value instanceof getWindow(value).Element;
1460 }
1461 function isHTMLElement(value) {
1462 if (!hasWindow()) {
1463 return false;
1464 }
1465 return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
1466 }
1467 function isShadowRoot(value) {
1468 if (!hasWindow() || typeof ShadowRoot === "undefined") {
1469 return false;
1470 }
1471 return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
1472 }
1473 function isOverflowElement(element) {
1474 const {
1475 overflow,
1476 overflowX,
1477 overflowY,
1478 display
1479 } = getComputedStyle2(element);
1480 return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents";
1481 }
1482 function isTableElement(element) {
1483 return /^(table|td|th)$/.test(getNodeName(element));
1484 }
1485 function isTopLayer(element) {
1486 try {
1487 if (element.matches(":popover-open")) {
1488 return true;
1489 }
1490 } catch (_e) {
1491 }
1492 try {
1493 return element.matches(":modal");
1494 } catch (_e) {
1495 return false;
1496 }
1497 }
1498 var willChangeRe = /transform|translate|scale|rotate|perspective|filter/;
1499 var containRe = /paint|layout|strict|content/;
1500 var isNotNone = (value) => !!value && value !== "none";
1501 var isWebKitValue;
1502 function isContainingBlock(elementOrCss) {
1503 const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss;
1504 return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || "") || containRe.test(css.contain || "");
1505 }
1506 function getContainingBlock(element) {
1507 let currentNode = getParentNode(element);
1508 while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
1509 if (isContainingBlock(currentNode)) {
1510 return currentNode;
1511 } else if (isTopLayer(currentNode)) {
1512 return null;
1513 }
1514 currentNode = getParentNode(currentNode);
1515 }
1516 return null;
1517 }
1518 function isWebKit() {
1519 if (isWebKitValue == null) {
1520 isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none");
1521 }
1522 return isWebKitValue;
1523 }
1524 function isLastTraversableNode(node) {
1525 return /^(html|body|#document)$/.test(getNodeName(node));
1526 }
1527 function getComputedStyle2(element) {
1528 return getWindow(element).getComputedStyle(element);
1529 }
1530 function getNodeScroll(element) {
1531 if (isElement(element)) {
1532 return {
1533 scrollLeft: element.scrollLeft,
1534 scrollTop: element.scrollTop
1535 };
1536 }
1537 return {
1538 scrollLeft: element.scrollX,
1539 scrollTop: element.scrollY
1540 };
1541 }
1542 function getParentNode(node) {
1543 if (getNodeName(node) === "html") {
1544 return node;
1545 }
1546 const result = (
1547 // Step into the shadow DOM of the parent of a slotted node.
1548 node.assignedSlot || // DOM Element detected.
1549 node.parentNode || // ShadowRoot detected.
1550 isShadowRoot(node) && node.host || // Fallback.
1551 getDocumentElement(node)
1552 );
1553 return isShadowRoot(result) ? result.host : result;
1554 }
1555 function getNearestOverflowAncestor(node) {
1556 const parentNode = getParentNode(node);
1557 if (isLastTraversableNode(parentNode)) {
1558 return node.ownerDocument ? node.ownerDocument.body : node.body;
1559 }
1560 if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
1561 return parentNode;
1562 }
1563 return getNearestOverflowAncestor(parentNode);
1564 }
1565 function getOverflowAncestors(node, list, traverseIframes) {
1566 var _node$ownerDocument2;
1567 if (list === void 0) {
1568 list = [];
1569 }
1570 if (traverseIframes === void 0) {
1571 traverseIframes = true;
1572 }
1573 const scrollableAncestor = getNearestOverflowAncestor(node);
1574 const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
1575 const win = getWindow(scrollableAncestor);
1576 if (isBody) {
1577 const frameElement = getFrameElement(win);
1578 return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
1579 } else {
1580 return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
1581 }
1582 }
1583 function getFrameElement(win) {
1584 return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
1585 }
1586
1587 // node_modules/@base-ui/react/esm/internals/composite/root/CompositeRootContext.js
1588 var React15 = __toESM(require_react(), 1);
1589 var CompositeRootContext = /* @__PURE__ */ React15.createContext(void 0);
1590 if (true) CompositeRootContext.displayName = "CompositeRootContext";
1591 function useCompositeRootContext(optional = false) {
1592 const context = React15.useContext(CompositeRootContext);
1593 if (context === void 0 && !optional) {
1594 throw new Error(true ? "Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>." : formatErrorMessage_default(16));
1595 }
1596 return context;
1597 }
1598
1599 // node_modules/@base-ui/react/esm/utils/useFocusableWhenDisabled.js
1600 var React16 = __toESM(require_react(), 1);
1601 function useFocusableWhenDisabled(parameters) {
1602 const {
1603 focusableWhenDisabled,
1604 disabled: disabled2,
1605 composite = false,
1606 tabIndex: tabIndexProp = 0,
1607 isNativeButton
1608 } = parameters;
1609 const isFocusableComposite = composite && focusableWhenDisabled !== false;
1610 const isNonFocusableComposite = composite && focusableWhenDisabled === false;
1611 const props = React16.useMemo(() => {
1612 const additionalProps = {
1613 // allow Tabbing away from focusableWhenDisabled elements
1614 onKeyDown(event) {
1615 if (disabled2 && focusableWhenDisabled && event.key !== "Tab") {
1616 event.preventDefault();
1617 }
1618 }
1619 };
1620 if (!composite) {
1621 additionalProps.tabIndex = tabIndexProp;
1622 if (!isNativeButton && disabled2) {
1623 additionalProps.tabIndex = focusableWhenDisabled ? tabIndexProp : -1;
1624 }
1625 }
1626 if (isNativeButton && (focusableWhenDisabled || isFocusableComposite) || !isNativeButton && disabled2) {
1627 additionalProps["aria-disabled"] = disabled2;
1628 }
1629 if (isNativeButton && (!focusableWhenDisabled || isNonFocusableComposite)) {
1630 additionalProps.disabled = disabled2;
1631 }
1632 return additionalProps;
1633 }, [composite, disabled2, focusableWhenDisabled, isFocusableComposite, isNonFocusableComposite, isNativeButton, tabIndexProp]);
1634 return {
1635 props
1636 };
1637 }
1638
1639 // node_modules/@base-ui/react/esm/internals/use-button/useButton.js
1640 function useButton(parameters = {}) {
1641 const {
1642 disabled: disabled2 = false,
1643 focusableWhenDisabled,
1644 tabIndex = 0,
1645 native: isNativeButton = true,
1646 composite: compositeProp
1647 } = parameters;
1648 const elementRef = React17.useRef(null);
1649 const compositeRootContext = useCompositeRootContext(true);
1650 const isCompositeItem = compositeProp ?? compositeRootContext !== void 0;
1651 const {
1652 props: focusableWhenDisabledProps
1653 } = useFocusableWhenDisabled({
1654 focusableWhenDisabled,
1655 disabled: disabled2,
1656 composite: isCompositeItem,
1657 tabIndex,
1658 isNativeButton
1659 });
1660 if (true) {
1661 React17.useEffect(() => {
1662 if (!elementRef.current) {
1663 return;
1664 }
1665 const isButtonTag = isButtonElement(elementRef.current);
1666 if (isNativeButton) {
1667 if (!isButtonTag) {
1668 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
1669 const message = "A component that acts as a button expected a native <button> because the `nativeButton` prop is true. Rendering a non-<button> removes native button semantics, which can impact forms and accessibility. Use a real <button> in the `render` prop, or set `nativeButton` to `false`.";
1670 error(`${message}${ownerStackMessage}`);
1671 }
1672 } else if (isButtonTag) {
1673 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
1674 const message = "A component that acts as a button expected a non-<button> because the `nativeButton` prop is false. Rendering a <button> keeps native behavior while Base UI applies non-native attributes and handlers, which can add unintended extra attributes (such as `role` or `aria-disabled`). Use a non-<button> in the `render` prop, or set `nativeButton` to `true`.";
1675 error(`${message}${ownerStackMessage}`);
1676 }
1677 }, [isNativeButton]);
1678 }
1679 const updateDisabled = React17.useCallback(() => {
1680 const element = elementRef.current;
1681 if (!isButtonElement(element)) {
1682 return;
1683 }
1684 if (isCompositeItem && disabled2 && focusableWhenDisabledProps.disabled === void 0 && element.disabled) {
1685 element.disabled = false;
1686 }
1687 }, [disabled2, focusableWhenDisabledProps.disabled, isCompositeItem]);
1688 useIsoLayoutEffect(updateDisabled, [updateDisabled]);
1689 const getButtonProps = React17.useCallback((externalProps = {}) => {
1690 const {
1691 onClick: externalOnClick,
1692 onMouseDown: externalOnMouseDown,
1693 onKeyUp: externalOnKeyUp,
1694 onKeyDown: externalOnKeyDown,
1695 onPointerDown: externalOnPointerDown,
1696 ...otherExternalProps
1697 } = externalProps;
1698 return mergeProps({
1699 onClick(event) {
1700 if (disabled2) {
1701 event.preventDefault();
1702 return;
1703 }
1704 externalOnClick?.(event);
1705 },
1706 onMouseDown(event) {
1707 if (!disabled2) {
1708 externalOnMouseDown?.(event);
1709 }
1710 },
1711 onKeyDown(event) {
1712 if (disabled2) {
1713 return;
1714 }
1715 makeEventPreventable(event);
1716 externalOnKeyDown?.(event);
1717 if (event.baseUIHandlerPrevented) {
1718 return;
1719 }
1720 const isCurrentTarget = event.target === event.currentTarget;
1721 const currentTarget = event.currentTarget;
1722 const isButton = isButtonElement(currentTarget);
1723 const isLink = !isNativeButton && isValidLinkElement(currentTarget);
1724 const shouldClick = isCurrentTarget && (isNativeButton ? isButton : !isLink);
1725 const isEnterKey = event.key === "Enter";
1726 const isSpaceKey = event.key === " ";
1727 const role = currentTarget.getAttribute("role");
1728 const isTextNavigationRole = role?.startsWith("menuitem") || role === "option" || role === "gridcell";
1729 if (isCurrentTarget && isCompositeItem && isSpaceKey) {
1730 if (event.defaultPrevented && isTextNavigationRole) {
1731 return;
1732 }
1733 event.preventDefault();
1734 if (isLink || isNativeButton && isButton) {
1735 currentTarget.click();
1736 event.preventBaseUIHandler();
1737 } else if (shouldClick) {
1738 externalOnClick?.(event);
1739 event.preventBaseUIHandler();
1740 }
1741 return;
1742 }
1743 if (shouldClick) {
1744 if (!isNativeButton && (isSpaceKey || isEnterKey)) {
1745 event.preventDefault();
1746 }
1747 if (!isNativeButton && isEnterKey) {
1748 externalOnClick?.(event);
1749 }
1750 }
1751 },
1752 onKeyUp(event) {
1753 if (disabled2) {
1754 return;
1755 }
1756 makeEventPreventable(event);
1757 externalOnKeyUp?.(event);
1758 if (event.target === event.currentTarget && isNativeButton && isCompositeItem && isButtonElement(event.currentTarget) && event.key === " ") {
1759 event.preventDefault();
1760 return;
1761 }
1762 if (event.baseUIHandlerPrevented) {
1763 return;
1764 }
1765 if (event.target === event.currentTarget && !isNativeButton && !isCompositeItem && event.key === " ") {
1766 externalOnClick?.(event);
1767 }
1768 },
1769 onPointerDown(event) {
1770 if (disabled2) {
1771 event.preventDefault();
1772 return;
1773 }
1774 externalOnPointerDown?.(event);
1775 }
1776 }, isNativeButton ? {
1777 type: "button"
1778 } : {
1779 role: "button"
1780 }, focusableWhenDisabledProps, otherExternalProps);
1781 }, [disabled2, focusableWhenDisabledProps, isCompositeItem, isNativeButton]);
1782 const buttonRef = useStableCallback((element) => {
1783 elementRef.current = element;
1784 updateDisabled();
1785 });
1786 return {
1787 getButtonProps,
1788 buttonRef
1789 };
1790 }
1791 function isButtonElement(elem) {
1792 return isHTMLElement(elem) && elem.tagName === "BUTTON";
1793 }
1794 function isValidLinkElement(elem) {
1795 return Boolean(elem?.tagName === "A" && elem?.href);
1796 }
1797
1798 // node_modules/@base-ui/utils/esm/detectBrowser.js
1799 var hasNavigator = typeof navigator !== "undefined";
1800 var nav = getNavigatorData();
1801 var platform = getPlatform();
1802 var userAgent = getUserAgent();
1803 var isWebKit2 = typeof CSS === "undefined" || !CSS.supports ? false : CSS.supports("-webkit-backdrop-filter:none");
1804 var isIOS = (
1805 // iPads can claim to be MacIntel
1806 nav.platform === "MacIntel" && nav.maxTouchPoints > 1 ? true : /iP(hone|ad|od)|iOS/.test(nav.platform)
1807 );
1808 var isFirefox = hasNavigator && /firefox/i.test(userAgent);
1809 var isSafari = hasNavigator && /apple/i.test(navigator.vendor);
1810 var isEdge = hasNavigator && /Edg/i.test(userAgent);
1811 var isAndroid = hasNavigator && /android/i.test(platform) || /android/i.test(userAgent);
1812 var isMac = hasNavigator && platform.toLowerCase().startsWith("mac") && !navigator.maxTouchPoints;
1813 var isJSDOM = userAgent.includes("jsdom/");
1814 function getNavigatorData() {
1815 if (!hasNavigator) {
1816 return {
1817 platform: "",
1818 maxTouchPoints: -1
1819 };
1820 }
1821 const uaData = navigator.userAgentData;
1822 if (uaData?.platform) {
1823 return {
1824 platform: uaData.platform,
1825 maxTouchPoints: navigator.maxTouchPoints
1826 };
1827 }
1828 return {
1829 platform: navigator.platform ?? "",
1830 maxTouchPoints: navigator.maxTouchPoints ?? -1
1831 };
1832 }
1833 function getUserAgent() {
1834 if (!hasNavigator) {
1835 return "";
1836 }
1837 const uaData = navigator.userAgentData;
1838 if (uaData && Array.isArray(uaData.brands)) {
1839 return uaData.brands.map(({
1840 brand,
1841 version: version2
1842 }) => `${brand}/${version2}`).join(" ");
1843 }
1844 return navigator.userAgent;
1845 }
1846 function getPlatform() {
1847 if (!hasNavigator) {
1848 return "";
1849 }
1850 const uaData = navigator.userAgentData;
1851 if (uaData?.platform) {
1852 return uaData.platform;
1853 }
1854 return navigator.platform ?? "";
1855 }
1856
1857 // node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.js
1858 var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable";
1859 var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";
1860 var ARROW_LEFT = "ArrowLeft";
1861 var ARROW_RIGHT = "ArrowRight";
1862 var ARROW_UP = "ArrowUp";
1863 var ARROW_DOWN = "ArrowDown";
1864
1865 // node_modules/@base-ui/react/esm/internals/shadowDom.js
1866 function activeElement(doc) {
1867 let element = doc.activeElement;
1868 while (element?.shadowRoot?.activeElement != null) {
1869 element = element.shadowRoot.activeElement;
1870 }
1871 return element;
1872 }
1873 function contains(parent, child) {
1874 if (!parent || !child) {
1875 return false;
1876 }
1877 const rootNode = child.getRootNode?.();
1878 if (parent.contains(child)) {
1879 return true;
1880 }
1881 if (rootNode && isShadowRoot(rootNode)) {
1882 let next = child;
1883 while (next) {
1884 if (parent === next) {
1885 return true;
1886 }
1887 next = next.parentNode || next.host;
1888 }
1889 }
1890 return false;
1891 }
1892 function getTarget(event) {
1893 if ("composedPath" in event) {
1894 return event.composedPath()[0];
1895 }
1896 return event.target;
1897 }
1898
1899 // node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js
1900 function isTargetInsideEnabledTrigger(target, triggerElements) {
1901 if (!isElement(target)) {
1902 return false;
1903 }
1904 const targetElement = target;
1905 if (triggerElements.hasElement(targetElement)) {
1906 return !targetElement.hasAttribute("data-trigger-disabled");
1907 }
1908 for (const [, trigger] of triggerElements.entries()) {
1909 if (contains(trigger, targetElement)) {
1910 return !trigger.hasAttribute("data-trigger-disabled");
1911 }
1912 }
1913 return false;
1914 }
1915 function isEventTargetWithin(event, node) {
1916 if (node == null) {
1917 return false;
1918 }
1919 if ("composedPath" in event) {
1920 return event.composedPath().includes(node);
1921 }
1922 const eventAgain = event;
1923 return eventAgain.target != null && node.contains(eventAgain.target);
1924 }
1925 function isRootElement(element) {
1926 return element.matches("html,body");
1927 }
1928 function isTypeableElement(element) {
1929 return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);
1930 }
1931 function isInteractiveElement(element) {
1932 return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${TYPEABLE_SELECTOR}`) != null;
1933 }
1934 function isTypeableCombobox(element) {
1935 if (!element) {
1936 return false;
1937 }
1938 return element.getAttribute("role") === "combobox" && isTypeableElement(element);
1939 }
1940 function matchesFocusVisible(element) {
1941 if (!element || isJSDOM) {
1942 return true;
1943 }
1944 try {
1945 return element.matches(":focus-visible");
1946 } catch (_e) {
1947 return true;
1948 }
1949 }
1950 function getFloatingFocusElement(floatingElement) {
1951 if (!floatingElement) {
1952 return null;
1953 }
1954 return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(`[${FOCUSABLE_ATTRIBUTE}]`) || floatingElement;
1955 }
1956
1957 // node_modules/@base-ui/react/esm/floating-ui-react/utils/nodes.js
1958 function getNodeChildren(nodes, id, onlyOpenChildren = true) {
1959 const directChildren = nodes.filter((node) => node.parentId === id);
1960 return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]);
1961 }
1962 function getNodeAncestors(nodes, id) {
1963 let allAncestors = [];
1964 let currentParentId = nodes.find((node) => node.id === id)?.parentId;
1965 while (currentParentId) {
1966 const currentNode = nodes.find((node) => node.id === currentParentId);
1967 currentParentId = currentNode?.parentId;
1968 if (currentNode) {
1969 allAncestors = allAncestors.concat(currentNode);
1970 }
1971 }
1972 return allAncestors;
1973 }
1974
1975 // node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js
1976 function stopEvent(event) {
1977 event.preventDefault();
1978 event.stopPropagation();
1979 }
1980 function isReactEvent(event) {
1981 return "nativeEvent" in event;
1982 }
1983 function isVirtualClick(event) {
1984 if (event.pointerType === "" && event.isTrusted) {
1985 return true;
1986 }
1987 if (isAndroid && event.pointerType) {
1988 return event.type === "click" && event.buttons === 1;
1989 }
1990 return event.detail === 0 && !event.pointerType;
1991 }
1992 function isVirtualPointerEvent(event) {
1993 if (isJSDOM) {
1994 return false;
1995 }
1996 return !isAndroid && event.width === 0 && event.height === 0 || isAndroid && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === "mouse" || // iOS VoiceOver returns 0.333• for width/height.
1997 event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === "touch";
1998 }
1999 function isMouseLikePointerType(pointerType, strict) {
2000 const values = ["mouse", "pen"];
2001 if (!strict) {
2002 values.push("", void 0);
2003 }
2004 return values.includes(pointerType);
2005 }
2006 function isClickLikeEvent(event) {
2007 const type = event.type;
2008 return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup";
2009 }
2010
2011 // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
2012 var sides = ["top", "right", "bottom", "left"];
2013 var min = Math.min;
2014 var max = Math.max;
2015 var round = Math.round;
2016 var floor = Math.floor;
2017 var createCoords = (v) => ({
2018 x: v,
2019 y: v
2020 });
2021 var oppositeSideMap = {
2022 left: "right",
2023 right: "left",
2024 bottom: "top",
2025 top: "bottom"
2026 };
2027 function clamp(start, value, end) {
2028 return max(start, min(value, end));
2029 }
2030 function evaluate(value, param) {
2031 return typeof value === "function" ? value(param) : value;
2032 }
2033 function getSide(placement) {
2034 return placement.split("-")[0];
2035 }
2036 function getAlignment(placement) {
2037 return placement.split("-")[1];
2038 }
2039 function getOppositeAxis(axis) {
2040 return axis === "x" ? "y" : "x";
2041 }
2042 function getAxisLength(axis) {
2043 return axis === "y" ? "height" : "width";
2044 }
2045 function getSideAxis(placement) {
2046 const firstChar = placement[0];
2047 return firstChar === "t" || firstChar === "b" ? "y" : "x";
2048 }
2049 function getAlignmentAxis(placement) {
2050 return getOppositeAxis(getSideAxis(placement));
2051 }
2052 function getAlignmentSides(placement, rects, rtl) {
2053 if (rtl === void 0) {
2054 rtl = false;
2055 }
2056 const alignment = getAlignment(placement);
2057 const alignmentAxis = getAlignmentAxis(placement);
2058 const length = getAxisLength(alignmentAxis);
2059 let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
2060 if (rects.reference[length] > rects.floating[length]) {
2061 mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
2062 }
2063 return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
2064 }
2065 function getExpandedPlacements(placement) {
2066 const oppositePlacement = getOppositePlacement(placement);
2067 return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
2068 }
2069 function getOppositeAlignmentPlacement(placement) {
2070 return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start");
2071 }
2072 var lrPlacement = ["left", "right"];
2073 var rlPlacement = ["right", "left"];
2074 var tbPlacement = ["top", "bottom"];
2075 var btPlacement = ["bottom", "top"];
2076 function getSideList(side, isStart, rtl) {
2077 switch (side) {
2078 case "top":
2079 case "bottom":
2080 if (rtl) return isStart ? rlPlacement : lrPlacement;
2081 return isStart ? lrPlacement : rlPlacement;
2082 case "left":
2083 case "right":
2084 return isStart ? tbPlacement : btPlacement;
2085 default:
2086 return [];
2087 }
2088 }
2089 function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
2090 const alignment = getAlignment(placement);
2091 let list = getSideList(getSide(placement), direction === "start", rtl);
2092 if (alignment) {
2093 list = list.map((side) => side + "-" + alignment);
2094 if (flipAlignment) {
2095 list = list.concat(list.map(getOppositeAlignmentPlacement));
2096 }
2097 }
2098 return list;
2099 }
2100 function getOppositePlacement(placement) {
2101 const side = getSide(placement);
2102 return oppositeSideMap[side] + placement.slice(side.length);
2103 }
2104 function expandPaddingObject(padding) {
2105 return {
2106 top: 0,
2107 right: 0,
2108 bottom: 0,
2109 left: 0,
2110 ...padding
2111 };
2112 }
2113 function getPaddingObject(padding) {
2114 return typeof padding !== "number" ? expandPaddingObject(padding) : {
2115 top: padding,
2116 right: padding,
2117 bottom: padding,
2118 left: padding
2119 };
2120 }
2121 function rectToClientRect(rect) {
2122 const {
2123 x,
2124 y,
2125 width,
2126 height
2127 } = rect;
2128 return {
2129 width,
2130 height,
2131 top: y,
2132 left: x,
2133 right: x + width,
2134 bottom: y + height,
2135 x,
2136 y
2137 };
2138 }
2139
2140 // node_modules/@base-ui/react/esm/floating-ui-react/utils/composite.js
2141 function isDifferentGridRow(index2, cols, prevRow) {
2142 return Math.floor(index2 / cols) !== prevRow;
2143 }
2144 function isIndexOutOfListBounds(list, index2) {
2145 return index2 < 0 || index2 >= list.length;
2146 }
2147 function getMinListIndex(listRef, disabledIndices) {
2148 return findNonDisabledListIndex(listRef.current, {
2149 disabledIndices
2150 });
2151 }
2152 function getMaxListIndex(listRef, disabledIndices) {
2153 return findNonDisabledListIndex(listRef.current, {
2154 decrement: true,
2155 startingIndex: listRef.current.length,
2156 disabledIndices
2157 });
2158 }
2159 function findNonDisabledListIndex(list, {
2160 startingIndex = -1,
2161 decrement = false,
2162 disabledIndices,
2163 amount = 1
2164 } = {}) {
2165 let index2 = startingIndex;
2166 do {
2167 index2 += decrement ? -amount : amount;
2168 } while (index2 >= 0 && index2 <= list.length - 1 && isListIndexDisabled(list, index2, disabledIndices));
2169 return index2;
2170 }
2171 function getGridNavigatedIndex(list, {
2172 event,
2173 orientation,
2174 loopFocus,
2175 onLoop,
2176 rtl,
2177 cols,
2178 disabledIndices,
2179 minIndex,
2180 maxIndex,
2181 prevIndex,
2182 stopEvent: stop = false
2183 }) {
2184 let nextIndex = prevIndex;
2185 let verticalDirection;
2186 if (event.key === ARROW_UP) {
2187 verticalDirection = "up";
2188 } else if (event.key === ARROW_DOWN) {
2189 verticalDirection = "down";
2190 }
2191 if (verticalDirection) {
2192 const rows = [];
2193 const rowIndexMap = [];
2194 let hasRoleRow = false;
2195 let visibleItemCount = 0;
2196 {
2197 let currentRowEl = null;
2198 let currentRowIndex = -1;
2199 list.forEach((el, idx) => {
2200 if (el == null) {
2201 return;
2202 }
2203 visibleItemCount += 1;
2204 const rowEl = el.closest('[role="row"]');
2205 if (rowEl) {
2206 hasRoleRow = true;
2207 }
2208 if (rowEl !== currentRowEl || currentRowIndex === -1) {
2209 currentRowEl = rowEl;
2210 currentRowIndex += 1;
2211 rows[currentRowIndex] = [];
2212 }
2213 rows[currentRowIndex].push(idx);
2214 rowIndexMap[idx] = currentRowIndex;
2215 });
2216 }
2217 let hasDomRows = false;
2218 let inferredDomCols = 0;
2219 if (hasRoleRow) {
2220 for (const row of rows) {
2221 const rowLength = row.length;
2222 if (rowLength > inferredDomCols) {
2223 inferredDomCols = rowLength;
2224 }
2225 if (rowLength !== cols) {
2226 hasDomRows = true;
2227 }
2228 }
2229 }
2230 const hasVirtualizedGaps = hasDomRows && visibleItemCount < list.length;
2231 const verticalCols = inferredDomCols || cols;
2232 const navigateVertically = (direction) => {
2233 if (!hasDomRows || prevIndex === -1) {
2234 return void 0;
2235 }
2236 const currentRow = rowIndexMap[prevIndex];
2237 if (currentRow == null) {
2238 return void 0;
2239 }
2240 const colInRow = rows[currentRow].indexOf(prevIndex);
2241 const step = direction === "up" ? -1 : 1;
2242 for (let nextRow = currentRow + step, i = 0; i < rows.length; i += 1, nextRow += step) {
2243 if (nextRow < 0 || nextRow >= rows.length) {
2244 if (!loopFocus || hasVirtualizedGaps) {
2245 return void 0;
2246 }
2247 nextRow = nextRow < 0 ? rows.length - 1 : 0;
2248 if (onLoop) {
2249 const clampedCol = Math.min(colInRow, rows[nextRow].length - 1);
2250 const targetItemIndex = rows[nextRow][clampedCol] ?? rows[nextRow][0];
2251 const returnedItemIndex = onLoop(event, prevIndex, targetItemIndex);
2252 nextRow = rowIndexMap[returnedItemIndex] ?? nextRow;
2253 }
2254 }
2255 const targetRow = rows[nextRow];
2256 for (let col = Math.min(colInRow, targetRow.length - 1); col >= 0; col -= 1) {
2257 const candidate = targetRow[col];
2258 if (!isListIndexDisabled(list, candidate, disabledIndices)) {
2259 return candidate;
2260 }
2261 }
2262 }
2263 return void 0;
2264 };
2265 const navigateVerticallyWithInferredRows = (direction) => {
2266 if (!hasVirtualizedGaps || prevIndex === -1) {
2267 return void 0;
2268 }
2269 const colInRow = prevIndex % verticalCols;
2270 const rowStep = direction === "up" ? -verticalCols : verticalCols;
2271 const lastRowStart = maxIndex - maxIndex % verticalCols;
2272 const rowCount = floor(maxIndex / verticalCols) + 1;
2273 for (let rowStart = prevIndex - colInRow + rowStep, i = 0; i < rowCount; i += 1, rowStart += rowStep) {
2274 if (rowStart < 0 || rowStart > maxIndex) {
2275 if (!loopFocus) {
2276 return void 0;
2277 }
2278 rowStart = rowStart < 0 ? lastRowStart : 0;
2279 }
2280 const rowEnd = Math.min(rowStart + verticalCols - 1, maxIndex);
2281 for (let candidate = Math.min(rowStart + colInRow, rowEnd); candidate >= rowStart; candidate -= 1) {
2282 if (!isListIndexDisabled(list, candidate, disabledIndices)) {
2283 return candidate;
2284 }
2285 }
2286 }
2287 return void 0;
2288 };
2289 if (stop) {
2290 stopEvent(event);
2291 }
2292 const verticalCandidate = navigateVertically(verticalDirection) ?? navigateVerticallyWithInferredRows(verticalDirection);
2293 if (verticalCandidate !== void 0) {
2294 nextIndex = verticalCandidate;
2295 } else if (prevIndex === -1) {
2296 nextIndex = verticalDirection === "up" ? maxIndex : minIndex;
2297 } else {
2298 nextIndex = findNonDisabledListIndex(list, {
2299 startingIndex: prevIndex,
2300 amount: verticalCols,
2301 decrement: verticalDirection === "up",
2302 disabledIndices
2303 });
2304 if (loopFocus) {
2305 if (verticalDirection === "up" && (prevIndex - verticalCols < minIndex || nextIndex < 0)) {
2306 const col = prevIndex % verticalCols;
2307 const maxCol = maxIndex % verticalCols;
2308 const offset4 = maxIndex - (maxCol - col);
2309 if (maxCol === col) {
2310 nextIndex = maxIndex;
2311 } else {
2312 nextIndex = maxCol > col ? offset4 : offset4 - verticalCols;
2313 }
2314 if (onLoop) {
2315 nextIndex = onLoop(event, prevIndex, nextIndex);
2316 }
2317 }
2318 if (verticalDirection === "down" && prevIndex + verticalCols > maxIndex) {
2319 nextIndex = findNonDisabledListIndex(list, {
2320 startingIndex: prevIndex % verticalCols - verticalCols,
2321 amount: verticalCols,
2322 disabledIndices
2323 });
2324 if (onLoop) {
2325 nextIndex = onLoop(event, prevIndex, nextIndex);
2326 }
2327 }
2328 }
2329 }
2330 if (isIndexOutOfListBounds(list, nextIndex)) {
2331 nextIndex = prevIndex;
2332 }
2333 }
2334 if (orientation === "both") {
2335 const prevRow = floor(prevIndex / cols);
2336 if (event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT)) {
2337 if (stop) {
2338 stopEvent(event);
2339 }
2340 if (prevIndex % cols !== cols - 1) {
2341 nextIndex = findNonDisabledListIndex(list, {
2342 startingIndex: prevIndex,
2343 disabledIndices
2344 });
2345 if (loopFocus && isDifferentGridRow(nextIndex, cols, prevRow)) {
2346 nextIndex = findNonDisabledListIndex(list, {
2347 startingIndex: prevIndex - prevIndex % cols - 1,
2348 disabledIndices
2349 });
2350 if (onLoop) {
2351 nextIndex = onLoop(event, prevIndex, nextIndex);
2352 }
2353 }
2354 } else if (loopFocus) {
2355 nextIndex = findNonDisabledListIndex(list, {
2356 startingIndex: prevIndex - prevIndex % cols - 1,
2357 disabledIndices
2358 });
2359 if (onLoop) {
2360 nextIndex = onLoop(event, prevIndex, nextIndex);
2361 }
2362 }
2363 if (isDifferentGridRow(nextIndex, cols, prevRow)) {
2364 nextIndex = prevIndex;
2365 }
2366 }
2367 if (event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT)) {
2368 if (stop) {
2369 stopEvent(event);
2370 }
2371 if (prevIndex % cols !== 0) {
2372 nextIndex = findNonDisabledListIndex(list, {
2373 startingIndex: prevIndex,
2374 decrement: true,
2375 disabledIndices
2376 });
2377 if (loopFocus && isDifferentGridRow(nextIndex, cols, prevRow)) {
2378 nextIndex = findNonDisabledListIndex(list, {
2379 startingIndex: prevIndex + (cols - prevIndex % cols),
2380 decrement: true,
2381 disabledIndices
2382 });
2383 if (onLoop) {
2384 nextIndex = onLoop(event, prevIndex, nextIndex);
2385 }
2386 }
2387 } else if (loopFocus) {
2388 nextIndex = findNonDisabledListIndex(list, {
2389 startingIndex: prevIndex + (cols - prevIndex % cols),
2390 decrement: true,
2391 disabledIndices
2392 });
2393 if (onLoop) {
2394 nextIndex = onLoop(event, prevIndex, nextIndex);
2395 }
2396 }
2397 if (isDifferentGridRow(nextIndex, cols, prevRow)) {
2398 nextIndex = prevIndex;
2399 }
2400 }
2401 const lastRow = floor(maxIndex / cols) === prevRow;
2402 if (isIndexOutOfListBounds(list, nextIndex)) {
2403 if (loopFocus && lastRow) {
2404 nextIndex = event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT) ? maxIndex : findNonDisabledListIndex(list, {
2405 startingIndex: prevIndex - prevIndex % cols - 1,
2406 disabledIndices
2407 });
2408 if (onLoop) {
2409 nextIndex = onLoop(event, prevIndex, nextIndex);
2410 }
2411 } else {
2412 nextIndex = prevIndex;
2413 }
2414 }
2415 }
2416 return nextIndex;
2417 }
2418 function createGridCellMap(sizes, cols, dense) {
2419 const cellMap = [];
2420 let startIndex = 0;
2421 sizes.forEach(({
2422 width,
2423 height
2424 }, index2) => {
2425 if (width > cols) {
2426 if (true) {
2427 throw new Error(`[Floating UI]: Invalid grid - item width at index ${index2} is greater than grid columns`);
2428 }
2429 }
2430 let itemPlaced = false;
2431 if (dense) {
2432 startIndex = 0;
2433 }
2434 while (!itemPlaced) {
2435 const targetCells = [];
2436 for (let i = 0; i < width; i += 1) {
2437 for (let j = 0; j < height; j += 1) {
2438 targetCells.push(startIndex + i + j * cols);
2439 }
2440 }
2441 if (startIndex % cols + width <= cols && targetCells.every((cell) => cellMap[cell] == null)) {
2442 targetCells.forEach((cell) => {
2443 cellMap[cell] = index2;
2444 });
2445 itemPlaced = true;
2446 } else {
2447 startIndex += 1;
2448 }
2449 }
2450 });
2451 return [...cellMap];
2452 }
2453 function getGridCellIndexOfCorner(index2, sizes, cellMap, cols, corner) {
2454 if (index2 === -1) {
2455 return -1;
2456 }
2457 const firstCellIndex = cellMap.indexOf(index2);
2458 const sizeItem = sizes[index2];
2459 switch (corner) {
2460 case "tl":
2461 return firstCellIndex;
2462 case "tr":
2463 if (!sizeItem) {
2464 return firstCellIndex;
2465 }
2466 return firstCellIndex + sizeItem.width - 1;
2467 case "bl":
2468 if (!sizeItem) {
2469 return firstCellIndex;
2470 }
2471 return firstCellIndex + (sizeItem.height - 1) * cols;
2472 case "br":
2473 return cellMap.lastIndexOf(index2);
2474 default:
2475 return -1;
2476 }
2477 }
2478 function getGridCellIndices(indices, cellMap) {
2479 return cellMap.flatMap((index2, cellIndex) => indices.includes(index2) ? [cellIndex] : []);
2480 }
2481 function isListIndexDisabled(list, index2, disabledIndices) {
2482 const isExplicitlyDisabled = typeof disabledIndices === "function" ? disabledIndices(index2) : disabledIndices?.includes(index2) ?? false;
2483 if (isExplicitlyDisabled) {
2484 return true;
2485 }
2486 const element = list[index2];
2487 if (!element) {
2488 return false;
2489 }
2490 if (!isElementVisible(element)) {
2491 return true;
2492 }
2493 return !disabledIndices && (element.hasAttribute("disabled") || element.getAttribute("aria-disabled") === "true");
2494 }
2495 function isHiddenByStyles(styles) {
2496 return styles.visibility === "hidden" || styles.visibility === "collapse";
2497 }
2498 function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) {
2499 if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) {
2500 return false;
2501 }
2502 if (typeof element.checkVisibility === "function") {
2503 return element.checkVisibility();
2504 }
2505 return styles.display !== "none" && styles.display !== "contents";
2506 }
2507
2508 // node_modules/@base-ui/utils/esm/owner.js
2509 function ownerDocument(node) {
2510 return node?.ownerDocument || document;
2511 }
2512
2513 // node_modules/@base-ui/react/esm/floating-ui-react/utils/tabbable.js
2514 var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';
2515 function getParentElement(element) {
2516 const assignedSlot = element.assignedSlot;
2517 if (assignedSlot) {
2518 return assignedSlot;
2519 }
2520 if (element.parentElement) {
2521 return element.parentElement;
2522 }
2523 const rootNode = element.getRootNode();
2524 return isShadowRoot(rootNode) ? rootNode.host : null;
2525 }
2526 function getDetailsSummary(details) {
2527 for (const child of Array.from(details.children)) {
2528 if (getNodeName(child) === "summary") {
2529 return child;
2530 }
2531 }
2532 return null;
2533 }
2534 function isWithinOpenDetailsSummary(element, details) {
2535 const summary = getDetailsSummary(details);
2536 return !!summary && (element === summary || contains(summary, element));
2537 }
2538 function isFocusableCandidate(element) {
2539 const nodeName = element ? getNodeName(element) : "";
2540 return element != null && element.matches(CANDIDATE_SELECTOR) && (nodeName !== "summary" || element.parentElement != null && getNodeName(element.parentElement) === "details" && getDetailsSummary(element.parentElement) === element) && (nodeName !== "details" || getDetailsSummary(element) == null) && (nodeName !== "input" || element.type !== "hidden");
2541 }
2542 function isFocusableElement(element) {
2543 if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) {
2544 return false;
2545 }
2546 for (let current = element; current; current = getParentElement(current)) {
2547 const isAncestor = current !== element;
2548 const isSlot = getNodeName(current) === "slot";
2549 if (current.hasAttribute("inert")) {
2550 return false;
2551 }
2552 if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) {
2553 return false;
2554 }
2555 }
2556 return true;
2557 }
2558 function isVisibleInTabbableTree(element, isAncestor) {
2559 const styles = getComputedStyle2(element);
2560 if (!isAncestor) {
2561 return isElementVisible(element, styles);
2562 }
2563 return styles.display !== "none";
2564 }
2565 function getTabIndex(element) {
2566 const tabIndex = element.tabIndex;
2567 if (tabIndex < 0) {
2568 const nodeName = getNodeName(element);
2569 if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) {
2570 return 0;
2571 }
2572 }
2573 return tabIndex;
2574 }
2575 function getNamedRadioInput(element) {
2576 if (getNodeName(element) !== "input") {
2577 return null;
2578 }
2579 const input = element;
2580 return input.type === "radio" && input.name !== "" ? input : null;
2581 }
2582 function isTabbableRadio(element, candidates) {
2583 const input = getNamedRadioInput(element);
2584 if (!input) {
2585 return true;
2586 }
2587 const checkedRadio = candidates.find((candidate) => {
2588 const radio = getNamedRadioInput(candidate);
2589 return radio?.name === input.name && radio.form === input.form && radio.checked;
2590 });
2591 if (checkedRadio) {
2592 return checkedRadio === input;
2593 }
2594 return candidates.find((candidate) => {
2595 const radio = getNamedRadioInput(candidate);
2596 return radio?.name === input.name && radio.form === input.form;
2597 }) === input;
2598 }
2599 function getComposedChildren(container) {
2600 if (isHTMLElement(container) && getNodeName(container) === "slot") {
2601 const assignedElements = container.assignedElements({
2602 flatten: true
2603 });
2604 if (assignedElements.length > 0) {
2605 return assignedElements;
2606 }
2607 }
2608 if (isHTMLElement(container) && container.shadowRoot) {
2609 return Array.from(container.shadowRoot.children);
2610 }
2611 return Array.from(container.children);
2612 }
2613 function appendCandidates(container, list) {
2614 getComposedChildren(container).forEach((child) => {
2615 if (isFocusableCandidate(child)) {
2616 list.push(child);
2617 }
2618 appendCandidates(child, list);
2619 });
2620 }
2621 function appendMatchingElements(container, selector, list) {
2622 getComposedChildren(container).forEach((child) => {
2623 if (isHTMLElement(child) && child.matches(selector)) {
2624 list.push(child);
2625 }
2626 appendMatchingElements(child, selector, list);
2627 });
2628 }
2629 function isTabbable(element) {
2630 return isFocusableElement(element) && getTabIndex(element) >= 0;
2631 }
2632 function focusable(container) {
2633 const candidates = [];
2634 appendCandidates(container, candidates);
2635 return candidates.filter(isFocusableElement);
2636 }
2637 function tabbable(container) {
2638 const candidates = focusable(container);
2639 return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates));
2640 }
2641 function getTabbableIn(container, dir) {
2642 const list = tabbable(container);
2643 const len = list.length;
2644 if (len === 0) {
2645 return void 0;
2646 }
2647 const active = activeElement(ownerDocument(container));
2648 const index2 = list.indexOf(active);
2649 const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir;
2650 return list[nextIndex];
2651 }
2652 function getNextTabbable(referenceElement) {
2653 return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement;
2654 }
2655 function getPreviousTabbable(referenceElement) {
2656 return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement;
2657 }
2658 function isOutsideEvent(event, container) {
2659 const containerElement = container || event.currentTarget;
2660 const relatedTarget = event.relatedTarget;
2661 return !relatedTarget || !contains(containerElement, relatedTarget);
2662 }
2663 function disableFocusInside(container) {
2664 const tabbableElements = tabbable(container);
2665 tabbableElements.forEach((element) => {
2666 element.dataset.tabindex = element.getAttribute("tabindex") || "";
2667 element.setAttribute("tabindex", "-1");
2668 });
2669 }
2670 function enableFocusInside(container) {
2671 const elements = [];
2672 appendMatchingElements(container, "[data-tabindex]", elements);
2673 elements.forEach((element) => {
2674 const tabindex = element.dataset.tabindex;
2675 delete element.dataset.tabindex;
2676 if (tabindex) {
2677 element.setAttribute("tabindex", tabindex);
2678 } else {
2679 element.removeAttribute("tabindex");
2680 }
2681 });
2682 }
2683
2684 // node_modules/@base-ui/utils/esm/addEventListener.js
2685 function addEventListener(target, type, listener, options) {
2686 target.addEventListener(type, listener, options);
2687 return () => {
2688 target.removeEventListener(type, listener, options);
2689 };
2690 }
2691
2692 // node_modules/@base-ui/utils/esm/useValueAsRef.js
2693 function useValueAsRef(value) {
2694 const latest = useRefWithInit(createLatestRef, value).current;
2695 latest.next = value;
2696 useIsoLayoutEffect(latest.effect);
2697 return latest;
2698 }
2699 function createLatestRef(value) {
2700 const latest = {
2701 current: value,
2702 next: value,
2703 effect: () => {
2704 latest.current = latest.next;
2705 }
2706 };
2707 return latest;
2708 }
2709
2710 // node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js
2711 var React18 = __toESM(require_react(), 1);
2712
2713 // node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js
2714 var ReactDOM = __toESM(require_react_dom(), 1);
2715
2716 // node_modules/@base-ui/react/esm/utils/resolveRef.js
2717 function resolveRef(maybeRef) {
2718 if (maybeRef == null) {
2719 return maybeRef;
2720 }
2721 return "current" in maybeRef ? maybeRef.current : maybeRef;
2722 }
2723
2724 // node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js
2725 function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, treatAbortedAsFinished = true) {
2726 const frame = useAnimationFrame();
2727 return useStableCallback((fnToExecute, signal = null) => {
2728 frame.cancel();
2729 const element = resolveRef(elementOrRef);
2730 if (element == null) {
2731 return;
2732 }
2733 const resolvedElement = element;
2734 const done = () => {
2735 ReactDOM.flushSync(fnToExecute);
2736 };
2737 if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) {
2738 fnToExecute();
2739 return;
2740 }
2741 function exec() {
2742 Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => {
2743 if (!signal?.aborted) {
2744 done();
2745 }
2746 }).catch(() => {
2747 if (treatAbortedAsFinished) {
2748 if (!signal?.aborted) {
2749 done();
2750 }
2751 return;
2752 }
2753 const currentAnimations = resolvedElement.getAnimations();
2754 if (!signal?.aborted && currentAnimations.length > 0 && currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) {
2755 exec();
2756 }
2757 });
2758 }
2759 if (waitForStartingStyleRemoved) {
2760 const startingStyleAttribute = TransitionStatusDataAttributes.startingStyle;
2761 if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
2762 frame.request(exec);
2763 return;
2764 }
2765 const attributeObserver = new MutationObserver(() => {
2766 if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
2767 attributeObserver.disconnect();
2768 exec();
2769 }
2770 });
2771 attributeObserver.observe(resolvedElement, {
2772 attributes: true,
2773 attributeFilter: [startingStyleAttribute]
2774 });
2775 signal?.addEventListener("abort", () => attributeObserver.disconnect(), {
2776 once: true
2777 });
2778 return;
2779 }
2780 frame.request(exec);
2781 });
2782 }
2783
2784 // node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js
2785 function useOpenChangeComplete(parameters) {
2786 const {
2787 enabled = true,
2788 open,
2789 ref,
2790 onComplete: onCompleteParam
2791 } = parameters;
2792 const onComplete = useStableCallback(onCompleteParam);
2793 const runOnceAnimationsFinish = useAnimationsFinished(ref, open, false);
2794 React18.useEffect(() => {
2795 if (!enabled) {
2796 return void 0;
2797 }
2798 const abortController = new AbortController();
2799 runOnceAnimationsFinish(onComplete, abortController.signal);
2800 return () => {
2801 abortController.abort();
2802 };
2803 }, [enabled, open, onComplete, runOnceAnimationsFinish]);
2804 }
2805
2806 // node_modules/@base-ui/utils/esm/useOnFirstRender.js
2807 var React19 = __toESM(require_react(), 1);
2808 function useOnFirstRender(fn) {
2809 const ref = React19.useRef(true);
2810 if (ref.current) {
2811 ref.current = false;
2812 fn();
2813 }
2814 }
2815
2816 // node_modules/@base-ui/utils/esm/useTimeout.js
2817 var EMPTY3 = 0;
2818 var Timeout = class _Timeout {
2819 static create() {
2820 return new _Timeout();
2821 }
2822 currentId = EMPTY3;
2823 /**
2824 * Executes `fn` after `delay`, clearing any previously scheduled call.
2825 */
2826 start(delay, fn) {
2827 this.clear();
2828 this.currentId = setTimeout(() => {
2829 this.currentId = EMPTY3;
2830 fn();
2831 }, delay);
2832 }
2833 isStarted() {
2834 return this.currentId !== EMPTY3;
2835 }
2836 clear = () => {
2837 if (this.currentId !== EMPTY3) {
2838 clearTimeout(this.currentId);
2839 this.currentId = EMPTY3;
2840 }
2841 };
2842 disposeEffect = () => {
2843 return this.clear;
2844 };
2845 };
2846 function useTimeout() {
2847 const timeout = useRefWithInit(Timeout.create).current;
2848 useOnMount(timeout.disposeEffect);
2849 return timeout;
2850 }
2851
2852 // node_modules/@base-ui/utils/esm/useScrollLock.js
2853 var originalHtmlStyles = {};
2854 var originalBodyStyles = {};
2855 var originalHtmlScrollBehavior = "";
2856 function hasInsetScrollbars(referenceElement) {
2857 if (typeof document === "undefined") {
2858 return false;
2859 }
2860 const doc = ownerDocument(referenceElement);
2861 const win = getWindow(doc);
2862 return win.innerWidth - doc.documentElement.clientWidth > 0;
2863 }
2864 function supportsStableScrollbarGutter(referenceElement) {
2865 const supported = typeof CSS !== "undefined" && CSS.supports && CSS.supports("scrollbar-gutter", "stable");
2866 if (!supported || typeof document === "undefined") {
2867 return false;
2868 }
2869 const doc = ownerDocument(referenceElement);
2870 const html = doc.documentElement;
2871 const body = doc.body;
2872 const scrollContainer = isOverflowElement(html) ? html : body;
2873 const originalScrollContainerOverflowY = scrollContainer.style.overflowY;
2874 const originalHtmlStyleGutter = html.style.scrollbarGutter;
2875 html.style.scrollbarGutter = "stable";
2876 scrollContainer.style.overflowY = "scroll";
2877 const before = scrollContainer.offsetWidth;
2878 scrollContainer.style.overflowY = "hidden";
2879 const after = scrollContainer.offsetWidth;
2880 scrollContainer.style.overflowY = originalScrollContainerOverflowY;
2881 html.style.scrollbarGutter = originalHtmlStyleGutter;
2882 return before === after;
2883 }
2884 function preventScrollOverlayScrollbars(referenceElement) {
2885 const doc = ownerDocument(referenceElement);
2886 const html = doc.documentElement;
2887 const body = doc.body;
2888 const elementToLock = isOverflowElement(html) ? html : body;
2889 const originalElementToLockStyles = {
2890 overflowY: elementToLock.style.overflowY,
2891 overflowX: elementToLock.style.overflowX
2892 };
2893 Object.assign(elementToLock.style, {
2894 overflowY: "hidden",
2895 overflowX: "hidden"
2896 });
2897 return () => {
2898 Object.assign(elementToLock.style, originalElementToLockStyles);
2899 };
2900 }
2901 function preventScrollInsetScrollbars(referenceElement) {
2902 const doc = ownerDocument(referenceElement);
2903 const html = doc.documentElement;
2904 const body = doc.body;
2905 const win = getWindow(html);
2906 let scrollTop = 0;
2907 let scrollLeft = 0;
2908 let updateGutterOnly = false;
2909 const resizeFrame = AnimationFrame.create();
2910 if (isWebKit2 && (win.visualViewport?.scale ?? 1) !== 1) {
2911 return () => {
2912 };
2913 }
2914 function lockScroll() {
2915 const htmlStyles = win.getComputedStyle(html);
2916 const bodyStyles = win.getComputedStyle(body);
2917 const htmlScrollbarGutterValue = htmlStyles.scrollbarGutter || "";
2918 const hasBothEdges = htmlScrollbarGutterValue.includes("both-edges");
2919 const scrollbarGutterValue = hasBothEdges ? "stable both-edges" : "stable";
2920 scrollTop = html.scrollTop;
2921 scrollLeft = html.scrollLeft;
2922 originalHtmlStyles = {
2923 scrollbarGutter: html.style.scrollbarGutter,
2924 overflowY: html.style.overflowY,
2925 overflowX: html.style.overflowX
2926 };
2927 originalHtmlScrollBehavior = html.style.scrollBehavior;
2928 originalBodyStyles = {
2929 position: body.style.position,
2930 height: body.style.height,
2931 width: body.style.width,
2932 boxSizing: body.style.boxSizing,
2933 overflowY: body.style.overflowY,
2934 overflowX: body.style.overflowX,
2935 scrollBehavior: body.style.scrollBehavior
2936 };
2937 const isScrollableY = html.scrollHeight > html.clientHeight;
2938 const isScrollableX = html.scrollWidth > html.clientWidth;
2939 const hasConstantOverflowY = htmlStyles.overflowY === "scroll" || bodyStyles.overflowY === "scroll";
2940 const hasConstantOverflowX = htmlStyles.overflowX === "scroll" || bodyStyles.overflowX === "scroll";
2941 const scrollbarWidth = Math.max(0, win.innerWidth - body.clientWidth);
2942 const scrollbarHeight = Math.max(0, win.innerHeight - body.clientHeight);
2943 const marginY = parseFloat(bodyStyles.marginTop) + parseFloat(bodyStyles.marginBottom);
2944 const marginX = parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight);
2945 const elementToLock = isOverflowElement(html) ? html : body;
2946 updateGutterOnly = supportsStableScrollbarGutter(referenceElement);
2947 if (updateGutterOnly) {
2948 html.style.scrollbarGutter = scrollbarGutterValue;
2949 elementToLock.style.overflowY = "hidden";
2950 elementToLock.style.overflowX = "hidden";
2951 return;
2952 }
2953 Object.assign(html.style, {
2954 scrollbarGutter: scrollbarGutterValue,
2955 overflowY: "hidden",
2956 overflowX: "hidden"
2957 });
2958 if (isScrollableY || hasConstantOverflowY) {
2959 html.style.overflowY = "scroll";
2960 }
2961 if (isScrollableX || hasConstantOverflowX) {
2962 html.style.overflowX = "scroll";
2963 }
2964 Object.assign(body.style, {
2965 position: "relative",
2966 height: marginY || scrollbarHeight ? `calc(100dvh - ${marginY + scrollbarHeight}px)` : "100dvh",
2967 width: marginX || scrollbarWidth ? `calc(100vw - ${marginX + scrollbarWidth}px)` : "100vw",
2968 boxSizing: "border-box",
2969 overflow: "hidden",
2970 scrollBehavior: "unset"
2971 });
2972 body.scrollTop = scrollTop;
2973 body.scrollLeft = scrollLeft;
2974 html.setAttribute("data-base-ui-scroll-locked", "");
2975 html.style.scrollBehavior = "unset";
2976 }
2977 function cleanup() {
2978 Object.assign(html.style, originalHtmlStyles);
2979 Object.assign(body.style, originalBodyStyles);
2980 if (!updateGutterOnly) {
2981 html.scrollTop = scrollTop;
2982 html.scrollLeft = scrollLeft;
2983 html.removeAttribute("data-base-ui-scroll-locked");
2984 html.style.scrollBehavior = originalHtmlScrollBehavior;
2985 }
2986 }
2987 function handleResize() {
2988 cleanup();
2989 resizeFrame.request(lockScroll);
2990 }
2991 lockScroll();
2992 const unsubscribeResize = addEventListener(win, "resize", handleResize);
2993 return () => {
2994 resizeFrame.cancel();
2995 cleanup();
2996 if (typeof win.removeEventListener === "function") {
2997 unsubscribeResize();
2998 }
2999 };
3000 }
3001 var ScrollLocker = class {
3002 lockCount = 0;
3003 restore = null;
3004 timeoutLock = Timeout.create();
3005 timeoutUnlock = Timeout.create();
3006 acquire(referenceElement) {
3007 this.lockCount += 1;
3008 if (this.lockCount === 1 && this.restore === null) {
3009 this.timeoutLock.start(0, () => this.lock(referenceElement));
3010 }
3011 return this.release;
3012 }
3013 release = () => {
3014 this.lockCount -= 1;
3015 if (this.lockCount === 0 && this.restore) {
3016 this.timeoutUnlock.start(0, this.unlock);
3017 }
3018 };
3019 unlock = () => {
3020 if (this.lockCount === 0 && this.restore) {
3021 this.restore?.();
3022 this.restore = null;
3023 }
3024 };
3025 lock(referenceElement) {
3026 if (this.lockCount === 0 || this.restore !== null) {
3027 return;
3028 }
3029 const doc = ownerDocument(referenceElement);
3030 const html = doc.documentElement;
3031 const htmlOverflowY = getWindow(html).getComputedStyle(html).overflowY;
3032 if (htmlOverflowY === "hidden" || htmlOverflowY === "clip") {
3033 this.restore = NOOP;
3034 return;
3035 }
3036 const hasOverlayScrollbars = isIOS || !hasInsetScrollbars(referenceElement);
3037 this.restore = hasOverlayScrollbars ? preventScrollOverlayScrollbars(referenceElement) : preventScrollInsetScrollbars(referenceElement);
3038 }
3039 };
3040 var SCROLL_LOCKER = new ScrollLocker();
3041 function useScrollLock(enabled = true, referenceElement = null) {
3042 useIsoLayoutEffect(() => {
3043 if (!enabled) {
3044 return void 0;
3045 }
3046 return SCROLL_LOCKER.acquire(referenceElement);
3047 }, [enabled, referenceElement]);
3048 }
3049
3050 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingDelayGroup.js
3051 var React20 = __toESM(require_react(), 1);
3052
3053 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverShared.js
3054 function resolveValue(value, pointerType) {
3055 if (pointerType != null && !isMouseLikePointerType(pointerType)) {
3056 return 0;
3057 }
3058 if (typeof value === "function") {
3059 return value();
3060 }
3061 return value;
3062 }
3063 function getDelay(value, prop, pointerType) {
3064 const result = resolveValue(value, pointerType);
3065 if (typeof result === "number") {
3066 return result;
3067 }
3068 return result?.[prop];
3069 }
3070 function getRestMs(value) {
3071 if (typeof value === "function") {
3072 return value();
3073 }
3074 return value;
3075 }
3076 function isClickLikeOpenEvent(openEventType, interactedInside) {
3077 return interactedInside || openEventType === "click" || openEventType === "mousedown";
3078 }
3079 function isHoverOpenEvent(openEventType) {
3080 return openEventType?.includes("mouse") && openEventType !== "mousedown";
3081 }
3082
3083 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingDelayGroup.js
3084 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
3085 var FloatingDelayGroupContext = /* @__PURE__ */ React20.createContext({
3086 hasProvider: false,
3087 timeoutMs: 0,
3088 delayRef: {
3089 current: 0
3090 },
3091 initialDelayRef: {
3092 current: 0
3093 },
3094 timeout: new Timeout(),
3095 currentIdRef: {
3096 current: null
3097 },
3098 currentContextRef: {
3099 current: null
3100 }
3101 });
3102 if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext";
3103 function FloatingDelayGroup(props) {
3104 const {
3105 children,
3106 delay,
3107 timeoutMs = 0
3108 } = props;
3109 const delayRef = React20.useRef(delay);
3110 const initialDelayRef = React20.useRef(delay);
3111 const currentIdRef = React20.useRef(null);
3112 const currentContextRef = React20.useRef(null);
3113 const timeout = useTimeout();
3114 return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(FloatingDelayGroupContext.Provider, {
3115 value: React20.useMemo(() => ({
3116 hasProvider: true,
3117 delayRef,
3118 initialDelayRef,
3119 currentIdRef,
3120 timeoutMs,
3121 currentContextRef,
3122 timeout
3123 }), [timeoutMs, timeout]),
3124 children
3125 });
3126 }
3127 function useDelayGroup(context, options = {
3128 open: false
3129 }) {
3130 const {
3131 open
3132 } = options;
3133 const store = "rootStore" in context ? context.rootStore : context;
3134 const floatingId = store.useState("floatingId");
3135 const groupContext = React20.useContext(FloatingDelayGroupContext);
3136 const {
3137 currentIdRef,
3138 delayRef,
3139 timeoutMs,
3140 initialDelayRef,
3141 currentContextRef,
3142 hasProvider,
3143 timeout
3144 } = groupContext;
3145 const [isInstantPhase, setIsInstantPhase] = React20.useState(false);
3146 useIsoLayoutEffect(() => {
3147 function unset() {
3148 setIsInstantPhase(false);
3149 currentContextRef.current?.setIsInstantPhase(false);
3150 currentIdRef.current = null;
3151 currentContextRef.current = null;
3152 delayRef.current = initialDelayRef.current;
3153 }
3154 if (!currentIdRef.current) {
3155 return void 0;
3156 }
3157 if (!open && currentIdRef.current === floatingId) {
3158 setIsInstantPhase(false);
3159 if (timeoutMs) {
3160 const closingId = floatingId;
3161 timeout.start(timeoutMs, () => {
3162 if (store.select("open") || currentIdRef.current && currentIdRef.current !== closingId) {
3163 return;
3164 }
3165 unset();
3166 });
3167 return () => {
3168 timeout.clear();
3169 };
3170 }
3171 unset();
3172 }
3173 return void 0;
3174 }, [open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store]);
3175 useIsoLayoutEffect(() => {
3176 if (!open) {
3177 return;
3178 }
3179 const prevContext = currentContextRef.current;
3180 const prevId = currentIdRef.current;
3181 timeout.clear();
3182 currentContextRef.current = {
3183 onOpenChange: store.setOpen,
3184 setIsInstantPhase
3185 };
3186 currentIdRef.current = floatingId;
3187 delayRef.current = {
3188 open: 0,
3189 close: getDelay(initialDelayRef.current, "close")
3190 };
3191 if (prevId !== null && prevId !== floatingId) {
3192 setIsInstantPhase(true);
3193 prevContext?.setIsInstantPhase(true);
3194 prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none));
3195 } else {
3196 setIsInstantPhase(false);
3197 prevContext?.setIsInstantPhase(false);
3198 }
3199 }, [open, floatingId, store, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]);
3200 useIsoLayoutEffect(() => {
3201 return () => {
3202 currentContextRef.current = null;
3203 };
3204 }, [currentContextRef]);
3205 return React20.useMemo(() => ({
3206 hasProvider,
3207 delayRef,
3208 isInstantPhase
3209 }), [hasProvider, delayRef, isInstantPhase]);
3210 }
3211
3212 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.js
3213 var React24 = __toESM(require_react(), 1);
3214
3215 // node_modules/@base-ui/utils/esm/mergeCleanups.js
3216 function mergeCleanups(...cleanups) {
3217 return () => {
3218 for (let i = 0; i < cleanups.length; i += 1) {
3219 const cleanup = cleanups[i];
3220 if (cleanup) {
3221 cleanup();
3222 }
3223 }
3224 };
3225 }
3226
3227 // node_modules/@base-ui/react/esm/utils/FocusGuard.js
3228 var React21 = __toESM(require_react(), 1);
3229
3230 // node_modules/@base-ui/utils/esm/visuallyHidden.js
3231 var visuallyHiddenBase = {
3232 clipPath: "inset(50%)",
3233 overflow: "hidden",
3234 whiteSpace: "nowrap",
3235 border: 0,
3236 padding: 0,
3237 width: 1,
3238 height: 1,
3239 margin: -1
3240 };
3241 var visuallyHidden = {
3242 ...visuallyHiddenBase,
3243 position: "fixed",
3244 top: 0,
3245 left: 0
3246 };
3247 var visuallyHiddenInput = {
3248 ...visuallyHiddenBase,
3249 position: "absolute"
3250 };
3251
3252 // node_modules/@base-ui/react/esm/utils/FocusGuard.js
3253 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
3254 var FocusGuard = /* @__PURE__ */ React21.forwardRef(function FocusGuard2(props, ref) {
3255 const [role, setRole] = React21.useState();
3256 useIsoLayoutEffect(() => {
3257 if (isSafari) {
3258 setRole("button");
3259 }
3260 }, []);
3261 const restProps = {
3262 tabIndex: 0,
3263 // Role is only for VoiceOver
3264 role
3265 };
3266 return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", {
3267 ...props,
3268 ref,
3269 style: visuallyHidden,
3270 "aria-hidden": role ? void 0 : true,
3271 ...restProps,
3272 "data-base-ui-focus-guard": ""
3273 });
3274 });
3275 if (true) FocusGuard.displayName = "FocusGuard";
3276
3277 // node_modules/@base-ui/react/esm/floating-ui-react/utils/createAttribute.js
3278 function createAttribute(name) {
3279 return `data-base-ui-${name}`;
3280 }
3281
3282 // node_modules/@base-ui/react/esm/floating-ui-react/utils/enqueueFocus.js
3283 var rafId = 0;
3284 function enqueueFocus(el, options = {}) {
3285 const {
3286 preventScroll = false,
3287 sync = false,
3288 shouldFocus
3289 } = options;
3290 cancelAnimationFrame(rafId);
3291 function exec() {
3292 if (shouldFocus && !shouldFocus()) {
3293 return;
3294 }
3295 el?.focus({
3296 preventScroll
3297 });
3298 }
3299 if (sync) {
3300 exec();
3301 return NOOP;
3302 }
3303 const currentRafId = requestAnimationFrame(exec);
3304 rafId = currentRafId;
3305 return () => {
3306 if (rafId === currentRafId) {
3307 cancelAnimationFrame(currentRafId);
3308 rafId = 0;
3309 }
3310 };
3311 }
3312
3313 // node_modules/@base-ui/react/esm/floating-ui-react/utils/markOthers.js
3314 var counters = {
3315 inert: /* @__PURE__ */ new WeakMap(),
3316 "aria-hidden": /* @__PURE__ */ new WeakMap()
3317 };
3318 var markerName = "data-base-ui-inert";
3319 var uncontrolledElementsSets = {
3320 inert: /* @__PURE__ */ new WeakSet(),
3321 "aria-hidden": /* @__PURE__ */ new WeakSet()
3322 };
3323 var markerCounterMap = /* @__PURE__ */ new WeakMap();
3324 var lockCount = 0;
3325 function getUncontrolledElementsSet(controlAttribute) {
3326 return uncontrolledElementsSets[controlAttribute];
3327 }
3328 function unwrapHost(node) {
3329 if (!node) {
3330 return null;
3331 }
3332 return isShadowRoot(node) ? node.host : unwrapHost(node.parentNode);
3333 }
3334 var correctElements = (parent, targets) => targets.map((target) => {
3335 if (parent.contains(target)) {
3336 return target;
3337 }
3338 const correctedTarget = unwrapHost(target);
3339 if (parent.contains(correctedTarget)) {
3340 return correctedTarget;
3341 }
3342 return null;
3343 }).filter((x) => x != null);
3344 var buildKeepSet = (targets) => {
3345 const keep = /* @__PURE__ */ new Set();
3346 targets.forEach((target) => {
3347 let node = target;
3348 while (node && !keep.has(node)) {
3349 keep.add(node);
3350 node = node.parentNode;
3351 }
3352 });
3353 return keep;
3354 };
3355 var collectOutsideElements = (root, keepElements, stopElements) => {
3356 const outside = [];
3357 const walk = (parent) => {
3358 if (!parent || stopElements.has(parent)) {
3359 return;
3360 }
3361 Array.from(parent.children).forEach((node) => {
3362 if (getNodeName(node) === "script") {
3363 return;
3364 }
3365 if (keepElements.has(node)) {
3366 walk(node);
3367 } else {
3368 outside.push(node);
3369 }
3370 });
3371 };
3372 walk(root);
3373 return outside;
3374 };
3375 function applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert, {
3376 mark = true,
3377 markerIgnoreElements = []
3378 }) {
3379 const controlAttribute = inert ? "inert" : ariaHidden ? "aria-hidden" : null;
3380 let counterMap = null;
3381 let uncontrolledElementsSet = null;
3382 const avoidElements = correctElements(body, uncorrectedAvoidElements);
3383 const markerIgnoreTargets = mark ? correctElements(body, markerIgnoreElements) : [];
3384 const markerIgnoreSet = new Set(markerIgnoreTargets);
3385 const markerTargets = mark ? collectOutsideElements(body, buildKeepSet(avoidElements), new Set(avoidElements)).filter((target) => !markerIgnoreSet.has(target)) : [];
3386 const hiddenElements = [];
3387 const markedElements = [];
3388 if (controlAttribute) {
3389 const map = counters[controlAttribute];
3390 const currentUncontrolledElementsSet = getUncontrolledElementsSet(controlAttribute);
3391 uncontrolledElementsSet = currentUncontrolledElementsSet;
3392 counterMap = map;
3393 const ariaLiveElements = correctElements(body, Array.from(body.querySelectorAll("[aria-live]")));
3394 const controlElements = avoidElements.concat(ariaLiveElements);
3395 const controlTargets = collectOutsideElements(body, buildKeepSet(controlElements), new Set(controlElements));
3396 controlTargets.forEach((node) => {
3397 const attr2 = node.getAttribute(controlAttribute);
3398 const alreadyHidden = attr2 !== null && attr2 !== "false";
3399 const counterValue = (map.get(node) || 0) + 1;
3400 map.set(node, counterValue);
3401 hiddenElements.push(node);
3402 if (counterValue === 1 && alreadyHidden) {
3403 currentUncontrolledElementsSet.add(node);
3404 }
3405 if (!alreadyHidden) {
3406 node.setAttribute(controlAttribute, controlAttribute === "inert" ? "" : "true");
3407 }
3408 });
3409 }
3410 if (mark) {
3411 markerTargets.forEach((node) => {
3412 const markerValue = (markerCounterMap.get(node) || 0) + 1;
3413 markerCounterMap.set(node, markerValue);
3414 markedElements.push(node);
3415 if (markerValue === 1) {
3416 node.setAttribute(markerName, "");
3417 }
3418 });
3419 }
3420 lockCount += 1;
3421 return () => {
3422 if (counterMap) {
3423 hiddenElements.forEach((element) => {
3424 const currentCounterValue = counterMap.get(element) || 0;
3425 const counterValue = currentCounterValue - 1;
3426 counterMap.set(element, counterValue);
3427 if (!counterValue) {
3428 if (!uncontrolledElementsSet?.has(element) && controlAttribute) {
3429 element.removeAttribute(controlAttribute);
3430 }
3431 uncontrolledElementsSet?.delete(element);
3432 }
3433 });
3434 }
3435 if (mark) {
3436 markedElements.forEach((element) => {
3437 const markerValue = (markerCounterMap.get(element) || 0) - 1;
3438 markerCounterMap.set(element, markerValue);
3439 if (!markerValue) {
3440 element.removeAttribute(markerName);
3441 }
3442 });
3443 }
3444 lockCount -= 1;
3445 if (!lockCount) {
3446 counters.inert = /* @__PURE__ */ new WeakMap();
3447 counters["aria-hidden"] = /* @__PURE__ */ new WeakMap();
3448 uncontrolledElementsSets.inert = /* @__PURE__ */ new WeakSet();
3449 uncontrolledElementsSets["aria-hidden"] = /* @__PURE__ */ new WeakSet();
3450 markerCounterMap = /* @__PURE__ */ new WeakMap();
3451 }
3452 };
3453 }
3454 function markOthers(avoidElements, options = {}) {
3455 const {
3456 ariaHidden = false,
3457 inert = false,
3458 mark = true,
3459 markerIgnoreElements = []
3460 } = options;
3461 const body = ownerDocument(avoidElements[0]).body;
3462 return applyAttributeToOthers(avoidElements, body, ariaHidden, inert, {
3463 mark,
3464 markerIgnoreElements
3465 });
3466 }
3467
3468 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js
3469 var React22 = __toESM(require_react(), 1);
3470 var ReactDOM2 = __toESM(require_react_dom(), 1);
3471
3472 // node_modules/@base-ui/react/esm/internals/constants.js
3473 var DISABLED_TRANSITIONS_STYLE = {
3474 style: {
3475 transition: "none"
3476 }
3477 };
3478 var CLICK_TRIGGER_IDENTIFIER = "data-base-ui-click-trigger";
3479 var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore";
3480 var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore";
3481 var BASE_UI_SWIPE_IGNORE_SELECTOR = `[${BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`;
3482 var LEGACY_SWIPE_IGNORE_SELECTOR = `[${LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`;
3483 var DROPDOWN_COLLISION_AVOIDANCE = {
3484 fallbackAxisSide: "none"
3485 };
3486 var POPUP_COLLISION_AVOIDANCE = {
3487 fallbackAxisSide: "end"
3488 };
3489 var ownerVisuallyHidden = {
3490 clipPath: "inset(50%)",
3491 position: "fixed",
3492 top: 0,
3493 left: 0
3494 };
3495
3496 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js
3497 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
3498 var PortalContext = /* @__PURE__ */ React22.createContext(null);
3499 if (true) PortalContext.displayName = "PortalContext";
3500 var usePortalContext = () => React22.useContext(PortalContext);
3501 var attr = createAttribute("portal");
3502 function useFloatingPortalNode(props = {}) {
3503 const {
3504 ref,
3505 container: containerProp,
3506 componentProps = EMPTY_OBJECT,
3507 elementProps
3508 } = props;
3509 const uniqueId = useId();
3510 const portalContext = usePortalContext();
3511 const parentPortalNode = portalContext?.portalNode;
3512 const [containerElement, setContainerElement] = React22.useState(null);
3513 const [portalNode, setPortalNode] = React22.useState(null);
3514 const setPortalNodeRef = useStableCallback((node) => {
3515 if (node !== null) {
3516 setPortalNode(node);
3517 }
3518 });
3519 const containerRef = React22.useRef(null);
3520 useIsoLayoutEffect(() => {
3521 if (containerProp === null) {
3522 if (containerRef.current) {
3523 containerRef.current = null;
3524 setPortalNode(null);
3525 setContainerElement(null);
3526 }
3527 return;
3528 }
3529 if (uniqueId == null) {
3530 return;
3531 }
3532 const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body;
3533 if (resolvedContainer == null) {
3534 if (containerRef.current) {
3535 containerRef.current = null;
3536 setPortalNode(null);
3537 setContainerElement(null);
3538 }
3539 return;
3540 }
3541 if (containerRef.current !== resolvedContainer) {
3542 containerRef.current = resolvedContainer;
3543 setPortalNode(null);
3544 setContainerElement(resolvedContainer);
3545 }
3546 }, [containerProp, parentPortalNode, uniqueId]);
3547 const portalElement = useRenderElement("div", componentProps, {
3548 ref: [ref, setPortalNodeRef],
3549 props: [{
3550 id: uniqueId,
3551 [attr]: ""
3552 }, elementProps]
3553 });
3554 const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null;
3555 return {
3556 portalNode,
3557 portalSubtree
3558 };
3559 }
3560 var FloatingPortal = /* @__PURE__ */ React22.forwardRef(function FloatingPortal2(componentProps, forwardedRef) {
3561 const {
3562 render,
3563 className,
3564 style,
3565 children,
3566 container,
3567 renderGuards,
3568 ...elementProps
3569 } = componentProps;
3570 const {
3571 portalNode,
3572 portalSubtree
3573 } = useFloatingPortalNode({
3574 container,
3575 ref: forwardedRef,
3576 componentProps,
3577 elementProps
3578 });
3579 const beforeOutsideRef = React22.useRef(null);
3580 const afterOutsideRef = React22.useRef(null);
3581 const beforeInsideRef = React22.useRef(null);
3582 const afterInsideRef = React22.useRef(null);
3583 const [focusManagerState, setFocusManagerState] = React22.useState(null);
3584 const focusInsideDisabledRef = React22.useRef(false);
3585 const modal = focusManagerState?.modal;
3586 const open = focusManagerState?.open;
3587 const shouldRenderGuards = typeof renderGuards === "boolean" ? renderGuards : !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode;
3588 React22.useEffect(() => {
3589 if (!portalNode || modal) {
3590 return void 0;
3591 }
3592 function onFocus(event) {
3593 if (portalNode && event.relatedTarget && isOutsideEvent(event)) {
3594 if (event.type === "focusin") {
3595 if (focusInsideDisabledRef.current) {
3596 enableFocusInside(portalNode);
3597 focusInsideDisabledRef.current = false;
3598 }
3599 } else {
3600 disableFocusInside(portalNode);
3601 focusInsideDisabledRef.current = true;
3602 }
3603 }
3604 }
3605 return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true));
3606 }, [portalNode, modal]);
3607 React22.useEffect(() => {
3608 if (!portalNode || open !== false) {
3609 return;
3610 }
3611 enableFocusInside(portalNode);
3612 focusInsideDisabledRef.current = false;
3613 }, [open, portalNode]);
3614 const portalContextValue = React22.useMemo(() => ({
3615 beforeOutsideRef,
3616 afterOutsideRef,
3617 beforeInsideRef,
3618 afterInsideRef,
3619 portalNode,
3620 setFocusManagerState
3621 }), [portalNode]);
3622 return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(React22.Fragment, {
3623 children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(PortalContext.Provider, {
3624 value: portalContextValue,
3625 children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(FocusGuard, {
3626 "data-type": "outside",
3627 ref: beforeOutsideRef,
3628 onFocus: (event) => {
3629 if (isOutsideEvent(event, portalNode)) {
3630 beforeInsideRef.current?.focus();
3631 } else {
3632 const domReference = focusManagerState ? focusManagerState.domReference : null;
3633 const prevTabbable = getPreviousTabbable(domReference);
3634 prevTabbable?.focus();
3635 }
3636 }
3637 }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", {
3638 "aria-owns": portalNode.id,
3639 style: ownerVisuallyHidden
3640 }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(FocusGuard, {
3641 "data-type": "outside",
3642 ref: afterOutsideRef,
3643 onFocus: (event) => {
3644 if (isOutsideEvent(event, portalNode)) {
3645 afterInsideRef.current?.focus();
3646 } else {
3647 const domReference = focusManagerState ? focusManagerState.domReference : null;
3648 const nextTabbable = getNextTabbable(domReference);
3649 nextTabbable?.focus();
3650 if (focusManagerState?.closeOnFocusOut) {
3651 focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent));
3652 }
3653 }
3654 }
3655 })]
3656 })]
3657 });
3658 });
3659 if (true) FloatingPortal.displayName = "FloatingPortal";
3660
3661 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js
3662 var React23 = __toESM(require_react(), 1);
3663
3664 // node_modules/@base-ui/react/esm/floating-ui-react/utils/createEventEmitter.js
3665 function createEventEmitter() {
3666 const map = /* @__PURE__ */ new Map();
3667 return {
3668 emit(event, data) {
3669 map.get(event)?.forEach((listener) => listener(data));
3670 },
3671 on(event, listener) {
3672 if (!map.has(event)) {
3673 map.set(event, /* @__PURE__ */ new Set());
3674 }
3675 map.get(event).add(listener);
3676 },
3677 off(event, listener) {
3678 map.get(event)?.delete(listener);
3679 }
3680 };
3681 }
3682
3683 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js
3684 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
3685 var FloatingNodeContext = /* @__PURE__ */ React23.createContext(null);
3686 if (true) FloatingNodeContext.displayName = "FloatingNodeContext";
3687 var FloatingTreeContext = /* @__PURE__ */ React23.createContext(null);
3688 if (true) FloatingTreeContext.displayName = "FloatingTreeContext";
3689 var useFloatingParentNodeId = () => React23.useContext(FloatingNodeContext)?.id || null;
3690 var useFloatingTree = (externalTree) => {
3691 const contextTree = React23.useContext(FloatingTreeContext);
3692 return externalTree ?? contextTree;
3693 };
3694
3695 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.js
3696 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
3697 function getEventType(event, lastInteractionType) {
3698 const win = getWindow(getTarget(event));
3699 if (event instanceof win.KeyboardEvent) {
3700 return "keyboard";
3701 }
3702 if (event instanceof win.FocusEvent) {
3703 return lastInteractionType || "keyboard";
3704 }
3705 if ("pointerType" in event) {
3706 return event.pointerType || "keyboard";
3707 }
3708 if ("touches" in event) {
3709 return "touch";
3710 }
3711 if (event instanceof win.MouseEvent) {
3712 return lastInteractionType || (event.detail === 0 ? "keyboard" : "mouse");
3713 }
3714 return "";
3715 }
3716 var LIST_LIMIT = 20;
3717 var previouslyFocusedElements = [];
3718 function clearDisconnectedPreviouslyFocusedElements() {
3719 previouslyFocusedElements = previouslyFocusedElements.filter((entry) => {
3720 return entry.deref()?.isConnected;
3721 });
3722 }
3723 function addPreviouslyFocusedElement(element) {
3724 clearDisconnectedPreviouslyFocusedElements();
3725 if (element && getNodeName(element) !== "body") {
3726 previouslyFocusedElements.push(new WeakRef(element));
3727 if (previouslyFocusedElements.length > LIST_LIMIT) {
3728 previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT);
3729 }
3730 }
3731 }
3732 function getPreviouslyFocusedElement() {
3733 clearDisconnectedPreviouslyFocusedElements();
3734 return previouslyFocusedElements[previouslyFocusedElements.length - 1]?.deref();
3735 }
3736 function getFirstTabbableElement(container) {
3737 if (!container) {
3738 return null;
3739 }
3740 if (isTabbable(container)) {
3741 return container;
3742 }
3743 return tabbable(container)[0] || container;
3744 }
3745 function handleTabIndex(floatingFocusElement, orderRef) {
3746 if (floatingFocusElement.hasAttribute("tabindex") && !floatingFocusElement.hasAttribute("data-tabindex")) {
3747 return;
3748 }
3749 if (!orderRef.current.includes("floating") && !floatingFocusElement.getAttribute("role")?.includes("dialog")) {
3750 return;
3751 }
3752 const focusableElements = focusable(floatingFocusElement);
3753 const tabbableContent = focusableElements.filter((element) => {
3754 const dataTabIndex = element.getAttribute("data-tabindex") || "";
3755 return isTabbable(element) || element.hasAttribute("data-tabindex") && !dataTabIndex.startsWith("-");
3756 });
3757 const tabIndex = floatingFocusElement.getAttribute("tabindex");
3758 if (orderRef.current.includes("floating") || tabbableContent.length === 0) {
3759 if (tabIndex !== "0") {
3760 floatingFocusElement.setAttribute("tabindex", "0");
3761 }
3762 } else if (tabIndex !== "-1" || floatingFocusElement.hasAttribute("data-tabindex") && floatingFocusElement.getAttribute("data-tabindex") !== "-1") {
3763 floatingFocusElement.setAttribute("tabindex", "-1");
3764 floatingFocusElement.setAttribute("data-tabindex", "-1");
3765 }
3766 }
3767 function FloatingFocusManager(props) {
3768 const {
3769 context,
3770 children,
3771 disabled: disabled2 = false,
3772 initialFocus = true,
3773 returnFocus = true,
3774 restoreFocus = false,
3775 modal = true,
3776 closeOnFocusOut = true,
3777 openInteractionType = "",
3778 nextFocusableElement,
3779 previousFocusableElement,
3780 beforeContentFocusGuardRef,
3781 externalTree,
3782 getInsideElements
3783 } = props;
3784 const store = "rootStore" in context ? context.rootStore : context;
3785 const open = store.useState("open");
3786 const domReference = store.useState("domReferenceElement");
3787 const floating = store.useState("floatingElement");
3788 const {
3789 events,
3790 dataRef
3791 } = store.context;
3792 const getNodeId = useStableCallback(() => dataRef.current.floatingContext?.nodeId);
3793 const ignoreInitialFocus = initialFocus === false;
3794 const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus;
3795 const orderRef = React24.useRef(["content"]);
3796 const initialFocusRef = useValueAsRef(initialFocus);
3797 const returnFocusRef = useValueAsRef(returnFocus);
3798 const openInteractionTypeRef = useValueAsRef(openInteractionType);
3799 const tree = useFloatingTree(externalTree);
3800 const portalContext = usePortalContext();
3801 const preventReturnFocusRef = React24.useRef(false);
3802 const isPointerDownRef = React24.useRef(false);
3803 const pointerDownOutsideRef = React24.useRef(false);
3804 const lastFocusedTabbableRef = React24.useRef(null);
3805 const closeTypeRef = React24.useRef("");
3806 const lastInteractionTypeRef = React24.useRef("");
3807 const beforeGuardRef = React24.useRef(null);
3808 const afterGuardRef = React24.useRef(null);
3809 const mergedBeforeGuardRef = useMergedRefs(beforeGuardRef, beforeContentFocusGuardRef, portalContext?.beforeInsideRef);
3810 const mergedAfterGuardRef = useMergedRefs(afterGuardRef, portalContext?.afterInsideRef);
3811 const blurTimeout = useTimeout();
3812 const pointerDownTimeout = useTimeout();
3813 const restoreFocusFrame = useAnimationFrame();
3814 const isInsidePortal = portalContext != null;
3815 const floatingFocusElement = getFloatingFocusElement(floating);
3816 const getTabbableContent = useStableCallback((container = floatingFocusElement) => {
3817 return container ? tabbable(container) : [];
3818 });
3819 const getResolvedInsideElements = useStableCallback(() => getInsideElements?.().filter((element) => element != null) ?? []);
3820 React24.useEffect(() => {
3821 if (disabled2 || !modal) {
3822 return void 0;
3823 }
3824 function onKeyDown(event) {
3825 if (event.key === "Tab") {
3826 if (contains(floatingFocusElement, activeElement(ownerDocument(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) {
3827 stopEvent(event);
3828 }
3829 }
3830 }
3831 const doc = ownerDocument(floatingFocusElement);
3832 return addEventListener(doc, "keydown", onKeyDown);
3833 }, [disabled2, floatingFocusElement, modal, isUntrappedTypeableCombobox, getTabbableContent]);
3834 React24.useEffect(() => {
3835 if (disabled2 || !open) {
3836 return void 0;
3837 }
3838 const doc = ownerDocument(floatingFocusElement);
3839 function clearPointerDownOutside() {
3840 pointerDownOutsideRef.current = false;
3841 }
3842 function onPointerDown(event) {
3843 const target = getTarget(event);
3844 const insideElements = getResolvedInsideElements();
3845 const pointerTargetInside = contains(floating, target) || contains(domReference, target) || contains(portalContext?.portalNode, target) || insideElements.some((element) => element === target || contains(element, target));
3846 pointerDownOutsideRef.current = !pointerTargetInside;
3847 lastInteractionTypeRef.current = event.pointerType || "keyboard";
3848 if (target?.closest(`[${CLICK_TRIGGER_IDENTIFIER}]`)) {
3849 isPointerDownRef.current = true;
3850 }
3851 }
3852 function onKeyDown() {
3853 lastInteractionTypeRef.current = "keyboard";
3854 }
3855 return mergeCleanups(addEventListener(doc, "pointerdown", onPointerDown, true), addEventListener(doc, "pointerup", clearPointerDownOutside, true), addEventListener(doc, "pointercancel", clearPointerDownOutside, true), addEventListener(doc, "keydown", onKeyDown, true));
3856 }, [disabled2, floating, domReference, floatingFocusElement, open, portalContext, getResolvedInsideElements]);
3857 React24.useEffect(() => {
3858 if (disabled2 || !closeOnFocusOut) {
3859 return void 0;
3860 }
3861 const doc = ownerDocument(floatingFocusElement);
3862 function handlePointerDown() {
3863 isPointerDownRef.current = true;
3864 pointerDownTimeout.start(0, () => {
3865 isPointerDownRef.current = false;
3866 });
3867 }
3868 function handleFocusIn(event) {
3869 const target = getTarget(event);
3870 if (isTabbable(target)) {
3871 lastFocusedTabbableRef.current = target;
3872 }
3873 }
3874 function handleFocusOutside(event) {
3875 const relatedTarget = event.relatedTarget;
3876 const currentTarget = event.currentTarget;
3877 const target = getTarget(event);
3878 queueMicrotask(() => {
3879 const nodeId = getNodeId();
3880 const triggers = store.context.triggerElements;
3881 const insideElements = getResolvedInsideElements();
3882 const isRelatedFocusGuard = relatedTarget?.hasAttribute(createAttribute("focus-guard")) && [beforeGuardRef.current, afterGuardRef.current, portalContext?.beforeInsideRef.current, portalContext?.afterInsideRef.current, portalContext?.beforeOutsideRef.current, portalContext?.afterOutsideRef.current, resolveRef(previousFocusableElement), resolveRef(nextFocusableElement)].includes(relatedTarget);
3883 const movedToUnrelatedNode = !(contains(domReference, relatedTarget) || contains(floating, relatedTarget) || contains(relatedTarget, floating) || contains(portalContext?.portalNode, relatedTarget) || insideElements.some((element) => element === relatedTarget || contains(element, relatedTarget)) || relatedTarget != null && triggers.hasElement(relatedTarget) || triggers.hasMatchingElement((trigger) => contains(trigger, relatedTarget)) || isRelatedFocusGuard || tree && (getNodeChildren(tree.nodesRef.current, nodeId).find((node) => contains(node.context?.elements.floating, relatedTarget) || contains(node.context?.elements.domReference, relatedTarget)) || getNodeAncestors(tree.nodesRef.current, nodeId).find((node) => [node.context?.elements.floating, getFloatingFocusElement(node.context?.elements.floating)].includes(relatedTarget) || node.context?.elements.domReference === relatedTarget)));
3884 if (currentTarget === domReference && floatingFocusElement) {
3885 handleTabIndex(floatingFocusElement, orderRef);
3886 }
3887 if (restoreFocus && currentTarget !== domReference && !isElementVisible(target) && activeElement(doc) === doc.body) {
3888 if (isHTMLElement(floatingFocusElement)) {
3889 floatingFocusElement.focus();
3890 if (restoreFocus === "popup") {
3891 restoreFocusFrame.request(() => {
3892 floatingFocusElement.focus();
3893 });
3894 return;
3895 }
3896 }
3897 const tabbableContent = getTabbableContent();
3898 const prevTabbable = lastFocusedTabbableRef.current;
3899 const nodeToFocus = (prevTabbable && tabbableContent.includes(prevTabbable) ? prevTabbable : null) || tabbableContent[tabbableContent.length - 1] || floatingFocusElement;
3900 if (isHTMLElement(nodeToFocus)) {
3901 nodeToFocus.focus();
3902 }
3903 }
3904 if (dataRef.current.insideReactTree) {
3905 dataRef.current.insideReactTree = false;
3906 return;
3907 }
3908 if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current && // Fix React 18 Strict Mode returnFocus due to double rendering.
3909 // For an "untrapped" typeable combobox (input role=combobox with
3910 // initialFocus=false), re-opening the popup and tabbing out should still close it even
3911 // when the previously focused element (e.g. the next tabbable outside the popup) is
3912 // focused again. Otherwise, the popup remains open on the second Tab sequence:
3913 // click input -> Tab (closes) -> click input -> Tab.
3914 // Allow closing when `isUntrappedTypeableCombobox` regardless of the previously focused element.
3915 (isUntrappedTypeableCombobox || relatedTarget !== getPreviouslyFocusedElement())) {
3916 preventReturnFocusRef.current = true;
3917 store.setOpen(false, createChangeEventDetails(reason_parts_exports.focusOut, event));
3918 }
3919 });
3920 }
3921 function markInsideReactTree() {
3922 if (pointerDownOutsideRef.current) {
3923 return;
3924 }
3925 dataRef.current.insideReactTree = true;
3926 blurTimeout.start(0, () => {
3927 dataRef.current.insideReactTree = false;
3928 });
3929 }
3930 const domReferenceElement = isHTMLElement(domReference) ? domReference : null;
3931 if (!floating && !domReferenceElement) {
3932 return void 0;
3933 }
3934 return mergeCleanups(domReferenceElement && addEventListener(domReferenceElement, "focusout", handleFocusOutside), domReferenceElement && addEventListener(domReferenceElement, "pointerdown", handlePointerDown), floating && addEventListener(floating, "focusin", handleFocusIn), floating && addEventListener(floating, "focusout", handleFocusOutside), floating && portalContext && addEventListener(floating, "focusout", markInsideReactTree, true));
3935 }, [disabled2, domReference, floating, floatingFocusElement, modal, tree, portalContext, store, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef, dataRef, blurTimeout, pointerDownTimeout, restoreFocusFrame, nextFocusableElement, previousFocusableElement, getResolvedInsideElements]);
3936 React24.useEffect(() => {
3937 if (disabled2 || !floating || !open) {
3938 return void 0;
3939 }
3940 const portalNodes = Array.from(portalContext?.portalNode?.querySelectorAll(`[${createAttribute("portal")}]`) || []);
3941 const ancestors = tree ? getNodeAncestors(tree.nodesRef.current, getNodeId()) : [];
3942 const rootAncestorComboboxDomReference = ancestors.find((node) => isTypeableCombobox(node.context?.elements.domReference || null))?.context?.elements.domReference;
3943 const controlInsideElements = [floating, ...portalNodes, beforeGuardRef.current, afterGuardRef.current, portalContext?.beforeOutsideRef.current, portalContext?.afterOutsideRef.current, ...getResolvedInsideElements()];
3944 const insideElements = [...controlInsideElements, rootAncestorComboboxDomReference, resolveRef(previousFocusableElement), resolveRef(nextFocusableElement), isUntrappedTypeableCombobox ? domReference : null].filter((x) => x != null);
3945 const ariaHiddenCleanup = markOthers(insideElements, {
3946 ariaHidden: modal || isUntrappedTypeableCombobox,
3947 mark: false
3948 });
3949 const markerInsideElements = [floating, ...portalNodes].filter((x) => x != null);
3950 const markerCleanup = markOthers(markerInsideElements);
3951 return () => {
3952 markerCleanup();
3953 ariaHiddenCleanup();
3954 };
3955 }, [open, disabled2, domReference, floating, modal, portalContext, isUntrappedTypeableCombobox, tree, getNodeId, nextFocusableElement, previousFocusableElement, getResolvedInsideElements]);
3956 useIsoLayoutEffect(() => {
3957 if (!open || disabled2 || !isHTMLElement(floatingFocusElement)) {
3958 return;
3959 }
3960 const doc = ownerDocument(floatingFocusElement);
3961 const previouslyFocusedElement = activeElement(doc);
3962 queueMicrotask(() => {
3963 const initialFocusValueOrFn = initialFocusRef.current;
3964 const resolvedInitialFocus = typeof initialFocusValueOrFn === "function" ? initialFocusValueOrFn(openInteractionTypeRef.current || "") : initialFocusValueOrFn;
3965 if (resolvedInitialFocus === void 0 || resolvedInitialFocus === false) {
3966 return;
3967 }
3968 const focusAlreadyInsideFloatingEl = contains(floatingFocusElement, previouslyFocusedElement);
3969 if (focusAlreadyInsideFloatingEl) {
3970 return;
3971 }
3972 let focusableElements = null;
3973 const getDefaultFocusElement = () => {
3974 if (focusableElements == null) {
3975 focusableElements = getTabbableContent(floatingFocusElement);
3976 }
3977 return focusableElements[0] || floatingFocusElement;
3978 };
3979 let elToFocus;
3980 if (resolvedInitialFocus === true || resolvedInitialFocus === null) {
3981 elToFocus = getDefaultFocusElement();
3982 } else {
3983 elToFocus = resolveRef(resolvedInitialFocus);
3984 }
3985 elToFocus = elToFocus || getDefaultFocusElement();
3986 const hadFocusInside = contains(floatingFocusElement, activeElement(doc));
3987 enqueueFocus(elToFocus, {
3988 preventScroll: elToFocus === floatingFocusElement,
3989 shouldFocus() {
3990 if (hadFocusInside) {
3991 return true;
3992 }
3993 const currentActiveElement = activeElement(doc);
3994 const focusMovedInside = currentActiveElement !== elToFocus && contains(floatingFocusElement, currentActiveElement);
3995 return !focusMovedInside;
3996 }
3997 });
3998 });
3999 }, [disabled2, open, floatingFocusElement, getTabbableContent, initialFocusRef, openInteractionTypeRef]);
4000 useIsoLayoutEffect(() => {
4001 if (disabled2 || !floatingFocusElement) {
4002 return void 0;
4003 }
4004 const doc = ownerDocument(floatingFocusElement);
4005 const previouslyFocusedElement = activeElement(doc);
4006 addPreviouslyFocusedElement(previouslyFocusedElement);
4007 function onOpenChangeLocal(details) {
4008 if (!details.open) {
4009 closeTypeRef.current = getEventType(details.nativeEvent, lastInteractionTypeRef.current);
4010 }
4011 if (details.reason === reason_parts_exports.triggerHover && details.nativeEvent.type === "mouseleave") {
4012 preventReturnFocusRef.current = true;
4013 }
4014 if (details.reason !== reason_parts_exports.outsidePress) {
4015 return;
4016 }
4017 if (details.nested) {
4018 preventReturnFocusRef.current = false;
4019 } else if (isVirtualClick(details.nativeEvent) || isVirtualPointerEvent(details.nativeEvent)) {
4020 preventReturnFocusRef.current = false;
4021 } else {
4022 let isPreventScrollSupported = false;
4023 ownerDocument(floatingFocusElement).createElement("div").focus({
4024 get preventScroll() {
4025 isPreventScrollSupported = true;
4026 return false;
4027 }
4028 });
4029 if (isPreventScrollSupported) {
4030 preventReturnFocusRef.current = false;
4031 } else {
4032 preventReturnFocusRef.current = true;
4033 }
4034 }
4035 }
4036 events.on("openchange", onOpenChangeLocal);
4037 function getReturnElement() {
4038 const returnFocusValueOrFn = returnFocusRef.current;
4039 let resolvedReturnFocusValue = typeof returnFocusValueOrFn === "function" ? returnFocusValueOrFn(closeTypeRef.current) : returnFocusValueOrFn;
4040 if (resolvedReturnFocusValue === void 0 || resolvedReturnFocusValue === false) {
4041 return null;
4042 }
4043 if (resolvedReturnFocusValue === null) {
4044 resolvedReturnFocusValue = true;
4045 }
4046 if (typeof resolvedReturnFocusValue === "boolean") {
4047 if (domReference?.isConnected) {
4048 return domReference;
4049 }
4050 return getPreviouslyFocusedElement() || null;
4051 }
4052 const fallback = domReference?.isConnected ? domReference : getPreviouslyFocusedElement();
4053 return resolveRef(resolvedReturnFocusValue) || fallback || null;
4054 }
4055 return () => {
4056 events.off("openchange", onOpenChangeLocal);
4057 const activeEl = activeElement(doc);
4058 const insideElements = getResolvedInsideElements();
4059 const isFocusInsideFloatingTree = contains(floating, activeEl) || insideElements.some((element) => element === activeEl || contains(element, activeEl)) || tree && getNodeChildren(tree.nodesRef.current, getNodeId(), false).some((node) => contains(node.context?.elements.floating, activeEl));
4060 const returnFocusValueOrFn = returnFocusRef.current;
4061 const returnElement = getReturnElement();
4062 queueMicrotask(() => {
4063 const tabbableReturnElement = getFirstTabbableElement(returnElement);
4064 const hasExplicitReturnFocus = typeof returnFocusValueOrFn !== "boolean";
4065 if (returnFocusValueOrFn && !preventReturnFocusRef.current && isHTMLElement(tabbableReturnElement) && // If the focus moved somewhere else after mount, avoid returning focus
4066 // since it likely entered a different element which should be
4067 // respected: https://github.com/floating-ui/floating-ui/issues/2607
4068 (!hasExplicitReturnFocus && tabbableReturnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) {
4069 tabbableReturnElement.focus({
4070 preventScroll: true
4071 });
4072 }
4073 preventReturnFocusRef.current = false;
4074 });
4075 };
4076 }, [disabled2, floating, floatingFocusElement, returnFocusRef, events, tree, domReference, getNodeId, getResolvedInsideElements]);
4077 useIsoLayoutEffect(() => {
4078 if (!isWebKit2 || open || !floating) {
4079 return;
4080 }
4081 const activeEl = activeElement(ownerDocument(floating));
4082 if (!isHTMLElement(activeEl) || !isTypeableElement(activeEl)) {
4083 return;
4084 }
4085 if (contains(floating, activeEl)) {
4086 activeEl.blur();
4087 }
4088 }, [open, floating]);
4089 useIsoLayoutEffect(() => {
4090 if (disabled2 || !portalContext) {
4091 return void 0;
4092 }
4093 portalContext.setFocusManagerState({
4094 modal,
4095 closeOnFocusOut,
4096 open,
4097 onOpenChange: store.setOpen,
4098 domReference
4099 });
4100 return () => {
4101 portalContext.setFocusManagerState(null);
4102 };
4103 }, [disabled2, portalContext, modal, open, store, closeOnFocusOut, domReference]);
4104 useIsoLayoutEffect(() => {
4105 if (disabled2 || !floatingFocusElement) {
4106 return void 0;
4107 }
4108 handleTabIndex(floatingFocusElement, orderRef);
4109 return () => {
4110 queueMicrotask(clearDisconnectedPreviouslyFocusedElements);
4111 };
4112 }, [disabled2, floatingFocusElement, orderRef]);
4113 const shouldRenderGuards = !disabled2 && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);
4114 return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(React24.Fragment, {
4115 children: [shouldRenderGuards && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(FocusGuard, {
4116 "data-type": "inside",
4117 ref: mergedBeforeGuardRef,
4118 onFocus: (event) => {
4119 if (modal) {
4120 const els = getTabbableContent();
4121 enqueueFocus(els[els.length - 1]);
4122 } else if (portalContext?.portalNode) {
4123 preventReturnFocusRef.current = false;
4124 if (isOutsideEvent(event, portalContext.portalNode)) {
4125 const nextTabbable = getNextTabbable(domReference);
4126 nextTabbable?.focus();
4127 } else {
4128 resolveRef(previousFocusableElement ?? portalContext.beforeOutsideRef)?.focus();
4129 }
4130 }
4131 }
4132 }), children, shouldRenderGuards && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(FocusGuard, {
4133 "data-type": "inside",
4134 ref: mergedAfterGuardRef,
4135 onFocus: (event) => {
4136 if (modal) {
4137 enqueueFocus(getTabbableContent()[0]);
4138 } else if (portalContext?.portalNode) {
4139 if (closeOnFocusOut) {
4140 preventReturnFocusRef.current = true;
4141 }
4142 if (isOutsideEvent(event, portalContext.portalNode)) {
4143 const prevTabbable = getPreviousTabbable(domReference);
4144 prevTabbable?.focus();
4145 } else {
4146 resolveRef(nextFocusableElement ?? portalContext.afterOutsideRef)?.focus();
4147 }
4148 }
4149 }
4150 })]
4151 });
4152 }
4153
4154 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClick.js
4155 var React25 = __toESM(require_react(), 1);
4156 function useClick(context, props = {}) {
4157 const {
4158 enabled = true,
4159 event: eventOption = "click",
4160 toggle = true,
4161 ignoreMouse = false,
4162 stickIfOpen = true,
4163 touchOpenDelay = 0,
4164 reason = reason_parts_exports.triggerPress
4165 } = props;
4166 const store = "rootStore" in context ? context.rootStore : context;
4167 const dataRef = store.context.dataRef;
4168 const pointerTypeRef = React25.useRef(void 0);
4169 const frame = useAnimationFrame();
4170 const touchOpenTimeout = useTimeout();
4171 const reference = React25.useMemo(() => {
4172 function setOpenWithTouchDelay(nextOpen, nativeEvent, target, pointerType) {
4173 const details = createChangeEventDetails(reason, nativeEvent, target);
4174 if (nextOpen && pointerType === "touch" && touchOpenDelay > 0) {
4175 touchOpenTimeout.start(touchOpenDelay, () => {
4176 store.setOpen(true, details);
4177 });
4178 } else {
4179 store.setOpen(nextOpen, details);
4180 }
4181 }
4182 function getNextOpen(open, currentTarget, isClickLikeOpenEvent2) {
4183 const openEvent = dataRef.current.openEvent;
4184 const hasClickedOnInactiveTrigger = store.select("domReferenceElement") !== currentTarget;
4185 if (open && hasClickedOnInactiveTrigger) {
4186 return true;
4187 }
4188 if (!open) {
4189 return true;
4190 }
4191 if (!toggle) {
4192 return true;
4193 }
4194 if (openEvent && stickIfOpen) {
4195 return !isClickLikeOpenEvent2(openEvent.type);
4196 }
4197 return false;
4198 }
4199 return {
4200 onPointerDown(event) {
4201 pointerTypeRef.current = event.pointerType;
4202 },
4203 onMouseDown(event) {
4204 const pointerType = pointerTypeRef.current;
4205 const nativeEvent = event.nativeEvent;
4206 const open = store.select("open");
4207 if (event.button !== 0 || eventOption === "click" || isMouseLikePointerType(pointerType, true) && ignoreMouse) {
4208 return;
4209 }
4210 const nextOpen = getNextOpen(open, event.currentTarget, (openEventType) => openEventType === "click" || openEventType === "mousedown");
4211 const target = getTarget(nativeEvent);
4212 if (isTypeableElement(target)) {
4213 setOpenWithTouchDelay(nextOpen, nativeEvent, target, pointerType);
4214 return;
4215 }
4216 const eventCurrentTarget = event.currentTarget;
4217 frame.request(() => {
4218 setOpenWithTouchDelay(nextOpen, nativeEvent, eventCurrentTarget, pointerType);
4219 });
4220 },
4221 onClick(event) {
4222 if (eventOption === "mousedown-only") {
4223 return;
4224 }
4225 const pointerType = pointerTypeRef.current;
4226 if (eventOption === "mousedown" && pointerType) {
4227 pointerTypeRef.current = void 0;
4228 return;
4229 }
4230 if (isMouseLikePointerType(pointerType, true) && ignoreMouse) {
4231 return;
4232 }
4233 const open = store.select("open");
4234 const nextOpen = getNextOpen(open, event.currentTarget, (openEventType) => openEventType === "click" || openEventType === "mousedown" || openEventType === "keydown" || openEventType === "keyup");
4235 setOpenWithTouchDelay(nextOpen, event.nativeEvent, event.currentTarget, pointerType);
4236 },
4237 onKeyDown() {
4238 pointerTypeRef.current = void 0;
4239 }
4240 };
4241 }, [dataRef, eventOption, ignoreMouse, reason, store, stickIfOpen, toggle, frame, touchOpenTimeout, touchOpenDelay]);
4242 return React25.useMemo(() => enabled ? {
4243 reference
4244 } : EMPTY_OBJECT, [enabled, reference]);
4245 }
4246
4247 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClientPoint.js
4248 var React26 = __toESM(require_react(), 1);
4249 function createVirtualElement(domElement, data) {
4250 let offsetX = null;
4251 let offsetY = null;
4252 let isAutoUpdateEvent = false;
4253 return {
4254 contextElement: domElement || void 0,
4255 getBoundingClientRect() {
4256 const domRect = domElement?.getBoundingClientRect() || {
4257 width: 0,
4258 height: 0,
4259 x: 0,
4260 y: 0
4261 };
4262 const isXAxis = data.axis === "x" || data.axis === "both";
4263 const isYAxis = data.axis === "y" || data.axis === "both";
4264 const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch";
4265 let width = domRect.width;
4266 let height = domRect.height;
4267 let x = domRect.x;
4268 let y = domRect.y;
4269 if (offsetX == null && data.x && isXAxis) {
4270 offsetX = domRect.x - data.x;
4271 }
4272 if (offsetY == null && data.y && isYAxis) {
4273 offsetY = domRect.y - data.y;
4274 }
4275 x -= offsetX || 0;
4276 y -= offsetY || 0;
4277 width = 0;
4278 height = 0;
4279 if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {
4280 width = data.axis === "y" ? domRect.width : 0;
4281 height = data.axis === "x" ? domRect.height : 0;
4282 x = isXAxis && data.x != null ? data.x : x;
4283 y = isYAxis && data.y != null ? data.y : y;
4284 } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {
4285 height = data.axis === "x" ? domRect.height : height;
4286 width = data.axis === "y" ? domRect.width : width;
4287 }
4288 isAutoUpdateEvent = true;
4289 return {
4290 width,
4291 height,
4292 x,
4293 y,
4294 top: y,
4295 right: x + width,
4296 bottom: y + height,
4297 left: x
4298 };
4299 }
4300 };
4301 }
4302 function isMouseBasedEvent(event) {
4303 return event != null && event.clientX != null;
4304 }
4305 function useClientPoint(context, props = {}) {
4306 const {
4307 enabled = true,
4308 axis = "both"
4309 } = props;
4310 const store = "rootStore" in context ? context.rootStore : context;
4311 const open = store.useState("open");
4312 const floating = store.useState("floatingElement");
4313 const domReference = store.useState("domReferenceElement");
4314 const dataRef = store.context.dataRef;
4315 const initialRef = React26.useRef(false);
4316 const cleanupListenerRef = React26.useRef(null);
4317 const [pointerType, setPointerType] = React26.useState();
4318 const [reactive, setReactive] = React26.useState([]);
4319 const resetReference = useStableCallback((reference2) => {
4320 store.set("positionReference", reference2);
4321 });
4322 const setReference = useStableCallback((newX, newY, referenceElement) => {
4323 if (initialRef.current) {
4324 return;
4325 }
4326 if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {
4327 return;
4328 }
4329 store.set("positionReference", createVirtualElement(referenceElement ?? domReference, {
4330 x: newX,
4331 y: newY,
4332 axis,
4333 dataRef,
4334 pointerType
4335 }));
4336 });
4337 const handleReferenceEnterOrMove = useStableCallback((event) => {
4338 if (!open) {
4339 setReference(event.clientX, event.clientY, event.currentTarget);
4340 } else if (!cleanupListenerRef.current) {
4341 setReference(event.clientX, event.clientY, event.currentTarget);
4342 setReactive([]);
4343 }
4344 });
4345 const openCheck = isMouseLikePointerType(pointerType) ? floating : open;
4346 React26.useEffect(() => {
4347 if (!enabled) {
4348 resetReference(domReference);
4349 return void 0;
4350 }
4351 if (!openCheck) {
4352 return void 0;
4353 }
4354 function cleanupListener() {
4355 cleanupListenerRef.current?.();
4356 cleanupListenerRef.current = null;
4357 }
4358 const win = getWindow(floating);
4359 function handleMouseMove(event) {
4360 const target = getTarget(event);
4361 if (!contains(floating, target)) {
4362 setReference(event.clientX, event.clientY);
4363 } else {
4364 cleanupListener();
4365 }
4366 }
4367 if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {
4368 cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove);
4369 } else {
4370 resetReference(domReference);
4371 }
4372 return cleanupListener;
4373 }, [openCheck, enabled, floating, dataRef, domReference, store, setReference, resetReference, reactive]);
4374 React26.useEffect(() => () => {
4375 store.set("positionReference", null);
4376 }, [store]);
4377 React26.useEffect(() => {
4378 if (enabled && !floating) {
4379 initialRef.current = false;
4380 }
4381 }, [enabled, floating]);
4382 React26.useEffect(() => {
4383 if (!enabled && open) {
4384 initialRef.current = true;
4385 }
4386 }, [enabled, open]);
4387 const reference = React26.useMemo(() => {
4388 function setPointerTypeRef(event) {
4389 setPointerType(event.pointerType);
4390 }
4391 return {
4392 onPointerDown: setPointerTypeRef,
4393 onPointerEnter: setPointerTypeRef,
4394 onMouseMove: handleReferenceEnterOrMove,
4395 onMouseEnter: handleReferenceEnterOrMove
4396 };
4397 }, [handleReferenceEnterOrMove]);
4398 return React26.useMemo(() => enabled ? {
4399 reference,
4400 trigger: reference
4401 } : {}, [enabled, reference]);
4402 }
4403
4404 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useDismiss.js
4405 var React27 = __toESM(require_react(), 1);
4406 var bubbleHandlerKeys = {
4407 intentional: "onClick",
4408 sloppy: "onPointerDown"
4409 };
4410 function alwaysFalse() {
4411 return false;
4412 }
4413 function normalizeProp(normalizable) {
4414 return {
4415 escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false,
4416 outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true
4417 };
4418 }
4419 function useDismiss(context, props = {}) {
4420 const {
4421 enabled = true,
4422 escapeKey: escapeKey2 = true,
4423 outsidePress: outsidePressProp = true,
4424 outsidePressEvent = "sloppy",
4425 referencePress = alwaysFalse,
4426 referencePressEvent = "sloppy",
4427 bubbles,
4428 externalTree
4429 } = props;
4430 const store = "rootStore" in context ? context.rootStore : context;
4431 const open = store.useState("open");
4432 const floatingElement = store.useState("floatingElement");
4433 const {
4434 dataRef
4435 } = store.context;
4436 const tree = useFloatingTree(externalTree);
4437 const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false);
4438 const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp;
4439 const outsidePressEnabled = outsidePress2 !== false;
4440 const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent);
4441 const {
4442 escapeKey: escapeKeyBubbles,
4443 outsidePress: outsidePressBubbles
4444 } = normalizeProp(bubbles);
4445 const pressStartedInsideRef = React27.useRef(false);
4446 const pressStartPreventedRef = React27.useRef(false);
4447 const suppressNextOutsideClickRef = React27.useRef(false);
4448 const isComposingRef = React27.useRef(false);
4449 const currentPointerTypeRef = React27.useRef("");
4450 const touchStateRef = React27.useRef(null);
4451 const cancelDismissOnEndTimeout = useTimeout();
4452 const clearInsideReactTreeTimeout = useTimeout();
4453 const clearInsideReactTree = useStableCallback(() => {
4454 clearInsideReactTreeTimeout.clear();
4455 dataRef.current.insideReactTree = false;
4456 });
4457 const hasBlockingChild = useStableCallback((bubbleKey) => {
4458 const nodeId = dataRef.current.floatingContext?.nodeId;
4459 const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : [];
4460 return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]);
4461 });
4462 const isEventWithinOwnElements = useStableCallback((event) => {
4463 return isEventTargetWithin(event, store.select("floatingElement")) || isEventTargetWithin(event, store.select("domReferenceElement"));
4464 });
4465 const closeOnReferencePress = useStableCallback((event) => {
4466 if (!referencePress()) {
4467 return;
4468 }
4469 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent));
4470 });
4471 const closeOnEscapeKeyDown = useStableCallback((event) => {
4472 if (!open || !enabled || !escapeKey2 || event.key !== "Escape") {
4473 return;
4474 }
4475 if (isComposingRef.current) {
4476 return;
4477 }
4478 if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) {
4479 return;
4480 }
4481 const native = isReactEvent(event) ? event.nativeEvent : event;
4482 const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native);
4483 store.setOpen(false, eventDetails);
4484 if (!eventDetails.isCanceled) {
4485 event.preventDefault();
4486 }
4487 if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) {
4488 event.stopPropagation();
4489 }
4490 });
4491 const markInsideReactTree = useStableCallback(() => {
4492 dataRef.current.insideReactTree = true;
4493 clearInsideReactTreeTimeout.start(0, clearInsideReactTree);
4494 });
4495 const markPressStartedInsideReactTree = useStableCallback((event) => {
4496 if (!open || !enabled || event.button !== 0) {
4497 return;
4498 }
4499 const target = getTarget(event.nativeEvent);
4500 if (!contains(store.select("floatingElement"), target)) {
4501 return;
4502 }
4503 if (!pressStartedInsideRef.current) {
4504 pressStartedInsideRef.current = true;
4505 pressStartPreventedRef.current = false;
4506 }
4507 });
4508 const markInsidePressStartPrevented = useStableCallback((event) => {
4509 if (!open || !enabled) {
4510 return;
4511 }
4512 if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) {
4513 return;
4514 }
4515 if (pressStartedInsideRef.current) {
4516 pressStartPreventedRef.current = true;
4517 }
4518 });
4519 React27.useEffect(() => {
4520 if (!open || !enabled) {
4521 return void 0;
4522 }
4523 dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;
4524 dataRef.current.__outsidePressBubbles = outsidePressBubbles;
4525 const compositionTimeout = new Timeout();
4526 const preventedPressSuppressionTimeout = new Timeout();
4527 function handleCompositionStart() {
4528 compositionTimeout.clear();
4529 isComposingRef.current = true;
4530 }
4531 function handleCompositionEnd() {
4532 compositionTimeout.start(
4533 // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.
4534 // Only apply to WebKit for the test to remain 0ms.
4535 isWebKit() ? 5 : 0,
4536 () => {
4537 isComposingRef.current = false;
4538 }
4539 );
4540 }
4541 function suppressImmediateOutsideClickAfterPreventedStart() {
4542 suppressNextOutsideClickRef.current = true;
4543 preventedPressSuppressionTimeout.start(0, () => {
4544 suppressNextOutsideClickRef.current = false;
4545 });
4546 }
4547 function resetPressStartState() {
4548 pressStartedInsideRef.current = false;
4549 pressStartPreventedRef.current = false;
4550 }
4551 function getOutsidePressEvent() {
4552 const type = currentPointerTypeRef.current;
4553 const computedType = type === "pen" || !type ? "mouse" : type;
4554 const outsidePressEventValue = getOutsidePressEventProp();
4555 const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue;
4556 if (typeof resolved === "string") {
4557 return resolved;
4558 }
4559 return resolved[computedType];
4560 }
4561 function shouldIgnoreEvent(event) {
4562 const computedOutsidePressEvent = getOutsidePressEvent();
4563 return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click";
4564 }
4565 function isEventWithinFloatingTree(event) {
4566 const nodeId = dataRef.current.floatingContext?.nodeId;
4567 const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating));
4568 return isEventWithinOwnElements(event) || targetIsInsideChildren;
4569 }
4570 function closeOnPressOutside(event) {
4571 if (shouldIgnoreEvent(event)) {
4572 if (event.type !== "click" && !isEventWithinOwnElements(event)) {
4573 preventedPressSuppressionTimeout.clear();
4574 suppressNextOutsideClickRef.current = false;
4575 }
4576 clearInsideReactTree();
4577 return;
4578 }
4579 if (dataRef.current.insideReactTree) {
4580 clearInsideReactTree();
4581 return;
4582 }
4583 const target = getTarget(event);
4584 const inertSelector = `[${createAttribute("inert")}]`;
4585 const targetRoot = isElement(target) ? target.getRootNode() : null;
4586 const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store.select("floatingElement"))).querySelectorAll(inertSelector));
4587 const triggers = store.context.triggerElements;
4588 if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) {
4589 return;
4590 }
4591 let targetRootAncestor = isElement(target) ? target : null;
4592 while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {
4593 const nextParent = getParentNode(targetRootAncestor);
4594 if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {
4595 break;
4596 }
4597 targetRootAncestor = nextParent;
4598 }
4599 if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay).
4600 !contains(target, store.select("floatingElement")) && // If the target root element contains none of the markers, then the
4601 // element was injected after the floating element rendered.
4602 markers.every((marker) => !contains(targetRootAncestor, marker))) {
4603 return;
4604 }
4605 if (isHTMLElement(target) && !("touches" in event)) {
4606 const lastTraversableNode = isLastTraversableNode(target);
4607 const style = getComputedStyle2(target);
4608 const scrollRe = /auto|scroll/;
4609 const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);
4610 const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);
4611 const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;
4612 const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;
4613 const isRTL2 = style.direction === "rtl";
4614 const pressedVerticalScrollbar = canScrollY && (isRTL2 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);
4615 const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;
4616 if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {
4617 return;
4618 }
4619 }
4620 if (isEventWithinFloatingTree(event)) {
4621 return;
4622 }
4623 if (getOutsidePressEvent() === "intentional" && suppressNextOutsideClickRef.current) {
4624 preventedPressSuppressionTimeout.clear();
4625 suppressNextOutsideClickRef.current = false;
4626 return;
4627 }
4628 if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
4629 return;
4630 }
4631 if (hasBlockingChild("__outsidePressBubbles")) {
4632 return;
4633 }
4634 store.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event));
4635 clearInsideReactTree();
4636 }
4637 function handlePointerDown(event) {
4638 if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store.select("open") || !enabled || isEventWithinOwnElements(event)) {
4639 return;
4640 }
4641 closeOnPressOutside(event);
4642 }
4643 function handleTouchStart(event) {
4644 if (getOutsidePressEvent() !== "sloppy" || !store.select("open") || !enabled || isEventWithinOwnElements(event)) {
4645 return;
4646 }
4647 const touch = event.touches[0];
4648 if (touch) {
4649 touchStateRef.current = {
4650 startTime: Date.now(),
4651 startX: touch.clientX,
4652 startY: touch.clientY,
4653 dismissOnTouchEnd: false,
4654 dismissOnMouseDown: true
4655 };
4656 cancelDismissOnEndTimeout.start(1e3, () => {
4657 if (touchStateRef.current) {
4658 touchStateRef.current.dismissOnTouchEnd = false;
4659 touchStateRef.current.dismissOnMouseDown = false;
4660 }
4661 });
4662 }
4663 }
4664 function addTargetEventListenerOnce(event, listener) {
4665 const target = getTarget(event);
4666 if (!target) {
4667 return;
4668 }
4669 const unsubscribe2 = addEventListener(target, event.type, () => {
4670 listener(event);
4671 unsubscribe2();
4672 });
4673 }
4674 function handleTouchStartCapture(event) {
4675 currentPointerTypeRef.current = "touch";
4676 addTargetEventListenerOnce(event, handleTouchStart);
4677 }
4678 function closeOnPressOutsideCapture(event) {
4679 cancelDismissOnEndTimeout.clear();
4680 if (event.type === "pointerdown") {
4681 currentPointerTypeRef.current = event.pointerType;
4682 }
4683 if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) {
4684 return;
4685 }
4686 addTargetEventListenerOnce(event, (targetEvent) => {
4687 if (targetEvent.type === "pointerdown") {
4688 handlePointerDown(targetEvent);
4689 } else {
4690 closeOnPressOutside(targetEvent);
4691 }
4692 });
4693 }
4694 function handlePressEndCapture(event) {
4695 if (!pressStartedInsideRef.current) {
4696 return;
4697 }
4698 const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current;
4699 resetPressStartState();
4700 if (getOutsidePressEvent() !== "intentional") {
4701 return;
4702 }
4703 if (event.type === "pointercancel") {
4704 if (pressStartedInsideDefaultPrevented) {
4705 suppressImmediateOutsideClickAfterPreventedStart();
4706 }
4707 return;
4708 }
4709 if (isEventWithinFloatingTree(event)) {
4710 return;
4711 }
4712 if (pressStartedInsideDefaultPrevented) {
4713 suppressImmediateOutsideClickAfterPreventedStart();
4714 return;
4715 }
4716 if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
4717 return;
4718 }
4719 preventedPressSuppressionTimeout.clear();
4720 suppressNextOutsideClickRef.current = true;
4721 clearInsideReactTree();
4722 }
4723 function handleTouchMove(event) {
4724 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
4725 return;
4726 }
4727 const touch = event.touches[0];
4728 if (!touch) {
4729 return;
4730 }
4731 const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX);
4732 const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY);
4733 const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
4734 if (distance > 5) {
4735 touchStateRef.current.dismissOnTouchEnd = true;
4736 }
4737 if (distance > 10) {
4738 closeOnPressOutside(event);
4739 cancelDismissOnEndTimeout.clear();
4740 touchStateRef.current = null;
4741 }
4742 }
4743 function handleTouchMoveCapture(event) {
4744 addTargetEventListenerOnce(event, handleTouchMove);
4745 }
4746 function handleTouchEnd(event) {
4747 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
4748 return;
4749 }
4750 if (touchStateRef.current.dismissOnTouchEnd) {
4751 closeOnPressOutside(event);
4752 }
4753 cancelDismissOnEndTimeout.clear();
4754 touchStateRef.current = null;
4755 }
4756 function handleTouchEndCapture(event) {
4757 addTargetEventListenerOnce(event, handleTouchEnd);
4758 }
4759 const doc = ownerDocument(floatingElement);
4760 const unsubscribe = mergeCleanups(escapeKey2 && mergeCleanups(addEventListener(doc, "keydown", closeOnEscapeKeyDown), addEventListener(doc, "compositionstart", handleCompositionStart), addEventListener(doc, "compositionend", handleCompositionEnd)), outsidePressEnabled && mergeCleanups(addEventListener(doc, "click", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerdown", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerup", handlePressEndCapture, true), addEventListener(doc, "pointercancel", handlePressEndCapture, true), addEventListener(doc, "mousedown", closeOnPressOutsideCapture, true), addEventListener(doc, "mouseup", handlePressEndCapture, true), addEventListener(doc, "touchstart", handleTouchStartCapture, true), addEventListener(doc, "touchmove", handleTouchMoveCapture, true), addEventListener(doc, "touchend", handleTouchEndCapture, true)));
4761 return () => {
4762 unsubscribe();
4763 compositionTimeout.clear();
4764 preventedPressSuppressionTimeout.clear();
4765 resetPressStartState();
4766 suppressNextOutsideClickRef.current = false;
4767 };
4768 }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store, cancelDismissOnEndTimeout]);
4769 React27.useEffect(clearInsideReactTree, [outsidePress2, clearInsideReactTree]);
4770 const reference = React27.useMemo(() => ({
4771 onKeyDown: closeOnEscapeKeyDown,
4772 [bubbleHandlerKeys[referencePressEvent]]: closeOnReferencePress,
4773 ...referencePressEvent !== "intentional" && {
4774 onClick: closeOnReferencePress
4775 }
4776 }), [closeOnEscapeKeyDown, closeOnReferencePress, referencePressEvent]);
4777 const floating = React27.useMemo(() => ({
4778 onKeyDown: closeOnEscapeKeyDown,
4779 // `onMouseDown` may be blocked if `event.preventDefault()` is called in
4780 // `onPointerDown`, such as with <NumberField.ScrubArea>.
4781 // See https://github.com/mui/base-ui/pull/3379
4782 onPointerDown: markInsidePressStartPrevented,
4783 onMouseDown: markInsidePressStartPrevented,
4784 onClickCapture: markInsideReactTree,
4785 onMouseDownCapture(event) {
4786 markInsideReactTree();
4787 markPressStartedInsideReactTree(event);
4788 },
4789 onPointerDownCapture(event) {
4790 markInsideReactTree();
4791 markPressStartedInsideReactTree(event);
4792 },
4793 onMouseUpCapture: markInsideReactTree,
4794 onTouchEndCapture: markInsideReactTree,
4795 onTouchMoveCapture: markInsideReactTree
4796 }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]);
4797 return React27.useMemo(() => enabled ? {
4798 reference,
4799 floating,
4800 trigger: reference
4801 } : {}, [enabled, reference, floating]);
4802 }
4803
4804 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloating.js
4805 var React34 = __toESM(require_react(), 1);
4806
4807 // node_modules/@floating-ui/core/dist/floating-ui.core.mjs
4808 function computeCoordsFromPlacement(_ref, placement, rtl) {
4809 let {
4810 reference,
4811 floating
4812 } = _ref;
4813 const sideAxis = getSideAxis(placement);
4814 const alignmentAxis = getAlignmentAxis(placement);
4815 const alignLength = getAxisLength(alignmentAxis);
4816 const side = getSide(placement);
4817 const isVertical = sideAxis === "y";
4818 const commonX = reference.x + reference.width / 2 - floating.width / 2;
4819 const commonY = reference.y + reference.height / 2 - floating.height / 2;
4820 const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
4821 let coords;
4822 switch (side) {
4823 case "top":
4824 coords = {
4825 x: commonX,
4826 y: reference.y - floating.height
4827 };
4828 break;
4829 case "bottom":
4830 coords = {
4831 x: commonX,
4832 y: reference.y + reference.height
4833 };
4834 break;
4835 case "right":
4836 coords = {
4837 x: reference.x + reference.width,
4838 y: commonY
4839 };
4840 break;
4841 case "left":
4842 coords = {
4843 x: reference.x - floating.width,
4844 y: commonY
4845 };
4846 break;
4847 default:
4848 coords = {
4849 x: reference.x,
4850 y: reference.y
4851 };
4852 }
4853 switch (getAlignment(placement)) {
4854 case "start":
4855 coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
4856 break;
4857 case "end":
4858 coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
4859 break;
4860 }
4861 return coords;
4862 }
4863 async function detectOverflow(state, options) {
4864 var _await$platform$isEle;
4865 if (options === void 0) {
4866 options = {};
4867 }
4868 const {
4869 x,
4870 y,
4871 platform: platform3,
4872 rects,
4873 elements,
4874 strategy
4875 } = state;
4876 const {
4877 boundary = "clippingAncestors",
4878 rootBoundary = "viewport",
4879 elementContext = "floating",
4880 altBoundary = false,
4881 padding = 0
4882 } = evaluate(options, state);
4883 const paddingObject = getPaddingObject(padding);
4884 const altContext = elementContext === "floating" ? "reference" : "floating";
4885 const element = elements[altBoundary ? altContext : elementContext];
4886 const clippingClientRect = rectToClientRect(await platform3.getClippingRect({
4887 element: ((_await$platform$isEle = await (platform3.isElement == null ? void 0 : platform3.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform3.getDocumentElement == null ? void 0 : platform3.getDocumentElement(elements.floating)),
4888 boundary,
4889 rootBoundary,
4890 strategy
4891 }));
4892 const rect = elementContext === "floating" ? {
4893 x,
4894 y,
4895 width: rects.floating.width,
4896 height: rects.floating.height
4897 } : rects.reference;
4898 const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating));
4899 const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) ? await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || {
4900 x: 1,
4901 y: 1
4902 } : {
4903 x: 1,
4904 y: 1
4905 };
4906 const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({
4907 elements,
4908 rect,
4909 offsetParent,
4910 strategy
4911 }) : rect);
4912 return {
4913 top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
4914 bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
4915 left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
4916 right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
4917 };
4918 }
4919 var MAX_RESET_COUNT = 50;
4920 var computePosition = async (reference, floating, config) => {
4921 const {
4922 placement = "bottom",
4923 strategy = "absolute",
4924 middleware = [],
4925 platform: platform3
4926 } = config;
4927 const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : {
4928 ...platform3,
4929 detectOverflow
4930 };
4931 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating));
4932 let rects = await platform3.getElementRects({
4933 reference,
4934 floating,
4935 strategy
4936 });
4937 let {
4938 x,
4939 y
4940 } = computeCoordsFromPlacement(rects, placement, rtl);
4941 let statefulPlacement = placement;
4942 let resetCount = 0;
4943 const middlewareData = {};
4944 for (let i = 0; i < middleware.length; i++) {
4945 const currentMiddleware = middleware[i];
4946 if (!currentMiddleware) {
4947 continue;
4948 }
4949 const {
4950 name,
4951 fn
4952 } = currentMiddleware;
4953 const {
4954 x: nextX,
4955 y: nextY,
4956 data,
4957 reset
4958 } = await fn({
4959 x,
4960 y,
4961 initialPlacement: placement,
4962 placement: statefulPlacement,
4963 strategy,
4964 middlewareData,
4965 rects,
4966 platform: platformWithDetectOverflow,
4967 elements: {
4968 reference,
4969 floating
4970 }
4971 });
4972 x = nextX != null ? nextX : x;
4973 y = nextY != null ? nextY : y;
4974 middlewareData[name] = {
4975 ...middlewareData[name],
4976 ...data
4977 };
4978 if (reset && resetCount < MAX_RESET_COUNT) {
4979 resetCount++;
4980 if (typeof reset === "object") {
4981 if (reset.placement) {
4982 statefulPlacement = reset.placement;
4983 }
4984 if (reset.rects) {
4985 rects = reset.rects === true ? await platform3.getElementRects({
4986 reference,
4987 floating,
4988 strategy
4989 }) : reset.rects;
4990 }
4991 ({
4992 x,
4993 y
4994 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
4995 }
4996 i = -1;
4997 }
4998 }
4999 return {
5000 x,
5001 y,
5002 placement: statefulPlacement,
5003 strategy,
5004 middlewareData
5005 };
5006 };
5007 var flip = function(options) {
5008 if (options === void 0) {
5009 options = {};
5010 }
5011 return {
5012 name: "flip",
5013 options,
5014 async fn(state) {
5015 var _middlewareData$arrow, _middlewareData$flip;
5016 const {
5017 placement,
5018 middlewareData,
5019 rects,
5020 initialPlacement,
5021 platform: platform3,
5022 elements
5023 } = state;
5024 const {
5025 mainAxis: checkMainAxis = true,
5026 crossAxis: checkCrossAxis = true,
5027 fallbackPlacements: specifiedFallbackPlacements,
5028 fallbackStrategy = "bestFit",
5029 fallbackAxisSideDirection = "none",
5030 flipAlignment = true,
5031 ...detectOverflowOptions
5032 } = evaluate(options, state);
5033 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
5034 return {};
5035 }
5036 const side = getSide(placement);
5037 const initialSideAxis = getSideAxis(initialPlacement);
5038 const isBasePlacement = getSide(initialPlacement) === initialPlacement;
5039 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
5040 const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
5041 const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none";
5042 if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {
5043 fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
5044 }
5045 const placements2 = [initialPlacement, ...fallbackPlacements];
5046 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
5047 const overflows = [];
5048 let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
5049 if (checkMainAxis) {
5050 overflows.push(overflow[side]);
5051 }
5052 if (checkCrossAxis) {
5053 const sides2 = getAlignmentSides(placement, rects, rtl);
5054 overflows.push(overflow[sides2[0]], overflow[sides2[1]]);
5055 }
5056 overflowsData = [...overflowsData, {
5057 placement,
5058 overflows
5059 }];
5060 if (!overflows.every((side2) => side2 <= 0)) {
5061 var _middlewareData$flip2, _overflowsData$filter;
5062 const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
5063 const nextPlacement = placements2[nextIndex];
5064 if (nextPlacement) {
5065 const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false;
5066 if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis
5067 // overflows the main axis.
5068 overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
5069 return {
5070 data: {
5071 index: nextIndex,
5072 overflows: overflowsData
5073 },
5074 reset: {
5075 placement: nextPlacement
5076 }
5077 };
5078 }
5079 }
5080 let resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;
5081 if (!resetPlacement) {
5082 switch (fallbackStrategy) {
5083 case "bestFit": {
5084 var _overflowsData$filter2;
5085 const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => {
5086 if (hasFallbackAxisSideDirection) {
5087 const currentSideAxis = getSideAxis(d.placement);
5088 return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal
5089 // reading directions favoring greater width.
5090 currentSideAxis === "y";
5091 }
5092 return true;
5093 }).map((d) => [d.placement, d.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];
5094 if (placement2) {
5095 resetPlacement = placement2;
5096 }
5097 break;
5098 }
5099 case "initialPlacement":
5100 resetPlacement = initialPlacement;
5101 break;
5102 }
5103 }
5104 if (placement !== resetPlacement) {
5105 return {
5106 reset: {
5107 placement: resetPlacement
5108 }
5109 };
5110 }
5111 }
5112 return {};
5113 }
5114 };
5115 };
5116 function getSideOffsets(overflow, rect) {
5117 return {
5118 top: overflow.top - rect.height,
5119 right: overflow.right - rect.width,
5120 bottom: overflow.bottom - rect.height,
5121 left: overflow.left - rect.width
5122 };
5123 }
5124 function isAnySideFullyClipped(overflow) {
5125 return sides.some((side) => overflow[side] >= 0);
5126 }
5127 var hide = function(options) {
5128 if (options === void 0) {
5129 options = {};
5130 }
5131 return {
5132 name: "hide",
5133 options,
5134 async fn(state) {
5135 const {
5136 rects,
5137 platform: platform3
5138 } = state;
5139 const {
5140 strategy = "referenceHidden",
5141 ...detectOverflowOptions
5142 } = evaluate(options, state);
5143 switch (strategy) {
5144 case "referenceHidden": {
5145 const overflow = await platform3.detectOverflow(state, {
5146 ...detectOverflowOptions,
5147 elementContext: "reference"
5148 });
5149 const offsets = getSideOffsets(overflow, rects.reference);
5150 return {
5151 data: {
5152 referenceHiddenOffsets: offsets,
5153 referenceHidden: isAnySideFullyClipped(offsets)
5154 }
5155 };
5156 }
5157 case "escaped": {
5158 const overflow = await platform3.detectOverflow(state, {
5159 ...detectOverflowOptions,
5160 altBoundary: true
5161 });
5162 const offsets = getSideOffsets(overflow, rects.floating);
5163 return {
5164 data: {
5165 escapedOffsets: offsets,
5166 escaped: isAnySideFullyClipped(offsets)
5167 }
5168 };
5169 }
5170 default: {
5171 return {};
5172 }
5173 }
5174 }
5175 };
5176 };
5177 var originSides = /* @__PURE__ */ new Set(["left", "top"]);
5178 async function convertValueToCoords(state, options) {
5179 const {
5180 placement,
5181 platform: platform3,
5182 elements
5183 } = state;
5184 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
5185 const side = getSide(placement);
5186 const alignment = getAlignment(placement);
5187 const isVertical = getSideAxis(placement) === "y";
5188 const mainAxisMulti = originSides.has(side) ? -1 : 1;
5189 const crossAxisMulti = rtl && isVertical ? -1 : 1;
5190 const rawValue = evaluate(options, state);
5191 let {
5192 mainAxis,
5193 crossAxis,
5194 alignmentAxis
5195 } = typeof rawValue === "number" ? {
5196 mainAxis: rawValue,
5197 crossAxis: 0,
5198 alignmentAxis: null
5199 } : {
5200 mainAxis: rawValue.mainAxis || 0,
5201 crossAxis: rawValue.crossAxis || 0,
5202 alignmentAxis: rawValue.alignmentAxis
5203 };
5204 if (alignment && typeof alignmentAxis === "number") {
5205 crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
5206 }
5207 return isVertical ? {
5208 x: crossAxis * crossAxisMulti,
5209 y: mainAxis * mainAxisMulti
5210 } : {
5211 x: mainAxis * mainAxisMulti,
5212 y: crossAxis * crossAxisMulti
5213 };
5214 }
5215 var offset = function(options) {
5216 if (options === void 0) {
5217 options = 0;
5218 }
5219 return {
5220 name: "offset",
5221 options,
5222 async fn(state) {
5223 var _middlewareData$offse, _middlewareData$arrow;
5224 const {
5225 x,
5226 y,
5227 placement,
5228 middlewareData
5229 } = state;
5230 const diffCoords = await convertValueToCoords(state, options);
5231 if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
5232 return {};
5233 }
5234 return {
5235 x: x + diffCoords.x,
5236 y: y + diffCoords.y,
5237 data: {
5238 ...diffCoords,
5239 placement
5240 }
5241 };
5242 }
5243 };
5244 };
5245 var shift = function(options) {
5246 if (options === void 0) {
5247 options = {};
5248 }
5249 return {
5250 name: "shift",
5251 options,
5252 async fn(state) {
5253 const {
5254 x,
5255 y,
5256 placement,
5257 platform: platform3
5258 } = state;
5259 const {
5260 mainAxis: checkMainAxis = true,
5261 crossAxis: checkCrossAxis = false,
5262 limiter = {
5263 fn: (_ref) => {
5264 let {
5265 x: x2,
5266 y: y2
5267 } = _ref;
5268 return {
5269 x: x2,
5270 y: y2
5271 };
5272 }
5273 },
5274 ...detectOverflowOptions
5275 } = evaluate(options, state);
5276 const coords = {
5277 x,
5278 y
5279 };
5280 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
5281 const crossAxis = getSideAxis(getSide(placement));
5282 const mainAxis = getOppositeAxis(crossAxis);
5283 let mainAxisCoord = coords[mainAxis];
5284 let crossAxisCoord = coords[crossAxis];
5285 if (checkMainAxis) {
5286 const minSide = mainAxis === "y" ? "top" : "left";
5287 const maxSide = mainAxis === "y" ? "bottom" : "right";
5288 const min2 = mainAxisCoord + overflow[minSide];
5289 const max2 = mainAxisCoord - overflow[maxSide];
5290 mainAxisCoord = clamp(min2, mainAxisCoord, max2);
5291 }
5292 if (checkCrossAxis) {
5293 const minSide = crossAxis === "y" ? "top" : "left";
5294 const maxSide = crossAxis === "y" ? "bottom" : "right";
5295 const min2 = crossAxisCoord + overflow[minSide];
5296 const max2 = crossAxisCoord - overflow[maxSide];
5297 crossAxisCoord = clamp(min2, crossAxisCoord, max2);
5298 }
5299 const limitedCoords = limiter.fn({
5300 ...state,
5301 [mainAxis]: mainAxisCoord,
5302 [crossAxis]: crossAxisCoord
5303 });
5304 return {
5305 ...limitedCoords,
5306 data: {
5307 x: limitedCoords.x - x,
5308 y: limitedCoords.y - y,
5309 enabled: {
5310 [mainAxis]: checkMainAxis,
5311 [crossAxis]: checkCrossAxis
5312 }
5313 }
5314 };
5315 }
5316 };
5317 };
5318 var limitShift = function(options) {
5319 if (options === void 0) {
5320 options = {};
5321 }
5322 return {
5323 options,
5324 fn(state) {
5325 const {
5326 x,
5327 y,
5328 placement,
5329 rects,
5330 middlewareData
5331 } = state;
5332 const {
5333 offset: offset4 = 0,
5334 mainAxis: checkMainAxis = true,
5335 crossAxis: checkCrossAxis = true
5336 } = evaluate(options, state);
5337 const coords = {
5338 x,
5339 y
5340 };
5341 const crossAxis = getSideAxis(placement);
5342 const mainAxis = getOppositeAxis(crossAxis);
5343 let mainAxisCoord = coords[mainAxis];
5344 let crossAxisCoord = coords[crossAxis];
5345 const rawOffset = evaluate(offset4, state);
5346 const computedOffset = typeof rawOffset === "number" ? {
5347 mainAxis: rawOffset,
5348 crossAxis: 0
5349 } : {
5350 mainAxis: 0,
5351 crossAxis: 0,
5352 ...rawOffset
5353 };
5354 if (checkMainAxis) {
5355 const len = mainAxis === "y" ? "height" : "width";
5356 const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;
5357 const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;
5358 if (mainAxisCoord < limitMin) {
5359 mainAxisCoord = limitMin;
5360 } else if (mainAxisCoord > limitMax) {
5361 mainAxisCoord = limitMax;
5362 }
5363 }
5364 if (checkCrossAxis) {
5365 var _middlewareData$offse, _middlewareData$offse2;
5366 const len = mainAxis === "y" ? "width" : "height";
5367 const isOriginSide = originSides.has(getSide(placement));
5368 const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);
5369 const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);
5370 if (crossAxisCoord < limitMin) {
5371 crossAxisCoord = limitMin;
5372 } else if (crossAxisCoord > limitMax) {
5373 crossAxisCoord = limitMax;
5374 }
5375 }
5376 return {
5377 [mainAxis]: mainAxisCoord,
5378 [crossAxis]: crossAxisCoord
5379 };
5380 }
5381 };
5382 };
5383 var size = function(options) {
5384 if (options === void 0) {
5385 options = {};
5386 }
5387 return {
5388 name: "size",
5389 options,
5390 async fn(state) {
5391 var _state$middlewareData, _state$middlewareData2;
5392 const {
5393 placement,
5394 rects,
5395 platform: platform3,
5396 elements
5397 } = state;
5398 const {
5399 apply = () => {
5400 },
5401 ...detectOverflowOptions
5402 } = evaluate(options, state);
5403 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
5404 const side = getSide(placement);
5405 const alignment = getAlignment(placement);
5406 const isYAxis = getSideAxis(placement) === "y";
5407 const {
5408 width,
5409 height
5410 } = rects.floating;
5411 let heightSide;
5412 let widthSide;
5413 if (side === "top" || side === "bottom") {
5414 heightSide = side;
5415 widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right";
5416 } else {
5417 widthSide = side;
5418 heightSide = alignment === "end" ? "top" : "bottom";
5419 }
5420 const maximumClippingHeight = height - overflow.top - overflow.bottom;
5421 const maximumClippingWidth = width - overflow.left - overflow.right;
5422 const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
5423 const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
5424 const noShift = !state.middlewareData.shift;
5425 let availableHeight = overflowAvailableHeight;
5426 let availableWidth = overflowAvailableWidth;
5427 if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {
5428 availableWidth = maximumClippingWidth;
5429 }
5430 if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {
5431 availableHeight = maximumClippingHeight;
5432 }
5433 if (noShift && !alignment) {
5434 const xMin = max(overflow.left, 0);
5435 const xMax = max(overflow.right, 0);
5436 const yMin = max(overflow.top, 0);
5437 const yMax = max(overflow.bottom, 0);
5438 if (isYAxis) {
5439 availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));
5440 } else {
5441 availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));
5442 }
5443 }
5444 await apply({
5445 ...state,
5446 availableWidth,
5447 availableHeight
5448 });
5449 const nextDimensions = await platform3.getDimensions(elements.floating);
5450 if (width !== nextDimensions.width || height !== nextDimensions.height) {
5451 return {
5452 reset: {
5453 rects: true
5454 }
5455 };
5456 }
5457 return {};
5458 }
5459 };
5460 };
5461
5462 // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
5463 function getCssDimensions(element) {
5464 const css = getComputedStyle2(element);
5465 let width = parseFloat(css.width) || 0;
5466 let height = parseFloat(css.height) || 0;
5467 const hasOffset = isHTMLElement(element);
5468 const offsetWidth = hasOffset ? element.offsetWidth : width;
5469 const offsetHeight = hasOffset ? element.offsetHeight : height;
5470 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
5471 if (shouldFallback) {
5472 width = offsetWidth;
5473 height = offsetHeight;
5474 }
5475 return {
5476 width,
5477 height,
5478 $: shouldFallback
5479 };
5480 }
5481 function unwrapElement(element) {
5482 return !isElement(element) ? element.contextElement : element;
5483 }
5484 function getScale(element) {
5485 const domElement = unwrapElement(element);
5486 if (!isHTMLElement(domElement)) {
5487 return createCoords(1);
5488 }
5489 const rect = domElement.getBoundingClientRect();
5490 const {
5491 width,
5492 height,
5493 $
5494 } = getCssDimensions(domElement);
5495 let x = ($ ? round(rect.width) : rect.width) / width;
5496 let y = ($ ? round(rect.height) : rect.height) / height;
5497 if (!x || !Number.isFinite(x)) {
5498 x = 1;
5499 }
5500 if (!y || !Number.isFinite(y)) {
5501 y = 1;
5502 }
5503 return {
5504 x,
5505 y
5506 };
5507 }
5508 var noOffsets = /* @__PURE__ */ createCoords(0);
5509 function getVisualOffsets(element) {
5510 const win = getWindow(element);
5511 if (!isWebKit() || !win.visualViewport) {
5512 return noOffsets;
5513 }
5514 return {
5515 x: win.visualViewport.offsetLeft,
5516 y: win.visualViewport.offsetTop
5517 };
5518 }
5519 function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
5520 if (isFixed === void 0) {
5521 isFixed = false;
5522 }
5523 if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {
5524 return false;
5525 }
5526 return isFixed;
5527 }
5528 function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
5529 if (includeScale === void 0) {
5530 includeScale = false;
5531 }
5532 if (isFixedStrategy === void 0) {
5533 isFixedStrategy = false;
5534 }
5535 const clientRect = element.getBoundingClientRect();
5536 const domElement = unwrapElement(element);
5537 let scale = createCoords(1);
5538 if (includeScale) {
5539 if (offsetParent) {
5540 if (isElement(offsetParent)) {
5541 scale = getScale(offsetParent);
5542 }
5543 } else {
5544 scale = getScale(element);
5545 }
5546 }
5547 const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
5548 let x = (clientRect.left + visualOffsets.x) / scale.x;
5549 let y = (clientRect.top + visualOffsets.y) / scale.y;
5550 let width = clientRect.width / scale.x;
5551 let height = clientRect.height / scale.y;
5552 if (domElement) {
5553 const win = getWindow(domElement);
5554 const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
5555 let currentWin = win;
5556 let currentIFrame = getFrameElement(currentWin);
5557 while (currentIFrame && offsetParent && offsetWin !== currentWin) {
5558 const iframeScale = getScale(currentIFrame);
5559 const iframeRect = currentIFrame.getBoundingClientRect();
5560 const css = getComputedStyle2(currentIFrame);
5561 const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
5562 const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
5563 x *= iframeScale.x;
5564 y *= iframeScale.y;
5565 width *= iframeScale.x;
5566 height *= iframeScale.y;
5567 x += left;
5568 y += top;
5569 currentWin = getWindow(currentIFrame);
5570 currentIFrame = getFrameElement(currentWin);
5571 }
5572 }
5573 return rectToClientRect({
5574 width,
5575 height,
5576 x,
5577 y
5578 });
5579 }
5580 function getWindowScrollBarX(element, rect) {
5581 const leftScroll = getNodeScroll(element).scrollLeft;
5582 if (!rect) {
5583 return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
5584 }
5585 return rect.left + leftScroll;
5586 }
5587 function getHTMLOffset(documentElement, scroll) {
5588 const htmlRect = documentElement.getBoundingClientRect();
5589 const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
5590 const y = htmlRect.top + scroll.scrollTop;
5591 return {
5592 x,
5593 y
5594 };
5595 }
5596 function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
5597 let {
5598 elements,
5599 rect,
5600 offsetParent,
5601 strategy
5602 } = _ref;
5603 const isFixed = strategy === "fixed";
5604 const documentElement = getDocumentElement(offsetParent);
5605 const topLayer = elements ? isTopLayer(elements.floating) : false;
5606 if (offsetParent === documentElement || topLayer && isFixed) {
5607 return rect;
5608 }
5609 let scroll = {
5610 scrollLeft: 0,
5611 scrollTop: 0
5612 };
5613 let scale = createCoords(1);
5614 const offsets = createCoords(0);
5615 const isOffsetParentAnElement = isHTMLElement(offsetParent);
5616 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
5617 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
5618 scroll = getNodeScroll(offsetParent);
5619 }
5620 if (isOffsetParentAnElement) {
5621 const offsetRect = getBoundingClientRect(offsetParent);
5622 scale = getScale(offsetParent);
5623 offsets.x = offsetRect.x + offsetParent.clientLeft;
5624 offsets.y = offsetRect.y + offsetParent.clientTop;
5625 }
5626 }
5627 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
5628 return {
5629 width: rect.width * scale.x,
5630 height: rect.height * scale.y,
5631 x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
5632 y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
5633 };
5634 }
5635 function getClientRects(element) {
5636 return Array.from(element.getClientRects());
5637 }
5638 function getDocumentRect(element) {
5639 const html = getDocumentElement(element);
5640 const scroll = getNodeScroll(element);
5641 const body = element.ownerDocument.body;
5642 const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
5643 const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
5644 let x = -scroll.scrollLeft + getWindowScrollBarX(element);
5645 const y = -scroll.scrollTop;
5646 if (getComputedStyle2(body).direction === "rtl") {
5647 x += max(html.clientWidth, body.clientWidth) - width;
5648 }
5649 return {
5650 width,
5651 height,
5652 x,
5653 y
5654 };
5655 }
5656 var SCROLLBAR_MAX = 25;
5657 function getViewportRect(element, strategy) {
5658 const win = getWindow(element);
5659 const html = getDocumentElement(element);
5660 const visualViewport = win.visualViewport;
5661 let width = html.clientWidth;
5662 let height = html.clientHeight;
5663 let x = 0;
5664 let y = 0;
5665 if (visualViewport) {
5666 width = visualViewport.width;
5667 height = visualViewport.height;
5668 const visualViewportBased = isWebKit();
5669 if (!visualViewportBased || visualViewportBased && strategy === "fixed") {
5670 x = visualViewport.offsetLeft;
5671 y = visualViewport.offsetTop;
5672 }
5673 }
5674 const windowScrollbarX = getWindowScrollBarX(html);
5675 if (windowScrollbarX <= 0) {
5676 const doc = html.ownerDocument;
5677 const body = doc.body;
5678 const bodyStyles = getComputedStyle(body);
5679 const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
5680 const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
5681 if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
5682 width -= clippingStableScrollbarWidth;
5683 }
5684 } else if (windowScrollbarX <= SCROLLBAR_MAX) {
5685 width += windowScrollbarX;
5686 }
5687 return {
5688 width,
5689 height,
5690 x,
5691 y
5692 };
5693 }
5694 function getInnerBoundingClientRect(element, strategy) {
5695 const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
5696 const top = clientRect.top + element.clientTop;
5697 const left = clientRect.left + element.clientLeft;
5698 const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
5699 const width = element.clientWidth * scale.x;
5700 const height = element.clientHeight * scale.y;
5701 const x = left * scale.x;
5702 const y = top * scale.y;
5703 return {
5704 width,
5705 height,
5706 x,
5707 y
5708 };
5709 }
5710 function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
5711 let rect;
5712 if (clippingAncestor === "viewport") {
5713 rect = getViewportRect(element, strategy);
5714 } else if (clippingAncestor === "document") {
5715 rect = getDocumentRect(getDocumentElement(element));
5716 } else if (isElement(clippingAncestor)) {
5717 rect = getInnerBoundingClientRect(clippingAncestor, strategy);
5718 } else {
5719 const visualOffsets = getVisualOffsets(element);
5720 rect = {
5721 x: clippingAncestor.x - visualOffsets.x,
5722 y: clippingAncestor.y - visualOffsets.y,
5723 width: clippingAncestor.width,
5724 height: clippingAncestor.height
5725 };
5726 }
5727 return rectToClientRect(rect);
5728 }
5729 function hasFixedPositionAncestor(element, stopNode) {
5730 const parentNode = getParentNode(element);
5731 if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {
5732 return false;
5733 }
5734 return getComputedStyle2(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode);
5735 }
5736 function getClippingElementAncestors(element, cache) {
5737 const cachedResult = cache.get(element);
5738 if (cachedResult) {
5739 return cachedResult;
5740 }
5741 let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body");
5742 let currentContainingBlockComputedStyle = null;
5743 const elementIsFixed = getComputedStyle2(element).position === "fixed";
5744 let currentNode = elementIsFixed ? getParentNode(element) : element;
5745 while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
5746 const computedStyle = getComputedStyle2(currentNode);
5747 const currentNodeIsContaining = isContainingBlock(currentNode);
5748 if (!currentNodeIsContaining && computedStyle.position === "fixed") {
5749 currentContainingBlockComputedStyle = null;
5750 }
5751 const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === "absolute" || currentContainingBlockComputedStyle.position === "fixed") || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
5752 if (shouldDropCurrentNode) {
5753 result = result.filter((ancestor) => ancestor !== currentNode);
5754 } else {
5755 currentContainingBlockComputedStyle = computedStyle;
5756 }
5757 currentNode = getParentNode(currentNode);
5758 }
5759 cache.set(element, result);
5760 return result;
5761 }
5762 function getClippingRect(_ref) {
5763 let {
5764 element,
5765 boundary,
5766 rootBoundary,
5767 strategy
5768 } = _ref;
5769 const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
5770 const clippingAncestors = [...elementClippingAncestors, rootBoundary];
5771 const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);
5772 let top = firstRect.top;
5773 let right = firstRect.right;
5774 let bottom = firstRect.bottom;
5775 let left = firstRect.left;
5776 for (let i = 1; i < clippingAncestors.length; i++) {
5777 const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);
5778 top = max(rect.top, top);
5779 right = min(rect.right, right);
5780 bottom = min(rect.bottom, bottom);
5781 left = max(rect.left, left);
5782 }
5783 return {
5784 width: right - left,
5785 height: bottom - top,
5786 x: left,
5787 y: top
5788 };
5789 }
5790 function getDimensions(element) {
5791 const {
5792 width,
5793 height
5794 } = getCssDimensions(element);
5795 return {
5796 width,
5797 height
5798 };
5799 }
5800 function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
5801 const isOffsetParentAnElement = isHTMLElement(offsetParent);
5802 const documentElement = getDocumentElement(offsetParent);
5803 const isFixed = strategy === "fixed";
5804 const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
5805 let scroll = {
5806 scrollLeft: 0,
5807 scrollTop: 0
5808 };
5809 const offsets = createCoords(0);
5810 function setLeftRTLScrollbarOffset() {
5811 offsets.x = getWindowScrollBarX(documentElement);
5812 }
5813 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
5814 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
5815 scroll = getNodeScroll(offsetParent);
5816 }
5817 if (isOffsetParentAnElement) {
5818 const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
5819 offsets.x = offsetRect.x + offsetParent.clientLeft;
5820 offsets.y = offsetRect.y + offsetParent.clientTop;
5821 } else if (documentElement) {
5822 setLeftRTLScrollbarOffset();
5823 }
5824 }
5825 if (isFixed && !isOffsetParentAnElement && documentElement) {
5826 setLeftRTLScrollbarOffset();
5827 }
5828 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
5829 const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
5830 const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
5831 return {
5832 x,
5833 y,
5834 width: rect.width,
5835 height: rect.height
5836 };
5837 }
5838 function isStaticPositioned(element) {
5839 return getComputedStyle2(element).position === "static";
5840 }
5841 function getTrueOffsetParent(element, polyfill) {
5842 if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") {
5843 return null;
5844 }
5845 if (polyfill) {
5846 return polyfill(element);
5847 }
5848 let rawOffsetParent = element.offsetParent;
5849 if (getDocumentElement(element) === rawOffsetParent) {
5850 rawOffsetParent = rawOffsetParent.ownerDocument.body;
5851 }
5852 return rawOffsetParent;
5853 }
5854 function getOffsetParent(element, polyfill) {
5855 const win = getWindow(element);
5856 if (isTopLayer(element)) {
5857 return win;
5858 }
5859 if (!isHTMLElement(element)) {
5860 let svgOffsetParent = getParentNode(element);
5861 while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
5862 if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
5863 return svgOffsetParent;
5864 }
5865 svgOffsetParent = getParentNode(svgOffsetParent);
5866 }
5867 return win;
5868 }
5869 let offsetParent = getTrueOffsetParent(element, polyfill);
5870 while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {
5871 offsetParent = getTrueOffsetParent(offsetParent, polyfill);
5872 }
5873 if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {
5874 return win;
5875 }
5876 return offsetParent || getContainingBlock(element) || win;
5877 }
5878 var getElementRects = async function(data) {
5879 const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
5880 const getDimensionsFn = this.getDimensions;
5881 const floatingDimensions = await getDimensionsFn(data.floating);
5882 return {
5883 reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
5884 floating: {
5885 x: 0,
5886 y: 0,
5887 width: floatingDimensions.width,
5888 height: floatingDimensions.height
5889 }
5890 };
5891 };
5892 function isRTL(element) {
5893 return getComputedStyle2(element).direction === "rtl";
5894 }
5895 var platform2 = {
5896 convertOffsetParentRelativeRectToViewportRelativeRect,
5897 getDocumentElement,
5898 getClippingRect,
5899 getOffsetParent,
5900 getElementRects,
5901 getClientRects,
5902 getDimensions,
5903 getScale,
5904 isElement,
5905 isRTL
5906 };
5907 function rectsAreEqual(a, b) {
5908 return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
5909 }
5910 function observeMove(element, onMove) {
5911 let io = null;
5912 let timeoutId;
5913 const root = getDocumentElement(element);
5914 function cleanup() {
5915 var _io;
5916 clearTimeout(timeoutId);
5917 (_io = io) == null || _io.disconnect();
5918 io = null;
5919 }
5920 function refresh(skip, threshold) {
5921 if (skip === void 0) {
5922 skip = false;
5923 }
5924 if (threshold === void 0) {
5925 threshold = 1;
5926 }
5927 cleanup();
5928 const elementRectForRootMargin = element.getBoundingClientRect();
5929 const {
5930 left,
5931 top,
5932 width,
5933 height
5934 } = elementRectForRootMargin;
5935 if (!skip) {
5936 onMove();
5937 }
5938 if (!width || !height) {
5939 return;
5940 }
5941 const insetTop = floor(top);
5942 const insetRight = floor(root.clientWidth - (left + width));
5943 const insetBottom = floor(root.clientHeight - (top + height));
5944 const insetLeft = floor(left);
5945 const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px";
5946 const options = {
5947 rootMargin,
5948 threshold: max(0, min(1, threshold)) || 1
5949 };
5950 let isFirstUpdate = true;
5951 function handleObserve(entries) {
5952 const ratio = entries[0].intersectionRatio;
5953 if (ratio !== threshold) {
5954 if (!isFirstUpdate) {
5955 return refresh();
5956 }
5957 if (!ratio) {
5958 timeoutId = setTimeout(() => {
5959 refresh(false, 1e-7);
5960 }, 1e3);
5961 } else {
5962 refresh(false, ratio);
5963 }
5964 }
5965 if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
5966 refresh();
5967 }
5968 isFirstUpdate = false;
5969 }
5970 try {
5971 io = new IntersectionObserver(handleObserve, {
5972 ...options,
5973 // Handle <iframe>s
5974 root: root.ownerDocument
5975 });
5976 } catch (_e) {
5977 io = new IntersectionObserver(handleObserve, options);
5978 }
5979 io.observe(element);
5980 }
5981 refresh(true);
5982 return cleanup;
5983 }
5984 function autoUpdate(reference, floating, update2, options) {
5985 if (options === void 0) {
5986 options = {};
5987 }
5988 const {
5989 ancestorScroll = true,
5990 ancestorResize = true,
5991 elementResize = typeof ResizeObserver === "function",
5992 layoutShift = typeof IntersectionObserver === "function",
5993 animationFrame = false
5994 } = options;
5995 const referenceEl = unwrapElement(reference);
5996 const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : [];
5997 ancestors.forEach((ancestor) => {
5998 ancestorScroll && ancestor.addEventListener("scroll", update2, {
5999 passive: true
6000 });
6001 ancestorResize && ancestor.addEventListener("resize", update2);
6002 });
6003 const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2) : null;
6004 let reobserveFrame = -1;
6005 let resizeObserver = null;
6006 if (elementResize) {
6007 resizeObserver = new ResizeObserver((_ref) => {
6008 let [firstEntry] = _ref;
6009 if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {
6010 resizeObserver.unobserve(floating);
6011 cancelAnimationFrame(reobserveFrame);
6012 reobserveFrame = requestAnimationFrame(() => {
6013 var _resizeObserver;
6014 (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
6015 });
6016 }
6017 update2();
6018 });
6019 if (referenceEl && !animationFrame) {
6020 resizeObserver.observe(referenceEl);
6021 }
6022 if (floating) {
6023 resizeObserver.observe(floating);
6024 }
6025 }
6026 let frameId;
6027 let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
6028 if (animationFrame) {
6029 frameLoop();
6030 }
6031 function frameLoop() {
6032 const nextRefRect = getBoundingClientRect(reference);
6033 if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {
6034 update2();
6035 }
6036 prevRefRect = nextRefRect;
6037 frameId = requestAnimationFrame(frameLoop);
6038 }
6039 update2();
6040 return () => {
6041 var _resizeObserver2;
6042 ancestors.forEach((ancestor) => {
6043 ancestorScroll && ancestor.removeEventListener("scroll", update2);
6044 ancestorResize && ancestor.removeEventListener("resize", update2);
6045 });
6046 cleanupIo == null || cleanupIo();
6047 (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
6048 resizeObserver = null;
6049 if (animationFrame) {
6050 cancelAnimationFrame(frameId);
6051 }
6052 };
6053 }
6054 var offset2 = offset;
6055 var shift2 = shift;
6056 var flip2 = flip;
6057 var size2 = size;
6058 var hide2 = hide;
6059 var limitShift2 = limitShift;
6060 var computePosition2 = (reference, floating, options) => {
6061 const cache = /* @__PURE__ */ new Map();
6062 const mergedOptions = {
6063 platform: platform2,
6064 ...options
6065 };
6066 const platformWithCache = {
6067 ...mergedOptions.platform,
6068 _c: cache
6069 };
6070 return computePosition(reference, floating, {
6071 ...mergedOptions,
6072 platform: platformWithCache
6073 });
6074 };
6075
6076 // node_modules/@base-ui/react/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs
6077 var React28 = __toESM(require_react(), 1);
6078 var import_react2 = __toESM(require_react(), 1);
6079 var ReactDOM3 = __toESM(require_react_dom(), 1);
6080 var isClient = typeof document !== "undefined";
6081 var noop2 = function noop3() {
6082 };
6083 var index = isClient ? import_react2.useLayoutEffect : noop2;
6084 function deepEqual(a, b) {
6085 if (a === b) {
6086 return true;
6087 }
6088 if (typeof a !== typeof b) {
6089 return false;
6090 }
6091 if (typeof a === "function" && a.toString() === b.toString()) {
6092 return true;
6093 }
6094 let length;
6095 let i;
6096 let keys;
6097 if (a && b && typeof a === "object") {
6098 if (Array.isArray(a)) {
6099 length = a.length;
6100 if (length !== b.length) return false;
6101 for (i = length; i-- !== 0; ) {
6102 if (!deepEqual(a[i], b[i])) {
6103 return false;
6104 }
6105 }
6106 return true;
6107 }
6108 keys = Object.keys(a);
6109 length = keys.length;
6110 if (length !== Object.keys(b).length) {
6111 return false;
6112 }
6113 for (i = length; i-- !== 0; ) {
6114 if (!{}.hasOwnProperty.call(b, keys[i])) {
6115 return false;
6116 }
6117 }
6118 for (i = length; i-- !== 0; ) {
6119 const key = keys[i];
6120 if (key === "_owner" && a.$$typeof) {
6121 continue;
6122 }
6123 if (!deepEqual(a[key], b[key])) {
6124 return false;
6125 }
6126 }
6127 return true;
6128 }
6129 return a !== a && b !== b;
6130 }
6131 function getDPR(element) {
6132 if (typeof window === "undefined") {
6133 return 1;
6134 }
6135 const win = element.ownerDocument.defaultView || window;
6136 return win.devicePixelRatio || 1;
6137 }
6138 function roundByDPR(element, value) {
6139 const dpr = getDPR(element);
6140 return Math.round(value * dpr) / dpr;
6141 }
6142 function useLatestRef(value) {
6143 const ref = React28.useRef(value);
6144 index(() => {
6145 ref.current = value;
6146 });
6147 return ref;
6148 }
6149 function useFloating(options) {
6150 if (options === void 0) {
6151 options = {};
6152 }
6153 const {
6154 placement = "bottom",
6155 strategy = "absolute",
6156 middleware = [],
6157 platform: platform3,
6158 elements: {
6159 reference: externalReference,
6160 floating: externalFloating
6161 } = {},
6162 transform = true,
6163 whileElementsMounted,
6164 open
6165 } = options;
6166 const [data, setData] = React28.useState({
6167 x: 0,
6168 y: 0,
6169 strategy,
6170 placement,
6171 middlewareData: {},
6172 isPositioned: false
6173 });
6174 const [latestMiddleware, setLatestMiddleware] = React28.useState(middleware);
6175 if (!deepEqual(latestMiddleware, middleware)) {
6176 setLatestMiddleware(middleware);
6177 }
6178 const [_reference, _setReference] = React28.useState(null);
6179 const [_floating, _setFloating] = React28.useState(null);
6180 const setReference = React28.useCallback((node) => {
6181 if (node !== referenceRef.current) {
6182 referenceRef.current = node;
6183 _setReference(node);
6184 }
6185 }, []);
6186 const setFloating = React28.useCallback((node) => {
6187 if (node !== floatingRef.current) {
6188 floatingRef.current = node;
6189 _setFloating(node);
6190 }
6191 }, []);
6192 const referenceEl = externalReference || _reference;
6193 const floatingEl = externalFloating || _floating;
6194 const referenceRef = React28.useRef(null);
6195 const floatingRef = React28.useRef(null);
6196 const dataRef = React28.useRef(data);
6197 const hasWhileElementsMounted = whileElementsMounted != null;
6198 const whileElementsMountedRef = useLatestRef(whileElementsMounted);
6199 const platformRef = useLatestRef(platform3);
6200 const openRef = useLatestRef(open);
6201 const update2 = React28.useCallback(() => {
6202 if (!referenceRef.current || !floatingRef.current) {
6203 return;
6204 }
6205 const config = {
6206 placement,
6207 strategy,
6208 middleware: latestMiddleware
6209 };
6210 if (platformRef.current) {
6211 config.platform = platformRef.current;
6212 }
6213 computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => {
6214 const fullData = {
6215 ...data2,
6216 // The floating element's position may be recomputed while it's closed
6217 // but still mounted (such as when transitioning out). To ensure
6218 // `isPositioned` will be `false` initially on the next open, avoid
6219 // setting it to `true` when `open === false` (must be specified).
6220 isPositioned: openRef.current !== false
6221 };
6222 if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {
6223 dataRef.current = fullData;
6224 ReactDOM3.flushSync(() => {
6225 setData(fullData);
6226 });
6227 }
6228 });
6229 }, [latestMiddleware, placement, strategy, platformRef, openRef]);
6230 index(() => {
6231 if (open === false && dataRef.current.isPositioned) {
6232 dataRef.current.isPositioned = false;
6233 setData((data2) => ({
6234 ...data2,
6235 isPositioned: false
6236 }));
6237 }
6238 }, [open]);
6239 const isMountedRef = React28.useRef(false);
6240 index(() => {
6241 isMountedRef.current = true;
6242 return () => {
6243 isMountedRef.current = false;
6244 };
6245 }, []);
6246 index(() => {
6247 if (referenceEl) referenceRef.current = referenceEl;
6248 if (floatingEl) floatingRef.current = floatingEl;
6249 if (referenceEl && floatingEl) {
6250 if (whileElementsMountedRef.current) {
6251 return whileElementsMountedRef.current(referenceEl, floatingEl, update2);
6252 }
6253 update2();
6254 }
6255 }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]);
6256 const refs = React28.useMemo(() => ({
6257 reference: referenceRef,
6258 floating: floatingRef,
6259 setReference,
6260 setFloating
6261 }), [setReference, setFloating]);
6262 const elements = React28.useMemo(() => ({
6263 reference: referenceEl,
6264 floating: floatingEl
6265 }), [referenceEl, floatingEl]);
6266 const floatingStyles = React28.useMemo(() => {
6267 const initialStyles = {
6268 position: strategy,
6269 left: 0,
6270 top: 0
6271 };
6272 if (!elements.floating) {
6273 return initialStyles;
6274 }
6275 const x = roundByDPR(elements.floating, data.x);
6276 const y = roundByDPR(elements.floating, data.y);
6277 if (transform) {
6278 return {
6279 ...initialStyles,
6280 transform: "translate(" + x + "px, " + y + "px)",
6281 ...getDPR(elements.floating) >= 1.5 && {
6282 willChange: "transform"
6283 }
6284 };
6285 }
6286 return {
6287 position: strategy,
6288 left: x,
6289 top: y
6290 };
6291 }, [strategy, transform, elements.floating, data.x, data.y]);
6292 return React28.useMemo(() => ({
6293 ...data,
6294 update: update2,
6295 refs,
6296 elements,
6297 floatingStyles
6298 }), [data, update2, refs, elements, floatingStyles]);
6299 }
6300 var offset3 = (options, deps) => {
6301 const result = offset2(options);
6302 return {
6303 name: result.name,
6304 fn: result.fn,
6305 options: [options, deps]
6306 };
6307 };
6308 var shift3 = (options, deps) => {
6309 const result = shift2(options);
6310 return {
6311 name: result.name,
6312 fn: result.fn,
6313 options: [options, deps]
6314 };
6315 };
6316 var limitShift3 = (options, deps) => {
6317 const result = limitShift2(options);
6318 return {
6319 fn: result.fn,
6320 options: [options, deps]
6321 };
6322 };
6323 var flip3 = (options, deps) => {
6324 const result = flip2(options);
6325 return {
6326 name: result.name,
6327 fn: result.fn,
6328 options: [options, deps]
6329 };
6330 };
6331 var size3 = (options, deps) => {
6332 const result = size2(options);
6333 return {
6334 name: result.name,
6335 fn: result.fn,
6336 options: [options, deps]
6337 };
6338 };
6339 var hide3 = (options, deps) => {
6340 const result = hide2(options);
6341 return {
6342 name: result.name,
6343 fn: result.fn,
6344 options: [options, deps]
6345 };
6346 };
6347
6348 // node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js
6349 var React33 = __toESM(require_react(), 1);
6350
6351 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js
6352 var React32 = __toESM(require_react(), 1);
6353
6354 // node_modules/@base-ui/utils/esm/store/createSelector.js
6355 var createSelector = (a, b, c, d, e, f, ...other) => {
6356 if (other.length > 0) {
6357 throw new Error(true ? "Unsupported number of selectors" : formatErrorMessage_default(1));
6358 }
6359 let selector;
6360 if (a && b && c && d && e && f) {
6361 selector = (state, a1, a2, a3) => {
6362 const va = a(state, a1, a2, a3);
6363 const vb = b(state, a1, a2, a3);
6364 const vc = c(state, a1, a2, a3);
6365 const vd = d(state, a1, a2, a3);
6366 const ve = e(state, a1, a2, a3);
6367 return f(va, vb, vc, vd, ve, a1, a2, a3);
6368 };
6369 } else if (a && b && c && d && e) {
6370 selector = (state, a1, a2, a3) => {
6371 const va = a(state, a1, a2, a3);
6372 const vb = b(state, a1, a2, a3);
6373 const vc = c(state, a1, a2, a3);
6374 const vd = d(state, a1, a2, a3);
6375 return e(va, vb, vc, vd, a1, a2, a3);
6376 };
6377 } else if (a && b && c && d) {
6378 selector = (state, a1, a2, a3) => {
6379 const va = a(state, a1, a2, a3);
6380 const vb = b(state, a1, a2, a3);
6381 const vc = c(state, a1, a2, a3);
6382 return d(va, vb, vc, a1, a2, a3);
6383 };
6384 } else if (a && b && c) {
6385 selector = (state, a1, a2, a3) => {
6386 const va = a(state, a1, a2, a3);
6387 const vb = b(state, a1, a2, a3);
6388 return c(va, vb, a1, a2, a3);
6389 };
6390 } else if (a && b) {
6391 selector = (state, a1, a2, a3) => {
6392 const va = a(state, a1, a2, a3);
6393 return b(va, a1, a2, a3);
6394 };
6395 } else if (a) {
6396 selector = a;
6397 } else {
6398 throw (
6399 /* minify-error-disabled */
6400 new Error("Missing arguments")
6401 );
6402 }
6403 return selector;
6404 };
6405
6406 // node_modules/@base-ui/utils/esm/store/useStore.js
6407 var React30 = __toESM(require_react(), 1);
6408 var import_shim = __toESM(require_shim(), 1);
6409 var import_with_selector = __toESM(require_with_selector(), 1);
6410
6411 // node_modules/@base-ui/utils/esm/fastHooks.js
6412 var React29 = __toESM(require_react(), 1);
6413 var hooks = [];
6414 var currentInstance = void 0;
6415 function getInstance() {
6416 return currentInstance;
6417 }
6418 function register(hook) {
6419 hooks.push(hook);
6420 }
6421 function fastComponent(fn) {
6422 const FastComponent = (props, forwardedRef) => {
6423 const instance = useRefWithInit(createInstance).current;
6424 let result;
6425 try {
6426 currentInstance = instance;
6427 for (const hook of hooks) {
6428 hook.before(instance);
6429 }
6430 result = fn(props, forwardedRef);
6431 for (const hook of hooks) {
6432 hook.after(instance);
6433 }
6434 instance.didInitialize = true;
6435 } finally {
6436 currentInstance = void 0;
6437 }
6438 return result;
6439 };
6440 FastComponent.displayName = fn.displayName || fn.name;
6441 return FastComponent;
6442 }
6443 function fastComponentRef(fn) {
6444 return /* @__PURE__ */ React29.forwardRef(fastComponent(fn));
6445 }
6446 function createInstance() {
6447 return {
6448 didInitialize: false
6449 };
6450 }
6451
6452 // node_modules/@base-ui/utils/esm/store/useStore.js
6453 var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19);
6454 var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy;
6455 function useStore(store, selector, a1, a2, a3) {
6456 return useStoreImplementation(store, selector, a1, a2, a3);
6457 }
6458 function useStoreR19(store, selector, a1, a2, a3) {
6459 const getSelection = React30.useCallback(() => selector(store.getSnapshot(), a1, a2, a3), [store, selector, a1, a2, a3]);
6460 return (0, import_shim.useSyncExternalStore)(store.subscribe, getSelection, getSelection);
6461 }
6462 register({
6463 before(instance) {
6464 instance.syncIndex = 0;
6465 if (!instance.didInitialize) {
6466 instance.syncTick = 1;
6467 instance.syncHooks = [];
6468 instance.didChangeStore = true;
6469 instance.getSnapshot = () => {
6470 let didChange2 = false;
6471 for (let i = 0; i < instance.syncHooks.length; i += 1) {
6472 const hook = instance.syncHooks[i];
6473 const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3);
6474 if (hook.didChange || !Object.is(hook.value, value)) {
6475 didChange2 = true;
6476 hook.value = value;
6477 hook.didChange = false;
6478 }
6479 }
6480 if (didChange2) {
6481 instance.syncTick += 1;
6482 }
6483 return instance.syncTick;
6484 };
6485 }
6486 },
6487 after(instance) {
6488 if (instance.syncHooks.length > 0) {
6489 if (instance.didChangeStore) {
6490 instance.didChangeStore = false;
6491 instance.subscribe = (onStoreChange) => {
6492 const stores = /* @__PURE__ */ new Set();
6493 for (const hook of instance.syncHooks) {
6494 stores.add(hook.store);
6495 }
6496 const unsubscribes = [];
6497 for (const store of stores) {
6498 unsubscribes.push(store.subscribe(onStoreChange));
6499 }
6500 return () => {
6501 for (const unsubscribe of unsubscribes) {
6502 unsubscribe();
6503 }
6504 };
6505 };
6506 }
6507 (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot);
6508 }
6509 }
6510 });
6511 function useStoreFast(store, selector, a1, a2, a3) {
6512 const instance = getInstance();
6513 if (!instance) {
6514 return useStoreR19(store, selector, a1, a2, a3);
6515 }
6516 const index2 = instance.syncIndex;
6517 instance.syncIndex += 1;
6518 let hook;
6519 if (!instance.didInitialize) {
6520 hook = {
6521 store,
6522 selector,
6523 a1,
6524 a2,
6525 a3,
6526 value: selector(store.getSnapshot(), a1, a2, a3),
6527 didChange: false
6528 };
6529 instance.syncHooks.push(hook);
6530 } else {
6531 hook = instance.syncHooks[index2];
6532 if (hook.store !== store || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) {
6533 if (hook.store !== store) {
6534 instance.didChangeStore = true;
6535 }
6536 hook.store = store;
6537 hook.selector = selector;
6538 hook.a1 = a1;
6539 hook.a2 = a2;
6540 hook.a3 = a3;
6541 hook.didChange = true;
6542 }
6543 }
6544 return hook.value;
6545 }
6546 function useStoreLegacy(store, selector, a1, a2, a3) {
6547 return (0, import_with_selector.useSyncExternalStoreWithSelector)(store.subscribe, store.getSnapshot, store.getSnapshot, (state) => selector(state, a1, a2, a3));
6548 }
6549
6550 // node_modules/@base-ui/utils/esm/store/Store.js
6551 var Store = class {
6552 /**
6553 * The current state of the store.
6554 * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}.
6555 * To subscribe to state changes, use the {@link useState} method. The value returned by {@link useState} is updated after the component renders (similarly to React's useState).
6556 * The values can be used directly (to avoid subscribing to the store) in effects or event handlers.
6557 *
6558 * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification.
6559 */
6560 // Internal state to handle recursive `setState()` calls
6561 constructor(state) {
6562 this.state = state;
6563 this.listeners = /* @__PURE__ */ new Set();
6564 this.updateTick = 0;
6565 }
6566 /**
6567 * Registers a listener that will be called whenever the store's state changes.
6568 *
6569 * @param fn The listener function to be called on state changes.
6570 * @returns A function to unsubscribe the listener.
6571 */
6572 subscribe = (fn) => {
6573 this.listeners.add(fn);
6574 return () => {
6575 this.listeners.delete(fn);
6576 };
6577 };
6578 /**
6579 * Returns the current state of the store.
6580 */
6581 getSnapshot = () => {
6582 return this.state;
6583 };
6584 /**
6585 * Updates the entire store's state and notifies all registered listeners.
6586 *
6587 * @param newState The new state to set for the store.
6588 */
6589 setState(newState) {
6590 if (this.state === newState) {
6591 return;
6592 }
6593 this.state = newState;
6594 this.updateTick += 1;
6595 const currentTick = this.updateTick;
6596 for (const listener of this.listeners) {
6597 if (currentTick !== this.updateTick) {
6598 return;
6599 }
6600 listener(newState);
6601 }
6602 }
6603 /**
6604 * Merges the provided changes into the current state and notifies listeners if there are changes.
6605 *
6606 * @param changes An object containing the changes to apply to the current state.
6607 */
6608 update(changes) {
6609 for (const key in changes) {
6610 if (!Object.is(this.state[key], changes[key])) {
6611 this.setState({
6612 ...this.state,
6613 ...changes
6614 });
6615 return;
6616 }
6617 }
6618 }
6619 /**
6620 * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed.
6621 *
6622 * @param key The key in the store's state to update.
6623 * @param value The new value to set for the specified key.
6624 */
6625 set(key, value) {
6626 if (!Object.is(this.state[key], value)) {
6627 this.setState({
6628 ...this.state,
6629 [key]: value
6630 });
6631 }
6632 }
6633 /**
6634 * Gives the state a new reference and updates all registered listeners.
6635 */
6636 notifyAll() {
6637 const newState = {
6638 ...this.state
6639 };
6640 this.setState(newState);
6641 }
6642 use(selector, a1, a2, a3) {
6643 return useStore(this, selector, a1, a2, a3);
6644 }
6645 };
6646
6647 // node_modules/@base-ui/utils/esm/store/ReactStore.js
6648 var React31 = __toESM(require_react(), 1);
6649 var ReactStore = class extends Store {
6650 /**
6651 * Creates a new ReactStore instance.
6652 *
6653 * @param state Initial state of the store.
6654 * @param context Non-reactive context values.
6655 * @param selectors Optional selectors for use with `useState`.
6656 */
6657 constructor(state, context = {}, selectors4) {
6658 super(state);
6659 this.context = context;
6660 this.selectors = selectors4;
6661 }
6662 /**
6663 * Non-reactive values such as refs, callbacks, etc.
6664 */
6665 /**
6666 * Synchronizes a single external value into the store.
6667 *
6668 * Note that the while the value in `state` is updated immediately, the value returned
6669 * by `useState` is updated before the next render (similarly to React's `useState`).
6670 */
6671 useSyncedValue(key, value) {
6672 React31.useDebugValue(key);
6673 const store = this;
6674 useIsoLayoutEffect(() => {
6675 if (store.state[key] !== value) {
6676 store.set(key, value);
6677 }
6678 }, [store, key, value]);
6679 }
6680 /**
6681 * Synchronizes a single external value into the store and
6682 * cleans it up (sets to `undefined`) on unmount.
6683 *
6684 * Note that the while the value in `state` is updated immediately, the value returned
6685 * by `useState` is updated before the next render (similarly to React's `useState`).
6686 */
6687 useSyncedValueWithCleanup(key, value) {
6688 const store = this;
6689 useIsoLayoutEffect(() => {
6690 if (store.state[key] !== value) {
6691 store.set(key, value);
6692 }
6693 return () => {
6694 store.set(key, void 0);
6695 };
6696 }, [store, key, value]);
6697 }
6698 /**
6699 * Synchronizes multiple external values into the store.
6700 *
6701 * Note that the while the values in `state` are updated immediately, the values returned
6702 * by `useState` are updated before the next render (similarly to React's `useState`).
6703 */
6704 useSyncedValues(statePart) {
6705 const store = this;
6706 if (true) {
6707 React31.useDebugValue(statePart, (p) => Object.keys(p));
6708 const keys = React31.useRef(Object.keys(statePart)).current;
6709 const nextKeys = Object.keys(statePart);
6710 if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) {
6711 console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable.");
6712 }
6713 }
6714 const dependencies = Object.values(statePart);
6715 useIsoLayoutEffect(() => {
6716 store.update(statePart);
6717 }, [store, ...dependencies]);
6718 }
6719 /**
6720 * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled`
6721 * is non-undefined, the store's state at `key` is updated to match `controlled`.
6722 */
6723 useControlledProp(key, controlled) {
6724 React31.useDebugValue(key);
6725 const store = this;
6726 const isControlled = controlled !== void 0;
6727 useIsoLayoutEffect(() => {
6728 if (isControlled && !Object.is(store.state[key], controlled)) {
6729 store.setState({
6730 ...store.state,
6731 [key]: controlled
6732 });
6733 }
6734 }, [store, key, controlled, isControlled]);
6735 if (true) {
6736 const cache = this.controlledValues ??= /* @__PURE__ */ new Map();
6737 if (!cache.has(key)) {
6738 cache.set(key, isControlled);
6739 }
6740 const previouslyControlled = cache.get(key);
6741 if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) {
6742 console.error(`A component is changing the ${isControlled ? "" : "un"}controlled state of ${key.toString()} to be ${isControlled ? "un" : ""}controlled. Elements should not switch from uncontrolled to controlled (or vice versa).`);
6743 }
6744 }
6745 }
6746 /** Gets the current value from the store using a selector with the provided key.
6747 *
6748 * @param key Key of the selector to use.
6749 */
6750 select(key, a1, a2, a3) {
6751 const selector = this.selectors[key];
6752 return selector(this.state, a1, a2, a3);
6753 }
6754 /**
6755 * Returns a value from the store's state using a selector function.
6756 * Used to subscribe to specific parts of the state.
6757 * This methods causes a rerender whenever the selected state changes.
6758 *
6759 * @param key Key of the selector to use.
6760 */
6761 useState(key, a1, a2, a3) {
6762 React31.useDebugValue(key);
6763 return useStore(this, this.selectors[key], a1, a2, a3);
6764 }
6765 /**
6766 * Wraps a function with `useStableCallback` to ensure it has a stable reference
6767 * and assigns it to the context.
6768 *
6769 * @param key Key of the event callback. Must be a function in the context.
6770 * @param fn Function to assign.
6771 */
6772 useContextCallback(key, fn) {
6773 React31.useDebugValue(key);
6774 const stableFunction = useStableCallback(fn ?? NOOP);
6775 this.context[key] = stableFunction;
6776 }
6777 /**
6778 * Returns a stable setter function for a specific key in the store's state.
6779 * It's commonly used to pass as a ref callback to React elements.
6780 *
6781 * @param key Key of the state to set.
6782 */
6783 useStateSetter(key) {
6784 const ref = React31.useRef(void 0);
6785 if (ref.current === void 0) {
6786 ref.current = (value) => {
6787 this.set(key, value);
6788 };
6789 }
6790 return ref.current;
6791 }
6792 /**
6793 * Observes changes derived from the store's selectors and calls the listener when the selected value changes.
6794 *
6795 * @param key Key of the selector to observe.
6796 * @param listener Listener function called when the selector result changes.
6797 */
6798 observe(selector, listener) {
6799 let selectFn;
6800 if (typeof selector === "function") {
6801 selectFn = selector;
6802 } else {
6803 selectFn = this.selectors[selector];
6804 }
6805 let prevValue = selectFn(this.state);
6806 listener(prevValue, prevValue, this);
6807 return this.subscribe((nextState) => {
6808 const nextValue = selectFn(nextState);
6809 if (!Object.is(prevValue, nextValue)) {
6810 const oldValue = prevValue;
6811 prevValue = nextValue;
6812 listener(nextValue, oldValue, this);
6813 }
6814 });
6815 }
6816 };
6817
6818 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.js
6819 var selectors = {
6820 open: createSelector((state) => state.open),
6821 transitionStatus: createSelector((state) => state.transitionStatus),
6822 domReferenceElement: createSelector((state) => state.domReferenceElement),
6823 referenceElement: createSelector((state) => state.positionReference ?? state.referenceElement),
6824 floatingElement: createSelector((state) => state.floatingElement),
6825 floatingId: createSelector((state) => state.floatingId)
6826 };
6827 var FloatingRootStore = class extends ReactStore {
6828 constructor(options) {
6829 const {
6830 syncOnly,
6831 nested,
6832 onOpenChange,
6833 triggerElements,
6834 ...initialState
6835 } = options;
6836 super({
6837 ...initialState,
6838 positionReference: initialState.referenceElement,
6839 domReferenceElement: initialState.referenceElement
6840 }, {
6841 onOpenChange,
6842 dataRef: {
6843 current: {}
6844 },
6845 events: createEventEmitter(),
6846 nested,
6847 triggerElements
6848 }, selectors);
6849 this.syncOnly = syncOnly;
6850 }
6851 /**
6852 * Syncs the event used by hover logic to distinguish hover-open from click-like interaction.
6853 */
6854 syncOpenEvent = (newOpen, event) => {
6855 if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing
6856 // click events to upgrade a hover-open.
6857 event != null && isClickLikeEvent(event)) {
6858 this.context.dataRef.current.openEvent = newOpen ? event : void 0;
6859 }
6860 };
6861 /**
6862 * Runs the root-owned side effects for an open state change.
6863 */
6864 dispatchOpenChange = (newOpen, eventDetails) => {
6865 this.syncOpenEvent(newOpen, eventDetails.event);
6866 const details = {
6867 open: newOpen,
6868 reason: eventDetails.reason,
6869 nativeEvent: eventDetails.event,
6870 nested: this.context.nested,
6871 triggerElement: eventDetails.trigger
6872 };
6873 this.context.events.emit("openchange", details);
6874 };
6875 /**
6876 * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments.
6877 *
6878 * @param newOpen The new open state.
6879 * @param eventDetails Details about the event that triggered the open state change.
6880 */
6881 setOpen = (newOpen, eventDetails) => {
6882 if (this.syncOnly) {
6883 this.context.onOpenChange?.(newOpen, eventDetails);
6884 return;
6885 }
6886 this.dispatchOpenChange(newOpen, eventDetails);
6887 this.context.onOpenChange?.(newOpen, eventDetails);
6888 };
6889 };
6890
6891 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js
6892 function useSyncedFloatingRootContext(options) {
6893 const {
6894 popupStore,
6895 treatPopupAsFloatingElement = false,
6896 floatingRootContext: floatingRootContextProp,
6897 floatingId,
6898 nested,
6899 onOpenChange
6900 } = options;
6901 const open = popupStore.useState("open");
6902 const referenceElement = popupStore.useState("activeTriggerElement");
6903 const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement");
6904 const triggerElements = popupStore.context.triggerElements;
6905 const handleOpenChange = onOpenChange;
6906 const internalStoreRef = React32.useRef(null);
6907 if (floatingRootContextProp === void 0 && internalStoreRef.current === null) {
6908 internalStoreRef.current = new FloatingRootStore({
6909 open,
6910 transitionStatus: void 0,
6911 referenceElement,
6912 floatingElement,
6913 triggerElements,
6914 onOpenChange: handleOpenChange,
6915 floatingId,
6916 syncOnly: true,
6917 nested
6918 });
6919 }
6920 const store = floatingRootContextProp ?? internalStoreRef.current;
6921 popupStore.useSyncedValue("floatingId", floatingId);
6922 useIsoLayoutEffect(() => {
6923 const valuesToSync = {
6924 open,
6925 floatingId,
6926 referenceElement,
6927 floatingElement
6928 };
6929 if (isElement(referenceElement)) {
6930 valuesToSync.domReferenceElement = referenceElement;
6931 }
6932 if (store.state.positionReference === store.state.referenceElement) {
6933 valuesToSync.positionReference = referenceElement;
6934 }
6935 store.update(valuesToSync);
6936 }, [open, floatingId, referenceElement, floatingElement, store]);
6937 store.context.onOpenChange = handleOpenChange;
6938 store.context.nested = nested;
6939 return store;
6940 }
6941
6942 // node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js
6943 var FOCUSABLE_POPUP_PROPS = {
6944 tabIndex: -1,
6945 [FOCUSABLE_ATTRIBUTE]: ""
6946 };
6947 function usePopupStore(externalStore, createStore, treatPopupAsFloatingElement = false) {
6948 const floatingId = useId();
6949 const nested = useFloatingParentNodeId() != null;
6950 const internalStoreRef = React33.useRef(null);
6951 if (externalStore === void 0 && internalStoreRef.current === null) {
6952 internalStoreRef.current = createStore(floatingId, nested);
6953 }
6954 const store = externalStore ?? internalStoreRef.current;
6955 useSyncedFloatingRootContext({
6956 popupStore: store,
6957 treatPopupAsFloatingElement,
6958 floatingRootContext: store.state.floatingRootContext,
6959 floatingId,
6960 nested,
6961 onOpenChange: store.setOpen
6962 });
6963 return {
6964 store,
6965 internalStore: internalStoreRef.current
6966 };
6967 }
6968 function useTriggerRegistration(id, store) {
6969 const registeredElementIdRef = React33.useRef(null);
6970 const registeredElementRef = React33.useRef(null);
6971 return React33.useCallback((element) => {
6972 if (id === void 0) {
6973 return;
6974 }
6975 let shouldSyncTriggerCount = false;
6976 if (registeredElementIdRef.current !== null) {
6977 const registeredId = registeredElementIdRef.current;
6978 const registeredElement = registeredElementRef.current;
6979 const currentElement = store.context.triggerElements.getById(registeredId);
6980 if (registeredElement && currentElement === registeredElement) {
6981 store.context.triggerElements.delete(registeredId);
6982 shouldSyncTriggerCount = true;
6983 }
6984 registeredElementIdRef.current = null;
6985 registeredElementRef.current = null;
6986 }
6987 if (element !== null) {
6988 registeredElementIdRef.current = id;
6989 registeredElementRef.current = element;
6990 store.context.triggerElements.add(id, element);
6991 shouldSyncTriggerCount = true;
6992 }
6993 if (shouldSyncTriggerCount) {
6994 const triggerCount = store.context.triggerElements.size;
6995 if (store.select("open") && store.state.triggerCount !== triggerCount) {
6996 store.set("triggerCount", triggerCount);
6997 }
6998 }
6999 }, [store, id]);
7000 }
7001 function setOpenTriggerState(state, open, trigger) {
7002 const triggerId = trigger?.id ?? null;
7003 if (triggerId || open) {
7004 state.activeTriggerId = triggerId;
7005 state.activeTriggerElement = trigger ?? null;
7006 }
7007 }
7008 function useTriggerDataForwarding(triggerId, triggerElementRef, store, stateUpdates) {
7009 const isMountedByThisTrigger = store.useState("isMountedByTrigger", triggerId);
7010 const baseRegisterTrigger = useTriggerRegistration(triggerId, store);
7011 const registerTrigger = useStableCallback((element) => {
7012 baseRegisterTrigger(element);
7013 if (!element) {
7014 return;
7015 }
7016 const open = store.select("open");
7017 const activeTriggerId = store.select("activeTriggerId");
7018 if (activeTriggerId === triggerId) {
7019 store.update({
7020 activeTriggerElement: element,
7021 ...open ? stateUpdates : null
7022 });
7023 return;
7024 }
7025 if (activeTriggerId == null && open) {
7026 store.update({
7027 activeTriggerId: triggerId,
7028 activeTriggerElement: element,
7029 ...stateUpdates
7030 });
7031 }
7032 });
7033 useIsoLayoutEffect(() => {
7034 if (isMountedByThisTrigger) {
7035 store.update({
7036 activeTriggerElement: triggerElementRef.current,
7037 ...stateUpdates
7038 });
7039 }
7040 }, [isMountedByThisTrigger, store, triggerElementRef, ...Object.values(stateUpdates)]);
7041 return {
7042 registerTrigger,
7043 isMountedByThisTrigger
7044 };
7045 }
7046 function useImplicitActiveTrigger(store) {
7047 const open = store.useState("open");
7048 const reactiveTriggerCount = store.useState("triggerCount");
7049 useIsoLayoutEffect(() => {
7050 if (!open) {
7051 if (store.state.triggerCount !== 0) {
7052 store.set("triggerCount", 0);
7053 }
7054 return;
7055 }
7056 const triggerCount = store.context.triggerElements.size;
7057 const stateUpdates = {};
7058 if (store.state.triggerCount !== triggerCount) {
7059 stateUpdates.triggerCount = triggerCount;
7060 }
7061 if (!store.select("activeTriggerId") && triggerCount === 1) {
7062 const iteratorResult = store.context.triggerElements.entries().next();
7063 if (!iteratorResult.done) {
7064 const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
7065 stateUpdates.activeTriggerId = implicitTriggerId;
7066 stateUpdates.activeTriggerElement = implicitTriggerElement;
7067 }
7068 }
7069 if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0) {
7070 store.update(stateUpdates);
7071 }
7072 }, [open, store, reactiveTriggerCount]);
7073 }
7074 function useOpenStateTransitions(open, store, onUnmount) {
7075 const {
7076 mounted,
7077 setMounted,
7078 transitionStatus
7079 } = useTransitionStatus(open);
7080 store.useSyncedValues({
7081 mounted,
7082 transitionStatus
7083 });
7084 const forceUnmount = useStableCallback(() => {
7085 setMounted(false);
7086 store.update({
7087 activeTriggerId: null,
7088 activeTriggerElement: null,
7089 mounted: false,
7090 preventUnmountingOnClose: false
7091 });
7092 onUnmount?.();
7093 store.context.onOpenChangeComplete?.(false);
7094 });
7095 const preventUnmountingOnClose = store.useState("preventUnmountingOnClose");
7096 useOpenChangeComplete({
7097 enabled: mounted && !open && !preventUnmountingOnClose,
7098 open,
7099 ref: store.context.popupRef,
7100 onComplete() {
7101 if (!open) {
7102 forceUnmount();
7103 }
7104 }
7105 });
7106 return {
7107 forceUnmount,
7108 transitionStatus
7109 };
7110 }
7111 function usePopupInteractionProps(store, statePart) {
7112 store.useSyncedValues(statePart);
7113 useIsoLayoutEffect(() => () => {
7114 store.update({
7115 activeTriggerProps: EMPTY_OBJECT,
7116 inactiveTriggerProps: EMPTY_OBJECT,
7117 popupProps: EMPTY_OBJECT
7118 });
7119 }, [store]);
7120 }
7121
7122 // node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.js
7123 var PopupTriggerMap = class {
7124 constructor() {
7125 this.elementsSet = /* @__PURE__ */ new Set();
7126 this.idMap = /* @__PURE__ */ new Map();
7127 }
7128 /**
7129 * Adds a trigger element with the given ID.
7130 *
7131 * Note: The provided element is assumed to not be registered under multiple IDs.
7132 */
7133 add(id, element) {
7134 const existingElement = this.idMap.get(id);
7135 if (existingElement === element) {
7136 return;
7137 }
7138 if (existingElement !== void 0) {
7139 this.elementsSet.delete(existingElement);
7140 }
7141 this.elementsSet.add(element);
7142 this.idMap.set(id, element);
7143 if (true) {
7144 if (this.elementsSet.size !== this.idMap.size) {
7145 throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap.");
7146 }
7147 }
7148 }
7149 /**
7150 * Removes the trigger element with the given ID.
7151 */
7152 delete(id) {
7153 const element = this.idMap.get(id);
7154 if (element) {
7155 this.elementsSet.delete(element);
7156 this.idMap.delete(id);
7157 }
7158 }
7159 /**
7160 * Whether the given element is registered as a trigger.
7161 */
7162 hasElement(element) {
7163 return this.elementsSet.has(element);
7164 }
7165 /**
7166 * Whether there is a registered trigger element matching the given predicate.
7167 */
7168 hasMatchingElement(predicate) {
7169 for (const element of this.elementsSet) {
7170 if (predicate(element)) {
7171 return true;
7172 }
7173 }
7174 return false;
7175 }
7176 /**
7177 * Returns the trigger element associated with the given ID, or undefined if no such element exists.
7178 */
7179 getById(id) {
7180 return this.idMap.get(id);
7181 }
7182 /**
7183 * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element].
7184 */
7185 entries() {
7186 return this.idMap.entries();
7187 }
7188 /**
7189 * Returns an iterable of all registered trigger elements.
7190 */
7191 elements() {
7192 return this.elementsSet.values();
7193 }
7194 /**
7195 * Returns the number of registered trigger elements.
7196 */
7197 get size() {
7198 return this.idMap.size;
7199 }
7200 };
7201
7202 // node_modules/@base-ui/react/esm/floating-ui-react/utils/getEmptyRootContext.js
7203 function getEmptyRootContext() {
7204 return new FloatingRootStore({
7205 open: false,
7206 transitionStatus: void 0,
7207 floatingElement: null,
7208 referenceElement: null,
7209 triggerElements: new PopupTriggerMap(),
7210 floatingId: void 0,
7211 syncOnly: false,
7212 nested: false,
7213 onOpenChange: void 0
7214 });
7215 }
7216
7217 // node_modules/@base-ui/react/esm/utils/popups/store.js
7218 function createInitialPopupStoreState() {
7219 return {
7220 open: false,
7221 openProp: void 0,
7222 mounted: false,
7223 transitionStatus: void 0,
7224 floatingRootContext: getEmptyRootContext(),
7225 floatingId: void 0,
7226 triggerCount: 0,
7227 preventUnmountingOnClose: false,
7228 payload: void 0,
7229 activeTriggerId: null,
7230 activeTriggerElement: null,
7231 triggerIdProp: void 0,
7232 popupElement: null,
7233 positionerElement: null,
7234 activeTriggerProps: EMPTY_OBJECT,
7235 inactiveTriggerProps: EMPTY_OBJECT,
7236 popupProps: EMPTY_OBJECT
7237 };
7238 }
7239 function createPopupFloatingRootContext(triggerElements, floatingId, nested = false) {
7240 return new FloatingRootStore({
7241 open: false,
7242 transitionStatus: void 0,
7243 floatingElement: null,
7244 referenceElement: null,
7245 triggerElements,
7246 floatingId,
7247 syncOnly: true,
7248 nested,
7249 onOpenChange: void 0
7250 });
7251 }
7252 var activeTriggerIdSelector = createSelector((state) => state.triggerIdProp ?? state.activeTriggerId);
7253 var openSelector = createSelector((state) => state.openProp ?? state.open);
7254 var popupIdSelector = createSelector((state) => {
7255 const popupId = state.popupElement?.id ?? state.floatingId;
7256 return popupId || void 0;
7257 });
7258 function triggerOwnsOpenPopup(state, triggerId) {
7259 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId;
7260 }
7261 function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) {
7262 if (triggerOwnsOpenPopup(state, triggerId)) {
7263 return true;
7264 }
7265 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1;
7266 }
7267 var popupStoreSelectors = {
7268 open: openSelector,
7269 mounted: createSelector((state) => state.mounted),
7270 transitionStatus: createSelector((state) => state.transitionStatus),
7271 floatingRootContext: createSelector((state) => state.floatingRootContext),
7272 triggerCount: createSelector((state) => state.triggerCount),
7273 preventUnmountingOnClose: createSelector((state) => state.preventUnmountingOnClose),
7274 payload: createSelector((state) => state.payload),
7275 activeTriggerId: activeTriggerIdSelector,
7276 activeTriggerElement: createSelector((state) => state.mounted ? state.activeTriggerElement : null),
7277 popupId: popupIdSelector,
7278 /**
7279 * Whether the trigger with the given ID was used to open the popup.
7280 */
7281 isTriggerActive: createSelector((state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId),
7282 /**
7283 * Whether the popup is open and was activated by a trigger with the given ID.
7284 */
7285 isOpenedByTrigger: createSelector((state, triggerId) => triggerOwnsOpenPopup(state, triggerId)),
7286 /**
7287 * Whether the popup is mounted and was activated by a trigger with the given ID.
7288 */
7289 isMountedByTrigger: createSelector((state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted),
7290 triggerProps: createSelector((state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps),
7291 /**
7292 * Popup id for the trigger that currently owns the open popup.
7293 */
7294 triggerPopupId: createSelector((state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0),
7295 popupProps: createSelector((state) => state.popupProps),
7296 popupElement: createSelector((state) => state.popupElement),
7297 positionerElement: createSelector((state) => state.positionerElement)
7298 };
7299
7300 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloatingRootContext.js
7301 function useFloatingRootContext(options) {
7302 const {
7303 open = false,
7304 onOpenChange,
7305 elements = {}
7306 } = options;
7307 const floatingId = useId();
7308 const nested = useFloatingParentNodeId() != null;
7309 if (true) {
7310 const optionDomReference = elements.reference;
7311 if (optionDomReference && !isElement(optionDomReference)) {
7312 console.error("Cannot pass a virtual element to the `elements.reference` option,", "as it must be a real DOM element. Use `context.setPositionReference()`", "instead.");
7313 }
7314 }
7315 const store = useRefWithInit(() => new FloatingRootStore({
7316 open,
7317 transitionStatus: void 0,
7318 onOpenChange,
7319 referenceElement: elements.reference ?? null,
7320 floatingElement: elements.floating ?? null,
7321 triggerElements: new PopupTriggerMap(),
7322 floatingId,
7323 syncOnly: false,
7324 nested
7325 })).current;
7326 useIsoLayoutEffect(() => {
7327 const valuesToSync = {
7328 open,
7329 floatingId
7330 };
7331 if (elements.reference !== void 0) {
7332 valuesToSync.referenceElement = elements.reference;
7333 valuesToSync.domReferenceElement = isElement(elements.reference) ? elements.reference : null;
7334 }
7335 if (elements.floating !== void 0) {
7336 valuesToSync.floatingElement = elements.floating;
7337 }
7338 store.update(valuesToSync);
7339 }, [open, floatingId, elements.reference, elements.floating, store]);
7340 store.context.onOpenChange = onOpenChange;
7341 store.context.nested = nested;
7342 return store;
7343 }
7344
7345 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloating.js
7346 function useFloating2(options = {}) {
7347 const {
7348 nodeId,
7349 externalTree
7350 } = options;
7351 const internalStore = useFloatingRootContext(options);
7352 const store = options.rootContext || internalStore;
7353 const referenceElement = store.useState("referenceElement");
7354 const floatingElement = store.useState("floatingElement");
7355 const domReferenceElement = store.useState("domReferenceElement");
7356 const open = store.useState("open");
7357 const floatingId = store.useState("floatingId");
7358 const [positionReference, setPositionReferenceRaw] = React34.useState(null);
7359 const [localDomReference, setLocalDomReference] = React34.useState(void 0);
7360 const [localFloatingElement, setLocalFloatingElement] = React34.useState(void 0);
7361 const domReferenceRef = React34.useRef(null);
7362 const tree = useFloatingTree(externalTree);
7363 const storeElements = React34.useMemo(() => ({
7364 reference: referenceElement,
7365 floating: floatingElement,
7366 domReference: domReferenceElement
7367 }), [referenceElement, floatingElement, domReferenceElement]);
7368 const position = useFloating({
7369 ...options,
7370 elements: {
7371 ...storeElements,
7372 ...positionReference && {
7373 reference: positionReference
7374 }
7375 }
7376 });
7377 const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null;
7378 const syncedFloatingElement = localFloatingElement === void 0 ? store.state.floatingElement : localFloatingElement;
7379 store.useSyncedValue("referenceElement", localDomReference ?? null);
7380 store.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement);
7381 store.useSyncedValue("floatingElement", syncedFloatingElement);
7382 const setPositionReference = React34.useCallback((node) => {
7383 const computedPositionReference = isElement(node) ? {
7384 getBoundingClientRect: () => node.getBoundingClientRect(),
7385 getClientRects: () => node.getClientRects(),
7386 contextElement: node
7387 } : node;
7388 setPositionReferenceRaw(computedPositionReference);
7389 position.refs.setReference(computedPositionReference);
7390 }, [position.refs]);
7391 const setReference = React34.useCallback((node) => {
7392 if (isElement(node) || node === null) {
7393 domReferenceRef.current = node;
7394 setLocalDomReference(node);
7395 }
7396 if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to
7397 // `null` to support `positionReference` + an unstable `reference`
7398 // callback ref.
7399 node !== null && !isElement(node)) {
7400 position.refs.setReference(node);
7401 }
7402 }, [position.refs, setLocalDomReference]);
7403 const setFloating = React34.useCallback((node) => {
7404 setLocalFloatingElement(node);
7405 position.refs.setFloating(node);
7406 }, [position.refs]);
7407 const refs = React34.useMemo(() => ({
7408 ...position.refs,
7409 setReference,
7410 setFloating,
7411 setPositionReference,
7412 domReference: domReferenceRef
7413 }), [position.refs, setReference, setFloating, setPositionReference]);
7414 const elements = React34.useMemo(() => ({
7415 ...position.elements,
7416 domReference: domReferenceElement
7417 }), [position.elements, domReferenceElement]);
7418 const context = React34.useMemo(() => ({
7419 ...position,
7420 dataRef: store.context.dataRef,
7421 open,
7422 onOpenChange: store.setOpen,
7423 events: store.context.events,
7424 floatingId,
7425 refs,
7426 elements,
7427 nodeId,
7428 rootStore: store
7429 }), [position, refs, elements, nodeId, store, open, floatingId]);
7430 useIsoLayoutEffect(() => {
7431 if (domReferenceElement) {
7432 domReferenceRef.current = domReferenceElement;
7433 }
7434 }, [domReferenceElement]);
7435 useIsoLayoutEffect(() => {
7436 store.context.dataRef.current.floatingContext = context;
7437 const node = tree?.nodesRef.current.find((n) => n.id === nodeId);
7438 if (node) {
7439 node.context = context;
7440 }
7441 });
7442 return React34.useMemo(() => ({
7443 ...position,
7444 context,
7445 refs,
7446 elements,
7447 rootStore: store
7448 }), [position, refs, elements, context, store]);
7449 }
7450
7451 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFocus.js
7452 var React35 = __toESM(require_react(), 1);
7453 var isMacSafari = isMac && isSafari;
7454 function useFocus(context, props = {}) {
7455 const {
7456 enabled = true,
7457 delay
7458 } = props;
7459 const store = "rootStore" in context ? context.rootStore : context;
7460 const {
7461 events,
7462 dataRef
7463 } = store.context;
7464 const blockFocusRef = React35.useRef(false);
7465 const blockedReferenceRef = React35.useRef(null);
7466 const keyboardModalityRef = React35.useRef(true);
7467 const timeout = useTimeout();
7468 React35.useEffect(() => {
7469 const domReference = store.select("domReferenceElement");
7470 if (!enabled) {
7471 return void 0;
7472 }
7473 const win = getWindow(domReference);
7474 function onBlur() {
7475 const currentDomReference = store.select("domReferenceElement");
7476 if (!store.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) {
7477 blockFocusRef.current = true;
7478 }
7479 }
7480 function onKeyDown() {
7481 keyboardModalityRef.current = true;
7482 }
7483 function onPointerDown() {
7484 keyboardModalityRef.current = false;
7485 }
7486 return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true));
7487 }, [store, enabled]);
7488 React35.useEffect(() => {
7489 if (!enabled) {
7490 return void 0;
7491 }
7492 function onOpenChangeLocal(details) {
7493 if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) {
7494 const referenceElement = store.select("domReferenceElement");
7495 if (isElement(referenceElement)) {
7496 blockedReferenceRef.current = referenceElement;
7497 blockFocusRef.current = true;
7498 }
7499 }
7500 }
7501 events.on("openchange", onOpenChangeLocal);
7502 return () => {
7503 events.off("openchange", onOpenChangeLocal);
7504 };
7505 }, [events, enabled, store]);
7506 const reference = React35.useMemo(() => {
7507 function resetBlockedFocus() {
7508 blockFocusRef.current = false;
7509 blockedReferenceRef.current = null;
7510 }
7511 return {
7512 onMouseLeave() {
7513 resetBlockedFocus();
7514 },
7515 onFocus(event) {
7516 const focusTarget = event.currentTarget;
7517 if (blockFocusRef.current) {
7518 if (blockedReferenceRef.current === focusTarget) {
7519 return;
7520 }
7521 resetBlockedFocus();
7522 }
7523 const target = getTarget(event.nativeEvent);
7524 if (isElement(target)) {
7525 if (isMacSafari && !event.relatedTarget) {
7526 if (!keyboardModalityRef.current && !isTypeableElement(target)) {
7527 return;
7528 }
7529 } else if (!matchesFocusVisible(target)) {
7530 return;
7531 }
7532 }
7533 const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements);
7534 const {
7535 nativeEvent,
7536 currentTarget
7537 } = event;
7538 const delayValue = typeof delay === "function" ? delay() : delay;
7539 if (store.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) {
7540 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
7541 return;
7542 }
7543 timeout.start(delayValue, () => {
7544 if (blockFocusRef.current) {
7545 return;
7546 }
7547 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
7548 });
7549 },
7550 onBlur(event) {
7551 resetBlockedFocus();
7552 const relatedTarget = event.relatedTarget;
7553 const nativeEvent = event.nativeEvent;
7554 const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside";
7555 timeout.start(0, () => {
7556 const domReference = store.select("domReferenceElement");
7557 const activeEl = activeElement(ownerDocument(domReference));
7558 if (!relatedTarget && activeEl === domReference) {
7559 return;
7560 }
7561 if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) {
7562 return;
7563 }
7564 const nextFocusedElement = relatedTarget ?? activeEl;
7565 if (isTargetInsideEnabledTrigger(nextFocusedElement, store.context.triggerElements)) {
7566 return;
7567 }
7568 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent));
7569 });
7570 }
7571 };
7572 }, [dataRef, delay, store, timeout]);
7573 return React35.useMemo(() => enabled ? {
7574 reference,
7575 trigger: reference
7576 } : {}, [enabled, reference]);
7577 }
7578
7579 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js
7580 var React36 = __toESM(require_react(), 1);
7581
7582 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverInteractionSharedState.js
7583 var HoverInteraction = class _HoverInteraction {
7584 constructor() {
7585 this.pointerType = void 0;
7586 this.interactedInside = false;
7587 this.handler = void 0;
7588 this.blockMouseMove = true;
7589 this.performedPointerEventsMutation = false;
7590 this.pointerEventsScopeElement = null;
7591 this.pointerEventsReferenceElement = null;
7592 this.pointerEventsFloatingElement = null;
7593 this.restTimeoutPending = false;
7594 this.openChangeTimeout = new Timeout();
7595 this.restTimeout = new Timeout();
7596 this.handleCloseOptions = void 0;
7597 }
7598 static create() {
7599 return new _HoverInteraction();
7600 }
7601 dispose = () => {
7602 this.openChangeTimeout.clear();
7603 this.restTimeout.clear();
7604 };
7605 disposeEffect = () => {
7606 return this.dispose;
7607 };
7608 };
7609 var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap();
7610 function clearSafePolygonPointerEventsMutation(instance) {
7611 if (!instance.performedPointerEventsMutation) {
7612 return;
7613 }
7614 const scopeElement = instance.pointerEventsScopeElement;
7615 if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) {
7616 instance.pointerEventsScopeElement?.style.removeProperty("pointer-events");
7617 instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events");
7618 instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events");
7619 pointerEventsMutationOwnerByScopeElement.delete(scopeElement);
7620 }
7621 instance.performedPointerEventsMutation = false;
7622 instance.pointerEventsScopeElement = null;
7623 instance.pointerEventsReferenceElement = null;
7624 instance.pointerEventsFloatingElement = null;
7625 }
7626 function applySafePolygonPointerEventsMutation(instance, options) {
7627 const {
7628 scopeElement,
7629 referenceElement,
7630 floatingElement
7631 } = options;
7632 const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement);
7633 if (existingOwner && existingOwner !== instance) {
7634 clearSafePolygonPointerEventsMutation(existingOwner);
7635 }
7636 clearSafePolygonPointerEventsMutation(instance);
7637 instance.performedPointerEventsMutation = true;
7638 instance.pointerEventsScopeElement = scopeElement;
7639 instance.pointerEventsReferenceElement = referenceElement;
7640 instance.pointerEventsFloatingElement = floatingElement;
7641 pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance);
7642 scopeElement.style.pointerEvents = "none";
7643 referenceElement.style.pointerEvents = "auto";
7644 floatingElement.style.pointerEvents = "auto";
7645 }
7646 function useHoverInteractionSharedState(store) {
7647 const data = store.context.dataRef.current;
7648 const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current;
7649 if (!data.hoverInteractionState) {
7650 data.hoverInteractionState = instance;
7651 }
7652 useOnMount(data.hoverInteractionState.disposeEffect);
7653 return data.hoverInteractionState;
7654 }
7655
7656 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js
7657 function useHoverFloatingInteraction(context, parameters = {}) {
7658 const {
7659 enabled = true,
7660 closeDelay: closeDelayProp = 0,
7661 nodeId: nodeIdProp
7662 } = parameters;
7663 const store = "rootStore" in context ? context.rootStore : context;
7664 const open = store.useState("open");
7665 const floatingElement = store.useState("floatingElement");
7666 const domReferenceElement = store.useState("domReferenceElement");
7667 const {
7668 dataRef
7669 } = store.context;
7670 const tree = useFloatingTree();
7671 const parentId = useFloatingParentNodeId();
7672 const instance = useHoverInteractionSharedState(store);
7673 const childClosedTimeout = useTimeout();
7674 const isClickLikeOpenEvent2 = useStableCallback(() => {
7675 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
7676 });
7677 const isHoverOpen = useStableCallback(() => {
7678 return isHoverOpenEvent(dataRef.current.openEvent?.type);
7679 });
7680 const clearPointerEvents = useStableCallback(() => {
7681 clearSafePolygonPointerEventsMutation(instance);
7682 });
7683 useIsoLayoutEffect(() => {
7684 if (!open) {
7685 instance.pointerType = void 0;
7686 instance.restTimeoutPending = false;
7687 instance.interactedInside = false;
7688 clearPointerEvents();
7689 }
7690 }, [open, instance, clearPointerEvents]);
7691 React36.useEffect(() => {
7692 return clearPointerEvents;
7693 }, [clearPointerEvents]);
7694 useIsoLayoutEffect(() => {
7695 if (!enabled) {
7696 return void 0;
7697 }
7698 if (open && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) {
7699 const ref = domReferenceElement;
7700 const floatingEl = floatingElement;
7701 const doc = ownerDocument(floatingElement);
7702 const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating;
7703 if (parentFloating) {
7704 parentFloating.style.pointerEvents = "";
7705 }
7706 const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null;
7707 const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null;
7708 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body;
7709 applySafePolygonPointerEventsMutation(instance, {
7710 scopeElement,
7711 referenceElement: ref,
7712 floatingElement: floatingEl
7713 });
7714 return () => {
7715 clearPointerEvents();
7716 };
7717 }
7718 return void 0;
7719 }, [enabled, open, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]);
7720 React36.useEffect(() => {
7721 if (!enabled) {
7722 return void 0;
7723 }
7724 function hasParentChildren() {
7725 return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0);
7726 }
7727 function closeWithDelay(event) {
7728 const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType);
7729 const close = () => {
7730 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
7731 tree?.events.emit("floating.closed", event);
7732 };
7733 if (closeDelay) {
7734 instance.openChangeTimeout.start(closeDelay, close);
7735 } else {
7736 instance.openChangeTimeout.clear();
7737 close();
7738 }
7739 }
7740 function handleInteractInside(event) {
7741 const target = getTarget(event);
7742 if (!isInteractiveElement(target)) {
7743 instance.interactedInside = false;
7744 return;
7745 }
7746 instance.interactedInside = target?.closest("[aria-haspopup]") != null;
7747 }
7748 function onFloatingMouseEnter() {
7749 instance.openChangeTimeout.clear();
7750 childClosedTimeout.clear();
7751 tree?.events.off("floating.closed", onNodeClosed);
7752 clearPointerEvents();
7753 }
7754 function onFloatingMouseLeave(event) {
7755 if (hasParentChildren() && tree) {
7756 tree.events.on("floating.closed", onNodeClosed);
7757 return;
7758 }
7759 if (isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements)) {
7760 return;
7761 }
7762 const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp;
7763 const relatedTarget = event.relatedTarget;
7764 const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget));
7765 if (isMovingIntoDescendantFloating) {
7766 return;
7767 }
7768 if (instance.handler) {
7769 instance.handler(event);
7770 return;
7771 }
7772 clearPointerEvents();
7773 if (!isClickLikeOpenEvent2()) {
7774 closeWithDelay(event);
7775 }
7776 }
7777 function onNodeClosed(event) {
7778 if (!tree || !parentId || hasParentChildren()) {
7779 return;
7780 }
7781 childClosedTimeout.start(0, () => {
7782 tree.events.off("floating.closed", onNodeClosed);
7783 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
7784 tree.events.emit("floating.closed", event);
7785 });
7786 }
7787 const floating = floatingElement;
7788 return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => {
7789 tree?.events.off("floating.closed", onNodeClosed);
7790 });
7791 }, [enabled, floatingElement, store, dataRef, closeDelayProp, nodeIdProp, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]);
7792 }
7793
7794 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js
7795 var React37 = __toESM(require_react(), 1);
7796 var ReactDOM4 = __toESM(require_react_dom(), 1);
7797 var EMPTY_REF = {
7798 current: null
7799 };
7800 function useHoverReferenceInteraction(context, props = {}) {
7801 const {
7802 enabled = true,
7803 delay = 0,
7804 handleClose = null,
7805 mouseOnly = false,
7806 restMs = 0,
7807 move = true,
7808 triggerElementRef = EMPTY_REF,
7809 externalTree,
7810 isActiveTrigger = true,
7811 getHandleCloseContext,
7812 isClosing,
7813 shouldOpen: shouldOpenProp
7814 } = props;
7815 const store = "rootStore" in context ? context.rootStore : context;
7816 const {
7817 dataRef,
7818 events
7819 } = store.context;
7820 const tree = useFloatingTree(externalTree);
7821 const instance = useHoverInteractionSharedState(store);
7822 const isHoverCloseActiveRef = React37.useRef(false);
7823 const handleCloseRef = useValueAsRef(handleClose);
7824 const delayRef = useValueAsRef(delay);
7825 const restMsRef = useValueAsRef(restMs);
7826 const enabledRef = useValueAsRef(enabled);
7827 const shouldOpenRef = useValueAsRef(shouldOpenProp);
7828 const isClosingRef = useValueAsRef(isClosing);
7829 const isClickLikeOpenEvent2 = useStableCallback(() => {
7830 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
7831 });
7832 const checkShouldOpen = useStableCallback(() => {
7833 return shouldOpenRef.current?.() !== false;
7834 });
7835 const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => {
7836 const allTriggers = store.context.triggerElements;
7837 if (allTriggers.hasElement(currentTarget)) {
7838 return !currentDomReference || !contains(currentDomReference, currentTarget);
7839 }
7840 if (!isElement(target)) {
7841 return false;
7842 }
7843 const targetElement = target;
7844 return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement));
7845 });
7846 const cleanupMouseMoveHandler = useStableCallback(() => {
7847 if (!instance.handler) {
7848 return;
7849 }
7850 const doc = ownerDocument(store.select("domReferenceElement"));
7851 doc.removeEventListener("mousemove", instance.handler);
7852 instance.handler = void 0;
7853 });
7854 const clearPointerEvents = useStableCallback(() => {
7855 clearSafePolygonPointerEventsMutation(instance);
7856 });
7857 if (isActiveTrigger) {
7858 instance.handleCloseOptions = handleCloseRef.current?.__options;
7859 }
7860 React37.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]);
7861 React37.useEffect(() => {
7862 if (!enabled) {
7863 return void 0;
7864 }
7865 function onOpenChangeLocal(details) {
7866 if (!details.open) {
7867 isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover;
7868 cleanupMouseMoveHandler();
7869 instance.openChangeTimeout.clear();
7870 instance.restTimeout.clear();
7871 instance.blockMouseMove = true;
7872 instance.restTimeoutPending = false;
7873 } else {
7874 isHoverCloseActiveRef.current = false;
7875 }
7876 }
7877 events.on("openchange", onOpenChangeLocal);
7878 return () => {
7879 events.off("openchange", onOpenChangeLocal);
7880 };
7881 }, [enabled, events, instance, cleanupMouseMoveHandler]);
7882 React37.useEffect(() => {
7883 if (!enabled) {
7884 return void 0;
7885 }
7886 function closeWithDelay(event, runElseBranch = true) {
7887 const closeDelay = getDelay(delayRef.current, "close", instance.pointerType);
7888 if (closeDelay) {
7889 instance.openChangeTimeout.start(closeDelay, () => {
7890 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
7891 tree?.events.emit("floating.closed", event);
7892 });
7893 } else if (runElseBranch) {
7894 instance.openChangeTimeout.clear();
7895 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
7896 tree?.events.emit("floating.closed", event);
7897 }
7898 }
7899 const trigger = triggerElementRef.current ?? (isActiveTrigger ? store.select("domReferenceElement") : null);
7900 if (!isElement(trigger)) {
7901 return void 0;
7902 }
7903 function onMouseEnter(event) {
7904 instance.openChangeTimeout.clear();
7905 instance.blockMouseMove = false;
7906 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
7907 return;
7908 }
7909 const restMsValue = getRestMs(restMsRef.current);
7910 const openDelay = getDelay(delayRef.current, "open", instance.pointerType);
7911 const eventTarget = getTarget(event);
7912 const currentTarget = event.currentTarget ?? null;
7913 const currentDomReference = store.select("domReferenceElement");
7914 let triggerNode = currentTarget;
7915 if (isElement(eventTarget) && !store.context.triggerElements.hasElement(eventTarget)) {
7916 for (const triggerElement of store.context.triggerElements.elements()) {
7917 if (contains(triggerElement, eventTarget)) {
7918 triggerNode = triggerElement;
7919 break;
7920 }
7921 }
7922 }
7923 if (isElement(currentTarget) && isElement(currentDomReference) && !store.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) {
7924 triggerNode = currentDomReference;
7925 }
7926 const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget);
7927 const isOpen = store.select("open");
7928 const isInClosingTransition = isClosingRef.current?.() ?? store.select("transitionStatus") === "ending";
7929 const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current;
7930 const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition;
7931 const isRestOnlyDelay = restMsValue > 0 && !openDelay;
7932 const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition;
7933 const shouldOpen = !isOpen || isOverInactive;
7934 if (shouldOpenImmediately) {
7935 if (checkShouldOpen()) {
7936 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
7937 }
7938 return;
7939 }
7940 if (isRestOnlyDelay) {
7941 return;
7942 }
7943 if (openDelay) {
7944 instance.openChangeTimeout.start(openDelay, () => {
7945 if (shouldOpen && checkShouldOpen()) {
7946 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
7947 }
7948 });
7949 } else if (shouldOpen) {
7950 if (checkShouldOpen()) {
7951 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
7952 }
7953 }
7954 }
7955 function onMouseLeave(event) {
7956 if (isClickLikeOpenEvent2()) {
7957 clearPointerEvents();
7958 return;
7959 }
7960 cleanupMouseMoveHandler();
7961 const domReferenceElement = store.select("domReferenceElement");
7962 const doc = ownerDocument(domReferenceElement);
7963 instance.restTimeout.clear();
7964 instance.restTimeoutPending = false;
7965 const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.();
7966 if (isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements)) {
7967 return;
7968 }
7969 if (handleCloseRef.current && handleCloseContextBase) {
7970 if (!store.select("open")) {
7971 instance.openChangeTimeout.clear();
7972 }
7973 const currentTrigger = triggerElementRef.current;
7974 instance.handler = handleCloseRef.current({
7975 ...handleCloseContextBase,
7976 tree,
7977 x: event.clientX,
7978 y: event.clientY,
7979 onClose() {
7980 clearPointerEvents();
7981 cleanupMouseMoveHandler();
7982 if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store.select("domReferenceElement")) {
7983 closeWithDelay(event, true);
7984 }
7985 }
7986 });
7987 doc.addEventListener("mousemove", instance.handler);
7988 instance.handler(event);
7989 return;
7990 }
7991 const shouldClose = instance.pointerType === "touch" ? !contains(store.select("floatingElement"), event.relatedTarget) : true;
7992 if (shouldClose) {
7993 closeWithDelay(event);
7994 }
7995 }
7996 if (move) {
7997 return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, {
7998 once: true
7999 }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave));
8000 }
8001 return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave));
8002 }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen]);
8003 return React37.useMemo(() => {
8004 if (!enabled) {
8005 return void 0;
8006 }
8007 function setPointerRef(event) {
8008 instance.pointerType = event.pointerType;
8009 }
8010 return {
8011 onPointerDown: setPointerRef,
8012 onPointerEnter: setPointerRef,
8013 onMouseMove(event) {
8014 const {
8015 nativeEvent
8016 } = event;
8017 const trigger = event.currentTarget;
8018 const currentDomReference = store.select("domReferenceElement");
8019 const currentOpen = store.select("open");
8020 const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target);
8021 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
8022 return;
8023 }
8024 if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) {
8025 const floatingElement = store.select("floatingElement");
8026 if (floatingElement) {
8027 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body;
8028 applySafePolygonPointerEventsMutation(instance, {
8029 scopeElement,
8030 referenceElement: trigger,
8031 floatingElement
8032 });
8033 }
8034 }
8035 const restMsValue = getRestMs(restMsRef.current);
8036 if (currentOpen && !isOverInactive || restMsValue === 0) {
8037 return;
8038 }
8039 if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) {
8040 return;
8041 }
8042 instance.restTimeout.clear();
8043 function handleMouseMove() {
8044 instance.restTimeoutPending = false;
8045 if (isClickLikeOpenEvent2()) {
8046 return;
8047 }
8048 const latestOpen = store.select("open");
8049 if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) {
8050 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger));
8051 }
8052 }
8053 if (instance.pointerType === "touch") {
8054 ReactDOM4.flushSync(() => {
8055 handleMouseMove();
8056 });
8057 } else if (isOverInactive && currentOpen) {
8058 handleMouseMove();
8059 } else {
8060 instance.restTimeoutPending = true;
8061 instance.restTimeout.start(restMsValue, handleMouseMove);
8062 }
8063 }
8064 };
8065 }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store, restMsRef, checkShouldOpen]);
8066 }
8067
8068 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useListNavigation.js
8069 var React38 = __toESM(require_react(), 1);
8070 var ESCAPE = "Escape";
8071 function doSwitch(orientation, vertical, horizontal) {
8072 switch (orientation) {
8073 case "vertical":
8074 return vertical;
8075 case "horizontal":
8076 return horizontal;
8077 default:
8078 return vertical || horizontal;
8079 }
8080 }
8081 function isMainOrientationKey(key, orientation) {
8082 const vertical = key === ARROW_UP || key === ARROW_DOWN;
8083 const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;
8084 return doSwitch(orientation, vertical, horizontal);
8085 }
8086 function isMainOrientationToEndKey(key, orientation, rtl) {
8087 const vertical = key === ARROW_DOWN;
8088 const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;
8089 return doSwitch(orientation, vertical, horizontal) || key === "Enter" || key === " " || key === "";
8090 }
8091 function isCrossOrientationOpenKey(key, orientation, rtl) {
8092 const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;
8093 const horizontal = key === ARROW_DOWN;
8094 return doSwitch(orientation, vertical, horizontal);
8095 }
8096 function isCrossOrientationCloseKey(key, orientation, rtl, cols) {
8097 const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;
8098 const horizontal = key === ARROW_UP;
8099 if (orientation === "both" || orientation === "horizontal" && cols && cols > 1) {
8100 return key === ESCAPE;
8101 }
8102 return doSwitch(orientation, vertical, horizontal);
8103 }
8104 function useListNavigation(context, props) {
8105 const {
8106 listRef,
8107 activeIndex,
8108 onNavigate: onNavigateProp = () => {
8109 },
8110 enabled = true,
8111 selectedIndex = null,
8112 allowEscape = false,
8113 loopFocus = false,
8114 nested = false,
8115 rtl = false,
8116 virtual = false,
8117 focusItemOnOpen = "auto",
8118 focusItemOnHover = true,
8119 openOnArrowKeyDown = true,
8120 disabledIndices = void 0,
8121 orientation = "vertical",
8122 parentOrientation,
8123 cols = 1,
8124 id,
8125 resetOnPointerLeave = true,
8126 externalTree
8127 } = props;
8128 if (true) {
8129 if (allowEscape) {
8130 if (!loopFocus) {
8131 console.warn("`useListNavigation` looping must be enabled to allow escaping.");
8132 }
8133 if (!virtual) {
8134 console.warn("`useListNavigation` must be virtual to allow escaping.");
8135 }
8136 }
8137 if (orientation === "vertical" && cols > 1) {
8138 console.warn("In grid list navigation mode (`cols` > 1), the `orientation` should", 'be either "horizontal" or "both".');
8139 }
8140 }
8141 const store = "rootStore" in context ? context.rootStore : context;
8142 const open = store.useState("open");
8143 const floatingElement = store.useState("floatingElement");
8144 const domReferenceElement = store.useState("domReferenceElement");
8145 const dataRef = store.context.dataRef;
8146 const floatingFocusElement = getFloatingFocusElement(floatingElement);
8147 const typeableComboboxReference = isTypeableCombobox(domReferenceElement);
8148 const floatingFocusElementRef = useValueAsRef(floatingFocusElement);
8149 const parentId = useFloatingParentNodeId();
8150 const tree = useFloatingTree(externalTree);
8151 const focusItemOnOpenRef = React38.useRef(focusItemOnOpen);
8152 const indexRef = React38.useRef(selectedIndex ?? -1);
8153 const keyRef = React38.useRef(null);
8154 const isPointerModalityRef = React38.useRef(true);
8155 const onNavigate = useStableCallback((event) => {
8156 onNavigateProp(indexRef.current === -1 ? null : indexRef.current, event);
8157 });
8158 const previousOnNavigateRef = React38.useRef(onNavigate);
8159 const previousMountedRef = React38.useRef(!!floatingElement);
8160 const previousOpenRef = React38.useRef(open);
8161 const forceSyncFocusRef = React38.useRef(false);
8162 const forceScrollIntoViewRef = React38.useRef(false);
8163 const cancelQueuedFocusRef = React38.useRef(null);
8164 const disabledIndicesRef = useValueAsRef(disabledIndices);
8165 const latestOpenRef = useValueAsRef(open);
8166 const selectedIndexRef = useValueAsRef(selectedIndex);
8167 const resetOnPointerLeaveRef = useValueAsRef(resetOnPointerLeave);
8168 const focusFrame = useAnimationFrame();
8169 const waitForListPopulatedFrame = useAnimationFrame();
8170 const focusItem = useStableCallback(() => {
8171 function runFocus(item2) {
8172 if (virtual) {
8173 tree?.events.emit("virtualfocus", item2);
8174 } else {
8175 cancelQueuedFocusRef.current = enqueueFocus(item2, {
8176 sync: forceSyncFocusRef.current,
8177 preventScroll: true
8178 });
8179 }
8180 }
8181 const initialItem = listRef.current[indexRef.current];
8182 const forceScrollIntoView = forceScrollIntoViewRef.current;
8183 if (initialItem) {
8184 runFocus(initialItem);
8185 }
8186 const scheduler2 = forceSyncFocusRef.current ? (callback) => callback() : (callback) => focusFrame.request(callback);
8187 scheduler2(() => {
8188 const waitedItem = listRef.current[indexRef.current] || initialItem;
8189 if (!waitedItem) {
8190 return;
8191 }
8192 if (!initialItem) {
8193 runFocus(waitedItem);
8194 }
8195 const shouldScrollIntoView = (
8196 // eslint-disable-next-line @typescript-eslint/no-use-before-define
8197 item && (forceScrollIntoView || !isPointerModalityRef.current)
8198 );
8199 if (shouldScrollIntoView) {
8200 waitedItem.scrollIntoView?.({
8201 block: "nearest",
8202 inline: "nearest"
8203 });
8204 }
8205 });
8206 });
8207 useIsoLayoutEffect(() => {
8208 dataRef.current.orientation = orientation;
8209 }, [dataRef, orientation]);
8210 useIsoLayoutEffect(() => {
8211 if (!enabled) {
8212 return;
8213 }
8214 if (open && floatingElement) {
8215 indexRef.current = selectedIndex ?? -1;
8216 if (focusItemOnOpenRef.current && selectedIndex != null) {
8217 forceScrollIntoViewRef.current = true;
8218 onNavigate();
8219 }
8220 } else if (previousMountedRef.current) {
8221 indexRef.current = -1;
8222 previousOnNavigateRef.current();
8223 }
8224 }, [enabled, open, floatingElement, selectedIndex, onNavigate]);
8225 useIsoLayoutEffect(() => {
8226 if (!enabled) {
8227 return;
8228 }
8229 if (!open) {
8230 forceSyncFocusRef.current = false;
8231 return;
8232 }
8233 if (!floatingElement) {
8234 return;
8235 }
8236 if (activeIndex == null) {
8237 forceSyncFocusRef.current = false;
8238 if (selectedIndexRef.current != null) {
8239 return;
8240 }
8241 if (previousMountedRef.current) {
8242 indexRef.current = -1;
8243 focusItem();
8244 }
8245 if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {
8246 let runs = 0;
8247 const waitForListPopulated = () => {
8248 if (listRef.current[0] == null) {
8249 if (runs < 2) {
8250 const scheduler2 = runs ? (callback) => waitForListPopulatedFrame.request(callback) : queueMicrotask;
8251 scheduler2(waitForListPopulated);
8252 }
8253 runs += 1;
8254 } else {
8255 indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinListIndex(listRef) : getMaxListIndex(listRef);
8256 keyRef.current = null;
8257 onNavigate();
8258 }
8259 };
8260 waitForListPopulated();
8261 }
8262 } else if (!isIndexOutOfListBounds(listRef.current, activeIndex)) {
8263 indexRef.current = activeIndex;
8264 focusItem();
8265 forceScrollIntoViewRef.current = false;
8266 }
8267 }, [enabled, open, floatingElement, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, waitForListPopulatedFrame]);
8268 useIsoLayoutEffect(() => {
8269 if (!enabled || floatingElement || !tree || virtual || !previousMountedRef.current) {
8270 return;
8271 }
8272 const nodes = tree.nodesRef.current;
8273 const parent = nodes.find((node) => node.id === parentId)?.context?.elements.floating;
8274 const activeEl = activeElement(ownerDocument(floatingElement));
8275 const treeContainsActiveEl = nodes.some((node) => node.context && contains(node.context.elements.floating, activeEl));
8276 if (parent && !treeContainsActiveEl && isPointerModalityRef.current) {
8277 parent.focus({
8278 preventScroll: true
8279 });
8280 }
8281 }, [enabled, floatingElement, tree, parentId, virtual]);
8282 useIsoLayoutEffect(() => {
8283 previousOnNavigateRef.current = onNavigate;
8284 previousOpenRef.current = open;
8285 previousMountedRef.current = !!floatingElement;
8286 });
8287 useIsoLayoutEffect(() => {
8288 if (!open) {
8289 keyRef.current = null;
8290 focusItemOnOpenRef.current = focusItemOnOpen;
8291 }
8292 }, [open, focusItemOnOpen]);
8293 const hasActiveIndex = activeIndex != null;
8294 const syncCurrentTarget = useStableCallback((event) => {
8295 if (!latestOpenRef.current) {
8296 return;
8297 }
8298 const index2 = listRef.current.indexOf(event.currentTarget);
8299 if (index2 !== -1 && (indexRef.current !== index2 || activeIndex !== index2)) {
8300 indexRef.current = index2;
8301 onNavigate(event);
8302 }
8303 });
8304 const getParentOrientation = useStableCallback(() => {
8305 return parentOrientation ?? tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.dataRef?.current.orientation;
8306 });
8307 const getMinEnabledIndex = useStableCallback(() => {
8308 return getMinListIndex(listRef, disabledIndicesRef.current);
8309 });
8310 const commonOnKeyDown = useStableCallback((event) => {
8311 isPointerModalityRef.current = false;
8312 forceSyncFocusRef.current = true;
8313 if (event.which === 229) {
8314 return;
8315 }
8316 if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) {
8317 return;
8318 }
8319 if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl, cols)) {
8320 if (!isMainOrientationKey(event.key, getParentOrientation())) {
8321 stopEvent(event);
8322 }
8323 store.setOpen(false, createChangeEventDetails(reason_parts_exports.listNavigation, event.nativeEvent));
8324 if (isHTMLElement(domReferenceElement)) {
8325 if (virtual) {
8326 tree?.events.emit("virtualfocus", domReferenceElement);
8327 } else {
8328 domReferenceElement.focus();
8329 }
8330 }
8331 return;
8332 }
8333 const currentIndex = indexRef.current;
8334 const minIndex = getMinListIndex(listRef, disabledIndices);
8335 const maxIndex = getMaxListIndex(listRef, disabledIndices);
8336 if (!typeableComboboxReference) {
8337 if (event.key === "Home") {
8338 stopEvent(event);
8339 indexRef.current = minIndex;
8340 onNavigate(event);
8341 }
8342 if (event.key === "End") {
8343 stopEvent(event);
8344 indexRef.current = maxIndex;
8345 onNavigate(event);
8346 }
8347 }
8348 if (cols > 1) {
8349 const sizes = Array.from({
8350 length: listRef.current.length
8351 }, () => ({
8352 width: 1,
8353 height: 1
8354 }));
8355 const cellMap = createGridCellMap(sizes, cols, false);
8356 const minGridIndex = cellMap.findIndex((index3) => index3 != null && !isListIndexDisabled(listRef.current, index3, disabledIndices));
8357 const maxGridIndex = cellMap.reduce((foundIndex, index3, cellIndex) => index3 != null && !isListIndexDisabled(listRef.current, index3, disabledIndices) ? cellIndex : foundIndex, -1);
8358 const index2 = cellMap[getGridNavigatedIndex(cellMap.map((itemIndex) => itemIndex != null ? listRef.current[itemIndex] : null), {
8359 event,
8360 orientation,
8361 loopFocus,
8362 rtl,
8363 cols,
8364 // treat undefined (empty grid spaces) as disabled indices so we
8365 // don't end up in them
8366 disabledIndices: getGridCellIndices([...(typeof disabledIndices !== "function" ? disabledIndices : null) || listRef.current.map((_, listIndex) => isListIndexDisabled(listRef.current, listIndex, disabledIndices) ? listIndex : void 0), void 0], cellMap),
8367 minIndex: minGridIndex,
8368 maxIndex: maxGridIndex,
8369 prevIndex: getGridCellIndexOfCorner(
8370 indexRef.current > maxIndex ? minIndex : indexRef.current,
8371 sizes,
8372 cellMap,
8373 cols,
8374 // use a corner matching the edge closest to the direction
8375 // we're moving in so we don't end up in the same item. Prefer
8376 // top/left over bottom/right.
8377 // eslint-disable-next-line no-nested-ternary
8378 event.key === ARROW_DOWN ? "bl" : event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT) ? "tr" : "tl"
8379 ),
8380 stopEvent: true
8381 })];
8382 if (index2 != null) {
8383 indexRef.current = index2;
8384 onNavigate(event);
8385 }
8386 if (orientation === "both") {
8387 return;
8388 }
8389 }
8390 if (isMainOrientationKey(event.key, orientation)) {
8391 stopEvent(event);
8392 if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {
8393 indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;
8394 onNavigate(event);
8395 return;
8396 }
8397 if (isMainOrientationToEndKey(event.key, orientation, rtl)) {
8398 if (loopFocus) {
8399 if (currentIndex >= maxIndex) {
8400 if (allowEscape && currentIndex !== listRef.current.length) {
8401 indexRef.current = -1;
8402 } else {
8403 forceSyncFocusRef.current = false;
8404 indexRef.current = minIndex;
8405 }
8406 } else {
8407 indexRef.current = findNonDisabledListIndex(listRef.current, {
8408 startingIndex: currentIndex,
8409 disabledIndices
8410 });
8411 }
8412 } else {
8413 indexRef.current = Math.min(maxIndex, findNonDisabledListIndex(listRef.current, {
8414 startingIndex: currentIndex,
8415 disabledIndices
8416 }));
8417 }
8418 } else if (loopFocus) {
8419 if (currentIndex <= minIndex) {
8420 if (allowEscape && currentIndex !== -1) {
8421 indexRef.current = listRef.current.length;
8422 } else {
8423 forceSyncFocusRef.current = false;
8424 indexRef.current = maxIndex;
8425 }
8426 } else {
8427 indexRef.current = findNonDisabledListIndex(listRef.current, {
8428 startingIndex: currentIndex,
8429 decrement: true,
8430 disabledIndices
8431 });
8432 }
8433 } else {
8434 indexRef.current = Math.max(minIndex, findNonDisabledListIndex(listRef.current, {
8435 startingIndex: currentIndex,
8436 decrement: true,
8437 disabledIndices
8438 }));
8439 }
8440 if (isIndexOutOfListBounds(listRef.current, indexRef.current)) {
8441 indexRef.current = -1;
8442 }
8443 onNavigate(event);
8444 }
8445 });
8446 const item = React38.useMemo(() => {
8447 const itemProps = {
8448 onFocus(event) {
8449 forceSyncFocusRef.current = true;
8450 syncCurrentTarget(event);
8451 },
8452 onClick: ({
8453 currentTarget
8454 }) => currentTarget.focus({
8455 preventScroll: true
8456 }),
8457 // Safari
8458 onMouseMove(event) {
8459 forceSyncFocusRef.current = true;
8460 forceScrollIntoViewRef.current = false;
8461 if (focusItemOnHover) {
8462 syncCurrentTarget(event);
8463 }
8464 },
8465 onPointerLeave(event) {
8466 if (!latestOpenRef.current || !isPointerModalityRef.current || event.pointerType === "touch") {
8467 return;
8468 }
8469 forceSyncFocusRef.current = true;
8470 const relatedTarget = event.relatedTarget;
8471 if (!focusItemOnHover || listRef.current.includes(relatedTarget)) {
8472 return;
8473 }
8474 if (!resetOnPointerLeaveRef.current) {
8475 return;
8476 }
8477 cancelQueuedFocusRef.current?.();
8478 cancelQueuedFocusRef.current = null;
8479 indexRef.current = -1;
8480 onNavigate(event);
8481 if (!virtual) {
8482 const floatingFocusEl = floatingFocusElementRef.current;
8483 const activeEl = activeElement(ownerDocument(floatingFocusEl));
8484 if (floatingFocusEl && contains(floatingFocusEl, activeEl)) {
8485 floatingFocusEl.focus({
8486 preventScroll: true
8487 });
8488 }
8489 }
8490 }
8491 };
8492 return itemProps;
8493 }, [syncCurrentTarget, latestOpenRef, floatingFocusElementRef, focusItemOnHover, listRef, onNavigate, resetOnPointerLeaveRef, virtual]);
8494 const ariaActiveDescendantProp = React38.useMemo(() => {
8495 return virtual && open && hasActiveIndex && {
8496 "aria-activedescendant": `${id}-${activeIndex}`
8497 };
8498 }, [virtual, open, hasActiveIndex, id, activeIndex]);
8499 const floating = React38.useMemo(() => {
8500 return {
8501 "aria-orientation": orientation === "both" ? void 0 : orientation,
8502 ...!typeableComboboxReference ? ariaActiveDescendantProp : {},
8503 onKeyDown(event) {
8504 if (event.key === "Tab" && event.shiftKey && open && !virtual) {
8505 const target = getTarget(event.nativeEvent);
8506 if (target && !contains(floatingFocusElementRef.current, target)) {
8507 return;
8508 }
8509 stopEvent(event);
8510 store.setOpen(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent));
8511 if (isHTMLElement(domReferenceElement)) {
8512 domReferenceElement.focus();
8513 }
8514 return;
8515 }
8516 commonOnKeyDown(event);
8517 },
8518 onPointerMove() {
8519 isPointerModalityRef.current = true;
8520 }
8521 };
8522 }, [ariaActiveDescendantProp, commonOnKeyDown, floatingFocusElementRef, orientation, typeableComboboxReference, store, open, virtual, domReferenceElement]);
8523 const trigger = React38.useMemo(() => {
8524 function openOnNavigationKeyDown(event) {
8525 store.setOpen(true, createChangeEventDetails(reason_parts_exports.listNavigation, event.nativeEvent, event.currentTarget));
8526 }
8527 function checkVirtualMouse(event) {
8528 if (focusItemOnOpen === "auto" && isVirtualClick(event.nativeEvent)) {
8529 focusItemOnOpenRef.current = !virtual;
8530 }
8531 }
8532 function checkVirtualPointer(event) {
8533 focusItemOnOpenRef.current = focusItemOnOpen;
8534 if (focusItemOnOpen === "auto" && isVirtualPointerEvent(event.nativeEvent)) {
8535 focusItemOnOpenRef.current = true;
8536 }
8537 }
8538 return {
8539 onKeyDown(event) {
8540 const currentOpen = store.select("open");
8541 isPointerModalityRef.current = false;
8542 const isArrowKey = event.key.startsWith("Arrow");
8543 const isParentCrossOpenKey = isCrossOrientationOpenKey(event.key, getParentOrientation(), rtl);
8544 const isMainKey = isMainOrientationKey(event.key, orientation);
8545 const isNavigationKey = (nested ? isParentCrossOpenKey : isMainKey) || event.key === "Enter" || event.key.trim() === "";
8546 if (virtual && currentOpen) {
8547 return commonOnKeyDown(event);
8548 }
8549 if (!currentOpen && !openOnArrowKeyDown && isArrowKey) {
8550 return void 0;
8551 }
8552 if (isNavigationKey) {
8553 const isParentMainKey = isMainOrientationKey(event.key, getParentOrientation());
8554 keyRef.current = nested && isParentMainKey ? null : event.key;
8555 }
8556 if (nested) {
8557 if (isParentCrossOpenKey) {
8558 stopEvent(event);
8559 if (currentOpen) {
8560 indexRef.current = getMinEnabledIndex();
8561 onNavigate(event);
8562 } else {
8563 openOnNavigationKeyDown(event);
8564 }
8565 }
8566 return void 0;
8567 }
8568 if (isMainKey) {
8569 if (selectedIndexRef.current != null) {
8570 indexRef.current = selectedIndexRef.current;
8571 }
8572 stopEvent(event);
8573 if (!currentOpen && openOnArrowKeyDown) {
8574 openOnNavigationKeyDown(event);
8575 } else {
8576 commonOnKeyDown(event);
8577 }
8578 if (currentOpen) {
8579 onNavigate(event);
8580 }
8581 }
8582 return void 0;
8583 },
8584 onFocus(event) {
8585 if (store.select("open") && !virtual) {
8586 indexRef.current = -1;
8587 onNavigate(event);
8588 }
8589 },
8590 onPointerDown: checkVirtualPointer,
8591 onPointerEnter: checkVirtualPointer,
8592 onMouseDown: checkVirtualMouse,
8593 onClick: checkVirtualMouse
8594 };
8595 }, [commonOnKeyDown, focusItemOnOpen, getMinEnabledIndex, nested, onNavigate, store, openOnArrowKeyDown, orientation, getParentOrientation, rtl, selectedIndexRef, virtual]);
8596 const reference = React38.useMemo(() => {
8597 return {
8598 ...ariaActiveDescendantProp,
8599 ...trigger
8600 };
8601 }, [ariaActiveDescendantProp, trigger]);
8602 return React38.useMemo(() => enabled ? {
8603 reference,
8604 floating,
8605 item,
8606 trigger
8607 } : {}, [enabled, reference, floating, trigger, item]);
8608 }
8609
8610 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useTypeahead.js
8611 var React39 = __toESM(require_react(), 1);
8612 function useTypeahead(context, props) {
8613 const {
8614 listRef,
8615 elementsRef,
8616 activeIndex,
8617 onMatch: onMatchProp,
8618 onTyping,
8619 enabled = true,
8620 resetMs = 750,
8621 selectedIndex = null
8622 } = props;
8623 const store = "rootStore" in context ? context.rootStore : context;
8624 const open = store.useState("open");
8625 const timeout = useTimeout();
8626 const stringRef = React39.useRef("");
8627 const prevIndexRef = React39.useRef(selectedIndex ?? activeIndex ?? -1);
8628 const matchIndexRef = React39.useRef(null);
8629 const onKeyDown = useStableCallback((event) => {
8630 function isVisible(index3) {
8631 const element = elementsRef?.current[index3];
8632 return !element || isElementVisible(element);
8633 }
8634 function getMatchingIndex(list, string, startIndex2 = 0) {
8635 if (list.length === 0) {
8636 return -1;
8637 }
8638 const normalizedStartIndex = (startIndex2 % list.length + list.length) % list.length;
8639 const lowerString = string.toLocaleLowerCase();
8640 for (let offset4 = 0; offset4 < list.length; offset4 += 1) {
8641 const index3 = (normalizedStartIndex + offset4) % list.length;
8642 const text = list[index3];
8643 if (!text?.toLocaleLowerCase().startsWith(lowerString) || !isVisible(index3)) {
8644 continue;
8645 }
8646 return index3;
8647 }
8648 return -1;
8649 }
8650 const listContent = listRef.current;
8651 if (stringRef.current.length > 0 && event.key === " ") {
8652 stopEvent(event);
8653 onTyping?.(true);
8654 }
8655 if (stringRef.current.length > 0 && stringRef.current[0] !== " ") {
8656 if (getMatchingIndex(listContent, stringRef.current) === -1 && event.key !== " ") {
8657 onTyping?.(false);
8658 }
8659 }
8660 if (listContent == null || // Character key.
8661 event.key.length !== 1 || // Modifier key.
8662 event.ctrlKey || event.metaKey || event.altKey) {
8663 return;
8664 }
8665 if (open && event.key !== " ") {
8666 stopEvent(event);
8667 onTyping?.(true);
8668 }
8669 const isNewSession = stringRef.current === "";
8670 if (isNewSession) {
8671 prevIndexRef.current = selectedIndex ?? activeIndex ?? -1;
8672 }
8673 const allowRapidSuccessionOfFirstLetter = listContent.every((text) => text ? text[0]?.toLocaleLowerCase() !== text[1]?.toLocaleLowerCase() : true);
8674 if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) {
8675 stringRef.current = "";
8676 prevIndexRef.current = matchIndexRef.current;
8677 }
8678 stringRef.current += event.key;
8679 timeout.start(resetMs, () => {
8680 stringRef.current = "";
8681 prevIndexRef.current = matchIndexRef.current;
8682 onTyping?.(false);
8683 });
8684 const prevIndex = isNewSession ? selectedIndex ?? activeIndex ?? -1 : prevIndexRef.current;
8685 const startIndex = (prevIndex ?? 0) + 1;
8686 const index2 = getMatchingIndex(listContent, stringRef.current, startIndex);
8687 if (index2 !== -1) {
8688 onMatchProp?.(index2);
8689 matchIndexRef.current = index2;
8690 } else if (event.key !== " ") {
8691 stringRef.current = "";
8692 onTyping?.(false);
8693 }
8694 });
8695 const onBlur = useStableCallback((event) => {
8696 const next = event.relatedTarget;
8697 const currentDomReferenceElement = store.select("domReferenceElement");
8698 const currentFloatingElement = store.select("floatingElement");
8699 const withinComposite = contains(currentDomReferenceElement, next) || contains(currentFloatingElement, next);
8700 if (withinComposite) {
8701 return;
8702 }
8703 timeout.clear();
8704 stringRef.current = "";
8705 prevIndexRef.current = matchIndexRef.current;
8706 onTyping?.(false);
8707 });
8708 useIsoLayoutEffect(() => {
8709 if (!open && selectedIndex !== null) {
8710 return;
8711 }
8712 timeout.clear();
8713 matchIndexRef.current = null;
8714 if (stringRef.current !== "") {
8715 stringRef.current = "";
8716 }
8717 }, [open, selectedIndex, timeout]);
8718 useIsoLayoutEffect(() => {
8719 if (open && stringRef.current === "") {
8720 prevIndexRef.current = selectedIndex ?? activeIndex ?? -1;
8721 }
8722 }, [open, selectedIndex, activeIndex]);
8723 const sharedProps = React39.useMemo(() => ({
8724 onKeyDown,
8725 onBlur
8726 }), [onKeyDown, onBlur]);
8727 return React39.useMemo(() => enabled ? {
8728 reference: sharedProps,
8729 floating: sharedProps
8730 } : {}, [enabled, sharedProps]);
8731 }
8732
8733 // node_modules/@base-ui/react/esm/floating-ui-react/safePolygon.js
8734 var CURSOR_SPEED_THRESHOLD = 0.1;
8735 var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD;
8736 var POLYGON_BUFFER = 0.5;
8737 function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) {
8738 return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi;
8739 }
8740 function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) {
8741 let isInsideValue = false;
8742 if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) {
8743 isInsideValue = !isInsideValue;
8744 }
8745 if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) {
8746 isInsideValue = !isInsideValue;
8747 }
8748 if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) {
8749 isInsideValue = !isInsideValue;
8750 }
8751 if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) {
8752 isInsideValue = !isInsideValue;
8753 }
8754 return isInsideValue;
8755 }
8756 function isInsideRect(pointX, pointY, rect) {
8757 return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height;
8758 }
8759 function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) {
8760 const minX = Math.min(x1, x2);
8761 const maxX = Math.max(x1, x2);
8762 const minY = Math.min(y1, y2);
8763 const maxY = Math.max(y1, y2);
8764 return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY;
8765 }
8766 function safePolygon(options = {}) {
8767 const {
8768 blockPointerEvents = false
8769 } = options;
8770 const timeout = new Timeout();
8771 const fn = ({
8772 x,
8773 y,
8774 placement,
8775 elements,
8776 onClose,
8777 nodeId,
8778 tree
8779 }) => {
8780 const side = placement?.split("-")[0];
8781 let hasLanded = false;
8782 let lastX = null;
8783 let lastY = null;
8784 let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0;
8785 function isCursorMovingSlowly(nextX, nextY) {
8786 const currentTime = performance.now();
8787 const elapsedTime = currentTime - lastCursorTime;
8788 if (lastX === null || lastY === null || elapsedTime === 0) {
8789 lastX = nextX;
8790 lastY = nextY;
8791 lastCursorTime = currentTime;
8792 return false;
8793 }
8794 const deltaX = nextX - lastX;
8795 const deltaY = nextY - lastY;
8796 const distanceSquared = deltaX * deltaX + deltaY * deltaY;
8797 const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED;
8798 lastX = nextX;
8799 lastY = nextY;
8800 lastCursorTime = currentTime;
8801 return distanceSquared < thresholdSquared;
8802 }
8803 function close() {
8804 timeout.clear();
8805 onClose();
8806 }
8807 return function onMouseMove(event) {
8808 timeout.clear();
8809 const domReference = elements.domReference;
8810 const floating = elements.floating;
8811 if (!domReference || !floating || side == null || x == null || y == null) {
8812 return void 0;
8813 }
8814 const {
8815 clientX,
8816 clientY
8817 } = event;
8818 const target = getTarget(event);
8819 const isLeave = event.type === "mouseleave";
8820 const isOverFloatingEl = contains(floating, target);
8821 const isOverReferenceEl = contains(domReference, target);
8822 if (isOverFloatingEl) {
8823 hasLanded = true;
8824 if (!isLeave) {
8825 return void 0;
8826 }
8827 }
8828 if (isOverReferenceEl) {
8829 hasLanded = false;
8830 if (!isLeave) {
8831 hasLanded = true;
8832 return void 0;
8833 }
8834 }
8835 if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) {
8836 return void 0;
8837 }
8838 function hasOpenChildNode() {
8839 return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0);
8840 }
8841 function closeIfNoOpenChild() {
8842 if (!hasOpenChildNode()) {
8843 close();
8844 }
8845 }
8846 if (hasOpenChildNode()) {
8847 return void 0;
8848 }
8849 const refRect = domReference.getBoundingClientRect();
8850 const rect = floating.getBoundingClientRect();
8851 const cursorLeaveFromRight = x > rect.right - rect.width / 2;
8852 const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;
8853 const isFloatingWider = rect.width > refRect.width;
8854 const isFloatingTaller = rect.height > refRect.height;
8855 const left = (isFloatingWider ? refRect : rect).left;
8856 const right = (isFloatingWider ? refRect : rect).right;
8857 const top = (isFloatingTaller ? refRect : rect).top;
8858 const bottom = (isFloatingTaller ? refRect : rect).bottom;
8859 if (side === "top" && y >= refRect.bottom - 1 || side === "bottom" && y <= refRect.top + 1 || side === "left" && x >= refRect.right - 1 || side === "right" && x <= refRect.left + 1) {
8860 closeIfNoOpenChild();
8861 return void 0;
8862 }
8863 let isInsideTroughRect = false;
8864 switch (side) {
8865 case "top":
8866 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1);
8867 break;
8868 case "bottom":
8869 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1);
8870 break;
8871 case "left":
8872 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top);
8873 break;
8874 case "right":
8875 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top);
8876 break;
8877 default:
8878 }
8879 if (isInsideTroughRect) {
8880 return void 0;
8881 }
8882 if (hasLanded && !isInsideRect(clientX, clientY, refRect)) {
8883 closeIfNoOpenChild();
8884 return void 0;
8885 }
8886 if (!isLeave && isCursorMovingSlowly(clientX, clientY)) {
8887 closeIfNoOpenChild();
8888 return void 0;
8889 }
8890 let isInsidePolygon = false;
8891 switch (side) {
8892 case "top": {
8893 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
8894 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
8895 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
8896 const cursorPointY = y + POLYGON_BUFFER + 1;
8897 const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top;
8898 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER;
8899 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
8900 break;
8901 }
8902 case "bottom": {
8903 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
8904 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
8905 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
8906 const cursorPointY = y - POLYGON_BUFFER;
8907 const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom;
8908 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER;
8909 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
8910 break;
8911 }
8912 case "left": {
8913 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
8914 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
8915 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
8916 const cursorPointX = x + POLYGON_BUFFER + 1;
8917 const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left;
8918 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER;
8919 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY);
8920 break;
8921 }
8922 case "right": {
8923 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
8924 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
8925 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
8926 const cursorPointX = x - POLYGON_BUFFER;
8927 const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right;
8928 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER;
8929 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom);
8930 break;
8931 }
8932 default:
8933 }
8934 if (!isInsidePolygon) {
8935 closeIfNoOpenChild();
8936 } else if (!hasLanded) {
8937 timeout.start(40, closeIfNoOpenChild);
8938 }
8939 return void 0;
8940 };
8941 };
8942 fn.__options = {
8943 ...options,
8944 blockPointerEvents
8945 };
8946 return fn;
8947 }
8948
8949 // node_modules/@base-ui/react/esm/utils/popupStateMapping.js
8950 var CommonPopupDataAttributes = (function(CommonPopupDataAttributes2) {
8951 CommonPopupDataAttributes2["open"] = "data-open";
8952 CommonPopupDataAttributes2["closed"] = "data-closed";
8953 CommonPopupDataAttributes2[CommonPopupDataAttributes2["startingStyle"] = TransitionStatusDataAttributes.startingStyle] = "startingStyle";
8954 CommonPopupDataAttributes2[CommonPopupDataAttributes2["endingStyle"] = TransitionStatusDataAttributes.endingStyle] = "endingStyle";
8955 CommonPopupDataAttributes2["anchorHidden"] = "data-anchor-hidden";
8956 CommonPopupDataAttributes2["side"] = "data-side";
8957 CommonPopupDataAttributes2["align"] = "data-align";
8958 return CommonPopupDataAttributes2;
8959 })({});
8960 var CommonTriggerDataAttributes = /* @__PURE__ */ (function(CommonTriggerDataAttributes2) {
8961 CommonTriggerDataAttributes2["popupOpen"] = "data-popup-open";
8962 CommonTriggerDataAttributes2["pressed"] = "data-pressed";
8963 return CommonTriggerDataAttributes2;
8964 })({});
8965 var TRIGGER_HOOK = {
8966 [CommonTriggerDataAttributes.popupOpen]: ""
8967 };
8968 var PRESSABLE_TRIGGER_HOOK = {
8969 [CommonTriggerDataAttributes.popupOpen]: "",
8970 [CommonTriggerDataAttributes.pressed]: ""
8971 };
8972 var POPUP_OPEN_HOOK = {
8973 [CommonPopupDataAttributes.open]: ""
8974 };
8975 var POPUP_CLOSED_HOOK = {
8976 [CommonPopupDataAttributes.closed]: ""
8977 };
8978 var ANCHOR_HIDDEN_HOOK = {
8979 [CommonPopupDataAttributes.anchorHidden]: ""
8980 };
8981 var triggerOpenStateMapping = {
8982 open(value) {
8983 if (value) {
8984 return TRIGGER_HOOK;
8985 }
8986 return null;
8987 }
8988 };
8989 var pressableTriggerOpenStateMapping = {
8990 open(value) {
8991 if (value) {
8992 return PRESSABLE_TRIGGER_HOOK;
8993 }
8994 return null;
8995 }
8996 };
8997 var popupStateMapping = {
8998 open(value) {
8999 if (value) {
9000 return POPUP_OPEN_HOOK;
9001 }
9002 return POPUP_CLOSED_HOOK;
9003 },
9004 anchorHidden(value) {
9005 if (value) {
9006 return ANCHOR_HIDDEN_HOOK;
9007 }
9008 return null;
9009 }
9010 };
9011
9012 // node_modules/@base-ui/utils/esm/inertValue.js
9013 function inertValue(value) {
9014 if (isReactVersionAtLeast(19)) {
9015 return value;
9016 }
9017 return value ? "true" : void 0;
9018 }
9019
9020 // node_modules/@base-ui/react/esm/utils/InternalBackdrop.js
9021 var React40 = __toESM(require_react(), 1);
9022 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
9023 var InternalBackdrop = /* @__PURE__ */ React40.forwardRef(function InternalBackdrop2(props, ref) {
9024 const {
9025 cutout,
9026 ...otherProps
9027 } = props;
9028 let clipPath;
9029 if (cutout) {
9030 const rect = cutout.getBoundingClientRect();
9031 clipPath = `polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${rect.left}px ${rect.top}px,${rect.left}px ${rect.bottom}px,${rect.right}px ${rect.bottom}px,${rect.right}px ${rect.top}px,${rect.left}px ${rect.top}px)`;
9032 }
9033 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", {
9034 ref,
9035 role: "presentation",
9036 "data-base-ui-inert": "",
9037 ...otherProps,
9038 style: {
9039 position: "fixed",
9040 inset: 0,
9041 userSelect: "none",
9042 WebkitUserSelect: "none",
9043 clipPath
9044 }
9045 });
9046 });
9047 if (true) InternalBackdrop.displayName = "InternalBackdrop";
9048
9049 // node_modules/@base-ui/react/esm/utils/useOpenInteractionType.js
9050 var React43 = __toESM(require_react(), 1);
9051
9052 // node_modules/@base-ui/utils/esm/useEnhancedClickHandler.js
9053 var React41 = __toESM(require_react(), 1);
9054 function useEnhancedClickHandler(handler) {
9055 const lastClickInteractionTypeRef = React41.useRef("");
9056 const handlePointerDown = React41.useCallback((event) => {
9057 if (event.defaultPrevented) {
9058 return;
9059 }
9060 lastClickInteractionTypeRef.current = event.pointerType;
9061 handler(event, event.pointerType);
9062 }, [handler]);
9063 const handleClick = React41.useCallback((event) => {
9064 if (event.detail === 0) {
9065 handler(event, "keyboard");
9066 return;
9067 }
9068 if ("pointerType" in event) {
9069 handler(event, event.pointerType);
9070 } else {
9071 handler(event, lastClickInteractionTypeRef.current);
9072 }
9073 lastClickInteractionTypeRef.current = "";
9074 }, [handler]);
9075 return {
9076 onClick: handleClick,
9077 onPointerDown: handlePointerDown
9078 };
9079 }
9080
9081 // node_modules/@base-ui/react/esm/internals/useValueChanged.js
9082 var React42 = __toESM(require_react(), 1);
9083 function useValueChanged(value, onChange) {
9084 const valueRef = React42.useRef(value);
9085 const onChangeCallback = useStableCallback(onChange);
9086 useIsoLayoutEffect(() => {
9087 if (valueRef.current === value) {
9088 return;
9089 }
9090 onChangeCallback(valueRef.current);
9091 }, [value, onChangeCallback]);
9092 useIsoLayoutEffect(() => {
9093 valueRef.current = value;
9094 }, [value]);
9095 }
9096
9097 // node_modules/@base-ui/react/esm/utils/useOpenInteractionType.js
9098 function useOpenMethodTriggerProps(open, setOpenMethod) {
9099 const handleTriggerClick = useStableCallback((_, interactionType) => {
9100 const isOpen = typeof open === "function" ? open() : open;
9101 if (!isOpen) {
9102 setOpenMethod(interactionType || // On iOS Safari, the hitslop around touch targets means tapping outside an element's
9103 // bounds does not fire `pointerdown` but does fire `mousedown`. The `interactionType`
9104 // will be "" in that case.
9105 (isIOS ? "touch" : ""));
9106 }
9107 });
9108 const {
9109 onClick,
9110 onPointerDown
9111 } = useEnhancedClickHandler(handleTriggerClick);
9112 return React43.useMemo(() => ({
9113 onClick,
9114 onPointerDown
9115 }), [onClick, onPointerDown]);
9116 }
9117 function useOpenInteractionType(open) {
9118 const [openMethod, setOpenMethod] = React43.useState(null);
9119 const triggerProps = useOpenMethodTriggerProps(open, setOpenMethod);
9120 useValueChanged(open, (previousOpen) => {
9121 if (previousOpen && !open) {
9122 setOpenMethod(null);
9123 }
9124 });
9125 return React43.useMemo(() => ({
9126 openMethod,
9127 triggerProps
9128 }), [openMethod, triggerProps]);
9129 }
9130
9131 // node_modules/@base-ui/react/esm/autocomplete/index.parts.js
9132 var index_parts_exports = {};
9133 __export(index_parts_exports, {
9134 Arrow: () => ComboboxArrow,
9135 Backdrop: () => ComboboxBackdrop,
9136 Clear: () => ComboboxClear,
9137 Collection: () => ComboboxCollection,
9138 Empty: () => ComboboxEmpty,
9139 Group: () => ComboboxGroup,
9140 GroupLabel: () => ComboboxGroupLabel,
9141 Icon: () => ComboboxIcon,
9142 Input: () => ComboboxInput,
9143 InputGroup: () => AutocompleteInputGroup,
9144 Item: () => AutocompleteItem,
9145 List: () => ComboboxList,
9146 Popup: () => ComboboxPopup,
9147 Portal: () => ComboboxPortal,
9148 Positioner: () => ComboboxPositioner,
9149 Root: () => AutocompleteRoot,
9150 Row: () => ComboboxRow,
9151 Separator: () => Separator,
9152 Status: () => ComboboxStatus,
9153 Trigger: () => AutocompleteTrigger,
9154 Value: () => AutocompleteValue,
9155 useFilter: () => useCoreFilter,
9156 useFilteredItems: () => useFilteredItems
9157 });
9158
9159 // node_modules/@base-ui/react/esm/autocomplete/root/AutocompleteRoot.js
9160 var React53 = __toESM(require_react(), 1);
9161
9162 // node_modules/@base-ui/react/esm/combobox/root/AriaCombobox.js
9163 var React52 = __toESM(require_react(), 1);
9164
9165 // node_modules/@base-ui/react/esm/combobox/root/ComboboxRootContext.js
9166 var React44 = __toESM(require_react(), 1);
9167 var ComboboxRootContext = /* @__PURE__ */ React44.createContext(void 0);
9168 if (true) ComboboxRootContext.displayName = "ComboboxRootContext";
9169 var ComboboxFloatingContext = /* @__PURE__ */ React44.createContext(void 0);
9170 if (true) ComboboxFloatingContext.displayName = "ComboboxFloatingContext";
9171 var ComboboxDerivedItemsContext = /* @__PURE__ */ React44.createContext(void 0);
9172 if (true) ComboboxDerivedItemsContext.displayName = "ComboboxDerivedItemsContext";
9173 var ComboboxInputValueContext = /* @__PURE__ */ React44.createContext("");
9174 if (true) ComboboxInputValueContext.displayName = "ComboboxInputValueContext";
9175 function useComboboxRootContext() {
9176 const context = React44.useContext(ComboboxRootContext);
9177 if (!context) {
9178 throw new Error(true ? "Base UI: ComboboxRootContext is missing. Combobox parts must be placed within <Combobox.Root>." : formatErrorMessage_default(22));
9179 }
9180 return context;
9181 }
9182 function useComboboxFloatingContext() {
9183 const context = React44.useContext(ComboboxFloatingContext);
9184 if (!context) {
9185 throw new Error(true ? "Base UI: ComboboxFloatingContext is missing. Combobox parts must be placed within <Combobox.Root>." : formatErrorMessage_default(23));
9186 }
9187 return context;
9188 }
9189 function useComboboxDerivedItemsContext() {
9190 const context = React44.useContext(ComboboxDerivedItemsContext);
9191 if (!context) {
9192 throw new Error(true ? "Base UI: ComboboxItemsContext is missing. Combobox parts must be placed within <Combobox.Root>." : formatErrorMessage_default(24));
9193 }
9194 return context;
9195 }
9196 function useComboboxInputValueContext() {
9197 return React44.useContext(ComboboxInputValueContext);
9198 }
9199
9200 // node_modules/@base-ui/react/esm/internals/itemEquality.js
9201 var defaultItemEquality = (itemValue, selectedValue) => Object.is(itemValue, selectedValue);
9202 function compareItemEquality(itemValue, selectedValue, comparer) {
9203 if (itemValue == null || selectedValue == null) {
9204 return Object.is(itemValue, selectedValue);
9205 }
9206 return comparer(itemValue, selectedValue);
9207 }
9208 function selectedValueIncludes(selectedValues, itemValue, comparer) {
9209 if (!selectedValues || selectedValues.length === 0) {
9210 return false;
9211 }
9212 return selectedValues.some((selectedValue) => {
9213 if (selectedValue === void 0) {
9214 return false;
9215 }
9216 return compareItemEquality(itemValue, selectedValue, comparer);
9217 });
9218 }
9219 function findItemIndex(itemValues, selectedValue, comparer) {
9220 if (!itemValues || itemValues.length === 0) {
9221 return -1;
9222 }
9223 return itemValues.findIndex((itemValue) => {
9224 if (itemValue === void 0) {
9225 return false;
9226 }
9227 return compareItemEquality(itemValue, selectedValue, comparer);
9228 });
9229 }
9230 function removeItem(selectedValues, itemValue, comparer) {
9231 return selectedValues.filter((selectedValue) => !compareItemEquality(itemValue, selectedValue, comparer));
9232 }
9233
9234 // node_modules/@base-ui/react/esm/internals/resolveValueLabel.js
9235 var React45 = __toESM(require_react(), 1);
9236
9237 // node_modules/@base-ui/react/esm/internals/serializeValue.js
9238 function serializeValue(value) {
9239 if (value == null) {
9240 return "";
9241 }
9242 if (typeof value === "string") {
9243 return value;
9244 }
9245 try {
9246 return JSON.stringify(value);
9247 } catch {
9248 return String(value);
9249 }
9250 }
9251
9252 // node_modules/@base-ui/react/esm/internals/resolveValueLabel.js
9253 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
9254 function isGroupedItems(items) {
9255 return items != null && items.length > 0 && typeof items[0] === "object" && items[0] != null && "items" in items[0];
9256 }
9257 function hasNullItemLabel(items) {
9258 if (!Array.isArray(items)) {
9259 return items != null && "null" in items;
9260 }
9261 const arrayItems = items;
9262 if (isGroupedItems(arrayItems)) {
9263 for (const group of arrayItems) {
9264 for (const item of group.items) {
9265 if (item && item.value == null && item.label != null) {
9266 return true;
9267 }
9268 }
9269 }
9270 return false;
9271 }
9272 for (const item of arrayItems) {
9273 if (item && item.value == null && item.label != null) {
9274 return true;
9275 }
9276 }
9277 return false;
9278 }
9279 function stringifyAsLabel(item, itemToStringLabel) {
9280 if (itemToStringLabel && item != null) {
9281 return itemToStringLabel(item) ?? "";
9282 }
9283 if (item && typeof item === "object") {
9284 if ("label" in item && item.label != null) {
9285 return String(item.label);
9286 }
9287 if ("value" in item) {
9288 return String(item.value);
9289 }
9290 }
9291 return serializeValue(item);
9292 }
9293 function stringifyAsValue(item, itemToStringValue) {
9294 if (itemToStringValue && item != null) {
9295 return itemToStringValue(item) ?? "";
9296 }
9297 if (item && typeof item === "object" && "value" in item && "label" in item) {
9298 return serializeValue(item.value);
9299 }
9300 return serializeValue(item);
9301 }
9302
9303 // node_modules/@base-ui/react/esm/combobox/store.js
9304 var selectors2 = {
9305 id: createSelector((state) => state.id),
9306 labelId: createSelector((state) => state.labelId),
9307 items: createSelector((state) => state.items),
9308 selectedValue: createSelector((state) => state.selectedValue),
9309 hasSelectionChips: createSelector((state) => {
9310 const selectedValue = state.selectedValue;
9311 return Array.isArray(selectedValue) && selectedValue.length > 0;
9312 }),
9313 hasSelectedValue: createSelector((state) => {
9314 const {
9315 selectedValue,
9316 selectionMode
9317 } = state;
9318 if (selectedValue == null) {
9319 return false;
9320 }
9321 if (selectionMode === "multiple" && Array.isArray(selectedValue)) {
9322 return selectedValue.length > 0;
9323 }
9324 return true;
9325 }),
9326 hasNullItemLabel: createSelector((state, enabled) => {
9327 return enabled ? hasNullItemLabel(state.items) : false;
9328 }),
9329 open: createSelector((state) => state.open),
9330 mounted: createSelector((state) => state.mounted),
9331 forceMounted: createSelector((state) => state.forceMounted),
9332 inline: createSelector((state) => state.inline),
9333 activeIndex: createSelector((state) => state.activeIndex),
9334 selectedIndex: createSelector((state) => state.selectedIndex),
9335 isActive: createSelector((state, index2) => state.activeIndex === index2),
9336 isSelected: createSelector((state, itemValue) => {
9337 const comparer = state.isItemEqualToValue;
9338 const selectedValue = state.selectedValue;
9339 if (Array.isArray(selectedValue)) {
9340 return selectedValue.some((selectedItem) => compareItemEquality(itemValue, selectedItem, comparer));
9341 }
9342 return compareItemEquality(itemValue, selectedValue, comparer);
9343 }),
9344 transitionStatus: createSelector((state) => state.transitionStatus),
9345 popupProps: createSelector((state) => state.popupProps),
9346 inputProps: createSelector((state) => state.inputProps),
9347 triggerProps: createSelector((state) => state.triggerProps),
9348 itemProps: createSelector((state) => state.itemProps),
9349 positionerElement: createSelector((state) => state.positionerElement),
9350 listElement: createSelector((state) => state.listElement),
9351 triggerElement: createSelector((state) => state.triggerElement),
9352 inputElement: createSelector((state) => state.inputElement),
9353 inputGroupElement: createSelector((state) => state.inputGroupElement),
9354 popupSide: createSelector((state) => state.popupSide),
9355 openMethod: createSelector((state) => state.openMethod),
9356 inputInsidePopup: createSelector((state) => state.inputInsidePopup),
9357 inputOwnsFormValue: createSelector((state) => state.inputOwnsFormValue),
9358 selectionMode: createSelector((state) => state.selectionMode),
9359 name: createSelector((state) => state.name),
9360 form: createSelector((state) => state.form),
9361 disabled: createSelector((state) => state.disabled),
9362 readOnly: createSelector((state) => state.readOnly),
9363 required: createSelector((state) => state.required),
9364 grid: createSelector((state) => state.grid),
9365 virtualized: createSelector((state) => state.virtualized),
9366 itemToStringLabel: createSelector((state) => state.itemToStringLabel),
9367 isItemEqualToValue: createSelector((state) => state.isItemEqualToValue),
9368 modal: createSelector((state) => state.modal),
9369 autoHighlight: createSelector((state) => state.autoHighlight),
9370 submitOnItemClick: createSelector((state) => state.submitOnItemClick)
9371 };
9372
9373 // node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js
9374 var React46 = __toESM(require_react(), 1);
9375
9376 // node_modules/@base-ui/react/esm/field/control/FieldControlDataAttributes.js
9377 var FieldControlDataAttributes = /* @__PURE__ */ (function(FieldControlDataAttributes2) {
9378 FieldControlDataAttributes2["disabled"] = "data-disabled";
9379 FieldControlDataAttributes2["valid"] = "data-valid";
9380 FieldControlDataAttributes2["invalid"] = "data-invalid";
9381 FieldControlDataAttributes2["touched"] = "data-touched";
9382 FieldControlDataAttributes2["dirty"] = "data-dirty";
9383 FieldControlDataAttributes2["filled"] = "data-filled";
9384 FieldControlDataAttributes2["focused"] = "data-focused";
9385 return FieldControlDataAttributes2;
9386 })({});
9387
9388 // node_modules/@base-ui/react/esm/internals/field-constants/constants.js
9389 var DEFAULT_VALIDITY_STATE = {
9390 badInput: false,
9391 customError: false,
9392 patternMismatch: false,
9393 rangeOverflow: false,
9394 rangeUnderflow: false,
9395 stepMismatch: false,
9396 tooLong: false,
9397 tooShort: false,
9398 typeMismatch: false,
9399 valid: null,
9400 valueMissing: false
9401 };
9402 var DEFAULT_FIELD_STATE_ATTRIBUTES = {
9403 valid: null,
9404 touched: false,
9405 dirty: false,
9406 filled: false,
9407 focused: false
9408 };
9409 var DEFAULT_FIELD_ROOT_STATE = {
9410 disabled: false,
9411 ...DEFAULT_FIELD_STATE_ATTRIBUTES
9412 };
9413 var fieldValidityMapping = {
9414 valid(value) {
9415 if (value === null) {
9416 return null;
9417 }
9418 if (value) {
9419 return {
9420 [FieldControlDataAttributes.valid]: ""
9421 };
9422 }
9423 return {
9424 [FieldControlDataAttributes.invalid]: ""
9425 };
9426 }
9427 };
9428
9429 // node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js
9430 var DEFAULT_FIELD_ROOT_CONTEXT = {
9431 invalid: void 0,
9432 name: void 0,
9433 validityData: {
9434 state: DEFAULT_VALIDITY_STATE,
9435 errors: [],
9436 error: "",
9437 value: "",
9438 initialValue: null
9439 },
9440 setValidityData: NOOP,
9441 disabled: void 0,
9442 touched: DEFAULT_FIELD_STATE_ATTRIBUTES.touched,
9443 setTouched: NOOP,
9444 dirty: DEFAULT_FIELD_STATE_ATTRIBUTES.dirty,
9445 setDirty: NOOP,
9446 filled: DEFAULT_FIELD_STATE_ATTRIBUTES.filled,
9447 setFilled: NOOP,
9448 focused: DEFAULT_FIELD_STATE_ATTRIBUTES.focused,
9449 setFocused: NOOP,
9450 validate: () => null,
9451 validationMode: "onSubmit",
9452 validationDebounceTime: 0,
9453 shouldValidateOnChange: () => false,
9454 state: DEFAULT_FIELD_ROOT_STATE,
9455 markedDirtyRef: {
9456 current: false
9457 },
9458 registerFieldControl: NOOP,
9459 validation: {
9460 getValidationProps: (props = EMPTY_OBJECT) => props,
9461 getInputValidationProps: (props = EMPTY_OBJECT) => props,
9462 inputRef: {
9463 current: null
9464 },
9465 commit: async () => {
9466 }
9467 }
9468 };
9469 var FieldRootContext = /* @__PURE__ */ React46.createContext(DEFAULT_FIELD_ROOT_CONTEXT);
9470 if (true) FieldRootContext.displayName = "FieldRootContext";
9471 function useFieldRootContext(optional = true) {
9472 const context = React46.useContext(FieldRootContext);
9473 if (context.setValidityData === NOOP && !optional) {
9474 throw new Error(true ? "Base UI: FieldRootContext is missing. Field parts must be placed within <Field.Root>." : formatErrorMessage_default(28));
9475 }
9476 return context;
9477 }
9478
9479 // node_modules/@base-ui/react/esm/internals/field-register-control/useRegisterFieldControl.js
9480 var React47 = __toESM(require_react(), 1);
9481 function useRegisterFieldControl(controlRef, id, value, getFormValueOverride, enabled = true) {
9482 const {
9483 registerFieldControl
9484 } = useFieldRootContext();
9485 const sourceRef = React47.useRef(null);
9486 if (!sourceRef.current) {
9487 sourceRef.current = /* @__PURE__ */ Symbol();
9488 }
9489 useIsoLayoutEffect(() => {
9490 const source = sourceRef.current;
9491 if (!source || !enabled) {
9492 return void 0;
9493 }
9494 const registration = {
9495 controlRef,
9496 getValue: getFormValueOverride,
9497 id,
9498 value
9499 };
9500 registerFieldControl(source, registration);
9501 return () => {
9502 registerFieldControl(source, void 0);
9503 };
9504 }, [controlRef, enabled, getFormValueOverride, id, registerFieldControl, value]);
9505 }
9506
9507 // node_modules/@base-ui/react/esm/internals/form-context/FormContext.js
9508 var React48 = __toESM(require_react(), 1);
9509 var FormContext = /* @__PURE__ */ React48.createContext({
9510 formRef: {
9511 current: {
9512 fields: /* @__PURE__ */ new Map()
9513 }
9514 },
9515 errors: {},
9516 clearErrors: NOOP,
9517 validationMode: "onSubmit",
9518 submitAttemptedRef: {
9519 current: false
9520 }
9521 });
9522 if (true) FormContext.displayName = "FormContext";
9523 function useFormContext() {
9524 return React48.useContext(FormContext);
9525 }
9526
9527 // node_modules/@base-ui/react/esm/internals/labelable-provider/useLabelableId.js
9528 var React50 = __toESM(require_react(), 1);
9529
9530 // node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.js
9531 var React49 = __toESM(require_react(), 1);
9532 var LabelableContext = /* @__PURE__ */ React49.createContext({
9533 controlId: void 0,
9534 registerControlId: NOOP,
9535 labelId: void 0,
9536 setLabelId: NOOP,
9537 messageIds: [],
9538 setMessageIds: NOOP,
9539 getDescriptionProps: (externalProps) => externalProps
9540 });
9541 if (true) LabelableContext.displayName = "LabelableContext";
9542 function useLabelableContext() {
9543 return React49.useContext(LabelableContext);
9544 }
9545
9546 // node_modules/@base-ui/react/esm/internals/labelable-provider/useLabelableId.js
9547 function useLabelableId(params = {}) {
9548 const {
9549 id,
9550 implicit = false,
9551 controlRef
9552 } = params;
9553 const {
9554 controlId,
9555 registerControlId
9556 } = useLabelableContext();
9557 const defaultId = useBaseUiId(id);
9558 const controlIdForEffect = implicit ? controlId : void 0;
9559 const controlSourceRef = useRefWithInit(() => /* @__PURE__ */ Symbol("labelable-control"));
9560 const hasRegisteredRef = React50.useRef(false);
9561 const hadExplicitIdRef = React50.useRef(id != null);
9562 const unregisterControlId = useStableCallback(() => {
9563 if (!hasRegisteredRef.current || registerControlId === NOOP) {
9564 return;
9565 }
9566 hasRegisteredRef.current = false;
9567 registerControlId(controlSourceRef.current, void 0);
9568 });
9569 useIsoLayoutEffect(() => {
9570 if (registerControlId === NOOP) {
9571 return void 0;
9572 }
9573 let nextId;
9574 if (implicit) {
9575 const elem = controlRef?.current;
9576 if (isElement(elem) && elem.closest("label") != null) {
9577 nextId = id ?? null;
9578 } else {
9579 nextId = controlIdForEffect ?? defaultId;
9580 }
9581 } else if (id != null) {
9582 hadExplicitIdRef.current = true;
9583 nextId = id;
9584 } else if (hadExplicitIdRef.current) {
9585 nextId = defaultId;
9586 } else {
9587 unregisterControlId();
9588 return void 0;
9589 }
9590 if (nextId === void 0) {
9591 unregisterControlId();
9592 return void 0;
9593 }
9594 hasRegisteredRef.current = true;
9595 registerControlId(controlSourceRef.current, nextId);
9596 return void 0;
9597 }, [id, controlRef, controlIdForEffect, registerControlId, implicit, defaultId, controlSourceRef, unregisterControlId]);
9598 React50.useEffect(() => {
9599 return unregisterControlId;
9600 }, [unregisterControlId]);
9601 return controlId ?? defaultId;
9602 }
9603
9604 // node_modules/@base-ui/react/esm/combobox/root/utils/index.js
9605 function createCollatorItemFilter(collatorFilter, itemToStringLabel) {
9606 return (item, query) => {
9607 if (item == null) {
9608 return false;
9609 }
9610 const itemString = stringifyAsLabel(item, itemToStringLabel);
9611 return collatorFilter.contains(itemString, query);
9612 };
9613 }
9614 function createSingleSelectionCollatorFilter(collatorFilter, itemToStringLabel, selectedValue) {
9615 return (item, query) => {
9616 if (item == null) {
9617 return false;
9618 }
9619 if (!query) {
9620 return true;
9621 }
9622 const itemString = stringifyAsLabel(item, itemToStringLabel);
9623 const selectedString = selectedValue != null ? stringifyAsLabel(selectedValue, itemToStringLabel) : "";
9624 if (selectedString && collatorFilter.contains(selectedString, query) && selectedString.length === query.length) {
9625 return true;
9626 }
9627 return collatorFilter.contains(itemString, query);
9628 };
9629 }
9630
9631 // node_modules/@base-ui/react/esm/combobox/root/utils/useFilter.js
9632 var React51 = __toESM(require_react(), 1);
9633
9634 // node_modules/@base-ui/react/esm/internals/filter.js
9635 var filterCache = /* @__PURE__ */ new Map();
9636 function getFilter(options = {}) {
9637 const mergedOptions = {
9638 usage: "search",
9639 sensitivity: "base",
9640 ignorePunctuation: true,
9641 ...options
9642 };
9643 const cacheKey = `${stringifyLocale(options.locale)}|${JSON.stringify(mergedOptions)}`;
9644 const cachedFilter = filterCache.get(cacheKey);
9645 if (cachedFilter) {
9646 return cachedFilter;
9647 }
9648 const collator = new Intl.Collator(options.locale, mergedOptions);
9649 const filter = {
9650 contains(item, query, itemToString) {
9651 if (!query) {
9652 return true;
9653 }
9654 const itemString = stringifyAsLabel(item, itemToString);
9655 for (let i = 0; i <= itemString.length - query.length; i += 1) {
9656 if (collator.compare(itemString.slice(i, i + query.length), query) === 0) {
9657 return true;
9658 }
9659 }
9660 return false;
9661 },
9662 startsWith(item, query, itemToString) {
9663 if (!query) {
9664 return true;
9665 }
9666 const itemString = stringifyAsLabel(item, itemToString);
9667 return collator.compare(itemString.slice(0, query.length), query) === 0;
9668 },
9669 endsWith(item, query, itemToString) {
9670 if (!query) {
9671 return true;
9672 }
9673 const itemString = stringifyAsLabel(item, itemToString);
9674 const queryLength = query.length;
9675 return itemString.length >= queryLength && collator.compare(itemString.slice(itemString.length - queryLength), query) === 0;
9676 }
9677 };
9678 filterCache.set(cacheKey, filter);
9679 return filter;
9680 }
9681 function stringifyLocale(locale) {
9682 if (Array.isArray(locale)) {
9683 return locale.map((value) => stringifyLocale(value)).join(",");
9684 }
9685 if (locale == null) {
9686 return "";
9687 }
9688 return String(locale);
9689 }
9690
9691 // node_modules/@base-ui/react/esm/combobox/root/utils/useFilter.js
9692 var useCoreFilter = getFilter;
9693
9694 // node_modules/@base-ui/react/esm/combobox/root/utils/constants.js
9695 var NO_ACTIVE_VALUE = /* @__PURE__ */ Symbol("none");
9696 var INITIAL_LAST_HIGHLIGHT = {
9697 value: NO_ACTIVE_VALUE,
9698 index: -1
9699 };
9700
9701 // node_modules/@base-ui/react/esm/combobox/root/AriaCombobox.js
9702 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
9703 function AriaCombobox(props) {
9704 const {
9705 id: idProp,
9706 onOpenChangeComplete: onOpenChangeCompleteProp,
9707 defaultSelectedValue = null,
9708 selectedValue: selectedValueProp,
9709 onSelectedValueChange,
9710 defaultInputValue: defaultInputValueProp,
9711 inputValue: inputValueProp,
9712 open: openProp,
9713 defaultOpen = false,
9714 selectionMode = "none",
9715 onItemHighlighted: onItemHighlightedProp,
9716 name: nameProp,
9717 form,
9718 disabled: disabledProp = false,
9719 readOnly = false,
9720 required = false,
9721 inputRef: inputRefProp,
9722 grid = false,
9723 items,
9724 filteredItems: filteredItemsProp,
9725 filter: filterProp,
9726 openOnInputClick = true,
9727 autoHighlight = false,
9728 keepHighlight = false,
9729 highlightItemOnHover = true,
9730 loopFocus = true,
9731 itemToStringLabel,
9732 itemToStringValue,
9733 isItemEqualToValue = defaultItemEquality,
9734 virtualized = false,
9735 inline: inlineProp = false,
9736 fillInputOnItemPress = true,
9737 modal = false,
9738 limit = -1,
9739 autoComplete = "list",
9740 formAutoComplete,
9741 locale,
9742 submitOnItemClick = false
9743 } = props;
9744 const {
9745 clearErrors
9746 } = useFormContext();
9747 const {
9748 setDirty,
9749 validityData,
9750 shouldValidateOnChange,
9751 setFilled,
9752 name: fieldName,
9753 disabled: fieldDisabled,
9754 setTouched,
9755 setFocused,
9756 validationMode,
9757 validation
9758 } = useFieldRootContext();
9759 const direction = useDirection();
9760 const id = useLabelableId({
9761 id: idProp
9762 });
9763 const collatorFilter = useCoreFilter({
9764 locale
9765 });
9766 const [queryChangedAfterOpen, setQueryChangedAfterOpen] = React52.useState(false);
9767 const [closeQuery, setCloseQuery] = React52.useState(null);
9768 const listRef = React52.useRef([]);
9769 const labelsRef = React52.useRef([]);
9770 const popupRef = React52.useRef(null);
9771 const inputRef = React52.useRef(null);
9772 const startDismissRef = React52.useRef(null);
9773 const endDismissRef = React52.useRef(null);
9774 const emptyRef = React52.useRef(null);
9775 const keyboardActiveRef = React52.useRef(true);
9776 const hadInputClearRef = React52.useRef(false);
9777 const chipsContainerRef = React52.useRef(null);
9778 const clearRef = React52.useRef(null);
9779 const selectionEventRef = React52.useRef(null);
9780 const lastHighlightRef = React52.useRef(INITIAL_LAST_HIGHLIGHT);
9781 const pendingQueryHighlightRef = React52.useRef(null);
9782 const valuesRef = React52.useRef([]);
9783 const allValuesRef = React52.useRef([]);
9784 const disabled2 = fieldDisabled || disabledProp;
9785 const name = fieldName ?? nameProp;
9786 const multiple = selectionMode === "multiple";
9787 const single = selectionMode === "single";
9788 const hasInputValue = inputValueProp !== void 0 || defaultInputValueProp !== void 0;
9789 const hasItems = items !== void 0;
9790 const hasFilteredItemsProp = filteredItemsProp !== void 0;
9791 let autoHighlightMode;
9792 if (autoHighlight === "always") {
9793 autoHighlightMode = "always";
9794 } else {
9795 autoHighlightMode = autoHighlight ? "input-change" : false;
9796 }
9797 const [selectedValue, setSelectedValueUnwrapped] = useControlled({
9798 controlled: selectedValueProp,
9799 default: multiple ? defaultSelectedValue ?? EMPTY_ARRAY : defaultSelectedValue,
9800 name: "Combobox",
9801 state: "selectedValue"
9802 });
9803 const filter = React52.useMemo(() => {
9804 if (filterProp === null) {
9805 return () => true;
9806 }
9807 if (filterProp !== void 0) {
9808 return filterProp;
9809 }
9810 if (single && !queryChangedAfterOpen) {
9811 return createSingleSelectionCollatorFilter(collatorFilter, itemToStringLabel, selectedValue);
9812 }
9813 return createCollatorItemFilter(collatorFilter, itemToStringLabel);
9814 }, [filterProp, single, selectedValue, queryChangedAfterOpen, collatorFilter, itemToStringLabel]);
9815 const initialDefaultInputValue = useRefWithInit(() => {
9816 if (hasInputValue) {
9817 return defaultInputValueProp ?? "";
9818 }
9819 if (single) {
9820 return stringifyAsLabel(selectedValue, itemToStringLabel);
9821 }
9822 return "";
9823 }).current;
9824 const [inputValue, setInputValueUnwrapped] = useControlled({
9825 controlled: inputValueProp,
9826 default: initialDefaultInputValue,
9827 name: "Combobox",
9828 state: "inputValue"
9829 });
9830 const [open, setOpenUnwrapped] = useControlled({
9831 controlled: openProp,
9832 default: defaultOpen,
9833 name: "Combobox",
9834 state: "open"
9835 });
9836 const isGrouped = isGroupedItems(items);
9837 const query = closeQuery ?? (inputValue === "" ? "" : String(inputValue).trim());
9838 const selectedLabelString = single ? stringifyAsLabel(selectedValue, itemToStringLabel) : "";
9839 const shouldBypassFiltering = single && !queryChangedAfterOpen && query !== "" && selectedLabelString !== "" && selectedLabelString.length === query.length && collatorFilter.contains(selectedLabelString, query);
9840 const filterQuery = shouldBypassFiltering ? "" : query;
9841 const shouldIgnoreExternalFiltering = hasItems && hasFilteredItemsProp && shouldBypassFiltering;
9842 const flatItems = React52.useMemo(() => {
9843 if (!items) {
9844 return EMPTY_ARRAY;
9845 }
9846 if (isGrouped) {
9847 return items.flatMap((group) => group.items);
9848 }
9849 return items;
9850 }, [items, isGrouped]);
9851 const filteredItems = React52.useMemo(() => {
9852 if (filteredItemsProp && !shouldIgnoreExternalFiltering) {
9853 return filteredItemsProp;
9854 }
9855 if (!items) {
9856 return EMPTY_ARRAY;
9857 }
9858 if (isGrouped) {
9859 const groupedItems = items;
9860 const resultingGroups = [];
9861 let currentCount = 0;
9862 for (const group of groupedItems) {
9863 if (limit > -1 && currentCount >= limit) {
9864 break;
9865 }
9866 const candidateItems = filterQuery === "" ? group.items : group.items.filter((item) => filter(item, filterQuery, itemToStringLabel));
9867 if (candidateItems.length === 0) {
9868 continue;
9869 }
9870 const remainingLimit = limit > -1 ? limit - currentCount : Infinity;
9871 const itemsToTake = candidateItems.slice(0, remainingLimit);
9872 if (itemsToTake.length > 0) {
9873 const newGroup = {
9874 ...group,
9875 items: itemsToTake
9876 };
9877 resultingGroups.push(newGroup);
9878 currentCount += itemsToTake.length;
9879 }
9880 }
9881 return resultingGroups;
9882 }
9883 if (filterQuery === "") {
9884 return limit > -1 ? flatItems.slice(0, limit) : (
9885 // The cast here is done as `flatItems` is readonly.
9886 // valuesRef.current, a mutable ref, can be set to `flatFilteredItems`, which may
9887 // reference this exact readonly value, creating a mutation risk.
9888 // However, <Combobox.Item> can never mutate this value as the mutating effect
9889 // bails early when `items` is provided, and this is only ever returned
9890 // when `items` is provided due to the early return at the top of this hook.
9891 flatItems
9892 );
9893 }
9894 const limitedItems = [];
9895 for (const item of flatItems) {
9896 if (limit > -1 && limitedItems.length >= limit) {
9897 break;
9898 }
9899 if (filter(item, filterQuery, itemToStringLabel)) {
9900 limitedItems.push(item);
9901 }
9902 }
9903 return limitedItems;
9904 }, [filteredItemsProp, shouldIgnoreExternalFiltering, items, isGrouped, filterQuery, limit, filter, itemToStringLabel, flatItems]);
9905 const flatFilteredItems = React52.useMemo(() => {
9906 if (isGrouped) {
9907 const groups = filteredItems;
9908 return groups.flatMap((g) => g.items);
9909 }
9910 return filteredItems;
9911 }, [filteredItems, isGrouped]);
9912 const store = useRefWithInit(() => new Store({
9913 id,
9914 labelId: void 0,
9915 selectedValue,
9916 open,
9917 filter,
9918 query,
9919 items,
9920 selectionMode,
9921 listRef,
9922 labelsRef,
9923 popupRef,
9924 emptyRef,
9925 inputRef,
9926 startDismissRef,
9927 endDismissRef,
9928 keyboardActiveRef,
9929 chipsContainerRef,
9930 clearRef,
9931 valuesRef,
9932 allValuesRef,
9933 selectionEventRef,
9934 name,
9935 form,
9936 disabled: disabled2,
9937 readOnly,
9938 required,
9939 grid,
9940 isGrouped,
9941 virtualized,
9942 openOnInputClick,
9943 itemToStringLabel,
9944 isItemEqualToValue,
9945 modal,
9946 autoHighlight: autoHighlightMode,
9947 submitOnItemClick,
9948 hasInputValue,
9949 mounted: false,
9950 forceMounted: false,
9951 transitionStatus: "idle",
9952 inline: inlineProp,
9953 activeIndex: null,
9954 selectedIndex: null,
9955 popupProps: {},
9956 inputProps: {},
9957 triggerProps: {},
9958 itemProps: EMPTY_OBJECT,
9959 positionerElement: null,
9960 listElement: null,
9961 triggerElement: null,
9962 inputElement: null,
9963 inputGroupElement: null,
9964 popupSide: null,
9965 openMethod: null,
9966 inputInsidePopup: true,
9967 // Avoid duplicate names in the server HTML. Popup inputs aren't rendered
9968 // until after hydration, so the hidden input takes over then if needed.
9969 inputOwnsFormValue: selectionMode === "none",
9970 onOpenChangeComplete: onOpenChangeCompleteProp || NOOP,
9971 // Placeholder callbacks replaced on first render
9972 setOpen: NOOP,
9973 setInputValue: NOOP,
9974 setSelectedValue: NOOP,
9975 setIndices: NOOP,
9976 onItemHighlighted: NOOP,
9977 handleSelection: NOOP,
9978 forceMount: NOOP,
9979 requestSubmit: NOOP
9980 })).current;
9981 const fieldRawValue = selectionMode === "none" ? inputValue : selectedValue;
9982 const fieldStringValue = React52.useMemo(() => {
9983 if (selectionMode === "none") {
9984 return fieldRawValue;
9985 }
9986 if (Array.isArray(selectedValue)) {
9987 return selectedValue.map((value) => stringifyAsValue(value, itemToStringValue));
9988 }
9989 return stringifyAsValue(selectedValue, itemToStringValue);
9990 }, [fieldRawValue, itemToStringValue, selectionMode, selectedValue]);
9991 const onItemHighlighted = useStableCallback(onItemHighlightedProp);
9992 const onOpenChangeComplete = useStableCallback(onOpenChangeCompleteProp);
9993 const activeIndex = useStore(store, selectors2.activeIndex);
9994 const selectedIndex = useStore(store, selectors2.selectedIndex);
9995 const positionerElement = useStore(store, selectors2.positionerElement);
9996 const listElement = useStore(store, selectors2.listElement);
9997 const triggerElement = useStore(store, selectors2.triggerElement);
9998 const inputElement = useStore(store, selectors2.inputElement);
9999 const inputGroupElement = useStore(store, selectors2.inputGroupElement);
10000 const inline4 = useStore(store, selectors2.inline);
10001 const inputInsidePopup = useStore(store, selectors2.inputInsidePopup);
10002 const inputOwnsFormValue = useStore(store, selectors2.inputOwnsFormValue);
10003 const triggerRef = useValueAsRef(triggerElement);
10004 const {
10005 mounted,
10006 setMounted,
10007 transitionStatus
10008 } = useTransitionStatus(open);
10009 const {
10010 openMethod,
10011 triggerProps
10012 } = useOpenInteractionType(open);
10013 const getStringifiedValueForForm = useStableCallback(() => fieldStringValue);
10014 useRegisterFieldControl(inputInsidePopup ? triggerRef : inputRef, id, fieldRawValue, getStringifiedValueForForm);
10015 const forceMount = useStableCallback(() => {
10016 if (items) {
10017 labelsRef.current = flatFilteredItems.map((item) => stringifyAsLabel(item, itemToStringLabel));
10018 } else {
10019 store.set("forceMounted", true);
10020 }
10021 });
10022 const initialSelectedValueRef = React52.useRef(selectedValue);
10023 useIsoLayoutEffect(() => {
10024 if (selectedValue !== initialSelectedValueRef.current) {
10025 forceMount();
10026 }
10027 }, [forceMount, selectedValue]);
10028 const setIndices = useStableCallback((options) => {
10029 store.update(options);
10030 const type = options.type || "none";
10031 if (options.activeIndex === void 0) {
10032 return;
10033 }
10034 if (options.activeIndex === null) {
10035 if (lastHighlightRef.current !== INITIAL_LAST_HIGHLIGHT) {
10036 lastHighlightRef.current = INITIAL_LAST_HIGHLIGHT;
10037 onItemHighlighted(void 0, createGenericEventDetails(type, void 0, {
10038 index: -1
10039 }));
10040 }
10041 } else {
10042 const activeValue = valuesRef.current[options.activeIndex];
10043 lastHighlightRef.current = {
10044 value: activeValue,
10045 index: options.activeIndex
10046 };
10047 onItemHighlighted(activeValue, createGenericEventDetails(type, void 0, {
10048 index: options.activeIndex
10049 }));
10050 }
10051 });
10052 const setInputValue = useStableCallback((next, eventDetails) => {
10053 hadInputClearRef.current = eventDetails.reason === reason_parts_exports.inputClear;
10054 props.onInputValueChange?.(next, eventDetails);
10055 if (eventDetails.isCanceled) {
10056 return;
10057 }
10058 if (eventDetails.reason === reason_parts_exports.inputChange) {
10059 const event = eventDetails.event;
10060 const inputType = event.inputType;
10061 const isTypedInput = event.type === "compositionend" || inputType != null && inputType !== "" && inputType !== "insertReplacementText";
10062 if (isTypedInput) {
10063 const hasQuery = next.trim() !== "";
10064 if (hasQuery) {
10065 setQueryChangedAfterOpen(true);
10066 }
10067 pendingQueryHighlightRef.current = {
10068 hasQuery
10069 };
10070 if (hasQuery && autoHighlightMode && store.state.activeIndex == null) {
10071 store.set("activeIndex", 0);
10072 }
10073 }
10074 }
10075 setInputValueUnwrapped(next);
10076 });
10077 const setOpen = useStableCallback((nextOpen, eventDetails) => {
10078 if (open === nextOpen) {
10079 return;
10080 }
10081 if (eventDetails.reason === "escape-key" && hasItems && flatFilteredItems.length === 0 && !store.state.emptyRef.current) {
10082 eventDetails.allowPropagation();
10083 }
10084 props.onOpenChange?.(nextOpen, eventDetails);
10085 if (eventDetails.isCanceled) {
10086 return;
10087 }
10088 if (nextOpen && multiple && inputInsidePopup && !inline4 && closeQuery !== null) {
10089 setQueryChangedAfterOpen(false);
10090 setCloseQuery(null);
10091 if (inputValue !== "") {
10092 setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear, eventDetails.event));
10093 }
10094 }
10095 if (!nextOpen && queryChangedAfterOpen) {
10096 if (single) {
10097 if (!inline4) {
10098 setCloseQuery(query);
10099 }
10100 if (query === "") {
10101 setQueryChangedAfterOpen(false);
10102 }
10103 } else if (multiple) {
10104 if (!inline4) {
10105 setCloseQuery(query);
10106 }
10107 if (inputInsidePopup) {
10108 setIndices({
10109 activeIndex: null
10110 });
10111 }
10112 if (!inputInsidePopup || inline4) {
10113 setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear, eventDetails.event));
10114 }
10115 }
10116 }
10117 setOpenUnwrapped(nextOpen);
10118 if (!nextOpen && inputInsidePopup && (eventDetails.reason === reason_parts_exports.focusOut || eventDetails.reason === reason_parts_exports.outsidePress)) {
10119 setTouched(true);
10120 setFocused(false);
10121 if (validationMode === "onBlur") {
10122 const valueToValidate = selectionMode === "none" ? inputValue : selectedValue;
10123 validation.commit(valueToValidate);
10124 }
10125 }
10126 });
10127 const setSelectedValue = useStableCallback((nextValue, eventDetails) => {
10128 onSelectedValueChange?.(nextValue, eventDetails);
10129 if (eventDetails.isCanceled) {
10130 return;
10131 }
10132 setSelectedValueUnwrapped(nextValue);
10133 const shouldFillInput = selectionMode === "none" && popupRef.current && fillInputOnItemPress || single && !store.state.inputInsidePopup;
10134 if (shouldFillInput) {
10135 setInputValue(stringifyAsLabel(nextValue, itemToStringLabel), createChangeEventDetails(eventDetails.reason, eventDetails.event));
10136 }
10137 if (single && nextValue != null && eventDetails.reason !== reason_parts_exports.inputChange && queryChangedAfterOpen && !inline4) {
10138 setCloseQuery(query);
10139 }
10140 });
10141 const handleSelection = useStableCallback((event, passedValue) => {
10142 let itemValue = passedValue;
10143 if (itemValue === void 0) {
10144 if (activeIndex === null) {
10145 return;
10146 }
10147 itemValue = valuesRef.current[activeIndex];
10148 }
10149 const targetEl = getTarget(event);
10150 const overrideEvent = selectionEventRef.current ?? event;
10151 selectionEventRef.current = null;
10152 const eventDetails = createChangeEventDetails(reason_parts_exports.itemPress, overrideEvent);
10153 const href = targetEl?.closest("a")?.getAttribute("href");
10154 if (href) {
10155 if (href.startsWith("#")) {
10156 setOpen(false, eventDetails);
10157 }
10158 return;
10159 }
10160 if (multiple) {
10161 const currentSelectedValue = Array.isArray(selectedValue) ? selectedValue : [];
10162 const isCurrentlySelected = selectedValueIncludes(currentSelectedValue, itemValue, store.state.isItemEqualToValue);
10163 const nextValue = isCurrentlySelected ? removeItem(currentSelectedValue, itemValue, store.state.isItemEqualToValue) : [...currentSelectedValue, itemValue];
10164 setSelectedValue(nextValue, eventDetails);
10165 const wasFiltering = inputRef.current ? inputRef.current.value.trim() !== "" : false;
10166 if (!wasFiltering) {
10167 return;
10168 }
10169 if (store.state.inputInsidePopup) {
10170 setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear, eventDetails.event));
10171 } else {
10172 setOpen(false, eventDetails);
10173 }
10174 } else {
10175 setSelectedValue(itemValue, eventDetails);
10176 setOpen(false, eventDetails);
10177 }
10178 });
10179 const requestSubmit = useStableCallback(() => {
10180 if (!store.state.submitOnItemClick) {
10181 return;
10182 }
10183 const formElement = validation.inputRef.current?.form ?? store.state.inputElement?.form;
10184 if (formElement && typeof formElement.requestSubmit === "function") {
10185 formElement.requestSubmit();
10186 }
10187 });
10188 const handleUnmount = useStableCallback(() => {
10189 setMounted(false);
10190 onOpenChangeComplete?.(false);
10191 setQueryChangedAfterOpen(false);
10192 setCloseQuery(null);
10193 if (selectionMode === "none") {
10194 setIndices({
10195 activeIndex: null,
10196 selectedIndex: null
10197 });
10198 } else {
10199 setIndices({
10200 activeIndex: null
10201 });
10202 }
10203 if (multiple && inputRef.current && inputRef.current.value !== "" && !hadInputClearRef.current) {
10204 setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear));
10205 }
10206 if (single) {
10207 if (store.state.inputInsidePopup) {
10208 if (inputRef.current && inputRef.current.value !== "") {
10209 setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear));
10210 }
10211 } else {
10212 const stringVal = stringifyAsLabel(selectedValue, itemToStringLabel);
10213 if (inputRef.current && inputRef.current.value !== stringVal) {
10214 const reason = stringVal === "" ? reason_parts_exports.inputClear : reason_parts_exports.none;
10215 setInputValue(stringVal, createChangeEventDetails(reason));
10216 }
10217 }
10218 }
10219 });
10220 const resolvedPopupRef = React52.useMemo(() => {
10221 if (inline4 && positionerElement) {
10222 return {
10223 current: positionerElement.closest('[role="dialog"]')
10224 };
10225 }
10226 return popupRef;
10227 }, [inline4, positionerElement]);
10228 useOpenChangeComplete({
10229 enabled: !props.actionsRef,
10230 open,
10231 ref: resolvedPopupRef,
10232 onComplete() {
10233 if (!open) {
10234 handleUnmount();
10235 }
10236 }
10237 });
10238 React52.useImperativeHandle(props.actionsRef, () => ({
10239 unmount: handleUnmount
10240 }), [handleUnmount]);
10241 useIsoLayoutEffect(function syncSelectedIndex() {
10242 if (open || selectionMode === "none") {
10243 return;
10244 }
10245 const registry = items ? flatItems : allValuesRef.current;
10246 if (multiple) {
10247 const currentValue = Array.isArray(selectedValue) ? selectedValue : [];
10248 const lastValue = currentValue[currentValue.length - 1];
10249 const lastIndex = findItemIndex(registry, lastValue, isItemEqualToValue);
10250 setIndices({
10251 selectedIndex: lastIndex === -1 ? null : lastIndex
10252 });
10253 } else {
10254 const index2 = findItemIndex(registry, selectedValue, isItemEqualToValue);
10255 setIndices({
10256 selectedIndex: index2 === -1 ? null : index2
10257 });
10258 }
10259 }, [open, selectedValue, items, selectionMode, flatItems, multiple, isItemEqualToValue, setIndices]);
10260 useIsoLayoutEffect(() => {
10261 if (items) {
10262 valuesRef.current = flatFilteredItems;
10263 listRef.current.length = flatFilteredItems.length;
10264 }
10265 }, [items, flatFilteredItems]);
10266 useIsoLayoutEffect(() => {
10267 const pendingHighlight = pendingQueryHighlightRef.current;
10268 if (pendingHighlight) {
10269 if (pendingHighlight.hasQuery) {
10270 if (autoHighlightMode) {
10271 store.set("activeIndex", 0);
10272 }
10273 } else if (autoHighlightMode === "always") {
10274 store.set("activeIndex", 0);
10275 }
10276 pendingQueryHighlightRef.current = null;
10277 }
10278 if (!open && !inline4) {
10279 return;
10280 }
10281 const shouldUseFlatFilteredItems = hasItems || hasFilteredItemsProp;
10282 const candidateItems = shouldUseFlatFilteredItems ? flatFilteredItems : valuesRef.current;
10283 const storeActiveIndex = store.state.activeIndex;
10284 if (storeActiveIndex == null) {
10285 if (autoHighlightMode === "always" && candidateItems.length > 0) {
10286 store.set("activeIndex", 0);
10287 return;
10288 }
10289 if (lastHighlightRef.current !== INITIAL_LAST_HIGHLIGHT) {
10290 lastHighlightRef.current = INITIAL_LAST_HIGHLIGHT;
10291 store.state.onItemHighlighted(void 0, createGenericEventDetails(reason_parts_exports.none, void 0, {
10292 index: -1
10293 }));
10294 }
10295 return;
10296 }
10297 if (storeActiveIndex >= candidateItems.length) {
10298 if (lastHighlightRef.current !== INITIAL_LAST_HIGHLIGHT) {
10299 lastHighlightRef.current = INITIAL_LAST_HIGHLIGHT;
10300 store.state.onItemHighlighted(void 0, createGenericEventDetails(reason_parts_exports.none, void 0, {
10301 index: -1
10302 }));
10303 }
10304 store.set("activeIndex", null);
10305 return;
10306 }
10307 const itemValue = candidateItems[storeActiveIndex];
10308 const previouslyHighlightedItemValue = lastHighlightRef.current.value;
10309 const isSameItem = previouslyHighlightedItemValue !== NO_ACTIVE_VALUE && compareItemEquality(itemValue, previouslyHighlightedItemValue, store.state.isItemEqualToValue);
10310 if (lastHighlightRef.current.index !== storeActiveIndex || !isSameItem) {
10311 lastHighlightRef.current = {
10312 value: itemValue,
10313 index: storeActiveIndex
10314 };
10315 store.state.onItemHighlighted(itemValue, createGenericEventDetails(reason_parts_exports.none, void 0, {
10316 index: storeActiveIndex
10317 }));
10318 }
10319 }, [activeIndex, autoHighlightMode, hasFilteredItemsProp, hasItems, flatFilteredItems, inline4, open, store]);
10320 useIsoLayoutEffect(() => {
10321 if (selectionMode === "none") {
10322 setFilled(String(inputValue) !== "");
10323 return;
10324 }
10325 setFilled(multiple ? Array.isArray(selectedValue) && selectedValue.length > 0 : selectedValue != null);
10326 }, [setFilled, selectionMode, inputValue, selectedValue, multiple]);
10327 React52.useEffect(() => {
10328 if (hasItems && autoHighlightMode && flatFilteredItems.length === 0) {
10329 setIndices({
10330 activeIndex: null
10331 });
10332 }
10333 }, [hasItems, autoHighlightMode, flatFilteredItems.length, setIndices]);
10334 useValueChanged(query, () => {
10335 if (!open || query === "" || query === String(initialDefaultInputValue)) {
10336 return;
10337 }
10338 setQueryChangedAfterOpen(true);
10339 });
10340 useValueChanged(selectedValue, () => {
10341 if (selectionMode === "none") {
10342 return;
10343 }
10344 clearErrors(name);
10345 setDirty(selectedValue !== validityData.initialValue);
10346 if (shouldValidateOnChange()) {
10347 validation.commit(selectedValue);
10348 } else {
10349 validation.commit(selectedValue, true);
10350 }
10351 if (single && !hasInputValue && !inputInsidePopup) {
10352 const nextInputValue = stringifyAsLabel(selectedValue, itemToStringLabel);
10353 if (inputValue !== nextInputValue) {
10354 setInputValue(nextInputValue, createChangeEventDetails(reason_parts_exports.none));
10355 }
10356 }
10357 });
10358 useValueChanged(inputValue, () => {
10359 if (selectionMode !== "none") {
10360 return;
10361 }
10362 clearErrors(name);
10363 setDirty(inputValue !== validityData.initialValue);
10364 if (shouldValidateOnChange()) {
10365 validation.commit(inputValue);
10366 } else {
10367 validation.commit(inputValue, true);
10368 }
10369 });
10370 useValueChanged(items, () => {
10371 if (!single || hasInputValue || inputInsidePopup || queryChangedAfterOpen) {
10372 return;
10373 }
10374 const nextInputValue = stringifyAsLabel(selectedValue, itemToStringLabel);
10375 if (inputValue !== nextInputValue) {
10376 setInputValue(nextInputValue, createChangeEventDetails(reason_parts_exports.none));
10377 }
10378 });
10379 const floatingRootContext = useFloatingRootContext({
10380 open: inline4 ? true : open,
10381 onOpenChange: setOpen,
10382 elements: {
10383 reference: inputInsidePopup ? triggerElement : inputElement,
10384 floating: positionerElement
10385 }
10386 });
10387 let ariaHasPopup;
10388 let ariaExpanded;
10389 if (!inline4) {
10390 ariaHasPopup = grid ? "grid" : "listbox";
10391 ariaExpanded = open ? "true" : "false";
10392 }
10393 const role = React52.useMemo(() => {
10394 const isPlainInput = inputElement?.tagName === "INPUT";
10395 const shouldTreatAsInput = inputElement == null || isPlainInput;
10396 const shouldApplyAria = shouldTreatAsInput || open;
10397 const reference = shouldTreatAsInput ? {
10398 autoComplete: "off",
10399 spellCheck: "false",
10400 autoCorrect: "off",
10401 autoCapitalize: "none"
10402 } : {};
10403 if (shouldApplyAria) {
10404 reference.role = "combobox";
10405 reference["aria-expanded"] = ariaExpanded;
10406 reference["aria-haspopup"] = ariaHasPopup;
10407 reference["aria-controls"] = open ? listElement?.id : void 0;
10408 reference["aria-autocomplete"] = autoComplete;
10409 }
10410 return {
10411 reference,
10412 floating: {
10413 role: "presentation"
10414 }
10415 };
10416 }, [inputElement, open, ariaExpanded, ariaHasPopup, listElement?.id, autoComplete]);
10417 const click = useClick(floatingRootContext, {
10418 enabled: !readOnly && !disabled2 && openOnInputClick,
10419 event: "mousedown-only",
10420 toggle: false,
10421 // Apply a small delay for touch to let mobile viewport/keyboard positioning settle.
10422 // This avoids top-bottom flip flickers if the preferred position is "top" when first tapping.
10423 touchOpenDelay: inputInsidePopup ? 0 : 100,
10424 reason: reason_parts_exports.inputPress
10425 });
10426 const dismiss = useDismiss(floatingRootContext, {
10427 enabled: !readOnly && !disabled2 && !inline4,
10428 outsidePressEvent: {
10429 mouse: "sloppy",
10430 // The visual viewport (affected by the mobile software keyboard) can be
10431 // somewhat small. The user may want to scroll the screen to see more of
10432 // the popup.
10433 touch: "intentional"
10434 },
10435 // Without a popup, let the Escape key bubble the event up to other popups' handlers.
10436 bubbles: inline4 ? true : void 0,
10437 outsidePress(event) {
10438 const target = getTarget(event);
10439 return !contains(triggerElement, target) && !contains(clearRef.current, target) && !contains(chipsContainerRef.current, target) && !contains(inputGroupElement, target);
10440 }
10441 });
10442 const listNavigation2 = useListNavigation(floatingRootContext, {
10443 enabled: !readOnly && !disabled2,
10444 id,
10445 listRef,
10446 activeIndex,
10447 selectedIndex,
10448 virtual: true,
10449 loopFocus,
10450 allowEscape: loopFocus && !autoHighlightMode,
10451 focusItemOnOpen: queryChangedAfterOpen || selectionMode === "none" && !autoHighlightMode ? false : "auto",
10452 focusItemOnHover: highlightItemOnHover,
10453 resetOnPointerLeave: !keepHighlight,
10454 // `cols` > 1 enables grid navigation.
10455 // Since <Combobox.Row> infers column sizes (and is required when building a grid),
10456 // it works correctly even with a value of `2`.
10457 // Floating UI tests don't require `role="row"` wrappers, so retains the number API.
10458 cols: grid ? 2 : 1,
10459 orientation: grid ? "horizontal" : void 0,
10460 rtl: direction === "rtl",
10461 disabledIndices: EMPTY_ARRAY,
10462 onNavigate(nextActiveIndex, event) {
10463 if (!event && !open || transitionStatus === "ending") {
10464 return;
10465 }
10466 if (!event) {
10467 setIndices({
10468 activeIndex: nextActiveIndex
10469 });
10470 } else {
10471 setIndices({
10472 activeIndex: nextActiveIndex,
10473 type: keyboardActiveRef.current ? "keyboard" : "pointer"
10474 });
10475 }
10476 }
10477 });
10478 const inputProps = React52.useMemo(() => mergeProps(listNavigation2.reference, dismiss.reference, click.reference, role.reference), [listNavigation2.reference, dismiss.reference, click.reference, role.reference]);
10479 const popupProps = React52.useMemo(() => mergeProps(FOCUSABLE_POPUP_PROPS, listNavigation2.floating, dismiss.floating, role.floating), [listNavigation2.floating, dismiss.floating, role.floating]);
10480 const itemProps = React52.useMemo(() => {
10481 const listNavigationItemProps = listNavigation2.item;
10482 if (!listNavigationItemProps) {
10483 return EMPTY_OBJECT;
10484 }
10485 return {
10486 ...listNavigationItemProps,
10487 onFocus: void 0
10488 };
10489 }, [listNavigation2.item]);
10490 useOnFirstRender(() => {
10491 store.update({
10492 inline: inlineProp,
10493 popupProps,
10494 inputProps,
10495 triggerProps,
10496 itemProps,
10497 setOpen,
10498 setInputValue,
10499 setSelectedValue,
10500 setIndices,
10501 onItemHighlighted,
10502 handleSelection,
10503 forceMount,
10504 requestSubmit
10505 });
10506 });
10507 useIsoLayoutEffect(() => {
10508 store.update({
10509 id,
10510 selectedValue,
10511 open,
10512 mounted,
10513 transitionStatus,
10514 items,
10515 inline: inlineProp,
10516 popupProps,
10517 inputProps,
10518 triggerProps,
10519 openMethod,
10520 itemProps,
10521 selectionMode,
10522 name,
10523 form,
10524 disabled: disabled2,
10525 readOnly,
10526 required,
10527 grid,
10528 isGrouped,
10529 virtualized,
10530 onOpenChangeComplete,
10531 openOnInputClick,
10532 itemToStringLabel,
10533 modal,
10534 autoHighlight: autoHighlightMode,
10535 isItemEqualToValue,
10536 submitOnItemClick,
10537 hasInputValue,
10538 requestSubmit,
10539 inputOwnsFormValue: selectionMode === "none" && (inlineProp || !store.state.inputInsidePopup)
10540 });
10541 }, [store, id, selectedValue, open, mounted, transitionStatus, items, popupProps, inputProps, itemProps, openMethod, triggerProps, selectionMode, name, disabled2, readOnly, required, validation, grid, isGrouped, virtualized, onOpenChangeComplete, openOnInputClick, itemToStringLabel, modal, isItemEqualToValue, submitOnItemClick, hasInputValue, inlineProp, requestSubmit, autoHighlightMode, form]);
10542 const hiddenInputRef = useMergedRefs(inputRefProp, validation.inputRef);
10543 const itemsContextValue = React52.useMemo(() => ({
10544 query,
10545 hasItems,
10546 filteredItems,
10547 flatFilteredItems
10548 }), [query, hasItems, filteredItems, flatFilteredItems]);
10549 const serializedValue = React52.useMemo(() => {
10550 if (Array.isArray(fieldRawValue)) {
10551 return "";
10552 }
10553 return stringifyAsValue(fieldRawValue, itemToStringValue);
10554 }, [fieldRawValue, itemToStringValue]);
10555 const hasMultipleSelection = multiple && Array.isArray(selectedValue) && selectedValue.length > 0;
10556 const hiddenInputName = multiple || selectionMode === "none" && inputOwnsFormValue ? void 0 : name;
10557 const hiddenInputs = React52.useMemo(() => {
10558 if (!multiple || !Array.isArray(selectedValue) || !name) {
10559 return null;
10560 }
10561 return selectedValue.map((value) => {
10562 const currentSerializedValue = stringifyAsValue(value, itemToStringValue);
10563 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("input", {
10564 type: "hidden",
10565 form,
10566 name,
10567 value: currentSerializedValue
10568 }, currentSerializedValue);
10569 });
10570 }, [multiple, selectedValue, form, name, itemToStringValue]);
10571 const children = /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(React52.Fragment, {
10572 children: [props.children, /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("input", {
10573 ...validation.getInputValidationProps({
10574 // Move focus when the hidden input is focused.
10575 onFocus() {
10576 if (inputInsidePopup) {
10577 triggerElement?.focus();
10578 return;
10579 }
10580 (inputRef.current || triggerElement)?.focus();
10581 },
10582 // Handle browser autofill.
10583 onChange(event) {
10584 if (event.nativeEvent.defaultPrevented || disabled2 || readOnly) {
10585 event.preventBaseUIHandler?.();
10586 return;
10587 }
10588 const nextValue = event.currentTarget.value;
10589 const details = createChangeEventDetails(reason_parts_exports.none, event.nativeEvent);
10590 function handleChange() {
10591 if (multiple) {
10592 return;
10593 }
10594 if (selectionMode === "none") {
10595 setDirty(nextValue !== validityData.initialValue);
10596 setInputValue(nextValue, details);
10597 if (shouldValidateOnChange()) {
10598 validation.commit(nextValue);
10599 }
10600 return;
10601 }
10602 const matchingValue = valuesRef.current.find((v) => {
10603 const candidateValue = stringifyAsValue(v, itemToStringValue);
10604 if (candidateValue.toLowerCase() === nextValue.toLowerCase()) {
10605 return true;
10606 }
10607 const candidateLabel = stringifyAsLabel(v, itemToStringLabel);
10608 if (candidateLabel.toLowerCase() === nextValue.toLowerCase()) {
10609 return true;
10610 }
10611 return false;
10612 });
10613 if (matchingValue != null) {
10614 setDirty(matchingValue !== validityData.initialValue);
10615 setSelectedValue?.(matchingValue, details);
10616 if (shouldValidateOnChange()) {
10617 validation.commit(matchingValue);
10618 }
10619 }
10620 }
10621 if (items) {
10622 handleChange();
10623 } else {
10624 forceMount();
10625 queueMicrotask(handleChange);
10626 }
10627 }
10628 }),
10629 id: id && hiddenInputName == null ? `${id}-hidden-input` : void 0,
10630 form,
10631 name: hiddenInputName,
10632 autoComplete: formAutoComplete,
10633 disabled: disabled2,
10634 required: required && !hasMultipleSelection,
10635 readOnly,
10636 value: serializedValue,
10637 ref: hiddenInputRef,
10638 style: hiddenInputName ? visuallyHiddenInput : visuallyHidden,
10639 tabIndex: -1,
10640 "aria-hidden": true,
10641 suppressHydrationWarning: true
10642 }), hiddenInputs]
10643 });
10644 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxRootContext.Provider, {
10645 value: store,
10646 children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxFloatingContext.Provider, {
10647 value: floatingRootContext,
10648 children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxDerivedItemsContext.Provider, {
10649 value: itemsContextValue,
10650 children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxInputValueContext.Provider, {
10651 value: inputValue,
10652 children
10653 })
10654 })
10655 })
10656 });
10657 }
10658
10659 // node_modules/@base-ui/react/esm/autocomplete/root/AutocompleteRoot.js
10660 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
10661 function AutocompleteRoot(props) {
10662 const {
10663 openOnInputClick = false,
10664 value,
10665 defaultValue,
10666 onValueChange,
10667 mode = "list",
10668 itemToStringValue,
10669 ...other
10670 } = props;
10671 const enableInline = mode === "inline" || mode === "both";
10672 const staticItems = mode === "inline" || mode === "none";
10673 const isControlled = value !== void 0;
10674 const [internalValue, setInternalValue] = React53.useState(defaultValue ?? "");
10675 const [inlineInputValue, setInlineInputValue] = React53.useState("");
10676 React53.useEffect(() => {
10677 if (isControlled) {
10678 setInlineInputValue("");
10679 }
10680 }, [value, isControlled]);
10681 let resolvedInputValue;
10682 if (enableInline && inlineInputValue !== "") {
10683 resolvedInputValue = inlineInputValue;
10684 } else if (isControlled) {
10685 resolvedInputValue = value ?? "";
10686 } else {
10687 resolvedInputValue = internalValue;
10688 }
10689 const collator = useCoreFilter();
10690 const baseFilter = React53.useMemo(() => {
10691 if (other.filter !== void 0) {
10692 return other.filter;
10693 }
10694 return collator.contains;
10695 }, [other.filter, collator]);
10696 const resolvedQuery = String(isControlled ? value : internalValue).trim();
10697 const resolvedFilter = React53.useMemo(() => {
10698 if (mode !== "both") {
10699 return staticItems ? null : baseFilter;
10700 }
10701 if (baseFilter === null) {
10702 return null;
10703 }
10704 return (item, _query, toString) => {
10705 return baseFilter(item, resolvedQuery, toString);
10706 };
10707 }, [baseFilter, mode, resolvedQuery, staticItems]);
10708 function handleValueChange(nextValue, eventDetails) {
10709 setInlineInputValue("");
10710 if (!isControlled) {
10711 setInternalValue(nextValue);
10712 }
10713 onValueChange?.(nextValue, eventDetails);
10714 }
10715 function handleItemHighlighted(highlightedValue, eventDetails) {
10716 props.onItemHighlighted?.(highlightedValue, eventDetails);
10717 if (eventDetails.reason === reason_parts_exports.pointer) {
10718 return;
10719 }
10720 if (enableInline) {
10721 if (highlightedValue == null) {
10722 setInlineInputValue("");
10723 } else {
10724 setInlineInputValue(stringifyAsLabel(highlightedValue, itemToStringValue));
10725 }
10726 } else {
10727 setInlineInputValue("");
10728 }
10729 }
10730 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AriaCombobox, {
10731 ...other,
10732 itemToStringLabel: itemToStringValue,
10733 openOnInputClick,
10734 selectionMode: "none",
10735 fillInputOnItemPress: true,
10736 filter: resolvedFilter,
10737 autoComplete: mode,
10738 inputValue: resolvedInputValue,
10739 defaultInputValue: defaultValue,
10740 onInputValueChange: handleValueChange,
10741 onItemHighlighted: handleItemHighlighted
10742 });
10743 }
10744
10745 // node_modules/@base-ui/react/esm/autocomplete/value/AutocompleteValue.js
10746 var React54 = __toESM(require_react(), 1);
10747 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
10748 function AutocompleteValue(props) {
10749 const {
10750 children
10751 } = props;
10752 const inputValue = useComboboxInputValueContext();
10753 let returnValue = null;
10754 if (typeof children === "function") {
10755 returnValue = children(String(inputValue));
10756 } else if (children != null) {
10757 returnValue = children;
10758 } else {
10759 returnValue = inputValue;
10760 }
10761 return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(React54.Fragment, {
10762 children: returnValue
10763 });
10764 }
10765
10766 // node_modules/@base-ui/react/esm/combobox/trigger/ComboboxTrigger.js
10767 var React55 = __toESM(require_react(), 1);
10768
10769 // node_modules/@base-ui/react/esm/combobox/utils/stateAttributesMapping.js
10770 var triggerStateAttributesMapping = {
10771 ...pressableTriggerOpenStateMapping,
10772 ...fieldValidityMapping,
10773 popupSide: (side) => side ? {
10774 "data-popup-side": side
10775 } : null,
10776 listEmpty: (empty) => empty ? {
10777 "data-list-empty": ""
10778 } : null
10779 };
10780
10781 // node_modules/@base-ui/react/esm/utils/getPseudoElementBounds.js
10782 function getPseudoElementBounds(element) {
10783 const elementRect = element.getBoundingClientRect();
10784 if (true) {
10785 return elementRect;
10786 }
10787 const win = getWindow(element);
10788 const beforeStyles = win.getComputedStyle(element, "::before");
10789 const afterStyles = win.getComputedStyle(element, "::after");
10790 const hasPseudoElements = beforeStyles.content !== "none" || afterStyles.content !== "none";
10791 if (!hasPseudoElements) {
10792 return elementRect;
10793 }
10794 const beforeWidth = parseFloat(beforeStyles.width) || 0;
10795 const beforeHeight = parseFloat(beforeStyles.height) || 0;
10796 const afterWidth = parseFloat(afterStyles.width) || 0;
10797 const afterHeight = parseFloat(afterStyles.height) || 0;
10798 const totalWidth = Math.max(elementRect.width, beforeWidth, afterWidth);
10799 const totalHeight = Math.max(elementRect.height, beforeHeight, afterHeight);
10800 const widthDiff = totalWidth - elementRect.width;
10801 const heightDiff = totalHeight - elementRect.height;
10802 return {
10803 left: elementRect.left - widthDiff / 2,
10804 right: elementRect.right + widthDiff / 2,
10805 top: elementRect.top - heightDiff / 2,
10806 bottom: elementRect.bottom + heightDiff / 2
10807 };
10808 }
10809
10810 // node_modules/@base-ui/react/esm/utils/resolveAriaLabelledBy.js
10811 function resolveAriaLabelledBy(fieldLabelId, localLabelId) {
10812 return fieldLabelId ?? localLabelId;
10813 }
10814
10815 // node_modules/@base-ui/react/esm/combobox/trigger/ComboboxTrigger.js
10816 var BOUNDARY_OFFSET = 2;
10817 var ComboboxTrigger = /* @__PURE__ */ React55.forwardRef(function ComboboxTrigger2(componentProps, forwardedRef) {
10818 const {
10819 render,
10820 className,
10821 nativeButton = true,
10822 disabled: disabledProp = false,
10823 id: idProp,
10824 style,
10825 ...elementProps
10826 } = componentProps;
10827 const {
10828 state: fieldState,
10829 disabled: fieldDisabled,
10830 setTouched,
10831 setFocused,
10832 validationMode,
10833 validation
10834 } = useFieldRootContext();
10835 const {
10836 labelId: fieldLabelId
10837 } = useLabelableContext();
10838 const store = useComboboxRootContext();
10839 const {
10840 filteredItems
10841 } = useComboboxDerivedItemsContext();
10842 const selectionMode = useStore(store, selectors2.selectionMode);
10843 const comboboxDisabled = useStore(store, selectors2.disabled);
10844 const readOnly = useStore(store, selectors2.readOnly);
10845 const required = useStore(store, selectors2.required);
10846 const mounted = useStore(store, selectors2.mounted);
10847 const popupSideValue = useStore(store, selectors2.popupSide);
10848 const positionerElement = useStore(store, selectors2.positionerElement);
10849 const listElement = useStore(store, selectors2.listElement);
10850 const triggerProps = useStore(store, selectors2.triggerProps);
10851 const triggerElement = useStore(store, selectors2.triggerElement);
10852 const inputInsidePopup = useStore(store, selectors2.inputInsidePopup);
10853 const rootId = useStore(store, selectors2.id);
10854 const comboboxLabelId = useStore(store, selectors2.labelId);
10855 const open = useStore(store, selectors2.open);
10856 const selectedValue = useStore(store, selectors2.selectedValue);
10857 const activeIndex = useStore(store, selectors2.activeIndex);
10858 const selectedIndex = useStore(store, selectors2.selectedIndex);
10859 const hasSelectedValue = useStore(store, selectors2.hasSelectedValue);
10860 const floatingRootContext = useComboboxFloatingContext();
10861 const inputValue = useComboboxInputValueContext();
10862 const focusTimeout = useTimeout();
10863 const disabled2 = fieldDisabled || comboboxDisabled || disabledProp;
10864 const listEmpty = filteredItems.length === 0;
10865 const popupSide = mounted && positionerElement ? popupSideValue : null;
10866 useLabelableId({
10867 id: inputInsidePopup ? idProp : void 0
10868 });
10869 const id = inputInsidePopup ? idProp ?? rootId : idProp;
10870 const ariaLabelledBy = resolveAriaLabelledBy(fieldLabelId, comboboxLabelId);
10871 const currentPointerTypeRef = React55.useRef("");
10872 function trackPointerType(event) {
10873 currentPointerTypeRef.current = event.pointerType;
10874 }
10875 const domReference = floatingRootContext.useState("domReferenceElement");
10876 React55.useEffect(() => {
10877 if (!inputInsidePopup) {
10878 return;
10879 }
10880 if (triggerElement && triggerElement !== domReference) {
10881 floatingRootContext.set("domReferenceElement", triggerElement);
10882 }
10883 }, [triggerElement, domReference, floatingRootContext, inputInsidePopup]);
10884 const {
10885 reference: triggerTypeaheadProps
10886 } = useTypeahead(floatingRootContext, {
10887 enabled: !open && !readOnly && !comboboxDisabled && selectionMode === "single",
10888 listRef: store.state.labelsRef,
10889 activeIndex,
10890 selectedIndex,
10891 onMatch(index2) {
10892 const nextSelectedValue = store.state.valuesRef.current[index2];
10893 if (nextSelectedValue !== void 0) {
10894 store.state.setSelectedValue(nextSelectedValue, createChangeEventDetails("none"));
10895 }
10896 }
10897 });
10898 const {
10899 reference: triggerClickProps
10900 } = useClick(floatingRootContext, {
10901 enabled: !readOnly && !comboboxDisabled,
10902 event: "mousedown"
10903 });
10904 const {
10905 buttonRef,
10906 getButtonProps
10907 } = useButton({
10908 native: nativeButton,
10909 disabled: disabled2
10910 });
10911 const state = {
10912 ...fieldState,
10913 open,
10914 disabled: disabled2,
10915 popupSide,
10916 listEmpty,
10917 placeholder: selectionMode === "none" ? false : !hasSelectedValue
10918 };
10919 const setTriggerElement = useStableCallback((element2) => {
10920 store.set("triggerElement", element2);
10921 });
10922 const element = useRenderElement("button", componentProps, {
10923 ref: [forwardedRef, buttonRef, setTriggerElement],
10924 state,
10925 props: [triggerProps, triggerClickProps, triggerTypeaheadProps, {
10926 id,
10927 tabIndex: inputInsidePopup ? 0 : -1,
10928 role: inputInsidePopup ? "combobox" : void 0,
10929 "aria-expanded": open ? "true" : "false",
10930 "aria-haspopup": inputInsidePopup ? "dialog" : "listbox",
10931 "aria-controls": open ? listElement?.id : void 0,
10932 "aria-required": inputInsidePopup ? required || void 0 : void 0,
10933 "aria-labelledby": ariaLabelledBy,
10934 onPointerDown: trackPointerType,
10935 onPointerEnter: trackPointerType,
10936 onFocus() {
10937 setFocused(true);
10938 if (disabled2 || readOnly) {
10939 return;
10940 }
10941 focusTimeout.start(0, store.state.forceMount);
10942 },
10943 onBlur(event) {
10944 if (contains(positionerElement, event.relatedTarget)) {
10945 return;
10946 }
10947 setTouched(true);
10948 setFocused(false);
10949 if (validationMode === "onBlur") {
10950 const valueToValidate = selectionMode === "none" ? inputValue : selectedValue;
10951 validation.commit(valueToValidate);
10952 }
10953 },
10954 onMouseDown(event) {
10955 if (disabled2 || readOnly) {
10956 return;
10957 }
10958 if (!inputInsidePopup) {
10959 floatingRootContext.set("domReferenceElement", event.currentTarget);
10960 }
10961 store.state.forceMount();
10962 if (currentPointerTypeRef.current !== "touch") {
10963 store.state.inputRef.current?.focus();
10964 if (!inputInsidePopup) {
10965 event.preventDefault();
10966 }
10967 }
10968 if (open) {
10969 return;
10970 }
10971 const doc = ownerDocument(event.currentTarget);
10972 function handleMouseUp(mouseEvent) {
10973 if (!triggerElement) {
10974 return;
10975 }
10976 const mouseUpTarget = getTarget(mouseEvent);
10977 const positioner = store.state.positionerElement;
10978 const list = store.state.listElement;
10979 if (contains(triggerElement, mouseUpTarget) || contains(positioner, mouseUpTarget) || contains(list, mouseUpTarget) || mouseUpTarget === triggerElement) {
10980 return;
10981 }
10982 const bounds = getPseudoElementBounds(triggerElement);
10983 const withinHorizontal = mouseEvent.clientX >= bounds.left - BOUNDARY_OFFSET && mouseEvent.clientX <= bounds.right + BOUNDARY_OFFSET;
10984 const withinVertical = mouseEvent.clientY >= bounds.top - BOUNDARY_OFFSET && mouseEvent.clientY <= bounds.bottom + BOUNDARY_OFFSET;
10985 if (withinHorizontal && withinVertical) {
10986 return;
10987 }
10988 store.state.setOpen(false, createChangeEventDetails("cancel-open", mouseEvent));
10989 }
10990 if (inputInsidePopup) {
10991 doc.addEventListener("mouseup", handleMouseUp, {
10992 once: true
10993 });
10994 }
10995 },
10996 onKeyDown(event) {
10997 if (disabled2 || readOnly) {
10998 return;
10999 }
11000 if (event.key === "ArrowDown" || event.key === "ArrowUp") {
11001 stopEvent(event);
11002 store.state.setOpen(true, createChangeEventDetails(reason_parts_exports.listNavigation, event.nativeEvent));
11003 store.state.inputRef.current?.focus();
11004 }
11005 }
11006 }, validation ? validation.getValidationProps(elementProps) : elementProps, getButtonProps],
11007 stateAttributesMapping: triggerStateAttributesMapping
11008 });
11009 return element;
11010 });
11011 if (true) ComboboxTrigger.displayName = "ComboboxTrigger";
11012
11013 // node_modules/@base-ui/react/esm/autocomplete/trigger/AutocompleteTrigger.js
11014 var AutocompleteTrigger = ComboboxTrigger;
11015
11016 // node_modules/@base-ui/react/esm/combobox/input/ComboboxInput.js
11017 var React59 = __toESM(require_react(), 1);
11018
11019 // node_modules/@base-ui/react/esm/combobox/chips/ComboboxChipsContext.js
11020 var React56 = __toESM(require_react(), 1);
11021 var ComboboxChipsContext = /* @__PURE__ */ React56.createContext(void 0);
11022 if (true) ComboboxChipsContext.displayName = "ComboboxChipsContext";
11023 function useComboboxChipsContext() {
11024 return React56.useContext(ComboboxChipsContext);
11025 }
11026
11027 // node_modules/@base-ui/react/esm/combobox/positioner/ComboboxPositionerContext.js
11028 var React57 = __toESM(require_react(), 1);
11029 var ComboboxPositionerContext = /* @__PURE__ */ React57.createContext(void 0);
11030 if (true) ComboboxPositionerContext.displayName = "ComboboxPositionerContext";
11031 function useComboboxPositionerContext(optional) {
11032 const context = React57.useContext(ComboboxPositionerContext);
11033 if (context === void 0 && !optional) {
11034 throw new Error(true ? "Base UI: <Combobox.Popup> and <Combobox.Arrow> must be used within the <Combobox.Positioner> component" : formatErrorMessage_default(21));
11035 }
11036 return context;
11037 }
11038
11039 // node_modules/@base-ui/react/esm/combobox/utils/ComboboxInternalDismissButton.js
11040 var React58 = __toESM(require_react(), 1);
11041 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
11042 var ComboboxInternalDismissButton = /* @__PURE__ */ React58.forwardRef(function ComboboxInternalDismissButton2(_, forwardedRef) {
11043 const store = useComboboxRootContext();
11044 const {
11045 buttonRef,
11046 getButtonProps
11047 } = useButton({
11048 native: false
11049 });
11050 const mergedRef = useMergedRefs(forwardedRef, buttonRef);
11051 function handleDismiss(event) {
11052 store.state.setOpen(false, createChangeEventDetails(reason_parts_exports.closePress, event.nativeEvent, event.currentTarget));
11053 }
11054 const dismissProps = getButtonProps({
11055 onClick: handleDismiss
11056 });
11057 return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", {
11058 ref: mergedRef,
11059 ...dismissProps,
11060 "aria-label": "Dismiss",
11061 tabIndex: void 0,
11062 style: visuallyHiddenInput
11063 });
11064 });
11065 if (true) ComboboxInternalDismissButton.displayName = "ComboboxInternalDismissButton";
11066
11067 // node_modules/@base-ui/react/esm/combobox/input/ComboboxInput.js
11068 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1);
11069 var ComboboxInput = /* @__PURE__ */ React59.forwardRef(function ComboboxInput2(componentProps, forwardedRef) {
11070 const {
11071 render,
11072 className,
11073 disabled: disabledProp = false,
11074 id: idProp,
11075 style,
11076 ...elementProps
11077 } = componentProps;
11078 const {
11079 state: fieldState,
11080 disabled: fieldDisabled,
11081 setTouched,
11082 setFocused,
11083 validationMode,
11084 validation
11085 } = useFieldRootContext();
11086 const {
11087 labelId: fieldLabelId
11088 } = useLabelableContext();
11089 const comboboxChipsContext = useComboboxChipsContext();
11090 const positioning = useComboboxPositionerContext(true);
11091 const hasPositionerParent = Boolean(positioning);
11092 const store = useComboboxRootContext();
11093 const {
11094 filteredItems
11095 } = useComboboxDerivedItemsContext();
11096 const inputValue = useComboboxInputValueContext();
11097 const direction = useDirection();
11098 const required = useStore(store, selectors2.required);
11099 const comboboxDisabled = useStore(store, selectors2.disabled);
11100 const readOnly = useStore(store, selectors2.readOnly);
11101 const name = useStore(store, selectors2.name);
11102 const form = useStore(store, selectors2.form);
11103 const selectionMode = useStore(store, selectors2.selectionMode);
11104 const autoHighlightMode = useStore(store, selectors2.autoHighlight);
11105 const inputProps = useStore(store, selectors2.inputProps);
11106 const triggerProps = useStore(store, selectors2.triggerProps);
11107 const open = useStore(store, selectors2.open);
11108 const mounted = useStore(store, selectors2.mounted);
11109 const selectedValue = useStore(store, selectors2.selectedValue);
11110 const popupSideValue = useStore(store, selectors2.popupSide);
11111 const positionerElement = useStore(store, selectors2.positionerElement);
11112 const rootId = useStore(store, selectors2.id);
11113 const inline4 = useStore(store, selectors2.inline);
11114 const modal = useStore(store, selectors2.modal);
11115 const autoHighlightEnabled = Boolean(autoHighlightMode);
11116 const popupSide = mounted && positionerElement ? popupSideValue : null;
11117 const disabled2 = fieldDisabled || comboboxDisabled || disabledProp;
11118 const listEmpty = filteredItems.length === 0;
11119 const isInsidePopup = hasPositionerParent || inline4;
11120 const focusManagerModal = !isInsidePopup || modal;
11121 const id = useBaseUiId(idProp ?? (!isInsidePopup ? rootId : void 0));
11122 const ariaLabelledBy = resolveAriaLabelledBy(fieldLabelId, void 0);
11123 const fieldStateForInput = hasPositionerParent ? DEFAULT_FIELD_STATE_ATTRIBUTES : fieldState;
11124 const [composingValue, setComposingValue] = React59.useState(null);
11125 const isComposingRef = React59.useRef(false);
11126 const lastActiveIndexRef = React59.useRef(null);
11127 const shouldRestoreActiveIndexRef = React59.useRef(false);
11128 const inputOwnsFormValue = selectionMode === "none" && !hasPositionerParent;
11129 const setInputElement = useStableCallback((element2) => {
11130 const nextIsInsidePopup = hasPositionerParent || store.state.inline;
11131 if (nextIsInsidePopup && !store.state.hasInputValue) {
11132 store.state.setInputValue("", createChangeEventDetails(reason_parts_exports.none));
11133 }
11134 store.update({
11135 inputElement: element2,
11136 inputInsidePopup: nextIsInsidePopup,
11137 inputOwnsFormValue
11138 });
11139 });
11140 const validationProps = hasPositionerParent || !validation ? elementProps : validation.getValidationProps(elementProps);
11141 const state = {
11142 ...fieldStateForInput,
11143 open,
11144 disabled: disabled2,
11145 readOnly,
11146 popupSide,
11147 listEmpty
11148 };
11149 function handleKeyDown(event) {
11150 if (!comboboxChipsContext) {
11151 return void 0;
11152 }
11153 let nextIndex;
11154 const {
11155 highlightedChipIndex
11156 } = comboboxChipsContext;
11157 const renderedChipsCount = comboboxChipsContext.chipsRef.current.length;
11158 const isRtl = direction === "rtl";
11159 const previousChipKey = isRtl ? "ArrowRight" : "ArrowLeft";
11160 const nextChipKey = isRtl ? "ArrowLeft" : "ArrowRight";
11161 if (highlightedChipIndex !== void 0) {
11162 if (event.key === previousChipKey) {
11163 event.preventDefault();
11164 if (highlightedChipIndex > 0) {
11165 nextIndex = highlightedChipIndex - 1;
11166 } else {
11167 nextIndex = void 0;
11168 }
11169 } else if (event.key === nextChipKey) {
11170 event.preventDefault();
11171 if (highlightedChipIndex < renderedChipsCount - 1) {
11172 nextIndex = highlightedChipIndex + 1;
11173 } else {
11174 nextIndex = void 0;
11175 }
11176 } else if (event.key === "Backspace" || event.key === "Delete") {
11177 event.preventDefault();
11178 const computedNextIndex = highlightedChipIndex >= selectedValue.length - 1 ? selectedValue.length - 2 : highlightedChipIndex;
11179 nextIndex = computedNextIndex >= 0 ? computedNextIndex : void 0;
11180 store.state.setIndices({
11181 activeIndex: null,
11182 selectedIndex: null,
11183 type: "keyboard"
11184 });
11185 }
11186 return nextIndex;
11187 }
11188 if (event.key === previousChipKey && (event.currentTarget.selectionStart ?? 0) === 0 && selectedValue.length > 0) {
11189 event.preventDefault();
11190 nextIndex = renderedChipsCount > 0 ? renderedChipsCount - 1 : void 0;
11191 } else if (event.key === "Backspace" && event.currentTarget.value === "" && selectedValue.length > 0) {
11192 store.state.setIndices({
11193 activeIndex: null,
11194 selectedIndex: null,
11195 type: "keyboard"
11196 });
11197 event.preventDefault();
11198 }
11199 return nextIndex;
11200 }
11201 const element = useRenderElement("input", componentProps, {
11202 state,
11203 ref: [forwardedRef, store.state.inputRef, setInputElement],
11204 props: [inputProps, triggerProps, {
11205 type: "text",
11206 value: componentProps.value ?? composingValue ?? inputValue,
11207 "aria-readonly": readOnly || void 0,
11208 "aria-required": required || void 0,
11209 "aria-labelledby": ariaLabelledBy,
11210 disabled: disabled2,
11211 readOnly,
11212 required: selectionMode === "none" ? required : void 0,
11213 form,
11214 ...inputOwnsFormValue && name && {
11215 name
11216 },
11217 id,
11218 onFocus() {
11219 setFocused(true);
11220 if (!inline4 || !shouldRestoreActiveIndexRef.current) {
11221 return;
11222 }
11223 shouldRestoreActiveIndexRef.current = false;
11224 const nextActiveIndex = lastActiveIndexRef.current;
11225 if (nextActiveIndex == null || // `valuesRef` can be sparse, so guard against restoring a removed slot.
11226 !Object.hasOwn(store.state.valuesRef.current, nextActiveIndex)) {
11227 return;
11228 }
11229 store.state.setIndices({
11230 activeIndex: nextActiveIndex
11231 });
11232 },
11233 onBlur() {
11234 setTouched(true);
11235 setFocused(false);
11236 const activeIndex = store.state.activeIndex;
11237 if (inline4 && activeIndex !== null && autoHighlightMode !== "always") {
11238 lastActiveIndexRef.current = activeIndex;
11239 shouldRestoreActiveIndexRef.current = true;
11240 store.state.setIndices({
11241 activeIndex: null
11242 });
11243 }
11244 if (validationMode === "onBlur") {
11245 const valueToValidate = selectionMode === "none" ? inputValue : selectedValue;
11246 validation.commit(valueToValidate);
11247 }
11248 },
11249 onCompositionStart(event) {
11250 if (isAndroid) {
11251 return;
11252 }
11253 isComposingRef.current = true;
11254 setComposingValue(event.currentTarget.value);
11255 },
11256 onCompositionEnd(event) {
11257 isComposingRef.current = false;
11258 const next = event.currentTarget.value;
11259 setComposingValue(null);
11260 store.state.setInputValue(next, createChangeEventDetails(reason_parts_exports.inputChange, event.nativeEvent));
11261 },
11262 onChange(event) {
11263 const inputType = event.nativeEvent.inputType;
11264 const autofillLikeInput = !inputType || inputType === "insertReplacementText";
11265 const shouldOpenOnInput = isComposingRef.current || !autofillLikeInput;
11266 if (isComposingRef.current) {
11267 const nextVal = event.currentTarget.value;
11268 setComposingValue(nextVal);
11269 if (nextVal === "" && !store.state.openOnInputClick && !store.state.inputInsidePopup) {
11270 store.state.setOpen(false, createChangeEventDetails(reason_parts_exports.inputClear, event.nativeEvent));
11271 }
11272 const trimmed2 = nextVal.trim();
11273 const shouldMaintainHighlight = autoHighlightEnabled && trimmed2 !== "";
11274 if (!readOnly && !disabled2 && trimmed2) {
11275 if (shouldOpenOnInput) {
11276 store.state.setOpen(true, createChangeEventDetails(reason_parts_exports.inputChange, event.nativeEvent));
11277 if (!autoHighlightEnabled) {
11278 store.state.setIndices({
11279 activeIndex: null,
11280 selectedIndex: null,
11281 type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer"
11282 });
11283 }
11284 }
11285 }
11286 if (open && store.state.activeIndex !== null && !shouldMaintainHighlight) {
11287 store.state.setIndices({
11288 activeIndex: null,
11289 selectedIndex: null,
11290 type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer"
11291 });
11292 }
11293 return;
11294 }
11295 store.state.setInputValue(event.currentTarget.value, createChangeEventDetails(reason_parts_exports.inputChange, event.nativeEvent));
11296 const empty = event.currentTarget.value === "";
11297 const clearDetails = createChangeEventDetails(reason_parts_exports.inputClear, event.nativeEvent);
11298 if (empty && !store.state.inputInsidePopup) {
11299 if (selectionMode === "single") {
11300 store.state.setSelectedValue(null, clearDetails);
11301 }
11302 if (!store.state.openOnInputClick) {
11303 store.state.setOpen(false, clearDetails);
11304 }
11305 }
11306 const trimmed = event.currentTarget.value.trim();
11307 if (!readOnly && !disabled2 && trimmed) {
11308 if (shouldOpenOnInput) {
11309 store.state.setOpen(true, createChangeEventDetails(reason_parts_exports.inputChange, event.nativeEvent));
11310 if (!autoHighlightEnabled) {
11311 store.state.setIndices({
11312 activeIndex: null,
11313 selectedIndex: null,
11314 type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer"
11315 });
11316 }
11317 }
11318 }
11319 if (open && store.state.activeIndex !== null && !autoHighlightEnabled) {
11320 store.state.setIndices({
11321 activeIndex: null,
11322 selectedIndex: null,
11323 type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer"
11324 });
11325 }
11326 },
11327 onKeyDown(event) {
11328 if (disabled2 || readOnly) {
11329 return;
11330 }
11331 if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {
11332 return;
11333 }
11334 store.state.keyboardActiveRef.current = true;
11335 const input = event.currentTarget;
11336 const scrollAmount = input.scrollWidth - input.clientWidth;
11337 const isRTL2 = direction === "rtl";
11338 if (event.key === "Home") {
11339 stopEvent(event);
11340 const cursor = isFirefox && isRTL2 ? input.value.length : 0;
11341 input.setSelectionRange(cursor, cursor);
11342 input.scrollLeft = 0;
11343 return;
11344 }
11345 if (event.key === "End") {
11346 stopEvent(event);
11347 const cursor = isFirefox && isRTL2 ? 0 : input.value.length;
11348 input.setSelectionRange(cursor, cursor);
11349 input.scrollLeft = isRTL2 ? -scrollAmount : scrollAmount;
11350 return;
11351 }
11352 if (!mounted && event.key === "Escape") {
11353 const isClear = selectionMode === "multiple" && Array.isArray(selectedValue) ? selectedValue.length === 0 : selectedValue === null;
11354 const details = createChangeEventDetails(reason_parts_exports.escapeKey, event.nativeEvent);
11355 const value = selectionMode === "multiple" ? [] : null;
11356 store.state.setInputValue("", details);
11357 store.state.setSelectedValue(value, details);
11358 if (!isClear && !store.state.inline && !details.isPropagationAllowed) {
11359 event.stopPropagation();
11360 }
11361 return;
11362 }
11363 if (comboboxChipsContext && event.key === "Backspace" && input.value === "" && comboboxChipsContext.highlightedChipIndex === void 0 && Array.isArray(selectedValue) && selectedValue.length > 0) {
11364 const renderedChipsCount = comboboxChipsContext.chipsRef.current.length;
11365 const removalIndex = renderedChipsCount > 0 ? renderedChipsCount - 1 : selectedValue.length - 1;
11366 const newValue = selectedValue.filter((_, index2) => index2 !== removalIndex);
11367 store.state.setIndices({
11368 activeIndex: null,
11369 selectedIndex: null,
11370 type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer"
11371 });
11372 store.state.setSelectedValue(newValue, createChangeEventDetails(reason_parts_exports.none, event.nativeEvent));
11373 return;
11374 }
11375 const hadHighlightedChip = comboboxChipsContext?.highlightedChipIndex !== void 0;
11376 const nextIndex = handleKeyDown(event);
11377 comboboxChipsContext?.setHighlightedChipIndex(nextIndex);
11378 if (nextIndex !== void 0) {
11379 comboboxChipsContext?.chipsRef.current[nextIndex]?.focus();
11380 } else if (hadHighlightedChip) {
11381 store.state.inputRef.current?.focus();
11382 }
11383 if (event.which === 229) {
11384 return;
11385 }
11386 if (event.key === "Enter" && open) {
11387 const activeIndex = store.state.activeIndex;
11388 const nativeEvent = event.nativeEvent;
11389 if (activeIndex === null) {
11390 if (inline4) {
11391 return;
11392 }
11393 store.state.setOpen(false, createChangeEventDetails(reason_parts_exports.none, nativeEvent));
11394 return;
11395 }
11396 stopEvent(event);
11397 const listItem = store.state.listRef.current[activeIndex];
11398 if (listItem) {
11399 store.state.selectionEventRef.current = nativeEvent;
11400 listItem.click();
11401 store.state.selectionEventRef.current = null;
11402 }
11403 }
11404 },
11405 onPointerMove() {
11406 store.state.keyboardActiveRef.current = false;
11407 },
11408 onPointerDown() {
11409 store.state.keyboardActiveRef.current = false;
11410 }
11411 }, validationProps],
11412 stateAttributesMapping: triggerStateAttributesMapping
11413 });
11414 const renderedInput = hasPositionerParent ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(FieldRootContext.Provider, {
11415 value: DEFAULT_FIELD_ROOT_CONTEXT,
11416 children: element
11417 }) : element;
11418 return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(React59.Fragment, {
11419 children: [open && focusManagerModal && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ComboboxInternalDismissButton, {
11420 ref: store.state.startDismissRef
11421 }), renderedInput]
11422 });
11423 });
11424 if (true) ComboboxInput.displayName = "ComboboxInput";
11425
11426 // node_modules/@base-ui/react/esm/combobox/input-group/ComboboxInputGroup.js
11427 var React60 = __toESM(require_react(), 1);
11428
11429 // node_modules/@base-ui/react/esm/combobox/utils/handleInputPress.js
11430 function handleInputPress(event, store, disabled2, readOnly, shouldIgnoreTarget) {
11431 if (event.baseUIHandlerPrevented || readOnly) {
11432 return;
11433 }
11434 const target = getTarget(event.nativeEvent);
11435 const targetElement = isElement(target) ? target : null;
11436 if (targetElement !== event.currentTarget && (shouldIgnoreTarget?.(targetElement) || isInteractiveElement(targetElement))) {
11437 return;
11438 }
11439 event.preventDefault();
11440 if (disabled2) {
11441 return;
11442 }
11443 store.state.inputRef.current?.focus();
11444 if (store.state.openOnInputClick) {
11445 store.state.setOpen(true, createChangeEventDetails(reason_parts_exports.inputPress, event.nativeEvent));
11446 }
11447 }
11448
11449 // node_modules/@base-ui/react/esm/combobox/input-group/ComboboxInputGroup.js
11450 var ComboboxInputGroup = /* @__PURE__ */ React60.forwardRef(function ComboboxInputGroup2(componentProps, forwardedRef) {
11451 const {
11452 render,
11453 className,
11454 style,
11455 ...elementProps
11456 } = componentProps;
11457 const {
11458 state: fieldState
11459 } = useFieldRootContext();
11460 const store = useComboboxRootContext();
11461 const {
11462 filteredItems
11463 } = useComboboxDerivedItemsContext();
11464 const open = useStore(store, selectors2.open);
11465 const mounted = useStore(store, selectors2.mounted);
11466 const popupSideValue = useStore(store, selectors2.popupSide);
11467 const positionerElement = useStore(store, selectors2.positionerElement);
11468 const comboboxDisabled = useStore(store, selectors2.disabled);
11469 const readOnly = useStore(store, selectors2.readOnly);
11470 const hasSelectedValue = useStore(store, selectors2.hasSelectedValue);
11471 const selectionMode = useStore(store, selectors2.selectionMode);
11472 const popupSide = mounted && positionerElement ? popupSideValue : null;
11473 const disabled2 = comboboxDisabled;
11474 const listEmpty = filteredItems.length === 0;
11475 const placeholder = selectionMode === "none" ? false : !hasSelectedValue;
11476 const state = {
11477 ...fieldState,
11478 open,
11479 disabled: disabled2,
11480 readOnly,
11481 popupSide,
11482 listEmpty,
11483 placeholder
11484 };
11485 const setInputGroupElement = useStableCallback((element) => {
11486 store.set("inputGroupElement", element);
11487 });
11488 return useRenderElement("div", componentProps, {
11489 ref: [forwardedRef, setInputGroupElement],
11490 props: [{
11491 role: "group",
11492 onMouseDown(event) {
11493 handleInputPress(event, store, disabled2, readOnly, (target) => {
11494 return contains(store.state.chipsContainerRef.current, target);
11495 });
11496 }
11497 }, elementProps],
11498 state,
11499 stateAttributesMapping: triggerStateAttributesMapping
11500 });
11501 });
11502 if (true) ComboboxInputGroup.displayName = "ComboboxInputGroup";
11503
11504 // node_modules/@base-ui/react/esm/autocomplete/input-group/AutocompleteInputGroup.js
11505 var AutocompleteInputGroup = ComboboxInputGroup;
11506
11507 // node_modules/@base-ui/react/esm/combobox/icon/ComboboxIcon.js
11508 var React61 = __toESM(require_react(), 1);
11509 var ComboboxIcon = /* @__PURE__ */ React61.forwardRef(function ComboboxIcon2(componentProps, forwardedRef) {
11510 const {
11511 render,
11512 className,
11513 style,
11514 ...elementProps
11515 } = componentProps;
11516 const element = useRenderElement("span", componentProps, {
11517 ref: forwardedRef,
11518 props: [{
11519 "aria-hidden": true,
11520 children: "\u25BC"
11521 }, elementProps]
11522 });
11523 return element;
11524 });
11525 if (true) ComboboxIcon.displayName = "ComboboxIcon";
11526
11527 // node_modules/@base-ui/react/esm/combobox/clear/ComboboxClear.js
11528 var React62 = __toESM(require_react(), 1);
11529 var stateAttributesMapping = {
11530 ...transitionStatusMapping,
11531 ...triggerOpenStateMapping
11532 };
11533 var ComboboxClear = /* @__PURE__ */ React62.forwardRef(function ComboboxClear2(componentProps, forwardedRef) {
11534 const {
11535 render,
11536 className,
11537 disabled: disabledProp = false,
11538 nativeButton = true,
11539 keepMounted = false,
11540 style,
11541 ...elementProps
11542 } = componentProps;
11543 const {
11544 disabled: fieldDisabled
11545 } = useFieldRootContext();
11546 const store = useComboboxRootContext();
11547 const selectionMode = useStore(store, selectors2.selectionMode);
11548 const comboboxDisabled = useStore(store, selectors2.disabled);
11549 const readOnly = useStore(store, selectors2.readOnly);
11550 const open = useStore(store, selectors2.open);
11551 const selectedValue = useStore(store, selectors2.selectedValue);
11552 const hasSelectionChips = useStore(store, selectors2.hasSelectionChips);
11553 const inputValue = useComboboxInputValueContext();
11554 let visible = false;
11555 if (selectionMode === "none") {
11556 visible = inputValue !== "";
11557 } else if (selectionMode === "single") {
11558 visible = selectedValue != null;
11559 } else {
11560 visible = hasSelectionChips;
11561 }
11562 const disabled2 = fieldDisabled || comboboxDisabled || disabledProp;
11563 const {
11564 buttonRef,
11565 getButtonProps
11566 } = useButton({
11567 native: nativeButton,
11568 disabled: disabled2
11569 });
11570 const {
11571 mounted,
11572 transitionStatus,
11573 setMounted
11574 } = useTransitionStatus(visible);
11575 const state = {
11576 disabled: disabled2,
11577 visible,
11578 open,
11579 transitionStatus
11580 };
11581 useOpenChangeComplete({
11582 open: visible,
11583 ref: store.state.clearRef,
11584 onComplete() {
11585 if (!visible) {
11586 setMounted(false);
11587 }
11588 }
11589 });
11590 const element = useRenderElement("button", componentProps, {
11591 state,
11592 ref: [forwardedRef, buttonRef, store.state.clearRef],
11593 props: [{
11594 tabIndex: -1,
11595 children: "x",
11596 // Avoid stealing focus from the input.
11597 onMouseDown(event) {
11598 event.preventDefault();
11599 },
11600 onClick(event) {
11601 if (disabled2 || readOnly) {
11602 return;
11603 }
11604 const keyboardActiveRef = store.state.keyboardActiveRef;
11605 store.state.setInputValue("", createChangeEventDetails(reason_parts_exports.clearPress, event.nativeEvent));
11606 if (selectionMode !== "none") {
11607 store.state.setSelectedValue(Array.isArray(selectedValue) ? [] : null, createChangeEventDetails(reason_parts_exports.clearPress, event.nativeEvent));
11608 store.state.setIndices({
11609 activeIndex: null,
11610 selectedIndex: null,
11611 type: keyboardActiveRef.current ? "keyboard" : "pointer"
11612 });
11613 } else {
11614 store.state.setIndices({
11615 activeIndex: null,
11616 type: keyboardActiveRef.current ? "keyboard" : "pointer"
11617 });
11618 }
11619 store.state.inputRef.current?.focus();
11620 }
11621 }, elementProps, getButtonProps],
11622 stateAttributesMapping
11623 });
11624 const shouldRender = keepMounted || mounted;
11625 if (!shouldRender) {
11626 return null;
11627 }
11628 return element;
11629 });
11630 if (true) ComboboxClear.displayName = "ComboboxClear";
11631
11632 // node_modules/@base-ui/react/esm/combobox/list/ComboboxList.js
11633 var React65 = __toESM(require_react(), 1);
11634
11635 // node_modules/@base-ui/react/esm/combobox/collection/ComboboxCollection.js
11636 var React64 = __toESM(require_react(), 1);
11637
11638 // node_modules/@base-ui/react/esm/combobox/collection/GroupCollectionContext.js
11639 var React63 = __toESM(require_react(), 1);
11640 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1);
11641 var GroupCollectionContext = /* @__PURE__ */ React63.createContext(null);
11642 if (true) GroupCollectionContext.displayName = "GroupCollectionContext";
11643 function useGroupCollectionContext() {
11644 return React63.useContext(GroupCollectionContext);
11645 }
11646 function GroupCollectionProvider(props) {
11647 const {
11648 children,
11649 items
11650 } = props;
11651 const contextValue = React63.useMemo(() => ({
11652 items
11653 }), [items]);
11654 return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(GroupCollectionContext.Provider, {
11655 value: contextValue,
11656 children
11657 });
11658 }
11659
11660 // node_modules/@base-ui/react/esm/combobox/collection/ComboboxCollection.js
11661 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1);
11662 function ComboboxCollection(props) {
11663 const {
11664 children
11665 } = props;
11666 const {
11667 filteredItems
11668 } = useComboboxDerivedItemsContext();
11669 const groupContext = useGroupCollectionContext();
11670 const itemsToRender = groupContext ? groupContext.items : filteredItems;
11671 if (!itemsToRender) {
11672 return null;
11673 }
11674 return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(React64.Fragment, {
11675 children: itemsToRender.map(children)
11676 });
11677 }
11678
11679 // node_modules/@base-ui/react/esm/combobox/list/ComboboxList.js
11680 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1);
11681 var ComboboxList = /* @__PURE__ */ React65.forwardRef(function ComboboxList2(componentProps, forwardedRef) {
11682 var _ComboboxCollection;
11683 const {
11684 render,
11685 className,
11686 style,
11687 children,
11688 ...elementProps
11689 } = componentProps;
11690 const store = useComboboxRootContext();
11691 const floatingRootContext = useComboboxFloatingContext();
11692 const hasPositionerContext = Boolean(useComboboxPositionerContext(true));
11693 const {
11694 filteredItems,
11695 hasItems
11696 } = useComboboxDerivedItemsContext();
11697 const selectionMode = useStore(store, selectors2.selectionMode);
11698 const grid = useStore(store, selectors2.grid);
11699 const popupProps = useStore(store, selectors2.popupProps);
11700 const virtualized = useStore(store, selectors2.virtualized);
11701 const multiple = selectionMode === "multiple";
11702 const empty = filteredItems.length === 0;
11703 const setPositionerElement = useStableCallback((element2) => {
11704 store.set("positionerElement", element2);
11705 });
11706 const setListElement = useStableCallback((element2) => {
11707 store.set("listElement", element2);
11708 });
11709 const resolvedChildren = React65.useMemo(() => {
11710 if (typeof children === "function") {
11711 return _ComboboxCollection || (_ComboboxCollection = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ComboboxCollection, {
11712 children
11713 }));
11714 }
11715 return children;
11716 }, [children]);
11717 const state = {
11718 empty
11719 };
11720 const floatingId = floatingRootContext.useState("floatingId");
11721 const element = useRenderElement("div", componentProps, {
11722 state,
11723 ref: [forwardedRef, setListElement, hasPositionerContext ? null : setPositionerElement],
11724 props: [popupProps, {
11725 children: resolvedChildren,
11726 tabIndex: -1,
11727 id: floatingId,
11728 role: grid ? "grid" : "listbox",
11729 "aria-multiselectable": multiple ? "true" : void 0,
11730 onKeyDown(event) {
11731 if (store.state.disabled || store.state.readOnly) {
11732 return;
11733 }
11734 if (event.key === "Enter") {
11735 const activeIndex = store.state.activeIndex;
11736 if (activeIndex == null) {
11737 return;
11738 }
11739 stopEvent(event);
11740 const nativeEvent = event.nativeEvent;
11741 const listItem = store.state.listRef.current[activeIndex];
11742 if (listItem) {
11743 store.state.selectionEventRef.current = nativeEvent;
11744 listItem.click();
11745 store.state.selectionEventRef.current = null;
11746 }
11747 }
11748 },
11749 onKeyDownCapture() {
11750 store.state.keyboardActiveRef.current = true;
11751 },
11752 onPointerMoveCapture() {
11753 store.state.keyboardActiveRef.current = false;
11754 }
11755 }, elementProps]
11756 });
11757 if (virtualized) {
11758 return element;
11759 }
11760 return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CompositeList, {
11761 elementsRef: store.state.listRef,
11762 labelsRef: hasItems ? void 0 : store.state.labelsRef,
11763 children: element
11764 });
11765 });
11766 if (true) ComboboxList.displayName = "ComboboxList";
11767
11768 // node_modules/@base-ui/react/esm/combobox/status/ComboboxStatus.js
11769 var React67 = __toESM(require_react(), 1);
11770
11771 // node_modules/@base-ui/react/esm/combobox/utils/useInitialLiveRegionTextMutation.js
11772 var React66 = __toESM(require_react(), 1);
11773 var LIVE_REGION_MARKER = "\u2060";
11774 var INITIAL_LIVE_REGION_TEXT_MUTATION_RESET_DELAY = 200;
11775 function findLastTextNode(root) {
11776 const walker = root.ownerDocument.createTreeWalker(root, NodeFilter.SHOW_TEXT);
11777 let lastTextNode = null;
11778 while (walker.nextNode()) {
11779 const textNode = walker.currentNode;
11780 if (textNode.nodeValue !== "") {
11781 lastTextNode = textNode;
11782 }
11783 }
11784 return lastTextNode;
11785 }
11786 function useInitialLiveRegionTextMutation() {
11787 const timeout = useTimeout();
11788 const rootRef = React66.useRef(null);
11789 React66.useEffect(() => {
11790 if (isIOS) {
11791 return void 0;
11792 }
11793 const root = rootRef.current;
11794 if (root == null) {
11795 return void 0;
11796 }
11797 const textNode = findLastTextNode(root);
11798 if (textNode == null) {
11799 return void 0;
11800 }
11801 const originalValue = textNode.nodeValue ?? "";
11802 const markedValue = `${originalValue}${LIVE_REGION_MARKER}`;
11803 textNode.nodeValue = markedValue;
11804 timeout.start(INITIAL_LIVE_REGION_TEXT_MUTATION_RESET_DELAY, () => {
11805 if (textNode.nodeValue === markedValue) {
11806 textNode.nodeValue = originalValue;
11807 }
11808 });
11809 return () => {
11810 timeout.clear();
11811 if (textNode.nodeValue === markedValue) {
11812 textNode.nodeValue = originalValue;
11813 }
11814 };
11815 }, [rootRef, timeout]);
11816 return rootRef;
11817 }
11818
11819 // node_modules/@base-ui/react/esm/combobox/status/ComboboxStatus.js
11820 var ComboboxStatus = /* @__PURE__ */ React67.forwardRef(function ComboboxStatus2(componentProps, forwardedRef) {
11821 const {
11822 render,
11823 className,
11824 style,
11825 children: childrenProp,
11826 ...elementProps
11827 } = componentProps;
11828 const statusRef = useInitialLiveRegionTextMutation();
11829 return useRenderElement("div", componentProps, {
11830 ref: [forwardedRef, statusRef],
11831 props: [{
11832 children: childrenProp,
11833 role: "status",
11834 "aria-live": "polite",
11835 "aria-atomic": true
11836 }, elementProps]
11837 });
11838 });
11839 if (true) ComboboxStatus.displayName = "ComboboxStatus";
11840
11841 // node_modules/@base-ui/react/esm/combobox/portal/ComboboxPortal.js
11842 var React69 = __toESM(require_react(), 1);
11843
11844 // node_modules/@base-ui/react/esm/combobox/portal/ComboboxPortalContext.js
11845 var React68 = __toESM(require_react(), 1);
11846 var ComboboxPortalContext = /* @__PURE__ */ React68.createContext(void 0);
11847 if (true) ComboboxPortalContext.displayName = "ComboboxPortalContext";
11848 function useComboboxPortalContext() {
11849 const context = React68.useContext(ComboboxPortalContext);
11850 if (context === void 0) {
11851 throw new Error(true ? "Base UI: <Combobox.Portal> is missing." : formatErrorMessage_default(20));
11852 }
11853 return context;
11854 }
11855
11856 // node_modules/@base-ui/react/esm/combobox/portal/ComboboxPortal.js
11857 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1);
11858 var ComboboxPortal = /* @__PURE__ */ React69.forwardRef(function ComboboxPortal2(props, forwardedRef) {
11859 const {
11860 keepMounted = false,
11861 ...portalProps
11862 } = props;
11863 const store = useComboboxRootContext();
11864 const mounted = useStore(store, selectors2.mounted);
11865 const forceMounted = useStore(store, selectors2.forceMounted);
11866 const shouldRender = mounted || keepMounted || forceMounted;
11867 if (!shouldRender) {
11868 return null;
11869 }
11870 return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ComboboxPortalContext.Provider, {
11871 value: keepMounted,
11872 children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(FloatingPortal, {
11873 ref: forwardedRef,
11874 ...portalProps
11875 })
11876 });
11877 });
11878 if (true) ComboboxPortal.displayName = "ComboboxPortal";
11879
11880 // node_modules/@base-ui/react/esm/combobox/backdrop/ComboboxBackdrop.js
11881 var React70 = __toESM(require_react(), 1);
11882 var stateAttributesMapping2 = {
11883 ...popupStateMapping,
11884 ...transitionStatusMapping
11885 };
11886 var ComboboxBackdrop = /* @__PURE__ */ React70.forwardRef(function ComboboxBackdrop2(componentProps, forwardedRef) {
11887 const {
11888 render,
11889 className,
11890 style,
11891 ...elementProps
11892 } = componentProps;
11893 const store = useComboboxRootContext();
11894 const open = useStore(store, selectors2.open);
11895 const mounted = useStore(store, selectors2.mounted);
11896 const transitionStatus = useStore(store, selectors2.transitionStatus);
11897 const state = {
11898 open,
11899 transitionStatus
11900 };
11901 return useRenderElement("div", componentProps, {
11902 state,
11903 ref: forwardedRef,
11904 stateAttributesMapping: stateAttributesMapping2,
11905 props: [{
11906 role: "presentation",
11907 hidden: !mounted,
11908 style: {
11909 userSelect: "none",
11910 WebkitUserSelect: "none"
11911 }
11912 }, elementProps]
11913 });
11914 });
11915 if (true) ComboboxBackdrop.displayName = "ComboboxBackdrop";
11916
11917 // node_modules/@base-ui/react/esm/combobox/positioner/ComboboxPositioner.js
11918 var React73 = __toESM(require_react(), 1);
11919
11920 // node_modules/@base-ui/react/esm/utils/useAnchorPositioning.js
11921 var React71 = __toESM(require_react(), 1);
11922
11923 // node_modules/@base-ui/react/esm/floating-ui-react/middleware/arrow.js
11924 var baseArrow = (options) => ({
11925 name: "arrow",
11926 options,
11927 async fn(state) {
11928 const {
11929 x,
11930 y,
11931 placement,
11932 rects,
11933 platform: platform3,
11934 elements,
11935 middlewareData
11936 } = state;
11937 const {
11938 element,
11939 padding = 0,
11940 offsetParent = "real"
11941 } = evaluate(options, state) || {};
11942 if (element == null) {
11943 return {};
11944 }
11945 const paddingObject = getPaddingObject(padding);
11946 const coords = {
11947 x,
11948 y
11949 };
11950 const axis = getAlignmentAxis(placement);
11951 const length = getAxisLength(axis);
11952 const arrowDimensions = await platform3.getDimensions(element);
11953 const isYAxis = axis === "y";
11954 const minProp = isYAxis ? "top" : "left";
11955 const maxProp = isYAxis ? "bottom" : "right";
11956 const clientProp = isYAxis ? "clientHeight" : "clientWidth";
11957 const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
11958 const startDiff = coords[axis] - rects.reference[axis];
11959 const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating;
11960 let clientSize = elements.floating[clientProp] || rects.floating[length];
11961 if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) {
11962 clientSize = elements.floating[clientProp] || rects.floating[length];
11963 }
11964 const centerToReference = endDiff / 2 - startDiff / 2;
11965 const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
11966 const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding);
11967 const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding);
11968 const min2 = minPadding;
11969 const max2 = clientSize - arrowDimensions[length] - maxPadding;
11970 const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
11971 const offset4 = clamp(min2, center, max2);
11972 const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min2 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
11973 const alignmentOffset = shouldAddOffset ? center < min2 ? center - min2 : center - max2 : 0;
11974 return {
11975 [axis]: coords[axis] + alignmentOffset,
11976 data: {
11977 [axis]: offset4,
11978 centerOffset: center - offset4 - alignmentOffset,
11979 ...shouldAddOffset && {
11980 alignmentOffset
11981 }
11982 },
11983 reset: shouldAddOffset
11984 };
11985 }
11986 });
11987 var arrow4 = (options, deps) => ({
11988 ...baseArrow(options),
11989 options: [options, deps]
11990 });
11991
11992 // node_modules/@base-ui/react/esm/utils/hideMiddleware.js
11993 var hide4 = {
11994 name: "hide",
11995 async fn(state) {
11996 const {
11997 width,
11998 height,
11999 x,
12000 y
12001 } = state.rects.reference;
12002 const anchorHidden = width === 0 && height === 0 && x === 0 && y === 0;
12003 const nativeHideResult = await hide3().fn(state);
12004 return {
12005 data: {
12006 referenceHidden: nativeHideResult.data?.referenceHidden || anchorHidden
12007 }
12008 };
12009 }
12010 };
12011
12012 // node_modules/@base-ui/react/esm/utils/adaptiveOriginMiddleware.js
12013 var DEFAULT_SIDES = {
12014 sideX: "left",
12015 sideY: "top"
12016 };
12017 var adaptiveOrigin = {
12018 name: "adaptiveOrigin",
12019 async fn(state) {
12020 const {
12021 x: rawX,
12022 y: rawY,
12023 rects: {
12024 floating: floatRect
12025 },
12026 elements: {
12027 floating
12028 },
12029 platform: platform3,
12030 strategy,
12031 placement
12032 } = state;
12033 const win = getWindow(floating);
12034 const styles = win.getComputedStyle(floating);
12035 const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== "";
12036 if (!hasTransition) {
12037 return {
12038 x: rawX,
12039 y: rawY,
12040 data: DEFAULT_SIDES
12041 };
12042 }
12043 const offsetParent = await platform3.getOffsetParent?.(floating);
12044 let offsetDimensions = {
12045 width: 0,
12046 height: 0
12047 };
12048 if (strategy === "fixed" && win?.visualViewport) {
12049 offsetDimensions = {
12050 width: win.visualViewport.width,
12051 height: win.visualViewport.height
12052 };
12053 } else if (offsetParent === win) {
12054 const doc = ownerDocument(floating);
12055 offsetDimensions = {
12056 width: doc.documentElement.clientWidth,
12057 height: doc.documentElement.clientHeight
12058 };
12059 } else if (await platform3.isElement?.(offsetParent)) {
12060 offsetDimensions = await platform3.getDimensions(offsetParent);
12061 }
12062 const currentSide = getSide(placement);
12063 let x = rawX;
12064 let y = rawY;
12065 if (currentSide === "left") {
12066 x = offsetDimensions.width - (rawX + floatRect.width);
12067 }
12068 if (currentSide === "top") {
12069 y = offsetDimensions.height - (rawY + floatRect.height);
12070 }
12071 const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX;
12072 const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY;
12073 return {
12074 x,
12075 y,
12076 data: {
12077 sideX,
12078 sideY
12079 }
12080 };
12081 }
12082 };
12083
12084 // node_modules/@base-ui/react/esm/utils/useAnchorPositioning.js
12085 function getLogicalSide(sideParam, renderedSide, isRtl) {
12086 const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end";
12087 const logicalRight = isRtl ? "inline-start" : "inline-end";
12088 const logicalLeft = isRtl ? "inline-end" : "inline-start";
12089 return {
12090 top: "top",
12091 right: isLogicalSideParam ? logicalRight : "right",
12092 bottom: "bottom",
12093 left: isLogicalSideParam ? logicalLeft : "left"
12094 }[renderedSide];
12095 }
12096 function getOffsetData(state, sideParam, isRtl) {
12097 const {
12098 rects,
12099 placement
12100 } = state;
12101 const data = {
12102 side: getLogicalSide(sideParam, getSide(placement), isRtl),
12103 align: getAlignment(placement) || "center",
12104 anchor: {
12105 width: rects.reference.width,
12106 height: rects.reference.height
12107 },
12108 positioner: {
12109 width: rects.floating.width,
12110 height: rects.floating.height
12111 }
12112 };
12113 return data;
12114 }
12115 function useAnchorPositioning(params) {
12116 const {
12117 // Public parameters
12118 anchor,
12119 positionMethod = "absolute",
12120 side: sideParam = "bottom",
12121 sideOffset = 0,
12122 align = "center",
12123 alignOffset = 0,
12124 collisionBoundary,
12125 collisionPadding: collisionPaddingParam = 5,
12126 sticky = false,
12127 arrowPadding = 5,
12128 disableAnchorTracking = false,
12129 inline: inlineMiddleware,
12130 // Private parameters
12131 keepMounted = false,
12132 floatingRootContext,
12133 mounted,
12134 collisionAvoidance,
12135 shiftCrossAxis = false,
12136 nodeId,
12137 adaptiveOrigin: adaptiveOrigin2,
12138 lazyFlip = false,
12139 externalTree
12140 } = params;
12141 const [mountSide, setMountSide] = React71.useState(null);
12142 if (!mounted && mountSide !== null) {
12143 setMountSide(null);
12144 }
12145 const collisionAvoidanceSide = collisionAvoidance.side || "flip";
12146 const collisionAvoidanceAlign = collisionAvoidance.align || "flip";
12147 const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end";
12148 const anchorFn = typeof anchor === "function" ? anchor : void 0;
12149 const anchorFnCallback = useStableCallback(anchorFn);
12150 const anchorDep = anchorFn ? anchorFnCallback : anchor;
12151 const anchorValueRef = useValueAsRef(anchor);
12152 const mountedRef = useValueAsRef(mounted);
12153 const direction = useDirection();
12154 const isRtl = direction === "rtl";
12155 const side = mountSide || {
12156 top: "top",
12157 right: "right",
12158 bottom: "bottom",
12159 left: "left",
12160 "inline-end": isRtl ? "left" : "right",
12161 "inline-start": isRtl ? "right" : "left"
12162 }[sideParam];
12163 const placement = align === "center" ? side : `${side}-${align}`;
12164 let collisionPadding = collisionPaddingParam;
12165 const bias = 1;
12166 const biasTop = sideParam === "bottom" ? bias : 0;
12167 const biasBottom = sideParam === "top" ? bias : 0;
12168 const biasLeft = sideParam === "right" ? bias : 0;
12169 const biasRight = sideParam === "left" ? bias : 0;
12170 if (typeof collisionPadding === "number") {
12171 collisionPadding = {
12172 top: collisionPadding + biasTop,
12173 right: collisionPadding + biasRight,
12174 bottom: collisionPadding + biasBottom,
12175 left: collisionPadding + biasLeft
12176 };
12177 } else if (collisionPadding) {
12178 collisionPadding = {
12179 top: (collisionPadding.top || 0) + biasTop,
12180 right: (collisionPadding.right || 0) + biasRight,
12181 bottom: (collisionPadding.bottom || 0) + biasBottom,
12182 left: (collisionPadding.left || 0) + biasLeft
12183 };
12184 }
12185 const commonCollisionProps = {
12186 boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary,
12187 padding: collisionPadding
12188 };
12189 const arrowRef = React71.useRef(null);
12190 const sideOffsetRef = useValueAsRef(sideOffset);
12191 const alignOffsetRef = useValueAsRef(alignOffset);
12192 const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0;
12193 const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0;
12194 const middleware = [];
12195 if (inlineMiddleware) {
12196 middleware.push(inlineMiddleware);
12197 }
12198 middleware.push(offset3((state) => {
12199 const data = getOffsetData(state, sideParam, isRtl);
12200 const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current;
12201 const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current;
12202 return {
12203 mainAxis: sideAxis,
12204 crossAxis: alignAxis,
12205 alignmentAxis: alignAxis
12206 };
12207 }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam]));
12208 const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift";
12209 const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift");
12210 const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({
12211 ...commonCollisionProps,
12212 // Ensure the popup flips if it's been limited by its --available-height and it resizes.
12213 // Since the size() padding is smaller than the flip() padding, flip() will take precedence.
12214 padding: {
12215 top: collisionPadding.top + bias,
12216 right: collisionPadding.right + bias,
12217 bottom: collisionPadding.bottom + bias,
12218 left: collisionPadding.left + bias
12219 },
12220 mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip",
12221 crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false,
12222 fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide
12223 });
12224 const shiftMiddleware = shiftDisabled ? null : shift3((data) => {
12225 const html = ownerDocument(data.elements.floating).documentElement;
12226 return {
12227 ...commonCollisionProps,
12228 // Use the Layout Viewport to avoid shifting around when pinch-zooming
12229 // for context menus.
12230 rootBoundary: shiftCrossAxis ? {
12231 x: 0,
12232 y: 0,
12233 width: html.clientWidth,
12234 height: html.clientHeight
12235 } : void 0,
12236 mainAxis: collisionAvoidanceAlign !== "none",
12237 crossAxis: crossAxisShiftEnabled,
12238 limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => {
12239 if (!arrowRef.current) {
12240 return {};
12241 }
12242 const {
12243 width,
12244 height
12245 } = arrowRef.current.getBoundingClientRect();
12246 const sideAxis = getSideAxis(getSide(limitData.placement));
12247 const arrowSize = sideAxis === "y" ? width : height;
12248 const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom;
12249 return {
12250 offset: arrowSize / 2 + offsetAmount / 2
12251 };
12252 })
12253 };
12254 }, [commonCollisionProps, sticky, shiftCrossAxis, collisionPadding, collisionAvoidanceAlign]);
12255 if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") {
12256 middleware.push(shiftMiddleware, flipMiddleware);
12257 } else {
12258 middleware.push(flipMiddleware, shiftMiddleware);
12259 }
12260 middleware.push(size3({
12261 ...commonCollisionProps,
12262 apply({
12263 elements: {
12264 floating
12265 },
12266 availableWidth,
12267 availableHeight,
12268 rects
12269 }) {
12270 if (!mountedRef.current) {
12271 return;
12272 }
12273 const floatingStyle = floating.style;
12274 floatingStyle.setProperty("--available-width", `${availableWidth}px`);
12275 floatingStyle.setProperty("--available-height", `${availableHeight}px`);
12276 const dpr = getWindow(floating).devicePixelRatio || 1;
12277 const {
12278 x: x2,
12279 y: y2,
12280 width,
12281 height
12282 } = rects.reference;
12283 const anchorWidth = (Math.round((x2 + width) * dpr) - Math.round(x2 * dpr)) / dpr;
12284 const anchorHeight = (Math.round((y2 + height) * dpr) - Math.round(y2 * dpr)) / dpr;
12285 floatingStyle.setProperty("--anchor-width", `${anchorWidth}px`);
12286 floatingStyle.setProperty("--anchor-height", `${anchorHeight}px`);
12287 }
12288 }), arrow4((state) => ({
12289 // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set,
12290 // we'll create a fake element.
12291 element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"),
12292 padding: arrowPadding,
12293 offsetParent: "floating"
12294 }), [arrowPadding]), {
12295 name: "transformOrigin",
12296 fn(state) {
12297 const {
12298 elements: elements2,
12299 middlewareData: middlewareData2,
12300 placement: renderedPlacement2,
12301 rects,
12302 y: y2
12303 } = state;
12304 const currentRenderedSide = getSide(renderedPlacement2);
12305 const currentRenderedAxis = getSideAxis(currentRenderedSide);
12306 const arrowEl = arrowRef.current;
12307 const arrowX = middlewareData2.arrow?.x || 0;
12308 const arrowY = middlewareData2.arrow?.y || 0;
12309 const arrowWidth = arrowEl?.clientWidth || 0;
12310 const arrowHeight = arrowEl?.clientHeight || 0;
12311 const transformX = arrowX + arrowWidth / 2;
12312 const transformY = arrowY + arrowHeight / 2;
12313 const shiftY = Math.abs(middlewareData2.shift?.y || 0);
12314 const halfAnchorHeight = rects.reference.height / 2;
12315 const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset;
12316 const isOverlappingAnchor = shiftY > sideOffsetValue;
12317 const adjacentTransformOrigin = {
12318 top: `${transformX}px calc(100% + ${sideOffsetValue}px)`,
12319 bottom: `${transformX}px ${-sideOffsetValue}px`,
12320 left: `calc(100% + ${sideOffsetValue}px) ${transformY}px`,
12321 right: `${-sideOffsetValue}px ${transformY}px`
12322 }[currentRenderedSide];
12323 const overlapTransformOrigin = `${transformX}px ${rects.reference.y + halfAnchorHeight - y2}px`;
12324 elements2.floating.style.setProperty("--transform-origin", crossAxisShiftEnabled && currentRenderedAxis === "y" && isOverlappingAnchor ? overlapTransformOrigin : adjacentTransformOrigin);
12325 return {};
12326 }
12327 }, hide4, adaptiveOrigin2);
12328 useIsoLayoutEffect(() => {
12329 if (!mounted && floatingRootContext) {
12330 floatingRootContext.update({
12331 referenceElement: null,
12332 floatingElement: null,
12333 domReferenceElement: null,
12334 positionReference: null
12335 });
12336 }
12337 }, [mounted, floatingRootContext]);
12338 const autoUpdateOptions = React71.useMemo(() => ({
12339 elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined",
12340 layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined"
12341 }), [disableAnchorTracking]);
12342 const {
12343 refs,
12344 elements,
12345 x,
12346 y,
12347 middlewareData,
12348 update: update2,
12349 placement: renderedPlacement,
12350 context,
12351 isPositioned,
12352 floatingStyles: originalFloatingStyles
12353 } = useFloating2({
12354 rootContext: floatingRootContext,
12355 open: keepMounted ? mounted : void 0,
12356 placement,
12357 middleware,
12358 strategy: positionMethod,
12359 whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions),
12360 nodeId,
12361 externalTree
12362 });
12363 const {
12364 sideX,
12365 sideY
12366 } = middlewareData.adaptiveOrigin || DEFAULT_SIDES;
12367 const resolvedPosition = isPositioned ? positionMethod : "fixed";
12368 const floatingStyles = React71.useMemo(() => {
12369 const base = adaptiveOrigin2 ? {
12370 position: resolvedPosition,
12371 [sideX]: x,
12372 [sideY]: y
12373 } : {
12374 position: resolvedPosition,
12375 ...originalFloatingStyles
12376 };
12377 if (!isPositioned) {
12378 base.opacity = 0;
12379 }
12380 return base;
12381 }, [adaptiveOrigin2, resolvedPosition, sideX, x, sideY, y, originalFloatingStyles, isPositioned]);
12382 const registeredPositionReferenceRef = React71.useRef(null);
12383 useIsoLayoutEffect(() => {
12384 if (!mounted) {
12385 return;
12386 }
12387 const anchorValue = anchorValueRef.current;
12388 const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue;
12389 const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null;
12390 const finalAnchor = unwrappedElement || null;
12391 if (finalAnchor !== registeredPositionReferenceRef.current) {
12392 refs.setPositionReference(finalAnchor);
12393 registeredPositionReferenceRef.current = finalAnchor;
12394 }
12395 }, [mounted, refs, anchorDep, anchorValueRef]);
12396 React71.useEffect(() => {
12397 if (!mounted) {
12398 return;
12399 }
12400 const anchorValue = anchorValueRef.current;
12401 if (typeof anchorValue === "function") {
12402 return;
12403 }
12404 if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) {
12405 refs.setPositionReference(anchorValue.current);
12406 registeredPositionReferenceRef.current = anchorValue.current;
12407 }
12408 }, [mounted, refs, anchorDep, anchorValueRef]);
12409 React71.useEffect(() => {
12410 if (keepMounted && mounted && elements.domReference && elements.floating) {
12411 return autoUpdate(elements.domReference, elements.floating, update2, autoUpdateOptions);
12412 }
12413 return void 0;
12414 }, [keepMounted, mounted, elements, update2, autoUpdateOptions]);
12415 const renderedSide = getSide(renderedPlacement);
12416 const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl);
12417 const renderedAlign = getAlignment(renderedPlacement) || "center";
12418 const anchorHidden = Boolean(middlewareData.hide?.referenceHidden);
12419 useIsoLayoutEffect(() => {
12420 if (lazyFlip && mounted && isPositioned) {
12421 setMountSide(renderedSide);
12422 }
12423 }, [lazyFlip, mounted, isPositioned, renderedSide]);
12424 const arrowStyles = React71.useMemo(() => ({
12425 position: "absolute",
12426 top: middlewareData.arrow?.y,
12427 left: middlewareData.arrow?.x
12428 }), [middlewareData.arrow]);
12429 const arrowUncentered = middlewareData.arrow?.centerOffset !== 0;
12430 return React71.useMemo(() => ({
12431 positionerStyles: floatingStyles,
12432 arrowStyles,
12433 arrowRef,
12434 arrowUncentered,
12435 side: logicalRenderedSide,
12436 align: renderedAlign,
12437 physicalSide: renderedSide,
12438 anchorHidden,
12439 refs,
12440 context,
12441 isPositioned,
12442 update: update2
12443 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden, refs, context, isPositioned, update2]);
12444 }
12445 function isRef(param) {
12446 return param != null && "current" in param;
12447 }
12448
12449 // node_modules/@base-ui/react/esm/utils/getDisabledMountTransitionStyles.js
12450 function getDisabledMountTransitionStyles(transitionStatus) {
12451 return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT;
12452 }
12453
12454 // node_modules/@base-ui/react/esm/utils/usePositioner.js
12455 function usePositioner(componentProps, state, {
12456 styles,
12457 transitionStatus,
12458 props,
12459 refs,
12460 hidden,
12461 inert = false
12462 }) {
12463 const style = {
12464 ...styles
12465 };
12466 if (inert) {
12467 style.pointerEvents = "none";
12468 }
12469 return useRenderElement("div", componentProps, {
12470 state,
12471 ref: refs,
12472 props: [{
12473 role: "presentation",
12474 hidden,
12475 style
12476 }, getDisabledMountTransitionStyles(transitionStatus), props],
12477 stateAttributesMapping: popupStateMapping
12478 });
12479 }
12480
12481 // node_modules/@base-ui/react/esm/utils/useAnchoredPopupScrollLock.js
12482 var React72 = __toESM(require_react(), 1);
12483 var VIEWPORT_WIDTH_TOLERANCE_PX = 20;
12484 function useAnchoredPopupScrollLock(enabled, touchOpen, positionerElement, referenceElement) {
12485 const [touchOpenShouldLockScroll, setTouchOpenShouldLockScroll] = React72.useState(false);
12486 useIsoLayoutEffect(() => {
12487 if (!enabled || !touchOpen || positionerElement == null) {
12488 setTouchOpenShouldLockScroll(false);
12489 return;
12490 }
12491 const viewportWidth = ownerDocument(positionerElement).documentElement.clientWidth;
12492 const popupWidth = positionerElement.offsetWidth;
12493 setTouchOpenShouldLockScroll(viewportWidth > 0 && popupWidth > 0 && popupWidth >= viewportWidth - VIEWPORT_WIDTH_TOLERANCE_PX);
12494 }, [enabled, touchOpen, positionerElement]);
12495 useScrollLock(enabled && (!touchOpen || touchOpenShouldLockScroll), referenceElement);
12496 }
12497
12498 // node_modules/@base-ui/react/esm/combobox/positioner/ComboboxPositioner.js
12499 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1);
12500 var ComboboxPositioner = /* @__PURE__ */ React73.forwardRef(function ComboboxPositioner2(componentProps, forwardedRef) {
12501 const {
12502 render,
12503 className,
12504 anchor,
12505 positionMethod = "absolute",
12506 side = "bottom",
12507 align = "center",
12508 sideOffset = 0,
12509 alignOffset = 0,
12510 collisionBoundary = "clipping-ancestors",
12511 collisionPadding = 5,
12512 arrowPadding = 5,
12513 sticky = false,
12514 disableAnchorTracking = false,
12515 collisionAvoidance = DROPDOWN_COLLISION_AVOIDANCE,
12516 style: styleProp,
12517 ...elementProps
12518 } = componentProps;
12519 const store = useComboboxRootContext();
12520 const {
12521 filteredItems
12522 } = useComboboxDerivedItemsContext();
12523 const floatingRootContext = useComboboxFloatingContext();
12524 const keepMounted = useComboboxPortalContext();
12525 const modal = useStore(store, selectors2.modal);
12526 const open = useStore(store, selectors2.open);
12527 const mounted = useStore(store, selectors2.mounted);
12528 const openMethod = useStore(store, selectors2.openMethod);
12529 const positionerElement = useStore(store, selectors2.positionerElement);
12530 const triggerElement = useStore(store, selectors2.triggerElement);
12531 const inputElement = useStore(store, selectors2.inputElement);
12532 const inputGroupElement = useStore(store, selectors2.inputGroupElement);
12533 const inputInsidePopup = useStore(store, selectors2.inputInsidePopup);
12534 const transitionStatus = useStore(store, selectors2.transitionStatus);
12535 const empty = filteredItems.length === 0;
12536 const resolvedAnchor = anchor ?? (inputInsidePopup ? triggerElement : inputGroupElement ?? inputElement);
12537 const positioning = useAnchorPositioning({
12538 anchor: resolvedAnchor,
12539 floatingRootContext,
12540 positionMethod,
12541 mounted,
12542 side,
12543 sideOffset,
12544 align,
12545 alignOffset,
12546 arrowPadding,
12547 collisionBoundary,
12548 collisionPadding,
12549 sticky,
12550 disableAnchorTracking,
12551 keepMounted,
12552 collisionAvoidance,
12553 lazyFlip: true
12554 });
12555 useAnchoredPopupScrollLock(open && modal, openMethod === "touch", positionerElement, triggerElement);
12556 const state = {
12557 open,
12558 side: positioning.side,
12559 align: positioning.align,
12560 anchorHidden: positioning.anchorHidden,
12561 empty
12562 };
12563 useIsoLayoutEffect(() => {
12564 store.set("popupSide", positioning.side);
12565 }, [store, positioning.side]);
12566 const setPositionerElement = useStableCallback((element2) => {
12567 store.set("positionerElement", element2);
12568 });
12569 const element = usePositioner(componentProps, state, {
12570 styles: positioning.positionerStyles,
12571 transitionStatus,
12572 props: elementProps,
12573 refs: [forwardedRef, setPositionerElement],
12574 hidden: !mounted,
12575 inert: !open
12576 });
12577 return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(ComboboxPositionerContext.Provider, {
12578 value: positioning,
12579 children: [mounted && modal && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(InternalBackdrop, {
12580 inert: inertValue(!open),
12581 cutout: inputGroupElement ?? inputElement ?? triggerElement
12582 }), element]
12583 });
12584 });
12585 if (true) ComboboxPositioner.displayName = "ComboboxPositioner";
12586
12587 // node_modules/@base-ui/react/esm/combobox/popup/ComboboxPopup.js
12588 var React74 = __toESM(require_react(), 1);
12589 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1);
12590 var stateAttributesMapping3 = {
12591 ...popupStateMapping,
12592 ...transitionStatusMapping
12593 };
12594 var ComboboxPopup = /* @__PURE__ */ React74.forwardRef(function ComboboxPopup2(componentProps, forwardedRef) {
12595 const {
12596 render,
12597 className,
12598 style,
12599 initialFocus,
12600 finalFocus,
12601 ...elementProps
12602 } = componentProps;
12603 const store = useComboboxRootContext();
12604 const positioning = useComboboxPositionerContext();
12605 const floatingRootContext = useComboboxFloatingContext();
12606 const {
12607 filteredItems
12608 } = useComboboxDerivedItemsContext();
12609 const mounted = useStore(store, selectors2.mounted);
12610 const open = useStore(store, selectors2.open);
12611 const openMethod = useStore(store, selectors2.openMethod);
12612 const transitionStatus = useStore(store, selectors2.transitionStatus);
12613 const inputInsidePopup = useStore(store, selectors2.inputInsidePopup);
12614 const inputElement = useStore(store, selectors2.inputElement);
12615 const modal = useStore(store, selectors2.modal);
12616 const empty = filteredItems.length === 0;
12617 useOpenChangeComplete({
12618 open,
12619 ref: store.state.popupRef,
12620 onComplete() {
12621 if (open) {
12622 store.state.onOpenChangeComplete(true);
12623 }
12624 }
12625 });
12626 const state = {
12627 open,
12628 side: positioning.side,
12629 align: positioning.align,
12630 anchorHidden: positioning.anchorHidden,
12631 transitionStatus,
12632 empty
12633 };
12634 const element = useRenderElement("div", componentProps, {
12635 state,
12636 ref: [forwardedRef, store.state.popupRef],
12637 props: [{
12638 role: inputInsidePopup ? "dialog" : "presentation",
12639 tabIndex: -1,
12640 onFocus(event) {
12641 const target = getTarget(event.nativeEvent);
12642 if (openMethod !== "touch" && (contains(store.state.listElement, target) || target === event.currentTarget)) {
12643 store.state.inputRef.current?.focus();
12644 }
12645 }
12646 }, getDisabledMountTransitionStyles(transitionStatus), elementProps],
12647 stateAttributesMapping: stateAttributesMapping3
12648 });
12649 const computedDefaultInitialFocus = inputInsidePopup ? (interactionType) => interactionType === "touch" ? store.state.popupRef.current : inputElement : false;
12650 const resolvedInitialFocus = initialFocus === void 0 ? computedDefaultInitialFocus : initialFocus;
12651 let resolvedFinalFocus;
12652 if (finalFocus != null) {
12653 resolvedFinalFocus = finalFocus;
12654 } else {
12655 resolvedFinalFocus = inputInsidePopup ? void 0 : false;
12656 }
12657 const focusManagerModal = !inputInsidePopup || modal;
12658 return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(FloatingFocusManager, {
12659 context: floatingRootContext,
12660 disabled: !mounted,
12661 modal: focusManagerModal,
12662 openInteractionType: openMethod,
12663 initialFocus: resolvedInitialFocus,
12664 returnFocus: resolvedFinalFocus,
12665 getInsideElements: () => [store.state.startDismissRef.current, store.state.endDismissRef.current],
12666 children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(React74.Fragment, {
12667 children: [element, focusManagerModal && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ComboboxInternalDismissButton, {
12668 ref: store.state.endDismissRef
12669 })]
12670 })
12671 });
12672 });
12673 if (true) ComboboxPopup.displayName = "ComboboxPopup";
12674
12675 // node_modules/@base-ui/react/esm/combobox/arrow/ComboboxArrow.js
12676 var React75 = __toESM(require_react(), 1);
12677 var ComboboxArrow = /* @__PURE__ */ React75.forwardRef(function ComboboxArrow2(componentProps, forwardedRef) {
12678 const {
12679 render,
12680 className,
12681 style,
12682 ...elementProps
12683 } = componentProps;
12684 const store = useComboboxRootContext();
12685 const {
12686 arrowRef,
12687 side,
12688 align,
12689 arrowUncentered,
12690 arrowStyles
12691 } = useComboboxPositionerContext();
12692 const open = useStore(store, selectors2.open);
12693 const state = {
12694 open,
12695 side,
12696 align,
12697 uncentered: arrowUncentered
12698 };
12699 return useRenderElement("div", componentProps, {
12700 ref: [arrowRef, forwardedRef],
12701 stateAttributesMapping: popupStateMapping,
12702 state,
12703 props: {
12704 style: arrowStyles,
12705 "aria-hidden": true,
12706 ...elementProps
12707 }
12708 });
12709 });
12710 if (true) ComboboxArrow.displayName = "ComboboxArrow";
12711
12712 // node_modules/@base-ui/react/esm/combobox/group/ComboboxGroup.js
12713 var React77 = __toESM(require_react(), 1);
12714
12715 // node_modules/@base-ui/react/esm/combobox/group/ComboboxGroupContext.js
12716 var React76 = __toESM(require_react(), 1);
12717 var ComboboxGroupContext = /* @__PURE__ */ React76.createContext(void 0);
12718 if (true) ComboboxGroupContext.displayName = "ComboboxGroupContext";
12719 function useComboboxGroupContext() {
12720 const context = React76.useContext(ComboboxGroupContext);
12721 if (context === void 0) {
12722 throw new Error(true ? "Base UI: ComboboxGroupContext is missing. ComboboxGroup parts must be placed within <Combobox.Group>." : formatErrorMessage_default(18));
12723 }
12724 return context;
12725 }
12726
12727 // node_modules/@base-ui/react/esm/combobox/group/ComboboxGroup.js
12728 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1);
12729 var ComboboxGroup = /* @__PURE__ */ React77.forwardRef(function ComboboxGroup2(componentProps, forwardedRef) {
12730 const {
12731 render,
12732 className,
12733 style,
12734 items,
12735 ...elementProps
12736 } = componentProps;
12737 const [labelId, setLabelId] = React77.useState();
12738 const contextValue = React77.useMemo(() => ({
12739 labelId,
12740 setLabelId,
12741 items
12742 }), [labelId, setLabelId, items]);
12743 const element = useRenderElement("div", componentProps, {
12744 ref: forwardedRef,
12745 props: [{
12746 role: "group",
12747 "aria-labelledby": labelId
12748 }, elementProps]
12749 });
12750 const wrappedElement = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ComboboxGroupContext.Provider, {
12751 value: contextValue,
12752 children: element
12753 });
12754 if (items) {
12755 return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(GroupCollectionProvider, {
12756 items,
12757 children: wrappedElement
12758 });
12759 }
12760 return wrappedElement;
12761 });
12762 if (true) ComboboxGroup.displayName = "ComboboxGroup";
12763
12764 // node_modules/@base-ui/react/esm/combobox/group-label/ComboboxGroupLabel.js
12765 var React78 = __toESM(require_react(), 1);
12766 var ComboboxGroupLabel = /* @__PURE__ */ React78.forwardRef(function ComboboxGroupLabel2(componentProps, forwardedRef) {
12767 const {
12768 render,
12769 className,
12770 style,
12771 id: idProp,
12772 ...elementProps
12773 } = componentProps;
12774 const {
12775 setLabelId
12776 } = useComboboxGroupContext();
12777 const id = useBaseUiId(idProp);
12778 useIsoLayoutEffect(() => {
12779 setLabelId(id);
12780 return () => {
12781 setLabelId(void 0);
12782 };
12783 }, [id, setLabelId]);
12784 const element = useRenderElement("div", componentProps, {
12785 ref: forwardedRef,
12786 props: [{
12787 id
12788 }, elementProps]
12789 });
12790 return element;
12791 });
12792 if (true) ComboboxGroupLabel.displayName = "ComboboxGroupLabel";
12793
12794 // node_modules/@base-ui/react/esm/combobox/item/ComboboxItem.js
12795 var React81 = __toESM(require_react(), 1);
12796 var ReactDOM5 = __toESM(require_react_dom(), 1);
12797
12798 // node_modules/@base-ui/react/esm/combobox/item/ComboboxItemContext.js
12799 var React79 = __toESM(require_react(), 1);
12800 var ComboboxItemContext = /* @__PURE__ */ React79.createContext(void 0);
12801 if (true) ComboboxItemContext.displayName = "ComboboxItemContext";
12802
12803 // node_modules/@base-ui/react/esm/combobox/row/ComboboxRowContext.js
12804 var React80 = __toESM(require_react(), 1);
12805 var ComboboxRowContext = /* @__PURE__ */ React80.createContext(false);
12806 if (true) ComboboxRowContext.displayName = "ComboboxRowContext";
12807 function useComboboxRowContext() {
12808 return React80.useContext(ComboboxRowContext);
12809 }
12810
12811 // node_modules/@base-ui/react/esm/combobox/item/ComboboxItem.js
12812 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1);
12813 var ComboboxItem = /* @__PURE__ */ React81.memo(/* @__PURE__ */ React81.forwardRef(function ComboboxItem2(componentProps, forwardedRef) {
12814 const {
12815 render,
12816 className,
12817 style,
12818 value: itemValue = null,
12819 index: indexProp,
12820 disabled: disabled2 = false,
12821 nativeButton = false,
12822 ...elementProps
12823 } = componentProps;
12824 const didPointerDownRef = React81.useRef(false);
12825 const textRef = React81.useRef(null);
12826 const listItem = useCompositeListItem({
12827 index: indexProp,
12828 textRef,
12829 indexGuessBehavior: IndexGuessBehavior.GuessFromOrder
12830 });
12831 const store = useComboboxRootContext();
12832 const isRow = useComboboxRowContext();
12833 const {
12834 flatFilteredItems,
12835 hasItems
12836 } = useComboboxDerivedItemsContext();
12837 const open = useStore(store, selectors2.open);
12838 const selectionMode = useStore(store, selectors2.selectionMode);
12839 const readOnly = useStore(store, selectors2.readOnly);
12840 const virtualized = useStore(store, selectors2.virtualized);
12841 const isItemEqualToValue = useStore(store, selectors2.isItemEqualToValue);
12842 const selectable = selectionMode !== "none";
12843 const index2 = indexProp ?? (virtualized ? findItemIndex(flatFilteredItems, itemValue, isItemEqualToValue) : listItem.index);
12844 const hasRegistered = listItem.index !== -1;
12845 const rootId = useStore(store, selectors2.id);
12846 const highlighted = useStore(store, selectors2.isActive, index2);
12847 const matchesSelectedValue = useStore(store, selectors2.isSelected, itemValue);
12848 const itemProps = useStore(store, selectors2.itemProps);
12849 const itemRef = React81.useRef(null);
12850 const id = rootId != null && hasRegistered ? `${rootId}-${index2}` : void 0;
12851 const selected = matchesSelectedValue && selectable;
12852 useIsoLayoutEffect(() => {
12853 const shouldRun = hasRegistered && (virtualized || indexProp != null);
12854 if (!shouldRun) {
12855 return void 0;
12856 }
12857 const list = store.state.listRef.current;
12858 list[index2] = itemRef.current;
12859 return () => {
12860 delete list[index2];
12861 };
12862 }, [hasRegistered, virtualized, index2, indexProp, store]);
12863 useIsoLayoutEffect(() => {
12864 if (!hasRegistered || hasItems) {
12865 return void 0;
12866 }
12867 const visibleMap = store.state.valuesRef.current;
12868 visibleMap[index2] = itemValue;
12869 if (selectionMode !== "none") {
12870 store.state.allValuesRef.current.push(itemValue);
12871 }
12872 return () => {
12873 delete visibleMap[index2];
12874 };
12875 }, [hasRegistered, hasItems, index2, itemValue, store, selectionMode]);
12876 useIsoLayoutEffect(() => {
12877 if (!open) {
12878 didPointerDownRef.current = false;
12879 return;
12880 }
12881 if (!hasRegistered || hasItems) {
12882 return;
12883 }
12884 const selectedValue = store.state.selectedValue;
12885 const lastSelectedValue = Array.isArray(selectedValue) ? selectedValue[selectedValue.length - 1] : selectedValue;
12886 if (compareItemEquality(itemValue, lastSelectedValue, isItemEqualToValue)) {
12887 store.set("selectedIndex", index2);
12888 }
12889 }, [hasRegistered, hasItems, open, store, index2, itemValue, isItemEqualToValue]);
12890 const {
12891 getButtonProps,
12892 buttonRef
12893 } = useButton({
12894 disabled: disabled2,
12895 focusableWhenDisabled: true,
12896 native: nativeButton,
12897 composite: true
12898 });
12899 const state = {
12900 disabled: disabled2,
12901 selected,
12902 highlighted
12903 };
12904 function commitSelection(nativeEvent) {
12905 function selectItem() {
12906 store.state.handleSelection(nativeEvent, itemValue);
12907 }
12908 if (store.state.submitOnItemClick) {
12909 ReactDOM5.flushSync(selectItem);
12910 store.state.requestSubmit();
12911 } else {
12912 selectItem();
12913 }
12914 }
12915 const defaultProps = {
12916 id,
12917 role: isRow ? "gridcell" : "option",
12918 "aria-selected": selectable ? selected : void 0,
12919 // Focusable items steal focus from the input upon mouseup.
12920 // Warn if the user renders a natively focusable element like `<button>`,
12921 // as it should be a `<div>` instead.
12922 tabIndex: void 0,
12923 onPointerDownCapture(event) {
12924 didPointerDownRef.current = true;
12925 event.preventDefault();
12926 },
12927 onMouseDown(event) {
12928 event.preventDefault();
12929 },
12930 onClick(event) {
12931 if (disabled2 || readOnly) {
12932 return;
12933 }
12934 commitSelection(event.nativeEvent);
12935 },
12936 onMouseUp(event) {
12937 const pointerStartedOnItem = didPointerDownRef.current;
12938 didPointerDownRef.current = false;
12939 if (disabled2 || readOnly || event.button !== 0 || pointerStartedOnItem || !highlighted) {
12940 return;
12941 }
12942 commitSelection(event.nativeEvent);
12943 }
12944 };
12945 const element = useRenderElement("div", componentProps, {
12946 ref: [buttonRef, forwardedRef, listItem.ref, itemRef],
12947 state,
12948 props: [itemProps, defaultProps, elementProps, getButtonProps]
12949 });
12950 const contextValue = React81.useMemo(() => ({
12951 selected,
12952 textRef
12953 }), [selected, textRef]);
12954 return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ComboboxItemContext.Provider, {
12955 value: contextValue,
12956 children: element
12957 });
12958 }));
12959 if (true) ComboboxItem.displayName = "ComboboxItem";
12960
12961 // node_modules/@base-ui/react/esm/autocomplete/item/AutocompleteItem.js
12962 var AutocompleteItem = ComboboxItem;
12963
12964 // node_modules/@base-ui/react/esm/combobox/row/ComboboxRow.js
12965 var React82 = __toESM(require_react(), 1);
12966 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1);
12967 var ComboboxRow = /* @__PURE__ */ React82.forwardRef(function ComboboxRow2(componentProps, forwardedRef) {
12968 const {
12969 render,
12970 className,
12971 style,
12972 ...elementProps
12973 } = componentProps;
12974 const element = useRenderElement("div", componentProps, {
12975 ref: forwardedRef,
12976 props: [{
12977 role: "row"
12978 }, elementProps]
12979 });
12980 return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ComboboxRowContext.Provider, {
12981 value: true,
12982 children: element
12983 });
12984 });
12985 if (true) ComboboxRow.displayName = "ComboboxRow";
12986
12987 // node_modules/@base-ui/react/esm/combobox/empty/ComboboxEmpty.js
12988 var React83 = __toESM(require_react(), 1);
12989 var ComboboxEmpty = /* @__PURE__ */ React83.forwardRef(function ComboboxEmpty2(componentProps, forwardedRef) {
12990 const {
12991 render,
12992 className,
12993 style,
12994 children: childrenProp,
12995 ...elementProps
12996 } = componentProps;
12997 const {
12998 filteredItems
12999 } = useComboboxDerivedItemsContext();
13000 const store = useComboboxRootContext();
13001 const emptyRef = useInitialLiveRegionTextMutation();
13002 const children = filteredItems.length === 0 ? childrenProp : null;
13003 return useRenderElement("div", componentProps, {
13004 ref: [forwardedRef, store.state.emptyRef, emptyRef],
13005 props: [{
13006 children,
13007 role: "status",
13008 "aria-live": "polite",
13009 "aria-atomic": true
13010 }, elementProps]
13011 });
13012 });
13013 if (true) ComboboxEmpty.displayName = "ComboboxEmpty";
13014
13015 // node_modules/@base-ui/react/esm/separator/Separator.js
13016 var React84 = __toESM(require_react(), 1);
13017 var Separator = /* @__PURE__ */ React84.forwardRef(function SeparatorComponent(componentProps, forwardedRef) {
13018 const {
13019 className,
13020 render,
13021 orientation = "horizontal",
13022 style,
13023 ...elementProps
13024 } = componentProps;
13025 const state = {
13026 orientation
13027 };
13028 const element = useRenderElement("div", componentProps, {
13029 state,
13030 ref: forwardedRef,
13031 props: [{
13032 role: "separator",
13033 "aria-orientation": orientation
13034 }, elementProps]
13035 });
13036 return element;
13037 });
13038 if (true) Separator.displayName = "Separator";
13039
13040 // node_modules/@base-ui/react/esm/combobox/root/utils/useFilteredItems.js
13041 function useFilteredItems() {
13042 const items = useComboboxDerivedItemsContext();
13043 return items.filteredItems;
13044 }
13045
13046 // node_modules/@base-ui/react/esm/button/Button.js
13047 var React85 = __toESM(require_react(), 1);
13048 var Button = /* @__PURE__ */ React85.forwardRef(function Button2(componentProps, forwardedRef) {
13049 const {
13050 render,
13051 className,
13052 disabled: disabled2 = false,
13053 focusableWhenDisabled = false,
13054 nativeButton = true,
13055 style,
13056 ...elementProps
13057 } = componentProps;
13058 const {
13059 getButtonProps,
13060 buttonRef
13061 } = useButton({
13062 disabled: disabled2,
13063 focusableWhenDisabled,
13064 native: nativeButton
13065 });
13066 const state = {
13067 disabled: disabled2
13068 };
13069 return useRenderElement("button", componentProps, {
13070 state,
13071 ref: [forwardedRef, buttonRef],
13072 props: [elementProps, getButtonProps]
13073 });
13074 });
13075 if (true) Button.displayName = "Button";
13076
13077 // node_modules/@base-ui/react/esm/field/item/FieldItemContext.js
13078 var React86 = __toESM(require_react(), 1);
13079 var FieldItemContext = /* @__PURE__ */ React86.createContext({
13080 disabled: false
13081 });
13082 if (true) FieldItemContext.displayName = "FieldItemContext";
13083
13084 // node_modules/@base-ui/react/esm/checkbox-group/CheckboxGroupContext.js
13085 var React87 = __toESM(require_react(), 1);
13086 var CheckboxGroupContext = /* @__PURE__ */ React87.createContext(void 0);
13087 if (true) CheckboxGroupContext.displayName = "CheckboxGroupContext";
13088 function useCheckboxGroupContext(optional = true) {
13089 const context = React87.useContext(CheckboxGroupContext);
13090 if (context === void 0 && !optional) {
13091 throw new Error(true ? "Base UI: CheckboxGroupContext is missing. CheckboxGroup parts must be placed within <CheckboxGroup>." : formatErrorMessage_default(3));
13092 }
13093 return context;
13094 }
13095
13096 // node_modules/@base-ui/react/esm/utils/useRegisteredLabelId.js
13097 function useRegisteredLabelId(idProp, setLabelId) {
13098 const id = useBaseUiId(idProp);
13099 useIsoLayoutEffect(() => {
13100 setLabelId(id);
13101 return () => {
13102 setLabelId(void 0);
13103 };
13104 }, [id, setLabelId]);
13105 return id;
13106 }
13107
13108 // node_modules/@base-ui/react/esm/internals/labelable-provider/useLabel.js
13109 function useLabel(params = {}) {
13110 const {
13111 id: idProp,
13112 fallbackControlId,
13113 native = false,
13114 setLabelId: setLabelIdProp,
13115 focusControl: focusControlProp
13116 } = params;
13117 const {
13118 controlId: contextControlId,
13119 setLabelId: setContextLabelId
13120 } = useLabelableContext();
13121 const syncLabelId = useStableCallback((nextLabelId) => {
13122 setContextLabelId(nextLabelId);
13123 setLabelIdProp?.(nextLabelId);
13124 });
13125 const id = useRegisteredLabelId(idProp, syncLabelId);
13126 const resolvedControlId = contextControlId ?? fallbackControlId;
13127 function focusControl(event) {
13128 if (focusControlProp) {
13129 focusControlProp(event, resolvedControlId);
13130 return;
13131 }
13132 if (!resolvedControlId) {
13133 return;
13134 }
13135 const controlElement = ownerDocument(event.currentTarget).getElementById(resolvedControlId);
13136 if (isHTMLElement(controlElement)) {
13137 focusElementWithVisible(controlElement);
13138 }
13139 }
13140 function handleInteraction(event) {
13141 const target = getTarget(event.nativeEvent);
13142 if (target?.closest("button,input,select,textarea")) {
13143 return;
13144 }
13145 if (!event.defaultPrevented && event.detail > 1) {
13146 event.preventDefault();
13147 }
13148 if (native) {
13149 return;
13150 }
13151 focusControl(event);
13152 }
13153 return native ? {
13154 id,
13155 htmlFor: resolvedControlId ?? void 0,
13156 onMouseDown: handleInteraction
13157 } : {
13158 id,
13159 onClick: handleInteraction,
13160 onPointerDown(event) {
13161 event.preventDefault();
13162 }
13163 };
13164 }
13165 function focusElementWithVisible(element) {
13166 element.focus({
13167 // Available from Chrome 144+ (January 2026).
13168 // Safari and Firefox already support it.
13169 focusVisible: true
13170 });
13171 }
13172
13173 // node_modules/@base-ui/react/esm/utils/usePopupViewport.js
13174 var React90 = __toESM(require_react(), 1);
13175 var ReactDOM6 = __toESM(require_react_dom(), 1);
13176
13177 // node_modules/@base-ui/utils/esm/usePreviousValue.js
13178 var React88 = __toESM(require_react(), 1);
13179 function usePreviousValue(value) {
13180 const [state, setState] = React88.useState({
13181 current: value,
13182 previous: null
13183 });
13184 if (value !== state.current) {
13185 setState({
13186 current: value,
13187 previous: state.current
13188 });
13189 }
13190 return state.previous;
13191 }
13192
13193 // node_modules/@base-ui/react/esm/utils/usePopupAutoResize.js
13194 var React89 = __toESM(require_react(), 1);
13195
13196 // node_modules/@base-ui/react/esm/utils/getCssDimensions.js
13197 function getCssDimensions2(element) {
13198 const css = getComputedStyle2(element);
13199 let width = parseFloat(css.width) || 0;
13200 let height = parseFloat(css.height) || 0;
13201 const hasOffset = isHTMLElement(element);
13202 const offsetWidth = hasOffset ? element.offsetWidth : width;
13203 const offsetHeight = hasOffset ? element.offsetHeight : height;
13204 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
13205 if (shouldFallback) {
13206 width = offsetWidth;
13207 height = offsetHeight;
13208 }
13209 return {
13210 width,
13211 height
13212 };
13213 }
13214
13215 // node_modules/@base-ui/react/esm/utils/usePopupAutoResize.js
13216 var DEFAULT_ENABLED = () => true;
13217 function usePopupAutoResize(parameters) {
13218 const {
13219 popupElement,
13220 positionerElement,
13221 content,
13222 mounted,
13223 enabled = DEFAULT_ENABLED,
13224 onMeasureLayout: onMeasureLayoutParam,
13225 onMeasureLayoutComplete: onMeasureLayoutCompleteParam,
13226 side,
13227 direction
13228 } = parameters;
13229 const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true, false);
13230 const animationFrame = useAnimationFrame();
13231 const committedDimensionsRef = React89.useRef(null);
13232 const liveDimensionsRef = React89.useRef(null);
13233 const isInitialRenderRef = React89.useRef(true);
13234 const restoreAnchoringStylesRef = React89.useRef(NOOP);
13235 const onMeasureLayout = useStableCallback(onMeasureLayoutParam);
13236 const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam);
13237 const anchoringStyles = React89.useMemo(() => {
13238 let isOriginSide = side === "top";
13239 let isPhysicalLeft = side === "left";
13240 if (direction === "rtl") {
13241 isOriginSide = isOriginSide || side === "inline-end";
13242 isPhysicalLeft = isPhysicalLeft || side === "inline-end";
13243 } else {
13244 isOriginSide = isOriginSide || side === "inline-start";
13245 isPhysicalLeft = isPhysicalLeft || side === "inline-start";
13246 }
13247 return isOriginSide ? {
13248 position: "absolute",
13249 [side === "top" ? "bottom" : "top"]: "0",
13250 [isPhysicalLeft ? "right" : "left"]: "0"
13251 } : EMPTY_OBJECT;
13252 }, [side, direction]);
13253 useIsoLayoutEffect(() => {
13254 if (!mounted || !enabled() || typeof ResizeObserver !== "function") {
13255 restoreAnchoringStylesRef.current = NOOP;
13256 isInitialRenderRef.current = true;
13257 committedDimensionsRef.current = null;
13258 liveDimensionsRef.current = null;
13259 return void 0;
13260 }
13261 if (!popupElement || !positionerElement) {
13262 return void 0;
13263 }
13264 restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles);
13265 const observer = new ResizeObserver((entries) => {
13266 const entry = entries[0];
13267 if (entry) {
13268 liveDimensionsRef.current = {
13269 width: Math.ceil(entry.borderBoxSize[0].inlineSize),
13270 height: Math.ceil(entry.borderBoxSize[0].blockSize)
13271 };
13272 }
13273 });
13274 observer.observe(popupElement);
13275 setPopupCssSize(popupElement, "auto");
13276 const restorePopupPosition = overrideElementStyle(popupElement, "position", "static");
13277 const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none");
13278 const restorePopupScale = overrideElementStyle(popupElement, "scale", "1");
13279 const restorePositionerAvailableSize = applyElementStyles(positionerElement, {
13280 "--available-width": "max-content",
13281 "--available-height": "max-content"
13282 });
13283 function restoreMeasurementOverrides() {
13284 restorePopupPosition();
13285 restorePopupTransform();
13286 restorePositionerAvailableSize();
13287 }
13288 function restoreMeasurementOverridesIncludingScale() {
13289 restoreMeasurementOverrides();
13290 restorePopupScale();
13291 }
13292 onMeasureLayout?.();
13293 if (isInitialRenderRef.current || committedDimensionsRef.current === null) {
13294 setPositionerCssSize(positionerElement, "max-content");
13295 const dimensions = getCssDimensions2(popupElement);
13296 committedDimensionsRef.current = dimensions;
13297 setPositionerCssSize(positionerElement, dimensions);
13298 restoreMeasurementOverridesIncludingScale();
13299 onMeasureLayoutComplete?.(null, dimensions);
13300 isInitialRenderRef.current = false;
13301 return () => {
13302 observer.disconnect();
13303 restoreAnchoringStylesRef.current();
13304 restoreAnchoringStylesRef.current = NOOP;
13305 };
13306 }
13307 setPopupCssSize(popupElement, "auto");
13308 setPositionerCssSize(positionerElement, "max-content");
13309 const previousDimensions = committedDimensionsRef.current ?? liveDimensionsRef.current;
13310 const newDimensions = getCssDimensions2(popupElement);
13311 committedDimensionsRef.current = newDimensions;
13312 if (!previousDimensions) {
13313 setPositionerCssSize(positionerElement, newDimensions);
13314 restoreMeasurementOverridesIncludingScale();
13315 onMeasureLayoutComplete?.(null, newDimensions);
13316 return () => {
13317 observer.disconnect();
13318 animationFrame.cancel();
13319 restoreAnchoringStylesRef.current();
13320 restoreAnchoringStylesRef.current = NOOP;
13321 };
13322 }
13323 setPopupCssSize(popupElement, previousDimensions);
13324 restoreMeasurementOverridesIncludingScale();
13325 onMeasureLayoutComplete?.(previousDimensions, newDimensions);
13326 setPositionerCssSize(positionerElement, newDimensions);
13327 const abortController = new AbortController();
13328 animationFrame.request(() => {
13329 setPopupCssSize(popupElement, newDimensions);
13330 runOnceAnimationsFinish(() => {
13331 popupElement.style.setProperty("--popup-width", "auto");
13332 popupElement.style.setProperty("--popup-height", "auto");
13333 }, abortController.signal);
13334 });
13335 return () => {
13336 observer.disconnect();
13337 abortController.abort();
13338 animationFrame.cancel();
13339 restoreAnchoringStylesRef.current();
13340 restoreAnchoringStylesRef.current = NOOP;
13341 };
13342 }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, enabled, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]);
13343 }
13344 function overrideElementStyle(element, property, value) {
13345 const originalValue = element.style.getPropertyValue(property);
13346 element.style.setProperty(property, value);
13347 return () => {
13348 element.style.setProperty(property, originalValue);
13349 };
13350 }
13351 function applyElementStyles(element, styles) {
13352 const restorers = [];
13353 for (const [key, value] of Object.entries(styles)) {
13354 restorers.push(overrideElementStyle(element, key, value));
13355 }
13356 return restorers.length ? () => {
13357 restorers.forEach((restore) => restore());
13358 } : NOOP;
13359 }
13360 function setPopupCssSize(popupElement, size4) {
13361 const width = size4 === "auto" ? "auto" : `${size4.width}px`;
13362 const height = size4 === "auto" ? "auto" : `${size4.height}px`;
13363 popupElement.style.setProperty("--popup-width", width);
13364 popupElement.style.setProperty("--popup-height", height);
13365 }
13366 function setPositionerCssSize(positionerElement, size4) {
13367 const width = size4 === "max-content" ? "max-content" : `${size4.width}px`;
13368 const height = size4 === "max-content" ? "max-content" : `${size4.height}px`;
13369 positionerElement.style.setProperty("--positioner-width", width);
13370 positionerElement.style.setProperty("--positioner-height", height);
13371 }
13372
13373 // node_modules/@base-ui/react/esm/utils/usePopupViewport.js
13374 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1);
13375 function usePopupViewport(parameters) {
13376 const {
13377 store,
13378 side,
13379 cssVars,
13380 children
13381 } = parameters;
13382 const direction = useDirection();
13383 const activeTrigger = store.useState("activeTriggerElement");
13384 const activeTriggerId = store.useState("activeTriggerId");
13385 const open = store.useState("open");
13386 const payload = store.useState("payload");
13387 const mounted = store.useState("mounted");
13388 const popupElement = store.useState("popupElement");
13389 const positionerElement = store.useState("positionerElement");
13390 const previousActiveTrigger = usePreviousValue(open ? activeTrigger : null);
13391 const currentContentKey = usePopupContentKey(activeTriggerId, payload);
13392 const capturedNodeRef = React90.useRef(null);
13393 const [previousContentNode, setPreviousContentNode] = React90.useState(null);
13394 const [newTriggerOffset, setNewTriggerOffset] = React90.useState(null);
13395 const currentContainerRef = React90.useRef(null);
13396 const previousContainerRef = React90.useRef(null);
13397 const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true, false);
13398 const cleanupFrame = useAnimationFrame();
13399 const [previousContentDimensions, setPreviousContentDimensions] = React90.useState(null);
13400 const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React90.useState(false);
13401 useIsoLayoutEffect(() => {
13402 store.set("hasViewport", true);
13403 return () => {
13404 store.set("hasViewport", false);
13405 };
13406 }, [store]);
13407 const handleMeasureLayout = useStableCallback(() => {
13408 currentContainerRef.current?.style.setProperty("animation", "none");
13409 currentContainerRef.current?.style.setProperty("transition", "none");
13410 previousContainerRef.current?.style.setProperty("display", "none");
13411 });
13412 const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => {
13413 currentContainerRef.current?.style.removeProperty("animation");
13414 currentContainerRef.current?.style.removeProperty("transition");
13415 previousContainerRef.current?.style.removeProperty("display");
13416 if (previousDimensions) {
13417 setPreviousContentDimensions(previousDimensions);
13418 }
13419 });
13420 const lastHandledTriggerRef = React90.useRef(null);
13421 useIsoLayoutEffect(() => {
13422 if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) {
13423 setPreviousContentNode(capturedNodeRef.current);
13424 setShowStartingStyleAttribute(true);
13425 const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger);
13426 setNewTriggerOffset(offset4);
13427 cleanupFrame.request(() => {
13428 ReactDOM6.flushSync(() => {
13429 setShowStartingStyleAttribute(false);
13430 });
13431 onAnimationsFinished(() => {
13432 setPreviousContentNode(null);
13433 setPreviousContentDimensions(null);
13434 capturedNodeRef.current = null;
13435 });
13436 });
13437 lastHandledTriggerRef.current = activeTrigger;
13438 }
13439 }, [activeTrigger, previousActiveTrigger, previousContentNode, onAnimationsFinished, cleanupFrame]);
13440 useIsoLayoutEffect(() => {
13441 const source = currentContainerRef.current;
13442 if (!source) {
13443 return;
13444 }
13445 const wrapper = ownerDocument(source).createElement("div");
13446 for (const child of Array.from(source.childNodes)) {
13447 wrapper.appendChild(child.cloneNode(true));
13448 }
13449 capturedNodeRef.current = wrapper;
13450 });
13451 const isTransitioning = previousContentNode != null;
13452 let childrenToRender;
13453 if (!isTransitioning) {
13454 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", {
13455 "data-current": true,
13456 ref: currentContainerRef,
13457 children
13458 }, currentContentKey);
13459 } else {
13460 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(React90.Fragment, {
13461 children: [/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", {
13462 "data-previous": true,
13463 inert: inertValue(true),
13464 ref: previousContainerRef,
13465 style: {
13466 ...previousContentDimensions ? {
13467 [cssVars.popupWidth]: `${previousContentDimensions.width}px`,
13468 [cssVars.popupHeight]: `${previousContentDimensions.height}px`
13469 } : null,
13470 position: "absolute"
13471 },
13472 "data-ending-style": showStartingStyleAttribute ? void 0 : ""
13473 }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", {
13474 "data-current": true,
13475 ref: currentContainerRef,
13476 "data-starting-style": showStartingStyleAttribute ? "" : void 0,
13477 children
13478 }, currentContentKey)]
13479 });
13480 }
13481 useIsoLayoutEffect(() => {
13482 const container = previousContainerRef.current;
13483 if (!container || !previousContentNode) {
13484 return;
13485 }
13486 container.replaceChildren(...Array.from(previousContentNode.childNodes));
13487 }, [previousContentNode]);
13488 usePopupAutoResize({
13489 popupElement,
13490 positionerElement,
13491 mounted,
13492 content: payload,
13493 onMeasureLayout: handleMeasureLayout,
13494 onMeasureLayoutComplete: handleMeasureLayoutComplete,
13495 side,
13496 direction
13497 });
13498 const state = {
13499 activationDirection: getActivationDirection(newTriggerOffset),
13500 transitioning: isTransitioning
13501 };
13502 return {
13503 children: childrenToRender,
13504 state
13505 };
13506 }
13507 function getActivationDirection(offset4) {
13508 if (!offset4) {
13509 return void 0;
13510 }
13511 return `${getValueWithTolerance(offset4.horizontal, 5, "right", "left")} ${getValueWithTolerance(offset4.vertical, 5, "down", "up")}`;
13512 }
13513 function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) {
13514 if (value > tolerance) {
13515 return positiveLabel;
13516 }
13517 if (value < -tolerance) {
13518 return negativeLabel;
13519 }
13520 return "";
13521 }
13522 function calculateRelativePosition(from, to) {
13523 const fromRect = from.getBoundingClientRect();
13524 const toRect = to.getBoundingClientRect();
13525 const fromCenter = {
13526 x: fromRect.left + fromRect.width / 2,
13527 y: fromRect.top + fromRect.height / 2
13528 };
13529 const toCenter = {
13530 x: toRect.left + toRect.width / 2,
13531 y: toRect.top + toRect.height / 2
13532 };
13533 return {
13534 horizontal: toCenter.x - fromCenter.x,
13535 vertical: toCenter.y - fromCenter.y
13536 };
13537 }
13538 function usePopupContentKey(activeTriggerId, payload) {
13539 const [contentKey, setContentKey] = React90.useState(0);
13540 const previousActiveTriggerIdRef = React90.useRef(activeTriggerId);
13541 const previousPayloadRef = React90.useRef(payload);
13542 const pendingPayloadUpdateRef = React90.useRef(false);
13543 useIsoLayoutEffect(() => {
13544 const previousActiveTriggerId = previousActiveTriggerIdRef.current;
13545 const previousPayload = previousPayloadRef.current;
13546 const triggerIdChanged = activeTriggerId !== previousActiveTriggerId;
13547 const payloadChanged = payload !== previousPayload;
13548 if (triggerIdChanged) {
13549 setContentKey((value) => value + 1);
13550 pendingPayloadUpdateRef.current = !payloadChanged;
13551 } else if (pendingPayloadUpdateRef.current && payloadChanged) {
13552 setContentKey((value) => value + 1);
13553 pendingPayloadUpdateRef.current = false;
13554 }
13555 previousActiveTriggerIdRef.current = activeTriggerId;
13556 previousPayloadRef.current = payload;
13557 }, [activeTriggerId, payload]);
13558 return `${activeTriggerId ?? "current"}-${contentKey}`;
13559 }
13560
13561 // node_modules/@base-ui/react/esm/field/index.parts.js
13562 var index_parts_exports2 = {};
13563 __export(index_parts_exports2, {
13564 Control: () => FieldControl,
13565 Description: () => FieldDescription,
13566 Error: () => FieldError,
13567 Item: () => FieldItem,
13568 Label: () => FieldLabel,
13569 Root: () => FieldRoot,
13570 Validity: () => FieldValidity
13571 });
13572
13573 // node_modules/@base-ui/react/esm/field/root/FieldRoot.js
13574 var React95 = __toESM(require_react(), 1);
13575
13576 // node_modules/@base-ui/react/esm/fieldset/root/FieldsetRootContext.js
13577 var React91 = __toESM(require_react(), 1);
13578 var FieldsetRootContext = /* @__PURE__ */ React91.createContext({
13579 legendId: void 0,
13580 setLegendId: () => {
13581 },
13582 disabled: void 0
13583 });
13584 if (true) FieldsetRootContext.displayName = "FieldsetRootContext";
13585 function useFieldsetRootContext(optional = false) {
13586 const context = React91.useContext(FieldsetRootContext);
13587 if (!context && !optional) {
13588 throw new Error(true ? "Base UI: FieldsetRootContext is missing. Fieldset parts must be placed within <Fieldset.Root>." : formatErrorMessage_default(86));
13589 }
13590 return context;
13591 }
13592
13593 // node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableProvider.js
13594 var React92 = __toESM(require_react(), 1);
13595 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1);
13596 var LabelableProvider = function LabelableProvider2(props) {
13597 const defaultId = useBaseUiId();
13598 const initialControlId = props.controlId === void 0 ? defaultId : props.controlId;
13599 const [controlId, setControlIdState] = React92.useState(initialControlId);
13600 const [labelId, setLabelId] = React92.useState(props.labelId);
13601 const [messageIds, setMessageIds] = React92.useState([]);
13602 const registrationsRef = useRefWithInit(() => /* @__PURE__ */ new Map());
13603 const {
13604 messageIds: parentMessageIds
13605 } = useLabelableContext();
13606 const registerControlId = useStableCallback((source, nextId) => {
13607 const registrations = registrationsRef.current;
13608 if (nextId === void 0) {
13609 registrations.delete(source);
13610 return;
13611 }
13612 registrations.set(source, nextId);
13613 setControlIdState((prev) => {
13614 if (registrations.size === 0) {
13615 return void 0;
13616 }
13617 let nextControlId;
13618 for (const id of registrations.values()) {
13619 if (prev !== void 0 && id === prev) {
13620 return prev;
13621 }
13622 if (nextControlId === void 0) {
13623 nextControlId = id;
13624 }
13625 }
13626 return nextControlId;
13627 });
13628 });
13629 const getDescriptionProps = React92.useCallback((externalProps) => {
13630 return mergeProps({
13631 "aria-describedby": parentMessageIds.concat(messageIds).join(" ") || void 0
13632 }, externalProps);
13633 }, [parentMessageIds, messageIds]);
13634 const contextValue = React92.useMemo(() => ({
13635 controlId,
13636 registerControlId,
13637 labelId,
13638 setLabelId,
13639 messageIds,
13640 setMessageIds,
13641 getDescriptionProps
13642 }), [controlId, registerControlId, labelId, setLabelId, messageIds, setMessageIds, getDescriptionProps]);
13643 return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(LabelableContext.Provider, {
13644 value: contextValue,
13645 children: props.children
13646 });
13647 };
13648 if (true) LabelableProvider.displayName = "LabelableProvider";
13649
13650 // node_modules/@base-ui/react/esm/field/root/useFieldValidation.js
13651 var React93 = __toESM(require_react(), 1);
13652
13653 // node_modules/@base-ui/react/esm/field/utils/getCombinedFieldValidityData.js
13654 function getCombinedFieldValidityData(validityData, invalid) {
13655 return {
13656 ...validityData,
13657 state: {
13658 ...validityData.state,
13659 valid: !invalid && validityData.state.valid
13660 }
13661 };
13662 }
13663
13664 // node_modules/@base-ui/react/esm/field/root/useFieldValidation.js
13665 var validityKeys = Object.keys(DEFAULT_VALIDITY_STATE);
13666 function isOnlyValueMissing(state) {
13667 if (!state || state.valid || !state.valueMissing) {
13668 return false;
13669 }
13670 let onlyValueMissing = false;
13671 for (const key of validityKeys) {
13672 if (key === "valid") {
13673 continue;
13674 }
13675 if (key === "valueMissing") {
13676 onlyValueMissing = state[key];
13677 }
13678 if (state[key]) {
13679 onlyValueMissing = false;
13680 }
13681 }
13682 return onlyValueMissing;
13683 }
13684 function useFieldValidation(params) {
13685 const {
13686 formRef,
13687 clearErrors
13688 } = useFormContext();
13689 const {
13690 setValidityData,
13691 validate,
13692 validityData,
13693 validationDebounceTime,
13694 invalid,
13695 markedDirtyRef,
13696 state,
13697 name,
13698 shouldValidateOnChange,
13699 getRegisteredFieldId
13700 } = params;
13701 const {
13702 controlId,
13703 getDescriptionProps
13704 } = useLabelableContext();
13705 const timeout = useTimeout();
13706 const inputRef = React93.useRef(null);
13707 const commit = useStableCallback(async (value, revalidate = false) => {
13708 const element = inputRef.current;
13709 if (!element) {
13710 return;
13711 }
13712 function updateRegisteredFieldValidity(nextValidityData2, externalInvalid = invalid) {
13713 const fieldId = getRegisteredFieldId() ?? controlId;
13714 if (fieldId == null) {
13715 return;
13716 }
13717 const currentFieldData = formRef.current.fields.get(fieldId);
13718 if (!currentFieldData) {
13719 return;
13720 }
13721 const validityDataWithFormErrors = getCombinedFieldValidityData(nextValidityData2, externalInvalid);
13722 formRef.current.fields.set(fieldId, {
13723 ...currentFieldData,
13724 validityData: validityDataWithFormErrors
13725 });
13726 }
13727 if (revalidate) {
13728 if (state.valid !== false) {
13729 return;
13730 }
13731 const currentNativeValidity = element.validity;
13732 if (!currentNativeValidity.valueMissing) {
13733 const nextValidityData2 = {
13734 value,
13735 state: {
13736 ...DEFAULT_VALIDITY_STATE,
13737 valid: true
13738 },
13739 error: "",
13740 errors: [],
13741 initialValue: validityData.initialValue
13742 };
13743 element.setCustomValidity("");
13744 updateRegisteredFieldValidity(nextValidityData2, false);
13745 setValidityData(nextValidityData2);
13746 return;
13747 }
13748 const currentNativeValidityObject = validityKeys.reduce((acc, key) => {
13749 acc[key] = currentNativeValidity[key];
13750 return acc;
13751 }, {});
13752 if (!currentNativeValidityObject.valid && !isOnlyValueMissing(currentNativeValidityObject)) {
13753 return;
13754 }
13755 }
13756 function getState(el) {
13757 const computedState = validityKeys.reduce((acc, key) => {
13758 acc[key] = el.validity[key];
13759 return acc;
13760 }, {});
13761 let hasOnlyValueMissingError = false;
13762 for (const key of validityKeys) {
13763 if (key === "valid") {
13764 continue;
13765 }
13766 if (key === "valueMissing" && computedState[key]) {
13767 hasOnlyValueMissingError = true;
13768 } else if (computedState[key]) {
13769 return computedState;
13770 }
13771 }
13772 if (hasOnlyValueMissingError && !markedDirtyRef.current) {
13773 computedState.valid = true;
13774 computedState.valueMissing = false;
13775 }
13776 return computedState;
13777 }
13778 timeout.clear();
13779 let result = null;
13780 let validationErrors = [];
13781 const nextState = getState(element);
13782 let defaultValidationMessage;
13783 const validateOnChange = shouldValidateOnChange();
13784 if (element.validationMessage && !validateOnChange) {
13785 defaultValidationMessage = element.validationMessage;
13786 validationErrors = [element.validationMessage];
13787 } else {
13788 const formValues = Array.from(formRef.current.fields.values()).reduce((acc, field) => {
13789 if (field.name) {
13790 acc[field.name] = field.getValue();
13791 }
13792 return acc;
13793 }, {});
13794 const resultOrPromise = validate(value, formValues);
13795 if (typeof resultOrPromise === "object" && resultOrPromise !== null && "then" in resultOrPromise) {
13796 result = await resultOrPromise;
13797 } else {
13798 result = resultOrPromise;
13799 }
13800 if (result !== null) {
13801 nextState.valid = false;
13802 nextState.customError = true;
13803 if (Array.isArray(result)) {
13804 validationErrors = result;
13805 element.setCustomValidity(result.join("\n"));
13806 } else if (result) {
13807 validationErrors = [result];
13808 element.setCustomValidity(result);
13809 }
13810 } else if (validateOnChange) {
13811 element.setCustomValidity("");
13812 nextState.customError = false;
13813 if (element.validationMessage) {
13814 defaultValidationMessage = element.validationMessage;
13815 validationErrors = [element.validationMessage];
13816 } else if (element.validity.valid && !nextState.valid) {
13817 nextState.valid = true;
13818 }
13819 }
13820 }
13821 const nextValidityData = {
13822 value,
13823 state: nextState,
13824 error: defaultValidationMessage ?? (Array.isArray(result) ? result[0] : result ?? ""),
13825 errors: validationErrors,
13826 initialValue: validityData.initialValue
13827 };
13828 updateRegisteredFieldValidity(nextValidityData);
13829 setValidityData(nextValidityData);
13830 });
13831 const getValidationProps = React93.useCallback((externalProps = {}) => mergeProps(getDescriptionProps, state.valid === false ? {
13832 "aria-invalid": true
13833 } : EMPTY_OBJECT, externalProps), [getDescriptionProps, state.valid]);
13834 const getInputValidationProps = React93.useCallback((externalProps = {}) => mergeProps({
13835 onChange(event) {
13836 if (event.nativeEvent.defaultPrevented) {
13837 return;
13838 }
13839 clearErrors(name);
13840 if (!shouldValidateOnChange()) {
13841 commit(event.currentTarget.value, true);
13842 return;
13843 }
13844 const element = event.currentTarget;
13845 if (element.value === "") {
13846 commit(element.value);
13847 return;
13848 }
13849 timeout.clear();
13850 if (validationDebounceTime) {
13851 timeout.start(validationDebounceTime, () => {
13852 commit(element.value);
13853 });
13854 } else {
13855 commit(element.value);
13856 }
13857 }
13858 }, getValidationProps(externalProps)), [getValidationProps, clearErrors, name, timeout, commit, validationDebounceTime, shouldValidateOnChange]);
13859 return React93.useMemo(() => ({
13860 getValidationProps,
13861 getInputValidationProps,
13862 inputRef,
13863 commit
13864 }), [getValidationProps, getInputValidationProps, commit]);
13865 }
13866
13867 // node_modules/@base-ui/react/esm/internals/field-register-control/useFieldControlRegistration.js
13868 var React94 = __toESM(require_react(), 1);
13869 function useFieldControlRegistration(params) {
13870 const {
13871 commit,
13872 invalid,
13873 markedDirtyRef,
13874 name,
13875 setRegisteredFieldId,
13876 setValidityData,
13877 validityData
13878 } = params;
13879 const {
13880 formRef
13881 } = useFormContext();
13882 const activeFieldControlSourceRef = React94.useRef(null);
13883 const registrationRef = React94.useRef(null);
13884 const fallbackControlRef = React94.useRef(null);
13885 const getValueForForm = useStableCallback(() => {
13886 const registration = registrationRef.current;
13887 if (!registration) {
13888 return void 0;
13889 }
13890 if (registration.getValue) {
13891 return registration.getValue();
13892 }
13893 return registration.value;
13894 });
13895 const validate = useStableCallback(() => {
13896 const registration = registrationRef.current;
13897 if (!registration) {
13898 return;
13899 }
13900 let nextValue = registration.value;
13901 if (nextValue === void 0) {
13902 nextValue = getValueForForm();
13903 }
13904 markedDirtyRef.current = true;
13905 commit(nextValue);
13906 });
13907 function refreshRegistration() {
13908 const registration = registrationRef.current;
13909 if (!registration || !registration.id) {
13910 return;
13911 }
13912 formRef.current.fields.set(registration.id, {
13913 getValue: getValueForForm,
13914 name,
13915 controlRef: registration.controlRef ?? fallbackControlRef,
13916 validityData: getCombinedFieldValidityData(validityData, invalid),
13917 validate
13918 });
13919 }
13920 function deleteRegistration(id = registrationRef.current?.id) {
13921 if (id) {
13922 formRef.current.fields.delete(id);
13923 }
13924 }
13925 function syncInitialValue() {
13926 const registration = registrationRef.current;
13927 if (!registration) {
13928 return;
13929 }
13930 let initialValue = registration.value;
13931 if (initialValue === void 0) {
13932 initialValue = getValueForForm();
13933 }
13934 if (validityData.initialValue === null && initialValue !== null) {
13935 setValidityData((prev) => ({
13936 ...prev,
13937 initialValue
13938 }));
13939 }
13940 }
13941 useIsoLayoutEffect(() => {
13942 const registration = registrationRef.current;
13943 if (!registration || !registration.id) {
13944 return;
13945 }
13946 formRef.current.fields.set(registration.id, {
13947 getValue: getValueForForm,
13948 name,
13949 controlRef: registration.controlRef ?? fallbackControlRef,
13950 validityData: getCombinedFieldValidityData(validityData, invalid),
13951 validate
13952 });
13953 }, [formRef, getValueForForm, invalid, name, validate, validityData]);
13954 useIsoLayoutEffect(() => {
13955 const fields = formRef.current.fields;
13956 return () => {
13957 const id = registrationRef.current?.id;
13958 if (id) {
13959 fields.delete(id);
13960 }
13961 };
13962 }, [formRef]);
13963 return useStableCallback((source, registration) => {
13964 if (!registration) {
13965 if (activeFieldControlSourceRef.current === source) {
13966 activeFieldControlSourceRef.current = null;
13967 deleteRegistration();
13968 registrationRef.current = null;
13969 setRegisteredFieldId(void 0);
13970 }
13971 return;
13972 }
13973 const previousId = registrationRef.current?.id;
13974 activeFieldControlSourceRef.current = source;
13975 registrationRef.current = registration;
13976 setRegisteredFieldId(registration.id);
13977 if (previousId && previousId !== registration.id) {
13978 deleteRegistration(previousId);
13979 }
13980 syncInitialValue();
13981 refreshRegistration();
13982 });
13983 }
13984
13985 // node_modules/@base-ui/react/esm/field/root/FieldRoot.js
13986 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1);
13987 var FieldRootInner = /* @__PURE__ */ React95.forwardRef(function FieldRootInner2(componentProps, forwardedRef) {
13988 const {
13989 errors,
13990 validationMode: formValidationMode,
13991 submitAttemptedRef
13992 } = useFormContext();
13993 const {
13994 render,
13995 className,
13996 validate: validateProp,
13997 validationDebounceTime = 0,
13998 validationMode = formValidationMode,
13999 name,
14000 disabled: disabledProp = false,
14001 invalid: invalidProp,
14002 dirty: dirtyProp,
14003 touched: touchedProp,
14004 actionsRef,
14005 style,
14006 ...elementProps
14007 } = componentProps;
14008 const {
14009 disabled: disabledFieldset
14010 } = useFieldsetRootContext();
14011 const validate = useStableCallback(validateProp || (() => null));
14012 const disabled2 = disabledFieldset || disabledProp;
14013 const [touchedState, setTouchedUnwrapped] = React95.useState(false);
14014 const [dirtyState, setDirtyUnwrapped] = React95.useState(false);
14015 const [filled, setFilled] = React95.useState(false);
14016 const [focused, setFocused] = React95.useState(false);
14017 const dirty = dirtyProp ?? dirtyState;
14018 const touched = touchedProp ?? touchedState;
14019 const markedDirtyRef = React95.useRef(false);
14020 const registeredFieldIdRef = React95.useRef(void 0);
14021 const getRegisteredFieldId = React95.useCallback(() => registeredFieldIdRef.current, []);
14022 const setRegisteredFieldId = React95.useCallback((id) => {
14023 registeredFieldIdRef.current = id;
14024 }, []);
14025 const setDirty = useStableCallback((value) => {
14026 if (dirtyProp !== void 0) {
14027 return;
14028 }
14029 if (value) {
14030 markedDirtyRef.current = true;
14031 }
14032 setDirtyUnwrapped(value);
14033 });
14034 const setTouched = useStableCallback((value) => {
14035 if (touchedProp !== void 0) {
14036 return;
14037 }
14038 setTouchedUnwrapped(value);
14039 });
14040 const shouldValidateOnChange = useStableCallback(() => validationMode === "onChange" || validationMode === "onSubmit" && submitAttemptedRef.current);
14041 const hasFormError = !!name && Object.hasOwn(errors, name) && errors[name] !== void 0;
14042 const invalid = invalidProp === true || hasFormError;
14043 const [validityData, setValidityData] = React95.useState({
14044 state: DEFAULT_VALIDITY_STATE,
14045 error: "",
14046 errors: [],
14047 value: null,
14048 initialValue: null
14049 });
14050 const valid = !invalid && validityData.state.valid;
14051 const state = React95.useMemo(() => ({
14052 disabled: disabled2,
14053 touched,
14054 dirty,
14055 valid,
14056 filled,
14057 focused
14058 }), [disabled2, touched, dirty, valid, filled, focused]);
14059 const validation = useFieldValidation({
14060 setValidityData,
14061 validate,
14062 validityData,
14063 validationDebounceTime,
14064 invalid,
14065 markedDirtyRef,
14066 state,
14067 name,
14068 shouldValidateOnChange,
14069 getRegisteredFieldId
14070 });
14071 const validityValue = validityData.value;
14072 const handleImperativeValidate = React95.useCallback(() => {
14073 markedDirtyRef.current = true;
14074 validation.commit(validityValue);
14075 }, [validation, validityValue]);
14076 const registerFieldControl = useFieldControlRegistration({
14077 commit: validation.commit,
14078 invalid,
14079 markedDirtyRef,
14080 name,
14081 setRegisteredFieldId,
14082 setValidityData,
14083 validityData
14084 });
14085 React95.useImperativeHandle(actionsRef, () => ({
14086 validate: handleImperativeValidate
14087 }), [handleImperativeValidate]);
14088 const contextValue = React95.useMemo(() => ({
14089 invalid,
14090 name,
14091 validityData,
14092 setValidityData,
14093 disabled: disabled2,
14094 touched,
14095 setTouched,
14096 dirty,
14097 setDirty,
14098 filled,
14099 setFilled,
14100 focused,
14101 setFocused,
14102 validate,
14103 validationMode,
14104 validationDebounceTime,
14105 shouldValidateOnChange,
14106 state,
14107 markedDirtyRef,
14108 registerFieldControl,
14109 validation
14110 }), [invalid, name, validityData, disabled2, touched, setTouched, dirty, setDirty, filled, setFilled, focused, setFocused, validate, validationMode, validationDebounceTime, shouldValidateOnChange, state, registerFieldControl, validation]);
14111 const element = useRenderElement("div", componentProps, {
14112 ref: forwardedRef,
14113 state,
14114 props: elementProps,
14115 stateAttributesMapping: fieldValidityMapping
14116 });
14117 return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(FieldRootContext.Provider, {
14118 value: contextValue,
14119 children: element
14120 });
14121 });
14122 if (true) FieldRootInner.displayName = "FieldRootInner";
14123 var FieldRoot = /* @__PURE__ */ React95.forwardRef(function FieldRoot2(componentProps, forwardedRef) {
14124 return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(LabelableProvider, {
14125 children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(FieldRootInner, {
14126 ...componentProps,
14127 ref: forwardedRef
14128 })
14129 });
14130 });
14131 if (true) FieldRoot.displayName = "FieldRoot";
14132
14133 // node_modules/@base-ui/react/esm/field/label/FieldLabel.js
14134 var React96 = __toESM(require_react(), 1);
14135 var FieldLabel = /* @__PURE__ */ React96.forwardRef(function FieldLabel2(componentProps, forwardedRef) {
14136 const {
14137 render,
14138 className,
14139 style,
14140 id: idProp,
14141 nativeLabel = true,
14142 ...elementProps
14143 } = componentProps;
14144 const fieldRootContext = useFieldRootContext(false);
14145 const {
14146 labelId
14147 } = useLabelableContext();
14148 const labelRef = React96.useRef(null);
14149 const labelProps = useLabel({
14150 id: labelId ?? idProp,
14151 native: nativeLabel
14152 });
14153 if (true) {
14154 React96.useEffect(() => {
14155 if (!labelRef.current) {
14156 return;
14157 }
14158 const isLabelTag = labelRef.current.tagName === "LABEL";
14159 if (nativeLabel) {
14160 if (!isLabelTag) {
14161 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
14162 const message = "<Field.Label> expected a <label> element because the `nativeLabel` prop is true. Rendering a non-<label> disables native label association, so `htmlFor` will not work. Use a real <label> in the `render` prop, or set `nativeLabel` to `false`.";
14163 error(`${message}${ownerStackMessage}`);
14164 }
14165 } else if (isLabelTag) {
14166 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
14167 const message = "<Field.Label> expected a non-<label> element because the `nativeLabel` prop is false. Rendering a <label> assumes native label behavior while Base UI treats it as non-native, which can cause unexpected pointer behavior. Use a non-<label> in the `render` prop, or set `nativeLabel` to `true`.";
14168 error(`${message}${ownerStackMessage}`);
14169 }
14170 }, [nativeLabel]);
14171 }
14172 const element = useRenderElement("label", componentProps, {
14173 ref: [forwardedRef, labelRef],
14174 state: fieldRootContext.state,
14175 props: [labelProps, elementProps],
14176 stateAttributesMapping: fieldValidityMapping
14177 });
14178 return element;
14179 });
14180 if (true) FieldLabel.displayName = "FieldLabel";
14181
14182 // node_modules/@base-ui/react/esm/field/error/FieldError.js
14183 var React97 = __toESM(require_react(), 1);
14184 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1);
14185 var stateAttributesMapping4 = {
14186 ...fieldValidityMapping,
14187 ...transitionStatusMapping
14188 };
14189 var FieldError = /* @__PURE__ */ React97.forwardRef(function FieldError2(componentProps, forwardedRef) {
14190 const {
14191 render,
14192 id: idProp,
14193 className,
14194 match,
14195 style,
14196 ...elementProps
14197 } = componentProps;
14198 const id = useBaseUiId(idProp);
14199 const {
14200 validityData,
14201 state: fieldState,
14202 name
14203 } = useFieldRootContext(false);
14204 const {
14205 setMessageIds
14206 } = useLabelableContext();
14207 const {
14208 errors
14209 } = useFormContext();
14210 const formError = name ? errors[name] : null;
14211 const hasSpecificMatch = typeof match === "string";
14212 let rendered = false;
14213 if (match === true) {
14214 rendered = true;
14215 } else if (hasSpecificMatch) {
14216 rendered = Boolean(validityData.state[match]);
14217 } else {
14218 rendered = Boolean(formError) || validityData.state.valid === false;
14219 }
14220 const {
14221 mounted,
14222 transitionStatus,
14223 setMounted
14224 } = useTransitionStatus(rendered);
14225 useIsoLayoutEffect(() => {
14226 if (!rendered || !id) {
14227 return void 0;
14228 }
14229 setMessageIds((v) => v.concat(id));
14230 return () => {
14231 setMessageIds((v) => v.filter((item) => item !== id));
14232 };
14233 }, [rendered, id, setMessageIds]);
14234 const errorRef = React97.useRef(null);
14235 const [lastRenderedMessage, setLastRenderedMessage] = React97.useState(null);
14236 const [lastRenderedMessageKey, setLastRenderedMessageKey] = React97.useState(null);
14237 const clientErrorMessage = validityData.errors.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("ul", {
14238 children: validityData.errors.map((message) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("li", {
14239 children: message
14240 }, message))
14241 }) : validityData.error;
14242 const errorMessage = hasSpecificMatch ? clientErrorMessage : formError || clientErrorMessage;
14243 let errorKey = validityData.error;
14244 if (formError != null) {
14245 errorKey = Array.isArray(formError) ? JSON.stringify(formError) : formError;
14246 } else if (validityData.errors.length > 1) {
14247 errorKey = JSON.stringify(validityData.errors);
14248 }
14249 if (rendered && errorKey !== lastRenderedMessageKey) {
14250 setLastRenderedMessageKey(errorKey);
14251 setLastRenderedMessage(errorMessage);
14252 }
14253 useOpenChangeComplete({
14254 open: rendered,
14255 ref: errorRef,
14256 onComplete() {
14257 if (!rendered) {
14258 setMounted(false);
14259 }
14260 }
14261 });
14262 const state = {
14263 ...fieldState,
14264 transitionStatus
14265 };
14266 const element = useRenderElement("div", componentProps, {
14267 ref: [forwardedRef, errorRef],
14268 state,
14269 props: [{
14270 id,
14271 children: rendered ? errorMessage : lastRenderedMessage
14272 }, elementProps],
14273 stateAttributesMapping: stateAttributesMapping4,
14274 enabled: mounted
14275 });
14276 if (!mounted) {
14277 return null;
14278 }
14279 return element;
14280 });
14281 if (true) FieldError.displayName = "FieldError";
14282
14283 // node_modules/@base-ui/react/esm/field/description/FieldDescription.js
14284 var React98 = __toESM(require_react(), 1);
14285 var FieldDescription = /* @__PURE__ */ React98.forwardRef(function FieldDescription2(componentProps, forwardedRef) {
14286 const {
14287 render,
14288 id: idProp,
14289 className,
14290 style,
14291 ...elementProps
14292 } = componentProps;
14293 const id = useBaseUiId(idProp);
14294 const fieldRootContext = useFieldRootContext(false);
14295 const {
14296 setMessageIds
14297 } = useLabelableContext();
14298 useIsoLayoutEffect(() => {
14299 if (!id) {
14300 return void 0;
14301 }
14302 setMessageIds((v) => v.concat(id));
14303 return () => {
14304 setMessageIds((v) => v.filter((item) => item !== id));
14305 };
14306 }, [id, setMessageIds]);
14307 const element = useRenderElement("p", componentProps, {
14308 ref: forwardedRef,
14309 state: fieldRootContext.state,
14310 props: [{
14311 id
14312 }, elementProps],
14313 stateAttributesMapping: fieldValidityMapping
14314 });
14315 return element;
14316 });
14317 if (true) FieldDescription.displayName = "FieldDescription";
14318
14319 // node_modules/@base-ui/react/esm/field/control/FieldControl.js
14320 var React99 = __toESM(require_react(), 1);
14321 var FieldControl = /* @__PURE__ */ React99.forwardRef(function FieldControl2(componentProps, forwardedRef) {
14322 const {
14323 render,
14324 className,
14325 id: idProp,
14326 name: nameProp,
14327 value: valueProp,
14328 disabled: disabledProp = false,
14329 onValueChange,
14330 defaultValue,
14331 autoFocus = false,
14332 style,
14333 ...elementProps
14334 } = componentProps;
14335 const {
14336 state: fieldState,
14337 name: fieldName,
14338 disabled: fieldDisabled,
14339 setTouched,
14340 setDirty,
14341 validityData,
14342 setFocused,
14343 setFilled,
14344 validationMode,
14345 validation
14346 } = useFieldRootContext();
14347 const disabled2 = fieldDisabled || disabledProp;
14348 const name = fieldName ?? nameProp;
14349 const state = {
14350 ...fieldState,
14351 disabled: disabled2
14352 };
14353 const {
14354 labelId
14355 } = useLabelableContext();
14356 const id = useLabelableId({
14357 id: idProp
14358 });
14359 useIsoLayoutEffect(() => {
14360 const hasExternalValue = valueProp != null;
14361 if (validation.inputRef.current?.value || hasExternalValue && valueProp !== "") {
14362 setFilled(true);
14363 } else if (hasExternalValue && valueProp === "") {
14364 setFilled(false);
14365 }
14366 }, [validation.inputRef, setFilled, valueProp]);
14367 const inputRef = React99.useRef(null);
14368 useIsoLayoutEffect(() => {
14369 if (autoFocus && inputRef.current === activeElement(ownerDocument(inputRef.current))) {
14370 setFocused(true);
14371 }
14372 }, [autoFocus, setFocused]);
14373 const [valueUnwrapped] = useControlled({
14374 controlled: valueProp,
14375 default: defaultValue,
14376 name: "FieldControl",
14377 state: "value"
14378 });
14379 const isControlled = valueProp !== void 0;
14380 const value = isControlled ? valueUnwrapped : void 0;
14381 const getValueFromInput = useStableCallback(() => validation.inputRef.current?.value);
14382 useRegisterFieldControl(validation.inputRef, id, value, getValueFromInput);
14383 const element = useRenderElement("input", componentProps, {
14384 ref: [forwardedRef, inputRef],
14385 state,
14386 props: [{
14387 id,
14388 disabled: disabled2,
14389 name,
14390 ref: validation.inputRef,
14391 "aria-labelledby": labelId,
14392 autoFocus,
14393 ...isControlled ? {
14394 value
14395 } : {
14396 defaultValue
14397 },
14398 onChange(event) {
14399 const inputValue = event.currentTarget.value;
14400 onValueChange?.(inputValue, createChangeEventDetails(reason_parts_exports.none, event.nativeEvent));
14401 setDirty(inputValue !== validityData.initialValue);
14402 setFilled(inputValue !== "");
14403 },
14404 onFocus() {
14405 setFocused(true);
14406 },
14407 onBlur(event) {
14408 setTouched(true);
14409 setFocused(false);
14410 if (validationMode === "onBlur") {
14411 validation.commit(event.currentTarget.value);
14412 }
14413 },
14414 onKeyDown(event) {
14415 if (event.currentTarget.tagName === "INPUT" && event.key === "Enter") {
14416 setTouched(true);
14417 validation.commit(event.currentTarget.value);
14418 }
14419 }
14420 }, validation.getInputValidationProps(), elementProps],
14421 stateAttributesMapping: fieldValidityMapping
14422 });
14423 return element;
14424 });
14425 if (true) FieldControl.displayName = "FieldControl";
14426
14427 // node_modules/@base-ui/react/esm/field/validity/FieldValidity.js
14428 var React100 = __toESM(require_react(), 1);
14429 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1);
14430 var FieldValidity = function FieldValidity2(props) {
14431 const {
14432 children
14433 } = props;
14434 const {
14435 validityData,
14436 invalid
14437 } = useFieldRootContext(false);
14438 const combinedFieldValidityData = React100.useMemo(() => getCombinedFieldValidityData(validityData, invalid), [validityData, invalid]);
14439 const isInvalid = combinedFieldValidityData.state.valid === false;
14440 const {
14441 transitionStatus
14442 } = useTransitionStatus(isInvalid);
14443 const fieldValidityState = React100.useMemo(() => {
14444 return {
14445 ...combinedFieldValidityData,
14446 validity: combinedFieldValidityData.state,
14447 transitionStatus
14448 };
14449 }, [combinedFieldValidityData, transitionStatus]);
14450 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(React100.Fragment, {
14451 children: children(fieldValidityState)
14452 });
14453 };
14454 if (true) FieldValidity.displayName = "FieldValidity";
14455
14456 // node_modules/@base-ui/react/esm/field/item/FieldItem.js
14457 var React101 = __toESM(require_react(), 1);
14458 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1);
14459 var FieldItem = /* @__PURE__ */ React101.forwardRef(function FieldItem2(componentProps, forwardedRef) {
14460 const {
14461 render,
14462 className,
14463 style,
14464 disabled: disabledProp = false,
14465 ...elementProps
14466 } = componentProps;
14467 const {
14468 state,
14469 disabled: rootDisabled
14470 } = useFieldRootContext(false);
14471 const disabled2 = rootDisabled || disabledProp;
14472 const checkboxGroupContext = useCheckboxGroupContext();
14473 const hasParentCheckbox = checkboxGroupContext?.allValues !== void 0;
14474 const controlId = hasParentCheckbox ? checkboxGroupContext?.parent.id : void 0;
14475 const fieldItemContext = React101.useMemo(() => ({
14476 disabled: disabled2
14477 }), [disabled2]);
14478 const element = useRenderElement("div", componentProps, {
14479 ref: forwardedRef,
14480 state,
14481 props: elementProps,
14482 stateAttributesMapping: fieldValidityMapping
14483 });
14484 return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(LabelableProvider, {
14485 controlId,
14486 children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(FieldItemContext.Provider, {
14487 value: fieldItemContext,
14488 children: element
14489 })
14490 });
14491 });
14492 if (true) FieldItem.displayName = "FieldItem";
14493
14494 // node_modules/@base-ui/react/esm/input/Input.js
14495 var React102 = __toESM(require_react(), 1);
14496 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1);
14497 var Input = /* @__PURE__ */ React102.forwardRef(function Input2(props, forwardedRef) {
14498 return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(index_parts_exports2.Control, {
14499 ref: forwardedRef,
14500 ...props
14501 });
14502 });
14503 if (true) Input.displayName = "Input";
14504
14505 // node_modules/@base-ui/react/esm/utils/FloatingPortalLite.js
14506 var React103 = __toESM(require_react(), 1);
14507 var ReactDOM7 = __toESM(require_react_dom(), 1);
14508 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1);
14509 var FloatingPortalLite = /* @__PURE__ */ React103.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) {
14510 const {
14511 children,
14512 container,
14513 className,
14514 render,
14515 style,
14516 ...elementProps
14517 } = componentProps;
14518 const {
14519 portalNode,
14520 portalSubtree
14521 } = useFloatingPortalNode({
14522 container,
14523 ref: forwardedRef,
14524 componentProps,
14525 elementProps
14526 });
14527 if (!portalSubtree && !portalNode) {
14528 return null;
14529 }
14530 return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(React103.Fragment, {
14531 children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM7.createPortal(children, portalNode)]
14532 });
14533 });
14534 if (true) FloatingPortalLite.displayName = "FloatingPortalLite";
14535
14536 // node_modules/@base-ui/react/esm/tooltip/index.parts.js
14537 var index_parts_exports3 = {};
14538 __export(index_parts_exports3, {
14539 Arrow: () => TooltipArrow,
14540 Handle: () => TooltipHandle,
14541 Popup: () => TooltipPopup,
14542 Portal: () => TooltipPortal,
14543 Positioner: () => TooltipPositioner,
14544 Provider: () => TooltipProvider,
14545 Root: () => TooltipRoot,
14546 Trigger: () => TooltipTrigger,
14547 Viewport: () => TooltipViewport,
14548 createHandle: () => createTooltipHandle
14549 });
14550
14551 // node_modules/@base-ui/react/esm/tooltip/root/TooltipRoot.js
14552 var React106 = __toESM(require_react(), 1);
14553
14554 // node_modules/@base-ui/react/esm/tooltip/root/TooltipRootContext.js
14555 var React104 = __toESM(require_react(), 1);
14556 var TooltipRootContext = /* @__PURE__ */ React104.createContext(void 0);
14557 if (true) TooltipRootContext.displayName = "TooltipRootContext";
14558 function useTooltipRootContext(optional) {
14559 const context = React104.useContext(TooltipRootContext);
14560 if (context === void 0 && !optional) {
14561 throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72));
14562 }
14563 return context;
14564 }
14565
14566 // node_modules/@base-ui/react/esm/tooltip/store/TooltipStore.js
14567 var React105 = __toESM(require_react(), 1);
14568 var ReactDOM8 = __toESM(require_react_dom(), 1);
14569 var selectors3 = {
14570 ...popupStoreSelectors,
14571 disabled: createSelector((state) => state.disabled),
14572 instantType: createSelector((state) => state.instantType),
14573 isInstantPhase: createSelector((state) => state.isInstantPhase),
14574 trackCursorAxis: createSelector((state) => state.trackCursorAxis),
14575 disableHoverablePopup: createSelector((state) => state.disableHoverablePopup),
14576 lastOpenChangeReason: createSelector((state) => state.openChangeReason),
14577 closeOnClick: createSelector((state) => state.closeOnClick),
14578 closeDelay: createSelector((state) => state.closeDelay),
14579 hasViewport: createSelector((state) => state.hasViewport)
14580 };
14581 var TooltipStore = class _TooltipStore extends ReactStore {
14582 constructor(initialState, floatingId, nested = false) {
14583 const triggerElements = new PopupTriggerMap();
14584 const state = {
14585 ...createInitialState(),
14586 ...initialState
14587 };
14588 state.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested);
14589 super(state, {
14590 popupRef: /* @__PURE__ */ React105.createRef(),
14591 onOpenChange: void 0,
14592 onOpenChangeComplete: void 0,
14593 triggerElements
14594 }, selectors3);
14595 }
14596 setOpen = (nextOpen, eventDetails) => {
14597 const reason = eventDetails.reason;
14598 const isHover = reason === reason_parts_exports.triggerHover;
14599 const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus;
14600 const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey);
14601 eventDetails.preventUnmountOnClose = () => {
14602 this.set("preventUnmountingOnClose", true);
14603 };
14604 this.context.onOpenChange?.(nextOpen, eventDetails);
14605 if (eventDetails.isCanceled) {
14606 return;
14607 }
14608 this.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
14609 const changeState = () => {
14610 const updatedState = {
14611 open: nextOpen,
14612 openChangeReason: reason
14613 };
14614 if (isFocusOpen) {
14615 updatedState.instantType = "focus";
14616 } else if (isDismissClose) {
14617 updatedState.instantType = "dismiss";
14618 } else if (reason === reason_parts_exports.triggerHover) {
14619 updatedState.instantType = void 0;
14620 }
14621 setOpenTriggerState(updatedState, nextOpen, eventDetails.trigger);
14622 this.update(updatedState);
14623 };
14624 if (isHover) {
14625 ReactDOM8.flushSync(changeState);
14626 } else {
14627 changeState();
14628 }
14629 };
14630 // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change.
14631 cancelPendingOpen(event) {
14632 this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event));
14633 }
14634 static useStore(externalStore, initialState) {
14635 const store = usePopupStore(externalStore, (floatingId, nested) => new _TooltipStore(initialState, floatingId, nested)).store;
14636 return store;
14637 }
14638 };
14639 function createInitialState() {
14640 return {
14641 ...createInitialPopupStoreState(),
14642 disabled: false,
14643 instantType: void 0,
14644 isInstantPhase: false,
14645 trackCursorAxis: "none",
14646 disableHoverablePopup: false,
14647 openChangeReason: null,
14648 closeOnClick: true,
14649 closeDelay: 0,
14650 hasViewport: false
14651 };
14652 }
14653
14654 // node_modules/@base-ui/react/esm/tooltip/root/TooltipRoot.js
14655 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1);
14656 var TooltipRoot = fastComponent(function TooltipRoot2(props) {
14657 const {
14658 disabled: disabled2 = false,
14659 defaultOpen = false,
14660 open: openProp,
14661 disableHoverablePopup = false,
14662 trackCursorAxis = "none",
14663 actionsRef,
14664 onOpenChange,
14665 onOpenChangeComplete,
14666 handle,
14667 triggerId: triggerIdProp,
14668 defaultTriggerId: defaultTriggerIdProp = null,
14669 children
14670 } = props;
14671 const store = TooltipStore.useStore(handle?.store, {
14672 open: defaultOpen,
14673 openProp,
14674 activeTriggerId: defaultTriggerIdProp,
14675 triggerIdProp
14676 });
14677 useOnFirstRender(() => {
14678 if (openProp === void 0 && store.state.open === false && defaultOpen === true) {
14679 store.update({
14680 open: true,
14681 activeTriggerId: defaultTriggerIdProp
14682 });
14683 }
14684 });
14685 store.useControlledProp("openProp", openProp);
14686 store.useControlledProp("triggerIdProp", triggerIdProp);
14687 store.useContextCallback("onOpenChange", onOpenChange);
14688 store.useContextCallback("onOpenChangeComplete", onOpenChangeComplete);
14689 const openState = store.useState("open");
14690 const open = !disabled2 && openState;
14691 const activeTriggerId = store.useState("activeTriggerId");
14692 const mounted = store.useState("mounted");
14693 const payload = store.useState("payload");
14694 store.useSyncedValues({
14695 trackCursorAxis,
14696 disableHoverablePopup
14697 });
14698 store.useSyncedValue("disabled", disabled2);
14699 useImplicitActiveTrigger(store);
14700 const {
14701 forceUnmount,
14702 transitionStatus
14703 } = useOpenStateTransitions(open, store);
14704 const isInstantPhase = store.useState("isInstantPhase");
14705 const instantType = store.useState("instantType");
14706 const lastOpenChangeReason = store.useState("lastOpenChangeReason");
14707 const previousInstantTypeRef = React106.useRef(null);
14708 useIsoLayoutEffect(() => {
14709 if (openState && disabled2) {
14710 store.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled));
14711 }
14712 }, [openState, disabled2, store]);
14713 useIsoLayoutEffect(() => {
14714 if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) {
14715 if (instantType !== "delay") {
14716 previousInstantTypeRef.current = instantType;
14717 }
14718 store.set("instantType", "delay");
14719 } else if (previousInstantTypeRef.current !== null) {
14720 store.set("instantType", previousInstantTypeRef.current);
14721 previousInstantTypeRef.current = null;
14722 }
14723 }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store]);
14724 useIsoLayoutEffect(() => {
14725 if (open) {
14726 if (activeTriggerId == null) {
14727 store.set("payload", void 0);
14728 }
14729 }
14730 }, [store, activeTriggerId, open]);
14731 const handleImperativeClose = React106.useCallback(() => {
14732 store.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction));
14733 }, [store]);
14734 React106.useImperativeHandle(actionsRef, () => ({
14735 unmount: forceUnmount,
14736 close: handleImperativeClose
14737 }), [forceUnmount, handleImperativeClose]);
14738 const shouldRenderInteractions = open || mounted || !disabled2 && trackCursorAxis !== "none";
14739 return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(TooltipRootContext.Provider, {
14740 value: store,
14741 children: [shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TooltipInteractions, {
14742 store,
14743 disabled: disabled2,
14744 trackCursorAxis
14745 }), typeof children === "function" ? children({
14746 payload
14747 }) : children]
14748 });
14749 });
14750 if (true) TooltipRoot.displayName = "TooltipRoot";
14751 function TooltipInteractions({
14752 store,
14753 disabled: disabled2,
14754 trackCursorAxis
14755 }) {
14756 const floatingRootContext = store.useState("floatingRootContext");
14757 const dismiss = useDismiss(floatingRootContext, {
14758 enabled: !disabled2,
14759 referencePress: () => store.select("closeOnClick")
14760 });
14761 const clientPoint = useClientPoint(floatingRootContext, {
14762 enabled: !disabled2 && trackCursorAxis !== "none",
14763 axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis
14764 });
14765 const activeTriggerProps = React106.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]);
14766 const inactiveTriggerProps = React106.useMemo(() => mergeProps(clientPoint.trigger, dismiss.trigger), [clientPoint.trigger, dismiss.trigger]);
14767 const popupProps = React106.useMemo(() => mergeProps(FOCUSABLE_POPUP_PROPS, clientPoint.floating, dismiss.floating), [clientPoint.floating, dismiss.floating]);
14768 usePopupInteractionProps(store, {
14769 activeTriggerProps,
14770 inactiveTriggerProps,
14771 popupProps
14772 });
14773 return null;
14774 }
14775
14776 // node_modules/@base-ui/react/esm/tooltip/trigger/TooltipTrigger.js
14777 var React108 = __toESM(require_react(), 1);
14778
14779 // node_modules/@base-ui/react/esm/tooltip/provider/TooltipProviderContext.js
14780 var React107 = __toESM(require_react(), 1);
14781 var TooltipProviderContext = /* @__PURE__ */ React107.createContext(void 0);
14782 if (true) TooltipProviderContext.displayName = "TooltipProviderContext";
14783 function useTooltipProviderContext() {
14784 return React107.useContext(TooltipProviderContext);
14785 }
14786
14787 // node_modules/@base-ui/react/esm/tooltip/trigger/TooltipTriggerDataAttributes.js
14788 var TooltipTriggerDataAttributes = (function(TooltipTriggerDataAttributes2) {
14789 TooltipTriggerDataAttributes2[TooltipTriggerDataAttributes2["popupOpen"] = CommonTriggerDataAttributes.popupOpen] = "popupOpen";
14790 TooltipTriggerDataAttributes2["triggerDisabled"] = "data-trigger-disabled";
14791 return TooltipTriggerDataAttributes2;
14792 })({});
14793
14794 // node_modules/@base-ui/react/esm/tooltip/utils/constants.js
14795 var OPEN_DELAY = 600;
14796
14797 // node_modules/@base-ui/react/esm/tooltip/trigger/TooltipTrigger.js
14798 var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger";
14799 function getTargetElement(event) {
14800 if ("composedPath" in event) {
14801 const path = event.composedPath();
14802 for (let i = 0; i < path.length; i += 1) {
14803 const element = path[i];
14804 if (isElement(element)) {
14805 return element;
14806 }
14807 }
14808 }
14809 const target = event.target;
14810 if (isElement(target)) {
14811 return target;
14812 }
14813 return null;
14814 }
14815 function closestEnabledTooltipTrigger(element) {
14816 let current = element;
14817 while (current) {
14818 if (current.hasAttribute(TOOLTIP_TRIGGER_IDENTIFIER)) {
14819 return current;
14820 }
14821 const parentElement = current.parentElement;
14822 if (parentElement) {
14823 current = parentElement;
14824 continue;
14825 }
14826 const root = current.getRootNode();
14827 current = "host" in root && isElement(root.host) ? root.host : null;
14828 }
14829 return null;
14830 }
14831 var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) {
14832 const {
14833 render,
14834 className,
14835 style,
14836 handle,
14837 payload,
14838 disabled: disabledProp,
14839 delay,
14840 closeOnClick = true,
14841 closeDelay,
14842 id: idProp,
14843 ...elementProps
14844 } = componentProps;
14845 const rootContext = useTooltipRootContext(true);
14846 const store = handle?.store ?? rootContext;
14847 if (!store) {
14848 throw new Error(true ? "Base UI: <Tooltip.Trigger> must be either used within a <Tooltip.Root> component or provided with a handle." : formatErrorMessage_default(82));
14849 }
14850 const thisTriggerId = useBaseUiId(idProp);
14851 const isTriggerActive = store.useState("isTriggerActive", thisTriggerId);
14852 const isOpenedByThisTrigger = store.useState("isOpenedByTrigger", thisTriggerId);
14853 const floatingRootContext = store.useState("floatingRootContext");
14854 const triggerElementRef = React108.useRef(null);
14855 const delayWithDefault = delay ?? OPEN_DELAY;
14856 const closeDelayWithDefault = closeDelay ?? 0;
14857 const {
14858 registerTrigger,
14859 isMountedByThisTrigger
14860 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store, {
14861 payload,
14862 closeOnClick,
14863 closeDelay: closeDelayWithDefault
14864 });
14865 const providerContext = useTooltipProviderContext();
14866 const {
14867 delayRef,
14868 isInstantPhase,
14869 hasProvider
14870 } = useDelayGroup(floatingRootContext, {
14871 open: isOpenedByThisTrigger
14872 });
14873 const hoverInteraction = useHoverInteractionSharedState(floatingRootContext);
14874 store.useSyncedValue("isInstantPhase", isInstantPhase);
14875 const rootDisabled = store.useState("disabled");
14876 const disabled2 = disabledProp ?? rootDisabled;
14877 const disabledRef = useValueAsRef(disabled2);
14878 const trackCursorAxis = store.useState("trackCursorAxis");
14879 const disableHoverablePopup = store.useState("disableHoverablePopup");
14880 const isNestedTriggerHoveredRef = React108.useRef(false);
14881 const nestedTriggerOpenTimeout = useTimeout();
14882 const pointerTypeRef = React108.useRef(void 0);
14883 function getOpenDelay() {
14884 const providerDelay = providerContext?.delay;
14885 const groupOpenValue = typeof delayRef.current === "object" ? delayRef.current.open : void 0;
14886 let computedOpenDelay = delayWithDefault;
14887 if (hasProvider) {
14888 if (groupOpenValue !== 0) {
14889 computedOpenDelay = delay ?? providerDelay ?? delayWithDefault;
14890 } else {
14891 computedOpenDelay = 0;
14892 }
14893 }
14894 return computedOpenDelay;
14895 }
14896 function isEnabledNestedTriggerTarget(target) {
14897 const triggerEl = triggerElementRef.current;
14898 if (!triggerEl || !target) {
14899 return false;
14900 }
14901 const nearestTrigger = closestEnabledTooltipTrigger(target);
14902 return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger);
14903 }
14904 function detectNestedTriggerHover(target) {
14905 const nestedTriggerHovered = isEnabledNestedTriggerTarget(target);
14906 isNestedTriggerHoveredRef.current = nestedTriggerHovered;
14907 if (nestedTriggerHovered) {
14908 hoverInteraction.openChangeTimeout.clear();
14909 hoverInteraction.restTimeout.clear();
14910 hoverInteraction.restTimeoutPending = false;
14911 nestedTriggerOpenTimeout.clear();
14912 }
14913 return nestedTriggerHovered;
14914 }
14915 const hoverProps = useHoverReferenceInteraction(floatingRootContext, {
14916 enabled: !disabled2,
14917 mouseOnly: true,
14918 move: false,
14919 handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null,
14920 restMs: getOpenDelay,
14921 delay() {
14922 const closeValue = typeof delayRef.current === "object" ? delayRef.current.close : void 0;
14923 let computedCloseDelay = closeDelayWithDefault;
14924 if (closeDelay == null && hasProvider) {
14925 computedCloseDelay = closeValue;
14926 }
14927 return {
14928 close: computedCloseDelay
14929 };
14930 },
14931 triggerElementRef,
14932 isActiveTrigger: isTriggerActive,
14933 isClosing: () => store.select("transitionStatus") === "ending",
14934 shouldOpen() {
14935 return !isNestedTriggerHoveredRef.current;
14936 }
14937 });
14938 const focusProps = useFocus(floatingRootContext, {
14939 enabled: !disabled2
14940 }).reference;
14941 const handleNestedTriggerHover = (event) => {
14942 const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current;
14943 const target = getTargetElement(event);
14944 const nestedTriggerHovered = detectNestedTriggerHover(target);
14945 const triggerEl = triggerElementRef.current;
14946 const targetInsideTrigger = triggerEl && target && contains(triggerEl, target);
14947 if (nestedTriggerHovered && store.select("open") && store.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) {
14948 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
14949 return;
14950 }
14951 if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences.
14952 isMouseLikePointerType(pointerTypeRef.current)) {
14953 const open = () => {
14954 if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store.select("open")) {
14955 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl));
14956 }
14957 };
14958 const openDelay = getOpenDelay();
14959 if (openDelay === 0) {
14960 nestedTriggerOpenTimeout.clear();
14961 open();
14962 } else {
14963 nestedTriggerOpenTimeout.start(openDelay, open);
14964 }
14965 }
14966 };
14967 const rootTriggerProps = store.useState("triggerProps", isMountedByThisTrigger);
14968 const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none";
14969 const state = {
14970 open: isOpenedByThisTrigger
14971 };
14972 const element = useRenderElement("button", componentProps, {
14973 state,
14974 ref: [forwardedRef, registerTrigger, triggerElementRef],
14975 props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, {
14976 onMouseOver(event) {
14977 handleNestedTriggerHover(event.nativeEvent);
14978 },
14979 onFocus(event) {
14980 if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) {
14981 event.preventBaseUIHandler();
14982 }
14983 },
14984 onMouseLeave() {
14985 isNestedTriggerHoveredRef.current = false;
14986 nestedTriggerOpenTimeout.clear();
14987 pointerTypeRef.current = void 0;
14988 },
14989 onPointerEnter(event) {
14990 pointerTypeRef.current = event.pointerType;
14991 },
14992 onPointerDown(event) {
14993 pointerTypeRef.current = event.pointerType;
14994 store.set("closeOnClick", closeOnClick);
14995 if (closeOnClick && !store.select("open")) {
14996 store.cancelPendingOpen(event.nativeEvent);
14997 }
14998 },
14999 onClick(event) {
15000 if (closeOnClick && !store.select("open")) {
15001 store.cancelPendingOpen(event.nativeEvent);
15002 }
15003 },
15004 id: thisTriggerId,
15005 [TooltipTriggerDataAttributes.triggerDisabled]: disabled2 ? "" : void 0,
15006 [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : ""
15007 }, elementProps],
15008 stateAttributesMapping: triggerOpenStateMapping
15009 });
15010 return element;
15011 });
15012 if (true) TooltipTrigger.displayName = "TooltipTrigger";
15013
15014 // node_modules/@base-ui/react/esm/tooltip/portal/TooltipPortal.js
15015 var React110 = __toESM(require_react(), 1);
15016
15017 // node_modules/@base-ui/react/esm/tooltip/portal/TooltipPortalContext.js
15018 var React109 = __toESM(require_react(), 1);
15019 var TooltipPortalContext = /* @__PURE__ */ React109.createContext(void 0);
15020 if (true) TooltipPortalContext.displayName = "TooltipPortalContext";
15021 function useTooltipPortalContext() {
15022 const value = React109.useContext(TooltipPortalContext);
15023 if (value === void 0) {
15024 throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70));
15025 }
15026 return value;
15027 }
15028
15029 // node_modules/@base-ui/react/esm/tooltip/portal/TooltipPortal.js
15030 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1);
15031 var TooltipPortal = /* @__PURE__ */ React110.forwardRef(function TooltipPortal2(props, forwardedRef) {
15032 const {
15033 keepMounted = false,
15034 ...portalProps
15035 } = props;
15036 const store = useTooltipRootContext();
15037 const mounted = store.useState("mounted");
15038 const shouldRender = mounted || keepMounted;
15039 if (!shouldRender) {
15040 return null;
15041 }
15042 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TooltipPortalContext.Provider, {
15043 value: keepMounted,
15044 children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(FloatingPortalLite, {
15045 ref: forwardedRef,
15046 ...portalProps
15047 })
15048 });
15049 });
15050 if (true) TooltipPortal.displayName = "TooltipPortal";
15051
15052 // node_modules/@base-ui/react/esm/tooltip/positioner/TooltipPositioner.js
15053 var React112 = __toESM(require_react(), 1);
15054
15055 // node_modules/@base-ui/react/esm/tooltip/positioner/TooltipPositionerContext.js
15056 var React111 = __toESM(require_react(), 1);
15057 var TooltipPositionerContext = /* @__PURE__ */ React111.createContext(void 0);
15058 if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext";
15059 function useTooltipPositionerContext() {
15060 const context = React111.useContext(TooltipPositionerContext);
15061 if (context === void 0) {
15062 throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71));
15063 }
15064 return context;
15065 }
15066
15067 // node_modules/@base-ui/react/esm/tooltip/positioner/TooltipPositioner.js
15068 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1);
15069 var TooltipPositioner = /* @__PURE__ */ React112.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) {
15070 const {
15071 render,
15072 className,
15073 anchor,
15074 positionMethod = "absolute",
15075 side = "top",
15076 align = "center",
15077 sideOffset = 0,
15078 alignOffset = 0,
15079 collisionBoundary = "clipping-ancestors",
15080 collisionPadding = 5,
15081 arrowPadding = 5,
15082 sticky = false,
15083 disableAnchorTracking = false,
15084 collisionAvoidance = POPUP_COLLISION_AVOIDANCE,
15085 style,
15086 ...elementProps
15087 } = componentProps;
15088 const store = useTooltipRootContext();
15089 const keepMounted = useTooltipPortalContext();
15090 const open = store.useState("open");
15091 const mounted = store.useState("mounted");
15092 const trackCursorAxis = store.useState("trackCursorAxis");
15093 const disableHoverablePopup = store.useState("disableHoverablePopup");
15094 const floatingRootContext = store.useState("floatingRootContext");
15095 const instantType = store.useState("instantType");
15096 const transitionStatus = store.useState("transitionStatus");
15097 const hasViewport = store.useState("hasViewport");
15098 const positioning = useAnchorPositioning({
15099 anchor,
15100 positionMethod,
15101 floatingRootContext,
15102 mounted,
15103 side,
15104 sideOffset,
15105 align,
15106 alignOffset,
15107 collisionBoundary,
15108 collisionPadding,
15109 sticky,
15110 arrowPadding,
15111 disableAnchorTracking,
15112 keepMounted,
15113 collisionAvoidance,
15114 adaptiveOrigin: hasViewport ? adaptiveOrigin : void 0
15115 });
15116 const state = React112.useMemo(() => ({
15117 open,
15118 side: positioning.side,
15119 align: positioning.align,
15120 anchorHidden: positioning.anchorHidden,
15121 instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType
15122 }), [open, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]);
15123 const element = usePositioner(componentProps, state, {
15124 styles: positioning.positionerStyles,
15125 transitionStatus,
15126 props: elementProps,
15127 refs: [forwardedRef, store.useStateSetter("positionerElement")],
15128 hidden: !mounted,
15129 inert: !open || trackCursorAxis === "both" || disableHoverablePopup
15130 });
15131 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(TooltipPositionerContext.Provider, {
15132 value: positioning,
15133 children: element
15134 });
15135 });
15136 if (true) TooltipPositioner.displayName = "TooltipPositioner";
15137
15138 // node_modules/@base-ui/react/esm/tooltip/popup/TooltipPopup.js
15139 var React113 = __toESM(require_react(), 1);
15140 var stateAttributesMapping5 = {
15141 ...popupStateMapping,
15142 ...transitionStatusMapping
15143 };
15144 var TooltipPopup = /* @__PURE__ */ React113.forwardRef(function TooltipPopup2(componentProps, forwardedRef) {
15145 const {
15146 render,
15147 className,
15148 style,
15149 ...elementProps
15150 } = componentProps;
15151 const store = useTooltipRootContext();
15152 const {
15153 side,
15154 align
15155 } = useTooltipPositionerContext();
15156 const open = store.useState("open");
15157 const instantType = store.useState("instantType");
15158 const transitionStatus = store.useState("transitionStatus");
15159 const popupProps = store.useState("popupProps");
15160 const floatingContext = store.useState("floatingRootContext");
15161 const disabled2 = store.useState("disabled");
15162 const closeDelay = store.useState("closeDelay");
15163 useOpenChangeComplete({
15164 open,
15165 ref: store.context.popupRef,
15166 onComplete() {
15167 if (open) {
15168 store.context.onOpenChangeComplete?.(true);
15169 }
15170 }
15171 });
15172 useHoverFloatingInteraction(floatingContext, {
15173 enabled: !disabled2,
15174 closeDelay
15175 });
15176 const setPopupElement = store.useStateSetter("popupElement");
15177 const state = {
15178 open,
15179 side,
15180 align,
15181 instant: instantType,
15182 transitionStatus
15183 };
15184 const element = useRenderElement("div", componentProps, {
15185 state,
15186 ref: [forwardedRef, store.context.popupRef, setPopupElement],
15187 props: [popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps],
15188 stateAttributesMapping: stateAttributesMapping5
15189 });
15190 return element;
15191 });
15192 if (true) TooltipPopup.displayName = "TooltipPopup";
15193
15194 // node_modules/@base-ui/react/esm/tooltip/arrow/TooltipArrow.js
15195 var React114 = __toESM(require_react(), 1);
15196 var TooltipArrow = /* @__PURE__ */ React114.forwardRef(function TooltipArrow2(componentProps, forwardedRef) {
15197 const {
15198 render,
15199 className,
15200 style,
15201 ...elementProps
15202 } = componentProps;
15203 const store = useTooltipRootContext();
15204 const {
15205 arrowRef,
15206 side,
15207 align,
15208 arrowUncentered,
15209 arrowStyles
15210 } = useTooltipPositionerContext();
15211 const open = store.useState("open");
15212 const instantType = store.useState("instantType");
15213 const state = {
15214 open,
15215 side,
15216 align,
15217 uncentered: arrowUncentered,
15218 instant: instantType
15219 };
15220 const element = useRenderElement("div", componentProps, {
15221 state,
15222 ref: [forwardedRef, arrowRef],
15223 props: [{
15224 style: arrowStyles,
15225 "aria-hidden": true
15226 }, elementProps],
15227 stateAttributesMapping: popupStateMapping
15228 });
15229 return element;
15230 });
15231 if (true) TooltipArrow.displayName = "TooltipArrow";
15232
15233 // node_modules/@base-ui/react/esm/tooltip/provider/TooltipProvider.js
15234 var React115 = __toESM(require_react(), 1);
15235 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1);
15236 var TooltipProvider = function TooltipProvider2(props) {
15237 const {
15238 delay,
15239 closeDelay,
15240 timeout = 400
15241 } = props;
15242 const contextValue = React115.useMemo(() => ({
15243 delay,
15244 closeDelay
15245 }), [delay, closeDelay]);
15246 const delayValue = React115.useMemo(() => ({
15247 open: delay,
15248 close: closeDelay
15249 }), [delay, closeDelay]);
15250 return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TooltipProviderContext.Provider, {
15251 value: contextValue,
15252 children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(FloatingDelayGroup, {
15253 delay: delayValue,
15254 timeoutMs: timeout,
15255 children: props.children
15256 })
15257 });
15258 };
15259 if (true) TooltipProvider.displayName = "TooltipProvider";
15260
15261 // node_modules/@base-ui/react/esm/tooltip/viewport/TooltipViewport.js
15262 var React116 = __toESM(require_react(), 1);
15263
15264 // node_modules/@base-ui/react/esm/tooltip/viewport/TooltipViewportCssVars.js
15265 var TooltipViewportCssVars = /* @__PURE__ */ (function(TooltipViewportCssVars2) {
15266 TooltipViewportCssVars2["popupWidth"] = "--popup-width";
15267 TooltipViewportCssVars2["popupHeight"] = "--popup-height";
15268 return TooltipViewportCssVars2;
15269 })({});
15270
15271 // node_modules/@base-ui/react/esm/tooltip/viewport/TooltipViewport.js
15272 var stateAttributesMapping6 = {
15273 activationDirection: (value) => value ? {
15274 "data-activation-direction": value
15275 } : null
15276 };
15277 var TooltipViewport = /* @__PURE__ */ React116.forwardRef(function TooltipViewport2(componentProps, forwardedRef) {
15278 const {
15279 render,
15280 className,
15281 style,
15282 children,
15283 ...elementProps
15284 } = componentProps;
15285 const store = useTooltipRootContext();
15286 const positioner = useTooltipPositionerContext();
15287 const instantType = store.useState("instantType");
15288 const {
15289 children: childrenToRender,
15290 state: viewportState
15291 } = usePopupViewport({
15292 store,
15293 side: positioner.side,
15294 cssVars: TooltipViewportCssVars,
15295 children
15296 });
15297 const state = {
15298 activationDirection: viewportState.activationDirection,
15299 transitioning: viewportState.transitioning,
15300 instant: instantType
15301 };
15302 return useRenderElement("div", componentProps, {
15303 state,
15304 ref: forwardedRef,
15305 props: [elementProps, {
15306 children: childrenToRender
15307 }],
15308 stateAttributesMapping: stateAttributesMapping6
15309 });
15310 });
15311 if (true) TooltipViewport.displayName = "TooltipViewport";
15312
15313 // node_modules/@base-ui/react/esm/tooltip/store/TooltipHandle.js
15314 var TooltipHandle = class {
15315 /**
15316 * Internal store holding the tooltip state.
15317 * @internal
15318 */
15319 constructor() {
15320 this.store = new TooltipStore();
15321 }
15322 /**
15323 * Opens the tooltip and associates it with the trigger with the given ID.
15324 * The trigger must be a Tooltip.Trigger component with this handle passed as a prop.
15325 *
15326 * This method should only be called in an event handler or an effect (not during rendering).
15327 *
15328 * @param triggerId ID of the trigger to associate with the tooltip.
15329 */
15330 open(triggerId) {
15331 const triggerElement = triggerId ? this.store.context.triggerElements.getById(triggerId) : void 0;
15332 if (triggerId && !triggerElement) {
15333 throw new Error(true ? `Base UI: TooltipHandle.open: No trigger found with id "${triggerId}".` : formatErrorMessage_default(81, triggerId));
15334 }
15335 this.store.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement));
15336 }
15337 /**
15338 * Closes the tooltip.
15339 */
15340 close() {
15341 this.store.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, void 0));
15342 }
15343 /**
15344 * Indicates whether the tooltip is currently open.
15345 */
15346 get isOpen() {
15347 return this.store.select("open");
15348 }
15349 };
15350 function createTooltipHandle() {
15351 return new TooltipHandle();
15352 }
15353
15354 // node_modules/@base-ui/react/esm/use-render/useRender.js
15355 function useRender(params) {
15356 return useRenderElement(params.defaultTagName ?? "div", params, params);
15357 }
15358
15359 // packages/ui/build-module/button/button.mjs
15360 var import_element16 = __toESM(require_element(), 1);
15361 var import_i18n = __toESM(require_i18n(), 1);
15362 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1);
15363 import { speak } from "@wordpress/a11y";
15364 var STYLE_HASH_ATTRIBUTE = "data-wp-hash";
15365 function getRuntime() {
15366 const globalScope = globalThis;
15367 if (globalScope.__wpStyleRuntime) {
15368 return globalScope.__wpStyleRuntime;
15369 }
15370 globalScope.__wpStyleRuntime = {
15371 documents: /* @__PURE__ */ new Map(),
15372 styles: /* @__PURE__ */ new Map(),
15373 injectedStyles: /* @__PURE__ */ new WeakMap()
15374 };
15375 if (typeof document !== "undefined") {
15376 registerDocument(document);
15377 }
15378 return globalScope.__wpStyleRuntime;
15379 }
15380 function documentContainsStyleHash(targetDocument, hash) {
15381 if (!targetDocument.head) {
15382 return false;
15383 }
15384 for (const style of targetDocument.head.querySelectorAll(
15385 `style[${STYLE_HASH_ATTRIBUTE}]`
15386 )) {
15387 if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) {
15388 return true;
15389 }
15390 }
15391 return false;
15392 }
15393 function injectStyle(targetDocument, hash, css) {
15394 if (!targetDocument.head) {
15395 return;
15396 }
15397 const runtime = getRuntime();
15398 let injectedStyles = runtime.injectedStyles.get(targetDocument);
15399 if (!injectedStyles) {
15400 injectedStyles = /* @__PURE__ */ new Set();
15401 runtime.injectedStyles.set(targetDocument, injectedStyles);
15402 }
15403 if (injectedStyles.has(hash)) {
15404 return;
15405 }
15406 if (documentContainsStyleHash(targetDocument, hash)) {
15407 injectedStyles.add(hash);
15408 return;
15409 }
15410 const style = targetDocument.createElement("style");
15411 style.setAttribute(STYLE_HASH_ATTRIBUTE, hash);
15412 style.appendChild(targetDocument.createTextNode(css));
15413 targetDocument.head.appendChild(style);
15414 injectedStyles.add(hash);
15415 }
15416 function registerDocument(targetDocument) {
15417 const runtime = getRuntime();
15418 runtime.documents.set(
15419 targetDocument,
15420 (runtime.documents.get(targetDocument) ?? 0) + 1
15421 );
15422 for (const [hash, css] of runtime.styles) {
15423 injectStyle(targetDocument, hash, css);
15424 }
15425 return () => {
15426 const count = runtime.documents.get(targetDocument);
15427 if (count === void 0) {
15428 return;
15429 }
15430 if (count <= 1) {
15431 runtime.documents.delete(targetDocument);
15432 return;
15433 }
15434 runtime.documents.set(targetDocument, count - 1);
15435 };
15436 }
15437 function registerStyle(hash, css) {
15438 const runtime = getRuntime();
15439 runtime.styles.set(hash, css);
15440 for (const targetDocument of runtime.documents.keys()) {
15441 injectStyle(targetDocument, hash, css);
15442 }
15443 }
15444 if (typeof process === "undefined" || true) {
15445 registerStyle("459f56a7b7", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._97b0fc33c028be1a__button,.abbb272e2ce49bd6__is-unstyled{appearance:none;padding:0}._97b0fc33c028be1a__button{--wp-ui-button-font-weight:499;--wp-ui-button-background-color:var(--wpds-color-bg-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-fg-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-fg-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-fg-interactive-neutral-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:40px;--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:-4px;--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:padding-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._914b42f315c0e580__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&:before{aspect-ratio:1;border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid;border-block-end-color:transparent;border-block-start-color:var(--wp-ui-button-foreground-color);border-inline-end-color:var(--wp-ui-button-foreground-color);border-inline-start-color:transparent;border-radius:50%;box-sizing:border-box;content:"";display:block;height:var(--wp-ui-button-font-size);inset-inline-start:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);@media not (prefers-reduced-motion){transition:opacity .1s ease-out}}}._908205475f9f2a92__is-small{--wp-ui-button-padding-block:0;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:24px}._9f6fc6553aeb36fe__icon{margin:var(--wp-ui-button-icon-margin)}.dd460c965226cc77__is-brand{&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-fg-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-fg-interactive-brand-active,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-disabled:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-bg-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-background-color:var(--wpds-color-bg-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000)}}.e722a8f96726aa99__is-neutral{&.ad0619a3217c6a5b__is-minimal[aria-pressed=true],&.b50b3358c5fb4d0b__is-solid{--wp-ui-button-background-color:var(--wpds-color-bg-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-fg-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-fg-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-fg-interactive-neutral-strong-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-fg-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-bg-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-bg-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000)}}.abbb272e2ce49bd6__is-unstyled{background:none;border:none;min-width:unset}.cf59cf1b69629838__is-compact{--wp-ui-button-height:32px}._914b42f315c0e580__is-loading{color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}*{opacity:0}&:before{opacity:1;transition-delay:.05s;@media not (prefers-reduced-motion){animation:_5a1d53da6f830c8d__loading-animation 1s linear infinite}}}}@keyframes _5a1d53da6f830c8d__loading-animation{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}}');
15446 }
15447 var style_default = { "button": "_97b0fc33c028be1a__button", "is-unstyled": "abbb272e2ce49bd6__is-unstyled", "is-loading": "_914b42f315c0e580__is-loading", "is-small": "_908205475f9f2a92__is-small", "icon": "_9f6fc6553aeb36fe__icon", "is-brand": "dd460c965226cc77__is-brand", "is-outline": "_62d5a778b7b258ee__is-outline", "is-minimal": "ad0619a3217c6a5b__is-minimal", "is-neutral": "e722a8f96726aa99__is-neutral", "is-solid": "b50b3358c5fb4d0b__is-solid", "is-compact": "cf59cf1b69629838__is-compact", "loading-animation": "_5a1d53da6f830c8d__loading-animation" };
15448 if (typeof process === "undefined" || true) {
15449 registerStyle("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
15450 }
15451 var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
15452 if (typeof process === "undefined" || true) {
15453 registerStyle("693cd16544", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._08e8a2e44959f892__outset-ring--focus,._970d04df7376df67__outset-ring--focus-within-except-active,.c5cb3ee4bddaa8e4__outset-ring--focus-within-visible,.cd83dfc2126a0846__outset-ring--focus-within,.d0541bc9dd9dc7b6__outset-ring--focus-visible,.e25b2bdd7aa21721__outset-ring--focus-except-active,.ecadb9e080e2dfa5__outset-ring--focus-parent-visible{@media not (prefers-reduced-motion){--_gcd-a-transition:outline 0.1s ease-out;transition:outline .1s ease-out}outline:0 solid transparent;outline-offset:1px}._08e8a2e44959f892__outset-ring--focus:focus,._970d04df7376df67__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.c5cb3ee4bddaa8e4__outset-ring--focus-within-visible:focus-within:has(:focus-visible),.cd83dfc2126a0846__outset-ring--focus-within:focus-within,.d0541bc9dd9dc7b6__outset-ring--focus-visible:focus-visible,.e25b2bdd7aa21721__outset-ring--focus-except-active:focus:not(:active),:focus-visible .ecadb9e080e2dfa5__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9))}}}");
15454 }
15455 var focus_default = { "outset-ring--focus": "_08e8a2e44959f892__outset-ring--focus", "outset-ring--focus-except-active": "e25b2bdd7aa21721__outset-ring--focus-except-active", "outset-ring--focus-visible": "d0541bc9dd9dc7b6__outset-ring--focus-visible", "outset-ring--focus-within": "cd83dfc2126a0846__outset-ring--focus-within", "outset-ring--focus-within-except-active": "_970d04df7376df67__outset-ring--focus-within-except-active", "outset-ring--focus-within-visible": "c5cb3ee4bddaa8e4__outset-ring--focus-within-visible", "outset-ring--focus-parent-visible": "ecadb9e080e2dfa5__outset-ring--focus-parent-visible" };
15456 if (typeof process === "undefined" || true) {
15457 registerStyle("d5c1b736fd", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-fg-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-fg-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}");
15458 }
15459 var global_css_defense_default = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" };
15460 var Button3 = (0, import_element16.forwardRef)(
15461 function Button22({
15462 tone = "brand",
15463 variant = "solid",
15464 size: size4 = "default",
15465 className,
15466 focusableWhenDisabled = true,
15467 disabled: disabled2,
15468 loading,
15469 loadingAnnouncement = (0, import_i18n.__)("Loading"),
15470 children,
15471 ...props
15472 }, ref) {
15473 const mergedClassName = clsx_default(
15474 global_css_defense_default.button,
15475 resets_default["box-sizing"],
15476 focus_default["outset-ring--focus-except-active"],
15477 variant !== "unstyled" && style_default.button,
15478 style_default[`is-${tone}`],
15479 style_default[`is-${variant}`],
15480 style_default[`is-${size4}`],
15481 loading && style_default["is-loading"],
15482 className
15483 );
15484 (0, import_element16.useEffect)(() => {
15485 if (loading && loadingAnnouncement) {
15486 speak(loadingAnnouncement);
15487 }
15488 }, [loading, loadingAnnouncement]);
15489 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
15490 Button,
15491 {
15492 ref,
15493 className: mergedClassName,
15494 focusableWhenDisabled,
15495 disabled: disabled2 ?? loading,
15496 ...props,
15497 children
15498 }
15499 );
15500 }
15501 );
15502
15503 // packages/ui/build-module/button/icon.mjs
15504 var import_element18 = __toESM(require_element(), 1);
15505
15506 // packages/ui/build-module/icon/icon.mjs
15507 var import_element17 = __toESM(require_element(), 1);
15508 var import_primitives4 = __toESM(require_primitives(), 1);
15509 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1);
15510 var Icon = (0, import_element17.forwardRef)(function Icon2({ icon, size: size4 = 24, ...restProps }, ref) {
15511 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
15512 import_primitives4.SVG,
15513 {
15514 ref,
15515 fill: "currentColor",
15516 ...icon.props,
15517 ...restProps,
15518 width: size4,
15519 height: size4
15520 }
15521 );
15522 });
15523
15524 // packages/ui/build-module/button/icon.mjs
15525 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1);
15526 var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash";
15527 function getRuntime2() {
15528 const globalScope = globalThis;
15529 if (globalScope.__wpStyleRuntime) {
15530 return globalScope.__wpStyleRuntime;
15531 }
15532 globalScope.__wpStyleRuntime = {
15533 documents: /* @__PURE__ */ new Map(),
15534 styles: /* @__PURE__ */ new Map(),
15535 injectedStyles: /* @__PURE__ */ new WeakMap()
15536 };
15537 if (typeof document !== "undefined") {
15538 registerDocument2(document);
15539 }
15540 return globalScope.__wpStyleRuntime;
15541 }
15542 function documentContainsStyleHash2(targetDocument, hash) {
15543 if (!targetDocument.head) {
15544 return false;
15545 }
15546 for (const style of targetDocument.head.querySelectorAll(
15547 `style[${STYLE_HASH_ATTRIBUTE2}]`
15548 )) {
15549 if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) {
15550 return true;
15551 }
15552 }
15553 return false;
15554 }
15555 function injectStyle2(targetDocument, hash, css) {
15556 if (!targetDocument.head) {
15557 return;
15558 }
15559 const runtime = getRuntime2();
15560 let injectedStyles = runtime.injectedStyles.get(targetDocument);
15561 if (!injectedStyles) {
15562 injectedStyles = /* @__PURE__ */ new Set();
15563 runtime.injectedStyles.set(targetDocument, injectedStyles);
15564 }
15565 if (injectedStyles.has(hash)) {
15566 return;
15567 }
15568 if (documentContainsStyleHash2(targetDocument, hash)) {
15569 injectedStyles.add(hash);
15570 return;
15571 }
15572 const style = targetDocument.createElement("style");
15573 style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash);
15574 style.appendChild(targetDocument.createTextNode(css));
15575 targetDocument.head.appendChild(style);
15576 injectedStyles.add(hash);
15577 }
15578 function registerDocument2(targetDocument) {
15579 const runtime = getRuntime2();
15580 runtime.documents.set(
15581 targetDocument,
15582 (runtime.documents.get(targetDocument) ?? 0) + 1
15583 );
15584 for (const [hash, css] of runtime.styles) {
15585 injectStyle2(targetDocument, hash, css);
15586 }
15587 return () => {
15588 const count = runtime.documents.get(targetDocument);
15589 if (count === void 0) {
15590 return;
15591 }
15592 if (count <= 1) {
15593 runtime.documents.delete(targetDocument);
15594 return;
15595 }
15596 runtime.documents.set(targetDocument, count - 1);
15597 };
15598 }
15599 function registerStyle2(hash, css) {
15600 const runtime = getRuntime2();
15601 runtime.styles.set(hash, css);
15602 for (const targetDocument of runtime.documents.keys()) {
15603 injectStyle2(targetDocument, hash, css);
15604 }
15605 }
15606 if (typeof process === "undefined" || true) {
15607 registerStyle2("459f56a7b7", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._97b0fc33c028be1a__button,.abbb272e2ce49bd6__is-unstyled{appearance:none;padding:0}._97b0fc33c028be1a__button{--wp-ui-button-font-weight:499;--wp-ui-button-background-color:var(--wpds-color-bg-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-fg-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-fg-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-fg-interactive-neutral-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:40px;--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:-4px;--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:padding-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._914b42f315c0e580__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&:before{aspect-ratio:1;border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid;border-block-end-color:transparent;border-block-start-color:var(--wp-ui-button-foreground-color);border-inline-end-color:var(--wp-ui-button-foreground-color);border-inline-start-color:transparent;border-radius:50%;box-sizing:border-box;content:"";display:block;height:var(--wp-ui-button-font-size);inset-inline-start:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);@media not (prefers-reduced-motion){transition:opacity .1s ease-out}}}._908205475f9f2a92__is-small{--wp-ui-button-padding-block:0;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:24px}._9f6fc6553aeb36fe__icon{margin:var(--wp-ui-button-icon-margin)}.dd460c965226cc77__is-brand{&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-fg-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-fg-interactive-brand-active,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-disabled:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-bg-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-background-color:var(--wpds-color-bg-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000)}}.e722a8f96726aa99__is-neutral{&.ad0619a3217c6a5b__is-minimal[aria-pressed=true],&.b50b3358c5fb4d0b__is-solid{--wp-ui-button-background-color:var(--wpds-color-bg-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-fg-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-fg-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-fg-interactive-neutral-strong-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-fg-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-bg-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-bg-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-bg-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000)}}.abbb272e2ce49bd6__is-unstyled{background:none;border:none;min-width:unset}.cf59cf1b69629838__is-compact{--wp-ui-button-height:32px}._914b42f315c0e580__is-loading{color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}*{opacity:0}&:before{opacity:1;transition-delay:.05s;@media not (prefers-reduced-motion){animation:_5a1d53da6f830c8d__loading-animation 1s linear infinite}}}}@keyframes _5a1d53da6f830c8d__loading-animation{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}}');
15608 }
15609 var style_default2 = { "button": "_97b0fc33c028be1a__button", "is-unstyled": "abbb272e2ce49bd6__is-unstyled", "is-loading": "_914b42f315c0e580__is-loading", "is-small": "_908205475f9f2a92__is-small", "icon": "_9f6fc6553aeb36fe__icon", "is-brand": "dd460c965226cc77__is-brand", "is-outline": "_62d5a778b7b258ee__is-outline", "is-minimal": "ad0619a3217c6a5b__is-minimal", "is-neutral": "e722a8f96726aa99__is-neutral", "is-solid": "b50b3358c5fb4d0b__is-solid", "is-compact": "cf59cf1b69629838__is-compact", "loading-animation": "_5a1d53da6f830c8d__loading-animation" };
15610 var ButtonIcon = (0, import_element18.forwardRef)(
15611 function ButtonIcon2({ className, icon, ...props }, ref) {
15612 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
15613 Icon,
15614 {
15615 ref,
15616 icon,
15617 className: clsx_default(style_default2.icon, className),
15618 size: 24,
15619 ...props
15620 }
15621 );
15622 }
15623 );
15624
15625 // packages/ui/build-module/button/index.mjs
15626 ButtonIcon.displayName = "Button.Icon";
15627 var Button4 = Object.assign(Button3, {
15628 /**
15629 * An icon component specifically designed to work well when rendered inside
15630 * a `Button` component.
15631 */
15632 Icon: ButtonIcon
15633 });
15634
15635 // packages/ui/build-module/utils/render-slot-with-children.mjs
15636 var import_element19 = __toESM(require_element(), 1);
15637 function renderSlotWithChildren(slot, defaultSlot, children) {
15638 return (0, import_element19.cloneElement)(slot ?? defaultSlot, { children });
15639 }
15640
15641 // packages/ui/build-module/lock-unlock.mjs
15642 var import_private_apis = __toESM(require_private_apis(), 1);
15643 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
15644 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
15645 "@wordpress/ui"
15646 );
15647
15648 // packages/ui/build-module/stack/stack.mjs
15649 var import_element20 = __toESM(require_element(), 1);
15650 var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash";
15651 function getRuntime3() {
15652 const globalScope = globalThis;
15653 if (globalScope.__wpStyleRuntime) {
15654 return globalScope.__wpStyleRuntime;
15655 }
15656 globalScope.__wpStyleRuntime = {
15657 documents: /* @__PURE__ */ new Map(),
15658 styles: /* @__PURE__ */ new Map(),
15659 injectedStyles: /* @__PURE__ */ new WeakMap()
15660 };
15661 if (typeof document !== "undefined") {
15662 registerDocument3(document);
15663 }
15664 return globalScope.__wpStyleRuntime;
15665 }
15666 function documentContainsStyleHash3(targetDocument, hash) {
15667 if (!targetDocument.head) {
15668 return false;
15669 }
15670 for (const style of targetDocument.head.querySelectorAll(
15671 `style[${STYLE_HASH_ATTRIBUTE3}]`
15672 )) {
15673 if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) {
15674 return true;
15675 }
15676 }
15677 return false;
15678 }
15679 function injectStyle3(targetDocument, hash, css) {
15680 if (!targetDocument.head) {
15681 return;
15682 }
15683 const runtime = getRuntime3();
15684 let injectedStyles = runtime.injectedStyles.get(targetDocument);
15685 if (!injectedStyles) {
15686 injectedStyles = /* @__PURE__ */ new Set();
15687 runtime.injectedStyles.set(targetDocument, injectedStyles);
15688 }
15689 if (injectedStyles.has(hash)) {
15690 return;
15691 }
15692 if (documentContainsStyleHash3(targetDocument, hash)) {
15693 injectedStyles.add(hash);
15694 return;
15695 }
15696 const style = targetDocument.createElement("style");
15697 style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash);
15698 style.appendChild(targetDocument.createTextNode(css));
15699 targetDocument.head.appendChild(style);
15700 injectedStyles.add(hash);
15701 }
15702 function registerDocument3(targetDocument) {
15703 const runtime = getRuntime3();
15704 runtime.documents.set(
15705 targetDocument,
15706 (runtime.documents.get(targetDocument) ?? 0) + 1
15707 );
15708 for (const [hash, css] of runtime.styles) {
15709 injectStyle3(targetDocument, hash, css);
15710 }
15711 return () => {
15712 const count = runtime.documents.get(targetDocument);
15713 if (count === void 0) {
15714 return;
15715 }
15716 if (count <= 1) {
15717 runtime.documents.delete(targetDocument);
15718 return;
15719 }
15720 runtime.documents.set(targetDocument, count - 1);
15721 };
15722 }
15723 function registerStyle3(hash, css) {
15724 const runtime = getRuntime3();
15725 runtime.styles.set(hash, css);
15726 for (const targetDocument of runtime.documents.keys()) {
15727 injectStyle3(targetDocument, hash, css);
15728 }
15729 }
15730 if (typeof process === "undefined" || true) {
15731 registerStyle3("32aba35fe1", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._19ce0419607e1896__stack{display:flex}}}");
15732 }
15733 var style_default3 = { "stack": "_19ce0419607e1896__stack" };
15734 var gapTokens = {
15735 xs: "var(--wpds-dimension-gap-xs, 4px)",
15736 sm: "var(--wpds-dimension-gap-sm, 8px)",
15737 md: "var(--wpds-dimension-gap-md, 12px)",
15738 lg: "var(--wpds-dimension-gap-lg, 16px)",
15739 xl: "var(--wpds-dimension-gap-xl, 24px)",
15740 "2xl": "var(--wpds-dimension-gap-2xl, 32px)",
15741 "3xl": "var(--wpds-dimension-gap-3xl, 40px)"
15742 };
15743 var Stack = (0, import_element20.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render, ...props }, ref) {
15744 const style = {
15745 gap: gap && gapTokens[gap],
15746 alignItems: align,
15747 justifyContent: justify,
15748 flexDirection: direction,
15749 flexWrap: wrap
15750 };
15751 const element = useRender({
15752 render,
15753 ref,
15754 props: mergeProps(props, { style, className: style_default3.stack })
15755 });
15756 return element;
15757 });
15758
15759 // packages/ui/build-module/icon-button/icon-button.mjs
15760 var import_element25 = __toESM(require_element(), 1);
15761
15762 // packages/ui/build-module/tooltip/popup.mjs
15763 var import_element23 = __toESM(require_element(), 1);
15764 var import_theme = __toESM(require_theme(), 1);
15765
15766 // packages/ui/build-module/tooltip/portal.mjs
15767 var import_element21 = __toESM(require_element(), 1);
15768
15769 // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs
15770 var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash";
15771 function getRuntime4() {
15772 const globalScope = globalThis;
15773 if (globalScope.__wpStyleRuntime) {
15774 return globalScope.__wpStyleRuntime;
15775 }
15776 globalScope.__wpStyleRuntime = {
15777 documents: /* @__PURE__ */ new Map(),
15778 styles: /* @__PURE__ */ new Map(),
15779 injectedStyles: /* @__PURE__ */ new WeakMap()
15780 };
15781 if (typeof document !== "undefined") {
15782 registerDocument4(document);
15783 }
15784 return globalScope.__wpStyleRuntime;
15785 }
15786 function documentContainsStyleHash4(targetDocument, hash) {
15787 if (!targetDocument.head) {
15788 return false;
15789 }
15790 for (const style of targetDocument.head.querySelectorAll(
15791 `style[${STYLE_HASH_ATTRIBUTE4}]`
15792 )) {
15793 if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) {
15794 return true;
15795 }
15796 }
15797 return false;
15798 }
15799 function injectStyle4(targetDocument, hash, css) {
15800 if (!targetDocument.head) {
15801 return;
15802 }
15803 const runtime = getRuntime4();
15804 let injectedStyles = runtime.injectedStyles.get(targetDocument);
15805 if (!injectedStyles) {
15806 injectedStyles = /* @__PURE__ */ new Set();
15807 runtime.injectedStyles.set(targetDocument, injectedStyles);
15808 }
15809 if (injectedStyles.has(hash)) {
15810 return;
15811 }
15812 if (documentContainsStyleHash4(targetDocument, hash)) {
15813 injectedStyles.add(hash);
15814 return;
15815 }
15816 const style = targetDocument.createElement("style");
15817 style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash);
15818 style.appendChild(targetDocument.createTextNode(css));
15819 targetDocument.head.appendChild(style);
15820 injectedStyles.add(hash);
15821 }
15822 function registerDocument4(targetDocument) {
15823 const runtime = getRuntime4();
15824 runtime.documents.set(
15825 targetDocument,
15826 (runtime.documents.get(targetDocument) ?? 0) + 1
15827 );
15828 for (const [hash, css] of runtime.styles) {
15829 injectStyle4(targetDocument, hash, css);
15830 }
15831 return () => {
15832 const count = runtime.documents.get(targetDocument);
15833 if (count === void 0) {
15834 return;
15835 }
15836 if (count <= 1) {
15837 runtime.documents.delete(targetDocument);
15838 return;
15839 }
15840 runtime.documents.set(targetDocument, count - 1);
15841 };
15842 }
15843 function registerStyle4(hash, css) {
15844 const runtime = getRuntime4();
15845 runtime.styles.set(hash, css);
15846 for (const targetDocument of runtime.documents.keys()) {
15847 injectStyle4(targetDocument, hash, css);
15848 }
15849 }
15850 if (typeof process === "undefined" || true) {
15851 registerStyle4("be37f31c1e", "._11fc52b637ff8a7e__slot{inset:0;isolation:isolate;pointer-events:none;position:fixed;z-index:1000000003}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._11fc52b637ff8a7e__slot>*{pointer-events:auto}}}");
15852 }
15853 var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" };
15854 var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot";
15855 function resolveOwnerDocument() {
15856 return typeof document === "undefined" ? null : document;
15857 }
15858 function isInWordPressEnvironment() {
15859 let topWp;
15860 try {
15861 topWp = window.top?.wp;
15862 } catch {
15863 }
15864 const wp = topWp ?? window.wp;
15865 return typeof wp?.components === "object" && wp.components !== null;
15866 }
15867 var cachedSlot = null;
15868 function createSlot(ownerDocument2) {
15869 const element = ownerDocument2.createElement("div");
15870 element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, "");
15871 if (wp_compat_overlay_slot_default.slot) {
15872 element.classList.add(wp_compat_overlay_slot_default.slot);
15873 }
15874 ownerDocument2.body.appendChild(element);
15875 return element;
15876 }
15877 function getWpCompatOverlaySlot() {
15878 if (typeof window === "undefined") {
15879 return void 0;
15880 }
15881 if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) {
15882 return void 0;
15883 }
15884 const ownerDocument2 = resolveOwnerDocument();
15885 if (!ownerDocument2 || !ownerDocument2.body) {
15886 return void 0;
15887 }
15888 if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) {
15889 return cachedSlot;
15890 }
15891 const existing = ownerDocument2.querySelector(
15892 `[${WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]`
15893 );
15894 if (existing instanceof HTMLDivElement) {
15895 cachedSlot = existing;
15896 return existing;
15897 }
15898 if (cachedSlot?.isConnected) {
15899 cachedSlot.remove();
15900 }
15901 cachedSlot = createSlot(ownerDocument2);
15902 return cachedSlot;
15903 }
15904
15905 // packages/ui/build-module/tooltip/portal.mjs
15906 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1);
15907 var Portal = (0, import_element21.forwardRef)(
15908 function TooltipPortal3({ container, ...restProps }, ref) {
15909 return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
15910 index_parts_exports3.Portal,
15911 {
15912 container: container ?? getWpCompatOverlaySlot(),
15913 ...restProps,
15914 ref
15915 }
15916 );
15917 }
15918 );
15919
15920 // packages/ui/build-module/tooltip/positioner.mjs
15921 var import_element22 = __toESM(require_element(), 1);
15922 var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1);
15923 var STYLE_HASH_ATTRIBUTE5 = "data-wp-hash";
15924 function getRuntime5() {
15925 const globalScope = globalThis;
15926 if (globalScope.__wpStyleRuntime) {
15927 return globalScope.__wpStyleRuntime;
15928 }
15929 globalScope.__wpStyleRuntime = {
15930 documents: /* @__PURE__ */ new Map(),
15931 styles: /* @__PURE__ */ new Map(),
15932 injectedStyles: /* @__PURE__ */ new WeakMap()
15933 };
15934 if (typeof document !== "undefined") {
15935 registerDocument5(document);
15936 }
15937 return globalScope.__wpStyleRuntime;
15938 }
15939 function documentContainsStyleHash5(targetDocument, hash) {
15940 if (!targetDocument.head) {
15941 return false;
15942 }
15943 for (const style of targetDocument.head.querySelectorAll(
15944 `style[${STYLE_HASH_ATTRIBUTE5}]`
15945 )) {
15946 if (style.getAttribute(STYLE_HASH_ATTRIBUTE5) === hash) {
15947 return true;
15948 }
15949 }
15950 return false;
15951 }
15952 function injectStyle5(targetDocument, hash, css) {
15953 if (!targetDocument.head) {
15954 return;
15955 }
15956 const runtime = getRuntime5();
15957 let injectedStyles = runtime.injectedStyles.get(targetDocument);
15958 if (!injectedStyles) {
15959 injectedStyles = /* @__PURE__ */ new Set();
15960 runtime.injectedStyles.set(targetDocument, injectedStyles);
15961 }
15962 if (injectedStyles.has(hash)) {
15963 return;
15964 }
15965 if (documentContainsStyleHash5(targetDocument, hash)) {
15966 injectedStyles.add(hash);
15967 return;
15968 }
15969 const style = targetDocument.createElement("style");
15970 style.setAttribute(STYLE_HASH_ATTRIBUTE5, hash);
15971 style.appendChild(targetDocument.createTextNode(css));
15972 targetDocument.head.appendChild(style);
15973 injectedStyles.add(hash);
15974 }
15975 function registerDocument5(targetDocument) {
15976 const runtime = getRuntime5();
15977 runtime.documents.set(
15978 targetDocument,
15979 (runtime.documents.get(targetDocument) ?? 0) + 1
15980 );
15981 for (const [hash, css] of runtime.styles) {
15982 injectStyle5(targetDocument, hash, css);
15983 }
15984 return () => {
15985 const count = runtime.documents.get(targetDocument);
15986 if (count === void 0) {
15987 return;
15988 }
15989 if (count <= 1) {
15990 runtime.documents.delete(targetDocument);
15991 return;
15992 }
15993 runtime.documents.set(targetDocument, count - 1);
15994 };
15995 }
15996 function registerStyle5(hash, css) {
15997 const runtime = getRuntime5();
15998 runtime.styles.set(hash, css);
15999 for (const targetDocument of runtime.documents.keys()) {
16000 injectStyle5(targetDocument, hash, css);
16001 }
16002 }
16003 if (typeof process === "undefined" || true) {
16004 registerStyle5("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
16005 }
16006 var resets_default2 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
16007 if (typeof process === "undefined" || true) {
16008 registerStyle5("4811d023d1", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-sm,0 1px 2px 0 #0000000d,0 2px 3px 0 #0000000a,0 6px 6px 0 #00000008,0 8px 8px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}');
16009 }
16010 var style_default4 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
16011 var Positioner = (0, import_element22.forwardRef)(
16012 function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) {
16013 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
16014 index_parts_exports3.Positioner,
16015 {
16016 ref,
16017 align,
16018 side,
16019 sideOffset,
16020 ...props,
16021 className: clsx_default(
16022 resets_default2["box-sizing"],
16023 style_default4.positioner,
16024 className
16025 )
16026 }
16027 );
16028 }
16029 );
16030
16031 // packages/ui/build-module/tooltip/popup.mjs
16032 var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1);
16033 var STYLE_HASH_ATTRIBUTE6 = "data-wp-hash";
16034 function getRuntime6() {
16035 const globalScope = globalThis;
16036 if (globalScope.__wpStyleRuntime) {
16037 return globalScope.__wpStyleRuntime;
16038 }
16039 globalScope.__wpStyleRuntime = {
16040 documents: /* @__PURE__ */ new Map(),
16041 styles: /* @__PURE__ */ new Map(),
16042 injectedStyles: /* @__PURE__ */ new WeakMap()
16043 };
16044 if (typeof document !== "undefined") {
16045 registerDocument6(document);
16046 }
16047 return globalScope.__wpStyleRuntime;
16048 }
16049 function documentContainsStyleHash6(targetDocument, hash) {
16050 if (!targetDocument.head) {
16051 return false;
16052 }
16053 for (const style of targetDocument.head.querySelectorAll(
16054 `style[${STYLE_HASH_ATTRIBUTE6}]`
16055 )) {
16056 if (style.getAttribute(STYLE_HASH_ATTRIBUTE6) === hash) {
16057 return true;
16058 }
16059 }
16060 return false;
16061 }
16062 function injectStyle6(targetDocument, hash, css) {
16063 if (!targetDocument.head) {
16064 return;
16065 }
16066 const runtime = getRuntime6();
16067 let injectedStyles = runtime.injectedStyles.get(targetDocument);
16068 if (!injectedStyles) {
16069 injectedStyles = /* @__PURE__ */ new Set();
16070 runtime.injectedStyles.set(targetDocument, injectedStyles);
16071 }
16072 if (injectedStyles.has(hash)) {
16073 return;
16074 }
16075 if (documentContainsStyleHash6(targetDocument, hash)) {
16076 injectedStyles.add(hash);
16077 return;
16078 }
16079 const style = targetDocument.createElement("style");
16080 style.setAttribute(STYLE_HASH_ATTRIBUTE6, hash);
16081 style.appendChild(targetDocument.createTextNode(css));
16082 targetDocument.head.appendChild(style);
16083 injectedStyles.add(hash);
16084 }
16085 function registerDocument6(targetDocument) {
16086 const runtime = getRuntime6();
16087 runtime.documents.set(
16088 targetDocument,
16089 (runtime.documents.get(targetDocument) ?? 0) + 1
16090 );
16091 for (const [hash, css] of runtime.styles) {
16092 injectStyle6(targetDocument, hash, css);
16093 }
16094 return () => {
16095 const count = runtime.documents.get(targetDocument);
16096 if (count === void 0) {
16097 return;
16098 }
16099 if (count <= 1) {
16100 runtime.documents.delete(targetDocument);
16101 return;
16102 }
16103 runtime.documents.set(targetDocument, count - 1);
16104 };
16105 }
16106 function registerStyle6(hash, css) {
16107 const runtime = getRuntime6();
16108 runtime.styles.set(hash, css);
16109 for (const targetDocument of runtime.documents.keys()) {
16110 injectStyle6(targetDocument, hash, css);
16111 }
16112 }
16113 if (typeof process === "undefined" || true) {
16114 registerStyle6("4811d023d1", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-sm,0 1px 2px 0 #0000000d,0 2px 3px 0 #0000000a,0 6px 6px 0 #00000008,0 8px 8px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}');
16115 }
16116 var style_default5 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
16117 var ThemeProvider = unlock(import_theme.privateApis).ThemeProvider;
16118 var POPUP_COLOR = { background: "#1e1e1e" };
16119 var Popup = (0, import_element23.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) {
16120 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
16121 index_parts_exports3.Popup,
16122 {
16123 ref,
16124 className: clsx_default(style_default5.popup, className),
16125 ...props,
16126 children
16127 }
16128 ) });
16129 const positionedPopup = renderSlotWithChildren(
16130 positioner,
16131 /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Positioner, {}),
16132 popupContent
16133 );
16134 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Portal, {}), positionedPopup);
16135 });
16136
16137 // packages/ui/build-module/tooltip/trigger.mjs
16138 var import_element24 = __toESM(require_element(), 1);
16139 var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1);
16140 var Trigger = (0, import_element24.forwardRef)(
16141 function TooltipTrigger3(props, ref) {
16142 return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(index_parts_exports3.Trigger, { ref, ...props });
16143 }
16144 );
16145
16146 // packages/ui/build-module/tooltip/root.mjs
16147 var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1);
16148 function Root(props) {
16149 return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(index_parts_exports3.Root, { ...props });
16150 }
16151
16152 // packages/ui/build-module/tooltip/provider.mjs
16153 var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1);
16154 function Provider({ ...props }) {
16155 return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(index_parts_exports3.Provider, { ...props });
16156 }
16157
16158 // packages/ui/build-module/icon-button/icon-button.mjs
16159 var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1);
16160 var STYLE_HASH_ATTRIBUTE7 = "data-wp-hash";
16161 function getRuntime7() {
16162 const globalScope = globalThis;
16163 if (globalScope.__wpStyleRuntime) {
16164 return globalScope.__wpStyleRuntime;
16165 }
16166 globalScope.__wpStyleRuntime = {
16167 documents: /* @__PURE__ */ new Map(),
16168 styles: /* @__PURE__ */ new Map(),
16169 injectedStyles: /* @__PURE__ */ new WeakMap()
16170 };
16171 if (typeof document !== "undefined") {
16172 registerDocument7(document);
16173 }
16174 return globalScope.__wpStyleRuntime;
16175 }
16176 function documentContainsStyleHash7(targetDocument, hash) {
16177 if (!targetDocument.head) {
16178 return false;
16179 }
16180 for (const style of targetDocument.head.querySelectorAll(
16181 `style[${STYLE_HASH_ATTRIBUTE7}]`
16182 )) {
16183 if (style.getAttribute(STYLE_HASH_ATTRIBUTE7) === hash) {
16184 return true;
16185 }
16186 }
16187 return false;
16188 }
16189 function injectStyle7(targetDocument, hash, css) {
16190 if (!targetDocument.head) {
16191 return;
16192 }
16193 const runtime = getRuntime7();
16194 let injectedStyles = runtime.injectedStyles.get(targetDocument);
16195 if (!injectedStyles) {
16196 injectedStyles = /* @__PURE__ */ new Set();
16197 runtime.injectedStyles.set(targetDocument, injectedStyles);
16198 }
16199 if (injectedStyles.has(hash)) {
16200 return;
16201 }
16202 if (documentContainsStyleHash7(targetDocument, hash)) {
16203 injectedStyles.add(hash);
16204 return;
16205 }
16206 const style = targetDocument.createElement("style");
16207 style.setAttribute(STYLE_HASH_ATTRIBUTE7, hash);
16208 style.appendChild(targetDocument.createTextNode(css));
16209 targetDocument.head.appendChild(style);
16210 injectedStyles.add(hash);
16211 }
16212 function registerDocument7(targetDocument) {
16213 const runtime = getRuntime7();
16214 runtime.documents.set(
16215 targetDocument,
16216 (runtime.documents.get(targetDocument) ?? 0) + 1
16217 );
16218 for (const [hash, css] of runtime.styles) {
16219 injectStyle7(targetDocument, hash, css);
16220 }
16221 return () => {
16222 const count = runtime.documents.get(targetDocument);
16223 if (count === void 0) {
16224 return;
16225 }
16226 if (count <= 1) {
16227 runtime.documents.delete(targetDocument);
16228 return;
16229 }
16230 runtime.documents.set(targetDocument, count - 1);
16231 };
16232 }
16233 function registerStyle7(hash, css) {
16234 const runtime = getRuntime7();
16235 runtime.styles.set(hash, css);
16236 for (const targetDocument of runtime.documents.keys()) {
16237 injectStyle7(targetDocument, hash, css);
16238 }
16239 }
16240 if (typeof process === "undefined" || true) {
16241 registerStyle7("65cec4cf71", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer compositions{._28cfdc260e755391__icon-button{--wp-ui-button-aspect-ratio:1;--wp-ui-button-padding-inline:0;--wp-ui-button-min-width:unset}.f1c70d719989a85a__icon{margin:-1px}}}");
16242 }
16243 var style_default6 = { "icon-button": "_28cfdc260e755391__icon-button", "icon": "f1c70d719989a85a__icon" };
16244 var IconButton = (0, import_element25.forwardRef)(
16245 function IconButton2({
16246 label,
16247 className,
16248 // Prevent accidental forwarding of `children`
16249 children: _children,
16250 disabled: disabled2,
16251 focusableWhenDisabled = true,
16252 icon,
16253 size: size4,
16254 shortcut,
16255 positioner,
16256 ...restProps
16257 }, ref) {
16258 const classes = clsx_default(style_default6["icon-button"], className);
16259 return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Provider, { delay: 0, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Root, { children: [
16260 /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
16261 Trigger,
16262 {
16263 ref,
16264 disabled: disabled2 && !focusableWhenDisabled,
16265 render: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
16266 Button4,
16267 {
16268 ...restProps,
16269 size: size4,
16270 "aria-label": label,
16271 "aria-keyshortcuts": shortcut?.ariaKeyShortcut,
16272 disabled: disabled2,
16273 focusableWhenDisabled
16274 }
16275 ),
16276 className: classes,
16277 children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
16278 Icon,
16279 {
16280 icon,
16281 size: 24,
16282 className: style_default6.icon
16283 }
16284 )
16285 }
16286 ),
16287 /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Popup, { positioner, children: [
16288 label,
16289 shortcut && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
16290 " ",
16291 /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { "aria-hidden": "true", children: shortcut.displayShortcut })
16292 ] })
16293 ] })
16294 ] }) });
16295 }
16296 );
16297
16298 // packages/ui/build-module/form/primitives/autocomplete/index.mjs
16299 var autocomplete_exports = {};
16300 __export(autocomplete_exports, {
16301 Clear: () => Clear,
16302 Collection: () => Collection,
16303 Empty: () => Empty,
16304 Input: () => Input4,
16305 InputGroup: () => InputGroup,
16306 Item: () => Item,
16307 List: () => List,
16308 ListBody: () => ListBody,
16309 Popup: () => Popup2,
16310 Portal: () => Portal2,
16311 Positioner: () => Positioner2,
16312 Root: () => Root2,
16313 Value: () => Value
16314 });
16315
16316 // packages/ui/build-module/form/primitives/autocomplete/clear.mjs
16317 var import_element26 = __toESM(require_element(), 1);
16318 var import_i18n2 = __toESM(require_i18n(), 1);
16319 var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1);
16320 var DEFAULT_RENDER = ({
16321 "aria-label": ariaLabel = (0, import_i18n2.__)("Clear"),
16322 ...props
16323 }, { disabled: disabled2 }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
16324 IconButton,
16325 {
16326 icon: close_small_default,
16327 focusableWhenDisabled: false,
16328 disabled: disabled2,
16329 "aria-hidden": disabled2 || void 0,
16330 size: "small",
16331 variant: "minimal",
16332 tone: "neutral",
16333 label: ariaLabel,
16334 ...props
16335 }
16336 );
16337 var Clear = (0, import_element26.forwardRef)(
16338 function Clear2({ render = DEFAULT_RENDER, ...restProps }, ref) {
16339 return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
16340 index_parts_exports.Clear,
16341 {
16342 ref,
16343 render,
16344 ...restProps
16345 }
16346 );
16347 }
16348 );
16349
16350 // packages/ui/build-module/form/primitives/autocomplete/collection.mjs
16351 var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1);
16352 function Collection({
16353 children,
16354 ...restProps
16355 }) {
16356 return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(index_parts_exports.Collection, { ...restProps, children });
16357 }
16358
16359 // packages/ui/build-module/form/primitives/autocomplete/empty.mjs
16360 var import_element27 = __toESM(require_element(), 1);
16361 var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1);
16362 var STYLE_HASH_ATTRIBUTE8 = "data-wp-hash";
16363 function getRuntime8() {
16364 const globalScope = globalThis;
16365 if (globalScope.__wpStyleRuntime) {
16366 return globalScope.__wpStyleRuntime;
16367 }
16368 globalScope.__wpStyleRuntime = {
16369 documents: /* @__PURE__ */ new Map(),
16370 styles: /* @__PURE__ */ new Map(),
16371 injectedStyles: /* @__PURE__ */ new WeakMap()
16372 };
16373 if (typeof document !== "undefined") {
16374 registerDocument8(document);
16375 }
16376 return globalScope.__wpStyleRuntime;
16377 }
16378 function documentContainsStyleHash8(targetDocument, hash) {
16379 if (!targetDocument.head) {
16380 return false;
16381 }
16382 for (const style of targetDocument.head.querySelectorAll(
16383 `style[${STYLE_HASH_ATTRIBUTE8}]`
16384 )) {
16385 if (style.getAttribute(STYLE_HASH_ATTRIBUTE8) === hash) {
16386 return true;
16387 }
16388 }
16389 return false;
16390 }
16391 function injectStyle8(targetDocument, hash, css) {
16392 if (!targetDocument.head) {
16393 return;
16394 }
16395 const runtime = getRuntime8();
16396 let injectedStyles = runtime.injectedStyles.get(targetDocument);
16397 if (!injectedStyles) {
16398 injectedStyles = /* @__PURE__ */ new Set();
16399 runtime.injectedStyles.set(targetDocument, injectedStyles);
16400 }
16401 if (injectedStyles.has(hash)) {
16402 return;
16403 }
16404 if (documentContainsStyleHash8(targetDocument, hash)) {
16405 injectedStyles.add(hash);
16406 return;
16407 }
16408 const style = targetDocument.createElement("style");
16409 style.setAttribute(STYLE_HASH_ATTRIBUTE8, hash);
16410 style.appendChild(targetDocument.createTextNode(css));
16411 targetDocument.head.appendChild(style);
16412 injectedStyles.add(hash);
16413 }
16414 function registerDocument8(targetDocument) {
16415 const runtime = getRuntime8();
16416 runtime.documents.set(
16417 targetDocument,
16418 (runtime.documents.get(targetDocument) ?? 0) + 1
16419 );
16420 for (const [hash, css] of runtime.styles) {
16421 injectStyle8(targetDocument, hash, css);
16422 }
16423 return () => {
16424 const count = runtime.documents.get(targetDocument);
16425 if (count === void 0) {
16426 return;
16427 }
16428 if (count <= 1) {
16429 runtime.documents.delete(targetDocument);
16430 return;
16431 }
16432 runtime.documents.set(targetDocument, count - 1);
16433 };
16434 }
16435 function registerStyle8(hash, css) {
16436 const runtime = getRuntime8();
16437 runtime.styles.set(hash, css);
16438 for (const targetDocument of runtime.documents.keys()) {
16439 injectStyle8(targetDocument, hash, css);
16440 }
16441 }
16442 if (typeof process === "undefined" || true) {
16443 registerStyle8("0b5dc58360", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:0;&[data-side=bottom]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-open]:not([data-starting-style]){opacity:1;transform:translate(0)}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}._684ccb7988365b4f__item{--wp-ui-popup-item-height:40px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:32px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:24px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-bg-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:40px;--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-fg-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}');
16444 }
16445 var item_popup_default = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" };
16446 var Empty = (0, import_element27.forwardRef)(
16447 function Empty2({ className, ...restProps }, ref) {
16448 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
16449 index_parts_exports.Empty,
16450 {
16451 className: clsx_default(item_popup_default.empty, className),
16452 ref,
16453 ...restProps
16454 }
16455 );
16456 }
16457 );
16458
16459 // packages/ui/build-module/form/primitives/autocomplete/input-group.mjs
16460 var import_element28 = __toESM(require_element(), 1);
16461 var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1);
16462 var InputGroup = (0, import_element28.forwardRef)(function InputGroup2(props, ref) {
16463 return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(index_parts_exports.InputGroup, { ref, ...props });
16464 });
16465
16466 // packages/ui/build-module/form/primitives/autocomplete/input.mjs
16467 var import_element32 = __toESM(require_element(), 1);
16468
16469 // packages/ui/build-module/form/primitives/input/input.mjs
16470 var import_element31 = __toESM(require_element(), 1);
16471
16472 // packages/ui/build-module/form/primitives/input-layout/input-layout.mjs
16473 var import_element29 = __toESM(require_element(), 1);
16474 var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1);
16475 var STYLE_HASH_ATTRIBUTE9 = "data-wp-hash";
16476 function getRuntime9() {
16477 const globalScope = globalThis;
16478 if (globalScope.__wpStyleRuntime) {
16479 return globalScope.__wpStyleRuntime;
16480 }
16481 globalScope.__wpStyleRuntime = {
16482 documents: /* @__PURE__ */ new Map(),
16483 styles: /* @__PURE__ */ new Map(),
16484 injectedStyles: /* @__PURE__ */ new WeakMap()
16485 };
16486 if (typeof document !== "undefined") {
16487 registerDocument9(document);
16488 }
16489 return globalScope.__wpStyleRuntime;
16490 }
16491 function documentContainsStyleHash9(targetDocument, hash) {
16492 if (!targetDocument.head) {
16493 return false;
16494 }
16495 for (const style of targetDocument.head.querySelectorAll(
16496 `style[${STYLE_HASH_ATTRIBUTE9}]`
16497 )) {
16498 if (style.getAttribute(STYLE_HASH_ATTRIBUTE9) === hash) {
16499 return true;
16500 }
16501 }
16502 return false;
16503 }
16504 function injectStyle9(targetDocument, hash, css) {
16505 if (!targetDocument.head) {
16506 return;
16507 }
16508 const runtime = getRuntime9();
16509 let injectedStyles = runtime.injectedStyles.get(targetDocument);
16510 if (!injectedStyles) {
16511 injectedStyles = /* @__PURE__ */ new Set();
16512 runtime.injectedStyles.set(targetDocument, injectedStyles);
16513 }
16514 if (injectedStyles.has(hash)) {
16515 return;
16516 }
16517 if (documentContainsStyleHash9(targetDocument, hash)) {
16518 injectedStyles.add(hash);
16519 return;
16520 }
16521 const style = targetDocument.createElement("style");
16522 style.setAttribute(STYLE_HASH_ATTRIBUTE9, hash);
16523 style.appendChild(targetDocument.createTextNode(css));
16524 targetDocument.head.appendChild(style);
16525 injectedStyles.add(hash);
16526 }
16527 function registerDocument9(targetDocument) {
16528 const runtime = getRuntime9();
16529 runtime.documents.set(
16530 targetDocument,
16531 (runtime.documents.get(targetDocument) ?? 0) + 1
16532 );
16533 for (const [hash, css] of runtime.styles) {
16534 injectStyle9(targetDocument, hash, css);
16535 }
16536 return () => {
16537 const count = runtime.documents.get(targetDocument);
16538 if (count === void 0) {
16539 return;
16540 }
16541 if (count <= 1) {
16542 runtime.documents.delete(targetDocument);
16543 return;
16544 }
16545 runtime.documents.set(targetDocument, count - 1);
16546 };
16547 }
16548 function registerStyle9(hash, css) {
16549 const runtime = getRuntime9();
16550 runtime.styles.set(hash, css);
16551 for (const targetDocument of runtime.documents.keys()) {
16552 injectStyle9(targetDocument, hash, css);
16553 }
16554 }
16555 if (typeof process === "undefined" || true) {
16556 registerStyle9("d5c1b736fd", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-fg-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-fg-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}");
16557 }
16558 var global_css_defense_default2 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" };
16559 if (typeof process === "undefined" || true) {
16560 registerStyle9("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
16561 }
16562 var resets_default3 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
16563 if (typeof process === "undefined" || true) {
16564 registerStyle9("cd5ec29fa4", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.cb2baafdc08746bb__input-layout{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-md,12px);background-color:var(--wpds-color-bg-interactive-neutral-weak,#0000);border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:var(--wpds-border-width-xs,1px);color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:max(var(--wpds-typography-font-size-md,13px),16px);height:40px;line-height:1;@media (min-width:600px){font-size:var(--wpds-typography-font-size-md,13px)}&._0c807a84cbb94e0c__is-size-compact{height:32px}&._0c807a84cbb94e0c__is-size-compact,&.ed67cda122dc1e7b__is-size-small{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-sm,8px)}&.ed67cda122dc1e7b__is-size-small{height:24px}&._6fb7104732387680__is-disabled,&:has([data-can-disable-input-layout][data-disabled]){background-color:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000);border-color:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb);color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&._8097270636ca6100__is-borderless{border-color:transparent}&:has(._0d7afad74a057888__input-layout-slot:focus-within){outline:none}&:hover:not(._6fb7104732387680__is-disabled,:has([data-can-disable-input-layout][data-disabled]),._8097270636ca6100__is-borderless){border-color:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e)}}.c192b41a12b4387b__slot-wrapper{display:contents}._0d7afad74a057888__input-layout-slot{align-items:center;display:flex;&._0c952682762ca288__is-padding-minimal{--wp-ui-input-layout-prefix-padding-start:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px));--wp-ui-input-layout-suffix-padding-end:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px))}[data-slot-type=prefix] &{padding-inline-start:var(--wp-ui-input-layout-prefix-padding-start,var(--wp-ui-input-layout-padding-inline))}[data-slot-type=suffix] &{padding-inline-end:var(--wp-ui-input-layout-suffix-padding-end,var(--wp-ui-input-layout-padding-inline))}}}}');
16565 }
16566 var style_default7 = { "input-layout": "cb2baafdc08746bb__input-layout", "is-size-compact": "_0c807a84cbb94e0c__is-size-compact", "is-size-small": "ed67cda122dc1e7b__is-size-small", "is-disabled": "_6fb7104732387680__is-disabled", "is-borderless": "_8097270636ca6100__is-borderless", "input-layout-slot": "_0d7afad74a057888__input-layout-slot", "slot-wrapper": "c192b41a12b4387b__slot-wrapper", "is-padding-minimal": "_0c952682762ca288__is-padding-minimal" };
16567 var InputLayout = (0, import_element29.forwardRef)(
16568 function InputLayout2({
16569 className,
16570 children,
16571 visuallyDisabled,
16572 size: size4 = "default",
16573 isBorderless,
16574 prefix,
16575 suffix,
16576 ...restProps
16577 }, ref) {
16578 return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
16579 "div",
16580 {
16581 ref,
16582 className: clsx_default(
16583 global_css_defense_default2.div,
16584 resets_default3["box-sizing"],
16585 style_default7["input-layout"],
16586 style_default7[`is-size-${size4}`],
16587 visuallyDisabled && style_default7["is-disabled"],
16588 isBorderless && style_default7["is-borderless"],
16589 className
16590 ),
16591 ...restProps,
16592 children: [
16593 import_element29.Children.count(prefix) > 0 && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
16594 "div",
16595 {
16596 className: style_default7["slot-wrapper"],
16597 "data-slot-type": "prefix",
16598 children: prefix
16599 }
16600 ),
16601 children,
16602 import_element29.Children.count(suffix) > 0 && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
16603 "div",
16604 {
16605 className: style_default7["slot-wrapper"],
16606 "data-slot-type": "suffix",
16607 children: suffix
16608 }
16609 )
16610 ]
16611 }
16612 );
16613 }
16614 );
16615
16616 // packages/ui/build-module/form/primitives/input-layout/slot.mjs
16617 var import_element30 = __toESM(require_element(), 1);
16618 var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1);
16619 var STYLE_HASH_ATTRIBUTE10 = "data-wp-hash";
16620 function getRuntime10() {
16621 const globalScope = globalThis;
16622 if (globalScope.__wpStyleRuntime) {
16623 return globalScope.__wpStyleRuntime;
16624 }
16625 globalScope.__wpStyleRuntime = {
16626 documents: /* @__PURE__ */ new Map(),
16627 styles: /* @__PURE__ */ new Map(),
16628 injectedStyles: /* @__PURE__ */ new WeakMap()
16629 };
16630 if (typeof document !== "undefined") {
16631 registerDocument10(document);
16632 }
16633 return globalScope.__wpStyleRuntime;
16634 }
16635 function documentContainsStyleHash10(targetDocument, hash) {
16636 if (!targetDocument.head) {
16637 return false;
16638 }
16639 for (const style of targetDocument.head.querySelectorAll(
16640 `style[${STYLE_HASH_ATTRIBUTE10}]`
16641 )) {
16642 if (style.getAttribute(STYLE_HASH_ATTRIBUTE10) === hash) {
16643 return true;
16644 }
16645 }
16646 return false;
16647 }
16648 function injectStyle10(targetDocument, hash, css) {
16649 if (!targetDocument.head) {
16650 return;
16651 }
16652 const runtime = getRuntime10();
16653 let injectedStyles = runtime.injectedStyles.get(targetDocument);
16654 if (!injectedStyles) {
16655 injectedStyles = /* @__PURE__ */ new Set();
16656 runtime.injectedStyles.set(targetDocument, injectedStyles);
16657 }
16658 if (injectedStyles.has(hash)) {
16659 return;
16660 }
16661 if (documentContainsStyleHash10(targetDocument, hash)) {
16662 injectedStyles.add(hash);
16663 return;
16664 }
16665 const style = targetDocument.createElement("style");
16666 style.setAttribute(STYLE_HASH_ATTRIBUTE10, hash);
16667 style.appendChild(targetDocument.createTextNode(css));
16668 targetDocument.head.appendChild(style);
16669 injectedStyles.add(hash);
16670 }
16671 function registerDocument10(targetDocument) {
16672 const runtime = getRuntime10();
16673 runtime.documents.set(
16674 targetDocument,
16675 (runtime.documents.get(targetDocument) ?? 0) + 1
16676 );
16677 for (const [hash, css] of runtime.styles) {
16678 injectStyle10(targetDocument, hash, css);
16679 }
16680 return () => {
16681 const count = runtime.documents.get(targetDocument);
16682 if (count === void 0) {
16683 return;
16684 }
16685 if (count <= 1) {
16686 runtime.documents.delete(targetDocument);
16687 return;
16688 }
16689 runtime.documents.set(targetDocument, count - 1);
16690 };
16691 }
16692 function registerStyle10(hash, css) {
16693 const runtime = getRuntime10();
16694 runtime.styles.set(hash, css);
16695 for (const targetDocument of runtime.documents.keys()) {
16696 injectStyle10(targetDocument, hash, css);
16697 }
16698 }
16699 if (typeof process === "undefined" || true) {
16700 registerStyle10("cd5ec29fa4", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.cb2baafdc08746bb__input-layout{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-md,12px);background-color:var(--wpds-color-bg-interactive-neutral-weak,#0000);border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:var(--wpds-border-width-xs,1px);color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:max(var(--wpds-typography-font-size-md,13px),16px);height:40px;line-height:1;@media (min-width:600px){font-size:var(--wpds-typography-font-size-md,13px)}&._0c807a84cbb94e0c__is-size-compact{height:32px}&._0c807a84cbb94e0c__is-size-compact,&.ed67cda122dc1e7b__is-size-small{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-sm,8px)}&.ed67cda122dc1e7b__is-size-small{height:24px}&._6fb7104732387680__is-disabled,&:has([data-can-disable-input-layout][data-disabled]){background-color:var(--wpds-color-bg-interactive-neutral-weak-disabled,#0000);border-color:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb);color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&._8097270636ca6100__is-borderless{border-color:transparent}&:has(._0d7afad74a057888__input-layout-slot:focus-within){outline:none}&:hover:not(._6fb7104732387680__is-disabled,:has([data-can-disable-input-layout][data-disabled]),._8097270636ca6100__is-borderless){border-color:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e)}}.c192b41a12b4387b__slot-wrapper{display:contents}._0d7afad74a057888__input-layout-slot{align-items:center;display:flex;&._0c952682762ca288__is-padding-minimal{--wp-ui-input-layout-prefix-padding-start:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px));--wp-ui-input-layout-suffix-padding-end:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px))}[data-slot-type=prefix] &{padding-inline-start:var(--wp-ui-input-layout-prefix-padding-start,var(--wp-ui-input-layout-padding-inline))}[data-slot-type=suffix] &{padding-inline-end:var(--wp-ui-input-layout-suffix-padding-end,var(--wp-ui-input-layout-padding-inline))}}}}');
16701 }
16702 var style_default8 = { "input-layout": "cb2baafdc08746bb__input-layout", "is-size-compact": "_0c807a84cbb94e0c__is-size-compact", "is-size-small": "ed67cda122dc1e7b__is-size-small", "is-disabled": "_6fb7104732387680__is-disabled", "is-borderless": "_8097270636ca6100__is-borderless", "input-layout-slot": "_0d7afad74a057888__input-layout-slot", "slot-wrapper": "c192b41a12b4387b__slot-wrapper", "is-padding-minimal": "_0c952682762ca288__is-padding-minimal" };
16703 var InputLayoutSlot = (0, import_element30.forwardRef)(function InputLayoutSlot2({ padding = "default", className, ...restProps }, ref) {
16704 return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
16705 "div",
16706 {
16707 ref,
16708 className: clsx_default(
16709 style_default8["input-layout-slot"],
16710 style_default8[`is-padding-${padding}`],
16711 className
16712 ),
16713 ...restProps
16714 }
16715 );
16716 });
16717 InputLayoutSlot.displayName = "InputLayout.Slot";
16718
16719 // packages/ui/build-module/form/primitives/input-layout/index.mjs
16720 var InputLayout3 = Object.assign(InputLayout, {
16721 Slot: InputLayoutSlot
16722 });
16723
16724 // packages/ui/build-module/form/primitives/input/input.mjs
16725 var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1);
16726 var STYLE_HASH_ATTRIBUTE11 = "data-wp-hash";
16727 function getRuntime11() {
16728 const globalScope = globalThis;
16729 if (globalScope.__wpStyleRuntime) {
16730 return globalScope.__wpStyleRuntime;
16731 }
16732 globalScope.__wpStyleRuntime = {
16733 documents: /* @__PURE__ */ new Map(),
16734 styles: /* @__PURE__ */ new Map(),
16735 injectedStyles: /* @__PURE__ */ new WeakMap()
16736 };
16737 if (typeof document !== "undefined") {
16738 registerDocument11(document);
16739 }
16740 return globalScope.__wpStyleRuntime;
16741 }
16742 function documentContainsStyleHash11(targetDocument, hash) {
16743 if (!targetDocument.head) {
16744 return false;
16745 }
16746 for (const style of targetDocument.head.querySelectorAll(
16747 `style[${STYLE_HASH_ATTRIBUTE11}]`
16748 )) {
16749 if (style.getAttribute(STYLE_HASH_ATTRIBUTE11) === hash) {
16750 return true;
16751 }
16752 }
16753 return false;
16754 }
16755 function injectStyle11(targetDocument, hash, css) {
16756 if (!targetDocument.head) {
16757 return;
16758 }
16759 const runtime = getRuntime11();
16760 let injectedStyles = runtime.injectedStyles.get(targetDocument);
16761 if (!injectedStyles) {
16762 injectedStyles = /* @__PURE__ */ new Set();
16763 runtime.injectedStyles.set(targetDocument, injectedStyles);
16764 }
16765 if (injectedStyles.has(hash)) {
16766 return;
16767 }
16768 if (documentContainsStyleHash11(targetDocument, hash)) {
16769 injectedStyles.add(hash);
16770 return;
16771 }
16772 const style = targetDocument.createElement("style");
16773 style.setAttribute(STYLE_HASH_ATTRIBUTE11, hash);
16774 style.appendChild(targetDocument.createTextNode(css));
16775 targetDocument.head.appendChild(style);
16776 injectedStyles.add(hash);
16777 }
16778 function registerDocument11(targetDocument) {
16779 const runtime = getRuntime11();
16780 runtime.documents.set(
16781 targetDocument,
16782 (runtime.documents.get(targetDocument) ?? 0) + 1
16783 );
16784 for (const [hash, css] of runtime.styles) {
16785 injectStyle11(targetDocument, hash, css);
16786 }
16787 return () => {
16788 const count = runtime.documents.get(targetDocument);
16789 if (count === void 0) {
16790 return;
16791 }
16792 if (count <= 1) {
16793 runtime.documents.delete(targetDocument);
16794 return;
16795 }
16796 runtime.documents.set(targetDocument, count - 1);
16797 };
16798 }
16799 function registerStyle11(hash, css) {
16800 const runtime = getRuntime11();
16801 runtime.styles.set(hash, css);
16802 for (const targetDocument of runtime.documents.keys()) {
16803 injectStyle11(targetDocument, hash, css);
16804 }
16805 }
16806 if (typeof process === "undefined" || true) {
16807 registerStyle11("d5c1b736fd", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-fg-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-fg-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}");
16808 }
16809 var global_css_defense_default3 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" };
16810 if (typeof process === "undefined" || true) {
16811 registerStyle11("693cd16544", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._08e8a2e44959f892__outset-ring--focus,._970d04df7376df67__outset-ring--focus-within-except-active,.c5cb3ee4bddaa8e4__outset-ring--focus-within-visible,.cd83dfc2126a0846__outset-ring--focus-within,.d0541bc9dd9dc7b6__outset-ring--focus-visible,.e25b2bdd7aa21721__outset-ring--focus-except-active,.ecadb9e080e2dfa5__outset-ring--focus-parent-visible{@media not (prefers-reduced-motion){--_gcd-a-transition:outline 0.1s ease-out;transition:outline .1s ease-out}outline:0 solid transparent;outline-offset:1px}._08e8a2e44959f892__outset-ring--focus:focus,._970d04df7376df67__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.c5cb3ee4bddaa8e4__outset-ring--focus-within-visible:focus-within:has(:focus-visible),.cd83dfc2126a0846__outset-ring--focus-within:focus-within,.d0541bc9dd9dc7b6__outset-ring--focus-visible:focus-visible,.e25b2bdd7aa21721__outset-ring--focus-except-active:focus:not(:active),:focus-visible .ecadb9e080e2dfa5__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9))}}}");
16812 }
16813 var focus_default2 = { "outset-ring--focus": "_08e8a2e44959f892__outset-ring--focus", "outset-ring--focus-except-active": "e25b2bdd7aa21721__outset-ring--focus-except-active", "outset-ring--focus-visible": "d0541bc9dd9dc7b6__outset-ring--focus-visible", "outset-ring--focus-within": "cd83dfc2126a0846__outset-ring--focus-within", "outset-ring--focus-within-except-active": "_970d04df7376df67__outset-ring--focus-within-except-active", "outset-ring--focus-within-visible": "c5cb3ee4bddaa8e4__outset-ring--focus-within-visible", "outset-ring--focus-parent-visible": "ecadb9e080e2dfa5__outset-ring--focus-parent-visible" };
16814 if (typeof process === "undefined" || true) {
16815 registerStyle11("60037ceba6", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._2ae7be2fc1bb17a3__input{--_gcd-input-padding:var(--wp-ui-input-padding-block,0) var(--wp-ui-input-layout-padding-inline,0);background:transparent;border:none;color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);font-family:inherit;font-size:inherit;line-height:inherit;outline:none;padding-block:var(--wp-ui-input-padding-block,0);padding-inline:var(--wp-ui-input-layout-padding-inline,0);width:100%;&::placeholder{color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d)}&:disabled,&[aria-disabled=true]{color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}&[type=email],&[type=url]{direction:ltr}}}}");
16816 }
16817 var style_default9 = { "input": "_2ae7be2fc1bb17a3__input" };
16818 var Input3 = (0, import_element31.forwardRef)(function Input22({ className, size: size4 = "default", prefix, suffix, style, ...restProps }, ref) {
16819 return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
16820 InputLayout3,
16821 {
16822 className: clsx_default(
16823 focus_default2["outset-ring--focus-within"],
16824 className
16825 ),
16826 style,
16827 size: size4,
16828 visuallyDisabled: restProps.disabled,
16829 prefix,
16830 suffix,
16831 children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
16832 Input,
16833 {
16834 ref,
16835 className: clsx_default(global_css_defense_default3.input, style_default9.input),
16836 ...restProps
16837 }
16838 )
16839 }
16840 );
16841 });
16842
16843 // packages/ui/build-module/form/primitives/autocomplete/input.mjs
16844 var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1);
16845 var DEFAULT_RENDER2 = (props) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Input3, { ...props });
16846 var Input4 = (0, import_element32.forwardRef)(
16847 function Input23({ render = DEFAULT_RENDER2, ...restProps }, ref) {
16848 return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
16849 index_parts_exports.Input,
16850 {
16851 ref,
16852 render,
16853 ...restProps
16854 }
16855 );
16856 }
16857 );
16858
16859 // packages/ui/build-module/form/primitives/autocomplete/item.mjs
16860 var import_element33 = __toESM(require_element(), 1);
16861 var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1);
16862 var STYLE_HASH_ATTRIBUTE12 = "data-wp-hash";
16863 function getRuntime12() {
16864 const globalScope = globalThis;
16865 if (globalScope.__wpStyleRuntime) {
16866 return globalScope.__wpStyleRuntime;
16867 }
16868 globalScope.__wpStyleRuntime = {
16869 documents: /* @__PURE__ */ new Map(),
16870 styles: /* @__PURE__ */ new Map(),
16871 injectedStyles: /* @__PURE__ */ new WeakMap()
16872 };
16873 if (typeof document !== "undefined") {
16874 registerDocument12(document);
16875 }
16876 return globalScope.__wpStyleRuntime;
16877 }
16878 function documentContainsStyleHash12(targetDocument, hash) {
16879 if (!targetDocument.head) {
16880 return false;
16881 }
16882 for (const style of targetDocument.head.querySelectorAll(
16883 `style[${STYLE_HASH_ATTRIBUTE12}]`
16884 )) {
16885 if (style.getAttribute(STYLE_HASH_ATTRIBUTE12) === hash) {
16886 return true;
16887 }
16888 }
16889 return false;
16890 }
16891 function injectStyle12(targetDocument, hash, css) {
16892 if (!targetDocument.head) {
16893 return;
16894 }
16895 const runtime = getRuntime12();
16896 let injectedStyles = runtime.injectedStyles.get(targetDocument);
16897 if (!injectedStyles) {
16898 injectedStyles = /* @__PURE__ */ new Set();
16899 runtime.injectedStyles.set(targetDocument, injectedStyles);
16900 }
16901 if (injectedStyles.has(hash)) {
16902 return;
16903 }
16904 if (documentContainsStyleHash12(targetDocument, hash)) {
16905 injectedStyles.add(hash);
16906 return;
16907 }
16908 const style = targetDocument.createElement("style");
16909 style.setAttribute(STYLE_HASH_ATTRIBUTE12, hash);
16910 style.appendChild(targetDocument.createTextNode(css));
16911 targetDocument.head.appendChild(style);
16912 injectedStyles.add(hash);
16913 }
16914 function registerDocument12(targetDocument) {
16915 const runtime = getRuntime12();
16916 runtime.documents.set(
16917 targetDocument,
16918 (runtime.documents.get(targetDocument) ?? 0) + 1
16919 );
16920 for (const [hash, css] of runtime.styles) {
16921 injectStyle12(targetDocument, hash, css);
16922 }
16923 return () => {
16924 const count = runtime.documents.get(targetDocument);
16925 if (count === void 0) {
16926 return;
16927 }
16928 if (count <= 1) {
16929 runtime.documents.delete(targetDocument);
16930 return;
16931 }
16932 runtime.documents.set(targetDocument, count - 1);
16933 };
16934 }
16935 function registerStyle12(hash, css) {
16936 const runtime = getRuntime12();
16937 runtime.styles.set(hash, css);
16938 for (const targetDocument of runtime.documents.keys()) {
16939 injectStyle12(targetDocument, hash, css);
16940 }
16941 }
16942 if (typeof process === "undefined" || true) {
16943 registerStyle12("0b5dc58360", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:0;&[data-side=bottom]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-open]:not([data-starting-style]){opacity:1;transform:translate(0)}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}._684ccb7988365b4f__item{--wp-ui-popup-item-height:40px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:32px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:24px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-bg-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:40px;--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-fg-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}');
16944 }
16945 var item_popup_default2 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" };
16946 if (typeof process === "undefined" || true) {
16947 registerStyle12("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
16948 }
16949 var resets_default4 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
16950 var Item = (0, import_element33.forwardRef)(
16951 function Item2({ className, children, ...restProps }, ref) {
16952 return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
16953 index_parts_exports.Item,
16954 {
16955 className: clsx_default(
16956 resets_default4["box-sizing"],
16957 item_popup_default2.item,
16958 className
16959 ),
16960 ref,
16961 ...restProps,
16962 children
16963 }
16964 );
16965 }
16966 );
16967
16968 // packages/ui/build-module/form/primitives/autocomplete/list.mjs
16969 var import_element34 = __toESM(require_element(), 1);
16970 var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1);
16971 var STYLE_HASH_ATTRIBUTE13 = "data-wp-hash";
16972 function getRuntime13() {
16973 const globalScope = globalThis;
16974 if (globalScope.__wpStyleRuntime) {
16975 return globalScope.__wpStyleRuntime;
16976 }
16977 globalScope.__wpStyleRuntime = {
16978 documents: /* @__PURE__ */ new Map(),
16979 styles: /* @__PURE__ */ new Map(),
16980 injectedStyles: /* @__PURE__ */ new WeakMap()
16981 };
16982 if (typeof document !== "undefined") {
16983 registerDocument13(document);
16984 }
16985 return globalScope.__wpStyleRuntime;
16986 }
16987 function documentContainsStyleHash13(targetDocument, hash) {
16988 if (!targetDocument.head) {
16989 return false;
16990 }
16991 for (const style of targetDocument.head.querySelectorAll(
16992 `style[${STYLE_HASH_ATTRIBUTE13}]`
16993 )) {
16994 if (style.getAttribute(STYLE_HASH_ATTRIBUTE13) === hash) {
16995 return true;
16996 }
16997 }
16998 return false;
16999 }
17000 function injectStyle13(targetDocument, hash, css) {
17001 if (!targetDocument.head) {
17002 return;
17003 }
17004 const runtime = getRuntime13();
17005 let injectedStyles = runtime.injectedStyles.get(targetDocument);
17006 if (!injectedStyles) {
17007 injectedStyles = /* @__PURE__ */ new Set();
17008 runtime.injectedStyles.set(targetDocument, injectedStyles);
17009 }
17010 if (injectedStyles.has(hash)) {
17011 return;
17012 }
17013 if (documentContainsStyleHash13(targetDocument, hash)) {
17014 injectedStyles.add(hash);
17015 return;
17016 }
17017 const style = targetDocument.createElement("style");
17018 style.setAttribute(STYLE_HASH_ATTRIBUTE13, hash);
17019 style.appendChild(targetDocument.createTextNode(css));
17020 targetDocument.head.appendChild(style);
17021 injectedStyles.add(hash);
17022 }
17023 function registerDocument13(targetDocument) {
17024 const runtime = getRuntime13();
17025 runtime.documents.set(
17026 targetDocument,
17027 (runtime.documents.get(targetDocument) ?? 0) + 1
17028 );
17029 for (const [hash, css] of runtime.styles) {
17030 injectStyle13(targetDocument, hash, css);
17031 }
17032 return () => {
17033 const count = runtime.documents.get(targetDocument);
17034 if (count === void 0) {
17035 return;
17036 }
17037 if (count <= 1) {
17038 runtime.documents.delete(targetDocument);
17039 return;
17040 }
17041 runtime.documents.set(targetDocument, count - 1);
17042 };
17043 }
17044 function registerStyle13(hash, css) {
17045 const runtime = getRuntime13();
17046 runtime.styles.set(hash, css);
17047 for (const targetDocument of runtime.documents.keys()) {
17048 injectStyle13(targetDocument, hash, css);
17049 }
17050 }
17051 if (typeof process === "undefined" || true) {
17052 registerStyle13("0b5dc58360", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:0;&[data-side=bottom]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-open]:not([data-starting-style]){opacity:1;transform:translate(0)}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}._684ccb7988365b4f__item{--wp-ui-popup-item-height:40px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:32px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:24px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-bg-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:40px;--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-fg-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}');
17053 }
17054 var item_popup_default3 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" };
17055 var List = (0, import_element34.forwardRef)(
17056 function List2({ className, ...restProps }, ref) {
17057 return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
17058 index_parts_exports.List,
17059 {
17060 className: clsx_default(item_popup_default3.list, className),
17061 ref,
17062 ...restProps
17063 }
17064 );
17065 }
17066 );
17067
17068 // packages/ui/build-module/form/primitives/autocomplete/list-body.mjs
17069 var import_element35 = __toESM(require_element(), 1);
17070 var STYLE_HASH_ATTRIBUTE14 = "data-wp-hash";
17071 function getRuntime14() {
17072 const globalScope = globalThis;
17073 if (globalScope.__wpStyleRuntime) {
17074 return globalScope.__wpStyleRuntime;
17075 }
17076 globalScope.__wpStyleRuntime = {
17077 documents: /* @__PURE__ */ new Map(),
17078 styles: /* @__PURE__ */ new Map(),
17079 injectedStyles: /* @__PURE__ */ new WeakMap()
17080 };
17081 if (typeof document !== "undefined") {
17082 registerDocument14(document);
17083 }
17084 return globalScope.__wpStyleRuntime;
17085 }
17086 function documentContainsStyleHash14(targetDocument, hash) {
17087 if (!targetDocument.head) {
17088 return false;
17089 }
17090 for (const style of targetDocument.head.querySelectorAll(
17091 `style[${STYLE_HASH_ATTRIBUTE14}]`
17092 )) {
17093 if (style.getAttribute(STYLE_HASH_ATTRIBUTE14) === hash) {
17094 return true;
17095 }
17096 }
17097 return false;
17098 }
17099 function injectStyle14(targetDocument, hash, css) {
17100 if (!targetDocument.head) {
17101 return;
17102 }
17103 const runtime = getRuntime14();
17104 let injectedStyles = runtime.injectedStyles.get(targetDocument);
17105 if (!injectedStyles) {
17106 injectedStyles = /* @__PURE__ */ new Set();
17107 runtime.injectedStyles.set(targetDocument, injectedStyles);
17108 }
17109 if (injectedStyles.has(hash)) {
17110 return;
17111 }
17112 if (documentContainsStyleHash14(targetDocument, hash)) {
17113 injectedStyles.add(hash);
17114 return;
17115 }
17116 const style = targetDocument.createElement("style");
17117 style.setAttribute(STYLE_HASH_ATTRIBUTE14, hash);
17118 style.appendChild(targetDocument.createTextNode(css));
17119 targetDocument.head.appendChild(style);
17120 injectedStyles.add(hash);
17121 }
17122 function registerDocument14(targetDocument) {
17123 const runtime = getRuntime14();
17124 runtime.documents.set(
17125 targetDocument,
17126 (runtime.documents.get(targetDocument) ?? 0) + 1
17127 );
17128 for (const [hash, css] of runtime.styles) {
17129 injectStyle14(targetDocument, hash, css);
17130 }
17131 return () => {
17132 const count = runtime.documents.get(targetDocument);
17133 if (count === void 0) {
17134 return;
17135 }
17136 if (count <= 1) {
17137 runtime.documents.delete(targetDocument);
17138 return;
17139 }
17140 runtime.documents.set(targetDocument, count - 1);
17141 };
17142 }
17143 function registerStyle14(hash, css) {
17144 const runtime = getRuntime14();
17145 runtime.styles.set(hash, css);
17146 for (const targetDocument of runtime.documents.keys()) {
17147 injectStyle14(targetDocument, hash, css);
17148 }
17149 }
17150 if (typeof process === "undefined" || true) {
17151 registerStyle14("0b5dc58360", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:0;&[data-side=bottom]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-open]:not([data-starting-style]){opacity:1;transform:translate(0)}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}._684ccb7988365b4f__item{--wp-ui-popup-item-height:40px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:32px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:24px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-bg-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:40px;--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-fg-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}');
17152 }
17153 var item_popup_default4 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" };
17154 var ListBody = (0, import_element35.forwardRef)(
17155 function ListBody2({ render, ...props }, ref) {
17156 const element = useRender({
17157 defaultTagName: "div",
17158 render,
17159 ref,
17160 props: mergeProps(
17161 { className: item_popup_default4["list-scrollable-container"] },
17162 props
17163 )
17164 });
17165 return element;
17166 }
17167 );
17168
17169 // packages/ui/build-module/form/primitives/autocomplete/popup.mjs
17170 var import_element38 = __toESM(require_element(), 1);
17171 var import_theme2 = __toESM(require_theme(), 1);
17172
17173 // packages/ui/build-module/form/primitives/autocomplete/portal.mjs
17174 var import_element36 = __toESM(require_element(), 1);
17175 var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1);
17176 var Portal2 = (0, import_element36.forwardRef)(
17177 function AutocompletePortal({ container, ...restProps }, ref) {
17178 return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
17179 index_parts_exports.Portal,
17180 {
17181 container: container ?? getWpCompatOverlaySlot(),
17182 ...restProps,
17183 ref
17184 }
17185 );
17186 }
17187 );
17188
17189 // packages/ui/build-module/form/primitives/autocomplete/positioner.mjs
17190 var import_element37 = __toESM(require_element(), 1);
17191
17192 // packages/ui/build-module/form/primitives/constants.mjs
17193 var ITEM_POPUP_POSITIONER_PROPS = {
17194 align: "start",
17195 sideOffset: 8,
17196 collisionPadding: 12
17197 };
17198
17199 // packages/ui/build-module/form/primitives/autocomplete/positioner.mjs
17200 var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1);
17201 var STYLE_HASH_ATTRIBUTE15 = "data-wp-hash";
17202 function getRuntime15() {
17203 const globalScope = globalThis;
17204 if (globalScope.__wpStyleRuntime) {
17205 return globalScope.__wpStyleRuntime;
17206 }
17207 globalScope.__wpStyleRuntime = {
17208 documents: /* @__PURE__ */ new Map(),
17209 styles: /* @__PURE__ */ new Map(),
17210 injectedStyles: /* @__PURE__ */ new WeakMap()
17211 };
17212 if (typeof document !== "undefined") {
17213 registerDocument15(document);
17214 }
17215 return globalScope.__wpStyleRuntime;
17216 }
17217 function documentContainsStyleHash15(targetDocument, hash) {
17218 if (!targetDocument.head) {
17219 return false;
17220 }
17221 for (const style of targetDocument.head.querySelectorAll(
17222 `style[${STYLE_HASH_ATTRIBUTE15}]`
17223 )) {
17224 if (style.getAttribute(STYLE_HASH_ATTRIBUTE15) === hash) {
17225 return true;
17226 }
17227 }
17228 return false;
17229 }
17230 function injectStyle15(targetDocument, hash, css) {
17231 if (!targetDocument.head) {
17232 return;
17233 }
17234 const runtime = getRuntime15();
17235 let injectedStyles = runtime.injectedStyles.get(targetDocument);
17236 if (!injectedStyles) {
17237 injectedStyles = /* @__PURE__ */ new Set();
17238 runtime.injectedStyles.set(targetDocument, injectedStyles);
17239 }
17240 if (injectedStyles.has(hash)) {
17241 return;
17242 }
17243 if (documentContainsStyleHash15(targetDocument, hash)) {
17244 injectedStyles.add(hash);
17245 return;
17246 }
17247 const style = targetDocument.createElement("style");
17248 style.setAttribute(STYLE_HASH_ATTRIBUTE15, hash);
17249 style.appendChild(targetDocument.createTextNode(css));
17250 targetDocument.head.appendChild(style);
17251 injectedStyles.add(hash);
17252 }
17253 function registerDocument15(targetDocument) {
17254 const runtime = getRuntime15();
17255 runtime.documents.set(
17256 targetDocument,
17257 (runtime.documents.get(targetDocument) ?? 0) + 1
17258 );
17259 for (const [hash, css] of runtime.styles) {
17260 injectStyle15(targetDocument, hash, css);
17261 }
17262 return () => {
17263 const count = runtime.documents.get(targetDocument);
17264 if (count === void 0) {
17265 return;
17266 }
17267 if (count <= 1) {
17268 runtime.documents.delete(targetDocument);
17269 return;
17270 }
17271 runtime.documents.set(targetDocument, count - 1);
17272 };
17273 }
17274 function registerStyle15(hash, css) {
17275 const runtime = getRuntime15();
17276 runtime.styles.set(hash, css);
17277 for (const targetDocument of runtime.documents.keys()) {
17278 injectStyle15(targetDocument, hash, css);
17279 }
17280 }
17281 if (typeof process === "undefined" || true) {
17282 registerStyle15("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
17283 }
17284 var resets_default5 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
17285 if (typeof process === "undefined" || true) {
17286 registerStyle15("e61eb95308", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._8eb0a29484225eea__positioner{z-index:var(--wp-ui-autocomplete-z-index,initial)}}}");
17287 }
17288 var style_default10 = { "positioner": "_8eb0a29484225eea__positioner" };
17289 var Positioner2 = (0, import_element37.forwardRef)(
17290 function AutocompletePositioner({ className, ...props }, ref) {
17291 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
17292 index_parts_exports.Positioner,
17293 {
17294 ...ITEM_POPUP_POSITIONER_PROPS,
17295 ...props,
17296 ref,
17297 className: clsx_default(
17298 resets_default5["box-sizing"],
17299 style_default10.positioner,
17300 className
17301 )
17302 }
17303 );
17304 }
17305 );
17306
17307 // packages/ui/build-module/form/primitives/autocomplete/popup.mjs
17308 var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1);
17309 var STYLE_HASH_ATTRIBUTE16 = "data-wp-hash";
17310 function getRuntime16() {
17311 const globalScope = globalThis;
17312 if (globalScope.__wpStyleRuntime) {
17313 return globalScope.__wpStyleRuntime;
17314 }
17315 globalScope.__wpStyleRuntime = {
17316 documents: /* @__PURE__ */ new Map(),
17317 styles: /* @__PURE__ */ new Map(),
17318 injectedStyles: /* @__PURE__ */ new WeakMap()
17319 };
17320 if (typeof document !== "undefined") {
17321 registerDocument16(document);
17322 }
17323 return globalScope.__wpStyleRuntime;
17324 }
17325 function documentContainsStyleHash16(targetDocument, hash) {
17326 if (!targetDocument.head) {
17327 return false;
17328 }
17329 for (const style of targetDocument.head.querySelectorAll(
17330 `style[${STYLE_HASH_ATTRIBUTE16}]`
17331 )) {
17332 if (style.getAttribute(STYLE_HASH_ATTRIBUTE16) === hash) {
17333 return true;
17334 }
17335 }
17336 return false;
17337 }
17338 function injectStyle16(targetDocument, hash, css) {
17339 if (!targetDocument.head) {
17340 return;
17341 }
17342 const runtime = getRuntime16();
17343 let injectedStyles = runtime.injectedStyles.get(targetDocument);
17344 if (!injectedStyles) {
17345 injectedStyles = /* @__PURE__ */ new Set();
17346 runtime.injectedStyles.set(targetDocument, injectedStyles);
17347 }
17348 if (injectedStyles.has(hash)) {
17349 return;
17350 }
17351 if (documentContainsStyleHash16(targetDocument, hash)) {
17352 injectedStyles.add(hash);
17353 return;
17354 }
17355 const style = targetDocument.createElement("style");
17356 style.setAttribute(STYLE_HASH_ATTRIBUTE16, hash);
17357 style.appendChild(targetDocument.createTextNode(css));
17358 targetDocument.head.appendChild(style);
17359 injectedStyles.add(hash);
17360 }
17361 function registerDocument16(targetDocument) {
17362 const runtime = getRuntime16();
17363 runtime.documents.set(
17364 targetDocument,
17365 (runtime.documents.get(targetDocument) ?? 0) + 1
17366 );
17367 for (const [hash, css] of runtime.styles) {
17368 injectStyle16(targetDocument, hash, css);
17369 }
17370 return () => {
17371 const count = runtime.documents.get(targetDocument);
17372 if (count === void 0) {
17373 return;
17374 }
17375 if (count <= 1) {
17376 runtime.documents.delete(targetDocument);
17377 return;
17378 }
17379 runtime.documents.set(targetDocument, count - 1);
17380 };
17381 }
17382 function registerStyle16(hash, css) {
17383 const runtime = getRuntime16();
17384 runtime.styles.set(hash, css);
17385 for (const targetDocument of runtime.documents.keys()) {
17386 injectStyle16(targetDocument, hash, css);
17387 }
17388 }
17389 if (typeof process === "undefined" || true) {
17390 registerStyle16("0b5dc58360", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:0;&[data-side=bottom]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-open]:not([data-starting-style]){opacity:1;transform:translate(0)}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}._684ccb7988365b4f__item{--wp-ui-popup-item-height:40px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:32px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:24px;--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-bg-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:40px;--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-fg-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}');
17391 }
17392 var item_popup_default5 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" };
17393 var ThemeProvider2 = unlock(import_theme2.privateApis).ThemeProvider;
17394 var Popup2 = (0, import_element38.forwardRef)(
17395 function Popup22({ className, portal, positioner, ...restProps }, ref) {
17396 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ThemeProvider2, { children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
17397 index_parts_exports.Popup,
17398 {
17399 ref,
17400 className: clsx_default(item_popup_default5.popup, className),
17401 ...restProps
17402 }
17403 ) });
17404 const positionedPopup = renderSlotWithChildren(
17405 positioner,
17406 /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Positioner2, {}),
17407 popupContent
17408 );
17409 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Portal2, {}), positionedPopup);
17410 }
17411 );
17412
17413 // packages/ui/build-module/form/primitives/autocomplete/root.mjs
17414 var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1);
17415 function Root2(props) {
17416 return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(index_parts_exports.Root, { ...props });
17417 }
17418
17419 // packages/ui/build-module/form/primitives/autocomplete/value.mjs
17420 var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1);
17421 function Value(props) {
17422 return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(index_parts_exports.Value, { ...props });
17423 }
17424
17425 // packages/ui/build-module/form/primitives/field/index.mjs
17426 var field_exports = {};
17427 __export(field_exports, {
17428 Control: () => Control,
17429 Description: () => Description,
17430 Details: () => Details,
17431 Item: () => Item3,
17432 Label: () => Label,
17433 Root: () => Root3
17434 });
17435
17436 // packages/ui/build-module/form/primitives/field/root.mjs
17437 var import_element39 = __toESM(require_element(), 1);
17438 var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1);
17439 var STYLE_HASH_ATTRIBUTE17 = "data-wp-hash";
17440 function getRuntime17() {
17441 const globalScope = globalThis;
17442 if (globalScope.__wpStyleRuntime) {
17443 return globalScope.__wpStyleRuntime;
17444 }
17445 globalScope.__wpStyleRuntime = {
17446 documents: /* @__PURE__ */ new Map(),
17447 styles: /* @__PURE__ */ new Map(),
17448 injectedStyles: /* @__PURE__ */ new WeakMap()
17449 };
17450 if (typeof document !== "undefined") {
17451 registerDocument17(document);
17452 }
17453 return globalScope.__wpStyleRuntime;
17454 }
17455 function documentContainsStyleHash17(targetDocument, hash) {
17456 if (!targetDocument.head) {
17457 return false;
17458 }
17459 for (const style of targetDocument.head.querySelectorAll(
17460 `style[${STYLE_HASH_ATTRIBUTE17}]`
17461 )) {
17462 if (style.getAttribute(STYLE_HASH_ATTRIBUTE17) === hash) {
17463 return true;
17464 }
17465 }
17466 return false;
17467 }
17468 function injectStyle17(targetDocument, hash, css) {
17469 if (!targetDocument.head) {
17470 return;
17471 }
17472 const runtime = getRuntime17();
17473 let injectedStyles = runtime.injectedStyles.get(targetDocument);
17474 if (!injectedStyles) {
17475 injectedStyles = /* @__PURE__ */ new Set();
17476 runtime.injectedStyles.set(targetDocument, injectedStyles);
17477 }
17478 if (injectedStyles.has(hash)) {
17479 return;
17480 }
17481 if (documentContainsStyleHash17(targetDocument, hash)) {
17482 injectedStyles.add(hash);
17483 return;
17484 }
17485 const style = targetDocument.createElement("style");
17486 style.setAttribute(STYLE_HASH_ATTRIBUTE17, hash);
17487 style.appendChild(targetDocument.createTextNode(css));
17488 targetDocument.head.appendChild(style);
17489 injectedStyles.add(hash);
17490 }
17491 function registerDocument17(targetDocument) {
17492 const runtime = getRuntime17();
17493 runtime.documents.set(
17494 targetDocument,
17495 (runtime.documents.get(targetDocument) ?? 0) + 1
17496 );
17497 for (const [hash, css] of runtime.styles) {
17498 injectStyle17(targetDocument, hash, css);
17499 }
17500 return () => {
17501 const count = runtime.documents.get(targetDocument);
17502 if (count === void 0) {
17503 return;
17504 }
17505 if (count <= 1) {
17506 runtime.documents.delete(targetDocument);
17507 return;
17508 }
17509 runtime.documents.set(targetDocument, count - 1);
17510 };
17511 }
17512 function registerStyle17(hash, css) {
17513 const runtime = getRuntime17();
17514 runtime.styles.set(hash, css);
17515 for (const targetDocument of runtime.documents.keys()) {
17516 injectStyle17(targetDocument, hash, css);
17517 }
17518 }
17519 if (typeof process === "undefined" || true) {
17520 registerStyle17("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
17521 }
17522 var resets_default6 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
17523 var DEFAULT_RENDER3 = (props) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Stack, { ...props, direction: "column", gap: "sm" });
17524 var Root3 = (0, import_element39.forwardRef)(function Root22({ className, render = DEFAULT_RENDER3, ...restProps }, ref) {
17525 return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
17526 index_parts_exports2.Root,
17527 {
17528 ref,
17529 className: clsx_default(resets_default6["box-sizing"], className),
17530 render,
17531 ...restProps
17532 }
17533 );
17534 });
17535
17536 // packages/ui/build-module/form/primitives/field/item.mjs
17537 var import_element40 = __toESM(require_element(), 1);
17538 var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1);
17539 var Item3 = (0, import_element40.forwardRef)(function Item22(props, ref) {
17540 return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(index_parts_exports2.Item, { ref, ...props });
17541 });
17542
17543 // packages/ui/build-module/form/primitives/field/label.mjs
17544 var import_element42 = __toESM(require_element(), 1);
17545
17546 // packages/ui/build-module/visually-hidden/visually-hidden.mjs
17547 var import_element41 = __toESM(require_element(), 1);
17548 var STYLE_HASH_ATTRIBUTE18 = "data-wp-hash";
17549 function getRuntime18() {
17550 const globalScope = globalThis;
17551 if (globalScope.__wpStyleRuntime) {
17552 return globalScope.__wpStyleRuntime;
17553 }
17554 globalScope.__wpStyleRuntime = {
17555 documents: /* @__PURE__ */ new Map(),
17556 styles: /* @__PURE__ */ new Map(),
17557 injectedStyles: /* @__PURE__ */ new WeakMap()
17558 };
17559 if (typeof document !== "undefined") {
17560 registerDocument18(document);
17561 }
17562 return globalScope.__wpStyleRuntime;
17563 }
17564 function documentContainsStyleHash18(targetDocument, hash) {
17565 if (!targetDocument.head) {
17566 return false;
17567 }
17568 for (const style of targetDocument.head.querySelectorAll(
17569 `style[${STYLE_HASH_ATTRIBUTE18}]`
17570 )) {
17571 if (style.getAttribute(STYLE_HASH_ATTRIBUTE18) === hash) {
17572 return true;
17573 }
17574 }
17575 return false;
17576 }
17577 function injectStyle18(targetDocument, hash, css) {
17578 if (!targetDocument.head) {
17579 return;
17580 }
17581 const runtime = getRuntime18();
17582 let injectedStyles = runtime.injectedStyles.get(targetDocument);
17583 if (!injectedStyles) {
17584 injectedStyles = /* @__PURE__ */ new Set();
17585 runtime.injectedStyles.set(targetDocument, injectedStyles);
17586 }
17587 if (injectedStyles.has(hash)) {
17588 return;
17589 }
17590 if (documentContainsStyleHash18(targetDocument, hash)) {
17591 injectedStyles.add(hash);
17592 return;
17593 }
17594 const style = targetDocument.createElement("style");
17595 style.setAttribute(STYLE_HASH_ATTRIBUTE18, hash);
17596 style.appendChild(targetDocument.createTextNode(css));
17597 targetDocument.head.appendChild(style);
17598 injectedStyles.add(hash);
17599 }
17600 function registerDocument18(targetDocument) {
17601 const runtime = getRuntime18();
17602 runtime.documents.set(
17603 targetDocument,
17604 (runtime.documents.get(targetDocument) ?? 0) + 1
17605 );
17606 for (const [hash, css] of runtime.styles) {
17607 injectStyle18(targetDocument, hash, css);
17608 }
17609 return () => {
17610 const count = runtime.documents.get(targetDocument);
17611 if (count === void 0) {
17612 return;
17613 }
17614 if (count <= 1) {
17615 runtime.documents.delete(targetDocument);
17616 return;
17617 }
17618 runtime.documents.set(targetDocument, count - 1);
17619 };
17620 }
17621 function registerStyle18(hash, css) {
17622 const runtime = getRuntime18();
17623 runtime.styles.set(hash, css);
17624 for (const targetDocument of runtime.documents.keys()) {
17625 injectStyle18(targetDocument, hash, css);
17626 }
17627 }
17628 if (typeof process === "undefined" || true) {
17629 registerStyle18("fa606a57ae", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}}");
17630 }
17631 var style_default11 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" };
17632 var VisuallyHidden = (0, import_element41.forwardRef)(
17633 function VisuallyHidden2({ render, ...restProps }, ref) {
17634 const element = useRender({
17635 render,
17636 ref,
17637 props: mergeProps(
17638 { className: style_default11["visually-hidden"] },
17639 restProps,
17640 {
17641 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it.
17642 "data-visually-hidden": ""
17643 }
17644 )
17645 });
17646 return element;
17647 }
17648 );
17649
17650 // packages/ui/build-module/form/primitives/field/label.mjs
17651 var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1);
17652 var STYLE_HASH_ATTRIBUTE19 = "data-wp-hash";
17653 function getRuntime19() {
17654 const globalScope = globalThis;
17655 if (globalScope.__wpStyleRuntime) {
17656 return globalScope.__wpStyleRuntime;
17657 }
17658 globalScope.__wpStyleRuntime = {
17659 documents: /* @__PURE__ */ new Map(),
17660 styles: /* @__PURE__ */ new Map(),
17661 injectedStyles: /* @__PURE__ */ new WeakMap()
17662 };
17663 if (typeof document !== "undefined") {
17664 registerDocument19(document);
17665 }
17666 return globalScope.__wpStyleRuntime;
17667 }
17668 function documentContainsStyleHash19(targetDocument, hash) {
17669 if (!targetDocument.head) {
17670 return false;
17671 }
17672 for (const style of targetDocument.head.querySelectorAll(
17673 `style[${STYLE_HASH_ATTRIBUTE19}]`
17674 )) {
17675 if (style.getAttribute(STYLE_HASH_ATTRIBUTE19) === hash) {
17676 return true;
17677 }
17678 }
17679 return false;
17680 }
17681 function injectStyle19(targetDocument, hash, css) {
17682 if (!targetDocument.head) {
17683 return;
17684 }
17685 const runtime = getRuntime19();
17686 let injectedStyles = runtime.injectedStyles.get(targetDocument);
17687 if (!injectedStyles) {
17688 injectedStyles = /* @__PURE__ */ new Set();
17689 runtime.injectedStyles.set(targetDocument, injectedStyles);
17690 }
17691 if (injectedStyles.has(hash)) {
17692 return;
17693 }
17694 if (documentContainsStyleHash19(targetDocument, hash)) {
17695 injectedStyles.add(hash);
17696 return;
17697 }
17698 const style = targetDocument.createElement("style");
17699 style.setAttribute(STYLE_HASH_ATTRIBUTE19, hash);
17700 style.appendChild(targetDocument.createTextNode(css));
17701 targetDocument.head.appendChild(style);
17702 injectedStyles.add(hash);
17703 }
17704 function registerDocument19(targetDocument) {
17705 const runtime = getRuntime19();
17706 runtime.documents.set(
17707 targetDocument,
17708 (runtime.documents.get(targetDocument) ?? 0) + 1
17709 );
17710 for (const [hash, css] of runtime.styles) {
17711 injectStyle19(targetDocument, hash, css);
17712 }
17713 return () => {
17714 const count = runtime.documents.get(targetDocument);
17715 if (count === void 0) {
17716 return;
17717 }
17718 if (count <= 1) {
17719 runtime.documents.delete(targetDocument);
17720 return;
17721 }
17722 runtime.documents.set(targetDocument, count - 1);
17723 };
17724 }
17725 function registerStyle19(hash, css) {
17726 const runtime = getRuntime19();
17727 runtime.styles.set(hash, css);
17728 for (const targetDocument of runtime.documents.keys()) {
17729 injectStyle19(targetDocument, hash, css);
17730 }
17731 }
17732 if (typeof process === "undefined" || true) {
17733 registerStyle19("4b51d71f28", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-medium,499);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;color:var(--wpds-color-fg-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}');
17734 }
17735 var field_default = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" };
17736 var Label = (0, import_element42.forwardRef)(
17737 function Label2({ className, hideFromVision, variant, ...restProps }, ref) {
17738 const label = /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
17739 index_parts_exports2.Label,
17740 {
17741 ref,
17742 className: clsx_default(
17743 field_default.label,
17744 variant && field_default[`is-${variant}`],
17745 className
17746 ),
17747 ...restProps
17748 }
17749 );
17750 if (hideFromVision) {
17751 return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(VisuallyHidden, { render: label });
17752 }
17753 return label;
17754 }
17755 );
17756
17757 // packages/ui/build-module/form/primitives/field/description.mjs
17758 var import_element43 = __toESM(require_element(), 1);
17759 var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1);
17760 var STYLE_HASH_ATTRIBUTE20 = "data-wp-hash";
17761 function getRuntime20() {
17762 const globalScope = globalThis;
17763 if (globalScope.__wpStyleRuntime) {
17764 return globalScope.__wpStyleRuntime;
17765 }
17766 globalScope.__wpStyleRuntime = {
17767 documents: /* @__PURE__ */ new Map(),
17768 styles: /* @__PURE__ */ new Map(),
17769 injectedStyles: /* @__PURE__ */ new WeakMap()
17770 };
17771 if (typeof document !== "undefined") {
17772 registerDocument20(document);
17773 }
17774 return globalScope.__wpStyleRuntime;
17775 }
17776 function documentContainsStyleHash20(targetDocument, hash) {
17777 if (!targetDocument.head) {
17778 return false;
17779 }
17780 for (const style of targetDocument.head.querySelectorAll(
17781 `style[${STYLE_HASH_ATTRIBUTE20}]`
17782 )) {
17783 if (style.getAttribute(STYLE_HASH_ATTRIBUTE20) === hash) {
17784 return true;
17785 }
17786 }
17787 return false;
17788 }
17789 function injectStyle20(targetDocument, hash, css) {
17790 if (!targetDocument.head) {
17791 return;
17792 }
17793 const runtime = getRuntime20();
17794 let injectedStyles = runtime.injectedStyles.get(targetDocument);
17795 if (!injectedStyles) {
17796 injectedStyles = /* @__PURE__ */ new Set();
17797 runtime.injectedStyles.set(targetDocument, injectedStyles);
17798 }
17799 if (injectedStyles.has(hash)) {
17800 return;
17801 }
17802 if (documentContainsStyleHash20(targetDocument, hash)) {
17803 injectedStyles.add(hash);
17804 return;
17805 }
17806 const style = targetDocument.createElement("style");
17807 style.setAttribute(STYLE_HASH_ATTRIBUTE20, hash);
17808 style.appendChild(targetDocument.createTextNode(css));
17809 targetDocument.head.appendChild(style);
17810 injectedStyles.add(hash);
17811 }
17812 function registerDocument20(targetDocument) {
17813 const runtime = getRuntime20();
17814 runtime.documents.set(
17815 targetDocument,
17816 (runtime.documents.get(targetDocument) ?? 0) + 1
17817 );
17818 for (const [hash, css] of runtime.styles) {
17819 injectStyle20(targetDocument, hash, css);
17820 }
17821 return () => {
17822 const count = runtime.documents.get(targetDocument);
17823 if (count === void 0) {
17824 return;
17825 }
17826 if (count <= 1) {
17827 runtime.documents.delete(targetDocument);
17828 return;
17829 }
17830 runtime.documents.set(targetDocument, count - 1);
17831 };
17832 }
17833 function registerStyle20(hash, css) {
17834 const runtime = getRuntime20();
17835 runtime.styles.set(hash, css);
17836 for (const targetDocument of runtime.documents.keys()) {
17837 injectStyle20(targetDocument, hash, css);
17838 }
17839 }
17840 if (typeof process === "undefined" || true) {
17841 registerStyle20("d5c1b736fd", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-fg-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-fg-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}");
17842 }
17843 var global_css_defense_default4 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" };
17844 if (typeof process === "undefined" || true) {
17845 registerStyle20("4b51d71f28", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-medium,499);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;color:var(--wpds-color-fg-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}');
17846 }
17847 var field_default2 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" };
17848 var Description = (0, import_element43.forwardRef)(function Description2({ className, ...restProps }, ref) {
17849 return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
17850 index_parts_exports2.Description,
17851 {
17852 ref,
17853 className: clsx_default(
17854 global_css_defense_default4.p,
17855 field_default2.description,
17856 className
17857 ),
17858 ...restProps
17859 }
17860 );
17861 });
17862
17863 // packages/ui/build-module/form/primitives/field/details.mjs
17864 var import_element44 = __toESM(require_element(), 1);
17865 var import_i18n3 = __toESM(require_i18n(), 1);
17866 var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1);
17867 var STYLE_HASH_ATTRIBUTE21 = "data-wp-hash";
17868 function getRuntime21() {
17869 const globalScope = globalThis;
17870 if (globalScope.__wpStyleRuntime) {
17871 return globalScope.__wpStyleRuntime;
17872 }
17873 globalScope.__wpStyleRuntime = {
17874 documents: /* @__PURE__ */ new Map(),
17875 styles: /* @__PURE__ */ new Map(),
17876 injectedStyles: /* @__PURE__ */ new WeakMap()
17877 };
17878 if (typeof document !== "undefined") {
17879 registerDocument21(document);
17880 }
17881 return globalScope.__wpStyleRuntime;
17882 }
17883 function documentContainsStyleHash21(targetDocument, hash) {
17884 if (!targetDocument.head) {
17885 return false;
17886 }
17887 for (const style of targetDocument.head.querySelectorAll(
17888 `style[${STYLE_HASH_ATTRIBUTE21}]`
17889 )) {
17890 if (style.getAttribute(STYLE_HASH_ATTRIBUTE21) === hash) {
17891 return true;
17892 }
17893 }
17894 return false;
17895 }
17896 function injectStyle21(targetDocument, hash, css) {
17897 if (!targetDocument.head) {
17898 return;
17899 }
17900 const runtime = getRuntime21();
17901 let injectedStyles = runtime.injectedStyles.get(targetDocument);
17902 if (!injectedStyles) {
17903 injectedStyles = /* @__PURE__ */ new Set();
17904 runtime.injectedStyles.set(targetDocument, injectedStyles);
17905 }
17906 if (injectedStyles.has(hash)) {
17907 return;
17908 }
17909 if (documentContainsStyleHash21(targetDocument, hash)) {
17910 injectedStyles.add(hash);
17911 return;
17912 }
17913 const style = targetDocument.createElement("style");
17914 style.setAttribute(STYLE_HASH_ATTRIBUTE21, hash);
17915 style.appendChild(targetDocument.createTextNode(css));
17916 targetDocument.head.appendChild(style);
17917 injectedStyles.add(hash);
17918 }
17919 function registerDocument21(targetDocument) {
17920 const runtime = getRuntime21();
17921 runtime.documents.set(
17922 targetDocument,
17923 (runtime.documents.get(targetDocument) ?? 0) + 1
17924 );
17925 for (const [hash, css] of runtime.styles) {
17926 injectStyle21(targetDocument, hash, css);
17927 }
17928 return () => {
17929 const count = runtime.documents.get(targetDocument);
17930 if (count === void 0) {
17931 return;
17932 }
17933 if (count <= 1) {
17934 runtime.documents.delete(targetDocument);
17935 return;
17936 }
17937 runtime.documents.set(targetDocument, count - 1);
17938 };
17939 }
17940 function registerStyle21(hash, css) {
17941 const runtime = getRuntime21();
17942 runtime.styles.set(hash, css);
17943 for (const targetDocument of runtime.documents.keys()) {
17944 injectStyle21(targetDocument, hash, css);
17945 }
17946 }
17947 if (typeof process === "undefined" || true) {
17948 registerStyle21("4b51d71f28", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-medium,499);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;color:var(--wpds-color-fg-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}');
17949 }
17950 var field_default3 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" };
17951 var Details = (0, import_element44.forwardRef)(
17952 function Details2({ className, ...restProps }, ref) {
17953 return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
17954 /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(VisuallyHidden, { render: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(index_parts_exports2.Description, {}), children: (0, import_i18n3.__)("More details follow the field.") }),
17955 /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
17956 "div",
17957 {
17958 ref,
17959 className: clsx_default(field_default3.description, className),
17960 ...restProps
17961 }
17962 )
17963 ] });
17964 }
17965 );
17966
17967 // packages/ui/build-module/form/primitives/field/control.mjs
17968 var import_element45 = __toESM(require_element(), 1);
17969 var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1);
17970 var Control = (0, import_element45.forwardRef)(
17971 function Control2(props, ref) {
17972 return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(index_parts_exports2.Control, { ref, ...props });
17973 }
17974 );
17975
17976 // packages/ui/build-module/form/input-control/input-control.mjs
17977 var import_element46 = __toESM(require_element(), 1);
17978 var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1);
17979 var InputControl = (0, import_element46.forwardRef)(
17980 function InputControl2({
17981 className,
17982 label,
17983 description,
17984 details,
17985 hideLabelFromVision,
17986 ...restProps
17987 }, ref) {
17988 return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(field_exports.Root, { className, children: [
17989 /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(field_exports.Label, { hideFromVision: hideLabelFromVision, children: label }),
17990 /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Input3, { ref, ...restProps }),
17991 description && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(field_exports.Description, { children: description }),
17992 details && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(field_exports.Details, { children: details })
17993 ] });
17994 }
17995 );
17996
17997 // widgets/events/components/location-picker/location-picker.module.css
17998 var location_picker_default = {
17999 locationInput: "location_picker_locationInput"
18000 };
18001
18002 // widgets/events/components/location-picker/location-picker.tsx
18003 var import_jsx_runtime70 = __toESM(require_jsx_runtime());
18004 var DRAFT_DEBOUNCE_MS = 300;
18005 function LocationPicker({
18006 onSubmit = () => {
18007 },
18008 seedInput = "",
18009 hideLabelFromVision = true,
18010 selectButton = true,
18011 onChange
18012 }) {
18013 const locationInputId = (0, import_element47.useId)();
18014 const [locationInput, setLocationInput] = (0, import_element47.useState)(seedInput);
18015 const [locationOptions, setLocationOptions] = (0, import_element47.useState)([]);
18016 const [isLocatingCity, setIsLocatingCity] = (0, import_element47.useState)(false);
18017 const draftTimeoutRef = (0, import_element47.useRef)(
18018 null
18019 );
18020 (0, import_element47.useEffect)(() => {
18021 if (!selectButton || seedInput) {
18022 setLocationInput(seedInput);
18023 }
18024 }, [selectButton, seedInput]);
18025 const clearDraftTimeout = (0, import_element47.useCallback)(() => {
18026 if (draftTimeoutRef.current) {
18027 clearTimeout(draftTimeoutRef.current);
18028 draftTimeoutRef.current = null;
18029 }
18030 }, []);
18031 const tryPublishDraft = (0, import_element47.useCallback)(() => {
18032 if (selectButton || !onChange) {
18033 return;
18034 }
18035 const draft = locationInput.trim();
18036 const saved = seedInput.trim();
18037 if (draft === saved) {
18038 return;
18039 }
18040 onChange(locationInput);
18041 }, [selectButton, locationInput, onChange, seedInput]);
18042 const scheduleDraftPublish = (0, import_element47.useCallback)(() => {
18043 if (selectButton || !onChange) {
18044 return;
18045 }
18046 clearDraftTimeout();
18047 draftTimeoutRef.current = setTimeout(() => {
18048 draftTimeoutRef.current = null;
18049 tryPublishDraft();
18050 }, DRAFT_DEBOUNCE_MS);
18051 }, [clearDraftTimeout, selectButton, onChange, tryPublishDraft]);
18052 (0, import_element47.useEffect)(() => {
18053 if (selectButton || !onChange) {
18054 clearDraftTimeout();
18055 return;
18056 }
18057 scheduleDraftPublish();
18058 return clearDraftTimeout;
18059 }, [clearDraftTimeout, selectButton, onChange, scheduleDraftPublish]);
18060 const flushDraftPublish = (0, import_element47.useCallback)(() => {
18061 clearDraftTimeout();
18062 tryPublishDraft();
18063 }, [clearDraftTimeout, tryPublishDraft]);
18064 const fillCityFromGeolocation = async () => {
18065 if (!navigator.geolocation || isLocatingCity) {
18066 return;
18067 }
18068 setIsLocatingCity(true);
18069 try {
18070 const position = await new Promise(
18071 (resolve, reject) => {
18072 navigator.geolocation.getCurrentPosition(resolve, reject, {
18073 enableHighAccuracy: false,
18074 timeout: 1e4
18075 });
18076 }
18077 );
18078 const { latitude, longitude } = position.coords;
18079 const response = await fetch(
18080 `https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${latitude}&lon=${longitude}`
18081 );
18082 const data = await response.json();
18083 const city = data.address?.city ?? data.address?.town ?? data.address?.village ?? data.address?.municipality;
18084 if (city) {
18085 setLocationInput(city);
18086 }
18087 } catch {
18088 } finally {
18089 setIsLocatingCity(false);
18090 }
18091 };
18092 (0, import_element47.useEffect)(() => {
18093 const query = locationInput.trim();
18094 if (query.length < 2) {
18095 setLocationOptions([]);
18096 return;
18097 }
18098 const controller = new AbortController();
18099 const timeoutId = setTimeout(async () => {
18100 try {
18101 const params = new URLSearchParams({
18102 q: query,
18103 featureType: "city",
18104 format: "jsonv2",
18105 addressdetails: "1",
18106 limit: "8"
18107 });
18108 const response = await fetch(
18109 `https://nominatim.openstreetmap.org/search?${params}`,
18110 { signal: controller.signal }
18111 );
18112 const data = await response.json();
18113 const seen = /* @__PURE__ */ new Set();
18114 const nextOptions = data.map((place) => {
18115 const city = place.address?.city ?? place.address?.town ?? place.address?.village ?? place.address?.municipality;
18116 const country = place.address?.country;
18117 if (!city) {
18118 return null;
18119 }
18120 const label = country ? `${city}, ${country}` : city;
18121 if (seen.has(label.toLowerCase())) {
18122 return null;
18123 }
18124 seen.add(label.toLowerCase());
18125 return {
18126 id: String(place.place_id),
18127 value: label
18128 };
18129 }).filter(Boolean);
18130 setLocationOptions(nextOptions);
18131 } catch (error2) {
18132 if (error2 instanceof Error && error2.name === "AbortError") {
18133 return;
18134 }
18135 setLocationOptions([]);
18136 }
18137 }, 200);
18138 return () => {
18139 clearTimeout(timeoutId);
18140 controller.abort();
18141 };
18142 }, [locationInput]);
18143 return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
18144 "form",
18145 {
18146 onSubmit: (e) => {
18147 e.preventDefault();
18148 if (selectButton) {
18149 onSubmit(locationInput);
18150 }
18151 },
18152 children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Stack, { direction: "row", align: "start", wrap: "wrap", gap: "sm", children: [
18153 /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
18154 autocomplete_exports.Root,
18155 {
18156 items: locationOptions,
18157 value: locationInput,
18158 onValueChange: setLocationInput,
18159 children: [
18160 /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
18161 autocomplete_exports.Input,
18162 {
18163 id: locationInputId,
18164 className: location_picker_default.locationInput,
18165 render: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
18166 InputControl,
18167 {
18168 autoComplete: "off",
18169 label: (0, import_i18n4.__)("City"),
18170 hideLabelFromVision,
18171 size: "compact",
18172 description: (0, import_i18n4.__)(
18173 "Select a city to view upcoming events."
18174 ),
18175 onValueChange: () => {
18176 },
18177 onBlur: !selectButton ? flushDraftPublish : void 0,
18178 suffix: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(InputLayout3.Slot, { padding: "minimal", children: [
18179 /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(autocomplete_exports.Clear, {}),
18180 /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
18181 IconButton,
18182 {
18183 icon: map_marker_default,
18184 label: (0, import_i18n4.__)(
18185 "Use current location"
18186 ),
18187 onClick: fillCityFromGeolocation,
18188 disabled: isLocatingCity,
18189 size: "small",
18190 variant: "minimal"
18191 }
18192 )
18193 ] })
18194 }
18195 ),
18196 placeholder: (0, import_i18n4.__)("City, like Tokyo\u2026")
18197 }
18198 ),
18199 locationOptions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(autocomplete_exports.Popup, { children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(autocomplete_exports.List, { children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(autocomplete_exports.ListBody, { children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(autocomplete_exports.Collection, { children: (item) => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
18200 autocomplete_exports.Item,
18201 {
18202 value: item,
18203 children: item.value
18204 },
18205 item.id
18206 ) }) }) }) })
18207 ]
18208 }
18209 ),
18210 selectButton && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
18211 Button4,
18212 {
18213 variant: "outline",
18214 size: "compact",
18215 type: "submit",
18216 disabled: !locationInput.trim(),
18217 children: (0, import_i18n4.__)("Select")
18218 }
18219 )
18220 ] })
18221 }
18222 );
18223 }
18224
18225 // widgets/events/components/location-setting-control/location-setting-control.tsx
18226 var import_jsx_runtime71 = __toESM(require_jsx_runtime());
18227 function LocationSettingControl({
18228 data,
18229 field,
18230 onChange,
18231 hideLabelFromVision
18232 }) {
18233 const value = field.getValue({ item: data });
18234 const onLocationChange = (0, import_element48.useCallback)(
18235 (location) => {
18236 onChange(
18237 field.setValue({
18238 item: data,
18239 value: location.trim()
18240 })
18241 );
18242 },
18243 [data, field, onChange]
18244 );
18245 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
18246 LocationPicker,
18247 {
18248 seedInput: value ?? "",
18249 hideLabelFromVision,
18250 selectButton: false,
18251 onChange: onLocationChange
18252 }
18253 );
18254 }
18255
18256 // widgets/events/widget.ts
18257 var widget_default = {
18258 name: "core/events",
18259 title: (0, import_i18n5.__)("WordPress events"),
18260 icon: calendar_default,
18261 attributes: [
18262 {
18263 id: "location",
18264 type: "text",
18265 label: (0, import_i18n5.__)("Event location"),
18266 description: (0, import_i18n5.__)(
18267 "City or region for nearby events. Edits apply when you save this panel."
18268 ),
18269 Edit: LocationSettingControl
18270 }
18271 ]
18272 };
18273 export {
18274 widget_default as default
18275 };
18276 /*! Bundled license information:
18277
18278 use-sync-external-store/cjs/use-sync-external-store-shim.development.js:
18279 (**
18280 * @license React
18281 * use-sync-external-store-shim.development.js
18282 *
18283 * Copyright (c) Meta Platforms, Inc. and affiliates.
18284 *
18285 * This source code is licensed under the MIT license found in the
18286 * LICENSE file in the root directory of this source tree.
18287 *)
18288
18289 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js:
18290 (**
18291 * @license React
18292 * use-sync-external-store-shim/with-selector.development.js
18293 *
18294 * Copyright (c) Meta Platforms, Inc. and affiliates.
18295 *
18296 * This source code is licensed under the MIT license found in the
18297 * LICENSE file in the root directory of this source tree.
18298 *)
18299 */
18300